apache-opennlp-2.3.3-src/0040755 0000000 0000000 00000000000 14523004075 015540 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-brat-annotator/0040755 0000000 0000000 00000000000 14523004075 022144 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-brat-annotator/src/0040755 0000000 0000000 00000000000 14523004075 022733 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-brat-annotator/src/main/0040755 0000000 0000000 00000000000 14523004075 023657 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-brat-annotator/src/main/bin/0040755 0000000 0000000 00000000000 14523004075 024427 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-brat-annotator/src/main/java/0040755 0000000 0000000 00000000000 14523004075 024600 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-brat-annotator/src/main/java/opennlp/0040755 0000000 0000000 00000000000 14523004075 026253 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-brat-annotator/src/main/java/opennlp/bratann/0040755 0000000 0000000 00000000000 14523004075 027700 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-distr/0040755 0000000 0000000 00000000000 14523004075 020336 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-distr/src/0040755 0000000 0000000 00000000000 14523004075 021125 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-distr/src/main/0040755 0000000 0000000 00000000000 14523004075 022051 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-distr/src/main/assembly/0040755 0000000 0000000 00000000000 14523004075 023670 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-distr/src/main/bin/0040755 0000000 0000000 00000000000 14523004075 022621 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-distr/src/main/docker/0040755 0000000 0000000 00000000000 14523004075 023320 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-distr/src/main/readme/0040755 0000000 0000000 00000000000 14523004075 023306 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-distr/src/main/resources/0040755 0000000 0000000 00000000000 14523004075 024063 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/0040755 0000000 0000000 00000000000 14523004075 017610 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/src/0040755 0000000 0000000 00000000000 14523004075 020377 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/src/main/0040755 0000000 0000000 00000000000 14523004075 021323 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/0040755 0000000 0000000 00000000000 14523004075 022244 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/opennlp/0040755 0000000 0000000 00000000000 14523004075 023717 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/opennlp/dl/0040755 0000000 0000000 00000000000 14523004075 024316 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/opennlp/dl/doccat/0040755 0000000 0000000 00000000000 14523004075 025553 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/opennlp/dl/doccat/scoring/0040755 0000000 0000000 00000000000 14523004075 027217 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/opennlp/dl/namefinder/0040755 0000000 0000000 00000000000 14523004075 026426 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/opennlp/dl/vectors/0040755 0000000 0000000 00000000000 14523004075 026003 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/src/test/0040755 0000000 0000000 00000000000 14523004075 021356 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/src/test/java/0040755 0000000 0000000 00000000000 14523004075 022277 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/src/test/java/opennlp/0040755 0000000 0000000 00000000000 14523004075 023752 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/src/test/java/opennlp/dl/0040755 0000000 0000000 00000000000 14523004075 024351 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/src/test/java/opennlp/dl/doccat/0040755 0000000 0000000 00000000000 14523004075 025606 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/src/test/java/opennlp/dl/doccat/scoring/0040755 0000000 0000000 00000000000 14523004075 027252 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/src/test/java/opennlp/dl/namefinder/0040755 0000000 0000000 00000000000 14523004075 026461 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/src/test/java/opennlp/dl/vectors/0040755 0000000 0000000 00000000000 14523004075 026036 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl-gpu/0040755 0000000 0000000 00000000000 14523004075 020401 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-docs/0040755 0000000 0000000 00000000000 14523004075 020141 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-docs/src/0040755 0000000 0000000 00000000000 14523004075 020730 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/0040755 0000000 0000000 00000000000 14523004075 022202 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/css/0040755 0000000 0000000 00000000000 14523004075 022772 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/images/0040755 0000000 0000000 00000000000 14523004075 023447 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-docs/src/main/0040755 0000000 0000000 00000000000 14523004075 021654 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-docs/src/main/resources/0040755 0000000 0000000 00000000000 14523004075 023666 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-docs/src/main/resources/xsl/0040755 0000000 0000000 00000000000 14523004075 024474 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/0040755 0000000 0000000 00000000000 14523004075 022444 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/bin/0040755 0000000 0000000 00000000000 14523004075 023214 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/0040755 0000000 0000000 00000000000 14523004075 023233 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/0040755 0000000 0000000 00000000000 14523004075 024157 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/bin/0040755 0000000 0000000 00000000000 14523004075 024727 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/0040755 0000000 0000000 00000000000 14523004075 025100 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/0040755 0000000 0000000 00000000000 14523004075 026553 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/0040755 0000000 0000000 00000000000 14523004075 030723 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/builder/0040755 0000000 0000000 00000000000 14523004075 032351 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/cmdline/0040755 0000000 0000000 00000000000 14523004075 032336 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/cmdline/builder/0040755 0000000 0000000 00000000000 14523004075 033764 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/lemmatizer/0040755 0000000 0000000 00000000000 14523004075 033074 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/tagdict/0040755 0000000 0000000 00000000000 14523004075 032342 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/util/0040755 0000000 0000000 00000000000 14523004075 031700 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/0040755 0000000 0000000 00000000000 14523004075 024212 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/java/0040755 0000000 0000000 00000000000 14523004075 025133 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/java/opennlp/0040755 0000000 0000000 00000000000 14523004075 026606 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/java/opennlp/morfologik/0040755 0000000 0000000 00000000000 14523004075 030756 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/java/opennlp/morfologik/builder/0040755 0000000 0000000 00000000000 14523004075 032404 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/java/opennlp/morfologik/lemmatizer/0040755 0000000 0000000 00000000000 14523004075 033127 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/java/opennlp/morfologik/tagdict/0040755 0000000 0000000 00000000000 14523004075 032375 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/resources/0040755 0000000 0000000 00000000000 14523004075 026224 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/0040755 0000000 0000000 00000000000 14523004075 020351 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/bin/0040755 0000000 0000000 00000000000 14523004075 021121 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/0040755 0000000 0000000 00000000000 14523004075 021272 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/de/0040755 0000000 0000000 00000000000 14523004075 021662 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/de/namefinder/0040755 0000000 0000000 00000000000 14523004075 023772 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/en/0040755 0000000 0000000 00000000000 14523004075 021674 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/en/namefinder/0040755 0000000 0000000 00000000000 14523004075 024004 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/en/parser/0040755 0000000 0000000 00000000000 14523004075 023170 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/en/postag/0040755 0000000 0000000 00000000000 14523004075 023171 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/en/tokenizer/0040755 0000000 0000000 00000000000 14523004075 023706 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/es/0040755 0000000 0000000 00000000000 14523004075 021701 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/es/parser/0040755 0000000 0000000 00000000000 14523004075 023175 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/fr/0040755 0000000 0000000 00000000000 14523004075 021701 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/fr/tokenizer/0040755 0000000 0000000 00000000000 14523004075 023713 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/ga/0040755 0000000 0000000 00000000000 14523004075 021661 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/ga/tokenizer/0040755 0000000 0000000 00000000000 14523004075 023673 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/general/0040755 0000000 0000000 00000000000 14523004075 022707 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/general/tokenizer/0040755 0000000 0000000 00000000000 14523004075 024721 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/it/0040755 0000000 0000000 00000000000 14523004075 021706 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/ml/0040755 0000000 0000000 00000000000 14523004075 021702 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/nl/0040755 0000000 0000000 00000000000 14523004075 021703 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/pl/0040755 0000000 0000000 00000000000 14523004075 021705 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/pt/0040755 0000000 0000000 00000000000 14523004075 021715 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/pt/tokenizer/0040755 0000000 0000000 00000000000 14523004075 023727 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/0040755 0000000 0000000 00000000000 14523004075 021140 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/jmh/0040755 0000000 0000000 00000000000 14523004075 021716 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/jmh/java/0040755 0000000 0000000 00000000000 14523004075 022637 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/jmh/java/opennlp/0040755 0000000 0000000 00000000000 14523004075 024312 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/jmh/java/opennlp/tools/0040755 0000000 0000000 00000000000 14523004075 025452 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/jmh/java/opennlp/tools/util/0040755 0000000 0000000 00000000000 14523004075 026427 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/jmh/java/opennlp/tools/util/jvm/0040755 0000000 0000000 00000000000 14523004075 027223 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/jmh/java/opennlp/tools/util/jvm/jmh/0040755 0000000 0000000 00000000000 14523004075 030001 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/0040755 0000000 0000000 00000000000 14523004075 022064 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/0040755 0000000 0000000 00000000000 14523004075 023005 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/0040755 0000000 0000000 00000000000 14523004075 024460 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/0040755 0000000 0000000 00000000000 14523004075 025620 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/0040755 0000000 0000000 00000000000 14523004075 027257 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/0040755 0000000 0000000 00000000000 14523004075 027233 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/0040755 0000000 0000000 00000000000 14523004075 030672 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/dictionary/0040755 0000000 0000000 00000000000 14523004075 031400 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/doccat/0040755 0000000 0000000 00000000000 14523004075 030470 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/entitylinker/0040755 0000000 0000000 00000000000 14523004075 031754 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/0040755 0000000 0000000 00000000000 14523004075 031345 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/languagemodel/0040755 0000000 0000000 00000000000 14523004075 032037 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/lemmatizer/0040755 0000000 0000000 00000000000 14523004075 031404 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/0040755 0000000 0000000 00000000000 14523004075 031014 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/params/0040755 0000000 0000000 00000000000 14523004075 030516 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/0040755 0000000 0000000 00000000000 14523004075 030527 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/0040755 0000000 0000000 00000000000 14523004075 030530 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/0040755 0000000 0000000 00000000000 14523004075 031375 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/0040755 0000000 0000000 00000000000 14523004075 031245 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/commons/0040755 0000000 0000000 00000000000 14523004075 027273 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/dictionary/0040755 0000000 0000000 00000000000 14523004075 027765 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/dictionary/serializer/0040755 0000000 0000000 00000000000 14523004075 032136 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/0040755 0000000 0000000 00000000000 14523004075 027055 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/entitylinker/0040755 0000000 0000000 00000000000 14523004075 030341 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/0040755 0000000 0000000 00000000000 14523004075 027273 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/0040755 0000000 0000000 00000000000 14523004075 027657 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/0040755 0000000 0000000 00000000000 14523004075 030223 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/0040755 0000000 0000000 00000000000 14523004075 030567 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/0040755 0000000 0000000 00000000000 14523004075 030753 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/frenchtreebank/0040755 0000000 0000000 00000000000 14523004075 032254 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/irishsentencebank/0040755 0000000 0000000 00000000000 14523004075 032772 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/leipzig/0040755 0000000 0000000 00000000000 14523004075 030736 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/letsmt/0040755 0000000 0000000 00000000000 14523004075 030603 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/0040755 0000000 0000000 00000000000 14523004075 030216 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/moses/0040755 0000000 0000000 00000000000 14523004075 030421 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/muc/0040755 0000000 0000000 00000000000 14523004075 030057 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/nkjp/0040755 0000000 0000000 00000000000 14523004075 030235 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/0040755 0000000 0000000 00000000000 14523004075 031323 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/0040755 0000000 0000000 00000000000 14523004075 027732 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/languagemodel/0040755 0000000 0000000 00000000000 14523004075 030424 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/0040755 0000000 0000000 00000000000 14523004075 027771 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/log/0040755 0000000 0000000 00000000000 14523004075 026401 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/0040755 0000000 0000000 00000000000 14523004075 026230 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/0040755 0000000 0000000 00000000000 14523004075 027524 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/0040755 0000000 0000000 00000000000 14523004075 030133 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/0040755 0000000 0000000 00000000000 14523004075 032101 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/0040755 0000000 0000000 00000000000 14523004075 027330 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/0040755 0000000 0000000 00000000000 14523004075 030356 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/0040755 0000000 0000000 00000000000 14523004075 030411 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/0040755 0000000 0000000 00000000000 14523004075 027401 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ngram/0040755 0000000 0000000 00000000000 14523004075 026724 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/0040755 0000000 0000000 00000000000 14523004075 027114 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/chunking/0040755 0000000 0000000 00000000000 14523004075 030722 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/lang/0040755 0000000 0000000 00000000000 14523004075 030035 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/lang/en/0040755 0000000 0000000 00000000000 14523004075 030437 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/lang/es/0040755 0000000 0000000 00000000000 14523004075 030444 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/treeinsert/0040755 0000000 0000000 00000000000 14523004075 031300 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/0040755 0000000 0000000 00000000000 14523004075 027115 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/0040755 0000000 0000000 00000000000 14523004075 027762 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/lang/0040755 0000000 0000000 00000000000 14523004075 030703 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/lang/th/0040755 0000000 0000000 00000000000 14523004075 031316 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/0040755 0000000 0000000 00000000000 14523004075 027274 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/0040755 0000000 0000000 00000000000 14523004075 031115 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/0040755 0000000 0000000 00000000000 14523004075 027450 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/lang/0040755 0000000 0000000 00000000000 14523004075 030371 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/lang/en/0040755 0000000 0000000 00000000000 14523004075 030773 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/0040755 0000000 0000000 00000000000 14523004075 026575 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/eval/0040755 0000000 0000000 00000000000 14523004075 027524 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/ext/0040755 0000000 0000000 00000000000 14523004075 027375 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/0040755 0000000 0000000 00000000000 14523004075 030722 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/java/0040755 0000000 0000000 00000000000 14523004075 027516 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/jvm/0040755 0000000 0000000 00000000000 14523004075 027371 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/0040755 0000000 0000000 00000000000 14523004075 027675 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/normalizer/0040755 0000000 0000000 00000000000 14523004075 030757 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/wordvector/0040755 0000000 0000000 00000000000 14523004075 030773 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/resources/0040755 0000000 0000000 00000000000 14523004075 024076 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/resources/opennlp/0040755 0000000 0000000 00000000000 14523004075 025551 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/resources/opennlp/tools/0040755 0000000 0000000 00000000000 14523004075 026711 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/resources/opennlp/tools/namefind/0040755 0000000 0000000 00000000000 14523004075 030472 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/resources/opennlp/tools/postag/0040755 0000000 0000000 00000000000 14523004075 030206 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/main/resources/opennlp/tools/util/0040755 0000000 0000000 00000000000 14523004075 027666 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/0040755 0000000 0000000 00000000000 14523004075 022117 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/0040755 0000000 0000000 00000000000 14523004075 023040 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/0040755 0000000 0000000 00000000000 14523004075 024513 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/0040755 0000000 0000000 00000000000 14523004075 025653 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/chunker/0040755 0000000 0000000 00000000000 14523004075 027312 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/0040755 0000000 0000000 00000000000 14523004075 027266 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/chunker/0040755 0000000 0000000 00000000000 14523004075 030725 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/langdetect/0040755 0000000 0000000 00000000000 14523004075 031400 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/namefind/0040755 0000000 0000000 00000000000 14523004075 031047 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/postag/0040755 0000000 0000000 00000000000 14523004075 030563 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/sentdetect/0040755 0000000 0000000 00000000000 14523004075 031430 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/tokenizer/0040755 0000000 0000000 00000000000 14523004075 031300 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/convert/0040755 0000000 0000000 00000000000 14523004075 027333 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/dictionary/0040755 0000000 0000000 00000000000 14523004075 030020 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/doccat/0040755 0000000 0000000 00000000000 14523004075 027110 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/eval/0040755 0000000 0000000 00000000000 14523004075 026602 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/0040755 0000000 0000000 00000000000 14523004075 027326 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ad/0040755 0000000 0000000 00000000000 14523004075 027712 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/brat/0040755 0000000 0000000 00000000000 14523004075 030256 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/conllu/0040755 0000000 0000000 00000000000 14523004075 030622 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/frenchtreebank/0040755 0000000 0000000 00000000000 14523004075 032307 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/irishsentencebank/0040755 0000000 0000000 00000000000 14523004075 033025 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/leipzig/0040755 0000000 0000000 00000000000 14523004075 030771 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/letsmt/0040755 0000000 0000000 00000000000 14523004075 030636 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/masc/0040755 0000000 0000000 00000000000 14523004075 030251 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/muc/0040755 0000000 0000000 00000000000 14523004075 030112 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/nkjp/0040755 0000000 0000000 00000000000 14523004075 030270 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/langdetect/0040755 0000000 0000000 00000000000 14523004075 027765 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/languagemodel/0040755 0000000 0000000 00000000000 14523004075 030457 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/lemmatizer/0040755 0000000 0000000 00000000000 14523004075 030024 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/0040755 0000000 0000000 00000000000 14523004075 026263 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/0040755 0000000 0000000 00000000000 14523004075 027557 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/io/0040755 0000000 0000000 00000000000 14523004075 030166 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/quasinewton/0040755 0000000 0000000 00000000000 14523004075 032134 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/model/0040755 0000000 0000000 00000000000 14523004075 027363 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/naivebayes/0040755 0000000 0000000 00000000000 14523004075 030411 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/perceptron/0040755 0000000 0000000 00000000000 14523004075 030444 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/0040755 0000000 0000000 00000000000 14523004075 027434 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ngram/0040755 0000000 0000000 00000000000 14523004075 026757 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/0040755 0000000 0000000 00000000000 14523004075 027147 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/chunking/0040755 0000000 0000000 00000000000 14523004075 030755 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/lang/0040755 0000000 0000000 00000000000 14523004075 030070 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/lang/en/0040755 0000000 0000000 00000000000 14523004075 030472 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/treeinsert/0040755 0000000 0000000 00000000000 14523004075 031333 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/postag/0040755 0000000 0000000 00000000000 14523004075 027150 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/0040755 0000000 0000000 00000000000 14523004075 030015 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/stemmer/0040755 0000000 0000000 00000000000 14523004075 027327 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/0040755 0000000 0000000 00000000000 14523004075 027503 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/0040755 0000000 0000000 00000000000 14523004075 026630 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/eval/0040755 0000000 0000000 00000000000 14523004075 027557 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/ext/0040755 0000000 0000000 00000000000 14523004075 027430 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/0040755 0000000 0000000 00000000000 14523004075 030755 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/model/0040755 0000000 0000000 00000000000 14523004075 027730 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/normalizer/0040755 0000000 0000000 00000000000 14523004075 031012 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/wordvector/0040755 0000000 0000000 00000000000 14523004075 031026 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/0040755 0000000 0000000 00000000000 14523004075 024131 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/data/0040755 0000000 0000000 00000000000 14523004075 025042 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/data/opennlp/0040755 0000000 0000000 00000000000 14523004075 026515 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/data/opennlp/maxent/0040755 0000000 0000000 00000000000 14523004075 030011 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/data/opennlp/maxent/io/0040755 0000000 0000000 00000000000 14523004075 030420 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/data/ppa/0040755 0000000 0000000 00000000000 14523004075 025622 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/0040755 0000000 0000000 00000000000 14523004075 025604 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/0040755 0000000 0000000 00000000000 14523004075 026744 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/chunker/0040755 0000000 0000000 00000000000 14523004075 030403 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/doccat/0040755 0000000 0000000 00000000000 14523004075 030201 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/eval/0040755 0000000 0000000 00000000000 14523004075 027673 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/0040755 0000000 0000000 00000000000 14523004075 030417 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/brat/0040755 0000000 0000000 00000000000 14523004075 031347 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/conllu/0040755 0000000 0000000 00000000000 14523004075 031713 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/frenchtreebank/0040755 0000000 0000000 00000000000 14523004075 033400 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/irishsentencebank/0040755 0000000 0000000 00000000000 14523004075 034116 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/leipzig/0040755 0000000 0000000 00000000000 14523004075 032062 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/leipzig/samples/0040755 0000000 0000000 00000000000 14523004075 033526 5ustar00rootroot0000000 0000000 ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_leip0100644 0000000 0000000 00000000163 14523004075 032757 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/leipzig/samples/dontread/ apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/leipzig/samples/dont0040755 0000000 0000000 00000000000 14523004075 034413 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/letsmt/0040755 0000000 0000000 00000000000 14523004075 031727 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/masc/0040755 0000000 0000000 00000000000 14523004075 031342 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/muc/0040755 0000000 0000000 00000000000 14523004075 031203 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/nkjp/0040755 0000000 0000000 00000000000 14523004075 031361 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/lang/0040755 0000000 0000000 00000000000 14523004075 027665 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/languagemodel/0040755 0000000 0000000 00000000000 14523004075 031550 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/lemmatizer/0040755 0000000 0000000 00000000000 14523004075 031115 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/ml/0040755 0000000 0000000 00000000000 14523004075 027354 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/ml/maxent/0040755 0000000 0000000 00000000000 14523004075 030650 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/0040755 0000000 0000000 00000000000 14523004075 030525 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/ngram/0040755 0000000 0000000 00000000000 14523004075 030050 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/parser/0040755 0000000 0000000 00000000000 14523004075 030240 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/postag/0040755 0000000 0000000 00000000000 14523004075 030241 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/0040755 0000000 0000000 00000000000 14523004075 031106 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/tokenize/0040755 0000000 0000000 00000000000 14523004075 030574 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/0040755 0000000 0000000 00000000000 14523004075 027721 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/0040755 0000000 0000000 00000000000 14523004075 032046 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/wordvector/0040755 0000000 0000000 00000000000 14523004075 032117 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/0040755 0000000 0000000 00000000000 14523004075 020144 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/descriptors/0040755 0000000 0000000 00000000000 14523004075 022505 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/metadata/0040755 0000000 0000000 00000000000 14523004075 021724 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/0040755 0000000 0000000 00000000000 14523004075 020733 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/main/0040755 0000000 0000000 00000000000 14523004075 021657 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/0040755 0000000 0000000 00000000000 14523004075 022600 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/0040755 0000000 0000000 00000000000 14523004075 024253 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/0040755 0000000 0000000 00000000000 14523004075 025206 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/chunker/0040755 0000000 0000000 00000000000 14523004075 026645 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/dictionary/0040755 0000000 0000000 00000000000 14523004075 027353 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/doccat/0040755 0000000 0000000 00000000000 14523004075 026443 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/namefind/0040755 0000000 0000000 00000000000 14523004075 026767 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/normalizer/0040755 0000000 0000000 00000000000 14523004075 027370 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/parser/0040755 0000000 0000000 00000000000 14523004075 026502 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/postag/0040755 0000000 0000000 00000000000 14523004075 026503 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/sentdetect/0040755 0000000 0000000 00000000000 14523004075 027350 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/tokenize/0040755 0000000 0000000 00000000000 14523004075 027036 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/util/0040755 0000000 0000000 00000000000 14523004075 026163 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/main/resources/0040755 0000000 0000000 00000000000 14523004075 023671 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/main/resources/opennlp/0040755 0000000 0000000 00000000000 14523004075 025344 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/main/resources/opennlp/uima/0040755 0000000 0000000 00000000000 14523004075 026277 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/main/resources/opennlp/uima/util/0040755 0000000 0000000 00000000000 14523004075 027254 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/test/0040755 0000000 0000000 00000000000 14523004075 021712 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/test/java/0040755 0000000 0000000 00000000000 14523004075 022633 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/test/java/opennlp/0040755 0000000 0000000 00000000000 14523004075 024306 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/test/java/opennlp/uima/0040755 0000000 0000000 00000000000 14523004075 025241 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/test/java/opennlp/uima/dictionary/0040755 0000000 0000000 00000000000 14523004075 027406 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/test/java/opennlp/uima/normalizer/0040755 0000000 0000000 00000000000 14523004075 027423 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/test/java/opennlp/uima/util/0040755 0000000 0000000 00000000000 14523004075 026216 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/0040755 0000000 0000000 00000000000 14523004075 023724 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/cas/0040755 0000000 0000000 00000000000 14523004075 024472 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/test-descriptors/0040755 0000000 0000000 00000000000 14523004075 027242 5ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/KEYS0100644 0000000 0000000 00000115202 14523004075 016234 0ustar00rootroot0000000 0000000 This file contains the PGP keys of various developers. Please don't use them for email unless you have to. Their main purpose is code signing. Examples of importing this file in your keystore: gpg --import KEYS.txt (need pgp and other examples here) Examples of adding your key to this file: pgp -kxa and append it to this file. (pgpk -ll && pgpk -xa ) >> this file. (gpg --list-sigs && gpg --armor --export ) >> this file. ----------------------------------------------------------------------------------- pub 4096R/FE045966 2009-10-13 Key fingerprint = A46D 8682 A850 E44E 4FEC 20EB 8A8A 771F FE04 5966 uid Grant Ingersoll (CODE SIGNING KEY) sub 4096R/72F9E0C0 2009-10-13 -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.7 (Darwin) mQINBErU6JEBEACsovhRB+Z8VrdTU76Qxg8u+0WiSaoilsksGgOaphWvWt0b6rA3 PJSGuDuMJfL+lGqk+aARehiZNbNl0cGYtP4Av/fElTdSr1UlmDeFjG+7Qi7FB6KK vAjv4mw+XM05QRTADjpNkDfAEXGPR1GNE7lOfPvNqvAl9YMLHJOBGlVqq5ZZAPHZ /R6Cg7+5qHbVJKtPqSxAoPJQwg6ADwDZv9nWZfbp2VwVwBkuVxBCRBPFN+WTFmW/ k1LSxUIeHqOG9RXo7S/DYddthE0iBzP3yKA5fs3k9zaQZNAjC92Dj/M4oDiIimqG DJAO7ixpQY2ug9FB4LtWkyeNRnOM1LKd3TbZNqzZt4TuhCI3C5LAfVoXRPxe4T3n 4hvWkL/2THSKfC4u0CLGjw41rXhD86YYiIWdvxVezfESzpqZPhBrAZWfx7kB69pq 8DxWFXCaA31S/L2I6B1ZUmpOhtxg0cDoevipne7jaqRjA7TknOC45+CrpuEkOvQO 8rwHbtshT/JDFLPfq0ruDH21eV4QYP/JLffDGyEtoRRRr4M2DZCFkOCWIPE0l142 5mIi0nqMSj1HK5kuwMQoNAf6vF6P6MYyGWJ8nR13CDtFOnjpOpuxZiTQhlb0cqXj X4yQBjFim8ztGOnHrlSh25OgeKuiCWiCIuyFGykjX21RtJ/AwiOeMr4zkwARAQAB tDhHcmFudCBJbmdlcnNvbGwgKENPREUgU0lHTklORyBLRVkpIDxnc2luZ2Vyc0Bh cGFjaGUub3JnPokCNwQTAQoAIQUCStTokQIbAwULCQgHAwUVCgkICwUWAgMBAAIe AQIXgAAKCRCKincf/gRZZqcfD/4+zhoLTTpTGRNutTyjPnR85aTuMUVtqYNLjEcF PSV7p1OPhsGd3g5iaQtwCMsbWDPRSL+Xvy4/E4D32YjUR026mzAUnICq4Z35TecT StIeMadgSwJ0fNvuzBB8jJfUYW6a91D9TZirEC4fRVRL1bnJvmjm0HnGLQa5uGCl dUMbR04YXU+5V8S6KbRtLwhiVDD/do6XKeS9PGY941sw9182mLZbIbEcQrNWf8s/ eOnobosxg5a0WxKfSZgQfNqkkuNlsRbKwI2gSjzAl030r6pWzduvftqFdnoaOBN/ yNM1BghAhXmb/hxjuQa0x+xan15/lY5FwDX1bdnZcEI0KHJ/FIPFgk59XJVnZYH/ tRI6jqmxQvdliA9q6rt/ctZAYaOhmXI28eeLCmdnZKUZjiG1ORYC0tIYdOYc/nXP NqryDaa2OD2rMy8BM5tfQ/Om/6kavDqn/m8x0jLLuOne5Umeste3yTZ3pbJWc5GF izOCX0FualpLXNBWt3jCooSaj5Gx92pFgoanbtI91ouVNsC24eKOJZYibKLP5fuH B1sNvtPcWE3e99qOzVnolHjbDX4KzXCW+yFad714kK1vdAlDvqIt2OuEuQFggZHS 5G5FbGjgqFUG5D0uckBmu/8lZ82YW2yhuQosa5EOMwChG1sqtsYuddbifFF78AM4 vYnmKohGBBARCgAGBQJK1OocAAoJEMsDFRmoZ+ixVg4An0MfyRmOv0tA8/UibzyK KPrzo1aeAKCIV+M3L+gPT9yJ9843HxyBWL+j6bkCDQRK1OiRARAApG7lRX08hPq5 7KRRUsK6GChneFeZZNNI35VpFQHPe8y/4ej7Ydnr37otEjIvd+14p0M+PF6igCIm IGp2dg57PFfoOVW+apoudAtBpWkdBSjMJQ4pCoLwyv/HSXKW6QxMZeO5OBdT4iAg AT36M2m/lpv5wC7g7SUJDusyFPuYtMtxAkj6TUPTFJBS4+FzhrNBoCXxILDKh0AE N9Sslm37tC7Le84PkiI/k0C//KqNZFQ11Cazyf0CuQKj4gLtkfBTaDenlsufAKNI M2pkIxtLNpx93Gcay2lVKD9Dv2i4EmQID7Vt6fZ2CP+60K7CnepLhapkfWa9Rk71 7fqLIlXCFYdWEmuT614dnDuuuRfm12ZqT3GAx9F0elZ2yv4DrXnW1F60ASJuFnDf RYcbTmw2VVoDiAo2al4uoE7a2yjyv7PExB65k0Uj0n1V4PF413np3r/WLSWBxxNu 9K8oV0KZI/UxvhMULGI23ryNTZAsoi3E44lZ0EUrJTWMRvLuewQdNpNLmlo30HNL VTyoIlWbzhsu4ejKVqLBs/Q9M92c/Um6FJM5owkiGBEvnRtGGWhf89RonCncwg2g i/rk91TTKnhGpYv3tenLjZ6qmlgMgT+KUrElqrLv02kD3xZ7+2zwhaLYWFlZN6wr xXlA/FDOEz3tChqG+41Vf8W26+QnC98AEQEAAYkCHwQYAQoACQUCStTokQIbDAAK CRCKincf/gRZZgzbEACfLTy+6afsT4wAgKYdlc+6w3bBqFnDzoG0JRIrUsVhEnjB xhl+RZA9XMkPvw5iAeNOWSU+SoPz8hGrv3tkGJXqfeThOAB5IVDDW8FDmm57/sl4 2m09B+QHZ7Buw56OD90GoCSm1otkbaIUjoMTbuQxTRb1qykVHO4AgLReaeMb9jqu hqwxyzGzWMqVR01olgvCkSDrooYjA1ltQ84JrJhic5+zdQq1XYIv0dTPP3CcrFcy b6pVx+Y31hK9f0EXoNZv6Ekg6B5L7LUleB3XdCL+jI1eWlQ3DTE7+OkVcehpyygc JFgPVm/0KMPkHTa3Fw55YWbcrwAKGv5fWSj852pbaW/GNgDAiay0MPExEYey2cu5 Pi8dUOmJoqcznBt9qQrrmRNWPRa1Gu9vowM9m90+jtU+Tlxo104tj8gKWVngnPhn v1VPKPblEwJfuqC3DQh3XWzs3AwjKLXXfwznF7slqBRT48BwdLsietnovoTsZXYg 7ks2s/QxklWisZUxrhpZTNeA/WQKxyXwiN2sKxulwjd1PnAz5DeFQWKDNZHyHP+T 1cqtTc96tSwb2XW3iA2uZlD4aTkrOmm3FKbauC/rFmCjkpvwpvqcIdpib4M2DgNx zAZ2cJnxw3f57qc9Yh5qvhDUephwOAlAy8ekc1AmX14F+mwYE3GjcqeGdEbLNw== =GLHu -----END PGP PUBLIC KEY BLOCK----- ----------------------------------------------------------------------------------- pub 2048R/44DC2602 2010-12-03 [expires: 2015-12-02] Key fingerprint = 00E3 DDC8 D514 81CE A29A 01AC C25E 6698 44DC 2602 uid James Kosin uid James Kosin sub 2048R/6131CA9C 2010-12-03 [expires: 2015-12-02] -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.11 (MingW32) mQENBEz4aAgBCAC092PLZqCzabrpoSORtz6asDeXqB2ORDmh8dQJ7x4pcjV6kNac TnfNj4/xAHEKv6RFFhbvLWhB+wlYrh55VybQBmvxdiG9YlnwS9FicGIPS5no0TQb EEyDE77ZXlUVli7vrpEWZ4ziO4FuuqJqRU+DNwRCC4RFJo27ULQQmOJwyS66J+1L PSdO5DS5eQj/kg7Qqk8qSXdfk9QJpgFC9Bw+DM9tojrQ96wGmdUH/l47AFUmLqvw 04uKQGfWm1NVuVCqafoQ1LZAjwNpI81GcbYuFNo2oXJ3leRO+9K8VqHe8Ba0Q5i6 yP4Qv5fBrJYE1Xhf7bqMxlqYpNyEr3VjcCL/ABEBAAG0H0phbWVzIEtvc2luIDxq a29zaW5AYXBhY2hlLm9yZz6JAT4EEwECACgFAkz4abICGyMFCQlmAYAGCwkIBwMC BhUIAgkKCwQWAgMBAh4BAheAAAoJEMJeZphE3CYCuYQIALKG5NlRqs5QavwG8nnX gl56yrVsN3P9GV153I3HCO57nxFqvOAQ1SDXMn5LijOxGDi5e9Ik4+KDq4K7I9Gv W9AOXqPCZZsNW9Nc+PCK1cs/LosQRuYaPib1kBM4z5pk4U86IFo7DvALnG4bmpgF WBEQ54/OdOdJBS2sFMFNOlpujFo8yntuq8NSGrhGGu90z/sIWkzlTlBiWWFAJAm3 hAbir1by3x2U+bTVmi48ZZMGwlaxCY9Di2nHwN5yFZJHl0b4CbdhwOocnCntBY0M Pamh0XBdcFduPZAyFvn8aBChdRUJsaceGRpoJjnGkKw/A2nh6rBUaLfv6MWLpPi8 fVG0I0phbWVzIEtvc2luIDxqYW1lcy5rb3NpbkBnbWFpbC5jb20+iQFBBBMBAgAr AhsjBQkJZgGABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAUCTPhpywIZAQAKCRDC XmaYRNwmArh5CACc2GUgc5jO2K+sir4bW151k68lM+dEdTm1XV9rxUzk4mv2vwFS ABTnrtAyZxA4ubLAS1pfsV7uXY5TSNVRFUTHebdHL5dP24SNvAAWKhS0s0j2ojbe amzi9BEt3SZt5i2TbkfPFyCYTNaSEfIbkuYoq142iNmmNdf2VBFqLBDA/Y5hOXOS y28yeGeMKmj2LUYVamuvFnsUjBIvUgSqyaR/wfwnBdqwKde9VVUlQtrENAHT+fcX 9mV6qxTu0f7Ykna/xOyGrc6tvp0+cSryguWE0z0GikeT9QKsexuiRRrz2rA1gyPR yugpy4p6/t4TSEQtM+O14EAMx+sbtivuWxQLuQENBEz4aAgBCADGtWJtGMK1777F q4N85JLKgFoKHJDHA3xHkdFidxY4cooSExOBOuFpuH6PdU8D76X8tSE86YpVYmJo 8SgdgzNFO+Trwlv/oe3xGC+O0i/teCCmEn1pNlMMvJ7pNRMQKFh7FfS5ObYKRVeF IXKx6JQsjVwmKjgW/tnyhFnDP3jJqEZDmesFD61E2/5rNX+a8qMddfpYR0RHpRR4 WJd6SqKwflkbXkW+t/ln52GHgCkx+WPfbRjE4Zh5KZqmaIkAByraWegLJgQZ+syD /JCa+2flF1ydB+q+sKBRYMPbEDBavB4naNPQzA+Iut/7aD5Ht81uCOBXZDzRMf33 YEqPcsTXABEBAAGJASUEGAECAA8FAkz4aAgCGwwFCQlmAYAACgkQwl5mmETcJgKm Mgf9HB9Jg6WiIYzgmelBAmLlbITlbH5iMVvm3TbBSxN/AD14VFx9Gyd8AiHPdH7B kpQet0URZZmDhL++4uD71wtdb/v1NQlZt8Dyw2BHN8w8iwIk36pxgMLuxdp+Xcs9 L1OZwGEWgAO/PPKWEy6bWcO3MvAU+gEjKKKQMNkkUymbDAr0J7K7qCrH8lhErFTs S9Xv/cxLewQs921l/LUIS+vxL5hUaArhF7yvbLx8OzbAyoaMzDljTbSKH9zM2Ryp gPPQm2kx4WCL1OLc9faqJmYXwsa0O7zq3uJEZx/nCoSgF+u9uqkjdFcwEarBtM6Y M3lA67tQpl6feMswEOgsEql7Bg== =jXKL -----END PGP PUBLIC KEY BLOCK----- ----------------------------------------------------------------------------------- pub 1024D/91DDAC20 2008-01-25 uid J�rn Kottmann sig 3 91DDAC20 2011-02-22 J�rn Kottmann sub 2048g/7B06114B 2008-01-25 sig 91DDAC20 2008-01-25 J�rn Kottmann pub 4096R/5EE31F7F 2011-02-22 uid J�rn Kottmann sig 3 5EE31F7F 2011-02-22 J�rn Kottmann sig 91DDAC20 2011-02-22 J�rn Kottmann sub 4096R/87CFF9D9 2011-02-22 sig 5EE31F7F 2011-02-22 J�rn Kottmann -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG/MacGPG2 v2.0.16 (Darwin) mQGiBEeZsXMRBACW7VN2XbSW2IiAECQbECh3a54Kq7K4nct04zDBerjwxXRYBJaR dGLkZ1iuto/fTWf9LedYctT5teRuLTw+hJNT3GmPl2RKsnQoCYnlrzXfQ8dkGvwH d9RBx/3ax9BE2z9aQW+MbCDFPzJLEKk4XGsoRWBRy+DVFKG8CbANCJiSkwCgvPIn v7y19Yk4XFKorfR012I6LH8D/1DeePwUEBrphORoDn7KInvZuDhjOLxGNp1puU5l PLnhAFDRMN9VXuG4GFy7DFmyhcXv/AwI7AKA1sX5gQT3dQ5m+vTCmBbMX0bKAgud gMXtkqSlnBJwM6M00dZOtngxYV6ocsoONKzkBYyNWGCinUhDxtTs+rR7V3LbEMz+ 73TUA/9lGAsg1lOVjqZbDiYC0AVQIM+SFVlRRloTQaVyLdwaaLrIsGtDq/bwsVv7 S+gTgQtrwjxLwF0vL2rjgK4IDI6zZqAgdBagK9GKxmdKh3wizkWMPSaNkfQ7IXqp Z9M1Gkgbvr4o/x1Al64ZbiXihjMw1wVatHlS/TFbvQOJDQMBzLQhSsO2cm4gS290 dG1hbm4gPGpvZXJuQGFwYWNoZS5vcmc+iGEEExECACECGwMCHgECF4AFAk1kGDMF CwkIBwMFFQoJCAsFFgIDAQAACgkQ2kbYYZHdrCDRxgCgmVHGB6yD0OJU1yxKtaoJ R9mBQKgAoISW2Z3xbTufMrlXc9hAUNLRxHgHuQINBEeZsaQQCAC+cK1uFagdbUQo 65cfKeVQOMaWA46W63BpX+ZOuQ7AvuV0w+5TAzh/VCEoaS9G9lwhXmBG9eKpSLRz cLv9rj7OOPWLYU9HRhMJ7A9inhx1uOOAbwzhmAbEYjiDTutz9c4cjF9dxM0adboI /nDNV92FhL3i4GFS+mkVPrPYnjtOJmrQnsIFKmLkq//va/Hy7X/Unjr3HVVWWYvm Up7R/5YcDpK+J/a04KBK1E59mVKO8D3XKa2+nyzRwu9PgT8AhGPESC/YLG/Eq+Xx nLuO+Th0oe8t6gWhhhtkMawttzx22LeS6OXagK5wO8I8AqokhuAOtnto5sf3mODF 37rPW4QnAAMFB/9IIv7BDRimEr707yxty8YeEn6+wJgO93lWZXvoz3yTUXw0w9ug abQNYkJoVK2eDAzazC2m9cw1F2rVrP1tD0L3bFhKqnsp8rEWPYEsDNtLwTkBXYz8 7BSgIrFQFoVJM0gQAgWsvJy2PdubYqJzOEhVAzVq7hhvsMvcgI/3kwTbkNaRrODw RX+66I6JSUtuxWLqMpX4MYV3LG6gp0dVA+yWZjPgWKDFfWh4SdA2dbYFpSHpZIRn Ou5OmwxpNb429nz4iZmB4+qSqU+Y1JYrtSdwA0BgF1OSwEJe+piwbAqTv1UUNJoo GtYLuAuqezckLTe281eGQNtOoukAt5El1OvJiEkEGBECAAkFAkeZsaQCGwwACgkQ 2kbYYZHdrCDW+ACdGhmTNDDusXBzUJIjDhVDoFvigsYAniLz783Y6+1ic8DdTfqR CAffspdh =HErw -----END PGP PUBLIC KEY BLOCK----- -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG/MacGPG2 v2.0.16 (Darwin) mQINBE1kFMQBEADLi0EsQnl2Ntttis+lN8FcyeEilETbRRiT3QNnse/OXKjJx5jn 3I8qTPUQE765ZxVceX1f6qbcz8pzGtq6qwdn/pp68CL9OCkU4mbGssr1mZJyg40R vEXfpuYPBLx//nruXWvlShhqWg1OnN/VriuCG0yogYiWLiGGj7uGAcg9EMufN+hZ GdHZZyQ99lsI1V6/fbpPdWxDNoW9C/mu9pouUMej2VoZOhquluDXrZrlO5BNcVhB 8uvvkwL5OxM7JVsoKTCQEBNrCQw8WQtKZNCHs04cS8srAIxSq72GIFfyruX+73Gv qWeOzxxw0Gzs2R0A3Xu5XqxkqiRty2QPeGXQrym5jptV7W6rVzIXcUSaWi/SANxb ruS1xBhNCXl/+n786N91G+iEFFDI4IAMPFauf+bMAkz22wYJeefL+fJdda4pTCw1 OyGSytwju6YBayoQ5PdceiXb/POug/fmTut+N1QNuVzoyRyXn8WcJujUvjcQW+in 739Pq3VrnGnsNgccTtzN0ySLaaPF7xrhC5Mq+sO9CReRmbF5LAbL0tnVeCGEStXi tsWUzHfURPVK+BnQy77AJUcnF4+tfJHFSvnVgbVh32Safdjs+CwrhqTlPWLn5E8n naF7SUMbDihvoPtGXlqnyy2wUOx0WtFgqZMf99It5eJM821J/AQVeN4pNwARAQAB tCFKw7ZybiBLb3R0bWFubiA8am9lcm5AYXBhY2hlLm9yZz6JAjYEEwEKACEFAk1k FMQCGwMFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQ6tKtml7jH39QWQ/zBi18 aAtshZThYqF2Pj80hQ604MsFvlmhqG9/puJYMkKEXyMuhepan1cIJJceCw7GXB+P M8wVwePkMo5adzcr/0wnH++hC6P75IimWo2kf0hL2l1z0zkq9LQQt0JRjY9ZqxDw REj+6WSZl2l3JJVnTycpbzDzuLSAxHcmdIG9bkqnwrZ77GwO8J/MN+MUycUMT1fd 7iWPJpvjqnOWNE1+L3cFReUt6VgzVidJ7jHrOz49rTmqlF97+yjUy1tyRIDeLl3C 9V+oZM17ATlw5PJ04iB/q2Lg/caY9H5FsAcvjDmCNN6Eutyx0K0DC6DvZA9y5c5v OacJhtXR2jXukMnHs2p2WW2E6XoS4KQomC/F6qZngVpH18+bzMzsQu7ASud3epBd 9iDbiJ+UgjtUj6ec+FWc56qKhdmvdtqmzdvgSsQN+JaOpyCsWJg77sBM6/Z76BFL 1RC63mhuUd67bAdUNKKiw4oZ9QMJCd6KP/Fm+e98huetZcPTf//BglyePTkl4yfV iL5tk0T/kn2YNEG/mjev5HNROg0KoF0REl6FZ5+WwFnjmdjAw9BZRMNDwTDFSj3c Sl0PUZ2+R2V0gf3TBdxVhYCzPzLujpYjp//UgrJk6XWYmMNUGMQJq7P+LuUye0h2 TTz0eGDn/i1JDf89ET2v6+xg3GrVSSKHCTRzgIhGBBARCgAGBQJNZBd1AAoJENpG 2GGR3awgWjYAnjYtcttIduCQA191T4DvQYzdWuK7AJ4qAUXX4lbkzeLGEgNolVJd jtKD77kCDQRNZBTEARAA6cF+kZaIb4IlMO1FbTXowCOkEYOWhOP+5eXCcc1q3ZB0 HNV3kRCxKH1dbaDOhAxmuP0nMLwSDkQcFFGxfXAIfV5Miwtdtlwc7+jrCYMRzqZ4 zRCWmEdJ5bTE3bdiYc1Wo4/8dPfB9hn6sv/MGjlWy/DB4tElFYA1JDOyCdQ0SSwh yc15Yv+i78URjUf7q1WUGHhH7YN1lSldXvAiU4ZYioHLiLxMuhmGtXMoiE2+jRFt E8x9RwQCvDUjBMXqZ82FM/aqVeqMqcYi8F3iELDbZrVGoGBQ2cJh9a/rSvUTBEPg OSrPieDQqTlNK36isGBdLETDU1gPIXtHoUlbGpe9CvK6wazAjeEV+ck8mvRz20iC i3RzkkvlN2TV+s0VNGQTztK2DQblwuv0yeEGuiq2GlakMnhsSJLWgYYcPDirJR/j 2qsFIOZOxtWqqPfB3wJyl2wmBXjSIfpb7BCulCSP1QVHos1OITbFB0QLST9twWPw +cSF8tezJ3rbGUvvkBQQgpdDMUMceaTL84PGvUW1z5uz0HW3jo5ISihNRUN+zcQR 63q5+/Mw3Oar2dutmFxogC5iuIj+jZjRUewVaa+BC/YRNNeDEWSm63NVco+NRlS5 +Zsd2+831HuTtwuaSavSOJuZCx5HBA5578OEfwpFQRSYDIVJ1en09D/4K3GrvdEA EQEAAYkCHwQYAQoACQUCTWQUxAIbDAAKCRDq0q2aXuMff0Y8D/48gN/HXOurJhES 78hZsjkoIE1CUzL0MDtil5RI2XUqdRn2bIsVhsMtEK81aZjM66XLsRSuFaaAZwn0 QecxTI8gd4U6VV0DRP0R8Yq1Dcg8vaPAZVwPXlC0SDQaGrlR4bpW1mO51nSUnxlq la7zM1vzmboVn3nD+OjOshSPMQRnxWN/8L0pyQep7IA68UeJdRo/9DsoIJXU9vMF 14YIfE78jiXlv0MmDtQgQTv3amP4ktm6fcbXlTrr4tgiWYDbRXeerMY473pLLYtq 7UgtRSSZvQupBBB6KflojCfHrX53VItive2QcW0Grz7Rcz4/E3Rjr2Rhv5RRrpeg 2gF3gi0PP0Wl5k5sgMmF2Xx78SGv5eww1JD/ZCXQDYyzwV2+6En8BlOvUcSVkSfo 9dAel7PpcV59RZcc/oKWh7hZO2sbUUNwQGEAz1Rfz8s5HzQHB5Y90n80XjPsDYg9 XJ88V2f4lU+/dQjasBXph0e7LvlkZrn50ji/sfwpuBT/6++Jf2dr1330VukWXyDg 4U0dMVq7wNbB10sLJIdBPOvWb8jEOsv6hA28M9WOLM8fd6petg7n4zkRAjU9Hlk2 UPF+BhTMjtxCA7+XTVIHXkOBEWiA6b9WRyK9y3T2pLFvwQi8qhCk0DgY4tUX3Yoz K8lv1puwHj4laJEwSV7NpnveVzKRIw== =cn0A -----END PGP PUBLIC KEY BLOCK----- ----------------------------------------------------------------------------------- pub 4096R/BC0737A6 2013-02-05 uid [ultimate] William Daniel Colen de Moura Silva (CODE SIGNING KEY) sig 3 BC0737A6 2013-02-05 William Daniel Colen de Moura Silva (CODE SIGNING KEY) sub 4096R/EC30C4FB 2013-02-05 sig BC0737A6 2013-02-05 William Daniel Colen de Moura Silva (CODE SIGNING KEY) pub 4096R/524A9649 2016-12-30 uid [ultimate] William Daniel Colen de Moura Silva (CODE SIGNING KEY) sig 3 524A9649 2016-12-30 William Daniel Colen de Moura Silva (CODE SIGNING KEY) sub 4096R/72F0D8F1 2016-12-30 sig 524A9649 2016-12-30 William Daniel Colen de Moura Silva (CODE SIGNING KEY) -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG/MacGPG2 v2.0.18 (Darwin) Comment: GPGTools - http://gpgtools.org mQINBFEQszABEACpumcwNdeLSnleW2/a7oVGxIvIRQueFKUoIME+nnnazPhcXfxT CCefEQkG5PsVZrFT3Koop3jgcof6v/Jo8XHF2RMnxZH+wgehxxBY+co6N3jxjNq4 WsKRYJXKMOO1/+vMGdJI1Dc7KINNDAC2T32UOaQSzdke5tOmLlIRFYH1+u8QweB5 z5YDOZK5ZY4nsfUv0qxnw1rkUDuv73/SEVR5YIbzuuTsZ6fOJj1NLXVq7yYuHjbJ ZFumaS0YlJ5QE4IqU4LEgDIdcIdwjJFu8YK7xsURdWwc/5TNHy5jcp9mwFycRmq1 WndO9yeNx0hysbVkvmWQtnN4i62bT3tex34KvH9X2JEi6aGuSDOSMuSiwVsYiqj9 DZGA+bVuzyTfcBU3tNVPT4Pr9b5T4yrxoYbFUeAzVpOH6PC5EyRzjceLNGWhivgE s+jJZ9neAy9OBKjg1t0DR2XpA4A3oViuO82EEs5i23l2SUTa3oyd3VoYBDjtZMUT SqShRP+XCO4VhRXPh46cTMcWtf33Db9szPq6NZJwN4NBYSC3cEZiFjY/QcdU3mUZ ZztIVkX5272CHjgVREFwvS+PV75daV0G6sIOMvxO9saQCjtTq+zplJOCJUQJCaOe Lmo0Vl6m7h+qSLBLO7EXRbpM56HbHdT8qWMueiITPak/mS6c0ELsrYD6wQARAQAB tElXaWxsaWFtIERhbmllbCBDb2xlbiBkZSBNb3VyYSBTaWx2YSAoQ09ERSBTSUdO SU5HIEtFWSkgPGNvbGVuQGFwYWNoZS5vcmc+iQI3BBMBAgAhAhsDAh4BAheABQJR ELUhBQsJCAcDBRUKCQgLBRYCAwEAAAoJEB0+sPi8Bzem5ZoP/0FrWwhbIRFngxP6 IMlWpz7Mjlz3pF2cSfdoouF6SjJvm+CPbxrd1DNsWrpeuMS29R9yPMzsrq0q4LB3 dmqofNphwcg2G0y9zxysyC15w5m5ZKI9zSvBksLdo8dEFRKW3Ko/AgwypWi2IaKI Q7w7LSMRAGR5/j96z/5bbfUEjDFOBFXyXnANadGULMGGh3b6NTxDz7OG2hJve1tr 5eo4/Y9bKz7ISLvAr33v/QOzHnuyjZo9iLXrpw2vIhWh6wRfZmFUg9Z5Tk3DUs+t CspkUY4q8EKj+A9RHKRLAjGFLsOHzRttHh1GVrRizQNYV5V4+YtwmaMqLizeABXL g5wrKtHxGLp34KFDe4N7UO5yUf0ZyhBlFBRQjT0dQhPVnYNHU0ODpmnyOZJ+fgT9 65emPQGHerLRosEDdji2xEIpZg3kARUDimi2r+LxNcSa62SWohKr5jYjJSXlSvfX 9aZa9DfHUgDIK0n+8v+SgO1S+wtpmpXMe88NYm8MTNCyoK/Az1IhaMWga9hwhkc7 ReNJamumqjp5YJ6gWOr+0ARENJQDSxw8lXIjKzpPPn1uf3RwijtTxepImAygU7aQ kOiAJlfTpR3vwKlu4BMVrNKJRoRWpiD1pB4RO45QME6JJ30UgFBCRhv+hGjccofJ Dm/+ftWZIQt5NBDm4v4NdSODII8NuQINBFEQszABEACggwZ1EfGmA/i2Q2MiHLGz Wg4KxaXrEpQ7zLiMYVhcWkdiYqs9U4ca5o4aFPpHXoQ1YNyHP1IrqWzP1JqI7z8t 7tO4HlB3ww5/jMQQJsRzYGsndBhES1KI4hO9E7YZdMP8JfI9mQlDAfHQwb1GRSjB Z3NsnD+C0MhozPf5pbBZKP70JUvaQ1taeGQr1VoGOt6+UG/uH0M4dEcptWEVUlH6 LrUI3ZNgb4semArikA2/aTp25kcMRqHT+KLN9WvELe/vSJQEdWr6DCggvKMwS4Hz k1kFkWFp/GVAR6/TrDxA7hljKPXRKvOL2jP0AJeXapIDHOaWyuRVIm3uPLTwdHgz O3lno7a7tZpX4vgdqMTovWnhheh07XXeUQNJ0Cy/fGi8cvlce3i/5Xm905PlBiIj zgLx+yojfIpoLcZZ8MDx0c6t6Inbi70qPSfx0McCm4APTksttaja7wPj2bsPG873 YwEHgzyaAO4xqcR7mhx+LrRzrghhyr2Ra3VmqEKsDG6Pdz2qxegIkKAzpuqVvrAC e89BynltFu+2/HkrwoQvevdYNgueNlL772m7dqqEwYrUc7dOGbLBjJ2uJhpvZeok P6XA/GODTkW5Vi7qPqTvQQJKrvQ8/jczS7L8RW8zOipNIsa7434KtNZT6kvfporS zTYWgCpTmQ6hwb036WmM8QARAQABiQIfBBgBAgAJBQJRELMwAhsMAAoJEB0+sPi8 Bzemy9wQAIRWWEzVF4ZK8Wq5KRBJzfT+57jc0qP+dvhjORFIHton0sFJIqKxTF/s jkbIilnkR0FcwtcNIduXNfSbqOuQjfpXmmOOjQfww3aeStY5i5r0tD4yGtXAK90P q+R5fG5Gnw3P1dB7GXRZ+bQjBfJ/XpjX5qn3z6vrhj6DHu0oqx5n2rZhIOXfofVs Otmk8BoeYFJPg6VExJRXiWmZHLLTqEJsZQDupv3+btmRb7++sjp/krCHjffZiiyd eJDUVQwpY5nRedjYrgLQhVcMR2o/g5xS5lfW7khqXQ4sqg5PILNJFeXiEjJo4ZQP 2dcsINvlARtnu++WXMbDwsS4R7baFFFWQ3BsMoS1/O7lXNq+7aesRH5cPCFzj1XF Q0wz4SgieylOc5VYQff2QWKWg+3gNsiaYnmJzD2lhaw9Ye0tht3Q5PYmp8g9J6Sd QT7axwnrWq2IbEk2EOOln1C22KNXciPBEUoZ6Vt+BfXKdSKP5Bgc65+YMPX3N9Ws Bwcmc5PmowPW2SEq1ngpU21WJhLZdoPuiimE6645T2QuNRVOzyY+3QHTmtBEzATA O8DxQXqXzYERWC/iPa6px/QLon+6CPcuZnHEkvwajqb0yxB7hzK8YNYQgBrCcFMM +bCJaQ7cLaC4frKoo2YMGTOteL2xG+shakapJPFsdBLnrbifFcrd =FZ1t -----END PGP PUBLIC KEY BLOCK----- -----BEGIN PGP PUBLIC KEY BLOCK----- mQINBFEQszABEACpumcwNdeLSnleW2/a7oVGxIvIRQueFKUoIME+nnnazPhcXfxT CCefEQkG5PsVZrFT3Koop3jgcof6v/Jo8XHF2RMnxZH+wgehxxBY+co6N3jxjNq4 WsKRYJXKMOO1/+vMGdJI1Dc7KINNDAC2T32UOaQSzdke5tOmLlIRFYH1+u8QweB5 z5YDOZK5ZY4nsfUv0qxnw1rkUDuv73/SEVR5YIbzuuTsZ6fOJj1NLXVq7yYuHjbJ ZFumaS0YlJ5QE4IqU4LEgDIdcIdwjJFu8YK7xsURdWwc/5TNHy5jcp9mwFycRmq1 WndO9yeNx0hysbVkvmWQtnN4i62bT3tex34KvH9X2JEi6aGuSDOSMuSiwVsYiqj9 DZGA+bVuzyTfcBU3tNVPT4Pr9b5T4yrxoYbFUeAzVpOH6PC5EyRzjceLNGWhivgE s+jJZ9neAy9OBKjg1t0DR2XpA4A3oViuO82EEs5i23l2SUTa3oyd3VoYBDjtZMUT SqShRP+XCO4VhRXPh46cTMcWtf33Db9szPq6NZJwN4NBYSC3cEZiFjY/QcdU3mUZ ZztIVkX5272CHjgVREFwvS+PV75daV0G6sIOMvxO9saQCjtTq+zplJOCJUQJCaOe Lmo0Vl6m7h+qSLBLO7EXRbpM56HbHdT8qWMueiITPak/mS6c0ELsrYD6wQARAQAB tElXaWxsaWFtIERhbmllbCBDb2xlbiBkZSBNb3VyYSBTaWx2YSAoQ09ERSBTSUdO SU5HIEtFWSkgPGNvbGVuQGFwYWNoZS5vcmc+iQI3BBMBAgAhAhsDAh4BAheABQJR ELUhBQsJCAcDBRUKCQgLBRYCAwEAAAoJEB0+sPi8Bzem5ZoP/0FrWwhbIRFngxP6 IMlWpz7Mjlz3pF2cSfdoouF6SjJvm+CPbxrd1DNsWrpeuMS29R9yPMzsrq0q4LB3 dmqofNphwcg2G0y9zxysyC15w5m5ZKI9zSvBksLdo8dEFRKW3Ko/AgwypWi2IaKI Q7w7LSMRAGR5/j96z/5bbfUEjDFOBFXyXnANadGULMGGh3b6NTxDz7OG2hJve1tr 5eo4/Y9bKz7ISLvAr33v/QOzHnuyjZo9iLXrpw2vIhWh6wRfZmFUg9Z5Tk3DUs+t CspkUY4q8EKj+A9RHKRLAjGFLsOHzRttHh1GVrRizQNYV5V4+YtwmaMqLizeABXL g5wrKtHxGLp34KFDe4N7UO5yUf0ZyhBlFBRQjT0dQhPVnYNHU0ODpmnyOZJ+fgT9 65emPQGHerLRosEDdji2xEIpZg3kARUDimi2r+LxNcSa62SWohKr5jYjJSXlSvfX 9aZa9DfHUgDIK0n+8v+SgO1S+wtpmpXMe88NYm8MTNCyoK/Az1IhaMWga9hwhkc7 ReNJamumqjp5YJ6gWOr+0ARENJQDSxw8lXIjKzpPPn1uf3RwijtTxepImAygU7aQ kOiAJlfTpR3vwKlu4BMVrNKJRoRWpiD1pB4RO45QME6JJ30UgFBCRhv+hGjccofJ Dm/+ftWZIQt5NBDm4v4NdSODII8NuQINBFEQszABEACggwZ1EfGmA/i2Q2MiHLGz Wg4KxaXrEpQ7zLiMYVhcWkdiYqs9U4ca5o4aFPpHXoQ1YNyHP1IrqWzP1JqI7z8t 7tO4HlB3ww5/jMQQJsRzYGsndBhES1KI4hO9E7YZdMP8JfI9mQlDAfHQwb1GRSjB Z3NsnD+C0MhozPf5pbBZKP70JUvaQ1taeGQr1VoGOt6+UG/uH0M4dEcptWEVUlH6 LrUI3ZNgb4semArikA2/aTp25kcMRqHT+KLN9WvELe/vSJQEdWr6DCggvKMwS4Hz k1kFkWFp/GVAR6/TrDxA7hljKPXRKvOL2jP0AJeXapIDHOaWyuRVIm3uPLTwdHgz O3lno7a7tZpX4vgdqMTovWnhheh07XXeUQNJ0Cy/fGi8cvlce3i/5Xm905PlBiIj zgLx+yojfIpoLcZZ8MDx0c6t6Inbi70qPSfx0McCm4APTksttaja7wPj2bsPG873 YwEHgzyaAO4xqcR7mhx+LrRzrghhyr2Ra3VmqEKsDG6Pdz2qxegIkKAzpuqVvrAC e89BynltFu+2/HkrwoQvevdYNgueNlL772m7dqqEwYrUc7dOGbLBjJ2uJhpvZeok P6XA/GODTkW5Vi7qPqTvQQJKrvQ8/jczS7L8RW8zOipNIsa7434KtNZT6kvfporS zTYWgCpTmQ6hwb036WmM8QARAQABiQIfBBgBAgAJBQJRELMwAhsMAAoJEB0+sPi8 Bzemy9wQAIRWWEzVF4ZK8Wq5KRBJzfT+57jc0qP+dvhjORFIHton0sFJIqKxTF/s jkbIilnkR0FcwtcNIduXNfSbqOuQjfpXmmOOjQfww3aeStY5i5r0tD4yGtXAK90P q+R5fG5Gnw3P1dB7GXRZ+bQjBfJ/XpjX5qn3z6vrhj6DHu0oqx5n2rZhIOXfofVs Otmk8BoeYFJPg6VExJRXiWmZHLLTqEJsZQDupv3+btmRb7++sjp/krCHjffZiiyd eJDUVQwpY5nRedjYrgLQhVcMR2o/g5xS5lfW7khqXQ4sqg5PILNJFeXiEjJo4ZQP 2dcsINvlARtnu++WXMbDwsS4R7baFFFWQ3BsMoS1/O7lXNq+7aesRH5cPCFzj1XF Q0wz4SgieylOc5VYQff2QWKWg+3gNsiaYnmJzD2lhaw9Ye0tht3Q5PYmp8g9J6Sd QT7axwnrWq2IbEk2EOOln1C22KNXciPBEUoZ6Vt+BfXKdSKP5Bgc65+YMPX3N9Ws Bwcmc5PmowPW2SEq1ngpU21WJhLZdoPuiimE6645T2QuNRVOzyY+3QHTmtBEzATA O8DxQXqXzYERWC/iPa6px/QLon+6CPcuZnHEkvwajqb0yxB7hzK8YNYQgBrCcFMM +bCJaQ7cLaC4frKoo2YMGTOteL2xG+shakapJPFsdBLnrbifFcrdmQINBFhmtuAB EADd8/WFwyC24WKSYV/SbgorjN5gp5Z4d/an6UDg1nH26DkZx/gG/Cr9RGm48bXe 8ipiELJDYdwbvCUrhsH9po7y3SkFtc5++OAKuqMCZdPOCihDU/tlW6lB+adHHZLy sckhSxxbnNWqGwT0F7JgwNivSKnLUWVV90TmVbgp/HgXoNGL0on7tA6MvedaZYGG DV0vRjyOegKKk6O5dL9mbq+SR3MooC+B6B0YEp8NAl8ffRCoEsvPbRzn9TDjrBAo R0CByys1yXFLQryIP5MlKCumJS0HofDscjaRw7Sg/oZL7A8F2foZxZtBIc3TmlBB J1YpJMFJXqob7L9TpwmVJsUPmaYxbbs1kd+DN6hx+yga6u0tTiHRohWFEtlYMdxw xB8GqSmmnCqL9C0BLks6QvpWjkPQkMU+HMYGagAq4jHkWO5+kpvePpqgT4lz9M+o kTOaOhlqF20baa3gZHZXwRzf3kV8/FCLBfNuBpOJeEExxIOrwNSjtiegMeaDQx9z ZdGunU9e7cMflB6ohpzYJhJOL0ZS+LDRt5pX5/pdlv3LfuIN2cNyWZgjSdgg/cxt W6LPSZ/0O2weznHpFZ5oKnWNLUr6e2RXyJfqzSRsdm5DYs0NefYm4OjDKDRsk8hW 0HiHcERwv8LfxYTKZduRKYUHlCV6/kYbyUkE2pZxCnq9lwARAQABtElXaWxsaWFt IERhbmllbCBDb2xlbiBkZSBNb3VyYSBTaWx2YSAoQ09ERSBTSUdOSU5HIEtFWSkg PGNvbGVuQGFwYWNoZS5vcmc+iQI3BBMBCgAhBQJYZrbgAhsDBQsJCAcDBRUKCQgL BRYCAwEAAh4BAheAAAoJENji8B1SSpZJvVgP/AkVDxFHv9b0CgqhhMWF3b1Dqdae EQsoFp6qP0StxgHrTtvJCP7I3RZqROLHJLAFdzi9Rqda41XcpHSvrnCi4mwo4k1S n0c8bO75euZXBqiIRMX5HR9O6y80QHrQumkjdGOTPBidA9fzFxLMbQIyoi35Jdsi patsg5BzwHss/5+LVyCX0LMC996NfP0CSWJc1M9YzjYN+mV8ogdHbSeNmoDaWYjo yMXht4vmxBWb22YO+ZCdMRS0Ki4y1pjiPhx3ewPYnvl/WsxRO5i45os/R4Kw6fRr mrIfnCMVPrMrFZcNObFE8SoU15DEaAbBIfU+ret8FMHIAPKD3pokBpkEg3Ij4uZB koznBU3KO01tapFx2WnuUHjAFtTrwTgcvaJXofFxfoTY+mp4TBCXA/fWMoOhaBfI k5PYH9Pbr5S4H44I9aMYW+Xw1UoEb8vk9fiSzVT3hEwMBWhvuu1wrZFwp2n9d6am hbmSFmxv01UrMnq/G6qY/YnCKjr0hOHwNFeLzcnjP5w4BVmOVs/lc+QJVVwqX3mm pyvqqEnDq+JuHfBDhPA9GJIv5b/sSzA+mHRhBpDm5e7ERpxkaWF88jrrSm8u7j+9 FNVuSsTrakAAQR0Y+AEsRPvb//Ra4TaVyK3QcvoTL2m22wuTEheOHGjYoxjGGqes xsZQHauDQAtoNApduQINBFhmtuABEADt5stsIH1PiFckXurCQinAddY+U6QSshey SS+AQKSGcHj1sp4MCHeSzppO3/78U1nlTJjPbsLNcaGBYRrQQgu82fwWZ4qz6JV4 R590pHCRE90LawMumA/aNbSQFWWE3ZuLb3a6bg+I3KH9kMBGMeFYCsHWn4CSeiwc zHpz/vYfe+YoHo5kqkmYA/iKUv3JQyhW2rjKfvSfLi75rMBp+1nmTu2JRCXcdIX4 G1q3FvuGsQLSq3vh201/4THop3IE4HVggu1Od8nmmw4EVQ92+0WfP1kUlWCdPw2X Kt3hLRWqOeIvoq5KN/U7oAt/9gRCshgfRJGE/K8jhZ7uZ8weNraDTOT9JCeGnNRs bjpDXMo2TFbzadAaIEQcOSIejXjShLOvGB6wt5D+X9XMJ1PrxXOLDo/b2gEMEDZD pRVyEgowkmiZnDKiGRP8T1SgS1u8zkSpyQPcg/3uFbQH94huhfTTt+1gIfkDZgjS U/EDk329JY1B/MoGF//tUG/FQ2Ecsf5nAPJSnDt58SuIgmj0Zliyeq+raAv/4Cgt tX4N1lhdNFlId+82Ne7d6bZQH4yiJmsebmC/IP8u/dYh5G7kYtpe+mz6pVxCK20T 9Ky8lHIdP5NKAuBuM3LjbqtSmWJ+aRYgeNMxR0Q3wUFkAT8Um5+EP1qljaq9V+7W CZpthkw3AwARAQABiQIfBBgBCgAJBQJYZrbgAhsMAAoJENji8B1SSpZJZTkP/RP/ z/b+RtCgb+zakVxCuh2qZXEJtE/1cwJr8ts2bNH4LVMcZsVBPuB+j52MaLTTMC4d 6P/fQ1DbLorVelHebQMa0JFIf9X5r6cXJwAc5d8gDt5WsQEJ/J03XNYX8fzxHIYw mhREfUU/sBQHw0t4JvnEC8etS6Qc59gdIoRm+S8doE94huQYDafATHEyfkWEkv4/ XoTWM922HHbQe0xsbbsduf3LYxt+vlrJ1gD9qoYIbLn5pzRnV7257JHCQ8GmP9ZR f4ZZ9wY6hiR3D7cbmWo8USsWXiH9hYN3LdoFg6BiOIlpQCYQIw7Wsruu/UmukF1v gM5zHPIHnVxU+oVUndzWkuw5xSq76VtvBLNMu6gWPxWW+pwiL4GrzdOZDFJGqQW4 N0H9aarCQWiKKObOgAy2JWsU/T/Z83FlNJw7c4HOAMWaek3ZUJgg8+k/+ohXN+ta j2d9ZtE8XYDW7/NWO92ofEqKkwyeqcRMWJXLt7PWuhXaU9Bl2UKjPd5itfNPmayL fIRqKAQFlx82cj5P/o3Ty4eHcdh5anlHeqOCpbFBs+uQ9VlSkmt2hV+47rHU1irh qx/0E4Q9ZYfZWgY8V8Tg8+2227R+wooHvr75LTR8/z4bxFlyNFJPTaIKGSS3J1lb 8hjYNzaUB/leS5+wlwEZiYJBZe79/9BACx+WKLHa =gTGg -----END PGP PUBLIC KEY BLOCK----- pub 4096R/D3541808 2014-01-09 uid [ultimate] Suneel Marthi (CODE SIGNING KEY) sig 3 D3541808 2014-01-09 Suneel Marthi (CODE SIGNING KEY) sub 4096R/AF46E2DE 2014-01-09 sig D3541808 2014-01-09 Suneel Marthi (CODE SIGNING KEY) -----BEGIN PGP PUBLIC KEY BLOCK----- Comment: GPGTools - https://gpgtools.org mQINBFLPJmEBEAC9d/dUZCXeyhB0fVGmJAjdjXfLebav4VqGdNZC+M1T9C3dcVsh X/JGme5bjJeIgVwiH5UsdNceYn1+hyxs8jXuRAWEWKP76gD+pNrp8Az0ZdBkJoAy zCywOPtJV2PCOz7+S5ri2nUA2+1Kgcu6IlSLMmYAGO0IAmRrjBEzxy9iGaxiNGTc LvQt/iVtIXWkKKI8yvpoJ8iFf3TGhpjgaC/h7cJP3zpy0SScmhJJASLXRsfocLv9 sle6ndN9IPbDtRW8cL7Fk3VQlzp1ToVjmnQTyZZ6S1WafsjzCZ9hLN+k++o8VbvY v3icY6Sy0BKz0J6KwaxTkuZ6w1K7oUkVOQboKaWFIEdO+jwrEmU+Puyd8Np8jLnF Q0Y5GPfyMlqM3S/zaDm1t4D1eb5FLciStkxfg5wPVK6TkqB325KVD3aio5C7E7kt aQechHxaJXCQOtCtVY4X+L4iClnMSuk+hcSc8W8MYRTSVansItK0vI9eQZXMnpan w9/jk5rS4Gts1rHB7+kdjT3QRJmkyk6fEFT0fz5tfMC7N8waeEUhCaRW6lAoiqDW NW1h+0UGxJw+9YcGxBC0kkt3iofNOWQWmuf/BS3DHPKT7XV/YtBHe44wW0sF5L5P nfQUHpnA3pcZ0En6bXAvepKVZTNdOWWJqMyHV+436DA+33h45QL6lWb/GwARAQAB tDVTdW5lZWwgTWFydGhpIChDT0RFIFNJR05JTkcgS0VZKSA8c21hcnRoaUBhcGFj aGUub3JnPokCNwQTAQoAIQUCUs8mYQIbAwULCQgHAwUVCgkICwUWAgMBAAIeAQIX gAAKCRC08czE01QYCOKKEAChRtHBoYNTX+RZbFO0Kl1GlN+i1Ik0shEm5ZJ56XHv AnFx/gRK7CfZzJswWo7kf2s/dvJiFfs+rrolYVuO6E8gNhAaTEomSuvWQAMHdPcR 9G5APRKCSkbZYugElqplEbSphk78FKoFO+sml52M7Pr9jj88ApBjoFVVY8njdnNq 6DVlaDsg8YninCD78Z7PNFnRGwxyZ8Qd4Dh0rG+MUTfAWopZu6/MxpQxU7QpeVeX SIMLg7ClFrGfXnZcszYF4dnav1aa0i7W88PAdYNPko7tC5qz5yv2ep7t2gRbcYKf RXhYC2FHQey3wPhMKjA8V436lAqmfYnY/YdmhEy9Xq/1EdX1nHsQ7OEkfgXK14WM F+rnqXRAl/0cwiyb41eocdg5kpZFIKgCYT02usLWxwNnd3jOCe109Ze3y3acN/G8 +xOf9YRfNVAe6pD8H6ieRbv9gRjBmsbz9bXQCmxFnDqxNri5Me6gBAQPNmYTJD0h jgJTK6o0vJ0pwjBLauasJsLu+1tR3Cb0dxPE+JVaTF26FCd7pM7W6KdVfod9ZfrN cSyJ/cECc2KvYVGmTjQNVo1dYG0awBachlWnYNt+0Qx4opLsczZOLtPKtFY4BJA7 aZoXT4Qf9yB8km7x2/cgNExVbFummToJ/IP3M39/EaryspsQQuM5Qu5Q5lZp8Qnn ybkCDQRSzyZhARAA7bAawFzbJaghYnm6mTZyGG5hQmfAynbF6cPAE+g2SnXcNQjP 6kjYx3tSpb7rEzmjQqs46ztqdec6PIVBMhakON6z27Zz+IviAtO/TcaZHWNuCAjw FXVQZ+tYsSeiKInttfkrQc8jXAHWwSkSjLqNpvQpBdBEX80MYkFB6ZPOeON2+/Ta GC1H/HU2YngF0qQSmG33KKG6ezihBJdKxU6t2tsQfTlCmZW6R6MGpS9fVurYMKBk vR+7RGZ/H6dSjWPcpxhusGg92J9uz7r5SopN1wSdyPMUCMAFGeyoxcAuBDl38quU H/ENG3x5LDPq2aEH2AJ6yvZfIXbeJ1zmXf2cAHv+HbmvZaTSp0XIjq8Yxh8NkYEC ZdfRWmsGLIpU16TkBijpK3Dn9MDXjHGT3V8/qfdpURtMvIaL8WFrq9ejcy/vGRFn mCYqxIIPH+vLiMXKWtuMc61GN3ES21msKQH6IuQxxfQLyhK44L/pv7FpF4E+6LaE 8uRwAex5HIDpR1v4aJq089rRtye9VXTJJLZ7lYs0HctdZ30QbBRWT4jS9d9rj3cr HgQ7mIGO9TAfK2kWc6AJN/EvxPWNbOwptsTUzAF/adiy9ax8C18iw7nKczC+2eN6 UcbxXiPdytuKYK7O9A8S9e1w89GwpxYN7Xfn2o6QfpSbL9cLKiinOeV+xikAEQEA AYkCHwQYAQoACQUCUs8mYQIbDAAKCRC08czE01QYCG7yD/471dmyOD+go8cZkdqR 3CHhjH03odtI0EJNVy4VGEC0r9paz3BWYTy18LqWYkw3ygphOIU1r8/7QK3H5Ke3 c4yCSUxaMk5SlAJ+iVRek5TABkR8+zI+ZN5pQtqRH+ya5JxV4F/Sx5Q3KWMzpvgY n6AgSSc3hEfkgdI7SalIeyLaLDWv+RFdGZ5JU5gD28C0G8BeH8L62x6sixZcqoGT oy9rwkjs45/ZmmvBZhd1wLvC/au8l2Ecou6O8+8m26W8Z7vCuGKxuWn0KV3DLLWe 66uchDVlakGoMJSPIK06JWYUlE+gL0CW+U2ekt/v2qb8hGgMVET3CBAMq+bFWuJ6 juX7hJd7wHtCFfjnFDDAkdp2IIIZAlBW6FZGv7pJ82xsW6pSAg0A7VrV6nTtMtDv T8esOfo/t4t0gaL7bivy9DVVdATbUBcJJFpoVoe5MxiyjptveqPzIRwzt04n52Ph ordVWAnX5AokXWTg+Glem/EWEuf7jUuZArfqCSl/sZoQdXGTjR7G4iFscispji4+ kNjVQsItqFbgDpuc6n+GcFxlKQ7YMCnu5MVtTV01U4lFs0qy0NTUqsuR35DM4z14 DkFmj1upWAayCoXTpKzsHBvJZPC+Wqf9Pl3O47apelg7KxU3S011YfXpVPvCTKBv kD2o/5GKWS5QkSUEUXXY1oDiLg== =f8kJ -----END PGP PUBLIC KEY BLOCK----- pub rsa4096 2017-08-10 [SC] 6AA3F1184DC9CD9DC0AD10947E9D263D2BDCF714 uid [ultimate] Peter Thygesen (OpenNLP) sig 3 7E9D263D2BDCF714 2017-08-10 Peter Thygesen (OpenNLP) sub rsa4096 2017-08-10 [E] sig 7E9D263D2BDCF714 2017-08-10 Peter Thygesen (OpenNLP) -----BEGIN PGP PUBLIC KEY BLOCK----- mQINBFmMHqkBEADPh1KhcGlWrqcPWu17dKGGT2/Vsmmttlqxov0TiQV0v+Jebffa 9xs2aPOEFav+OMqIXlETfySk63HrFddWMdrF+OoQyFaGCP0PuLXwAloUd9IM3vo9 MjNxm1nZYm8jJaacCkxOKzkJEY2qR8MsZOr/ywl++UV8kybjGW9E8CkVJLBJCSxL kroKnUtmNWvWgCEjVuYmhUsfqXSoTJgUG0mSGpIUB6AoGgce02jMV0oS8J8u9gm6 HAiw8eICS80hrhd7162onXuOqEr5aBQ47++DQKKr8qtrNaqCjEO5+W2veXOJTDAV OOlgqgtop/hOGkLhbiBijivmgL3VxH6an6IGhRQIX2slgaliPZOREwdiamsOqubW h9csrhkARglpkY/XxUM+k4bdoxapQzz8J4N4n/QtFOneMNlca6sFK75OJ1Nq9Qms pqjag/GiAqApf5cWutvYDMrJ1PJM9cSTCgA2dmtEj5sFiD3Lx8Vc8a2p+eND5TZC 6zF2RATnkg6KF2Pw8DasMGMoA+NbwvuJ81q36VQC7mPwg5u6M4rkwjSaRXSHuq4t ckahKXZ+OdJyUv6DWdkhYMhSG/Eyk/1DDc4P87EzEfY7YNfAV1/BtfOBLGY9j/aC UKOVs187X8ntPD3cTc73f/Pua0AZ6LT9wsNxMIAu+RgXNDtTwip12gRtqwARAQAB tC5QZXRlciBUaHlnZXNlbiAoT3Blbk5MUCkgPHRoeWdlc2VuQGFwYWNoZS5vcmc+ iQJOBBMBCAA4FiEEaqPxGE3JzZ3ArRCUfp0mPSvc9xQFAlmMHqkCGwMFCwkIBwIG FQgJCgsCBBYCAwECHgECF4AACgkQfp0mPSvc9xT71BAAly9ZXhSDZHNdcBPjMFbl vjF2f0Tvphg3izzGBC08Yv4xEU7Qmi3KFJSzfsJh8qiwaeRGYvmhVYDT2tJIjT2L bHrxVdnY23UJtJ/ZyZfMBYxQdhGqSCe5n76ZHLrpLIAag0zmMmyZgaQ5Pp7qzup6 nOhPrGnzSJUmrp2t3z26K8WZ7hV9j2RiXssmoMRqzKzCddrN+iYJvkPcsrkF1t0w HFRi9Z0clI8fRpZETEiEYRF2n0gHr0+XasHJxN/p5zji6qOR72gYEv9kQCGgKAWw XxgRTAMOM73KvZieHf3PRSJPk/cuQAnkAUVmm2umQvIVJIODZxh1MmPyuBZz4FIa NsrNxJVKPTN1n2CB4W0sCwv1MjyRLyf0hsxPm7VwxgbfNjTOWZCSapb26JF+lJA9 +7s/K9Csi4DhLuoM0qQ9Y/AVIfQD6LqB9we7Y25QKN0stj+IDybpHGsVz8TCS/UA WaQv8IBee485QeV9QkLuLHxTwKYuOTn0BosOenMpAT4fJ2GNT8VcxXCvI/4BMf0N VDVdYcmR2idmuUn4blCBDWL76tMW5C8pVOgD3KTIyo0YgtsUJZmUfPhsqPZeypgn dhPBx8wXKZ1KLIkOFLdNRk6B0WHVYpTrV8vCt/2+87LlLrm23Os/XUwLF7qnIs+I TDzURUtnz9fPT90R0nQDz6O5Ag0EWYweqQEQAN52RDCTu6DextjX1gNI5F4TZJMG LWL32rVDzCT5RBav4Ga1o+QSc52Hg6t1uE/ayjods5WL1T1PZroHxkAdWrBoc1vT lH8JfR6qbnUFNJxR3CyKFUeqo2f3V8gJ1yHFnbtA71/G6XuGLIKgmMPsUzdl/y2l xc7SrijHBpbWZLGmrs4GWSIO5XZWsyztePGU470v7JrWUGlqpsV8bb565cXb7qTl 7+HGde8PYA9HtO2O6azacFVt4lS7jXGu6EKu5zPiL7wIwiJ8OGFfFkQrU+hujFAU 1bpT4C9lo2VTjLfK47yOhJVW/zonUiFC2e7H2LOMaskyc23vdrJacDZT8wvwM2P0 eTsfnVNGlHTmi8YJfQw3sfacBHIXab3tMtzfONJgYWD1DzwPslO7HH9cwuzSWTQL hl/qMzk2vcPs0KD9eMzNMpJjdczoN6bVCFWUwchwR3CYU4Cj9nJABPFaIU8eMNok I4M6hJ678ap00HyAXooSOyPd2JUF+xgq90ItoTZPmuNaUcdce8eVIT/lnec5BQVQ sSkNwZQbdC6eh1E9Wf6ZsY0f4xQLy+Jj4YMsK9Po8LSeIx0l/UU/6yTX2Qxsff/Z 1MjW1fFJ6MMQRyOHUm960AAzannwFCVj9coGEtU7SVEzqb431gl/FMjMIeCC4+j9 9sjPcSffkTd0BX+tABEBAAGJAjYEGAEIACAWIQRqo/EYTcnNncCtEJR+nSY9K9z3 FAUCWYweqQIbDAAKCRB+nSY9K9z3FBUCEACiFoF8R/WvOANnSiAeyFclXb2///Wx R+EBlsqs2kV3ZTXLsXHep0FeXfljRZaWoUcgHXmMhuqDSC9VlimF1e5Y+ZSQmUQG S7wAquG9onQKyPf/AK7yIYhI6QR1yyCG8Vbt4ebgwOIWMYmP3lWU04uf8Zt3WM29 wK5smGR8sPOFDDvYQQ/ZlB/ZJaN0mvsqfc8ESxltRUrRyHySQCRVVVpFGz5UOB2R Yv4Y96g8z3RPj46mQKdTesV4G9wYuOBq1IXqy7Qe6PxXYaeHXgga+msRm8fcYUYr 4Iv65/88dhEvTwomIZnvr0YhC+v0iss+Y43zBEYyfaa+I7h4c2em+G+8UjMQQOee yh3ccVGv+2nInV+i8j9xaFoL9tR4gH81paabmhcbI0d/5/lxpATIRi10cofUwlhe go8EpDhVA4Au7ORIthadFad83Vj+SBadGcLietItrh6/eh8IRWlzX44L443ScJC3 C+eMjx3TFbhM5AQ09cekmV+B2rkvrcNR4licw9oEWoHzIo8ni9iZ6y8GIhVq1jk1 OCsZi/grIQU1xN2Pd0q8bWypRYP3I/a2JnstocMz9FY46rTPSX+JGLqgdn/p27xb IBVr9gCZ5D4Lj2cMpeleRjgbJ0jTBOSkejikDXPVPCVnjAHuztLTqGIBFIl0nFMt Yjey+RmCBW6Rxg== =FPcv -----END PGP PUBLIC KEY BLOCK----- pub 4096R/A785BE78 2017-08-10 [expires: 2021-08-10] uid [ultimate] Daniel Russ sig 3 A785BE78 2017-08-10 Daniel Russ sub 4096R/D0F85320 2017-08-10 [expires: 2021-08-10] sig A785BE78 2017-08-10 Daniel Russ -----BEGIN PGP PUBLIC KEY BLOCK----- mQINBFmMxQcBEADSATAECWxCCbCpONN6zUWyuvm3+T3t+Xv8vClv56AlDoMXCbp4 735oFlkPRL0h8ab8s/avAClyHkiHZckltdiVqb1pSEPTxuCce1bKcsHQ6YMQPrFL qL4shx99bjBAf/NGLQNPxJLlji9KwWeBwfDCpYbkN7o0PA4FNrcXOvZIZ3hvpL2e x5gUi51uID0u/hLt6HDubCAlnr+yzVdq6UVT9huU1wvtnkSlEHHj4vset2zPePN3 N9YRGf1uE3rATUjhn512Pnayso7pZEHOVAUcQeDTVqDuZmLU8lUc85GvlGqOkfpN Jn2okDrCCLglCna3JB/+e4s9H+O++uMHFE3MYVJaKe4JnId3Mkxc2/BWUtL8OxQQ b1lR/jUOvoMeMGaPPV/zQMuLWP5rvHdQxmoaru7Tkpnx3mIVHOyG1XvjJRhXtRGs xCf7PrZMjYB74ImsWR6CUvSWkeLNdB0nNx8NebpfNNfQMEZg6s1QLudyIgF1tCqg 3CpMSlt7/BeI3JCevsZTRQ+xiWu4pC98S/VrLHiDYRxOA8vpmb8mz2dHKOpm1FXh PxYXDgNZk9I4LfeP9SXY/ez0ugey7DJ6qSsTYOd42ufNmgEyVp/7h6DR1EbEkOQU ZHrryYEykeO8N31OV1zrJuRPwPMTMLpyR6aAKj8p0qobBdqqdlK1g21TjQARAQAB tB5EYW5pZWwgUnVzcyA8ZHJ1c3NAYXBhY2hlLm9yZz6JAj0EEwEKACcFAlmMxQcC GwMFCQeGH4AFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQVLrHDaeFvniayA// ekffUKkS5VZlRLv66JtMV+3KOSstPzsya19+00Il/km6yQvu57kiDm1t8/xGAW1H s9bHSX0zQ9rLPvblkdPJ7iokLH4L6FRhAqhqGJupbv9F1mZYgJ5KE1rDXWMQaDBT 2Zbo3okrJzSPP1SaqaApptuf2dav3aYndMfofHe9M9xHsljW+5Nm1K1ag5UouOeW ekf61ekrIXT8qjOhNPRqVLmV+QS0KMM7LqsegJOhzCy/9qtFInM5AXL0Sf2swn4H SMNglm/4Rv2WZUyg9PtZ9EDmKwR1QL9o7jhlwjDq9YgA4zmnd322948Qof4VWH38 cgTVEHIDYsDaPD/dRfez2YJh6pz2dtAVRt42jnh4n3n0cf1wGP64iYs/blrZxdqJ RESlIcwAfu3WwxxwcK2GWtBQpwJo6avKr+9Ow4YCvzRmRJY6hMH4qsWBOx2gk18E V+87HNaa3SVD2l1hd3b/Vm74hYJjYW1VwXrggSe4rfF3ffQKPOjGXrWwvzqg/NLx wX9Mk/SLvb5uOcm6xJx22eD+jLMDd5KI/Pf+xpjPBlnVong4AkvBvmy7+KioxU7h prYK37JinKFyj+XmTTWQx+nufJvru00VtTMDtjZ9uoREVjmj682htflWKIYt4y1z ishc/tZB7jYPS8gIaQtuMWj9KzJENujzYpIowJE+M/C5Ag0EWYzFBwEQAKpvF3hl Hekjl9ZawZNX6rCgx8rHRo1LFEn4Dkihb2Zbkehhhs6lZPmaqSVZPzuCg1mMtiZ0 oMgNhd96xMAMWkHJXZPp1EVPi5Rma5z4Be+JN3BmVqbmquhsZ+x21Exhq7RvvgfI Oi55SKabjBvQ9CwoPpYShEvH7ExNRnmBKTB3n+uUBffE/+75Euxn8JtCLopWZyeL 3QkZaoHx5F10AKOa370GZu2Oqgs0980NVJ3I3MaIX5NrTAGl5vh80LShOTXKOe5T n61Z51C1U3qhvF0EqWNDbGBbUd5GSIaYrFZoh1RI48tDI2EYA8GYvpgJZkATKIiW 9/wwyrvVqrMtvyqqdXpepX9lEBJhC05+JDJhWranE3d9/caNOzfy2APw6k76IySl 84OmadEYIoH1ZjHnmiWBn7DqHdsduiMWIfWsMJvsAtBnsaYRT1DrMogpbMbfRn3q 0orBnjqp4wPZbq4G4Y2cuops83pntacb5CwRsbJJvJ7lq1bUHqEjcv20Qt5qQSDs y7xwppLjQO7P4tUORUmlgR2bA9gB5wTJCBXptyPbbmhGNsgQ2Y1v0odc2OVly1Y0 +AnSjh8DFnjhib1AWsiSpz0V6j/ccNjFipflUTZrelbANYUaeC4e0ReoVRSTLFqc ybRENS5jL3orJzq46Kp01hl/xPhY5ywYA/7/ABEBAAGJAiUEGAEKAA8FAlmMxQcC GwwFCQeGH4AACgkQVLrHDaeFvnhCABAAgy2Yr1cAeDl0YxmdopUwcIuF75+vTacY x9FaVj0Kp1/6eXERr3087Y8ge5AA1vzkAjfRRibYcVpOk9XriYM4ERa0wORJMOkR wAPHUwVT/6qOazIhK+C6JlptS9/myj5YZMO9wghJ8vaNie45YMIxX1pc2ffEkd6z DGnrUEoSNI9xuDvRDrNx5MFkRj/yZCyF99Pu2vUIeXprTc7SaF8bf7KfsQ72QsDt H9j/dlLKiXbid8BJ6faSl10sqF2OLYzZtN2Dz7fpdQDMkbzRMWlZq5Wr1g+3JdHR qYelUE0RK7EqYbVYZQ/HEdAGvu3p/NN3+x3b1Kq5zVgkV/2cky9OhIvfKsU297Fm uCap+6bmgtFKPFIXzV99msIy+HaKfqzTxri7W0SU1Rl2vJn9kDaAZqAGznTRj39/ UjeSG8FrYtKuhpg61mszVMYI08kpk3n2cdH3TGVQYWUccd0G6DApLzlU17O0M53w DQRlPOpoz4VjIyeFRG19E3o4EB0/Ct1v5eUdvM5mOwc6IqHpF3mJZgF/qb/5QNQU /eWKmEw4x14F6NmE1VJ0KYYAVp45ZgciQaW2F9oRKXHtzBFXCpoIH+kNBvRMKdi/ L24DF8ybIa+mLOqnbRG9DQGSjEjfIUZbM6pORVhnQwQlqluH/YCrdilmBpQIkt8p Zf1LlcOaFLg= =Kmjz -----END PGP PUBLIC KEY BLOCK----- pub 4096R/891768A5 2012-06-07 uid [ultimate] Tommaso Teofili sig 3 891768A5 2012-06-07 Tommaso Teofili sub 4096R/6F037735 2012-06-07 sig 891768A5 2012-06-07 Tommaso Teofili -----BEGIN PGP PUBLIC KEY BLOCK----- Comment: GPGTools - https://gpgtools.org mQINBE/QVugBEAC1ejfMszFNZ6IzjyNJJEwB7sjR+aTSgkaLTlX9V0IZVE3L2Bby 4UsRLczstXpkFYOR5mOo1cfsav0Tf9qcw27rZFZJS2euX1qmhbG54VqpUo4FR6xX E7yGRrFNmqjwdXaBXj9VUlVTwRey86woevuSxixXma8CsA4fPQtOpAtnpJ6g6285 ZdseQd2WjnF9CskSP5pDw6/nP+uBOE3Ve9DaCUzcAQdYr8xm+DINFKWo1ibTeL0X JmsYI5pjD13liSQNUqjXft1TvGuikpQrl0Ty220DbIIxd24jvWedZUrsL9yvgAps +Bc3HQdjS1YRvf3y9Cjpiff0VZ1B4HDnczn7qko+sEnPyI6RCncpp2rZ5/5PIRLi WbCL+7s/1Ja4iv1vmF6TeanorvBQ+x/e+iewRVCRTfubHQOulI/ydiUWimv9zhqp xKyj1yz6WDf6S7WouL9wVKHpcgF8x3EE+vGt0CqCxkH9bFHw5KvicNPFrWdiOKf0 qd3AAJmZP7w3++mdGbrVu4Z6p/v6wuocEf5uOxGAT7Jk81+ottZMVREMkPe89NFL Us2T6wo3YNbT6GgLzLe77GlqXO15q4wfI/cGt8LjpECtoT8LLZLFZk8BHg4iS+EF DtEvEzS73rZ9MgQU/zbpSZdmHM73pH1ceQ3QTA0cxldhyMXW9hSsIGTBlwARAQAB tCRUb21tYXNvIFRlb2ZpbGkgPHRvbW1hc29AYXBhY2hlLm9yZz6JAjgEEwECACIF Ak/QVugCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEOG+6RGJF2ill8oP /05/uE32cx0ZY/ap5giCYNKpIZZtJV54F/ElLJIEUMVP9zeNeqLbrQj2OTROqvre ucDCGOMIrraRS88WjDiFRXLbsncss8sqturwlR9JNwJSXW1jWj7BHTbVTt25Cf7d MpzBFjIUoGwODYbgdjh8U3tz5HUokwsVvDeoMKJlJ7+MdBdlat3/shew5HcSlgLE fDY5le67UYnbOB0zhtRKTPyldPUak0vpivBnYRqEcmL/na20atO/pxrhffbvVLSO z8kjMG0NawMc9TloW8LIkT+a1gGReN1ecpyO1RK082FGQNfz2MjM+4hn5SYEgcu9 DbkdXWsZdRrL2OKDb/4p9PfPzObskpSh2WXTardEys08PE4aSJ/V7EhD+WSRU1WV qPuUZjv/CqC9AecepyDBKu9VGP9Q8YcCh5BNJzXDVqu9W30uoFuUzoL2Wcx1H2K8 NTUitbi4RSQE8BYd88gJywmKyP3xj9KBSzylvUhev0S0Vh0gQ5vmAe4FIf/qflUB U8pTs/5TbwVv+5feRTqgJFMUEEaloGQdhxowMLXD0HPegNSJPJeHXBsizkp/aj1G DsV9zj70/FFwagFDHtSct09k+ql85RoDe+baNZmDwrfuXD7YgqNHC7UAYqAxuWZ9 6Y3wrKaOLRi4lsHZZSEKKGmI9mWBmzcfkvVNYMQxTHW6uQINBE/QVugBEAC7vlNW 17GSc+7XFEnJs3xcTnis5BCUpmsUCaOGyZydWnwrwcmuBwNSm5eHfmtzLJPlPjG+ Tt00S+vSf/u/O0PdO42dDq7T/NlWe0Uz5Dsh2+fIZVtv1SZBv0A+aHjekKC8QuOT +xsvFmt3mihZ714w8/PrK1mljTFZcsJjJV06L5XK82+yyCK7AZB4NZq1Qxx3hCFZ cu7gZ+G/cIZO2b5JjU0KusJoETaYcFcJUQZSfSD6d440Q9I8BiQ1pUq31mWvL1ga npUc0zvKfggT3bdCzJ1CBOr8MyYQmZHtLWHBa6upgsmMCh2/XQRIBTBH5NNoDAw5 BOVeCIM+h07IxXhfBfMNXKuRWFHdSWzKi4LBYwqiifl+2Ug3d5FqqGfX37B/D7Mb DMB42CzSf3+6D+8eCWarqe0PUMvF3UQ62Q+psHMQdnkMU9bLj/+4TJhcAUuFRoJ2 +ZR0hkiPb+60c2amhvlH4KXk+ADBHHSd3FzQfIodnYH6qj+k3g26ifqZnrn6nXyJ XSV32Ea42iBe4Vl6HDaqEQq1n5P6k7PQTIi0KOIX4snnkl2AAp+azf3wsBBVJAwv GlWwl1du1sYfHG7YMQQRudZbJXdUGbFO0ZwHEr2p8f+7WOo2DDVWmMbzaAgzV8mJ vS7o+fbEW+B7VRLx7hI5dpe6BZSQExnTyvjAPQARAQABiQIfBBgBAgAJBQJP0Fbo AhsMAAoJEOG+6RGJF2ilD2UQAJYSW1zaXUooBoCJZtvXoVMo0fDDdWAP8giYQDML zNcO7WkJH3quXSUdCXR67SEKgIQhOQZgS3aq0gtVkw0d6Li6D9G7rKRsvzI6z28W U7uHeL2cawFTb94tbMgB2bmIubA7RmFIHTz/o+gRc83XG81TciSDO3laii1kM6U4 +1uj2eR9eviVB9A86AU2YnePXlmyUUcG4cdB7ezjHkYp9JfzCYAtJqI+zCuL09ZM jG/cOB1eDckaa/n+OIfR+/m1cz8Ynj9qmVjKybHdSDsDukaxdM8jljAFk/pV5Io4 QjMuxDxNAqSR8c9UdahdY2cGu964JT6EsRhRRrZCISLrd9UUy4woZmDBvNi7JG4A I+HUt6CtPWWXqFxilyEjYRX2eMhT7wTHeh15M6RADc88GGxHhb9E7vtn7ex/gE9M iInXl1mSO4Yyz3YQH881OP2DFjo51JUIxtWbSTnGGzcmQCqJxMky9Md/44SktGnn 9tF7EosWnhPE4k3HR+pn967MnwfDfC6GUmXhZuUqxIYaN7gVBkZmGsXshXW0k+cc RmcwrIdKac+wSiWKYjjSZRDimA2WImQDPD04jsWir3YEKHDCGJU/0j0c5imr3wYz 3qCkiPkryqpovs4FQ5AVO7cECe0AM5QjvAJ7USRfy8Ge+N3PsZouGqlObhiHmyKb HrOQ =H63W -----END PGP PUBLIC KEY BLOCK----- pub 4096R/41EF12D8 2017-07-14 uid Jeff Zemerick (CODE SIGNING KEY) sig 3 41EF12D8 2017-07-14 Jeff Zemerick (CODE SIGNING KEY) sub 4096R/7E1DDD74 2017-07-14 sig 41EF12D8 2017-07-14 Jeff Zemerick (CODE SIGNING KEY) -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1 mQINBFlotdwBEAClmhlQUi7cLfcPHSLFN+TXTUEmDN3n+75/rJTgQnUzGvMjomJL 0QpouGGCzJM0XyFJO/KHWm1eurNtx0YGBTBWjvR1LMtBdcfg6WQJlz2PR4TcQCmu Hj+vgBi14X1raT1Ek8kyPcomnTRWjz0tbIhEx08/8kvrDrHUoMh/acu638j7sVKM FdtMxI66jGZjixB2brWCkFaRK3TpNd2R0GaAxNZOT/Z8VcOPU48fRimWf6PhYuor 5D2/85g5L9WNUTxA7ih0Py9XgtB24CZmBzvQfJ7t8+I4tjQtBd4yMuADmnoKppAU WQXlWj/5cNOkCIVViZpeUJuIQcbepodSoAkwlcMGEX2eVs4OT25cGfdc6taEf3ZB qS67sTOwSe5tT8KiFuRvpfrd4C4yfsuYumzOxpAaLiggQgBBM+CDp6CtnwdAOCkG 50psjn/5ubvnmkhB7TowCp7Vua44Wf2dQphdymn4k99Xoo6lgnpUhlBlY8c0FgfO q5/biJcu93FJjOmmTpapAhBNpov/9tfz4sLx1B2Tcy+lqIA3pFEuX4rY7vavPo49 m4u03+J3m5Yqp/1XtMgyrdRRQEY+c5fY4F7fSgqGaB2t0vvgqDkkfyzhMTXtSXb5 +s5CUjeqyJ6y5tSRmPngwyCid99lrky5mjj3/lqwLbgpsh8MEVydh9Gx/wARAQAB tDdKZWZmIFplbWVyaWNrIChDT0RFIFNJR05JTkcgS0VZKSA8anplbWVyaWNrQGFw YWNoZS5vcmc+iQI3BBMBAgAhAhsDAh4BAheABQJZaLhIBQsJCAcDBRUKCQgLBRYC AwEAAAoJEGDmOthB7xLY430P/iTbgncVwOZQR79lfCtwwhwDbe9BKP0fqCcoN6yF t9fjT55vomd2YxO4kyDivzVoFYAdKEopbkDnOZuEonGO7SKb6ysAbvlIhvy0Zxba uD1jTTjOxT+xlwz//5mFMIAVlJk46CyFfd72KFCs4Fsjj9isqiNDmphk2+PsviMT 759mW1R+pevT2kzx+l3nNFJkJvqEba/PNLZOZidhyPru0vNBdQ/5JHiy5cXmPea/ N3C9S7IVwiS00PrcF2oh4KOyXvsH6q8Rk/dXqOeTLll249rxt63Srmhbs2asFctV ub2u2L7aLjsJImCY5qusHHP80Hjf2Cnn5jbprZ7IM2zNcCAt+DjxKkM7nliLdExi 7oCJLXgH2oS0Vw1a9+x6m5ZwFvnrtsoWPJGnmueltFisnPjp/Z+/NjeP40mwfK5t m7QDduRNBr3w/GqWPERL0SOBIykoR/eHCZEu3Y4cZoZJNcb5XCrbAGFLxUj5mpLI QPTNNxoPzoZOkuG5hkObNi+8/Q0uBn/Uy3JGK2SU04iFqF756LgO7lKA3RPnPGQ9 UBe1dbP8d8gl0liyJqf12M6jJRV6dGP4QVtfQwY4mYl1I7aN6nsmMC8eJ+VUxX+7 1kY90MvFnu9viqltp5AbL5E2jGjcNUTe3CeCaJHJFEC6TN5IWZKzAtbFSBEOWmRn EpWAuQINBFlotdwBEAC1V/XjAfqyLqWcWMSVhJhEusRZxlIwRilnm4l0pvepij+W Dyvi3FgCEZ9T6Jy44EgsgWsWG+p4uDgSONAgWexsYoF4cmCXol+WzBP6g0ZCLI7o 2IM7YrhgwJmx+OssafRlGv9SQHbUc8XM30p0pjX4hCnoHESZGdgYLFEWiviGxj7d erS6n62y/bsbV7ecVAakYTugLLXlRZqOP4brdt46XwKDP/J/1F+hVEwv+OBBy7pZ lTql8N0iZi0I8cCPZvpwk/zFvimsCevx/n49CjNLlZ9Uns8OUCh7DKywgqi6hc55 /iiawq+PnGUL6isGmiSB7UNuacTrRDlJWY0uSOXdR77jyqaV3LgCg78PtKJHG9Ja oUcp02uLOL6uJ65Z4vFg7Dkh6xixpa179kNkqEurIMGV8zjbjl+RC24nvAgtE25Y V5Cnv6LMNywN9BBsHpqLC9SlOL6lX/ROeBuGn+w6O4MjHHrxBaa3D67tpYjpUah6 onuW48n/83NQ1vJMXHoTTGACw7Z5aZkEN0pEYgit64ATtAO8x+jw3wpRm6eeZykn ZQ3rhPNMMZU/8wMNZbWIwuGKf8mZ+DN1Lc/rW4u/6Wdp/J2Wj3yWpbFp0yQQ6KS2 Dbuz2oBuX4woE7+tlGM2W26VarZ8mAgC6AoZcDQL9CAsBYz16N3tnl8xCV7IoQAR AQABiQIfBBgBAgAJBQJZaLXcAhsMAAoJEGDmOthB7xLY1XMP/RQ3kdE94eqtcbvC aSJXekd/N38shOZAXjChf0wmt5fdTl2VWE0bS8vYt3eutNwSc51iS3933rdNNGYU w1737oXYj+nR8TvNejGtqp63oDCNuaUvUXPsQ0LYHA0g3sI5QBHDJs1e8+GHFYlh lbrCX6YxUsXqdiwOgGYkcEHDbsJ1QW9vuG8MLuqZia6cpV304QUeWP7/bDDCNm44 kD4Y7B+6QTXrQzrUBZYKxelVj3yn46bo/PQZDywd67el7gSAH2XldVWmj7VOx1lh SwwA2MmWD8zT7/eT3d5G//2HaiQhwhgLXR+CSm7J+hWgjFWjfR2MLAYVFdLSgICY P6hpdokoy4Yk2wW5+0bON6Fa9MigmTpPG2tut28dSo7cC7PssmOsJo/sCO1+MwB5 aelEZXZ+6waJ+FsgFN8rz2Fem862WhkLnyhNMc+DsPRu8hkhn9GeLmTknKyW20ew BMRvBS/t8in2HkUOkiEi2ZFtLj0z+pjkVUIa+yEnTguypiVxJCjeiEj+5x/1ef8e Q23dtbvyb9AkFCv+dF+kH2rEu5fDQw8r1h8FDpuDAKX1kHKJIVfyGHaDxTJgjBto 5Sh1fF7CKVgTHtA4xfuYqqmCQXjOhEkx1epk3yqXD7/MuVXyscTMadezTnEoqFNa FHIKOBUma/bNr1dta6xhG2/0UoIU =TOQS -----END PGP PUBLIC KEY BLOCK----- apache-opennlp-2.3.3-src/LICENSE0100644 0000000 0000000 00000040500 14523004075 016541 0ustar00rootroot0000000 0000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. The following license applies to the Snowball stemmers: Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The following license applies to the Wordpiece tokenizer implementation: The MIT License (MIT) Copyright (c) 2019 Rob Rua Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. The following license applies to the ONNX Runtime: MIT License Copyright (c) Microsoft Corporation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. The following license applies to the SLF4J API: MIT license Copyright (c) 2004-2022 QOS.ch Sarl (Switzerland) All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. apache-opennlp-2.3.3-src/NOTICE0100644 0000000 0000000 00000010317 14523004075 016443 0ustar00rootroot0000000 0000000 Apache OpenNLP Copyright 2021-2024 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). ============================================================================ The snowball stemmers in opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball were developed by Martin Porter and Richard Boulton. The full snowball package is available from http://snowball.tartarus.org/ ============================================================================ Wordpiece tokenizer https://github.com/robrua/easy-bert The MIT License (MIT) Copyright (c) 2019 Rob Rua Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ============================================================================ ONNX Runtime MIT License Copyright (c) Microsoft Corporation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ============================================================================ SLF4J API https://github.com/qos-ch/slf4j MIT License Copyright (c) 2004-2022 QOS.ch Sarl (Switzerland) All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ============================================================================ jackson-databind https://github.com/FasterXML/jackson-databind The Apache Software License, Version 2.0 apache-opennlp-2.3.3-src/README.md0100644 0000000 0000000 00000012751 14523004075 017022 0ustar00rootroot0000000 0000000 Welcome to Apache OpenNLP! =========== [![GitHub license](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://raw.githubusercontent.com/apache/opennlp/main/LICENSE) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/org.apache.opennlp/opennlp/badge.svg)](https://maven-badges.herokuapp.com/maven-central/org.apache.opennlp/opennlp) [![Documentation Status](https://img.shields.io/:docs-latest-green.svg)](http://opennlp.apache.org/docs/index.html) [![Build Status](https://github.com/apache/opennlp/workflows/Java%20CI/badge.svg)](https://github.com/apache/opennlp/actions) [![Contributors](https://img.shields.io/github/contributors/apache/opennlp)](https://github.com/apache/opennlp/graphs/contributors) [![GitHub pull requests](https://img.shields.io/github/issues-pr-raw/apache/opennlp.svg)](https://github.com/apache/opennlp/pulls) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/apache/opennlp/badge)](https://api.securityscorecards.dev/projects/github.com/apache/opennlp) [![Stack Overflow](https://img.shields.io/badge/stack%20overflow-opennlp-f1eefe.svg)](https://stackoverflow.com/questions/tagged/opennlp) The Apache OpenNLP library is a machine learning based toolkit for the processing of natural language text. This toolkit is written completely in Java and provides support for common NLP tasks, such as tokenization, sentence segmentation, part-of-speech tagging, named entity extraction, chunking, parsing, coreference resolution, language detection and more! These tasks are usually required to build more advanced text processing services. The goal of the OpenNLP project is to be a mature toolkit for the above mentioned tasks. An additional goal is to provide a large number of pre-built models for a variety of languages, as well as the annotated text resources that those models are derived from. Presently, OpenNLP includes common classifiers such as Maximum Entropy, Perceptron and Naive Bayes. OpenNLP can be used both programmatically through its Java API or from a terminal through its CLI. OpenNLP API can be easily plugged into distributed streaming data pipelines like Apache Flink, Apache NiFi, Apache Spark. ## Useful Links For additional information, visit the [OpenNLP Home Page](http://opennlp.apache.org/) You can use OpenNLP with any language, demo models are provided [here](http://opennlp.sourceforge.net/models-1.5/). The models are fully compatible with the latest release, they can be used for testing or getting started. Please train your own models for all other use cases. Documentation, including JavaDocs, code usage and command-line interface examples are available [here](http://opennlp.apache.org/docs/) You can also follow our [mailing lists](http://opennlp.apache.org/mailing-lists.html) for news and updates, or via social media channels: [![Twitter Follow](https://img.shields.io/twitter/follow/ApacheOpenNLP.svg?style=social)](https://twitter.com/ApacheOpenNLP) ## Overview Currently, the library has different packages: * `opennlp-tools` : The core toolkit. * `opennlp-uima` : A set of [Apache UIMA](https://uima.apache.org) annotators. * `opennlp-brat-annotator` : A set of annotators for [BRAT](http://brat.nlplab.org/) * `opennlp-morfologik-addon` : An addon for Morfologik * `opennlp-dl` : OpenNLP interface implementations for ONNX models using the `onnxruntime` dependency. * `opennlp-dl-gpu` : Replaces `onnxruntime` with the `onnxruntime_gpu` dependency to support GPU acceleration. * `opennlp-sandbox`: Other projects in progress are found in the [sandbox](https://github.com/apache/opennlp-sandbox) ## Getting Started You can import the core toolkit directly from Maven, SBT or Gradle: #### Maven ``` org.apache.opennlp opennlp-tools ${opennlp.version} ``` #### SBT ``` libraryDependencies += "org.apache.opennlp" % "opennlp-tools" % "${opennlp.version}" ``` #### Gradle ``` compile group: "org.apache.opennlp", name: "opennlp-tools", version: "${opennlp.version}" ``` For more details please check our [documentation](http://opennlp.apache.org/docs/) ## Building OpenNLP At least JDK 17 and Maven 3.3.9 are required to build the library. After cloning the repository go into the destination directory and run: ``` mvn install ``` ## Contributing The Apache OpenNLP project is developed by volunteers and is always looking for new contributors to work on all parts of the project. Every contribution is welcome and needed to make it better. A contribution can be anything from a small documentation typo fix to a new component. If you would like to get involved please follow the instructions [here](https://github.com/apache/opennlp/blob/main/.github/CONTRIBUTING.md) apache-opennlp-2.3.3-src/checkstyle.xml0100644 0000000 0000000 00000014035 14523004075 020420 0ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-brat-annotator/opennlp-brat-annotator.iml0100644 0000000 0000000 00000000302 14523004075 027243 0ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-brat-annotator/pom.xml0100644 0000000 0000000 00000007316 14523004075 023465 0ustar00rootroot0000000 0000000 4.0.0 org.apache.opennlp opennlp 2.3.3 ../pom.xml opennlp-brat-annotator jar Apache OpenNLP Brat Annotator UTF-8 org.slf4j slf4j-api org.glassfish.jersey.containers jersey-container-grizzly2-http ${jersey.version} org.glassfish.jersey.media jersey-media-json-jackson ${jersey.version} runtime com.fasterxml.jackson.core jackson-annotations ${jackson.version} runtime com.fasterxml.jackson.core jackson-databind ${jackson.version} runtime net.bytebuddy byte-buddy com.fasterxml.jackson.module jackson-module-jaxb-annotations ${jackson.version} runtime org.apache.opennlp opennlp-tools org.junit.jupiter junit-jupiter-api test org.junit.jupiter junit-jupiter-engine test org.slf4j slf4j-simple test maven-assembly-plugin jar-with-dependencies make-assembly package single apache-opennlp-2.3.3-src/opennlp-brat-annotator/src/main/bin/brat-annotation-service0100644 0000000 0000000 00000002446 14523004075 031113 0ustar00rootroot0000000 0000000 #!/bin/sh # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # Note: Do not output anything in this script file, any output # may be inadvertantly placed in any output files if # output redirection is used. if [ -z "$JAVACMD" ] ; then if [ -n "$JAVA_HOME" ] ; then JAVACMD="$JAVA_HOME/bin/java" else JAVACMD="`which java`" fi fi # Might fail if $0 is a link OPENNLP_HOME=`dirname "$0"`/.. $JAVACMD -Xmx1024m -Dlog4j.configurationFile=../conf/log4j2.xml -cp "$OPENNLP_HOME/lib/*" opennlp.bratann.NameFinderAnnService $@ apache-opennlp-2.3.3-src/opennlp-brat-annotator/src/main/bin/brat-annotation-service.bat0100644 0000000 0000000 00000003555 14523004075 031662 0ustar00rootroot0000000 0000000 @ECHO off REM # Licensed to the Apache Software Foundation (ASF) under one REM # or more contributor license agreements. See the NOTICE file REM # distributed with this work for additional information REM # regarding copyright ownership. The ASF licenses this file REM # to you under the Apache License, Version 2.0 (the REM # "License"); you may not use this file except in compliance REM # with the License. You may obtain a copy of the License at REM # REM # http://www.apache.org/licenses/LICENSE-2.0 REM # REM # Unless required by applicable law or agreed to in writing, REM # software distributed under the License is distributed on an REM # # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY REM # KIND, either express or implied. See the License for the REM # specific language governing permissions and limitations REM # under the License. REM # Note: Do not output anything in this script file, any output REM # may be inadvertantly placed in any output files if REM # output redirection is used. SETLOCAL IF "%JAVA_CMD%" == "" ( IF "%JAVA_HOME%" == "" ( SET JAVA_CMD=java ) ELSE ( REM # Keep JAVA_HOME to short-name without spaces FOR %%A IN ("%JAVA_HOME%") DO SET JAVA_CMD=%%~sfA\bin\java ) ) REM # Should work with Windows XP and greater. If not, specify the path to where it is installed. IF "%OPENNLP_HOME%" == "" ( SET OPENNLP_HOME=%~sp0.. ) ELSE ( REM # Keep OPENNLP_HOME to short-name without spaces FOR %%A IN ("%OPENNLP_HOME%") DO SET OPENNLP_HOME=%%~sfA ) setLocal EnableDelayedExpansion set CLASSPATH=" FOR %%A IN ("%OPENNLP_HOME%\lib\*.jar") DO ( set CLASSPATH=!CLASSPATH!;%%A ) set CLASSPATH=!CLASSPATH!" %JAVA_CMD% -Xmx1024m "-Dlog4j.configurationFile=%OPENNLP_HOME%\conf\log4j2.xml" -cp %CLASSPATH% opennlp.bratann.NameFinderAnnService %* ENDLOCAL./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-brat-annotator_src_main_java_opennlp_bratann_NameFi0100644 0000000 0000000 00000000161 14523004075 032364 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-brat-annotator/src/main/java/opennlp/bratann/NameFinderAnnService.java apache-opennlp-2.3.3-src/opennlp-brat-annotator/src/main/java/opennlp/bratann/NameFinderAnnService.j0100644 0000000 0000000 00000007665 14523004075 034054 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.bratann; import java.io.File; import java.net.URI; import java.util.Arrays; import java.util.List; import javax.ws.rs.core.UriBuilder; import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory; import org.glassfish.jersey.server.ResourceConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.namefind.NameFinderME; import opennlp.tools.namefind.TokenNameFinder; import opennlp.tools.namefind.TokenNameFinderModel; import opennlp.tools.sentdetect.NewlineSentenceDetector; import opennlp.tools.sentdetect.SentenceDetector; import opennlp.tools.sentdetect.SentenceDetectorME; import opennlp.tools.sentdetect.SentenceModel; import opennlp.tools.tokenize.SimpleTokenizer; import opennlp.tools.tokenize.Tokenizer; import opennlp.tools.tokenize.TokenizerME; import opennlp.tools.tokenize.TokenizerModel; import opennlp.tools.tokenize.WhitespaceTokenizer; public class NameFinderAnnService { private static final Logger LOG = LoggerFactory.getLogger(NameFinderAnnService.class); static SentenceDetector sentenceDetector = new NewlineSentenceDetector(); static Tokenizer tokenizer = WhitespaceTokenizer.INSTANCE; static TokenNameFinder[] nameFinders; public static void main(String[] args) throws Exception { if (args.length == 0) { LOG.info("Usage:"); LOG.info("[NameFinderAnnService -serverPort port] [-tokenizerModel file] " + "[-ruleBasedTokenizer whitespace|simple] " + "[-sentenceDetectorModel file] namefinderFile|nameFinderURI"); return; } List argList = Arrays.asList(args); int serverPort = 8080; int serverPortIndex = argList.indexOf("-serverPort") + 1; if (serverPortIndex > 0 && serverPortIndex < args.length) { serverPort = Integer.parseInt(args[serverPortIndex]); } int sentenceModelIndex = argList.indexOf("-sentenceDetectorModel") + 1; if (sentenceModelIndex > 0 && sentenceModelIndex < args.length) { sentenceDetector = new SentenceDetectorME( new SentenceModel(new File(args[sentenceModelIndex]))); } int ruleBasedTokenizerIndex = argList.indexOf("-ruleBasedTokenizer") + 1; if (ruleBasedTokenizerIndex > 0 && ruleBasedTokenizerIndex < args.length) { if ("whitespace".equals(args[ruleBasedTokenizerIndex])) { tokenizer = WhitespaceTokenizer.INSTANCE; } else if ("simple".equals(args[ruleBasedTokenizerIndex])) { tokenizer = SimpleTokenizer.INSTANCE; } else { LOG.error("unknown tokenizer: {}", args[ruleBasedTokenizerIndex]); return; } } int tokenizerModelIndex = argList.indexOf("-tokenizerModel") + 1; if (tokenizerModelIndex > 0 && tokenizerModelIndex < args.length) { tokenizer = new TokenizerME( new TokenizerModel(new File(args[tokenizerModelIndex]))); } nameFinders = new TokenNameFinder[] {new NameFinderME( new TokenNameFinderModel(new File(args[args.length - 1])))}; URI baseUri = UriBuilder.fromUri("http://localhost/").port(serverPort).build(); ResourceConfig config = new ResourceConfig(NameFinderResource.class); GrizzlyHttpServerFactory.createHttpServer(baseUri, config); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-brat-annotator_src_main_java_opennlp_bratann_NameFi0100644 0000000 0000000 00000000157 14523004075 032371 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-brat-annotator/src/main/java/opennlp/bratann/NameFinderResource.java apache-opennlp-2.3.3-src/opennlp-brat-annotator/src/main/java/opennlp/bratann/NameFinderResource.jav0100644 0000000 0000000 00000011014 14523004075 034114 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.bratann; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import opennlp.tools.namefind.TokenNameFinder; import opennlp.tools.sentdetect.SentenceDetector; import opennlp.tools.tokenize.Tokenizer; import opennlp.tools.util.Span; @Path("/ner") public class NameFinderResource { private final SentenceDetector sentDetect = NameFinderAnnService.sentenceDetector; private final Tokenizer tokenizer = NameFinderAnnService.tokenizer; private final TokenNameFinder[] nameFinders = NameFinderAnnService.nameFinders; private static int findNextNonWhitespaceChar(CharSequence s, int beginOffset, int endOffset) { for (int i = beginOffset; i < endOffset; i++) { if (!Character.isSpaceChar(s.charAt(i))) { return i; } } return -1; } @POST @Consumes(MediaType.TEXT_PLAIN) @Produces(MediaType.APPLICATION_JSON) public Map findNames(@QueryParam("model") String modelName, String text) { Span[] sentenceSpans = sentDetect.sentPosDetect(text); Map map = new HashMap<>(); int indexCounter = 0; for (Span sentenceSpan : sentenceSpans) { String sentenceText = sentenceSpan.getCoveredText(text).toString(); // offset of sentence gets lost here! Span[] tokenSpans = tokenizer.tokenizePos(sentenceText); String[] tokens = Span.spansToStrings(tokenSpans, sentenceText); for (TokenNameFinder nameFinder : nameFinders) { Span[] names = nameFinder.find(tokens); for (Span name : names) { int beginOffset = tokenSpans[name.getStart()].getStart() + sentenceSpan.getStart(); int endOffset = tokenSpans[name.getEnd() - 1].getEnd() + sentenceSpan.getStart(); // create a list of new line indexes List newLineIndexes = new ArrayList<>(); // TODO: Code needs to handle case that there are multiple new lines // in a row boolean inNewLineSequence = false; for (int ci = beginOffset; ci < endOffset; ci++) { if (text.charAt(ci) == '\n' || text.charAt(ci) == '\r') { if (!inNewLineSequence) { newLineIndexes.add(ci); } inNewLineSequence = true; } else { inNewLineSequence = false; } } List textSegments = new ArrayList<>(); List spanSegments = new ArrayList<>(); int segmentBegin = beginOffset; for (int newLineOffset : newLineIndexes) { // create segment from begin to offset textSegments.add(text.substring(segmentBegin, newLineOffset)); spanSegments.add(new int[] {segmentBegin, newLineOffset}); segmentBegin = findNextNonWhitespaceChar(text, newLineOffset + 1, endOffset); if (segmentBegin == -1) { break; } } // create left over segment if (segmentBegin != -1) { textSegments.add(text.substring(segmentBegin, endOffset)); spanSegments.add(new int[] {segmentBegin, endOffset}); } NameAnn ann = new NameAnn(); ann.texts = textSegments.toArray(new String[0]); ann.offsets = spanSegments.toArray(new int[spanSegments.size()][]); ann.type = name.getType(); map.put(Integer.toString(indexCounter++), ann); } } } return map; } public static class NameAnn { public int[][] offsets; public String[] texts; public String type; } } apache-opennlp-2.3.3-src/opennlp-distr/README_FOOTER.html0100644 0000000 0000000 00000001002 14523004075 023225 0ustar00rootroot0000000 0000000

How to Report Issues

The Apache OpenNLP project uses JIRA for issue tracking. Please report any issues you find at http://issues.apache.org/jira/browse/opennlp

List of JIRA Issues Fixed in this Release

Click issuesFixed/jira-report.html for the list of issues fixed in this release.

apache-opennlp-2.3.3-src/opennlp-distr/README_HEADER.html0100644 0000000 0000000 00000002627 14523004075 023175 0ustar00rootroot0000000 0000000 Apache OpenNLP Readme apache-opennlp-2.3.3-src/opennlp-distr/opennlp-distr.iml0100644 0000000 0000000 00000000302 14523004075 023627 0ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-distr/pom.xml0100644 0000000 0000000 00000015475 14523004075 021664 0ustar00rootroot0000000 0000000 4.0.0 org.apache.opennlp opennlp 2.3.3 ../pom.xml opennlp-distr pom Apache OpenNLP Distribution ${project.version} org.apache.opennlp opennlp-tools org.apache.opennlp opennlp-uima org.apache.opennlp opennlp-morfologik-addon org.apache.opennlp opennlp-brat-annotator org.slf4j slf4j-api org.apache.logging.log4j log4j-slf4j-impl ${log4j2.version} runtime com.ruleoftech markdown-page-generator-plugin 2.4.0 process-sources generate ${basedir}/../ ${basedir}/target ${basedir}/README_HEADER.html ${basedir}/README_FOOTER.html TABLES,FENCED_CODE_BLOCKS,AUTOLINKS true maven-assembly-plugin bundle-project-sources package single src/main/assembly/bin.xml src/main/assembly/src.xml posix apache-opennlp-${project.version} maven-antrun-plugin 1.8 generate checksums for binary artifacts run verify apache-release org.apache.maven.plugins maven-changes-plugin 2.12.1 default-cli generate-resources jira-report true true ${basedir}/target/issuesFixed/ 1000 docker com.spotify docker-maven-plugin 0.4.13 package build apacheopennlp ${project.basedir}/src/main/docker ${project.version} apache-opennlp-${project.version}-bin.tar.gz / ${project.build.directory} apache-opennlp-${project.version}-bin.tar.gz apache-opennlp-2.3.3-src/opennlp-distr/src/main/assembly/bin.xml0100644 0000000 0000000 00000012643 14523004075 025165 0ustar00rootroot0000000 0000000 bin tar.gz zip true /apache-opennlp-${project.version} runtime false false 644 755 lib true src/main/readme 644 755 . src/main/resources 644 755 conf log4j2.xml . true 644 755 RELEASE_NOTES.html target 644 755 . README.html target/issuesFixed 644 755 issuesFixed src/main/bin 755 755 bin ../opennlp-morfologik-addon/src/main/bin 755 755 bin ../opennlp-brat-annotator/src/main/bin 755 755 bin ../opennlp-tools/lang 644 755 lang ../opennlp-docs/target/docbkx/html 644 755 docs/manual ../opennlp-tools/target/apidocs 644 755 docs/apidocs/opennlp-tools ../opennlp-brat-annotator/target/apidocs 644 755 docs/apidocs/opennlp-brat-annotator ../opennlp-morfologik-addon/target/apidocs 644 755 docs/apidocs/opennlp-morfologik-addon ../opennlp-uima/target/apidocs 644 755 docs/apidocs/opennlp-uima ../opennlp-uima/descriptors true 644 755 docs/opennlp-uima-descriptors apache-opennlp-2.3.3-src/opennlp-distr/src/main/assembly/src.xml0100644 0000000 0000000 00000002370 14523004075 025200 0ustar00rootroot0000000 0000000 src tar.gz zip /apache-opennlp-${project.version}-src ../ **/target/** **/.*/** **/pom.xml.releaseBackup **/release.properties apache-opennlp-2.3.3-src/opennlp-distr/src/main/bin/opennlp0100644 0000000 0000000 00000002563 14523004075 024222 0ustar00rootroot0000000 0000000 #!/bin/sh # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # Note: Do not output anything in this script file, any output # may be inadvertantly placed in any output files if # output redirection is used. if [ -z "$JAVACMD" ] ; then if [ -n "$JAVA_HOME" ] ; then JAVACMD="$JAVA_HOME/bin/java" else JAVACMD="`which java`" fi fi unset HEAP if [ -n "$JAVA_HEAP" ] ; then HEAP="-Xmx$JAVA_HEAP" fi # Might fail if $0 is a link OPENNLP_HOME=`dirname "$0"`/.. $JAVACMD $HEAP -Dlog4j.configurationFile=../conf/log4j2.xml -cp $(echo $OPENNLP_HOME/lib/*.jar | tr ' ' ':') opennlp.tools.cmdline.CLI $@ apache-opennlp-2.3.3-src/opennlp-distr/src/main/bin/opennlp.bat0100644 0000000 0000000 00000003515 14523004075 024765 0ustar00rootroot0000000 0000000 @ECHO off REM # Licensed to the Apache Software Foundation (ASF) under one REM # or more contributor license agreements. See the NOTICE file REM # distributed with this work for additional information REM # regarding copyright ownership. The ASF licenses this file REM # to you under the Apache License, Version 2.0 (the REM # "License"); you may not use this file except in compliance REM # with the License. You may obtain a copy of the License at REM # REM # http://www.apache.org/licenses/LICENSE-2.0 REM # REM # Unless required by applicable law or agreed to in writing, REM # software distributed under the License is distributed on an REM # # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY REM # KIND, either express or implied. See the License for the REM # specific language governing permissions and limitations REM # under the License. REM # Note: Do not output anything in this script file, any output REM # may be inadvertantly placed in any output files if REM # output redirection is used. SETLOCAL IF "%JAVA_CMD%" == "" ( IF "%JAVA_HOME%" == "" ( SET JAVA_CMD=java ) ELSE ( REM # Keep JAVA_HOME to short-name without spaces FOR %%A IN ("%JAVA_HOME%") DO SET JAVA_CMD=%%~sfA\bin\java ) ) REM remove HEAP variable SET HEAP= IF not "%JAVA_HEAP%" == "" ( SET HEAP="-Xmx%JAVA_HEAP%" ) REM # Should work with Windows XP and greater. If not, specify the path to where it is installed. IF "%OPENNLP_HOME%" == "" ( SET OPENNLP_HOME=%~sp0.. ) ELSE ( REM # Keep OPENNLP_HOME to short-name without spaces FOR %%A IN ("%OPENNLP_HOME%") DO SET OPENNLP_HOME=%%~sfA ) SET CLASSPATH="%OPENNLP_HOME%\lib\*" %JAVA_CMD% %HEAP% "-Dlog4j.configurationFile=%OPENNLP_HOME%\conf\log4j2.xml" -cp %CLASSPATH% opennlp.tools.cmdline.CLI %* ENDLOCAL apache-opennlp-2.3.3-src/opennlp-distr/src/main/docker/Dockerfile0100644 0000000 0000000 00000000264 14523004075 025311 0ustar00rootroot0000000 0000000 FROM openjdk:17-alpine MAINTAINER Apache OpenNLP (dev@opennlp.apache.org) ARG OPENNLP_BINARY ENV OPENNLP_BASE_DIR /opt/opennlp ADD $OPENNLP_BINARY $OPENNLP_BASE_DIR CMD ["sh"] apache-opennlp-2.3.3-src/opennlp-distr/src/main/readme/LICENSE0100644 0000000 0000000 00000100213 14523004075 024305 0ustar00rootroot0000000 0000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. The following license applies to the Snowball stemmers: Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF The CDDL 1.1 license applies to jersey and some of its dependencies: COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)Version 1.1 1. Definitions. 1.1. “Contributor†means each individual or entity that creates or contributes to the creation of Modifications. 1.2. “Contributor Version†means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor. 1.3. “Covered Software†means (a) the Original Software, or (b) Modifications or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof. 1.4. “Executable†means the Covered Software in any form other than Source Code. 1.5. “Initial Developer†means the individual or entity that first makes Original Software available under this License. 1.6. “Larger Work†means a work which combines Covered Software or portions thereof with code not governed by the terms of this License. 1.7. “License†means this document. 1.8. “Licensable†means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. 1.9. “Modifications†means the Source Code and Executable form of any of the following: A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications; B. Any new file that contains any part of the Original Software or previous Modification; or C. Any new file that is contributed or otherwise made available under the terms of this License. 1.10. “Original Software†means the Source Code and Executable form of computer software code that is originally released under this License. 1.11. “Patent Claims†means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. 1.12. “Source Code†means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code. 1.13. “You†(or “Yourâ€) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, “You†includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, “control†means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. 2. License Grants. 2.1. The Initial Developer Grant. Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license: (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof). (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License. (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices. 2.2. Contributor Grant. Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party. (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor. 3. Distribution Obligations. 3.1. Availability of Source Code. Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange. 3.2. Modifications. The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License. 3.3. Required Notices. You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer. 3.4. Application of Additional Terms. You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. 3.5. Distribution of Executable Versions. You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. 3.6. Larger Works. You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software. 4. Versions of the License. 4.1. New Versions. Oracle is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License. 4.2. Effect of New Versions. You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward. 4.3. Modified Versions. When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License. 5. DISCLAIMER OF WARRANTY. COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN “AS IS†BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. 6. TERMINATION. 6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. 6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as “Participantâ€) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant. 6.3. If You assert a patent infringement claim against Participant alleging that the Participant Software directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license. 6.4. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination. 7. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. 8. U.S. GOVERNMENT END USERS. The Covered Software is a “commercial item,†as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of “commercial computer software†(as that term is defined at 48 C.F.R. § 252.227-7014(a)(1)) and “commercial computer software documentation†as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License. 9. MISCELLANEOUS. This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software. 10. RESPONSIBILITY FOR CLAIMS. As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California. The BSD 2-clause license applies to the morfologik dependencies: Copyright (c) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.apache-opennlp-2.3.3-src/opennlp-distr/src/main/readme/NOTICE0100644 0000000 0000000 00000000574 14523004075 024215 0ustar00rootroot0000000 0000000 Apache OpenNLP Copyright 2017-2024 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). The snowball stemmers in opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball were developed by Martin Porter and Richard Boulton. The full snowball package is available from http://snowball.tartarus.org/ apache-opennlp-2.3.3-src/opennlp-distr/src/main/resources/log4j2.xml0100644 0000000 0000000 00000002412 14523004075 025702 0ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/README.md0100644 0000000 0000000 00000003003 14523004075 021060 0ustar00rootroot0000000 0000000 # OpenNLP DL This module provides OpenNLP interface implementations for ONNX models using the `onnxruntime` dependency. **Important**: This does not provide the ability to train models. Model training is done outside of OpenNLP. This code provides the ability to use ONNX models from OpenNLP. Models used in the tests are available in the [opennlp evaluation test data](https://nightlies.apache.org/opennlp/opennlp-data.zip) location. ## NameFinderDL Export a Huggingface NER model to ONNX, e.g.: ```bash python -m transformers.onnx --model=dslim/bert-base-NER --feature token-classification exported ``` ## DocumentCategorizerDL Export a Huggingface classification (e.g. sentiment) model to ONNX, e.g.: ```bash python -m transformers.onnx --model=nlptown/bert-base-multilingual-uncased-sentiment --feature sequence-classification exported ``` ## SentenceVectors Convert a sentence vectors model to ONNX, e.g.: Install dependencies: ```bash python3 -m pip install optimum onnx onnxruntime ``` Convert the model: ```python from optimum.onnxruntime import ORTModelForFeatureExtraction from transformers import AutoTokenizer from pathlib import Path model_id="sentence-transformers/all-MiniLM-L6-v2" onnx_path = Path("onnx") # load vanilla transformers and convert to onnx model = ORTModelForFeatureExtraction.from_pretrained(model_id, from_transformers=True) tokenizer = AutoTokenizer.from_pretrained(model_id) # save onnx checkpoint and tokenizer model.save_pretrained(onnx_path) tokenizer.save_pretrained(onnx_path) ``` apache-opennlp-2.3.3-src/opennlp-dl/opennlp-dl.iml0100644 0000000 0000000 00000000302 14523004075 022353 0ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-dl/pom.xml0100644 0000000 0000000 00000006072 14523004075 021127 0ustar00rootroot0000000 0000000 4.0.0 org.apache.opennlp opennlp 2.3.3 ../pom.xml org.apache.opennlp opennlp-dl Apache OpenNLP DL org.apache.opennlp opennlp-tools ${project.version} com.microsoft.onnxruntime onnxruntime ${onnxruntime.version} com.fasterxml.jackson.core jackson-databind ${jackson.version} net.bytebuddy byte-buddy org.slf4j slf4j-api org.junit.jupiter junit-jupiter-api test org.junit.jupiter junit-jupiter-engine test org.slf4j slf4j-simple test org.apache.maven.plugins maven-jar-plugin test-jar apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/opennlp/dl/AbstractDL.java0100644 0000000 0000000 00000004271 14523004075 027145 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.dl; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Stream; import ai.onnxruntime.OrtEnvironment; import ai.onnxruntime.OrtSession; import opennlp.tools.tokenize.Tokenizer; /** * Base class for OpenNLP deep-learning classes using ONNX Runtime. */ public abstract class AbstractDL { public static final String INPUT_IDS = "input_ids"; public static final String ATTENTION_MASK = "attention_mask"; public static final String TOKEN_TYPE_IDS = "token_type_ids"; protected OrtEnvironment env; protected OrtSession session; protected Tokenizer tokenizer; protected Map vocab; /** * Loads a vocabulary {@link File} from disk. * * @param vocabFile The vocabulary file. * @return A map of vocabulary words to integer IDs. * * @throws IOException Thrown if the vocabulary file cannot be opened or read. */ public Map loadVocab(final File vocabFile) throws IOException { final Map vocab = new HashMap<>(); final AtomicInteger counter = new AtomicInteger(0); try (Stream lines = Files.lines(Path.of(vocabFile.getPath()))) { lines.forEach(line -> vocab.put(line, counter.getAndIncrement())); } return vocab; } } apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/opennlp/dl/InferenceOptions.java0100644 0000000 0000000 00000004111 14523004075 030425 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.dl; public class InferenceOptions { private boolean includeAttentionMask = true; private boolean includeTokenTypeIds = true; private boolean gpu; private int gpuDeviceId = 0; private int documentSplitSize = 250; private int splitOverlapSize = 50; public boolean isIncludeAttentionMask() { return includeAttentionMask; } public void setIncludeAttentionMask(boolean includeAttentionMask) { this.includeAttentionMask = includeAttentionMask; } public boolean isIncludeTokenTypeIds() { return includeTokenTypeIds; } public void setIncludeTokenTypeIds(boolean includeTokenTypeIds) { this.includeTokenTypeIds = includeTokenTypeIds; } public boolean isGpu() { return gpu; } public void setGpu(boolean gpu) { this.gpu = gpu; } public int getGpuDeviceId() { return gpuDeviceId; } public void setGpuDeviceId(int gpuDeviceId) { this.gpuDeviceId = gpuDeviceId; } public int getDocumentSplitSize() { return documentSplitSize; } public void setDocumentSplitSize(int documentSplitSize) { this.documentSplitSize = documentSplitSize; } public int getSplitOverlapSize() { return splitOverlapSize; } public void setSplitOverlapSize(int splitOverlapSize) { this.splitOverlapSize = splitOverlapSize; } } apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/opennlp/dl/SpanEnd.java0100644 0000000 0000000 00000002222 14523004075 026504 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.dl; public record SpanEnd(int index, int characterEnd) { @Deprecated(forRemoval = true) public int getIndex() { return index; } @Deprecated(forRemoval = true) public int getCharacterEnd() { return characterEnd; } @Override public String toString() { return "index: " + index + "; character end: " + characterEnd; } } apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/opennlp/dl/Tokens.java0100644 0000000 0000000 00000002746 14523004075 026432 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.dl; /** * Holds the tokens for input to an ONNX model. * * @param tokens The tokens themselves. * @param ids The token IDs as retrieved from the vocabulary. * @param mask The token mask. (Typically all 1.) * @param types The token types. (Typically all 1.) */ public record Tokens(String[] tokens, long[] ids, long[] mask, long[] types) { @Deprecated(forRemoval = true) public String[] getTokens() { return tokens; } @Deprecated(forRemoval = true) public long[] getIds() { return ids; } @Deprecated(forRemoval = true) public long[] getMask() { return mask; } @Deprecated(forRemoval = true) public long[] getTypes() { return types; } } apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/opennlp/dl/doccat/DocumentCategorizerConfig.java0100644 0000000 0000000 00000002207 14523004075 033517 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.dl.doccat; import java.util.Collections; import java.util.Map; public class DocumentCategorizerConfig { private Map id2label; public Map getId2label() { return Collections.unmodifiableMap(id2label); } public void setId2label(Map id2label) { this.id2label = id2label; } } apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/opennlp/dl/doccat/DocumentCategorizerDL.java0100644 0000000 0000000 00000027233 14523004075 032617 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.dl.doccat; import java.io.File; import java.io.IOException; import java.nio.LongBuffer; import java.nio.file.Files; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; import java.util.stream.IntStream; import ai.onnxruntime.OnnxTensor; import ai.onnxruntime.OrtEnvironment; import ai.onnxruntime.OrtException; import ai.onnxruntime.OrtSession; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.dl.AbstractDL; import opennlp.dl.InferenceOptions; import opennlp.dl.Tokens; import opennlp.dl.doccat.scoring.ClassificationScoringStrategy; import opennlp.tools.doccat.DocumentCategorizer; import opennlp.tools.tokenize.WordpieceTokenizer; /** * An implementation of {@link DocumentCategorizer} that performs document classification * using ONNX models. * * @see DocumentCategorizer * @see InferenceOptions * @see ClassificationScoringStrategy */ public class DocumentCategorizerDL extends AbstractDL implements DocumentCategorizer { private static final Logger logger = LoggerFactory.getLogger(DocumentCategorizerDL.class); private final Map categories; private final ClassificationScoringStrategy classificationScoringStrategy; private final InferenceOptions inferenceOptions; /** * Instantiates a {@link DocumentCategorizer document categorizer} using ONNX models. * * @param model The ONNX model file. * @param vocabulary The model file's vocabulary file. * @param categories The categories. * @param classificationScoringStrategy Implementation of {@link ClassificationScoringStrategy} used * to calculate the classification scores given the score of each * individual document part. * @param inferenceOptions {@link InferenceOptions} to control the inference. * * @throws OrtException Thrown if the {@code model} cannot be loaded. * @throws IOException Thrown if errors occurred loading the {@code model} or {@code vocabulary}. */ public DocumentCategorizerDL(File model, File vocabulary, Map categories, ClassificationScoringStrategy classificationScoringStrategy, InferenceOptions inferenceOptions) throws IOException, OrtException { this.env = OrtEnvironment.getEnvironment(); final OrtSession.SessionOptions sessionOptions = new OrtSession.SessionOptions(); if (inferenceOptions.isGpu()) { sessionOptions.addCUDA(inferenceOptions.getGpuDeviceId()); } this.session = env.createSession(model.getPath(), sessionOptions); this.vocab = loadVocab(vocabulary); this.tokenizer = new WordpieceTokenizer(vocab.keySet()); this.categories = categories; this.classificationScoringStrategy = classificationScoringStrategy; this.inferenceOptions = inferenceOptions; } /** * Instantiates a {@link DocumentCategorizer document categorizer} using ONNX models. * * @param model The ONNX model file. * @param vocabulary The model file's vocabulary file. * @param config The model's config file. The file will be used to determine the classification categories. * @param classificationScoringStrategy Implementation of {@link ClassificationScoringStrategy} used * to calculate the classification scores given the score of each * individual document part. * @param inferenceOptions {@link InferenceOptions} to control the inference. * * @throws OrtException Thrown if the {@code model} cannot be loaded. * @throws IOException Thrown if errors occurred loading the {@code model} or {@code vocabulary}. */ public DocumentCategorizerDL(File model, File vocabulary, File config, ClassificationScoringStrategy classificationScoringStrategy, InferenceOptions inferenceOptions) throws IOException, OrtException { this.env = OrtEnvironment.getEnvironment(); final OrtSession.SessionOptions sessionOptions = new OrtSession.SessionOptions(); if (inferenceOptions.isGpu()) { sessionOptions.addCUDA(inferenceOptions.getGpuDeviceId()); } this.session = env.createSession(model.getPath(), sessionOptions); this.vocab = loadVocab(vocabulary); this.tokenizer = new WordpieceTokenizer(vocab.keySet()); this.categories = readCategoriesFromFile(config); this.classificationScoringStrategy = classificationScoringStrategy; this.inferenceOptions = inferenceOptions; } @Override public double[] categorize(String[] strings) { try { final List tokens = tokenize(strings[0]); final List scores = new LinkedList<>(); for (final Tokens t : tokens) { final Map inputs = new HashMap<>(); inputs.put(INPUT_IDS, OnnxTensor.createTensor(env, LongBuffer.wrap(t.ids()), new long[] {1, t.ids().length})); if (inferenceOptions.isIncludeAttentionMask()) { inputs.put(ATTENTION_MASK, OnnxTensor.createTensor(env, LongBuffer.wrap(t.mask()), new long[] {1, t.mask().length})); } if (inferenceOptions.isIncludeTokenTypeIds()) { inputs.put(TOKEN_TYPE_IDS, OnnxTensor.createTensor(env, LongBuffer.wrap(t.types()), new long[] {1, t.types().length})); } // The outputs from the model. final float[][] v = (float[][]) session.run(inputs).get(0).getValue(); // Keep track of all scores. final double[] categoryScoresForTokens = softmax(v[0]); scores.add(categoryScoresForTokens); } return classificationScoringStrategy.score(scores); } catch (Exception ex) { logger.error("Unload to perform document classification inference", ex); } return new double[]{}; } @Override public double[] categorize(String[] strings, Map map) { return categorize(strings); } @Override public String getBestCategory(double[] doubles) { return categories.get(maxIndex(doubles)); } @Override public int getIndex(String s) { return getKey(s); } @Override public String getCategory(int i) { return categories.get(i); } @Override public int getNumberOfCategories() { return categories.size(); } @Override public String getAllResults(double[] doubles) { return null; } @Override public Map scoreMap(String[] strings) { final double[] scores = categorize(strings); final Map scoreMap = new HashMap<>(); for (int x : categories.keySet()) { scoreMap.put(categories.get(x), scores[x]); } return scoreMap; } @Override public SortedMap> sortedScoreMap(String[] strings) { final double[] scores = categorize(strings); final SortedMap> scoreMap = new TreeMap<>(); for (int x : categories.keySet()) { if (scoreMap.get(scores[x]) == null) { scoreMap.put(scores[x], new HashSet<>()); } scoreMap.get(scores[x]).add(categories.get(x)); } return scoreMap; } private int getKey(String value) { for (Map.Entry entry : categories.entrySet()) { if (entry.getValue().equals(value)) { return entry.getKey(); } } // The String wasn't found as a value in the map. return -1; } private List tokenize(final String text) { final List t = new LinkedList<>(); // In this article as the paper suggests, we are going to segment the input into smaller text and feed // each of them into BERT, it means for each row, we will split the text in order to have some // smaller text (200 words long each) // https://medium.com/analytics-vidhya/text-classification-with-bert-using-transformers-for-long-text-inputs-f54833994dfd // Split the input text into 200 word chunks with 50 overlapping between chunks. final String[] whitespaceTokenized = text.split("\\s+"); for (int start = 0; start < whitespaceTokenized.length; start = start + inferenceOptions.getDocumentSplitSize()) { // 200 word length chunk // Check the end do don't go past and get a StringIndexOutOfBoundsException int end = start + inferenceOptions.getDocumentSplitSize(); if (end > whitespaceTokenized.length) { end = whitespaceTokenized.length; } // The group is that subsection of string. final String group = String.join(" ", Arrays.copyOfRange(whitespaceTokenized, start, end)); // We want to overlap each chunk by 50 words so scoot back 50 words for the next iteration. start = start - inferenceOptions.getSplitOverlapSize(); // Now we can tokenize the group and continue. final String[] tokens = tokenizer.tokenize(group); final int[] ids = new int[tokens.length]; for (int x = 0; x < tokens.length; x++) { ids[x] = vocab.get(tokens[x]); } final long[] lids = Arrays.stream(ids).mapToLong(i -> i).toArray(); final long[] mask = new long[ids.length]; Arrays.fill(mask, 1); final long[] types = new long[ids.length]; Arrays.fill(types, 0); t.add(new Tokens(tokens, lids, mask, types)); } return t; } /** * Applies softmax to an array of values. * @param input An array of values. * @return The output array. */ private double[] softmax(final float[] input) { final double[] t = new double[input.length]; double sum = 0.0; for (int x = 0; x < input.length; x++) { double val = Math.exp(input[x]); sum += val; t[x] = val; } final double[] output = new double[input.length]; for (int x = 0; x < output.length; x++) { output[x] = (float) (t[x] / sum); } return output; } private int maxIndex(double[] arr) { return IntStream.range(0, arr.length) .reduce((i, j) -> arr[i] > arr[j] ? i : j) .orElse(-1); } private Map readCategoriesFromFile(File config) throws IOException { final String json = new String(Files.readAllBytes(config.toPath())); final ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); final DocumentCategorizerConfig documentCategorizerConfig = objectMapper.readValue(json, DocumentCategorizerConfig.class); final Map categories = new HashMap<>(); for (final String key : documentCategorizerConfig.getId2label().keySet()) { categories.put(Integer.valueOf(key), documentCategorizerConfig.getId2label().get(key)); } return categories; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-dl_src_main_java_opennlp_dl_doccat_scoring_AverageC0100644 0000000 0000000 00000000177 14523004075 032370 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/opennlp/dl/doccat/scoring/AverageClassificationScoringStrategy.java apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/opennlp/dl/doccat/scoring/AverageClassificationSco0100644 0000000 0000000 00000003035 14523004075 034033 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.dl.doccat.scoring; import java.util.List; /** * A {@link ClassificationScoringStrategy} which calculates the document classification scores * by averaging the scores for all individual parts of a document. * * @see ClassificationScoringStrategy */ public class AverageClassificationScoringStrategy implements ClassificationScoringStrategy { @Override public double[] score(List scores) { final int values = scores.get(0).length; final double[] averages = new double[values]; int j = 0; for (int i = 0; i < values; i++) { double sum = 0; for (final double[] score : scores) { sum += score[i]; } averages[j++] = (sum / scores.size()); } return averages; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-dl_src_main_java_opennlp_dl_doccat_scoring_Classifi0100644 0000000 0000000 00000000170 14523004075 032441 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/opennlp/dl/doccat/scoring/ClassificationScoringStrategy.java apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/opennlp/dl/doccat/scoring/ClassificationScoringStr0100644 0000000 0000000 00000002653 14523004075 034116 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.dl.doccat.scoring; import java.util.List; /** * Used to determine the scores of document classification. During classification, * documents are separated into smaller parts. The classification is run on each part. * Implementations of this interface are used to determine the score from the scores * of each individual part. */ public interface ClassificationScoringStrategy { /** * Calculate the final scores based on the scores of the individual document parts. * @param scores The scores for each individual part of the document. * @return The calculated scores. */ double[] score(List scores); } apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/opennlp/dl/namefinder/NameFinderDL.java0100644 0000000 0000000 00000033274 14523004075 031527 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.dl.namefinder; import java.io.File; import java.io.IOException; import java.nio.LongBuffer; import java.util.Arrays; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import ai.onnxruntime.OnnxTensor; import ai.onnxruntime.OrtEnvironment; import ai.onnxruntime.OrtException; import ai.onnxruntime.OrtSession; import opennlp.dl.AbstractDL; import opennlp.dl.InferenceOptions; import opennlp.dl.SpanEnd; import opennlp.dl.Tokens; import opennlp.tools.namefind.TokenNameFinder; import opennlp.tools.sentdetect.SentenceDetector; import opennlp.tools.tokenize.WordpieceTokenizer; import opennlp.tools.util.Span; /** * An implementation of {@link TokenNameFinder} that uses ONNX models. * * @see TokenNameFinder * @see InferenceOptions */ public class NameFinderDL extends AbstractDL implements TokenNameFinder { public static final String I_PER = "I-PER"; public static final String B_PER = "B-PER"; public static final String SEPARATOR = "[SEP]"; private static final String CHARS_TO_REPLACE = "##"; private final SentenceDetector sentenceDetector; private final Map ids2Labels; private final InferenceOptions inferenceOptions; /** * Instantiates a {@link TokenNameFinder name finder} using ONNX models. * * @param model The ONNX model file. * @param vocabulary The model file's vocabulary file. * @param ids2Labels The mapping of ids to labels. * @param sentenceDetector The {@link SentenceDetector} to be used. * * @throws OrtException Thrown if the {@code model} cannot be loaded. * @throws IOException Thrown if errors occurred loading the {@code model} or {@code vocabulary}. */ public NameFinderDL(File model, File vocabulary, Map ids2Labels, SentenceDetector sentenceDetector) throws IOException, OrtException { this(model, vocabulary, ids2Labels, new InferenceOptions(), sentenceDetector); } /** * Instantiates a {@link TokenNameFinder name finder} using ONNX models. * * @param model The ONNX model file. * @param vocabulary The model file's vocabulary file. * @param ids2Labels The mapping of ids to labels. * @param inferenceOptions {@link InferenceOptions} to control the inference. * @param sentenceDetector The {@link SentenceDetector} to be used. * * @throws OrtException Thrown if the {@code model} cannot be loaded. * @throws IOException Thrown if errors occurred loading the {@code model} or {@code vocabulary}. */ public NameFinderDL(File model, File vocabulary, Map ids2Labels, InferenceOptions inferenceOptions, SentenceDetector sentenceDetector) throws IOException, OrtException { this.env = OrtEnvironment.getEnvironment(); final OrtSession.SessionOptions sessionOptions = new OrtSession.SessionOptions(); if (inferenceOptions.isGpu()) { sessionOptions.addCUDA(inferenceOptions.getGpuDeviceId()); } this.session = env.createSession(model.getPath(), sessionOptions); this.ids2Labels = ids2Labels; this.vocab = loadVocab(vocabulary); this.tokenizer = new WordpieceTokenizer(vocab.keySet()); this.inferenceOptions = inferenceOptions; this.sentenceDetector = sentenceDetector; } @Override public Span[] find(String[] input) { final List spans = new LinkedList<>(); // Join the tokens here because they will be tokenized using Wordpiece during inference. final String text = String.join(" ", input); final String[] sentences = sentenceDetector.sentDetect(text); for (String sentence : sentences) { // The WordPiece tokenized text. This changes the spacing in the text. final List wordpieceTokens = tokenize(sentence); for (final Tokens tokens : wordpieceTokens) { try { // The inputs to the ONNX model. final Map inputs = new HashMap<>(); inputs.put(INPUT_IDS, OnnxTensor.createTensor(env, LongBuffer.wrap(tokens.ids()), new long[] {1, tokens.ids().length})); if (inferenceOptions.isIncludeAttentionMask()) { inputs.put(ATTENTION_MASK, OnnxTensor.createTensor(env, LongBuffer.wrap(tokens.mask()), new long[] {1, tokens.mask().length})); } if (inferenceOptions.isIncludeTokenTypeIds()) { inputs.put(TOKEN_TYPE_IDS, OnnxTensor.createTensor(env, LongBuffer.wrap(tokens.types()), new long[] {1, tokens.types().length})); } // The outputs from the model. final float[][][] v = (float[][][]) session.run(inputs).get(0).getValue(); // Find consecutive B-PER and I-PER labels and combine the spans where necessary. // There are also B-LOC and I-LOC tags for locations that might be useful at some point. // Keep track of where the last span was so when there are multiple/duplicate // spans we can get the next one instead of the first one each time. int characterStart = 0; final String[] toks = tokens.tokens(); // We are looping over the vector for each word, // finding the index of the array that has the maximum value, // and then finding the token classification that corresponds to that index. for (int x = 0; x < v[0].length; x++) { final float[] arr = v[0][x]; final int maxIndex = maxIndex(arr); final String label = ids2Labels.get(maxIndex); // TODO: Need to make sure this value is between 0 and 1? // Can we do thresholding without it between 0 and 1? final double confidence = arr[maxIndex]; // / 10; // Is this is the start of a person entity. if (B_PER.equals(label)) { String spanText; // Find the end index of the span in the array (where the label is not I-PER). final SpanEnd spanEnd = findSpanEnd(v, x, ids2Labels, toks); // If the end is -1 it means this is a single-span token. // If the end is != -1 it means this is a multi-span token. if (spanEnd.index() != -1) { final StringBuilder sb = new StringBuilder(); // We have to concatenate the tokens. // Add each token in the array and separate them with a space. // We'll separate each with a single space because later we'll find the original span // in the text and ignore spacing between individual tokens in findByRegex(). int end = spanEnd.index(); for (int i = x; i <= end; i++) { // If the next token starts with ##, combine it with this token. if (toks[i + 1].startsWith(CHARS_TO_REPLACE)) { sb.append(toks[i]).append(toks[i + 1].replace(CHARS_TO_REPLACE, "")); // Append a space unless the next (next) token starts with ##. if (!toks[i + 2].startsWith(CHARS_TO_REPLACE)) { sb.append(" "); } // Skip the next token since we just included it in this iteration. i++; } else { sb.append(toks[i].replace(CHARS_TO_REPLACE, "")); // Append a space unless the next token is a period. if (!".".equals(toks[i + 1])) { sb.append(" "); } } } // This is the text of the span. We use the whole original input text and not one // of the splits. This gives us accurate character positions. spanText = findByRegex(text, sb.toString().trim()).trim(); } else { // This is a single-token span so there is nothing else to do except grab the token. spanText = toks[x]; } if (!SEPARATOR.equals(spanText)) { spanText = spanText.replace(CHARS_TO_REPLACE, ""); // This ignores other potential matches in the same sentence // by only taking the first occurrence. characterStart = text.indexOf(spanText, characterStart); // TODO: This check should not be needed because the span was found. // If we aren't finding it now it's because there's a whitespace difference. if (characterStart != -1) { final int characterEnd = characterStart + spanText.length(); spans.add(new Span(characterStart, characterEnd, spanText, confidence)); // OP-1: Only increment characterStart by one. characterStart++; } } } } } catch (OrtException ex) { throw new RuntimeException("Error performing namefinder inference: " + ex.getMessage(), ex); } } } return spans.toArray(new Span[0]); } @Override public void clearAdaptiveData() { // No use in this implementation. } private SpanEnd findSpanEnd(float[][][] v, int startIndex, Map id2Labels, String[] tokens) { // -1 means there is no follow-up token, so it is a single-token span. int index = -1; int characterEnd = 0; // Starts at the span start in the vector. // Looks at the next token to see if it is an I-PER. // Go until the next token is something other than I-PER. // When the next token is not I-PER, return the previous index. for (int x = startIndex + 1; x < v[0].length; x++) { // Get the next item. final float[] arr = v[0][x]; // See if the next token has an I-PER label. final String nextTokenClassification = id2Labels.get(maxIndex(arr)); if (!I_PER.equals(nextTokenClassification)) { index = x - 1; break; } } // Find where the span ends based on the tokens. for (int x = 1; x <= index && x < tokens.length; x++) { characterEnd += tokens[x].length(); } // Account for the number of spaces (that is the number of tokens). // (One space per token.) characterEnd += index - 1; return new SpanEnd(index, characterEnd); } private int maxIndex(float[] arr) { double max = Float.NEGATIVE_INFINITY; int index = -1; for (int x = 0; x < arr.length; x++) { if (arr[x] > max) { index = x; max = arr[x]; } } return index; } private static String findByRegex(String text, String span) { final String regex = span .replaceAll(" ", "\\\\s+") .replaceAll("\\)", "\\\\)") .replaceAll("\\(", "\\\\("); final Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); final Matcher matcher = pattern.matcher(text); if (matcher.find()) { return matcher.group(0); } // For some reason the regex match wasn't found. Just return the original span. return span; } private List tokenize(final String text) { final List t = new LinkedList<>(); // In this article as the paper suggests, we are going to segment the input into smaller text and feed // each of them into BERT, it means for each row, we will split the text in order to have some // smaller text (200 words long each) // https://medium.com/analytics-vidhya/text-classification-with-bert-using-transformers-for-long-text-inputs-f54833994dfd // Split the input text into 200 word chunks with 50 overlapping between chunks. final String[] whitespaceTokenized = text.split("\\s+"); for (int start = 0; start < whitespaceTokenized.length; start = start + inferenceOptions.getDocumentSplitSize()) { // 200 word length chunk // Check the end do don't go past and get a StringIndexOutOfBoundsException int end = start + inferenceOptions.getDocumentSplitSize(); if (end > whitespaceTokenized.length) { end = whitespaceTokenized.length; } // The group is that subsection of string. final String group = String.join(" ", Arrays.copyOfRange(whitespaceTokenized, start, end)); // We want to overlap each chunk by 50 words so scoot back 50 words for the next iteration. start = start - inferenceOptions.getSplitOverlapSize(); // Now we can tokenize the group and continue. final String[] tokens = tokenizer.tokenize(group); final int[] ids = new int[tokens.length]; for (int x = 0; x < tokens.length; x++) { ids[x] = vocab.get(tokens[x]); } final long[] lids = Arrays.stream(ids).mapToLong(i -> i).toArray(); final long[] mask = new long[ids.length]; Arrays.fill(mask, 1); final long[] types = new long[ids.length]; Arrays.fill(types, 0); t.add(new Tokens(tokens, lids, mask, types)); } return t; } } apache-opennlp-2.3.3-src/opennlp-dl/src/main/java/opennlp/dl/vectors/SentenceVectorsDL.java0100644 0000000 0000000 00000007103 14523004075 032176 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.dl.vectors; import java.io.File; import java.io.IOException; import java.nio.LongBuffer; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import ai.onnxruntime.OnnxTensor; import ai.onnxruntime.OrtEnvironment; import ai.onnxruntime.OrtException; import ai.onnxruntime.OrtSession; import opennlp.dl.AbstractDL; import opennlp.dl.Tokens; import opennlp.tools.tokenize.Tokenizer; import opennlp.tools.tokenize.WordpieceTokenizer; /** * Facilitates the generation of sentence vectors using * a sentence-transformers model converted to ONNX. */ public class SentenceVectorsDL extends AbstractDL { /** * Instantiates a {@link SentenceVectorsDL sentence detector} using ONNX models. * * @param model The file name of a sentence vectors ONNX model. * @param vocabulary The file name of the vocabulary file for the model. * * @throws OrtException Thrown if the {@code model} cannot be loaded. * @throws IOException Thrown if errors occurred loading the {@code model} or {@code vocabulary}. */ public SentenceVectorsDL(final File model, final File vocabulary) throws OrtException, IOException { env = OrtEnvironment.getEnvironment(); session = env.createSession(model.getPath(), new OrtSession.SessionOptions()); vocab = loadVocab(new File(vocabulary.getPath())); tokenizer = new WordpieceTokenizer(vocab.keySet()); } /** * Generates vectors given a sentence. * * @param sentence The input sentence. * * @throws OrtException Thrown if an error occurs during inference. */ public float[] getVectors(final String sentence) throws OrtException { final Tokens tokens = tokenize(sentence, tokenizer, vocab); final Map inputs = new HashMap<>(); inputs.put(INPUT_IDS, OnnxTensor.createTensor(env, LongBuffer.wrap(tokens.ids()), new long[] {1, tokens.ids().length})); inputs.put(ATTENTION_MASK, OnnxTensor.createTensor(env, LongBuffer.wrap(tokens.mask()), new long[] {1, tokens.mask().length})); inputs.put(TOKEN_TYPE_IDS, OnnxTensor.createTensor(env, LongBuffer.wrap(tokens.types()), new long[] {1, tokens.types().length})); final float[][][] v = (float[][][]) session.run(inputs).get(0).getValue(); return v[0][0]; } private Tokens tokenize(final String text, Tokenizer tokenizer, Map vocab) { final String[] tokens = tokenizer.tokenize(text); final int[] ids = new int[tokens.length]; final long[] mask = new long[ids.length]; for (int x = 0; x < tokens.length; x++) { ids[x] = vocab.get(tokens[x]); } final long[] lids = Arrays.stream(ids).mapToLong(i -> i).toArray(); final long[] types = new long[ids.length]; Arrays.fill(types, 1); return new Tokens(tokens, lids, mask, types); } } apache-opennlp-2.3.3-src/opennlp-dl/src/test/java/opennlp/dl/AbstractDLTest.java0100644 0000000 0000000 00000002667 14523004075 030047 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.dl; import java.io.File; import java.io.FileNotFoundException; import opennlp.tools.util.StringUtil; public abstract class AbstractDLTest { public File getOpennlpDataDir() throws FileNotFoundException { final String dataDirectory = System.getProperty("OPENNLP_DATA_DIR"); if (dataDirectory == null || StringUtil.isEmpty(dataDirectory)) { throw new IllegalArgumentException("The OPENNLP_DATA_DIR is not set."); } final File file = new File(dataDirectory); if (!file.exists()) { throw new FileNotFoundException("The OPENNLP_DATA_DIR path of " + dataDirectory + " was not found."); } return file; } } apache-opennlp-2.3.3-src/opennlp-dl/src/test/java/opennlp/dl/doccat/DocumentCategorizerDLEval.java0100644 0000000 0000000 00000030021 14523004075 033447 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.dl.doccat; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import ai.onnxruntime.OrtException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.dl.AbstractDLTest; import opennlp.dl.InferenceOptions; import opennlp.dl.doccat.scoring.AverageClassificationScoringStrategy; public class DocumentCategorizerDLEval extends AbstractDLTest { private static final Logger logger = LoggerFactory.getLogger(DocumentCategorizerDLEval.class); final String text = "We try hard to identify the sources and licenses of all media such as text," + " images or sounds used in our encyclopedia articles. Still, we cannot guarantee that all " + "media are used or marked correctly: for example, if an image description page states " + "that an image was in the public domain, you should still check yourself whether that claim " + "appears correct and decide for yourself whether your use of the image would be fine under " + "the laws applicable to you. Wikipedia is primarily subject to U.S. law; re-users outside " + "the U.S. should be aware that they are subject to the laws of their country, which almost " + "certainly are different. Images published under the GFDL or one of the Creative Commons " + "Licenses are unlikely to pose problems, as these are specific licenses with precise terms " + "worldwide. Public domain images may need to be re-evaluated by a re-user because it depends " + "on each country's copyright laws what is in the public domain there. There is no guarantee " + "that something in the public domain in the U.S. was also in the public domain in your country."; @Test public void categorize() throws IOException, OrtException { final File model = new File(getOpennlpDataDir(), "onnx/doccat/nlptown_bert-base-multilingual-uncased-sentiment.onnx"); final File vocab = new File(getOpennlpDataDir(), "onnx/doccat/nlptown_bert-base-multilingual-uncased-sentiment.vocab"); final DocumentCategorizerDL documentCategorizerDL = new DocumentCategorizerDL(model, vocab, getCategories(), new AverageClassificationScoringStrategy(), new InferenceOptions()); final double[] result = documentCategorizerDL.categorize(new String[]{text}); // Sort the result for easier comparison. final double[] sortedResult = Arrays.stream(result) .boxed() .sorted(Collections.reverseOrder()).mapToDouble(Double::doubleValue).toArray(); final double[] expected = new double[] {0.3391093313694, 0.2611352801322937, 0.24420668184757233, 0.11939861625432968, 0.03615010157227516}; logger.debug("Actual: {}", Arrays.toString(sortedResult)); logger.debug("Expected: {}", Arrays.toString(expected)); Assertions.assertArrayEquals(expected, sortedResult, 0.000001); Assertions.assertEquals(5, result.length); final String category = documentCategorizerDL.getBestCategory(result); Assertions.assertEquals("bad", category); } @Test public void categorizeWithAutomaticLabels() throws IOException, OrtException { final File model = new File(getOpennlpDataDir(), "onnx/doccat/nlptown_bert-base-multilingual-uncased-sentiment.onnx"); final File vocab = new File(getOpennlpDataDir(), "onnx/doccat/nlptown_bert-base-multilingual-uncased-sentiment.vocab"); final File config = new File(getOpennlpDataDir(), "onnx/doccat/nlptown_bert-base-multilingual-uncased-sentiment.json"); final DocumentCategorizerDL documentCategorizerDL = new DocumentCategorizerDL(model, vocab, config, new AverageClassificationScoringStrategy(), new InferenceOptions()); final double[] result = documentCategorizerDL.categorize(new String[]{text}); // Sort the result for easier comparison. final double[] sortedResult = Arrays.stream(result) .boxed() .sorted(Collections.reverseOrder()).mapToDouble(Double::doubleValue).toArray(); final double[] expected = new double[] {0.3391093313694, 0.2611352801322937, 0.24420668184757233, 0.11939861625432968, 0.03615010157227516}; logger.debug("Actual: {}", Arrays.toString(sortedResult)); logger.debug("Expected: {}", Arrays.toString(expected)); Assertions.assertArrayEquals(expected, sortedResult, 0.000001); Assertions.assertEquals(5, result.length); final String category = documentCategorizerDL.getBestCategory(result); Assertions.assertEquals("2 stars", category); } @Disabled("This test will should only be run if a GPU device is present.") @Test public void categorizeWithGpu() throws Exception { final File model = new File(getOpennlpDataDir(), "onnx/doccat/nlptown_bert-base-multilingual-uncased-sentiment.onnx"); final File vocab = new File(getOpennlpDataDir(), "onnx/doccat/nlptown_bert-base-multilingual-uncased-sentiment.vocab"); final InferenceOptions inferenceOptions = new InferenceOptions(); inferenceOptions.setGpu(true); inferenceOptions.setGpuDeviceId(0); final DocumentCategorizerDL documentCategorizerDL = new DocumentCategorizerDL(model, vocab, getCategories(), new AverageClassificationScoringStrategy(), new InferenceOptions()); final double[] result = documentCategorizerDL.categorize(new String[]{"I am happy"}); logger.debug(Arrays.toString(result)); final double[] expected = new double[] {0.007819971069693565, 0.006593209225684404, 0.04995147883892059, 0.3003573715686798, 0.6352779865264893}; Assertions.assertArrayEquals(expected, result, 0.000001); Assertions.assertEquals(5, result.length); final String category = documentCategorizerDL.getBestCategory(result); Assertions.assertEquals("very good", category); } @Test public void categorizeWithInferenceOptions() throws Exception { final File model = new File(getOpennlpDataDir(), "onnx/doccat/lvwerra_distilbert-imdb.onnx"); final File vocab = new File(getOpennlpDataDir(), "onnx/doccat/lvwerra_distilbert-imdb.vocab"); final InferenceOptions inferenceOptions = new InferenceOptions(); inferenceOptions.setIncludeTokenTypeIds(false); final Map categories = new HashMap<>(); categories.put(0, "negative"); categories.put(1, "positive"); final DocumentCategorizerDL documentCategorizerDL = new DocumentCategorizerDL(model, vocab, categories, new AverageClassificationScoringStrategy(), inferenceOptions); final double[] result = documentCategorizerDL.categorize(new String[]{"I am angry"}); final double[] expected = new double[]{0.8851314783096313, 0.11486853659152985}; Assertions.assertArrayEquals(expected, result, 0.000001); Assertions.assertEquals(2, result.length); final String category = documentCategorizerDL.getBestCategory(result); Assertions.assertEquals("negative", category); } @Test public void scoreMap() throws Exception { final File model = new File(getOpennlpDataDir(), "onnx/doccat/nlptown_bert-base-multilingual-uncased-sentiment.onnx"); final File vocab = new File(getOpennlpDataDir(), "onnx/doccat/nlptown_bert-base-multilingual-uncased-sentiment.vocab"); final DocumentCategorizerDL documentCategorizerDL = new DocumentCategorizerDL(model, vocab, getCategories(), new AverageClassificationScoringStrategy(), new InferenceOptions()); final Map result = documentCategorizerDL.scoreMap(new String[]{"I am happy"}); Assertions.assertEquals(0.6352779865264893, result.get("very good"), 0.000001); Assertions.assertEquals(0.3003573715686798, result.get("good"), 0.000001); Assertions.assertEquals(0.04995147883892059, result.get("neutral"), 0.000001); Assertions.assertEquals(0.006593209225684404, result.get("bad"), 0.000001); Assertions.assertEquals(0.007819971069693565, result.get("very bad"), 0.000001); } @Test public void sortedScoreMap() throws IOException, OrtException { final File model = new File(getOpennlpDataDir(), "onnx/doccat/nlptown_bert-base-multilingual-uncased-sentiment.onnx"); final File vocab = new File(getOpennlpDataDir(), "onnx/doccat/nlptown_bert-base-multilingual-uncased-sentiment.vocab"); final DocumentCategorizerDL documentCategorizerDL = new DocumentCategorizerDL(model, vocab, getCategories(), new AverageClassificationScoringStrategy(), new InferenceOptions()); final Map> result = documentCategorizerDL.sortedScoreMap(new String[]{"I am happy"}); Assertions.assertNotNull(result, "Result must not be NULL."); Assertions.assertEquals(5, result.size()); final Iterator>> it = result.entrySet().iterator(); // we assume a sorted map here, so lets check in sorted order (lower values first). Map.Entry> e = it.next(); Assertions.assertEquals(0.006593209225684404, e.getKey(), 0.000001); Assertions.assertEquals(e.getValue().size(), 1); e = it.next(); Assertions.assertEquals(0.007819971069693565, e.getKey(), 0.000001); Assertions.assertEquals(e.getValue().size(), 1); e = it.next(); Assertions.assertEquals(0.04995147883892059, e.getKey(), 0.000001); Assertions.assertEquals(e.getValue().size(), 1); e = it.next(); Assertions.assertEquals(0.3003573715686798, e.getKey(), 0.000001); Assertions.assertEquals(e.getValue().size(), 1); e = it.next(); Assertions.assertEquals(0.6352779865264893, e.getKey(), 0.000001); Assertions.assertEquals(e.getValue().size(), 1); } @Test public void doccat() throws IOException, OrtException { final File model = new File(getOpennlpDataDir(), "onnx/doccat/nlptown_bert-base-multilingual-uncased-sentiment.onnx"); final File vocab = new File(getOpennlpDataDir(), "onnx/doccat/nlptown_bert-base-multilingual-uncased-sentiment.vocab"); final DocumentCategorizerDL documentCategorizerDL = new DocumentCategorizerDL(model, vocab, getCategories(), new AverageClassificationScoringStrategy(), new InferenceOptions()); final int index = documentCategorizerDL.getIndex("bad"); Assertions.assertEquals(1, index); final String category = documentCategorizerDL.getCategory(3); Assertions.assertEquals("good", category); final int number = documentCategorizerDL.getNumberOfCategories(); Assertions.assertEquals(5, number); } private Map getCategories() { final Map categories = new HashMap<>(); categories.put(0, "very bad"); categories.put(1, "bad"); categories.put(2, "neutral"); categories.put(3, "good"); categories.put(4, "very good"); return categories; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-dl_src_test_java_opennlp_dl_doccat_scoring_AverageC0100644 0000000 0000000 00000000203 14523004075 032411 xustar000000000 0000000 131 path=apache-opennlp-2.3.3-src/opennlp-dl/src/test/java/opennlp/dl/doccat/scoring/AverageClassificationScoringStrategyTest.java apache-opennlp-2.3.3-src/opennlp-dl/src/test/java/opennlp/dl/doccat/scoring/AverageClassificationSco0100644 0000000 0000000 00000004206 14523004075 034067 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.dl.doccat.scoring; import java.util.LinkedList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class AverageClassificationScoringStrategyTest { @Test public void calculateAverage1() { final List scores = new LinkedList<>(); scores.add(new double[]{1, 2, 3, 4, 5}); scores.add(new double[]{1, 2, 3, 4, 5}); scores.add(new double[]{1, 2, 3, 4, 5}); final ClassificationScoringStrategy strategy = new AverageClassificationScoringStrategy(); final double[] results = strategy.score(scores); Assertions.assertEquals(1.0, results[0], 0); Assertions.assertEquals(2.0, results[1], 0); Assertions.assertEquals(3.0, results[2], 0); Assertions.assertEquals(4.0, results[3], 0); Assertions.assertEquals(5.0, results[4], 0); } @Test public void calculateAverage2() { final List scores = new LinkedList<>(); scores.add(new double[]{2, 1, 5}); scores.add(new double[]{4, 3, 10}); scores.add(new double[]{6, 5, 15}); final ClassificationScoringStrategy strategy = new AverageClassificationScoringStrategy(); final double[] results = strategy.score(scores); Assertions.assertEquals(4.0, results[0], 0); Assertions.assertEquals(3.0, results[1], 0); Assertions.assertEquals(10.0, results[2], 0); } } apache-opennlp-2.3.3-src/opennlp-dl/src/test/java/opennlp/dl/namefinder/NameFinderDLEval.java0100644 0000000 0000000 00000016724 14523004075 032373 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.dl.namefinder; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import ai.onnxruntime.OrtException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.dl.AbstractDLTest; import opennlp.tools.sentdetect.SentenceDetector; import opennlp.tools.sentdetect.SentenceDetectorME; import opennlp.tools.util.Span; public class NameFinderDLEval extends AbstractDLTest { private static final Logger logger = LoggerFactory.getLogger(NameFinderDLEval.class); private final SentenceDetector sentenceDetector ; public NameFinderDLEval() throws IOException { this.sentenceDetector = new SentenceDetectorME("en"); } @Test public void tokenNameFinder1Test() throws Exception { // This test was written using the dslim/bert-base-NER model. // You will need to update the ids2Labels and assertions if you use a different model. final File model = new File(getOpennlpDataDir(), "onnx/namefinder/model.onnx"); final File vocab = new File(getOpennlpDataDir(), "onnx/namefinder/vocab.txt"); final String[] tokens = new String[] {"George", "Washington", "was", "president", "of", "the", "United", "States", "."}; final NameFinderDL nameFinderDL = new NameFinderDL(model, vocab, getIds2Labels(), sentenceDetector); final Span[] spans = nameFinderDL.find(tokens); for (Span span : spans) { logger.debug(span.toString()); } Assertions.assertEquals(1, spans.length); Assertions.assertEquals(0, spans[0].getStart()); Assertions.assertEquals(17, spans[0].getEnd()); Assertions.assertEquals(8.251646041870117, spans[0].getProb(), 0.00001); Assertions.assertEquals("George Washington", spans[0].getCoveredText(String.join(" ", tokens))); } @Test public void tokenNameFinder2Test() throws Exception { // This test was written using the dslim/bert-base-NER model. // You will need to update the ids2Labels and assertions if you use a different model. final File model = new File(getOpennlpDataDir(), "onnx/namefinder/model.onnx"); final File vocab = new File(getOpennlpDataDir(), "onnx/namefinder/vocab.txt"); final String[] tokens = new String[]{"His", "name", "was", "George", "Washington"}; final NameFinderDL nameFinderDL = new NameFinderDL(model, vocab, getIds2Labels(), sentenceDetector); final Span[] spans = nameFinderDL.find(tokens); for (Span span : spans) { logger.debug(span.toString()); } Assertions.assertEquals(1, spans.length); Assertions.assertEquals(13, spans[0].getStart()); Assertions.assertEquals(30, spans[0].getEnd()); } @Test public void tokenNameFinder3Test() throws Exception { // This test was written using the dslim/bert-base-NER model. // You will need to update the ids2Labels and assertions if you use a different model. final File model = new File(getOpennlpDataDir(), "onnx/namefinder/model.onnx"); final File vocab = new File(getOpennlpDataDir(), "onnx/namefinder/vocab.txt"); final String[] tokens = new String[]{"His", "name", "was", "George"}; final NameFinderDL nameFinderDL = new NameFinderDL(model, vocab, getIds2Labels(), sentenceDetector); final Span[] spans = nameFinderDL.find(tokens); for (Span span : spans) { logger.debug(span.toString()); } Assertions.assertEquals(1, spans.length); Assertions.assertEquals(13, spans[0].getStart()); Assertions.assertEquals(19, spans[0].getEnd()); } @Test public void tokenNameFinderNoInputTest() throws Exception { // This test was written using the dslim/bert-base-NER model. // You will need to update the ids2Labels and assertions if you use a different model. final File model = new File(getOpennlpDataDir(), "onnx/namefinder/model.onnx"); final File vocab = new File(getOpennlpDataDir(), "onnx/namefinder/vocab.txt"); final String[] tokens = new String[]{}; final NameFinderDL nameFinderDL = new NameFinderDL(model, vocab, getIds2Labels(), sentenceDetector); final Span[] spans = nameFinderDL.find(tokens); Assertions.assertEquals(0, spans.length); } @Test public void tokenNameFinderNoEntitiesTest() throws Exception { // This test was written using the dslim/bert-base-NER model. // You will need to update the ids2Labels and assertions if you use a different model. final File model = new File(getOpennlpDataDir(), "onnx/namefinder/model.onnx"); final File vocab = new File(getOpennlpDataDir(), "onnx/namefinder/vocab.txt"); final String[] tokens = new String[]{"I", "went", "to", "the", "park"}; final NameFinderDL nameFinderDL = new NameFinderDL(model, vocab, getIds2Labels(), sentenceDetector); final Span[] spans = nameFinderDL.find(tokens); Assertions.assertEquals(0, spans.length); } @Test public void tokenNameFinderMultipleEntitiesTest() throws Exception { // This test was written using the dslim/bert-base-NER model. // You will need to update the ids2Labels and assertions if you use a different model. final File model = new File(getOpennlpDataDir(), "onnx/namefinder/model.onnx"); final File vocab = new File(getOpennlpDataDir(), "onnx/namefinder/vocab.txt"); final String[] tokens = new String[]{"George", "Washington", "and", "Abraham", "Lincoln", "were", "presidents"}; final NameFinderDL nameFinderDL = new NameFinderDL(model, vocab, getIds2Labels(), sentenceDetector); final Span[] spans = nameFinderDL.find(tokens); for (Span span : spans) { logger.debug(span.toString()); } Assertions.assertEquals(2, spans.length); Assertions.assertEquals(0, spans[0].getStart()); Assertions.assertEquals(17, spans[0].getEnd()); Assertions.assertEquals(22, spans[1].getStart()); Assertions.assertEquals(37, spans[1].getEnd()); } @Test public void invalidModel() { Assertions.assertThrows(OrtException.class, () -> { // This test was written using the dslim/bert-base-NER model. // You will need to update the ids2Labels and assertions if you use a different model. final File model = new File("invalid.onnx"); final File vocab = new File("vocab.txt"); new NameFinderDL(model, vocab, getIds2Labels(), sentenceDetector); }); } private Map getIds2Labels() { final Map ids2Labels = new HashMap<>(); ids2Labels.put(0, "O"); ids2Labels.put(1, "B-MISC"); ids2Labels.put(2, "I-MISC"); ids2Labels.put(3, "B-PER"); ids2Labels.put(4, "I-PER"); ids2Labels.put(5, "B-ORG"); ids2Labels.put(6, "I-ORG"); ids2Labels.put(7, "B-LOC"); ids2Labels.put(8, "I-LOC"); return ids2Labels; } } apache-opennlp-2.3.3-src/opennlp-dl/src/test/java/opennlp/dl/vectors/SentenceVectorsDLEval.java0100644 0000000 0000000 00000003450 14523004075 033042 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.dl.vectors; import java.io.File; import java.io.IOException; import ai.onnxruntime.OrtException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.dl.AbstractDLTest; public class SentenceVectorsDLEval extends AbstractDLTest { @Test public void generateVectorsTest() throws IOException, OrtException { final File MODEL_FILE_NAME = new File(getOpennlpDataDir(), "onnx/sentence-transformers/model.onnx"); final File VOCAB_FILE_NAME = new File(getOpennlpDataDir(), "onnx/sentence-transformers/vocab.txt"); final String sentence = "george washington was president"; final SentenceVectorsDL sv = new SentenceVectorsDL(MODEL_FILE_NAME, VOCAB_FILE_NAME); final float[] vectors = sv.getVectors(sentence); Assertions.assertEquals(vectors[0], 0.39994872, 0.00001); Assertions.assertEquals(vectors[1], -0.055101186, 0.00001); Assertions.assertEquals(vectors[2], 0.2817594, 0.00001); Assertions.assertEquals(vectors.length, 384); } } apache-opennlp-2.3.3-src/opennlp-dl-gpu/README.md0100644 0000000 0000000 00000000636 14523004075 021662 0ustar00rootroot0000000 0000000 # OpenNLP DL (GPU) This module brings in `onnxruntime_gpu` bindings to the existing `opennlp-dl` module. If you are planning to run with GPU acceleration, please use this BOM. You can use it in your code by adding the following as a dependency: ```xml org.apache.opennlp opennlp-dl-gpu ${opennlp.version} ```apache-opennlp-2.3.3-src/opennlp-dl-gpu/pom.xml0100644 0000000 0000000 00000007302 14523004075 021715 0ustar00rootroot0000000 0000000 4.0.0 org.apache.opennlp opennlp 2.3.3 ../pom.xml org.apache.opennlp opennlp-dl-gpu Apache OpenNLP DL (GPU) org.apache.opennlp opennlp-dl ${project.version} com.microsoft.onnxruntime onnxruntime com.microsoft.onnxruntime onnxruntime_gpu ${onnxruntime.version} org.junit.jupiter junit-jupiter-api test org.junit.jupiter junit-jupiter-engine test org.slf4j slf4j-simple test org.apache.opennlp opennlp-dl ${project.version} test-jar test org.apache.maven.plugins maven-surefire-plugin org.apache.opennlp:opennlp-dl eval-tests 0.5C org.apache.maven.plugins maven-surefire-plugin -Xmx4g **/*Test.java **/*Eval.java org.apache.opennlp:opennlp-dl apache-opennlp-2.3.3-src/opennlp-docs/pom.xml0100644 0000000 0000000 00000005014 14523004075 021453 0ustar00rootroot0000000 0000000 4.0.0 org.apache.opennlp opennlp 2.3.3 ../pom.xml opennlp-docs pom Apache OpenNLP Documentation com.agilejava.docbkx docbkx-maven-plugin 2.0.11 generate-html package org.docbook docbook-xml 4.4 true opennlp.xml css/opennlp-docs.css 1 ${project.basedir}/src/main/resources/xsl/html.xsl apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/chunker.xml0100644 0000000 0000000 00000031665 14523004075 024373 0ustar00rootroot0000000 0000000 Chunker
Chunking Text chunking consists of dividing a text in syntactically correlated parts of words, like noun groups, verb groups, but does not specify their internal structure, nor their role in the main sentence.
Chunker Tool The easiest way to try out the Chunker is the command line tool. The tool is only intended for demonstration and testing. Download the English maxent chunker model from the website and start the Chunker Tool with this command: The Chunker now reads a pos tagged sentence per line from stdin. Copy these two sentences to the console: The Chunker will now echo the sentences grouped tokens to the console: The tag set used by the English pos model is the Penn Treebank tag set.
Chunking API The Chunker can be embedded into an application via its API. First the chunker model must be loaded into memory from disk or another source. In the sample below it is loaded from disk. After the model is loaded a Chunker can be instantiated. The Chunker instance is now ready to tag data. It expects a tokenized sentence as input, which is represented as a String array, each String object in the array is one token, and the POS tags associated with each token. The following code shows how to determine the most likely chunk tag sequence for a sentence. The tags array contains one chunk tag for each token in the input array. The corresponding tag can be found at the same index as the token has in the input array. The confidence scores for the returned tags can be easily retrieved from a ChunkerME with the following method call: The call to probs is stateful and will always return the probabilities of the last tagged sentence. The probs method should only be called when the tag method was called before, otherwise the behavior is undefined. Some applications need to retrieve the n-best chunk tag sequences and not only the best sequence. The topKSequences method is capable of returning the top sequences. It can be called in a similar way as chunk. Each Sequence object contains one sequence. The sequence can be retrieved via Sequence.getOutcomes() which returns a tags array and Sequence.getProbs() returns the probability array for this sequence.
Chunker Training The pre-trained models might not be available for a desired language, can not detect important entities or the performance is not good enough outside the news domain. These are the typical reason to do custom training of the chunker on a new corpus or on a corpus which is extended by private training data taken from the data which should be analyzed. The training data can be converted to the OpenNLP chunker training format, which is based on CoNLL2000. Other formats may also be available. The training data consist of three columns separated one single space. Each word has been put on a separate line and there is an empty line after each sentence. The first column contains the current word, the second its part-of-speech tag and the third its chunk tag. The chunk tags contain the name of the chunk type, for example I-NP for noun phrase words and I-VP for verb phrase words. Most chunk types have two types of chunk tags, B-CHUNK for the first word of the chunk and I-CHUNK for each other word in the chunk. Here is an example of the file format: Sample sentence of the training data: Note that for improved visualization the example above uses tabs instead of a single space as column separator.
Training Tool OpenNLP has a command line tool which is used to train the models available from the model download page on various corpora. Usage of the tool: Its now assumed that the English chunker model should be trained from a file called en-chunker.train which is encoded as UTF-8. The following command will train the name finder and write the model to en-chunker.bin: Additionally its possible to specify the number of iterations, the cutoff and to overwrite all types in the training data with a single type.
Training API The Chunker offers an API to train a new chunker model. The following sample code illustrates how to do it: lineStream = new PlainTextByLineStream(new MarkableFileInputStreamFactory(new File("en-chunker.train")), StandardCharsets.UTF_8); ChunkerModel model; try(ObjectStream sampleStream = new ChunkSampleStream(lineStream)) { model = ChunkerME.train("eng", sampleStream, TrainingParameters.defaultParams(), new ChunkerFactory()); } try (OutputStream modelOut = new BufferedOutputStream(new FileOutputStream(modelFile))) { model.serialize(modelOut); }]]>
Chunker Evaluation The built-in evaluation can measure the chunker performance. The performance is either measured on a test dataset or via cross validation.
Chunker Evaluation Tool The following command shows how the tool can be run: A sample of the command considering you have a data sample named en-chunker.eval and you trained a model called en-chunker.bin: and here is a sample output: You can also use the tool to perform 10-fold cross validation of the Chunker. The following command shows how the tool can be run: It is not necessary to pass a model. The tool will automatically split the data to train and evaluate:
apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/cli.xml0100644 0000000 0000000 00000336113 14523004075 023477 0ustar00rootroot0000000 0000000 The Command Line Interface This section details the available tools and parameters of the Command Line Interface. For an introduction in its usage please refer to .
Doccat
Doccat Learned document categorizer
DoccatTrainer Trainer for the learnable document categorizer The supported formats and arguments are: FormatArgumentValueOptionalDescription leipzig sentencesDir sentencesDir No Dir with Leipzig sentences to be used encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
DoccatEvaluator Measures the performance of the Doccat model with the reference data The supported formats and arguments are: FormatArgumentValueOptionalDescription leipzig sentencesDir sentencesDir No Dir with Leipzig sentences to be used encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
DoccatCrossValidator K-fold cross validator for the learnable Document Categorizer The supported formats and arguments are: FormatArgumentValueOptionalDescription leipzig sentencesDir sentencesDir No Dir with Leipzig sentences to be used encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
DoccatConverter Converts leipzig data format to native OpenNLP format The supported formats and arguments are: FormatArgumentValueOptionalDescription leipzig sentencesDir sentencesDir No Dir with Leipzig sentences to be used encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
Langdetect
LanguageDetector Learned language detector
LanguageDetectorTrainer Trainer for the learnable language detector The supported formats and arguments are: FormatArgumentValueOptionalDescription leipzig sentencesDir sentencesDir No Dir with Leipzig sentences to be used sentencesPerSample sentencesPerSample No Number of sentences per sample samplesPerLanguage samplesPerLanguage No Number of samples per language encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
LanguageDetectorConverter Converts leipzig data format to native OpenNLP format The supported formats and arguments are: FormatArgumentValueOptionalDescription leipzig sentencesDir sentencesDir No Dir with Leipzig sentences to be used sentencesPerSample sentencesPerSample No Number of sentences per sample samplesPerLanguage samplesPerLanguage No Number of samples per language encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
LanguageDetectorCrossValidator K-fold cross validator for the learnable Language Detector The supported formats and arguments are: FormatArgumentValueOptionalDescription leipzig sentencesDir sentencesDir No Dir with Leipzig sentences to be used sentencesPerSample sentencesPerSample No Number of sentences per sample samplesPerLanguage samplesPerLanguage No Number of samples per language encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
LanguageDetectorEvaluator Measures the performance of the Language Detector model with the reference data The supported formats and arguments are: FormatArgumentValueOptionalDescription leipzig sentencesDir sentencesDir No Dir with Leipzig sentences to be used sentencesPerSample sentencesPerSample No Number of sentences per sample samplesPerLanguage samplesPerLanguage No Number of samples per language encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
Dictionary
DictionaryBuilder Builds a new dictionary
Tokenizer
SimpleTokenizer Character class tokenizer
TokenizerME Learnable tokenizer
TokenizerTrainer Trainer for the learnable tokenizer The supported formats and arguments are: FormatArgumentValueOptionalDescription irishsentencebank data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ad encoding charsetName No Encoding for reading and writing text, if absent the system default is used. lang language No Language which is being processed. data sampleData No Data to be used, usually a file name. splitHyphenatedTokens split Yes If true all hyphenated tokens will be separated (default true) detokenizer dictionary No Specifies the file with detokenizer dictionary. pos data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. conllx data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. namefinder data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. parse data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. conllu data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
TokenizerMEEvaluator Evaluator for the learnable tokenizer The supported formats and arguments are: FormatArgumentValueOptionalDescription irishsentencebank data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ad encoding charsetName No Encoding for reading and writing text, if absent the system default is used. lang language No Language which is being processed. data sampleData No Data to be used, usually a file name. splitHyphenatedTokens split Yes If true all hyphenated tokens will be separated (default true) detokenizer dictionary No Specifies the file with detokenizer dictionary. pos data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. conllx data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. namefinder data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. parse data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. conllu data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
TokenizerCrossValidator K-fold cross validator for the learnable tokenizer The supported formats and arguments are: FormatArgumentValueOptionalDescription irishsentencebank data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ad encoding charsetName No Encoding for reading and writing text, if absent the system default is used. lang language No Language which is being processed. data sampleData No Data to be used, usually a file name. splitHyphenatedTokens split Yes If true all hyphenated tokens will be separated (default true) detokenizer dictionary No Specifies the file with detokenizer dictionary. pos data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. conllx data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. namefinder data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. parse data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. conllu data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
TokenizerConverter Converts foreign data formats (irishsentencebank,ad,pos,conllx,namefinder,parse,conllu) to native OpenNLP format The supported formats and arguments are: FormatArgumentValueOptionalDescription irishsentencebank data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ad encoding charsetName No Encoding for reading and writing text, if absent the system default is used. lang language No Language which is being processed. data sampleData No Data to be used, usually a file name. splitHyphenatedTokens split Yes If true all hyphenated tokens will be separated (default true) detokenizer dictionary No Specifies the file with detokenizer dictionary. pos data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. conllx data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. namefinder data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. parse data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. conllu data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
DictionaryDetokenizer
Sentdetect
SentenceDetector Learnable sentence detector
SentenceDetectorTrainer Trainer for the learnable sentence detector The supported formats and arguments are: FormatArgumentValueOptionalDescription irishsentencebank data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ad encoding charsetName No Encoding for reading and writing text. lang language No Language which is being processed. data sampleData No Data to be used, usually a file name. includeTitles includeTitles Yes If true will include sentences marked as headlines. pos data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. conllx data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. namefinder data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. parse data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. moses data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. conllu sentencesPerSample sentencesPerSample No Number of sentences per sample data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. letsmt detokenizer dictionary Yes Specifies the file with detokenizer dictionary. data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
SentenceDetectorEvaluator Evaluator for the learnable sentence detector The supported formats and arguments are: FormatArgumentValueOptionalDescription irishsentencebank data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ad encoding charsetName No Encoding for reading and writing text. lang language No Language which is being processed. data sampleData No Data to be used, usually a file name. includeTitles includeTitles Yes If true will include sentences marked as headlines. pos data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. conllx data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. namefinder data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. parse data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. moses data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. conllu sentencesPerSample sentencesPerSample No Number of sentences per sample data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. letsmt detokenizer dictionary Yes Specifies the file with detokenizer dictionary. data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
SentenceDetectorCrossValidator K-fold cross validator for the learnable sentence detector The supported formats and arguments are: FormatArgumentValueOptionalDescription irishsentencebank data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ad encoding charsetName No Encoding for reading and writing text. lang language No Language which is being processed. data sampleData No Data to be used, usually a file name. includeTitles includeTitles Yes If true will include sentences marked as headlines. pos data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. conllx data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. namefinder data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. parse data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. moses data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. conllu sentencesPerSample sentencesPerSample No Number of sentences per sample data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. letsmt detokenizer dictionary Yes Specifies the file with detokenizer dictionary. data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
SentenceDetectorConverter Converts foreign data formats (irishsentencebank,ad,pos,conllx,namefinder,parse,moses,conllu,letsmt) to native OpenNLP format The supported formats and arguments are: FormatArgumentValueOptionalDescription irishsentencebank data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ad encoding charsetName No Encoding for reading and writing text. lang language No Language which is being processed. data sampleData No Data to be used, usually a file name. includeTitles includeTitles Yes If true will include sentences marked as headlines. pos data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. conllx data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. namefinder data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. parse data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. detokenizer dictionary No Specifies the file with detokenizer dictionary. moses data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. conllu sentencesPerSample sentencesPerSample No Number of sentences per sample data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. letsmt detokenizer dictionary Yes Specifies the file with detokenizer dictionary. data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
Namefind
TokenNameFinder Learnable name finder
TokenNameFinderTrainer Trainer for the learnable name finder The supported formats and arguments are: FormatArgumentValueOptionalDescription evalita lang it No types per,loc,org,gpe No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ad encoding charsetName No Encoding for reading and writing text, if absent the system default is used. lang language No Language which is being processed. data sampleData No Data to be used, usually a file name. splitHyphenatedTokens split Yes If true all hyphenated tokens will be separated (default true) conll03 lang eng|deu No types per,loc,org,misc No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. bionlp2004 types DNA,protein,cell_type,cell_line,RNA No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. conll02 lang spa|nld No types per,loc,org,misc No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. muc6 tokenizerModel modelFile No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ontonotes ontoNotesDir OntoNotes 4.0 corpus directory No brat tokenizerModel modelFile Yes ruleBasedTokenizer name Yes annotationConfig annConfFile No bratDataDir bratDataDir No Location of brat data dir recursive value Yes sentenceDetectorModel modelFile Yes
TokenNameFinderEvaluator Measures the performance of the NameFinder model with the reference data The supported formats and arguments are: FormatArgumentValueOptionalDescription evalita lang it No types per,loc,org,gpe No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ad encoding charsetName No Encoding for reading and writing text, if absent the system default is used. lang language No Language which is being processed. data sampleData No Data to be used, usually a file name. splitHyphenatedTokens split Yes If true all hyphenated tokens will be separated (default true) conll03 lang eng|deu No types per,loc,org,misc No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. bionlp2004 types DNA,protein,cell_type,cell_line,RNA No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. conll02 lang spa|nld No types per,loc,org,misc No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. muc6 tokenizerModel modelFile No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ontonotes ontoNotesDir OntoNotes 4.0 corpus directory No brat tokenizerModel modelFile Yes ruleBasedTokenizer name Yes annotationConfig annConfFile No bratDataDir bratDataDir No Location of brat data dir recursive value Yes sentenceDetectorModel modelFile Yes
TokenNameFinderCrossValidator K-fold cross validator for the learnable Name Finder The supported formats and arguments are: FormatArgumentValueOptionalDescription evalita lang it No types per,loc,org,gpe No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ad encoding charsetName No Encoding for reading and writing text, if absent the system default is used. lang language No Language which is being processed. data sampleData No Data to be used, usually a file name. splitHyphenatedTokens split Yes If true all hyphenated tokens will be separated (default true) conll03 lang eng|deu No types per,loc,org,misc No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. bionlp2004 types DNA,protein,cell_type,cell_line,RNA No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. conll02 lang spa|nld No types per,loc,org,misc No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. muc6 tokenizerModel modelFile No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ontonotes ontoNotesDir OntoNotes 4.0 corpus directory No brat tokenizerModel modelFile Yes ruleBasedTokenizer name Yes annotationConfig annConfFile No bratDataDir bratDataDir No Location of brat data dir recursive value Yes sentenceDetectorModel modelFile Yes
TokenNameFinderConverter Converts foreign data formats (evalita,ad,conll03,bionlp2004,conll02,muc6,ontonotes,brat) to native OpenNLP format The supported formats and arguments are: FormatArgumentValueOptionalDescription evalita lang it No types per,loc,org,gpe No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ad encoding charsetName No Encoding for reading and writing text, if absent the system default is used. lang language No Language which is being processed. data sampleData No Data to be used, usually a file name. splitHyphenatedTokens split Yes If true all hyphenated tokens will be separated (default true) conll03 lang eng|deu No types per,loc,org,misc No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. bionlp2004 types DNA,protein,cell_type,cell_line,RNA No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. conll02 lang spa|nld No types per,loc,org,misc No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. muc6 tokenizerModel modelFile No data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ontonotes ontoNotesDir OntoNotes 4.0 corpus directory No brat tokenizerModel modelFile Yes ruleBasedTokenizer name Yes annotationConfig annConfFile No bratDataDir bratDataDir No Location of brat data dir recursive value Yes sentenceDetectorModel modelFile Yes
CensusDictionaryCreator Converts 1990 US Census names into a dictionary
Postag
POSTagger Learnable part of speech tagger
POSTaggerTrainer Trains a model for the part-of-speech tagger The supported formats and arguments are: FormatArgumentValueOptionalDescription ad encoding charsetName No Encoding for reading and writing text, if absent the system default is used. lang language No Language which is being processed. data sampleData No Data to be used, usually a file name. expandME expandME Yes Expand multiword expressions. includeFeatures includeFeatures Yes Combine POS Tags with word features, like number and gender. conllx data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. parse data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ontonotes ontoNotesDir OntoNotes 4.0 corpus directory No conllu tagset tagset Yes U|x u for unified tags and x for language-specific part-of-speech tags data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
POSTaggerEvaluator Measures the performance of the POS tagger model with the reference data The supported formats and arguments are: FormatArgumentValueOptionalDescription ad encoding charsetName No Encoding for reading and writing text, if absent the system default is used. lang language No Language which is being processed. data sampleData No Data to be used, usually a file name. expandME expandME Yes Expand multiword expressions. includeFeatures includeFeatures Yes Combine POS Tags with word features, like number and gender. conllx data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. parse data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ontonotes ontoNotesDir OntoNotes 4.0 corpus directory No conllu tagset tagset Yes U|x u for unified tags and x for language-specific part-of-speech tags data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
POSTaggerCrossValidator K-fold cross validator for the learnable POS tagger The supported formats and arguments are: FormatArgumentValueOptionalDescription ad encoding charsetName No Encoding for reading and writing text, if absent the system default is used. lang language No Language which is being processed. data sampleData No Data to be used, usually a file name. expandME expandME Yes Expand multiword expressions. includeFeatures includeFeatures Yes Combine POS Tags with word features, like number and gender. conllx data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. parse data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ontonotes ontoNotesDir OntoNotes 4.0 corpus directory No conllu tagset tagset Yes U|x u for unified tags and x for language-specific part-of-speech tags data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
POSTaggerConverter Converts foreign data formats (ad,conllx,parse,ontonotes,conllu) to native OpenNLP format The supported formats and arguments are: FormatArgumentValueOptionalDescription ad encoding charsetName No Encoding for reading and writing text, if absent the system default is used. lang language No Language which is being processed. data sampleData No Data to be used, usually a file name. expandME expandME Yes Expand multiword expressions. includeFeatures includeFeatures Yes Combine POS Tags with word features, like number and gender. conllx data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. parse data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used. ontonotes ontoNotesDir OntoNotes 4.0 corpus directory No conllu tagset tagset Yes U|x u for unified tags and x for language-specific part-of-speech tags data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
Lemmatizer
LemmatizerME Learnable lemmatizer
LemmatizerTrainerME Trainer for the learnable lemmatizer The supported formats and arguments are: FormatArgumentValueOptionalDescription conllu tagset tagset Yes U|x u for unified tags and x for language-specific part-of-speech tags data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
LemmatizerEvaluator Measures the performance of the Lemmatizer model with the reference data The supported formats and arguments are: FormatArgumentValueOptionalDescription conllu tagset tagset Yes U|x u for unified tags and x for language-specific part-of-speech tags data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
Chunker
ChunkerME Learnable chunker
ChunkerTrainerME Trainer for the learnable chunker The supported formats and arguments are: FormatArgumentValueOptionalDescription ad encoding charsetName No Encoding for reading and writing text, if absent the system default is used. lang language No Language which is being processed. end end Yes Index of last sentence start start Yes Index of first sentence data sampleData No Data to be used, usually a file name.
ChunkerEvaluator Measures the performance of the Chunker model with the reference data The supported formats and arguments are: FormatArgumentValueOptionalDescription ad encoding charsetName No Encoding for reading and writing text, if absent the system default is used. lang language No Language which is being processed. end end Yes Index of last sentence start start Yes Index of first sentence data sampleData No Data to be used, usually a file name.
ChunkerCrossValidator K-fold cross validator for the chunker The supported formats and arguments are: FormatArgumentValueOptionalDescription ad encoding charsetName No Encoding for reading and writing text, if absent the system default is used. lang language No Language which is being processed. end end Yes Index of last sentence start start Yes Index of first sentence data sampleData No Data to be used, usually a file name.
ChunkerConverter Converts ad data format to native OpenNLP format The supported formats and arguments are: FormatArgumentValueOptionalDescription ad encoding charsetName No Encoding for reading and writing text, if absent the system default is used. lang language No Language which is being processed. end end Yes Index of last sentence start start Yes Index of first sentence data sampleData No Data to be used, usually a file name.
Parser
Parser Performs full syntactic parsing
ParserTrainer Trains the learnable parser The supported formats and arguments are: FormatArgumentValueOptionalDescription ontonotes ontoNotesDir OntoNotes 4.0 corpus directory No frenchtreebank data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
ParserEvaluator Measures the performance of the Parser model with the reference data The supported formats and arguments are: FormatArgumentValueOptionalDescription ontonotes ontoNotesDir OntoNotes 4.0 corpus directory No frenchtreebank data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
ParserConverter Converts foreign data formats (ontonotes,frenchtreebank) to native OpenNLP format The supported formats and arguments are: FormatArgumentValueOptionalDescription ontonotes ontoNotesDir OntoNotes 4.0 corpus directory No frenchtreebank data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
BuildModelUpdater Trains and updates the build model in a parser model The supported formats and arguments are: FormatArgumentValueOptionalDescription ontonotes ontoNotesDir OntoNotes 4.0 corpus directory No frenchtreebank data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
CheckModelUpdater Trains and updates the check model in a parser model The supported formats and arguments are: FormatArgumentValueOptionalDescription ontonotes ontoNotesDir OntoNotes 4.0 corpus directory No frenchtreebank data sampleData No Data to be used, usually a file name. encoding charsetName Yes Encoding for reading and writing text, if absent the system default is used.
TaggerModelReplacer Replaces the tagger model in a parser model
Entitylinker
EntityLinker Links an entity to an external data set
Languagemodel
NGramLanguageModel Gives the probability and most probable next token(s) of a sequence of tokens in a language model
apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/coref.xml0100644 0000000 0000000 00000004616 14523004075 024026 0ustar00rootroot0000000 0000000 Coreference Resolution The OpenNLP Coreference Resolution system links multiple mentions of an entity in a document together. The OpenNLP implementation is currently limited to noun phrase mentions, other mention types cannot be resolved. TODO: Write more documentation about the coref component. Any contributions are very welcome. If you want to contribute please contact us on the mailing list or comment on the jira issue OPENNLP-48. apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/corpora.xml0100644 0000000 0000000 00000074705 14523004075 024403 0ustar00rootroot0000000 0000000 Corpora OpenNLP has built-in support to convert into the native training format or directly use various corpora needed by the different trainable components.
CONLL CoNLL stands for the Conference on Computational Natural Language Learning and is not a single project but a consortium of developers attempting to broaden the computing environment. More information about the entire conference series can be obtained here for CoNLL.
CONLL 2000 The shared task of CoNLL-2000 is Chunking.
Getting the data CoNLL-2000 made available training and test data for the Chunk task in English. The data consists of the same partitions of the Wall Street Journal corpus (WSJ) as the widely used data for noun phrase chunking: sections 15-18 as training data (211727 tokens) and section 20 as test data (47377 tokens). The annotation of the data has been derived from the WSJ corpus by a program written by Sabine Buchholz from Tilburg University, The Netherlands. Both training and test data can be obtained from https://www.clips.uantwerpen.be/conll2000/chunking/.
Converting the data The data don't need to be transformed because Apache OpenNLP Chunker follows the CONLL 2000 format for training. Check Chunker Training section to learn more.
Training We can train the model for the Chunker using the train.txt available at CONLL 2000:
Evaluating We evaluate the model using the file test.txt available at CONLL 2000:
CONLL 2002 The shared task of CoNLL-2002 is language independent named entity recognition for Spanish and Dutch.
Getting the data The data consists of three files per language: one training file and two test files testa and testb. The first test file will be used in the development phase for finding good parameters for the learning system. The second test file will be used for the final evaluation. Currently, there are data files available for two languages: Spanish and Dutch. The Spanish data is a collection of newswire articles made available by the Spanish EFE News Agency. The articles are from May 2000. The annotation was carried out by the TALP Research Center of the Technical University of Catalonia (UPC) and the Center of Language and Computation (CLiC)of the University of Barcelona (UB), and funded by the European Commission through the NAMIC project (IST-1999-12392). The Dutch data consist of four editions of the Belgian newspaper "De Morgen" of 2000 (June 2, July 1, August 1 and September 1). The data was annotated as a part of the Atranos project at the University of Antwerp. You can find the Spanish files here: https://www.lsi.upc.edu/~nlp/tools/nerc/nerc.html You must download esp.train.gz, unzip it and you will see the file esp.train. You can find the Dutch files here: https://www.cnts.ua.ac.be/conll2002/ner.tgz You must unzip it and go to /ner/data/ned.train.gz, so you unzip it too, and you will see the file ned.train.
Converting the data I will use Spanish data as reference, but it would be the same operations to Dutch. You just must remember change “-lang es†to “-lang nl†and use the correct training files. So to convert the information to the OpenNLP format: es_corpus_train_persons.txt]]> Optionally, you can convert the training test samples as well. corpus_testa.txt $ opennlp TokenNameFinderConverter conll02 -data esp.testb -lang es -types per > corpus_testb.txt]]>
Training with Spanish data To train the model for the name finder:
CONLL 2003 The shared task of CoNLL-2003 is language independent named entity recognition for English and German.
Getting the data The English data is the Reuters Corpus, which is a collection of newswire articles. The Reuters Corpus can be obtained free of charges from the NIST for research purposes: https://trec.nist.gov/data/reuters/reuters.html The German data is a collection of articles from the German newspaper Frankfurter Rundschau. The articles are part of the ECI Multilingual Text Corpus which can be obtained for 75$ (2010) from the Linguistic Data Consortium: http://www.ldc.upenn.edu/Catalog/CatalogEntry.jsp?catalogId=LDC94T5 After one of the corpora is available the data must be transformed as explained in the README file to the CONLL format. The transformed data can be read by the OpenNLP CONLL03 converter. Note that for CoNLL-2003 corpora, the -lang argument should either be "eng" or "deu", instead of "en" or "de".
Converting the data (optional) To convert the information to the OpenNLP format: eng.train]]> Optionally, you can convert the training test samples as well. eng.testa $ opennlp TokenNameFinderConverter conll03 -lang eng -types per -data corpus_testb.txt > eng.testb]]>
Training with English data You can train the model for the name finder this way: If you have converted the data, then you can train the model for the name finder this way: Either way you should see the following output during the training process:
Evaluating with English data You can evaluate the model for the name finder this way: If you converted the test A and B files above, you can use them to evaluate the model. Either way you should see the following output:
Arvores Deitadas The Portuguese corpora available at Floresta Sintá(c)tica project follow the Arvores Deitadas (AD) format. Apache OpenNLP includes tools to convert from AD format to native format.
Getting the data The Corpus can be downloaded from here: https://www.linguateca.pt/floresta/corpus.html The Name Finder models were trained using the Amazonia corpus: amazonia.ad. The Chunker models were trained using the Bosque_CF_8.0.ad.
Converting the data (optional) To extract NameFinder training data from Amazonia corpus: corpus.txt]]> To extract Chunker training data from Bosque_CF_8.0.ad corpus: bosque-chunk]]>
Training and Evaluation To perform the evaluation the corpus was split into a training and a test part. corpus_train.txt $ sed '55172,100000000d' corpus.txt > corpus_test.txt]]>
OntoNotes Release 4.0 "OntoNotes Release 4.0, Linguistic Data Consortium (LDC) catalog number LDC2011T03 and isbn 1-58563-574-X, was developed as part of the OntoNotes project, a collaborative effort between BBN Technologies, the University of Colorado, the University of Pennsylvania and the University of Southern Californias Information Sciences Institute. The goal of the project is to annotate a large corpus comprising various genres of text (news, conversational telephone speech, weblogs, usenet newsgroups, broadcast, talk shows) in three languages (English, Chinese, and Arabic) with structural information (syntax and predicate argument structure) and shallow semantics (word sense linked to an ontology and coreference). OntoNotes Release 4.0 is supported by the Defense Advance Research Project Agency, GALE Program Contract No. HR0011-06-C-0022. OntoNotes Release 4.0 contains the content of earlier releases -- OntoNotes Release 1.0 LDC2007T21, OntoNotes Release 2.0 LDC2008T04 and OntoNotes Release 3.0 LDC2009T24 -- and adds newswire, broadcast news, broadcast conversation and web data in English and Chinese and newswire data in Arabic. This cumulative publication consists of 2.4 million words as follows: 300k words of Arabic newswire 250k words of Chinese newswire, 250k words of Chinese broadcast news, 150k words of Chinese broadcast conversation and 150k words of Chinese web text and 600k words of English newswire, 200k word of English broadcast news, 200k words of English broadcast conversation and 300k words of English web text. The OntoNotes project builds on two time-tested resources, following the Penn Treebank for syntax and the Penn PropBank for predicate-argument structure. Its semantic representation will include word sense disambiguation for nouns and verbs, with each word sense connected to an ontology, and co-reference. The current goals call for annotation of over a million words each of English and Chinese, and half a million words of Arabic over five years." (https://catalog.ldc.upenn.edu/LDC2011T03)
Name Finder Training The OntoNotes corpus can be used to train the Name Finder. The corpus contains different name types to train a model for a specific type only the built-in type filter option should be used. The sample shows how to train a model to detect person names.
Brat Format Support The brat annotation tool is an online environment for collaborative text annotation and supports labeling documents with named entities. The best performance of a name finder can only be achieved if it was trained on documents similar to the documents it will process. For that reason it is often necessary to manually label a large number of documents and build a custom corpus. This is where brat comes in handy. OpenNLP can directly be trained and evaluated on labeled data in the brat format. Instructions on how to use, download and install brat can be found on the project website: https://brat.nlplab.org Configuration of brat, including setting up the different entities and relations can be found at: https://brat.nlplab.org/configuration.html
Sentences and Tokens The brat annotation tool only adds named entity spans to the data and doesn't provide information about tokens and sentences. To train the name finder this information is required. By default, it is assumed that each line is a sentence and that tokens are whitespace separated. This can be adjusted by providing a custom sentence detector and optional also a tokenizer. The opennlp brat command supports the following arguments for providing custom sentence detector and tokenizer. -sentenceDetectorModel - your sentence model -tokenizerModel - your tokenizer model -ruleBasedTokenizer - simple | whitespace
Training To train your namefinder model using your brat annotated files you can either use the opennlp command line tool or call opennlp.tools.cmdline.CLI main class from your preferred IDE. Calling opennlp TokenNameFinder.brat without arguments gives you a list of all the arguments you can use. Obviously some combinations are not valid. E.g. you should not provide a token model and also define a rule based tokenizer. The following command will train a danish organization name finder model.
Evaluation To evaluate you name finder model opennlp provides an evaluator that works with your brat annotated data. Normally you would partition your data in a training set and a test set e.g. 70% training and 30% test. The training set is of cause only used for training the model and should never be used for evaluation. The test set is only used for evaluation. In order to avoid overfitting, it is preferable if the training set and test set is somewhat balanced so that both sets represents a broad variety of the entities it should be able to identify. Shuffling the data before splitting is most likely sufficient in many cases.
Cross Validation You can also use the cross validation to evaluate you model. This can come in handy when you do not have enough data to divide it into a proper training and test set. Running cross validation with the misclassified attribute set to true can also be helpful because it will identify missed annotations as they will pop up as false positives in the text output.
apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/css/opennlp-docs.css0100644 0000000 0000000 00000007324 14523004075 026110 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ :root { --font-family: system-ui, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", sans-serif; --font-size: 14px; --code-font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; --black-color: #333333; --gray-color: #CCCCCC; --red-color: #BE2043; --purple-color: #832778; --blue-color: #0033cc; } body { margin: 0; padding: 0; border: 0; background-color: white; } /* Main content holder. */ div.book { max-width: 1320px; min-width: 320px; margin: 0 auto; font-family: var(--font-family); padding: 1rem; background-color: white; } div.toc > dl, div.list-of-tables > dl { border: 2px solid var(--gray-color); padding: 1rem; } a { color: var(--blue-color); text-decoration: none; } h1, h2, h3, h4, div.toc { color: var(--red-color); } div.legalnotice { max-width: 450px; } pre { overflow: scroll; } pre i { font-style: normal; } pre.programlisting, pre.screen, pre.literallayout { border: 1px solid #BBBBBB; background-color: #EEE; font-family: var(--code-font-family); white-space: pre; padding: 0 1rem; } /* * Java syntax highlighting with eclipse default colors * and default font-style */ pre.programlisting .hl-keyword { color: var(--purple-color); font-weight: bold; } /* Seems to be broken, override red inline style of hl-string */ pre.programlisting .hl-string, pre.programlisting b.hl-string i[style] { color: #2A00FF !important; } pre.programlisting .hl-tag { color: #3F7F7F; } pre.programlisting .hl-comment { color: #3F5F5F; /* font-style: italic; */ } pre.programlisting .hl-multiline-comment { color: #3F5FBF; /* font-style: italic; */ } pre.programlisting .hl-value { color: #2A00FF; } pre.programlisting .hl-attribute { color: var(--purple-color); } table { width: 100%; border: 1px solid #A0A0A0; border-spacing: 0; caption-side: bottom; border-collapse: collapse; } table thead { border-color: inherit; border-style: solid; border-width: 0; } table tr { border-color: inherit; border-style: solid; border-width: 0; } table th { border-color: #A0A0A0; border-style: solid; border-width: 0; border-left-width: 1px; border-bottom-width: 1px; text-align: inherit; background-color: #ededee; padding: 0.1rem 0.5rem; font-weight: bold; } table tbody { border-color: inherit; border-style: solid; border-width: 0; } table td { border-color: #A0A0A0; border-style: dotted; border-width: 0; border-left-width: 1px; border-bottom-width: 1px; vertical-align: top; padding: 0.3em; } div.mediaobject img { width: 100%; height: 100%; } h2.subtitle img { width: min(650px, 100%); } apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/doccat.xml0100644 0000000 0000000 00000017726 14523004075 024173 0ustar00rootroot0000000 0000000 Document Categorizer
Classifying The OpenNLP Document Categorizer can classify text into pre-defined categories. It is based on maximum entropy framework. For someone interested in Gross Margin, the sample text given below could be classified as GMDecrease and the text below could be classified as GMIncrease To be able to classify a text, the document categorizer needs a model. The classifications are requirements-specific and hence there is no pre-built model for document categorizer under OpenNLP project.
Document Categorizer Tool Note that ONNX model support is not available through the command line tool. The models that can be trained using the tool are OpenNLP models. ONNX models are trained through deep learning frameworks and then utilized by OpenNLP. The easiest way to try out the document categorizer is the command line tool. The tool is only intended for demonstration and testing. The following command shows how to use the document categorizer tool. The input is read from standard input and output is written to standard output, unless they are redirected or piped. As with most components in OpenNLP, document categorizer expects input which is segmented into sentences.
Document Categorizer API To perform classification you will need a maxent model - these are encapsulated in the DoccatModel class of OpenNLP tools - or an ONNX model trained for document classification. Using an OpenNLP model, first you need to grab the bytes from the serialized model on an InputStream: With the DoccatModel in hand we are just about there:
Using an ONNX Model Using an ONNX model is similar, except we will utilize the DocumentCategorizerDL class instead. You must provide the path to the model file and the vocabulary file to the document categorizer. (There is no need to load the model as an InputStream as in the previous example.) categories = new HashMap<>(); String[] inputText = new String[]{"My input text is great."}; final DocumentCategorizerDL myCategorizer = new DocumentCategorizerDL(model, vocab, categories); double[] outcomes = myCategorizer.categorize(inputText); String category = myCategorizer.getBestCategory(outcomes);]]> For additional examples, refer to the DocumentCategorizerDLEval class.
Training The Document Categorizer can be trained on annotated training material. The data can be in OpenNLP Document Categorizer training format. This is one document per line, containing category and text separated by a whitespace. Other formats can also be available. The following sample shows the sample from above in the required format. Here GMDecrease and GMIncrease are the categories. Note: The line breaks marked with a backslash are just inserted for formatting purposes and must not be included in the training data.
Training Tool The following command will train the document categorizer and write the model to en-doccat.bin: Additionally it is possible to specify the number of iterations, and the cutoff.
Training API So, naturally you will need some access to many pre-classified events to train your model. The class opennlp.tools.doccat.DocumentSample encapsulates a text document and its classification. DocumentSample has two constructors. Each take the text's category as one argument. The other argument can either be raw text, or an array of tokens. By default, the raw text will be split into tokens by whitespace. So, let's say your training data was contained in a text file, where the format is as described above. Then you might want to write something like this to create a collection of DocumentSamples: lineStream = new PlainTextByLineStream(new MarkableFileInputStreamFactory(new File("en-sentiment.train")), StandardCharsets.UTF_8); ObjectStream sampleStream = new DocumentSampleStream(lineStream); model = DocumentCategorizerME.train("eng", sampleStream, TrainingParameters.defaultParams(), new DoccatFactory()); } catch (IOException e) { e.printStackTrace(); } ]]> Now might be a good time to cruise over to Hulu or something, because this could take a while if you've got a large training set. You may see a lot of output as well. Once you're done, you can pretty quickly step to classification directly, but first we'll cover serialization. Feel free to skim.
apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/evaltest.xml0100644 0000000 0000000 00000006646 14523004075 024564 0ustar00rootroot0000000 0000000 Evaluation Test Data
What is it ? The evaluation test data is the data used in the tests that evaluate functionality and performance of OpenNLP. These tests ensure reliability and can help identify potential bugs, errors, or performance issues. The evaluation tests leverage the k-fold cross-validation procedure. This technique works by dividing the evaluation data into k equally sized parts or folds. The algorithm is then trained on k-1 of the folds and tested on the remaining fold. This process is repeated k times, so that each of the k-folds is used exactly once as the test data, and the results of each fold are combined to produce an overall estimate of the algorithm's performance.
Where is it? OpenNLP evaluation tests data is available at https://nightlies.apache.org/opennlp/ (file name : opennlp-data.zip) Here's a link to the evaluation-tests build on Jenkins: https://builds.apache.org/job/OpenNLP/
How to use the evaluation test data to run test? The evaluation tests data can be downloaded and saved in the desired directory and can be used to run OpenNLP Evaluation Tests as below:
How to change evaluation data? OpenNLP Evaluation Tests use nightlies.apache.org to share data for testing and releasing candidate build. You can also upload the opennlp-data.zip to nightlies.apache.org as below: More information about changing the evaluation test data on nightlies.apache.org can be found at: https://nightlies.apache.org/authoring.html
apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/extension.xml0100644 0000000 0000000 00000003105 14523004075 024734 0ustar00rootroot0000000 0000000 Extending OpenNLP In OpenNLP extension can be used to add new functionality and to heavily customize an existing component. Most components define a factory class which can be implemented to customize the creation of it. And some components allow to add new feature generators.
Writing an extension In many places it is possible to pass in an extension class name to customize some aspect of OpenNLP. The implementation class needs to implement the specified interface and should have a public no-argument constructor.
apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/images/brat.png0100644 0000000 0000000 00002175546 14523004075 025126 0ustar00rootroot0000000 0000000 ‰PNG  IHDR |Zbv9* iCCPICC ProfileH‰•WXSÉž[R$”RBo‚éRCïÒÁFH„0!¨Ø‘EׂŠØÐUE×ÈZÅ¢`¯D”uÑ*oR@××¾wòͽΜsæ?çÎÌ7€¢ +77 U ›Ÿ'ˆ ða$$&1H=‘üœ*‹-ÌõŽŒ PÆÞ—w·¡%”VâXÿÚÿ_E™Ã²@"!NáÙÙ×`ç ò ´C½áܼ\1‚XU @ÄÅ8MŠ5Ä8EŠ'Ilb¢˜{@V`±iÐļùì4‡&æhÃçðøWCìÁNgq ~ñ¤ììˆÉ›¥|'ío1SÆc²XiãXš‹DȾ/.bÄ×…™Ñ!2ßÇéÌð1(JÌÙâ·©ÿ(© ¦‘-Ë ³f³$cÁ¹€yå¥ÇJ}±®0!tŒ‡ëë'å€q¸üX7 Î.Ÿ(™oqnV¤ÌÛÆÍ ˆ’Ö;,ÌóíʃLZìI+8R6ֻܼÈ)7¡€ |ˆ`K9 ð:á?i?`H\`%ÓŒyÄKzøð ÀqpÜÏGÒËùPÿe\+}ZTIo¾Ä#<ƒ8×Â=p7<>½`³Ãq—1?†âبD?¢/1èO4çÁ†¬³`Þ¿Ñ…À7f'æÂËá[<Â3B'á á¡›pħ’(2«Ù¼BÁÌ tÃhþ²ìR`Ì1ܲvÀ}pwÈrÇÕq-`…O™xãž07¨ýž¡hœÛ·Zþ8ž˜õ÷ùÈô4 šƒŒEÊø—aŽ[ý…ù]8ðò£%¶;еaç°ËØI¬0°3XÖŽãñ™ðT2ÆF‹’pË„qxc66u66Ÿ›%_\/aw^žx10srç xiéy o¸sA|¶õ$†­â½]ºu ]“ìÙˆ¦ò7ÝÒ­Lu=ñMv€c« Üü¦3[÷Ç©\ÚÎ ò¥:ñv €áªÐºÀ˜Á|ì€#p^ÀƒÁ,Xñt 9Ï Á2P JÁ:° T‚í`Ø‚# œçÀEp\·À8/úÀK0ÞAH¡#šˆbŒX"vˆ3âø!¡H’ˆ$#i! ‘åH)R†T";‘ZäWär¹Œt"÷dyƒ|B1TUEuPt2êŒz£!h :MCç hº­@kÐhz½ŠÞB»Ñ—è00yLÓǬ0gŒ‰E`IX*&Àc%X9VƒÕcÍð;ßÀº±Aì#NÄé8·‚s3ÅÙø|1¾¯Ä÷á x+~ïÁ‡ð¯*A›`Ip%i„¹„bB9aá8á\7}„wD"QhJt‚ë2‘˜A\@\MÜJ¹\NÞO>Mî"?'È)É˹ÊEÈqäæË­•Û-×,wM®On„¢L1¥¸Sb(”e” J=åå!å/yyyyùiò<ù¥òò‡å/É÷ÈTPQ°P`*ÌP)¬QØ«pVážÂ_T*Õ„êEM¢æQ×Pk©ç©©htš5-ˆÆ¡-¡UÑh]´WŠrŠÆŠÞг Ë*^ST’S2Qb*±”+U)Pº£4¬LW¶UŽPÎV^­¼_ù²r¿ IÅDÅO…£R¤²Kå¼J/£Ò™t6}9}7ý½O•¨jª¤š¡ZªzPµCuHMEmŠZœÚ<µ*µSjÝ꘺‰zz–úZõ#ê·Õ?MЙà=;aÕ„ú ]ÞkLÔðÒàj”hÒ¸¥ñI“¡é§™©¹^³Qó‘®e¡5Mk®Ö6­ ZƒU'ºMdO,™xdâ}mTÛB;J{ö.ívía]\-:çuuÕu½t3t7êžÖУëyèñô6êÑ{ÁPcx3²ŒVƾ¶~ ¾H§~‡þˆ©A¬A¡Á!ƒG†CgÃTÆ-†CFzFaF êŒîË;§o6n3~objo²Â¤Ñ¤ßTÃ4È´À´Îô¡ÕÌÓlŽYÙMs¢¹³y¦ùVó먅ƒEºE•Å5KÔÒÑ’g¹Õ²sa’Ë$þ¤šIw¬¬¼­ò­ê¬z¬Õ­C­ ­­_M6šœ4yýä¶É_ml²lvÛ<°U± ¶-´m¶}cgaǶ«²»iOµ÷·_bßdÿzŠåî”mSî:ÐÂV8´8|qtr8Ö;89%;U;ÝqVuŽt^í|É…àâã²Äå¤ËGWG×<×#®ºY¹eºíwëŸj:•;u÷Ô^ww–ûN÷n†G²ÇnO}O–gç/C/Ž×¯çÞæÞÞ¼_ùØø|Žû¼gº21Ïúb¾¾%¾~*~±~•~ý üÓüëü‡œ $†®¼¤Äª  v ^Ü¢Rò$Ô"TÚ††‡m{nÎoŒA"EšFΉümqZä´ªiÏ¢l£FµEÓ£gGï~ã³6æA¬Y¬(¶%N1nF\mÜûxßø²øî„É ‹®&j%ò›’HIqI{’†§ûMß4½o†ÃŒâ·gšÎœ7óò,­YY³NÍVœÍš}4™Ÿ¼?ù3+‚UÃN J©Nb3Ù›Ù/9^œœ®;·Œû<Õ=µ,µ?Í=mCÚ@ºgzyú É«ä½ÎÌØžñ>3"soæhV|Ö¡lrvrö ¾ ?“ßš£›3/§3×2·8·{ŽëœMs†!‚=BD8SØ”§ 9í"3ÑO¢ž|üªüsãæ§V}œ~¼¤i˜ß0Ô˜ÞØÝ”ØÔy"øDK³[óñ߬Û{RÿdÕ)µSkOSN=SpfølîÙÁsiçz[f·<8Ÿpþfë´ÖŽ !.]ô¿x¾Í»íÌ%÷K'/»^>qÅùJãUÇ« ííÇwøýx‡cGÃ5§kM×]®7wNí<ÝåÙuî†ï‹7ƒn^½~«óvìí»wfÜé¾Ë¹Û/ëÞëûù÷G,}HxXòHéQùcíÇ5ÿ0ÿÇ¡nÇîS=¾=íO¢Ÿ<èe÷¾|*|ú¹¯èõYùs½çµývý'ü®¿˜þ¢ïeîË‘Áâ?”ÿ¨~eöêØŸ^¶% õ½¼}³ú/Í¿ö¾ò¶e8røñ»ìw#ïK>h~Ø÷ÑùcÛ§øOÏGæ~&}®øbþ¥ùkÈׇ£Ù££¹,KrÀ`CSSx³j"ôëðü@“Þ½$‚Hï‹þ–ÞÏ$â@=|‰Ü̳†Íä¬äÊ"¼ˆñ¨½ýx“‰0ÕÞN‹VItôMr°}‰ýï~ØMN÷Kï|b!Âóý[1êÒ; ~”w%lkòcâ pHYs%%IR$ðŸiTXtXML:com.adobe.xmp 2428 1626 AÛ»iDOT-(--ˆ Þ\ïò@IDATxì½ œ\U•?~ªzß;Ý I' $€Ù4 ‹Bf\˨¬£ÂŒ££Îü>—ù #.ã¨3*àFüÍ(*˜î°„Â"”$ vw¶Þ»«zïÿ÷{n½N¥ítW½÷ªº;9/éªWo»ï~ï}çœ{Ï÷YóÙ›‡Ž9óÝròyÊàà þ‰-†€!`†€!`†€!`†€!`†€!`†€!`†€!`†€!`†€!`YC  ÿžÚø¸¼²éE).(’âÂÝ&ÑûŠD$òÔ}ÿ3tòÊ e`` k7g†€!`†€!`†€!`†€!`†€!`†€!`†€!`†€!`†€!`ü%999òä#É‹O>+U•Ó¤  _r$ê$á«§§gÈÈ^ œm1 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 C`" éëþÿ÷+ÙùÆŸ¥¼¬\r¢9ø‹Ên&‹Åøm‹!`†€!`†€!`†€!`†€!`†€!`†€!`†€!`†€!`†À$A`WÃN¹ÿÿ+…y…R˜ÏÔŽý3Â×$i » CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0’øõ½ÿ+ÛßB”¯R½˜Ö)-ÂW2D¶n†€!`†€!`†€!`†€!`†€!`†€!`†€!`†€!`†Àä@`ÓSOË/ïþ…¦uÌËÍÕ›2Â×äh» CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0öC §§G¶lÙ"Gy¤J$b¾öÈ~†€!`†€!`†€!`†€!`†€!`†€!`†€!`†€!`†€!0Y’§Ÿ~ZŽ>úh%|1­£Eøš,­c÷a†€!`†€!`†€!`†€!`†€!`†€!`†€!`†€!`†À}ôQ™7ož[„¯ØØOCÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0&7n&|Y„¯IÕ4v3†€!`†€!`†€!`†€!`†€!`†€!`†€!`†€!`†€!`ìÀ#<¢„¯’’1Â×þØØ/CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0 CÀ0&á‹)ð5©šæÐ¾™¡¡¡I@$ å^&CªK(€à"““°ê2Öu&îcÝ«í3 CÀŽÀ¡¢ß‚#eW0 CÀ0 CÀ0 CÀ8°ùÒC±Õ­Î†€!`L<‡Ê¼íDëYÃ9;}ÝpÎΓ½”‡~Ø"|MöF:ØïÂ(ã¯[úûûd` _eH"ƒQ|ŠnÁñ ŸX÷XÜ;$C‘(ŽÅñ‘!Á¾çExt”¬"|sqÇò ½®G.×Ð J‹be¿Ý±CøöÊ箜œ¨äæåIQQ‘þ§(½:uwwK_/ê48€Û@9¸·tË罆UAù9ÑÉËËM¹. ]&lëþ¾~é&¬Ûxø‡Yÿ‰ÂŸýÅõ¡|)*,L©…¹]Â0 C ìÓoÐù}}28ØO+&°ýq0è?¿?ûËêžý7Qöµ?°þoýobdž¿á?‘óÖÿ¬ÿYÿKoþÑì_³Úÿ*ò—ÃæÜhnbÎÝæKÝøÉ> CÀ0ÂD yÞv2úŸ3mÿåDáÎÏ“âÂÔ|Û~±ß‡³ùÉ#Cçnâ< ýôCìãJÌã/ެrsa7æ’«avãÈ>ä¾,Â×HdìwVèêê’¶¶Vòñ—RLBÍåp„ïÈXÃ\-±¢ƒØQþ•àð. RÉ[ÞIܧ?)êô@À@‹ñ†ÜÜ9zzR}Qþ)Œ‡âƒ$“õ)Q©§§W***¤´´4éœ}«¬SKk«H~®«OƒWî«|½2î7ŒúG@j¢T§t__”Q—}µ ¶ÖÕ LÚZ¤0¯PrósA:ËE;Gô/Ñ|Iì˜õ÷Óþa”?„ö‚âí’Þþ^éíéC*—Ò²ÑûP¶j†€!0‰ ~S;:?Ž(ì¤IjhµCÒÿ¥ÿH¼÷kYý€µ(ö¯õÿôÇ?öüÙógò'œñ·É“?éÎ?™ü5ùkò×äoó¿SEÿ òåhüõ÷è<5çK++Ë0ç^¦âÐ> CÀ0 Lÿ³Ö/Có˜X„_;IÏöŽíÛö‹µù³ãÿen÷ /?_òAâË…‚p"‘œCbþTÁéçˆn}=ÝR^®F™Ù|vzè!‹ðåWˆÙyÁhkk“x,&Å%e’_á¤d/ìs”lEr’›ãc̉BG⢒⢼-~ƒHÅ-dw2¨>U¸^E.‘ž—¦GáCçqXâ­K½˜GÃo^-Q¾F Bá8R…HooÄ X‹‹ŠA–*ç冗¶Ö6éF¤²âÒ"ÝBuþÒëÁù$8¹’Ó+ßyŒÃ©¿F# dþööôHgWmP$åû×e¸RWZµ»1X/‘|Dc¤46pT ycãfý' ÿ!Y¶›Äè—V±.ô}°I¸³Å0 C`ê!@¢WoÓ—”‚àÞ.!¹[0ÈŠBÏÑn b úÏê¯&:‚³]ù™ªýiíO´Â± ëèLúÚó—Úø×äÉ“¿¦&jþÍäÉ“?‡–üá<© pØ g4¢e÷ööcžs¦]h‹!`†ÀÁÀTñ?gÒþBðAú¹z¶¯¯Wºb˜Ë¦_D™0óÿb¾) þ_‡s\Êà‡È+@Pø"èðø\=Øç?UE«8ã±AmàgïŒÁnDô:X9Ô—dÂ#ÌEb±˜›>Ô‘±úg2Q;Û;À¼,—‚Â|%qG6ª’°ð…"¢ã”Ä-b›NÒc³‹š¡/½O7%BÅåxvæA¸xµÄ&'ëôò¸ ²Sò Ž%æÊH¥ü~¤œìîŽv)s´– ëÔÑÑ!ex ©iû¢ypør‡»¥ÐÊç-‡Uÿ>¼AÕÓ—D(!!«4QÞv‹¶30a$«àÝKSgÀ?Ìúûiÿ0Ê쓞x´wtJYyÉp s»†!`†@æðt>ß aª^F(¥¾Ï¤ý†þ bÿXùáÙ_eXûû·ÿ­ÿ[ÿküeÏúão{þìù³ç¶-¥ž]#%&;ó_öüÙógÏŸ{êìùËŽü¡#º‡/'s¾sÉÞœ» ?û0 CÀ0RD`*ûŸ3i ·Mp‡”#KɲX¥³úÄ;ÍÿK—‡k¤©ÿ;lÿ/Éð]°œŸYFT%Sü‡Lö¿Tøé”?ˆ 6=àj´ƒ«QZŠŒZà8Ê˃>h¾å0ugŠÄ††F© “¹lsõI£`àfh‹ ¦Cƒ˜ÐÂxrѱ°cˆŒDlãF=LÇš8?˜ìÑ}òM(lÐ(_y¤¬þæºW®åf-t[ºå÷AÄ»cÒÞÖ.³gÏÖ{®o¨G”¬J),±)Ä&,™*_«Rýû@`‹AÉ···ËœšÙнÞ|À¶s#0)C«¢ÂbäÕeXÉpð³þ¼§tÛ?ŒòðæZ<—¶Ž6ô¡9¡á°ÙìtCÀ0 qpvLƒFÆ,@´ÏÜ\ºÜ²c„¡‚Ø?V>:GHö×DÙÖþÚ‹}ÙÿÖÿ­ÿÛóO91ão{þìù³çÏž?“?&'bþ×ôOöõOÒôÄ‘/U×Ì®±ùRŠ[ CÀ0RFà`ð?gÒþ`*¼îîna¶ªÙsüûƒÍÿ;¶ÿ?,ÿ/q®Ÿ¢¼¼‘ÙJÀ§p/ó˜ üƒLÏ÷ÄGÔºövúÙý÷ç”Ì$>0™ðe¾&qCL·†(rf¯)ó òAìŠB0!a"Sü) ËEç"­+¢éþHå"¥ËýÓˆ\ÐxØ«°( çéÀÜ.}Ïq˜Á,ö) ÌíÁ‰z†¸Šßò»{z…aAË@\£Ð1JVe¹²NY(?Ìú÷õÄ¥×øöIxa,®cJìc·DË„†˜õŸ¨þ×í-ˆWîÈaàn×0 CÀÈ,Ôo|SŒ„æÂüü¬ÛƒþƒõåÛþ²úO¬ýkøþ”°5þ²þgýÏúŸ=&Üˋٞÿ2ùkò×ä¯ÉßlÊß^ι··h´†°æ©Ù‡m1 CÀ8ø8XüÏ™´¿ã½ÝfÒ p¹o°ùñ,!8ÍXüƒ0ü¿ž¢m•WT5þC&û£“…ÉÿèFnCpf_;”íÆ 6X„¯ƒ_ÅM®677K4Õp‘y9yp82Vœ°bº?²Hþâ?òT±Cò¨Ó,ê`ub!q¾›Ø¯òlž‹o\f_È{œAŒŒŽØ±â³ü¾~M…80Ø{‚`F0EþÜ\D÷ÊBùœà «þHíÈpÙƒƒƒRU]åÀøÙÜÜLrf¬cD< ÿ0ëÏö›ˆþ7Ð7 ]íÍ®ª*Ü6›n†€!0ÎŽÉS Ÿ‡£i«dÏþ8ô_ûËêžý7Qöµ¿ÿñ‡õëÿaÿìùŸ˜ñŸÉ?“~çŸLþ›ü7ùO·ÐÄÌÿÚó—ýçÙ(º:1Oh_6_ªÓ öa†€!"‹ÿ9“öGß RvÈÀ ôluuŠÈî˜ùÇç„áÿmŸ"| ¦+Ì÷@ùSŒéù§>p5Gûó!ìgO&|Y„¯ýå•ýÊ;wî‚p*–¢âb‰‚DÅÅ¡#¿8|×ßZJÈr»^TP†¸iA cô/Fî"?Œi¹Ï ;\ ä+ey%®œJîb9œ`ŠÈA²À4ª˜¿ò‡‘Ê:¥»+®×*))‘RüEq#Ù(?ÌúB±wB vÇcrØÌ™$ð² í\Œ6.)A;##'·ÃÄ?ÌúOTÿcäFÑbÂÂ=pÃÙ CÀ0ÆD`ç.è7è¶²bä…@¿eÙþ8ô_ûËê?±ö¯áoøOäøËúŸõ?ë7ÿaÏŸ=öüÙó7Qó¯&=ù344ˆ”Ž˜/íŽÉÌÙ§so; CÀ0ÿs&íŸAêYd¯`*¼™>ýÁ“Íÿ;Ø?(/¼ø‚ô!¸ÉÒ%§€{€Ô‡üÿaà†ÿ—8ÁA‰_ä=L5þA¦ýïÈÂWLb±®CÚÏ^WWg¾M6E*ÒÐØ(•H}È|³¸gåÁ[J¢—ò³¸ 'áå¶áqeÄ/ÖBšGê>žÇß<‚d°„¸^HÅöA°x¼;kŽ8†ß.Ü"N÷Q>X^J’êìêÀý ¡NHíTX„¨V‰º.?ÌúF2`ÛÁꮩ™E@/ RŽ—¥…pˆS·†Œ˜õ÷Óþa”ADµN(¡¾jf…ƒ{à†³ †€!`Œ‰€ê·ò )y&I¶í0ôOûÇʧŠ.2Aö§áoø[ÿ³çÏäÕtöÇÿ&Mþšü5ùkò×ä¯éŸìè_¾®ÝÙÃ|i»ÌžUÃŽg‹!`†€!‹ÿ9“ãO‰ìÕ ð,ŸþàÉæÿ}éÅ—e÷î]ʘ1½ZN<éä ç„áÿmh„Ÿ|ŠR¾8Íÿ!“ý/lþSD’ßСýùе“ _á+%uaA€Ä¨F*ª*¥¤¨X§i)Õk†}*D’ÈY^YŽìÏÕü®<–/œ@g+¨[Jºbœ0‹Èùb 0²Ét¿r½ÈóäYÞ5Ü0=Hùñ.immÑò+++Á´-ÊjùaÖ?Fw+ÂCÎ9üpvßßlçz´ó´Ê*ðÅ6@ÞÂÐñ³þÔ–ÑÿbñNiii“ÃgÏö·h†€!ÔŽ©OØ1ˆò5QöÇÁ ÿ‚Ø_Vÿ‰µ Ã"Ç_Öÿ¬ÿYÿ›¸ù{þìù³çÏž?ÿLÌüód”¿÷Þs¯¬¤‹‚ÿ1?7O_ ®„î¬F*ÅÂÂ…ŒîSçÔö|×wà_&õ?£!µ4·øòO6ÿïë¯ÿQÞxc‡ÎÓ“0_ôsŽ··¸N,ÿ ˆÿ—874ÖKÕ´*)R>úEù™ìdgxKý?ÖÕ)ÍÍ­èÏs¼Ërß$|sÌ1àd *Åb±}(rpX…3€PŽT E†rððB0.DÝ¢"£Vºª>ö2qp$Ïç mw0Bõq;w¾õ‚Jö‚lwQôâü}ܯÇ+?†ÐÒÍ-­Zþ´iÓÄÕ‰÷‘òùvaXõƒðÕòÚœš9À ÷`Ñv᫪jš¢‡Û+\üìÿDõ?¦slî³kfÆ=@“Ù©†€!`)  ú „¯iÕÐox³f¢ìƒAÿÑÒpæÒÔ³ÿ ÿðìω²¿¬ÿÙógò£â)8þ6ùkò7¬ùëÿfMµùG“&ÿ&›ü»õÖ[0•3Ï:SN?ý4‰FÞ!Äùß"|µ¶q¾4øþæ–}‘Èô \*Lû… ÊŒêéiõ?žÓÝçê’-˜ôÍ0¬lC¡²CÀ0&1ÃúM£zRç;e3Òþ`Æ“ÿZÍ Ù?V¾áoý/ñÀþ²ç˜ü°þ1&ÐñeBžhü¡³±$'ü™^U Œ&Æþ âÿ%Îõ|ñ|Šbd›ÿÃÞ¦fÙ_|Ooã è\"zs‰aNxá·ëˆºY{dbþ+¿ @އo½¾õ0ìO4ÿ"Ö~C ìÆ9þý쯿þ:o}Ê.;vìyóæ)9pÂ"|õ€´ÑÔÔ¤d/’ºHðÊÉÉqвS (Œ¤+’¾8(@GÉÆb÷ÊlËÆz(Üj† dÎYŠƒ„@`[³(ý™Ø®.Ä2ÉN2„ÐÙäCCyAºq ;HB¸ð·‹ Åã›öì•5k×J<Þ­‚ð¼óΓ“N:‡àxœ;„k-Ÿoµ@ˆðž™¾°¸Ø³Üýòú®Nž ÖûM¡|†ûüó[o±rÍÉ•cæ# _Q~¦^ìK«|*žæDøòÁèÖz%}h;#·pe¥#|¥[¾m«ýâí¿qã£J Õ"µý]]bAc ýÙ´?á[±p»Ø©G$ºŽnô¶ñ¬áíXå…°A6uæÙØ•ZÿK2¼[á+ÜÝÚ§!`†@¦ ~kÀ›5Ó ß8ÐrʆŠbŸý‘ªüÏ”ýcå§gÿ°¯¨½€fÏþHÅþ4ü ¿ö¿õ¿±í{þ ¤Æÿšü1ùcòÇéô°çLþ˜ü1ùËñæÄd™N”Ùø‡ƒÁ ó¿SÙþ»å–¯*áËÍß:ù{Ò‰'ʲeïÑT2Açß»bxA‘Gæ¤yÄuXû4 CÀ8ÔP¿d–üÏÞø» Ä©_x~è8àv¾EΧë,†ÿ÷ä“OqóÍ)ø¿½ò9§égüGú¶k|¢È´ÿ7•ñW¾ù§ŸyFy#Ç/<^æÀ^¨­­Õ&X±r…44ì”W^yEù&§.]"%¥¥2ÿÄÿ«~dÒš†LZÅàSL„ÿaã#¨/žÃ¿þ÷‚‚|9ëlúÖyÌÌ¿ó9l¿Á‘·Åå` |MhJÇf00÷îÝ«Œ3Fñ"à ;rò’¼Ñ¿HN™Žp‡UUUɇ…¾n÷.¤l×ú†z©f„/:JAÅÑymo¨@n¢VÓ8’à¦ÀèèƒQ¸Uõ@lrç¸_wú;*{wï‘5w¯‘(-NÌäçÊ•W}T*Ê*ö ÆõÁÊ#ÿr+Ÿ,¿ læÂ’"Ü+T-6pЯ÷ —éFå ‘¼†:ŽQ~OO¯üñ¯IjŠúç"ßêüc•BÆTêï§|et#gs¬×[eÚÿ›Êøï±'’©Žš{¢ @‡¤n}â¿rÅ ý~ýõíH±¹ÁgŠä]ï:C]Äڽà8ºÿ9•òSµ¿‚ø‰s#_•à” “ÖHÿw6æÿÕÇŽ~¼QÓ*z4þCkk›>|ùŠåÅ?ÆþÜD~ƒÿ<ƒ³LÅå±Ç›¸_$zuvvj¤.Fõrp|)ø˜î‘‘·JÁÊ$ñ+‹Ý_ø¨+¤?t©þè&UY<œâ" ¨iõ਋2õ”S—Ô„Ì»{ã‘.RŽ"¢£c­Y·VºIöÂ~¦C\}ée2ó°™8¢ýGÏÓK+Ÿ$)¾mÄ{¨®®@ºÑbGæÂe©/T½Sac+n%­òc=ݲýÛ¤á@yÇ9¹9rì1ÇH!”ÓXõW2™ò;Á@ׇ!DšRE„P“•hçâR¦tL¿þCc´m·ÈÊËþ¢ý“ë_Kb°X¾beÚø'—¿¡n{š¬\¶|Üþ—\~*íOòj+ˆv5{˜-†€!`™G@íD°dg¾YCýïÙéÊÞ-m/ÅWPûÇʇuçÃþ1ü]lý/ØøÃž?{þ ùÇkc‹ôJžTΜ!ʼnñ÷Tèÿƒ{dwK¿ä–UÉôÊ‚aýËí{›$/†UWúš˜ õkþC¯ƒÎnöÙfÿºùG{þMÿ úŸ>˜'ŸxBü øcÔAí¦ç9øÂ 61ÿ­ëîÛ†d¢}­ºø"·;±=ñ¯f¢hƒãÎGª©ÌÏ X †€!`“løŸ=ûo ¯_žzú)‰wÇ¡ë éÿÅÕ"\Ðú­Ûô¶óH˜ad gC¸3" ‚4ýßEEÅrÚéï„?8×]/Cã/‘Ú@øªñIøjÌ ÿ—ØpQtPÿçžÝ$Å%Ųàø8ÒùŸëj×+î+A.RóWغu«tuvÉâ¥KõzÙžÿ âÿõús%²‹•–*ÿÁëAùÉþï±øëkëÐm#²rå2_å×Á—O»p|ôlÏLáÏll­ÍMèÏÁS:NeÂׄDøjAhµÖÖVìÅ\’ì¸#o›Ý+y?· ‚ÝÇ¥²²Ž·iÉ»¯Ûý†pÔ ¨€bHMDf+‚0V© ɤ¬P|³P9‚ëƒï„r„0Ak;‡(» ÿ<ÏsX…>¶5D¸ní:„ÏŒ¡ U(—^z)È^³p/Î ƒ†þÃUw-ÿå“Í4ˆ¼X%Â*–#¬"Š!;›å«ç óQ~ $,’¾ú´þ¹Hï8ÿ˜yZ/V›å$×_³Ïòµ.Œðá«í\ÅP“%ÄÄ_ýY7*€‘í_»D.lUÂÖ¶l~Õá‹mü·páqŠÝ(ü^áEøâ}øh5ÐŽ+–ƒð¥7…ËòÊ!௑ÕZÀ¤Ÿ>“ÞÝ…}†€!`d o U…7Z”¸½¢*º&Lý ýÇb¸„¡h—„e±?´.¨pûÏÊ·þgÏŸ“ aŒ?LþËQÆ&Eâ[ïéKnÔáÐmOî–ŸT X¦‚ü‰É/®«–¯…]ôMÙõÌǤ /–E"q¹÷Ú*ùð]X?Ñm/Á„„µ?[5µù—©ÑþáÍÿ˜ýÞü“ÙÀÒì_³ÿ!mýÎgKþ¶µ·ÉºuëeŽC?ü9áÄErøœÃåŽÛoG@8¬½ùoÚX¢9Qy×gʧŸ&¹yy:^Vã!Íñ'w-­áÌSëÙ‡!`†ÀA@¦ýÏÉú÷¥—^–»vSl¥]—Ðsšf[9_Ì}Ë´"yþµu«rtóœuJx¢ÈÌš™²è„EÿíBt²fèÙ9>ˆÕÄ9“þß„I‘výëÖo€ƒÀ¾ˆ¿›àÚÿlÏ?ñÿjn¬¦JÉmÉýoªÌÿÕ!( çXV¬ /ƒãŸ.p5˜-ˆŸ}ªGøzôÑG5ÂW 8äPE@ â#Ñ¥»»[Þ|óM)//×ü©ì´Þ’¼îmKþN&qo™´··Ë‘G‰èJ…ɇú^·ûó ݸ'zjÒð#!ž*D¾$¢+Í<ˆ|éâ¶Qññ'?à\å$<6x=‡§ïÙ³WÖ®] Fu Û#R„þ°ú’Õ2s"{ñýÇëã,ïDlçõ¨`IJ·ü®Äà“§³NêüÕûb‰ze-5Hù,cÇv¾ðo<77OŽé«d6¯,‹?ô·Ïò»º:­Œ!ý3`y\´j’éIì RÿÑÚŸ¬b¶(7—­[¶²Tüs%·p¡â_Gö1ðX±|¥î%>~Ú#…aQÂK¥ÿ¡þ×òÜ}¤Öþ1D¢k…aUSc„/Âg‹!`“ê7 ¥L;FõîÖ§üW-áÓþP}ƒ¢ÃÐÿ~ì+ßõRÃßú¿=ÿþì_“³LAùßýêíRµøF€ßxj—|bQ™¯ñO¶Û?í;/™)×ÿ ·¾ê{²{ÝÕÂ;H»Ü±z¦Üð+Œï.þ®ì¾ç*)…žmüæø/ÝúG"]òÂÃOKCWÌ>ñ\9épޝMþšü5ùëgþ%ÝçÇOäóoåþÙÿZZZå'?ý²³tè‹ö^x¡Ì=ê¨áñï-·|E 4U'Q/a9zîÑrÞùçé‹Þ~æ_iqÚž…p¾´™Ž;‘Gx[ CÀ0=2éN´ €ÃsÏmr9ü…ø¯ ÖôÛW.‡o2yü_·Ù„¼<’º4Y™ªý)Hí¸DèFw³ïÓÿ;rþ—~t¾ñI3ÓþßÑìÌ™:“†q`ÚLmàQW€Õ!af(⿜;° $lyüHòÿG„(šã@÷šÂ³?¶¿ƒø=œð¨‘ßÂlÿtù,ÜOùÁqÅrfëº>ùã•ß…ll Î$øÁ@øÊz„¯Aø ‘ ¥‚M=t¶6Ÿ»Äwbóð—Göò¾¹ƒë$håäähd¢áƒ¬ØýoœSÙ¶t”j*$° uXA­£CjDUVlW\ˆ¤¡Ç@« à¯Ä>¬ê:™Ó{÷4ÉÝx㨬dž•_'«/»LjfÍÂ%m+Q„Dq~¢´|FknmVÒ6£YB躻Æ[¤P¼Õ0ÊŒµmÛvédèl‘¼œ<9¤¯"’¾¨‰ô¥U¼‡‹ºú-ŸoN)£;¬_R¥Š¨(tü™‹™í·‚¡9Ǩÿ†ZµÏ2(x¶…ßög„/¯×¥ÿÁ?†p¢öÆÇCÀ0&?´cê¡ß ó‹JŠBÑ¿:#àÓþ ¢†•sûËʧyÌþ²ö‡aeýŸæªÚøì©Žìù³ç/Ûò§{ËRÍ_xfo{b—\Ry ñg¶ä_Tºä®K“kAø:çû²û·WJ©Î`ûe3äÚ_â|7ˆ`¿Œ“À9Ž3ÿÍç/'¾Iί>GÆmžxëãòÔÍï0û#„ùlõ¿0çŸ84Öü§*˜šLýŸuֶ✞ÕßÚŒù?ëÿá>ÿ=}½òÓŸþDvíܥѼV¯^-…ÅxÑ>Iþ~õÖ[¥ _ÎÒÒR9/å·À½€ëwþ5Yþpν%`¤H[ CÀ0!2åNÖœµyþ…礩¹Ùùa§Ò‹ÍÅÙ®\Ñ_üåË@>òlZØ2µðYª]‹ÔŽ‘ƒ¸y nÄ´óð5ª«§Ë)§œœ1û/Ö…@-ÍRãÃLœë3èÿiÿïlØ)[¶l‘úÇñOñ^ 30óü¿uÌ …ߌ&EÐI6RLµ}pmIüÏËË…Ír¼ÔÌ< ?q• ŽÿƒøÕÑ>E_àSñÿ+¦¨?ªŸèc’®þÍèÏ/oÞ"}½=Š‘vZ=ž˜9¬[ã/ñçö‚‚9þ„…2½j:NÕRÛÚõèïX#ñ1“ó¿qdlikÑ@›©NøÚ¸qãp„/fVÌx„¯žžÙ±ceU”uà ;.ï{xLjìå}{»ÙçΫÊÛæçÛî¯Àl)Ÿ£Š€‘Ÿ ©XÓBPxB}€½@sc]ÛI¦ßU©¬bÁõ'ŠÜgSSÂK¯F¢¤ÊËÏ—K/¹v Îãõp]ȬÒ6h*_lÓ·ŒT+?Ö(ßx¢Àª¹‰é y‡œdCi¡–O&ðëÛþ²$AA=ékÞ¼c@œ,rjÁ¼åÇ“ŒîÙþ"«Ì…í¬Ä>ðU:þ.ï¯#| íC£ÔŸÆbˆaAÚ_•¯“`†'÷¿±ÊO¥ÿyiAý0éÚöi†€!-œCB³³c¤R‘ÿAퟠúÇÊwv'm6šéÚŸ†ÿí/ëÿ™$¬ýÚ¿†¿áŸ©ño|ëR½øḦ|ãé]òñE¥Xõ?þÌ–ü锵 |]Cb׹ߗ=\)LÝ•¹ ¾®¹ÛÏùž4#"þùàœsÖ9ÿñÿç†ç‡pÙÅ27ÿ²}º‡d/oIôg¶‚·[.0‡ /`ÄJRÿÏ/ÌGŸ=[Ç nGD˜Ò‘c´• >ò4¯ÿ¥ÊÿàuRñ¿Ä;ÑŸÛüE¬Ãmér0¾²ákÏž=ÉÓt~ì¬\F~'oÓð‘lØ{ëÉßÞ5g̘áâëÛî/~ãîTÈQURªÑ©t6Õç¢*!’Ä„—J'4T0CëôÌ¡E57ï•5k@öÂ[?<¸ ¿@V¯¾Df‘ÅIñAÉ3è˜Ò<'Ñå°'‚—ÀžÖ¸…‰ÉBå«°FDʾi••RB®ÎéãL”ß%¼íÛdp ‰œ£‘¾ €%•…Ÿßòc݈`tûÉÙÌ{I^¼vžFb_a) Çý†ˆí„æDu½¼¿[¶º”ŽÚ丑ã¯ø×2#˜ò+W¼'Pù3|ùÊûõ?OÑ8Ý熚d*Í9> «dÌmÝ0 C ó8ýÆ_•ˆ²‰PÊP»Aõ/bPãÆÝ@ßÕ a¯P¯óú´+FØ?a赨º¬|ÃßúŸZÐöü“?:¤2ù;ªþ‰o½C¦/¹AÇÔ_áëz¾ôéÙ7þ ¶È^zUÛ“±ÅÓeˬ’Ü1Çß‘VùÃ+[¥¾µãwL¾N›-Ç7_ªL$yüŸ¬ÿ¢}²ýµm²so›ôà>òKPÖÂc¥¦ÀIãÏH¤S‰]×ý ÷ Â×îûAøB‘œ.Y³¾˜ê„¯æû¯’ÂŽ½²yëkÒ듾üb9âØåè*8¹óÉå{ú?2Ð"¯½‚:óÞ1HÍ+:LŽ^8_jJsÇœhjØ"xkÞ Ü{¥>^޲’ú_GS›ô5?!œô!y·yâÍÿO~ýÙÅÒ×ù‡YÕ‚Yl݇¿’38ÿ1Zý­|Ã?Só_fÿî?ÿiÏž5Œ]lüEUãoþQåu ã?¾ÜüÝï}Oz»{å#ý¨qÄPƒ‰ÿO~òcÌËž®g©þ {þ=Þ‰H ­$|Õ |ê;[ CÀ0 ±ðü’aùŸGÓõõF´©W¡ûx/4NþglàÈÀ-°ã ¯iÏ®@ U݉ù×:DrGòøƒŸZ¯¥ê¿Ýfú?¿@tdÂþq©“™/}=ëáœ)ÿïÈñ7S5˜3N?‘®˜ÚptÿûzÁÂhRòÿwvtÊÓO=‰kDpÜ \@öLÍ¿ñÿz8W"ÓHI2$:Êê¯ý Gùá?Ôið”ˆ,Y¼DSyÇÑú?¯>²üVDÖÚ´é9ݳ˜&—_[‡ìY€xùJDøÒ=¼2—pçcàN00T€6Før-“òç[o½…LwQeO²³rá··îýÖ#>’{®{¿ùMv'I0„Yìþ‚á7öÃJSý¾·EÇzâag FJ(MÆA‹ŠŽ³¾ÍMͲví:¡ÀdW*Ù냺ęžáú‡ö-þÀŸ~é·ŸZ2@ù¼GFc:>–_]Y…ðÖHéȺ°,F3P>C@nÛþ:Þ¢BþaÜC.ÂO2½cqR'j¹þÊ׺ ÷timg„ô$ Žñ°ñ§’`“ªBÆÊ„šÔ>ƒmì Bø3#YòË•ÑÍÛð×þµµ⃈†|Ûz ¤åÕÜåô;Šrüàß…ÈjmH Z Ô$«m‹!`†@æ ~kl¬—Jèüb0¡üÊ¿öOXúÇÊ÷gþáØ?Öÿ¬ÿùÿÙó7±Ï_7"|Ur£Žín{’„/¤t„êõÆ¿zôNY}Þ òÒ(êø3?|H>ùiR8ÊøûÍGo—Oœ÷IMYÈÁÇyêÑÇØíÓ?zH>sÅéHÁ˜HÝ ã¯nyîžoÉ ý”Å ‰%1þþ䬗/^7¡±™ã¿H©W3¥#®ŒÔ»ÒÑÝy'_³äÁ"—Kî;¯EÞwå—ö+Ÿô—ÝökùöõïFºGÞký=ý¿ãÑ;dõù7( %p÷ó¨óç®8UIYzÛ‰ù‡®È¿Þp¾|ë!ÇڲμS‘‹oþ¡|ý_/—#à ˆö¾ +§½Kq'»#u]O‘o<µ[>¶¨lÿLÍ?„=þ5ùoòßä?çÀñsBÒ{þù{ŒùOÓ«ÿ5ü_@šª_ÿö~™{Ô\¹âo.s:*¡<ýGýÏyRê¾Lé%|µ5JÍ£·i†€!`‡ k4 ó1•ó?HÿoÞò2æ†w*¦ÅÑÿèkØÄÁs5ñÁ¬AÉöo`hbÑÁ–‚ø%Љ…d/>8 Wd±û †ßxس}ë‚°© IB7ˆª”‚°J¹°!Ë0ªÉtm® Ì]Ù« d/DöÙ‹¿óÆñDöb¾aAÕMô>Eÿàd-þÆÕùâ°ïòõ¾pz ‘ÅZ‘‘õš–-Ã*f£ü®ÎNÙ¾}r»!vnNŽÌ›?O }—ßë–VDšš œ÷œ/? ñhdnaMéXý.þ$rqY¾ ÿ†,xפûÚŸ)Ùî+ß³,Pû×"(ùJøbÁX×]j¬òõP1Fý»õ5æÊžJÓÝ”}†€!`d ê·†zè7¾Yƒ¨žÒ?,?“öTK`ýãÇþ SÿYùè$°uÓ± ÿðì/ëÖÿìùK_þt#ÂWÕ’©‚äëOí”OœX]Ç!uD^ºó9íÆµø•ÐCÇË òŠ#B9%C7Ý-M_½HŠ“Æÿ¸ë&9ùºº#tü(V¼^âJÔvróÿHûWVJ.·áçö{o–>òC=Âm:QŽ_ô’l~Åm¢þ]õOÉÚ«¹ |­»t†\Í”Ž |íùÍU q|“µ— Õã}ª±ñµQ1s"îýeÜ=°¶ b}÷9M¥ÈŸÞøï•_+§Þ°VÐ##‹dÎ{‰GÀ^ÐK±Î·^,|™óÑîMriõÙ b,UpÆÅ«¦É}¿Ü¸¯üËï]·_.=/ÉU•ïUÞžÅkÿÇsMrÕÿãÓ?è¹2…ù'Ó¿Ú›µóyýŸQáÃJ¶æßX¦•àù/ôf•+cÍ?™ýÌþwüñß÷¬“?üñuyß{ß'ï8é$v­ yþãÈÓÂH –Áµ}†€!`Œ‹@Xþç±ìÿçžÝ¤(ã>ø#ì‘ߢCJþ†U¦.Dl[¹Œš}ãïº ôm&HA´¨q¢;—cH5xq¸³¿+PãÔ¥§âZDcW˜öwWœ™‡üd2íÿ‰m¼ D®±üïŒR¥þ`ìÆòÿ“ðE,W,_PÉE ¼:ª!ÌØæðwÍÌþâÿUœI`D?ÐÏqkcÕ_o7í‡ÿ°ÁSpî øÜýÔ}"+}èÉåoá‹8.CÔµLŽ¿;á‹\ ©À§z„/¾²šÒñµ×^ÓÎéJØaµŽøNÞæËmÞúÈo^§a~ßþö·ó0ß‹Ý_0üÆ^T}=B""cà6ÀÞ[A<’˜|ÀAHÙ(ÚU£zAª“°ƒùéÏ~ìXÔPž¹¹9rÙêÕRsøŽ<Æ‹ò:ú‡káx Ý —{!¾±ÍoùÐà*ó&iI_¬¨ª–ÒB’زS~§FúÚŽÈvZ~aI©7ïXß建ËqKd¹°”y\©Ìã°ñ' ž(“ðņ%þì':y•„? _lr§¤pÏöß ©!ÉøFîgíO®ý!Æ,Ÿ&Úxýi:[ZðÆš¾€¥-†€!`Ln¨ßêiÇT!ÂWqÑõO*òßÑ9`§.6KÁþñì0ô•OÜ ëöü™ü1ù›ªþ‰o¹Cª—|’]Ñ¥vÉÇN*×ñ×Pão¤dþu|& J}ã—käªåó¤ã°]¯þVn^üÁÁIä–ëåæÓªp…AÉÙ}¿Ìý ‡s*Šþï½ÏËõç¿]ò1ÖÞ³u½ü3λKÇo'ʽ;Öð0Ìôm‘Õ•Kå>\a(r…Ü÷Â×äÜ·OS2XÓëäOºXÖr (Wȳ-·ËñŒ †H^—Δ«Á²Š uã®®–Ò!l2¥#_ ‚Q ­’Ÿnü7YµäÉ‹Äe[ÝÉ¢‹?Ï‚p½Ëä½/޹‰úû¥øØ¹ ËÈ rÛ}wÉ•ËðöíÙ|¿Ü¼ÄÕ™wò• –¿C9ŒÜq×µrÂu¤p Éþçy¹ùüã¤ú?'þ–Ü~Óqr㽺üdk«\rd¾Î ¶>)—×,S ϹõaùÕMK%Úß/Ѽü¿ÿšý1þøÛìög³Ìþa?€¼±ñǸóχâøë;ßþŽ´w´Ë'>~½TUW:Ÿ_óŸéÊß®N8îZm¾TVû0 CÀH °üÏcéÿ'žz\ƒÏð†8:ä5AñâŠÛˆ݇ŸÎ‡¹Ïþv`‘cœÉ£H²I¨Y7ôÔëq»€äS*gœqZFæŸ;»âÒÂWÍœôQdÚÿ;ÿ HéHœ”<—äÿ9þeàÇ(Scùÿ9‰ø¯ák4þÁÈòäYþhþç þ_õC4Ô#€Î4ð)J3:þ¯[ŒÑW(A1}ÿ7}ñh"œ:V<üIc£¨žk0b#| ¬2Õ _?üðp„/ÝÊx„/#T#TMvü𼎹8Õ U |#–Ž) ¡ïÈM¥ UMF M©‘¾¸“,[üc¸DêÌŸüôg²³q&i©ýräƒï¿}ÌQÊÚ‚ø£ê‘C€ 1$/Ìÿ¼´Îèb·JÐJ³|½ \(ÞÝ%M-­´ˆð…A0£–e«üŽöÙñ¢|á>X~qi¢|ë»ü"|µ„4V…æ±ËáŒ÷™CÆ=ØlÚ `±-¶"¥#û‹kòˆ,X¸@Ûº.AÔr‘¹ü·m"ÄçŠ ñÉK㸳ÿq ~ö#ýJ³ÿÅЇZšY-}à ·b‹!`†@PýVߨßEˆðDþ±?ÂÐ?V>t·OûÏðnÿXÿ³þgÏ•Wêãß0Ç~Ÿ?¦t¬^rƒŽ¾ñ$"|„8YCýòð—Ï’÷~1¹Ð­¿òX½üÝÉp'ÿ¢»+Kþ¼Œýrñd÷=—Ié@Ÿ<ä‡Í_øÝ›òÙ³§ï?þýçRrÒu:þºô§¯Èí8F¢9òBí£ÒÐÑ+%'œ+gÍé,iüµçÁ[åÈ÷}W\%÷Þ-KŠ è£²„/»äœïÊîß]‰ò("|­¹l†ÛŽ]?x¹M>| HVIó/þ`µœù÷÷a®·çYZ:€õyè‹gÈû¾ö²N'ÜòXHm•Z½Y £»¥s?à"œ]|;ê|…”bû¶{?)‹>ú#{¹¼¿SŽ~Ä3üÑöWä÷ªô Øâ .’¹% ¥aŒ›Óû{Dú:CÖà⫾‰ÈeG ´ãO¿íÖø×Ê7ùoòÏü“ÿöü‡3ÿ7UäßWnù ôÛ€üãg>#yùÐSÁêë-·êËÊÿôÏ Q§1þb„¯f̹‰ÔÀ§ÍCÀ0 C°üÏc¿Ÿzò)¾:u,8LÔ¢» ÊìÃ~>ŽóRð?ÿ¹þ-Ù²åUm$Žÿ8>TŸ#¶””Ëég¼+#㿲gµ¶´ “~ƧLûGâ_§Q¢\ZÀäñ¿7þöæ\„/øeJÇÙÀ¿n#| ðµŸ0NFðF–düÄÿ«ý©3«+á þ?þçTíÏZøÒÙÿV :šŸú3B—eÌʕĿ¨}×Ä˵®ð¹à~”u þ‡ŸòãèÏ-šÁ,ý¥zãø8_Yðe)ƒ¥Lœìøyƾ£”D CõŸmž€MÔu&±ÎüäVUvb^¼io“ܽnt"'#Eó"òþ¿ú€Ì;×¥Ûåùz!œË W^[/† Mì·|^“—gT¬ÖæV”9(U•URÂtƒ–‘ÉòÛÛÚå; àq¨OnA®Ì?fžäc î·|¦§lB´²95 ƒÕð»h;3‡3˜ÇE…ˆ€2þ.g³cdzþ›_Û ]ÁqÍKÊø«‚GZ‰PŸAÚ¿ röÄåd7£}½ög!yNÓ@à”•.þÀ½ ¡&™ŽÔ‹\èw;Ï0 C ³8;ÆEø*)BJÇò_ÍÞ.u¤Z:XÇFgù¸Ï‘öO˜úÇÊWè ëöü™üÑqÉßñõS:2ÂüúÓ;åúEeP\rÇe‡É ¿„09ñVùÓ37Kõ’R¶ ¿äwŸ?Sþúß™ìðby|ï=rJI»Üyéaò æ6\ôÙöôçd6ÓTàˆ}ãÿ>ÙÛ°WúpÂé52-{Æu¼t‡Ì|ç ®œ¦»å |E‘¼Høú´ªFøºJÊ8Žìçˆðu-ïÛ÷Ü"ÇsøééßþÍwHùÒ±ábyrÏÝrR æp½;@»²¡n•77Ý,Óqëûÿûåþ:CÞÿ-æ™ä¹ÿsdó®–¥Ÿº÷„­Ÿû‘üóÇ.”ãfUHîú?Úÿ{¹ºât¾pÎ7Ÿ‘»ÿv‘Ùf¹yö×,Ì?™ýI‰€eùÃCˆÕþògªpÀ5Ø^ü©×2û߯?‰~5†ü{R_ÿ(@IDATþ1Õþwë­_‘ÁþAùô?~ZòM2Hÿïé핯ýß$Q>÷ùϧÕÿcÝ |5ažÚ^¥Ô°Å0 C Âò?eÿ>óܳÒÖÚ¦FÚw°ñ4…ìr’‘N]²TÊÊ+p·ãÛíêñì¦M20Èq«35ËV©5¥ã¤tÌÀøG 2 VûñKfÚÿ;ÿõ®Wÿïr’‘ÆÿÔÕ 얓ð5þ ðÁ´™Œ:…Ãy$Lv¬%ø#Ë‚ÿ/qnÄ‹ç•Õ¢~ÜâXõgüò6 «Ïe–+?õ_ïEWÓaì½®ÿ{©¼%“ö'R”¶’ð “–¾Ðlé,o½õÂ%GALÁ›“dG`á··îýÖ#>’É\÷~ó»ˆAÅ#Ž8bÄYéý´û †ßxh³ë¥¾JAráœùðãQ‡0‰r"„ýB¿ð™²?)gÉDÅú#G¶æšµ$}uªòË2]õþȼ£çªæDô þi_aÃo®“±ËiÚ(úKòYHgŒá¥[´üi• 71Úv°ggªüöV½þ´]†0‘N3 ??OæÏCú’½´Tåw1„'Ò¢úat³y’¶scC£TLƒ"*&!ãÏ<×ì5Ëš“+\'è#뿞J {š3Hû¯á‹–‚2Ã9™þç•7Vù©ô¿ú¥tdÚb†ÀäGÀé·zè·*è·âêŸTä¿Ó^éÛ?aé+ŸÖƒáŸ®ýmýÏÙ›Aí?{þìù›Šò'ÂWÕ)HéˆæûÆS»å‹J±¾S¾öΣå ðuî7Ÿß|ì¤QÇ߯Þy,¾~ DÈ*y„¯w”ì[O=N¾ürDιå1¹ÿæ“ÝœÐãÿdùSÿû:ùõo“ͯ¿&¯7´ISS“¼òò+8ƒBÜ_dè"y$«wÁi—»VÏ’ë~‰½ç~_vß•¦t·Ö^6S®Åv¹©×ðÅs“溷þXªO¹uzH[÷ȉÅUFåk§#_DÏFøØ;X*ŠÝþáÕ;¯•Sn\‡}ï“'öÞ+'öË`ÃrÒ_"6˜=<Œ7¹ì¦Ëä¼å§ÊY§Ÿ!5(#yþ#Úý¢\SÂNyß7@øúÄ z/1rüköGfçˆwâÿð|@¦ç؜Р˜ý“öü£÷¼Yû»äáaýßßüëd·¿¿óÝ—޶ùØß~\fV5,ïüôÿ={›åßÿ¾:¬o¼‘i¡SÅ:‘š§­IjBx1Y•®}†€!`ô„éöì‘úoË–ÍR__Ÿð5»‘ ¾°JÿsaQœúÎÓ¥ 'gLÿsooŸ<ýìÓÒ ÿ g¸k±\’8Rœxü nÁ–Ãö0Ç]¦ÒÒ†Hš5é¢È´ÿwäø§ŽþY¼XA"×Xö'£uÆãÆòÿ×2Í |ÖËW"UÒø?™àá=²ýÇ*4þAÿ¯ëÏ̘6MŠl7“nù©ŽÿêHØÂÕ™Òq$þ©ô¿õ$Û¡ÿ/G–¬dþ…¶¶,ÃuÓᤋ¿¦tlCĺšô#Öññâ’iÂך5|OäòË/×ï°?zè¡ì¦tܳgÄ’—éüØY¹ŒüNÞ¦àƒÅ[¼õäoïš3fÌðóõm÷ ¿ñ@WUß •U•R r”NdBˆ$’0êéTfÌŸK᢬Zí&c¼d¨RXè'úD r ¯[w·t´·)³5'’+«þú¯d¢]‘ M¢9Ö\8uª"û˜ä1hù] |Í·‘+«§II!ê„[÷Ê»üDöÚ¾ýM­…c.Œ†ùHãXÒ—V…û-¿ Ïe "M…*›í\ßET‰P“PDaã_"1^¾ )Aô#þ£ÕŸ¡>Ù“4\d€ö¯…²R—†³Ü×ÿ†È¼£üTÚŸ²Ë"|¡ql1 C` @ýÖˆ–•$4ÃÑ}ý“Šü§µà×þ CÿXù†¿õ?礣èIgüaÏ_pû×äÏÔ”?=¯Þ £gEä¶§‘Ò± ÙŸ“Í8[~…m}ïi¹ûÊã9èÆ²ÿøûÍû>+ /ýv] òÓËbyZ>4ç‘kõ¼¬½ò8>‰ãŽÿe¨]~÷¥Õò×_}˜‡kYZ¸Élä² „¯{ä¤â~L*vÉ]ˆ&v :Ä®û¯–rêïH'"¹_Cç|Ûù‹3zA7ÿнQÍß„ë]¢¢tõKNüy¹dúYò+yÑ<#k¯"‹Çï?ÿð§û>'Ç]úíĽ¬““Œó±??)·}úïäÖ_½Œ_¸ \ÇM¹:|åÞ—äï.˜?<ÿé}Y®©É:­-M¸~é +5Ú¦€pÛœ(Æwˆå··“ìµCÁaý …oaAž–Ïz±þ~ËÑí7g3Û!yÑv±¯ª©;‹ CÇ¿v}‚ðÅ|À¨1ñ­þudjcïr(Nþúmÿ ë3œÊ –Æ~ýo¬òSiÿ8 «fŸ†U2æ¶n†€!yT¿a Å”Å%ÅÔo£ëŸTäûƒ5 ª¬|æa êäLúö§á`ûËúfÇöü›ü›(ùÓóê¥j1¢]Aû}¾N,EôöVùÞsäS É9_¨•>w&äê_Ž¿_C´«“á ô.yÄ©%¥MòãógËõGä„ÏþFžù»qUÈäqÆÿ-Þ*‡Ÿ÷%‰çLΑ/üè&yÏÉGJEa”•VIßkÿ% Vrÿ*yjÏ:Á-bŒÜ!kºñ¤`¾ö€ðÅWÏ"Âí³êÇ( ¾tlÉñ<Ÿ4F5cKAÄ0—–‘é*›åû.ÿðœûÅZùÍgÏuüÿÚ×ÈÉŸ\‹«¬’ Ÿ-)Ðkzú·§¥Q^ÛºEž{ú1Y¿îkòË—X=D~²¹M>t^ê¦})‘“¾>¾›Íþ 8Aæ?Lÿó)2û‡:»TäŸÎ‰’¿J´²ò ÿ1æ?ô¿Ÿ{Α´ÞvÔ‘ò7W\YKã¯ÿÿüg?—7ß|S.¸àY|Êâ´Æ_±nÌ—"‚§¥tTøíÃ0 C 2áiÿÅ»{äÑG7€ÄÈNÇo°(þf¼C:9zî\9þ[oü—<þؾ}›lß¶M Q=‡îdüã^“õàygžu–"[ZÆ]1DøR¿ä”éÝu ãLû“ýÿÄ=R0r¾þ`¿þïdüëHNÆš¾Hz.üžDþ_âÜ‚aå´jð)Š´o„Q¶öÈñOmm"¢žÄ?•þW‡óÙ—WØ…çA[ˆ'íÈ))8ø»¡úÖ­]ë"}¡Oä€ôµêâ‹ô "v1FÁ­×àî\¬$]ëi–CÄVDÅâ3¬b „®²¶©àIúBa”ߎÈ^;ÞØÈgnj;//_æ{ŒäçhýY>k…Ò|—OòZKBxÎñò· ‹¶3šV‚ØÉ_aãOåöT"J%ïÃ)”·<ö5™B‰e.u$$Ë_ò•ð…”Ž0¥#ï¾>4S®¹F¤zÜõÀG¥ ú@ØD=­„/ÜÜõîFÄ0Luâ¼Ûqï7<ÌCn’WzXgÎ/°,7þFA&»é"Á÷b[o—ãóxQ,,B”øÖ?ƒòê}ÿ"‹Wÿ›î»ø»ÏÈ:Dã9½¿—«+‘Òç)áëc'˜ý\cùœž„¿é?Óÿ Iò‡,!ÜJHó?£?ÿÖÿ¬ÿM®þÑê»ßý®ð¥øË/»\æsž7ÿžŽý¿}Dz殻ô…åo¼)® !xºpXÿ¸ÿÇ9OÝŒLsÒO5Eo‹!`†À¡‡@¦üÏ#õß Ï¿(M{Ë9u\¢h« É‘ Æ*Pyï8å™>½¿ö鿽Í{„çëÔ¯8Ðù9–tD/’qxÞÉ'Ÿ¢æãÈò½ñ¯7þL;2Ê㙋~í+ß›ÿ‹Å‘½ª¹ ¼ŠôýÁ™öÿ*\Iö7Ó¯•ÌÀ”4þ÷[ÿºlE"š•–§m—WRùAðâÿ%ÎàÓT(÷~vÜhõmþ—ÁSXÞ êFâŸJýë´ÉËE«c`Ê M .@žžÑñ·‹Xׂ”ŽþíF#|9‘‘Ö' Z|»£¼¼\rssµy`‡kIöêïïGd§v9òÈ#•@6Ö¹©î³ûK©ôSEUYÅô‡$áG“kHo0=ÉÖÅ;³ø‡íøÓ¨L8ÿõÂL·á×°p£ôÁ@±½½UÖ0½#È_s×{ÿû]zG µ O0QÐЯ´ü®xi›µüiÓ*¤éÔË#fñúz{ÊoEä²7ßx×qÂ1 ‘ÿ!ŽˆuÍÎ$øÁ@øÊjJGí1øhð­0ú™Ö/Š4{ì¸#o[2ÉË;†Û1Gvdee¥¦Öñö…ñm÷Šy PõˆðU…_ʼnÁ"šžr{¸°/`ƒ¶;Ö©ËTáár%Ÿ¿ë%Å÷?65ÉÕ =çG·ËËÉW9þ”så¿»MÎ:jšL«©‘²\aúÏäÉ_<ÁçßLÿL^ýöñÆM6þrê…š.“ò¿/Øÿüç?“†úM©xÉ%’b¾RÁ¿+Ö)÷Þs¯Ô#óÈþðGðÂŽên¯µ¼Øãßx¾Hø‚¾³ùR×îöi†€!06:o›Aÿs²þ}ùåͲsçNÕoî®8^ãO|ºÿº¯¬¬ ¤¯¥:¶{d¯N°Ñ…J‹Ž/ù¤dgͪ‘E'œQû'Î`& |ùñKºùñÌù@àáÙ @yéƒÎ?)¹ '9)yü¯m¡Í‚¤ò“šÛ±/ñWÿ¯âLÂøäÒè­¥Y>;˜‡£ëpnÃHÿƒKéŒás‰*õgðÞßrFM ‰áÝw*åÇ@¦lmf3ÿ~ö©NøÚ€Œgä”Àf'ï*ûtV–½{÷Jgg§†ték¬`Gdd/†.--u¡àÆ:Áç>»?ŸÀq”Ë9KG) _ˆ¼…mœ6‚á¬Ñ. ¨É uLYc:¨ô„>èÚSq$è¨C˜Ü!›zèék"}‘Dƒ=Ø•U­’ùÇ«$!^§:vh°òc`¶¶‘ðÕ4•EEˆöÁ7È{Ô›æoa’VùíÈ7»}ÇŽÄÍzd¯c%Qñƪ?‹óS~7"|5!TöœÞœòÑ41©ˆüÔ¬öwlc° G¶rýUI¡±W ÂWºø'—¯zÍ †£D ÷ÆZ3p·_Úvöa†À$F@õ&½™šº¤”„¯}ö‡Þvú?YÿðšÔ¤bÿXù@ÀðW%ˆýiýÏßøÃž?{þùÿýRuú*g¾Ž_ןTªãoöÿ–§Ñê=ˆâ•¼$ÞÞøûÚŸ½ ßþàqûÿÛ~ÿs©9í:›SþPç\ýënDÿâ¾hïkrSÕÉòŒ¯½Ô#w¿WÉ#MwËÒ¢ðuÇj¤$;ëœïKãýWj„¯Døºý’ÃäÆ_¡Üw'¶ƒðÅ™.,¯¾ª߀-«”@vRñÀðø³åéïÉœw¨³ž™øÀe®ýÉóò¾}xþ!¾õ^™qÊGô7u»êxÖ›úË«ÿå?“Ý·PJ0·áôŸ<ü/årá­îº8çEä–§wÉM'pN‹é?í— (ñð1ÿbúÏôŸŸùGv7{þ‚ÏÚó79Ÿ¿ŽŽvùÉŒ—ªÛ¥¢¢\Þû¾ eîÜyèònþ}´þ¿}ÛùÍ¿•v¼À\Ì.W^u•”ÀÑe?ýŸÊü¬ sîö‚¬Âl†€!`©! ÿ³Þ Æ_òÔSOH<ÖM¤A?º‘$~b,éüÏÜ3äÒÌÁO]ÿçzÕ£z<Ǽ˜~ðLž‘"¤@>í´Ó%'dináÿæ)aØŸŒˆÔ—¿d¦ý¿nÌËŠºú×Ö>¨ëË–-ãÆÀõ÷ü½Ëè_Æ?.:6O<²ü óÿAü¿ÚŸëAøª‰§hxþ%ŒöiÓ—N,ÔçHˆ‡‡*õ¯Ýà_.BÎ$ˆ¸^ØüÞÕhõïêND¬ àg7—¢ëÿƒ¡I¬")$??íä=\Ú›†/œ¼½··W#{1çgUUÕð1™X±û U ¨z8Jƒo©àdÚCq¥ÈeˆÊqoèQ$ðÏÅÿÃ'Ö]¡°áŸ†b×ÉPù¬G¥DÂukïBèè62”ée—]*³?B£eéPxÐòIøjF\…¨e…H_Èòõ¾³QƆ'÷Ê›¯üN¼ µíÛ\}p•‚‚<앃 ©ÔßOù±Î8ÒáB¤)§ðëá¯FJÇ .ú×þNù0¬ébä/®RüuÂ!Ñþ^ý™‹™ŠI™ß>ËoÃä¦MÏjÏ[¶bŸ0VÿóÊO¥ý»ÐW›Aî› ·0nÎCÀ0 ,  ú )IøbgêÿÑôO*ò(öO:úÇÊßþ4üi‡û·dzÿÜ#N”G·ÿ Ãßú_fŸ¿¾úßȪù”‡1ˆþÁ‹{åÃó ‡Çß|þúê—o}ñSòED©^8à>ûZ¹÷¶/È… «!#ðн»6É7ÿÏõò¥»6ï; Ϲœ{Üõå–¿Z23±Ý=ÿ‘ö­òýÿóò?z„GaÑѵ\ûÍä³ËZäý'^ŠÈ`—ƒ u»€“†ñ\þÚ•òÞ/Ý'‘+~&»~ø~)á)ƒ=ØþQlÿ•¶ïþᇤƒGîòæz^ÿo©<ñJl¹\žäõJö›è~ëIùö—Pç5/ã$Þ +èîýÞ¯ÿrÁñÓÿbþ¡ëOËw¾þåK?|Ç»h¡Ç¯’ýçÏÈ'.^,˜ÊÅ¥ô.° ÿzÞ’»ný´\ûUÜ«‚8$ßxºI>vB!~Ÿ0ùlþI[Þôú³¿ù/ëÖÿ‚ÌÿÚóGµ9ýÏ—ªñ Fëú34VDŽ8üp9áø…røo“²²rÕbmòÖ[õ²ù•Íòç?¿¥ºmöœÃåƒø€”•‚ì½5šþÇcÎÿÇcˆ<‚ 1–Ò‘HÙb†€! Ùò?{öG¬+.ŒÚÕßßëÜÀªð úp³xE¿¹CÉ/8‰Û9nÔóù’ r[b-7/WN]zªúÎݶÌÍÅánF$Í9sÒ¤™iÿ¯B¢˜¸ú×­_¯¶Ä2¤` cüËÌPÌÆµ Bˆ¿7þ§E¶ÿ=ˆÿWûsc£TUT€ðU¼ßüKØö_m|éø·téR(–Nÿc6¿gŸ…ý9Ûˆ èÓþó‹¿ÇÕ˜ 2ìÁBøò2+f5ÂÛœ #u555id¦Bä²e´/²W“I^dË2ªWww7eR]]­‘ÁÜ2ûi÷¾ÃŽÒÊ*‚“¢xú9'ºo¡¢Ã02y;„oaù°óX ï8™ÞOOœÄ}]xhÝÚ5ÒÜäÒ;žuΙrÆ;ÏÐÁ¤j[£³ärô&R/Ÿ)E©Yþ´*GbS®×æ}Á™¨÷‹èe€G „“Yã•¿s×N„mÔsùLsô<¤sÄ3‘Fýùü¤S>ëâÒþC*|øp Ѝ²Œt†šL¯þãµÿc>&ñžn\7ш1ð7Ÿ ~«É¤¿±Ü©ÄymîI®}€}ˆ›±[·óþ݉£ð³°(_Î>ëìD{&ÊÅ•ÔÿRÅ?†å͈¬ÑŽÕ¶Å0 C s Û1L鈔ţÙ©ÊU=TIÃKêöO ª¬|`hø÷>g5¡WÑ$òpña[ÿOÏþÞ×öügÿÓ*îš`&ÏkÒøw²<Ý-{¥¥?_J‘Ò±³¯\fÍ@*´°Œ5þîmÛ+Íñ~=.· LfTq‰g ?Zû÷ví•ö<Éí드ÊH!‰ã|Ž¿ƒö¿îVÔ÷R‘“ö¾2©™^6îø §ãïnasrKeÚŒRÉîä¨ùhó˜‹÷#ÊØPÆÙ¹€Õ mž6YÚßµW¸ãÿÑÚ_«nõW¥míoýßž³¿2©ÿ˜ÞqÓ¦MòøãOH7Ò?©RVmíl3§á!‰ðŸsÀ§¿ët9uñ©’“Ç4ŽnïXú?!ÊÝ“Æ]]ˆÔ—ŸTS‰Û³/CÀ0 C áyÛ,øŸ=û‹úê…^”" ñ?È)'Ÿ¿9æ›Ñn´ñ¹djþ—©“é—œã#H¦ý¿#ë_ÇèSظ|Ò bÀtüS[»^í™å |90þÿ þ_â\ßÐ(̤U ÂW&Çÿ>ö°0Ø’Ún4ë€÷p;à7ñçÂñ¾.ºŸòæmà/Ì/”³Î>ËÌ­äxÏŸ7ÿÐï”¶æ6©ñA`ÔúàÃ_!|“ÌÅ7GøÍŽE‚Àý‹Ä’½ø=‹Ý_pÔ=…[ Gi ^w…€À[€J‚r“Ö£’j És9ŠƒD)Š .N¢è)ø‰:¯Š/ªpÁuqÃ??°þw2ˆIÑ /¼PY°Þx\Ðò»@’bT,Þ[%"M•&&¥Aîbù,û/èòþÜçXå÷÷÷ÉŸÞø“VømGg ßWýÓ)ß •=;@ÈC­ë—PDŒäVE”ný‰ÐXíßÔ´W¶nÙ*ñî§4˜$WgâŒuüv}Hâ·Û®mÂMøÍvÒt‡àx^Çñ\Þ¶É‚ éc]¦ÒÿRÁ¿««‘è:58Ñ·j‹!`†@ ~kD¤RµcJ‹¨-TSð¥jÕõÿxúU KÿdÒþJEÿYù™³ 5ãB·?íù3ùcò—Z ý`Œñ·É“?:Ö¦]ÄΠ=&ÑotdÙùëÖÿ¬ÿá±³çÏäO†äoOo\¶lÝ*¯oÛ.»wiöΛ#òõ¬™3åèyÇÈ‚·/ÐTTaÈÿ.dÕ áË^¥>µÅ0 C ²íöÆý}ýòê«[e¢1a$D×¢.©úgΪQÿ#¹žÍôüƒFøò™ñ)Óþ_‚—\¦`ä\Ä’ÅKddðõïgV°ç˜Ñ ´ƒÉÿÀkÿ±ìï þ_õC4 ¥£úÙAÌ ÿa/|î[¶nÑMÎ?Ξo‹~3WgB±¯cÿ äø… ¤™ù{qVöÆÿ$0¶´Ë`6Õ _uuuš)nB#|io±CU¸õˆüT])Å G)F¥*ÞÆe8FøŒ‚ð…X8Æí#@*N°Yy;z6Å‹6¤Wñhþ'»s‚†WKlòÂåq\—B8hù^xi °j¾ŠŠ‘¾0‹å;ñêU-Xý»º:A^k“ÙBn.ªð€ ¢žáí.â£Ú¼ááfý'ªÿÅÀ<¦‘î„ÙCÀ0 Ì!à´õHMí"•R¿M„ýq0è?7JšöŸá?±ö·áoøSÊ›ü5ýcú7Øø¢Æ¿¦ÿ9Koöõ¿©7ÿiö—Ù_Ù¶¿¼ˆö‚,‘·Å0 C &ÚÿÜÚÖ";¶¿!MÍ{ݤ}ÖðSÓŽRß5¾;”Ð4}FµuÔÑRLI\ÔÞÂ!Ùðww‚ ƒû­©™£þt½?²íÿݸq#‚õáîèÔOØdŠ+oØa:ÄíÜ–øvNéã_˜W gŸ{Ë,ÿ ˆÿWûsƒ{ñ¼t²Í˜Jö ‘öØŸg×ø¬â—ðµfÍšŸœô»üòËÓ:Á_iÁeEÀPÓ «ä(,”¿ ­JŽÛHØ„pƾAìŒBPkä%lãF%QŽc » æùƒŸÎÜ pœçe¤¿¹®2Ÿ%à”}FìÃ札¨,—Rt:Êâ¡Á(ˆYíb–'„‹´®ˆ¦{ä„ §Ü?}#½tX'„·NüÇ¥p-f‹—åý‚X×Ä8o,0*æŽá¡é”?Ð7(]Bâ/•““#åeeJøÊFùaÖ¿¿¿ìWF*ªªjxiB˜M:ÂËÊÐÎy¹¡ãfýÙ/Òmÿ0ʧ"êìè@ŸîU1· †€!`dê·hnŽT”–ÁŒ€~˲ý†þ bÿXùkþ†ÿDެÿYÿ³þ7qóöüÙógÏŸ=5ÿiòÇäO¶åÏÀ@¿´# Å æ©«Cš§ÎüL•`†€!08XüÏ™´¿ú©g™¹Jý’þüÁæÿ…G™Ne~€†ÿ·~úÊËË$„lñ2ÙÿHä“ÿÑc¢Õ à;ˆŸÝ_“A‚Û=L)6T˜Oµ´ éòó•ŒJo)‰^*)"ñ&O„9Fu UŒ…˜BƒGê>ž éË Q»@c4)½‹íƒ q)Ȧ#Ô9«¹‘Iãfå÷v÷Hkk› ZæÒÕ:Áù[Xˆ†¼¯ —fý{z{¤½µmR*ELÁÂÂvîD~êÊÒ É/Êáâfýý´å÷vwK[{Hqe¡áBÓÙ% CÀ0Æ@@õ¢b–#=uAA~Öí0ôKwJú°¬|Ú©Àn‚ìOÃßð·þgÏŸÉ*éìÿMþšü5ùkò×ä¯É_Ó?ÙÑ¿=½ÝÒÚÖŽ«Ã›§fïµÅ0 CààGà`ñ?grüÙÝWb5ƒuøõ›ÿ—Ü‚±ùaø™a¬é7+Ë+$/~ö,ñ2ÙÿÂæt÷u'ø Áüìá‹)™‰N£Áá!¥ ÃC cUßXA[9”I‰äæÑcF’V‚Ä•DÎòn‚T!F£ ís’†éAÛrëØÁù¼.ÿ‘X¤‡²'sû•k☞å]à Ó)Ó- ¯Oºã|v´ÉœÙsxwœÅe`ÙK^~.ÞBÂÆ •fýûz‘Ê„¯6Öe6°R´µNA>´ë¥¼ù…‘î27mþaÖßOû‡Qþ@_?Ò÷ŽV™S3'4܃´™k†€!0>ªßê¥ú­øÿgï;$«ª´OwWè®NÓ“33L²*AEAQ7èÊš ¨kXWEÙß„®Š EPÄŒqW ÉC3Ì09çÔ9Vu÷Î}u^Ýwë½J]=ÓÃ|W{î»'Ý{¿÷*¼Wçð÷Éðy¨¾TãóÇܰÉ÷® ¾ÿ`þÃûýøÿÃyÿƒë×®¿Ã÷ü¯?¼þðúÃëÏ< = Ï?ñþƒ÷ŸCýþ“1eyú³ÏÜ«÷œºø>,€@à™€À3á÷çñüþ•áß¶û˜ É(fóoÛ•þŒßùÕRà÷ÿjýþ+8ïÚµË$ ©o¨§xWMªÄÂ?ïß$+¬!0vvЬ1\ÏòÞ÷L!|¥RÙòŸ |=>Ò&þz{{©»«‡ RMTŸLfKþq™E~xQËo’Ò×È;“ä}«F~d²¼¹‰@ÞÐaf®üûÇ3áóÏ| «ðûö_½ï‡ëûÎ?^ÿò:ÆõÇ×A™÷ŸxÿÃû_µîÿñúÃëï?òÌï)ò\.ût°Ðó?¼ÿâýï¿ü¾É¯ùÏuÅówy,ÏLå¾A~0ÏÜùy)g°ÀóRó@ÿ €@…)¿?ç÷Oó{0ØŽŽðï’þ=˜+WõðÀ,e«õ9‹ß½ï2ãýû¯ü18À¿Cpö¦xÒãS˜ìlYþÁÑðüMèò½qD~gg®†ù]ø ü½qRø |Uøf 7 tó‡KWG%ø *Τ¯Z.‹TË¥ÿ„Ï•#oñcÈÍ&³„øoùÇÃ’ûP¹;4w¢òr—›Dµç^nY"±<˜˜0‘‹™F£Cn^ÅËûdz5Çl£óK¢±áÑa5)ÎÌ44Àom‘lQùÀìèê ú3m…ÄÆ{ŠñŸÎQîü²Âjí_ö;Âìò†84ä‘×Ú&MŠÜ‹@S&˜HŠPC‚ã,(Búª©aL¸ÿšû7–yþ«1¿ìqxd˜†ùÊ ÑP&mvÈìeÎþ@±Èç[g'áRÎñx‚jcµ«•Ï7ùÞ1¶ïÕøüË÷Ì_½ï_æ? ß?pþåu(¯DnÀ¿¬û¼þñú¯Öý'^xÿÁû/¿£–ñü ï¿xÿÅûïá{þ‹×ß¡ýrùFyx/†¸¢Æ WÔhãìª]Â|Á?@ pÔ!p$üþ<žß?F˜è%d/ùmRÈ^ƒCC4‰nªrÅ!üþ{h~ÿíáÌlò;„¾’ò;ÿQÉUêøïhxþ9Ê<~¾›É”ÌäßÚ[«x=ƒðuÔ}D`ÃÕF@HHýýýÔÏÙ¾2œù(Ã>†5e…àÅd.S²QX3† Uëg¼ª©aü˜ã‡F$E>;aL’¿ìÃ5#4\1yx >æ§XÓ¸B÷?IÇ%C_Èd1~ÃŒqÆ.É„%ìçbuuO¼¯43M…=]éüÕÜ¿`%„:ɨVÏû(e/ŒHUšb"çZØ·Ãüç}™áðð¯æþ=®`yç¿ZóÇ8ó‹…m|(q¯ÊÉC €ˆDÀ|¾ñw˜¾só,7¦,õ¿Tëóg"|ÿ8œŸ¿Ø?©­àû/®?ùê.7üÒç^òhƇCqÿü?®?¼þðþƒ÷_|þàóß?ðýë™þýS¾lÇø?šŠÇTŸâç¥õÅŸ¹GÞ˜C€@ ÿwÉ úûóx>ÿ‘ï’µü»d<3¿IŽçï’>Îøýw\ÿ àÌ$¾a!õñã“£áù·p>¤œeœg¯‡ßÙAø y…ŒyÓš(­¹«ÔuN„=Uk/¥î¹˜ÝDÀ¤Ø«¡Ÿh¸WcOˆ€Ñ-ŸoÑ@€@ €@ ×¢ €@ €@ €@ €@ 0ák , €@ €@ €@ €@ P¾ ¡@ €@ €@ €@ €@`!ðŒ#|­X¾bt”®á¿QþÕÈ¿5ÒyMúÚ¡ššZ#«¡¶‘c¶dGÖ°ý¹g[6ÎÆàXµž üÆVl*ö2o­Qa~Cþ¸þðúÃûOöíï¿øüÁç/¾àû¾âû·ùPÄýî¿pÿ‰ûo¹cÆó<Áó'<ÃóG<Åóg<Çïøý¿?á÷7ï7$üþˆß_ñû³ù¡¿¿ƒEü ðOÀ¿9:øGO®XAK–,¡T*EµÌŪYþ$¾„|%.îkF­H¹w`±ÌA-„ÔÅCñž_:,Cùc) ƒLärlTÆR|ÙAŽÅÑp ì‹ó3.À×^æ½AÞ+ä-Åë¼¼ÿ0xÿ•|þx£øüÅ÷|ÿ’ ùÃ÷O|ÿÆýî¿ä³‘¿9âþ÷ßæB¾1òõ 7xþà}qôÀÀó<â¯Nr7…çxþ†çxþˆçþwóÝÁú¸ÄóG†ÏåÛ$ž?z¯ <ÄóG<” ùÃóG<ÄóG<”ÏF<Äó×ÃÏZ¾|yðõ/W-7AåQ(@ €@ €@ €@ €@L^ßÂ×Ä9X @ €@ €@ €@ €@ y„¯+þút^†¯Z.…Ñ’ŠSc²ŽëcÜÇ(“Tϧ eF¨w0C½ü78L]}i‘\‚e¶£i¯eBs €@ €@ €@ €@ PUF}~OÏGŠm{­†9LGs»wsÚl¿(á«­1AÇLKQ2^wDá5˜¦-ûú¨½w¨äuM{- €@ €@ €@ €@*#`½äxtD_Üg `¹«†LÏ<¯À¸Êk9R•DøZ0­‘fLª7{JÄꨩ>Áį˜!Åê&V†¯Ìð Ék0¡ž!Ê ›uïé Íûz‹ž—£i¯EÁ€@ €@ €@ €@ €'”Ô5::bˆ^##ÃÜó±Œ-ÂWMM-ÕÔÖRmm÷ùKdGk+Jøš?5E³ÚH¡MiIѤFøu¤ÖÑ;@ºú˜÷G´«½Ÿ¶îï‹\úÑ´×H @ €@ €@ €@ €‡“Ñ‹É]#ÃÃæox8Ã=ÿ é‹ÿ¤ Ñ«®.FµuuTã¾6–%}1 ì(-íh¾/^LŒ ãñí¿®”JÐñsZ xs¦´PC"fŽ´ú‡2´ã@—Yöš]ÔÑçÕ±Wõs”ž‰{]Í{íÌîU÷){fž£t‘ͶÍ7Êyí4¦' ›ÅµWü9‚×ÏÓêh—¯WÏ Ju7º®üqP¢v9ÿp}nÁyË•ë<ÚçüURj|Ï>ýåÉuV·¢ÓæÖë®3j^”‹Qø(Wm5Šî·Ø8Ê/JžÛ—Z¸}p]ùó«Dý‚ö*Õ^­ËßOÐ3ç¯r¡Z}¹ûp×î¯Vº~]mî<”ëçEÐxQq¢äùó«ÄíƒëŠÚ‡zåæS‰Ûã©6*n´\5Aû`|µÊáäÙåÆjå_LïÆ Ž5ªFÉÍ´Ë×%ê—‹§z•Dõž§ú矟 ^£³«>7w¤ëËÉuáëS;틯'jž <8«FÏõ®Þç,½£ÜºJ݇ç‡ÎŒ—›§˜ÞöË÷RïüÞöËiKåïÅò´¹¸îQnž`œœÜõˆ»þž;ñ¸Á8:[ί˜^=¢ìª».-ª/v—êµÿœÜÜÎ.(W¯(}´Üóô¢i”èÞÅ!*®FpísrÕ¨$ªß§ZçæWIÐ^gÑý³×(ÚçìƒqË׫‡ÛãFͽ('¨W©önÜœ\5*qû`\µö¤rŸé5»Þ¹}ª&O¥9» >J®~ڻ뻟Fvûàú\mÔ¼ÑëÓÁ¸¹8ªê]?ÏΓæ|¢ãýÕ#ß>h—¯WÏ Jó÷ïit¹xQþÁÅü¢âEÉuÚçìT\WNïʃûRïàêUZüõ“³ôŽ¢ã59|J®~Úç¯+(Ñõª½öA+ÙJÔÂíƒësµ9ÿ FÕuäì4‚k¯ªê]?ÏNçQ¯üùTôWi¾}Ð._¯žA;•ênt]ùã DírþáúÜ:‚ó–+×y´Ïù«¤Ôøž}þúË“ë¬nD!§Í­×]gÔ¼)£ðQ0®ÚjÝo±q”_¾|$“¡t:MÙ!ʤ½?!~ áK]µLöª‹Å)žHP,žàqÜÀ4ÓWô{S4Vºz]Mµúpì4ºÎšÃP%jî¯VêGtßæŒqyIæNZ°`¥R)ðuÅM«FŸwL›)Û8õÌì¥@h/™¾ös¦/)÷øÄ–vNû¦>íŒËѲ×Ü®q€@ €@ €@ €@ /Cý”ôþûihp†™ø‹ÕÒ9§žDw<¶Žˆ³z%ê˜ôUO±DÒÏøu¸3|iÙIM9DR‰ZÂMÊm*¹„¯††Æ„Ë]^wφÑÅ3›)«£ùÓZ+‹>Á¼¶î뤡Ì0­ßÝMû»ýÕMmNÒѲWÓ8@ €@ €@ €@ €‡¾ž.Ò×`/ÿõñqÍŸÑFï|ýËhZ[ ÝúÀStÛ£ë©>ÕHÉúÅ“LúŠÇM‰ÇššÚòz›èeŽ9ñ”'Ó Tœ]LH^òCöÊŽ«´Z%|½¾e9IIGÉðe_7?±}tRc‚¦·6RK*Y¥é¼0Ã#£4˜¥¡áQbþÕ1öÉZJÔU—Íæ.º«oövöRGï­Þé•x›ãg·ÐxíÕ]ƒì¹wp„†¹Ì(séÌž“±Æ º{Ú«»Œ@ €@ €@ €@ €ÀáB «}? öõPO7õ÷uÓ±³¦ÐGÞö:ÎðÅÄni&}õç7ÑÀH%SMLújÈ–väŒV‡ð¥d¯ÑÑ.;9ÊD/îýcðUS[kˆ^µ¦çcà ªé+’ðuÏêÝ£qfb-˜>‰‰IÕeÃõ Ðþž µ÷P“ŸR‰:vJ‚ÚRÞ‰¯ (Ã,«Í{;(Íý£úÓœrìd¯½ú“dÚû†iã!ê¥&¹µ¥jijSŒ1¨.ÆQ{u׃1@ €@ €@ €@ €8\ؽú{»©¯«ƒ¦µÖÓ%ý %q9=}tí wÓ>æÕ76O—Gð¡‘‘a¦aþåc%ƒÕÖÖ™ dµu1Ò—Œ…ôU-‚š¾Îo~’–,Yb2|rÙëöÊÙâY“}Çz ™½8³W{ï0mkâ1L]#4¹±ŽNž×@³Zbc¢¨ÿú]Ñëuû}ÛS—L5ÇÕÜ«Ü9ØÕ•¡Ç·õÓAÆ ¥¾–¦5ÕѼ6&»1õUÎô¶Wg9 €@ €@ €@ €@ÆÀžm©—É^}Ýôé‹þ‰Îé¯eÝ–tíõwÐÅ©±¹Õ¾IÉðg•dÑ*/Á’W^ÑŸw „­œBèSnÕ¾Q&y Ù+CÃé4e2i6“éKìëbqþ‹™LdæXˆ_&áVu²|RÂW/göÚסiÚÌY®ôfLIÇÙ“âtú±L|ʱórÀU÷(Œu( _ÛÚÓtÿÆ^ÚÙ‘6%§4Æhg7›Ý§iÍ1j¬b¦¯°½ÐÌ• ˆ#¥Ú«r¯{•»½úEÙWªW?/*¾ê‹õn<µ¯4®Æ/ÿ±Æ×ýi_íxW{¯ãJqQÿ±öºž¨uÓW:¿Æ-æµ®b~QñÝxQvßµWyT_,žëWn|×_ÇÕž7*^±õª_”êuÝnåçÚ¹c[©¿ÆÓ8:vã©Þ•«½êue§úböcÕ»ó”»õ×¾˜¿Ú•ºîbñ4N¥v¥úëºÝ¾RõsãEíCí‹é5^”ê‹õ:ŸÚEÅS»(½úê5†mSn<áú©\c»z•k¯öÅìԾԾܸåÚë:*õSÿjõº7^µquã—:¯õiÜbû«]©þЇÚë¸ØúÔ.ª×xc_åÅæ)¦/5ŽÚ•Û—:¿·R¿¨8*ïó¡óŒw_.>¥Ú«®¿T¼Ô/ʾR½ú•»µw{7žê£Ö­ú¨^ã—ÿXã»ë®v¼¨ø*¯õk_l¿Åô•ίq‹ùWŠOT|7^”®ËµWyT_,žëWn|×_ÇÕž7*^±õª_”êuÝnåçÚ¹c[©¿ÆÓ8:vã©Þ•«½êue§úböcÕ»ó”»õ×¾˜¿Ú•ºîbñ4N¥v¥úëºÝ¾RõsãEíCí‹é5^”ê‹õ:ŸÚEÅS»(½úê5†mSn<áú©\c»z•k¯öÅìԾԾܸåÚë:*õSÿjõº7^µquã—:¯õiÜbû«]©þЇÚë¸ØúÔ.ª×xc_åÅæ)¦/5ŽÚ•Û—:¿·R¿¨8*ïó¡óŒw_.>¥Ú«®¿T¼Ô/ʾR½ú•»µw{7žê£Ö­ú¨^ã—ÿXã»ë®v¼¨ø*¯õk_l¿Åôóoßð4õt¤“Ϧ÷¼ù5¾Õ¦m»èsWþ‚êS-ÔØÚÆ„¯I|ÜDñD½!TÕÖ ü'óJ7ª à±uhH^Yì<Âäÿ5Y¡˜_)ÏÈŽò;– Ÿóá„W#ÃLöb’Wfhˆ††(ÍÍõ1êí¤¡Ìˆ!¤ÅIŠ'ë)OPŒkë¼”ö¼ºp³öaÞ·%c†ãšá+ÃLrV« måÌ^»™ôupp”º9»×à`†æ¶Äé¥Kšè&>w  ² œºôÐeøÚÂD·»×õÐv&½%ùD7sYÇÉõ54“É^ó9Ó×d&€%ã53µ;džF`¯J/¹^åâ̆7—oîÎJƒ}ìAä‚úÉ(`Ÿ¯ö$ÖzŒ³;nh<Ë? ·ä:u@¯B]·3¯ªý>$žêBãªR{w+ÞXýe ë½ÈÌ8£¥ž¦ðßÔ¦$¥GFè`÷ èä,{C$÷´)¾®¿êµW;‡­Wõnœ(yð" ¿~Ì\ÙóÒ˜ä×L}<àÖ=¦^~©¨)Ùøy1ŠŸbú¼€YAóF…°å>Þn\w¬Ó«Ü’=œW¶+`ê{ûóû’ˆƒã¹Þ‘ñuqQç/H¯?7n¡±‹ƒ±Õy ìÃöÓyuý:–X¶¿Žq}ñÕud…ו«êe:¯ë#ÖçÏkéÃæ±×¡SìØß´ìþÂìE6ŸçèìÏZO¨^…Ž_õÚ;v*¶ûÀ~TáìK^T*R“€Ÿ¥wåÆ>‹§ÔuûvQóè¢t‘Ö|QóÖ©þQ½5¯kǽüõ«sH¼°8j®½Æ­4žúK¼RæÓyý“oœÂ?÷Ê8UÙ¸îõQtŽùÁsëõqsôîþìuŠkãiíÇØ«ŸÙ«Úi`Uºò½ž_ŸY»(¹†±÷ë˲fê¨ùãRæ1./byqØNM)½p/«Ìós™7°OLãZvâæâ+2Ó¢ì,¹=OÔ:U®a¥·ýlyèqõŒãú…/ ŒØ§ïQL¯†–ˆ|¼£ÖçÊÝq6®kY8Xë õsçsÇûRqäþ Ä1¾f1|äØé>ý¸:Q¥½ß/òu1Ÿ®OÔÏ¡úìºß<ÿ¬^;µ3±üTËç0»?7N”Ü?éYÜÕ.Ñ;*9žëXlìž×¾Øù)¦wã鸌yÕ¥PïããÆuÇÙ Q8‹:pZû+iþBF¢+1žÆßŸ«ˆØ_ž™Ú¹Šccš½N íÃöSœuý:–X¶¿ŒñÑxê§q]¹«—qè¼jX¬XŸ?¯¥›G×iO°Óód„¹÷Û^ŽÃæS7ž† Õ«ÐZ·ˆüøª×Þ±S±ÝæW…."»¯°ë'àgÍãÊMȈ8¥®Û·‹š§Àº£æ¬Sý£zk^×$,Ž{ÝøëWçxaqÔ\{[i<õ—x¥Ì§ó–ò¹Wn<†À´€_¹¸Xönœ\ðÜëÒÇ-09[†Œ"<ÄÎLâÉK²ý$”¿>Hsí=iî_G¯ç×%÷q å˲\]¥3.eãRϼ8Ö'ñÊÞ¯®ÛŠا‚a­SEaói81ÔÎ’Ûóäí3Hå~\>°ýlyè±."dýã¸~¡Á #öé{Ó«¡e'"ÿüF­Ï•»ãl\ײp°ÖêçÎçŽ#ö¥âÈýˆc|­ókuŸ~\¨ÒÞ]GÈ8 ÒuȨëuÏ@~-éØŠ°·äCö³]]측ñ,ÿ€Þ’ë|½ ur£TaHO­BãªR{w+ÞXýe ·È÷7]O¶W|óü#ìD¶Þ¨8Qrÿ¤gqW;gÚ¼}©]±õºqòÆîùp ŠŸbz7žŽÙoóê'¨»ã ýǯ¦ç¬jè¿¿q mÜy€šZÚ¨©u250á+Ù¢“¨¤T¢§”¨EÌÿ™Wµ9;b§å%#˜wÌ´å•hÂ׈÷'ñ\ kÊ2J61™“³{1á+=Ää®~è3ý…çŸAÇ/œM›vì£åëwÐÃkvP‚×›¬o°HjLúò®˜ì…ão7ï@§ÏS°àþCAøê”Ì^iÚÑ1D÷Rÿh 5·5Áöî飩Lx:si3gºJ†­±ª2%A-[›+éxÚ!$|m>0Hw­í¦ý£4mzŠâÌ6ì:ØO©ÚQ:vj’æLJp¦/NCÇD°±6ÝëÙ½Êõ'MÞôز2=v{×VôÙ÷?NXL;ŽÚ‹Ìå«>®½ÄPKsmTïÊ=ëp D§~jçöQñ\;‡ÅRÕé8Ì_ej+cµW™ŽÕVzÑÕ'êèì“fÑâ™Í¶Ê?ÞÏį_Þ³‘±ZZ:»Å— lå¶\ì@æ [C1?Ñ—ë+öÏ?v ½äøéð÷¯ÙKo8•:¨tí¿ØúEÕÆ2oTÌjÊuí¥®3¯cRï°Y‚ú†­§Ôxa¾aq5ž­SYXŒ±ÊtžjÍ!ñ*5–µ¨ocYëkÏãêÂæVY)¸²ÑyË™Sçv{%òRãÙ>¶ŸÊ£âDé]¹;v×\ÊXb¸ëиê¯z•GÕ¾”˜b«qÔ¯’^×t(ã›ÓÖÚ“î_íu\ÈGmÃl\µuåê+ú(ÚHïÆ)æf/qŠÍ¥~b+͵W½Ê‹½(ÑÿŠ¿Æ ³ Ó»sªŸÊu,}¡Ø¶»þQ¾®øª­êt,º±¶rcŠ}±ù ÅT½î°xaó„Éì8QÇas†Ùê:Ô^Çj6¿-S?µ·{7–­sÝ8¥øÚëpã鸒¸êk÷asÙ2Ç]·Ê5–êUîŽ];Û½=¯-—c«r7¾=Öcµu{7–«wýKYW˜WÇ®­ÈuMª+4§m/Çê#ÇÒ¢|Ý9*žk'cw"SÕéXtQMmE¯ö*Ó±í«:Û>JecÛ:–¹ÂÖPÈGuåúê¾ÜùT®qËéÝXåø[¡ueÞrÖX©­®½’uªoØÜ•ÄÓ8aq5ž­S™úU³×yª5‡Ä«4ÖXÖ¢¾aØŒe=®¯=« ›[e¥àRÈFç-gNÛí5–ÈKgûØ~*Š¥wåîØ]s)c‰á®C㪿êU5VûRbŠ­ÆQ¿Jz]Ó¡ŒWlN[_hOºµ×q!µ ³qýÕÖ•«¯è£tj#½§˜_˜½Ä)6—ú‰­4×^õ*/6ö¢Dÿ+þ+Ì*LïΩ~*×±ô…bÛvrìúGùºvâ«¶ªÓ±èÆÚÊ)öÅæ/SuöºÃâ…Í&³ãD‡Íf«ëP{«mØü¶LýÔÞîÝX¶Î=vã”âk¯Ã§ãJ⪯݇ÍeËtwÝ*×XªW¹;vítl÷ö¼¶\Ž5®ÊÝøöXÕÖíÝX®Þõ/e]a>n\»¶"×5©®Ðœ¶½«K‹òuçð¬½U§²°˜¢såj_lNµsû¨x®ŒÝ5ŠLýU§cÑE5µ½Ú«LǶ¯êlû(}”m_èXæ [C!Õ•ë«ûrçS¹Æ-§wc•ã[lý…Ö%ónXñ0 övÒÕŸ½˜ê8 –´e.§¯^}¥˜äÕØ2ɾRÜ á+÷²e ûm”“ߌȰ˜‰å­3Qk^µÌת3¶„(VkÈ[<.LÁ$®ááagÄô|Ì2iIŒcpIF‰#D°Lš3{ Ð`/ ôvÓ0gøú潃ñ˜ñy`ù:úímRCc3—¡lbÒW*[Þ1ƫ˒Ќ¥÷O¹ø+áËËì5Â…8³×Ú%™½˜èTÃYz¦NKq ËÚ¾­‹&s%Ç—×J ˜ð4ÞMIP‡ðÅ„·;×tÒÁ4Ñœ¹-cÂÍþ}}4:”¡)L|›%™¾¦pV¦&ÉôU;¦L_a{­ßE3šiÞ””q_¿»›¶ì«4üÆ“ßþ’EÔ’Š.‘*Y¾~q÷Fcóî—-öW$Y¿¾{ój<ÑN !|Ý7—ì×vùg¹­1As§4ÒÜÉ)îS´e_/ݺ|gùà€@ €@ €@ €G=k¿Ÿšã£ôµO\ècqåO~C7ßõ ¥šZ™ð%¾Ú˜üÕÊ%›M¹D!^ aKÈ^™tš‰Zi.±˜á~ØdàÒ@5lW‹1?'nÊ@Ƹ¼bKyE!p'­f²WƸ2R¦‘É\#K2y ‰¬¶–Ibñ8ÅêįÖÁ2CiÎêÕKýLöêëé¢%s§Ò'.ü–®úÕ_hŦÝfÍ©¦&}5›,_²Ž&œI+«´£Ù;WÂWïà0ííbrÐ mÜ7@}#5Ô2µ‘Ùk Öëé¢];:ij²†^~Â$&|Õ;Ë«þ0ŒuH3|í ¿?ÝAû¹¤åÌÙ|Q6%ø‚a¶ß u·÷Q£dúšVÏDŠ$MoIp¦/¹X a{­$Žøüëé hæ¤ãþ«û6ÑÞÎJCÁoœxÁ¢)tÆqÁ,X}L(\·«›3ÊÕÒü©)äk„/ïDàÚ.~ANæ÷©9“s/)­i·UÛ;Aø²Á1@ €@ €@ €@”ŒÀÓÜc’]ú·ú>ÿÜå´bÍF“!kò´é«o¢FÎöUŸj¢X2É™À8S–”VÌ S:=Hµ£ÃÔÛÛË&~1éKˆZ’,‘`¢—¼êçR‰dÅBú’?/[—»„è54ØOé.Õ8`Æ’=¬©!IýC#Æ'Ƥ¯:&}ɼB ëïë¡þî.&|uÐçI¯}ùéfýBB»ðÓ—ÅLf2!¬ é+Á¥…p&d3a«M8ÂWfx”Ë{Ð~&tma‚ÓÎÎ!:À™½ˆÓ–M™ÖHõõq—¨«k€öìì¤æº:ù˜f&%üWè –Oˆ”B¬ç XÍ 1S–®½­ #AUBøbÂLw†xŸiÞïˆ\(%´Ý\Öòñ-ÝÔ=\K3fµrQN3W[CýCtp/Õ¤345UK³[t à¦2ÑÂdúâý–ÛÂöZn ±rÇEg/1®½úáë* ŸC€€¼6Þ÷ʥׄ\š×qùFÉê%M˜LXO{˜´'YÀŽæ _¸¶ _”“›’ôO/šoÞ Y‚ðUè€@ €@ €@ €@ +º“Íl¥O½ïßìÂ|†ÖoÙN½ýÍôš³^B—]ýêMR§âLÚ³ºLv/IÓ'Þv.=òÔ:úÝ_î¤!&cr…³ÉmÍôÑwý3íÜ{~uÓ2CK64zå™ô%å…¦d/)Ï8ØÇýTW3BïxýYô'-¦{[M·,[AÌu’ì`&«ØÐ 'wê¡Þîvêíê «/û8Íš1ͬåš ô™Ë@M“¦P3ÿI/ÙÉdîD‚yBœqÌ”‰G…m\2|õò÷tÒ6.ã¸aoõrf¯Ö©M x‚†2Ì>áth1&kõ÷ Òž]4<¦¶Æ˜!p•²—Al®¯£Y“’´tV#Mi.(&±ÃHP•¾tÑÚ]½´«ƒ3sñ~…VJ‚X{o†ê’qšÎ„¯†T’/>®!ÊP]Ý(¥‡¨·½—š˜Ì·hzŠŒõ4£5I¼ßr[Ø^Ë!ö'ΛD¯|ö,ãºbkÝþÔ®JÂÀç 0)• w¾lQ`&)¿ùl Ètb2Ÿž[‘IIÇ??¶]Õ®¯vIG\Û…O±dõ“ hÅ_Å‚ €@ €@ €@ ¢xê; áë’‹s¾.þø¥ôæ|yú‹ŒÛî}éKßÿ ¥)ÎÄ©”!^‰B2mÿ’çÐ+N}ޱ{ðñ•tÙ?¢—.¤O}ð]4©¥ÉÈþÇÛé¾'×›ŒaIΖ¨¯7„/))1„ìÕÏ¥¥DãôIMô‘w¾‘fϘj|åŸk+=²j‹)')Ÿ!ÎÖßÛÅ„¯jc®Æ¿õyßö‡×ý/]ËÝLöšJ-“§Ò—dùjhî”GV“ÒBúª´U•ð%™½ÒôŸË8nÚ×G;9›ÕþåôhS˜ðU˩к»3œÝk”’\ªPjhv2¹I²[¹M²…5!·Åø/É¥LIÒ‹–´ÑÜ)^©Á0{WF‚ª„ðµý@?=¸®¶p¹Ê4Õ’á± —Í_·¸ÜÙsãd}‚ZÛùBˆÑ§~“òœ©TŒ1ÉPûªåtqÓSu4»-A §¥h*—w¬×q=PÞ|‰-l¯%ºÌ^wÊ\Z4£ÙÈnxdmÚÛÐc0q8†3è½ñó Z¾µîxjw@v¤ªMøÂµ]øJÂ×›O[@û8ã6&n?ÐkÞ‡Îyîì€#_80@ €@ €@ €@2X±ìv:vf }æo÷½::;iRk«?–ƒ'V­§oþüN®ÄeãIS±+œ}áýo2ÇjüÈOÑÉÏ>/å’+ s™Å¯\ó[Ú¶¯‡ê›™·TO5µuœ'Ãeû™¼ÕC}Ýtê³ÑEÿú:S RãIõ¯n¤Wl4¥¥Ôã0—‘<ãyKéù'.¦% æQK³G,Û —™RWmäVCÿöoLidžFÉNVÏk—ìbˆðÕÃåþvw ÐÖýýœI‹Ó–qf¯IÓZ¨ŽÓ  2»³[e„Å-‘… SN6é‘£XçýßØÈ±69{)h²`uôÐì–8½ü¤i´3a•ÚÂHP•¾6q沿?µvs¶®6Þc‚ \’©K2$åö`oƈÍ2Í9åÍÈÉålgiÆEd1f²ÉµÆbâZŸ=ÔÌÙãÏj¢ùS¸äe=5ÕKJºÒZØ^KóÌYÅï÷r‰À8/J}ß¿més8šHœÄÙØ^‘ÍÆ¦ëzhý~ºí>Ñ}5 _¸¶‹_ òºç·´2;½‰Îÿ‡yg¾p`€@ €@ €@ €e °bÙmLøj ¾¢Üô»¿ÐݯaÂVŠ [µL¼JÓ«N;‰Þôš3£\|ù¦m»è‹ßÿ!|ÅBøªaÿ —pì¥Ì`?½íugÒËO{¾oo|÷g¿§ž\k_',šGoýÙ4{úÛ$òø?.ÿ%¾8×£Lø„¯:æAM _ûºiÕ¶.ÚÂÙ¯ö÷eh”iS¦·šhœík@ŠYr“lVuœ©Jz!pQͨ©o鿲ä/! ûŠs9ÇÁ!jß×A³›ãtÎófpZ·K.à2PÔýk÷ûÚÓ—z)ØÏšìËŠlØÝC·<±‡ör³9ó§Rª©žs„6%°åzÙ#ÿ±@jyŽ0y*Ã$ŠÌ0³þ˜'riq.uÙÈ™¾„×ɤ¶ÛÎjs–¯FzÖ¼šÖ’,¶4_oï•Qö›âjË|%¨^d §5Ñ^à‘;6rf/Éð¥-Ê_² 9O›ÄÛÕÞ¯C“!hÉÌfjkJ’ntÒöƒ½t°‡k¨úVÞ†¹ émv[Êß¹$a}¢Žú‡†©»Ÿ3Æõ¥iËþ^O'\`8ËYgšÏÇ~^‹4™o ¯o!“[ZSRu”KqJONßÇs©9à’|].ÕB“Ù§Ž÷tm·ñ:ôxñÔNz݇-3rVHIÆ©Ì>Öœ¤$gtlöu˜Þ.êâ4£•Sþñëi13^OY¼ŽWnï §¶u¸Ó…Žå2ÜÕá+]§Î%çU^®ÚD^ì¼nËžWñQW§qT.ãobgñ~ZwyOÙÝÙo2LÉÚ„ðõÒã§««éï[³—Þp s_À×ö­kûFëÚ½ø¤øÚšÔ,+ÄGÉxe77¾ì©–_²m]|}ö2)VšÚëÞe,ײ\?Sš¦Oó{ƒ\?R>ö ÷2¶›íkËÝcÉ ØÆ{˜ÌqÛ“æõ×ÉY;zÓÔÑ7į™!’k_š®Kcè:–^^¯ |¹þbö Ó‹_˜-›¨¦1ÃìU§¾a6ª‹ê5F”¯«×±Æ³ýTgËÔÎîÕΖé±í«v¶LíÜ^m]yظ”xâçÆ?W_e¶}ØœËÕ©\ãh¯vÅôjïö•úEÅÑõ¸zë\…l\?õqå2–8®>*v©vWmíXa2±­V+?L§²°ùíu«>ÊÞµU»(¹Æ+Ô»¾j«±eeãÚ³S{··ç]Xצ˜]X wÞrÆöüÕŽ¶/j.Õ»¾aöQ¶®¯Œmÿ0?Ñ»rÛ',¦Ê\?•Gù«½«W¹í¯²B¶®Ný‹õ[íÂâ¨M˜Nýܾ˜O1½ÄS­ó«\Ǫ/§×êcÇrubcëÕ'ÌNuQ>"W¿°˜êïÚèXõ®¯ê]¹ÚÛ}%¶¶¿}\Ê|¶}±c]›ØEÅVW¯ò°9\[µ‰ò±ím[.1lÆÔÞµU¹ôêgÛ„É\[µ±c…ÛqÃô*+ÏŽegÛHLµså:Ÿöj§ã¨ÞŽãúØ:õwmT.}˜½­;Öx¥ú³Ò«Ü^§ÊÂæV®Yl\™ê´‹£:íÝaq5N˜­Æ‘^õjoËäXåav¢/¥Uêæ&“5¨Ü^®Ý–©]!moÛ©¯­—ã0[æÚÛcf¯:µ³Q]T¯1¢|]½Ž5ží§:[¦vv¯v¶Lm_µ³ejçöjëÊÃÆ¥Ä?7¦ø¹²°ø*³íÃæÔX®NåG{µ+¦W{·¯Ô/*Ž®ÇÕËXç*dãú©+—±ÄqõQ±Kµ“¸jkÇ “‰mµZ¡øa:•…Ío¯[õQö®­ÚEÉ5^¡ÞõU[-ã(×¶˜Ú»½=—èÂâ¸6ÅìÂb¸ó–3¶ç¯vì°uè|Qs©Þõ ³²u}elû‡ù‰Þ•Û>a1Uæú©<Ê_í]½Êm•²uuê_¬×ØjGmÂtêçöÅ|Šé%žÚhl_å:V}9½ÆP;–«[¯>avª‹ò¹ú…ÅT×FǪw}UïÊÕÞî+±µýíãRæ³í‹ëÚÄ.*¶Ú¸z•‡ÍáÚªM”moÛØr‰aë4¦ö®­Ê¥W?Û&LæÚª+ìØŽ¦WY¡xvŒ(;ÛFbª+×ù´W;Gõv×ÇÖ©¿k£réÃìm}رÆ+Õ·˜}”^åö:U6·êtÍbãÊT§}XÕiïÆ‹«qÂl5ŽôªW{[&Ç"WÂ×¥V†/ÑI¾†áyCêíë§}þJ©sYGÎÐÅüš¾zçΦs_vZÖ*ºûúO®§5[öäJBrB&á'|ô¯§y³‚|;Ê?þ-ÝÏ„¯/¤Ï~ð­^Œmvüáoþš›'qIGÍðg.U>á+ +§:kIÇó§Å‹Sc#WŒÅ¨æu{ Öå ¶ì륻Wî5Y¯&Mk¥×»äÌ^ƒC£&‹•”rÔ&t.!> p-Ìa.óÈéÌä$ˆLˆ_†•%AÉé¯aòDœ‰ I&ûŒ²m_g/ÍoKÒ¹'Ïâ X^¹A]¨·IPjW áký®nºùñ]´§w„fÎJõ©zêëã½(q"»UÝ‹ìMR¶¥­½ Ù‹ÿ¼={«1¤6&}™½2Ù¤v”ñ`rÆ1““ôÒ§“”ì+µÙ{µO¼ž[fÇT½ÈÎ:i&=w~›QßöÔ.Z±5GrýÕïýœLH&Úä4~û¦§Íð‹¦Ð‹O5ÃT/½œïeLÂ{xãþl¶7[ë‘gÎ8nš!éLe2T¡&įG6 '¶´2#w»™èôëû7›µ¿ê9³ü2–v!ÝÜõôžBB:mIøžäìZ¬Ë‘ %–â¦x‰l6“©¤LžK.´ ¿Ý¾b­ÚÑé œß÷Š¥ÔÀ×ËX›d¨ûÎÍ«Mw.^åžWýÔ´÷m¯÷ä“é¥'L7D)[.ÇB,»ùÉLîl%|=T„ð寓±{m?e]󼮾ú8ýûËÞ¨åZ½öŽõÔ;è‘·Âb‹LHç=®¯þͲÍ‚œ*Zât6¿Î„€ÕdN¹¦äkI®iîùq}åzxÉñ3èĹÁ—®Œozb­ÞÙ¦22{.ÉðFøºeùÎ’ü]#íÊõ¸òjŒuÎñœ£Ôu–³µ•ØQkW›(}©ë;%ÇåÄS¿R}ʱ²U¹¬ÕnöÂll½ív¬þåøhœ±øjŒ¨¾XlÕ‹¡µ«]!›J×åWª|,k+eïÚºX¨+wýÆ{<Öu¨¿®³Ð~lÛBv }ð½ÓÆ£üo×6JnÇ;V?Õ¹qU.½Úº6*W'²ñhã1§ÆŒÚC1ýxìÓYÍ5h,™#jÏîü…ÆÏŽ¥²°9TgÛŠ_Ž.,v˜¬œ˜ãm«ëÓy¢pqíŠÙ«^{×?jµ×^ýJµW?éÃ|U¦v¥Æ-ÕOíŠÅ‹úê¤/6Ÿm«ÇvœJü5Žô«Ô8Åì‹éí¹‹W3–Î¥1e\êžÕ÷pôºÞr×Z‰_%>6&…üUgÛËq¹ûrý uÎñœ£Ðü¶®œµ¨­øG­]m¢ôöÜÅŽ5V¡ùÂb¨_©k(Ç>ÊVåîzì5„ÙØz×׫9>c,¾#ª/[õâ_híjWȦÒ5Dù•*ËÚJ™Cã»¶.jçÊ]¿ñuê¯ë,´Û¶ÆBŸûþäbQ ~Š·k%wçpÇê§r7®Ê¥W[×FåbãêD6m<æÔ˜Q{(¦}º1«¹%sDíÙ¿ÐXãÙ±T6‡êlûBñËÑ…Å“•s¼mu}:O.®]1{ÕkïúGÍ£öÚ«_©öê'}˜¯ÊÔ®Ô¸¥ú©]±¸c±S_݃ôÅæ³mõØŽS‰¿Æ‘^c•§˜}1½=w±ãjÆÒ¹4¦ŒKݳúVÒ ákѬIô™‹ßp_µf}þkWоùe.ïØâë®»áotÓ=y噋3ÈÙ¹Ž™1‰¾öéù6rÐÕÝC7ß~7½é ¯ñåë¶ì ÿ¹özæÔšdLñšúì‡ÞJsfxÉ¢Ä0ÉÐÏ{=ýû¿½É÷ûö~C÷?áeøºôýo¡g->Æèž^»‘’´`Þ3îèì¢?ýíN®|Ø@‰†óœèöÇ7Rª¹•’\Š2Î¥(ëbBø*¿¤£ž9'˶xœ…¡›/¥¶ÉS8n‚Î{Û{r„¯…3ƒÙ‚ü„lÙÛK÷¬Üc_­S›=Â×P ዳX™lVL\RÉ™„è”a"”G†bÒ—O~,ÏËòÅt/CøŠ13¯ž 5ì3ØÝK '×Ó¹§Ì)‹ðµi÷A³ò° _åìÕ¾ÝÁ„¯aš5o:¾¨¿ŸëzJyFY9ÿ#$ ÙkFö)d/¾ d¿îeφðÅ:Ù«äyYÌ˜ØÆ„©Æú:Š œÑìÞëKNœAÇL/ð¶W3Iÿ\xÖbÒ‹´Þ±Ž¤lg±E :— M'Ì)L>ù“šÂ²QIi¹žs\±©ú{‹d~r×)„¯ÝNo:õ“)ÌÈ©úÃÃ[M&1!i=«Èžþðð6ÚÌ5`Úd:•Éb/\45@* ³Ù›ÒL8Ë^.¾Ùx¾üàÙ/YƒùÆr^%´dD;ëÄ™$å( 5yÿØË¿f·5Ì$ÃW%„¯R¯í|á|:fjðuwÏ꽆€Xˆ3ìaJâ’ ]?»{£cA$$7!2Êõ]J“,sòÙq°¯ ùs˜¤)qmâe!‡[˜LE&tý*!|¹10@ €@ €@ €@  ¬Xv;-aÂ×%¿UEtÛ]÷1Ùë;4Ä%Ï;çlúïÿü€¯Û½ï}äKW3á‹1w!Í„¯†x ýôÿí۬߸™>õÅoÒÎnúÁ×?OKot}ýƒtéw¯£í]4ÊI›>ö®7ÒóNXìûíÝ€>õ…Ëiÿƒtã/¯ñåßæ _Ëž\Cq&rMŸÜB—^|ýä·¢›n¿“>þ޷ѹg½ÄØnÞºƒ.úÄ©yÒó×Ô6…šZ&s9ÇfJÔ§(çÌduÌ}b®ÄXJ:*á‹þþ9jjl¥x2Nç¾Å"|ÍæewòwPà`_ç=Í¥ã$Ó×>)ÏÇ챩3&S-÷]iCêⓜ< ¤]óú™½X呟„åY› »-Æ¥ó˜AFéöNZȾÎ9e.-žcñXžQmßçe} #|•³×õœ ç&íã’ŽsÌäÔk)¯¤#“RdÝ’…g‡ä÷lÈnBîb¥ìUˆ`RFÍÈ9ó™Gp#JHIGÎøÉÐHO/5ÖŽ2Á¥žŽÑL'0!fZk®D\%{-æcë§qiÁ·¾x¡íásû«û6ÙêÈã0bÐ}k÷Ò‹‹N}§Áú†2ôã¿oÈ+_g¾¤¤¢”ì`ò‹”£“2Ÿó¦4æ‘rä<ü’×ì–ßÓ¹Üu á«?=lÊXªMT/å-÷p©ÁÓ–L‹2ñå;Úûèw˶øcû@È^n )³·aO_##&˘”–´Û_ßaJKÚ²=m! Öóõ“âÒ€v¼´ ¥-—c)õÇœ3¿Ù¾|aöÀÅKðëy•Ð/=aF^J‘K Äíú¨©KxNâ7=.Ö*!|•smÇï/¯yžÇÄÕù…xõÓ»6è0¯ob’ä…Vf°»™ ö(gè²›²$³—Ûäz‘}K†®c¦z%Emyoù“Çä: kB@"bX“’§û¹D¨Á$³X3ÿIá+ -È€@ €@ €@ €@àP ðÔw0÷§.yßþtïþÈ¥$¤-!5Ô0¹èŠ/^BÏ;éx_ÿ¡Ï‡v÷ÒTzhš’uô£¯}Ú×ùŠkè¶{¤dC#½ðùÏ¥Ï~øÝt×Ã+èúÛ¤žÞ>Ê0‘ìU§?—Þö†Wú>[¶ï¤^rµ·wд©“é?½Ò×]ñ“ÿ¥–¯cÒVƒ¤­âyG¨»³ƒú{ºèÃï~½êÌÓ­‰ñÿ¾AM­Lôš4Ùô&»W#%’ œÝ‹Ë.ò~„ì%Õ+mJø:¿ù1:°â!ZÕ‘¡s/¸(—áköÔÒ _=LÐØÍd…­{»iíöNâäWÔ:uÕriÇžt-1Œ:¹ š „èU;:Lu™!ªá²ŽBáÿ›L^¯ìXäY1ÃåeÀªÍ¤©¦¯Mi ³Ÿ?‡Î,ðµs¿Gøºwõ>/0ÿûâã=ÒN9{Ý´»‹nlíê¢ÉÓÛøIræ./£—ÖÒLÊ0d¯,éKˆ4²IÙŽìi„ÈÔ%(Cµ&û™øH’Ÿ8¼R|Q$†‡¨®¿¦5ÔÑR.É6z3ÍlK1ùÅ#hø‹/p {µÉmÌóTRzñô¥6ËÖíË+M˜ç¸Ä Ëžå:’Êc›òßó´Ñ|&j¹í×÷o&!_ÙM_ÿÄ™–žÜÚnÈNOÛ€…P&%#ívת=ôgÅ kî:…Œ'·¤mØÓMOsùD9_§2B²›m+Ä$±Rœ”¿tËn2±ïª[×Øîæ¸•kÀ¾ý¥‹(ƬMmRºP²‡‰4Ù÷?¿h>Íä’Ú$»ÓïØ¢Ã@/óK©B»:wxÕq”e¶•Cø—±ž×T"Æ%¹ø­&YÞ$“•6Yã9Ï™M‹¹L¢Û*!|•smK²÷œ½$/[–œƒ¨L[v|¹V~xûz2£¶F&å½ãÌE”´°ÝÝœ½íQ~}h“kãuLjÕLa*ßz —~ÿàVú½ýÞñÒcóÖ*äÈ™ z€3ÙM_’½l÷`Þk泑áËFÇ@ žÁÈanÞŒw|$ý+ßSÑ€@cx~.TæÝáeïór·{¡¶ €@  "€ûó‚ð@yä"€ûó#÷Üaå@`¼Xùàß áëSï}‹?Åû>ymزÇÞC¶W¿ü úgÒÒöŸýžxr-Õ0ß`˜É[’˜åÚ¯|RÕtùÕ?£»|‚[¸”bŠæÎžM»z d˜yGCýô±w¾žâRã#$°‹/ù2íØµ›F9A¾~ûƒ¯ûñ¾Ëó=øÔFS¢±¶¶ŽÎ|´ag§ÉR³K° Ä’T?}* Åë™pÀ噕`ÞR-ƒ7z`? -øPÞûã?§—~ç—-'b5ÔÌ™ŒÏj¦3NšEó˜ UjSÔ]«öú.g>ËË“R‰@Ø›ŸØiTa !¯H™>»­dâЭËsÄ![¶N¹ïxj7-gb™6YŸ¬3¬­æLo7ñž´ Aç¢W䓃®ºu- rö0»½Kþ-œÞd‹è×÷å“Ý„ä$¤»ýâž´Ÿ_[n{î1!„¯µÑd½p™Ì<Â×M«Ý°f†—(Ær^_zÂt:åØ IOÈ~¿¹³ó~à-É”Ðd¤Ý ák}0{–­;.÷Ú`k·ULj•ÌXa;®7ðu/d+»½–‰ªKg‰ª«™4x_ûn“kêßÏ^LB޳›ÉÊÅk°[X\!$^wϦ¼ëÏö+çøØMôú˜p)„EÀ €@àB ÷«)‹–;./[´{oy¤ì æ3_|Ø%òÂ{ÄrØ—RѼg)ÞÆkòàz|g¨hëp@ €@àˆC÷çá”áþ||ÎîÏÇWDG*+ú;-™3…>ùž7û[øÐ¥—Ó&θå=i¥…sgÓw/û/_ÿó?ÜJ7Ýýˆ!Pr¢©¦†]óåûúoÿè7tßcOs)E&|54QBÈVuu4Ìeúh ·‡®úÜ©µÙKTô§¿ÝMßûé¼÷O›<‰®»òK~¼+þzxÕ&K²tIœ4óžúz»è½o~ uú)ÆvÛÎ=ô__»–š['S#ÿ5µ´Q}c—\lઆ^)DZ’½d¢e[½¤3’á«}ŃôTÇpå¾t—’ékg ÙÌY°Önk§ƒi&wMn£¡úFêIRº¦ŽëQòbf¹ oßFõC}4¥¥!¯ÆsûŸZ˜„3gZpÌdC†rm¢ÆJ‚º}Ånßäìg{‘Ê!| ©íé-iǾêâ¬UCLt+¥õq†³]\:0‘¢šÙóh”™„Ã\Ò±†K8&†(1ØKÉîšQ_CKçµÑÎ^6‹³`•“ÙKס{½ûé¹MuÅzÉ@t1g’Ö3¡«ÿ–Ÿ¡Ê¡Ê?xîñy„¯m|=HF$!TÙí5'Ï!)Ag·»8ËÑ#J#ð¸ìï½öYv(ÚÌççú‡‚™tïçýIi;»Ý¿f=¸>Ÿ ÷n.Ï'¹ì&{úÃCÛ6ÑŸÿsM)FÛöÚ;ÖS7¿.´If§‹™le7ÉÂô“;7Ø"sœä5^Ì$:»E­óP¾¤ôàÿ=˜^Ï}Þl:Á9¯rºe ]™ì1ŒÈ¤{r˜ÄìV.áK®í÷0)Oš\Û?¼}.ôx—R½ [ÞT „àúƒÛÖqÉV/›ÊçNIÑ¿œzŒ醇·‘”Õ&¥)?į· ÉM2¼…µ38{Ý ‰q[ö÷ÒõV–/!†ÉkÏ}Mü ’1­Z „¯j!‰8@ PÞ—Gç+di®Y+÷ûgYÎÆcYO^HkU›7Q^ˆ®e¢>ÐŒÚÀi…ë¢ ¹Ù‚Ù,Ö{À?–-T¯™i"¬¨Ì5ð ¡î¡LÏ’ÌÍýfvqp¿Ÿ—¤ Ff§ÌE|5F }™Ó˜ˆ¹¹rG%L €@CŽ€w“5–[-ëö·j«Ëzòa-°ªqó&*CÀ ѵàþ¼ ܪljÎ.p^5xù6÷ç…ѬôN÷ç…q…vâ"°ê¡;™ð5™>a¾>ò¹oÓæ»ø[-sMF¨†?¯ÿ÷ûÿä)çqÃßî¥ßüå.&qÅX?LÍ\™ï_úO“WþìzZÆ% I+žÊn\±oh€úz©!6Jß¹ôý¾ý7¯ùÝqÿ#¦Ü¢døšÚÖJ?ýÖg}ý÷®»Yµ™É[Í\–1N#L2ÂW?¾.üçWÑËN=ÙØnÛµ—.ùæÏ<“½[¥j`#Å™p&D±j½d¢ákùC´²3Cç\ðž\†¯9e”t4+ç„Ñ/™¾¸¼ãúí´e_/m爛XÕΘÅ$§&¶!îè ‘m›iNr˜N;q6ÍVZ¦.)±cÂL7„ø%„˜RÛŽlIGÉ"¥MÈ)ÒÊÙ«dk¢W?¸2Lø°³Viܰ~û¾nZ¶r'màmóPMË$Ϭ·›hß.jeÒ×ü¶$g~j¤ÅsÚh—ql(3³—Ϋ{½Í"·‰®”µž¼`²ŸUêq.‰(™¹JmBº’5Ûí»7¯6ä[&ǧ.™F/?qF@|çÊ=ôІ|ÒUÀ(;,)Ã(¥ì´ôžm·‰ _ZúN?õCNm6á« W?½s½íî¿åŒ…~¶3f8mÛ5L‚ÓÒ‹¾!¼’Kž4/{^³ŠkïX |I‰F‰i·5œ-ì¯3A©þ?^}‚ÙŸŽŸÜÒΙÈò3—y„¯Yjfúe&ÃW®„©­üÀ9LJdøzÚ6ñÃr×ܶ–zù5à¶,šÊ¥RƒÄ,S®pcŽÈ'×Èû^$½Iœ+ùZIó{HXó_ÁëÅ#|•v½HL97rޤ­àLn·Y¥#0⟷½äXšê”ö_‰a·sŸ7Ç'» ¡ìÚ;ÖˆŽRô­ËnRîñ[k‹Ça׋GVËù„ÅMó{“”•lƒÕjÇÎhÉðÕ™í¬Zó"@è'˜~”é¸d4ØQ|Ô¿d¿C‰fbqв×3»ÆuYbYÛ¸<®ÖfËÚMùƹeæŽÊ2±<üø`}|c¥÷V`5.A)S§ÀÖdV+3¾ú•º[½_6Óð?å %¾žŸù·à”j˜¯ ”@ €‡½%Ñûk—¼¦ì½¯ú—ìaˆûó`&ˆ8w}äŽ&ÈÒ*^†¿ÿ âPÕsÔ{°êE< ‘ʹë,syzãY¦[1s ‹ûób(A*C`ÕÃwÑ’ÙAÂ×Ǿxm޾ǰ„\5œÉÐ/¿óyjnL™Iþú÷eô‹î Z&Q A«9Å„¯Ë>æ/àªëþH­ÜDÍ“()¶â óÛ¹”rìçDLs§6Óÿûà[}ûÏ|íjZ¹n³™O~ hkm¦_þ_õ¯n¤‡ŸÞBõ©\,Íðõïo<›Î|ÑóŒív&|}æŠ_PSë&›M2BøŠÅ•ðå‡ÓÁ²­^b*/Ã×CôT{†Îý·1¾tEÝLˆÚu ‡6íê¤Õœ kïP O™J™ÆVÊÄh¸»›2›7ÒæywÆ"Îh5Y]Ç­WÔ_˘¤ š´r_•.pí¶ƒôçû6Ð:æwÕÎ?–jššˆ¸Œcœ³Õwí§™ÉQ:ž³–-œÕÊ™½šø‚LT:é^mr›+…ðu“‘ŽÏfhúõ}›hí®®’×ñ‰óO ¾äG§Ëþ°"Ôÿ4&|½âÙA‚ÒíLdz`]4gv[¼p Í`⌔qlL2yNŸ;³Hf¥ß-ÛìKõCXÿ!™È,bšdW’R‰a¡9“½7 ñ•¬Nß¹I‰QÁo ¯zî,zÎü`ù¿k8‹”áëĹ“H‰†Oš%ÝlQž†ò²ßIÅݦj¿Â×Ù\æÔnBøZ¶.œðõÁÂ×þ¾ì(d2¾Ù9¹1ûÖ_W²£0™¸‚Ä,!|=b¾„Ä$¸ÚMJÂ^U ›\XÜ{×쥇B²²Ùqíc)G¸ˆg!–@IDATIKÒþh²oñ‹±„öü…“éeÏò²ª¹”Ÿü¿>´Iæ¶÷¾â8.½ê]B\¼wu0ÃÞñ\¢U2ÛÙmoç]wïF[8–¬dï}E0Ë›\yËjÿš ‹»¯kÀ\Ó`cáë y%;èæˆò–cœî@ P ü]ɳ§€O`µϨ$S'D¹x+%1yódIZ¼†JÖê,ݾäÁrU‡‘òïÕY™½¼H‚Ï,´ŒfØýj¡ª_9 7}Ü^Î\z¯]‰OáõÒæt¹»òÜ‘ÑZCë0çh}1#ˇ@ €(Š@ö­¨c¸£ Cè•dêûxåÞ>âþÜ0bˆûó` Ïô>»œû_Ù¶úáþ<û‹¸p^œg¸êi&|-–’޽ÉßéG•ðÅ/:ÉðUËšßÿà|ý/oøýù·˜ðgÂ×0'ŒJÒ÷¿˜#|)A«±™3l I+Á„/SαŸz»˜ðÅÕö>k¾.¿†žÞ°ÅËðÅè“[éÚ¯\âÏw•!|m¥gøŠq,ùn”à’Žôî7œEg¾ð¹Ævûî}ôéoÿ‚š'y„¯”ÎRœá‹ _RR²Zí‹ðÕ±‚ _n†¯iAâJ9›L_œýgo{/­ãÒŽ›˜|³­}ºâ)ª›5‡FÓ\ÏrãZÜBôº/¡¥óákŸ—'”ð5†½–ŠËÚ­éO÷®£uÌŸª[°ˆ8UìÚA-Ã}t gö’riK¸”ãô¶F“Á,V'—lemGv¯}<—ÍL"ûHæüÔëO2™Ÿ$ÓÒWoX™q)leâkgø’ìB_ø¿åa¦túqÓèUÙlKjpëòt?“”Ü6_lB’šÃYÏJmBŒúå½›|sûâ¿^wb`;öÑþ¾Þ|Îʇ®ÝÞyæ"~±çæ•Ì^ßøÓÊP¢Ù«yÏã iv»š³7ueK:Jd)K(ÙÍ*m»˜h$D<·I„¯ãf·ÐkOžØÂþîAúùÝùe-Õh¬„/){(™Êâ|g¸”êU[mz_¨—kú=g/ dZ{Y¯¬[Ús˜p÷ ‹p÷Î'™ãìvúÒiyç~ãžnúã#ù>õ“Ëñ#¯~VQÈfB:“wǽ¡@\_NÂW9hÁ Pô!¡‰&ƒšXüŠù°±ú3Íé="U¹~=æIdžò[Î+wT~”€GÕUº§Àj‚^[ÕÈhÁÈ 00D¬à­jI«ªÀÅ‹[†cÎ4wTlqƲˆ¹¨Ýûs;®Þº—bçÍœPGGíør&r' Ã €8êÜgãþ¼Ì󟻙ΕÂ5¯Z ÜŸ»Ðb €@apžÞ7{÷СwØÆÉ¿ÿV‡l(õðõî¬Àý¹ Ê3oFøúðç¾Å%wóù¯áÿxz„æÎœFW]ö_þæ¿÷‹?Ð}O¬1$*“á«!Á„¯úú«ý'zäé­ÔÄeë9ÃWŒK*gÒ\α _íy„¯K¿Á„¯õÛ¨†ùorKýð+Ÿôã]õËé‘5LøJ1á+™Ì¾z:é]†ðõc{8_í\ÒqEW†^ý–‹r%çV%™¾vp)ÃM;;èéMûi÷` µM§4×uLïÜAK&Çéü—,¥ãŽ™â5^Û ¾ª±×bë^³åÝxÏZZ{ mHoq®-Zß±—fÕÒ §ÒÂÙ“h—¶Kf/]CØ^UW¨_2«…¤|4)3øË™‡Ââ\ò†gˆTBøúÜÿ>fJg7Îy®W^O náLAR¦Ïn’ êÝ/_(Á(zɈÕÞÃåB¥´&x„Dd·u»»èw‡gNr×¹ _R¢PÞ,ÌgŒ~²pÀç¹…p¦MJz~õÆ•fh™™ñkŸ?—$”ݤ¤¥¾D~ê’©y™¸d/}vyD7°P²…ýæþÍ–Ä;¢Ù+Œi÷3–yºì‡â‡8ËY‚³Ri“ìoßþ«f.S©×àœ` L¹ŸK†/YëY'3f7áká´&zã ç› mÜË$+ÎðUN{Ý)siÉÌà5öئƒtçªÝ&Œd,“kUš»l³Ú s¹K¾îí¶™K^ÿÐV[8–r¥沞nûÙ]è_ÿÒ^RFsëþ^ú¿·¸ncƒð5&øà €ÀB Äç²y+6Ï 8—ò¬±€{Þ|"(‹ Å Ð5”ågÏ£BW“ªYYóÈúäÏ_e.Ž€@¸„ÝŸÛ6Þmsöž¡·Ñ,yqÌÖ™göÙ˜Q¾bæã„_—eïÏuXN_ÊÜåă-@Ã@¹÷ȺFsOZÀYïYÕ>¬/àfŽûóPT @£ÜŸ>˸?/ŒO©ZCøâ’ŽŸ|Ï›}—^ú5Ú´}—08Ìï o:ïlzÇ?Ÿçë?õõkiÇÞ&|Õ2‘k˜šëctµKøZ½š™ð%%븤ã(—…èï5¾æLnà _oóã_œI2|ýð+Ÿòõß»îz” _ œá+Îä1ùÎi2|…¾~,éhÊ@Ž_†¯vÎðµ‚3|½ú«¤ã¼*¾4Ó×n.ï(®$›Í–ƒÔÞ=@£\ó8.øú3ãR†S} Æë`[ÂW5öZlÝ«·ì§îZC«·wRMCµ5×Ó‚¶z:vf³Ép6“Ë86pù¶±döÒ5„íUu…úó˜Ô"äi7rv » _!?Õ¹Dª±¾„ô‘ל@MõqÂdûócÛé©­ìc_x“WU +!|©¯ý¨øÂ³Óü©AÂ×—ÿøTÎÔ:Rd¢²›£:ûÒ¾h1Ÿï·¾Ø#Õ©PÈ9’Êkò–ÅÍü“Y|hd-,)Ñ)<¯d³Û=\RÐ-+Èü!û#¯yIBmBøúÆŸW™ÖîÔ”˜ñ\zA¹ áK08ÿ”y:µéû†2ô}ΆÕÆšáKÊ]J4i·­ØEË·zÿ¢æså §3aìaLuR†ò·¯¥¶Æ½ý¥œµ/Û¤Äáªí:ôû°}#º5óµÑÙKür ¯+!j‰V)S)å*í&$ÃkïXg‹Æ| Âט!D &ò&$¥°&R£"$±W‚/ÌÛ‹«1Â,„è1u˜¹0£²+‘¨åµ²<²ÆeùèrØ©t¿Ò-5ÿaßßdør_#iÎðÅ„¯>.é8‡«¼Ù„¯ÏpIÇUë7{%¹DdgøúñåŸñã}ïº?Ò#«·PCS+—gLùÐàõ÷tåeøºä[?£æV.éØÚF©æVª7%%ëǵ¤ãŠö4ûo6ákzå%ý]gºz™]×Mw´ÓÊ{I`Cœ)iÑÜ6zí‹—2á)H’qý«1Þ¶7º¤ã¼*î5j­k· ¿Ü»–6lo§“g„àuâ±ÓéX¾pçLo¦–Æd”kÙò°½–ä?Ï;‘ZS\㔿Îe %›T9­Ú„/!˜HIE»EѪKøÊÍxáYKò__úÊœut>“n\Â×7þ¼2@øjM%è?Ï{–åE”á_¿|ýrÓ!y3 û|Á¢)$Æìvת=t÷Ó{r"voy(üq.ké¾¾zÃSæ 3çà éÎ.Õ)?”_þ§U®™K«—=kF@w'¯ãá û}ÙŒÖúAJrƒå-khÙ·n“ýJf4É g7!³=¸>×ÖŒÌ?žô">Í qð&iõ dló¢Ç‚ÙEg-eòa,`+äÃÙ\jT3»I¶¶p¶8)‰ê6!†½ëe‹b±¿êÖ5†ÄPd³8kØ[8{˜Ý¤TdŽ H†pæÆ<…ŒÈg©à„¯ @ƒ x†" ï1å´’ÌKZJœBaÄ_É^Qv…2V‰ÉNå,Ä[`%bßã €8Bˆº?—íÈ=¤Mö²nO½ÝŠ>{¶}±·ým‰-­ÐüžÞ˜ü'o]¾µY ?Òƒh{µÈïO%Žù¡ @¨{[ÇÌFÜ®úzsPBÐRâ cßGÙáþºIQ–àË =•Ìl’¡Ín_¹›KZ„/VjŒKÞp%­¬]B:»ì÷ËÚh¬OœRáë‹¿wHoì$~§-F¯pJKJF­Öí—÷Fc#ä±¾6Hz“¹n]¾“ç2‰n›Ão¶o:mA ¥ØÜ³z‰ëÚ›õódÒËœÓZêýR¥{:Ê.Uªñ_|üt?žÊ¶è¥iœ­¯ž÷$mgûï7¬Õòb$[ZÌügÜ9‹?=º$#]X{é 3ò®©õ»»Íõ¢öQqŸÜÒN·?¾õ-§á«´` ž™èCX%-{À+öÆF#`› Ixd´µƒz´¼9m¹wìE -Q~v¤hïìÑ‹óËáâ €˜°˜ûÎ"«‹"l©[ÑlPØÆ»ïÕx~Ÿõ“ûᨢµgã{úöª·5æ83Ü7ÏÚ[?+Õ>?$@ †€Þzâþ< O¦ØD[dŸ2€ €˜ð˜ÛÔ"«ÄýyöéÀ¾?_ùàßi1s†.yßþÙ|ç‡>Ië6l¡ùóæÐ5ßø57yUÙúé—ÿ˜ú9¿K]<Æä¬QJ P*^Cßûì‡|—ðã2Œšá«·³\Â×'¾ôZ±z½ñÂWk3ýúª¯øñ®øÉïèáU[LÆ®dCÊ·ÒCCy„¯]{ÐÇ¿úCì%¤/.)YÏe IÉð3~~Ð1_\Òqe{†Îù·‹Æ‡ð¥ë”L_Û÷vÑÎðu°³ŸZš’ôœ%3hÆä&5·>Œu( _{öÐòu{¨«g/ŽšÁ¾æNo©jf//l¯ª‹ê_ö¬™L®òRàÝÁD!! •Û\"•”ž áëµ'ÏáÌNÓË#FI¹½w;™“ ‘ÖÜuJ—læ4ÞÓkxovÓÌP{»lqÞ±|h…ýP,„/))i·BçñR&¹„¯Ïÿß“¶»ìâv^õÃTHQ¯zN°´¤¹î_»/û€×³|—)œÉ$C»IÂëîÙDíü>¡MÈ^’áÊÎF¦:!³-ã¸aÍ8Íg0 MÖ%í>&Þ·&ÜGãè^t¬}[S‚$ã[¡öË{7ÒÎöþ€‰OÖrÜ4sþm¹þ~»ls€ì >B½ðå‹)Å¥^íö›û7Óö±›d?“,hv“óô‡‡¶Ò.ZÂW5PDŒ#~à {Ï-wcŽ‘}’[qœÇqäöü’„ìXÌW3a³“Éd{¥Ú›ÿÂ7"¨ˆõn„IäÞ @ €À3½ü/œÙ@l¢xcÃD-3ÈG¦¿kmߟG„s]üqQû¢~(sà›Gm,hô Ñ•#*cÊrÂÂ=˜ûƱowÌ÷Џ?÷OîÏ}(p€@Pô÷çùð(6úàaÕƒwÐâY“èÓ¿Õ7~ëû>F]]=ôÃ+¾L3¦å~ÿùo£»}š TǪa® 68ØK)ÎÏråg?èû _Í\þ1Á¥34È%{¹¤ãì¶ú@IÇ}îë´|ÕZþi„F†‡iæô©ôëï_îÇ»î7ÓŸï~ŒK5¶™¹kkk)“¢ÞzÇùgÒË^ô\cÛÓ×O}æ[†èe²| á«©™’É&¨IE2yÞâ#àÇ/÷À&|up†¯]\Òñ-V†¯cfT?ë–fúʘ’ŽñºZj5Ùq‚„†r7SŠý–=^IÇ??jeø:Å#ÝŒÇ^Ý5Éž;»L©7)éXŸˆQC²º™½tཪ.ªï+—Ò\&×H»úÖµLZ J¢ül¹d®²KÿbÐïÂIDBÀ ÍðÅeú´I™B)“h·öž!ºé‰´vWMiNr)½)t:zÜ×Ä039¿ñçU¡e)ÝuÂWDF³‹˜˜”—áëz'»Uv&ïÙnR³³/XSÖ*qçMñX¨j/Y¶`“df:ÀY̤,`‚I?RRˆOKg5Ó,.xÅ_ŸV¿—RŠy„¯§¢‰{—þcá+"›‹Wäyå}Een¢•4óßõ²Ý sZé_O_`dö?}ü:Y»³‹„üµtV‹O à°õVF2ñ‘ìU÷X׋Ç~‹’–à'íšÛ×Ñ®0B;ˆ{'ëŸwp‰Q÷¼©z¿¾ÈñÝ&{Ö¸qÎîõn^”w´ÛÿgïN£(ïÿsß„pƒœrªAÅbõ'jÕz V±Z´êO­hµÞ÷Y{¨ÕâI½µý[[­VD¼o…Š È%7!BÈÿ÷™Ýg¯ìfl²Ùä=m˜™gž™yÍfÝ<ûÙçY¼®LÞÐá!ÍóÖœH¾¾6œr`1=ïùNæ¹at“é5ì5ôX¯iƒú|ùùîÇížç¡9—®¶¬C¦îÔ¡-ͶH&_‘(Q¦= ¸ÛpQs„}ë‰ÕÇßSOب•)ìüß³k)øÑkkT>xY[³O¨"v}D…\…#.êœgÓ¥­M±gÈ@h¿î¿q›º@û÷yÓešØjþˆŽ`ò/濸»³Uÿ1sûwt`ÿe×ßÛžZ=üKÙ%ß¿ÏÃuí¢…L¯ÚÍìqãPUsO…ýHJÏßÃú 9îùÖ+„9¾§žHÎFwðÝÇþ]ìøÎµ5*¬¤Y甎ä lÑPù­wÕê·*ø‚sžM—v¶6]$xݬE@Ú“€þIî¯Jþ>Y2ïc¬¯[|_7þñ¹tò9Ò§WOÏ3bñòÕ2å™W5p•«=fåŠ ]Õh說¢\;i¿Ýr±§ìcÏ¿¡C0®q†VÌÎ-´Ì iÐüEU¥¾L_E9rÛ%gzÊ_~Ë_äë…‹Åôî5x@_ùÓ —K¿=¼£Ñ}ùíb¹û©ÿjà««dåå»Âfu5Nàë¤Ã~"'ýì O]Ü|ŸÔ¥fê±»hð«³ääurÎ9=#SÛ;L[F¸g…§ª|_¥¦‡¯2íák’öð5kñÆ2éÛ­³¤k «=Lµzã~ܺ]L/Jï~ãâìèýz;šŽp­MÝÇüì ¹î¤}œ´™òê¢ÈþX ¨4â`îIàËô¨t©g‚“ Ƥ XÆÜï¯Wm3džïxž­ø2çÒ£0[.Ò]°k³çjÎßü.úN»4 ó— }W9ÛDàKÏ$’ûjNؼ„]¢÷¶§:„›vh`î«•%rØ>®èlù÷¾Ý ³ûYi·Ùy¤ÏmóšjÿcìåÕ¶M0¨‹˜`_°é]=ŸÏ—ï=ÌS¿îhz¤;ãà^Èשm»5Ø–ê´§æ` ¾çè)È@@ àùûY߸Ú÷®¾§aÞ£›Énsý]iK]ëÃýë©?\As sæÇs´v RÄU‡©Ðw£]°Wä»-ØcßòÍ=£Æõ›slS¼.+Ò»”L†Íý[7ÚkõšGöÎx×6YŸ3%›{ξûFxä §ÅßçAPX… € Ð<ëÛwûÞ÷2í{j»ÍõwelŸ/ûj– í](·\âíá«V{îJO×n»ÜÓ²U?Ê_ž~YR35쥽{eêæo„Úš*©¬Ø)Ùiõò·›/²ÅåQ |Í]²Ö5¤bnž¤ëŠ ÚÃWuÕn§‡¯^…™ò‡ßy_×þaŠ|òÅ—ò‹c&W\xŽd:½qyª“]Ús×onºW2s;i€«@RÓ3õøuR­=†T¼§üæ—?÷þÇ´wäã/—:a/3¤cN~'1Ã@¦gdIІÔìgõžbx0÷Çzg¯ æËösdaié8YR^·¦Á|ØßµSžädÅPuÛÛeçî*)Ù±K6—UÊËK<'8vHW'XÑ®ÕsÑAüdÏ®ò‹1®˼%2cÞÚ ¥Â¯ R…ì J«Š4d†À;fÿ=BÜNÞœ¿Î £@ãrÎÐŽÚc™ïxž‰|™ó1½1™^¹†jOV‘Ní%ðe®·‹ö2uæ!ƒœßÁP×oÂMÏÎúÁée-°G¸H_Q?·ÃüË -y݉łx&€hzsÛUUôR_´Mcæw®G§ð7Sá‚5ÛåmíÙ.Týö ¦^Ó+^$A:³Ïÿi`Î ý8™z _¸]6!²÷µ÷µp“ù¿u±oÂí“ÛçPäofšº&ó&Åùîª}ÇÔTá6¾Í^‚«qÖ¹ª–=cÇÎ4Û#Çv8gïæUá9p<ª±~žJ#xx\ûûæ·Þo!‚J)‚ € €@K 8[5>ˆ}ëjß×6.ÑôûwhÓ¥¼[c=Ž·÷£×Ó¨\D+R´ç1-§“sªr'¾âTeDWÑâ…ôbL4.a6þ>oÆÝÒ_Zó{Ëßç._Iûûf_לm~ ¾¥yŒ € €@‚œ¿­Û¾uµïk—hzïßç+æÏ–a}‹ä¶‹ÏºÓŠ5ëäÿGêÓ³%· ³dfçJZzºöÆU/5•»¥RCW¹iuòÈ-“=û?òü[òùâ5Nù,øÊÈ–®±ººBvïÜ!u•;åé?\ìù¼úëEKekÉ69òPoO]žÊÜ>šóµ<õÊL ohàL_º¾¦ªRRêkä¡ëÏ•¼\×gÿ•UÕrû#/ʶŠ:=~¡dk_NàKCj¦W²”ÿNÉò×îø®~GÖ|³HÊ5LvÌ¿‘”Gß[Ú0j`‘dhZ®o·ÂHêjóe~ÜZ&5šœ¿ªT~,ñUØ·k®t”k5¿hö—.ð†™ÐbÏLÏþß²T‡Ô‹d²¿¼¶Þ›ƒ éx[C:³_¿Ã¼ýÍz™dˆ¾ýv‘ãöï#¾½ ™0٪ͻä §m+¯rê9qt_­á5ßž‘6﨔‡ÞZâwœÀó4¯ÇB é89ÈŽjbHG3 ¥ïô× C:ún7Göë,‡îÝSºë•¡zÕ3½(­ÙºK~ؼS>YÚ¸)ÓÃ׉ó>Ô!ƒ…yL™[ƒ éx{ˆ!½Œ}<î«9 2Á'óü ¼öewÊ[æ3÷П/&ð53L_±<·íóÚœŸ™ìóÛµ$rÊØþ:”h»èÌ¿û±Lžûd¥ßºp ¦‡ºÃô¾›çwg ÿ× éiBªïë}\¦C˜F:™zÿG½Ìp§&T¬aÓÜCS·ñ3a²Àɼ6^tä°ÀÕ-›á;Mog‘LæÜ\×xõ‘ìÝ6ËØk æÍ›çiP6“»–ÚÖ¿öÎþž4>KW s-áË6Þ;Ú5ñùÖn´G¥<tDÈ_;¢׌­)ÀëQkj·ßcµµç‘=+ÞKØcµå¹qqþölîž>iÿ–µ¥ûlJÚ‡öššËdžwöïr;o‹(ö÷%üŸ·Å»È9!€@s"lÎQØ/ÀëQx#J„hkÏ#{>öÌÃÿÝaKF6_µè ѧHn¹è—v˜ûíùë?¦KJfžäæw–lí-Ë ˜š¦¯:í±K_U»wJ^ºÈÃ7þ¯gÿG^|O>ÿn­Ó»– ˆeh J_R[]©Ã0îÔ^¾Jå÷œ$Ã6îTÈVòÝ÷+dÈÀþîʰ«d΂åòØ+³Ý½u‰ÔUWë9TÈ/Æï/ò†Å**«äþç? eÕøÒ€˜žƒë¼Íh\Í|-Úâº+ÕïÜ*]ºtѺ3äçg获¾ðuÃáûôpÂ5] r¥0/²h6!0Ä2û:A/ g™°—é]ËL®˜–¯Ú-ÕÚÓWuå.'0Ö³(_9X>ø|”îØå³là+55M†ÚCªëD¶î¨’tÓ[—ÖiÎÂÏêô˜æØæG ?Ñ_¾Z¾A^YÎù› —yl†¡LÕÀ—ž s.Íù'tàëù¯œÀ—9Ä>ý;Ë ®ÐWfzšäggJV†v9–‘&f¸´¶4Õê0„U5uúS+å•:Nf­jë´rs¹,Z³½Éáð:ÒµÞ³ëN,–N¹ŽÏ=3ÊÎÝú$dB ðÜn7‘K@@@@@@@h·åÛ·:¡­ZnѲLˆÊô„ezò2a©4 K¥gêr'­42彤À°”; e ¸úØò5BîëÞϳ=¦ÿîžsh¼:àœBœGÈãVÃ2=|Å€Æ. € € € € € € € € €@"|%Bc"€ € € € € € € € €1„ |…êµ,†c± žŽöÚÛóÊvÖ×V®«¥Î§¥êM–_ {ýö|ï·Ý¸Þ–gÞ´€õ³¥Ãm·û%ÛÜ^Wàõ†ºŽhˇª§¥×'Ëy¶´õ#L ­ý~´µó fÆ::º¿§ýÐ2×ß^ŸWmíºZê|ZªÞ–y¶Å¿V{ý¶æÀ¿§ìöÀõ¶<󦬟-èn»Ý/Ùæöº¯7ÔuD[>T=-½>Y㥨`mí÷£­O03Ö!ÐÑø=íèÏ€–¹þöú¼jk×ÕRçÓRõ¶Ì³-þµÚë·5þ=e·®·å™7-`ýl©@Çå¥éΦ ¾‘¡C‡Jnn®¤¦¦JÊÏå-ë}äªÇÖ¸Þ%Òy¼ê‰ôx¶\¤Ç ,¸lë 7·_¨í¡Ö/Òrûµö²=O{\ûü±ëí²ÝÞÜy`½ËÍ­ßîoëµËñ¾[o¤óhÏÇ–·ç¸lk×Ûe[Þ.‡šÛý"-oë‰u?»¼çö|ëµ×¸Ý®,ë²­?ÞõÚóiéúíqBÍíñ·Ûë ·=p¿p˶>[¸ò‘nWoàv»lë·çc×Ûe»Ý®·ËÛíúHç¶¾põDZÎ×–·Ë¡ê·åìöÀe»¨y`ùÀe»_àúÀe[®¥æÍ=^àþá–#½ŽÀz"Ý/ÒrÍ­¿¹û7÷<›{üPûÛõöüâõü·õE;u>±Öc¯'Úý#-oÏ7ð8¡ÖÖX.p9°|¢–ÃW¨í¡ÖÛëµ=Ôz»_¨y¬û…ª/Öõ‘žG¨r¡ÖGz>¡öµÞÖn{`9»ëóßîjéù„Ú?Öõ‘7°\àr¤Ç·_¨í¡Ö7Òrûµö²=O{\û¼²ëí²ÝÞÜy`½ËÍ­ßîoëµËñ¾[o¤óhÏÇ–·ç¸lk×Ûe[Þ.‡šÛý"-oë‰u?»¼çö|ëµ×¸Ý®,ë²­?ÞõÚóiéúíqBÍíñ·Ûë ·=p¿p˶>[¸ò‘nWoàv»lë·çc×Ûe»Ý®·ËÛíúHç¶¾põDZÎ×–·Ë¡ê·åìöÀe»¨y`ùÀe»_àúÀe[®¥æÍ=^àþá–#½ŽÀz"Ý/ÒrÍ­¿¹û7÷<›{üPûÛõöüâõü·õE;u>±Öc¯'Úý#-oÏ7ð8¡ÖÖX.p9°|¢–ÃW¨í¡ÖÛëµ=Ôz»_¨y¬û…ª/Öõ‘žG¨r¡ÖGz>¡öµÞÖn{`9»ëóßîjéù„Ú?Öõ‘7°\àr¤Ç·_¨í¡Ö7Òrûµö²=O{\û¼²ëí²ÝÞÜy`½ËÍ­ßîoëµËñ¾[o¤óhÏÇ–·ç¸lk×Ûe[Þ.‡šÛý"-oë‰u?»¼çö|ëµ×¸Ý®,ë²­?ÞõÚóiéúíqBÍíñ·ÛëÕí¡_Ïù¾+`@@@@@@@@@ Õ–owõð5v×;2`àÉÍÉ•””íá‹ÀW«ß ˆ € € € € € € € €4%à |UhàkÀ@ |å¸_¿|ä[ÛXSû³ @@@@@@@@@ •NíºX† &yyy’šš*)¾Zùp8@@@@@@@@@ BF¯ÊÊʆºº:1?555ÎOUU•èz±sûØ,Û2f^__ïì×ÐÐ öÇœ‡yÌ„ € € € € € € € € ½@JJг“™›ž½üzø2/ܪ­­u~L¨«ººÚ {™Ç»wïö<¶/SÖ7ðeö7“oèËYÁ? € € € € € € € € €Q ˜°—ùÉÉÉi:ðeÂ^æÇ·W/ô2Ëf½ zÙÀ—éÌ„¼LàË7ìE_Qßv@@@@@@@@@ß¾²²²ü_æ :¤c°Ð—oàË„¾LàË„½|{øÂ@@@@@@@@@ ù&ø•žžîøÒ—ø²C:š¼L°Ëôêeçö±Y6?&èeÊÛ°=|5ÿæP € € € € € € € € `|{ø2ËÆ “¼¼ËÕS— rÙÞ¾làˬ³í6;·Á.ß¹}ܱɹz@@@@@@@@@ vú2?‹/ø²¡/æ²½xùÎÍ6»Ý–7§ò \Žý´Ù@@@@@@@@èX¾=|}ýõ×_†Ã„´ÌíåË7Üåò2ÛM9³Îîç;wVò € € € € € € € € €@³æÌ™ãøÒàVƒoxË<6?6Ôe—}×Ùp˜›D™ïãfŸ% € € € € € € € € €XÀä±L.kÖ¬Y_ÆÅ0¡.ßÇ6äe·ÙP—;…Ýûšu¾]‰ÙmÌ@@@@@@@@@¢0™¬>ø xàËTgƒ\s³s³Ý–w¸ÿ±ë}×ñ@@@@@@@@@ zÓ×[o½:ðeª ê²0³Ý†ºìÜwyl&;Ä£k‰@@@@@@@@@"Ì^½þúëþ/ n™É¯.ú2+}·>ö]<_…, € € € € € € € € €D%`2Y¯¼òJãÀ—­Å7ÀeÖ™å`ë‚…»L9³ž @@@@@@@@@ ù&“5}útÿÀ—öæåtïeÃZá^Á®ÀòÍ?Mj@@@@@@@@@0Ó¦Mó|i`Ë |¹,W¨@W¨õv?æ € € € € € € € € €Íx饗‚¾|« þ2ezùJñ@@@@@@@@h9ÿþ÷¿á_-wxjF@@@@@@@@ˆTફ®’³Ï>[òòò$55UR´Ç.gHÇH+  € € € € € € € € €@ë|ðÁòðÃøjnŽ‚ € € € € € € € €Ä.0hÐ ™6mšÐÃWìŒì‰ € € € € € € € €´¼@ß¾}å‰'ž¡C‡øjynŽ€ € € € € € € € €Ä.`_7Ýt“uÔQ¾bgdO@@@@@@@@@ åLàëôÓO—sÏ=WžyæIiЩåË@@@@@@@@@¢0¯‚‚ÉÏÏ—ÒÒR_ÑR@@@@@@@@h-øÊÌÌt†s4Ǥ‡¯Ö’ç8 € € € € € € € € €@”¾¢£8 € € € € € € € € (_‰’ç¸ € € € € € € € € €@”'t’,\¸PRRRœ=Ò1J@Š#€ € € € € € € € €­%ðâ‹/Êš5käñÇ—††!ðÕZò@@@@@@@@ˆRÀ¾† &³fÍ’©S§øŠÒâ € € € € € € € € €@« ØÀW^^žL™2…ÀW«És @@@@@@@@@ JßÀ×¢E‹|EéGq@@@@@@@@@ Õ|_¾ZMž!€ € € € € € € € €Q øŠŒâ € € € € € € € € €@¢|_ 阨»Àq@@@@@@@@@|_S¦LaHÇÌ(‚ € € € € € € € €$DÀ¾fÍš%S§N%ð•»ÀA@@@@@@@@@LàkÍš5òøãKCC¯Ì(‚ € € € € € € € €$DओN’… JJJŠsüM}5$äL8( € € € € € € € € €@“}ûö•ÌÌLIMMuÊøj’‹ € € € € € € € € €@ââøºã_U‰» ŽŒ € € € € € € € €$¡ÀÍ¿ÎŠê¬ |EÅEa@@@@@@@@@ ~±¾rrr$==]jjj$æ!m_Ñž@ü.=q5=ñÄÎÁ'Ožœ¸“àÈ € € € € € € € € 4±æ­L_'N”³Î:Kþö·¿øŠåŽøŠE}@@@@@@@@è¸Í |Ýpà òóŸÿ\RSS |Åò"ð‹û € € € € € € € € Ðqšøzì±Çdøðá¾b}úøŠUŽý@@@@@@@@蘱¾ $Ó¦M“‚‚_±>u|Å*Ç~ € € € € € € € €tLX_ãÆÓÃW^^¯XŸ:¾b•c?@@@@@@@@:¦@¬¯Ë.»LÎ;ï<_ÍyÚøjŽû"€ € € € € € € € Ðñb |½øâ‹2lØ0_ÍyÊøjŽû"€ € € € € € € € Ðñ|%ðžøJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@ä(Î:@IDAT@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦øJ >‡F@@@@@@@@ |%ð¦Åøª¨®’…VÉÂõ«dÁ†Õ²¹¼4Wá=tzjºŒèÑWŠû ”âÞdP×^ÞXÆœxº˜­˜‚èËÿ×ïÎÅÿ÷¾qËSÒÿ c‚b$«À’MkeòóÊÀ#dÌ?ãµ°nd]m­|öÎÛ²~åJyá¼›¤w§.­pT € € €-%`zJ?îÑ[%·¨³üÏ 'JVNÛø"K]o[©wÑ_È¢/æÈ-ÇL’£Gü¤­œç €ÄE Ö¼¯8ðÇøºü¥Ge]C¥vò)î3¨•µ¯½"«7TIþ~GÊþöŒÃ™5¿Š­6ȇÓ^’ûN™,£ûk~…Ô€@VΚ!3ï¾DŽ¿üVéÔÝ÷w«N~ú‰Ì\¶Q6ʪj=»L)êÞYúõè)ÅÅ{ɨ~ù 8ãIJr×N™~×2îâ;dÄñç$îD82Ä]`öŠErÓkÿ£õ+éÜ­»_ýõ[ÊÜé߈tÛ[8e”dømMÞ…òùoÊë¼'#—c¯9Rrp)›Ö®•™3^‘‡Oû3ÄcNC"€ € € €@œÊvï’ÿ½0~¼ ¹o@­mósž€“Œz±-´¯˜/ÕM{ìQ¹èãåŒÑ‡G} ì€ €´eX_Ï>û¬ :Trss%ÕôòE_Ñßæø¾vÉì#÷‘fŠ ½ëu¹ìšâèO¤ö ðÕ¨TÙê¡_•òðäIrõ¼Ð§T<ñRyíæ#¤wè"íj ¯vu;¹üš |UÍÿ‡\3öZ~œ\]ú˜$Y×òóeÉkdà'I·Fç\%__<\ž~ÒÅpúüErHqžŸIk,øj eŽ € € €@ë4øj›Ÿó„•©,‘U³fËÖŒýeô኷ö_·…E@hW¾x;ãøšsÊ>ò¯×DFÞ÷ºL¾”ÀWo)‡ngM¾ž½r’\ AËâã&ɵʺí5"åkå¹Gß•…Öaâu²ýæƒ$Û.·ã9¯v|s¹´/Ðdàká¿åšQ7«ÑQr]é“’î’Gí#ÓôÅú¤/¾‘#G6ºÇ«¦^ ÷^õž®?Y¯ëþ„\¯F·… € € €$­@¸ÀW[üœ'¶ç‹€Å¿—»çŸÛ¨‡ô¶Ð¾Bà+Ü]d; €$³¯Þ½„¾jwIÙê²cÇ©“ÉïÕ[ºõnüa§Me™lZüƒìÖ‘ëÒ2]ûê>©~…¼ ôðåµàQò DøšpÓòÒ©>ß^ªX-·þïò×åæºÇʬÙ7ÊXŸ±ÀJ·l”UwHMF–æåJ]¤(+-©N‡‰¬“ô¬LI—jY»v³TÔ¥K§.]¤w§LWÙªrYºr³”iÎ,#'Sºuí,½‹òµ|©®R6¬ß*wUHdiÙ®²g÷F]Ú莾ǩݱMV¬ßî#· Wöë%ù§ê>¯ î¬B Ä=ðÃûŠ5+dó†:zn†dæI§¾=%??ð¯VªJˤbg¹ÔékcZF¶äê0»Y¾©[íÆ_¤LfŸöyAÃòÇ4GŽ9¤«ÔTÖ‰¾èJ†§ÊZ)ßP"©E=%×w{O#¾†Z§î´ì,ç=S}é&Ù²j‹ó~*³°@º YžcÚÊ]s_þ,!€ € € Ìq|EÜ6áU‹[ûŠVY¯M,_þCnÚVÒyà€ m1õ¦îZ[w­”­X-;¶š¶¢ÉéÕO?ã Þ;;/ïýç €´?_ ¼§‰|mz÷qùûñwÉúÀë±\ýìU2°·}#î-°þµÇå®Sîò®ð<:CnÜy§ô òA(/’X ¢À×µ÷ÊK“öô»Êò¯K·sžÖucå3 |2¯Šåá;§ÈÕo®ö+k.½ã^ùë±Þ:Ê—¿#ÝN{Ln»ç6É~ãr“ö$æLCΗ­/NÍ3§ËÞWþÓ½Òw6V^šqµLèç…馥ŸN—3÷Oo¯c¶øè‰2ëŽI2¶»7Áe{çãÈËß”cþú®-ížký7kýé |P±ˆ@;ˆgà+ê÷!¥Käý+®Ï-i$zðSo˯ΡéÔùú‡eÖ—eJißc/¼-'ž¢åd—Ì;gyæ¹ …tÕPí)õ2wO©U¶ç²3¦È”gNÕ¨¬wŠæl='½û¶ô_øO™zUàÁÇÉä%OËÈÁ% |yÍy„ € € €@² Ä3ðMÛ„ã×ö‘š%/ÉU#¯ qKŽ’«µøú}cÛ."AÚW¤|…¼É%AÛ|ŽzjºL8g”O‡î!/Kn”Ÿ!³Fž#Ÿ}èõOÉ…>Ò¯ Ç!ðÅ" €´+_ ¼­ø*}í¹í”GËûáä˜ tŸßé>Ÿk¡óä5·‰OqÏŽ¾<çmÿ9iö7räþ£Ùøòˆñ@Ú¡¯ÞÔV |ù¾©•Üøßˤ;©UúÑ?ä¶£µÛ]†Þþ_¹ìæ1.•ò…òÏ¢ 2×,i`7þ÷*ÝÇÝXy‰lÚ$Òs°~¢d"ð…UI'Qà+pHǪåÖ³.õ éøÙg7JÆkÈè;M7]Ú׋Ë„!î?:«¶ÈÃ7L–«Í¦ñ—ÊÖû3Тoðêü›4lpòÞ’­C8–ê¬9ëßwzÿÒØ˜|ðñŸä`wX«¶b‹ÌY´Sö³§S‡T­ÖÙ®ÙèI2oÊiRì.»vîë2ôBWüìÐßÞ!ï^°·so|+ãÏ—oþp¬ ïdÂc•òúÔ;äÔ˜P™O¯eÎ^®|ù`ðv&—ÀW ïCÖ?q¥ÜuÉtGÓôÒ5A{éJu–t8í¶_ö,ùÙ.ìõ/ÿCÖæ‘}~:Â3Ôcý–ùòbŸ“À˜7fÊ—ÈìS\C:Nœý¥¦ fÓQRÝosSùþñ _¾H{Îú¹Ós–'x5d’¬}ñ4éîS¾rÕ,é|ÊýΚkï¸[®?z˜ä{Geô”ôÔ¡kž™ñ’œÞÏ¿ÐÇOÞ*Ç/ŸÞÆ<»Uý çtµ3”ä½Ï=+—ŒðÀ—GŠ´;x¾Â½§hü>d¼=ê`yC_"zwŽœxxÏ0®»dÕkoÉ’9ßÉæµk¥rg¾tê¥#'>é tàë |¾+òi°ôiŒþ|ê9aŠ6|žêê)Ì^I¥ö¤ZàêIuâσÀ—…bŽ € € €@ò Ä#ð}ÛDK¶¯ø´{ø´ŸøÞ©à¯MÚæs Óæs¼¶ùÓ¨ÍÇóöØå |>‘Rìÿ¥9O/fzwkOíÚÔí™|y(x€ €íP€ÀWojk¾¼ãºß(wÕ\èòÍçÚ=o¼}†Z;õ¹ç*E=Ä·3|voôÀW#V$¡@¤¯ Ç×/í–‚n=eäð½äðCFʨ^î@TÅ÷rê!×Ëëá®ß'ÜåéiË'æ»{í–ï垟•?¾é‹Ù: ãÊ)¤·öÖµvæ¿dè•ÓtËÙ²ö«“ýz 3Å=Çð¢Ñ³.Øq |Yeæt8x¾¢~"ó剢“ej CùÝ„ÊòöA?s ýÖû,ø7 z CÕíy_äÓ`õ5è‚Õã9-_  € € € ÐÞâøŠºm¢EÛW´{è Ú.R»Z^Í/úÉ“ÿÑ—rÌ!]n½·Ý&Xà+X[Žoàkо²|j$ðåƒÁC@hw¾xK[3ðU®=|ÝhzøRh§)ä?›÷·o_ïj¯`Ç›}ŽÒ}žl´OSt¾šÒa[²DøšpÓòÒ©¦[éPÓ6¹O{øºI{øºó™g媑þ=cÛ«Éà•Ï•;¶É· Êÿßý2užkäۧÊ?Nì+[´‡¯~¦‡/Ñá?Óá}ÿÊÕµžcëá‹À—2@ ¯è߇x¿:òá·eòä!o„' .ãäôwïê+Ùéš|­Ý$³&,ÓtHÝÓuèÆCî¯&>­Yøo¹j”²Q{ʘ­Ãè?|ÑŠ):Æù:ƹ\,¿ß}tÓqá•ËߑΧ™!EîÕ Ù%A³Ož¹U~ö é!l¢|7÷ײ§f#š<.=|9–üƒ@Gˆ8ðÕD8<ú÷!ÞÆ=ÿ{¹ëýsõNêºÞrÞF@{—¼Cø»¼„Á†0{{Þùôðý5¯ÇžøòPð@@@ö.qà+®ŸóxÛMâß¾âÓîq™òò©~=k™û¬}E‡Ê9§ì#ÿzM h›ÏÝÚæã;£”Ε‡züR–éæÃ^þD&ž°‡>òîã߯£›t"ðårà_@èx¾xÏãøzýƒrú¹ÅR·»¦ÑU¥6Èì=•-GÉÅK¦È^ƒ]¡¯Mï>.>þ.g‹·‹\],_¨Ã)Mp†Sí5ãüùËþÅ®îuk¶¬oÞüQö>g¼ÿ›q§_nfI-ŸÀ—ÈÒ·•ýn~×±8ÿ¦?ÊŸO)E°2SéÚrß?—˹7œì„®Ìº&ƒW¥ßÉÿZ+Çþò`©ÃFj6S¤âG¹óŠKåÚË— |IÝF¹vÌoeªÙ®½x½:ãR9ºŸ«w±¥ŸN—ý~÷Og‹§¼.5y\_Žÿ Ð" |“sfß.ýòDê!eH×!éòzÁø¨Þ‡¬â¹ë’÷œÚ†^ÿˆœwËq’ïôPZ%›>z[6w?LF§{ ‹/–ëÞ½\úuÏ’ª Kä³®iÏ-qö÷vy;Ç<üº~“´X¤²LÊvgKa‘«;Ä  ’:äÀ4ràc§ÆÈÞK­ÇÙ_ÿ!ðe%˜#€ € € Ðî" |Åûsž–k_ñ téÈ2Wo¾_iSõ†ÉèÝU2ôކj)}írÛ)wîùÈ»ž‘__ãþœ©|…¼öÏd† ƒùŒFCàË¡â@@ ‘¯F$­·"Þ¯¦Î¼Ï]ÓåÒq_ȇ»‚]¦lŸñGI^É{²ÌtòãLçÉ-;o“ž>Ã=®}âJ¹ç’é¶€vQ4NFvÝ. fûÕ[ŒÀ—ׂGÉ+IàëPíQëÝ&{øÒë÷ _2a|OÙ±î ™¥C=šiÒÊ?ŽíåU=aœìzísYoÖ×o¾ªTø4úõ{xð³ȯ~5ؽÎû­PgE±¹Pß×ß!SæŸé|5Tƒdùìè®!T=Îq}‚õÁ¾ºiíZ™9ãyø´ßÉÈ>ÝçÎ @@@’Q ÒÀWS×Óç<-Ö¾"R³ä%¹jä5îS!C‹—8Ÿ7ÙvŽÐí":¬ã‘:¬£»™[d„Œ<¡³,Ð6;…j˱uÛrf¾vêrÏUú¥Aí©ýî÷Ïô뤠®¶V¦=ö¨\tÈñrÆèÃ}wã1 € ô¾x [3ðe{°(›3C^¸èrYà͇8C/ø½œ~ϹÒÓ?áÛjeÕî“çÏzÄõáª×Ð3n”S8_ú9} ùl¡‡/? ’V ’À×µ{BþôÓîá¯Q{ázøþÇåêi¿|ºç¤s/’«}¸¹‚ZžàÕø‹dëý?÷ÆlË‚YrÝÔûåùy‡,–©O_&Œò?— ZþÒ?Ý/¯»ƒev¯C'ž/S¯œ Ã}úËnê¸"[äÎÓ&Ë——Þ¼G&ôr«­À—•`Ž@ûh~àëd¹®ô~1 Fû>¤~Ë|yýÂå½×\As¯î89é…ÛåˆSFHªTÉŠgî–~ãúf¨S¦ø(9ý¾ÛåÀ‹åªþ¿ÿFBý¶é—äúQ¶AÒUk}_sÁÓúk}‚†À^v…Àì±£¹OÃfzDÖÉÛ£–7ŽÉ+fÈÈþîô­û@¾¬8s@@@’_ ¯X?çi©ömé‘yŸ.Ï<éÛn3BNzãi9òè=¼=|k©Ý$ónÿ‹¤¦´DÊ·•K]Fºdät–‚îy~wÎyè{•ªZ}¤ßÜÌÈ÷n¯×åÔô ïYÊK¤twºdEú^(àb£½†€ÝÃ.ø KD@@@’F éÀWl—mÛD‹´¯h§åkJ$µK¶Ôì)è]ظͦ©Ë«,“²Í•’ëþMÕ­Û|…b3 €$µ¯Þ¾D¾Zú² |µ´0õ·†@K¾Zã¼q _‰P瘴Ž@K¾ZçÌ“û(¾’ûþqö € € €ø ´DàË·~ ðÜ…µ € Ð>|%ð>ÆøºêåÇåû[äè3ΔÔTߎix!A½æûïåówß‘'^$£ú R‚U´}U³ßïºPÿßK¤×½Úþ 'ð ·­[#ïüPÿÕe²W¯þ!J±@@@’A ¼j·÷è­2ü€d¿Ÿœ §Ü.Îq‡Ž|ñö¿ÿ-¿;ôD9í€CÛÅ5q € €€ ðe%0%ðõ+Ê-¯=#ŠŠ¤{ß=¤°k7Ò-7gßøõõõ²³´T¶oÝ"W­–A]{Ê£§]*™Á†Qj¼;khs5;åµË•Š’ÒgØÞRÔ«¯të!)m8lÙšˆ õR^²U¶o\'ë¿_$é¹râÔw%»°kkžÇB¨¬©– þó ¬+Û&½ÎݺIAç"^ [À½¾¾Nvls¿—Z½ZFôè'Sù[IOï0¼-pêT‰ € € €aþôösòþÒùÒ³_?)êÞC?ßé*i|~F-úÍ ²kG™~VU"›V¯’¬”4ùû™WI÷üÂè+c@@  øJà͉%ðeN×ô´1ýÛOåË5ˤ¦®6Wüн5ì1~ÈHùõ˜#¤SvÛ£?SÖ"^ bÛ&YðâßdÍgoË®­ÂïÐKäu—þã~.#y±ä÷¤šøà’;€À6 Àþ{î‡2Kƒç›v”v€+Nì%îQÔM²¯œ9úpÉÏÊIìÉpt@@@ˆ‹@M]¼8–|ðýײbóziÐÿ1µœ@an¾²ç>2é'‡ImÃfB@Ú›¯ÞÑX_ö”kµˆ­åe²³ªÒ®Jè<]{=êš×‰WBïoIÊÛd÷¶ÍÒ ¿{L"))©bÂ^N^)) €@ØQYá¼ÿ¨ÓoK2ÅWÀ¼—2ß6%ä_WjC@@@ ­ 쮩’Í;·Kµ†À˜â+`Zª»èhEyù’¢ÿcB@Ú«¯ÞÙæ¾âqê}üŠSÍe‡ý"ÕQ´‚@éê¥2ãâŸÉÙ3VI*]~·‚8‡@dؤ§¿|úÏòáew34b2ßHÎ@@@*pÄC×Ë/’}÷”Ðóàà € €._ |&´…Àס\ã̺bJ%84D"P£Cª-}ûßòÝ+OIEÉF)´—Oü­ úŸ ~EHèpfìGþïuY­Ãó÷(—Ž?QöêÅгî‰À#€ € € €@ÌkJ·Èßf½*Ÿk;K‚Îråá'ËÁ:T" € €@b|%Ð?‘/Ó]𓟾-‹7®‘4–mp÷Þ2ù§ÇI^VvE84X3tdÙËeûÚ容öêU²ü[éwàѲÏ/..úõº¯fÊ¢Wž”’eßJ½GKç~C¥°ß)ì«?ú83¯ÀVÇh÷æ½ÍŠ­dÙæõ²|Ë:ùfýJ§G¯óú¹¤Ù·¿›'ÏÌyOŠ´Kÿâ>eX÷=dH÷>2°kOzþj÷Ï.@@@"¨oh·oÕö•u²LÛW¾ÓÏÌé&ýä09y¿ƒe¾¶Y?6ûM©¯¯—Qý˰}ŸA´¯DÂK@@ ®¾âÊ]eñ |Õé›ëšú:©­«•ó½ÆÌuÙ™ërye…¬Õ7éëôǼY_²i­»÷9sÌáÎæ/hpäÕŸËPýð³oQ7Ù£°›ôíÜM sò$#-MÒ]?©i’î,ë<5]§2zt·Ò‰Ð?TꥡÞ5×÷r½ž‘>6ëõw¦¾®Fôw¦^‡êkkuÎu¹ÁoY×›2µ5®mî2fÙY¯Ë¶¼©Ç®sê3õ8õ¹÷Õåªò2©,Û*•ÛKd·þ~V–•8a­Îý‡‰çgÀ0)¸—®ïÔHЄö­Z,Û×|/ÛWëÏš¥ú³Ì)—Ó¹«dëïs¶þ>gv• ýNÕßçýqÍÓ´w° IÕßmgé¬×egî^n´gSÞ”ÍÐýÝû¸·yê7ÇKMIIÑÿëk†óXçºì¬Óe³ž ’G@_1õ5´AL#`°y¾ÞÖêk]­yoâüÔK™{Öév¿eW¹º:÷zßý<û˜2¦ÞZg^^µ[Jví­æ§|‡Tékð °›†ÆáNcãæê%©æµÆ=™÷H& ¶tó²t“þè|Méf)ÌΓîù…Ò-¿“tÍ+”,}]L××&óþ'Mçéæýû=÷±w}šn3ï—ì6g÷r†nKólóîc^͹›ëZ{ÊÌ@@@@  4j_qÚ]ê5TÕ N‹¶“˜Ï€L[ŠiÛhÔÆân+ñ¶Ã´Áø¶­¸;Ÿ)é~æ3¤Yb«¶Q›ö•’ŠÒ³ H†÷ì+#zô“=ûÉ0}œ­m%v2çûƒ~éÎ|Îd:0óÕÚ¾Ò9'ßi_1m,]µ;SÛU|ÛVlÛI`;ŠùÌÉÕîbÚMôs'Óc×ù´¹øîgÚ^RµMÙ·mÅ,Ûv{®Ì@@ö,@à+w7šÀ— i}²b‘ó¡d™†·vê—WUê›þ:í©Ë¼)NuzéÊËÌvæù™9®¹öÜåZ—#} »ÈØþÃõæezÆørÍrçÕUb>HÝU]éúÑc”ëã ÷Üü`¾ÁÑ ~9YR#²suž«šæ:oì÷ï;XF÷ê|hš@fÝVôB'è´}‹rÚ­ÝBWêóÜžÌÐ…®À•†¢L¨Êþ˜ç]MuÀ6]WÛx]®s…®ÌþºÒÿ¹ÂF®Ð‘.¸—MÐH§šÿàRª†RôLh²a(ײ LiY”2ÛÜe̲³Þ,›}ÝÁ'WÊ]ÖYgêó.›WŽÈ2Á,Ðê*éY9;sÕ»vºƒd®™±­Õ×ÇÅXê'Üæ<6ë\A6WøM·«s/ÌvmPð„Ú<û»÷ñ Ê«¿A_/üBv&|§ÏgóZÒà„ÎS2KÏT[3W'¿s?×ÙeÿmÆÐxætîîò-2óî’Õ©È©»ÙÀT€@¨×ß³ÒŠrÙ¢ væÇ4Ü™ù.ýo¼w }‚âî?WXÜw½+DnÂZÕú»oæ¦QÐ6 ››ÞC}æÌûÓ(ç]g¶»ðÌz÷OšÉíc×\÷Ó×Yšr5üixÊy¬ïwô½Ž huÓ×Ñιy1…ÐMcè6}½46&@f~LxÌ —é6oHÍ>v…×L«mHuZÕÄØ™uN#¬õ4Ëž²Þ@[° œmàµ1Û0jÃ÷ÆÀ¬3Ž~sýïNFº{>ÎÔí&´ß=¿³µPènlí,¹™YmüYËé!€ € € Ð6ÌßìÛµesùvÙ¼Ó´±lwÚZ*´½ÚiпýM»‰Ó®¢m5Ú®Z£_ ö|A_·7jsÑí¦ÝÁL~í+¦…Ä™´ÍÚicÑöû…4ÓFàÛÆâý¢™O›Š–ñ¶¯´ÁønÓÇ&Õ%7_ºéàL;‹™gjûl´“i)qÚW¶;m,¦­Å¶#Ùös­¦£Xs:1ÐeoÛ‹÷‹~Þu®›«½Å÷±â´í˶¥xç¦ÝY´íÄõE>s}¶}Ŷ§˜uN[‹ÓžâjGqÖ™e·I¾¶-›á+ °™¹YÇ„ €´%_ ¼‘¾Ì‡~üЬ*Ù(cŽ~V0=o™^¸ŠôÛY0Ñÿ%z2´˜€ØÆÛ´±ùQ{+Z¾e½óÍŽså„rÜMÊ ùè^~a³œ2e\ëÒÌïƒÒYt+¤•¡õÛG>=¼tÔûÐÖ¯Ûò3!2Ÿ Ÿ_àO×G¸­V_“œÓ4Lhæ»5\XYºUªw•I§>ƒ¤hϽ¥Ë ×OÏâ%MÃ#L$³À t~¹v™|·av·¿Z»Ý_ï|º; v¦aJîôq¾†ÀMØÊÓ°ånȲ Z¦AÐÓðå”Ó²f6ö9Á+wÃ`2[µõswBõ½•mu榱XŽýÖÙ2¦¹Ö4šº–«u½m„Þân„Þ¢ßÒ5ý}z}z }÷ä|K·­[p~ € € €$B RÛ$¿ÔQmX¥?«^³µÍÙô^ÕÝùr•†ô±ùr•«Å²m,®QvÛãþW[øŒ'Æ-uLóåïZíEÞì<í*Â3=¡<÷ãjmS©Õ6×6Wû‹igÛ²SÃ}úÝf3×s¯‹{”â>Åtx0´{Ÿ–ºêE@" ðSË ø2½KL~þAùž?•_ìwPR¦L`íoýK޶¿œ¢ã»3u,ÓÔŠ_’/=ê„®zésÙ KX4p¸3TaFnAÇájÛ„€y^–­].¥:ܾz‰lZ4Wv¬ûA†–ìuÂy’¥ßÖbB ™*õ›¤Ïù±¼üÍ'²¯†÷ÛcOÑK»Û×aš³5$Ë„€0ÁüÅ×Êw›ÖÈlí9Ö4RÿîÐuÌ=læ € € €thÓSÔ[ßÍ•¿öŽô/ê!£ “½uXÃáúCÏÙú©á„¾é—,MpÖò2°k/¹TÛUúéÙ™@@DøJ„ºû˜á_ï.ùR>úþ¹ëÄóx–Í?ô:íYç’–—/¸ÍO½ù5RC2˜áÿÞ¿ýgÀιAº• §Í9vPòÍ?Ê×ÿ¾O6÷…wï«’Ý©K•ಓMÀ4B^ýò’“™)W~ŠàI¶kà|#`¾íúÚ‚9òÄ'oÊ}§\Hè+1·£"€ € €´1'?}K>×Q*n8úWôàÔÆîM[:3œäó_Δ¿š)Oq%mrméæp. €t _ ¼Ùá_æ[f2Cï$ûôÊ·ŸÊq{iì÷d¿öŽzþ5»ËeÅ/Ɉ ÿÛQ ¸î$X­Á‡¢A{9C>&áésÊPÀôúúÂ92qÿC:àÕsÉñøvÝJIKMmï7ãáA € € €[àíÅódì€áÒ…Ñ):ö!«ÿtåw²GaWÐ¥g„{P @ˆŸ¯øYF]S¸ÀWÔ² € € € € € € € €´k_ ¼½Ñ¾vKTëÐM5R¯ÿkHà™7uèI—ÉПœ”4çqS¥ÙÖtˆÇ†Új1C=ŠùaB Ñ)©’’š&’ž))ié‰>Ž@\jõýÁî†:}¯Ð æ±´Ù÷ q¹\*‰R@_õô=Zªdéë_¶Î™@@@@ ´€ù¦B?©ÑáûL;‹ùSÇHóiWÉ¢]¥ã>¸r@Ú¯ÞŒH_æŠí µR­X$ÛÔ)%]rELZ ¡¦Jªwwh.¾m ¤˜ÐWVnÛ>IÎ0 ߡD S&;ëû4cB@@@óyŒù\¦í~ùÞÿ|Yj]óEºÂÓõ € 8_‰³—H_Ûj’2ìei;ë›ÞŽÜ‹Dåú%2wÅåÈÁcÆIŸl+f^¹^>Ÿ»B{ié>bŒŒèéŽaêmåÍN¯^U­|Ô¶{¸Ê­ß˼ïKô3dÏFGþ|hµKª”%sçËV}âe’÷éÕjGNôR2²$%3'‚Ó¨•5_}&«w©QçÁ2ndŸö¡Hc}®}>W¶˜çZ[vŒñµ8æ×þÆP­©t!Í1ÚÓT+뾚#?:¿k{Ê#{·§‹k×bB_]ô}ZÛ™:Þëkméùláj½2`Ô8韟軑$¯Í‰fjÇñ¿wÉCÑñ^_ZòÞTnÑ¿q—þÛŒ×<ÿZû½ZKÞWݱø'ê÷"QÇmù»ÀhŽ@s^—Ö/ø\Vl׿óúȘk;l2N±¼Žµüu¶Û–w z„ ÿ}o›÷9ØùëX²µAG«¶1iÖÑ®ÒÒ·*G;;(Ô/Ó1!ÐÒíé¿GÁ¯%yþû ’LçÚÒÏÌðõo?¿%@ r_‘[…-Y·sƒ,[³Mû×Éé>Pöì‘×ä>‘¾Ì0Že»WÊ왋àOá€1rÀˆ¢&ëí\x՜ٲr{µ~vÔ]Æ1Jš>“ ÕÕ–Êò/¿‘‹ɪï7JéîJ-”-Ù]Šdða2´x?Ùgd?É ²kà*ÓsD÷í='pCåòŸËìeÛƒlñ®ÊÌë,}úô—ƒû$EÆW.?¹ücçîþl›\7.Üýs]kùWIÁO.wFÞý™|{Ý8׆dúW‡ ­ß½F濺Rýþ6ý¬ÂÕv erÈÿüÏð¦Û®Ë×ÊìOÌç8™2hì!2°(ѯ}-Õ®R* >œëúÂp÷½´¤_pD³¶ü5Y.5æ»fåÚsôa²GˆféЕ´í-æ‹tæ uL´œ@{úïQˆkI¢ÿ>H2kË=)#®9ö÷¸‚‚tx_qz lX4SÞúd©F­\Súà#弟íÙd푾JôÜí_ýM†Œ¾Ú©k¯»gɇ׎m²^}çìý€T•7v¼+Dñ‡þòWï“É¿¸I‡9ŠŒœ$ϽÈ+_ð˜ìû[çÌO|ðK™qÙ ¼ }V­Y óµK£>#ö—Áö6æôîU2Ë {ÇÊ#¯Ü.9,lÉd-°àé eÿË_tNÿþÙ+å²ýÿ?{o]Gq¥‹nˆMlb“Ø „!@‰8„@2 ~N’YCxps +Äâ>~ž5áå9˜; bq w!ÏÄ{€â˳‚˜û,î€ cd@!‘Œ-ËArl!˲e#K¶d$\oW÷é®]ÝÕ眮>Dzì}Ö’NŸî®ª]_UíÚµûë]Å$|íƒ?üæ!øßï¨É Oæ§Àÿû‹[ 4|GÖÃù\êd×<þþÈ?Âó7an(lkÇ!X~Ýt¸åy¬V¦~r\aT´ÆZ‹„¯K~—¥.¶Õý6øÒè^¥˜ÃmdŠ—f:ÞÞÓ?\r.!“Áïÿñs°ÐkA×Êùñ ì‚løÕ?À?,lv®ÞÛÒ?ý–™ÚÚõïwÁÜ>æç²`å&¸'“Û¾óož “Ñ)ùÙ£&Ê×ñ§_©½WÝ6?»ÄÜXwš ºùˆá1NÙØÝIE¥}1îÚc<ä_ßãO¿ÄǨðž¼ .ºý'¯»è$ý¯p©õ;£mµ!ØðÇpà¤Sáâ‰%''þQu*í¸ˆÖ ¥-Woiþ¥ˆêêŽbQ¢G_X1e˜hyEë¥|5!c 2Ð6ØËœ/÷ø×-ûZN=_Šâ¤8Ú°-N­ŽT.Æùý¨lç0"2º—|±Žúä]U­}ð_r¬Ù¬}ÜŽ“Ë×.1é™#ìWú\Êð–;•㽑¿À}' –úÕ» Z.†¿=Æ_Sѯ"·väO2¢mÇdù©¥ù(¢.d~púSY¹‡GœÑ¾Ï0Œ@˜ð•<'éh?¼ñ¿þ6íñ¨^n†Ó¾rüøÊ/æÌ½Â×.q†6,…/}m“×UKZ`ùϾž3_Iøòµðòþç U c£÷¿€o\ýÿü/„«Ê¿_û>|Þ ëÿøüaõFrý X¹ëeøÖ©ä”áðS9bz¡m©â7dc<•©nF2Ô\ãµ£á¤Üª§cû‡(Êd8sö,(ôÅã¢xÜ*4Ïß9®[‚k¸ÑÆÄGà ÿ¤DÊÇ3ká‘<§À»'Öm%#|¼ÿòŸ¿ÿ}M .‡ŒÜr°w#<¿fSàâÕðbÇ2¸ê,²Ê¦„¯¹Høj<¾_pâ$8qj>…I%i$|½Æ„¯@Ç*ð'nå²¹>Äè“?}&Ì:{œIRÛêb[Ý!FÎÓƒb `DÐRÍá9 /ÂűÿgùÌ)HR'öL _«ŠGøêxêøîí¿s¤_ŒÛÿÓà°Ýöü/à²T6ÑÝpçU9ÞZ-ã‘…ŒÀúù ‰Ùz$¤;þô+Õ1>iâH@YÆÄÐÍ‘âììî¤U§}1ák|ä_ßãO¿ÄǨðtÝ®t—½þ°ï…˼3ÊVÛñ‡;Üð' ¹lÇ$ù+i¥ù(ª.c~p{T”¬ÜM#Îì?0ÝÉçFÀ&|Ù"‡é>Þ÷.Ô=û&îÖþ‹ðµ _t¡PRÂ×ÈF4Ô¿áêX¥ë—¼ÿú¥áÓ#üÃ-«á¿ÿ}ÿ¾Ù‹^‚U¤Ã 3'#á딘„¯ªæ~¸{î Ó¸tcÐßõgxæ_ ?Æ[-Ôu Âgå#i&À¡yQ<^‚ï€Å}îCÈ35íÐ𓢪‰CA ýY¾æ>;q‹@Ò¨ccCл¹ –ýòðà ^ýn€u{ž‚á!yW&úwi_{àWWŸw²×ü‡VÀ]7Ì…ó>§ÆÅØÐh{uÌ)ûïÆ uçSðuï¶ák¾ŽN©B1q;Gg[Çœy’E ¾ðu\a”›cïâÑ¥‹Íø:„/»¥šÃÍ¥ïì«€ ÿ¾3¼^>XKt¿NøÚŒ„¯bm騜¶&'lï@¼”Éý‹‘½¼ºÉïÓRÂ×ñ _©Žá‡¡´WÏÇvvwRÄh_Tä Éu|ä-D2ý¶ßt<’ý*¶ÃÖ¾ÿ%«‡)õîU‹á´ï݇—Ê møi¸äX“Fש”ã"—n(e¹¦Våsè~P|è¸f§4«\ɘ: _Gº¯)Jqtta[Š–2OªâÙ—¥”ª°¼½HêÔwà¥Ìõ|†>Ç1ù¼<Šý}Äý*”ðezAo¬ý‡óá¡ÕÙšÃd/YC&|eÛ9ÑW.Û1QÆÇHâci>:–êì^܃ˆÈßÅö˜ÊàsŒÀñ޾ô€‘î7àßþàFÌ9ý¢«àŠ3ûáÙßqrœ„¯½oÂõŸýžŠ7êÍŒ,^c[~gÿdÝ«>³s8Bm_Õmƒ¸­ÇB 6Ô¬ø§90ï×.é+[¾–Ýòp÷–Ͱóà(œüÙóá¼3Æ`íªUÐþþÀIgÃ57|NÕl#aflÚˆi†>ÂBN‚™gŸ §.†³sl[86´:ÞÙéÙ‰IäÛ˜îóçÀ¬¯Ï†3¦iÀØÐèÚú Dáë¼P„¯½[þkÖÁ~˜S0¯³Ï½þîÛ³`Êæå0yö-NÅ£Å#=lÓÆM°åøÅ?iÚL8÷+£ügcnáÂæÄfŒìÞn{zvÁG²§Ÿë28›„!Ûûþصãm¸ý²yîÖkåµÐq÷·atôd8–¹¯äá+×c[á¿ýo—ÀƒïÊÔWÃ[;WÀ·Lͤ¥ ›à½­ý0$+Ÿi3ÎA¹¿Žä&C­GöÀæ-ýˆÿT8ÿ‚s`¬g=¼Öò. `ÒÓ¿þpÕŸsòpþÅÍ[¥„‘}Ûaýú¿Àö]»P.‰åેeÊKøÊÊ‹áPæ™0û˧ã¢1÷gÇ«•pÖ?>êßôÄkðOß$õò¯¸c=MðÃÙ?¹Kšü¤îm€u‹®pPÂ×5ÃßÿÆúÞƒ?­m‡ž½ÁÈ¡CpÊSð÷éoÆ’›Üý?»ÿúløk'ìÚyû~Núœõå‹`ÎÅç˜û&Þ¿sx Nžy6œ÷7Ó`¨o¼‰[¼9ãÓκø[ð-ÄÂûìýëzx£µÛ{îI3àÜ‹¿‰×£êC Â×0¾& ½-oü)çXòdw¿Q¦-°¡ó/°Óxö¤ipö¬¯Ãœœ[ÇdÓ½‹é†0 ª9îÏ<\~™ær@IDATtÞyûŠ.ù…:mÃFÔiÝ©ÆÕÌóàë—}Ó¼…ëÈnØÜ¹ÓÑkç§Îƒ±÷ת7ÚÝqué5ðýÔ©X¿|ºx vlé‚P_»¾¦¢>Þ1W˜|:Ì:/:t¤“7Þ¨Wƒz(®^ôPH¢‹½<èw”îW¸®‡i¾¦c‡ðµ·¹Èsøt½ýGذ®?9·Y< >ó7gÂWR_…¿=#LqÛÛÛ?@ñN†3fŸ"‹K¹?|ÿ/°CºM>ùóð%Ù¾#{a[o?lü͘ÿ`³Sµ%¯¯w¢†Nþüá 3ÆTÄRt nCÂ×'†z íÍVØÑçÎ[R¦ ÿî[xo>Médïÿ£NÛ vךGàâ+ïñï]P¿î¹þ+þïðA<¬pò…®Î]Îø97u.ŽŸwà77¾C§]ú}øŽú9´·ÞÛØ]ÛwÁGxÏIÓgÀ¿ü5¸ uÙþ’¦ÈK[åÝwaË_wÁCî|ù©™çÂ…—] °q¬ _HÚÞÒ±UŽZ˜üY·Oë’àõÍîu¼Û=¬§öîØÛ?8ˆýB^?žñ¶ÌEB­~•]ËÖ>*í¨ã¢~ч ÕíÃð³Ô$xC üiC£O:i&œ…véehÛEõò¸õU¥›Ž‚º98ÞK4á+4…ÚäCØg¶~€º{Þ)ç¤Ðö×ÃýJŽ´ÓÏwìzª—åÜ5£"o^û¼‡ckH†8Ÿ¦PŸ¤rFœ,\ΠT²Ö½³ ¶ï”s­kw_p©>ÏÆ±»mÛ½˜ó],ywo†·^_ ïíÁUÏ”)ŽýrÖ¹À……×GAì¢ÇéÄ©œD¿X¯Ÿ¢v„s°¿»©\‡uî”ý°)´†„±½¨_·£]4>kº JLh&#°ùoÁÚuïÁ~ll!gmxÁEâº1¨¢¶ùô€}ÿËÖ+†í¬l.³nŸ1X§KÌ{wÁ;¿¹~øËÕ8µÍ0§åÉŸÇuÈ®‰íTŠ8: Š<‡žýšm톶Vtþ×ýcj«úãB«þȯŠ4cÎ÷A9££®ß°6mÝ;†pÍ%çâ à›ÎÜ•*ÞÛ»#Á»¶³ÉO$KÙûþfØîØÎúÚHõí×yûúQr¬ïfžÿ58甩NÅ?‹ëÎ3 nçb6y,çÞ™;—Ãô‹nw.… _¶ºÊÉ.ðOéYîyhçíØ ï´¿»°ýpÙ §Ÿ•‚o]– ùãrÕûôìºVfgÓ(ç†?¾Úë¶íqçRôŸ\ò¿ƒYgL±<nqœØòèGßÙÔÏ~ ý1c°aÕjØôþ^€OžÿŸ¾ƒ»ÆÁ¯’“ðÕÿã»çÀ/VgQMÝ…}x1|)jþpn+¥_e_6ï€÷Þ}úžŸ9û¸0u|!àÉJœýƒзÙÑÕ »žþä4øÂW¾ß¼ä\ÍS(á«äã{n!6½·^–-xn?×Õ3h#ÆœW²¨š¾òÛŽ4Uau,¾­MôF=åG÷k˜`>òóˆ8H:_ò,Q+:v]&ÆüàÖ1,káý¸˜v0¾Ôá?ƒ)pmm¤$ë¯ ñsÉ{ !|Åퟞ Iìž¼ãÑ/Ä=(­ŸÇV§Æõ•¨¾{íäãQ öî·YWxiïâŽ-ëcèG±_ ,?ÿòôˆñ3ܳF<õTXß3äˆÿ‘óû)<÷”¨[½-o•ä}ò/×§ïðˆèZÿ˜À>çüá$BžËý·G,ɸ÷\+^ÞŸï~÷zW«*îx.OûDËúVѲ½Glûh(Ͻ#âÃ㹪é_k¯)óëŠ!ÿ¼é`°­Ú¿7]ÕìÞ2Ü.2Y¬ÒÕ ¢n¡‡ƒüN‹–A•Ó`Gƒ(ËÞëáK¿3•õ",Á€h¬*÷Ë¥÷{Ç™Š:ѯŠmÕiÿþ*­Nâ©ZÕ×Kï~—‹ÚÚJq´œ´Hø"9ÊÃÑP•V¦Éˆúö€ô6Í¢£±Ò—K/DUSw¶¼AQreÞƒ4! Ï€€ÎÏÃ#ÄÇ{V‹yÎsíÿ:Å"ï>¸Z¼µ3xßnÑúä‘2Kùæ-~.”ÿºê«³i®+_x\KŸZüJV»¼ÝztˆgþÙ+#ŒÕ¼Å+4™ÖUßàËðè[XlÎ%yüh©–ÖŒ[‡xð•fÞ“oò âèþÞóÚƒ¾—‹W¶eï£íõ£{IJÅJ^½ ží=¡²m{E,¢uðÛÔ“ñ±rm Ýž7ýq{åC â­e·Ù¼tø}ërq`¨O<ûÏ—¯_yoƒ8è[±å9¸ßÔ•çE­§cËjDsc•Q‰—K*‹ÑþQ‘&õ aT&:ˆ²Ê&@U9e~Q×Bµ*3úhT´ÕVDÊ/ëPVÕ(‚Ò´×d²i2¢¡©VKÛ¾ ¡é›]<Ü&Ò^ÝSÕb€þƺ´ GHMò–z½ÍÎB/:E$ÑÅ2âi£î'²§« ÕÃÑexWöã[Ì9|óúçÄõ^Û¾gÏ{X´Ôm‹——\á÷ƒ{[û vÁ±Øë¿©‡Åfiß´>ì§Ñõ ˆÙ8¯÷&ö̼ÇÄÊÆ"ï¿÷ÕNC™ºŒÔvZUs£Ÿ¾ü´[ˆ-„uŸ_¿Þ¿FÓ{Ç6X­ª¹6[öµbù«K}9$n½=¹ûÄò*%g#iã-]¯d÷dê;<$^^v—–o0íõUÏ‹.bOz})î÷hw½*gac(ùpÕºæÞ<@쌌hN¦_“ÛGú*[3;Û1‹vb°½ÆÇ°º©YT{óKpìeªEwÈœ¶Õ{šúª‹¥n&WK3 W5áÜ—®ÑdtÅíUž¾AËê:œÓ4]McƒXHî¡c$]aZÄ—SA×+ê*¼y3<ÿ—U5dçÙBínÛv/ö|W,yS¢º©KÁUàQüþXjý¢×£¡\µuCopð+[û¨c;ê=ТìKŒ°¸jþ7ŸöÜëâTYµè ØeÆu{ýÆ¡õÚ×ÊvÖl.³nÚjÔ¿@u‚ˆÊú&QSæõÝðQõQGÃâcÇ |·‰ªšª=Ò®_C­Ã³ÏWÈsêkpïË·Æ¿P,~u“îƒ8Ø*®ÊÚs–<'ž¸Ã«‡ü¾B<·fœü*[”ß(ýñ/ôˆ*mM{—Xð1+¥_¥kSnÿÖU÷ÿÎñOeêÙÕ,Dé=§=nË7íñÛj÷áCªóD•tü£7$†=Ò^£tKº&z­ÑQ«Ö±Ô°™W¢`‘öh¡ÏŸâԱ趶³JªgÃvµ7ìç£htÝ+Iç«ÂlN*…U]&ÈüàÔ3$kaý¸øv0}¯¬×#…ú¹Ü^aôøÆ¢:iK;}ñÈA©ü<¶:ÕÎWBü1×NŠ8z؃Îf]á¥-ú˜ñ2>¿mùVÿöoÿ&ZZZÄúõëņ ÄqIø’ýalLõ —6q _}û›ýÀ…bIko´Þ¸¿KAøêoR‹b¹Ðu>8Ñ:„/ãµ î¨S 4ÇHO‰²…ba¹2bÅáÂ\^«OGN²J¥ËDyy¹ÈÊ+«U†rÔdÖFÈm²¬T¦\TT,é@^òšNøÂ?y€@Ózd7Gv$dÕSÏü §ezûNìAQ¿P-Ü|QÖ4:’R EGÁä™_{„ŸÄ´o­¸Ãi ¹`½Z´_[ {]p¹˜ëÍbÞ5_ÕÚ2S½Z#!Q‚•'¿÷}åCî½¶y<Ô#–ýHÊ«þ®¼æ†LAË—‰Ê£¾¶Š'h^×<"vFaEÎXKÉ7ˆÖ=f‚—³Ÿv«x”³îøýWFðEHd²~©¹7ˆù? Û˜·”‡m¨H{.&Wþèfl§|ò¢‹U }w®vÇm Ì ¦Í)Îò8ƒíŸ ¤YFÉd6òŒIø"mRÆ%š |TAÓàqº¬õHY#¥¯œ…N Š: uO¸¼2$LøC0ïAwC€ì•J;:­,ã9‹ÝvÌÔèŽ}ª×‚íâ8 ÑÅx_§L .ïGEãBUn%}*@jÒ߬€êh×Éi©1_{]L„2RŒ|³•6d8% _ÅšÃ7·œ…©+ÄüEw‰ùåI)«ïRˆu„0¤œ  ÂNMéø$ä­Œë ܶé·bN`±40×ÏÎÜ&,Z@l5ÙŠ¥û49[WÈ^؆7•ß&®Ï\¨ÍWWÕ¨—]*ÆÏn¢Ó*…G÷2h¯Õí¦êJ»šÕCU|¨1J(ÞݶU|¸}«8°O’•ìóÞùÂ=ªÜ nomëó‰];ß^.®Ä¡;}U¬ìÜí\3¾úÄÊŸ’úϽ_ôøÄ,B¨2œûðmUwá*LìŠNÿÞ37ûò{ä7-"›#ÿåâÙ·;U¾;ß‹É*S­ÚbçË;źín™öuh„6šîcŒð5ßÇJbv³x«ÓÃr·xë¡@”± hÞ}âÅ{/÷ë‘É’ød™Vò´!|áXj#ci00–ˆG¹¿™DÖKUˆöòNæh/yã m5Š8Jß”MW4ø¯18Ú¯½õYV§?øŽ§tᢢ^•'Óô6“VP¦EÜR¬üì¸*G'~ÿ€òJ…èbº0Êê*ZOóC2}àé©$zÑ'aŒ£‹£qu¯Dé~[=œ«<‡ðU”9|«¸›Ì×/iÒœ^ò Ç›ÈX]Шœ&•n+ò–ööçòö§r–¹iI§Ü+ÄRJFß¿^“wq‹)Ú•-Kÿ¦òVm=GàMËr“½ú'ÁJ'«Í.X¬ÙÕ'º>èè©®œºÓóZ±¢S½9*‰p+hä/ Ïq/iÃõz=Ö½N#˜Ý(^ξi›«å»Ö\™Îêà”h$@M‘ƒ$ÁÆ}xNœ N›®_­õ@!ú µ®í˜=D‰ØXÒfÑ¥úÉÔÐÕ@æ B ±®o>‘ ºY&¡ú¹xóP\û›ˆÝÍžYÞߨ×øƒë@õ²‡5†Ûµ ôa©½œýM¤ýðe‰–~o="„¾v@zvüä²»­Û=ÁÚ#o—!}8¸NÐê¶DS·ª¿ŒBÑRKÈyE"K`×íõ‹U=HMU4j•Ž{¥•˜‹x/%5†‹&½Úú¯ £j-„Qi©ÝB‰kt#$àTÊÞ¿cÝÖ¶öe Ú™Î骔 ×A×SŽŽ c$Ø#Ôï0á ýrý¼íw¾RFÝ^ùîkˆ"|m|õ>’îFQ¿>k/,»\¿K´z¤ýAÂFk\/6ï߃^ãàW¡„¯ÌRÑsX¾´F_2[PÀ®3¥ô«èϹ®º_rÞÕù¼ŠP†ý¢ªUù\6¾NÚ*u—XõÙÝæ£­¢ŠÚ®ªq}.¾J6þmì$j§]Ÿ®\kA²Ã`´‹Dt÷m_ûyE.óQnÛѦŽBÕÖÆ5$^T?:Bb;™ÑTg‹7_á:ÚW9ž%Z×e‚̺²æêÇ¥±ƒíŸùÒ¹ÓhߣMçGƒ&v™æ)ÐÏU–uÿ,ñxT#(pTt?½Nµö•оëØE±¹v²ÓÃA[[³$c&ФÇÒO&|±5'>ákDôl)9B~ºVÌ¿ÿa±üõ±q?1t½HŽo›_59ÂÔê [ý­Âòì.´™uG­ù †A&U‘æ=”J£gq~öÝM5¢²ºVÔ74ûëL“™¡¦¬Ns¬»™õkÎwµˆÖmUÍ„dâKƧo°Ó‡¯d‚Æ:˜Þ¢§ eê£%”,~‘!–›š{µÈ\£þ®$ä!¹ÀHÝúˆèqˆX„¨´çmñànÀtHŠ2’¡úIJk¼¾ªoùáŠp»x·hy÷‰gHD®ek=‚’’»u±""Í{òmáËÝÚðõÅ$rÖ÷ˆ÷‚2ˆ^±«g¥Š|¦‘¨r¤ñÒX«¶¸Ì<”ÝÞÒ‹ð…m!ÛÃüEò£é`îƒÂ‹ÚöÞïïwÚöJLwÿ Š$–M{€Ó(1ˉ”æ·ˆGßlù¸ýEBžñL;!’ɼ;Wøwi¾VòŒOø2%jøÒ1ÓÕP%2™ŒóÚ”.jQ@Ñ5í탌þšÊ*Q[W/š;LzÁ0LqaV%£šÈh^è4¦QÜ»évCø RypÑQOÉ`í/$R~]l|(ˆõX˜í{òá§Ï·õÄl!!ú½ özÑ^{E›tðá–©Déáè’„p _ÉçðmëI„+Œà%·]ÔI[ø¶*6ï·>!Œ¨òFøÒJ”ÔŒÒE¯ÐÞrÍÊF¦…m{í։ʻ æaÝöÉ<ªw‡$XiÛo±&KòReìO⽯›"®"±+íÍ{ŠÛ³vÙÁõâÞy7Š«d4¯´…ÍÍŸ¶í·-WÿÊw’¶(ÀØîi”7ð°¹*ujK{E–”ßV1ëW{= 䩇û Šj;æOÖ˜e̺˜.¨=½˜¤¾y„¢ âÐ)ÅH7aäßJìú£­~±­%mUjvV0†´¹5r‰~è¯EIýM‡6˜ ÓhFøf¿Ç›¤ùÒ7éɺ•Ž'ß9¡?’ô?[Û¹Ýn¬ƒ6éö¯$⩇<*Ê×h!ÈyvªÕxPÔ94}n ÖÉv\«£ŒÖ ò6Ûríõ &œáÇp‰Oúº+®CÒ¾MSæD¬*úò “#2kçQžÂ×$?I2%k;§´<ë;mûQ–•À4º¦òÏ©ëÞ‘®òÒF~Ó¾˜˜Ê×ÚŠØ£ùÖµÖ6@ý‡: „)ê#µé:ÚZ~›ú&$&ì/ 6*¾ æ÷©Ü}-²åÚ–Eé÷9KËt®Žƒm]DñÁù_ç KliÔuœ-½**f'&ðïØ¶µ¦Lzñ¥/ûò½éüŒ˜ln9•Ž‘\=ÄDøòÖÏ/,!/q•ÿÎ÷‹È5·™ð…¾ mozYM'(-Ù䑹0ªYãÜäDCúj¨ïäùU4Â×]bñ"‚ öÝ¥Ûƒ2†—Ò¯²mño¡od£Á¿µùõ|’ÝìE/ù~ –• OåZ'"½ÉµDqóüP¾èÜŽküks\ ›¾»^­§ƒ;;ȱÑV­¢dzsk’y%×x“×rÙŽ¶u,®­]J?ºí|”ÕâÍW•†ˆÜfv‚ºLùÁA=BÖ\ý¸$vp@¯ÞNºÌ_Ók]ŠØ,¾]¦÷)“Çäç2¯½õ¼âø¸ðm¬>×Ò@ü ý[·mü¯sÊî]]Ý¢_FÉtBdæ°»´{)ç;jx˜¹uËn©çØËÑäJÜ+«Ñ£Ò¶¡Çvý‘Ž¥8úž wúŽ"™fªêýè®Ôž¢PÍNOІ{lƒ užyqB9kd|ñÕhçDè…ƒ™ˆ!ˤùiý($Pà)SOGÛÛ¬Ûi™f[M·eÉ]õ*âM&°õ+};Y—% 3ýYÌ9”`Aõ·>ÏëDqŠ1.h"Ž#uƒs¿e¹ ô`„˜þiº uÔxèïîݽýb`@nF/ûmøA¨Ÿ¡wg yiœo‚‘ÿ€E^ ç!Ž_‡¦ ö}î¡úÈI«G0FßLçíç6ºŠ¦7Ó¾oziH&Ò™J~ÚOMõ¶¶D¢$þCý%Š({‚ÎUª ìå×û„é…½/*Lƒçƒ|&cz'i[¥ß{G|SbF5Ûjlé": ö‘†AxËg|bæÛ—Ï5Ùê«yOõy‰Žƒ8mm=¿kuÔ£Ãù‘Dâè7ÚŽè¢{hø-ß«G.¤_š_¾¿Bó‹€ /iÑõ¾ïñ¶etìb½+à¯h]©Öø×g#GÉßK|Âסˆb®ÿƒÞ£ÖùákEô«x„/aœúVæ,z£~…})®LîùRúUÖˆi ^5½D'e þ­ôÃÆ—©¼þ±WwlO{ÂWñÆ¿µ=B ¦!b/ÝQéø$óŠ?#¨. ê7ë:ÓÖŽ›ž.DÏšì$s=-?t\´ù*†ÍIurœ¹U ?AæçYsõã’ØÁÖk} ®Öô›Å³Ëˆ‘íös©±Až“$êŸTNó±*3Úî1ŽGsvþYeÿ$÷ó”R§Òñ¤éTÚwc¬¬õ0"GÇE[³4cÆoÊcî€ _ElÒc†ðåãõ‰5­/‰%Kî×ËH>¹E'ìTµDÍʨ·!|E•§ŸÇÐ×tß:ÁùD-½‘•¢Çz¤ÊDee…¨¨Ðÿ*+”#—¾ùÓBÞlðäH—•‹êÚÑÖe&`Ðò¼‰“ž«i÷_ƒÓ¥JÐWÈšÁ„‘**C²WTVŠr²ØRoh :CÔªXc™x9ê¼Ji> ¾.÷W?.ž¨~Dý=t¿XôÓüM.®W‹W²[ R¢Î¡íkÅÊ'‹n½#I].®œ{¹H]ðUçÏk€hÂ×£¯m Eòò7’…2Þ˜¸æqaÚªÒË›~+òF3û!kä¦ir¿û¤ÚîÐ'-QRSŽc çmIHPpÍ#õêËüèfzDµ‡v‹÷^[!½÷N1ëGÛ(uÒº¬˜ŸáËTf>™Èu=_IøŠ)ÏÁ˜¾bŽ%w¤Œb”$$¯¢î)/Ãh_é´©Ý?‚‘Gh’‰pî÷7¯ß!‘ª¼¢Z44µD>5Rô}t‰†ÚjQQ^ŽÑ¾Òš”¥o×cÄosé8V‘MHT…zÑZÓªFÓ¼=Ý/ëà;0­ú޹0ð•`§$¨ªõ*œ½ïÔròFG¢ÿfªzs”¦õšž,^:ÏI™#—ï@ ¦É<&º´ü\ƒ:S=G›.¯²Eèy*ïlL©ñp[Îíhú¸XQ™D-oˆ¬\×/ºO,Xt—þwÿ}â&2×_UÓ¢Çz>Ø$–/{X,(¿ ßL½BÌI_!f§.tþÔ¸VŽ`sÏ*ô,éׄ„ïÛL¨úÉ8õ¢& [=4'yÅ#$Y?kû(B_Ññ×v̇"µ±Ì6!ÁÄ[ˆ'ªo‰èÂßsèÈ$%˜‡Š‚+b¡HUÞ.¦@Á´<µe»Ž}»Î³¿iºXíXús7F6[üzùòíž Î] ÚÖÁÜÏr”Q;)/íKãYfdÂ\+Àôê?’±!±. êAóó#Α‡Õ¸%¸ï4#úGm=¢®˜`ÐÎY`RH¿pl?ò’‡¦õíŠÑô^»þga;S›‹`K1£rùu é¦~ZZ/l3‘­SÜï÷¿›Å»^T2Œüõà\Õ÷Âm£®ùå9u"„/S™ùd"×µ|mä‰KøŠ9–¾­¶\Ux˜°òÇ}vdÉ­l)™3˜&³°Z´ä:Hjwc•ß‚ùé¿u‡Õ ž^£ùj ‚]¬9®5i8~õ`Q’ Ò^¿Ãûý A ô¢µ.Ö+küEóVÙëac!Ù“FÂW`N.d§13iKÎõ=ân¯åÍÿùÓ¤ áKK£lêLUQuÚ"ô˜Ê p£XÑ)#–nwÇà¶–ë8zyÐôq±¢2ÓRÇ©un}A#…µ6ªm ôqÌC94sõ¯B®uÔzÑW½­U¤×Õi·|Ï.¡[ϨŞåI  ÑWt<çÆÔØڎ¹Œ¥O½Eo¢úæ–'Z7#1§ÈóP±pí¥[;☉ŠàKËSzYÇc ¹ÒŸ½·ÎhºXí¯µS…a+$½lïíš- åçõµÜßÞx£uˆµöð„Êñ]¼Ú<¯gfÂ\¿Ãü+~,‚~‰[òö«·5£zC£N¡'¸Í‹€èE¡"[dE:û‹ƒ íQcBnwUéÏEŠLiLKû(ÁŠÞ»ÿYÛΤ½#lQ*—ª?Içé\ n$vUxÄ.>‰™´uôC-#ÿGÑæÐüµy.T'R_Òf¾px9ÆéM†ãÜé,Ë¥uôûeazÐ ¢vŠö‡…î>ÓÚuÓšFõ¡à1Æ–4 £¨ó*±{’.Ôôvެ !vÑmºit4eÓ)y‚Gñõw0‡ÀoÚ/"úqP—y;¾Q¬Lõ¦mËpD,ŽÿP³Í0’BxkEY˜¹}“ÈŸ›¨2£ÏÚÍô3²-Iý"ژʫÙO¦r¼s´¼8Øjérë ¯ßx6™†©.4ï<׃õ<"þ¢?hÿŠ5¿GÖѲ#óóZ~m™uÿ½‹ç#|õËïPD§9UMγãzŸ®ñ#|Ò×°ùõûüµˆÚº‘øR"Ébäž\„¯ˆ²©ÌûUhpN¾¾êygk˯ª:ÈþoÚñHøU¨ÏƇ¹¿¯Þ–2²ý½éÂÆ¶‡WlÂWžñ­“!³=“ôu:þéX4Íenj³=B# Ó<›«Ò~_¤yÒ²rãéág硲Hùi¹Tž,2Ù/s‹fkc)%Ó³¤meÔ¤8s½ŽAà—–¯×&¹¿ ž¯°(ãÜ«•³.4­6FŽ®ùÁA9BV#&¤YŠnSPÃL%SþqeÀÖ;²¯ª²½#cYZ^¹û¥§oTÿ,áxô„Žú&kÿ¤~Š‹WÇÜßD§ÚúJ(î}Æ´v¢²ÆÕôšÓ’¾FlMÙÅ3Q ;ñÏ3᫈mx$_a˜{†²ó}p½Ú (däçªåñ sÛ¶çÅUÄÁvoKö•ˆûm_U-.jttTпÜMFC„²¢Š 2¢¶¶FÔÔDÿU×4-ˆ 0:Ð-ZëDe¹ áO±ŠTa6H© ¾“8P1º'®oäReŒøWÔÔæ”½¦£ÿà›ãî'?6Tñúebâ¨ó‘C?C„/™G#1uˆ}ÔåÂÛ*ðPÇr‘!qNýèñì ¯ˆukßïul=Û:ÄÊþjöžx„/ë¼ Éȸ͠V/E¼¢„¯CNÿ™û Ø‘.*Êׇo<¢°¹àž‚‰g2¿W|Ì@Ì{òÍð–Ž‘íµU<껼mûÄÊ[©aöU±¨z¹xë7Å»íkÅÖŽNѳv…ÉM#f •‚ðe)OI _â¼9Â1\/ZÚÚEGW—èîî½ #áË]£¢»£EÔUWŠLšâí#AÊgBù‰Œ£ÝõªïÈqUV)ê›ZD{G‡èÂíJzû{Eƒÿ@KwˆQ×H‹ÐÅšã:pÎ6ûÀ¥«~¡/¯¶ÍJ½h­‹ˆê'iÞ #{=¬ç®ÿ*„ðEçö¨9œ:ÄŒD$gŽï#¤EÜÒ1»cþ´Ä©Ù2ä|Èf!×´4Ê–±rLb=tyI4³šÅõT7—ÿÖYLOe™±¢2q8NÔ,U5Eÿ-yX,ou£­ölû?Nä¼2{Þ}bé«ÍbÕ¦õ¢e[§X·k«X¾ÈsJð5L"ó9d›AEÐô¶#ó£`¤ù¶bsE:+«"ä}‚é¨þñm•z 2éx¶µõQ«~Ñú(]¡®kòy‹ÞDõ¥yŽiÞÝìÞ]¼y¨8¸ö‹ïmFoì"¹Ã4ÒòÌX#Ú>ù„%—¦‹Õþ–†-y ðËS´Oø}\^ ùa]ã¬hb­=d¹y>ÉkìKnÆ&ÌóI.Çé–s0Å=v=È[óÙm§[¼‡'¨ U‰UÕ‚Úq É·Ëj;H] =,Ú/¢Æ„|@Z“öìLÜÒ1ûº¹1mVôÞxý/‰íœ¿½©\ªþ$§sÐÓu:`4Zùº}Xæ¿åHõ³hshþÆyĆÔ7¢GŽq?óAît–åÒ:ÆÔƒf)ÕYÚ¢ú©ºÛ=¢iT Þc iI£0Š:¯›±'é }›¦‰® ÍD½⎾¬Sñ€RÉ¦Ž ×U*MÄíý8J—å«7mãX65©ÿP›ÿSQömµvO">l¢u‹YIôad[’<#ژʫÙOÑ¥é¶Ul©œ±uQžºÐ¼Mu%×i=˜‡èÚ¿¢ô&3}yItRKl°-í™müø‘qò¾Ð/±¿Y{>òDçˆèÙô˜¿&÷×ûtáÛ>›®Ö‡ý´*Šw~¿ˆ¾í£Zç»~ üé©Â#0Q’ñ8G^®¹Ñ¯‡ôK<±‰ø\ȳ£RúUhÞ¹K,Y–ç‚þ–Å5ωI_Ó>±\óÝ^(ÔüN¼ÐÚ*Ötn­ÛzĺMÏ /R¼‡×ÑOø2Û#r›Ørl#繄 I ýs4¢­þœËv^¤#“Çwöªo¢ís‹ek—TÏR=g>¢šŽi¾Åž¯°íP’üsXÿÞf}µ¾Ë`+樿éR.Lüí$q®‹ŽÊ£? •œ4ù¡}Ê·s"ô½7Vÿ£ùŶó·7•˯u˜{:×­2ùß«æ0¼§_PS/u”·”%‰Ã‡ÅšC)^šþ&X„êD®ii”˜tŒj:IÝb<ÊβÜzÐ($9ÙV£ü9QÄr»sXô1¤@¢ýimc‰]ž¾MÛKM çК©ér;Goþ5ͽáÌgré*s r6²ï“{$yÕ_èõd¾z[Û´hzlá?ÔÖÍ 1ƨð#«µ{ùóaƒ^QK0U.ܨóˆˆãȶ$yjãAåCå-XWÑòâ`›Hå© •ÉTWrÖ“Îi%õïy„–i=¿kũ 6·± &ÕŽ£„À¢ÆˆêAᣂ_¸¾n]¹À׃òEý5ë•?Á_ïkküÇŒ/•ɵ:õÌÉn¨‘¹4_ŠzN»çHùU(á+ylXª‘¦®+wQyÝãRúU^^Bü[›† zÖåøNh½à ±|›Œ}ûÑFøR6L\›^öü¦Jïe<uÝè =¼&öFH’yÅË#êÛ8¾³7'±¹än-‰¿Šê¼¢ëÙBôXÄ\…§s¾”ó`l³$u¡iâùÁÁ6BV#&9 Ÿz$x¾£ÙcfªÐ(™hŸ6Ûÿ†õíS1ü\Ʋh^ |\E ºÈ£bùy¬u*íq}%4mDŸq^–!v¾ô%Ñôšû±‰­ÕÉÆLT®ÿ<¾ŠØ†¥$|ÑhK6 MbxjoQàƒÂ.r-d z×¶’ˆ$„­wÝðM gc¸O–iGø2½›Ÿ¯ÁˆbˆPVÝ ŠH•Ƈ’QŸáÁAibX ôλ¹P¹¶Ãõ†›&3ªËj¤д ÕVjNtÈ»5oÛS †ÅàpöªxU™Æ›©ØÀ9—Šuµx=»Å!%I=ñ¶H¤‘ž0â”·Å ’è–‡&2”uÞ¸] %§y²RbÕ‡k—ŠÌÜÄü[oþ~mˆ¼öèÛ=Î9eÌ'·`û>ørg,Ò×[‹ÉV˜Ü)ÞÛ§"ŠQyÔñnñʽ$Í5dëÆQÊT¯µ{²[:â9ÿ;ß}òfß ’©ÎFsa„@fŠ*FËËsÝf+O‰ _>FhÄšáÑÈV™€nƒÁqtHJ{º¡¬]¯ù?T7Õ´¤ne^ž€È-TWä5Ò"t±æ¸ÝCô”‹–ŽFU¿… l¯íuq<|F¤^¡:»yRl©ÎUâþƒïeo©WŽÊ«–4‡ZrŽÿ IÌñúEê>ËCJ42’Å>xI¥Óœ”GáKÚ-ëõmæ¯Ü¤á‘+êÄ5ÛOb‡1:W~p.ú¶Ö>ÑuPw\êí`°5{#´e·äÎÕ¿ »F¶¸Âè©> ž.þZüy¢²¶Ú?Ö"öÑG±Æˆ½(Ä9’ÌvÌ óJWÐ4Doø‹Þ$õ¥yŽs,ü‹=%Åu´‹Fª¬]ôAŽŒØ·;­W¼µEÇ|)oàÁZTR?â꽊&󿦒ã÷G2–âè—¤õ dþŠ¥û(¡Ä€˜©Tú·GÀç-±>q1¡ÑSi„j­Pº¥6F)óZˆŽ'_wEèëþ‡ùÙÛÎùÛÛX:ù:WCÄùÑU_î¯k*jk}›9UÙ¾9ï™"Í¡økó\¨NùqŠãyê•;m¹öz0¸‚އt¥ÉO4(ê–‰ êëò…ÕBn HÓ$CƇ³íÏ_ßi:Ë;’.ÔtŸ?¦M ¡Nô# Îª­ò¶õN‹&/¸¼)9WW‘¤æCÚ÷±n¦ùV®=}}‚ëËB·t´¶I‹ã?Äð£Dv3©t´[oùé6÷‰¨>uÞÜ|ÚYÚ–Eé÷ZîáÖØ&ÑE­ŽYñ"1_§v"ÓJêß!ý+Éüîûš4 ò`ƒÐ~é×_kGß·}©ƒŽ‘p§Pg %|õÆÈÞþCQŒ²ò"jƒð×û­óý5>¾8±Æ¡ê ß¾Xðª÷B>ñ™h¾ê' ÷ŒáË(W§¸Û'¢Êgw‰'‚–’»”~•Ö•wùXzÛmšž‹mÛ¿GÉŽRÀçjÛ|ÿ‹’{ͲÛü¼¯ªiu|Eãá+‰="{ü`{­_Ÿ²ÚÑ\¥dõÝú€J2¯¨Ñe>2Žïì­ÉêX[»¤zVÓcñæz3šÞÙÎWX„±Í’Ô%r<ºæÝY˜xÍßE·ƒéúU›SU¡Q2é}Úð4É´±ôsѲ”]iß?i~Å·{v‘GEòóXëTìþÚ&îsFÚwc¬’èaÚUûStÉ'¶¦¼£øc†–{l3᫈í9¶£E<õÔSÎ_Ýšž¼9{÷æºÑ5D‡Ä û4S ÄË ƒÖ×Uè_I ºûuw‹ß =Ø#Vµ¶ˆ—ñ¯e}¸G[œÀ¼Çĺ€îç†nצßù¡ke9K;U^;[ü_^¿É7Š&— NkTF§Toc–€“UÙ‡/uj;±¨èct±ë9íèäã)3ªà€8Îý¾€åûÎ=Ä×_Äâ ô¡Ha­1» [º¬J¨g]DiÆœü©¼AŠ/³á DøŠ ¹D¤Ýâõêü€"nQRÖ£o¸$)E^ê/þ3!/!^~´ª˜„¯¸y¿NHS™‡Â‘¹è–‰óŸ1¾H4®÷ž¹Ô]‘ÝT=s¸¶¿(®Äz˱èüͽS¬ÛîFG §ï/.¾ZÝ‹iž ˜Rr^›§³\zVÞ©ÒߺB’¤­„ð…Ï>tˆ\JæC+t´”Dj+áËVžR¾è‚IA3Z:ié¸$n9ª‘xµÐs’DŒ]ÍF^0oÃðÔ|‡uÚ°hô·[sûU­çÇ̨Nðôš^F~}“›ð%rè÷mì“Õ†'ƶz‘Ö#®.ÖëþeÒýˆœz :¢-©LT÷‡KPgöÞ[œ9|×KdnWÛ5ÒùŸŠfßÿ’O‚¢ç¯¯[ïŸ÷Ò®¬RoWêÛSSÇäbU–€ä¦#׌Dý X/”¾Wf®o*¯ï„ 8ò^ o„Ê>XÕJ"%À*?ákDPGo”sÒ³ çÌ{@´dqÓëÜ6aÚ“Ê,ëä½Dàô¦á~ÑÞÖ&Ú𯫷-¢ú <¢¼1«“jTïº$Á4jíLj­(d\ÚÚŽ:Bæ_tÌçÕ§dÑk__³þYºð÷ôT‰æ¡d¸v‹Jonľ\Óæ²©è¶j€[RP ÕË€{Ã\gt6‘<}˜åÚAbÚ\™öm& Éß:Dy½ðU£¿bÛî´Ÿ{¾£y× ôeo‹L¿¯É´ü~¨Œë2-þ°îöú%Y=È[±ØW]ý§oÁ­" z×eÄÖÄ![LhDUIî7¨~:n(™‰ž÷u—IÈf&Qbõ?[ÛÙé3ùÛÛXj«!&a=‘íÞVœDgȶ¥örö΂¾Š2‡Fà¯Ís¡:ålj¶_¡¶©¬´–. Ë4™¼¹&€”–žDÿ³ÕƒìÃ?é 48߆–ýžHŽÓìöFECeu!yèÃÖ¢ly–§oS¼ý1’Ê=á“T³:ÍyyÍ[»F¤qNÛêª\yÊk´ï£L¦HcÚÚ’D—Í[oK ˜þCm¼`ýLÛÆÒyJ#³XÊ/a֧͋hÄ$¢WB:GæœãCÛRÓ $Oí¼Ê‹Ê[¸®"ùÆÄÖ^‘2Mu‰Ä [WrÖSŸÓ‚zý;d=B15¿“:_¿¨lôèé^ÿÀÈœiecicÄ»Åð]8á ·qÜæE|Rd/iP_Cýýj-®¶kT$¢>Œ¦^ø¿BÔû±òûEô_GȯB#aEøkú>з¼„yK…¶M)ý*ôeE$Á)< æÛŸÏúÀ®÷zÅM÷ÿ@IDAT/ùÑhlé‡Cd[û/Abüß:ϿƓð…Îò"y<›Þíú”tAÆ }Ï# æ/‹¨oªS‚ëʤu,†­}äôl̹> Ðìù’ÍW˜¿Öf¾½N湘s«fÓis$ÉS;¯*_ˆ,ÅšœR#æ2Mº*•Lí±XØè/EÆYØø¹ôñ£Þ†´íŸz~Ŷ{T¿Š>*’ŸÇV§&ñ•о‹c´àµS‚¹†Ž óZ“ŒqÏÖ,Ù˜‰nÕ‰~… _ Zp×{ëÅŸ²ÆÚÖ¯k~㾞úí Bž“ÍÚÚþ$Ú6öˆ±@Y…¾Ð ì àî¾²u½hé\/^xõwâîrµppÉhp£{ѽàgct+ú0´«Uí1ï:¢ÑØ]öœÄ­uÛ·ŠuÛ6‰U-/‰ªûÕ[ n9¿ó‰]r±ØwzªHaGá cèmʤ[&ںŠnÅ0:< :šëȃ^ä‰áõ¶ƒ\Ö4â–ƒbx£i àCÒÆjb\§}¡>ùx“Y·JVb˜*¯½˜× èjkÐÊ—×é"ž†Ì—×ʪD7Ê1ŠòôvˆºJï KY7|3܃(͘“?UÈ®mݽ¢»£K øy:wögˆð…Ûÿ=ñÌ ñì3ËÉßRñÄC÷ˆyd[CY¯yOªPï>Iˆ`¸ â[[Å=}bgû+âÑ[½­Õ‚äŽe*m¾_Iò>Ô¾<ûÐÆ-{~õsbëö±gÛZ±rñÍän{hˆV¦GëÏúÛRb~HšÚ M…É[ŠPÕóÂý¤¼¬<÷>"^|yµx·}­x÷WijÕ÷(æ7bìà\ ª_òžûŸyEìÙÙç`¾õµÇI?Çk^42-ʈEË0 ¶Ñ¢õ÷jidž·‹u;=RZ _¶òÜoîÌÚY˱„FŠz¨‰‹·º1€úcx°_´5Pýá¶|ÐîDô"å!véŠZÑÖÕ‹QüdÚAÑßÝ&ªËUD@`¡ ®ýè¨%ºÇuK·ÔAâ¿«EËÏm/Ô…uê¡3Õ y´}½ˆËŠI WÙgœ¹%ûpE« ÆD$[‰Hy ׋öº8 Bè§Y÷“¶ŒÀ…bKu¨rBnéXœ9|H,§a÷Ów‰¶õˆm÷‰mû{Ä uê I‰óÒm*º”^þbIË&Œ>…¨vmK«nÔõ“î_'œß]ß"6nï-Û%Y)¿c“’§ŠMø’å?AñÀh[+¶{uN€ÕzeoQ0µÉzp‹oìÉï뫞­à›§áÖÛ׋'Þ%Z³$ý5ËÈùô}Ø~}Nûmìl‹Ëuç³Ìw~û6ªìNƒþ6Œh—TµVà¡¶HuõX ÙBÞuê—ªß+£Â^ä—2òªíXrtÌçÕ§Þ¢3¶¯o©èÂß×S#ì7Åš‡’àÚ\•öÇ%¡ÈÐß%ªT„ ¹¶ðÈ´Oínûv/Ý|—SÞn…-kû ¢ýâØÍ¢"íê §=ʃ<£úªm$éü¾­—AëBçàÑ„õ ýÕ©kðá‰AV5ëÚQ—4ø‹Ô-Ö¥[b[¤+pLô;í#íÓ–º œI¹éþt<ùºË¨?¤¬–ýÏÚv–eL"ÚÛXL§¶}ÇÆõm¢¿·Û@„êÄ/4§I9 üú@ì94ÿ\uÊSÔ¸ÈW3š.¨Ë iš^Öv>‰‡E=µûR Ec;ú‰0ÊrWK½(÷ý\8V{v’ýңͤEmK—³¾Äù¡Þš•Õ‘Úe¶m–«èìü1™MÊ•±² Ed¥«"ñNÓ¾ùJ}U‰kŠì|ÓÝR«ù#h4IÚÏÌõŽõñð¢õ·–õK‰š¦Ç— ûKC°¿{1‰­•Úž:á«0=ê5 ù¦m©énR–v^¥¥òR¡î0Ùbko“å©K$YùÉuZÏ#æßÑú—íüNÿZ{æÁ!ˆjç`;V7 Ïwèèîh•$ú–ëW¢ýÕÜ/äÙ8„/¹–¹†¼ä–ÕEt½ß³íwš]µ ®YlÞ¾ô›lìl ÒY/Ó–?G¢Nå÷‹Hß2vDü*…¾œ j‹K©ŸçÜÿ<©[)ý*@áê¹Q,oí]èSé9Ø'Ö¼þ[B°CßÈÊN÷9™„ÓNYŸØË+&/Izíµ@¬Ú?$Æ•ð%×ÀÔ†‰aÓ{#€nmí¬W°­f_Hòîq¿íæE=ó/:¾Ã¶cÂ:ÁÖ.­žM2×›ñôΖl¾Âh›Ñ9)¨“ ¶[ÈWBp×b̶²RLô~Læ8_Åó«‘|µ9ÕëÑíd»±ñs™×Þö¾ÍRG…^ôQqü<–:5‰¯„ö]isà_ak'{=LÇ…yÍEú±okÒsÅ3Ñm:ѯ0á˺‡Äê߸Ѽ<âVÎï߬C²¼û§µŸôá_צÀÙÁèaÚ÷¼‡ý‡Zä!£éÁhËÊû´Å‡–§©<|˜¸&C-00Dñ~÷­‰ñ"|yô* Tùc¸KT¦=Ã<ÇwY­Py ‹ò~.lÊjÚü"£&³Þ¦ª‚±¦“̸«¡² ´µíJzœÚµÈ2ôŠ',U¼Z™8 ø!"I? [‘xyÐoðeJ› ¿Ì½Ï‘èOèQ¤|•ÇÍbåïħek{òné¨E¦Š™·$`­[vsÞ¶X´rƒ¿Eãºj]K'|a=÷½M¶‰D¢ßâýt¹È^ÞµžKácî㋞QÄ8/Ϙ×{)­•ÔÍtÿüêâÑk²`¤¯‡tÂÍÓ‘K‹ÖõˆVf𺿥#Êe'Ïop¤äûØ%ÓšbU^Ó ª©3JöI|[zwWƒæ¤¦iôcó›\Æ U¡þ_.ÂzJnWKuE^# &}£mMa¼È….‘-•}À¢®„kd§1’X]–B1ë~û¾£rI—œë“Ïá’`Þ*n õ…À¸ÅëóëƒQ¼è6„áûµ~š~@l$Ñ´V£zßüÔ›Ú› Ùô¥%|!·!¸ y®mc‹•™:€©½§=—¬'‘ÇèÛ¨Æv¼M,_ù@hÞ ŽkÍw¹ˆ3*‚—»M1X u %«SRîØ—“lŒØéüe:¶²# "§ Ñ§ê¡™Ž©]}Iá¦C:7Ý<\ŠyH–oë@[ éà ÃÛ¶`(ÁººÅ%ÎP½¬é$ÃXñ"†ùYÈé¥m¯£Ä.³~¬h$±ÈòØÝ¶í^ªùN¸M¶¾·N(¤þª@’»‡Xþo»þ˜¬ÓñÔOIêáGðŠÔ}ý¢:íö(ý™;L0×Ávµ=›a,xcea½ˆF¶ömÁý!e·í¶¶3Z«y×¾T'øu@YiݼúCª:dÏÒþ"ï+¯s£ôÉúÆÿaÍtòãDë9ë™S7$+×Væ”W^,d<`„ö.úâ[!i°Ç$BVäs~ß“÷¤)AÞ»è~ ?¢ãÁŒ‘Á©ƒy 5SZk]eÊÌ;‡}Í™÷ )OÃâŒä9º6¥ý;²ÞV6@qý‡¨EŠÌö„[oÝ^´±µ$´ù±¡$B½Ì\}Ík6ãw¤#}ŽØ§4*o,]•[;]”§.‘dkK®kõ$çÍý?™'j=b5¿SYµö̃ BÝÎyÆH·äõu„Þ_i?¢Ç&—÷œ#¸vw‡}"ÁõþªºÀKôT?yÇ©»”ÏÁñ{ä÷‹Èò¸_…n}ˆ¾Lþ§ÖFýåÁ›²/ž9×-}PùUnw§séËìµ@ä1yŽ«›jž‹ƒ¾[ ¼9“§GŽ<ã_^¶¶Gܼ™Û{¡Ç 0³"8_Vó"Í â8§íˆiձȶ¶7^µï$zVb’Gie¦Ç<¤K2_9M¢|3Úœd[—È1gì$‘Åb~pp’5G?.‰\Àº7zî´]àš9¦Ÿ‹Ú†A›ÛªRüµ±áéü¤ãÑ=ÑßEóóXêTk_I‚µ“­¦}0Øþ.ÂæuEiÆLt›Nô+Lø²nÁÄŸþ=á #¹8[s‘òâ¾#øàV±¼æ.1Ç_¤x Ìýž“Y žxu=yS"ûP2û`tÛú¥þ’ë—¹Q<ãÛûÞ¶ #GT-ÐÃÓ”æœy²œVÙË+!ó<™p;¨,L>Œ.äÓQ«ˆÔÆñúû™ãä_–-¿¬6¡=(šj+Ì$Šnåˆm6Ô‡ñMç*²Hôêê~§Ò墶IwôvÉ/X§þ–:ã’²JŒÚÕ¥¶u4½Q1ØÕ$*2ž®Ë‘.¯Â·³ƒÒçÇf¸£ÎïÁPަ‰×Û¶Ò‡?ppøÐAñ1FZšè?t‘äU\yÍ bÑâÇè]>ùˆ‰t4ˆ;æêõ”i¯¼õ~ѺMFºÚ*–ݪoíøÄÛ’ðõ¸_'ù»˜y{y½÷ÂãbžA6˜{³xöN­Ìw Al™Ažk—“>ùUñb§KEóòÊ5~ïÜ ^|#y™ä‘ípÁåâŽÅK1b_Ÿ&—Ÿ×¾µ>éLnS¹õå"c Í[¼"L¼BâÖ+Õ·ûx«v¾\<øÌj§¼=oè·ùt_?ʶ-’È‚ÛA~¼çmÕ‡‚X ÒÇ2Õn9n}lä©1Œû@Ç–†t==–PïÔ¨íaF¨s0‚€ü ´éo Cv‹ÆáÞQUž1à+±K‰òÊZÑöAÑ¿‡»›ÄÂtx\IÒæ<µåi­L9îÛUÄC³È‘îP‘Ôf}€D’ulP! 5qÆ×‹nº$ºØ(ž4ëþü¸D÷¨’„ð_rO6‡gçòƒAÊ순¹K¬ØDFYûB–ݳ«Y,:½¤ÞÁHa/Ч¶Df Ý6úàzqw0]f)F)%6:à‚QKúnRo‹FÙ5ž}C¿×,Sõ[²>¸õ¡gÓd¿w5io~Î^ô’ŠjU±Åªò”ÝÕùbJßJUãuNùÁ+,û¶m/‰ù†q-ïÙÙ¢O, D…•ã˜ö=ÝQÝ÷‚WÚjHäÀÀ5çÞÍî ëäc$¾È_¦ª§í¨R›ŽòëÓaQç¿­Þ†0~}MRs9ts)æ!·ä8¸b{}Qá…Ö¶vÌ>H¢äŽšæ6Q¯EÅÍŽ­T™¨kQ±½2xGN=eWS­(3ŒKÀµC½;áj òÙݶí^ŠùN žOÞn\ó”›êsûš&íá»DŽñûcþ±Nõ`p-$E±®:#5bv RZ½¶jbã•å[ÇÒ”ê8>&Ù´ÃÝ%Z­Ã•}Š3¢±#ü´Çhçäв$»þgk;çooc¤ X-ˆ´eŒ[¦ÓmÒ¢9 “Ì­àOâ94þ‘uÊS¾q‘«‚Ѻ!y¹¶z0—¼ÎµAŒøXAìÙþÙ¿òªzÑkrmYŒ!YÖh útTþ^92Ú^ÛÀ€h¬H»e#)V‘Ì`Ùä3Ô|ë;9º5R¡¦½¬u•—AðÛ{h!Û©¬F´aD¶2ƒÏ´¬¢.Ô~…×ÛÆ(®ÿÃ»Šº 2Wx}m—zŒF×Té]£ýÅ+¾üù±Éa£æèkžDÆïH=– ß œL€m|]”§.‘deƈåÙ¶n—]:ÿN޶F±bÏï‘ũ –•sN’íˆöŒKž÷t+Úš¸3Ƴužϸµ{ OȲÄÇκ_ùðå/í¥÷€ß}"]­ê¹‹Ôé¦õ~kËoÅMiO>ú}¡˜_ó’8•ß/âø:Ž´_#aù/ Føk¨æ…%$9î\£¢§#Ž%õ«ìõËî2DæBìS¸» FZ ûš0MÍþ÷çgŒú~/F”õÚŒm=ÛÓÃò}X&¿¦Þ³òôñȱ‘Í%Çøwî°´GÜÜ´(·©…ù¢/ÇŸWt,Ì¿¢mÇìý ê˜ØÖFJ§g³õK0™Ug‹>_IsÈIóßÊ>;íDOðë_ÿÚ©By9.Õ">{ÄG0æØþáíÝ û†¦LÁïi3gÀ§¦L ßh}f ìļG`ll 嘓¦NÏ̘ŸŒYÌ)'L‚“áÖ’”4áØìØ1€õÃϤI0uê)0cÆ4¬mîÏÈÐ îßÈͤISaê)ÓaÆ´)¹¯ŽÀŽ÷{±üɘÏ$8eæ'›¡½;``¥Ÿ,ÅŸŠég`ú|ÒÉrd/ìÂFGaòÔéyË£‡@|„³ˆŸ½}Ûaxò4˜<:“¦1×ë:62#Ǥ)Ó . IóÚ·öâxÁÞ3uúgàÔÏØô‡â52´¤<ØGݾ= ešfUÀО00ŒùŒLy:æ£ã®e:²Þß=Ó§OÂñ1 NûÜgãi ††F™¦M9Ågú´épÂ'?¥U§$?p,½ß?ŒMv1:uFáÀÐà ìƶ•:k*LG½·¿ÓzíÝñ>Ž«é8®†aÒ)§u\ÑrŽÔ±^L¦‹TÝLå„a¿Àñ©}Š0‡c_ûpï^ÊŽýI§Ì€ÏŸš_‡8öIVN™>>;£q>îD;`lt2|ª€yX«îxÿ°ÄªP±ìíƒ}þ\?¥ ›ïÃ=0‚óå$9_žr*|Ú0_Ân3eÊtøÂä“Q†Öþ ¦_z¤«Ûൟ]R¨xGå}vz ÀªXÚŽænu[I딨óSD‰qÝðäMpÑíÏ8EU· ÂÏ.A}†vãî¬=¶íi¡ù8Xyü@Î!\¿íÄùÛ±g©¹ôcv·]»—h¾+@Þ‘¡½0°_Ú/rΚ3ÏÀuO“Ò€~øT©úc¸$ÿLIêáç^„[L0ÝÞ½0èÏû3áŒæýx[ö¿$¶s<³wÁ^´K&£]2ŠvÉtƒ]2öþópɯƒ 2EyŒ>• ØóV—0Qþ:•¤ðtC’ríô`%¢®ßݯü=3O;5ÿzËr àÜ€Û67 zî[ŠÑÆàù;/ë–8½p»WøÁÙÊÜVW+8²nšz)83|º_û ÈËÐnÄ×ÌÒ2}&®q“,˜½2-m€âùÑtA`/® &O–>ÚSâéiKù½êÇû.F_‹WbÒ»“`[2]dQ©ññïXÎïõËŸd F—#Ú›“¦dçæÝðÐwNƒŸ¯ÆÔÔ ®žÈ•—|#ŸË”êsíâ}û³>[”ò3gü |ÊB•êò±_EǃüBý·kÇ^œkñƒóÂ\û}Ú`ß‘RáBoÿLCÿöú_?Z+¢ß-ëßž9åd˜q>39>–öˆ•襘W ±d À”ZÏ&™ âj§Žô|Uʺh+èGq懂ŠÊ׋e$Lþ›’¬Gbù¹òˆbÓ?K=óˆ\ÜË6:ûZ¬çŒÅZ;i=|”™â6|qr³å[=ýôÓpþùçÃÉ'Ÿ 'žx"0áË¢= !| áCÜ¡ÐC\‹ÂÆ1É Xö©'œØMÆQ .z\‡áðÁýãR4ÊØ p”OÁ Ÿ8Jè6à4Ç%‡Ñ¹‘VÌûã1®4E`’ò§9¤ü1xéžKàê_n€Ê¦^øÅwÏ ·ñ1#0áÐ _Høš1áëÄ`ñB`VÜ4æ9 Œä 7§ò“âÇKZ.—(&#›—ÃÔÙ·¸Yfj‘8q³C°*f±òŠxh+¾™`&4ï¯YþÏX×ÔW?ÞwÏ=U«ÏÈÔ[eõCZÈJ ׋øZüã¸Gà3Höš‚O¿øÃ0G¥šŽ®Z²4Œ@ xí¬‰u+¾Æ±½ !|ɇ·rqññ~Œ«$Ž#Ø\ô¸! >ÑEøÃíœð‰IpF†ã#08â÷‰.ó'Œÿ9$åKJþØ–0ùKóð(mƒ ƒñ‡8–`Â×±Ôš\F`üÚ+˜?üåjWˆ£ð2~ppÉÇc°cí³0ïÒy°:[oÜž~2ÞdG~hq\õB®,#`Bàýçï„/^·${© ;¿ŸuªÝk÷æ—à¿Î¾Úˆw,¬ï‚Gpž)›Ð¹à0 Üê€?Œ@d˜ƒ™GKt¯rò%FàxD TóÃñˆ%×ùA€×NÇHC†«Á„¯0&GìL!„/)Ì(’½öââBFð˜hùfƒ|Ã?Ç7âÐc¼@>¾{ÁQ^û?'J²× ’öÀF`b"°m…´øÃ‚€Œ¼*’HuuoÙ ›;w|úL˜uv!ï;R ßÃ=0áëèi –„˜ˆhQü ¤¡±÷øþ‰÷`òsäFàèC@hçÉ—ªl‚µ¿ønv»4ïì8|Ó‡nÕ6Rr‘Œ#PRvÀC}~îî4›-))ÜxY?U ½í¿€8±¬âkøû'øî+%…þ8Ï\úSäVŽòe:þ0ŒÀш@鿇£±¶,#^;å…h¢ÞÀ„¯ql¹B _RDIö;r'ñk2¹ŸÂ-‚8”í8v°£¬h1†ÛÂÎüñQ&‹s\#pR&ct›ÉŸDxq~\÷…c¤ò’ðu‘’,ÎFÀ„€$zIûlÚ Hte½g‚ˆÏ£¬ýÕwàÒ;V;µ«j€»¿ÍÄÆc´©¹ZŒ@IZû+˜~é$ï 4tÔAf‡Ä$ ðá1‰À^øÕE3ášÈT6@Ý/2㻕£‡õÐZøÎôKݨc©jhÿYA[µyÉù›`ŽFÞ‡å à–%Ï+TVUUÿõ`ÃÑ–¯áËç2‡ø;#¶ÇãIIðšŠùü‹½ÉÇcà:O(J8?L(XXF@"Àk§c¶0ák›6ዊ) _Gküiàʇ‡lèÒãc $ùÇd þq¤@-%£yqD¯# <—w„ZVÚ Lû:B€ObND9™ä5A‹Å,:#»·Àº-»1ߓ་/S§½Î`Že0æ†M[àÀG¨E>s|yÖÙGÙåXÆœëvÔ °{Ëزûvþ“àŒ³¾ gŸz4G`ËÚu°Û›çÁ%¸FàøE`lh7toïGO†“G÷Á>øœ÷åÙpê´äÑ8ÙÏrüö+Zsö«P4ø˜˜8”r~˜8(°¤Œ¯ŽÕ>À„¯qlY[Â×8ŠÌE3Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0ŒÀ8"P —À`='à?« ¶Œ#fE+š _Eƒ’3bF€`F€`F€`F€`F€`F€`F€`F€`Ž lùVO?ý4œþùðÉO~>þøc&|Ùô&|Ù ÆiF€`F€`F€`F€`F€`F€`F€`F€`ã&|cÛ3ákÁç¢F€`F€`F€`F€`F€`F€`F€`F€` ˆ@RÂ×É'Ÿ ¼¥£eÃ3áË8NÆ0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À§ƒðuâ‰'ò–Ž6ý‡ _6¨qF€`F€`F€`F€`F€`F€`F€`F€`FàøE€ _ãØöLøGð¹hF€`F€`F€`F€`F€`F€`F€`F€`F`"„ðuöÙgÔ)SàðáÃá˦í™ðeƒ§aF€`F€`F€`F€`F€`F€`F€`F€`Ž_’¾>ýéOÃ'>ñ f—Mb— jœ†`F€`F€`F€`F€`F€`F€`F€`F€8~HBø‚O<<È„/›.Ä„/Ô8 #À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#pü"„ðÕÚÚ “'O†?þ˜ _6]ˆ _6¨qF€`F€`F€`F€`F€`F€`F€`F€`FàøE áëøƒCø:ᄘðeÓ…˜ðeƒ§aF€`F€`F€`F€`F€`F€`F€`F€`Ž_˜ð5ŽmÏ„¯qŸ‹fF€`F€`F€`F€`F€`F€`F€`F€`& I_þóŸaÒ¤IpøðaŽðeÓöLø²AÓ0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Ç/I_áëСCLø²éB…¾Æ†v@×Ö`N†óSçÁ‚Íkß÷¶ï‚¡¦Í„Ôß} RgÏÐÅÙ ›;wúéÆÞ_ «Þh™äôK¯ï§NÕîÙ½Þz}-¼·g?L™2NÂ|Ï:÷¸ð¢ó`Æ$íVíÇÐî-ðNÛ»°k3†“à̯\ ßH “`¶l脃0>{ΗàŒiÙLâÈ5´6lÜùëNúHæ/«{|ý²oÂy§Nq~kÿHÞç VÓ« kÞ€ [v‚L=íôY0çòo£,ÙTc{amóØüþ^? fž}.|c^7d 0»·tÀ†wÿ;‡°¦'ábtæù³à¢óÎÀúò‡`F€`F€`F€`F€`F€`F€`F€`F€(-I_'Ÿ|2¾’4O¡„¯ O^Ýþ¼STMcüåîë`ɆpÉéŠzøŸü<Ú—J—†¦ÿ ×}ï?QªªÚïþvö÷^xþ¡ŸÁu?Æ¿®¤ ºéÿƒŸ}÷<ý4’©^Z<®¾Ï•M»˜®„¦_œ ßûÞíÎétu¼ö³KœãÂ䃵ËïƒKoù¥–-ýQVÕ5wI]ê£òNCS{%ü¯‹®€%ê²Tß5 ×ÂÀÕ_ú!¬öÏzhìþ=|ÿlÅúÚ»ùyXtÃuðkînª Ôµüøñ·u—#3Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Å@ áëÌ3ÏtAI9Nø±ÈV›²Ž¶4…¾nBÂWŒ•‚LÙ×Ö?ÏRºº‰U.‘kÓ¦t. Š€µž¼î4ÈòÉœ‹é²…pÙYïþÇ-ïʦ^øÅwÏða\‹D´Kõ„Pþåýðë_‡ `$|5ø„¯ür½ÿü=ðÅëÙ+•†ò˾ w¶À3¤Â™Ì÷'.‘L f¬s*åÕ¯Ÿ ËåV¯Ÿ¸ž©ƒá†c45üŒl€›¦^ªRPV~œ|pg Ï2h~RŠ'ædÏÿF€`F€`F€`F€`F€`F€`F€`F€`b!`Ë·zúé§áüóÏåëÄOd—MƒØ¾œH^•É+»‡à†wÂEó¼8Vhl€K0않våJ—*¯†gÿå&8ÓMš>¦à÷îU‹á´ïÝ—¿ šº—ÂwýÈVcðÇå?…Ënùuözt‹àlùkd-’ .õIP ð@f–{ßÐfXüŸfÃ}«ÝŸò¿NøRËäµ°\»á¡‹NƒŸg‰lõíðÀRòVç³cÍ“ð…+ÜÈaeІ$«K²$«ÍËÿ fûò”×´Àã?ù¶»Ýâî5pÓiWø2ËÌhÞ#ï¿WñêlÄ/…ãÐÚ_ÁôKïpÊNW4`µŒE ÆvÃs÷Ý?üåjçzY]<ýã`$4çÿcF€`F€`F€`F€`F€`F€`F€`F€`#À„¯ÄÚg`GøZˆ¤«G]Ò•_ô,¿i:Ü’ AUÕ2w{ ­}‰J1j!tŒ> ³²$17i ]3¦›ëmée¾~õ™pÇj÷wmÇ0Ü ?Ii Œm'ùï0å¼sá¼K®„¹³x[G`þÏ0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#À0Œ#Pl’¾¦N r3GÞÒÑ¢el_”8E‹Ü²âŸàKóÜH\Þ=CH~šž%?¥«p«Ç»Ý­ýt¥ë:ŒÒåntH¢wù7¸ï?'n¯èF+«i‡§’‚µ¿ÂíïȦl솾ïÄýÒR®ºç"øÞ/Ý0]žLò†¼ri¹üÿìÝ|TUþ6ð‡ô„ J Rz]x)*(+EÄâ"º€eE±ƒÊZP,ˆ¬Ë_XTtÅuAl €,ˆˆ!ô$tBI :!“ðþÎ>™If’I&“<Ã'ÌÌ­ç~ï™™{ï¢(@ P€ (@ P€ (@ P€ (@ P€ðœ_ž³t{Iå | }y+6<ѿĺ’Þ‹®÷­Ö†»Ü¥£þfv‚1’å´uª_ À'7jËžõÓ)Ì»:Z_–õM’.$—K’¶·¼;¶ŒE‚)„¦¦q'”õÎî|Ü›`÷Ò%áÎЮøX[á$ìÌ_ŽžÆIÜY¶;/]N&òQ‘á¢\éë1¬É5بÊ3éd/Ÿˆp­lü (@ P€ (@ P€ (@ P€ (@ P€ž`à˳žn-­ (@ P€ (@ P€ (@ P€ (@ P€ €k |¹æT)S•/ð%Eó¶.þº7 òOá³þŠ)ol4–QÂWW ᫲ÂOjýñ•lu‹q^`Ö'[ñø˜î•†¬²OmÇ¿†9[5m —Œ1vW˜Š™uÚ[&-ÂÒçnF›úzìY÷.ß1ß¼LõÀÀ×¥w¢ÓCÄ Ce[—¶5ûÔX±`zOuåh¹=üÉn,œ˜  (k›­»¢t­…¯,•–ʦOÃÐYáµ{F C‹†Ðë‘}áV̽Ë\&ëØr~SºÙ|H+W‚´Ì¶ÛAËl–­à# P€ (@ P€ (@ P€ (@ P€ (@ ”-ÀÀWÙF•6E¹_¥”èpoÏHmвÂO¦Å$}:]ïxÏôÔñ}Â,ìþe¬ú*Lÿß4liÅË~ÆIÓÆàã÷ I)w_VÅÆJ«bÆŒ•ýbåù4¬ZÕcÇÚ®û£ýÙ¸¹ðcÔëzŸ6ã@—¥+JÇãï”®1UØl ¶f¯BÙ^]êjôm?¶13Å‚t/™-ÝK¬ý­·ßÑœF P€ (@ P€ (@ P€ (@ P€ (@WørE©’¦)OàëM;ÑxãBÜ2ÇØ–©l “ðÉ{/cbKÇŠ9IK%ü4E›âÝÙ¸×:­ešÏxü×O1wÖxo£Ý$àáwÞÀœ{¯†!Ff;>Mæ{~ÖK2ŸÄ¡T#[ênÌØó9öBÛß¡Í0é£ýX~WœöØ•r鎯ǬÉ×ÀÜp™qµC§½Œ×þñzFebéô›0ŪÀj'a¥y›?’çwÙmó ·u2†ÛT@ì®8«›¬Ã2Þ6¼¥Kûo>?OlÆâï0í…GðÄÌ»ÐÎjq:ñ5úOúh·l¿¡2ÛyùŒ (@ P€ (@ P€ (@ P€ (@ P€® 0ð底ǧ,OàkÑÎlÌPMHér~! ùÒ­`@h=4‰Š4vµX±bêr2q!+zY.d‰ ££.Ý;–uÓët2y€Ì„„fÈ”À[++pælù™iÇ‘X…ù¨ß‘v…Ñ‹ƒNÖãj-Ê3Ãõ:ädg#+_ 44õ"#«fÝžÙ.… (@ P€ (@ P€ (@ P€ (@ PÀ‡øòâÎ+_à낾µµUÅ¢?Ž¥óßÅÖC[±5k~Z5Q6EÐa願blˆÌQ÷‰6“ó (@ P€ (@ P€ (@ P€ (@ P€ (P¦_eUÞ>øÂqÌ¬Ó oy&-ú¯O»QÒÌ–^—Žß{#2u;ù0R ¢ -…Už6—L P€ (@ P€ (@ P€ (@ P€ (@ß`àË‹ûз_@ÚúÑâš96‚ HJJ²öÂO§ðìÕÑ6Ãø„ (@ P€ (@ P€ (@ P€ (@ P€p_€/÷Í<6‡«¯ß߆^mÔÖûòÖ x¢5èÒѨpüKñàà)XíH%a¾Xú:nîiÛÙ££I9Œ (@ P€ (@ P€ (@ P€ (@ P€([€¯²*m W_ºôTü‘š.åB»î=¥ÛÄJ+R9¬Gúñc8“q q1-u£Û¡S»(°Çr’r6 P€ (@ P€ (@ P€ (@ P€ (@ 8`àËJU r5ðUUåáz(@ P€ (@ P€ (@ P€ (@ P€ (@ê-ÀÀ—÷_^Äçª)@ P€ (@ P€ (@ P€ (@ P€ (àƒ |yq§1ðåE|®š (@ P€ (@ P€ (@ P€ (@ P€>(ÀÀ—w_^Äçª)@ P€ (@ P€ (@ P€ (@ P€ (àƒ |yq§1ðåE|®š (@ P€ (@ P€ (@ P€ (@ P€>(Pm_3Æ^öA¾ŠyÅŠÚ&L˜P±qn P€ (@ P€ (@ P€ (@ P€ (@ P V¼¹*HÛΧ'»µ½Ë—/Gll,ÂÂÂàçç‡:WäæÖŒ›g÷ßWžÙ}zž/¾øB+ÿ-·ÜâÓÛÁÂS€ (@ P€ (@ P€ (@ P€ (@ P€U#ðö7aÚŠøªo›µ0ðeÃÁ' (@ P€ (@ P€ (@ P€ (@ P€ @ |•T™£øªL].› (@ P€ (@ P€ (@ P€ (@ P€5O€//îS¾¼ˆÏUS€ (@ P€ (@ P€ (@ P€ (@ PÀøòâNcàË‹ø\5(@ P€ (@ P€ (@ P€ (@ P€ |P€//î4¾¼ˆÏUS€ (@ P€ (@ P€ (@ P€ (@ PÀøòâNcàË‹ø\5(@ P€ (@ P€ (@ P€ (@ P€ |P€//î4¾¼ˆÏUS€ (@ P€ (@ P€ (@ P€ (@ PÀøòâNcàË‹ø\5(@ P€ (@ P€ (@ P€ (@ P€ |P€//î4¾¼ˆÏUS€ (@ P€ (@ P€ (@ P€ (@ PÀøòâNcàË‹ø\5(@ P€ (@ P€ (@ P€ (@ P€ |P€//î4¾¼ˆÏUS€ (@ P€ (@ P€ (@ P€ (@ PÀøòâNcàË‹ø\5(@ P€ (@ P€ (@ P€ (@ P€ |P€//î4¾¼ˆÏUS€ (@ P€ (@ P€ (@ P€ (@ PÀøòâNcàË‹ø\5(@ P€ (@ P€ (@ P€ (@ P€ |P€//î4¾¼ˆÏUS€ (@ P€ (@ P€ (@ P€ (@ PÀøòâNcàË‹ø\5(@ P€ (@ P€ (@ P€ (@ P€ |P€//î4¾¼ˆÏUS€ (@ P€ (@ P€ (@ P€ (@ PÀøòâNcàË‹ø\5(@ P€ (@ P€ (@ P€ (@ P€ |P€//î4¾¼ˆÏUS€ (@ P€ (@ P€ (@ P€ (@ PÀøòâNcàË‹ø\5(@ P€ (@ P€ (@ P€ (@ P€ |P€//î4¾¼ˆÏUû¼@ÎeöŸ=ýé'q@þ2ós«Å6û CãhtŒj‰ÎMcм^dµ(WM)„¾¸‡ÒÓ ûýÜIœÊº€+ò7Ï „… “Ôá¸&-йÉUˆ­ëÙÔà¥edçc÷ÉtìUiç‘[Pès[[§N´i\ñ-¢Ð¥E#ÄE7‚Ÿ ã5E èr2SþÀ…Cò—œˆ¼s'jʦUx;üCÂÙ®+"c»¡QÇž“cÞ(@ P€U- Ó“ï©s}uÎ.çRU¡V¬/24\ÎûZÈyŸ\¿hƒºrÈ(@ P€ (@ P€¾#ÀÀ—÷_^Äçª}ZàÈ…³˜³îSdä#¼^}Ôˆ@PppµØ¦¢¢"ä^º„œKQ¤×ã¯}G`T§>Õ¢l¾^ˆ<ù‚þùõŸã€ýBCɺa¨#ÿx󬀾ð2r.^DNVýüñôÕ·¢[óÖž]I \Ú–äSxî¿[P|å êׯúòÞàs[zEÊŸ—“ƒKRòuÛÏß8Aþ>·-,0ì .Ç//MEÖÉ„Ö@ýFQ ¯g?Y­}^TXˆì È9ŸŽââbô˜ö"b®µÜp P€¨zŒÜ,<+çûiò™]7<á‘ ­ú‚Ô‚5^.Ð!W÷eg£¾„¾_>­"›Ô‚-ç&R€ (@ P€ j†_^Ü |yŸ«öig~øÉ—ÒñÿFFd“êy1Rù2¶|÷-Î8Ý>õƒÃ|Ú¼:þˤ_°|×Fô: m»t©EªñeÈͺ„M«V#¬xï¦jüöVdU;s7.úüCêbä˜?£nÝšÑ*Ú®¿cû¶íxê†~¸¾kÛŠq^ T =Ÿ¼‚#ëVàO·LFL—îÕ¢LÕ±y¹øù_ïàâÙ4üù½_àX=‚õÕÑŠe¢(@Ï üó—o°áÈ 9Í[µöì¹4‡ÎÅæÕ_#®a3WíÓ÷ý÷]4i„þ×]gÜ=N|ý_;]€ðn×¢{¿¦ÕbûN¦¦â }½9vZEDU‹2ùr!Þÿm-ÖNÂØ©SKlFqúlÿ*hÜ=oêÀSøâ€óøcî[Ø}è1ë!$Ä5ðÊFìþå¤&&bå¤'½²~_YiaQ1†/ø}ú÷E^=슭CêÊbïáL@—­“G¹GHC4h6½ú⪸vÕ²ÞËv}ðîûøë®˜ô'-ív,Ÿú ÀŽ>ŽìɸaÆÓ6¥×g×ß'!5Gµlwº,y‰ÖG³æÑJ¾lî׳-¢jY#w)Û·`ûª¸îŸëÂã›úÂ' (Py/üô9Žfãš[n-±ž÷• ñØ€_¾ÿu2.áŸrý‚7 P€ (@ P€ |C€//î'¾¼ˆÏUû´@ÉÀW.6_ÛŸÿ ÄÎ_ƒÅW‹ícà˳»¡´ÀWÁ®ðXßçe…ýñhæghîÙuWÖÒrRwáÀOÇÑzâX4¶+sqê·x(î~êG¿ŠWÿs3¼Ñ¾ _®íýÒ_9Ø|{>ûµ´eÝé?½…„vv¡´Y+HÇÑ_DF`_ôþS;GS¸5Œ/·¸8±8 |åXƒÆ?,e Zañ²ç15Á;áÛR Vi£øª4Z.˜ J(-ðÅó¾Rà*8Н rv P€ (@ P€ €øòºi• |™$xO÷¾¶ÝÔ $¼¾ÓdàË=QߘºÔÀמOðXÕZËp<‘ù>b*˜™©‘\lìÑ_îÆþ–ˆk{Ø…2·ã½&· I Óç­5øË4ïÔk¾\« e¾~×ÑÃg`ðuÝ ‹Õ¥%"ñõ7‘lµŠÛפcP|¤Õ÷ìYŒGGÍâbÁ÷¢¢É2ðåž?§®þN_)? ñ­ïÊ´Âã³oB‡Â,dI{|û~ûþ|̼a+V}Žq1Aæç5ù_5yïrÛ(@ T_R_<ï«´ÇÀW¥ÑrÁ (@ P€ (@J`à«ÒhË^0_eq 8ðHàKŸ‹KÇÎ ++ EEx³æhÜÜ.pc·ò¼ã©8wZúx DPh$ê·lŠðpÛp|c _Ž]Ê;ÔÓ¯‚ô³¸x6ù¹²KÔCDëV )¥tºK8»ÿ0ò/þA†:Ó@ꌟÝ,ź\äe^„.0lá@IDATO 04 ¢êÚN¥—q¸„Í·öÂçT¼aÃ6\?¨ uE@@°šM»çœÇ¥ìD:«›.×c½¶lÿ`­¼Å™g‘~T¶]¶Em{£ö­ì¤*3ðe»ëœ=s5ð•0÷L¿Ã:¼—ƒÔOǧß7.úI¼pt.Ú­¨¸ y/HWs…RGä=HuÙÈ6ÙX,Õ*/i1ž§_/aîšÇP¯H'ïqRíw°>é)G‘+•À?´êF6EDÓÈ’õ™]:Úí >õu²_C°cûÈ·ê¾ñà£Û_j›>øñ×°vB[†Ìô38zFâaÁhP7 Mš4Dd°Õdj}Ñeèõþ‘Ật;W€Àð0DG5DˆiRyü0V}zÀ4¥ù~àßãöÉqæçÖø²Ö¨øc¾rRñã8ÜŸÃ?ø £&÷(zIûz æß4ßÁFLĬìyˆ– XήoñËÿÂÆ¯ôÛ7úÌúp¢µ†›r±cr,ûÔÁâdP¬´R7Ck¥Nº*•–ëT lÒ®½èos§ ?ví÷¸jÏ¿°øû•÷Ç´Jw‚¶ëP%dàËñ~²êràëïÛ1}JûÙ‘ºdΗ-·aÆøk¯Òçìù?,zÖIŸµö·áÏaö«Ï Z²ª…©Ë0óš{ì§0>Çö~…ÖÆÝ{öçÅøpòÌ’ïýŸÄ“o=˜F–÷@¶ðå„”ƒ}V ìÀW_lÝ< =lšÇËÁ[ÓîÄ£;€QøZi |åÄ[ó^Å£ßZZ3Á<8÷5¼2Ò Óáýið &`õ3ó_¦ÉðÚ§Ëñ@\8ÿü:[ 7O€¾X¹êQŒ²jUìà/_Ꮏý Ò@¤í­÷xlš;}£, ®cËe󖼞)ßâúWÖÚ΃xYþÓ²ü’‰g¾ì¨ø” ªDÀc¯špÞçæ6T伯*©Þ\ (@ P€ (@ PÀ£ |y”Ó½…1ðåž§¦€I "¯Ì¯`ÎMo›…>3îŽü‚í_›Â\ãðè¹…h­sd2Ý|Vïzl1Í1d†vNmý ÉòMëÐÿlÁøÑ-Lcmîø²á¨ð¾ôǰ:tÖ™J£ög7àЛ_™Ã/ ¯%Ý‚Z9g?›Üi Hõ™*uæÌ>©3*Øu7^(œU]2¿~AêÖÿ—‡ØÑ1R·ÖiõD8ñm,Zög “`Çý±ì}ã¤vwÖ/SW¥ã¥ËÇ¡V]>º[Mþ­W;zœ”ÏPµáCþŽ—œR¢ @¾¬Õœ?®hà ¹Û°¤Ë@­ ÏØYñÐôAÚÊ.üøæüõMãŠ;¼5pâk$›ß²>Ç› Ç£(u…¾îtR@KàëìªûðâC¦Ê—€>wCЉ زNu*7é ò%é ÒÔN_þ_sÊøº„×§Ý…ÙÖ¯‚“x`ÀƒøÐHß{†uƆOךƒXó–-Å# ªõP–Ïœ€©%r›ñØ´ùEô >†)}Æ mY­0a|W„e‘®$ ‘®Õ?­ÄˆHCˆëÄÏ#v¦¡µ15ù„‰£å d7V˜»‚MFßúÚÂ` |žþœÏkË}î Ìxºö8í½™˜ÿÀWÚãáŸQ7Å[Ò#'UZôhÑá%ÅЦgàKcðØž|Y‡·Ôþ#ûS»éNaãÄøRk`©?>÷Ú©WÎü+r¶«‰¤¸Y_<"­t[?’îÏžš¶k¤-9°ñÝ=hwë0´¸ª‘¹ž}o^{@ÆîÇßóŸ@csãIç¥/C—Žã7ïÄÐ~  ºä“þúà§M“ ‡¯rÔc› ÿ£ÿŽg>¼MµíÈEÒ3÷བྷUxm8žÈ|1¦¤*ŠÜø28”õ…_ÈÁæ©øL¥û¿ŸM3„ïr÷`ãÇ;ÑnÔŸÑ¢E”¥^}ò ^Õº|O™‹(SµÜeìÒ±¿·>{aZ÷¡:%äî².}´úœðˆ´tÿh˜z¥½ðË«˜3ñ)m3'}ý¥Å!ucàKcà5H ìÀWé]:ŽšýVÞÜ {V¾ÞóT‚KZàú÷ýÕ^»äVŽ·žš†GÕ¨!"cáÕ ´|ÀOßNÁÀfÈÌÌAhdè­pAZÛúiã‹h kéóÒ±mo6ºõika“ÙÆYï Øñê­ˆ7N{bûÄN7ÄÏß7k§vÖŠcørŸ‰ŽõUxL‡5‹çâæT¨ÌQ«f_!ÿ£(@*ðDà«&œ÷¹½ ²Ÿ*rÞÇÀWWt®Ž (@ P€ (à¾<€XÞE0ðU^9ÎWÛÊø²¾ø9ù@ z·3'o4ÒCsoÇâç ­6=“?M,]êaª´Îô¶jÉõ_®[¹2eÅ_eìÏô_0?z¢ÖÒ×ÀÏÆí7µ²¹`î¨Î¸Rn¤®ÄƒqɤÃñ¨ªZ›UÖ®½Ò‚—}wŠÖã--|¹_­/ü“P×BÛPWæ/x³ÉD$K '%Iבq¶å`àË¥½ŒŠ¾tØ5{>üTZÚþ6^{‚K[õ±eø›„7Kë]jò‚ïáÑëïw¸ ó8 Á̽?Á¶Ïl¼=+å-ðæ5é¯ |iü¯F ”øj…y &£§ä·232ñû–ÕxÅÜec_i=k–´ž%]4J‹]J¨+þ¾—±cª4ýiuË9°'Jøª÷½ÒrÖuÒr–%ð5gÉRÌîc ‡çÑÝ„ˆ›jÏŸû2žÑá–^ÍK¶o-[µ·ÅØN´ñýgqý;*À5‰ÛïFGm™gˆtUù°mW•YI1t6Éïÿgîlb^—zÀÀ— ŸP€ @ T<ðUÎûÜßµ{,çŠîŸ÷1ðUEœ«¡(@ P€ (@ xP€/bº»(¾Üãô0”7ðuiÛxfÄëòíì#øÇ®°ýºU.Žîúõ}ZVb æœÂ÷=âùîtøÚm3¬©[»€/·¸Êœ¸â¯³²?ûiûóٟח؟–‹ê ¯¯‘nãQV±/tÁñ]øãßÿÃÉÃGpþLBêEÙ¿» 5Õ+Ó\Ž]¦±Ò“þÊ*SÉzluáô«xõ?7Û‰tÒŠY=C+fö]Gª²0ðeÙ#¥=ªxà+¿J _k-|-”¾¤u.ã Nmî5ëpêX22Ò³ÞLR¿b»Ö £“À—´öš´f»ôË?ðôÄç K‚Øë-úÉ*ï*7¾ ü¿f ”ør¶Ý}±â?31N E]À¼[ïÁ Æ.÷Ž·™iÓº’›¾2$ðeÝÂ×âOW`jœm° HÇã=§a±a.íÿ ÿ‚ñ× Àõ ͤÝGÃíôö£Ítéø±ýù÷­hn5½z˜sà š½+$˜¶Y‚iò&b|™[³š©à0¦ xTëJòµO—ãcË~¦)ø2Iðž ªR â¯špÞçþ6¨}d|•㼯ª¬å\(@ P€ (@ PÀ3 |yƱ\Kaà«\lœ‰(oà+óë˜sÓÛ"8 ó §ºG²ò4_5um‡]x/r¤½8 ÂXÍêð!_YÊ=°Â/ý1¬•§¹aÃN\?ÈØ£¹D–€•)ðubñT,xDæ=W‚RwØ„g̳dHýz^«_öcŒÏK -ës\¿w»K‹bæº=D¶ãG»í`àËÉsopÅ_DZºu[¬•ÕFßÿ žzâ:­EÁôŸÆó}ÙyaâžÃÜïŸ1XÍ­x9|øh^~þkçË2޹]ZøÄ¾Êtâ¾)àJàkð¾ÐzJ¬Š6M[¡w¯nѯ-"M jåÂ̓žÄš²†Hàk¡màËQ°J-FŸ~ -Ç ßÃb¦eKK~G^…æ²î?ŒØ™_ʘ¿àÄïã ‘b››9ÜeÕE£y˜9|f5 _V|H P€ÕE Â¯špÞWŽmPû¯"ç} |U—WËA P€ (@ P€p]€/×­<>%_'åk‰@y_9ÒÂ×,Õ¤{ƒléÖή óÅQ-|%¼õ=¦M‹sK˜/·¸Êœ¸Â/œÅÒÂ×*ù.½ìÏ¿”ØŸ–¾b¥…¯ª…¯µÒ*Ü ªÎ —:ó~‰:c.tŽ%;ãUÜöØp4Œª • ÈþõC<3l¾ƒÐ˜ã@—y™NZør¿WìÂ?[ø²ì‘ÒU4ð•·ëU<1î)mß>ˆ n'¼mÃ’.µÐiìÝâöécаQ=C½Úõž¾E¦·ëþ±´ÀWŽ´ðõ”já«¿m b¥mWqQ1>x÷}üuHWLúS—Ò&å8 ø„@Ù¯¾ØºuzX7WbË.àuiák¶´ð5oÙr<’`î«·Ä”†–.¾L3ê².`÷ž=øbéB,Þa:á¹ÅøhLK¤K _1ª…/é–uëVéžÑ®Œæp—£¾ø2óž ª¹@…_5â¼ÏýsWµ[Í×4ÊñC¾ªù ƒÅ£(@ P€ (@ 8`àËJU b૪¤¹žš&Pjà«”`VážOðHÕe£´Øµ9CûÙvê˜úêíxc–êÓì~ü=ÿ 4°€0äï˜ÿã”­‚i sò_N`Ê9ØåÀ—Ó`–%`¥öç˲?M]æiEÊÜŽ7›Ü‚dy2ô?[0~t Ës6VZ»¶D«`†1_Xw »´v„Ƥe¹Ý-å¹m×^iQ©®aaæÿ-ã­[s¿WìÂ?_æRꃊ¾ŠÏnÀûý†kÁ.à®Èy_>ô"aQ)@ P€ (@ P€F¾¼Xøò">WíÓ¥¾JÛ°èù_áÁþ¿a–ê^Ïx‹2uϯC²jC»Ýg²ç ©©»G üüK?ÛM£å>vtä~ý«!l1äU¼úãÍ6­è˜&eàË$á™{×_¥­+N‚\Ër£të(_ºnqH$ÙŸ¦ÛÀå?áöÛ 5ìÄ{3±à¯L£øþHhtI?Іi­sÅeX…°,“Ú>šˆYÙómª[V.mºø8`,3~.^Ýu‡Ô)'/™8gó·êq©þ­Bm6Á2cáø²Ý‹Îž¹ør6¿>lÑ?V‚¦›>_¶ïˆ ¦çï§böÁw­2‚r+L]†™×Ücx"-yÅÆ%!YªÕÍkÒ14>éß>‚çïÓ8^îúFB½,$­3½(¦âÙ”wÐÔØø_*>ªž |Ù†¯”M+ŒÒY§~Ã&éêQÝ&Ì}l&J|üî _ƒí[apD=lÚa>0ÁŠUŸc\L¶Ìô]ÒÚß=†`—ß»/^´¬SÒÅHÜz7:ßJ |åÆÍƒÅYŽ£ ZÊö-ؾj®ûçz„DDiëç (@Êp-ðUZ)jÊyŸtëx­{ç®9ïcà«´:Åq (@ P€ (@ê)ÀÀ—÷ _^Äçª}Z ¼/S+J—¶­Âç÷>„$Ëw©šGìÔ¿ã¶SÐÔ®áâô]X3}Ö}møXðúcìçÏáê›âàgh~ÄÀ—™Â#*ø‡'2"&ä,v<÷–½lâÒJØã¿™‹¡#,a/CÁõ8úÙëXqçÛ†ŸÕÖÄNœ…›ß¸Ñ‘(<½«ï¼M¹™.aÆ\Ü4÷F¤?Ýo¿9Q„ó,aBŸ·g%žìñ˜ÕhYæÔ§k]Šn»© >–VÇnû-ƒzض$çN=6_ø/ÑʘZõ)|ßc ¾Ù‡i©«p•1%`,_6»Ç铲_›oÀg–\¡ÕrÐçþ»1äŽ)hÝÂîÍG¦*<»«Š Vó&Üý6nzr"Ò_ŽÀÛÿ'- |55ï¶Lì˜}5–~šd³Ž—­ÂµC -w¥ÿ¼ŸJ aªûR›[ܸ}Öãè7DZ¨3Ž`àËFˆOj€@Ù¯!غùá2[øÒ(¤®·.Á£_ÚPÈÈ SîÅ£“†!>Rµ,¯ÅÒÂ×T»¾Ò“6á‰Å ±b‡=p<8S{؆­NËô¾¸kŒÁ2Ó\ƒÇ߃Å3G¡£UëdæÀ×{‘±ð:»®©Ó1ïÖix!¥V~»£šBe¦å1ðe’à=(@ T¥@Å_5è¼OïÞ¹kEÎûøªÊZÎuQ€ (@ P€ <#ÀÀ—g˵¾ÊÅÆ™(€’¯ò¡ä¥ŸE!B¤‹4Šë5Bx¸±I'‹+Ì<œ 9( @`hêEÕuô2ÍÎÀ—IÂ3÷¥¾ÊµÕ}â9† 0¨×¼A©ûúä¤g@—§‡XÂ"!8¤d)ÌÉ…ê«XÚ貌ףX¿’“Ks]ç‘™€`ë¡ý¶º[íç/ë9_e Æ—ø’ú û·°@"éÊz©j¶€P„5/½ÞW_˜›c¬W!6U$gõJœSçàŠB™­^ÓHëÐKWi( h(ïY(iˆðææçŒke—Žf>¨1Î_Ù@}ANg^Fdý dç!²a„ø»¿D]Þ%¤g!$Ì_>kŠÕ¬¡¥8¿ef^(YBô—¡¯ÛQ2Ÿ'o |yR“Ë¢(@WJ |¹º ›éjÂyŸ»Û`àÚ¾\sâT (@ P€ (@ê$ÀÀ—÷_^Äçª}ZÀS¯ÊF`à˳Â|y¶x5vi |¹¶kË |¹¶”ê7[øª~û„%ª˜@e¾*V¢ê;7_Õwß°d j²€Ç_5ËƒÛÆÀ—1¹( P€ (@ P€ @ ”7ðµdÉ´k×aaa¨S§ê\‘[yÊ<÷ãm¶ûoÈ+Ïì>=_>½ûXx/ ümÕ{È ÀÕãoöb)Ê^õ¡?váÍ›ñÖ÷¢eƒFeÏÀ)JøpûøöÐNÜ0ù.‡†–:-GzNà×µ?àÜ‘£ø|âãž[h \R±]óÒgˆëÒÿoèÿ«1[xéâ%|þÉg¸wXwÜÞ¿SÙ.nHíØùÎSÈHÜ„Ñ<‡€ s_¨µ¤”-ß½îkìýù\ÿö&×,eJŽ¢(@ xN`îú/°÷âi\?éNøû{¶õJÏ•²f-I]Ò]¿r%êcÑè©5kã¸5 (@ P€ (@,ÀÀ—w._^Äçª}Zàûƒ¿ã_¿CdTGG#¢Qc…”ÖéQÕmnqQ.]¸€‹é8sìº6k箽]KÆV])j暎]LÇcß|„€à`4mu•¶ßÃêÕ«™ëå­*¼|—ΟÇù3gq: ãþ„¿ôæåRUÿÕ/üaVÿžŒæ-¢Ñ¤iéÖMºK ¬þ/QÂ+ÈÊÊÆ…Œó8qü8qÜ}=šÔ+1%PÀ×ÎË1Ä–¹w£nD$šµëˆˆf-Z?Â×6£ÒÊ[T(ïÿgOãBÚqœI9€è¾#ÐûÁW+m}\0(@ PÀ^`WÚa<ÿãg¨×@º+nÙKwÇuí'ãs\Öépñ|2N¥!S®aüíO7`xlw,™‹ (@ P€ (@ P *ÊøZ¾|9bccµ¾üüüØÂWyv_åQã<0l:²?¦$bÏ™c(*.®v,-#c`«N¸)¾?B‚ª]ù|µ@)çOcվ߰ãd ò.ë|u3|¢ÜªùÎŽQ-0´m<®ïГ¡EöZQñ|µóÖí=†C§ÏKLÊ·o ‚ñ§Ø˜Ð¯®jTß·7†¥§€•@Æþ8²îSœKÜ }A¾Õ>4 4¸ª#Zô¿íFþ~<Ž1¹ðž ªF@…¾¾“¶º¿¬/¬š•ÖÒµøËEÝøf­0"¶µf‹¾µ´p³)@ P€ (@ PÀGøòâŽcàË‹ø\uÐ!#7 ùÒ"Eu¸©‹¥Ãê#ŒÝDUêîP]N\ÈÏA–®öu\©°Æ…¢qÝúò¨ŠÕÕÈuè ‹p.+W¾ *ò¹íSa¿Èº!Ú_Ÿ+= L×®H`\—y—s.¹>S ŸR…»B6E@[R©á»š›G PÀ'Š®ã|n6rùcŸJÙ_¡ò¹¯ÎûüØuf¥s¡ (@ P€ (@J`à«’K[<_¥épªN`þ†•ZKF7Ũº•rMµNໃ;ñá]xcô_kݶsƒ+G`Ü¢¯ðÄ }1 }‹ÊY—J T™@òê)­—ö}ha•­“+¢(@ PÀóü¶u9xlð8Ï/œK¤(@ P€ (@ P€V |YaTõC¾ªZœë£@Iþ2nûä„ãÓ ²Ûº’DRAÕ Ý·vbéΟ´îG¯n×wöІaõ*¸dÎ^[Îeåáõ»°aÿqDH·‹\߃;ÆÔVn7|^@/­U~7} Š‹ôþÆkíóÛÄ  (@ Ô6ézò«½¿bÅ›´M¿9áO¸¥ë „HëɼQ€ (@ P€ (@Ê`à«2T]\&_.Bq2 T‚€êpÛ‰Cø÷îÍèÓ2gs.â|^6nìÒ=[´»1«ôZ²È‹ù¹8"]„¾pG.œÁîÓÇ´ä&vŒ¨ðøÏž­øáà/ôÛ7n޶ ›iMëE°ÞÕ’:âîffdçãà™ 8$ûÓÎãÀéó׫në‡}§Îkᯢâ+è~UtlÞPûkÕ¨üýøNæ®5§§@U äž;‰S[¿Å‰-kÐjÈ8„EµÀ¾Ï"ºßuh9pê·l_•Åáº(@ P€pCà’¶Ëùž:ï;|þ4OE趘ØcüëøáÓ?~ÆŽ“)èÖ¼5Ú7ŠFÛFÍÐNþƒBÜX '¥(@ P€ (@ P€ÎørnSécøªtb®  K`«¨¸EWŠ´{½z,-)©{Õ¢’§Ý_)FvA>Îçfk®óyYÈ`×¹(Û©IKŒŠëƒÎMc `œ>‚ï%ˆs(# ­#› ‘´ÀÔ0, C ÷¡uàç/! È\uïïç'ÃÔc¹¯ã?õXÆ©auê0lQÙUðЬ@í;õ§ê„ú§ÝkÏUýPõBÕKý0ÔC]±®'–zc7­¶ ™¾H–c®o–:–%ú/äçà‚Ô« y9ôÐ.ä«‹ùí$ÌÕ^‚]QuëÛPä].@²|)"©ê>ã42eªÕ/S½‹ —e™ê˜ñ^êX€¿¡î™ê ¡þÉpUÍuÒ4Ÿi˜¥Îš¦S÷~RWU=U~Æ?í±DÏj{ý5Õ-¤2Ô/C]SõKýiõAêU¡Ô‹"U7d:í±±¾Y†¦Qãµy´iezÓ½š^=.²,3KwéÒŠWzvTØ+,(@B\Ð)º!â´ûF¨li)@•çHú%- ¦aêïdf6Ö AT½0DÕÓJÝQõGí{õX{ß’{Ãã:Z} ˜Í4ÆñZ½1ÎkžF=7³®?*h¦ÞþÔ0­~ÙÔ~>¡€ï \‘Ï+òZ½RT$÷VÆçªe.ó8y\¬¦‘qÅÒŠèåìLdeï/àrÖȰ9æ¬Û-úŽ€×Ômz•£»˜Ž´mkqjÛÈ—ã‘ðè6nÐÁõ"¸~CÉ_pýHÕ‹„_@êÈ焟¼÷בϞ:Ú½<·z\Ç/@žËxu\"Õ½öõ½ÝÀS€ @-0ŸÛžû›Ïÿ¬Ïù,çvrÞ&Ÿã–ë¦ó@uoz¬Æ[Îﬗ£®7èå3] ˹,×äœOý©ó>uÞ¯ÎùÔxÚ7jŽrÞgߊ³:Ç;˜~ Éò™ž,ç|êüO#«s¾FrލîÃŒçq–s:uì­]wÏö’ çxêÜÏðg<®7>7\£°Ìg>N—sFWÇêµ¼Nqó)@ P€ (@ P€¾.ÀÀ—÷ _^Ä窫¥€º«‚XûÎÇiùr4¯°¹ò—/ᘼÂËÚó|¹//PÕ´¦‹•ê"g B,_~ª.B䢩v/Õ°PÓ½L…Ž[Hˆ"Ø¡ƒZ¯º{üâ9è ¡º},Ðë÷…òX S÷2\¾ØÕI™ÔóËêK^)—!R¬]Ve‘õ«u…ªrH¹B¥ûHu_?$ ±ra8N‚g‘¡áËRÊò ù¦ ã–ûËbZ¨]d/’ Œá‚»ö\Õ½i˜ºønzlº7 “/Ø%è¢JäbµváZ»ˆm¸­†«‹ð–Pžåºáâ¹iœ„£d:KXÊtqÝ4Ìt±\žKàÊtÝt_/8ÔÔ2„Õ«²ö¥ªW*8fø!—t¹ÆPÁF §™g¦/% _>8 ;ƒG†//d:©›öөב24}i¢ê®öX‚sò@Â<†/%$ ª/L÷òXÒTÀMÙٌӦ ÐÆEJP²q˜|™QW…Ù _j¨ùŸ“ÕÍ¡éO=/ÐêM¡Þ¸Ru粫 µá–a*˜¥†©q*x¥M'ó˜ê–!¼¤ê”ÊHꙪk¦ “–ÒBO*0eªSÆ•ãýµçj˜<7?¶S?lë$áqu¾$ûž7 P€ (@ P€  }-ß¹A»:¡û`çVã1érqwùïðGÚ ®Å¢£zb¥[‹˜ˆÆ¼8_÷[UMýÂü¸tY¦º5Ùî$¶ŸHF¿«:`R¡Z0ÐYyT퇤#øàçD´nܽ[7CçÑ¡YC-Üål>¯yª.œ8Ÿ…½§2x"¿$ŸÂõ m0yP¼MW—5o˹Eå8²nŽ®ÿm¯»-ú_/®ÚyœQ;ëy.Ù‹£?}!­É{ö#ÿÔº•´ÏÇ (PûTëÜn_uØO~¸d:ÿsçǵO­æo±úA_Š´˜®º²ü=í0Îå\Ää^Wc`ëÎìB²æï~n!(@ P€ (@ T±_U n½:¾¬5ø¸¶ |s`‡ÖÔSCÇ×Vóv«_ÂÞ÷Õ;øÇu“вA#óp_x Zmš¹æC\Ó®+ní6ˆ¿àõ…VMʨ¾XþûFì<™‚…£ÿªuwê¨hŸn݇µ{ŽböèòŠt4 ‡ÕR¬üËXøÃv\n+N¼š­³ÕÒzàh³/JËT¿-œaóÿƒ@éjˆ·Š XùO䦟D¯û^ªøÂ¸ P€ðYc™çðôcb!Ù±ƒ<>»'+¿àäG>‹¶|ÑúàÏq½+…\(@ P€ (@ P  0ðåÅÍÀ—ñ¹êj#xú¨´ê†Ö‘MªM™¼Yz‰®ßPûóf9Ü]wštý¤ZmêUGwgåôÐ~>¼ñÍZ¡‘tûéè¶~ß1­ ?Õm#op$ðŸ‡0ª{;é’ÓßÑh«…—ŽÄå싈’.“yóŒÀåœK8#!Ý«õ̹ P€ðIÕZ¯êÎ/AŽßy£@Yg²3¡Z„Ð*®¬I9ž (@ P€ (@7ørËÓ“2ðåiQ.¯ÆÔ®øùáŠÜר›ôIVGº¶«S¬:'«¹·+~ud?ÊŽ¬Éû²æî¾ÊÙ2OÖ}©[WêøUN9¹Ôê-p¥X{­Þ…d骫€|4ñcÉÅ£Sjö‘Š‹œŒ \ÐÎÿÔ-oµV Ž:ßÓ xQk+7œ (@ P€ ªL€¯*£.¹"¾JšpHíP!/}h ŠkQë,r Ôÿ²ºBùFµ†\•Ž>$EAüF½v¿¤Kßz©ïzø¨º_ú¤öc¯ø@"ÁÐZô^aÀçø*†aü¤[PÞ(P–€Ê‡ø×A3¢eQ•_$ïÑ:ùO_\bP€ 䘼ŠBåü/€0 øÉC€t½^§ˆf> (@ P€ (@ xX€/ƒº³8¾ÜÑâ´5]@…¼ Âkm@Hý60Gçó-~©‹ý…á*ˆÃ_u×ô׬§¶O}˜SàrkMEÁòeRˆ§VÏåÔ¿" ÍäÖ€-á&T–€ä¼P7 Tè‹·ò ‚_å_ç¤(@š&pÅß—ÃÕy AHÃH´kß±ñÝÐ%!Æé{¤i1Þ¿/*½ì™HZ¿Ýˆê„A=cœOžs›·¤ PzÉDN:ŒŠ5ìËjÕÊ—Ÿ^>CÜrO&bË‘\\©ã‡Æ"!Æá€6÷Ù=›±/MRŸÒÓ_Ë× 6ÒY÷2z$oùI ˆèqu?D8›ÔI¹\,õ¨w<³GÍ1ßd¬G/ç›àúb«Ñ”¹»ÞD»3µuš÷ 6<Ò¯JK˜Ÿ­uóX±•^”ã«æã+‡Ë DƒÍѲU šEøÀ 1wÆÄŒÀfµ1çãðæéRÛ]¹•ï3Ý•%Wå4ÁÒó«êÊÑþ–yâvíÞIûp1S‡|™ 4²®j‹îÝЭƒóõ®·G£÷š(^Úp÷qMÔ¾ ¾ø\$Ev¡›ýðVƒ M\2Ãfö™ïœ·Tœož×U×äž_oîyùòÔªG}HŽùœòûf®F§¨Ò¨Oý¾‡Ò/Ë´Ú£¿¶(}êÊÊýý-´ïý¨¶"O^ÈMý ¿¥\”åÊùÛÀA$s¾¥G·mÄ‘‹ª›rq‰ê%熮ÿp­ò…*¾už§Î÷x«\~žW®/—NwxLäž½ÜóâÔ (@ PÀ$ÀÀ—I¢œ÷éÅÆÝª•+g·Hô½îj´ª_²Å›Š¾tÉŸ"ºßß,+½u)ÒÞS¥-ûäîû1ƒ Åæo8ŒéÝ|áË®\|zG þ¦edFbÉOЭÆ¾r±oÇ~ä6B|•µdV>ß‚¡V­{å`ó’çqË}‹-õÛÉ£;Ÿ_†‡¿Í.ø’ƒÏolŒ‡WËLc#å¿Sáê.®/W[:ÒY‰&½¦ÙÉLÆæ´…èì¥üAaÝ`¨®9Õ-eõë˜vãlì·+a‰§ ðécX;ï'_rïÁžcyh×­mZ&**±½Ör~Ãøúƒñ‹VZ8Qwsºá}ó¼ckÞ‹hí¥ýl.†‡øH·|ùêKÇ·½K'áÿ=ò­aäƒëpæ•«Oˆt¼Ò /ÇÞ¹â^×Îñ´9ÛpSã?öA¥‡°¤ÝÜ­QEƒu_!ÁûÕÞ±K9‡æîY‚v½ï׿¾îµXö@r.©|³ù_·¿Þyri©Öá(f4y>^úûtt®Î‡@¹‰øV®ÀWõ:f*ßqM¸´îe÷Ê<ô^|èf,ú_Y;x$Þþf.¦iSb¤§£ûCÿÖ†/Ü|3ºWç P¢ø#¯"2_¹'÷a÷‰<4‹G›ÆÞýÐÚ÷ѽô¨aŸùÎyK…w•Ýœ¿†|ó¼ÎnójùÓêôz+í˺ª.gU¯¯¶UC­u¯ü–sPæ9xeý˜¦,ýìß¶ùÑ¥g[›å&½öÝÔðâŽÓøkOÏüðËÕë )_>Žÿw‹åúǃÿ݇ÙcÚ–µA>7>èR¾ü8£ì¾nË¿kùy^~;ÎY]œ¯V—ºSçÇD5k;Ý1)mZž³•¦Ãq (@ PÀ¹_ÎmÊ“ux ~Ø™f5?Â"ë#XŸ‡Ìlë_®5Åð[—hM¡ü/=~š=·¼«5Se\ÿ ü÷Ðj nlUœJ~è›ÊHªdÊJY¼þÌwhÒùYvU¶dæ¾ïÕ „ |©›þÞº9ÿPa-ë[Â`tJº öoԚDZû þ—÷ Ú›¿G´ ç •À×z×_ª+‡ä“—dÙˆîÔ œÿ×jýž}¨º9PÝ”u³~ýužüÖ¼rs%¶LTVi ãµ þþ~8õóè=ò«™âqÝ´aèÖB.œçg"ñ× øÁf?ÆÏ®E¿(«Yªü¡?Ì Ç]‹€N/oÂúÇûZ• üuÊj!%êváoað¥ãì‹ÝaÌë׋“Œ³'ÌÁÖ³ÑÚ u³äxvHYaÇËiß YüÆ•>…º¹hé¨éë1,f¸%l8ácûh‚Í—:¦Ù.þö â?ex:êÿºr²ËQÓ2\¿gàËu«òMé‘nu‰¸7z ±WË1ßúªðÌÕ’¦Óãdò!d©.ëG#¶¥«á$÷?ÓÝ+—{S—÷¸¦¾¾L=F§~ó :Ü6¯ÄЇÜ0R{?ÙýÍw0½Ýš&òÌJ|ûÔ56?ª¨í/׺uÔã»ÙMpǻҰÜsk±yFo©Wîùåf—rn`}\Y{q^©šZiõz½©.Å¥eɶÉ9U‡X«s”ª.gU¯ÏC»Ó‡£ýp«àó9M')»úÁÏÔÿ&ã…1ÎZ/¶:·rvT ú´5ˆiy³,y0¾ÉZ‹žV?¼¨¬À×þ%Spõ}+´­q$;ºúY ¸ÑrîüÄwɘy3»J€©ÂEºÖ­#_·Ù%ü<¯ˆç­¥¯V‡ò¹[gÇD5m;Ýuq6=ÏÙœÉp8(@ P€(]€¯Ò}J{¾X ãa1=puÿö0ÆVPp>?®ß…<ãø¦=®Ãàöõm–WîÀ—´>q‡tÍó]gYœUækäk›ñÉ5°jn¾y!¡z}yY™{*c“|©yã|YÅ­Øö.º™Q•¹V÷}¯øI૾zåÈ…ß;¥e®O,åÿò =_m=w£Ë@òásæuLĦ_÷B­®iç~hÛ I?Š»nÖÐÿùÍ6­å‘À¨´Œ°º² ÷¶U[˜ú¯B¾æ¥hL¯KÛÞBÜ€GÍ#ŸønŸü²Õy7g׿Žî×Î6Oÿò¾ ü%NÃl/ •À—Î ìܲi§s 5Í["¾o?´ˆ´­óúœÓ8z伸†I _mÍ!¥ó©q.Oöp£ÖhŽ‚ôÃøã÷Ä2—g.ô8ŸzûS’‘®•AƇ£EÇnèc×D™/Ù÷GNgbëËýð·Ö0ùŸß`†4-£××C›Øf6¯7]F2~û%©ç³ ¯©-ZÅ¡S—6V¿¶·”4ãH2Îå˶6l‹6ÍŠ¸iöžÌ”—fKŒ¸q0Û’Yf”GZà+k+Æ7ºÆÐE^¿ØÖ§~Ž˜ØÉÆe܃õyo9åè²íW$ý‘Œìài¥É°ÿ:&t–}aßÕ†g¤âB¡e_ÙP=Ñ¥#%ù¬ìã@4‰íˆFòr¸tü°ì—íxrÀdC¹§½ÿI _……ah#ë,*±~륾NルÛàÙÆÇÿ¶½hÕ’õ‚Lݱ’y̲ m¡?¾ ›·ìÁEi ²I¯ë1,ÁºÉ5NØC{á\¶á½:âª6ˆOèŠ6Ý_šÊbºw½î—ø À–·FcìlC@kü²½xë¶8ÓŠŒ÷ÒRÛã½1ÙÜ$šað‚­—ð—–à¨ah^ïc %`Yò\c]Áåýñà~$ï;€sÆÏ§ˆ˜¶èÒ¥Z–¶ÍúLì\¿{e 8$‘1HèÕ±Í$ðU×a—ŽçË:´÷˜6hÝ\½Ç¤â]àÔÙ©«Rç›Æ KŸþhi÷že½ñ™ÇqhŸ”÷äÊ. oˆV±Ý•ÃÖÍ óÊþ9¼û÷É~Í5ÖDt{yhmó^b½®‹‡·aý–?ä•!¯I9–hѦzôCðÁehÙínmRÇ]:×—"ëÓ¶M& ’÷ÂÝѧG;›rªí9|Ê›o(åijýÑe]©ÇÉ)g´!ᯒ.´­G–ã±uàkäk8ñɧ­¾é’WJ÷ÚÓŒ+‰µÒMtocÂî¼—ê¤%”ƒû"ùÔYÈá“D¢uûÄËñ“³Í–bd9„}R¬ö]¢Ûv@—6¶ŸjÚ3GŽà‚¼·;lá«BŸénGX¿´’c¦ºrr$q’’K9vÔ]”ϽtkJîsCàë$žOÀK¦Ñ·¿ŽLA´éy‰{=Ö/ü †?«õ.caÝѯqµ±7ëÀ×ÛÛNcz=lÿ»Žœ”}X [UÝÿ4ýÚg(±| ÁÁ$9ö;tÄöد{¿hçèX줎ýÚÈgx¸¼“~Ù†=‡¥ÞÈâ›uÀ€þ½!‡)†›ì×][¶âÀ‰LíØ§aL“x¹B@IDATkôê'ãU*7ÊSV _OAú™xtÄ4CW¢“ÿ‰m3ú P/ÇʱöõZ‡ä¿!1)U>烵ÏùȦ-×¥“‡”Þ;Ç8e~y`¬›rx ï» ÑÁîxʨêäÎøz<,¯GyoSûC½·µŒM@_'ݪ[Þ#ZÉvÊ+!ãv%&iïûêXU$ôê#ÇíÖŸK¶«wyû]x yå¼Îêý@CÙœÏtk:—òú±¥gîÕ£òŸ¿YÞOC›È±²¼VsÏ$c÷Þ¤gæÊ«RÎÅZtF¯>g›Šíò¾3Î`©/%ÏûɱLq†ó×[ÀÅ3ÒÚ–´”,çªÑÿ_<™Œ4i20´ bÛXÜ-ëu¯žZûšÖéü}ÁO^÷ÅòOš¡ °]¿ÉËt¯•GË`;z/1Me¸w¾>GóºWl×Tò™¾¼æn½&råós7KWr¬-ïݵ÷ õ~rø\¾ìφhSâ˜@•×ÍÏî’›hâ0ðekó£,Ó@uo{nå8ðåÁóšøhY„=>ˆ©/mÒ òÆÏ‰ZëÒM[É5y[wé˜xMÀ©¤mصç$r ä]9XŽã»¡WBŒÓãcë-4=.­…¯³ÿ“ëCf›&Ń_$böøŽæçޤÄöMàpF–œÛ‡ ¨ž”«MgÄuµ\»°žÏr£½œ;ë‘´~#ö—sûà\{ËP4²úˆQ?¬;´g?RNÊq…œªe·êÐ ]d›ƒ­jÿ8'û÷îEª(+u«+×âô’îÙt”ørçuëîû¨}±íŸ[ÞïJ¾Ï–¼RÞ×ûÇ ¦rªó…=»"íÜY¹fh8NˆëVòz¡g>ÏMkur_ë—.ÿ;YµÓÁî–ɼ ÷ßKÝ©+å;ÏS…s³ŽY}~Œ¥»À­¿bßãyBÓè+ç rÈi¸ÉyBâ/[åÚá›ÂÊwß#,ûÕ½cûõÚ?/qL$ö®žÛzò;1àÞëPŽ}“åZ‚ºÎÚÐ`c¿–eËuÖ¶±px*ëâ{X™çlî¾6Ì…uÿý×R'\ù\0¯H.¿ÈûÊ¡crFmšÉødÃx™Àá±ÚÅ3GvÁñ±œ[¯E«býöÞ>«âJü>*TTTÜÒÖºeWm±%Bm+»Vm+›•fmÑ´˜¥QY0­›úb‰ 4”D?)*ºÔÀOCÛ”Ñ ¦jjL7tIÀH$¸OšÄ!h‚‚óž¹÷Î3÷¹÷ùsŸ@@Oüàó<÷Þ™9ó3sÏ™{î $9NRÝ ý¼+IM3×ûµÏPvü 0&À˜À)@ ¿¾@„üûÅ“½BþÛ¿ÿ)õ¯s_ØòÂsâ¿yFw¨VLrÚc܃[Å«›º×P¶ò»7?Y‡ÈÛ¯ˆY¤nÞ4ø†±(nètåh?zÈm#ÊI}T. ,7M®N7‰’‚¬˜×.-Ûf–ÕZ%2œº¦/-«su›àÃn’·Ùo”lRö=µ+t™s6ºõòoÏ.Q]W+ª["bßÕ~ºÝwÕmSy¢¹•](ªéëÛÞ«ãÔõc Å.ÚS«Ç­ùÕ²;Åâ1´žôûhQþžÌ?¼Nù×Û‘ùPµ®ßÄb+oD,S:lÕg®x•ÖÓ½N×=iV˜ÇKNvÚj²(~qn7,·µtÛnOCìv˜´hƒ/ëduÿí#=¦>zƽ΃Õ˵œ“׊½½ÇD;ý×ý†˜æèÀ¸©3\}Wøšy¦ii.£”¾Œ^$êH>{ëÊtÛ¨kÈ礅ψ]äz%CËî-é¦,Y+LãÈŸ)¶t:²wm×cLáËâÕM‹tI™²,x¾9ªí½bÝ’ìÀ4¸_¨øumgTº]XÇi£©¾{¿gŠ•¯´{Òõˆ…AeÍ­Yä2Å€/#mKä51{¼· ú;[¬«;覩,œàÖiœ'/Å[~¾¾a†{]Úâ×bê«b~¶Vj"½0êþk¦ˆÂtU‡tQÞèŒ ¥ñÆé Q\m×5¡ý”`kØce†X]ѨY`Ò•.¥-5l«Tîéaìm¿ ¯mU¢Àå§8:Ÿ®íë¾Gí³mô}ªïý¢½ü^WOnÛ;ˆcÝñþ5‹å×h¹&ÌÎM³ý!uM‹û•ÈV|=Ÿ™ó7ŠƒQå¼#j‹mûe/ŽN·ý!eo¦‹-5ω9ž²Ô}ò™ú6ÑS_,&øžÏÏ½ÙæÖÃf¼<ïwi¾ÑÜ#bi ~R;e¿hªŠí ¤e-ÛZýÊŠ×wÒ„×Æ©*Tm·,Ôýú×Ô›º˜µ:Nß×2u4Vˆ¼ =¶Ú K”ÔDÌòŒ1¢\Ô”æýÔ:'Û´ ¬ÞLkÉ›\ýéCá×éñ ÚŸI¤o+Ý £GºlIùot<Í)¥E¹m—î;~ïߟ\ÛYu4ôÅkŸ_-~ô%SgÔX ü‚Ê¥d® J÷¥.“>KïF¹Ééit™¤Œ¨±éRq…{,Ú?Wí¼¿c›Èq¯‹ç—Ä*¯¿Æ!=¸2:¶ktý½×ùs­—±ûDë¶×gÓímëA~q™(ÌR:Í3̽Û[?ú»íú#ħ™²l…˜1Q•b±åoiŸÅöˆoeø@öuýí×|qöì€~ª}ž=uÚ‡]üâV±ØðÅt} ³PÔñÖ'ø÷KNuËÆ-]ÿjgµ.O¶áŒÒ:÷œ¿ÿØ&Š—é¼¼í0Z,~±ÁÌÃ˜ÇØ(VÎ!õ€ñŽŸ+e—÷d±¦NË®åëkçºõ‹– Ä”e›ˆÛ+:ßëò¹§©þAú…Ûו̴߆G=~%Õaë»1ÞyÇYs¼ Û‡BÙ –Ü buž²ý™UPbØ,©ÞÏ£ØìR¿LÜþ-‡ÒùN&™¨±4a]‰§§þ~ž”+ŒŽéûGº(«*¹Q}ÈÖ™âm­Xïbí×eˆÒúVŸ>š|]¨<'ÊçÓ:OÞh?a¿Ñ®ÉÙ<º\ª—ú»×&HÄ.—öb?à Ó&VÝ"Ás ªî´NÑÏ¥’Ãbùlaú†”1ÔøkèDìû‚â >;Ðw¥Q}ªµ†>Ç1ï1vMÄŸÆg®?O·ƒÆ•pã¤Ö™$ý%羑´f0O¶öŸQíÉŸz hu +*cÍjýCiéY"''GdxÈdUE¢4úN$¸†,œdÉ|=>Ò—Vù¶Ö¬ÖƯå`bºÜ<‘›ã™ÈÀ:úÕ‡Êa|GGÄ "K9y˜o–žè¶dµêmN€†•‰:#”CFVVßô¥:àJÊ]_âyà—–nµKV† J³òŒB“Ÿ™öµã~2ßÇyO¸Ù§È]]cµCغîO¯ÑNDG­€¯w_q3'Kßž4ÕŒA× d:y1qª˜–­\lV“ÉD§ €Ñ“¨î„,Y_ž  QùUXBŽlGÄ,*~—=]L›9Õ Š°uf²Péâ|ɶ“m©uM~Oéé¨3iy¢ÆrE¡'3=+WäååFéd~Yƒî›øË øòŒ vYfñkO){Û{¯¸Á+râùÁÚˆ9ñì¬äצ»ªÉX'ë;f¼˜1o®˜1ÓÓ†c–ˆí*Oò°2i•Öc2ßštïkæè@?ÅuÔDL8Ë ´ ¯S~usQy݇mâÁlÚ¾³ÄKT§T]Ég(V˜žê»ª·ú÷`µÕnûÖytm´˜2ǧ0¸o‘©-„î'ðÕŽÁQ:0S”« )'øê­ºµ®¼÷lªMuX޾O¼á ЪÝ0ǽvÜöVÝSîq›Ç1eÖ<1sz¦y|V™x‹æÙYKd“åŽÓæbº©:pÉÊÏ ²"_˜Îc<ÁW£Æg‹iS=ebð–(f•Ý#~=ê >¸š4~mû~«u×ë;ªþìý «Gþe§‰¸þ›O=¶rZz†Èòi»Š&z_J¾í¬úƼ§|[üGìþFëjê¾’-"Š”ßà¹G„ÕÓè2#"x\˜)š¥Ç¿Ü¿ G|NçArŠ­y¯>èß±ÊëqH±óÿŒ®¿÷:æ4]`ŸPã‡{?ßùpæ;ôË@8otæ`¼_“ÖÖ‰]$x `–¨Ž "¾•ëÙþÚñðk¾ž¿ˆÌ5¨qf´egÎ(±­¨¨Ù£ß3sº˜4Q¥±?•ŸäútÔò|§þ–š_ØUk¾h3£¤6Ž¿ì}HÎ)̳æÍ“Ö^À€Ü"7€Ón§ôŒ,á/LË/s}…Tîçz õa„ ûwþ2¶ýOu>¬LrnÓºÇ]õ›ËŽKÒ•~2«c¾÷´ ‘ôw´]¢|È ï3…puñ•'àyAù|¶N„#”>DÙwøìÄǾ«t_´õï+J?å'e!í°Dìòãñ ‡Ê¡Çèú¡²}e_¡v"Wé¸cÚšÉaTNšWؾ!_å¯%Ô׃ڿž”™/ê +K'ŠÌgtK½‹74•ëù׿ ×eyaÇIÚTgâúKXf(-…~x<ú íÇü=H×ù8ëëëëÀɤðå1ºú¯qö‰?üÚ^ÝK®äµ¥¡ÍuÀUɯðew…•êmñQà:%i¢T­0áÖÍ\¢¸Æ|«½±Š¾Ý“#j|VãR2ÓOjÐKÃO®`ÕHÒn+!o«§Ó%ðM–‘o®`ÙVj<ÌÔõŒ?xÔP£9½ÀX 5jå/=q#ßž +“×¶Vò"ªVÓ7¿i™¤Ý@ä›Áv å4à%KTºotH‡Ñ|¸—–³TÔ46‰H:VÙØæjâW‚3Ñðu Ï7¸ídÀ—±*T@ N"ªö5dÙš¼/ÖР£÷êÄ=db”¾uì7!Û†oƪƒló«#AL‡<ùÑ7w_&«™+^z—¬bu¤Y,#=“µ'zã|©>Hu`©;ØœËHßÇþeÆ[z¢¢ˆ®ö—§Ï(ç ß|+­M‘þ#îØb¶«ð…oÓÕÚ$³qs–ˆõÕµbç»æ$qp›6m4WV£ÁDrå(Ú&³6;Û¾T:ØK–G'óÕ¤»<¾<˜˜ä;iùÂë”ÎÔÃ:NåÍ\#"Ê w:A>Ë  Î'$+¬³^áËžô5³P¼úv›Øón®¸&å5ÛrÒ"ó í=»7NËp)%çκŸPÀW¯à´À³U¥4Flh;,^]¡¦&ˆ ¸ÔîÉçÕj¬Nñ ² Õ¤…Ï«ˆímxΨ3néQ½º†C¿O¼N¥ÞŠZù‹6aÕg€ ¸"YY«ë q ¨Ò²»^!+ža0؆-O{ïA±®ü5~¥[ºRÚ¸¹eæjeÝíâ×suÚ”uv`;÷l¢«E¯üE¾ÞØJV-=OTbÛ¸«tuGÄý*0Ç‹I+¶;犕ä8­·›6B‚ÂÆ/»»c¯¨ÆÏ˜ŸtB3î _õƪ«îCÕÆRs ߦަl:9®Fð^2 Hä oϦç•«uíïhÅyúÁÖjgÇ€:…¿§§bGÐûŸíH‚¡H½%“`»Æ¼yÛ·ïýˆX{ƒz¸«cí ðŠZõ««†¬¤•!^k·Ózƒ¯&Ü],ÚÑžQéßxŠÔïõîŠb»Å}$ lÞSfðY¤âWä!)Mw@¼ñØ­ä®òÐqXní{.j•1šwÏ›ÅË&’2D­ScÝáä‰ðe·G+Y X=ÈÑmCW,Æ`…¥åÆ ò-ìW^´‘KupzX‡ÚëúáA«(ÉÕ&€¾ƒ\[·ˉ½…A÷UMNЧ´“:Œ@²ŒBbçcà&­Ÿ\Eµ¸Š®ÊWCÆsE²°õׇ¯£¶¬´£ý™Øü÷ï¯GT”Û”ˆÿFÇSKG=m×Te¬öLÛ=tÛ%pO‰Õßh]µîS¶$øˆŽ»)èiP™Ar+  ~«|—åé¾õ`,À7 *Ï‹ÂëË(Gý=¨þ:?óDúÍÒòE yè\Cç_,ý¤óáïÝZn]Gu,*àËò£º ¢qdå`ÛW ¾•ðu<ýšN²‚² vÒþõ-ÿuÞ±“ªU—¿~¢ÿJÒÊ¢Ÿt~aYC·ˆx^¦™¶6^°W¯Øù")W/ÝG}ênQ¾v:ÞÛ•3WÔ¢ŸgÉõâ®¶òÞëÄvf€Ýd±~·öçä*×ëéªbF[EÄ|2§2«Ô¬Çö—é fSE…³Zuì€/[¿bõÛÐãhÀ¡ôØ þ!óªÑó áûPX{Á¨oZ®¨hÔs2æ“Ì\h 6ÙO¢u–êš¶Ãbù¶ÇçNè6¡¶¯ÑVº®tÜÑuô´G‚c˜?¯?þ&v_Ð ¼z wãÁçtêÅ@k,%6 sïö.ÐTQàÞ×Õ‹aûâ~|YH?34û¾”9ö³'2'…²&þ¼+¤ºŸ>ãmSþ¬ïٰ̆°°œ:À_–±ÕßÑ!ªËŠÝÕ½V­Y´ù”“tÀWcqÂòÛVëhtbÙêhÊ!•†dF‘vúˆLõe…"i‘(.)7‚¶buTjÐû? ¡žžl4't |ߢo*ׯmZž~[-–<Òˆ¥A[«éŠN]Mç¯d¢Î@®žqùšo´¸Ë·Öàö’¸ ˜\ÍË÷S«~Ûn÷A2æk¼áŒeFéQÂLžx¾±ÚÍ øŠl£'béäiðw2Œ:o¼åêL~ÒISÜC'du0Püü¶oÖo·ªÀ-)_uÙ1)s²õF±Ÿ~AF‰|iÇ‹:Ôò} ´ Ü ð´ÛÂt–‹jÔÄ!®rá ‚ÈqV„‹Õ~ôœð…ÛX¶<ïY]HM@ã'nÁ9cQ¡(~¹Zìt·á4Ûx_yëWðòÝš‘®–½Î£TÆ„´ÎŸNæë66Á¨NØz_‚t*XOQ&*oæ\±xž¹zÙš-wP>¡Y¡~–øöý«ä¡†,o_i‡‰KÄN§ÿPYv½¬·L5ïy7à+Œî'ðuLÔnœçN~ŒZø²­ ÝÕžœ-ߪ]é^;›(ÁK3ÜU¬è a€A[ÞUÁd Ñ®­zÅŸQs·8å·b+éjZÎjToe®nf¥k7ÓhÀ×ëï“&gÚc¡Oýh;ÑtF™¸¢Z‹’Ïù|uÞÎqæÆfñN|¡Í¼Êh«([ªÇa€<±Í ˆ7–¶ŠÕämý‚rèáÚ81çÇëIBú0¸°Š—¨tøka~(Z],Êkœ|}'iÃßÓÃÛrUZÌŽª£ƒk¨íˆÁîîƒì`»†Þ‡ü¾÷½¿C,rƒ¬Ì * üIWÀ¯¿€/½ò—ΧM¬%«Š-¯l¶ƒÁ:kÄ}?È™r5¯k‰ˆ Ør?1œ¦Ìd¾=5$ì†_EmùÚbì·ë`0+ïwÄswª` ðRžD¾¨Ÿà ø2V'Ƽü‚;"t0wãð6µ×U |yyõQ÷áÄ|Ãm%hÇgXþ™±bªÓ©¾› ¨>ƒðKÛPª„iß.|ý-ûеñLß@öÚ^þ~ í›ýãCÅ÷gb·Cx=2W[HÎ3W“VaèØcÈå¾ô”JÛÅ»§˜ígêšYWÓgP|‰>òÈqô©×Óà2©ž™rÒ‡Q¸PﹿuÔ Iò²Šº÷|—çY%=©qHq þ4Ç?_Œ°%Ìã÷ Ê ÄjׇӲTÐq<¸OåÞMõÛûÝ?à }\ÁÛZ]JÎAá?su(â[Ÿíxú52xéAw›Fs•oéÛPÐïqWvýŒ0Fý#úÎ/Ìz´Ð`™]߉¦1¿£Üä%±ù/ûm­h¾¤ó`ƒ k#An ¦9«™éü»ÄJ#oòR›[o 욨|ùÑb}‹ó¾ô6?{*ÎuàËJ¾¼º|y'ðÜoSGuñê°ý;þ8›J g/˜þ‚ž³Ñu©,ж_V‘½š?å—ÌýÜŸ‹.k ó—Ô’ª‰Ûÿ¤|¿q>´LáÇR”{ÎÌl·dü¼TtÌ`ì³ SÑpW R|;D©û„¶ñöïO¡.àó¥6JîËIÚ<ñúŽ¿M@ËóØåÇ鎡#ÉôCß¹¥;ö'w´­iêO¢c˜¯TúF¸ñWÖ+^_7xõ€mÑ——Ü@2Ç>²¶]ÁγÜí¯rH3Y&3®¤2vÓ¶HÆ_2|¡¤llÚ/’ð=ŽSŸñ¶)ÿŽ­ó̇ù°°° ¼ôWÀ×irOH4R’þûåS‡­4?¾áPÒiOÎݰãÅ Øuà˜#Þp¸æ»×Â…ƒ¢¥---µÞ|óÍÑ'}Ž4¬Ï…ô»ž±ÎàÖ‹ðØ-¸±›ú몆ÌKo€*ëw.lëX—¸evªÌË ß> ¹…e0;k\xŽ{Ê%©Ïž†ÇaDúÝVšœÕÛ`ùM—xÒ÷Àúìp×fy8*#%pÅ9»×çÁUw­³®Í+k„ã‡{ÒÉŸÍpïß] ɯéK¡iÓ0L~õ×SÙ#®«8ÈC 'a/^s‘º¦djxÛån»]pâJî¸"JÊæypåL»ÎA×D%Â:o-«¼Ž²O/¨€M³Çz’û³—…æŸ_pÆOqúipà­§à Wàæ‡ø‡Á6P<û«Æ5Éý膧oÿ¹I¦š¯y¾àQõÃ;ÖÀÅ>å½¹ê6¸îG¬â0þãkàwšßtÌï‘„ó³2Šõ¿Þÿ…»Î¾~ƒ×¨zŸvìCøÄû½±RYç´n C w\áôCÇó ~ÿøœOn-›ï…/g[= ² q<¹MŽ'ToÒ¡¼i\·ãéÌœ;ħۺ#ðì£÷ÁŒŸþ·¾ÀçÛ¤9…p÷Üé0æ¢!îÙ7WÝ„íð¬õ{FÙnøyæ÷œû¥¯ ~" ÖX¦BÅ¡Ça hž0qìyiàcüõ`Û+]ÓmŒ5'ÇU[è„T’Ó)‡Ï7ÕþcðÜŽèóãæm‚§—\õ5. Í qÓ:ã›÷ð›¹ÿlä½§øN¸æv»ýf½{¯û”qÞþípºÓ a×KwÂù>WERuÇŠ÷é}Ç`p·mD]>ù<%¼¹æ‡pí¬ë¸+gÔU>ÍÈÆ Uýäe}Èz¨Ã2¡™]i1“'À¯¯ó_‘ßmž_rÎ8ü”)ÿp ÍE;Á¾«gÁê²[àÓGÂQ+Á`<ûNÇ›ðûóá™K^YÚ3:⌥½ wQ:XVAZ>4VÍ?K¨eŽÓ·Úã4®fwŒ]µÃ¥×Øå¤åBéã³aÂÈ c¶Ð:¥BdÓmpN ÷ôÐvJMí *FÛq¤ÃL}PvP¶ãXk 7+›R¥ŠõyÞáz&‚­½Ïí;“ü€ûfÒÿ5tÜgKƒ²7_†ïŒ;þûøÊ[KpëEøÝôhÛooÙ½pÙ¿?j¥Ì¼¯ùqô5~Eê¼3 ¶}=|ÕÑùî7‡ó¯ú‰•dÞÓ;à—7˜wwà¾Êf˜ûOæ |ÇS(s®”ÙÌ×OzLç«ÓêpôCzUôwÚÖ^Û·áñl´m‹f`I†Y+·>ô>íø•­Á@íøälj7ÕDàê7çÕ·Ú¶9N`CUëHÓ¦Ht…Â!}Ïd@õ9j:–Gû½èg]äøYnÚ~³ñL¿BV¶×‰òëh™þþLlè¡õÛ™êƒË×Sœ¯ÿFÚ”ú·FÒ¾Ý÷é«ì1û›5Ž^w±uˆOíoŸS–Þúк>ƒ+4É_Ý#¬sä8$¡§˜6¨ÌXr6oBÙé“K+ЧëJØU» ï}ùÖooýÜ‹|¾Ä*/ýñ)Ê8T}aK˜Sy}û½w£ýPöCÔèÙ¾ÒÓnÛDÑ}=•{·–;úÛáóÏ8¬}0e×Ë+ÿö›¹0öæv"ôv¢Ÿ`۪ķ">ÛñôkLŸ~2T¼·Ñ±Ãmñ¨_4­¤îŸz©}Âý?‘¢Ó»—y¾ÐùÏ)ü9Š÷m‚Iÿãæƒ6ò­8_`ûs¡öÃÅð÷ÑÁß6!ëmÖS­…¢;FãUTæñPön\%§7Ô_ïN¸çì±¶/1f!쬻××— íˆ«£Ã™¨Ì¢?uÝ5¯Áݽpz_l‚ö£¿§tŒ–Ï}&6>͘`Là¤#°²çgðï¿þý̤d{òÉ'aäÈ‘pöÙgÃé§Ÿð%ñ~þô¡õ°by.üsÆ¿À?º'Õqû3¹€¯Xüw_†åVRúLçùÊâL¸qy•u£ýaöÕúiVíªl¸>ß~°¢R¤gåÀ 㯇¯_ýU¸ü’8 U"òI úªÜ–ZA&§µÑH FHË‚üû{èõ<ŸûaérõF§%ÅG%F:®d‘’[¢‚=¤sþ8¡ÙϘt¾©ÈDÓâö“p›Œjóüõî^]u—uÔk$÷u5Öç* övÁ®Ž½ðþû k]ÛРž&kYå Ê^=¶¸ÿ£F²™–Ê›|Pá>O’¯+–Ï—¨€/œ ,¶&(}.Nè™ØÌÄ Ÿ²ØA?tRZOJè` ðùÙâöÁ¾šçáÅŠhl|öþí=8ð®Ý¾;áÍöUJŽþøÒí„öKðÁ¾7$z“h %ÉÛøRÇûÀžú:ØVõ¼úÒoá7›vª3Æç²êüð*;¸†¶Ã²ºNø¡c\oM`OÃÀ>+¶d2”ã¤ý×é‡ Ç-à+Iòmþ$AO0'åwD³™²¶ŠnÅàž€¿Ð¬ð¾DløMÞÓ¼aÌT¸ç¦ÏÁ˜‚œ…cõý÷© >=™o_•œî'ðï` Ï…N ÏøõîZ˜Œïþépù7f«]ÁßúÔ ¿½íø±Ç©ƒ©hð®ü÷^o/Ñ€% ÷|oôzê<Þ…û°ƒÂT ÑÔ=°“×ÂÞ9>ý®žÀÀ®{ž•"|M^‰iïˆJKÔÜ@*#È `ÊÜEøÈ#ìYgÁßþ žtTkÒ ›ú„Áq9g?<²áÿ&À´¹7·¾y |eìøÌP3ꌲ¹¿ö üpt´qã+§ÊPþ¼^|ñuøëî Âç^'#ßT2Ò€/LKÛjæ†Føùw?oåØ×öøö%7Z£f=[˜göõwÀ—+|Ì/¸eE‡hÞÉ0§òúö‰„ôâË~Ö´ߨLÉöU£rž±¾¬àüë> þh'¦0ê‹øƒø×FÀ—~ù*)o‡ñü£LŸ€-šÞ¿l"³Oz÷'õ§FáÑ7Ý3êËt >{Ä>Sg¬Oê/ø¡òºÃ»ž„‹ÓfXIÔ¼‚Qg¿sЗ¸õ<L†¾Ä¼…p‘/ѵñç𤚳x_λCû¦}š`ëï7ö× ±}7¼öŒšëxÓõmµ˜jÀWXÀód¼ gSïCIÚ ØßÝ—UmõèJÑqÄl#u%÷óèœü¤:yRÈ”ÂXjø$~º’‚Ÿ—ŠŽÅkwš7®t‹/Œ¢1Dþôy}߀êOƒ£¡‡)ègB횀œ¤ÍC0ú~Õlé˺±ëy2=Ãñ}yÌSSÚÞ®Ýr óãE…³a’­ú‘6òëëÑ?Izȇ†ýsáB¼Èm[̳qÃ×a޳pˆÙù d^v£µ ƒûD }QÉfì¦Ü“yÞe¤ó}^(¥B>^_ÿÂ,É~èrUÆÏTŸ{’¬ø+`L€ 0S‚@|\á+ÌŸZbìT_î­£©V¬_µJoãøë2ÑÐ{ ·d¶t¤KÁ¢f‰,Ü®'??_ÿ+À-Eèr°îÖ'JÜz¨Poû(ó0ÿeˆ¥%U¾Û=µÿ’½ª<ùI—bÕËB›KÂzåðûnlg$Ï~ºÌ0n­½Løñ‘‰Ö¬7e`o*ÏwyãÛMî5õ¥îq³=¼4?™Xö2-•7v™J‡ |ý˜¨c֖޵+4‡™ìíùÜmâok§·%×’íÈôºeNˆº[)Ð-ôváók;Ò@¶@P<ý?•)oéHÛ‰l¢x«O$}Ögx•6èSméHY{¿Gµ‰ÚºWă˦ë6·Æ£éâ¥Cv[û·ƒW"âwsÒÒ-h{ÝÆæ6ª-´ì)è@,=¦òb]¦,Ûdé>ÝRöQ¿í@•l¡Y¡\´P~y'6VŒåï9íB÷ÝÒQn«X¹"ÛÕŸië­-7ÎãËåöVˆòÚ×7èmÿªëÁk;Éö‹Äƈ¾–æ›X'ØeuÕŠ)®>Îuž­¥í½tëÆL±Å•‘¿RìõI»—lMényh”é?®xë0nÉkîv‘oíÞ"¦N7iÖrQÙ¦·{¤lfnòÛ>ò˜ð•SÖ·ˆ\àn-\¦”×­ŸâÐ\&ð™Ý¶ã—‹]ÎñÊ5Z0ͪW¿oé¨ÊõûLK9y…¢|›ß}?ÎXJÇi¿¼}ŽáJ®íÐZ_&rÒ‚9fä.UMd;,Zžº/Ðc'Ðf o¿¦d‹ª û=Þ÷~ÄØ&±¶ÝÞ–Qo¿ëw³X~b­·BÜþÞÎsy•³]£»-£_gŽî85cm½¥#^Ó\F·wUyû}êò¤¬É–Ž~eÆ“IŸ7ó #Oª[:R[4Èv–[µãûÎÃQÕŠ65Õ[¥Ë ÚÝ´Lkltûn£Òm»S üŽ[¨ê­W•¬þŸ„ãöaÃG ¨í+nÚêo”éÓ‡hyþmâߣ¸ºmæÏ§Þ]¿.~™±Û…–í/³Lï£G((­¯­œP˜eÖ¤¨»FÛØç”¥«/N߈ω´­¡AÇu»•TfÐõvÃ-¥òÔÖ³ ðÁ—ÝgZ«D–Ò+Üj9âÓçƒúh¬ò‚d4ó2ÛÒ‡(?~Þþl©¼¾z™þ5‰2¾©­‘©L^ûÐÿ·î«&Ýþòxà–ŽŽÙ·Á½âŠV¢ìmÛ__¦¶W$>ÛñôkŒ9ˆÞ’1ž_/½òŸ¼Ÿ´NSÅúÝr»Eº=$Ž•cü¶t|*ê/VÞrv½¼Ð嬷n$>læ ±Çë—Ò¼U‹ó‰«B»s'µ›—¸eúëºhÞ)mé˜þï¾cwÜ~KúdÀ8›R c/ÐúÚêf”}2î80O«Ÿ«s1©Êú %ekÜ÷(Oÿ±4î=™æ§?©~£ü¼Tt,^»Ó¼ýî/ú<™{N¡.ñä18v)鋯qÚ6ß©¼í4FrÒÒ:ym­ ý”Ç5[š=)Ï·ž'Ï3œDü/ÊÆ­#m$Æ0?^ô˜ê7±?‰ füµî¤î ±Ú]ž«)RsjkÆ&±4ݾ7Úý>âù½_4–éçG ëØÂæ–ò±ëNó·ûJ¨q2PwÍþçwÏ¥íåêƒÅ”¦õ³± ó¤ûaÿ÷™xíËçi{òwÖÖÖÖ“AT¼U²±ZO<ñ„¨®®uuubÇŽâc½Â×­uðìŸÑÞrþ.¸ &]wœçìl¦{?_á«6æ^3íµ¼½ÙüNƒÒ†*ø¦|}€üõuµÀöm¯C峿ƒ¥ëÔ›íú÷í}(ð›ïÆÕ$2Ÿ¼±C#ý!#ŠpKšÃîªhFÖ#øÄ”i€ *Äþ£oó¤á6U~Û@ö¿L´>hÈê­õˆ´=î’½¸ ®³JG_Ë&øô—ou¯JËʇ{n¹¾ðÙóá,\•å,\Žý½ ²—Ë·™É[Vø+,{Y•7)þ}d…¯$ùÊrƒþä _‡º¶Âõßä¼ñŠÛ&Âmcìl”—}œ¼}KÞ¦iè¼ú X|ã6Þ–ŽIå× /äƒ[­}ßdé£aÖ£ÿÿòO#á<Üúâ¬Áç C505Í®·’£_Wø2ÞÒ§P‡|tÒxË.FZ3'ýËw…/}:êÛáÿ«€;.ÎtWš[D܉[Dø·ƒ7ùxßÿéåqÜÒñ=ÜÒ1¾èvžz7¬y¢[:&¥^™=¿éÛž|w .^ïl/*S­lè„ï~É\ÍEÍÊû&¼»…©ÌÕþ£yCæ\xðƈ3V¾;}2|rP8ÝO|…/|‹ý¯ë௸Ýt*nÉøøx¸È…ð°<âY%«/òøÜH|TˆSÖ4Â#ßmƒï ··~t·d´Îš[Âäyðпa= /9—ZGð=øïÞöødYák4nóX‹Û<Ò ­ï86¹[7¬ð5WøªHp…/ÔwU1Ìöе¸­O,aÃgÆM…I_¥ÛTöAË_·ÁŸ_Ü¿ÿýÏà…W¼Bã6Šm¸â&›¸5ä¸5¤÷ïðNl—±v»¸+‘¡L/Üy䨅àpóÕÙ+À¤±—9cáy0øÐëðƒ+ìÕºt:•;åðë†Ã0ùÒðÈØ a±µ*Ø"¨ëŸÁËÏèï¾ä[—¸¥ôð¾>\ŸŒþ ‚A1mbkø¥Ô^Áló ‹°íbBh }} d\1œm·{;¼þR%ü®|)l¶Vò §Ñnp· å)yè±$ïé¡ídÞ~!L=6­µß÷ó÷Àê¨Uº•¿ ó'x d¿„òXçVø Ú'öÂY°½sŒAûD¯–%WÓjÆÕ´|züöUp~ú<+gµíc_ä÷pæ¨[­còc~p/,˜v-\öÙóàì³Ð68kl[1n,´m¿ ¾üÊŒ'“>¯Wø +O®ðd;ãrvðxæ¥p·¥Û¸¥c·t¤«$)]viê/~6ÕÛ4¼TvÿT_w$ò¥6ç]ÙjAbHþ|d|í pþyhÇK;ïƒÿ›®Ê¶ÊÂCdÛw¢Ïõ }ÅMKûm@:)¹_ý ϧÑòüÛ„ÈLÒS®Iù ±Û–í/³Lï£Gž¾‚ÒúrL¨ |ÊLAw¶ hwÚ~®¾8øâs"mkät\·KP¹Ae]¯rìmÀU±Óï²æCÇòL\Øòa¸ì†ëX^)nŸìàP‰}>c•$£™O[š‹¢˜—;¿âçíÏ–Êë«— é_+š÷ãLì¾l ;¾ ®ÿÏgíÙ íÉ xúÆaðŸ›ðñ¨ïAý4«óáã&à׫]ù¬ÐE}Aÿ²ÉƒOzSFýˬn­þ5ÇŸ;ðg¸ë“ãímçåå3×ÁžÇ¾µÊ/Äðu)8JüçOÆÞmšä®ÂEd&œÝt4o<8ëÑ5±}‰ÃGà3éY0ékŸ‚¾ÿûŒ¸xª›Õ¨ì…ð“Û¾Ÿ¿ç²piÏl_þ¸õ>i¬‡¾Œ±ÊÃúâ;v›—øüòï“ôBÚ¯“»ß…´ŒþŽó›è“D[›TBû{Üq$䪹5]C}$´L[\uSnw¯³u¾ù¥qïÉ4oÌ)?/¼Ž¡T¸øg+p¿ûÍ;öy2÷œB]âÉcp$veðñ¨Š>@åMzŒˆ?Ð:ym­haôö¤<£þ:üv2<ÃId…/º½«_F{$>†ùñ¢ÇNÈøk5i£úd¶˜ù«·y#\tåLë`^Y#,¸r7dޏÁZ½KíÌã®L…þhÇùzܽçk÷ž¨j]iòÙe‰?“WB“Xåî¶«Uý?¿{n"éü}´øÌãõÃþì3º–ü 0&À˜À©A ¿VøúØ|~glúã.·µÏq%Lúú¥d[÷TÔ—„¾Ú·BzÚÍ΃‰4ÈÉgEåfØ¿óx¦Ê~„×éë…öæ°ùÿ-‡»—«à¯´„·I F–¿áG 5âÀÔáö’×:ÛKÖtÀm#qÆ¿?þ¨°ô+n™Ž[cZˆ´#›ŠL¦!½4¶¬ZO:ß×Úpª]hºôüRxfî7Áã´õÞtgû -«•_g>–“º®)ðÕ¼2àëÈÙmpÏ'ÒàIçÂ8™ÿó)—ÆJfS[ÌztLϹ>ƒArÆd®ßÄ&^A'tU •ÌМmà YÐg¢4(?cu<ïÛ“þÁÓ­ÏÂuŸëç€/ºÔs`?@D‡Òñ!ä¦;p«0:ù¡µ¾>„ƒï´Á;ï‚/|鳘gì?ÊüA jú>5½¹ê&¸îGöCÿ-5dž¸=ÞÃá§òAN"'º¥ãÛ/-¯|ëç2Ù¶3X'¬ Ãê€8øÿTG¢¶èè†gs‡Ã 7`p2”½½œ]/ÝD™%Ó7Cû²…‰-ê_fì–hx<¤E|%î¿\Ôx%& ec°¢å^;Û‘¦ »FÛ”IY*_S‰Euߟs;<žf÷#ÿ8÷2OÒrƒÊŒ%§-o;<Œ²8¾zUÇ:xkî§ÀÊ,|ðõ˜ýàKU.Îg¬òRÑŸ8Å&ð€ÌŸ9•×·­è¸4öí†{?}Cã2xíÆ/Ûv°óâƒ5ODY&Ù)ÏdÇnšÖo+XYUÿç]a}´øÌ“ê‡)öY?þcL€ 0&p*à€¯TZ냷 üÙ?Ã!' .û|늋Î1Ñ€/jت‡…àJé—©à°\ØÖ±.±¬Ã^èê셡ÇùNâ¼ò@&ܸ´Êʶ¨&·ŒŒ~¿É[&5²\ƒÞ¸ˆjÄQkÙ¼¾œ½Üº2 ÞM³¯6R©½==0èœs|åUןÔÿ ᾖ͸ªV¶“L;²©ÈD à ‡EtB·t„å74&‚ «Zá6ëµ R£ÞȽ(ìÇ“¸²Np_á².¶ÆtûªÐ¬09­3e¡ÊÿÛ¦0öƬŸã–m…ßÌõ<€p.<ÜÝ g ªÇj¬WÝO*à Ë®\ð˜ú€„3fÎý:¬~`%nÛßÿ¢ùн ¯½I^;:î¹ö}¸…)+ñÚï‘k[žý/{Ó}V>ã–¼ ¿ýIºõÝû¿¨:Óà+Ȇʮ'`”)ôEþ€+ÙAJýðEÙ0ê÷m/.çó× =½ƒà+ VŸ>Ü}>€saØP¢Pêô;/Á÷F|Ûî_SŸ‚½O…ÿ[ó] ø²¹MÁ@¹GH œ¬^˜;rœAÙ ÜB}È6Ö 10í- LóŽ…»ŸÌ…kfØíç ³òîÛs‡^nO^k„9÷Êà³ °1ò’{¯è÷€¯ã Í"ÞXŠT‡ÁçÖÅz²ÏNKÿïßv½=]¸nÚPvŽOÛu¾™—Ýh½5 Y«!òØMpèTuJážÚŽÀª…·_SbSRZAßeÀ×i«1Àú_áeç¢9Oÿ~uÃ%AIìãm[ẑ7¹ièªZF Ôâ-ð>ÔôþÑkpKGx,ë2ce°•5mpÇåžm¿ÿØ¡•YP‹+Š}Õ¹„QYT¹´¼Øçõ _4M2ò¤ðÕ¼é^¸òV'ai®|Í—õÌKí7 !-ªæÂ…)Ø8Ô^_Z…>iç€|ãy"®¶ëÄ|zÓZ1ù‰ý*û¢kíKœxoņ¡@IDATÀMOkÂîõypÕ]ö`…UPr›\[Lþ}V}Ò>áþŸö÷¡R õ7ÊôéC´¼å×Å/ÓÅáû%´anT’ñߌ‡^ȱ¼©ÄzXcHur ßÎ9È Âéoûœ²tõÅŠÖÕ7À² ï—:÷ CCꩇ/Õ§Xr*†Í›òp|°ûM^Qüí®»,8-¿ ªæŽW—%ô«¼Tô'^áa™Sy)7·<ãÞºÕ!uË=k}¡Þè*á©Ü»ÍÌ_‰|áô—5¸Õ,'ñh;íÕ½‰t<ýcŽà$ ø’0Þ~_Fʰ_F’¿g _þs\ÝÒýëû+,üÄ`[Éø’Ó»Áz'ͽÀþò—®‡~jû¸³^Ä̸¶QgÂY'` ÞH°½îñPönE¾ øZV×?”ËŸÒ¿Þp×Ùcy\û®Æ— îî…Óû>¤WF}§ýÀÏRºFã9¼ ݇è=!{ Ðà*xÏî0óîáÓŸ? ¾týl¸#ã’lmšsôws\;qó—Ñ’è#¡eJa,5ì)ãž©ä ïç…Ö1,šö¿ûeû¼ž'·^˜鳯“ÇàhØ¥¤/Çߟ)¤\ßv5cS ‘ä)ö¤<ßzž<Ïp Ûǰú<ÞyÖj|¦tƒóLÉÕ¯c˜¯Ð}#ìøkµ)i£ˆÓôxº¶.ž7ËUpuÕÂ/í²\ p]µ}éõ–O™_´¶ß•o}Ï-©‡%ŸsŠ?®PžÉ>{¢i“ñ—ÂÛØñ™Ó±Åì‡ýßgâ·/_Á˜`Làä"Ð__ìžêzµ§äɰ¿er2tˆ—ׯ«VÙÿž©l°÷ÕŽÚ“:xïR•6f¹5ßù¨6ø/M”4tÄ)‡ìwiðÁ…¨Y뤗ûÅ;û{ä¬*Ìp¯q÷÷\ã•Ówv# •%CTFMå¡;åeˆ²FF ¥‰à5颠d[œ:«ô´<¸åCTº²üt·žhm÷‹Ltor€QÕªäQŸõ"/MÕDñ¶VK.š.º]ZEi•DQN¶Crì³L™BóO¯¡Š‹ýùn×Ñöa¯h{¯ZLrõBòš*Öïn³ÏÉóä_äÝZqÏDÍ7 ¯Q×tŠ3sWˆ=$ÊcOÝ W0àËÍû¥G§ºÇ1Æ92?ZŸ‰…QrDömãh}³×‰}(kûÑCQzëí{ò·©?MFªç¸…¨qÎÊ+R)²Ü²ÓI$mœ^("1ÚÍO¦ö£b™b/óÏ^!¶»í¢ÚGîiØ F¹r€X³»ËfþöóäøTQñžN£Ú¶Õ¨EÏÛéQšNtÂIùRÓmÜ+ x´ÖÕ »¼:à£{J~ëå¢ê «mï¾bÈ ÙkÄ.šoXV˜­3eáÊøîV¢£“EéÛÑíÐÖ²Éi«ñb~YƒÍ-¤î¿}¤'ZW‰v|O´÷sÿ½±õ>«¿º:4Zöû9âÕn}ºþç¹}ÛºŸ:׾íeRçL±1W{ósN'ˆyЇ&ë1iö¦ˆ+§’aã D†L±¥SåMÒŽ_)ö’:ª´{kWºi1ÊÍ»|‰ÎÔÜã*üÜ0wŒ•vÜÔûÄë]Xf×v1Óª?ÊP^{W­Ö»Ék-™¨ 0z‘¨óʉ\è˜æÊÙIò¿<ª~-»ËŒt0õ)ñ–7oü]^˜é2mhµ»çÚw:ßU••¢ÿmkð·wüÆ.ãX+CŒƒv^ñÇÒŠ}Çàw_Ý/ÍK³êœžU ¶IÛ¢µJä*{"H6”?C+Eö8î['"#^¢l¦äìb§í§òzì2Nméï{ÿ€8Ö}@¼¼X3—:4ï©? |´ÎÉóôßÁú"Sq”Ÿ7<"’k¶?”Eô1KÔvšéuïó.×cÂ3o¾cåOÓáÊ`F™ÇºÛÄsw›2®ýK›{ÍÁš_¹eb@—{\Émæë|†¨m·å5Ó$.Ïû]¦-çǶ5;™:ÞXæØù’Q–¶ÇI[R;=Üôamš>ˆpóÛV¬ý$é”7ů›U_´¥Ü¾–¾4Êfê¨/!þÖ3kµhuëGô9 /ü–j[.lý÷ÇéC´<ÊG·-‘¹Ÿ|¨øeÆi‹ôˆêC2þÛ~:žâØUäÑmlã†Ò<·¯BN±èpÚ½_Ú.}ñô7Z׬Õ5®î«¶-/Ðó`äOÚÜ8®Û…¶!>tqó¦eR}2®÷È©äÙ©°û–ºß9c1õ…ÝkÝ>¥e¢çb–—‚þÐ2ü¾Óú'ÜÊK¹é2H› —ü¨ùŽQ®ï=ý5ß¡ËæÜv ýâÓPßÚõ),ߥ[¬Ÿ3Úê®í.Û–ú@ÇÓ¯ùøs8ÏðÒ!Ó¯‰ëé'ûú§f}íü©Ïêëo!›ò'ë1™,sç!ìÑyãµëçÙí6.{‰¨v¸™õêô¤ëÂ4:_is=Ø`ûùïu¹ãD^Ñ~ൣѺk–OúVÀx·?ì“QìIyè Ñç'Ý3:¿€ÏñÄ¢ººZÔÕÕ‰;vˆ]ÀWÇ__vƒ½dàÖªþ,ª«ªD•ï¿—EUmƒèô‰|†¡zpçÉÇ«@F|¸Ð\SDŒË QXZ)š"¢µµUDšEUéRòÐ%]T$ø ƒYÔ ×òC>Øß!Js퇘¶±›%J*ëE¤£Ct´6‰šòÕ$¾Õ@ áØF} }h“& ËjD“¬gã6QR@ÎIš:•áe2 `Ì7#_TÔ7Y|[›¶‰¢\úð._48íWSDäI×i·Uˆ¥9”íä®Öa_˜a§“Œó‹+EcC½ó<|]Ãó n77à 'wV]µå7s¡X³y«x©¡NTT?/–-šuÍÊ:Éb“NèÒIisâ2Å€¯CµdâĬ’WÄ®C]bß{QQVHšT;Í/½×Ý/_õÅ£¼Õ¢)Òjédã¶r‘GÉœ÷ATª­ VÛS«ƒéìþ@k7ŠŠº±½¥Ylß× ^òkÇì VÀ›=QÞ-Šg*.ø9q®(ßû~å%sú­Ù×íL2wgãæ¬ÕowbºN¼am0ÚCʶ¸Vë Õ ˜¸PTìkµ b—°^§ü&þÝcäáˆñ°ƒLÂËk÷4¬3ê‹Ûfˆˆ{MXV |}¨ÌØm9U×î{Žt‹È¡6ñêËë ¦3ÊvÛíR÷“ øjï|M%9'0«L´ø µ\¶nš»Å'@ê°Ø0˲ëœ-ÖU7‹½Ý‡EKW§xuëSFgnlvó¨Ý8‡´Óqÿóoˆ]]=bo¤Q¬[’MÎÉòû'à«¥¹ÌÈwÊ’2QÛvP´ ¼»šß+Òrç‰Z+À˜!·qs׊-µe}«ó xcw­øÅtÍ`ܒל:6‹™Š3~Žš¾R¼ÚÜ)Þê:(^¯.3¸HvnÀ˜é‡P f¯{ÍâòVg»Ø²q¹ÏX8GTvv¹ªà5f·‰îÙÚn\·¯ê÷š4c-ø¤mçú0?`’)*M”]F쟀<:J\Ye½² JD=Úfh 55ÔˆÕùÄF€]s«XùÔFQû—äW#^+/‹n'ÁÈY$½ÖbtÑ@);Ÿ{Åko6‹žÎ6ÑÓ²CªîDæ~ò¡â—©Êú ¯GT¬>œ ÿæ ø’ió‹µ]_QDüjÔ †W÷ŒTÚÎÐo‹TRÿ*]Ul³îÒ?.öúÇô…Òæ ”Kõ”ò¥úDÛÜ+§â´?j®ûPZAbýÒÓwc—^´¬þº–9•—r£åyïÝKKpn§± Ç×2‘ïÞ?%39öÐûhø{7-ßû=ñ€/˜äy‘EÞc@¤ãéט~â=¥ÕbgËnQÝbûƒÔôÌ"þ ôoÀW“­¤¾/m­oQþm¯ˆìÛ`،ּNIßxçî­bÖDÙÖŸHd68ÛdÒÏŒ´lÔi1)ËÐ&z·SDÐßÛÕR'V.Ò/ÄájÓ¢Öy™ëÕµä8úÎåûÚy^‹gÚb®L˜ïŒ’ZËOL6àË;N„GýûªÖçøã]ôØ”àKÝLðy¨Z¨ÂãOÄl_¾Öõu™Sl;Šù0ÖÖ¡ýðušŒÛÒ¿|ê°•æÇ7J:í@&8ܾ 6½Ú”¸g\ “¿÷OpIKÇ.x<ûR¸{³(—wŸkm»F2ñûŠËç}ú*°7BHƒ’†ÖL‚l¹„lœ¿¬ÂJxì¶+â\eŸ¦Ë¨â„$Üqn>nüõ ü#ùq/òH ŒUëþö6ÃYW‚³â¯‘Êø‘UMÝÞœkŒíðpf8;Õg¢ôLt‰Ûè2Ì#…Èé6ÅÉXFܼÎþ•%%—@vvqRn¹ùoGŸéw[ÇýÙËe£õžéniK¡©êš |]!Ì/jKGuôà_ž†ÛÇæØ[‰©ƒŸ“¡¸¡&}i(¹ÂÜ~o×K3à|rV~¥[Ù%»¥c2ùíXu\ÿ£g=¥ëŸÓÝ—m¾ Ø»¤Ù'ny"EÿµD¶Ne£íë§ ó }¦= xÓº¿Óò ê…€»9æòÉM›nK¢ï9wˆ3N‡}›–ÀÕ7ê­)TÏÝ _ ;Atï„{Îkoᘷ½(­ƒŸOù¢{Åß°>c3ìm݃_æ¿;¯qö ¥Û’ëçW·ÁW †§oÿ)Û ·ÃHFHVÑ_i™ùªDÞzM+©…û§Ê-Lñ/$+ÚðÁü‡ßþ ½M°ü_Óàþ?Z%ÿ/{ ìzršÛ׎‡îxÆ è;ÓUVYqxú¦óaéb€?Ÿü>r€__?æÛ;Xçlm‡;¿á³olï^øUæep?¹Ö'C\„p-ìz<‡ô‘Vxäú°8^:+³L(ïü\i ]¤ãW® £=öì\Ÿûc먻U¢s;g_¿égžÑ?ªí„ï¶÷|<Üôø—´í­t¢/%G²aKç0ÆbßþãpÅ¿Ì#烿R9wàvßv¶ƒôK1mE|ñ…a>iK\éËÚJR·8áde2^í~ÌØÊ¨·î¸øªÙÖYœ„Åmâ³g ™è²ÿ¸t²ã WbcióæàÊì¥Fñ~?Šªšà–4[+z›7÷®Ìv· ó»Þ>†[AGp+h ÚFR¸§‡´#R±é}Ï­·²kÜÑ_¬-OsŽ÷µÃºŸLÛׯ·‰­×äÁö aŒ§Sîøï[à+s=ºHãÈÚªfÈùŠ“Aw|÷‰@oûÆÅp+”=} Üø}³O¯ýK¦-…ó¯ú‰u¹ÿ–Z&ÿów Ìr£ð x­}=\%ûuHyýs¾ÿÝ;Í:8¿h_"T4Áì±È£§òF¤;þ ¹Àó5·¸–dŽ4ކ±q¨þDÙMÆ0H·œ/ Ørž R‡¶öµÊQ£'œï9…%ð¥³!ŸªŠµÕjü}¤»äq£OêLh_ñŽgaê/s¦ Ü’œ>4¸áñ8¾Eÿûu´ŽQmâ çKH= í¿¡^çâVžÏÈÝ9ã #x)1mépm—À=%fë&ÛÇá™^›fÃpë²øåÒ6¤zJùmSN=ÐÒ|¥(9«·Áò›.‰#¼Ïéxå…ÔŸ’<‡èÖ;žSÞŸ„9­·ÁÍHçÞžûŸÍ–~öÏ|‡Q¼ç‡ÚÒQmçN}kÏ¥ÖOºe¼uÀ»ÕàqôkÞDßü:¯o>¦vÕÝ ƒvà–“WØ[NúûEÝðúƒ?µnีâ{¸µ¢cûÕS£[úçë\ÙåWŽ„ûw¨”Óá¥÷QNon¸®ËþouÒÿsÌ\xéO‹Ý4Þ-ý|X™Q¢¾ûƒumðý1Îþñ¸ý­ç]moÙî+Ít(.û<Üzã½ÆÙµ-¸uÕÙÆ±¨qúm¸q4ªÏøã• ¤ýÞ^¸ ÞJ`^'¯´|ÓÞú+þ8ã~î¡bü¤þ„qBýHeþòÄËtËÈ÷cÏŽ¥‰éJ?Ï"RÇâµ;µýî/ú¾í¹o PaêOtŸPY•vA>Ÿº6Ü¿]i¨Í£Ê úÔl(ûàzæ@õâoTÏpZ¶.†/ß¼<¨ŠÆqÜif_m[’òD"íAÇ0Ê…ò‚}#üøß_3*ø£ VáVÍùU¸o侸ñ| uÕ> —^_€à xEÀ\V˜¾hÌùʺ"äF/›ëÉæCßȳVÈjÅ·å D†¹î¼è¼ ˜–ž#ŠÊÝ:ÑŽÆŒTé•Ãü·l«Ýˆ~¿­#¢¬(Ïx ; Ä7Rq+G|S>Ù-å, bužçí+Ï,Q\UK<«syb›w)b|û=Y™è…å•¢ØX•CÕ'K¬®Ðox«¶j­/¹tµ%§þé9¢ÒZ¾·IåU"ð¼dŸ=¶Qkù–¯ÌÛX%.ùº¦Î×'’÷€³¥£»b¾qz¨Y¬_»DLšèðs¸¸ú1qª˜_²ÕY}I¿¡j¯œ„o²f;épû;¿-÷‘“¦¬µß6•i_-Ñ«‡=X§V ŸŸ|[·ôÑY¶NuÀU¯ð­bYæ®Ú5æ 7ßY•ÞÓ-ˆŠP'”NÑÏúŠÕ"ÇG¿äö°¹…e¢)j Á·i²vYÎV`Q×ø´¡s\áËnƒ^±ïm|#xÙ,s«6ƒ®,”=K¬|±–¬ìåiËC»ñ­bÝ&nûc>£2çŠõ j6š®[TxVSéfá›Å{p+MµÈ,µ"•£{Õe £Új™¥©è•ÍóWš¦˜èªâ)?ËœJäm¼ù݂՞º5n~v==ò9\,=^;×å¦xZŸcP—qõºè~B÷'ÇÖýw»Ì-åÊO¯o «jMðß‚ÑYñkK!]í*[”»[*ª­éçA±qÍ<ÿ:Æ­q•*¿­Û»#bå\sëA‹ÓèlñëÚf±q¡:7Oèí$qÅ­©N¿›joŸ¨VµRŸoÕ=å¶Õ”5ÛU­ä5{¶ˆÙ“õª\´ÆM¿O”ï>•æ­æ×Ä‚éJïX;FL[¸V¼îÃèWžŠ^Y õxÊB\]¬Aoë8sƒÚîRrEž+h[©òå{‹Ê]ÕkMÞÎV’Šü¤[sê•Çt»µl{Üå„“d¾ã"#}¿ã[ 9ª_†í<K#ÛÊD^FôÊN² ¥-PQ=¾·6Tˆ‚eË(–ê3Mää‰môíD´tV›÷˜l3Å·_bØŽqíÿûÓQgKGµõ¡ül®Úè³’—bbÂòÄSå5¢‡lãHÓ7>õ#GײÄË»wˆgî&+w)ýÁ•ÁÊþ½µbÏ›¿s¼+aš ·/µûäJbÍbíí¦í·²&"Ö<âê÷ZüMå‘ßßX{«>ÿ—Xçq JgKG™.Œ<¾­—~ýi[I¾+“— Ÿ¡µW³£+Tè6HËÈ¥5æÛÏ´ŒdmœšÕº?»©µ¦˜ø$i¢´A­Æå¯Wª¯—ÒÕ…•üèÇàêºòš¦JsÅ'Û?F´Ö¬vÙùm˜lý-ycô¡”ú¦e&ïWÄ/3{r.„…öߨžU(*åÊ>þuVÞjÑågÚ2'ßvñõE¶o¬þÖÑX÷¥ŸäW׫lj¥yΘ“Fýãøåéi¬þKN»_IN "ßåšžøV«ŽO¢ó‰ÍÅîáÇ!ZŽ÷{æ ÷ yïÆ± ºã„åßáj¡Mûñ>ªü9Üz‰ne˘|_õÖþn?öúîÚ§¡¾5õcô÷6í«Kù3}üõãåת÷dRfºüø~QY…kzÔ–º~¦?õêZíËêùó7íÛ[UqGÍ{Þõ­å5µÕëÄ´‰ù--f<ú¼Øåún*ÿø>¬*{ÏîçŬÌ蕹ä½{ÜÌ%¸‚—šQy£¿¿ïy1ÃGy}ÅÛò:lë™æÖŽ…Õ- ÙçñƉäÇQrÏð'¬•\T¿‰kÿ‡éC˜&”½`˽­¬HdùÍëàZ|æÁý0LŸ!åáÜMe«©·^öü›ù°°°°œì:À+|¡…:PñWø:>’õöô@÷ûïCo_ 4†œ;†C—Ö9>åæÚ×íí O^0h r. v L؉ޮvh;Ѓ‚A˜ç…Ãã¬D@³MB&óm®t†åôö@g—ÃxÈP>|XÌútµ·@ï ¡0¨¯;Ûì}æwøÀ¸ºÍó•Úç{tuvÃ`\ZîèÑÁ0Ôku¥¤Ä—f„ßœwÈ•¾üþw€®÷z¡ÏÒWÔó.€ó‡ ¾ú ïXïø[G/ =wö»AðÉO]àч>èéîµôÿ¼ÓQ_‰—cRç{{º ë}›!\x!xT,©ü‚.î;ëpìL¯‚bÝ`_øÀ.GtÖvÁui`ƽpðÀèþG‰£XÔÏ|*Î+ÕØ—Þí8àŽsÃ>ý©ÄÊö:Ø7Xv”ó\8'¹Tƒwë4«D¥ë놷[ÉX|οǭXé“Ðýóá 8£8èï´ÓàÈYç=>ÇeÛöKµ³úçYC΋_g¼ôðVëþ3ï?ƒ1M\}í'é{°ÜxßTáÁƒÎ‚¡ØÏâê0êLÚݽÀQŸÎb§‹Ý?{áíÈßË`,g–s–“@%PZÞù† ‡ãŒ…ç ñfØ/Ì 9+ì¥~½û0Lajß Ã‡àƒ¿Áˆkó!ߊÜf…¯ªq<.éA›Eµ´ÍÎ6,±¶ëî†÷{åø*í§!xŸ–¤`×&¥{zH;"ÇìOÆg: Ÿî9¨~¢þèê‚ðþ"íPy:oØpjª–º:ögo7´è¶·ª!ð÷#†ãÿƒÿ´µÀƒ‡Âࣶíw§Ð>̯ó„v䉸%#ÏQ!àCfÈ_/Ú Çìûê`¬‹ï˜„íÐ…íÐ-+,ïóç^°Ý~¢lœ˜UÅ:¶t¢‡m(í¼h»m¡\ÕúŒ3°þ±´"f)¾'“¯ò}È·à ƒ't<ð‘„…ößpåk…/Y4®ÎÁÕp­…;;áŽÅÒ—ŠcȰ:mòm穯ßÏ8ý­·«ºÐçöø¡Ã`ø°þÕG?‘|Å‘³¯e3Lü²³šeN t,ψmoúBÆ)Ϻ2 ý!9Çýz|™÷­vÖÍÂaÔ‰«Ö\f¯xŽ«ÌEp•9ßY~ê«G‡ž :#.‡P`›ô¿_Óßyï÷}8?rN<_&”àÇ7ÁA†]ôÙ~óí{´A×~Ô'¼mK{tèßÅ÷%¶F í™AÒž9ïS8WcQÒž9,UôÌ¡pÞ¡CöãìD%ÐoË8šˆlòš0}딊½Ðƒcøû'Á~üæ/…}]j2¥0–F‹u$”Ÿ's £cQ¥÷ïÐuIZŒþ±WtŒH¨ÎñëyR=ÃÁûrgg—žgŽþ®9äǬu¿aaúFŠãoÌŠ ÀÉ0}1Ùq2´¿äåqœllo1ê÷IÕg”Püɘ`Là课>v[:öGÛ TÀWÈÎyh¦ì·µ¥¾–¿ù8væ`è; gù>Y§ûð”$!·s”Û:òHš|âýà´8}Ÿ8 *}"éì9Á©Oàð_×Á?^q»]‘ÉkaïÆãæiâCüÁغx"ÜŒ[X'¼ ö©†k‡À ö:ƒ¾ø¯ô¡‰ÒÓ—h´Wÿ”ɹ0þ&Ú øêoù>ÞùõÀÆÜ0ÓÙAWÃÀm}C–>–˜Zª×ÃÊ?üì|åà[”Û&I ½ ëá¢ô»l6[Æö'¸ŸGÏ9³?³ä¼>¢ÎÀ¨¯Aôï‹mQT\­@àdKO@•¹&À˜@RBûKI•Â3&À˜`ýE€¾ú‹dˆ|8à+´“0 ÀýÓ(2PH }œÿ> “ 2pOðñH†€œü—úïOà*_}¸b£üä¿ >xûKáGWÿ;¼æTùþÚƒðÃÑæ*ƒ÷À‡{þ|úÊ™xUTFJ@.¸ÉL@8 ¾>ññ61úEd˜W÷Ñ$V÷ê—R9&ÐÿBûoðÕÿArìëi‡ç~5n]^eÍ(ªn1¼Éå˯-›ï…/g?æÔ= Jk~F·V÷êܽæ_u38±r[¼ –d^rÜ9É€/øÅL ˆ€|©G¾Ø¸B(ÿ1“ÀÉ8–ž \X&À˜€"Ú_Rð'`L€ 0&pB pÀ× ÅmÆ_&SõÀýÓrV ‡œ,–Kq| ÿ> Á^ªÙü·vTgù“ ˜á6Ž1·r4/Çí_Ï€¾3ÏÆ ¯çXáÁñþÙ ¿½í|øñ³Š£n-÷^G¶v0èðpú1Ü®·v7uœwŒüÜ03!ÿúØà ¯ÔT@.ÀxWö:ÆÏjSÉ©O ¡ý7ðk»¼“¢–§Ž½»qUª«œU©\±Ó¡´á·ðÍ “Ø+ÈMûQþÒ§§AA­c¤AþGþÒò¡¡j.\H·¯øÆÑ³9èë¸ñ=Å3–«—Æmã­ä|ŠW“Å?圄cé)ÇfLà£L ´¿ôQ†ÂucL€ 0&pà€¯lø@øýXtݪL¸6ß~ ¹ ¢ få‡Ì©à•o8HþÃ`Žø*>§}ø¡µ}ãéGÁér¤ÐŸl?Ù–rÕ6q:æ|„š¶_ª"'þå¿3P÷ÃmazŽƒáC þ’`õ±¢_ Ÿr™€5ÿôi˜¿S >iáoáÑüïX+}œö!êþ;½ï(Èíù $B@šƒÐ¶ Šò)>1Û%½úpE®c½â3ã+N ¡ý·ž:Èq-Xž_ÚRhªºØóK½Í{êVÁˆkóIFPR³2FòRŠþÚÛëþS¸ë±Íúù–UP ?΄+§üxÛÿãÕxI“|ü¾¢Ýpºô÷pŽãŒ#ñWqþøâŸNÒ±ô¤`ÃB0&ð±'Ú_úØ“cL€ 0&À†| w«Tø@øýXtog3ìÜ÷.æ8.} Ò™sVL€ 0&À>¦:›`ß»‡ðö:.üû/Àç†óƒß©*pµ™`ýJ ¼ÿÖ Íu;á]\Trðùø•ÿõ\¡³á¯ûàÅõBøÂÈÏñ6Ž `íëé„HëßལgÃÙGÂA8.þÂe0ü^-|| `LÀ"Àc)+`L š@x):/>˜`L€ ðuü–À_hø`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`>8àËʉ:Ä_'Š4—Ø`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À>8àkÛ‘¾>͘`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&ÀNAð5€Æ_Ÿ‹fL€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`§ “&àkö¿9ñ¥&ò† ¬ ¦NšZFœš 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0‡ÿ «žÿõïg&Uß'Ÿ|FŽ gŸ}6œ~úépšÀ¿¤rp.þåS‡C ¦¬“-ÍêÕ«-‘fΜy²‰Æò0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&poÅ_ýИðÕ9 &À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&ð1"À_ØØð5€ð¹h&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&p à€¯l4ø@ø\4`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜8 pÀ×6| |.š 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ œ‚8àk¾>͘`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&ÀNAð5€Æ_Ÿ‹fL€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`§ øÀF〯„ÏE3&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0S| `£qÀ×Â碙`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜À)H€¾°Ñ8àkásÑL€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`Là$À_Øhð5€ð¹h&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&p à€¯l4ø@ø\4`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜8 pÀ×6| |.š 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ œ‚8àk¾>͘`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&ÀNAð5€Æ_Ÿ‹fL€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`§ øÀF〯„ÏE3&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0S| `£qÀ×Â碙`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜À)H€¾°Ñ8àkásÑL€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`Là$À_Øhð5€ð¹h&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&p à€¯l4ø@ø\4`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜8 pÀ×6| |.š 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ œ‚8àkíT ø:tä0ìlûÿÙ{øºª2ßÿ¡o´Ð‹X (¥NÑ­Œ£ƒ/3b¼Êx}!Ì\Ç?ùÏq„1wæF¹ñ3:ÿš.Ô0ãDF#2QlƒcPšBÓÚth*MKZš¶IiR’6i×í}ÎÞûY{¯µ_Ö9'§Iù|Ú³ßÖZÏó]ÏzÝÏ^kmÞ½ƒ6í ¡±‘ R›½I¿êô3)÷š×ÒšåÉß×Ñé§.œ½ÊB3+pø²ÂVš@3Áák÷˨î‘{iï¡a:}É:ý¬³èÔ…‹J±(Ž™ ±‘ƒtxl”Î9ý ºûº?¥K—)Ïà@@@@@@@@@@@@@@@@àä&‡¯ æÿLpøjøq+uýö7tÕ|Î½à‚ Ò:y’Þ¿g7ýç~DW^p }éCŸ>y‡¦                ‰à𕈨|̇¯[¾×Lƒb‚ª>òш)Úõèh`ÏZüækè-ouùMkÌè¹/~zŸ'º¬þÊ­>sZS'öÔ£Ò™GŽÑ}Ÿ¸%| ç                '18|U0óg¦Ã×aúÅ5o¤ïþœhÕ]?¢›?·¦‚3$=q€vtý‚öÏ ½õÝEßþtËê?Ï_ÿÐ?Ò?þûÒ©‘§¦ï¾¦5R™D_Ì­™êðõ«¾‘¾ó(Qî«?¢Ú›f†Ãבg[èsoûÑš¿§Æg?M§…ó}äºïÜÑ&yýʯÿˆþ¨¶²zÁá+œA8pÀá«‚vp29|Ù·—îÝG㇉œ¹„ÎzíEtÚÂø/ÓÞ¾ßÒøQ¢¹ Ñâó^Cg¾æLš r|â0½2r&^™"š?æ/:‹Î\vºòÔqy땞ª§ãðUOÿðÌÿKK¦ŽÐ1šKóÎóŸ=>v€^GKe:º¿ô:LÑ䄌}á©®¼ÇGöÒ¾Rw©‹£û9—\D§Éê’"8|i±à"€€€€€€€€€€€€€€€œôàðUA8)¾Æ¶Óº¿ø jxk„ô{ÿï÷éÚ?¾,âĵûÑ{é®ÞyžèST?ú%Z.ÅÆžýúÉߢ'}:ú܇>KõÜLË—Mný}6÷¹è3î•÷Ò_ÜO¯]ìœÈ­*åÊeß•+—Õ<ûzûæ4–Q‡#›[és—ý-}øñÓŠÍߢ¯}öáPúk©vë”[ÉÒ=‡¯œ‚€€€€€€€€€€€€€€€¸àðUAC˜õ_SôÃEzŒßõªz3Ñó÷|Ÿv®å¾ú}¹-äeÞ´÷_ÿýà ƒÔ•7þ ÑK[è×±ëO¨aò’~\4òhÝñÑo­¦Uºè…ŸÒ¶Í…KŸú5=ôtlk»tøºÅ_=P¾¼­*¯ûõFªº¬°Ê—…žÃOkÕ‡>"åû~ ß»äÖ’ë4[KÁá‹ÓÃ1€€€€€€€€€€€€€€€€€G_‰ üÎv‡/î¼õÞïþ˜ª?º:OybžüÔïÒ#r5-¢µT7ô¯´ÒñâÛLßZz-=ã\~ןS}Ûgå*]…½åv‹{÷½zå9Î]ùìVzòŸ7ÓÊÿñn:Å9…U¦hÇ}wÐWþÂqûsúûñÛèU^ð_¶t”ŽVw9ŽVSrŸGù7gž··âaÒ9|eÖAÆ©8|}èïéön W»z¦M·†îktV%{/Ý&W»Ð]]Ì‘DýƒÃ—Êg                ypøª %Ìn‡¯`‹DºQ®¶õ?P·nÜ÷Kºkù§Ü•¾~÷»?§O|ô"ÅQê·öÓ[WzÎX2iû÷è¦ÕÎŽ|õ.æ„õ¡/Ò?þûõtj$JÃWvœh‡¯H§®RºF~I÷œû)Ú&Ÿ«Ù$·Ž\­ßÖ_‘ ÂI_4ƒÙíðµ—~|ÙÛé1¹Åâÿ}àݯ‘œ©r_ý‘ÜÖq ½ü³{èö÷}•hÍgéž½™ ›*†Â§Gv>KÏýÛSôâo_ /ÑÂ%ˈF7Èí·Ê‡ _ï’_ëÒ:|e×Á‘ÎwøúÐ?Jç²?TË&ä*fKò«˜)[Gj¹Gpø Á)€€€€€€€€€€€€€€€€€K_4„Yíð55@?\ô.ú©äûÁŸõÐÞYØŠÑ笨å9|íúÚôåÏÊÆU¸üÀ´ÿÑ/Ó>úàBø(ä4æ;aeqø²ÐÁ#6-8|…s ç                Àá+¬R?:«¾h/­“+|µË¾®üúéjW‡ð+|­’+|Ýì¬ðõ¸\áëƒr…/¹:×m£÷Ó… CA¼Ó±gé¾¥¡Mò|ÕÍÿHÿÜ{éìe§Ó\y>úôtû»ïŠ8Å:a¹ñhÁÊ[Ùup¢ŠM _.mü                `G_vÜJjÆ;|IG®Úˆ#—‡&p ¢wý=5®û4æÝr~Gž¡{Îým“‡UÿþŸt݇Î¥äµËUÁ®‰¬ ædUǰ—ÿ²t“+…Vòò°tÛ,º±ò_Áµ´:(ò…dp“׋ÿ€€€€€€€€€€€€€€€Ø€Ã—·’„šé_«þ¦‰>þé5tl|2Âcî9Ò‚õ_¡;>úM÷^¨æsïÊ;}m§uô{Ôþ¨së½ô×#÷ÓkËñÍrå®kÝ•»ˆÖÒgžý:½eM~+ÈÉ}Ûiã¼HoøãwÑÜÍ­ô¹ËþÖ·êÛ?¢êO¬¡ùS‡i÷ÿF}ð ´Û¹ÚÒwø¢Ð_ý½v)Ñ+{ÐüלCóݘç®ÀáKú¥=ÚM—Ÿ¾\²ø@@@@@@@@@@@@@@@@ tàðU:–™cšé_q /¿ëûTÿ¹å´î¹­ãϽ'WSîCgѦGŸö.Ðï~»“>ñ‰•þù®ûþоüß÷ÏiÍZÊs6ý|«{íãÏþ†Þ¹z?=²è]ôdð”æèST?ú%Z^Ørrë÷賹Ϟ[M«Öl¥mr»ÉÀ¹KïðEÎÖ”uˆuøbNmAÚQñŸzôQ:óÈ1ºï·Doâ €€€€€€€€€€€€€€€€ÀIK_ÌúÙìðuå×DT»†hj/­ÿßÿ‡jdN\.óµtÝc_¤ª÷Î^ù¬˜¢ÿúUú—¾‘_©‹åϪOÕÓÞýZ¾tMîy†~xÃÇèIß™Œ(wóé£_üï´ïoßH߸çSt»tøzuÁá‹èeZÿ秇îÏ;Žå£]M~ìºæ}çËÓÀáëã¿ÞHï¼ìÌ åŒ:ø_¡UÆòÒ/û]zlójªÝÞN¹§é°#8|18ð ÀáËG1ý3ÓáË’ÓÄËôòÐÍ?{!MŽ-yÍ™4'.ª©#4¶o?M¼2EsO[H§-=‡N]8/brì0‘¼|œNe÷§èøÔ<šy|ŠÆv 9ie§–U‡pø çpøÊ ‚€€€€€€€€€€€€€€€ÀID_Ìì“Êá«‚œgbÒpøš‰¹™A@@@@@@@@@@@@@@@ üàðU~ÆÆf‚Ã×gÿý^zþÐ>zß§®§9sb×ä2ê‰Ù!è§ÿú¯tÁ‚Åôÿe¶Àx@@@@@@@@@@@@@@@@`V€ÃW³w&8|=µ}3ÝþèCtÆÒ¥´ì‚óéÌs^E O;­‚ÔfoÒGÆÇéàý´pPþ ;>p=]³ú²Ù«04ÈL_™‘•.ÀLpør´í~¡¾ßûKêÙ¹&M•bŠ˜?w]vá%T½f-]}ÉšÈ}\8¹ Àá«‚ù?S¾1Ä                ÓL_Ó œ'‡/NÃîøÐÄ+´mß =?4Hÿµ÷EêÙµ®¼èõtãU¿ïFøÀ/BOïè£+.\E¯õôúeçÓëÏ=ŸÎ\tº]‚                $‡¯ Ÿ©_Ç… !ÿù¿äœ§ãÇ“¿SÇÑÔ1ùÏù=.ÏMåÝs~O=ž”aŽÂL¸çòúd!ìá#´ìe’ÿœ_GŽß‘Ž\«_}¡ü·‚ÞðšôªÓÏPrõÀáC´å¥®CØÖ½»ÈùçȾlñ™ôªÅg¸¿KN=æÍKóæ8ÿæäýsyM9.ÜwžU®³ðsç©qÉgO9åš#ÿ©¿sÜkŠÀ88|ÀLÇår;|O¡}£ŽsÔAÚ;zöI©—Ç“ãLå8W9¿GÇ*yìüæ¯Ë_é\59U8wŽ Ï9¿Î³ÎŸâ´DŽ“t\šs Í•¿®Ó”ï%Ï]ç§ðõ¹4_>3×u°Ê;áòçsä=ÇajŽ{î<—wÄšK§ºP:h!ºÎ¤s—œEK.rRÏœ]ÎÊ`ŽÃ˜Ãd¿t;2ïœ&õ>&×&; NmŽš¼žwlãÇž“›s/xVq’óæŽK§5’Œ>ó\& Ýå¿Ro‡CþŸæØ{~Þ<:uÞ×ÑmÙÉeñY.›³O["ùÍÉÌ@@@@@@@@@@@@@@@@N\pøª`Þ”ÚákçðÜÒ°Ÿ~³g€6ïÙAÃÒ‘ÉqŠZVprŽÏ’[r"ǹˆŸ»ÇÒñj¾t"rŽ]ç#yî=ç¬hå¬R…¿Òpð¦¤3™ó›wÂsœñòÎv7[Wî@IDATyG¼Ð±ûlþyçþÄäQ×ymH:øí“~CÒÁÏqb[¹l9­yÍkiÍò‹è­¾žN—sø˜¹àðUÁ¼+•×ãÜÓü‹Ñs/þ–®¾dëàó†óVÐò³Î±Zýª‚Ht ™š¤ç‡©Ong¹A:öíÝI5Wþ}äÍW¹+¦•0)D                0Màð5M uÉ”ÂákT®âô'ßù ]³úrú“µïsWåÒ¥…k ðâÁýôÿ.]tö¹të5H_Ì´R8|½thX®à´‹Þýú7WP$=S>:Aë¶>K~Ó;fŠÈ@@@@@@@@@@@@@@@@€€Ãƒ1݇¥pøšn™‘€€€€€€€€€€€€€€€€€@åÀá«rì©_Bê3IÇå?AÇ„s†¿“•À)Rñy§œBóiÍ#ç                 3¾*˜ƒ¥vø:*½^StL:{á8…ÒéëŒSæÉÿáøÅ¹à@@@@@@@@@@@@@@@f8|U0ÇJéðuD:{ˆÉ jS|ÒS#»¨góNÑ|ºà²·Ñù‹‹1æJg¯sNY ¾’ÿ¦FvR÷æùà|ºè²µ´y‘ -ñ‰)Ú¹¡›Kªg­¤µ¹å‰!Š`‚¶>ý í“UÃô¥Y¼Ôˆád#;us|b7=ýÌv¹B'ѲÕWÒêe O6Cˆè‹¶(‚$rá„f45FÛûž§}‡-X@Ë/|­˜mv}2豺ô&vo¥g¶ï“æÓÊ+×ÒrTkéá9O¢]ÈÆë„|z¶ôq*1Ž)&Cgš¼&]+c?»7=MÛÊééËéÊËWÒ‰\uOì“íÌV´3& š©×gBÿ¶7S­«ÒrW¦^¯´Ö©ÓGß75*Óƒ'Bý9½õãÌ,Sc»·Óó;÷‘œ)¡²¿õ†ÜŠº¿e²7ûë³¥¯ž'Pj›/u|iò©i¦‘ Ïd!03ëÃ,Îìg‹ÈôfvÖO£ôpø*ìÉÑ!Ú¾í·4¸˜OLÉ}ôæÑé§ŸMç¿öbZyѹò‡þ/Ã×mxâ4${€g­z;­]¹”¦F¶RׯvÈNázÃ;ßCJgœ}b/m|â×´ßyS|„è¼w¼‡.]6OŸpáêà†'éù}G¥#È%´öíËmÿ*ûwxÃ×é’·þµ+ÄíÝ{è/Þ¾´DЦ'žqÙÌ_v)½óò ÍñŽý–~ñŸý4édÚØzýûªèüy†Ó¬‰öÎ"šKgÊ•¾’þÆ6ÜCK®¸Å}¬±{˜n[[ª¼HJy6ߣ{Þ´„nÙ$uÌ5ÑpïÍTvªcOÓ»—¼ƒžt°NWšNZ%ý“ƒÀ§»hËAÇaà\zû{./?·’ÊÈ Ì ;MÔ2ñ^ïæ»©÷¶µ‰afûœ Ú"}nŸ¨Œ¦v?A×ÿ{ôC&öl³ë“AG–}V‡îy7]qË“nX”áìyùžmå';bÖôq*0Ž)*Ëgš¼e+b?ŒUQ÷èÏhí üñÚƒíÌðË3!_g‚Œ3Ü f§ø©×gJô}‹Ï«¡nšVf\™š¢'¾|ýÞß(3%²¿Õ{B÷·Š·Ìp ¬¿9cßW:•ÚæK_ ©ù¨iš¥Á+­“}²-(2"}"~åúDYÈ‹Ï:k9­xÝkiùÒð¿ˆüAÿÈh¸"P*‡/–ÿðí áü›™GÅóO="î½÷^ó¿;MiÕóÂiozG»E¹{4 9Ñï^êjpöltÿÉ—'bLL‰=‡ºÄU…kî½ê¯‰þãbñß~qg.å¾"¶Ÿ‹‹Ãî^ÿŽõâ?ïÝ{*òõoüš¯×ë÷(÷Ìz¤³‰Óõ•âFÎnݯ¤ˆÙÅ¡ ç1qܳ.ãïho³ŸM=ÃÆçp# QÑR](sÕÍb4KPÛgG{üúC:|‰™™“£¢É««¨Jt‡ÀôŠ®®nÑ?4nK ᦉ€1¯f…‘×»ÕM=ÅG8cb½ÝÝ¢»§_„K1gr²·E¦òsb2mµ…öŽõ«jZzgŒU& :3u4ÙQ²¾qO˜ËpOS•ߟtÆ,øËF€—ï“«]ÈÆéÄxÚPf\Ç ‡¹Lû8ÆÍX“î´1”§~4Ôÿ1e*­¼ÓùÜd«ßoñÞíÕŠÞðdØt UÖ´ ùÆû›ÓÖÇ-Ÿ¢¥¶ùRÇ—FóJ¤™F.<“@l}h*‹â{4…C\ðÈ=_PWF白{UµM¢÷DŸrŒÍŸå‰Õ?*³-)šã$+[«o}ë[¢[¾ŸÛ¸q£Ø´i“8)¾vuÿ›êèõ@«hì1ñHëêõ{"F49“Êá‹Mòyý¼€;“ZÃÇŠ=¯t‹ë “—~oüÁ¶§©ýânßù$É9¬”NOcâÁ[ò•ó¥]Š|esøblÈä÷Êq“ïT"åËÝ!º–Rï'®qqLcꥰ©wqfG€½x¨š&‡/1)úzEoo¯è8Ñ{=&ªŒ[ä¥Ã¤h¯Ë×'žC¬)\¯4¸¼š vZ<_^ïzí}ñ±žø1L¶&¼4p>.d ¹üp»9q^tŽŠf¯I9ÑÚ;tâbf g¢Žf;ʬ> W†'‡Ü>HooŸždp˜Š/ß'S» Î ö¹̬>ŽYÖŸ¶qŒfy’  2ò&I•ù>› ¢iãÎØEÆ^ñØçW|¼qwñr*ŽÎ̽gê?TÂÆLa{&2¸OÀÔ/(O?=^–ï.ú¾Å物þ,>æô1”£~4×ÿ¦2•^Þé|’Ûx®¶uÖ‘ÍùÆú›ÓÖÇ-_N—ÚæK_Í+‘f¹ðLæúÐ\³Äó,·zsW¼¾Ë<_Íâ󜺒«E× =ýlΟ²î-ÎÒ㛦\÷ËnKåü$‰_¶=ö¼xˆ­ìµnón¹ÎVð7¶«G½¿},¸Y8*•Ã×þ×[ù¹ÎK׊Ç™˜ÃWÕt:|½ n+8V½¿yýô;|ét=ºMÜVÅ<„g±³—³BØaÅR#fé^àHæY%®ò¯Wä`f¦º_MF²A`ä¥Ã h(Ô'Õͳiå˜é§\þ‘WIŒy½[éÎ{’¬¥¼?Ôé­ZZ#zB_5r&'w[d.?'$£É>Që¯HÒY¹­”öS±¸f¤Žf;*†c\.&^„‚—ï“©]˜‰y?[ÊYÖŸÆqŒYž$+©Œ¼IRe¾Ï'º§íec{Åk`Ÿ_ññÆÝÅË©8:³ï^%lÌD¶g"ƒëvÊÓO·“¥r¡Ð÷­ûR¦\ŽúñDªÿ‹aÕ×Zë¯ðÕ<{—õò™óõ7§qlá VâƒRÛ|©ãK£n%ÒL#ž) sY,Mü‚[½¹+Þ¦gžÓgñQU“pü¸&''•ãâ«­Qä¼ùgç·¶mVÎAs–ßå\æhÊnK™%BN T_§8‘JG£Ì¶{JfN¨Äo{œZ¶#ëyk©¶úM‘ôþyú%÷úÂßy?ýÑ».Rž¹ï¾ûÜóÚZùZÌô7¶>¼ä rvö–…™Úo¾œÆ6ý3-yÓŸ¹!ZûÇéÏ¥£=ô—§½ƒ ÇsË÷h×?]KóÂ×iŒ¾ûß_EuNÄU_£þ'n¤Ó#ÏÙ÷_ôL×sôÛý‡èÔSÒ‚%KiùëÞ@«ßt1ŽtbõoÛK“t]œ»˜¦v>K¿øÏÍtðѹW|€.?s”öíy†þæL¿tÒª½Ÿžºõm49)Ÿ_}!MmºŸ.yóM®wná½KÏl"ºî¡ÿûž×Ñß=Yx8w+=õ«;é’˜m31‘ÑØþ_4ôÊ$-:çzíò)ÚôÄ“´eçÑ©Ò5«¢sÇ##»èùÍ}Ôÿâ^:*¹9¼/zý›éRçS=}t¿cû¨ï7¿¡í¿Ýë²r9ýì‹iÍ;® ×.S•9ã”y2‡æêbñ¯qkê§›e^ìÜÔM¿Þ´‹ÆŽÊ¼Xp6]˜{ ½#·ÂœR¦M›7Ñýö%7Œùâ³WÒe︒V†dò–SŽ.ÏÊp»dÙ‘{1ËÿèìW¿ŽV_v)-_Ì`ñ@‰ÇS´o{mÚö_ôÒKctÔy~ÁbZ±ú2ºêò•¤JŒ,ôÀ„dómyáEzix¬Àæte.ï=øá%ôi·Ì5ÓøÏþ”æí¤î_üšv¹2I=Ï»ÞòöwЊ¥f='öm¥_þ|=/ËäÂ…²L.–yqñiÍ›VR4ØíÞÞO¤ýÍ?óZ½biHv¢‰‘ôܳ[èÅ—œ|ÊËðÆ+âóÈ ³eóÚ*óHšƒ+ÃÅ¿óz‹´‡âXFÄ“7ª¦žÑvº|1ÑÈÎí´w÷¯èÏÞq==é«m¡¾ÛÖºõɪÕYåH›‡NB…¿¬ö-ëÇ­Û^rëÇ×IÛXL´}Ã3ôìÖ eÊKÛøk¡‡”cëÓ¿¤ Ï=O‡¤=I‹ríðoZC+—Gíeßö­ô’´§ÓÎy¼/µØ·žéy6Ö†“óÊ`§ÖÌd|[¥ÝOrFùqϧóV­&]•T.;Ùþ4u<õÉL e·ââËémkWÓ­ÒüK?íŠêµ÷a¹Ó–ÿ±ÝÛé…“2ø|ÊÛ›““oÛ^’õ‚¼|Æë.‰Ö­S#´½ïEzE>qNá¾MÞ«©†Î&dƒ{éÙþŒ>vדîÍ–®>úoˤԯ~­¬*ýë¶HÚøÎ­[d%mwÌ©ý¥¯¸XÖWo¡ºŒ‰>ÛMý/pËò*·ž£­ž¥çe»=6,ã—urîmo§œ¦¾õãÊP$•Ÿ)Ö'´gäKf8H_O¸òü”.½:ßO%ª£®¾¿¤e²<žq´µhCeHÓ²}ÊÔF’ìXÖi :ñ®’uåmxâ êÝ9,Ío}𼇖±f>m¹ö@q—²öbÏÐ_JQ†yy¹àR]?%½m¹úu÷i…º­ mi†òY*™Ši¼œã¿œ{Öz*°¯ÒÙî”ì7ö½øŠ+â9²Í]nê,ò×yð´ V¹í@ WF[ ZôuKYæ%öÅem—©/&;_¥ïS&–穌cJÉÕdD^ƳñC•í¸+ƒ¼^²îo!Üoä¸sLVûr8ëŒ×.¶ÿ¦•ËÍcg%ŽÂÉĺaÑôçTê1*Çrú³ìçȾÞÓë:é¹ûócʳWÐåo}­^>Oæõ¢ü˜•½B‰ª§‰öÃó+£½«)EÎ6ýó ô¦?s ‘|‘@7_¿Øñ±™“° Q(tÁ6NûqLÚñdã-V‡9mÔÔÎ ôÄ/zÉéFŸwÅé¹erN(èo»ýglb7œG´÷%9n‘cŸùçÑê•r0aøsÛ8gˆ$gIJϨ‘&Û^¾/›uÞÄ&Ïm¨Úgœ}9û™Û¾‚ˆYt-F—€H¶:$¹ûˆï]øj¢]YûPçÉ>T–qî,èûFûFc´é©_ЦírÎRfæâóVÓUï\+ç=“3ÜîüÀ[¯’÷ys<ÊØv¥¨ç‚è³ÙXNÄí^7þÊR†x YƬÉõc†>Vbc¦ôµ÷Évì=õ¿/¥Oç»-r»‹n“`““gÐ%«—Óˆ?7‘<Ëj“AÝ”ŸCÛ½‰~ñËMù92ù~dõåWÑZ)ƒ÷7²}ƒ|?¶U¶Íùw@_þyßܾzáüßÄ|+ÅØÂ®õeŒ9“s¦Ïöü†öæ/ï<Þ꾓ó›¶)s¥N4É6/eÍ0WÅ㓎ô§¹)9^ü5møíNùfBÖHgÐ[þÛ{imLŸ‡2Öí–'fÓv¶g®çœØ3ÛX4#WÂõgð@ö2”›TŸEÇÙqõcÉû„‘2hì—ÓÓ×væó»÷ñùÖ¸9 ”º©St·Ö)m¯?箌3.ÚêƒzÇ¿'ËTUC§œO÷Ûn»óBÅõÕíÚÙ4²ŠŽ†`LÊõ§ªÑÙÙì³ããÕ8›O–5® åDCK³±ß^Ý {¿f[·óÕ™WcÙÇÝ6\D™l9¨³K؆”¤¯œ±ÒÔ‡qeqUõåZ{—”t}Œd†p¼±ç ã`5ì¨h®òÚsÉÌn+öW¯&µsº~»´à¬cMþz37˜]~nóißSÆÙ’7† ôÁQ¥Øú[}ë[ßÝÝÝbãÆbÓ¦Mâ¤søJ“a{{Ú‡¯§vE‚¤sø—N0u¢¶¶N´÷çgÛÆûå ÆÚZQ[×(úäX$ìðõþon[7~ͯ°‰nÝ©8‡¯°#‰«®¿IÜôù›ÄûC˜·­{Áwúz¢Ùì vÕÝâþ[®f2å+áK«ÖÊÝä:Zq‡¯ CµF\Wûñ~¿Ò·»êîn?ݼ[Œ£–Öák¸ûz¯!p~oO·¿tâ¶c²G¦í:|…¸åõ»V<î¦yPÜÏ^Î;÷.­þLž·<æ,îßvPÑ{ýBÎ^¹«Å ’×uÕ’+ ûþæ€WV‡¯ žœ¨‘vWÊ ÞÁuŒ| =äì•«’ö[+jª½‰ã¼NÕÍê$D_kбtÒÌUÕ¸áªCìjZÌ/Š"…LNêÕ3N¼U5²ìÔÖøŽyýÒMfóøG{ÕÉIùÙµ¨© Ç+;о³Ìp™=kƒ‰êÓÒhfy=êD}}óiè Ää£jþ’@ÊRÃmKr©®‰äQNæ‚?9è Ùi®º6/×GTI”Òýqn^>жº*ÅÆó6#m,WçÖ‹iÒÏž‡ööÍy›søëËTÔÙ'^=†»‡'WYNëêëeÛ²Å\£¶þä`Åuø •I·¬jl8ÿ‚(E^ìÔš™!>O çWq’QœÊgç=Í¡:®P~ªB<üPm {ùìêáú?óä€Gqô“K#«nBt7v W•Àlòž÷éfsnÝ\×Úçàù”TnÂm‘¦PÞê46^מi¹g“]VËú?\W5©NÙÛÇäòS £h®¨W²×£¢µVS7ËúÅYb»®-Ÿ¯j*á3›ö){qSµ²ë:Ê:HWWæíÑkǦWæÄ6Ó¢¿”¦ óòÂ' ³ÛVÞNx|Aù.M[š½|/“}».7깉Sb=U&Ûhúݲ_áÍ¿©R„Nÿ¨½ðE‰­­È†+{_·å ¦Ob«›)uã4µ?¡çgÉå™÷Ç6µð/Í8¦\¹ðÚãé•×!Ü¿*ôó£ã¼‘zn?¡-­û9²íSúRÎZg Pj¿Ýþ©×fi!û“íGNˆÛŒ=ü̼<ðvÆ–Íœ„M³Fù;vqÚc2'¹m*ó f¼Êó†ç™_—ê¯?ÏŸqÂÆÛØfÑQÌ5Õµë>žs†3ÁKZg»—´/­Ô£°ŒÁ]»|°És›0œú#®W?9Qš>„}]`£«µ.U’¦); ã½ßv}(ªzëVæ ÓÎÇÍú¾o®Z3×Êû0šûÕ­ÊÜ€mÛ¥·½|Ú^=gecúb«\åióº×¦ Ùk·™‹6É ÊÑ'Œ”©Gió¯¸1§“ßʶcn»—UUÎF²ƒ§wª_®Kh ?ÄÞÿ²w±2Žä¹YËúÄfìÏu Ÿìçíä×Ú|aþ"Ü.xu]¬-ÞãDóW¦›¾ÊD|ÿö§Ä÷Þ[pøz@l™Š¤”Îá+,r!âðå:C)NDW5v)ŽBq+|m^wG0‰KŸm;¸“јx웟a÷oë «G+|å;E—Ö~E<µwè?°Gì(8œí`Žhï9m…¾®úü¿ˆÍÌQ­ûL®ª¯ˆ­lÕªX§/îðU}¿ØuÜq°âQ7¯ÌNc¶Lö ;|É•Ñ:¤CÞ¡ýò_žëÖî¯0ž×Ї·ígyµ_<ÌWZ ­Pv;ëäÝÔ¶ž…›Ïýœ;ý}R<^X½ÌÆáËY©dˆÍˆõ·³•}gþ²†D}›êœ5ØÅ&Ù¨Æ]¡.oЪ'v[Ÿê~0ÔË¿Àª}L–H`†º˜œrÕ;ÌNŠfæôä®bÃÂÆú+ï9Áº–ž`ÂprHý¦®£p/<˜©m=ì•×hŸh`ùÙÄV öFvÊVèT¾:›Ý-Á×|Ä'xG‚uŽ”ø¤ƒT÷tè(ü©¬å ·‚Ú:P–_¾PóÁä0|õ1––¯ý/禾tï ìÉë|¤OÇ&mí[ˆ>%¤ƒ]¤L:rË–Èüf½lôTl­F®ÖX€\ÃL®ŠW[À:öí; ÉÎ,¿î89¶õ2Ù0s¤ŠÍ+ƒZ33ÄÇšUe³óÐ@ ¡ƒOÕF¿âàö¬”×´å¨Óÿj5WßÁUWœÝòYé`ªT¹C¢©ª0¹áÕ'Eä½’xäDÖý¾3«Z¾Gy>9²FË «ã•¶h˜é 'ªB_½öw(/;›Ó,_Q=<(rWòbMK¯òµ$×ɾþˆ+?öŒ"™º`YO8±È2è­˜­>“SÊ,OS¶OJ˜´eĕӾN‹Õ12¡*¿Øìèã£ò_¾¶­„Ìqvdß_Š/ü¼/ìm˺]YwôÔ¾|ZËTD»•_½Â¹{u'ï멲ٮ|é·+¤ý0`R®¶o“dû#ûAùfÉÞV”2–¶.±7Ä”cŸÄ^7k›SÍDs£Gä¥L†qL9¸j¤W/ññƒÓ§)¿¼ü‹×ªúvÕ™>4>¬i ­Ê¬ œíǾŸÓ×Â>@¨jTVó¬üÅû1Xú£8û±·w}ZÁU^ßíŒ-©ƒ_WI›I5'a&_d§ý8Æbö1žß†²8GÌ)ŒÏµ¨O¥?ÓË~ŸvÞÄ&ÏmÂ$ëÇõ*uBÈOÉøœWêyÙe/›Ž­±ú®0–LÕ’5x0Î0–LÑrƾÓ-›÷1÷ÓåÇ&lÞ’—%?7‡˜S˜2&öŸÐÌ®¾o¸oT+?zö‡èC]siŽ]ó¹êñîÄYå+˜°µ×4õœ¥ir2|‰Û}`/veHéOggëecýrô eʾ¾)çü­jM±9^É!DŽ肵N‘ù¼ZÑ=èÍËw á”÷'Ò‰£¡Ê§ñ¹Ê°íEÏ¥Ýçûìûêöý¨„ÊnKN=ÑÞÜvÞÙTåëoÌÊYmžÏoY–!¯-æïåúÚØ;o—Ò‘ÊÛ)*\×9ʘßË©mfPwLGJ=‘vÜmÉÅYáK}/Q[.KÂ퉵÷œ£©¯–':ÎòŸÇmLÓTËÕÇàZZuÑÅ7Àú—lõªm}b5ö7éTÄÜ ­üÖ6æôÉõº.opmº Àá«DÄíè?‘Û;>Öþˆh} àèUø}lãnm*åuø’ÎKºüíF^]ʴ—¼ÎV¾ºýçºm÷ˆ;Y'çî-yÇ¥þõÜÁH®ÚÅœµ<‡,îÔëðUõ%ñ\Ä¡ëq›ïã­ŽevÒòÒtVÙºNêïvȪow~ÞÛz2íþ“â°gâlÉ·¼¡u£â”µG:Ÿ}Cá½+tß‘m—¸Ýç½F<üâXþ™W6ŠÛ¯ÿ¤x¿³š—–×Aq·__ëo™ÙáKN‡Ö‡‘ö̾l@,>UNœÕ¼´áøVbšØÉ§ê–``ÎJ΀\6·¡©E´µw)Îgì‘Èa{£”¥Ú¼++_ž4OªD¢R.Œ÷³•cjÔ/ÀÜG»Ù„AMaÅ)u0£“‡w’ƒƒ Ç&x»ÏŒ‚\êdA‹³ôŸó§íHŒ+Fþ³ùîÿ=Uþ`®¦Åà¨aýµQY gPáÛiNtø+›ñglŽ97fk2*Þ1x¥KÃ*mí[ŠÄmr eJÖRlŸâhj£Ç8_N®´¡³¨Qþ¾oãÏÒ¾Û· úÒïrî™ê)Ù#&oH”ÒvÚ‚­C«ü:²÷4+Kz«³ØÛŠM]"DYÊA¨>ôºwöºÙÛ·ýq\yæ÷ô}@ý8¦L\õ °«Ó//wbiîõ_32ÉU-šEKk›èêcLODLö£8·déçðþ! w×Pª<Õß¡#§œ¹Ú§+ÆÞ#É„.ðúÎoglùx/²ÌIØ„ é9µŠS­÷²Œ×mÆ“á~W·q]x¿ÃËç¾²Ò–ìKë>æÓå« É¶¥WmÌY…&xÁ¬éË3ÙÇ^šV0ðŸNu —Ñ2lòÜ&L ͸^¥íC8ísÌË2a©«­.öcɤ~”ÌC½ÎËK¸Ÿ®ôåêÔ᦯5øÔëC%fõ,ëû*ýñЪ‹n6Ç]áoRtÔy«sŽÖö*ÓKªçìm,1gGG¿îµ*C²Îµœ‹æeÏ—AŠŽ¾vœSMrýao“¼ý”óá g6è̶ö‡j™Á`µæpýo‘<Ýp»Íïe[X¶³ñ‚ºw•ºV7oâÄYèm¾4eHù°ß×C¾_cåÓŸÓ-¢n×ëà'h8PócºçðJeËåhCLí=ÉÛ~^W*òdy‡dècÄõ¡»/Uƒ+i{Ìu‘ïŠ}ŸÆH|áèëEP…%Õ«ªýf?Yý¹NÌQOÉ]Ý#Ç9üƒ‰ î±—ßÚÆbÇc‘ÌÁ… €ÃW‰ ïxò!ûFÏ‘Ëù59{9ÉzÏ+‚~…¯¼Óú¶›|Ç ’«bmö¨ _Þ„Î$«wùÎS…ðëÄ{]s~e)îÌ]Q,/&Îáë†Ö-Ç'&3Y8|ùÎbyG/×LêyÕç(WýŠqú*‚‰²’]-~p ”Î+ëÅ .k)Sî–?ês<ïìÖ9á©Ï{ùl³ðÊêðU«ý™w̃q[:<œ:ù\×Ü)GCŒ4‘g}†5´Ac™I/û2Ú4¡240 ‡Äðð¨f…/ýÄ&ol}y¤ŒþJ)Þj;Úƒi5Í…•Õ˜~þ*+Š×8ï±HLJDÿ€r¾´u>³å_PÈŽ¦é™ç6X´v‡f[ãcŸWÊDìò09r½}Ë®5{!}êÄ«êÙ­›5×$o£ì×Yj½Î«›ü¯…¸Œú•ö´6ìhÇôä•ÎNCa213ÄÇñqyüAUí\÷"›Ëã¶Ã¾Š(ÿAšÜ3ìT7¶ù«V5[òF0رÏû°žê9—· ù§x>ei‹ø—*õ¦‹Ùxê/¡ ù¤*%úÙ¤{ÄÞCÏòÓÀTœC8>~/ #ž®îؾž±¥(ƒº4¶Æÿâ]¶wÁ =iŸŠh#•z7[¯#·ë*ñA+¢\«mE6™¹­„íˆÖ²éæ$lÂè4á×,â,bc3žäõ!¯Û¸¼®òòƹϯó1«ËWµRmÌ Ûß8½T‡¶Uç_¿«õ O5Û±VFë|°Ès+{MÖ‘ëebeÕ‡IÛ×6|Ô~h]ìë^júQ~C½ÎËEDVen&è'ås“ü-ùgìþlA—Ëš¥?^ξ/—©^Ó¯t!Ñè}Űõ` «½½&×sö6Æ„6r]ƒº×¢ I[µ‹ÖË`˜_fåC-¼lyäeax{TªüËbã\Ó±™ ×Q_ØëÄãÖ8=+ ›¢³±•š/&-½ë<ÝP¾)s1úêÖí¬'“ù—×QõÊ® A¾Z(g¡Íו!ÝÇRŽDýüƒª¦ž@È„£@V5O‚ëÁÜMBTîû¢ÊÍá•ΖËц˜Ú{Δ§Ô×j’©RÊ2ß=&¦,V¨Á9h¹.ò½Tkg§èìèî?y,ÏÛ[›DMè}}'_¶„ë­©W‹¨O¬Æþ\'æðÅëžLsƒEÈÏm/“)u·Z‡hó§¾J„|ÿ柈xÀýç9ry¿<òkqH“Žw_s+Ó¥8‡/g…)¾W°ÂsžâÛ*«a}Mô¡vl¹ßw$ó·¸3—É)‰?ã…óœ“ø½Æ|[CÏ™‰Élãðå8/äøVŽã×ußìÖ8˜Ò-‚‰âð¥Û†ÒÛò±àXqÝçï7}þVõßî7°Æëýrij™ó»ëÀñà7¿"nªýŒ\íëjqUÕÕâR©§óÏsj#Æ+«ÃWs¯Îó„7˜ÑÊ}r¸_´·4‰zg¿÷ê*¹'}•Èårî¿@&5\7û²ß{¦Jî'ßÔÒ.zú‹™0ŸýÝí¢©¡^ÔÖÈÕ¾˜,9Æ•wÔ“ ïëùèb`Ì4_œ9!xcëËÃ;†pNXþ…˜6¬×‘ñùƒvé!¯Ë]'>åOy9@¢¦¾AÔ×׫ÿD-çÙœ~°¡¤9aÜ”åÕ ¼"áõìò0—}ó¼ÕÛŒYO½ù«6z¤ #åñ¿ò&™Œ[äzúv(E5]wµà6îÙi(L&f†øòÄòÿsyüAUí< s.“ÏŽëb`îh¤+ÿ<>[N¹ú Wþ›ä–²þ„sxêj¨*´^¾;)Øç½ÚüÇâ •o' ×!‹ pÞ”« ²þ×Y õÁK¡,+Xð¸M[AêòÃcPlýáÛF!B[Fž<¦_EOm?À ©«'äen·¬L›Òò¯Ëpž}:«}¦jŸxZËHQvÍÓèÈìš•-®§?)62s[ ÛQ^6›þÓUS†¹yu-¿¦/׎4zÛâ:èÃÆËãçá Øò™E¦4¸¾ú<Ó+¢Äþ‚»D_O1~%·ÝqÑVŒ½øÊB\b_•*zd©‡lêe‰Ë¡®°ÖMÊÉí"‹Íù*XþGÊ3»g¨·¸\Q{-1W£Þ È+ý6Ìÿh¢JÔÖ7‰öλ™RØO¦~ÏØÎÚnÓÀ˜‡ì§{÷rÔôËãÖµ3™øÈDlæ$l˜ôñ®g޳ˆq g¨¯S<©Ø/·¥H?(ÿ¯¼¼qî(×5ŽÎ3\¦ ¬ÙÆœ0‚sœ•©‚øê=rõ¯­D®•±ˆ|ÈœçRe›0.«˜ÿ¸^ÙÆ:,t}™¦w–vÝRW%½ ý!.[’ÌÀ4Nâå"Ú††VBm ¶žd+ïäê:2;Ï–¾/ç§«ÇxžFV„Ql3˜§æatqæ‹‘ÌóȼYr=ÇãÎfcùTãþçqõ§E}ÁëyCßÏ‘ƒ÷ã=Û5É—»Ä}B.'k¸ ÅäŸ>,+ë¡>O\Þ8÷¸\<¤Õ«X–¼eqëò’3L¸ïåq’žùû,Ý'vO—¦Œ€—k?Ý"ÚÙ$™yÞèóÝÙ–4øÀ×IFÌÃúùšÄµ PRÊÖç#µ©Ûµ:$A“:úããØ"I\”r¢³›¤¸Ù}žÜÖty¯²‰ÎT÷ƒ6ÄÔÞs<]ßnäüºN…/[L?îk|¾ ŒâpTÂ>×5ó1×Å[óIÞ»cþ«lçì&Èê]½ZL}b3öç:el¯¸Mø¶[„ü<¾L6ÆÛ*n{™3ÊE_å ;uTìÝÞ#Zå _žS×COäÝ‹ÜÈx!ÞáK:íøæø#W™Úë82í¶49|ñë!ǯ­?¿ÃÓs"ã[w®×¯BÅŸ‰søÒ‡/×l ®kü¡Ø!õÙ¼.ÐÁin[÷‚âHå;Uq‡¯ŒL‡¯j;eãÅWO[ßñ%?x=¶_á‹w8Ód f¨rè:¿Q9xÃÌ:AnÄr Îfþž?ëW‹¦öÞlÒK=Øf0Ÿzî7–’Æ£ #'WeèàžãÆ òcÆu‚7¶¾<†Îçw5ø¶à{fëÂòkòËîTÒ+aTn¦<6}­–;ùœq Ùš–Wr„îvy(„­}sY³–©8•lôàaô²8)Êåbý:©Vôºkç²¼ÈbÃ26®¿oÛžbܾX¼<Œ^N&· C|^rί6nÎ×=ÞÞÓÚ9g^ס_qŠËä3â216\çX_þƒÕ’¼- ƒ/Pä—-rŒ:ÞÓT¨7¼/]؉Ê`±6È¡•?,häœÅËó°ð3‹ pÞ¦:J½^%R¯ª×\ã×µz™ ù!u*EýáÛF‘Œ"YºÀšôÔ×2¢”vJR gÓ>lÓIG[FlÛe'ÂX™]'MBM£Ì¼<…íÈYÕÑ®¿ÄtÕ”aé®9HÕ?]d¨»•€ñò(†NJQ>õeE/ç©]É­;åqëeJQ&Jn»æ ò.¶Í—7Úzˆ—Ï´u‰²å€ËÂÊ»µnRL^–9¯Àô6Ü7Å…c÷˜<&.—RÇ”ƒ+OX{\ yeÓ0Щ|£ö5äJ}uM¢w8Ã*Ö)ì'œ†þ¼ÐÏáñËc§©×µ¸Ý‹æpÅØ»9½ü]ÜüšžG¸Ïû6s6a’4˧’·aýôçÞ8†óJ=·ÁÓKQ'ðºŠ×ü:'Âe ž1ÛX>¬tìª÷¶ec«ø°•IRPÀ…1keä\2'3æ¹+—MƒB…ËZ½BAûÕº>„Œ#MÜÚvÝM?»®iÒÓéÂÃe«C˜˜Æ¼\(m¨Çž9v{i¬LEBÿÂ΋ ú;›ú¾œ_Pg:ó<¿ÌS'…ÉÇn7fáqg³±@'Ó[Õ5câõ™¡žwdH*CŠ åèä4sàäìòOöÆç¬L}¥¸zÅi¨?ìubqëòÒÀÐ'Åîkë'ÿÁðK7‰ÝÓÉ$£âåÚO—É’®ìðú;aéÂçiøwï^|™dDÚ°\VƒŽŽ ™ÊZιm[·ku`éi¹ŽÆ±E($“‘‹Röta“âf÷yþq[SꬂèIl‚ûAbjï9 Sº¦ëAXV~xÙbúeqøeèc²Zq]âúÔ9ç«fÑÕŸßQ@MqÒÕ«iÓ`éóú$óØŸ§Çì7°ç=³å;#&c\ÝèÉomcE´jÞà¬\àðU.²N¼#›ÅC¾Ó×#b÷Q5±érør—¿ûZÿ%]ÿ/ұ頸»º0ñظ¿røê_ÿ?>oÅ)îÌ¥wØšü™Š8|…tz¼ù“¾Neø-š•ÅŠ`¢8|…ÒvÊxÜ2ý›šïÍ_3ÿ»û+âÁõ»\Ç4Õ‘Ä¥×ß!î_×%žØ²QtïØ&žÛû‚xðóÞ*_Óãð59ЦðÌÕ4ˆ¶ÎnÑÛ×'ú凃Cƒ¢ÝŸ„c V4&‡DwG«h¨­Vâò«ðòü,hèp\´³•ˆr¢¾¹Mt÷ôоþ~100$ûìö¡ç ±n9ð …SÖÉ`:–7¶~ÇÓÐàáœãQßqC¾LhîÉßÖ…U®i–jGìœó0ÒNë›[Dss³ù_“ü’]®Tš?ÆwbeäZ^)µÉÃbì›Ëª<(ƒ–žq*ÙèÁÃèeqR”[ÿUy/jDþƒX–YlXÆÆõ÷mÛSŒÛ‹—‡ÑËÉäáÌ ñyÉ9¿|ëI?n®ÄvΙ›êŒñÞ¿Îóq™®‹s¬-ÿr‡{5•ÂV¬ÝÞKu9Iì–Pö%|£ãñ4Ü)rRw§¾­iécÉ0Ö9x~ùò³ô‡,^ž‡…‡yœ~>)éÃsÞT]/ZZbê+Y—55·‹¡”ï_yÜz™ôùQªú#ÌÖ–‘‚Qs’FO}=!#Ki·‘d•pí“Á6tôe„Ù!,ç«°WdåK¥»©ÀºxcÃTJ-³QYWØ÷—CMÖÙ‘îZ µw¤kƒÔ¶D_þâåñbÿ–ª|f‘‰sÈÔ.„…לó¸õ2Y–‰¢lW Ê—œ§†üGòÅO°…4_‘Å0qÑWc+Šœ)ë’r•E– ®H“G¦:–—e}þÚ•iAÝ)Ïìž®^“ùÂå êËòÕ/SP.TB^O€I1Ð×-Z›Dµß—öúÔί\AU7íç¿)ì'S?‡Ç—3• Æ.b\¸ð±9\1öN%|®‹›_ËćEn3'a†%©=L'ÏÛŒãÎËÔE„ãéêíxKFÄë }fªÿÍ6æÉÇÇSTÛæ~,ÈWãðW=öñ˹ùzp.óÁ%už{ä¯M\9Ôê¥`i©ÎW¦ö}eV~xÙ2¦ixÞ…ß/¾áG[Ì¢KáÆä¤˜Tþ%%ÀôJ²ëú$ÃØ_Ñ)°ýÀ~Ø+!ÕøÇ·]_Fù“l^)kÜÆ”þ(³÷¼8­8|Y²?4"öîÝ-vlß%ƦL‘Œ‹îVo•¯öŠ:|í9¾EÜ$ ¾ç4sg÷Fq¿ç Ñøƒº© Ž_Üq못ó[ òk'¬ÃWD§ý—ϵ…мm$åoL¾”¸ï»BŽuþ*cšëO0gµ«¾_µ,üü÷L¯Ão ª:ä«“è_G÷ÕeŠFar\:eu‹æzîü•r~¥Ñ«íi˜»ßXFEŽ\éiäI=)ÊD]'C¦Â[_¾<§Î½ [åíÝÎxiòøØ—%ùF®ú“Ò/‚ÇPÄ1ëœ) ¯”)Ùäa1öÍóG7x0w¤â²Ó#°_óW êv.ùÕX^xöëéÛ°|ÆtÝ ®³ÓP˜LÌ ñqQ;ƒ¯²ü¸ËhçÜvLËqvÔûm´ÏN‘) p]œcÎ×/ÿòú@{]!N¹‚—t¸mªÊ÷¼/:œ uÿš¬7Ùòämý¼Î´Ïû°¬ê9‹7T¾ç¸^~>)èÃó娛ûJ[cñ¼ÔmáÊÝÓÉK.kûÈ9ø¶QàÀïea¤`ÔœøÛ}ʾQ¶zBF–¢ j’”Ζƒ·jŸ²–f?ë´xâåzfm×mû8·ÅŽx~QÖþÓUS†¹Ý{öYŒmq¼øT[Š—G}68ãrS>³ÈÄÓÌÔ.bxÜYê)i%îLe»yq;ªüú±u@¾¤îÖ—žbÖ¶ÂåL[—”«ðxSkÝ$œr•%ÿ#å9Á6Brùu ׿Äõ‹g'úßJÈ«—d|xPt·7ÛÈv5WŸrÛ-ÎÙu?‡ÇglD½ï@b¼î«Í˜‡ì§{÷£7¨õ]ޓΚ! a3'aÆ”¾w=.N^ïe¯ÛŒ'ãûAyµã-y+¹3¼8åmTÈÆÊô.‚I¢Ã×ñmÌOn·iàí¬ÈÖÿʘ²å$wøjÜxP¹—_=l½¸ÎÏËOŠÇ_ÉëtX=}ãµ­ô•*¿œ§{À—Ó'¹jR&ÆÅðаљˆ¿ jéÓwv•Äd#Ê÷W’*<Ø×l!YÝœ~‚„w𫺔dó'£¢­®FT×ÖŠZ¹uGŸ›8kY£Îsî~Çs²­|`þ"Ü_¹Gæy}ga£F]GBYIÁÛÆK!›ô¾VùEz¨•ò7µ÷Ë›râß·%}˜| ãbt¼´Îæ†Úù÷y©ªÏlò°ûæy«<ÄéiTBްу‡1®˜'÷"¯òò\®•·(K–rrý#y¥³ÓP˜LÌx|r¢]W[t5/œƒ¸Ëgç|b¦F[×È—už3,›8(¦ü;†ÃœZë››ü:‘;ªv7&Þ«˜sm½,õüÏ>ïy,Ñc¯f Àí&È'‹>ü@{àVÇ„x+$sœ.öý%¦«¦ s»÷ì³Ûâ:xñ©¶/úlpÆå,¦|f‘‰×™Ú…@lã×'K=¥ôEte¢(ÛÍ‹;ÊV³¬ié]A}Ù6 ö!­mŦ.‘eº,åÀPWXë&1–«(ù)Ϭlél#$—__–‹«Ñú½•W6£ÃbxTµcO"ù¦>è[×2ëZ@IDAT´jû§þ³ÞÁ~¬û9|R[ŽÅuÝ‘ÉÀÀYÌ0çìIÈ~óP¸bì% =äõW[óqS°™“° £U‡]̧ý8†çOê¹ n›™Æ[iê0ËÓT_Îø8˜ã©oi5…1m®¡“ñ-þPg{ÅÍ›dÍsG›0ñºs½JÚ‡Ér[Ë6a§«­.öu« m¥iœÄÛv¿ g•ì‡Õzs4rìÞÒXS˜—¯ØçlfCß—óóÚŽë?h÷б×$yìmŒk¥?6ëš±¾(¢ß¯•¡\}BÞ±rWÎü‹ï3ëóÅ»ªeãÞL®?ìuJˆÛÀГ™×[Æúɘ°tC}C…!Ë7%´Æ¡©¸v–Ç=VÆç­}Ñd?¤ÙÛ-IÖÅœ…6_KT†Ìm±×(ż£V å’͸».‰vciËIuv›à~ІðrcÚR\ÿn"M_ÙP¶Œúžç™YÂ>ÖúبK–™ÞÚzÆ~üäH‘yìoÐI©{²¼3*â}m’Í+eM©¿Såz–|Á³å$‡/Kº»ýˆð¶î}èI1¢‰gdóO‚gX'…žñ‡.g>=pü¨ØÃ¶ o•¬ú4&¼Ÿ|g/g°r‚jûBàÌåm×Ä‘_ñ*p$ºZ´íÍ;evøj^¯8)%‡ßlC)Ñ?Äœ²|ç-Í5Æ&¬«¯×.ñ~oàìü^¿ØÊâ´e’ìð5!¸óÜU O¾‡ [3^uý—DwÁq‹;|ݹ>¼åAñðçƒ|tûîÞ’w ›.‡¯èŠ㢣>p²pdjÉ{B‰¾Öà ‰h¸|‘àŸéK ¥ðð mù•AØéÙÌöZœ<—ï:§0%Nï„OØËÆ-²-ÇP‡¿-‘·= kµ µCÇÜÙÍ߮ѓÅù•ºz™$¿”ò'{  Þ¡ÔM´uúÛnÊAC›ãð%w(39PtÂUÕ4 eq ñ!ÑÛÓ#zä¿þ¡Ô”ÝtÍŒ/m‡¨…îÇ"ƒ¼³„oØ¢Ìöí$oß‘Ò Ï®Yèá¼pò¶í#Çñ2¬ŠŒžëLŽÛÛ0×?â\i°SF7)g´ ŸÿÒ–jEd'©p_]޹(;gÙ>äºï@ÇžìP꣒”7úAÑ 84˺.Tg w7ùÜN½ìüËÕ‡_ˆØç=ÓRsÈâÕ¼xäÜ2ÙwX”úúu"—@2Ï—ƒ*Ñè:¶ò›æc^6HÚWôe©02æÞJi<\1õG¸üX32«˜¿c]OÈà†2”¤sߦ}²n#ù‹ÃŒír¼ŽÌ® ñVBfn+ŠÕ_bºjʰj÷…=ÌŠ°-®C¦:!ÁøT9ÃbyÚw®KÖv!A¥ ÏRO)íjÉmדšOªåÛ·íÑ}\„­d®KÊULõaºqÛ)e9Pò?RžYY7Ø—ËïÇ”‹«gNÆßi–w¼WÔym¿ÓnøýOƒƒLD“ýX÷sÙßÓmoÇÛ'{‡¯3Yöaº Öß…vÆ’Íœ„M˜ ‘SÛ8­Ç12‚y‘”sÜž3Ž·x]¡¯ÃÔ±hð ·ßqŠÞ–õ^™,Œo¼¹'ïÑ¡þ^w~¢§·?2Wä=÷«µ=À&lòÜ&Lœ>Þ=®W©û¶ó¶ºZëbY‡(íhL[àÏݱgx¹Púé^Æ~ýµ¼q»ó›e.³gSÌØ4(Ÿ\P^Vƒ—ß\ÇR÷}yÜ:™T}£û*÷ymíÕ!‘$°¶1ÎYèÌuÙ–!Þ'È2­“AY1ó=·©Pýoê+Ñ÷HÌ?>ñ…·–›•LGV7(¹l­SBÜ&†^âì¾ßÇ÷îÅþ²tK5¶éÙ´³±bnò|×ÕQƒÊÜ)gaÊ×R”!wÞ>ò*%4ïXøpJ•#Û¼†6ZOšfwˈl¹$¶³ÌVÕ® Ò³û<ÿxÞ—¬ ‘iùc¿’÷•yÙbíÓOÕŸ?ªCYƦêcðw|ƒac‘{hÔ%KÄLoC½jUŸØŽý :qûÓÕ="æ‘•ü!OSgóJYSÚ9Æ4R¯gÉ<[.pø²%;ö¼xè^oõ.ùûP»èy~—Ø?rHŒìÝ%~½îßg/ù\ëS;")M¿Ã—ã¬rlr‡!‡¯];þEéÀÜÔÚ%¶:(v¼rPlÞÖ)nªb“óµßó·!LvØ’«Œmd«ŒUÝ!ßñ‚X¿e‹Ø*WÔâ÷ô[B–ÑáK:wõoyHÑÛÙ&ÑÛbÑ–I‡¯]/~OI÷ºÆï‰õö‹]GÇÄÖ7Šo|á“ìþ­b}aõ±§¾É®K–íØSÈ£.qg­·•cW7¶æìÊéðÕ×|]@U ¢{`XŒ‹¡þnÑT¬^ã9ÔµæWÕïka:V‹æ¹µØð¨vtX: u41•ª¨ƒU¤tÉ ²ñõ'R¤×·v‹a)ËøèèiçñyŒêD¯é‹ìHüã¢ÍÛÕ)C¹:ÑÑ; FåWÝýÝm¢–M.V5uB³ÑÐÉà-ïx†÷`wu•º¸l»D½R&Ûƒk ‰Éþ6Æ[:u5wˆÉ{x¨_´7_ÄrǾ\¼“5íngïìáÁ>ÑÚÀòžäê@ìãv¾¯|®Ñãj¸À¸) µsâØ[ÏÀ èëÃ,mC¤òrö<´µoGž·Ù:Rf òw²ë!—Ña[[Hû­ª—euȵ'§|t·«#9y¬¸Áò"£ sý#ye°S&3õ««ªºVéhèÔ'£nùäõ‚£Ÿà,ÆÎãsj€­Ô'ªj›Eß S?J™zÚ•ºÊ‘©$å¿ PWc•RÞ)üR]™lÌׇ]áO„íó>ž‹šW m=bhp@ôö60)‚íƒjD{¬£e}59>,úºZæuíêzfq2óI'¯H~]íµuãÃý¢¥ŽóöVÇ¢TõG¸üØ3ŠÓÒ¹g[OÈ †2”¢›ªMû4 ¶i©ÛH>Q›±N‹×1¹¼X·ëEÈÌmE±£ÑbúKñe˜—— ··-®C·,Æ>ÔgàO…KU>³Édß.„åŸsîYê)eRÇP&ìm7’oæÊ'ëÒºÂÁSΑ½­dîë5nˆ)ÆúÐ^·r•'ÿùWëj›ÌÊ–Á6¸\~?¦\\UCÑœM·¼,=iÏUõ-¢§P®|ìŒ=GÅÐ@26}©Q$Æ~lû9ÁvßNÿ('š;ûÜ1ò¨;äã9ç>{.|!Î~ìí=œJøœ×wAl×´™“° Ö!|n§ý8Æf<©æw–ñ¯+‚o÷ìÛ®$yœ²`ÛŽ¹¨?Òéj[†lûý:Š›£©ÿcúJÁ–¾²¬¤ž÷,çü­É¡ÙÉËõ‡õØ(!n#±û~_o~¡«1ù–B_^Žxº6ílH0Ãi¿:o[Óäö燇DWhžÜ©{¹LZ›—©”¢ ¹m1{Ç6>< Zù¼#ëãS·›t0Àò/gwÁ%±œ0[Už â²û<ÿ¸­Å·#­@ìx¢ÚiûʬLóñÓOÕ_•ÅÔ‡NÓÇ(î§–plÔ%!œr›q2ôËìêo–±¿Q'û¹A;ù‹içÒÙ’’ 8™Vpø*÷Hß:Å©ËsàŠü>´N»˜÷\"¸A½¾¼ªÌ+|åW¿Zÿƒ[ÝA¡Ûa•RØáËYUê‰ÖϨÏ8Ï…ÿånO°U¶’¶dúrµ-ONßíÝ{R9|5úK§Êí&YÚÞJXÚ_ž¦tnã+w…Ÿ_ß¡²¹¡à$eË$ìðeJ»ûwDù†yËó»7î V;¤gpýŒxð_ŠÄ{oßÁD“Kêè8¬à…€ü Ô› ã_qkäw¾loW¿ˆpäméÛ'ÚÙªRQ»«iîI”ß{@÷B‰Ç]ÛÜ.š|›*¤•v‹ ù‚´V«#“Y®äÓïOа΀ìd辕àÜyÇÓѧ·•;b±4¸ ¹zé´æi/y~„ÒL_}‡êÑßÞ±'ÎÓ;néUµ‹Ó‹Ik84Øšó´ì(_KLøvu†H󗳿!çɹûÇ&ûMåð¥-S± nfÕà –&ŒÔ«®/c]„ ÇåçÊì”ÛnÀe¬‡¤zªÓšg›ºß°s“­rÃøþL'‹w­$å¿ ‰¿‚W.ïtŽ[È×MUùò“_ñŠÕé¾6E佇þ€¯ÞèéO¹&·Ž,ÆÄx¿h(èåÇë—Õ ¾ šm}¬—–äYºx嵿Vr;×>o®?â꺢™”ô®[Õ20ו•i/Ú¤_›ö)M ·‘¡IF–[¾ˆœ¯RvbuL./NÓ.sL=\L)® _¡‰1KÛâù‘µ]ð3UwÀó3cù,F¦bÚÞ5Î=¶þ ×S)Ê„“†ízÒ9ßÞ–qÞÇ še¼Ç-m%­œ¼¯[–rÀm+\ZêVŒÍyXM¿æòœ\¯q¹x}Y®&üëÓ/ï¾þvöR\A¿º®/:?ˆ³ë~Πh¬Š“ßÓõ ¹€ê±Ù~äs–ö®¦=ãi*킟q‹9 ›0Q=Ô+öqZcÒä2·a?Þâu…’g oÇø3<¿ýö­0n`Á•±·ó\mk~ÕòàuŽA·âuð¬þˆËÂetžÎž6ynF¯ ¿ÊÙûŒµ}£ÐX'e®.°ÓÕ^IĪIn{Œã¤˜~:Ïg¤E™ÃÔ¬h®ПñöE›¿æ±irVË—?_,%)Wß7I¦¸òê l%Ô%?uÞÌiòšý¹Ópýàgˆ•ù¡.|üeW†œDlúý&Þeér[ža}mÕ6XÙëÁsÛÊ&âŽcè¤Íîó>>ËtÌmÁoSÜv;A&'YVŽÂéfogMª×‡º¢ï¬|¹eY¯©­öË6—‰ë©ækñeˆ§¯;n)Ѽcœ*¥èYšz‚»Ò„É<‡ÇlÕqxŠÌñ±û<ÿ¸­…óÏ•µ9Èwý} ±}7‘$ÓоCbú…õçùëÛQ¤ÍÊ¥Û7ˆö1¸lœaÔ*мÂûEº¼L=Ó'&›údÜfì“?Åôläçù¨³i£Iîél)Uá¡2€ÃW‘PÇ÷>/~òH«Þñë‡ÄOºŸ7nW*‡¯ýî–ŽëÅ …AÚußT·J ;5í9¾GÜ}=›È«¾_ô³í ½ç×w?$n¨bÏâ'Z#nlþqÄqªãý~§§qcx‹Á`«Es“ó|røƒâþªJŸO¶6ôä5þ¾°q¶jÔéÊÃ>v7[9Kêúð‹c¾“UV&®Ã—Ç:!íþm?7UGWærá«j¿$WðŠ2ݱãÇâFM9Ï?înµ)óºVÝÚñžÞ4_ÁŠ[úíÇE«Ÿê–Vã¢N#SUm£èq?«-µU¾­8úåÓ—+ 5ŠjÿKKÕörUµ¢¥3íNàQ¹šK½×©Så­mlƒ¾³—û°h©)ÚÜÕ#Ú”Õ ub®F´vúa¼Ûúà o*?Å3ò¤3üf®'d<“}Á—‘5:{2¤Å.Û´OÙËHv«cr¼žªÓ*³LÔdGnY±í/Å”á>æ¬Þ¢x¤Ka,l«œön[>‹•©˜vÁ³£ð¯}=UNÛåR³ J¹êe[–?æ[ØŠ4[]RĸÁT }O¾­“²µ´ï–«ÐtPyÇ»E#{¤ô;äx­¶¡Eôgéx$Ùm?grP´Ö³¾Ÿì»²ÊþK›\µº³Á»WÏ>^2±f×öSx¦ˆ²ÌRQcÛ+>6s6a54'öqZc2'íÆ[Éí¦\×ÔH²1Ÿ$ßÖ¾Jt…‡µÒ6‚9† N˜~ü12žÉž6yn†)¡9œŽ>„MÛ';Ž™ç íuñÀdK&·=N;ë8š£3÷Ó=yò¿CÁ‡˜©WŒT£pÏfSß—×+‘1‡ÔV©Sú¢ qp_SX´]\ýüŸ—!YmÌ gþ t‘W+ã¯ìeÈK%ë˜Õ,Cú„1eÊ•¿,ùg?Ûß¼£Pó'EýáeHfâNd|ð®ÝÚÓ“K÷kl·d’q%½#ÉÞÎêŒ^tß½Þ{ÞQåªëdYîÒÐÏßÛH›m>Ö2ØIè’» ´iß=ÉÕ'#óööï-’tˆ’R¯dwÛqqæ­bǤ–¶Ìëlµ\æåTØdjCÊÕW6ÔAqúË¢šI} ^.ËëðÔ;ú÷ªÜú³{alê“Ìcÿ¸ü‘²37˜U~nóú~ŠÁÆf)m‰áÅá4(•Ã×)ŽÌr’(óß¿sÄ ó·5§f{B˜œ ÑÃtìØ1:6w.-˜¿–œ¾0VÄûî»Ï½_[+‡{EüˆI:BÇ‹ˆ!>葱:xh‚¦¦¦äƒóè¬å¯¡ÓçŇI¼;1B/OÍ'šœ¤y‹–Ðé ‹01Å’>P& 졃ÒµÄ3oÞBZ|öÒD>/ïÞEóÓ¾<édð¯I{Û94NK–Ì—qΣs—-•–Ìÿ¦hllÂN‹Z¤35Fû†yÏ>w…uâ©{ÍÄ22­2ÇÙ‘¼g×_*¢ Wȶ˜™)‡ÖåS‰%ëIqíB8µRÔSá8MçÓj»EØJ¦ºä¤/E”g“¡8×+Á5Nž¤{Öòʈ¥­ŽŽÒ¡qg¼æô;ɾÍÒò-û9r<7(ÇsóçÏ“s2g”¨ÿŸÂ~Š(ËIÙ¦½oËÇbN¢äóR!Û8­Ç1YÇ“2?‹oió,öb²Míü!]~чi“Om;MÞ[­[ŒÐ=ï>›ny²šºGÛim™†¿6ù`“ç6at˜§³áÔ•6óiu-™.–uˆŽoâ5ÙöÄÏmMÑÿêrúðÝ®uSÛÀ$ýáŠâFγ¡ï›ÈµXÚkª¤§ÓƤ@iËPXö’õû­ûXÉõXfÿ¼œùç'2Í3F§"ò-R›v6E´²‰Ê¿'r^‡.,¼ïyêËtöÕã—Nô§¹l‡¢ÊœwÜ=,ç5Ý©ûEtþ ùî)F‘ÊÔíD™ÆÝù‹âÃà„¹%Ëêôö•Mš'•Åt}Œ± ÷Ð’+n¡ª¦úÙÍ—››‘׭ꙿ¥û77h%¿UN%Ù’U¤T¶þVßþö·iÕªUtÚi§Ñœ9s_™Q*‡¯WèîkL )äd"pŠTvÙ) ¤»—s„?,ÔÃÒáki–àx@ÊNõTÙ#–À=|ú>ÿ}É•èj^ÈNí–NaçK§°\ öþ-?aõ™^ÁfSb6éâYÁÄÖiÑ¥ŸÎŸV·Ðhûÿ¤lî^LøPLí¤ïúgê~¾›º}„:Ûo¦eÊôà ‹èÓ…þ…Ü=ó œÌtéúSôãÿu9ýþ]›¨¡sþî=èAÏô|‡ü³‹¾*˜Ÿ¥rør–VÛ/ŽJ·/«EÖ*HIO7Ói.-9¥¸¯¿¦[f¤  ' ÙøâàDa 9@JCõTi8"™E`jl7ýàK×ÓÇîz2/¸Ñ!f‚¾'_Ú~L¾´­j–«üéìZ ˜\›M}ˆÙ¤‹\:’voø7ºþŠë©`Ýd³ºL1¶°  0» 줿:å"º» dMS}µöZ&W÷ššØGëîû,ýþ-o/ª£þÉ¢•xÅ6»Mâ¤Ñ.}cjûÃ4ÿ’ë%™jê‘+ä:›^à@àÄ!‡¯ æE©¾ŽÊ-­áòUÁ =Á“ž/Wõ:[®î…µ½NðŒ‚x  ',Ùõâà„Å Á@Š €zªx   0ã(+øÒWQÇàOéËõocGvn¥_&:oÕjù2×tÒ̦>ÄìÐE]±Î3Ð\C'mø»÷h¶*õžÀ/€€@V»Ÿ¸“Îÿ½;”`¹\Ž6mÊo£ëÝÀÊF üÎl} éü¸uÛKDg^@«W`Ç‹™ÿ~6€ÃWsµ”_ŽSÒÝëe¹µã¤tþÂp§Vö‚³§‚cÈF`Ã=ï¦+nyÒ ÔØ=L·­Å7A<  Pn¨§ÊMñƒ€œHÆ6ÜCK®¸…‰TMí}­T½Ë0(©gSbvè2B÷¼élº…ùT7´SëßUc+ÇT‡@@ O=H7]ýiú¡.X®†Úü*ýáåêfºGq N|ècœøy A 8|eãUÒ§Kíðå ç8~yÿk~yXNºßSäZ^óä?ge¯9X×ë¤Ë(   Pzû¶ÓsÛ÷ɈÐÊ·\ŽJ1‚IõT‘@@`f« lÚ²•=ô³–ÓëW¯€3ŒeΦ>ÄlÑeßöM´}ßaiÜ hù…¯§ËàÈhiÞ ) LѾôÒþ—iþ™óéàîÃtúò•téÊeXY1%A<63 13ò R‚@ZpøJKª Ï•Ëá« ¢"J€¾*˜ pøª |$                 3¾*˜ipøª |$                 3¾*˜ipøª |$                 3¾*˜ipøª |$                 3¾*˜ipøª |$                 3¾*˜ipøª |$                 3¾*˜ipøª |$  ðÿ³w/RTgÂ÷nr÷0%*ÑQDE7Áø®ûN4h6:nÔìH²ê˜õ’‰Ÿ‰àjHÜH?b4D…¬JVÑÌIУ¨™ˆ(ˆ fÄAAp@d€~OUwu=U]Õ]]ÝC3Ãé[]ÎùKª~ú € € € € € € € Ðø*a¡ðUB|v € € € € € € € €@ à«„…FÀW ñÙ5 € € € € € € € €P€€¯_%Äg× € € € € € € € €t@¾JXh|•Ÿ]#€ € € € € € € € Ðâ|͘1CŽ:ê(éÓ§téÒEº$Ì_œüÇM@œ}íkë𵯕éA@@@@@@@@`߈oEÀWÊ•€¯" ² @@@@@@@@ö#¸_sæÌ‘#FHß¾}¥k×®Ìð§ÎðGu@@@@@@@@Øø*aÙðUB|v € € € € € € € €@ à«„…FÀW ñÙ5 € € € € € € € €P€€¯_%Äg× € € € € € € € €t@¾JXh|•Ÿ]#€ € € € € € € € Ðø*a¡ðUB|v € € € € € € € €@ à«„…FÀW ñÙ5 € € € € € € € €P€€¯_%Äg× € € € € € € € €t@¾JXh|•Ÿ]#€ € € € € € € € Ðø*a¡ðUB|v € € € € € € € €@ à«„…FÀW ñÙ5 € € € € € € € €P€€¯_%Äg× € € € € € € € €t@¾JXhq¾vmo‘ o,“ õKeãKeÛ¦¦æbßÚõ}”Çž"‡7F;þ4ésèg÷­’@@@@@@@@  ૼBWðµuý{òçɕҲá}é{СÒÿ3¤gß~…&¥Ó¬ß¶s§lýh£´lÞ$]ºt“³nž)Gœzv§ÉA@@@@@@@Ø¿ø*aùÇ øzáŽk¤qñŸäK—^)Ÿ>¢„©ß·wýéÇ›å¹ßÞ#;wµÉÅ/ß·Kê@@@@@@@@ˆ(@ÀWD¨öX,NÀןnºHö´l’³¿}½'Im›ß•ßýi¥¼Ý²E¶·î”ÖODzØO}n€ z¤Œ=e¸ ìæY¥Ó¿x}ÑS²ò™Rõ‡w¥K×ý,ó¾tÉ  € € € € € € € ° ðUÂr/fÀW˪?Ê€KîÏ’›¡ò«ßþH®yP–e:×G|u®ò$7 € € € € € € € €"|•°5àë­?Ë€ÊûLn†Ê“ÿYFìúD>‘]Rÿòórÿóï¦sùèÉ׆~Ý™ŸðÕ™K—¼!€ € € € € € € €û§_%,÷ö ø'K_ù®œ î`øæ_–QßÿÓ3oœ& ¿1ÜÍõîY³vƒlÚÞ&=z÷‘,ŸØOº»KØÏÚvï”¶¶nÒ«g7s»Èòî†Ò£_<ðPé•Ú׿õë䟊ôè.}úö—Ã;T1Ëýµln–÷?Ú"oéÓ¿þ¹AfÙ %wKëŽÝÒ½çvšÚ>i–·›Ìz»’ë9dô Þ…ðäÉ{ € € € € € € € €Y€€¯–^û|&‹k'ÉÉ}tÆZä×W~SnX*rž øz<ðõæ‹”K¯¹_^׋ZÏÇ|]ÿìrò!N$U«üæÊoȵò ™i™Póßé5¦=òüû°-ò‹›®•ÉϧßN?9oâdyøÚS¥—óΧëä·ÿÿ2ùIwÖ1磧üL~8a„'ج%5sÙí3~)§¼õ¤üß;:‹§OÇŸ¸YÎ’ÞCús¾Ò33Œ7®¿Ú§È·ò+ùuÅÎÙ¾>]#–ß 4Kg¤Ë¼÷ú¢§då3 ¤êïJ—®¹f1Kï’' € € € € € € € €ì³|•°hÚ'àkœ,®ýnö¾Ry^óâ¥úšûíÛ(zŽ'¿úî×ä›ÿ04¨å|ýꑇäŠcS³Y+ín–Çîùo©zОžË³™3/1³ˆ]ûeÒS½ºü 2múUòïÿà{Yk¥gøW-›îü'Q{6Ÿn”Û+¯”¿eÝšòçæÖ”¨ðåÁà € € € € € € € €@§ à«„ÅXÌ€¯øÙØ-›76Kk÷þÒ«íSiëÙOè œŠ´íÝ;esóÇÒÒ½·ôÚ±]Úú$ŸË¶sëÈ6ï”^f™Öm"ö“î‘v}!føŠnÅ’ € € € € € € € €C€€¯–Ó¾ðUB€vÞ5_í Ìæ@@@@@@@@öº_{ÜÝaœ€¯…7C¶®k¯\;YºvëænŒg/ÿ~¶¬Y¾Dªæ¿+Ò¥KÆç¼ € € € € € € € €@G à«„%'àë½Å’gr…8ð³òÙa#äàAƒ¥W¿K˜‹}k×m;vÈ–ß—Ö½+Ö®–ã¾:QÆVß¶o%’Ô € € € € € € € € S€€¯˜pÅX-NÀ—µßu¯<#o.øoiz­VvïÚQŒ¤t®m˜Ù¼3JŽ:ëŸåØóª¤KWfBë\Ln@@@@@@@@ýW€€¯–}Ü€/'É{ÚÚäÓ>Û>qÞÚï»ÐKú,Ý{öÞï-@@@@@@@@è||•°L ø*aÒ3v½ä¾[ì÷¸}b o € € € € € € € € P4¾ŠF™ÿ†:KÀWëÇÉÿ\2Êø—Gë¤×‡æÁ € € € € € € € € S€€¯œDí·@Gøú¸qµ¬ynž¬}á yÑ5’سG^ÿÝ=2ü¬–áã¿&Ö~xl@@@@@@@@ýP€€¯úÞ øJ$öHb·ùoO›ìÙ½Û<î6mæ=çÑ}ß~Ï,—0ŸïÞ¹C¬Ù»Z?nN=nJ>nùH>~ÿméó™ÏÉ‘_:OŽüâ¹Òwà`[²eÃ:yç¯0ÿýQZ?i–ƒ.½ ½úŒûh=7³€uíÑCºví.]ºu“®Ý¬Çîæ±[ò±kò±‹ytÞëÒµ«Y¾›H—.%,5v € € € € € € € €@éø*½äðei}òþi^[/[Þ}Sv|²YÚZ?•¶ÛÓ»¬×©ÿvïlµƒ¶¬/éÒÕüßúÏR™Çnô”n=zI÷ž½Ìs뿞ÒÝz´^÷0Ÿ™Gûµµœúü€~ÉÁŸ!=VèÛ?«ÞŽ­›eó;«dË{«e×öÙ½£UÚì4Yé2ÿy^ï0ùH½o>³ŸïÚ!{̉= ;HÍ \“DÂйiíÑ«t×ÿõL¾îѧ¯=ÃØ¡Ã—CŽ(@ÀW …€¯â³k@@@@@@@@: _%,´|¾m;Evï’ÄîÝ"‰D SÞAvÝE¤K×î"ݺI—î=Í ó € € € € € € € €t`¾JXx‘¾{dOë§"{ÚJ˜Ú¾kìÕµg_üeÀøC@@@@@@@@ ƒ ðU‚‹ðµ§µÅÌìU¼`¯ÖM ²´á#“ó2ü”12¸W öæ®­ ¯Þý­i¿öæ^#ì«UV½ôŠlÜeJäà£äô‘ƒ#¬“\¤iåKòö³bßÁrê)GÉþR”‘X@@@@@@@èd|•°@£|Y·qLì0³{ùþ676Èòº:Y¶²^¶ln•íæóÞ‡ ’Ï?FN:i¤ŒqDhðÏò{¾*c¾_koñ§‹ÖʧìÛzç}Ù¥{ébÍôµ/ýµ¼$gõ?Cž³Ò4ò.i®»N‰”¾¹ûÄþrýJkáñ²xë"9½_¤Y@@@@@@@@ ƒ ðU‚‹ðµgûVs+ÇÝéTnnxFn»þB¹ë¯é·BžTÈ= ~"W–ñùÊû¯’“®Ÿc¿gíZ¹î¤ý'àËÊt×>™Y¾ºd¸”ì–WMÀ×èX_³Îï/ç[)Ÿ ˶>!§ðU²bdÇ € € € € € € € €ÀÞ àko(‡ì#RÀ×¶-éµß^p‡Œ¸øöôkçɸs+äó¢nÁSbOöä|`ÇýÇãòäMg{fûÚï¾z™¨¨nÝ•R©Ÿ¶É{«Þ­[:t„ûùhó{‰´_¥.;ö € € € € € € €ì]¾ö®·goù|m~e† 8ë&wýã/—y3®“!à+O0G@@@@@@@:¼_%,Âè_ëäæ~#å§NZÿåÒø_e°ó:ã±Mž½ó_åoy*õI¹<ýÎäË’/uÀ×=K>«Žo“U¯¼*Ë×®“;wH«ô—“þa¼ŒžZ!cûæ–M²òziX»AZvî´—èwÈ09iìÉrÔ€^™k´n’Uoo]Ò[†?Lú™Ù©V¾¸D^_ó¡Xk÷4BÎ8}Œ vnIضE–ÿm±¬jÜl>?@r¤Œk>Ø´½³<Ò“OÀW[ËFycùJy³q½È˜]™´|v˜{òq&­éH;_~MàÝÛoÈÊÕoÊúõ-vþä€~òùcO–8å(ÏlkÉÛ¤éí·ä£OwÏðÕ¶Y^úË3òÚ;›¤W¯^rÀ¡Ÿ—SÆœ&ÇînføêÍ-}ú¼D@@@@@@@:³_%,ݨ_Ÿ¿CëÜÊñrymÓ22,ð)Ÿ-rwÅ0©ùkòqÿñ¤<{Óö 7à«L~tß¿ICõ÷dvz=÷És;ȇÌí ¬ä'm²üáÛeLõg—Þö¸ÜSã]oåý—ÈI×[h&ølÉdùãØ¯È]¾õ¬—sê>såÏò•/—ç3>¯'ßx@þiˆÎ|þé‰ðµYþôó›¤â33Rá¼1aÒlù¯Û/‘Îæ±mãKrkå2õ9õ¦çéeòÄ÷Ê„c•jë«rVïÑb¯2ò.i®»Nœ›:¶½÷¬Lz¶<ìÙFòÅe?{PF®ü…üàaëFždÙÖ'äµÙ€Ux @@@@@@@@ ƒ ðUÂŒðµ^ý·ÏÉeÿ“Lè„»þfnÏX)ÕÞÛ@ÖÈÚ–[åófM7àKo¦L.ýÖi²uÉ,™ÿw÷ýq?ZžýΘôï-ø± »X{_.WŒ=Z>ýðe™½ Úm$Ó;¾B®)ò›ÿqf"K’|ò%óùá¾ÏÏýl{ìÂô,YqÒ%àkÕ#ß”ã.uìFŽ¿LÎÑGÖ/ž)ó­øªÔßeÖÉC—›LXmoËäGËÔä+ûßñ—])#ú|*‹g>,îj¾à,ðõMðeïm½²õ‰êd]‹y¿ê}{k#åÊIçIŸÆÅòˇŸs÷bí~¥o›î§ùíë½ä¸#’q_ù’,÷öüŸË÷îÿ›|2¾|ù™÷å–/ûtVÞ'½O¼ÚÞÀ„»–É×’ÜX`À×F¹û¬Ãäúç’‹Ì~k»\âD{%ß’Ïš³³SfÜÒ1¥Â € € € € € € € йø*aùF øúðyùÚ ñÉà#“Ö'ßÙ,ÿ4 j¢×ËÍýŽ“ŸÚ‹—ɼ7ž—¯éî™ákÂ]Ï™[DŽÊØàÛó&ˈËîµßŸðs³Ìw2—ÉXɼáΦ³Ìû-&àë TÀ×M­”Ÿœ{„guw=‘Ÿš³­3õ·òá«ä¤ê9æïvÕ"OÝíºëå øo°Õwï}Fn¼ìLÜ/5[Wàž"¼©»r|é 3™$oíº]ŽòïÞlï|s+H;0€¯À" € € € € € € € €@Ç à«„e)àë£å_|1u»Cï¬Y¹“=@IDATÞ"3Ìí ¿“¾äïå˼_÷Ô6ÊU'Ù÷Gôl®µáé{Ê¿Ûïù¾Ú¶¬•§þ¸P^zy•Ôø–|ü‰Hss³½ìÊ¿[³pYn€•õJ|ݳÄìóxï>ÝÀ,‘;Mš®ó¥ÉýÜ»]kÛù¦'wÀ—ÈKf†±3®O†RYû°þÆ_v¥|íìs¥üKcäÄ£gÌú•\ªMÞ~éIYðôKò÷†¿KúOä£>J~$+eåÊäÓœ_*8Ìšelë—{fDKnÅÜzò|sëI;™ÜÒ1…Ì € € € € € € € Щø*añF øÚ¶ÎÜ&qHú6‰K×?"'{c¥²ä`‹Ü]1Ljþj-âJ¹ÁSVp•¹]ãIÞÙ´¬¥7¿x‡ 8çvë©\ñÀ¹¯r„ýü½¿Ü-Ã.ø¡ý<û?îþ¬åtÀWÐ>s¥ÉýÜ»Ý8é‰ðeÝžòÙû®—³¯ž’Í r×ÿ)ß™0Ò üj{[~þGËž YE½WÀ—™áëýÄí¾ÛgZk‘Y&àk"_J–§ € € € € € € € €@ç à«„å5àË¥KäG Þÿ7(Zª7=#'y¡™WÊú«”×6Í‘½ômþZ^›!•ßd¯éÜö±­ñ éyÜåö{Ö?#ÿe²ÜòͳdÄç”>½ûHïÞÝeÙ¯¾.L³fùòfµGÀWÜôD øJf³mó{²tI­<ýûÇäÖ™Þ¿¬%&ܵXž¸îtó¬Uæ_Õ[ÎOLJ”I÷Þ*Nû‚|PéÓã@éþébù¿Ço—G^_#ï’æºëäd’Ô¿|) ž"€ € € € € € € €û…_%,æh_[dÕÃWÉñÕs’)ýÒ/dÓS‚23âΊe>;÷7²í± ÅÄ{‰~?èö‰Ö–t€–sKG½Þ¸ÿx\ž¼él{{ÖòÎߟðEùʯ÷NÀWÜôäðåäË~lk•¦·^“ùÿ=U®žê”'ÞU&Z'ßì=Z¶/O¼û”Lø¼¥­þšæË‰‡Çøšp¯¹¥cuÀ-ß“É'•©vD·tTÒæ“ž>(Ò¥kÄ-›à©–ÙúÉ'²ÝàtïÞ[zØßä×Üþ2ì¯u³¼·a»ôïßìÓ]xˆx Ú¤¥¥Õàt—~½²lGm¿us“¼ßÜ&=zt7å|  ˜ SKñ@@@@@@@@ ³ ðUÂŽð•0U‰&8ˆ¿¢téÖ]º˜ 4þ@@@@@@@@èˆ|•°Ô¢|‰$d=Ëמ¦´óìºkïþ"]»už ‘@@@@@@@@ýJ€€¯w´€/“@sKÇ=­ÛLìA_…W—ž}¤K÷ Ùë"€ € € € € € € € PR¾JÈ9àËJc"!öíÛvø•O™ué"öm{ôbf¯|ÜX@@@@@@@@`Ÿ à«„Å’WÀ—N§ þ²nõÈ_.]#,Ä" € € € € € € € €t ¾JXN±¾J˜fv € € € € € € € €¥ à«töBÀW ñÙ5 € € € € € € € €P€€¯_%Äg× € € € € € € € €t@¾JXh|•Ÿ]#€ € € € € € € € Ðø*a¡ðUB|v € € € € € € € €@Øg¾®ùjkä+,É=ö˜½‹/¾¸° ±6 € € € € € € € €ìÓÿÐËÎçÍ—õÌ+¿sæÌ‘#FHß¾}¥k×®Ò%aþòÚBja'âì;ç~gõ½Îܹsíô_tÑE:$@@@@@@@@öŽÀ= úØ;"àkïx{öBÀ—‡ƒ € € € € € € € € C€€¯@íù1_í©Ë¶@@@@@@@@è||•°L;{ÀWëúÕ²|í&#ÜC†i «'a臨ݶMÖ6¼%}jTöA‡AŽ÷ì"ŸôîÍesìͤìûÚûmvß*ßàü3ÅÜÖ~P!÷‘,îocнÇÞÚÃÞÏCp?¥Ô‚ÓÚQêwGIg”’è0Ë´®—¥Ë×Ú×°s²“ïs¿§Æ/Mêt|»à5ƒû¸àeyØÿøj2ßÓ"ï®Yo–¤Ç!2|èg¤kÀ~¢|m“/¼d4|´Œv°ùvµ¼¸ì=³ýò…ÓÏ üÙ²nµÔ­\!¯½þ†|¼y»l7iè}È 9bØ12rÔH9á˜øÙÉxkÅŒ rÖ¤Zûý) ×ÈucÎX†7¢ l[1C†œ5 Ïèd¥]rÛR™0ä±[@ÙTYS{•ÐJ[$í»÷6yáî*¹`ÊSj7e²°±VÆÄ Î ìC©WÊ7àé~éSüºgÉîsÇœý²lêx{¼Õl;CÚ£l;Ø6{,ù$7v?[Ôú¾Mf”‘Iõ&åûêx5,¿!ïïõz’Ž|êBG^v¯{wT¬°zö¾ÉgÛú¤ªìñœ]LY(µ×é¨ ÁéÎb¼ï"°×Ûì>V¾ù/f‹¹­B šuó¬ym…:C{(Ab×Ç´ÆÞ^`¡¶ß›%í'°÷·¬ÏGËòcî7ãÔŠ…:]^Ъ!}\Т¼‡@û Ä×h¿4±e’|µCMh|i¾¼Ô¸#¹ånGÊyÿ|ªôØO¤€/u s^›ß!#Îjo1(jËêgäç7\$÷%c­öì¼U!Óæý§LóŸ¥æÌbn+ïwŽJчgƒÆU-E>⦵ðõBŽ¡=”  ì§¢RHZÛ£~GINØ2amc_KgXú;Óûú|´bê"™}Õ¨ˆÙ+Õ85bòö‘ŨÓE.ˆ>®È{asdˆ¯‘}ƒ|Š@ñø*ž¥½¥ëWÈü¿6H·n"»w›·z— FKÏ€ýD øR2gà¥cé €Ôö×>u‡Œ¾4 ¦wY^Q!ƒÍ¯?õ”X?àÖå“æÊœÏ.zà•u›’†¦OÌ®zÈàÇÈÁÝ“{m[ÿ”Vv©yQnf¿™{ö‡ýáy¶rßò_HKRçTÛ•rð5Ÿ€¯BÊp__W·Ï²ª™òÇ;.L÷yqÓx‘‡z•s?ô)¤îeëõvýcì…Ð^ŸšÛŽ­nO¬;8XŽ9¢AÏmòÔäÃäÒûÌÄ6yþš±½rÙ~ÛÍ–×ö°m¿œny?lûüͰs3ÏM§l«ñûÙb¶YðµÏŽWCòÒîÇOíÚ6BÒ×®ûÜw6¾÷½­¼gë²}VB·újå%x|³M4Á˜7ØÓ{•ÉÌÚyraÙ€vÏ@¶±aûí<Ì`-ËöƒØ+[Þëm6´îï•ìfì$8ÿau0cõos[v×é)M»ƒÆ.M>⦶Ðõ =”  î§"”RHZ‹_¿#¤%t‘ð¶±o¥34ê}>ê|ï-ƒ¥§FKÛ¾³uºÈeÒÇy/lìª:ý¦îK÷ïP²gO;¯_Å,Û=É¢ß=+›ô6÷bÀ×–¥3dø9É[þÙI(«’Ù¿¾NÎ:ÞÌ¢• ¶².(nZûŠ<ò³eÊ7ô«bš‰âŸ5Š_g0ÿç›^03”]`¥UÊ¢¦ûdTÌÙoòßsÇ^ƒGüò+IS+àk ø*FxB|ÖlOÕ×ÈØ+“?ÁŸVÛ$ãNë¥x‘ÇW¯$T`ÖSŸÏþÐî ©{ÙúÆý㘳^î(/“©f8T1­ÖŒƒÚsÆ _]Ýë/;y^}mŸ¾q¯W°vÞa笿ûF?ë øêPÇÍv8~jçº?o¾4ÞÙú„lŸ•°¤BêkhŠÚVKÍacÅ>»¨˜.M³/)úô‚öml´|û¾·–eûfºÝ·¾×Û¬¯î—ú8³×óßî%ÚÙvÐYÚ}gÉG´úµo;¢¥9òR¾>loœgÆî§JÖÈŽé÷¯¶‘Îö>úDŸ: ‘’Z¢qj¤´±Pçè}\çå'g)U~S÷¥|QSJ)@ÀWõ×üm¾,kJÝÊÑÙn¡_fúãKÍ-Œì»l¤¦VÕÈÌeMrá0+bjÜvè‰r§³ßÊiRßDä¼Îxl“î®’ ¦Ø?5Ÿ–˼†ùr¦ó£ÑÖM²zÍÙenF9¼l˜ì^·B^xéï²y§ÈgO:GÎŽðëÒ¶mëeí»Íö6&·m‘µl”•ß —ß™¼ßäôKä ³Ï‡ÈçùÕjf{½îMiÚð¡´ì<@ùìár쨓³Ü’É vkú5oɆ[ÄdEä€~rÄ1#å´[KnZ»Z6l7 ‡•aƒúJ릵²|ÅJyß^?¹Ï‘£O5iOGÔeHçz#j>t¹O5%W•u—uõ¯È«õï›üï”8D/)§–!a©iÝ´Z^~q…¼ýÑVéÙ³§É¾Ygè±rœ Ìž…VY½ôeY±òmÙjÖ3k&½?脇1µmÛ$ uõòÖûŒõ†¢‡±Û]žõ®ÇK]'"·ÃœuoPè±Àt,9ÇE9æ«/·ÚdýZÓ–Ì1Ù?׿.E9VoY·V6®_&7œseò6‘UÓeÉu§Ê®63î9Æ{¬‰_·‡›cänYñ ò÷u›ÍÁì9ç‚3í>?Nšu=s|­Ã_ßÙ`¬Ïú2LFžš9Ê×p[gŸ‘ëej…‚ógÿ@!1›nûyöNÍèÃŒ«^—7ßm’7·¤ÆUÇÊÉf>öÈs|¤ú‹¡f»}ÅÜþdñKR¿ÖŒw¬2üì9íô1fŒ”J•;¯xq±¬6õÇ9ícàɧ™Ï} ò{ãxܶe½™©·Ù$¤·™©7xœ¸eÝji2Óîõè}˜3Ì=žûÓ¥MZ9Î8w0ã£ðúÛÕŒG÷˜ÿ™iÿº{÷ŸÒK?Øéi³^f¶ïôBžl[¿VÞm¶6Ô]’åç]ÉÊçš mf´+Òè°Ì±®u.ÔÐ$Û͇šÏû¿û{»ö¼Æö¹Ûlôúì øj2?Pè¾m¼òÒ«±ÏwŠídµ‡Àþ?¤ÝŽŸ¼E•ãÕ6Y»¢NV½»Ñª]Ò£ï`9ú$û|/YƦ{*Æ9ÇYyô2ã×FSÎ…ÕÍ|=92å~œÇñÃ])ü™öNþèa·9o\&+ÞYgÎãvˆ9ã‘‘gŒ—1ªÈÜZô±WxŸÐ[>Ó{—|ñØn·‘|Î3TÿëúHH}µ~ç¯ßvŸ“±çÞ¢ª–K®»Ú¤ÿ`Ó·xNÜ£Ûeº«w"Œ ÕÒæºHÜë z+ÎóƒHe™:¯[e®ñlK^rèÑ÷`<|„Ÿn£Î~r=ºéè}˜Ù“²mæü½îïoÉÆÍۤŬþÙÃËdô©eY¯Äo»ù)ô1Óª“&µ²Úô]o5m”mÖ…;s­§ì”ÑRæ›W·Ù°/$âç!ÀX×ýÈçgV½.¼ HMð-ÚarVŽíö&5çèþ±WzÛ©¾ÁzÝ{ðpûXáoÓβqÇGÎúÛÌ8£nÅ*Ù¸Í>:É`sì$ûú_«¬­_“_d»ÖælËzŒ?Ö+N[Ñi±žgëßýçgV祟ÎkÝžô¸7N™å“|Ûš›žv<ÏÌç<,ç±£{Æ1Î1wó+K× îuú<¯ê>¬€óÌ|ê«î§ó[…¤5¬~»eïØ×]³˜×%ºû¿G ¸Vžïø£Ðú÷{ %ð4ß:è~G—<5}þŠå²ruô¬]*Y¼RÌ·AÒÓ|?sÄ‘£dô˜c¤çêG䰱רitìy+ßqj>uß 0óø>2úžç±'¬íZ/ÍMÏó<_õaà‹¸iŠ?–ÐÉ0eåZ\HçÙRÜëÐùž#çUWu Íó6S~ ­¹²”úÎÙ»„ù|uòs³€ºîà.µÅ\›jjö_—°>Û.òì—ÔØ¹ ó¦<Ï)ãÖSG®(}zäx g¯<"°÷Šð%‰˜ÿùPkÂú¯¹¹¹Cÿ÷þëO'f̘aÿ7kÞÓ‰?Ïù¯äëYO'>É›³|ö¼7$¦”IÂT‰„xÙFµÓì×f>ŠÄ¢¦¤[üI©÷¬e«µ©÷³o{MbjyrÛÖöË'-H—Aí´Šô>fÏ›®¶- sÛ£ôrÙ¶¿hjyz½)‹Ö$MM¿¶ö§ÿ‹ºÍäþê3kœôy·cm³rÊìD£Ï|CÃÂDÊ«Þwòyebö’Fo¾šj©t–O]X2W{÷;e^w]ßþƒòˇ[î’˜:oAbj…7 é1Ú]œzWŒãeœv¨ënSÉç¦î5úîëlë:Çãö=æÔ‰,íÌö1eØ–D-'͉Xý´nûùô©z×°p¦[¿œ>;ý0F4ëŹýEyb^í‚DuzºžHbÖ²¦DÓ²Y!iªHÌ­krÇBžúT¼ã±Ÿy|QuKß<éɯü3÷©ö‘a5Öó¦e³ÓçþüOš5/1­Ò©ªÎùÓ§_«óuÿ¾šU[1?¾Ru8W¿ãjç?ßã‡Û/g¤]yºÞe‰IÓ§¹ç?év—4«˜¤Mî¶ó{eëŽM|çX§|üÞqQ~ûL¦Õí¿Í¹[œë#!õ5³~gË£÷ZLœ|„•e”±arÝ\õ3`\ êKàþu›±'٠ܲ\cΫBÇsV¨HÌ\Øàë«Ýº—‘Žªé‰¹ÓCÎoM{ ¾&‘Ë&¼í6¦Ä´¹³Õ!å5Þóf·ÍšëJÎ9fºŒâç!ÃÓÙ¦®ûQÏÏtYXýhñù×ûKij§¹×/ÊÍ1;,K¦»×&Ë­k¶Û²×U}~þ×s'¹ûñŸÊ'%æÍs®›ëº©ëÆaéÕïgŽ»üíCµEÏXO—Åj+þýX¯Õ¾|ÇûºŠªqÚ‹ÎwÐó@‹Xe51Úš'=íqž™ÿyXÎcGX{Hõy—¥Ç ¿ó «ÜKqž™wM:Ý~*ϱ•ñN_¿WçÄõ;U±Æ¾öºùŽ+s·lélnÎÕfÆÕ—¸ßkõoî{qê ;-O,XV›˜öýVÅ”€ïƒšó¦º×–=Çóýáôé“fž{ûÕùÞ1¨tßËVŽÞqj¼ºïë²·ãŽã×÷x×ëtAõ2æùjª½»åèÖIû½Ò˜GÏþTÑc‰Ô2y]»éã’ùÊÕG„ÃóíË’vn»Ì^WƒÌ7ÔÍJ_’ê¹c̦%ú»ø kXæ;ýô¸¿"·]Äé—<ãÝXcÁ\åµ/÷éÑâ5‚Êž÷|}§¯à³bÔ'Þ*ßp­Ç{,±|ùòDCCCâ­·ÞJìß_ÞLÌI{͘1'ñæ¦Ï?” þšQpÀW“ œ©NTUU§ƒB¬ÁIuUU¢ªzJb‰hÓ”˜™¾øli²\ŒðWš5 uVM¢.ÕÈÜ“ ÿÅÒèô6¬ IMK‚¾L+³–Õ3—dÜüiM¾6_J¨¼ZÕòŠÊDeE™{ 4ï•™ ’ôú拞߃òJãWU™Ô&¼¾ I‹’üÓФEYye¢ªÒ€:>¾usvVùçC)äÐË•¦.TøûÞ‹< ‰iê (Û¬²:QSS¨ðåmÒ¼z×ÍäÁ[?L^ËÊÕ55¦þùò_6%Q¯ò¼d¦÷dÂ6³ÒéÛ_åt}áÌ©/Ò¬t–UT%Óé)¿2û‹Ðtùªýúß‹Vçâûø÷çyí B}y«? ×èƒZ\‹üëUssÌü‡´ Ó¶üõÑ­¯¦ ¨Ó}Á–V¹éu¬ |•Õõ®z¶ &Ón9žÇí ²ìÃJ«sr즹,Q^nú¤²šÄ’µê‚KEp€–nÛú¢»¿µë—S¯¬6¡.àxê^PzÛ­¼bÖÕöJã£ÝÅ­wºœÜ:<6xûâlõ3ÿv˜³îeâºû·ÖMO¥ûWïñX×K7_QŽ91ëDP½Õï9ek¥W·¥ºÖ×&¿0jL̪v¿ÄqòWf·ÛêôØ*Ö1ɤÓ÷ÕÁä>Rc…XiN–_Ýl_°—9.W™~Õ?2·êNÏ#ä5̶ÈLJìe’ªŸqûi‡|úFSÇkõÅ«í–'*+ýcD ¥|âŽû‹²Š€qe²±ëMyÀç3Ýã_H}*ôx¬ÓªMîñF Ü&“培Ïlõ÷ÊÄ]׺ãÿêÙÁ?¾h\ä~ *&=(ÈÜÍ“ÛO½W?×m5s½cf+x'ý‹}ŒÎ ò^8Å?›Yš=_N?dyríu}×ö±ê³*ÇôñÀÔ¿ólÁÄŽY±¬‹‰i[_ý¾j÷™õ({¹:énvÚ’r:Ï»¯p«u:ìômHÌ­vëæ¤yÁ' ¦¸ã]3¦MÖÍv:†šº‘ÿñ#š›öΨǾcaùTïÇò{eëþ-1õŠ\Çvó%IÌóŒà|&ûêHã=]OT}ͬ߉™Uù0Ç{뜣zVòºIÜ|¤ë»c™çQƆ±Ï}ûÊHƒ¶±ÛP¶rNÓü}®u¾húÎÌë4•é/A2öëO—“_½-3ÇáÊ€ë?Å9Í%¸N–%*ÌÆÝE·=½ž÷øÞNýO¨kðuµ¤«éGkÜ~´˜ÇøÀü;i´úÿÔqfCÝl÷<ß\ïÊü±¢ÕGº_øXÇïÙu&<`[vÝsŽ1õ+ØA¹-Jÿ 7ÙçØÇhÿ5¹Ô±+ÚöÉþ=ÐÂÓ.Ô!èø›‘—(m%ìØ¡Ý›´Åƒçjÿ±Ê,J>b¶5S·Úó<³9ÆyXÎcGX{ˆ[–±Ê$UçbäÏ®7:úøíi+Áõ:n}Õõ1¯±UHZõö<ý¾ã™ïØ×ä=ÿqeî¶šÎ\—ˆ÷½Fp=H÷?1ë vɨ¾ïƒüÇ€Eê‡ÄÖºÎ÷,å¾þÛúÌ¿n:ÝžºmœZܺïoÇPß‹‘ŸtÛsÒá+ƒH×Ëœuc´ÙàòLÕYg»1Ò¤ëg:¾:“þaœK˜eò¾ÒÇ5[ ÄüN1ÿ¾,i¦óí¶Ko] 7¯SßUOJï,_;Ýû½êT59€½Ìšî5ýÔ5®Øí"f¿”ïfÔ™(cÁü¿±ó]@=-nŸ%^#ÇñÀÓFXÖ©û<^ø*¸qmJ¼4Âöt_“~ÞNå·®Z_ŒëþÚ™²(õGûäÕîâ×;]öö”ÇKOÛͧšº©÷ï©{9ëmö¾Q×K+_Q9±ëD®ôê²Õm)£.ùúÚ,Çê¦ôŒ©™·bç#ãÔü*iî’ÄšÆFó_ªŒfý¥’$jfé éæDýØbêÑ"ô—-¯éu«Í(ÛØõ2vþÌ!ö˜M„¨<¤ûÀÐúUŸžIתçÕÓ¹A¼³Sš_Þ%2⎚KÀ:ßY¤Îw}ç;þ‹A†Ev ÍoÈq!¬yÊ2 Ýz=)›”X¢fY¢Ï³l'uÏŒ†Þ‹ÒÎø/ö±' ?ÞüÆ?~x·“ÙN6'Ë#~>²—gö±aìqA®úb­,u+¯™ííÿ}ÇïÊ™Á3™gXèt8ý¡¾þ³¦Ö3‹V1Îßã_sÑ3À¤¾\²fòRׇj=3p»}–n³NßcY´[ÿ“Ë5äºH{ãó¯Ó˜Ó¬Q×µ’³¯úëÌ3«ÕØÿ9ãÀm™¾3îøHoÏì«f¶ú±¬uŒN_{K¦Ã{m%³ÏÖy´ð´W5FH»XyQãî<ÛŠÞÐólí¾ö´/ý^ EÜ2Ëq,ŠÝÖÚõ<³€ó03;›û#c·¯±}u]Ñu(îõæʤç™ú;ƒè×Ôƒûw}ý?tlâX¿M=Õïç5öõ»zÏY­r{]B§GŸb?b×S§Ó}«97Šø½†îS‚žÇ­ƒþkþ±ö2ý£@ÝÎLþÓ?š1}õ¤¹úR™3åsü°ŽáãÔø×Kr·ãuýʯ¾’7p']§c×ËBÚlöñ@ì1НIçѼﶱDœk!}\ìãj}Y 2Ÿ/H/V–˜«~\jÍxšK1õ7,W=s|òGñÛEÜ~©±`géÓÝ:žY¾|†I©ê_žPþñ½åO¦oåø_ó^Nl²·÷AbÑ^ øªS9Þ/ørW,=;˜ûÅ„ç×ðb~E©.åÞfÒQ¤Ü¾>h¹fѶ©Ó*‰éKœà·ÜMqƒH*§'/„,›=%QQQaAãŸÁÊÚoøV30öÍ~e­«Á®/øeÏO¼|x¾*÷Ψ•ÜŸ€:'Ù&jF´) ¼ÁWÉõ¼ƒǵIÏxa~Ñô%Z£ž!®25Û„s”TLw¿ÈTm­ÎL9?iêôĬ٠RAk^“) ÔMéõÌé.ÿ`È­™öºýu.¾Oæ~|iЃPcô«TïEL'H/®…w=§u:3ÛG!ù×®Öí |Wú×&ÿ3—©@K«LëÝ_Ìê“J¯Ið/iרÊjÔl~éºâ+‹Ôûñû‚àíiÛàþά§ë>ñViÕmÛí+½'ré÷#lO§Ë}Þåå­sùµÛöHÏ;vWH½+üxYH; ©'ª~¹uÀ_uøûFë—V*x(ò1§:áOŸïuhÝ×ùÈïX­ó¨û!ë×azæÔüê¶ùrHͪY8ƒiÌ4›àµ)Ö¬ Ö¬¦e¢o)ç-Óð¼úÚMºŸ*¤^ÆÌŸ©·±ûéÐúá«G¾¶Ñ´LÍ(éŒcô2 Ó>V ‚5³nìñ‘Ù®s:3Hè6ºPc3g£Ò³9ã<+^ïbCkiµßt½ÉLO>ãç°}†×_Ä’šY#>“óÃ7¸Xÿ¨!{½Ðeâ}®ƒ¶&yf·õÿzÚúò×`¦ÆEÎØEç+¸MíMÚCê{œúì¯?Aå¥/ÈyûÊ0Çâ:…å7ìý°zä-KÚu]2ãÖ€óL=C›Зž}%¨<Ì/eÝ[¶ªeúiú–ô—$âÔÍBŽ=þüø^püÈîæ‡H:/zÿæØ¤ÎGvQÐØKQüuR·+ÿgíSÏçúHP=±êCÄ÷õ¹x!ùÈ^žª_·‚VUУÝW¨rÌçºBö}†d+Ký%Ë´Zßy¦åjÚà´ISÓgÎJ,XtmA×ÑÔs]açúIúGvñÛn!c Ý׉©“Îlý®·)O]f©€]½^ú³ ±o€¥Ó×ùëx˜«¾uMÚU÷ËÅ;Ææ_—½ÓÔÍroëéΞëæwÑTwæÎôõžmE9Þ]_ôÌ4VUã kìáï÷Üúà¦Ûy/ÐB—c*O¿V¦m%3 NZœÇlí¾öâl?ì1ØB÷‰ü<Ó”{ìó0]OüÇŽö¿,ã—Iìü…ä!¬.9ïÇÏcü±•§mª6\¿u›ïØ·}®K§Ów,Ëã{¸ý®gÖßÈßkäîßâÖAÏ5ó£}‡•d}ÓçŒæ{ÁÔø-çñûè Ä|Žþºæ§êþ?Ÿï“L?”ëújü1püú^¬¶ì޹âöcñóàôKáqÓäí¯Ü<êö ¶­ú¥X×.ûãøãðæΑsÕÕpë¤Úr'Ñ0ŸéïUÍ+ù£ç;Ãäº Ò× ­ïGÍuFÏ8:¿ïÒâöKž> ¯±`çéÓs•1Ÿë~€ç{«>ðå9™Í³âmx=ñˆ¾•c:(j/|ùsó™áËDS»·;t/¢è“ìò) UTvt£Ðzú‹Ð€‹ßÙÊÃóË„šÄ²´·JSSCbÙ²:s¯Q3YSÀ…¿ í«Á‚wp«$fö™  7=èö®«ÒäßgÌ|è2© ü•ªNoÊÖä-ó˄̴ÕÍv/dU¦n ª/¢¦/^ùóâù2à 6Ô_ò˜@§ióõ9ÊBÿºÁœ¼O—o¦ŒVÜœ/ rw–.N> ðɹ_U¯ì_³{.˜§ÊÀã—º¨×"N½*(ÿÚÕù¢JÕ-ÿôE[ý¹ûK#Ývô/—jBnÓܬ¾D Ú¶S¾ù>ª4ë4å,k³ŸàþÎäWm3ó×ùIݶõÉQà6#l/8½íP^qëª].ík»ÚÇšE"b»+¤Þéò‹u¼4iŽÛO[eXOlcÕÞ_ë2È<ë|E?標ۊݗë²U ¼ñò;Vë³Õße³Ü™j+|·‹Ó¿ôôÔ—uÃͧ·Î¸_î긞Sf¥gÖÇ}ÁÝ "ÕùŠÜφµYó¾[?‚h`åÉ_Ÿ½}hð|âœïÓI·{ÏX*ä¸VÂÊÔ~_ŸO›ãWfà„©õsÝÛ{å ø2Ö:@¬Æ÷Ã!Ï—úSS·à-èØã­§YójÕ¡€ÿ\7Ý¿/«×w×3éÛ {×[¦Î᜶X¬±—³='Mº]ù?+Ö>uÛvö›ó1¤¾æ[¿­ý’ìéÔý·¯4.ðÖ‡Œ4„Ød+Ký%‰˜™­ç.©ü¡Yƾê~zÝÆõ:ž@âÏßÍv SxÚžÓè´šçËfêcd²¯Ñë¥ïíÙÿx\£ŸŸYåÒÇøàü‡Œ#u0UÆ—ìúv<*@Rç·ã#÷xjfÑñÌÎâ¶+=›©¿ßK×o_ݰÞ´ð,§úÇ|ÚŠgÛnúu³µûBÚ‹ÞGÐó` •ÿ<Ç´¡ù(¨­éôìýóL}¼òÖ3®ÌcGz†!U‡â—¥ÞWqÏ£Có§ë»ÊCP=ÒïÅÏ£·mæ3¶ÒyÐcæÀú]ÈØ7B[v÷é­¡m#¬O2þñ¯—Å­/1¾×ˆ`¢ëGàsU×tÓf¹Pèôñ#ìZ‡[Nù ‡Õ5+_…Ô}× ñvì1põ½ühßô˜Ë$›G?V@ë›§ÎÆm+ÞþÊÍ£>Æ«m«>4Öµ ÕFÒ}\AÇUÎàçn†÷eAu5§¹ú˜ž=ÞŸÒL”155“¬i×ékË*ð/uËñØíÂS‚ó¯Ûºî—ôûžÃémž7íG}º¶àyà5¨œí·¼ÝŠðÕ%aþLÄiÞ?yx‡½ÎwÎý4ïuK»B›¼¹h¾ÔmÚm'ãÈÓÏ“S‡ôN%i‡¬X0_¬,õ.&Œ–ž‰;w®ýîE]ðioµÖKõàr™c¯R! g˘¾Q×ß&^:DnxÊZ¾\æ5ü¯œ9 »l«P†”ß`oÄÖÈUcŽºÁôrõVKù ÉT™¾\5ÊÚÆ6yÄìï{²È¤uTÔ´¶®KŸ%ÉU§KãìK$êª"m²véÓ²pÑRYõö*y»i«˜%•Öz©¯O>5.™}Õ¨Ôû*­ÓÌþ&fìO;y×Mm"è!f>ô¾¦Õ6ÊÄ2îUz%eÛm…©g%ëFH¬$¶®~D½ÆN­“]~Áû³7û¬6åi³[÷–θTΙd—”½MëŸòÊ*9÷Ìsäô3N–㇠’îéOÌ“m¦l‡¤ÊÖ¼¬¬™$‡K«^B¤W/i~bªüÖ)«i¦¬&:eå]Ôû*ÀÅ¡3e×Ç»€W‘¶à'1-¾!ù·Hi ®ž¶T·rm[}îÔ9KQ×;)«”I盚௠Ò,Sïüm =Ï~$V_P¾¾·tºÝþÎ,¤òiNF¤q~ö~D¯¸ÍÛó%-õRµƒb•WAí¶ÒcåTûåÓÖÈlw}æ¸Ç«|ëî›c/#¥9¬zÛŒ®?©‚Ïò ÊÀ9f8}£YKç+ø°~Üþ+J_®Ü}‰÷-j¿sõ~ÐþL>´C”}†-o—ζ¥f yNòü@ªeÙ†Ûe˜=Èl“g&—‹î³Že2»þ9©ä}Ú«çûN‹ù%¦Ürö “!7 S5È—^½Þœ™q°êß1AÎZkv玗õ¶‚ꃧ-é6­ÊL-t™o/(·ñË+hkÎ{:o…:öQÖŽ"8×]'•êQo+¤ÞŠl’»'Œ)V1F(¶µËa£¯Lî¤j–4Ý9AzÙ¯¶É㦸Ò>2u³ÎÔÍ#LÝ,h\•ÜM®ã?rmÓSïL¿5Ñ×oYëç:×,dì¥ûk_ºîù?Ói-dŸ÷tŸ©ë^”÷M ɇeþ§ú]Ç­t:CÛHpY‡ï/õ‰Þ¶2ÈV–²e±\:üÜTßïì¡\ªjΕsÆ.'>^õͳÏ×éÍ£1òß ÿê² ï·öi†žuc¶½tÙžýO\Wk¤Ž¯f³¢ãµ[:ÿ:ªš-ókËå©K3—5É…Ã’=¹îפz¶l¸½"y+t[ª}…Ô¯ :¯ÓVG6-¾[Fœ;Ånþ~ÏiAzÛi Ï‚*ÍÚEç1$/öÆßV¼ÃZÏžœAÎg:½aq÷«·íZ¨ü‡ä3,½aïv¬WéQcLÇ'ù¨–É3ÍÉõ ¼vžíØ¡êöί,K?]ßU¼î™¯âç1~ÿî9V«´ê´¤ë·ÎWH] û¦²g\Ú6Ì6ã§3lü¿¾äý½Ffy'ÿ6¦Í‚ۋʧjƒÚ3x½ìãæ $ßÖõGÕ5ëÃ(û ë«u^ƒÆÛzÛyå#}?|®§÷æ–½nºíéïFCÚžvH×µyÈz¹Úlx™ª:²íÀ4ùÊÛÍ£Þ“Ú¶ª+Ú&ÜUoÇ<×ζŠ0†-´/ ª«¾”¼T.2Iê›oseIÒ}9Î7U>Ó¿>ñ­Ö¶·a{õQÿ‚¨Xå¥Ó’w»mŸúãi?Aù´í3Û¶®gþ¶èÖ»°ò .‡€º¤CÓÜO[ûÐi÷Ô=_=ËL*瘡Öɯ€õu^ò®6*=áe«Òâ§ó¢û›°÷=ûÊ;*=Ó:éçj™<Ó\7wŠïxꯛÎkwLg•}h^­4érsÒô^:ýnY<39Ûó­šž¸ýtÄôúÛn?ÕsëÕÐÍc¶uÂÛœ·ŸqÆG:ßAëêôdÿ\—oŽú”ËF}®ÛG®´„—sŽôd©aûÔn:ɲ1·º¬1·9MµÕôÌhæ—ž•Nû5·ân‹áåì/÷ôkµ]çÖŒîL3f¶3³dÓ"ç—˜Îì ê6*-:_Aåí1Öý´*3=¶Ð~Që³gù¶W_»NYïÑ)°²÷<#‹vv (÷SOžš×$¦”ô±¡ëª_ßšòKßOÏcÌÓ·@ÑÛqênŽÇèçCf¦ä˜Ç¯A¦]ï c…^Ïi¿ÙƒÇ^þ>A·+ÿgÅÚgäz¥Ûˆ._ÝÖò}ßl³|d/OÕë>'K{óo/¨¬ýËd¼1ÈV–Ö6šêæ%ªÒmÒi›îcEõÔDíš3G)#½ŒïúGAçïf»º,ÃëUð˜"ʺA帞.ƒýŽÓN#÷?zÛºîçrµ?/þ1>gþ}iÔ3tê>Ž޾Þiÿ‚Mq·éõØ™óÄ…îõ<ÆŒ¶æ[/÷¶UŸ ]Bó¨Þzk·ßþƒÒ—­ÝçN¯µï~1xоô{ÁÛÉ¿ÊGXzÃÞ÷Ô¼ÛšJO;œgZ·Â-øÚyÄcG°·®?ae© tŒP&±ó©¾ûÓ^šþÝS¿”O w¤|…Œ}wÜqehÛ0ÛŒŸÎ°ëeÔs«ã¼¾×PuP÷-žç1Û˜6 +¨|ª6¨=«çßÞZo;ŸãGX]³ò«÷œÞ°öí½n´®Þ¶3Éþ˜:( ¾ë}¥)YÆÁÇžàuUyyëŸb@IDAT©vªëJ`¹½íàç1Ó©¼ƒ·­m"_»2Ðïå}\-N_^/2 ÚIúŽÉ[36›ë SË“ç2Éqv£ïµ™±}ž;æ3rö5Lm™½=8çIîyuû½í"ã¼)¤þ[FAç0qÇÒIóvèÓ£ôû,é:»n<ÏÞoäòqâ­ò ×zì±ÇË—/7wÎkH¼õÖ[‰ýk†¯=å/¿{N6›Ôúròérx=²'ùRºšHíº—ÿ.ŸZ¯»"'Žþ‚ôؽGúÜùLo—ú+Ú _fî,]"“æÕËgZ1Áþ6=#å#.’ä¤I•RÛtŸ”™¬é¨msÐJÍÎa{j©ínCG/ëÙ ÔŠaO=QÜa³føWn•§Ì/ò.u&2¿ð¯™ö}©8åh9èÀÞÒ»Gé¾ý¹p쥶ÜÏðåDû6¯¼ëúÔ/cå#J™Øê¨é >>ÆËŸIHü1[Äôº)O>Óýlúsþ…|¯õ:ám>x|¤Ë!hÝ\Ûv?×å›Ã;—ú\·w_Ìð•g› Û§vÓitЦµÞÌT[žœ©VÌLJÌLJ[Ôl馜 zT³}”M’†Úå»'È9Ö´OÖ¯0ͬ~ÔŒ$S6ÊuG/“òáØç•Ó—È}—c§@ç+¨>˜ž?xfdUfzl¡ý¢ÖgÏ>ò,¯ìŒÅs 죬Gpv Hyȶ¼KêsnÕ³¬»ú‘{MòDÔ©‡kçO–Ñ—ßgoÚÜ^En¯8"¹½óN~ÇoJý¯ 9~ø·å­ë]˜wбB¯—ï˜_·Ÿí³bí3,Ÿ~Ïk]¾º­åû¾Ùh!ùð¤)ãEHŸc-–Nß6‚ÊÚ·HæËmg+Kw#m²nõkòÒ³‹ä÷ ¦ÊSöyµû©5Z¸ÆÌ€Ÿ9ݪ^(ù<$ÞŽïŒuY†×«€}šëQÖ *ÀõtÞM†‹ÙÿD«;™çgÎdÅ>ÆçÌ¿nŸVá›;*Ô˜;*${òÔ mkeòa£%Õ“«™Ç¬åÕ,òžm©öåyßÚIò/¨Î¦×Y!Ëz¾E_æÞvHšCó¨w\oõAσ œår§×Z2Þ~ƒ·’'Aæ1,½aï{ê‡Y?¿¶–;=ñÇuœ‡…W-§ºìm­ ÿ‚Ê2·A°}ù ɃNiÐóøyŒß¿çå)_ÁcßBÆ•Áå“ 4‹”NSó¾×ˆßÜü½†»JȳøuP›T»P×´gع¡>ÆúÇÔ!I¾¥\ô~ƒÓkm"¨}{ûÔ uõ¶ó:h ;6ë\×w½Ï 4%·œŸàuUyå1kß:Vw¿#Vç«Þ…^ÅL“ÙRpõ.‚·­× «Ÿz+öó z§ß3 ås\-V_^/2rày£ÕÌ>85#xͼ¹eôj™0ä\{ö®) äº3xfüj4ךên33ÇßiðT™ïñï´¿Ç×–yµ‹îñû¥hõ1 ]èó¦úo!íû}º§(yÀ>#À _q¢,?x=ñPjv.g–®(O®xßÑøÿØ;À(Êûý?@„K[D žˆh© U+i=ÊÏ«¥Ö¿ˆ¶ji«l-µ­[Tµb­X«hEëÑ⡨ "Gá&dÃü¿3»³óÎî̳ÙLŽg5Ìîïû~?ï÷=ægÞ×¼&ž*/‘ã–"X”º¢Ž ¿)Ç>›xì\­8t¾ª$—FË–îDÒ£Ÿ£†m…¡¨º•· S]«zÔŒÄl´©¼Gió×GÛ²~¾6$¤—έr\I«‹âXåd¿6†Ó‹ÂSËâ©Æ£¤×d«Æåú˜=ìQ!êå¦b<:ŸŠ´YcMu¸ò溓ßí-ÖÖ¯X¬Íš26< ƒ,±£Í_/oÝÚÒ9ÇšùË)œ¤÷9p1ðÅë6‹3Ÿhj^ÈwÕ÷\üǦL—<3Þü·¥) êu‰–õš$ýÖv'ûâÙ¯WËNÞ Ë?f­Hâl3OݶJ|òD6ɺ "oâp®ïóƒõÊÛjÙv SµÃ‰»CÚ‚¾ª”§ëâ…«ç—Í’ðU#iH®’NuÖ{yUâ•»Tü.~ÝÇl“¯‡ýÄÕÔ´Ø9äɬ4*§øv9\o³%YŸ°Ç¯¦Åøîš·J:œ|[X¨¶„ý7ÆþÔÚ¤øé‰[º¤MÍëQS†ûl*«…“Í™ŽÔ Ü¸²µåe²~Ÿcž¨yœl=­^ëâ*'ó{Þ,«Í‘A&[0ωܦÒ?RíVë{35cWó7ïxl”ãjùˆ—–ÒReÖ*ó8éqño[œ*75&7=-êÌKËöîÕæO4û§”hãÔ3’+L÷ïkæOõee¯ë£Þº´½™)ýêõoN÷}çå[÷"ª]Nùm«+̾½žF%ÏԶ΋?Ûâ°å£e¿šNgþÖ¹*¿Úâäf¯Û~7?RÓõ]eêÖ'Þ»B›~kX)ƒêµ‘ 7. ßgbÂ<ñ¯b÷{'[½[»m¨Ê$Ùö#ŠUD9QÖ¥hË“ÕVß+Ò'â2m¨­8Ë«s90ãvóפ÷ ÿTì§'"ƒû•ú[­sôsmþ™l¿À›XyéfGqázmñüYÚØpY…6dÊÂÄÆb•å0¯Âè2lc“\ÙM¥O‘PÙË›n̲b¿.Ô÷IÁ·¼ïOˆ«Ý÷Â3"Ük·w´?NMæ8wM©¶wY4×øö*6F¶!ÿròy5½nãrùóÌ~ 43ŸÃé ûnt9TÃv®×\úzqxãv(+1Òb¦×‰y,•òb†á¶ufá-Ïô8\íH©¬ÅOç~š§ÉÞ‡©³ÉG¶j¸Šß{ÏËø Ù«éHÖ>õZÅ7_2÷{·1òž(ñ¾•[ŸÂÑ¿U»’ìûªá%Û¯tÌŸPÝ †®“le&Ùþ‡Gq««b=×p»ÆÜ¯òNÒUfa.f¸ÆV±S)ƒ*ÏY.}ôõ §„Û·dÚ7_Óý?ßg«ç>°Ê?i·ÆŒÜÚa½îuz>¦æ•wJ~¹Ô)*‡p¾¤`ƒY/¹o=¦ÉÈï a²lTûÎ} Oc*“­ŽH¶n¥=•ºÌÙn•Ëw™õÏ_2ýMm}ÔLñú,®æìñòÜpãkÜkâ¼ðýM­”‹$ë¥Xu€åg}A[~5à:ÝV»ä/Ïq²üƒÜÒÁ¢¶føjZK:î]¯½¤ ¾þö7íoŽrL„É9úïwÖï²9¹yN­d¬º4„ nMžŸo‹Ë1Žõ µQÊ@˜Ú8© u¿c8.•WÜNÒ M(\¥ÔoFW E+æjcGMÐ&Nœ(K é„ûd SЦƷb޵ôàØYËnÞ;;jøQß½Ø!Œã牒^“mă‰ÅÌôô-žn `MY\ÒÈ>h´Xá¢pWýnÈTe™Íb­pca¸ãÉ@0›³B¿y]£M û¢sÞÃ(ÖŠŠ“9p1}6>‘6EýV;¡.þjëa¢œæÞ# /~•’ý W³“mrÕ·ªýqއo^äº5ó­›ÍQÒÙ⊣¸¨ÈÕ¿¯I©.P|^µQùî\ßEpP–qRÓø¦2€¬Ö·ŽaÆãª¤I#îÀ_¼p•ãV~yôU#éñ›ß%QîRñ»øusÿI©F&&X ú†’f›¡øO|»œ®OÅ'âpR|P8Äõm±IµÅò_÷ý©µI §º/ÿwI³Z'ÌZf‰FÂe]YB ˜ å…—YŽekD=e¦9%¿ŒÏÀ1O$=÷Ù\ý#¶_©}QSÚœ"mÞä ÚXéWN”¥¡ôvZ½fìŒäúGªÝj}o桚DZ+bõ!‹™JY¶Õ‹qŽ«åCM‹ãÀfá"ë>®Çü—4«qªö«ÜÔ4šÜômþ<«??eΜðrŽC¦.ríK¨×'õ]yYdʬa¿UEƒ‹MûØ©ÊËS´5JÞ¨v©öZiQXªõ´‹¿«¾™¨?§R‡Zét)gµÄÉÕ‡]8¸ùQÌôªzŸ|o´MEŠpBf ÒÂBi—tãSóp¢¶x…rÿ=y~D_6}m¨Ê$Ùö#&·ˆrë¶Ä›ÿĹ+Œ2Y[}¯È:A-W‘Çj+Nçòí36vn~’ì~ažŠ¶4)õQ´¿*>®Ÿ—R¿À›Xy©§·¸¨P+,r±ex¬kÂÜÄ–õUóBʸÓx“^…û*©Þ¿‹ j½lŸB-WîeÏzHi–=õ:Ë—ÓWÿØêð$îÏT_­Í6ÞÑ~5ïm}š ï-›~˜9aÎbíÍé×yk"|Ð5,¥=pˆC·×ÉçÕçBõ§ÊÆþÙ»à+©¾žjcRe%N]àÂÀ´7•òb†á¶uô‹x}ìéuÊË`Ü©”µø>ä¹_§Öm©Œ«ý#ác+ÿŠß{ÏËø Ù§bŸêïŠ n¾dî÷n£ýžÈ½~·„ fýîÆÛÑ¿Sèûªá%Û¯tÌÝWäO 7Ü>¥Ôÿðè/Fz’}®§~KÁUfa.!fASìTÊ ­ý°=ï2Ó*/I…_L®ýpó5==©ø~<[=÷Sð÷Tìqôi¯mK 6˜õ’ûVñ!—zNÍõKµ1™¾„Ê5á± ÇúØ{»jO»÷1Vçri–³X[eéò±S¬q#u"‡ÂÅá{©s¬±'™)<<Îå¹\¤P/Ùê€dú‚¥N·ÕÁ±ò˜ÇÜë²I ¾ÒR8wiïÌ ‰¾æ½£ír‰£V_Ç›ŠhGæÓ¦Ì[1ˆl¢¢ü…áÆB?Bµ÷Úh©¦†Ò‡‘Ë”‡‘‰8¸*Œp[4ÅœÙÚÄy"øR;CÒXEäÅÞ5ó­@ƒ Z¢0%­IvvâÙ’´’îøy¢¤Wéà«â*Y®1ܧQMPÄV‹6†üD}#]p1û‹~½šÇæµs­· ÝÞòVo:ÌΠ*:sú, åï¨ Óµü„}GåísžùDøR˜§¹_í„ ß 7Wê›4˜h=ôñÊ‹_y·_áêT>TûãWoJU¡øqØM®úVĪÁYùFiÓ·êפTXugT>‡Ò¥–«¾“ëÔγÓD)gÖCh굎aÆãªr²}OO~yõÕ¸‘ñìTŽÛüGÙ¯·m —»ü.~Ýß¼—C{=¬ú›¯ZûŸphãÛ¥^o=ôîq8©yk«S”tØö[á©¶¨þbÛQG{·#~zâú¿”][ÚfÛn{ù¦o±¶pŠ%ÞÖýÎ kÀÂ^„­¶u…¡w¿ŒÏÀ–ž})ÕÓ®þaùåûÊ>õ°´9QÂøf{£Ï5YË×E ûGzüªÝNåÕžÇÑNë¸UæâúS<6Êqµ|XqI]êð€Q}ØY["L5N•ÊÍþr†’—E¡°!z^Yj9Ðó`cþ2-//OË[–u_àè#¶¶ÔŒOyK5—ݬ71­´ ™bŸ©v©öZéPÊ’Ò·w+³ºo†‰ú³×gG.&s[;œ\íU|WõA7?²¸šéS·*khS_€±®‘fFYy™¸à«T³õ÷Ãþ"}>‡Y½·=ª-ÑßíL’k?,ÑáêÇÔ°#ÅÆÁke^)—aqD-õ½"ëµ\EKå>C ×¹¼:ó ósñ×dýÛ/váô8–aµøt߬ôCTæ¶¼ûdÓ§”óm¶ ïð=VÄX—í<•ƒšGRV'ÌQ_ 毭<+oÖ{.»)ô)ìeo¢ÃØZDÙ Í0©^§ú²gT†Nß#¹FöCå;Wk\$œW ¶ñáóÒÚçh¿šFGŸR&*mú@ÎŒÓ5,¥|9Æaï'š}2µÀö’eÈ'M·õ{Ìë’e‘T_Oµ1ɲ/]ª½¶r¯óM¡¼Ä‹×Ñ/Rè#ŲÃ{Y‹ïCqï „£-mµq¦rŠWP}Eõ{ÏyŸA­ÛçfƒYæÝ¶žmL¡oå’Ö¸þ-å8™¾¯=¼äú•¶ü‰hìáZ÷Âu=.áõ¹FÌz&…1i•™Ún[ñ)åB¹gT¯sj?ô±uëÞ±ö_©ÔÕjšmõÜV%çï©ØãìÓJZÔzQ©KTV»®\—d™µ|Åí~E ;©4Ù뫤úRGZþgK1Òë4çRÇymWíùã½.sôU%?cñߨ¬úbŽcÙ…¾…áåÍãúD( Íç·z<^ËE õ’í6ɾ`CªÓÕñCK3àVޏ?–¯óXÝø_ V¾É9ä.-ï¹à빺|•î•imÑ21j¢6kÞB-oÅ -?…¶xÑ*ì{{e«ã"¬Óçy»W–å)\¿B›;Õz{IVäÖÖ8¼yïÌ=¶Ïyçãì£á4¨ÐM'þb¿fñ›ÿM}scXŒç•…¿òn¿âoN7ªýqŽ[7/:Sy»AyÃHp4?oV$~°·¸P[ñæ\E ¨Ïfh½ÑfïT¯§TÄÉk‰Ï¹¾Ó¯³ûߨÉsµüzy(Òòϳ٢û¿*’t 3W'Û}éÉ/¯¾w 2žÊq›ÿ(ûÍú$±rçÝïâ×ÍñýÇ{9Œå{ñâµûfd{ß.ŧÔ6']u¹š·¶:EI‡m¿e¿j‹ê/ê~Œšªå­Y¯­Y‘¯Jû’6ßN¤<Ê9jÚÌ4Û—ïž*mra¨-_¬Í˜h ÞMߟ<×zP©†i«íF]aèÝ/=æI*õ´«X~àÜFkóÂKÿI_gÈdmá2isdÖ½Žžh>P–úyTx6/oý#=~5œú׎õ¾á3A;¬ãé|Ùg3¥ÍY,)½/'}îyÓÕ>™p³-‹à1ÿÅNË>»Zåå¿a>‘õ¸žŸÓµáã:Ã"mF8O‡—Ò¶ç/ÖñÈmùÐ×6è&iš®ôõñ[[©Ô³neV_.0yöž_ÎeÊb¤¯ N®öº”{7?Š—^k J=¿†ÈlÑr#3¯Y±H›^Â^÷+ý¸R]ÒŽOHÕï ŒëCÒÿóÞöع‡ã…ŸJûVäo•·ÑþH{j¶OÅ…k´¹“1²­LF–ÙÄûü±ê„XÇR¹ÏPÃuª¿#¹Dývó“d÷yê]Tºl>»oè½_Û?ÝʸÊÜ^÷+õ–Þ>O™£åå¯7Ú(}èkòlý"ûC“iQóB/«òë>œ]gê½ìzïSD•=™QÒ*{ùÚµìÁš]½Nõeï6Ä`ªûW’\ÕqË_#}^¯K#Ûø8éùº£ýj•¾°¿,¥ª,îkë/™ÚÊP„½¶°¿µí·Ò­ú¼Ùÿ/-µ–ûÑã2a†áï…²¬Ï›crúqë:+ܨ4†Ò칯§òJ²¬¸¥Åܯ2°—{ÝïåÅ ßmëèª)©<³÷ù#íð^Öâû­ï˜LšS¹‹ó²+¨¾bK×¼ŒÏ@õ¡pyHÅ>Wâ•1¯6Úú&Ѿ•KZý[Ÿ1Ôza;™¾o*ýJ5"ˆ[:½÷?¼ù‹×çnõ‹±?T™©í¶Ÿb§z"«©˜ËÅíÇÄYÚŠõú’ŒGçÍ——ÈvÍé·‹¯ÓäÝ÷ãÛÙHüþÁ«¿§Òö8û´’_¶zѪSTj¾x·Á ÛòuŸ÷4yîKx»pñ;¯íjmÕeÎåRåã»Ã¸Qä‹a‹§G<Ëê{,)ÔKÉöïm÷MžŸU{óSïuº:~(ϰ&Cq.O1òÛ©>å¾èû)2ñÌ„‚¯´8Ìðe ¾êp†/£‚‘å&ç8<ô3nB7â¶ï"âYæ°ÌŸÚ±ðÚh9wjô—ˆFJO×Za‚y±l®*ì ÄÙl’ð¦,´D N3êùgÍ×f¨ƒøzzŒiÿíˆSúTNj,‘Ê>Y;Ô¸œóD Á›Ò%†ˆ/(×6-Ó&:ùMľÉó‚Ksí.Öæ+3­©¬#¿Oˆ˜q,þTc`5ò¼Èßs–™ÂÄÐx>ç™O,Ÿ5î„,:ûªaÛ„9Qþï•E"¶¨åCϳD®‰ö8åô_÷¹‰*?Êñ¨²Sœ¯MU…ˆþön±Êž÷º ¾Ÿ©>Y>×,´‹#Ãéw°K}ì¦ÂÍ‘««O¦/¿¼ùjšÒcòñRî<ú]üº9¾ÿx/‡ö65Ò÷b•#Îíq|»ÜÛo>‡“™·QuJ_’2¡Úb«od° <ûƒRÍeÙ¼Ù?=‘ñQõ£[šUJz­:e¢6þô¨vÔX:9–­j¸õuZÚ7ûd¿çz:† ñÊAi"}™QÁ˜ÝKÒh„—È5’Göþ‘ÝÊ«c½oÆ)[«o­öóâø\<6Êq[ù°-·£c”Iõ¡kœôˆneÒ²Ï.øÒ“b•U3Õpõr1qnäƒX{½å4{­V¼mx¯!A±¥î'Ãobg%Uó,èGjzüA¯+f…ïQ”ë•<‹ê $â›6öž_ñéÇkƒ“}ö?¥OéÂ!^9rOwä,^~?J–w ÷/Ì£üÊCÐË CB×[Òè¶Ï[ÛŽÍN•U²í‡aƒ{ø*o«=Š`ŠsN^Ä=œÇ¾WÌ:!^}á1ÎøåÕ‘‘j¨mm²ûÍüðh‡Í/̰”­c~*c5ÞúÙÄÈËâüù¶—§Ü}Ïy¦rGŸ1óy¸œ;û±—#ûožËn"õ¶”¡È>…ÚfºÛ´a–RöÔ<Žl{<Û øP[ÓÇáãþ^-ƒº½Ñm|? ¥ÑÑ~3z]¥–OÅ.}u€ gó% iÆR]Û¬ñP¤ÿèÜTÕ~ÅÆ7§GõïÕ<Ÿ ¼Ô«^•Š=Ác.3—…êl5ŒRúz)–•˜éŠQîë<–—˜q µR;¼•µøéñ|Ÿ) <߇ü\Æùc•-OyŸ[9òl_,¢ÊTD=äÉFû­:”M[ßÊ%­Îþ­§µú¾i¼K¸§S˜$ð,(éqkÉ?gñþ\#V]ãÕ –Í ·Vý¤úšË=£Ø·>bÈXþ”Tûáâkaû=ú¾šζŠÝžûÀý]/çíqöiïõ˜ç2¯®J¡RêyÜ(A®êØE ¿óÔ®ªá%Y—%ä«q¹ëåØšÁËmܨpq¨è:öä½\x­—ŠRì 6Œ:ݽn ×u 属Ïü#ƒºñ ¾ÒRØöjË^ú›f,Ùø\^-騚5y fò öè»Q¦hs­P–/´;\Ñ2k–&sÉ=5üD¾¯P:ãs–)3x¯°¿%­7¨‰N³ʯüEs´ N‚™Ñl^ž5SR0EÚ¢Yê[+&YNfÓÏ)̳϶LtÀ&„Ε§Èå õëŠWÌ wº¦üÇ);âçI±67„ùD³³l(íuL©¼E`w\jTn6Í™âêRÏÆËÓ¤üÙ{~ÙÓjÖÉÛZàTêf¯ËþX~7Íòò”~ßcöË‚Eä^Éè¯K~„ýG¹×rI‡WaÞŒð=£>ƒÂü5{cú%ßöDp·•‹à±TÚÕ–ÈïV?d‚ö¦ÌÜ=ϱ.•·ïïõ´%ß÷ÒÓ«Nˆu,˜þäãŒ_^ã䛟¸í߻š•Á¡þðjGdþEý–ôØf´ÓÛˆ±šäûÙÄÉçâõ‹µéŠÐ%X^Í6kˆ6qê-?ò…6‡²f`>¸Ðmž0KËÓgcv)M˜2×¹_ a{.»úêCÄYoæiól3¢‡8 ™ Í]l_¢6^éÙ7¶)ߟ™þ¯7Ï‹½u´ß­Úl*Ô,¶Ì´5ÙaéIý|×°Rko×ãy¡q²_;Y›'/Cç«ã’ê˘±Yè¾ï©¯W e%\îlŒƒé[‡{(/±âÓ9ú…þÜl÷]êa÷{šØí”gòe-~zR¹Ï4ÚcOcçA¿wl;\ËCÈ7“ÎËø Üóħṳ̂mTÇx’ì[¹ðvöïPxéûŠÿ¦Ò¯t+ã1Ó)q&ßÿHÅ_¼?×p¯o¼ù`AÜgt.÷ŒÂLOËFi?œ^žš0UVVÉ·–uœì4ke(Œ(›é§zðýÄûÛÉ÷å <ú»q­{œ}:¿”<2~¦/“èÆÎBÑün÷IGÛã¹ýH†²´A»Ë¥ÿnÜ6fáø^Òçw½—¾W¬:!Ö13-^â4¯­OÛZ·#±¾aõ â奴Õ8(…6 ã^€Çÿ½떮ą^„ÛÏéb‹±jýôõÓà>ƒŠ$Çv 4h..ê«MvÁW¡¾s”X__ó*¥tv`ÁCÏ`å–•XyðR,š3"Z',˜Ü? õd ¬ôûB++)ñçÅ$Ј °ïÛˆ3—¦Eh þÞlˆÊîh˜Øl˜ùÆT7z|ù˜Å|ùŸQ“ 4xÊÝxëÁIøÑCúÔKò;Gf_ºÖaö¥*¼.E$EGÍÊÃë7œ<Ÿÿ’€Øñö4œrÝ_C,&`áŠ?`ôÀ.Æì^û6½‡_ŸýýàÌ?r†,y‚ûÇŸ@n$@‰@{pÑT_‰·ñÉU[v`Z§Snf,Ä&ŽF™Ý+PµKžý5¾?5¤öÂdäï½'Ø'þU«ï ¬¬ÔŽÑ …ö}_žÒ"wÁ߃ î9Ä# Šû‚ *»˜Ø¦C€‚/óš‚/á3j     K j“̸tvhÆ¥°£°pý¿ð­îÎO;ËwlBñà¸þåaiø"~!!°Œ‚éÆš &!"‹„Úwqv8“·$Ш¨.êhÙÖTø5vÁ——6>žõùÚÝKÿŒ!ß›aKâ!Ò:­·µN˜ºh=î<¯æ.m`eÅŽ?H€ìû*0øµÑh þÞlhôŽÖ4 d_°iä3­lp(øò1Ë(øò>£&    h°*?½ÏŸª¤,毘‹±Û*ûø•’ P%KgÝw7~ú×·/š0}¦ß:.zBÇk¸“H ¨üã{Ÿc®È!3P¸ìæz½lëçOŽÇùSƒ3[N_\ˆÛ‡7®%ÙÆÛ˾ŒÓÝ—þŽ­Ó ˜÷Ø0þTûböjñW++µh9ƒ"ÆG€}߯—§´È@cð÷Æ`ƒ{ñHC!À¾`CÉ)¦³‰ àËÇ §àËGøŒšH€H€H€H€H á¥ŒÖ¹‡ªÌÝqâÀ^Ë86\ó˜rÿ*÷¡¨x'T·A›êýØ6èwâ tië£&ðÀÎò}¸ã_O¢ä`9Úf·CÛœh•ÕÚ·ô¨;VƒÊPQ¾ÕÕGqÃÈ‹?õ~'      ˆO è“wñÁý7CÓjݱ Úu–-ã_ØDÎ8RYƒ_ïCåþR´“—Ͼ=ãEdwëÓD¬¯[3·–”㦹¯£ä@%Ú·ËF»úXTVÝ&¢–b«:|ÊËQQQ‰Þ]sð·IãÑ­Å‚µ„—Á @ƒ"@Á—ÙEÁ—ð5 €oî}óøhÛ—øÆ¥—¢kÏž¾¥#VÄ555X±ø¿Ø±e æO¼½;vu:‘ DxñºÓÐRf󣟠Mûœˆ£üiسåKüoÁSè}îXœ÷ËGÍÝÜÖ";æ½…å[váâK/A÷ã»×bÈþµ}Ûv¼÷ßw0þŒA¸÷Ê1þ%„1“ øF€‚/ßÐ|ùŸQ“ øFàÖ—æ ¤E F÷{¡4PôïEضë²O½§]?–QÜ»s'>xõ_˜}Õ-8½×ßx1b      hh4™AûÙËúâ” Çaè˜KlÉ”mÃ+ÿY‹-å8,ËìU²Úg‹§ úö퇳Ïè®-l—4úï==ÍÛuÅ%3^jô¶úaà5¼ŒŠY¸dÜØˆè«°åå9ø¢° ¨:Œjý¨l‘Õ  à gŽ@ŸÁP_M\´ð_8©s̹áÒ»ø“H€H€H€H€H ) àËÇ\¦àËGøŒšHÀ7Ñ‚¯J,»p(^\ œñnÿå0ßÒ¦FLÁ—JƒßI€H€H€H€H€H€H q±_o ËµOǬ/}öw¸)·CŒs×! ¾Ò›Ÿî‚¯ ,»:ÿ\+þëpó{!w@ŠË&)ÁÖåïb_æ ?·v^,¤à+V¾ñ 4~|ù˜Ç|ùŸQ“ øFÀIðµâŠ¡xþß@îƒo`Òm|ù–9Œ˜H€H€H€H€H€H€j@LÁ׿ÿ¢Ë„¿J,}qç´+0¨úÈÜJë?Y‚§—l ÇþÂk/âòÞ-ÿó ¾Ò›»±_ËoÊÁóï=.ºç}ûTdHRªŠ?Çç>‚MJ²®~££†uTö$÷õȺGñ‹qS€Ááÿ܆6É]îx6_ŽX¸“H€H€H€H€š  ¾|Ìj ¾|„ϨI€|#P+‚¯@%öoÛ ­‘Ýýxt9>ö›¿‡¶oÁÞ]²NDËL´lÝí{uCv¶>Œçüá _Î\¸—H€H€H€H€H€H€âHLð5Ÿ®ü†)Ë7~ùîó8õ®WŒàÏ»s_Óߊª¦…_ížÃd¶nƒ.rp|×lC cjŽ"h¬V-d¹ÈlÛ{™ÙmУk'd…â*Û½[K™hÓ¶Ž;®:ÊùNŸŠ²Rìüºûe¥¿6íÚ çñÝåÜè3Õx!£»Švaw¹G+tèÜ ý»fE_ÚCÁ—+šZ9ˆà+÷ŸáæëÔ—+°eþxèž§Bi¸÷mý#:E¤èØ‘ */•åIeAÈ sÒ—ƒìlŸ ìX8´öQüêr]ðõ'üñ_¢]M•xI†¸GÄØT  %›·¢òðQ´hÝm;vCN·Žh¯þ“‚/(ÜE$@$@$@$@Mˆ_>f6_>ÂgÔ$@¾HUðµgñ“øû¥3PiÁè[ñ‹ç~Ž~ÇG ”•àÝŸý ¯-(ˆ¼ßøÛpõÄÁQûõ|9báN      ˆK 1Á×|¼l*N·MuTÇ&ý¿ø'‚¯—C‚¯/?z×ýôi¬‹Œyø•øxæ58½£)ÖªÂS“®Ám¸¯_—‰ñSþ¾bÖ‚çð“Êñà¯nô%áÝá/ãn˜†ço; aYÖ¡xðþ¿`Ú[Ö¬cæÉwNŸ‰ßޤˆÍBñ–ÿŸ>ÐO\q"­Æ÷Šu¯à¿³GÞ;ÎtÑtLû˯ÑCÞM¬Þò,¦|ëFãšè.Ã/¿xýÚìYò(žž8%zÌkäݸû±ß¡wgû˜_ÑD¹‡H€H€H€H€š ¾|Ìm ¾|„ϨI€|#Šà«ìßàÞ+§ý¬Û |õVþÛs]Ž_ì}ýÌö« ðÏv—àCóŠÑ—cÌ `çǯb“Œùׇ¸ò²žæQÛ–‚/þ       „ x|íǃ“~„iŠàëË·ŸÀ©÷,ÅÝ×\{ Úì\c-ÿxâ(ziºgTá¹)×à¦( Î0,]ö{tx÷aœ:=xpØðÑ8¿/ðùçK°t³\|Ã}¨º-7OÍnüæ¬[ðçP¬so“ñ„¼K¢³qwÎAšì4>ñž8 úáÞ²dj÷?û~ž-ù¢àËžm*‚/T®À“C¿µ’´S?À72YúîÏqïÿ{$”à\ ¼¨Pôol Q½ˆGº5[^Á×BçEn,Áמ×nÁïï0gËÅY?>-‹òðá;zÌò‘¥ ÿ$KAªÞCÁW ÿ%    ¦J€‚/sž‚/á3j ßx|©â­Ñ?ÇÔ…·£GHØU–÷ î½øw†M§/Äí÷œe|/ž;3~òªñý¢ÿƒqW M@Å–m@ÏÈ¿ºkGBÁ—‘ @¢|Å^ÒqÜ´‡ñòwjpè_à‰xÜ-ÓðÄÏB×Ðd^E+_ÅÀ›ƒ3x=õÒ øÁ‰ú ¾*¼ºï½u¾Ñ=eeh-ë0. ‰ÁλãXŒûzöìoÚ:ÿ6üÅXònüvóÑ54)WÅêÐ’Ž#E¸õÏÛÐ& ë<ʧy†œP¹Ï= +åwîÏ_Åu·^†ìÐu¥ý÷^û+ãÜëÿSŽ‘ƒ-É_þC$@$@$@$@M–_>f=_>ÂgÔ$@¾ð*ø:²n>~yú=Fº'lÆð¡‘¯%ÿx5¾\~ý¿>|/ºeTbÙCñ¢>ëþMcöãß ¾….ˆ³¡à+ &      ‰ ¾úâþ&â Yö®l_V}ø:þ^>q–~0Cöþ]&üUbq•ÌÐõ ÛòU²üã5ÆòÆr†Æ^Ýûä¿—|d‰Äór‚_ƒÿ®ÃRYúQÿ8 ¾]ðnlt-ù;NÑß }d©ÆûÇ}ßsú·M†RÜ?áFÜ'Ë<ÞûäÓ"ëdžÚZ‚0kÆ.Kðõ¨Ì6v“1Û˜uÙº—ÆðûEA6|2vÍý6,ÉNð ¾,Véø–šà«Ëe†¯ç¾’¾dv®P"ì\Õo¼ƒÛ6a_Éde‹ø¯b9VË0º¾d–°Y2K˜*ÛÿÑpϵӃ¡6?_‚Múûò¡à+Èÿ’  Pðå£'Pðå#|FM$ூ¯²?€{¯x\Ò=3ªo†5}Ðk°‹p—¾zc5æv¼òþ%®üäsŒ9=R"_±ùð( ¸HTðuÞè0VDlÛ'të‹ágžŠ‹ÏîŽ!íÕêfàœ?âMxÿ£ žq—>R` ¯,Xø4ùrŸ¼½·Þó‚1C—zä~wý\wÕìÆoκ–ƒ÷>-³„E'Xq8 ¾œâU_ûDð9¦AÁ—šµÿ=5Á×v¼Þ¯?K²zÜú&~u×·äKÞ½¿û3Ý;x:þøŸ_‡_X Ïâå ø*zærÌü"Dt õj™ákgør¡ÃÝ$@$@$@$@$ÐôPðåcžSðå#|FM$ூ¯ ™ákª>Ã.Ç]BoûKºP_‘3|å>öLš48)›)øJ O&      0Ä_#ðñÇSqº:ÕQã¿ÝÔ@IDAT8„à—™á«·>Ã×ðef¬qQ3cEœ.?-1–“ðÊ:ÿ(vmÝŠ¥KÞÃÄÙº”Gÿ\ŒÏ?¾'µ*Ń2Ã×4™áëšiËòŒ}ƒ‡ÃÿZ3|wç,,¾F_¾1v¼|…áùò%ÁסÕÁ]—ÿÊH÷7ÿ×|gP¹Oý†ñ’áÀ?«oNÛA×)\ý0îù¾œ±üc,ÁW…Ìðõ+}†¯‘öÄâÁâ’Žññ8 4n|ù˜¿|ùŸQ“ øF ¦à+†0«zÝ|üüt}ÉF™±k™ÌØu¶}Æ®-¹OÕ縿¿=|ºdTbÙCñ¢þ‚äèßbÆ»7D½A«‡åö¡àË ÷“ @l‰ ¾–.›ŠæúxAVlþ/ºLø«é‹—ßš…qÝÍeN6vÅ^9]eÅ1ÁôXa8 ͬÇÅcîÁR 춇æâÏ£»Ê7ë'¡_NäënŸWÁ×±=yxêì‹ apîþòYôbX¼…Ëdß«Æ>ÓšýKîÁ=e毈™¼Â×\ô4f=5Ѷ¤cørqó‡+‘Û3à .æ–‚¯˜xxH€H€H€H€= ¾|Ìb ¾|„ϨI€|#Kð5ðîÙø¿†¡æpuTúZtа¬ÿX|`¹·ü'оö,~¸t†q$÷Á70é¶aÆ÷â¹7aÆOÞ1¾¼ûqüø×ßA¶13ØìÉûövƒÜavá˜q²üCÁ—I‚[      HŽ@¢‚¯Eðuz ÁŽìÀOι OëÑŸxþ3kÆô-ˆx¤þ{–tý6¦¢+ý¤X«|òò+ø¼Çp\uf_tl}¹ä%œ:å¹Ö|EKþŽS‚Kì»ã^<5ñôàìb‡vàÁ{nô%z\Öù±ã(øÒyù÷IDð5ðçïছÏB‹@5ªÊwbû/àÉ{¬%Ï—Ù½®Ôg÷’%ÐΟ½ã¿{:2(þðÌ›8ÅúIn3|‰pì—Ÿ?‹~2uhO 2»uE摼pÒ0|¨_7øvÜþäo0¨oGý—DV†-/ÿ»ÝŒ±ö î ýKÁ—  @“#@Á—YNÁ—ð5 €ob ¾b%ªÇŒWqÛÈO0õü °K?·Çè‹Ðöëw°iyåñëƒ÷¢›¹ÜcÅ:ü£ã8¬4Ëvàe#QùïåÁÁ·ÑÁ_Þ½ÊöV¥y*_& nI€H€H€H€H€H€H 9µ&ø’h ßý;†Ü_©>ãÚÂKÌÁYŠq¥,Åhè·b¾jvà†³nƒ.íÒ?ÆC§òuX*K7Ÿ+§¡üž³Re'É²ŽŸ†ŽÉ cãF·Sânüã£xll¯Ð 1â•3V¿0çüùYšr²,Mùí¨¥)ß{z6š·ëŠKf¼dFÈm-HDð+ºóg†+¿|¹Ð8/°¯œxòb]„›0íË'УUð¤ê-ÏbÊ·n ]‘‹ƒ×bSpÕ%3¬#JÞú9~wë#Vˆ#/Cn»XûŽ¡.”ý7á7›Ÿ@7eò/ ¾,\üF$@$@$@$@M‘_>æ:_>ÂgÔ$@¾ð*ø:ë±7ðÃIðÅkxqòXkŽë†,xÓoñÜ€n¡}M•¬Æ7OÅ;ÿ–Q4Ûg$¾ûât\pÅ`4·íþ àË w‘ @|ÆÇË~{†¯P\…½É?}ÚXFÑý‰£ñèÏ.ÇÎíjY«G<‡›+ƒ5¥xññ`â3¦€Æ é¼ke±Û.°-Í×ó‡aÖœ›ñ“sM±—NŒxåè®^ ?}î†å¿< ŠfÇH_†´ýKðµìêüs¹SÔ¹8ëÖcôu7 _OÅB§VïY†×ïƒ<åÚÜ?Ž+î¾%3sðøßE %‚¯n!ÁP†O§]€y Ö*‘åâ{Ͼ† Ggî*Yò(È a›”3Œ¯ƒ¯ÃÕSïÄÙ£‡!S9FÁ—ƒ_I€H€H€H€H   àËÇL§àËGøŒšHÀ7Ñ‚/oI9T²Õ2œ›¨Â±v‘9\j·ºìkT”V &3™­sЮk[G¡—y_& nI€H€H€H€H€H€H 9±_É…¤ž]ƒ²’RTe´CV୲ѵ}Kõ„ľ×EYé~Td´F֑ôé€ãc…#KGî*;Š,9§ªèÚ5;J°•XÄîgQðåΦ6ޏ ¾€c2®T}$€YÊŽéŠo´ésÜÈLWue…œ/áÈU«VæØ”„È@só§y2¨Ø¹ÍsZ£Z.k×­£CYê±ÕdÌëŽeuBvs*ûp@Æ ¾ì<ø‹H€H€H€H€š ¾|Ìq ¾|„ϨI€|#P[‚¯t@ÁWº 3|      ÆJ =‚¯ÆJ  à+½yKð•Þ˜Ó:_éåËÐI€H€H€H€H ¾ àËÇ¢àËGøŒšHÀ7·¿ü¾:T†‹¯¾Íš;-¦è[Òlo-(À'テÇ&ü¹=úÙŽñ €;M;†\Öýω߻ÖýDÁ±š¼õèýh×û$\ü‡$’?xì_ØYY+&\‰fÍš¥!†º²Füæ¥ùÿÄð>]ñðıuŸÆH$@$@$@$@$à; ¾|Ì ¾|„ϨI€|#·ésüöÍçСSgtíÙ9]:£Uë6¾¥GøØ±c8XVŠò}û°këV ìÚ}ÿ§ÈlÑB=ßI€H€H€H€H€H€H€âXñ×ß`Ãóp\¿ѹW_ät뉌V­â\ÕtWU@ùîbìùj#”ìÁ÷<…>ç\ÒtÔ¡¥o®Þˆi/¼‹Î;¡{èÜ¥²²Z×a j/ªC‡¡ôë¯Q¼c'öï?€Ço¼çêS{0$     C€‚/³Š‚/á3j _ |Xø^[»ùÛ7¡º&àkZœ"ï‘ÓcN<×uÚµj˜€Nvq Ôcr¿_ðƳ(üàUì“—¿ iuuƒ‰§Ef+ô8ý›8é;?@¯³¾Õ`ÒÝúþºB,\±+·ìDu ¦!šNs«Ì œ3¨7®>wÎØ;¼Ÿ_H€H€H€H€H€š ¾|Ìo ¾|„ϨI€êÀ±”TìGÅ‘ªz‘ž Yb²KvмêEn0$@$@$@$@$@$@…@àÈaT–£æhý¸ÿ¯\[¶m6GóŒŒúœ&“†@Í1ìÞ_ʪ£ Òæö­[á¸mÑBưø!    hÚ(øò1ÿ)øò>£&h4f½ÿ Z˱·~s\£±‰† ¤‡À Wç✟Î@¿QGHa†ª/Ù¥}üüÒs ƒH€H€H€H€H€ÒF€‚¯´¡0_ññ  ˆG༇iœ²ôg‰w*“ 4AšÌ0¾}ùb|ñê\ì]¿-۶àK®ÇÉ—ým»öl‚Dhrº¼µz¦¾ðŽü_oºŒK.¦ 4Ã%    _>:_>ÂgÔ$@ žÀ¡£Gðä‡oa‹¾$„v 'wëϽm[f5xÛh €7G–aÿŽ-Ø_´ûwÛ’‚|tè}"†Œ¿}Îù¶±¼dÁ[Ïaó;/‚¯N'œŒö½ CÏþh¯ÿõ8A–ZÌô–^Õ¤TË‘ëŠö`å–ø°`;TÁï'| Wáw/€Ý:áÜA½1âÄ^ؽ3š5kRxh, @ Pð•F¸ñ‚¦à+!'hJjŽCµ¼q¨ à¨üjjP-[}_u €ƒGcGù¾Ð_ ¾Ü³ã†kÎMþûgþ¼±n×½rº¢gNgÙvA‡¬¶ÈhÑ™-2‚Í[„~˶y†|oŽfò?$@$@$@$@$@$@$@4¹ã–—¬4ÙÊ?ÐäÞ]ÿm|×÷Ó÷Ã1¹×ä>þXMµüÕÈ÷€µï˜|—ûúà¾Ð1¹×7Ï1Žé焯SŽáF³â8Zy‡e¬ jÿ×á¿™-EÜ59}†¶ƒÐ±ïIhÓ¹{„q@MõQ”oÿû·‹8lÇf”m2bwmE†Œ'dɸBV‡Nò×ÙøËhÕÍe|¡™ü·-¬­Œ14“ñ‡ðñ 9ǶO9&cFú9FxrÌv®¾?tN(.4“ñ‹æ2‚![]5¤o›5—ïú¨†²?ÊÈ&¸ã˜øê1ñÍc+þ)njŒ;‰ Èø“l«ú÷àŸ.Ú ÿ6Ž“±©à9Æ~ã:ýwðÚŠª£ØYz;J÷£äÀ!œÔ£ Î>±§üõ©}»cM:öªê>ÝRŒå›Šð±ü—DïNЫs{ß±Zf´°þô±+ãwóà¾ðïà9™2~<.¿å˜~­ù»…øCsñæâáïT–5AϧÉ$@$@$@$@M_>æ8_>ÂgÔ$@uN`{Y >,ü;d»¿ê¼ñxûW¢B„\Gªd®F¥taV ´iÙʘ©«m«,d·l c+ßõÙ»ÚÊàj/s ï3(j6/}Ö¯O·oQX *V¡RÂÕ·zø‡ô­²O“éƒ}úG/[ÂmŸÕ&ü—Ó&gô:gÊ qK€å‡H€H€H€H€H€H€ü&  ”ª Ó>.Ó…Nògü.E@îyª !UMà¨!²²~‹HÊ<&a-ù­okªõkô㺰*xž~®!Ä’¬‚Â"ýE)]X$"#›àHöËï°h©E¦M¨d DÈÔ\"©ˆ),x ¯Ÿ#ãæ9úìZÍ䜰x*|ÌNË6íB¢¬  Kfe¶n›r6颶#ÊB"²Ò°˜¬F›Â5UP仉hÍú©Ec ØÂ‚7Éù"[‡ëâ8¹NÖ;ýµ·ðNßÊc¿!Ä“_:3Ÿ±ñ›íwx¿~\þ Á™°–m‹ 9Wù­o‘)Ç$¼–mÛ‚·ÖºÎÁuFëŽ]Ñ2»CÐR& @i—DѾýØ&ÅepèH5Žˆpꈈ³·Õ²_|×8&ßu—þÑPAñ“ø§¸i ñ]}Ì©eFP8ün §tA•!À2ÎÑǧ•.®’ý™r­~Në–™èÙ±=z‹p«G§öƹA bÿ[)¶ìøz?¶ËßžòаàÌž™3Ÿ……hº -$63„j!š¹Ï©…mºÈíXHä& 7ù´ÊÌ¿h%ùªo³Œßò]lË}¡ï²¯SvôíÒ}ºäÛ¶Y-cÄ£$@$@$@$@$@¾ àËGü|ùŸQ“ Ô=Ë1ûƒWQ$Ñ#ú2fßêݱ‹ÌÀÕ[gË“ Öƒ¶ô·;uñÙ®¥Ø)ƒå;åíàÍ%;™Ä~4òb\:tD1cD$@$@$@$@$@$@$P¹oJ6|ŠÒ¯6 lkümÀáÒ=hÕ¾ZËÌÖYò2Tp«‹p:#C^’2„>†¨'$æÑ¿›"Ùêâ},CHÚõXâŸp"1Ä]ÌŠ†C@ŸÑJÄa†`ÏÜâ½ ¸/¼_D~Aq_Pä§…Ä~ºøÏ©…ÅÁ°ŽVî—™Ôd5yÁΘQMÿ.bÀ¼`—#/Êuì78üwœŒŸè3¡%úÙwðò¾ø Ë ¶aea1Ú·neˆzw΄•ݪ%ZŠP)KIúV0™B¦à6xLd5çìV2«™fȉNŸqL“éÛ @. ßu‘\p»ï`¥!´ÛVRŽ"¥éypÞÉ}qþÐ0´×q‰f)Ï#    ¨#|Õh§h(ør¢Â}$@‰@• *NZð0®:ý›Ÿ;²Aš¦ Ö~÷Öó¸dÈ™bÃ9 Ò&šH€H€H€H€H€H á()X…µ/?޽_|‚î§œ‹Î'æÊò„ƒ#ËfwëEVÃÉÊFŸÒ€>{»¾æ¶²4æFìÝoüxñÕ2þF´î[$ôïü/1ë0zH?ãïì=ÁY¥ê‡Û肱‚û !Þ¿>YsOꃻÆ2f «)d*H€H€H€H€H€(øòÑ(øò>£&¨o}±}µ7±NâKW$Ûä ê)¯<‰WnúM½˜,]v2\       lüï ø|Áƒ8åê;0ð¢«%öüMc'ä.Ý‹5/=Š­¾‰±zí{öw à2£×ï_Y‚Çn¼»wv<‡;ëÃG«ñËçÿ‹²Œå=—ŸW?ÅT €‚/€‚/á3j :!°n×V´hÖ'wïS'ñ¥3’W?ÿ—É,eÍ[¤3†M$@$@$@$@$@$Є |µô5t=é ™É«w¦@Ó]Ÿ-Cf›lttš£9ù²|c+Y¢qXïØ³€9^ÌuN ¬ò°Ìöµ—yRÇÍI€H€H€H€H€œ PðåÌ¥NöRðU'˜ 4|ù˜•|ùŸQ“ øF@“˜k á˜üÕ×O Y¸Qÿã‡H€H€H€H€H€H€|' Éý³vLþêï}´ïŒ˜ 4“1”æÍ% ©¥cFòÏ1ºº¯ù©çb =KSËN_m`ä$@$@$@$@$ÐPðåc.Sðå#|FM$Pçt‘×A-€*‘z5„Os¤ÌnÖmDúÅ Ô5­&íèaQ¿ÔÔuÔŒ<h–ÑÍZf‰îK%þ ˆÀ«Bþ9B¥WâÐêàÌ |eË?­¨üªÚŒ‚H€H€H€H€’'@ÁWòÌjí ¾j %"¨çŽŠÈ«L«®Çsz¹l…æÈi–™â;ªîáó DЪÅ^‘ø›ê;™í«yV¶L•Ø tGEäU^­5È1£úžµ•¾¶2Ý—.üâ‡H€H€H€H€H ~ àËÇü¨ÁWÛW}Œm•@fÎŒÌíá£Å/êªâ¬ÜR"†ebÀY#ÑC^`KôS¼v9¶”Wm{à¬3 ‰K¢ΫBÁò•(3‚ùÁÜ8ë 㓊B_ºqŸˆ½êóŽñ j+³|µk–ï´”Ž§RŸÄЏªDê©oõT¬py¬n4ú:¤ªËWn4#è:ø, îÚ0[úñ†tÆÒ°Úót’HGØÞÊqãÏ“@Ùv|¼n› ÏDßÓG¢<L÷Çs›XÏê*g;£Ïx±‰÷¿É•#òJŽÏ®K©Üyk{ëÒºøq3{UUÄ?‘g4iUû6âÓ_ ƒLô?cxRã’ÞÀIÛ¼r5öéã€NÀÙC»»#3|5oÝNfúŠ-Ò'ôúúè±æ‚`ÇêåØyÈèÐgkÜcß{Ö­ÀÖý’mŽÇi§@+÷¨õ#9™‰ÍôåG?¿ÖM"ÀTÚ«$¢IðTöí•òiMÍÏSÆR"P·õŒ—ûð”ÌãÅ$@$@) à+€wmÂöÒ£ñCh‘~ƒû¢mÄ™‰¾Ê¶,ÇŠMåW&öó¸!£pFà‘SÚᎵrMîl”®¹»œg%@`Õ#çãÌ;>0Μùq)î™(Ý +_0ÌÃÈ:xÈ•€IÉR±ç·;zï_~0÷#Îä²°.ÎÖ—q,\µëKDyŠœò­èG;(+ÄòO6".'Ÿ‹\O÷‰µŸ~†‚/·`oÙaT®BVë,tè;'ö; ÃFœ‚ž—èÓ]šµÙWìÊTxz¯ObÇš®pcÇZ?ŽVl_…eë÷‰ ¶‰îmñÚÿaÍNñQiÖû}óB îèæ¤üï]lÕÝYüùì GÂõÔ”14þ:¤bÕ#hwæ©Ü™cÍ]#S¦Æ<hPí¹û|½Äc9ny¢–ÿäúÑÞ3Ôk›¨¦µ>ÔUŽv4FŸñd“RæÒy(CÁ§«±ª`¶lÜÒòÜZ£u§ 0ƒsOÃi¹}ÀK=éäU†Uï¯À^é[µ[ðþ²M8ÚRN¨h‰!_€>‰uÓÝBlrû+dìhYœ±£–msУGôУø&àX×%”³Š_7àñ–c‡¢bó |X¸_¬ÎÄÉ#Ïq´Û=JB`|<©«—äc¯þ–‡|Ú*F íüóß*¬]ò!ŠC×ev9 œÖ+æMíàêÇ/Ãð»–fÿ)ï+ÜyVNzT|Š º_„%z,Cÿ„}+nŽ9ά/íØ,3F….íéû‹¥­¨ÕW²Ÿ–ÇaĘÓe¼½Þ¿^' {HÚçÛåN½±~[1oî{gºsÔ:™ä ]ZÆ_ªSí;×U?¿ÖM"@ïíU‘$|ªÒ¦³/œpz¢O,“èWº ë ¶`wùa–~tëÖ­‘Óg÷ŒÓÎ> }¯½îö¤ÓÏ­~ô‹G³ýß²ü}l*ןQ•>÷pés÷¨;Œ©ÎÔi=ãé>¼ÎP0"  |9@It׎%ÿÀ[_V%pz.üáÑ?âþ6Á—Ú'‘í”àÈa˜÷Ýv¸áu94þ |m2êð>ЖžÆøCÍŸän`+¬|Áxä| gøš1X»|*[vÅiÉÌ6Vµ ?h}&ž×3·Þû—ÌýˆSž‘l_‹Õ2­_Á§a@=˜-§D+Å“§vÆotá)ÎÛÇõ÷ÊUáÄá¿Ð/ÀÉ3—âý;Gßú§âKÞë“Ø)Zû×à”[ŒRŠÙù¥¸ýŒD…©±ÃmG×þõ»b»ÞÊçgïA{è‚à÷¨Kð@³ãpwhÿ¤…›ñäU¢Î2v¨7½i€äOâlxzöV¬ý+Úr‹øøÙùxíö3ÒCM b•¸Ïl îØ¦Ô¿£Ëqç‰Ç¾` ÀÕò_Wí“×6QMk²uU:úeŽv4¨~y‚Ž£¸sUÊ\šîO ^¾{7Œ®m,Sr¯ÇÛ¯>Køz£g¤Ð^jŸ)ÖǪLi}2³œŠÍ‡ïÇ€ˆñ“ða~q$ ÞK8ž`Û9³_{·Ïµí­o?T›šÜx‹&³:€:ó¤Ë T‘Ç-øªâ~ÄS²ëm´x­•ªFÖÉMãÛÚ§oÆiw¼dûв¯pûii–:U}ŽvƒùzŒ—>ˆý/Þ{œY–t4fùrËi+FÉ‹¤º¹ßêÙ„Æ8¶à/$ †A€‚/ÏùTUÿzŸîK$€Žøö¿¾–‰¾l«‰J9gükðÚä,aÑ|åQð¥ Jù«>uï†Á·-{<8‰Y^”›¯z ø ¿ŽÌžßIÎ6¦vþê½ùÁÜ8x}J&¾+÷zõa ½í־Ƌß낟º›qX|àå¸R•kŸÂ‰§Þf”Ño?ü1æÝ~ºñ=î?"Üßr UO37<[e;eƧ¹o`ƒrüÜ™ïá•;¿¡ìqþšîe½×'Îé5÷:>66òm`ûËÈìûý•S±Msy¨Pò>N9î[ÖƒÛëçãðs×:Î|P¶üt:'$ ÿŒ©”Æ(?êºu u€,YEݦ´±Ç&Ë>l€¾2Hf‡^ܧéCÓŸ³^ËqÝæ‰ç¾` Õò_W‚¼¶‰jZ“««ÒÓ/s´£AõËu·r‹«RæÒp²ý?ÓÐwì Å€\ŒŸô- ïÕ 8\ŠO?~¯ >ă¥{óðÍ®Ê%uþÕ'^ªOº‰ïª¶`Úˆ1ÃD–{6¯ú 4ÔIŒêé|ÐÜ[]­É´¶¶?Ù£-9FŸëÚø›¹t§¦UÛÏѯ©6Â8¨=3>xÆ<¡•šárë3%_0^Ë?èorö¾w_ÈŸ®×ò'‘–ÃùÚõ!?ÔýËg3â$Üæ~ĹS»/7XæEô‡IÝÞulŸö°Yaœ¶ø@•¶ëXì¿ÍŸ?®ãDð÷|3¼ÿýýšðuÀÚÂM»¢¯=ºK[ø°zÞ0mÁŽŠèó"ÒxàX°V­jµËš'®3‘A‚Ú ¸A„d•½Í\¸Ù¹‚ÛùöÔ0£`Ûz½¶ÆùTmé}Vû;iþæ4Sð£I³IÁ\óD˜½ˆ("Žò' 4 £{î ¦Ejù¯«öÉk›¨¦5¹ºÊj‡j³_æhGƒê—§à8Æ¥±¸*e®¶ï¯±î}¤_qýì÷´R‡îaéæ÷lçåN}/UƒS¼Þ/^qî«·i÷ UOäÞ§mvà™¢ñMærµ^˜¹t¯Ø]­UËx’õwXÛ¹a©6óúÜpßKï÷ÎßP¿ïâ½e R4Ðñ–cj­¦¢Lûlö„p~‰˜Çاïopû>ЮÓ˹ù7T¾ÿdv$¦-kµ_™çë[ýšo>¨íyMd“¢=uî#j^&”å1‹ñ19º£¼RÛfû;¢m+Z¢kæÿyÒ>¯}¶sôkŽh»«jäo¿6{\È¿Î{\+0öéûãŸb«Ôoïì«{×è¹û£ö몟;Eï¨ûý›ÒÖv_8Œž±Æ&IÚ{›Æ'«Kµ÷f«çåjoïô»sèÞN§Ÿ«ý:§2´ímóYN°î›úZºÇ'SÈ|^šfî>ê9â&5¶à™/$ zEÀ«ÞêÅ_ÔV¯^­mܸQÛ¼y³ÖL·JnÜ“þxUœ%Q­_P…å þ5pöüðÚQŽ3ÄŠ6‘¾Ü®·«üÊ]nó7Ûßê8,3|eTlÇÇË>AÑî }eotêÞ[ÖF?GÖFw¶Jf²Z¿n= Švã¨, Þ2»úŸtNËí“´Ý@Å[6ãëCÕhÓ} ±ä\…¾vûšØSZi÷Þ¹8ûœÜ質JP°i7äJ Ì€ÀöUxÙ”JšºŸy).ÉU_®’Ù*ÖKº °»BNÐmíÓ_Ò,ëÀÇXæ.PQ‚ «×âK±-[¯ëvŸ~2zdÛ*бù«¯ôô:y@tzeXþî{ølë>dee¡e§>8cø î‘!3¯µ.µéúÆi’éWØœ l²Q…-«VbuA*$ÓZ¶ì„Þbû9’ga+ªÊ°eç¬~ú|Æb+ðÌÒ Æè™Ýú‰ODLKgœ¡ü“ˆÚ_x®]'< wéЯÎî4§Ÿs–ãrƒ%[$¿tßè|ô+J¶`eþêÄýµ.™›(RŠÓ Äe›¿²í[°§xn9çºà²\“žÁ†»F¢ºZÊËà$Ëjñº¤<¼».gøZõç«péÝú<þÀïe ÆÿçZ7VáÕäàVcàÊ¿Ž9?:)œf§/IÏð•$C·úÄ*R_ö`ÕûïcÍöR©ŸúàÒ  k¸@;¥PÛ‹'ÖÆäÜ –‚U…Û¥>¯’š¢=NûæE9@­?#ÂJÒóêdêSó}[›mÎÿ8çÝýüõó7à¹kß­ô7¡ÎYñÌ©%‚GžÈ?ˆÉQþSŒßŸÒ÷§æâµm«0¾šIÖÛf"<Ô!–_x¬+%noœ(Ù²k¿øRÚÖ`3©÷ z ŒSô°ÚӶжlËr¼ý¿Ïp@z YÒ¶öéFŒŒ¬‚yÈ<ùã,çYsBñm’øŒ~‹œÚ2}ŸŽs#– ÖíÙ´ãVgIO·&,Ô^ê'êýX}#°ˆå|û.Éôô’ôØÚÞ$}ÊK_À°Ïê›Ùføòž­BÚñÕù_`O¨/ÖKúþˆôSÖnÂ!d¢ó 'Fõ±¬¼|KÜoÌÐS.Sʱ·óÖ%OÂ'{+‹áËÍ/Iõ«¤ýø«>ÛˆÒ¯•ž­q1ô”aÒ>%?+œíhiŸnÏÍÀöµ㓵1ú®fºÃÛäÒ¤¶‰2pµÌ±÷º*œ ð—¤úeI¶³Žv$Ð/7ü\ŸÉ¯ºíOPïmjÇŸ*Š·à«¯%)×Áû‘0ã‹Þ¯ß´»ZŽBâw(÷R޶lØ¡Ô ß7šuS|®µsÿkOyèWÙÿp~§ó‚ýl·«B§¶,@æ‰"o0>“°æð“Èh—ªJ ðÑ’UظOZGý^QÚÓÞý‡bØ)÷•ú=tÜCKÞ™÷I¡À­M¸ÎÎDwiõ[^_yÅôÉbŽ·DWØ$œwIµ±öøjs†¯ªòذþKìØÏëˆþsqêÐ^qÆó¤\lüR®Ýd©õî'× CŸ.1 «Ý”à/sV¨¡òó ù3¶cñÑî8Ûe8³â³gÐaÔÏí¡…f”Ê›6í õ³ ŠÑï߇‚-{0Útë/éÎ@ñÆB©Kh#ãsŽwˆ¼*xMµÜÙt—°ÃÇáý­qÂЂcnŸ­Ægw†ÆÜ:¢÷Ð\Œ®ê¢j@ž¯ðÙgV¿XòáLã|éQ(í_:÷íŸT¿Xáëñ»póP¹ß_¹ «¿Ú!ù}Dî÷Ûá´sÇàìþ]Ô¤(ߥP¸k 7aÏîJ'–O˶è=èœ{Ú Ñ>bæ¥~žË _zx»z#€ö}OB¯nõ³?úĽGŽE«ZŸä Ç+ú‘¸Ë4ÚgøÚ&3|µ±ïüVbçž ³m‰œn½1ô¬‘è1ö(+_úZ"iƒã@ŽCæ•`—L…œÑ¦;ö·ÆM¾.,À^¿lÝy úÀÚò°¾H«é ¯¼Caéã"›>_‹-RÍqæœãúaà©'£[Ä8s„ô‰òeìç‹mûÐJú™{#÷Ìx|†,_Ù6¸|¥Œ';.é(ñmX/ñ}µ•ú ¾|Úv€agG¿°Cë{«°ãË­8,„i·M?ª~ [õ.žp:mX_ä$3ÃW ýü¤Æõ•z:]m˜ÊDýî6ž—–v?nÛ°­öR?žËø.ιÛXú³e¼ÍýYVü 5®{>HøúgdïGƒUÜÆ÷äú…ééGÖþíN¹ÅHÏlÏ~eš±ÃÞ¯³ß·ÿïôðª·z饗0hÐ ´mÛÍ›7—Wn<~¼*Î6gøzö2çVòŸ„før 6žÊߺLy«ãú'´¥oÏ´Þ¨3ß” mg¾·Íº,ü­T{m¦úfEè©ðµãµ…kÞÈ_ïðEâcÌë'=£½ýÌÏ\Ò4&*ì5OŒ;^{í½gl×ÉòuáÈnxÍöVµ:Û¹ãï[è0ÛY©ööÌI¶ó¢®›:_Óß•5?ù³Ç„ÏŸ1sNõ6û›ÝjX×Ï|Fy³6z†//é·ØŒÑ–n^£Íc·9ÿø™Ú¶ÐË1óg‡Ó>b¥ò4íÚÆTûWkùÏDΚcOÓõ3ß¶Ï &oÍÅ?föRmCÄÛ*jüµ®™ë ÁJßPšš( äX$bµ ÿ€ Eèkq³h€(üA ·ËI,ˆ1Á(€!(N$°eŒ\,ײ°‘…d#É’,ÙóÎìÙÝyfÏì¹ì‘tŽìŸø˜³gÏÎÌ3ß¹îìoŸ‘—¶×Š˜{­òB!ýkúQúm8RbÔ‹ÌûJU>QÆö.9¶‡ö3ªnŠêz>JªöÞÐäu¸XTU•ùLƒ^s†:êEi¿>x\$j™WŠ&6&ˇ—*që_Këcåá×%ÎŒ[Se?ÆT†{\l®òæ6$¸ÝQêT”¹€“O>7‹Uøs¤Èñ9‘öˆ5e:oÆØTP&êê´w7žïDî™É´ÞÄóŸ»ùGhîBÊD]­-ÚS2úH¯s?ù\°«)ùÜ:VT!Bœ(Ú–g7¢ëÖ‰  ´õ îÊ#‹b“I˜oJG﫸Mú8ÝyY´qÖš¤ór!Ú}¾q¾Unÿ9’õ©¶X—]mÂÛøýÚó´¬c¼~yܺêõ½ªã-¡¤Ã5Ûû_ÏšÄÏžFÝoQImâÆ™~ÑÒÔ$ZÚ;D¿ô²dþ¥Ob¢¢.ð–~»‡fý4—·çòzuž[^"´NvˆJ£½—Šæ¤ *xs¥äsè(ã­œÁe~¯+K$»q•—vâ±µ_H¼Ì9ÃëŠÜ.É¿JÛWˆõŸJü@³›õ–‘ñðµ]¬ºC{3æbÎXÿ±b½Ýkؾן0=ræ…·>.:3ñLŽB±¸.=Ä[ÙñìµgûsiÿÌõ(µáÞóýßæÝûRHÝâíåWù×Åî×í~IÌóÒ?g±5û^]ì‡Yü¢æ³¡â îùóÅËM¿‹?«Ç<ƒíüEbûÞ §±6ñì­^ø@¸ÏÞ"Ö®¾ßO3Y~lžÝ´‡¯³Å¢Gî-·Â[W&xGܱVÜ–‡Ó×Ū×ÛL¾¼,-¾ÚVßâçEqYúúÎ@k2¿*_QVO\{Ä¥^YI¯]Û’zëb^¯.XÔ>­ËÐ(ßmÏm7Ò[{ß<ßÞÛê;ß<ïawÎuËlîÚ{ØÞ â"×¾Oß·J<ü}^®óÄjÇóV§xòî…~üA[Ô÷‹~´\lämçÖµ:ï÷óÒ»—ŠÛ.÷<5=| еKnNšÞ¥w?«YJÆŸöãÆÅ<‡õ¾-®ô¯›'^Þ—¡‡¯óü(c³î§Gc 3ëmð›u=O^¤mJìÆüÎÇð`ŠÏ¯³ §šwEx$ç¤zîµÞƒ‰`æÜïý-¢±¹Etôx;Øð SÙ7vóèlïgy®‚ÇaóºŽzv?"ÛeIMs0hà{^iÏ£SÅVWòo­ uÔWûkÂÁ¶Ed®?Æ!g›•kjEIÈ:kA©ùü2±ŸIç^OÞµd¸¶êä-ô>.žsü@@ ÿDÕ[=|y‚¯áwE­³£ÜÒ±º^ˆP¶c.øòoÎäMhA‘(. >„+ ˆúE [´WXa±(--ñE9ñÉO,t›,+o˜ÌÄ E‘Í&¦'ã“ÝàÄË{XØß\¸¹‰¢’RQRȯ\¤çëÊÍÕ¦°-¦‹Â€EUú¡-·Çxh$äý­î1Q\*m(*0msâ6_Qíç¶h62ï*|á„÷P]¥UÀë…k«ZL+©Nuà K×+K.°¥ckm@ì+pxz q› +ÙÃvÉÍ|˜;ea©ÆV˜9`.²HÓÚ6ØÉÌùõˆš’@ý’å+¼c%)¢è„3OW‡ ;;Á×€xþ§ûmì¬ë—‰7ÓrqQW²ãt_Qò6ì÷'²ÙÚD¼›}GoBßhkA‘SÔ¼DéO•0htƾýRpœ“©6kñpÙšFQUäö—±rCà«ø¶ÖhrGí·#÷!Ùô•Q9ËŸà¸¦Æ—Ĺ„¹f#ÛRTÕ?oQ¨{ê7olrêòP‹(Uc ûW yÅÅE¾@,þkíkØo¥Â&cWb7½Ð¾Ígb{ʼ~µr`b}ЧÑ!Ê}zá3jJÚÞ Lžo>žê-š#Ç'3×è‹ôÝtyU`.æ–¯aK"üôÏD©7*ölÚÔhÍBÊDDl‹aÓ™ vÕ^sº5¯ έe¿É…°aizçù¹nëö¹«7Ï÷ÂFµ‰×i¬•‘Fî«<ƒ>Ó›—Eg­ùàu&0/ïâB%Ùî*8&ªƒ"çpÆé ØIŠ}‹Jâ÷Øþxï7ËêÃF¤ÎÞ¦âõ;Ǽ¸Í~ìÒs-§|JDSÒS¢óJgu¼‰¶›ªßËtl´ö ‰ÕÄ9ÓQÇæ´ezËQ‡¶/^½~8*³(÷ÜÞgGžCËÜGµŸÛ¢ÙØÇ,¯ìÒcCŠHd/øÚ%V\mÎýbó¯7ßø]Ö©ßÏ+šv‚ž¾×—spuÍ‚ko×_,É-ûÒ}1‘Ђ[‹…j{FÕ|v±Øm‹C ³¼—çÝøxàjWüå Œ¶®dóþÄv[½ÛÅÃó5'ŸÌšoßrßúûýüóm4µ°JÇé°¹ú*QMDh ¾XÌË÷×Å OwÌ †µ‰¼ø¹¤vyœÝ¸çÝ»V—õÞ×Í-3å5ó.»JÚõuÆVÙûѰ› Ø8C¯<\þ¯jvª|xq«L/õ–Ž#*øróêÔ¯ ˆ+/×s‹xÛ-tÅXqAÓ‹.ðËûÎÁ—¿]äÅLx&ÅRŽà˃ñtÝ­_Y¦ãViŸ¥ì¹f¡¸(æÒ%´Ð¬“ Ýœ8câÊÝ,Š/×Â4'N¦H«ae@ì5wž“Þ¥›ë°=Øà¦7(žü‘þ­x¥)†óÊe[ýÃ>#ºf…èÉpKÇ8wU—ì}¦7¾xýáÈöÓñ6ç¥5n϶°O>FðñŠŸOÅÁ;ÂÒðΧ[²™ g¾îáÙ•ê³±B·ÅX‰ùB}ª°ú÷èóB=‹­wèx/#9/õ§žGó¹wªòõê O3Ù1¯;^êjÔë—*½’jýŒÊWt^©çÑÑëJ>Σ{šL¶Dò9epý±@Ô±—šF:…2½àsH¾NŸX'R×QuÌzg¯e8    øŠZý;Dµ'øú¢¾þ±bÙcÂq=öØ2ñËß¾"¶urI‘™˜w­y6½o‰|X¸à$_zÍâ Ó=Í¢Œ-,W8oÇã2¤Š5-|%Vzmàž¿üÜ0;Øy>apn^•'/¶XÞÕd(Û·»Ýàú͘ø [¬¸B4wt‰ž®.ùæ´º¨KTÄSß Çšž–5Æk¹e—³|ÓÄ'íif*3yEGS F‹f÷%í°r0ö¥/(7<ô'xþb«#Û/Ds•öX¢ò®Þè`/“·p–Q^ü-n‹‹&Ù/K#Nþ›DiyÒ¾Ž¿R$½f"yžvâ7JºÑ¨¯Ì«Zn˜3‘`Fåœ ªú-"?²¿I³Mw±@[=]GâÑX ¾¶Ôß§¢d;¾ÿÅ­ÕO‹ßíh; ˆd‚®T¿¥'øŠÎÐÚŸ$ˆä›jkšEWOüç5œDæü ×Ö74×pq&k‘ëa´þtÔÆœ€À©Ü{ÈíBÒ|bbM×höE*b šdë2iÞ‚KôqGõÛû,úʨœù[¤¥µ¾(ãP‡¨)-ðÛ^Qµë•$ðp¿l —`%zÓá}VǺ2?>Š•Š&Y6þßP»¨ô„yj¬¯ôƘQÍÎë2òCÊÂ,bv¥q›—ùs ²Šã‡Zjt>å8Ÿ}DËd1Ï#Ï-x|²ŒJk›5O5÷d\T¿ÄË^_˜ùQ´z#ÓÉ¢MEnÇ©²Ç²9V¤¶˜*-ãëà\°Ý¸W(’Xùè£Þås·‘O’´ƒ ä‰sWÖí5ºMºÏg¾²è«’dÏù)ù¼l„ç !u¦_ö3¾gÙÞÊ™ˆhÄëSGÏ+]cà –·ò Én=åµì>Îí†å)é|7úý¯a°õ‹Ù?;óª’r±¦¾Ittñ–a ìœì0<­‰ºVnHÔ÷tL¼‚§Äó10y=E^ÜæÂ*éKÍ¥ôƒe¢áߎóŒ°ãȼҚC›å™þÚAô¶y\eL­ý[ÈÅíÌ“6‰õ–°õ¢,æXIÇØ’§³|u¾È=}A<ÛĽ4IoSÜó—!ÚÙ.`⥠W¨}M+ R¿Êãe¢  ‹‰„<ò’xí^-[œ)1Óö§nðçÈK×o+.s×ù|[ÛÄrïœÛ¸0ËCí`¢0),s<’1;äv„ ¯TØ0Á׿G®òmRýÿ¼»™'¯·™ÍF܈ 88(f ì1È»«¨÷iÌ£ÍòÌä¹a>ΣÛÙ‹˜RHWÕ(ï[Ü¿Àz'•¬q‹ž^¶^½áKžMÕúÅ ÕN¼û%.Ý{½èkdújH›ñá@@ ?@ðµì+|Á—ôò•äxuã»ÖT¼0ÖSœ àƒ™“|ã-a÷b>ùÓÜú‡¦å댧Þ^H¶m |PÎî‰v°3|’-;Jjùàøuý\UÏðÛhÈbOxåÅÎ=µàجîZWîßÌÆJÝ·Y½‰¬´‡œÅh/FýÙ*·*«¨5µë|!•½øÃ ÎÛé:çˆ3ç·ÈöËXùB~p«±xòüá˜uxZ7¹Yåo©‘èý&`ºù•—%ŸüIaV¹z+Ayó’åÀÞMwÃó-]xšÜ¶úÊ=è‡ü¹`=M¢å[d~æ ªnÏ–4l§²H×wn,_»õŠšríåKÝ8ñ-ø¾¸céJñüÖ¶´¶qä"°´_Y0´÷'¦7¢ât<ïyàÝO/{pè_'Û#ÉxO_£æ%R:ŠcŽÌ'ë*V¦·­1¼=¹[4ò¾´” ” A@±hrŸÏFï·³éC¢ö•Ñ9ó€•MþÒ‡_‹Ô[c•e墪ºF¬k޾l¼¥¢jC$ØaIxŸÕR[.ÇBG8` x9ñpFšÒ“gÐÒæj-޶Í?t†øQtnÜ+œáÑÒž¿åêÙ½Ne1Ï9çLæF9ØÊ¾k/ Q}4/CN>Óã¨õFŽžl.46ó”y )“(m1eZFþù¼LÕ)ö¦«ôàe¾¹‡{³•wˆÆ¹u¾Èç®z¡3›ø˜è-’¦¬¯òŽ‚¿ “I}åyLuœ•¿È¿&vc­%î`Zò; V¬ƒ[÷ã˜wë³8¸g®D[ï.±ÔóÔÅF»™$½ ò¸yéU~×?µ)ž³Ãe±°a‚¯>æù‹Î¹EÚÌg³Xä{Ô’Â*×+–açeK½¢í|Vo3©æÅY ¾lÞÎ$?&ÞzÀݦòí§‰Âù_pÒ^䋳tžx~ ›l wÔó›Ÿâ[u޽àë¦çÚ´ØË0m~N×Û‹îó<\‘_âÞ‹õzÓ•Ë6›iz‚0Y¦tñR±Ó"¤jxîaqÓ}KÅÏW¾,6;‚¯ÝâN_$Fâá·”pL ¾¡ˇZO^ël)¯Ù»Ynõ¸@\¤¼yI¡ØÆ@¸Ý%:ö@IDAT}Â÷T&ÃÅ·œTqs¡XL,Û:h¦Ù»™mçx³hñf,øÊdžÏ<°g´®?šc˜ß3‡ð1˜ÏÁ¢áiÅI6¶ðß2™ G_÷Hemü÷!QǼùshÕ÷I·Uµ¢±¥#aÇÏsžÍ£ù=‰ýù‡ý~6^¼N•VV},¦ÚZ^¥0šóè,êJΣû[ØnA¶õ éå¹@õåο¢ø.*Y䃗­z&ñÉh ìÜuzŽ÷3¼ïõ"¯‘ñû8om!Š‹k@@rF‚¯¨è _Jðõ˜¨}á±ñÍ7E£ôö¥½ÅÅ`õmüÍÝx¢c/øJH)KøÍ‡?)àžäCp›pJ…å2{õcØŸ00•ºqùP3ó Åø†o§å…åoΔօYÝ"J¼Iš/&ã'¤­²N´[é½”âŸÖ‰;HqE‹m­_2Ð_ô¬èöËi<[à·-h;}«°‹ßj[Ìœ†|ãe™áäO³ãir[´'5žºµ¾æ‚yiòüD=¶ó3ëßž£&b –®åRÿÔØ ¾â^¼êŸWx7caŸ‹;VÕ‹inû˜–àËÏuøAC}žy1ZësÁð¤œ_x¼6Á‰º¨…mU˜I½Ñqóv¡?Í1GeP>ðÖÞM˜è=\.ð„`\ØÅC¼¥â*r¿U±¯Ì‚sW½K«mb×4·û bÛŸM̼Nס E?lü1꬞ùc¼œcÔûâf•2ˆÎëlЪÀ÷,¸qC¢`ª•m[©m\§¤Ù¼žf4`<ùÍQããeo'ÚºRíåÅ(Cv͈²|šiFlSYµã¹c¶ò2‰ÒS¤$æù7ÛqQ€§ÑH㪄/fý2…Hñ‹ívecïs¼ER^_ÃòÈÙu'![Æ žÇLÂy‘ètƒå¢=Dzù0_…Õ¢G.Bsïk¶íÚG£>ižü… -¾),¯ñ½4òû9.¼ó_6 iɹòz“Áý¯=ÏžVù‚Xyß K*Dc;[ùÑ÷€l>H³µV¿Õ]Téz± aÁƒr.~½ðó‰õpyy63âõY ½ÀÙn•ý³|uþ^,ôÖ¼¤0ɺe¢+m_þ]_剀¸«›WÛ„bJôº¸Þ‹ßóœ• ~ÒÂ!GlÆDB…÷*oQÛ™àì*±Áõ:¥®l~·+.4Ú¥·fd‚¯ƒrKBß¹íàk|ÛA¿öTƶ$dvd*øâB°…K™—.?ïmZ˜Æìi`ÞÌn^å Ïü0qNkot·¬”\ qUàºDá^·à¾ +^ ˆçâñ¿ÍÊ:íø+# ;Oó—ˆ}ëu}“ö_ŸÀf¬_×ûÞ²¸XªµA{¸Á×>& š'jw™Â,%¤ââ­â׊1UP”ÅEbt³øƒëõ‹çc··•¤Ó™à+—å»·™áþðäB¿Í]tßk†àk˺Øoq¡\¦‚¯bϸÑÙÙûÆ‘ê§Gv 3 ·~±ŽWòJ>®f6vX“a'íüâðß2˜ g³îÁ,KuØZ_#Š ÂÖi½ó…¢¢¶Ñ|i0›y¡7'Uí&äù/+Î!3ÃÏçÑü·Lêy*Fêw^§øü9~\ j /Á–³á•j=ÊuEçÝœ7™¼›-™æu_¯±Y.4N5±ÝÂÖ:Z[Ek{‡èêêI~ÿÂbˇ>¾ÚÂ^Võê—neæØYÛðÒq.dçÃÚŒ=BœÈ¾¢’î¯ÔÖŠZõï·õâ=¶ŽòQ¿‚yþZñGq Ö˜ ¾ÒØ£ÜØE4E¥e¢´´ÔüWV&ŠÙâm˜ m©0c.ACl’Óiöö³ž ñ‰M`Æ'>+ee›eÊJù⼞8Ö³½ä½‰tAQ±ûv‰ýÁ6OÏŸhù«’9±ýÙ]/óø2µŸ³©l²¥jNzÃ<|éó6»çx^-7LC]-¢¶ªB”KO-¢  @Äb1çŸÇ˜{8sÊÝ¥…Ô žO¿¾r;¤‡6[îUÜú-o]î‘™g‘f€bè×ÌùÉ\2áŸÏ'4ûQÒµÇ?› Á—ç™kË΢fÕqÓõ—‹³œ1oñ€}>(ÞLCô•‰à+ C^ýþDõ…^›ðªÉh'þÆãÕÛØš×qÁz%/÷§£9æ8Yå™b¢¦5þx‘»¶ö.Ë%%½- žêØÒC óüÅùfÔogÕ‡°z‘I_™ g)ŽÓ©½öS ŠK¥'“ºF«Hš³±K©ú¬!ÑR/Nʱ¼¸HzûbcHŒÏ?* Í˪¤F‹H†Úk}á_ÌwÃnµɆ›³}•ÇËôúÉÛ1q!ç–Q’Öó1ÀΜÕ.ºçõ‘çQããy°Û!u˜ÌƒF°ß±Dºg£ÔÆ%“6Źe8ÿH™7+%"Ì´-¦L‹5¼^Ȁ锥šci¯EzÞž*ÝѬ_a6ñüxc-?V_¹­™Ô×tÂEg¹Í^>Œ{,*EìA ß²Í(—Q¨O<ÏþŸò­h¯ÞV4vÈzåzzbs›ueîEV‡BÚO#±<"¶gLš_†ºDsc¨ª(EʳqÈ\³ÒÛNšç'¤¯Q)óñÁÏËûf*çâ× ù;?ïÇç‡E^ÜfyhãS$·L ýãá3åÅû5VÏxZ¼e:Þªx¢´]^öþ†•G ?æ¶ÛŽü„ÔE³ ŠE}‡)¹ãöa½EÍßôºg“YÙE+Ó¬_»_òû\Uæ n¼EÜ|ã æ¿[o }oTêc\(ÄÅCtÎ×Å¢[ád<‹n¼Šµg&¦J&Nb"!O<ÄEH‹˜¸L ¤Î«ÏcLHÅ_2=}­-×^¥·>¡çý×®ÔÞ¿˜Ù¾^oÛÊ’Ù)_ž‡/ÎÔ®[p/`%Š{mÕbÕSÁ‹g_ÔÂ1#þ-6¹ç6¿ƒío¿ø„x@–óÂˤ·¯Ïž/bçœíþÓ÷0FÎÎ Ø–”ó¬ÞÉÆXðuñÃb›Eì´m4_<`Ý qõ}¦gKÕ?}ùBqç’Ubí[m‰^¿¤˜ëR¯ÿ–^Álùp¶Šô=‹™Â-% Û¹ëm±lÉâºkJo_óħ/˜'Κsþé1 ®óµøö”NÚ×3¡Ù xòûÞø-½m Ö2|eÒgcY†ëú¼Ÿé1Ì6îòsÜî°9X&xÜöãdc û-dþÄYùsìÖ=ìV&;ÛÕÞ,êj«DYI‘ß_ë:êö?Ò~ÿuþlæ…<ìΣ9Ç‘-_ó>\¿Àªûe¢b¶{‹…4ÏsH=P¡¬÷©æÑ#PWòiÍÛ¯½-|ÝSQòa¤ò ÎV.<\X?ã·gÃäkd¼þ„´# |È9¾F³ú·1O_ÕbG@6悯Á™ONýIÔ½›ÍŸ¶·g¬xyÜ!6ÉÇ€¢ÌOO>pwÙq[ùÄÆK‡O|nüøøä¸€yÿèu•\ ƯSÇêí’&CÅÏÓóíáù“¾ì;U°›/¶ˆÈãËÔþTlœ_žp„¥~Þ£šä“ç5P–­k˜7+{¯^D5l ÄçYÁói¯¯cÄœç=Ãröò’ì3¿Tt’¥ÿ-jºÉb ¾V÷Â割lŸ;6.ñ‘/úi½°]“ù¹^±å½­bõš% Þ¿.]Ú2t_Qòöï÷'ü&;É z2þöxÍ]ëÊ|Þü­Ã¨y‘K™õ§F{òú†äŸi9nV9ïÍ;íaˆ=\–×·Ôè± ¾•÷ U ¸IoFý¶‘çÌú­‘é+“óõòÂ9«-€¸ÐÛ»ÆûTžLšºôƒCΦd¿LgT>kŸ®®ƒÊ Ò³Ñ ¼˜™°‹ØC^þÖ^F‹8FY¥gç&lZW^à·;ÝæÍ…=mòO=—ᱎ"/n³,âò5ާ¾E¤ª£¶­›&<|HYªë¬¼Ò˜Cóv䵕äŸz¼ÚvyYð2ròëü•G ?ÖרÒÍOA¡|©­f}‹^öò;tÓÐ5³Œïd6yz¾=¼^d8öòø´ÉævÚþèe­L³|‚œdùÓ¿Í»c­ãŠ‹‡Òct~À³VÀ³—'c6ùâ!¾•¡ÜêpŸsí&q³;†ÐüûÝsLH|dÂ.bÞÆ6<òužmˆ¬˜Ù¾xu»Å“³3Dðe×-:_¼Å·×ç³{­±Õ£Qç,.[^f¡ñ?¯ã÷½“Ii‹™Xˈß+÷Ó·I¥é1d‚A/ì¼{ãõÈôD6Æ‚¯ r ø ™©mW>¨½gyœôg¡¸så-üâ‚/éá+q[FåEŒ{3…[ O/öë‘NC·s}Î ·{@ »~ä »Hܶ®3îåkï«-SÁ—ß×½oÍ~:›¸ Ó-_xÜ<¿ÑÇK"Æ);¿ø%ì·ù·ËŸã«­Þ$žãë†y]­¢~MU‚÷¯¢ªô½Ýªd­óBž·4˜„•¡ÏÊÍçÈÃèì³²Èj^W$Ö´¨‡cìžIõϱòçNòÒ4ò¬ì´òJ5æqÆ ÝϘõ…ו|›Góö[²Æþ$O± þEÍOÏ^oìåŽ×Ã`¼¶ÊË8¤Íyà;€€@n @ð5ªüûE}µçåë—¢-àâk< ¾J+«Deeeø¿ éáC¾­Ö_Z¹íG71”[ø.›øÆ6!â*,UUIl–ù©¨¬—Z固ê£Z”'¾‰¥&­…ì OÏ·‡ç/Va]H {àÊãËÔþTlÂÒ ?ŸFiò¼²ÉßPk±È+*5uõ¢©¹Y´H¸íí¢ÖßÊi„_cÅœç=Ã4S‘Î/Õä)g“n²˜MÁ‰;v¥W½R}_‡FNðÅ…f{åV<ûiPÁ}bK /_é¾²aÈۿߟð›lÖÆ’ñþf×¼ªÇð*û¸Ê¸§…lòâÅžvÊÛ“ìgGtÌqáoGQ‘Ú’±Co§Óñ¼UIQ=ëD·ˆÁD*jÎ7£~›ç9ã>„-…Ô >&ø7ü<ÍÈœ‡Dks½¨–ÞL ¼qšJñ\W:gSîtËÃûèoªòÛ¡o§|\[ÌãŒÉ:Q#ê›DsK‹hmííÍÚ[—çÅÊøÈ|Ö8{+wˆr_an_ä… ýÌ–wwOnÚÆx%ÆöÏœ[FuJf€—»îGxÎ86þò<²:5>ž»¦­‰eÈmN÷8›zø°üó”9 ß^Î-ãvÌc·ó¸­6¥ß-±N±ü¢Ó)K¹i·IøÊ™Úë‰Ý®ll²…åç2뫲”p‚çѯ7îU|¬Q÷éϗͱÇgÇëŒÅ›’öd™`¦<1’õ©_Ôx}x¬Ìy+¿Þ¸Ê1Ô¹cd¿ÊÕÞ»]zë墪fm ÏkɸÊÞ…yG­”ßÿ’‡O¼>Ê™þÖ5†‡§n…ä'¿m^–ÎC›þ±NòüŽ"¯$ùm¬4·¬n¶”T’𜙕Wõ€·ýLÆÛlÚ./ ¿íòÌp»ý±q™å ÏO¹ëUnhhHð–`Æ©Töñ42aÆIûþ@âéù¼x½Èpìåñej*6Fßc”kcÆyN%ñx$_7W<$®¸?üß½‹ÅªWãÛ7rñÍ¿A,}$I8çOˆÝ{CD^žØ‹‹„äx§ÅC{Īk½­ ÏÏîì}¯jÁŠÞþ ©‚‚¯^ö›Œ{EÓ)ÄÚ*ûb¤[D[ˆa‚¯¾õ÷û÷'\@Å·tä絸‰Ûb÷ðe×-xÜ>)¬ò¼c&<@Ÿÿ+†3·t Ÿq{sÛ%V]Íï·Î7W<.^{õ÷bsÓëb{óVÑöºö’æÛ(K’ÞÀ‚¶-~>¸è ø ™y[1îܵ]¬~z¹¸éû:³¿"|͵{ |íܺÂ(‹³._$~þÜkâśŶnÛÚÄ2_Ô|­ KuøkV8"´Íuº=^÷t›¿Õ㘠¾2\×OÕOg3$öÒæ·?^ÉKRÙ>v˜ñ'~K6¶°ßØü™ÇÁíòïQøø*ûÓÑX—ã6„ËHËY[ñÖà¸}!ùRqZç…i„2æy¹ë¼±²È` Â›uŠÍ“»êý—kœþ·¸Úz¿“νƒJÇÊ‹ÏGm¬9Ï ëJ>Σ9ë°õÅŠÿe“žž½ÞØË%,¯‡~{vŒÍbŒ—±­p8È |j1pÁ׊ñåá‹»f•oYk#,­ ƒ|pļQ©çêO`l"¾SeóX=Ô/*׋ÊRv£A1QÛÛ:Ñâù ˆâ¹Pÿo¥þƒgýÀ5ûS±‘ôôÃã&#ì¼¶6ôˆç•Mþ8—‚²ø›ÜÁ8Ö”xoéü6²øxXžOËí+æY¤Éóc;ŽÎÏl#>["–sÙ¤k‰Î?¥è3^¶HÀ®·µ+.³vÌ"æ‡ÉúÓÑs<›Æ–5¾ˆ«È{cлVõÑrÑ"¾xR#·ô<‘(Aœûv¡{mä~;«>$u½°•©\ÉÑ Fhlïïjõµ•:^É-VºÆ™7ð:¶hûšR¿oðû,ÎFnKVÛp‘ªØ3/^~8¿ü¤¿¡:æ=ª²Y¨í½‡‰åÍÚG€[]YŸ~u«”V°‡òAû#×)i;/wÝðL±ºÃçœ9ëk¢Æg”½u›iåI¯ÄgdÀ-Nû˜ç!ãzø°üó´9 ß^žf†ó·õ˜Çb—¬-òëìÇ,ÿ¼^È‹ý­÷dÛ÷Œgn›íÍÛíi鳜i&õ5›xÝôÒäç2ê«tVBxýzã^ÍÓÍtœåa½|‹ú²¼JkES­îc•·âu® 7Ô`÷‡ìꓼөõÚ·ôà%_ô¨(ˆ©úÍní9Sm7Ùζx­qÞ^÷ iÔ4X;HÆ5òýD*(ÎïqïÍÍé½ùÍË©J šŒñÄ.FSÉðüùÛq¦Ñ'´³±Ï¯ø‚õpTyq›úÈ- ”õÕ©ŸÁ÷DzáÅï}YÝqŠÑý_Ôñ–—k¦m——-/#mWx¬¯±q»*¼7æì—†žMe_Tf¡ &»?Ì<¹XÒzå¥4þ×[²|ñ-¥0h žRó-~]‰§Òs¥sçJ¶w.ÚÇ„H×/ÿ½X{ëùîüð뢡ÓK› ©_r;ÄÕÚ{UaÅz¡¶sôæý ù½™fG˜à«ÅÇT\”ÅÏkFÌÎ_†·1ÆooÉù vîûä¿>öoßî6ÑÇDv\¤÷@È–ŽÜv'~ÎAn˸ªy—ÉIÙÆ¼§q›|_NßMâæå/‰ OÝà3'™÷—¥xOs6qÓ\wmÀv1O[Æyå…+É¿Þ>±qãkâÞ™ëÌÎv‰\ðê5l»¸Î³GÎíÖvÆÓzñÁ~|úögE«Å½=£§mm·±x_ìË®qóM Ä‹{užFSð•Í83æc˜7ä„Wò|*›ŒyXà>ŒEo9L6_`¿…̸]þÜИw𳠙Ǯ|¼Ý¾,iæQŽõ¾àµÈ4öåÇ<šsÝyy×ß\í·w5ÞV¬3ù©oÙðJ56âά®ð¹]¾Ì£+uœ®à+›|ð°asöžÆJ¿Œ½6j†Óu‚×CïZ§Bð9s¦kd["–sÙ¤k‰Î?|‘WíH&®ú ^»—7®åS Äœ4–jQÙY²ý{"°ÐÏÖiÁWÁƒ#âá+†<¬néۄ:ä€Ç«´šók¼-ù¹ÌÚ±Š;Óþ” ¬FzÌaY]ã{Œ‰’Òà¶ìByèo÷+e%úæ¿ÚÜË#÷ÛYõ!©ë…µ¯Ìrlïïé]=!c~G/ #wAŽ‹2ŠB¹8¾!Q[â‰Õ"UÜ»œ-ø‹{R˜æ¬ˆš«tùExÎeCÍ¢Ø}A…er{-Ï“ˆ¹%'‹2Éaöõ³‡y2+ªªëØ«5­&ÓÈuJ怗»îGxÖXÝác~Èx5>£ì«™·ß.beïÿá «zøŒÑü#eCÊD…Ë´-¦L‹/èòz!šÂ¼m»˜DéÑ)=)LôúšM|lóÚˆQ_3é«Rƒ5Ú¤ßǹá¸-™Ž³<¬—Cð%ëq¼ï”oõ–è~VmsÔÔŒ|}’d¢ÜÒÊ ¿Oç èõîØ*ûhýrM©©Ø_H;à}S«¬Yú%—LÚ3KÖzhÜ¿èmެ׺'ùCK§œäØTâM²­…8¿¾G4ymiÛ¢8 96Úž•­++ð øõBÚ’^Š·ÙZ­¢Ì J=T.5<^Šlx¥Q¢Ž·¼ýeÚvyYð2r«Œ*-]ý±¾Æ~Äí²ÇmÇϦ²/*³x™ÞÙë-Y ¾zÙ¶ˆRÌcŠo¸G‰‰LQ×v&Ü™wdzL´ÃÃIO\Rt”‰Œ‹„ ñ·Uz‹Š¹}dìÆ•,m&¤²¾î]/z}ëü[ÄÒ;¼íÏkw˜vs;ˆyÉÒâ¤nñ²/:#Á…]\4ÅÏë°ÌNCðõ¿o^°t=Ë—g[›xx¾'¬1q:nïÚÄO.øò¶æ †ã×8[:rïa’CŸya7?r•owaÎq±˜,xXé1Ì÷Ö&ó"·×ÜíÇ9~_÷6ìKkíZ+>íÕ/CØ•Žà«OliëÔ[6DX+oŸç3®Ø(ÓîlÐkT‘•'ÌÚ¹u•F­'Û_÷6ô%æƒoÏ(ã^Ë\^ÜxRo?yÝ’¥þºÜY·¯5âMÁW6ãÌèŽa|´L<ƒSÙ}ÜO6_`¿Yç_asÃì×=ÉÄÏ4Uyë1òÁò{J˜yVÛº;Ò–læ…|N:‚óèÑ+ß9cÔ¾F¿ä¨D_%µrwþ— />µÖ¡èu…·•|™Góõ…‚2ÛóDù¢JI‘(,.Å%ÎsÊlòÁƯÓëuhÛ:=ŸëózhÜËzym•·kà• Ç  ù@‚¯ˆ¥°ã¥eÂÛ’ñ?~ùGûÃȪõ5+E@ïåÿÅ>1à|b\Q'ùÂXhOyÏ ŠÊ;Ñv†Oä„´(Á³Š|FÀ<~P±Úz+þÇ'0Ö|óNòÆ·.øDCEÓ¾Æ]D*åîd¸¹Ú{ D˜²ž? ò<ØË1—ù+µìýÍÅc\ð%7N×Ì3°_e+%>Y7¹½všŠßúÇË’MþL.ÁÇýbMi[  Qå (˜-,>ž6ϧžÄ²pcÆ<‹4y†,ÇÑù™õÀ*‚°¤çÊ&]/Û§\µí\)Î’eã½i»°ºÁ.È:°U”/Ð×QìnñfP¶¿Mü®¡^S‰ôƒ RÆÆÇ‹XY%~û)Î4“ú%]øE¶‰Ûê¥Éí°ÕWuïÀû]þö|ñ³<îà¼Ì´%6|œUñ›aÝ^ÄVgÔņ‡Kþ¢ò¨Õ'•h{@È£ú=SàÔżg:ã¬lC±Ò@ý ÉS2®rôÑ‚™ŒÚ³²;ÙŸ)T¥¢JÑîݤZ‚õ4×°zª¶ŽTü>ÐÛFÛ.û²"wÜ")‚÷ïg% Á^½L[¶ ý»º§Õ£KnxÉ\…”Ÿ‘_¹- ·›ŠªŒq12¯4êAÔ9œÙþ2k»¼,xi&¬þ²qUÿ~dÚ¥Ë?’‡ãõ×CcÍ!›5²d÷qý¢I­×É-^ëtHá  9$ÁWDøÃÝoŠÇ|ï]ҋ׊ߊæ¶÷Ä| Þk{[¼ôK&“×½Ò–8øy‚±(&„ ð‰q±€ 'ù|û#5/*¯­]Ò3ÖÜÊ¢½YT—é·3ÔÛ¸‰¦xgø„AÆ«â.«©—^CúE¿h­¯2Çý·šex>á/jùDCè­UÜE¢¶±UôH›•ëàæuÕl]½ý‡¼¿¹JßHȉ]å¹µˆÌ«²§§KNbÖT0›äÝîúiX9èmL” 1QY×,ºT\-¢Ö÷2Ï»!øŠh¿Êj6¬.7‘æÃ‹2¹ýKG{«hIÇÇ2/KV¿šÙ›;TP&ê[»–-õ¢¢˜ypË¿¤ÚÛ"ÙÈâÓåkæ“?pËóèiò%GçgòQì[ÛEks‹è >JLVd“®%:ÿ”'¶âÛ4ªvÖ‚‰%kêÄ+o½%^iX'–,½]¿9éÖŸ¾•èÝ«¥á>¿½šž¼v‰r+ØxûútñÝâñ—¥0lÇv±açvQÿVƒ¨Yõ ¸Ò¯¸é<ü–Ží:Ô)îð¿@¬v·‡LGð• C{’ºMø Cx¼Š;o“ý]­¢š/¤ÄÊ}ÏQóµ?µ1‡sáo ºeO%µ¾¨˜_j.4ÆëSƒh'@´qGÞ‡¤®|Là}e4Î,=É­ ´J4¶´KŸrÜ–3;Z¾ÝH?-Ú“‰|ðR\)šÛÕxÐ#ZkñXÕMßNËŠ|W-çNZ¢±–ÇÞ8Z"š,žÇLošñkËÖÙ”àFÉ[¿DãfFÅÝÄ;mQ湤&ð¦$zâånŸ'ñ²ÔFÃÊGŽO´˜e_TáÔ™®ŽV±®šo1/¿ìü÷ˆ ¿މt·YÕÆeÌæfýHøfc1;3j‹ ±N$› JO|Å^[“Ÿ¥r^×áÌëú{:D} <=Ñp ë×èõ+ºM|LÔm$b_eÍ•y’ç18/‹:Ϊ¬ù°Ö™¸=ý-5þÜIõ?åN_8Zõ)žæºò#Må]Ì ‘x‹Ûïü?$OɸÊÙð( ¾dÌlkx?._ ªªuÄ©ííí¢½µE4Õ׉Ê2í…Ò¹®H?¨j5ËÂãÜûàŽ–u¢´€µ·b>G1ÛiAIµ\`W÷«rL­¯IS¹X?W¼ÂÆVÂÎaO`[µ½‹wë’ ¯*ï¾ ¤_ºvMÛåe¡û N„Õ_ãž_c?¶ö öKCϦ¶/Ú%êýAXž¢Ï¡£Ù¯€¥fVvfÛMw½Å&øšwíb±bé±<äßÒG–ˆ ;â»ø¶†ªZpÇbûNé•kïѹu½X~«çKõ97ˆí¾ðix–{j’¢U¯nûd¸ÁÎíbóóKÄ_¼$qýS›Ò'1‘PPðup«' ‹ ÐEQ©_J äÙä}.z~«Å6Ó›Ö¼k—ˆ·wÈ-;ÛÄÛ/>näMÅ÷HäÂ-.óDR{™ÌÃ×Á^S»l±hhj;6‰——ò­ã\øÄX:½¸ Ë|É8>{‹x­y{|È›ÄòkµøÎY÷¼Õù{#¯7/]+:Õ¶‘»·Š†§³õO¯¬¿+6ìv½Á±²4_Òξ¦ÇrXì”A~ ¾¶Õ?Ìlž'*Ö½-¶ííÛäÚþÏïÖÛ$:õÊØf‘‰³ !X|ëÃÖKY¼…âÞ§ÄÆ]ûD«Š{×nñâÓ°—"ç‰Õ»âáVj¡˜ZO¾÷¹Íb‹kϲ =rœð<|½²„ÙzÁ"±zk§“Öæ·^w^“¸[¼lC‚¸m÷À ÐÛ>ºe?w±ØðL6ª‚¯Q]>„œîaãUô±#UŠÉÆ6…̸]ü^|$Ö=ì–w‰Jo^æŽ!Åå¢vŒÈuk5ninuµ•¢Ø_ ˆ×Aîe?›y!O¤æÑœcnæu=¢šß«Ë—EÖ°7R²á•jµ®äç<ºßÜj>V"Ö4Éç‰r—uŸÅëdAEÜC]6ùàý…3¶H×Þ³³þ®QÅ×éI{Pçáx}ãõÐXsèi2î3Z[ ¹Wí»§±ÂßÒòØgïp@@`„ @ð•Ð÷Wû^º<ñ–íó—õ;¬©x×ZLq2l€O fNòEv÷b>)à“|õsK­éÖ[8 ~V5ÙbN´Æ9ãMø`œñ ë¶×ŠÛÊ'6FJý-¢¬À[”HòYÄß–Ûø[}% #oJŠ*ýäÂË¡]”§cƒŒÏyÛ¿ÐÉþô õÍ|ޥɽ—ùå <”ñsÍŒ7XYñóNƒL‹Em­éÝC¥[Õ¼Ëx@c«U¼˜õuì™+ï‘Ë™aL8ŒÌOªl_Æ[ò.¾…NBzÞ‰lÒõâ°|z‚/%¤z|óªe­º®ÜñÂV«‡.îÉ뢟֛×ìKÜT ãðës’´nZµÑŒCÚ©…cg$ø’w=VþÚŽ°ºßcxxhikäÆ)kûáQÅß‹œ—=‘úSeô¨Œ9 6&º <á¯q™ó¥KTêRƒh/PÄ~;zÂò!ðlõ"¼¯ŒÆ¹¿¥Ö²ðokk¦  ''ÝÃò>Ý&Žâa‹+kEE`ÁÐÛJÒ+92ê1Å)o‹G}qÊ£lë§ y ÀˆuŠ—»}žÄ†Ù\€·wV§"Ç'3ãyÔã寋Šõí¼ìU¹ñùŠÍ£”ÁŠ}‰^oX]aùgQzM{Ç`.ÀlŠÚy^lÇֱ› Ê…B‹ÔñC•mIM³-êÐsÙÔ/Y ‘lâùäm$j_š9ï‡dó2Þî¬\“ÍtûñóÁãcuÆ3…oU¡î?Öu ‰ÑªO*M߃W,Þç™íF]Ñá³q/r¬OR?«¿°<%ãÊû~ 'Ú¦J‘:Ñ.'åÐÿ¥;øý|£9ðîWSu@f+ÿX©3›f´r/ض0ìœ1gÉ/žnHYx9 æ­Ø!H #ñJݯ;iGoy½dÌý2—oêÛïu{Œ±Äo»çÓù=»q™åKøÚ„åâS©ûe0 3é›ë-¹¯7Ɔ”…Mð¥ëX .V¿¸Ý9½ýÔ-~_—,ìÒõ:Œ#&ê|],úlx~\—=$:Sˆ‘|qó¬•(hâB))N{„mèÄÏDZÒ×=M3²yïrmݾ*Qdå牱Tçâ‚¥¸°*Á—Þšñ âµÝž‡­n±ûyÓ‹W0½Wke‰|t<>OÆ}C…Œ7ø}髺¬R„[Xñ„x€m5éÄuÙ±o÷KzÍÃRo/ÿ.«w_/ïè ©åñÓ‡ä‡ç½ÊøäÛJAÕ–€èȸvÀ_Ù®ÝÖ …]Ý×ÀÒÜ.® ”{›ÿý.~J•fŸXö#ï¾/y{ºôAnO›¸í‚ä×ûöÈùÜêθPÌÜÒ~¡X¶r1+›ø5ÎV’Œ-ç¤Ò¹rÙÛŒU<­‘|ñ{>c¼‹4Τ³..+[ĸ“VbùcØœz\ÍfÜ×÷~pÆ–Ôs nWp.œî\7£gA `ºìY{,«M¼¿Œ6/”/\ŽÂ<šsÌÙ¼n(¸EºôÅî!¢ñJ]‡T‘Fª+y:Nk}Aî\àïúE>xá·]Vïù93ê¿çbñ¨gA‘×Èxþ÷q¼ÞûU/ð  |eÉýƒ¶7EmõcVá×cÕµbãŽîв|5³EOo{A{Br‚VäÞèUÉåïÄ¿~öFm‘e{Åž–:QZh¿IUocÔ·ÚbMLÇ?#'!þ6r+ŒFõF²EüUTZ°MFO“öÄ•*ßuU¥ö‡Ó1ù&¶ô’hu¿ôRP. -¶¨‰V¬ XTÕ™ž8x9TñÙ´ÊìP»¨.µÝ|‰ù–@]™÷[©ž,úzD¦ö§fÓÏÞú¸‹íoeÁç!{Úû&ªÎ(·ÉâLû[ëDIAâ"ƒª3Žƒ•.QU\`,6T6IÁW6õuŒ™;,²JÓ i|‰Æ/^¶®äíE'Mº:óhw`KÆ +Å÷„ ¿. Ë—‰WÞï ˆ°üï;6.ñëÍ¥Km[C°L, MCÖËX<ß±-!¹0í§þ¶’—‹ç÷ÇÓî9äù0óü•¡½?I݇Ó~×x‹Ä:齯¦”{gôÚ¨ô†Øœ(ŠšÙ9dÜŸzvø˜ãEì~j*ïl«¤ÀuêkcgUde/ϼßvâˆÔ‡¤®£1¶÷·×‹r&Òá‹êíãâ²*ÑÂRG}µ~(ÀŠÊ¤çнUšéíJò¬ÔÛ-ë´ä.=Qª¿®FÓ#(YÆ-¾5§ö<æá#»úi¾Õ ó.çÛ•yŠ<Ï#Ççæ¡]–}q;‡tçW±Â9’žÞZªý¾¼¨Š/äÊ·T½¹@È‚>¢„ƒ¨õ&Ë6©'ož)uQÔ¶h&ø–j.Ø/=B½¹í9VX*ÖXÆ@ _³­_"‚Mö±6nZ´¾*![ '’ÍË¢Ž³Ö|$©3q£ä›Ë%úžÎóZ9*õI%(‰ý{>YWŒEi—Rc…w?$Çä"˽j’<…sͲ=»¶%ûèïÞ®ËKŒ­>õ8Ÿ[•ˆêº& š`|­NÿèÍÃøgL”TÖYÅÜÊ#UcÀ«ž—n©HõÈ-½-XK]OÖ^º9á%=/ê{EKùzƹŸõƼ+fx(ÈœWêz “Ï|¼Úv³î÷´Ñ GÍUZH˜°6‘pµýDjû¼p™3‹r`íë<²{3·?5›^o98ä·6?r•?_òÚ{²Os+Än±¯©VÜ<ßõœÅæá*ŽyW/’ž Ú|˜)&jk¹ÁïSŒ4Ï‘[9JPÁmÍð‘’ô(µÐM?QÐ%Q«=qÚù–m$¥˜ë2·ŸT‚#&vâiê8øv‚;œ°{DƒÅ³–ÊãÍK/öIoa^_z3ó`¶oýC~Y9ÇíØ%–_íõçW‰ Þ6™®½m/. ?ëy1‹_›ÿ]±B îúšôÇ‚GÖ‡”‰-/ÝB ¬¾.^ÞºI¬¸‘{oó쑞Ú^×b¯¸½²Œ+¸8Ë»V–ïòø¶’¯>ä³pêÀü‡Ä¾Îõ~Yª­Ëc—XÁ¼ÄÅ~ø´×jC?Mñ–+`Ú»Y\éÕÙ‹—ŠmL””x½_]îÚ¹ýÚÖËýò»t‰éÝjgÛk⺋½ü³Ï nkwuêíçÞ,þÐëÚ§Df)ÒÜ=Ð'V/[,. l‘èµ§³.X(*žKTí–Þâþ›#yæ.?oØ.VÞîýÆí9(Z·®Å±Ø§¯Y,Ö¶)»;EÅ5æÖŽñ­$½<©Ï6q“oïôþ-õh4Ö‹’XÊ~êÍuÕ¢¤¨Ào^{ð?ås›’òjÑ”d«¸Ìç…Ê„‘ŸGfùf4¯ëXgÜwy÷yøÌy¥®C^ÜQÖÈòqíä§Gzײ®™“(.¯IxN5\¸U)½ÜÕ»(¹cP¬HT¶> ëg”íÉîõ"­­&¹ïgÏgmÏ’½ºO±%0R‚¯ Êl91Ëøï®åƒN˜MÍ8l>88ÔGûû†èÀÁƒ4iÒQ4eæ š9eRR}ôQç÷âb¹ :þz»ß¥®®a¢)D“'O§£›C³¦MÎÜò×éÊéMËUÈ‚Jêyñ_h–<ìݳ‡ä–M*rš}ÜI4'JÜAk†{éÝw»HZíÄ;}úÑ4gÎ,Jeõ@o/õ|ðõ;y~ôlš3kZ0ö´¾Hní’Û”)“i²LÿäUnÓü‹hš±.¦î==4e:ÑÐК§@Ö¯Ýï¾CýSfÓ”¡~š|´,×Y&ýá^4yÚ,‰"WFä‚yViZÉÅOFæ7ÐMÝò± É2q[œ®%/ï‹!¢C‰¿ ÐûÝ4E_úé&'!¹Õ}õc攆ÖK"q³Æ”ÆÉˆu*˜Çì’áx©>gš;Øw¿r/wÁ¿:6HQ2ýKŒÏºégŸ;Ž®©ê{jé<þS:VgUoÒIÀ~͘·ãHmÑn{ülsA™fwwõô;ˆœÛ—ÙÜ6YòQQ›"öU©lO1/ËfœM•tÚ¿x}J;åè¦à=âtCÊ1¨»‡úåx8$;8yç(ï÷¦Óq)ÇDÿ@o7u} ÆSÙ¦døãN–ãcª¡J–ÕžŽ.ÿ^õ¸“ä<.U•dÎyé|G=ŠÄ+ÝÄ"Œ·yÑvÓÍßh\™2#êý- Y½í·Ù‘ú\c,D.±Ú¿ŸÉê¸wïn¶ž7ŽžslzkŠÑ®½lMmÍ96õšZVÆF I\ûL£ ’ÝëÉߢ¯­¦‘6.È9¨z«+VÐgœA3gΤ‰'Ò/øŠR’ãMð%Ö0!‚/ëµ8  0î ôÓAÚ'ÔC¬ñû7‰&ЉŽ¿€å pØò8M?ëÛñœVQOíUŽÀüD1öY~‡¿çª»žê?ø ÕÕ^G'V ÐãWN§oÇ׸Hzþ‘‹\sü+†ß}š>õÑ/ѦXµ7ÝF'û¿à@@@Ž bp?‰áGFf³ÌåÀÛOÐÌO]eþC´ï©+ògÞ?¼“–ýd)Õ·ü‰þÐs1­}êŸæÅ˾óºúqóxu;]÷Éc³$’?Á•ØK‰¾’ýõôÁp(¾’yDüÖK¿úö1ô½'ã™­hØGߘkЧJ¥×±SÆJíuD@G&AŽ0¦àË\ ;ÂP »  #H‚¯„™iT|IbÌÃW¦üp=€Àø!Ð-½| Ú¼|“,'½{•w¯q’-˜ ‡)az÷õ´à¯ÐKn=H¦YÏ›l½C7L8•~êÚST±†î/þ<(]Ð ì¡ý}ázWíE%Ô2ôæ¿]>@+¥ìkòç‚ÊFzñ_>•7¹‚!    0f”—¯þ¹™›Å[ö˜‘ï Éyÿ†UTtþBzÙ5uDu&ôuÝCz   p8سmmÛ#½ u|Êô±gŽÙgy¦=ï´ÒîÎ}4å˜)´÷Ý>šyòitÖi'æ÷…qæ‚€€€ÀK`|Îû1/>b+l¾f|`mzkõ9kô'Óg~,oE“ùŠv€@&öl£ ÛöÈ GÑiŸü¼Úgׂ€„€à+Íèÿpä ¾FŸ-RÑ_9,U¾rIƒ€€€€€€€€€€€€€€€€À8$ÁW ‚¯ÂGÒ                 0 @ð•ÃBƒà+‡ð‘4€€€€€€€€€€€€€€€€ŒCy#ø*½bÊ8Ä—É?ÿùϾóïdBƒ€€€€€€€€€€€€€€€€îybÈÉ狦f”ß+VÐgœA3gΤ‰'Ò!ÿ2ŠÁ½ØSœ}oþþ(ÁÇu˜ššÇþ¯}íkã:0@@@@@@@@@@@@@@@@@`l<¼z†“_cÃÛH‚/¾€€€€€€€€€€€€€€€€€¤ ÁW @£ù3_£Iqƒ€€€€€€€€€€€€€€€€ÀáG‚¯–)_9„¤A@@@@@@@@@@@@@@@@`€à+‡…ÁWá#i‡ øÊa¡Að•CøH@@@@@@@@@@@@@@@@Æ!¾rXh|å>’7 &@IDATqH‚¯_9„¤A@@@@@@@@@@@@@@@@`€à+‡…ÁWá#i‡ øÊa¡Að•CøH@@@@@@@@@@@@@@@@Æ!¾rXh|å>’qH‚¯_9„¤A@@@@@@@@@@@@@@@@`€à+‡…ÁWá#i‡ øÊa¡Að•CøH@@@@@@@@@@@@@@@@Æ!¾rXh|å>’qH‚¯_9„¤A@@@@@@@@@@@@@@@@`€à+‡…ÁWá#i‡ øÊa¡Að•CøH@@@@@@@@@@@@@@@@Æ!¾rXh|å>’qH‚¯_9„¤A@@@@@@@@@@@@@@@@`€à+‡…–/‚¯þ¡´eÏNjîØé|îéû ‡TߤŸ1›Î:ñÏèÌ?Jgt Í8jêá›Yä,ï ÉöÞN[Üv¿»woÞÛ< ³›A@@@@@@@@@@@@@òˆ_9,Œ||íîÙK·=_MRì1kÖlš9çXš: ‚„Ѩ¨·{/õõöМ³èÎ ÐG9~4’Bœ ”@w¯l÷OPÛÞ=4sæ,§ÝO›>#iüÀÐA§Ý÷ö|àˆ½}þr:íøG‹ ¡@@@@@@@@@@@@@@@@ˆ*øZ¼x1zê©4mÚ4š8q"Mò/ Ñ»–:Á¾7”àã:L>¾î{eÕ·m¥ÏÌŸO'ýÙŸkžãÅøÎ]ïÒ«¿ù {Ò©tËßm¼˜ ;#®ÿ-=·uwÑEôÑO|â0ÊYþfeoçzåé§éÍ>žîùÇo毡° @@@@@@@@@@@@@@ ï @ð•Ã"ÊÁ×»œ:& SÁW. ¦¶gVQë®AšõWŸ§Oþ݇¿×¯ïÓ†»¢¦·‰Î-½žbg““Œ¼òÌ34«ïýdþ·s’>=² ,~é—ÔÜ»‡þáò+@Úó&ýé׉N8›>uɹ4%áŠñx"?ÚýúµÏÓÀ»ôè%ßa3€€€€€€€€€€€€€€@žˆ*øZ±bqÆr7°™ððµ,ó[ðÕG¯~þzêe¢Óïù ]÷ùQ³9¶áÞ§ë^¥Î)Ÿ¤¿ùÜ© iÚö,]¦+¶øâOè'¿ú*MM¸jôO@ð5úŒ‘B8d‚¯Á7ªè‡ÿ{‘ |ÝØý úø¬ðxòé—ÞmoЖºwèãW|‰NØœ/킯|ª1°@@@@@@@@@@@@@Æ/¾rXvù.øZÉ9´ü¢Øý¿¡âïÁ—/V™ûoTþÆ·iF°|»ÿDžô5Ú$ÏÿíC¿¡oç&_| ßÇ’@RÁ×›ÕôÃs,͹nê^B§ÄScigúiõÑKçžC¿|“èKÜHŸ?7à¹/OÚ=_é—(®'UðõÔSOÁÃW8Öô~9_ƒ{Þ£½ïí¡þ>¢£Ž™MÇ~üTš1- }ô^óÿPÿ¢IGM§Yþó‘chb È¡>Úß½—öM™LS¦KÇœ8Ó¸êüic•ž/½Í-¥;ÿôÏ4{xÒ$š2m²í¡Þ÷i_Ïdš#Ó±ý¥Ÿ‡a±O›êØ{¨û=Ú³Cæ]æEåýø??•¦êd¤ ø2pàËiÁWúmÆÍè¶{– ŸöÑ«_ÿkzJ T翸žþñüã¶I“§ªîÂùˇvÁ—[þøÈŠ_YáË.ða%øêÝF/\{-Õ>±%Ê…?ÿ5]ü­sD\ï>ótÏ%÷$\Ot•öÜM'K¡XïÏÒoïøOzé™?$^÷ÅPéc×ÑÉsˆ†¶¬¤Ä~˜xsæB¹5Ýwk:¹U¥ô\¦„!Eol¦¿›ËDcæaÐõ„ô¥çŸ£½ùŸôàž¤oyŒb§±4Ü+ ø  Â×1%0b‚¯ ÛŒÊäH¶{¢>jøÖ9´,Øô\š§Kï„×9Þ ó£ÝCð5¦Õ‰€€€€€€€€€€€€€ÀaK‚¯ía#øn¥§§Ï£µËy_¡‚¿"zûg¿¦wÝs±û-·…<×»‚ÞûÅ-tç•Z¥ñ· ¯&ÚýýÉv]MeC·“ÔqQ÷3etû%KÝpgÒé_<…hûZÚ*·nsþ®x˜*–ýÜR+_×»'ƒ¦àËÛªòR¹õ[·õ[„ää£6Ýz =Z®¼’]H7Iïb§Ì’‡ì‚/‡cN`$_·™Ql÷DïKÏ}ñ-/}µ‘ þîR[¼M–m_}æG»‡àK•þ@@@@@@@@@@@@@@²%ÁW¶³x¾ôVi´PzÛzøŸÌ­÷¼F÷œ|…ãéë3O½L—]rª!”úÖ–ú›Ó<1V0·­¤ïŸ©¶päÞ»˜ë‹wÑO~µ€¦&Di~dž­|}EŠº0E]ݯÑÏNº‚¶ÊëŠ6É­#Ï4·u„à+¡`pb d/øÊ¼ÍèöB4ÒíÞtm–žûÌöfþîyöË<ªˆt>2o÷|a%GR              p€à+‡…{x¾Þ£çÎý;Z-·XœÿüzúÇÏ}(@T‹*b÷ÿFnë8—ö½ø3ºõî'šûºóëè˜@ˆà×ÁwÞ  +^¡ÿ³ÞßÝKÓfŸHÔóºÜþq‹¼4Dð5O ¾^HWð•y”¾ðã‹?‘ⲯšâ²éÅlvÜ‹™±u¤›9¾\øÈ ì_™·™Ñl÷vAGkzfžc6í‚/^&8ˆJ ªàë¿øqÆ4cÆ léþa!øn¥§§Ï£µÂüéÏw·bô¡h¡…'øj{p!Ýû"Ô —˜:Ÿ¹—]ò°>< ˆÆ|1F&‚¯yPf$M ‚¯`Iá{ÈZð¡ÍŒf»$øŠU„Ù´{¾ò¨ÀÇ øÊaá‚/z^¾j¥‡¯¿}è9úfñ™¢ÚÃ×éÒÃ×uÊÃ×óÒÃ×|éáKz纩g 2-ÄûÚû=:ç+´I~?ýºŸÐ7~x!wâLš$¿÷üá1ºõs÷$ˆÆ’Š1œxµM{ÞÊ<*ª¤iAðåÐÆÿò“@Ö‚¯ºý’¥Îo±{–QÑçÅE_½Ûè…oþª}Fýt!ÝØ½„>>Kö¾)=w]ìxî":®yã!úäÜøVC{¶ÑÆgwÒÙßšG“Þ¬¦žûc'Þ‚ÿú ^6—¦ ÷Ñ»¿[AËæ/¢wÕ/m!µ¨ä+tcÇôñ9Dûw½OS>r®ÃŒÁW2È'ßók*ýáÉôÂçå¶Ž/{WžI±/K›žùƒw‚>ó_utÙe§ùßÛ½î½ö×þwš{ÅŽßK›^Þâœs¼ôœÙI¿œ>^ÒWYŽ® Òž»édw[È¡-+鱺×I§ÏÝB[åv“6¯>úœº\në˜a’ ¾˜¨ÍL'nÚ+ÏjøÞ7hÙ’¸p,í™ô¥ÕÑçÿá£ò«öôó?n¤óÏ=F§œa|ÁWÀËX<ÂvzîÜÏÐê7Ϥâmµû˜ò2¤ÿ øÒ,p4ö²|}…nê~€N™–/í^zò{s%ý빞Ø3ÎôdÙ—,|ìŸé„ÉùÑî!øûºŽA@@@@@@@@@@@@@àp$ÁWK5¿_Á¨mÔ:hÊqÓh¨‡höGŽ¡‰É¢¤Þ=4°˜&͘F3æOS§MN1ÔÛG$O’¾zôïÃthx2ML¸|˜zßyŸ&¦kC0µLó ŸÆw¾Ò€„KF@2ÁW¤D3m3£Òî¥å½ïSwÿdš:<@‡fO³f%táÙË4á1…þÁW(ü              l_§Ÿ~:¶tÌ€uÂ¥‡¥à+!—8a#Á— Î|•áã<¾ÆyÂ|È|å° òAðuûóOÐÿôwÓEW, ‰“úâÊ!©Ã+i!­}êôá‰Ó¨ü ß:¼2‡ÜŒ ÿþò¯¨±ãú§o~“&MÎÀ Ö¸È]þùâ¯~ESú¨òËÿ’¿FÂ2¼'ÁW‹(_xç¿iñ‹+iöœãè¤?û(sü 4mÆŒR9|“ìï§½ïwRg{»ü|Ÿnüì—é‚Oœsøf9Ë[›v·ÒíÏWÓÌ£¡“Nù3§ÝOŸ93oíφpÚýû»vQWGÿÝE4ÿÌ¿ÏY‚í              9&ÁW _*û ;[hÍÛ´ñÝ4tp8‡Dÿ¤'OšDùáÓEgœKç}ì/ÿ #‡yK@‰¾~³¥ÞhßFƒÃCykçá`Ø$é=ñì}Œ.üó¿¢yŸ˜{8d yÈ!¨‚¯'žx‚N?ýtš)¨'ÈmêD”|ܵ|Ð ö½ùû£×aòEðåAýñ³èy>’»‰þbã:úcÛVšûáSé´ã>LŸ8îCô‰ã?Ls¦ÏJ/\ W‡‡/^­Ý{è½~Û/8-F_9ç<š:y Õ¾µžžûï×éÔcO”íý#ôñ9'Ê'Ñ)òûQ“&çU~` €€€€€€€€€€€€€€Œ¾FŠd„xòUð¥V‡Ä!RH¥ÄTêSýç:D$çS^çËsCü7ùý ü>¬>åuF8/¼û»s:2Žƒiouõ÷P×þ^êîï¥c¦Í"®ÓŸKQ‡r~ÂGèè©3 ê*ÌÖÎw©åý]Î?% >@ÇϘMÇÉês¶ 3eâDš4qMv?'ÉOu<Ù97Iþ&'¸Ÿ“äuÌë½kãáÜëT\2ÌdyýÄ œHþç«O÷»a4¾€@ލv.7É–ÚÖU»·áø§ÓÖå¹C^»vÚ¬þM]ËÛºï ¼ßÌðñß>Ø/ÛzŸlûªÍ÷ÑàÁ!:å˜èIñ¦q}\‰8å¿S¦Ä¤0ìºv;‚0%ýùo§ÜîqÚ䣤às¦#ú™*.˜2ÅQq„)ˆPáÔµZtå}—ŸRH1EЦޖ/O¨uœôÒ¥¼ùDùÛ?4(EcqNJ<Ö3¸ßžrò¬,ZÐçä|—Â3G¼",е)áš/PãáeÅX ãq\@H£„5êoŠ+,SùTôçäø÷„så5ú7ÅB XŽŸq4/·²;A ÙæÈïJt‚¿Ãƒ€ª)ª®vË:Û%Ûµ'|Ü'EQ^Û·_Y7•˜’·sY'½ïêÝÎãÇÎ9§ž"%>ò„ˆ^ûæm]Õ)_ääœâȉ~Vm6~#|R×Èï^¡ÃÇ…‘ÆoN|ñ6¯Ò˜=uº#ÎR"­ce›?Z~WýM”?%RU¬”XÔû×w`ÀoûŠAPœ°êvï TÑ[à¼jëJÜæüsËÀ;–ŸIûÕ¿Êüzý€‰zbSÞxýdü\¼ýOžÄÂÉ~Bma«Ä¬ªœã~ª¾A…Á€€€€€€ü?öξŠêÚÿ?!¼QAQ¡‘‡ŠØˆ ^hŠ7Å ÄjjA- Rsù£ Š7JKTn E¬ŒÝ$T¶·UÚV òšöÓëãÚÖßK~†’¢B@! „€B@! „€B@! „€B@œu"ø:ëÈ­ £ ¾”Åú§þö?Èìs+†víã{{3+G9ú®P¶±{qãjiëϧ†Ü+âÀ:Xñ{~…_®~?¸æzŒ ažßmKë`ÑĤ:F`C駪pøg7ü¾ß¡{³NÌB@! „€B@! „€B@! „€B@x ˆà+^bI Mðµã`9Îà[.oŸÄ\%©ï eûÈ·¶HbÁëiK¿úß•bŸ3åüœ<0)[q^×¶ã9c³zîø¢òTUâ†v]ÎÝBˆåB@! „€B@! „€B@! „€B@! ð+øúãÿˆ.]º iÓ¦¨W¯.ø–>~˜þú'Õh ;î'ú9'šàëœ.œ/„€B@! „€B@! „€B@! „€B@! „@Ò ˆà+éHcOP_±³’B@! „€B@! „€B@! „€B@! „€B@"øªÅV¯àëÛ .À·)õp¦~= Þµh¹d] \pú ”ÿë…ÎÔEóĦh¨Ÿ‘þ’\…ùÛ¬§Œ¡Ó¸àŒ/ç›±ä"a„€B@! „€B@! „€B@! „€B –ø|½úꫲ¥c¢uàët£„7Dç•(öó>¾"øJ9þ =Døu®Töé†Ô¿›4 þ-ü\©³sÅÎúÁSH¡ÿå#„€B@! „€B@! „€B@! „€ç|Õb]Æ*øR„ §‘ä<ú„Ž”aó¶/¨D Юϸ²ùyT¸ºP”o¿EÃcÁsÚ»ÏþâB”~MB•¦mЧwG4N×Pe9>Ü^¦¶»ö½ú¡]³$$š`JßVÅ^ ¦“Hô“{?Ã'ŸWP Ðá†Ñ:°1(¸}¸ŠLéÒn}Ñù²Ú6(‘ÂÔ~Üz§N£AõÉÚ7ä¼² ˆ’ÂQA´ÁÅÑ/Ðæ¼*¦æÔÅûPÍ•öì¥\s\Ï•¾~®ØY3m"¸¿—jó˜Ž}ú¡ÍwjÚðÝ®{¥E+¨þKœõîs9ŸÚuM<×ÕÌhRwSugx.µósÉÖÚoîãZíÛ%! „€B@! „€u€¾’T''îÇžÒ2øº §O×GÆMpQë6èÜ©=šÐŒnŸX_Êo§š³U‹ÐìÚ\„­Û?ÅžûqäD’nŒÆ—´ÄÕ»¢KÞ¸¶g{4r˰«þètî7Eµè‰û0±Ë$Yw[×~¨-Â_Ö©×·÷N·j7 þ¾ §-]UCt2W2ÔÞÏ+Ч¯UJû8?ÕXÚÙÅŠí©XS¶ ý’ Ϊ.Z€öƒ³U 9kvcr¿µ ç[Úžõ›‡PðÞvUÜtñU7àúnÑúB{6 ´òRš\†oëƒDÑl;CÙ ²Hnô‡—ÝŸÝ€µSoŒ/¡ódœŒ¯Ð‘C+^ÿêŠH®ÆN ºé퇠@‰ÈÅî‚ñ¨ÝÑ$vÓ%dí¨k÷!F%Š6lVçN [Ë7ÜŠ@«”ˆ Ê‹6à3R<6¸¸nîבCGL*)kŒë¹Ò×Ï;“RÛá‰-HÇàluDF]˜ß…[Xƒg¾ãu¯u­ÿó€‹k¹j°)Õ\Ò5ó\WsöÖÅ”=žKíü\²µ4ó§ÿטb‚B@! „€B@󜀾®àvø6ï9æ‘RSôù·¡èÜ"|),Áשfp¦A}5í]«~ƒqça»GNæéž÷`韞Çà«kßmVõÛ°í_ÇѺ[/t`^zª·.BçÞ«&Ï(܇Ÿ]Mäb–.òAÕ?1â¢ø‡ªgvMÄÅn1‚Ÿáɦ½±È¼6Ï@‡óHð¥M|)¯sïS¥™í1iµbyÖ•å£w̪¦jnÇñ—¢‡Ã3Xuñb´OÕ„†¹ëvc|ïÚ•h„š6ÄÑm Lñclâ¦*ü¾w+Lߪ°ˆ·Ž®Áõ võH‚/¯>¬ä^S>> ³K&÷‰9«ÄÇÉ*lßTŒ ZáÚë;%M<[94e‹×†GÏU(/‰×±w¿÷Š‘Ðùê"| >g_ÕåÅØRvmºô@ÇVçÙ.¡Š¬©ÈÞí±®Ý‡T|V9‘–‡²üû#ˆ‰ÙÂóY<Ö×`&´Œe1qQiÖÎ?5f§7óÚ)¨{®ß…qº8ÇîG€G9Ü«6¦³Å‹' uŠÚKaÎïk¬OÄdRR?í:‘ç:ÿ(ϯ¹Ãs©ÿG°õüª+ÿm–Çt×x9B@! „€B@! „€N ÁWçÎѬY3Ô«W|K?TýGm›©‡†÷½ÖãìÝüWü}·%öªß´%Z5**Žà´i]+Ü6b0.uxúŠEðuòâ&ÀàË·§£_Ú,3E †ŽŒÞW’PêÄ}°o¯ßÆ®ÄÊkÐÿ2vꬆðvVsŒù-à²pAGR_Á1©é¼¡”5ýyìZ96|Á2¸3ûð¼*˜¡p=ŸÄÆÍÓÐ!\“wÖ‰%;Ôà)Ô§ÿϽÇKí Ú¿—2)d¸g°º¶ÐþÍEMPõéïMñclâ¦*¼>¼Y¥À¸kŽ®@Ï_Ê«%å_Sz жû5¸Øì Þ}Xɽ¦>||ˆ‰fI2ÆÉÐÞ7ѾÝHJ09b:ͲÚá謟†GOœÓÛ¼:ËÿGê÷<\òŽC(/Ù‰£Ê–޵E—vµ+\®VO»™óÉYÎLî9¸\M˜@¤öX×îCja™0"@'çšò·`fZ;ìU摄ӵ•±A* áVEÂù(T²¢Ô‘˜'Ëôd¤£lé¹sïQJŠæ1]»Àåw6ÉȦVÓð®‹sé~x—Ã?^WaD õ ÿVÆóüi×ìž÷yâç¦Å8ßæ>^ Ï¥þïeëùVW~Û¬=žë¸f"ß„€B@! „€B@! ÁW áLågxão[ôê£Û÷‡ g[]y:Œþ²ešž -¯½ w.µå“à«©Ç‚ÛHÄÔO1Q #æü¿~hehÉ~ýùz<Þåf¸î¿ü+ÖÎdËóì~Ù‡Ùäaé9V }±KÆ÷0³ç‚Ž| "Á×Z‡à+T†ÙCºà¹õº)ç±ØK)aý“§râ»%øªØ0 ]‡çRé3°nï|ôfÎlêÚB»"è¬ÞVû‚/½7¸üñîÃ.“vŠ1 ¾’4N^;=îxšÊrÖ_Œž¬ýø/`íptÚÛðXœ>=þ9Kþ=R¿ý];³³RÈ%OZ^òïW$=ò©I‘Úc]»©¸0B9¡ª¾Òh;å|í”ÙÂóYAÕ WΆʺ›_uRÞé°3Y´HÌk²IÚáΗº¨‰r¸ #j¨O„׌œ‰N€Ý3Κàë|›ûÔÃè5›œç[]%‡Šë¸–œ¤%! „€B@! „€Bà<# ‚¯*´ìƒUø@Wtµîõox} èÌáb¬~¯M[_ŠÖß Ðþ"[n1 ¾Žü#.½]Û¦ÐËk•žrèó×ѾËhýÛƒX{ütwNú nø»+Ž¢Q£ÆhxaK´í@·^ÂDdô;lØñ9¾:u M.퀆 —$x»Jàýªþò.×àRÊïë/vãоñ؀њÝãáý©7âÔ©¦èÔ­=B|KÇ¢Jü¬g ¾Üº o+GõÉoаÙÔ£7úölÓÙÏÓë˜{ø |íÃïoëˆéëõÈ=§âýM3ÐÙÁÇžt»6}€­Ÿ”à±j„†hqE;\Ó3@,È»šãsøóÏpð¸Âª3]aëÚõ(þâШ=î5—Ú Ä—;¶cç§;qðØ7”¥ý½Žèѳ®dÛ_:² ¯!þ|¶ï*!ÆUPb¢Qs\yMoÜàØ‚.nÁWuŠ·cמƒ¨úFMÍ[vDÏú¸o¬@ÉîƒT÷MpU #yS ¢´ècl-ùRß°aK\è‰íÜë1T‰Â÷6`뇩-Ý–íлO_tiSŸ¶tlß–ŽÁJ”î;„­œ‚1³ TlóÞÚ„­ÈßÃeíÑ®EcØÚ öb| åÅâ£âíUS ’gŸÏðÙö¨Òê­e»èèvqn•–lÁ—Õþ´¾zòÐn|òQöªíDk»=nì+[Ú"BUû°§ô0ÕcSòð¥Ñúp#•…öÏIò¶sÛvì*?€oH䪌)Wuík©ÿòp,ŠzøõçÿÄÚ÷‹p Ô·5Ä•®CŸþ× ÑŽWÑ>0V ³à+ÑqG°ç˃Øö‡‡1ö™ jÞsÞ+R½$6h}1ãEì}0ޤîõ5&„ª¡äãOñ9ñGÆd{´¸¼ºôé†ÖÍ­ºŽOðBEéNïÞ…ƒôq¦as´ëÒ7:¶JUaÑ?¥%8HÓ&—tBÇ6§Q´a>-§ñ¯a; >­,S$o,Ÿmÿ %_R›¡nÔ°yKtèÜ=h¬à¤´=ÿÆÐï#Ùuë Nøúà 5ùK:uA¯Ìõ±N ØäòNÔ×S°¿´_Qym¾)ýêŠRl)ÚCÕŠX—¼Õ—ëÔ1”Æ×âÝ8Aç.¹ª#Ú4c@Ã\>•å¥8´3¦ §m?9z6M¾§BMЩ‹“u%…ÿDÑÖÏé~×H½ßµl}%º]ÛêÓ>¿qÉ*â)¥¾·mù { {CC¨éöö¸¯è)+JðÏáóÃÇ´ûµ‘+¯ê†î×vŒà½'žv[Ò’Ñ4ö]‚@—6.eмQ(Ì•û\83G”Úc]»©%àÂ^¤ ù883ÍåþÍž=_q¶'Öw:Ñ|âty6|ð)ŽÐøÐ:Ð.>sîï¼ðú1g“6{óïÅéý%ØüqÊɸ“'OâÂïõÄ [ûÙÆ8{Jñ´K{Lå¾P^¼ Ÿýk/©¢!^™WuCbd®¸u¢Ž…ÔàМþ«ºFCbhË–¥qÖµ1âQˆæ¤;·Ðœ”îÍæ½í²«ÐµW¸í¡êý(ý×Wj?mÛU#ª÷—â__…ÔÞ{áU*oxvš%½‡«c»jxýŒu_¹ŠÆGšýÒ¸ýqÑV|©Þ/µ1®gßhîé5NÇÑ&¢Ö…ÇýÈf}œuÄú£¯ù½-oýKÔr0öq>¸ #êzýì 9PµÖü4k¶ºâÚŽm\ÆD·»œ‹³\níZM5¬~h›Ì ¸”æT y뮸ñ¦~V›§ç­¢l$o¾Gè:µOznés#]gÈíÖú|ÖIæsÝ eró3j|sgFöïñÎWâfrŸR1¶…¶_--Ú‚ÿ:Dc+Ý;šµEϾשãš2æí¦ùsƒ&— cÌ}"ÜÖØë*¹}Ò/›På~ò&ùÑhBÞ$Ý磕å%ØK.€4¹]:Ò‹Ç'Ö9±ë¸æ’–¯ç©8ú“š%sÂæh× Áíðr¦÷bÐÈ©ÝOŒ+Ú_­-)÷jÐÜÄåù†úDéνÏ?>Ç*šýÇ÷œkµ]å9°#½ó©¦¹à–OwáБjT‘í­¯  ï Ï(gû>œÜ>c¯5ù&„€B@! „€u€_Á×+¯¼‚ïø–ŽGñ÷?½½ê¾´eã(Ú²1ÎÚUðUýÑ"tî÷°–ú/V`ßì;#äÄž­»€K[ãŠË[¢Q _h8‚·gý'Æ<öšGü˜ñÎ2üì¶NÖõª1⢚h«gvMÄÅÖUõ¨ú£Ⱦ)êñ÷abÿø}ïV˜Nž½Â?=ðÖÑB\SJeê­•iÆ;ïsoÇtu‹:GŒô<®˜ˆ+y1Al_=_‡ðÊðöxÌ̃Ä^Ç#‹½¾Þú&ï=Òô˜fˇ¾tÏÌÃK‹&¢ƒñ²œ< !OloÓµ›ç¬ÀOJGâ!ÚÎRûØ·‡«Þñ& x§=ô©×ðÛéw…±ú'ž»{ ž_o¤ëü{–?¡Ý4Os± ¾B(Zš‹Á“f;4¿gä,GÞäÛm[d/ÎDê”Õ&om~þ"9fë -[^žŒv¬Cå0©×p,³B™G9ó(þr–)K¥ayéí²PgF ƒê¢h?8›Ÿ2mÌl í+ß C¶b¾ó“–KöŽ·Ù«©.Y)ý3]mV®§e/Á SÓcöþ‘TÁ—­ý½‹g¯y·¤)žªÂ?O¼S‚‰·µ7/l;CÑDNOR¾>z¾^mbÑÆ”;±¨hîìéGQ0÷çõˆÛXô æ¼t%<ð4¶“…± ¾'ù8f‚Ñø–´ñõÁª¨c¡Æ‘Ú–¯1áÖÍz÷>ö§Éæ÷¡¿|y3ïVïO± ¾B…È}`tݤ™–uüMyHëÂ:e°™mS¡Ž¹ùøé¿21޶Ô>|{ÕJ¬žûKdæ¸õ|%t–¼€ô@l£¨ý~\Óˆv-ÈÆëƒVjî:¬ß[3Ùñoéª,ôó²z6³ãh×ඃ5U » Æ«ý>‘1‘ZÞ5£r]¥Ôl¬ü­0|¸v¯d«ez5¤¶G¶2Œ†}佩ÀôÞTY¼¿LõÛ¹xuÎxt4îwaéyØ3¦`Ül—2Q”Œœ|º¯¤Ùî+@´6BÞÊV¾Šñ;Ú2»Ý’ “êа,wÝnŒïmowç¢ë°=Ÿ l:8]Ø}Ìf}‰Úi;ͺvRËÀ„9y¸ä)˜¯ßËs×—~v.J[]šÙ^e»ˆ‹ü´'«ï¤!å0dŸdâí6þçØ±àEó;?HÖý§i;fl‘yÏ1Éuü"»7/DZG6.RBq·K–yEá <`ˆ5ÙyíÐ1s;]êd?y? ¨ÞOµØó6•á^>†;Ò¥-+QüÔµ#+—¯•xwîS•£¹.–µæÉ#a,1-HÇàl­ÑæP_žL}ÙjS”1 ÷ÎV¹©]‘£‘ 7aþÈ.nÙÙÏÙîwo!¯súʵ‡Ñ¿å¬Ü‚ÉÛÙ®ÅÛ&¢ÖŸ®÷##S?ud±‹~oäëüµêvÃ~ŸG&Ðóˆ6¯0ÇrŸ}¢’æúOÝŸ‰—]ïJ©Ò°pÍo1²ŸÑúœ%uûî¯\níZI×ÏÊ‚lü5uÌ)Ë~Éæ½‚5Èè;F›¯°kJ9–oùnog¿±û}ÖIösej¼ìbŸûXy¸E›‹¸ÌWü<S;w›"A[‚¥«ñ`ßLsŽÄ e/Y‰V­ËÅöœ®Æ³õ'x=†yjÒûdl¼ú¤Å‡µ?ö| ]oNYðå£}ªFÄÛŸ4Ë­1'|ŽfÌÃ,ö£ÕY— S¿çDZ>‘²ù¹o=_Y8†ä¨‰rOžÇ*_Ϲ¬ŸÑg–ß° £&¹º©ôûJØsìÙ¾'½ÏØ«T¾ ! „€B@! „@$ ‚/Ÿ•¢l縒¶sŒ¾¤ùØùÖóx›‰³}§Y·]¡¥ÆTÞÅøökÚöŒ ðfÖ`ìo5‰aV÷A=°ýð`òª5 W”X‚/ãºR¶ãú£jçðözëìÍs6âÉ}¬‘ޏ½¦‡¯#xý¾+ðH¾ña¬=: Ý5M”qÒö÷ëM/ Ûma]½Ðs Æë|µ‹¾i…í9Ÿý'Z+g(ï1MàížtÌxjïÄš£+Гò<¹ãut^Ø”«Tî_¤á’Ž´IÜ·‡Ä}¦‡¤ÐnÌlÀóZ‚ê¿7g>ˆ«›GáÂ×TqŒvÉÊ+VÁWùêè•ÉÄ^TŒ¾ájœ8ø!–­¶V<ÒòÖÑv`– ‚¿ˆ´Ì cô 8öùËX­/+×ÒHL‘oˆ)ª‹0¡ý`&œ `tÖP4ùòCÌ_Æ"(bql/’ƒ%+Ñ_÷bcCžõPŒ´ˆ7“ñøB»„B¸ÙëT(é·¥ô­Å›0”êmæ¿lHè*yDÙKQìË'V,~”TÁ‰3Ç8ÓÙþººý®<†WóY»…ÕF{¶/¸·ý\_ÅÚ‡;7âÍ -0v¡U¢îéÒÖµM±óSÌÓ=°¨¤w^mÙJù ÑóS‚ñ6ÓXôG߉Uð•è8©ôË{©_þô[9èîØ†Ôü"<}Ï5´ro¬Š:*ýŽ »^»·djõ¦X«Öuצ8¸‘ÆPÆqÄK…˜7¦b|…J1ãò¾`£R3Fãê&'ðáË˨7G¿¤EU<£öY#Œñ×ά¶ÐuSêÅ@Úh¨6ÁŽÙóÙ¢RK6¿ƒôÔEQûýÇ#ÛUø&ö¥—+ [¾šûÒ¼bf%gv‚ªm¥oÊjúŸa‰…Ôåå´<”åߝЖ|‰”n h™(Ù¦f`ôÕÇð2_”óô±§Ú)—«±jÚ=c(wôÚÞ±ø«ØôÎLt¡öWY¸€R˜X–Æÿ Co ûcl ä ¸`2Üü`¹dN§H4DAÚ¼$5-m©OñûJ {% ¦Ô“¨ Ö]MÖÊÉÔŒ ¸áJ`ÇÛÔF¬ˆì•Ř:P·Æg»µ—}6œ‰ŽÆÔ³HÄhHNòHDr¿C¦mþ‰Úëà}H5žú¯ÑžÓæm × Sê½\.êYoÁ—)ޱ=¹÷Í„›ÿó Ôûͯ‚…äÝßõ‚ºÿ1Ø8ƶõÏÚRÿ\Æîÿ$ X³›¶Á4ôq>Û¥bHuñR´OµDoа>#ƒzÏ2>§beñŸ0PY<5ìT"“¸‰oéXY´õ ä®ÙI"¾Èb•XڲߺVLŒô)Y1ýÇY‡Êúê&8ø!Í+Ù1¯óïU*FÀ¸~Pé]¡ëÀ0aÉfÌL·„¢%+²(½‡“÷¶Ýä½Í¨ºHö‘²™4‡]c›°ýhÁG›ˆZtŸ3ú/íÛkÞ”2ø­#ÎÓbá>_Ží~DM4†yz2žGb|yö ÷'иÏZŸúŒÐäÄAG_Ï@m°¦¶&—£¤–‹Òw­Ÿ@F÷€ÃNfL*]o븞¶¼Ž4ŸY”:òõ¬SÏu†åñ³‹mîc¤ïþ×ç|5‘±Á/C>öóþŸ -êÇàdŒöl}ûg–€rfkÞ6O¥zÒûdlxß3Ç[1Ùüˆ×‡9±w^>Û'ÙÒ Çm±—¾8ß™8¯ïw£´'ˬåŘ~;{’p޹©ô#šUÚhŒt çfbHŽ6×ZHÏ`#éùÐ÷Xåã¬Úa´Ý°û~zиº,Â\ð¬ß‡Lõw]‰ÞÇŒú¿B@! „€B@!P7 ˆàËg½œÜ»«þ¾[ݪÛ÷ѽÙ>lþd7Ž+ 0ãSÿBtêE[”unƒzÆ9ö7fÁm5ö{`™[R7ÿb&&ýxzuíŒKm[± Øááµ3Ñ㎧õ3÷`ùž‘ú=ã-u-ù†=ðýúTž™Z_UEL“HÄô†rl ¨”/Ö'\ð¥yó9IÛ6vнx9E<Ž’ÒÍ¿| Ÿ¾ËÜòpϪ™0\·wy[îY̲€qÁWú"”­…¿NH%QÊ6=ÐÃ$¼š¥ ¯X,Çá>̦-ËžÓ#æ¼KH¾o ¯?ÓZÄ«FŠ«K1m( äÂ7ä1mu>F}_!™‚‹›+¼íu9ô©UxaúÓ»IõçkðX—tӫس…ø©îèðûT‡·êLh;ʵëÿ Ý­ùBûðÊýñ˜.júb!–ŒïØ_vYK 0=][@SЏãb† …XG ½õ¦S²”Ë&ËáôÂ/k ^ÊN7·5*%!Y_CHÆ K–Òbž¡HÍÁæe“MÏ1Aúuó#6Ï_†XD±&Ú§šÄíu±@x<§à+ÜÞYdo®–‰í…c%-v2 Ó²—cáTËÛYu默Òw”¹@”·®Œ„v/n–'UðE¾%sF»’w­|ò®¥‹CƒŸavÿÞf»Ö„]Z_ |EïÃvQäXZ²ƒ¯6T”Uäyêaò<¥‹‘øØAvN";Õ1… <ººYCIyª~Â=9Ç= Ë{ßRÄ;NR'&O€­tO€vQœ’žŸ>¨Ä‹4úÈÖÛÈÖõJT×ůãÎnZ½)goý3Æõ¾G°=ˆ÷¿yA\púŒrÙóS±qy4Òû@ of#`lIÚÅ“ú/úIt”W@P}¬[.úo—ûÉóTÀô<5aÞ:<}oom¹PVå>`n] ËiÛÍÛ‘ÂídcR°tî ï>†N*‡„’“ ¡¤[ymç"1÷_×¶,¾Pžé4SÇ;b½‰\#}Ƭ19B@! „€B@ºJÀ¯àëå—_þnoéxr? ¾Þ×_Ñ*·Që>øáÀÎÚKX8vÁ9–Ù»?k÷æ5‡%ÔóNŒ9ßt3úõé‰K›Óê˜íSE®Z™®žx¶l»ÅhAíb‰9Å•¸»©z¸€Š‹6Xú\¼ÅE$ü¼S´Á¯ayÉZ«{É2Ó墫pá…ÌyÀíMŸŠí˜þÌ›f¨EåAÜ©è"|Nn}•„jcµäÁkyðºØ¾š<€u6<€‘ú=¯ÞM‚°#$¹ÂÜ6ò>ò ôœâˆ}Nî ´zÚTîmTîKÙuåðë÷ƒn·NSÏvÿå_±væ õx컧 ç¥àت7‘úó¦^u•Ä$ø¢…©¹äaÓ±mX},Å«œ\¸«}z GÛ+öÓµLü­òB¸¸`ªÃû ÉEb±2‹5³{\0~©©Cýc{)J/þ¬ÅÊ혽dU^2[•ж—Š$4 /+·×Ê7X²”~ñ®{Ú x;‰‘¾ÔkQI[u–£~d‘ÇšéÍk^I|‘Xéu+=¢o[jóÔ§pàíé¸.m–úÍ*_¼_¼ŸÚûp¾¯Ò†O¼WFcŠÓëà!¼@ÛFþj½’C,-ÿƒiåþ0µïzûVöwÐúŽÆø"Áe{S˜fÏ×ãþ7±qRI“3¼“¶Ÿ]cËE媟>¨Äóæ¨x÷ò9&S%UÜz_Ø=æËµ‹°l[ctéÐ ~ø}\ƒà«tõ\<ñÇM8¶z5ná””|èÃû¼]¤ZÏÚ³ÙF* ‘ÙiˆéyOõlgzÝce´µÿí©š¼Pµ7½PM !y ã‘o#™Äû»³ö¾36Ê5s `ísË;…ßv,%/;}u¢n}®ºéí‡èãm5JBü.°¼´™"TZdÍ$±“áƒ,+3 Ic¨…cõì`^cc‡!ÒUL ¯[Éë–­Ðéò ‹ñÚöF¸æ{qó¿ Pdàµ0®$S¾zy±¯£—à«Ù?ÄŠÌË1NUK„sÝ۠ܣ úm4rXÛ¨:êÂû~ä¿?ú½—éÅð'R9ü?¸Ö?ï»Æ8¥Opái^ÁAÜp´>º_,žýhÔ±:ö¾º8ç1.EOà9˵\”…­~l^„´ü éþ:D¿¿*mþàìtÖBäUiF©Ê„d<ëÔàs]ì"Í}\j‰²Ï_⛯òöÏØC·v®–Æ¿-\x¹æo#ó7îqIèÄüœîak¤ºª‘>iOã©'»w=.²ãnŒ;¾æÄ]lžü¬¼hŸ‰ô§¨s4‹@øoßô¾è+ë}Qyç¬oÇkijm%ΞŒ÷+ö9W|ïe|߃yÛ%C]ç‚ü™JÿPc~.Îç,Û8ïú,Âß[ïÙ”6j‰ó’v3*Gþ ! „€B@! „@% ‚/ŸU.øª¶Ý®C×¶— Qý Êw|‚OËŽ™©·¿1 7]ex¿ÑNÇ#øRcT•áÍŸÁØÇ O\fò¶ƒ¡¿ÈÔ©¢g[}qÕØjP żwÙb_®šŠ~ßWÏŽ QóÈCÔÙ|Ý—_L¨Nkì c;DG ð¯†àËu[EÅ“Ø*¼>s{éžÄö#i{;M$6ve ž&OaÚÚíIÚ^q‘zá¬9¾=s›båá5èïÐÕíZ2·èžÔ~§ ÓnsŠd”)ízzÚ>½›"™˜_a… ?a-8Ø_êò´á%öÒÓX ¢EIk›ˆ,ÚBkºµ…–‘5½TS·‡S¿Ûó4‚¸ÿµçç|m·w3 Rœ Ÿîñù/é³VîÄôn <äéí’¾P— /@îFšgkNð¥ytêìX§òò4·à‹{ëù$¶M .*…üò SFicÊŒûð3ê[çŽÄG"÷/nÑ–MhÑüŽ“jº¼Ç!45l2ÆúÎíŽ$øò?&"ÏíMÏc_ü+&f¦¢u˜à×0±méhw?b/¼Maˆ’÷Tò–²Jó¢b¤ÂMO/­wL M*AËWÑÂümaÞöÂßHÇõ/ÏÛ9^ðk.v)éÑî4ÚÆRËÕ)å#–6ã`Š+()ûã½)™q{¬¼ŠÐvŽÙšú kùÚî$|cÉ 3R1\w#dg¯¤ëýá69ãñE·Å 5U»—GÏ\©¾­-x¼Æù ”î â ›£IóæäéòS6î¿âÏ‹72ÈËÜ|ÃË\xPë «/'%}km«@íGú´½è–õHoçL­”]Žìu\×ïCj<øðþH{öØy¼ÞoYÍMû"S¼í‰·ÓpbŠ•,O—f4yÞ‰õþîRöSŒ Èëœ&\·‰<†8Âò¯,mÞ.‹É jªîÕ‹cEy9‚)Ѽq4oÑÌîá‹¶i+ûCo<Ѷ¿éo‚¾µ5Ï>ú±7ó;lÞÈÿQŽ!¾ô=V…Yår‚µQÛ¸ÁÎ{ŠCäµürcÞ¥=ã5]f‰¯¼æsö9¤õœÅ™Çüž~”Y3}Æ…•œB@! „€B@:EÀ¯àë™gžÁUW]…Æ£^½z¸à[úø)Ù¯ÿxRöаã~¢×Z»à«>º †ž—5²Ùshë;X¿ãˆv®iWÜ5LߎE·àËH=t»¶asÁ?ðþÚ?áUÛŒ+¶¿Ïn,ÃOû“ ˆ‰þ gß3òŒ¯*±"•‡³wLøˆÄsÃtñœaÝÍ™"íö4ô¿¥/º_}…m‘²á±è[:jé„PZø7¬YWˆŸïÀç{™cõZ(×BÙ^„s1†›àѶ˜E²‰¬lÚ6ØÙ‰¨ýo.^6ÒÏ[G[Fö6Šáo¤~Ï®¹Ù¥§j-DÀ`ÉfÌL×Ä ¡ý«1(©n‡ ­ÓÖ+[§)qø‹cA‡N'cŒqKí^ÀììõBxüá69ãñ±Í+_uѶ½Ôô'–HÍ#;í4ñ1E»žã¼#ÎÔÅc‰šÿ²ß^?íÖHpó2à¾ÀbÅq?bmθïÕáûZÆÞΔ É9’鹕‘µÿDÚo§îbO–g¹º×!;ËØÐ>¶4g¹ßuβԳÄß.cãÈlT¹´Å`Fj–haRs×aÕøXÆRGš|\w0ÍFª3O.μ¬ï…$€¢ `³©£1làÜ4 ®í.Àáö„ ¾(ºMh?ض͵hì€Íù`% ß݈Cß9O¡áe×ãö~ŠôµE6ÁÛ³½O)éÅß&ly:êÂV÷5ÐÝï ŒÓ™ëßèñü<¸Ö¿Ÿ>AÞd2; 3½âiEHÅè¬arëMèÓ÷Ú¨âC×bÓɤ•‹ÒâíË­~ì<ÊHÉnBߺn=¯Xç(@<Ï:5ú\G¶ÐÇ;Î(¼jéºþ›Ð|•µïxÆÞV=çLÏÆ<.ëÿ¶1÷-^÷<î‘×jC®<ùI[#ÖUôIŸõDeáýÄõ^ÃïF}P¹ãž{å•PûÔ*#Ñþä>Gã~ÌëØôªIÞJ3É[©òs—Üu;qËG¿@êúÆž×6Ò¶ëÃÔm×­ç^qUæ0èãÌÛ®GRûœcÎÓt øufncµFŠÚ£#žâMŸ3sËÚ1¿×HŸ ¯S9#„€B@! „€u‹€¾|Ö‡MðÕ²FÜq ê…¥u–¯Åõ|KÜr×à»Sù|9ò à@I þú2±yÿzk¿€îø“šÀJ<Ñ–réë÷gÒV‚O+‡0·#< ‚/.0Q3Wÿ‰Exa…6¸½trij«7uªÖÎD;´²)aݶ»3Òà wÛ”´í\=ÚvN¤sæ¾<7VX9!„€B@! „€uŒ€_ÁײeËеkW4kÖL<|5ít †õu[Œ9þô&ÊN+µÞƒHðu{7œ,ÁoS'¿XƒñÒñ¶~ò ÚFmbï=1 ¾ª?zûMQcÕ½ñØ„"¾M\LbÊ x«,Q„V@û|9ìݺà~ ùùkføßWà®nNÏb° RÜmS’8‚Wn»­WŽiKÇ£´¥csf³#o%”ò±‰;Ò§bÎðïá¤æäN àø÷\»¼—¦ñö„³Ðпø8~pC\tqS4ip!RŽoÂ=‘ØNAâ|Ùs•ugãÑ{£ó£I“&hB[ |üâHdª[‰Ù_êúzÅÌÅ3£\Æ_ïXF÷¿‘ãù²×)øJ˼aí¢Ô[Œ¸/ ­Xw³×)øŠ$È4ã?ãM{ãUõ÷B½ýñ~g´%Þ.y›÷ o(þÃ/.¢í>ÞšTûôN~ƒÖ©zýe¶¼Ôñɹï)E9¹õUtè=VÌíäI&rì:Nªv0†a¾üõAÅNOŽt³G\c‚E t¤ [þù¼÷çåxná›Öýhèœ X2ùƶt b5m{•i®±•÷(Ү/¢±@gN|ˆ‘ý5WöEÖ÷Ü^„óådWVÞˆôŽÊ‚VW}A+›Ä©S-q*/K7cŒûK}û¯½Y×n“3_4ñÊ—¤fXœÞ SToA[Ú9s¶ñ!‘mØÂÆù݇¼J¬ró¤DŠ ½º D›ª¨^à®I ÝZFT. A²Ðd}òh+¬û[aYW½Žx[²ß3•¼>Ü™»Ççu…$Þ‡ÔR0öÎ6¢\çð±_ÍBâ“¶˜¤¸e`íŸÛè^6%5÷öä—‹’¢òI4¾–ŠË¿Œ /«=$÷„fôÿã)çè¶›=oý·“¶,4]1ê—­\ãzžto‹Jpnc¼uí™ãB¨²ŸlþëÞü3r_V›ý“FB¶|]ÈÝž òÛŠóóC"àÝä±Í66GÓ‹P?0œÖþypÞ­>å¿MP ¯!ÁWÍôGÎÂ~ì]ŽDžG\ë?¡>ByÉ'ø`í:üù­\¬Vï¼$ämfw>b¹=$½\do_nýÏ•3ߺnÝ£¬s0ž{LˆynNòs]"ì8#«2^‡¼ÝP˜øæ«¬}Ç36ð<ãeÈãÚòL‚-¶ô80&ú›wópŽc[c««äõIÛxêQF/›x?që{®iÛÊ㜘йæÅÓ¢0ñ´Ïdõ'÷r;ê:ìk«èsŒòŒ©o•ºgn:†äÐàJ½Ô-Ùǯœ5e˜Üy3R; W5ìó6aþ½]ÔT9—¸Æ*zŸæû9—s÷h3nóÛÌ×7·šº'³Ï„U¨œB@! „€B@:F@_>+$tx+þ¼v‡»~ë>ø]R:W½‰=êšö…ø~úж‘,vÁW_Ú‡C‡SйÛVG\@0‡DMw·+Á˜‹h"0ÏSJR\”póœxc2m{A@ed€¼g]§{ÏŠI,âÈ‹Ç1ÒLÊ–Žae­Â›Za¬)šº+¬€²ë%ÿl_0·ý\Mxm9§Ø÷ÊðVxl•ÓmKGÚ:smøÖ™[i ¶!úlÏWá§ÝRxÖÞǼ0Kö¬ÂÐïÙö ö¾‰ÛÚÅ/øâ/ÍR³—cÙÔÛi{BûçÝi©5_ù¯µ0 „à/CÝ_b±—ÍF\.øòô¸SŽ©½ jÌŒx¦Ç»möo.ù±x¾ì¥ø|±;oÓAÜß%Æz³öM|áä'CøÞV®zm©-ðð;¨]¬`b%txçB*>fðþè|KÇôE([yŸéeÃf«Ëž×³…´ëõá¢ËoOÇui³ÔØÜN—䨩ÇIUüÉ:_>û b 'Gºæ{L`%·†‚8°k Þ~å9<öŒ!þê%åàß/ á‚ÓglÁm_øËlúuuþ–eHkç ˜',ûë{n/Âù$´h~¶rMN/RJÀò/Ø57»€Š ³Ðu¸æ9*-o^NÛ…ËÉë—òɘW@ Š›ýÃY±týŽ1|¶y3ò£¿¥«¦¡ï˜ùê;{ÈåÛäŒW¼8SÛ>…âyå«ðå[ì®)£En6®ºdIQH4AÛ§©Ú ¶5‹kXã$ãyo ¤‹£}ª&NW·ªMÛp¶5¶j‹·Ýê™óú4ìQÿfЖoó[¾Ù¸|am.¬=Úíù¾Yƒ÷!µ¬üÎ6¢°3.é‹Ùzisi[é+òûk w¬ý'Òžx½ÆÃŨ€Dãé„ýel¼_ö:WûŸëÄ9žQ¿¬+“| ¾¨YKÖaDƒUHÍ4j- o‘@e€MÝVZÇ {¹¸W©DêÚ‘Il_éÞ¶¿tVÿÏlL™m¨¶È/^4rŸÌÇP·öý5ò ÃÆvº¢=»•G·ú,àéÓ§Q¿Q3Ðo èø°öÏ‚ÛÆ)³Oñ¶g›°åéWxºÌžDê¨Æúgç(¯ÃxŸGx\³þ9ªœDúD°r?¶m\Ù™SÌíY´Íót}›g^ùŽcn[RÊEéG«ž§ÉƒÙe]·žë|?ëpΞ÷nÏu–¤ IàÕ샌ç¡m.ï|5 cC¼ 9Öÿmc†í¼UrÞŽLF<=/[B%˜vyÝ#ªÕ†¬”=ŽxÚÌ&W;<’0N'Ò'}³¡Ìy›të[óJe”‘·©XçÄ^yñ´â|žâ¶'ÒŸÜËmÔŒ÷ßrò²ÙKõ²©x‹]ˆ-]@};‡¼NîG-ñ¼2¿_Øë=†å¨ .Ù¼—~ˆ£=“&e¬Š÷ìÑví¥%áV&ý@F¢h[P6]æÿ9‹÷ wæl¼qÜOívißë3n)Ê9! „€B@! „€¨KDðå»6*i»Æ¿YÛ5Ž í{:ž9Œuo¬¥ M”OkÜ6b .eab|5ÞMÞ¹úiÛ1’ÐÇÜÞ/‚Ý\@ Š7zÄ“ {c‘‡ÄI‡Wàú–á |4k†=¶A½ðð;¥˜F¬l‚/vì"a‡swÓŒ!þ_Z¼˜Ä"”@ð8–U„V ð#.Êp½”avï.xn«u*6~3˜ò`ÏS1`ÔójÃ3ŽÚü{äïqéíø‡r¢ç“ø¤hÕ0³Ù5oàËUÓÑo¸&d¹ùÙwi‹»ï›Iòƒ“UU¨ß¼¹%ˆà"ª‡=TL;¨Fݵd"ny@ÛÚmè‹…X2¾êŸNªƒ"cè"ø2…vqôAÅJoŽ Œ jñƒ$>f—µtms46ÒÇfEü{ß•)Q_¦gZDØK¢,gK,Yš…þ“4`iyÈ¿ßA±¾g,p°*¢^D‚qªçŒ­:lô/ámÆ-”ýË;ì…7»æjK‰°²hK-]Z6æõÿ“r–Q€T¬¤mì¶ba=^üûcøÂ|mS8¤ö+v+G.º¢Q‘BòÇ÷¶.G8â69ãÙEd–·[r•‘ÞihMFýU~qótf ȾЖ)Ó.ï«/º×wuÉ Œ›ò.¿º º ™Œñÿ²- zyO)4<PvY+‹1ýÆ–Gž¸Û­b3ó: ¤¹|3~R½È×aôìÖ”˜îÖæÂÚ#L°ÏNM݇Ô2°öìl#F«‹Hh7XÚQC ÿеY¿J¤=ùåbÚç“«ßó/c£Œoí¦--¢)[˜ÑP·tTæ:$DÔÖýâO9ÇÔlšsLuÎ9ª±jÚ¼~¢ .oÒ =9](?SøHu²—<ä5¦¶½zÚÈTûTBˆga¼Û2·‘{Ú²¥àgìP¢²"ˆæ­Z¸ÞÛ6ÌJÇð\uD¼Me¸·K³ˆ‹ð¡RÚ–´ïÝ´,lÞýc,êdˆŽÖB²Í~Ï/Œ kÿ<8oÏfŸ¢vâ·MØ Îq…·?fO"uÄígœâ Ü;G9yáqM{\bíÁêJê9ÍÑ¢™Ël¾bÒ»×î‡ Q6dØs±³ÜܶxŸ³x\³\”A´úñŠgØf]·Ä:¾ï1\€’äç:ËNE”îÿÕ샀ˆ™¯²öÍú"ÏŽ×iW" íÜòŽš [è~v¶(vtû|ÀjC¼œ®Ç¶º2a $»OÚÆÓxê‰l²·É2zoâx3VIcy¥RïPFÚ~æÄimyYýßû´Ûî¿?Y¶°JŠåýh(+/;¦d«s$.l/\‰!Ù4s¢ç°¼nŸèï,lùj:y†Ö>¾Ç*j¾ïÁ¼íÒ½ËU@ÏÓ‡6LYìßsïîÌYwÜO“ßgb©` #„€B@! „€µI@_ Ð/û`>(S~4íp#†Ýp•-µýEïàýG´s-¯Å]wl 1 ¾Zœaž¤(©ÌçñÉâ±híxñfd\½ãÏø÷À=ê¶~ʹE%•¸óêÆà ÿævF$å/yì™D^ÀÞPÏ Äòkªx¾âB#<ˆ÷¿¡myÞ‡ÖcLë˜[HzŠEt’š<ýÃ<Žq=)¾¬Í¹,~óºŽk§†îCjIX{6 ÃлөÞ>Õ~a\gí?‘ög?§qö¬¾¨—Pšo ]5¶64:g§!%‘ñ”‹JhÎ&~¬ ùFWe¾¡|&`óÁ™èÈ·Uãub[h¦^czÒÐlüo„¶\CcGÉŠiè?Nód>'Õ¬åYÃ3!§ìýª³Ècl® yëh›ÖÞ-P±q.ºËÑ‹ŸM‹ÉSÍÅäÈL”«Œ gÍ"òöhö©DÚÏÓ9®°þkóB—@qûíA?p™vG*T}¤G½*irÁ@ ã·Ì°bÛmKB¹(‡hõcÏSçÁ,³®3±Žï{ ¯Óä>×YváãAìϨö(0‡þ竌…GâugŽ ¶þ'C¯vÎÓLÀ–lzNŸj{Nß¹é䘬 yð4O{ØjcÂç©5Ô'}áTÞ&Ý~ ±qn&†å¨RoºáZÛ“û™ó¼ø8ì·}ÚÓ‹o,âuÄm1ë6¦æýÌ oŸã¸m¯È¢géìÙÃïX•È=˜·]²ÝÍ;¨}.¸„æ‚éH9Û÷áú ÜÇ‚(þìK(?½èÊkб•ñĬ,9B@! „€B@:L@_‰TNÕnüiõfœÖÓhÚºn¼®#šà¾,.–2]ìE×;Ý’Ž¾mì>™b|5EõG‹Ð¹ßÃÌR½4ûpù¥´%\è¾Ú÷>\³ý—æáI œù‰~îR=A…¾ø3Úw¸ÇLãáü ˜øï½Ô­Iª¾ÜŒcoÇóëõËãVÐ/–ïÔÅiv!ÅÍ¿xyӆአ}EøG‰iq¹ð€‹0èI¬Yr?.9~Í;wBÊv*So­L\`bÈÅSNO;V ð£¨¾´(Õ;^Gçí¥n~j^Ÿ>D/3yšÐcŒ­MÅ[K&ãÚ˩СcøôÿæbXæ,#*í©ÂßSTpÑ7”Ö‘÷¢{uïE Qɒ§‘Úë 4¢´÷|¸snm2»²O§·§E îÁPëï.ª?гsí2übøSä§ö0ÖÍEßFõðU²tyìÑ–Ïi¿ ¬ùÝXô Úšé¿û4Û¿„Û©Gqý“ŒqRéÃÖV­$¨[¾?ÐJm?.ÙüˆÅÞ»7O± ¾œ/Nñ7&œÜñ*:Æê,îij«Çл E“º%Ãÿ\†‰iƸ@Þ!É ÛM)Á(¾ŠÉCLªÙ޳®ÁÃwö@ãÓUølؘIB$ý (({Õ FôE®ý²ÛØ"QI&#'Oüt Ú4o„ªŠR¼ójÆåêcè×Üé×Üj›±eêò%R¿GT!OÐî]P»’ýÖNL¥v`ûðÿlA'ú‚ãdÛÈ#m™§ÉhTÌÈÅ ýWÑ6œÛ×/ưqº I7ÂZ$´Yåú…Û¤Œñë~w.=A÷âŽÑ‚Úßê¬Ë°öIÍ¢{ÀÏé@[­R½o[ý"†°¼—l9ˆôØ*v¯:Àè¼å˜r×Mh:ˆKçÒ8odj-ö„ÊÉO¯1f9Ô6˜FmöV«Ú÷1^üÅ0˜úcCXC ‚¾Ûmy/ëª{/#±îòâU0Ö5ímÁÅË›i¥ó R{¬{÷!ÕzÖž#¶­êBÚªsˆ¹¥™—µå^é·=ñv꾘XS\õçøÎØW²—¬ÁØÛµvY±íOøñIæØhމ´K‡×9&`ù‡pÓUÍqpûÌ}d Œ©Yj.m…4¾Ÿ·¸…Œ’‡«¶¦‡+ ‡Æ´ÉÎ1Í(œío$æ|×µ- Ç—`ÉR´í?I?›†¼å"­og´ Aàt° ÿÚüÆ2îE©$†[…~¤í±/d[—äp˜®L° V©­’€Ñð~æîIÍaœù•ã¶öo°Í7Í>•P›ˆP-vÙ¼»Y~j¶?.ÍlIš ;ðí>- nGÞå­âûyĵþyßuÔ“{ŸhbÍÈôÔ¬y˜ñ“ÛÐùЍO[zVÙ…7ò&šÏE±Š'yÎr-Ùm¼ôŠgÔˆu?cùÖ©©çºDØqFásƒ„û_ÿóUŸc™á›¡g;Ož-¹ù/àGôÃÆÐ‘-x-g8ru==ÂÓàËÛ;O󬇭Þuu9þ2Úg’×'mÏûޱÁ°•ÛdŽátÑîÝ,óÖü?êq…2IÅ»ôc ‡Á¶Äô3'¶ú©"x´îk~Ûg²ú·Åàë_~OVãÐ5vÓŒè6®}lb.íTøœÅçX•È=˜·]ÝÔHsAÕñÀ6òl߇Y¿§Üã¹U- O¾Ùjéôã€u›M½°òG! „€B@! ê<|%XEGw€·7—EL¥iû‘vÓU¨ç«àK‰¶gÕL þ´#…_I`õþ_¦¡3ûaÖö×&â¶L&s‹Þs*Öþ}ºÓZ¯ñùòmÚ†0Í8çÝþ>A‡&‡lÞÁ¬ÐOl܇1MWD|Y چò(mCÉl²Rsñ<ÉËÖŽµc-Ï]Ž ÎrÝ—_ˆçîé¡…ªÚ†G/ê‡Wqœ_Ç./ÂÓ#®ÑOÛ7žywcöxn½35Çw‡ç±­ FbÈÏßt²¾Þ÷â t]=ÓWYçpÏPöÂ]LÄ®‡ü׎Æ9ÛßÑÈÏïˆÌÌÛYeZ†ö©šÇ)÷—|a‡õËòÑOU(9lKÚñ…Çs\rùÊ=?˜—ô2±`<ÄàÄŒ9ò –bVF_èk̤Ã2æa÷ü{­—a¬¦à‹NUïx? 0/mV°ð£Ì<.ž¨ ¨ŒËÑÛ_¼‚/»‡?#@éÃiÇXÇ¥9Eûp7sYv`íopÝÓ¬#Å*øR’ˆÕ3;·q’úÙmÎ~Ö3;Š&â ?}Pæ-ꊉMX^u Žð5&ñö´TŒ1<Ù… ?ñâFÚ:³‹"ø¢¨E‹31xб’žÖè¼|t{'ÊnæGÝÖ( ÿk,þÒâÉnÚNÌ|yoJWÏBßÌ\vÆýp^ÁnÜpKÁ=¼w¿ÿ þƒ]Vªöå$SrÝΆV|Hø¢oׯÊˈâÉÙ–ÍãŒe‘q”1: Ë^ÖÀóÅ'ãºç_Z¤0=’°@æ*ÕÅÈjŸªmeÉ®;',Ù„™éέ&¡ìß‹Wd!uœ!ì²_3¾9½gÅ,ÐÜÄØIÇ_»ƒ¼cÀhî£i+ÍÙŽ­4ùb›âýkgþýpHÿŒbØþz·ÇºwR gm$ZÛâ[é¨q‹¥>ÛSô¾£ˆz2‘jT˜A<÷w#-·¿F_W¶Ý°sŽû¿¿v©o Gò¸yýTtT„±†Š9lL2¬ãÛû)Bú·v¾Œ­¢+j#1o‹d@|cmC9ƒ¶¡Ô½ÿö»ýÍÈ[GÞÖz«—x_5ÆÞJÚ†´“¹ éËgÚ·&#f–Ç@ZP_³ãûÅÒÃÙ}Â…µboϼO%Ò&þåÕþß¾ ]îG*ŸuÄí7xªé™ÿxÍïÍžžmŠ—Ã5¶÷óÈuã̱Á´×GŸèsìo¸£o¦)àt5C=I[Ü»xÄt Ïíp ©\S¨\šÞ,¥­~8cÏÈÞê/ÉzÖ©¡çºØÝÛ~Wä¹Ã㯿ùªÿ±ü:® †4=xhRU\ì²E½åaW›vy´/Ÿïe|߃çtÁÚ¦{Y,sAÓ[°^ü³|–®öÕg¼Û|X5Ê ! „€B@! „€¨ƒDð•„J©Úÿ>Üü)*޾¾ôDë7E§^7¢ogcË5{fñ¾”˜'}†¿,ù=þøØóævgö›3ÆOîÞÖvbZÈ/7½ŽßfÆ«ë1{`ì‹ÿ)㹤BØúÚS¼Z±&‘Ô/¾¿ÿNÛ n§““GªiŠG*ýã&ÀP¶?“àKóN£|ÿiO§š+ˆ?Oh‡T/[ÒÖj/X[«‰»ý%OX6Õ…Z$˜ÚE[5ZÂ#|4÷~ {ÄðBÔKË?Àà¶úX° ž¥x) ÉuOŸŠéÏü'wãûî‘àæ¾Vx$Ÿò‰šw –<‹'˜åðÌEq{’·_þ cî¹Ña;ÅYðFý\ÛÆÍ* …_þ,&Žèƒ¯?zwõk¥yç‹({…{²bñ£`ù<ýÐpÌ/àgiÍptf<>½[UbiÖO1ée+€²Nþ—_“ÔHƶ:ö‚X‘ÕÚzÿhì€!B íÇŠÜ)7›+G(v K>o=†áêOˆ³h»¢éÚ‚¦=q÷oÁÌz°¿õëc%TÚ<(Û® x©{ÕܪÉÙo0mÒìðÅ @*ryŽìç¨7w3•³ß\Üß^@¾ŒOpÞ~ùwXø»YøÇVã¤õ÷ætêß“†¿íÝuMñN­ý$ÏvtÏv#^*ļ1šÀq‰AoÑÅ s¨?ÞÍú£W6úlõçëñÛ)ÿÏ¯ÚÆQo7O‡ë¿çìßÀa‹¦ &‚ñy »·!&wѶuK[‰<=‚¶5ñ“ð8ü ³ÜÏqád:%+•±ÄGÔãríÚÇ>?cB½ö;Ì}fÞvi/Ý=ˆñOLÁÝ·iüb|Ñj 6,þ5†O1|Mà©}/™Éé½QY´w¶<ÚhýëGøß ô+|e]’De$zô{«K7à7OLÃlm¥ÈÈ@ý«Œ9ONyýÚyŶ·¾xöûØí2«Ø0 ]‡k¢4O”_VÛþšHJ¼TË[೿pž}z^. U4}Q!6>þ(†4y‡¼ôŒSÍ̘· óïíb˜õ¯ÛÂmÌ–cÅ󊇵pqV - Oå<ŒÛ»Ä.Àã•nXŠgÿ{–Y·írêh,™ñ8Ò{‡ ,ʉCÞÓãˆOI9`BÞLÚSô¾CyÕ(W{)Íolû7ekÒgoÚ‹Ç&ŽÑºÍPªÇÂg&§%Þ.9ÏêR,ýͳ˜4[XíŸÑ9KðØCéh“¢Ÿ÷“¬XA¬švÆÌ×ü4†m‘d´E`®Ö¹º¶gàö-ˆÂ 1{NNg%t€ÆŽ‡þßdÜ;°£¹„Ä¥ýuqé<šŸÞKã§å È#áÀýŠ+0ÇÇ&´µ‰%m_IHå~,YAžÊŒñš¶U R?>Æ*£MxÕÅnÀ.÷#Ódu½?F˜ß›{x•ƒæéõ}>¤?á¨j>ûDp!>;9ºÀÚ^ŠFg?„ÉÝ‹Ž¶AÏÊùÍïs–k¹(q^?Z{·cëô{»x]w®ù|Ö©¡ç:¿ìî'ExÔ¹³¢ß㟯&26Pæ~z¶ó$Ø2ûYÌ¡y¡åÝ—æ`9ãÑɃñÎz¾WoMŽç{CÛWO[ÝbÌS“ß'cª(Dî/†ÐsŒ­tŠ;%¬{åaT<ÿSÚžž&°ôã„Íëíï0â™Ûú±z_³÷ãøÛ' ‹>ÇØèï|,¼¾’èÌ&´fžËŒ(E èÇGÆ/‹">Sú«|Þƒÿp­&øRŒÌÈúŸ]ŠƒeVçPÍÏÈZˆœì‘ÖÜÌ(ÔY¾ûé3Az†m«¿×‹þ,`Lþ ! „€B@! „@]! ‚¯$ÖDèDŽŸ á ùòJiÔÍ›¸I®¬ c|… BÔè!T9†à‰ B¡9 OAJ“ÆhѲ% ?V6®G'«Ž ò¨¿EÛ+ îÊåZ? âðÁ#Rž))”ßå—Å–_ð¾5N";/D³Æ1É–³yÊýõ‘#¨:¢2­‹Z¢õeá_&…ªp`ïªCú¤¤ 1ñ¹¸es1Kx~y0ˆæ¦P]¤àÒËZ:ÂSû¨ ªé]üm}Ô?IFÇø©Ü_Ž` åOeN¹°Z8E(X“¤k¬ß¨™ºhŒÉF ¬Ü}GBhЀÚqã Ѧ•ýefÄÈžC¨¬¨BÚñôÔ©hÞ¢™ƒ‘gÄØ.„ª±?«7²»…<¾¡í¿­ïôý§™pòÈ!Tžµ z9K›_Ò²öúN }¸úÈ>T~E-™ºº2>Äfo¾ØKí¿ÅI¡84‚ÀØj"B¨DÆÉ¾>tŒÆ+Z{¡öÓÌÙ'ãèƒÍ³ÅÀ~Æ¢p²ª UGé¾ Ï/¢±¤9Ë›Â4üú.øöÛÌØ¥`%Ê+hœ¡-)•q¦U«Ž>D|«OÒ`PŸêÌžK%âa5õý#Ô÷6sa‹ ¶ñdô{û6_ñla±°q^ µ1œªõ{f%yë4,GMÉX‹+YªÓÊÓÚ½¸Aãæî¬i쯬¬DU2Vîw¶LÒ˜L Ô•8F÷&eÎÒ¸y ´j½Ý«ÉfòL§ÌuÈ´lÓ&ò\å,´ÛØ™'£=FÈ-I÷¡9$~©FÚS s±ÔÕ4~éý¤qË6Ôž#Ìmm—T×ÖøÞ¢U«¤ÍÁb+n Ìk¤®iþS]ªcVÙ_Øœæ¦ÑÇŽØÊU‹¡|·‰ê«X5TG^ÙE>¹µñ<f/ñª¦¹Õ1º‡hÔ˜æ:Íiž’Ècl(WXA=Nø¼ÇÔÌsIý>£Æ2÷ñ@`œNþ|ÕHÙýoM1tÏ-ÚÙ´))ÍÃèùN»ÓU7²®PwË%Á|y?MÆÓ;¢ÕU ôÉh¥t=HóÚÊ8çµFz~æÄF\ç_?íÓwrf^¾û«â½ó-Inl\]QAsAí™­y zwíq¶ïÃu¬ÏÔ…æ"6! „€B@! ÎW"øªÅšEðjÚ§FXDªEû%ëºO 6>u¿ç«…¡&Ô¿cUiž¯¤\g…À§Ï¨[:ž•ÌÎáL‚%ôëæþš×BWÏE5U¶P9–Î^Œ?ÿ†•ùãÍ-`´,ƒäQ¦­éU)fOS5e¯¤+„€B@!pÞ(߸¿û¿±mǸcÖJL`÷ÄÊ=¹m!|Þ‘ Á—€B@! „€B@!PWˆà«k"Á×·õêᛋ΃_²×"çïjÖõNFÅ|ê,oë]ÅËø¶ŽuÖZ1ì\& Œʘ /!ì/Z‰qƒÇ¡@âË‹–WòQÏ—cÚ%½0_—‘»¿}+ZÑ/ÅCÁ ¼÷ò•mlë6¶¹û6·Qó–B@! „€B(_= ½2Í)–oúníÒJõîUQò.žè? æŒtÉfÌL·¶×~Bà¼$ ‚¯ó²Z¥PB@! „€B@󉀾j±6c|)æ)€O@ò±¸àÌ·h@Û`ż}[¬ K¸¤8Ó >N5‹¼ýkÒ3•¿SêÓVÃ)'¾ùN•9öÂVcÅ„ög¬\éÙ+±~ê@}ëšØSK$äþ ³žkK" ¸¸Øv.{e1¦lc;'_„€B@! „@âöcnj9¶ég4#¥ÿØ'â‚©)c"‡ç'.øJæ6¦ç'-)•B@! „€B@Ô|Õt#ËX_Jø3)õ¡lï¨x’ˆD þ7!Ô?qJÄ^‘ Õ±kgRê©¢Îoë׫c–‰9ç2Eð©Œʘ /•XÚ Ùl+-; §¦¡™W”<¯l£óذIXí–G K^øÒ{Û·Öq *ç„€B@! „€/AÚjüéÇ0i¾ëŒ9KóP:Ú¤øJ]" s‹@uÒÛÖ¼@r±»`¹a±zƯŽÄwý'£}ko¼ôÁéÅ.ós @ W>Ùëpÿ‡ñĶm±ï…Ñ´ÊЫÜwžŸ›‹Î ÄÈÐPœê{/zª]Žt> @€ @€ °Œ ¾Ë1øJÄ_fÑŸ½ùTlÞ¾3ö¼öÆ=wvgüJœ9{1þ¸5SÓ3 ÿæ1¢¹­%6vU£»{KìÛÝÙßXÏ~*Æÿ®ÅÁ¿¿ÇÊ  @àÁ Ž Å»g>Šý‡EµkÓÝÐù±Kñã—¿DTwÆîƒOGåÁÜJÃSnýüM|}b *»^—>kž¸x@íúõøö‹Óqüõ#±·{ûâú  @€ @€ °âê5øúÿÿ:Ñ‚@IDATì |ÅõøÈûᛂ(¢ …øÆW­Üþú°­4ý)ýÙZb­õg¬mÑX«5ÖŸ­±µ­Jê¯FëO£­Ñ¿D[ÒVcÕøˆh| Jbˆ @I˜ÿ™½wwÏìÝ{wîMn€s?ŸäîÝÝ™9ó×™Ù³gøƒÏožÜe…úEÎ0ƒÐ{w?ÿùÏVrss÷ô)xfΩpô‰'ÃYÙßVâêXõ/8â»*çÔ“à'î„k²VOïÿޞÿ8´mÞ—>òæ>œKÎ`L€ 0K ¦q5ÜøÜÃð³gÃGN°ݵ¤~vöx|.ÜÔöÿàØÑW~*YÇš%°ªò8ö»ß„#âdÞKôYxô‘hˆo/ù.˜>Šï×ã-6@å³epï%¹0cÒ‰ýš6'Ƙ`L€ 0&À˜`L€ 0&À˜`L€ ,¦öVóçχO<Fƒ ‚Øà+|Á²ÁWxfûj_ƒ¯ú×=„Ùž7ßv)œØ½¶C7¬|ï xôÇÓåÏÀ%‡:¿÷å6øÚ—K—óƘ`{­Á׊RøÙé¿@ñ¿ ·´=㌧bÎvÀë§OƒçV|ó½eð¥Óã è×=p ÜûÓ—QøK0_÷g4_lð5ëËĘ`L€ 0&À˜`L€ 0&À˜`L 3Øà+3Ü­TÙà+ƒðXÒ‰ ¾f¢÷ó`ú®à¾ò$œzËsÖ‰ o¾^º|²{±·>^Û›;{`Ȉ‘pÄÁ‡À‘cGÃ`÷먧w7ôôÇ]Û7ACË.2z$L{ ¥Õ¶a=¬Û´`È`9j |æ3‡Á¡x¿îÓÑÖ M[¶Â¶N€‘cFÂQGŽÇ{ãï¤éôBsc3lØ*Ó>&(v† ¾|Ñð&À˜`ýB m_=;`[Ãؾ};j#`ôø#ÑcX¼ÑÍÔÎOÖ@Kóv€¡C`èˆCá £ÇÁèÑqìjÛ;Û; ·àÀ!ÃaägÆÁ0ª^ôô`´Û`áegÂ3ÿ¸øµwá«Ý]½ƒ‡Iµ'öéŽæ-0èÐq0’†w.'Ÿ‡==» õ®!Ãeä=°mMlß,ó2FŒŸˆyöÆ_6tþfL€ 0&À˜`L€ 0&À˜`L€ 0&ÀØà+ƒu€ ¾2€%Øàël¨^˜§¤‚wÀŸr¯€›ÌBƒ¯gc_¾ý/˜ó“GU¨Ÿ³fCuáåpú¡¶±V<’{9Ì…Ëás†@öqî¿÷©¿ÂÛ ÷Ý:n{Ã9í̺ê6xrî pž{î\÷Ýý¸í×ë˜}óÍ¿*„_fŸHŒÍbéný,ºçX(¾´¼›V^ˆñÿ ã×9aƒ/›,3&À˜È t|m|éaxìâß§Þ,ÌüÜôן±G:WÑ;ÚVÁ+yyPþÔ*oøÜÿ½ß¹r*ÚPm¥óþUùÁ긻Ð÷Ø3/Bö¥xì€EWNƒ'žÒÜ„§N¸ï_pýÜéÖÅ]¶ç²ïþþðÄ·€Ú±‡ËÃXø¥iðÌ–|Èz*Te] oy’?áçÿ×þúKJô6ø¢4ø˜ 0&À˜`L€ 0&À˜`L€ 0&À˜ÀþM€ ¾2Xþlð•Aø,i3ƒ¯mp_î÷á6bðõaE1œú‹—b¹›—÷ÙTënÿxüÕÐ8Œµîè‚¿Þx9\gÐ5ªÞ¿2NýUôâô³fÂ&,[öTÕcà«  knV4Þ ð?3®ƒßÇR¼w=õ†ct6ëæB4HÓÖG“îñÓA^~ú×Líî'þ ?ÍŠ7ùbƒ/43&À˜È T ¾ÚþyÜq郎ð3®ÿÀÚ·áýÚÆ\—ÀM-÷ñ‡ÆnéZÿoÌW]©™—@õ†¦ê¿ÃjT"{ fã(¼¹ž2^›0ý\8üp€åo¼;påªá¬)‹~ôYxâç´r 5øšù(|eض÷¡ó€Ffï^: žDobÎå›q ÀûO¹ò}s!n-yŽÞË|9äø€ 0&À˜`L€ 0&À˜`L€ 0&À˜À~O€ ¾2XØà+ƒðXÒ‰ ¾‚·tœuÛ(m>d2œ=^Æ@Ìn¾gÜõ%´ “Ÿ]›àO·æÂM–ÍØt¨|ý.øÜAòMàîÿ}®?ÿhËXǺ÷áÒKï†*¼‹z-“¡ì|Ù$ø› 0&À˜@f¤dðE·fþòË®‡ 1î¶×JàŽ¯Üieê„_•Áõ¿˜aúçá·?þ»u,½tÍB/]ƒ¬_¸Ý"n‹GMÑQµ>ý[ 4ŽžÓΟêlõ¸gÓ˜?áË`Ì5“l…—F·tœ½°"hhµGîôˆZÉ ˜ƒ1ÇÃ|ý ¾,_y^ŨÁ×7Ÿ¯„ÿøÊ+»V½gý·å•, ½‹åƼ‹IIè‡ ¾( >fL€ 0&À˜`L€ 0&À˜`L€ 0&°`ƒ¯ –?|eþK:±Á×$¸ûž+á tøÐ¶¹ ¿õø½³}âÙPõz>œÜòo8ⲇ0gh\…º>g» °òÚ…Û?^nmÿhm×8UzÎr ¯îxøq¸mõ&±ž¹ýÛpå xnYõ›oÁÙccOR­øì¸=#†Í•F]³oŽ_œG¶nÄsmËá¬/ÞayúºúžbøÓ—ÆãI7ÝËo»J¾5ÙŽÌú~ë‘ÿ/£»Ž¯ß[}¡»mdì.6øRpñ&À˜`ýN ƒ/Ç€ ¥¾rU=zÛR·nüè7ß~õ^ýÜÞyŒŒ[!¢g¬g¤g¬k„¢¿3ö “íÜÂñxk G꽋aÍ~>*.RG^bðåœÃ»“˃ŒÖ5øšñ§Á÷r£[FÚ ®Á|Ï“ùþnÜ÷Ä7aˆ}|³ÁÁ‡L€ 0&À˜`L€ 0&À˜`L€ 0&Àös¦_O=õœp 0jÔ(4h ðcÂÒT“´Z6øh%’9y|ùÉv6<ý·á’c‡Cóûóá¸k¥/üà‰=Œþ_U¸õ£üè ¾xêi¸fªjÐÕøÆcpÂdß!ܪñîYŸƒÿŒœ“йƒV¸û²«¡·y¼ãáGÑhì°h"Î× ÌõØå|=€ÞÆ®±¼9`ųó଻тì¬BóŸ/{7'û6ø²Ið7`L€ 0ÌHÅàkÛk„Û¿rÚ§ÿ~½äz ææ27»–”ÂÏÎþ}nj{ŽÝ/žþ9xmÁ¿üÒ»ý…q 2½Öý³V½»Z¡«}4„öækù;|Š!ý ¾–¡Á—W”gÊs:ÊC ¾ÂçAŠì|}{ÉpÁtÕ¸ÌñbæÙ:’f– ¾( >fL€ 0&À˜`L€ 0&À˜`L€ 0&°0µ·zôÑGáøã‡‘#G²Á—ibƒ/Srû^¸d ¾.œy6X;"ŽÇ›gy*|åœÉphÌöjÉÓ¿…ó~ÿ^B8<õW4îR=|¹F`4ønx¯büèO[ºè•»Ñ¸ë§Ò¸«wüÏŒëà÷xñŽGÑKX܃R׸Kgð¥K—|mFƒ/))ý°Á¥ÁÇL€ 0&ÀúŸ@*_mÿ¼î¸ôA:~Û}mÜ8ïX¡Á×-hð5–ÀŸ½–cˆÙïé²]kàÅó¾h‡9ç<£ÑØW£1×Ë/nGbð:–2œ5ør¶ŽôÈÎ_ ü“ 0&À˜`L€ 0&À˜`L€ 0&À˜À~L€ ¾2Xølð•Aø,éÄ_gCuu>œ>Ì_ðMèák¢ôðuÖÕèkVœg¬ø®1–Îðʽ74¯[UoT•E/ÅN–U_ŸÖ ÷¡‡¯ÛÐÃ×å·ÍÃí'¹Á¬#×Ã×…7ß /].·o N— ¾<ù'`L€ 0F ƒ¯ôð•/=|Á%pKûý0Qu0êzÔÒxøÊúÓ‹›;Õ—Fã×À=?}¯Ÿ ß~é7pÆyGÃðÁhß³ªÐKésè@ôÛ¸uãÎÖÁFX2!ÁWø<Ș‚Óbƒ/Ɉ?L€ 0&À˜`L€ 0&À˜`L€ 0&À˜@²L ¾xKÇd ÜÇ_pö³KÉ|U-̇³Gúƒé¨ÿ7qÙCxÃ$xö…{aÖx{ÛE¿0Á†WºPngCT7­¡Ùö•ð•È/  #›{ÿŸá÷3Çâ‘FghÆ_:ò|Ž 0&À˜ÀÀ!Ðà«=sy ¹lé»q‹ÄŸÊ-ñ3{!zì:GÝFq;óòßÁ«?‚_vÞG Þ /ÏÈ]¦gþ~ûÊUq^Ád\ҠʾOݶQ^ÛˆÛBžcyþR=y¹FXºmeHÁWø<ȘܴTä56øŠràÿL€ 0&À˜`L€ 0&À˜`L€ 0&À˜@rL ¾æÏŸ'žx"Œ5Š·tLuü]lðÏd=“ŒÁW5|`ð»ÖÃÏ› JˆÇ^¼÷2ˆLŒmˆ¸«ÞúçxcìEp›et%o 2¼ê…÷ž}–M8 ¾uæ$8tXÔxìÃ7æÃ©7¢1° ¾ßx N¸Q>…˜uÃðÈ•§G½‹í\÷ýb.܆Þ4èýÁé°Á—äÅ&À˜`—@°Á×¹påÂ_ÁÄQ¸ós\†Àádž™ ¯[×¾ ?Zõ8iJÔèkãKï/þ­u%ë¾AîÜéÖñ§¾~ûcé¹ à„Ÿ??¸ýë0Ú2(Û_{ZÆF kú`x Þ”*ÉôÁ-/Ýǃ]Í« úÖnÅhÙo|õ®‡«fÌiÚ%?ÓÏš‡m]U¸u£õ™}lýÅ ˆ:ïÀmsq[ÇE±kèalÖÌ1$M€«óüékGÇnHïXòôoá¼ß¿‡[Sþ·¦¼(nkÊ·ç?m›·À¥¼i'ÈßL€ 0&À˜@?6ø d*ÜÔö"±ôaÈÿBÔ°KÞ=aæ—aÔ–—aµ­®Ààöö;`œí%¬cüåÐYð>‰ú„oœ ;þù|*ÏÍüüá•oÁÎÀ—>FîŠ?üÜ_+á;ß™»àzݲNLŸŠ–çh6ý7ð‡%s@š|i ¾ð|ÇÂyHàáËÙŽræo ð•9 ³ñß²aT>[÷^’ 3&Ë1&À˜`L€ 0&À˜`L€ 0&À˜`û#6øÊ`©³ÁWá°¤|Í„ê…yÁ¾byúøíÁò¨µ¢’ÍãgÂy—ÀçOŠj¹†W<õW¸fj̘ ÔÛ Ï<ø¸²ÄrÏ¥DsáwÑ‹ØÜÿ€‰QÇÑk¾÷O‡{ÿ÷Zøñù¶±—¼= ]¼Úüö|8î'OÃôïÞïül ަàügƒ/0&À˜Èsƒ¯Kà–¶ûA: Ýön9<óÃ`¹cäÍÊ ×ü¾}ÏU0ލ%òÊžMKà_׿ÃËÿŒzêr3~.|ó™_Á\:Á.XóD!Ìûobô5ýËðíû~çL­ƒŸóß |ì\ñ,üüôŸ¹ÑáÑ„ïæÃ5^‹ÛIƒ¯o Øß¢F`öÍáòà—}û½epÁéêV–Û^ú#Ü~ñ}0áúÿƒŸßû%ÌKü‡ ¾â™ð&À˜`L€ 0&À˜`L€ 0&À˜`û+6øÊ`ɳÁWá°¤ý ¾ÌÅì…¶M­Ð5x ïÙ =ÃFÃØƒ††®w7´µnƒŽÁ#`ø®Nèy0nÙܶ†ã=];ÆŽg°^5|©<ø`L€ 0þ& 3ø2•aç¦Ð¦èCzº`ϘÃaôh¯©·swÛèhí€Þ!ƒaȈC`ÌXÜ_^½ gìêÁ“==0d´{}þ4XÇhë Ã’”Á›\Ø!à•ÿ›Ý{Á>ôZfeáÔ™`L€ ì§–®_×?[ ç|ù+0鳟ÝO)ô¶?Yý¼óïüÙ?„3&ßÿpŠL€ 0&À˜`L€ 0&À˜`L€ 0&À˜À€!À_, 6øÊ ü–tíüÿ…ÅOü?úX;i22nnS4r€I™9qvïÜ[74AKÃhû´ÎýÑÝ0õâïeN N™ 0&À˜À~L »·®{æáã-`ü±“à#ÆÂ˜C…Aƒâ6WÜ)¥'ë{öìö¶6غylX×Ç>ºl. ÕmM™ž$9&À˜`L€ 0&À˜`L€ 0&À˜`L`/ À_,$6øÊ ü–4z®Zýò3°¦² 6®|>ÜãJ`Ѓaüôsáø‹¾“gþ§z‘1&À˜`ýJ`{×N(}ÿUx½~94oÛÒ¯iï‰?ø0ˆ Ì9ë pðˆQû#Î3`L€ 0&À˜`L€ 0&À˜`L€ 0&@°ÁÑ߇lðÕßÄ÷Žôzwï‚›?…|ÊŸ(!#FÃÈ#Ž„‡ e$L€ 0&À˜À#о«6wlƒ6XO{É F¯i‡:Ξ_Ó—#dL€ 0&À˜`L€ 0&À˜`L€ 0&°`ƒ¯ |e>'ŠŸÏ†)_˜ '~õ»IÝÏ71&À˜`L` ر« ¾V|;¼ü“ß°ÁCª˜,`L€ 0&À˜`L€ 0&À˜`L€ 0&À`ƒ¯„ˆúî6øê;¶sêÚ>„ò}F›—þ¹ ñƒÑÔ¡r L€ 0&À˜@F¬Ý²îy¥ >hn€SŽ:nþâ·`Òaã2" 'ʘ`L€ 0&À˜`L€ 0&À˜`L€ 0T °ÁWªSÏ_)Àã }C@Øôáøø°þýJ8ïGwCó²·`}Íkpü—.ƒÉ~Fö™¾I›ceL€ 0&À˜@šlí쀺 ø÷ ¬h^k67Ã÷Ïù2|}ÚÙðÏåïÀ_Þ«„ãÇN€¬ ÇÂIã'ÂI㎃GŒJSê `L€ 0&À˜`L€ 0&À˜`L€ 0&Àú–|õ-ßÀØÙà+_L@@ˆ= z{Aìé…=½=Öñ<–碿{ð[^}ã=òwï®NèÚ¶%ö·¿[­ãζM°m}=zÜÉpì³`Òù_…acµ¤Þ¾ÖUýÖ-| sä$~ð0üü;ø0;:ú`ô6  x :P~ão<¶¾žc¿ÀßÖ5üæ`L€ 0&°o¨+4"ß#ÿöàŸõ{uÜ‹úK7ê$={ö@~w£îÒƒúI~wǾåïnÔ_ôçåýÑðÑx¢áººwÃ¦Ž­°±}+´àßÓÆO‚“<¦y,œ<þ>d¨¸³{¬Dc0éñËþ“Ç9>ƒcG#ðþÁ¨³ F=eê3ƒ Â߃aþvÏG¯ËßCPÿq‹ž—÷G¯Éx<`%ß Œ¬ãE¿ñ¿##0&À˜`L€ 0&À˜`L€ 0&À˜`LÀ|ù‘é‡ólðÕ÷‚$zwï‚­AÛÚ:ØúÉjؽc;ôìÚ =]ø'¿cö¹Ý] à%Hƒ©ða!þ³ §2 6: ßÑcù=Xž]LÎËû‡t2i*rÌ x߈@j;[7BÛºU°½éã¨l»¤<Ñ¿yÜøÝ#Ï9×vEÇÎíéíFñññ¯üÃ|à?K樜#`ðð‘Ößá£bÇÑsCFŽC&ž‡M>eý¬&PX¾È˜`L€ $$ÐŽÆà¶·ÁFù×ÞfLuõì†Ý==°[eÅþváoûX~ïFìÝ=ÝÖ¹è}Òøªzq|—W¶SÔ¨ u4j’ÆNÆS¶a”4žrŒ­4FW¶A•eŒu < µ†Ï ¡Ö¸ƒ…ƒP—ûÙÖ¹ÃÊ{ ޵´oƒ]ÈÀ1B³ Ò0ÒXMæSk¤†×,C6dÓ 5jsÃI£7Ë ïà ¼7j$' =p2:¿Ñ¸Lþ¡1ý0û8ö-¯ Åóòº}Ÿ4hû ßËüC£ýñ†Ârãû™`L€ 0&À˜`L€ 0&À˜`L€ 0þ'À_ýÏÜI‘ ¾ûß85â–‰k^}6â¶B‡L::j2zË:\ý“´ÐË6Ø4xÈ>Ïj>L¶Æº¶Kïcò=‘mµ½‘m†mhl¶u݇0þ”óàø/þuÖöy.œA&À˜`é"ÐŒãë{8Ž.ÃñTþíDoWãcBŸÁoéåj$Sc"i\dYFHhhd!)FGÒHiz¡1:ŒHc¹¨11¶‹ÞQã;縧v¡!½ Ó‰^Τw3i´'÷¤Ÿ4;uÂd8õèÉ0ã˜aâ¡cäâ@L€ 0&À˜`L€ 0&À˜`L€ 0&À˜ÀÀ"À_,6øÊ ü &½=a,œ÷SØ…áNúÆUpÔ™ËSWEÚ+“–ÛV6-z VþãQ3n"œ÷“ß1ǽ²$Yh&À˜è/;ÑCè£Õ/ÂK«ÃÌã³à´£¦@ÖQÇY^ý%§Ó¿6£çØåMka)ö½±º>‡^R¯½àb#hý+9§Æ˜`L€ 0&À˜`L€ 0&À˜`L€ `ƒ¯ :}| ¾úðþƒ¿= ͵o×~ù8nÅxÀ•rïKn ùïüË`òfÉ]¾÷Î’2&À˜èg?ûû#–ç®[¾ô_0:ÁÎý,'׺Ðؼ×ÿk·l„âoÿáöšüaL€ 0&À˜`L€ 0&À˜`L€ 0&ÀöNlð•Árcƒ¯ ÂÏ`Òë߯9 >zJ¥Ø·’n[[¸íã„Ó>¿oeŒsØ`L Mö ôß–¾—žvú°Áyš°î•Ñ,À¾zÒY0|ÈнR~š 0&À˜`L€ 0&À˜`L€ 0&À˜`ƒ¯ Ö6øÊ |Nš 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ 0&À˜`L€ ì…Øà+ƒ…Æ_„?P’DÏ.€Þ{zð7@¯$  pà`8`0z¦`/% €ñe&À˜`ñP󀢺aÈcÖ@âí gP[‚!0Fâöò›?L€ 0&À˜`L€ 0&À˜`L€ 0&À˜À¾A€ ¾2XŽlð•Aø!i4ðÚÓµ¼ö iöN ‚AÃF :p¥fL€ 0&; ÚEORæ$3I`4£@£yþ0&À˜`L€ 0&À˜`L€ 0&À˜`{=6øÊ`îÏ_]Ÿ®‚÷×lBúC`ÊŒsaÂðä âÓåïÀš­Ý£&ÀŒ3¦@ˆ É'Ò×w¢'¯=íi5öêÚü,úh‹Åtòg…bÚ×ÙíÓø¥Ñ×ð1IyúêiûªW4XŒ&~.3ºO%ë³ÈSi?¦BéÛ]¬zç}Ø„ÍqÈ!Sàܬ ¦Ñïáº>…wÞ_ƒÞqÆNSÇ&×í+õP_h~uB¾kŽ«ÌÆ}ú{ßY}ÛÚûòÁï=ºÐ£×V!{.þìBƒ¯‘hø•ø£ï·‡KÏŸ®>Ù»1º¡¨óŸœuÌÞ©óâèOWC¾ÿ±_êQlÔ‹+{:`MÝG°iÖÄ¡CaÂÄ“á˜$õ=5ö/.s›DF¿Ó^®Í 'Îô|檙XKÐ 80ÏîÏ|xnž¸Nö'£T÷í5¬ÄåÎw¤‡Àþ1¿K«p±dvÞNÖ »yžD'zͤ¬MÂ$–$Ýw ¤1Ï7N–§ž:Ž9Ä¿l—<ø 8ë–…VŒ¿{m-Ü<ãû>}|ÀápÀP6væ;ÿÆœyƒõ3\½³cßæíÇT~Ÿv×ñ|aÌyðºŒ6«Zk¯‡d[²©$)­OY…ÕP{˹I‰GÃíÍõP›Y¿:ás¾ÿë²Vê žôi[”ˆ“Þ· Èm7‰°ìÕ÷`sÍסpð!GÂQÇM‚q{^¹o—ZzswF7ö€a‰7wôé·Ó+.¶xõžÙðÅŸÿƒ\ÌB¿v¯ÔùI&4‡d Øõ( ŸS„S?Îÿz>}fõEPjb}OŸ’.s=¢>>Û7åÚÇBsôLÀ€sÒ¹*Ï¿‚aîÏ|öç¼× ÷j2êÏ´Üêh²Ï­aé³ÌgÓJ`šß¥\r‘elÞžœxÉßÅ󤄬LÊÚ$LBAÒÃ@óŒs·—°6ÎdL`À`ƒ/Ã"êjxþòï“=ø³0ç37Ÿs>I|ÑÁ íÉ-‚?þîzÈÀ–æƒx<þÍ1p•µòž 5íåpFF ¾:`ù;+`ÇбpZoc{vnCï^ò±«ül…?z|ý†âèÏ€ÿÙ?¾þð?WÁMž—?z-œvÃ|+ôý ×Âõ§í?_pzùyP¹è¥ŽåÁ˜S®³~Õ´Âõg àFóöià%Ÿv×± ¾Î_fí00ËI\¤õ)»¨ʯ?#‰P4ÜÞ\µ™õ«]‹áŠg“2Pv1´—ÿd7¶ü¡+à”묳°Ï±Ðòžôi[ÞÛø÷>L û/Ë»Wû[0û  áí$©žŸ{/üú·?†“öÎ!3É\î_·%åå˧ßîkR=kž‚!ÇÏñ$“ µCVbÛ~O¸ñ³ã“å°ÝxM˜zLQ¼C‘1€ŒCê$áý5ÿë‚g¯ÿõg•CNI-üõûYêIí/¿¾ä…Ë\K®oO¦Z®}+ÇÎÒI€Î9é\µÿ×Ò™«¾kæ“©¹¹¿žÔ÷å6…þd”‰ºèW´?Ù?×mÂÖõ~?®ê]ýó+²ìkó»L0”µÃ7]¿uØþ©R¡SñÍð<)!Ì€5_®¬~øÉ™‰1/!ï°7”Oبø~&À˜€ 6ø2¡†aºÖ/„¿¼°2ùÐÃÑàë{†_t°H:Ål¨j)‡ÏM:@¿Þ(ÝA×­G£'ÜÒñ蓦¡ƒ“Mž(ý¶àï/[ϧÿ€!G}oámLì=;·G#íú~}É9ðË7=iL»²åöxM+àozëÙ×à…ºÇࢉêS¯ýÚà ñ ypÂm÷•E óöã©gIÿôkwènyUlC/1C>¦“k£v˜tÞýo¤õ‰.¢û‡ˆ^¡áö½Å2Ÿ:ADZ|½Æ_±Ú0ÀŒ˜Õ^¾žnýÝu oÚŽÎ÷á'#σçBef,Øø,œ3@õÊPYá›ñ”a níøñé·äá"#³rKá?}7Äá£âL€ 0é2øBgEfŸ_ÿµKÈ¿½ñÓÓÓ#üþd~>}ï9ñðÃ[¥o®‹Ë¢}-î‚÷DgÈAPXÀ"E¢¯www+­M¢ª¬PàûÆÑûäwn™èôƵ×ÿn%Ùv³EM{f3ÔRYã#j’…ÝÛ#z;Úðoµ¸ÿóv^¢ß×Üó”øh]c캼§MìÚ°Z¼ýän¹Ze|™X´!z=W›XZt™szøRâ°ïÙ—¿ÅžÞ„•¡½¶Øa„‹ ïçl«ÝÙRÙßFíМÂ7­O¸ˆžtL4Ü~S•q¬XØ]wmqÎ~Þ&vÛJºRóÆú»ÿjßÓ-šwV‹Ù¶¾¹W¬ØÓ%ww(붬 Êî'Ù÷YzåÓbÞÛÌ{=ƒmX~<ýviMu¥¹Î¸P\›¬r07¼¡IdEõüìâZd ˆ‹þbìb/øI8A?ÍÿºëD®Ýÿe—„žSû÷í$/\æý_÷R,×þ˜Sdæèœ3Ì\Õ_t– 0}ƒ€©½Õ3Ï<#–,Y">úè#Q__/8úÓâÌ$­~ ³ãcxªôtFŠŸÁÇÂe?ø x7ØKzKGjœ`뇮UOÁˆ“ìmP²¡·<Žñ8ì„ϸõ«7ZaGŒ?ŽRt°.¨÷X¾t5´ÃpŒ:äÈ£á³Y'ñ4Þ"QW“qI=ö˜¬É(o¬[\+>\;vá7ìP˜0ýT83kb\eçgǦaÅâ•°©Ãêñ`‰§Â)Öý×òzèD¯³‡7Æî¦U ø[Ö¯qدùׯ-k>„–XýšÃº_Æõñ†h?}ì”#á ôð%·u üÐ~;»:Ë¿=Ÿ®‚÷-†OpÑÕÕ{|ùKçÂØ€¨’î°Œ×4m7u\õdT²Ü’*¸ÝwwÇO¥ãO¬zçmX¼ô#ØŽm[¯¥ãL;e:ê?úú“ü<(Mã+f¡í“5°ñÓwáºóæD·¿Î-º[ÎÅüØý‘ús'z¿Üñ T/|/yÝ-]ú€¦2$]v±°)/¡õPо§’¯3V¹5¼ ']Ý ªê~c»»á £‡ ¾mOØ·÷¸ž=Q2+s™Lø¹ºMzÆ7Ó6Bç ïÖ±°­÷ÀâW_…ÚOZq®p \|ÙöEaÊ5옛Š\ñå’|]µÂš¬eÄ%jZ†qiNd"?1<§ÌËØpžé§«Ýz²z®ê·–7Ö.?À¹8.fÊe=©úï)šy + Ö¡åKa%®=mh툭¡Mƒ¸¾¦ª‰¸~° ×°?µ×,Ü8bGNã1]E}Ä[LæaÂó‰ÊØ¿õÇ´LâÈ&;[¾×ä†ÀáÇáüÈóÜÏõ31¿87ŽcØËß\Ë×àóRÌÕèñSáü ÎuÛ ÎgW½ «p~b=‡Áç‘g×ÕÆ=mŸâÎG[0†‘¸ó‘ºþh³kûd¬Ç-U†Œ$kžt&¶¶ÞpÍ¡ïêV¤Ÿ‘%*ÿÁ‰ž#˜¤ûžD·ÿ0/C¶eMùhºg»ˆo:ÞËçöÃqmoÕâ%ðÑúÐ!Þ£.ž…kYšuÜ<&×G†ZGs$LVÏwàAßöÇ4¥dûp†™À¾J€=|õ‰áÞnQó\Ô³—ôâUݨ;ÝÌ×ëE/z»(ŽØ^£"¢JºÃOmqvìmùlQ^Y;ŽÞ‡Û‹Do²þ·ŠòB×ã V|å^À·ªËj½ïŸ·ŠŠB÷müø0 ²óK-ÏdvB5E'ÞB§¥î†J×£™'ýœÂQ˜“åäÅë᫽®Ü7¬”+» ,îíy— òª¯…?OÞ³ ECÌ!B{M‘#¿7¿*O;ÇäÛòðU'~7ÍÎCo%å‘kók¿#é^ ^^çzùr=|,î|è>1ÇÃΖ3ûögÅ6ËØ¶·c“XôÐ$nW6;Üœ»<á6¿%²ci̼§\¼ýØuúð?x\ìèhóoº@{}æíåbWä í᫲J9Þâ<ùÍ.rÊÚ-¹nQS’¯ÍƒÍ(§°Âñ\ä† ß>ܰú#mûé¬uÊ#RT%ê*lïsž¼a™V6ÄElÔîðÍ…ˆ]ϲŠnpÀ˜¨©sŠ 6¯98ãOkm°®Ÿ•S$ê=}‚«ë£¬ó tޝ8Z“ñÑæoÛù!o1狪ŠBßr×éné•—váÊÎ IúÛ~ÓC©ÈÇáêLP¹H4Ï ªÇѰ©•yØv€Åº”êøfZÃêü–°J+¥yv{’ß:•æ>ÙrMT÷5cnJrQ±tSêß’_Ë ©š–!Ãï8ùñ“Å=Ÿj‡Ÿg§»Ýºy1›«j×0ÒV\KËuæu´}ÙÇÙ¢´:¶Àè !ZªKÝ5G/²Ã¨ówÑî3W$ñÑ~´°š®=šÌÿ‡ñã±ëi™œ¡ݹy–(()ö][Í.ð¬{•kP¿lëIɈ߿eâ2ayºòÎKu*±ÌFw½ë94á˜Í·¶.*cŽI¤cš¸,Ò–šƒð뎉ûäDc}²Üsµóv,vç6Ø×j=ƶˆBÒŸç”Ö$1/±¥ ú×Þhî£ÒùoŠJ}ÖýÂ2Œ¦fŒH®<Ó¯ã~^ÜHž©c}%í‡ÈÚ¼[OLtÄvQQ೦)••î*AkdnÙ&Ã/µy’Yp%ÔQ†•µU"/Nωê;e¸ÑY_æ£e‹ŠuBÛ¿+^¤LEÜÚ:¹/N¶¾¬a×£ËÌ$\ßc¡Túdûm·ÌÚ2Ý¥+Ñ3|7-·ž(®(y¤ÿ¦m>’ïy®­ä1¸4™—I Céù±,™µÅ0ý±ÍÎ$Œ–¿™À¾I ]¾öË-ýªDÇšWœ­}~…ßmÎ=¾7Øâsû‚î»Eä;|DT6E-”褔òØUÌ:EY®½0ýÎÊÎùùyŽ!I4l–ŠŒý©+U "²"9"77Wd{§œw*â œí+­|d‰Üü|‘—Q€Xq«[ztÖ•ª÷àáœ< ›ëQPóÊ•m9¨,. +óQyØF2­ˆÃÙ¾'Ë2þÈ+­³Ñè¿ÑàkÇâGˆ¬¸=ãfj|t¼VÙò†g–;†b®Á—-ü>YÌùÁ÷E¶gr0óž—pr›ÇµÏxŒ½¦] ®Áps.>™È‰sE¯»á6¼­ž¸³¿ƒéy¶ªt¹by[¬nci"OXƒ/W&}Y»í"ZŒ åc¯¬ˆUÏs²mÄ(÷ìbõ!¿IûÐW÷,­³NûÁ¶càyÚÕs¿É”«á˜›’\®´áëj4¬¾ÓÏo½óã2tÅö=ÊD~|…q.–q*ý[_´ÛX~L窴Î8k øÀÈ»'×ÃâÇ¢Aw[n¯¥/Éq5"rr¼óww]RyP©¬8…$è\Ù‘/›ÌÿLÂhùXâõsý1,—dø#šwG'‘몚õÝHyq˜Îõ“.×dô¤Dyèç2Aq(£hýÄyi¾;/Í+÷®¨DóÐ^ãG€\7I”5mZx2¥þÈ/ÑÄeAÛe\݈Dujû¼­[Û©õÝXc°îˆ¯¢‡^ 1➘«ŒÚŒO‹("ÜóÊÜ—Õdœt EÀ­É[qΑx^"C}³“yK4¿ JQŽÉè~f ÃŽ+I0ì÷bqÏ5s:§ôéƒie·Oihô¼Ë.ÇqD¬}[Ïú¼Ï¢×¼ú¥‡ú¿87Ö2ÌÊÖèG¤Œh®g—ú>‹¤ºŽËŒÌé¸JËÚZ[O‚+ CâÒæ-Éú~=:±œT•Iø¾ÇâhÔoÇJ …¶ìèÓäÙ‡[®ú#šwÚV³Q§ö>_÷ê_Éô‘¦ó²Ðz>f¯úã(G=__|– ì;Øà+íe¹Y<^½¢Þ»JÅ×.*.¥¾ñðÕ œ3ÙÎÛðÔRXY¹E¢®UþÖVÑ›iª?ZŸ+oë£e?}³ß´Tbeuô <|ØZK­ÛsE],-:ÑA¼ŽD •7ô;ã<Ñ…]ô2C&;Þ7ÎÚë+”¬b⬮ÄõÈ!ÙHké2û®§†>N¾eqbÞ‡4T–¸¢VO Á×¶wïsIWÒè*Ù¿žü¾ö×Ëkð5ó¦Çņ­n¼z;Ìä11øŠ/kâ+B=V©oG嗹Ƌ²p›ªÈâ z¡ªqÚ½YûP+Lü/mûÁÁ\¥<"èAtÖ‘¾!ö6b,jãvG' ¤m´TŽYy¢ºÅâé²DyÌ(µ¥Š†Éµ­¤v7‰bb@–]Lù·C³~ ÁxX *èÂ]üÛÔÉMp£À½‹eÉ×Có~.¾¹gª "±¶š%*bå“4îA´2±À›Z«]ƒkqÓ§N(‹û¤®hë²+šÏ‘Y»J¥.ô{Ûòɹ{Ú°OJ¡ŸpÓÖõ7_åmQí¢¹ú`ÜÖ5”þ ûëJåM»nQ­è¶q>(&}—B¢…<4WÆå.ÏàþËLVOžŸá ¾V‹[½2j,$=f=èxŒq×¢æ8S͉QXä^±Ê2ÞZKâB£$ôdµŽuIÏXWqlnÅZ'Þ7s½…I½ãü[Ÿ+ˆ'¯ê7»:G„x-Co]³iœ –9q6o_&n‰P=„m,¶n%1ÌÇø¢ò«ž¾ÊˆQØ]ÕQ+Þ ž¹²n¯nA9;»×O[˜Vñ"÷zø¢y¸P<²¬‘\GYrP™+ÆpYwˆ7‰G²7y,†¾¬°½¢½Vä™èØlÜ`}¥s–"¢¯£¶¥è19èÍÔÕ.Ðqz ¥}u~…kòEãÔσúf|•ͯ³ÖÕãu²k3®!º[»Gws¬êúN^ã²Ka|1ÖC=ý[üOó:ã<`’åBô–ø4tg‚úvÓ2÷<&;W×ÉGÏ™ŽoæuÐXç[´Gu¢µ½ÿho@óç9F=ÕZ×”«ñ˜›¹RèßÌ×2ÌËÐCUóÓ¼í™çG#†ç”q§Ð¿÷©Ùã~¦0WÕÍ¿¨^É/W=ww·ˆ²|{¾"§Ô6,hR<Èä•Ô¸F,ž0€ž¤­Ù½ß\‘dΕ]ÛdþgFgЮ¿ëY™‡´nèÖFëÊèKdÝ˸\éIÁ™èï2‘ÒPFvýT¼¢£Î ®ŠGóPIŒÂâ^¢óɦ.-¹NEõ]id™ìºŸO2Îé •¶K]ݨ/'ëyÊ\¸ïÆ¥ü“]w¤k•I¯ ¢¸qEíÎøY†h©t_¾Ä—z«ìŠG×%èy+Aó§*hÞaØalt.¦Îï´I¹'“Ò±LšAåÙ—:nPº~ë­Æ:íÓQgÎ/¯#e‚óÓˆº†?Çuo÷æ#Îà û· Ͻ s‹«]]§¥JyÖ(ûFú¼¨³¡Bi£tiCÛ¿+°Èœ‘ÎEiÙó\}Âxóÿl‚Œù$-|Ú«è4Ï2 þÏÈ‚Ç|?&Æ}O ý¶q[öa­­æÍ»=ÆÒÇbµ¥yîz'uâTi:/3ÐóÇ4“þØ$Œ>Ÿbû¥­@IDAT6øJsn^ö¼ã¹kþ›±|á›þË™^#„|Q³™PÞ&|«œØRD…ìTfÚ{A*9ÀÝQêb†öÀ‚J|k$.Z ߀n^ ŠJDYy•cHE2{’,j´UJ¼ˆÙb¨ƒ¼kd¥N° 1¦øO+ñô‘•ïz¢Jd(¢±Ð5l×4Š"ê×ŧì9ƒ_ \ã«ì"ÕÀ*‘á׎Årùlâ©K5øºQ¬3"k}ÇUÊïmmÔøjó»âwß¹LdKo^Ÿ¿S4êÂ]l‡ûšx{ƒmDÖ(s΃¸¡ê¥«wý b¦¬±¿'kmc¯XøÕO9oú(_†ò„6øBƒB÷Q ]F´¬Ýú…æé¸•(ZÕKo^ÚpÄ0†ÔÃöaKã÷­o?d2€ÌÏ4$’¦ WYwÌš·;ý¤RíKJ¤Kϧ¦0âÔ‹œ’èı¾¼ùf[“!ì´ª“IšoÂÞJS•%é~ Ã*žrÔ7q¢ÙiQ<«2y2ìù©,–i듾¦ÒÏyDP~R£-ú€Üy‹‘´cPrÊRŽ ­ßäÆç¼¾.+âÅÿ0jWæuÁëEW?ÓÞ¶âs­ž1í“”q+L?¡&ÿ+|ñ+×:é¯máګ݇ºànQΪ¨H~« †v¦ô Ž·07}‹ÖïÍn÷nû(¨ÿÂkÄÈ,Œ¬vìºï8ƒ¯ìG£+Ç8É2RÚ*Êæ]îô×7‹ê˜‘ÕŠ7îvÏßðlÔ»•mØ„ßo–ºZ¶‡¬uˈzðÒQÕS`sžpd[·ŒxÓB£&êý+*35&»ÜÙ†Q‘“ÄçäsK%Ù¾Ñ5øjÞÓ(nwŒ™¦‹Ç×Ã-™ÏÝˈ–ëå¬zÁÝâ¢ìYVœ·¼â¬ÙéÑ|ØÆeÑk›Å<ç%º°K+\£6×XŒÊ âÁ•QOjvzòûùBê!ÌÜàKW¯ÕqÉ6”O¥?Ð?H“u¹“zA^ö3 ZÏÛ©02v'š©ù7 éëŽé˜¯+Ð>@ß'Ó¹¾ïäM¥ì祿ÇÊTêŒWŸÑÕ7]yGÏQ^Ý”^K¾Ì±˜ÍÕý…t®˜Œo©ÔAs_õ¤™›È«¶“CràÑGÝrÅr1sS—+•ºJçHaÖ2R)CBT{˜‰ühQN¦RƉۭ¾ë§vKÆ;7ËþsUÝü‹>Œ/®Õ¬ê¡Þ]\P(JJËDU]tµ­³žxØ×É€ºxÄ™GæD=[zÚ ³´æ ®÷ðe2ÿ3 ƒrèøXóAã>¬þ˜” ÁhtHóÎü‰F…ë^„ƒc¸dZ®u°žDÓög¢MûÕúð_jlð´¡î:b¤eÏK½ù‰ÿMËÃ]77«Oñ±ÇŸ * zM¿&Ú¿kX^½Èž³Ó\ů;f¦ÎPv¶.oË™êXÜPNŒð%8|F”’9¥²¾‡Wƒd±eÒ§ÂίÝèSRÏ&Ö±ŒŽA ûRÇ J×;o±ÇVSQ™èÆwºÓŽóÞz­–¡ú+0I¬WöïÜX®A¸F’@¼cÙ¹ªvÖÄñùWÜ‹¨tguÍR߿۱ÊoÒ×Sc+Ÿñ6«O%oaž‡¯G÷Az&©ô=„a¨çdB·eÖ´duÇ4ï€Ïí©ËèýäE@× ÝüØt^f¢ç÷kl؇ëøó9&°/`ƒ¯´–&õî5_¬Û¹‘Á¾EQZY)*+*D…õ‡Çø»¼´Hä8¦¢F6ùöVD(ø#…Äõ¶-"µzÆA^g0%om(s'Ñɽj,’W\)šÚ=“[; òM2gâJ;j\\°ÕH0Ô´È[¹Ä¢™Z¥çûlí„õûp˜-P6ºQQ²0Mw;ª8¨Š›"³÷|-ºçkîƒÒ‡óðµáù뜰Y7=ëx£_ÊÖ‹Ä€ë£'Ý°Š‘¹GgpæÆý5±Hkð¥10Ûüº˜c/ð}þwb³7 ôf_#‹”O'OXƒ¯\çÍTZ@†eŠQ¸ušÖ³öA%Ò»iQO]Tv×› O•ygB–B»ÓN*±/qÜ×ú¶ãQ_ß Z¤—AÛÅ TwL”fGvë>šoÊ/÷k¸c‘ëªZ÷[&MËA•ÉÌ÷ŸÚçØoHÓÛõyJ¥Ÿ£±Çجü ç²ûVqìÚÛhaè<# ›øðÝ7H9)1|ÎS†ÎXàHàw`ЮR¨ êÐOmË/ë!λli» u+D^¥› ¾(Su¡ÛN©Î#ÅU¼ŶÚUtÿÅvºpšSó(è10su™5£¼åµ -O¸Td H2Îà .¾ò¢(«ø‡xÊúÃcüýxé½b¶G¯œK ˜pëB×˧íùËö€Õ,îŠØßîÖ…¯’­m#0j˜d+ñ¢áÖÎhœõÄàëŠRâ¥K_YÔ`Ê•ç¥y®±ÓÜ ýÖŒÔS5ª.sÖ.šWåzÛÂôèÖ”4L\~ùbrcj8*ÿÕâMâ½ÌŽSk,fo)õ-4„Ón¯©lÁijðE_x L×.RêÔ±•Ž ôÁ§ß¸,y\ÏtÜÕ̓úl|ET4íx]öºrÔEf;|ŸÉ›RÙѼ„_RÑCIUÔ¦Rg´:®.í9ÊÂÓ·ÓÅ{íKXú2OE§ÕŠHO*í†ÎuåMúñ­Ïê L’èŒv—§U},âz²ˆ^Lî?‰Û«§:ž¿´FÑèµúR¦fr¥RWif-£/Ë0ùIXRÒ«h›Ñ¿¥Ô§ç(•¹ª;Gp×è @€žr*êš´/sR©jKrœu)¿q¹¥¡A44µˆÖÖöh|~mDLë´«Ìÿ-ÃþÈ' zš¶=¯œôZ˜µÔ>k° ½î˜¡:CÙy¹¦Î ‹síy7îæ’ån/ š—Ô‚d¡u!î8%vþí&.¸´¾ëu,s†&ãJ }–Ìé+Õº8ŸeGâ¥ú- FG¤:F¾²Û…[@Ôk¡š÷Ý•)>å0æÆ˜*o¾fË^ÚOº‹åNÖ]]IÒpt,qÒùE|Ѽ…©®ŒþGnþÔ|Ó4½åï†qõSÙfÒ3G ¡¿ûg˽BÚœ’rž¶E7 þˆæ]‰Ü^_Jõ [G£mFßGšÎËܺ "Y=¿ûc³>œ åC&°O`ƒ¯4ëö^q¼{•¾¾&aÌf_®"o{NÒ}+.FQ: :oaQ •ÅvtÓž_ òóóÕ¿‚‘KþÙ ÕÄ0–%’“+ŠJÊEM½~¡ˆdŽbCEôf¿‘@ÅÄœh·Q¤ñAVŽ((ðÈŽy)ÈwF Æb”Mq­.U:xREÅï¼*qÜ/4øúà!w»Ã°ÆN~ÛAºFPèáÁëm+fl¥zs·ƒ”FT»Ö/ ú¸õßGo_ˆ™Ÿ¿@dM;Ùú³ËÀÇàëâûĶ8ƒ.bð•ຎAXyÂ|…+ëh)v·Ö‹ò’"‘Ÿ›‹Þ¨""‰XjeRMê– eÒ>âêŒç­ïNû¡“Í['2 Z×2…vG'«Ž"‹ñ9ʸo;ödÈùÙ-ê«ËE¶ßÜôöEøfѾÇ6ް´Ãú5ÊX_W|x:yñ? å [Ÿ'*SØ~Î_y…¦çz9tê.ȶ–Î$–¸w5i}JbRJóäÖå`iåUG6Û¨¿Ç"¿ìÏÂŒq Ÿþj[‰Xw„ï“HY‡ÉK"y2Áeꦞðm:ן Ý¢Š¼eMë§OþeVé[IN_‰çéÂW^™k¬ÙÝTîx¬Ì²·¬‘%üòðŒJÿj «_Òñ_Éé•WWÅyñ¢ÆT×”­t ¢×?+NŠµÍ“nø‡Žn=X¸l³s¿mÐän9ÛEº†[ÔàK–LQ#3×C™>\— ^À#¬íUâ"§™ëx7kÞÓ!žºazì!'zÿZïñþ…׫«ŸwÝy³¸bzûŠ\(NÊšûsy+iá6™Ž‡¯l²%%1£ œ°Ä€ |ÂYÞÊ"vº†_¾uë°ãé!f(’Ràÿ@€Žú±SÖz<ò,y3W7¢q§w|UÓ¦ýI´’>À‡1•Ýßgò¦TvfyQûº,AÝG?ÿÓÝIÏQNaëŒ"Õgh¾Ç„…·o§:Wˆ2÷z] §Çø ê\;¾Q¶fm&EŸ¼¼åd"™ªÐr¥ç}ÊEF¯×HyÊEy†­«´Ð‡%ò‘úHÓ S†­õÕ¢¬¬\”—{þÊ*D}¬Ó¸õ2Iš(—wügI­«ÏOB¹ÒUÆ>õƒÊm÷Õ}Ùn“a¬• Ó°Îü ½u8sxG÷‰ˆÜü"Q^Y£}©“Æ£/+YΞ-ÚÉmTnG>¼zþg†æËIŸÊíSdö>aižúcP&R†T>4ïÅîÖJ”Ú!ËU›w%EŸ4M®2¤V^Ó±㣌œú!"/ÑIïî ÌÔà ÎK›¿ -£“}Z¤ôÉ·)Ó pôš¾½¹Ò0ÖD üÇòwú¬d×3Tg(;§}DzFË8ÌX¬AýÝ5~³ç|¹¢Ö]qn’ŹIw;¿º¬KÈ{ŽÔ++†&ãJb†}£ã¦KˇôÁ4Œi»Õ‡SwÅðÖko)ÒßT¦øp¤¼Côo©Ô*›î˜Ê«cAÓÖmWê^§Ï“i„)S¿9*•3Žkšë‡Í)üz´ªç{åtY©_NÿæS'¤<éë£y4hË>¬mf~ß4ï¡ô/ªÏ$ÑGêêpT&¬ožy™"“öyy|nh˜°cšIl&^j>Ãö-lð•¶òÜ-Þ›ÿpÌàëQ±¢­'aÌi7øÊ’ 2Å¢ªÞq¿âÈ@~eRjßA$gÇž(è¿Ý7äq+ÉbjLå½?[•×*oÒÀ‘G‘!_³Ýž–(<~“Ȥä8žº²ñIÓO©ï7|Q£-±“ÎË–}nók¿sÞ¤¤a©Á×ý cÛ5zŒ°6¿t›öšÇÞu¼ƒ­]p§sÞ5îò–£üícðõù_ ®Ó|È|šÈÖàË©wJAéë—¼¥¡¢0IFªjgèö¡ˆ¤ù¡m?´žÒÉ O뺣X§Ðî´¤â#BÙ‡è]ÀÝ2VW÷ÜsŽìVXÿ2SäKª_@£¡˜DÊ8¯BïóPËÓÎOÀ7 ¦R™‚Û©ÍÊíçı.Õ9ohǶf$¢LÚ-wmFÔ•¶3i åOë¡Ïyš'= ?ÉC¶+š~Ⱥ ôõ4OD4Z¦NýTÒ 7¦‘¨}Íú$Ò^ÂäÅWŠØ%¯vý þ¶ë‘1_+iâeuÇëu1ùt´"*§Oþe´­UN¯¼éF »èö¦ôÍ'§-ÄБò :&UY}eð•u¡¸âÖÄ‚ÕÍzã,bØ‘{-_}LodE ¾îZä'n¥x‹ÓF¯¯j<|éÃ)Ð|éÃIo]w8åíRY†VhØu«mØâöê˜Ì;‰Ù¶Œ¸%f=1ÊjFe·G‚ë¾Ý«iù#†_>áš÷4“í) ¾|Û ne³|kR>X u×¹ÌÄíü?“/Tyì´Ö54n»|‚¿“_iÚÎøà´OÒø0Ö…ï3yS*;³¼¨õ%½c%å¤+÷h1èëŒ"—OÙ8Åw@Xxûö´èëÁíÉ®»´]ʼnè=r|£líô‚¿I›I‡Î°àïÍšò›ÖqZ®~ç•À~ú)oC¹(ϰu•öú°D>RišÁeg×·hÖEœ1ÓÎ~)„Æ­—I‚Õ·=Óü$”+]eLë ©Tn§¯§iŒ‡$ú¸CÊ8ì\•†¥åÓÙP©¼àé-ßì¼"QÛê«Ðxò*šâdÔž L’`Iå3[W 9gD¡i¾œô“[æW?‡ m0‰<;õã [&R†T>Ú¼{"Ôæ1 >´8\1nzžæÝ“lüÏ$Ò”´òšŽÅŸ?#4ìÊw½+Ùý¡ôÐé>¬.Á”“ÿèÓ2¯O‰R* z–Ÿ'‘+ c¯Ï-ôÌ™TDÃø´E™Zºë eç­ã´Œ½}®þ7ѧš&ºµ#Ž7~;ŸÉB¢‹?L‰]P»‰OJ=Cꕎ•ÃðcD Ã>ÔqÓõ)Æ´ÝêÃa;©v×̼õZ-Cõ•)>)oŸ6ª ŸZPåóþ¢ééXдƒ¯«ÏŠ…ó]'M¢¬ã¸&F'»"é×%#³õèà1_ËÄGvo9¥»ß–žãžQ%)¯W~mÞ=7%Ìc}¤¾œeBñó2*S²z> £Ãìy¥ýMÇ´ðý±ÙÜÀ–2}Œ|¥«@;>O<3ø*}St$¯‘ÁZëZ¦ÝÝ¢[ù N0‘‚¢,jËÉAq‰(..öÿ+Â7ýjT#ˆîÖQ]Q* rÝ-–hçîx€AQéà 6tPÌ*rÐ*Y#ÊQ6h|/JJdÇ|—‹–ØZUB6t1€¤¤ø("{Hƒ¯…÷¹ ¥ÓnÃ,Û¸K÷ýòM';aç<ô–c´•ŒÁ×¶…ÄX¬(êákWÝãN|²¼²¾s›˜ÿüËbéâwÅGuËEãº:±ÀI³ï ¾LåéKƒ¯î†2•QN(«¬µuu¢·)hjiåÎ⎪ÄÛŦ}Øaü¾i}wÚ­§!&FJÛÙî”°vš´û¼]Ÿ¯NQNÜdaT&ªkjE]}½hhhMu®uò¢ï¬4¨,!û5ÊØY¬óN÷AWeòÜèùiÚçP™Âösâ~Ò½Ù­Å¡ö*Af²O(¬ŠöõΛX®r¡²*?käíAÊÜ®25Ÿó4On]ŽÏ÷DÒ튦².(}=Í‘Š–©ShšaÛ‰[whÞ'‘ö&/:!è9š×þâK_q{ØD·Q\OS9}ò/£u·3a{3&Gøa>ˬW·©Ñ™ë!/&^‚/ŸgìHYV}Òq_h¨µB,íîÊŸ½UbÐ71RB¬–ž®‰qÑb)1†JÎà«™,¬à–ŽÛ£éSïVzÃ-*K8ƒ/·j„Õ%Ö-{ÄÿsŸ¶¼•Q`s+Öc¸­âqe,›.æ?-ž_´H¼¹z¥X´®Q,]éz?SÓ"òûni夾|Â5£÷°Âl{A%Ý_t»·Ø¶´î†î|æX“/ZEqÄΫ» %í£uc ;Ýã+MÛœæIúŸ>I¾ÏäM©ìÌò¢èi+)']¹G‹A_g¹|ÊÆ)ƸÂB™;ÊÉ5Ÿxue®ÈcЮâDŒ;AäÂøo”m¸6“&߇]\¶¼'h§qø÷„×ë„Ó6è'å¶®Òú¢Kä#õ‘¦¦ é¶ t­GÛFï4n½L’†¾í™çG¿åÈÕÇeLåvúzšfšÛ-ev®JÃÆ—O·h¨«¥E";b§ô_°ˆ½IAãñ“!®ÞS&>í¥“xy‹—=ü†Xw´Ó†æËI? ¹eZ¦}„¶þØÂ㫳ɖ‰Äð@›wO\Ú<&Áǯ\ƒóîIœþL"My»V^Ó±ã bDׇ½OË%ç–*÷ÅÑüd #¥àøÑ§EútŸ6dÊ4(½æ´‹¨˜±ÿD®4Œ5JÔºJùû=?ðTÂ[kZž;¬Ÿé®3”3>Ħef,Vån!;¡Äúk|ðï¼ôFn’…ܘ;¿ºŸLüR¯|ê{:†#üö­ŽëŸ.Ró)Æ´ÝêÃaßJÆjo½Ž/G÷Lp¸Äå­ ŸŽ:àJ¨Ñôt,hÚÁ×Õõ¾Dá|çŒI”u\y$F'»"é×Í×£ƒë–‰ìj)a¼5E껆kVŸ¤‘ñ3ª$åõʯͻç&Ó<&·n^FÃ%«çÓ0¦cZ˜þØFdÆËßL`_#À_i*Ñíuÿv¶sœ_ݘT¬F_>Öº‰L¤ àȨ¸CvßÛK³ÏõîN4ШÅùtáÍu_MG© ƒ¢o>D¾³µ›«,Ñm(ŠëÂIŸ ] ŽŸâãCÄ=_½›ßspÑÏ^$õóÈgðµ™l“ˆá[ÜìcðÕ蜧qè<‹QC±™·?+vhŒÏ^ø±mdÖ÷_¦òô¥Á­¯‘‚ ²m˜[¬yöÛ|n½t¯zŽ´ÏÝq?©O©ôs4ví1¾½’듲 «D“3Yr÷€o­¶'P¸ÐßÒ í¾8¶˜iÅKË’ÖCŸó”³ž…VZýÉ v•B]Púzš'"-S§.Ð<‡ÓHÔÚCÊ-\ŸDêV˜¼h¥ '3Á×N·ͲÇÓœ2<ÛI<‰×/y¿"gÀ"/Y¼Š([Èâ¢}%y“±¸NÈíí±<§¤Ö–*ÉoRý—™¬:!â ¾|· 2ôr¯­x…xÇ*^&ävŽ6Ù-"ÆP]âÕâYÎ5¿í½ÆIϧÑàË/Íê²¹Ž\ª–ÌçZbÀ6K¼ŠFq®Q×åŽ2k;Jj|ŠÇ×mUòoÝC¼¢©i¥Áà˯,w/רm$æýlÛž$FDÚ‡ùôJÿˆuØò²§´³pc¯¬³´£ã52° â븺õŸíõöÑ4N;|_ޝ4mg|°6ÔÝúLޔʎôg>õE˂ֳ´•î<4lÑê¸N¹%: ,¼}»a™«ãWøv•Hby=Ìøf\iy§¢óûÔ±„ù¤éÓ8”ºvÌ%åMãL(Œ{C_öoÞ~Úޥ͸ qFÕÞÞ.:;;É_;žsço™ÈšËÕÇe¬íß”4ÓÛnéXv®JÃêÆD·f¢VÝÚ$ªË‹ÝµBÔ'²ò+¬yuM±ÛÇ&û (™¾µ‰èÚ‰äAó?šzœ Œ–R–éï#´õ‡ÊLŽƒÊ„Üft¨æ]ï‹J+«_ßJ¤ð+Wm|$œïa†ÊDeä5©ir×Hpü¯Å—´Ý‡Æ9Ú-ö|ó‡ôi%sL™…£×ôí’ÈEtó±&ˆ ^£åŸìº# ã«sbÔÚµ’?Ÿ±ž†£:¿ßy™Ãtð¡ÞÆíy¸üÖ­MÉH<%v~u90ÅØÅÄÜÓÁP‘$ÁáËöƒ} ãú¦+…§i“úIÄi·´ïñ›CÑ—,i}WXj~P™âÃ%.o]ø´×"7MODz ¾®>+JN ßÂ{Í”i2eǵëG¸õhµõÊ©e’RßcVŸÆaÛ²kR¥´‡jÞ}ô¯šbgÝÒe—8¦ó2=?ím1A¬…iFŸd{'6øJK¹í5ÏÙÛ9>,ÞÛ¸;©X ¾è ŸT*Ñ›)(èŒSä;ƒÜüñItŠöNïC¢NÑÚÒêkLQYq¤’ºè ¥d±I2ÄA?înp¬™D6”»†4Vðûtââ¤WúÄlÈàIÒô[<õKÛ9/ ¾Ð¨êí».p¸À´ÅG[Û´FZ®ÁÖ&ñòí$ÌÅê6ŠŠ¡Ô]/kã¢÷Ø[:Òs¾ë9é*Æi—‰E›m9ÅcÇŒÖlÙ ®Ó-Måé/ƒ¯b{ §@ñ€ºiǺ[ã®wË‹¡ÛZw¬m?éx€²Ý)J°Ý7Ã!@Ÿʻ†j¯+Å7†sDnn.n÷ZoMN³íþ ³|1Ô‹Ov15ªðkŸ2 y¿Fâ%½˜@Ø“”çÙF~èÈcbߥû6ísRéçtr¨çÈè%Ñ1Ö¥‹g­ÕÎbAI‘sœ”%ŸI¾.«’é…mWæuAéëíz©SRÓ<ÑÇý¤ÜÂõI¤½„ÉKœÞàëˆ@ò„[ÊU×U8Þé ¯\ó»ëÃF©CØ œ¨bÕ…®Þ’_éÙ ãÈuú«QR˜Ë#¢Ru|êVó›Ê®.‰tȪK }š©a’¯W(רË2T"žº”ßhLt…Ãã1¯ÐÞÎñBQ¶QC5¬ªŠ7†’il©çÛñe¹¨w«p¾\#³Ù¥Ë4iRïW T#¬¨üÕeW;úÚÜÇq¶s<éÎÕøëE¶ì¸Õã: ³7s㺨˜Ä|m'iÂÕâÍÝ*sYVõ‹päSƒ/Ÿñ\Ñì-S{e•¥ý]4U•«5µOÑí\³\{´¦qÚ‘ôåøJÓvÆ;aCÝ­ïäÍ@_Þ‡ce*uF©Û>ã¥SŒq}»a™§¢ÓƉçw"Äøf\QL‹ÎºLb™öÑGSsIyÊ•J]¥}Œ®SôX²–a\†~õ‡œÏD~HòúÔôªÄeLËÁíëSéSõٰϦ2Wõg;Û[Ek»wµ,–"¾`±uœœRìÉ„ å)ЭÁµ‹²¼‘sþ\Ü2nÛgœ÷ëiU¸z¸Z§ÃÎÿ¤ìáÃhùd¤þ ô!Ë$VZÆ_4ï~ÛÓ{rKë¢iѾ5d¹êÛNYÈP™Ðü«õ3*s}Y®£wç—”8Û9fT&‘)õ}Z¦ý‘·îWPYÐkº|÷ûXc²î˜¡:CÙ¹ãC´R‹»ëénù¢¾•®wH­êêj,º:áœK‰ÿüΉß÷ q}Oaø1—a븾éJv´&º( ¦Ý*:†ÝÏ+eD_²2_÷¶¥!ù IÓ<ÙáS«4öøcšžŽ¡¾Ÿvãq¯«ë}îy×C® Z‰ÞEY$QÖ6'¾$Âèò¦”™C¨²«}Œ•fÀ32ÊÓ+'ב'¥¾'qÿ¡•'•¶ìÃÚ) ŸšwýË}ÑÂÑ¿’X[ ú:Ý}KE³ŽFÃ%«ç§ÖÃ÷Ç&z¾’oþÁöAlð•–Bío–Ú_¥bf¬Ó%3° ¾„ 8ýŒ¦*bÛÖEr …œ7Ô•æ9“Ù"ûuQOf©¢h¿@2g§ƒ.&éÜ]Sã1jð¥<àA%Dûе©"æ$" ¥‘IìCwWûªü& QpÔóz5‹s3øê]ÿ‚˜i/šÉïÏß(–®ß¤5Ôêíh/Üõ5‡µ|[çÁ…ª/j(@ ³l­åâÖi1- ?¿.š w¿'ÎÞŽfñÂMÄÈ Ã¹^ÅúÞà+Œ<ýeð_Ï;E…³µ]”o‰µšiÞ>œºâs°ýÐɉƒÖuW±¦õ;d»óQdé"­N™¬t¶¿‘[†m‘>ìC#ï¯4ôt˜e[ÁEf·›¥òÇ·C“~M"£¬€<4vpbBery:wøиCõ9TÙÏù C.Pϲ‘êDƒnÝe÷%QA\|ê„ß„¾.¡4‡¦ãŽi]Púúþj[š|ÓS*7o‹ñï“ÌóBS×÷?_WêmÏ®»ò»HcÑEõ×Õ·—ìrbõ_­êô g{ÓØ}–‡1¥_"ñ÷_éÕ›|œ‡¯T ¾Ð èùy®Q•ä~’ä2ç‰xƒ§/F¯YÜÜí©Ýö‘T™|Ñp@ Èì4—¾r·¢[é ¾š·WE ¹ì7,cå>o¥Çƒ5¾Â­2ë=_ëžuÙâ|ávóœíAÜ¢l1)¿ÐCYÄî¯å·á–Ž(¯ÎøYi{¹®¥yð@€zó“ÆõÞ®+;í郵„ãnޝ4mÕ`]¶NÒ„_úP^ó²3Ì e€õ,ÔüO" ú¤Pgüô– äÜk„EÜËäZ˜2ÇÈÍËÆ•,ÑQÒã›iL—ÎïÃ.Qþ‚ÊÕ|ÌM\¦ åJ¡®Ò>fÀÌ+2‘Ÿ„…èË2¦å@ç…}Õnizaçªt¬´ê >˜Ë³u¿¶åyøe ÁXΩÏXš)Zìõ7yOž°vB§ñHCq¯}Æé…b¼v6™ÿ™„‘Õ(ŽO¬nõký1-)kg‹¨­©5øWߤQ–bùÑ}ѼƒÔµÜE—ØíhÄh×,Ÿ²†X–«Œ”Öåx=I'¥{®_Ë$–,ed×OW"Öq}Ó•¼|Öai˜0í–†ÓéM•îVµ²£zR|š4î¸ö@û}D o÷o}ØÏÐôt õý´›q÷:éñ²{×Y4FuU…®qPI”u×$Âèò¦¬Uç¡Tö0ÏÈ$ÊÓ+§¯ë=À¼ïIÜ(òØõ)•¶ìÃÚ­ú#šw@ý8ÞׄGÿrŒyçÝx»»b„YG3Ñó Û¢IlƦßR_kéÉ5µõäù¢}•¿™ÀÞM€ ¾ÒQ~»Åü‡c_O¼.¶'ç@3ø¢ÛI…-§°\4´¢G,tCÝÚT'J l/rÁ&_ȹ}g]IlGžËÅ5¢ ÃHÿí­¸ÐPQD•ˆãMƒdT©h(w ȲDqeh•qµÔ‹rÇ‹†»¨ä>ìAï4y®·¹8Q^Ó ÚQöîÎVQWUJà‚ ièàNeq‹‘ žDÁ‘ŠO1yÈVPV#Zš/ªØ_èå«ñù; ¿h¾®¹ý>ñÂK¯‹j‹¾,æݦ,zɲ™SïÁ‹nÉ{àó·‰·ëÖŠ››ÅŽõËÅ“?&†[Óîb[7~ðÐe® $̆ڗÅý?°·r´™ƒ¸á±·bFi}cðe*O_|Õ•º)Õ ­Vo©¯E¹´ÞE9å•F=P™¶·îéôí‡ÔS: QкN'dÆíÎG‘Uß2C£®â «/iµÚ±ûÆ£ãaGyûö•V[í¾³½EÔ”Ó>Ä®‡y¢Öyû8¸šôkQd Än]‘[,êšd¹·‹úšr¥?Ie‚®Ï1ïçH5ð?Tó(k¯ÁL5tÊ~&«PP{/¿…¿óúºì/¢¼bÚ®ÌëBÚV0aÚ')öýD‘”­ “Õ!¢qšóud¢r«^Êú{°äÜ=èn oÁÆú܆Hê--õU"?b÷3øM Xh4ª·ÑèýUJK ·'è¿Ò «7ñ¾0ø’†L–Þ!ÙÇþny£Qõ~e?ÑíñÞÈÍâùubÝέbÝöFñ|éÍNxÏ#ë:œ8¨áV_Í{V’í Ñmνâ¥ÕkŪ«ÅOz2M­ÁמñÔ ÓÙ ën±ÂcÐÕ¼s‘ãýKÆ5·´J¬Šåí¥÷c7›Ó\ñêv;ÄpËÇ2 r.ZànI 0]ܵ Z,ÝØ,­|QÜBôT°<™|É<”áøk/ Õ%DÇÇk¤ ˜÷·êâ§:FÒmqdýÉG}¬Åj»R_¨.u½ýJY‡Ø¨þ£Æi·¾_iÚ€:dMC“h¨«­Ö3RÓþ¯ïä5/;Ó¼àã*ãùŸ]~~ßæuÆOoñKI=Ô·›s2/Uº _Éo†u0E¿ÄîÓ|t˜ ¼Y×|æ.òš¹~¸LÊ%=çÚcCºû7"Ÿ²–aX†‰3#if ?‰ëË2¦}=g÷]»5Ÿ«ÆÏ¿hÁ~òKDM}zöGý=ä·4Ô(kî A¢ŒÖ۬ѺտõÇ´LPç©)rtÖ¬B›{âöáͻԥ¤Þb¯}u¶6ˆÒ¼ˆ·º`V®2MÚvâõ¤`¹û·L¢²øÕWRoߊ½k&îÍGú´HÝð )SÚ&†i8oYÐkz]šÈÕOcMèuGÌc&ê eçå*ÇKÓgUÄ+9}ÑŃÉóê™%X–àbÎο_ NQ^%õʧ¾›24#|¶×*cXØuíD:®oºrNé£ßÒ0áÚm½ºžSdé­- ¢Ê3ç–cEºú™dÊ›æÉM×¼%ªƒ4=C}?íÆê^W ¾ÚÉö|òEÓ’êzKï’Ï?˼Ï?é´I”u\?“D]Þ”ò ýºùztð8ã²r þ%Ió¾'qÿAËשO©ÌW}X»5BDóné_ÙTÿª%TÿBC^wŠÄy´Æª¯'½Žf¢ç›µE“þØ$L”~»(ræ(h«îÝ}òY&0€°ÁW: £s(µ ¾JßLÚ24ŒÁ—ó–*¸®sòÂÓL?ˆGãª//p'ðr‚ïóWRkKÑ)ʉ·¿ûåùœâG`:©ò4‰Âˆºjüø!í”;ëEA2asJ†‰ÙÐÅ 5Mê½Ì‘-«H‰ßÉ´}@ ¾ä¶‰¯ýIy`æÄãÃþÖ'mƒ+ÛsWô{i‘ê,(žÇ®u=‰mx=ΠL û}±à™xôǯR¶tÜ3 s¶‚¤ñâ–ŽA×é–Ž½4œ–^ž’•ÛlÂ¾ßÆeí5&ˆ“+W”—«o¸H†%èEͤ}øf vAß~T%Ïn¡4.šG‘µn0lw”‹§oª-¥†]ú6_á¾kF÷Wë_4lnq¹(²òØücÛI$j‡áûµ(5ï[K:¹ìs*OJ=þ˜–ƒÚÿÙ÷ú÷9°Ÿ³cþv=xY‹pB§ô±¸µ:Vϳ¢†Žqùö«>çiÙéYè$6wdLfu!mK—mzŽò´Ûƒòí×'5 º®Ÿ èûŸ¯->XÌ‹ÖɬØÄÍ}°dßã~'Ó?AV>–ºaÔ#R',îjß_´ Øý ="uYÕ¤mƒ/gëA4.Zå5\ ý›+Y<ô[ Z^µ¶/r·€Tê¬:N\S¦n¿Hü ¾ 1b–x~»»µáŠ7T/^çXú³s]eÔÊö&¿iú2ü¥+c4zßKÅn\Þt¬pÅÏŠ»9cyFohõÔS—O™PT9½^¼T–¹\\ä,hDÙlí=~ì~Æ ë‰—–_Žª[˸Íúù@À}›5n\À…tgKUš¾ç8¯¬NÉ^âqoï«ñýœy‘³Ðò@Húeg€Ê®Œ¹}%¯qÙ¥\²4žÿÙ ü¾ ëŒê}6üü›Öc§/°úöT8™·+?<ñç‰|V} ß ë ¹ÎOdói/ñùñœ±û5™7Mfcnä’bÖUÚGÄõ™Vö34¯ÈD~<Å­ûÙWeLËAé«QÓñP'?=g:WÕ­%tÖ—'¹&åñ°™L9£·lË»WLø† Õ@Ûé#ÉiŸ+tŒÉMæ&a‚ ú³þ˜–IP]¤õGw¬»4å"˧$æMȎǬ\1t ždÇîÿýÿÙ»ø¨Êsà?–°¯ #¡@5Ѝ h,j±šÒ+¤Õh­@[ESþx ‹Ò’*7¢ˆ x¬¯€WäŠTQŒ"´,$Õ„€–Èÿ9Ûœ÷ÌœÙNCÂo>˜™³¼Ë÷=[ò>yßÓÙ&Z)T#÷knP‡¶Xɳg˜_“Ð5n窣Þå>¦¥âùˆÐjšîõN̽&–öWï¨ùIJOèï¢ßëU#Ç} ‚«V/?ƒ”9‚Eî-QžwÔÚ§Ö˜œ­,zÂÿçÍ.¶óÆ=×èîú~žžI½Ý#"]³jô7RÛ…y¾UÉxÏ[çHq¡¿¸}Œý3»ãxwoH{i¤zøÅõûJOÇ€]¬pŸ¢F»'Ø×ñà߯«Ó~‡úZÏAúû@å­Ã´u¤ã2ÜϵÑê¦Ýoì.”ò«ep}F÷ûhùk„ö·­œ_ZÛx»öD¿~¨êqìù\VmÂܣݎ5µî޶wñµFs4Ò‰^G}»Xž×%¯àߣÅôóiÐs¾—{šúO½ì£i„9® PþOZ/À€¯SÑ„ÇJª^¯Ñ€/¥sãöyrYŠÿuh£=—5­b¸TíXY•:j‘vÃ8æ1ù ¯à‘¿ª¬*=L‡P¯cªæ­tþ€»E ™Ü£z|WU^¶ýà¸Ñõº½j‘üÅàÊG­u2?}HÕ¡ª•ó²ÝYÕK¦r”‘ƒ‚KÝæHU^ :hXÍ#[ª î¸KÒF'NØÁVVÔžMUoÏ–‘¼® ówqjÕ}SŸ¯ú׿w‡îk¦±í•ß™zUnßTµp‚2rWà!£jÉçJ°—¹oå–7«îsÉ{ÀT­û·PVXõâÊa’Þ³k%àë×fyýLÕ«.Ö{éZ{T_?ï²þãÀúô§>pÔËKyžÛ}l½ê´õ‘oVVÝ?0´}´sb½þ³sYÕ¼1A’ƹÿùîÜ´–»Ÿ?òw»Y¾ÛÝÁ#[òå»}ž1 ™•¦ Ïÿy'Ç ãÕ ¾ ¤'v¬œWu»‹äš°È@S6—s÷9u„?ËZÎ[=O{•­wŽ&ë\‹á<Œÿºfmïš<׎ÚÛ•wØÓ:Þ¯MMã«:Ç¡‘Eü×¹‹Vµþ9e4;ù+¢°ËÌ) ÌkJÈý$Ü1f¹û±Ki½ŸWñ 8·b ðvM’€¯ê\'b(×i÷5ËT¦ü5»6Bè›Ö#aÊüœÛcÜ®O²ïýÏ­ =öƒÒQ§@µG:Ú(–¯1\¿ª[Vµ‡ªüUÚHTw˜ç02Ÿ™zP `Šõóæ÷Ü_~òØj×`¨@Z‡·W=ûÈ]íÏyR¦‹Ò'V-(زÿŽ Ï¶lCiÈúÝ'÷W=xV»«êýÃvÀ—–ï¿Ö¼TuÇ@s”.óyõ¢ô{«žß°»êßÛ_ ¤}Ë‹Î@³@™OV=xÎí_µä{gúöv¥U‹žSGܲîeý«þ$£ciÛm]÷¼s´¯t­ $h.ÓÜ6L›ü»@-ç:§Á±BÝTŸNÓj[íëîÇK@ŸØXið‰)àë¸ý—½ÚôÌ߬_äú¬¯r¯0ºø¯òì°È~ùAK÷ˆŒ0ñ¨{Py¯ôìªå[BKý¾kX~Jˆ÷çkÏHïnýÆý³š÷—*¯V—øÛ®šuñò ]]çᘩ:¾ÅþËöÛÝŸ«Õ,B>‡½¶WÓI2Š¿mBJqA|÷7/çŒ×gþèv+¦­Œ¡]ã¿çž‚rY÷p¬F¿¾Eø]†ž¯—6´ å=!õ‰R&Y]mñçlɳ¦Î[/?«†ûùëÈ®5U)¸êó™öl=æÑyU;‚™¦q’‘²•Ÿ!Ï!èòØ¢ª]!¿³;^µÞe„-¿l)ýÐ7vðYö›öˆiAñþÞÑË>á|´ªj¯ÓyüxiõXT;/ÒGþß~»½jµÌ^°Èµ]e6—g-m oíêò{†E?míø0йK™jo`ÕêÐGÓµ±W¹çýž£!¿÷³“wýî™õL¾×Ä÷{G£Ú§ó˜Ñr çj7B<÷b9”~ˆçô?"±S²>9v”Àƒèe±Rpß.†Ÿïܳ’¥Ñw{×x ­½¼ÜW"µgÍ>ã†m»0¿o­îy»Kÿ™Ù?hþ.¤WúýÒ7'³_ìPûœleé†{[Ú;òõÍË1®”ÆrÕÐíwŽëô–Ї${}PÀ¼$|ïéµ~_¤¼ËLëËʪ–g4~O%Œèÿ ÓÖZiú†ÙG­›û=7üÏÞ~mø„+§m%AåÁ}ÅR¿ø¯=ѯá'çrk­}"½Ô€¯çV¯¯Zä˜eË<6¤_­×¹ÓY±øòòz^y;â+›ºuMœ[ZúÕ¹&©å;ÕŸO·¯×òû*ÊQvP®OÚR®6ç$Ëùí¼õ¹$íÇÒ¬+ð‹'7éëdê8 ÿaÔ\Ò±ÅvýòVV+ã݇“Ø_uܹ°Úßüx'ëjŒzj³ž’Lň¡±xø}8P^ŽŠ#úCŠÜSÛâñ<ëy(·ßgÜ?NH–Í™= LÒS“`2ü¦Wè3—ÿÛ·0ø‚áØ¢m5f1Šf º7Fîe»öúТeCynjˆs]îe•潬¹ã^”NÜ_ý8*UlÐPX3˸Ï\ßù@K;–Üóê5D34ˆ;um‡Š}òóÙfMå~ؾmôc¿F®rü”——áPàø9'¾Ÿ"Õ¾&î¯rL”û凪ãÇåg†–Q¦ŠT¼u5Q^3“i» Ø jê^©çP“ÇŒ]åSl×ve‡¸>ÖLÛx¼¿y9=?óÇÅäyãSqÏõœùi?V¥¤^Ú0Ö &¢>1”-m\3çí)þYUÚ«âÐ!<¢=k¿Kk*¿ãjý÷?r íÛkÿ.ðœí#ï#ùìÛ[øÝaÔí•6õòóŸ—}”,C>žÖã'Î6©ø|&Zö¹ŸZUã¯){\ ´ß)–ÉïVõÇõ¦8ÿ‡Ò®‘ðÚ®§à9é´¶Iÿ·KqE—_@ÿIqÌ›8>'=òÏ ÒJȪSÐaË]ƒ÷š¸~ïhð´3±¸Ö £Mb)‹c‡Ð/§Õ.4ûðK<Æ}ˆd(ë¼ý^;|µk"åØèÔ~°~‡¢Ýš˜¿C)ÿèqœÓÿ?õŒ$Xã\~‡±5YÇ@ÄòÖàJŸô™”ÅÚg­5éê’·çßGW£œ§õÚ#嬱sYñÜ4û\ú»Wô%29Æ_!¿“”ç¯}eæsµüþ(´LI žòœæé÷hr^Åõœ¯•Éã¹÷õX²ò²O™,§U  îh‰L£ß2J FA?7œV fF ÔNÿ·˜Ÿ3k¶­Ášƒ¿ÄÊ7ÇÃùæßÑ£ÍëœL)*Á¿C©Ug©)gÀϧD´ó¤@]`ÀW[’_ ÄOtÖU'qòÈ!äË}”¯D¯Vå_¯>êK¤;ê±ã²Vµ K P Ö øQòùBdöÉÄfÙ=ý5c‚ë}'p Jþ<³Ú/?¾ûüuü¾ïH|b¦n„¬jgå9"<\¿ž7÷¿åÉ¥xdÌõ8Wþ2ÕïÛ‡æ>€ÛîÕ\{/Ö›Ž ”«ü»ñi#q÷ßVÛœimRª]K'¢ï°§Í:ÜŠ㺠Ûë# |¿uþœ’Ž×͵w/*ÀŒáò;G÷2“á(PçêÆý­Î5 +D P Nÿ× Ô=SöJÇúCoB$‚¯Ó#à¯(Á’i™‘ó‘a-ûàӣÄ\(@3_à[dÕë‚'Í‚ÞþÔr<1æF´7‡òÞÜ?"í>3Ú ÷cÇñø‘ò;”3¿~,!Î,|YíÁÒP 6 0à+­Ç€¯⟠YË|B'V2è«:m!A^õezIÔ÷6-Qu²æ¾ (p¶8ÿRÛªu¯GWâóÉ××®):ÌÂ’€¯J üòörŽxe¥qÑ#ÿÀŠÉÏ8ïÞŸ†Ën|Ô*¦þ~Q¯K°e“1¥µâ÷ ‘uýyúWǨeÖèÅocPò™öÛÌÝx¦wWüEŸ7Æ*ì%¸›)(­E½ÆÖ “ñc™Î‘/ P€†@Ý»¿±e)@ œÕò [·ïZwÂ…?äˆ+§ãXpŒŽÈp –ïz?;ã~n(@ „(y*οáaÇú^½zaÓ&Ç/8’¤Cˆ_(àM€_Þܸ(*À€¯P“Ó¶„_§úÌÍHFúª:~T¦w<._§r‚¥3·Ê§¤dÚ<² ’P/© Gö:% L„  ”cæ¥çà>åw[龉¼Ééµf*G·º“‰+«N@{o¼Ñrüwïó0Yñ¸é‘ÅxfòÐ3g*Ç  kÓ>4àn¼´\ÿÚëVîí?KÝ6èu;ÍÕߡ¸mÆe @tÏgBŸû>Ð7|lM¸šûÑÕ¸(à&À€/7•Ó´Œ_§ º¶d£Oï_—km©Ú©-§LÝÈéO-)S£(@ˆû¾Þ„¯÷ɨœ!¹sOü°ýø±áWÆò¥yìÜwX<’p^­ñðcß·ß`Oé$µNÂ’Ãh–Ü ýȘþС#£#l*؉ÃǤŠmÎC X+‚ûüûðMqo†¦Çàš¡{Ï´oÁQ½íË/ @@ ®ßßå P€ @Mè?7|Jýç†dô¬%?7ÔÓ¤Ꚁów(ûK*Ñ<ùGî¿C©kUg}(pš|û¾Æ¿¾Þ'¹5Â.»B¦O=M3 P Î 0à+MÊ€¯â3k P€ (@ P€ (@ P€ (@ P€ (@ ÔB|%°Ñð•@|fM P€ (@ P€ (@ P€ (@ P€ (@Z(À€¯6¾ˆÏ¬)@ P€ (@ P€ (@ P€ (@ P€ (P ð•ÀFcÀWñ™5(@ P€ (@ P€ (@ P€ (@ P€ j¡¾Øh øJ >³¦(@ P€ (@·¼@IDAT P€ (@ P€ (@ P€ @-8c¾þ0ôH-ä«^‘.\¨'‘‘Q½„¸7(@ P€ (@ P€ (@ P€ (@ P€ (pV<óVS½žÝÞ8®új±J={öDóæÍQ¿~}Ô«’W\)˜[g¿rØËîµzŸE‹éå1bD­® O P€ (@ P€ (@ P€ (@ P€ (@ œg—5Ó3bÀ×éñvä€/¿P€ (@ P€ (@ P€ (@ P€ (@ P€Qð¨&W3à«&u™6(@ P€ (@ P€ (@ P€ (@ P€ êž¾ئ øJ >³¦(@ P€ (@ P€ (@ P€ (@ P€ @-`ÀW_ ÄgÖ (@ P€ (@ P€ (@ P€ (@ P€¨… øJ`£1à+øÌš (@ P€ (@ P€ (@ P€ (@ P€µP€_ l4|%ŸYS€ (@ P€ (@ P€ (@ P€ (@ P  0à+Æ€¯â3k P€ (@ P€ (@ P€ (@ P€ (@ ÔB|%°Ñð•@|fM P€ (@ P€ (@ P€ (@ P€ (@Z(À€¯6¾ˆÏ¬)@ P€ (@ P€ (@ P€ (@ P€ (P ð•ÀFcÀWñ™5(@ P€ (@ P€ (@ P€ (@ P€ j¡¾Øh øJ >³¦(@ P€ (@ P€ (@ P€ (@ P€ @-`ÀW_ ÄgÖ (@ P€ (@ P€ (@ P€ (@ P€¨… øJ`£1à+øÌš (@ P€ (@ P€ (@ P€ (@ P€µP€_ l4|%ŸYS€ (@ P€ (@ P€ (@ P€ (@ P  0à+Æ€¯â3k P€ (@ P€ (@ P€ (@ P€ (@ ÔB|%°Ñð•@|fM P€ (@ P€ (@ P€ (@ P€ (@Z(À€¯6¾ˆÏ¬)@ P€ (@ P€ (@ P€ (@ P€ (P ð•ÀFcÀWñ™5(@ P€ (@ P€ (@ P€ (@ P€ j¡¾Øh øJ >³¦(@ P€ (@ P€ (@ P€ (@ P€ @-`ÀW_ ÄgÖ ꈀßweÛÿ¥ÿ+—÷#¥»ëHͪ_†ÍZ¢m÷KqN÷Þ8÷Â>hÒ¶Cõe  (@ P€ (@ P€ (@ P€ ,À€¯6¾ˆÏ¬)@ ÔÃ¥%ø$ç·¨Ü[Œf­Û¢Õ¹íѸy‹:P³SSÿ±c8TVŠŠï÷õêáÊ{sѱϠS“8S¡(@ P€ (@ P€ (@ P€ ( |%^Ë–_ ÄgÖ ê€Àçsþ„Ýkÿënû-:v¿¨Ô¨fªpäÐ|0ÿ®¬DÚséÁ_5“S¥(@ P€ (@ P€ (@ P€ (Pó øªyã°90à+, WP€ @ Ÿüm ª~‡ŸŽù£ckù7xý›ðuÅ~ñƒï ФU t<¯ºt¹ý®è†ö »Ôù/«ßņoâçóÖ¡~Rã:__V (@ P€ (@ P€ (@ P€¨» øJ`Û2à+øÌš @ðU±õ-´»í…5ì‚§_zw÷ja›ºµŠ_u«=Y P€ (@ P€ (@ P€ (@ œÍ øJ`ë3à+øÌš @ðµã´Ë˜-5삉“þ=ÄAGÁ??Ä ~¨ù«o¾†_vnø^—?0à«.·.ëF P€ (@ P€ (@ P€ (@³K€_ lo|%ŸYS€¨Ñ¾`Ýg÷ãeúƯÞ{½x]¯}ÿ‰¹Xqk7[âDvîEé?’š6C»Ömp^ûhho¡òŸ8¿¿š4n ÓEîÃ7{"©E3$·?M¬¼ŽVà+IëÀqHZÐî\I«mhZZ‚åeØõý~84kÙ çŸ×m]g]<ßÑhظ‘^&ÿÁ2|]"ûIÚ~tîˆVþAefÀW¿R€ (@ P€ (@ P€ (@ P€µV€_ l:|%ŸYS€¨Ñ¾®Âšül\ÞL­lžs&¬†JÀ×b3àë«OÞBæ=/`³º©ö¹ï-XóØ­¸¼­IåÃócnޏK3“žõ÷À¹ ^Æ.l¾ey`\…ÅoNÀPkT±ÃÅxbÚaÒÛö¨cÖ¶§<†?§÷t›U˜#—M›ó$®Øñ6~6}…µ¹ù~‰¤ÿ¤ß$h9À€¯. (@ P€ (@ P€ (@ P€ j©¾Øp øJ >³¦(P¼|ÀcFa’ðõÕòçÐû!+xª n½íR4۵ўþ±û](Z8íu3^κw x VçOÅU¿Áè+ïÇ«újIëI«´PÒ2BÉ–®\ŒÁZð؉=˜|åï0ÝJ¦ïÜÛXµàÃ@ÐÙЉI@š,4_VÀ—õ]{ï?`°ëC¬Þa.í{vÏжêFò™_A üJ P€ (@ P€ (@ P€ (@ ÔZ|%°éð•@|fM P DøŠ<¥ãÐIObñÍ'0:u‚ 5ôw“ðÜW¢½9˜WÑgo ÇXc¯ç¾Š;ºk#g©_ƒ±òíѸ¶cÊË+дmkøÍQ¸€K°òƒ©¸¶•í?¼k¿<„ÞWvC Y¤™M|üIL½±‹±áÑ}xæÁ1˜ ”9Óp| ¸ IÃ[i…õá­§ÿŠáó´ 2·QÍðeàò P€ (@ P€ (@ P€ (@ P .0à+­È€¯â3k P€u@ zÀWL{|$®h ”—–ãó—bz`úÄ«°úƒl¤ì}í2f‹†WÉ]×:¦ôÉô·êÓ?ZÓ5ª_Ï™IWJâÊË÷ïÕhó3ô%ÿúþspO´°fƒ l'ÓBÊ(a÷jA]·<€Š‡®qL݈òMè{ÃÃúH_w=þž¹±£¾§ð5@¦ª¼ß9UåÁM<ða¬–-Ÿÿ_ N»À9­#Gø àó(@ P€ (@ P€ (@ P€ (PËð•ÀdÀWñ™5(@: =à+\%¯Â«ÿ›…_JPÔîÏ¢ëXcFt¿ýÛ¨ûlÆj™úQ{¹|=½àUÜ}¡3° ؇‰WŒÁÓÆnúÿ·ÞöÜrÓ5øY¯Žf`W¦eÜ…GeÆ‡ç¼ Acç([k퀰¡seZÇnúú@À×€{Q:ãz}¤°ÀŽGwbô5ÆHevYk9¥£MÁO (@ P€ (@ P€ (@ P€ @-`ÀW_ ÄgÖ ê€@,_ý\}VÅæMÑõ]зOo î× mÍQ·¾x5×LÿgT§¼,Á]ÚdŒö”ŽnUZBþ}ÛðøS/ãÑ·µ)•—LÃXø_Cqö`ò•¿ÃtYõð 2JØåÎQÂÔ<\¾úŽCéÜ›ð¥Ðò#(@ P€ (@ P€ (@ P€ (pö0à+mÍ€¯â3k P€u@ zÀ×UX³&—7_Ù}2ÂWgm„¯¾wa÷Ü¡h~SsMô€/+ ßÁ2lܼ‹æÏÀÓæHa·NyóÒ›á ák’Œðuë¤'1oxk—@Ö”ýe„¯Á#|1à+È‹_)@ P€ (@ P€ (@ P€ (@³I€_ lm|%ŸYS€¨±|­ÎÏÆUÍÂW60M"º`ñÛ¹ÚÑú+ì.±|ÙIØû#v%ãå¬[q÷‡²…[ ÙÁ øVËê{gÌÅôíõ¤eeÀ—MËO (@ P€ (@ P€ (@ P€ ÀY'À€¯69¾ˆÏ¬)@ ÔX¾ÖHÀ×å¾p´¸æ^¼ ytÿ9þ‘›µ©åu´ÿß|Øþ&L2ƒ®Ôé]§t,/À´WŠ6âZôêØ µtcÚý÷âQåËš¢±èÃÑ#ëÿ´µzßÃx~äåÆèb²íÝ‹IZ0®‚°Æ€/Í„/ P€ (@ P€ (@ P€ (@ Pàl`ÀW|%ŸYS€¨§$àKv¾÷"R0‚¯t–¾WahóÃxëÃͦÒ`løìwø±>ø—=Z—[À×WËŸDï‡ôh- ë‚þmZbõ:+àÕ7_Ã/;7’tËðÄ™ÖÑœê2ÂØÐ-•<»þú4žIëd–ˆðux'†§NÀ[²µ[¹ V¿‹ +ÞÄÏç­Cý¤s\rã P€ (@ P€ (@ P€ (@ P€g¦¾Ø. øJ >³¦(P¢| Àšüû#ðe:ìüä-Œ»ç}EM÷xúþ_⎟tA}…ðõô‚—q÷…æh`æNû6­ÆOÏÀ«@.+µKðô ãq÷åÆôŒúÒexíÙ¿cä<3@ÌÚ— wÖXüá'v°—¶*ð5`JgÜ„ œ1-c Ý¡MMù¸LM©•Ù/|ÙüD P€ (@ P€ (@ P€ (@ Ôn|%°ýð•@|fM P „ øò^µ(ßW_Öhâ? ãhßÊ8kھðïà 4iÖ¾Ã'оã9fÀ˜K 2uäîòch"yù*öíÍ© ]6õºˆ_^å¸(@ P€ (@ P€ (@ P€ (p¦ 0à+-€¯â3k P€u@àÔ|Õ”0U`ÀW.¦(@ P€ (@ P€ (@ P€ j¾Ød øJ >³¦(P>þ;TmÅñBý† ë@j® ë–¾†íŸåãçó?Gý´ª9i¦L P€ (@ P€ (@ P€ (@ Ô´¾jZ8Bú øŠ€ÃU (U`Ïbí÷¢U»à]{ MÇóѤe«¨û-øŽ%ø¾ø|W¸\?½GO>[ªÏzR€ (@ P€ (@ P€ (@ P€uT€_ lX|%ŸYS€¨#{7æ£ð½×°oóœ8v´ŽÔêV£^=´íz1ο& Ýg¢^ƒ§0q&E P€ (@ P€ (@ P€ (@ Pàô 0àëô›rdÀW€‚(@ P šU'NàHÙw8~ø`5Sª;»7HjŒ¦çvDƒÆMëN¥X P€ (@ P€ (@ P€ (@ Pà¬`ÀW|%ŸYS€ @ lΛŽG£÷®±<˜0(@ P€ (@ P€ (@ P€ (@³U€_ ly|%ŸYS€ @«Øåã®ÓÓþÙ³¢q«sj$&J P€ (@ P€ (@ P€ (@ Pàl`ÀW[ž_ ÄgÖ (pJ*vÿÅŸ,Cñšåè~óHÔo˜„mo>N?¹®Š»œÒü˜(@ P€ (@ P€ (@ P€ (@³U€_ ly|%ŸYS€8KªªN¢ê¤ü;qBÞÍ'üúç“Ú² å'µmdÙÉãGqìÐ~=T†£Ëpì`¹ñù@*v¢I›Hî7ÉWýÍÚ%ëºG¾ß]Ÿ¾ƒ]kß‘íËÐâ¼ ô¿ɨ_[+ÿÚBûܨE4Hj„zõ ^í_Cýs}í³¶ÌZ^¿!Œeõe™¶M} ^½³´%Ym P€ (@ P€ (@ P€ (@ Pàl`ÀW[ž_ ÄgÖ j¹€„UñÝ78øÍW8X¼ÚTŠ'Ž_þiïϾÃ8qÌ'ÿŽêïZÀW=-Hªž4¥S՗Ѹ¡A£Æò¯ êKà•ö®OjŒúÚò$í{#Yç\žÔ¬Zžß ­:÷@R³–EUÀÁ¢í¨(Ù‰ã‡+pâ¸O"3Êu'­2J`™¶ì¤¬·Ê|òø1½ì'ýÇ$0­ VÐPe”]+sc)[ãfhظ©¼7EÃ&ÍŒwý{3aì‡hÝåB½¬ ›¶ˆXV®¤(@ P€ (@ P€ (@ P€ (p& 0à+­Ã€¯â3k P€µT |ÇF|»z ö|þš¶;­:õ0GÍj‹Æ-eä¬Ö2bVKù,#giOÚÈYZ@W] KµL lÓG"«<¨(¦DfŒFf¼Þ· û ô ¯Î©éH¾ú&1¬a-=Xl P€ (@ P€ (@ P€ (@ Pàl`ÀW[ž_ ÄgÖ j¡À¶%s°{ýûèvÓíúÔ‰ÚH\|Å/P¶í ü{åB)ß‹«îJF'ãˆ_ñ+r P€ (@ P€ (@ P€ (@ P Q øJ”¼äË€¯â3k P€µL`ßæO±qþ_0ð¯‹ô‘»jYñÏÈân|iš^®KGN:#ËÇBQ€ (@ P€ (@ P€ (@ P€p`À—›ÊiZÆ€¯ÓÍl(@ Ôò¯7¡ê„çô¼¼ÔæÌ¨‚oÿ>|¿eο&íÌ(KA P€ (@ P€ (@ P€ (@ P |Å€TS›0૦d™.(@ P€ (@ P€ (@ P€ (@ P€ ê¦¾Ø® øJ >³¦(Pê×ôu .5]…*Éà¤üwBûÀ(@ P€ (@ P€ (@ P€ (@Z,À€¯6¾ˆÏ¬)@ ÔbèÕ´a=hï|Å'P%_>‰ú:v2¾ý¸5(@ P€ (@ P€ (@ P€ (@3E€_ l |%ŸYS€¨¥IõfìÅWõ´€¯#~÷U=EîM P€ (@ P€ (@ P€ (@ $B€_‰P7ódÀ×)Â÷W¢pÛ|ø8”„ŽçÿÚ59E‰×Ždüû‹ñÙ–")l:_ښ׎rŸ ¥ô•nÇÛKu»®—÷EÇZ}èø°}Ý(ÕN…Ö]Ñ7¥ã™@Ì2œBmúÆIõp*ý|¥Û°nÛ÷ú9Ð튾H®Õç@|؇%àëø>Ò—o\£ OÍ5êT¦eI×DšVÚ|¯•{ ±£ø{È­IÍ:âÇ)àõ2âýxâý/ÒÑâÝ5Rª\G P€ (@ P€ (@ P€ @"ðu ôýßãÛo‹±·üŽ;4h€¦M[£ÃùðÃäsÑ0LÕ øªÄ†ÕŸêZòí.¾½kw¤J¥È‹ý{VcdÊ0,W6K™²ùãû*KêþÇÊ sÐyP¶^Ñ)+vb|ß6u¿Ò§¨†æ¤cPv~ݰ«\‡ô΃¡×&%;óÇ‚GB¤e¿\G×®£ÍÎëkRÚEÚÁ\çCÁê±[‹nWR»£ïNÆ—þ¿©ÌáØ¨Ah&åEÛðÅÆX¿©ûË}8"›4mÛ?ìÖ—]Ö ½{†ÀøâÙŸ£ïÆ9ð·U…˜xåÙsÔœ”¾?ŽâuŸà«ÇOk[†¶¢û’Sy:•iY¥­‰4­´ù~¦ ø±zæH ›âx Ê¢|ôõxîùxâý/âÁâÙ5bª\I P€ (@ P€ (@ P€ @"ðU-ý“(Zÿ!>Ý©¼æÕ ®¾q:·’9¸‚^Õ øòm_€ä~÷Ø)fÌGÉìtÏ#*Ø îO•(X·‡“ÎÅ%½»ÆY~–f%cÔKÎ2gÌÊÇìÛRœ ëÈ·Êâl,:ŒŽ=.AWe³Ê‚yèœ:A¯eΪÛûì Ø¨nÓÌ‡Ô ë†]å øÄ€¯X 5@@ßg6–MCÔЭ=ËqNJ¦Ëi ®k)£{i£|Y¯òm+1õ¾áxê#kI¸÷4<»ì¯; kÈ›^‹Ëî3Îù…ÙÙuý¨8^g¯íŒì¡9mÒaœÊ@ðiy¿‡O3L…¸¸Îø £CŸ1Aõ‰ü’Hñ8Ä—çãÉ·ã’A¿’¥å¢(o4<Ɯէv} ÷œèÙµvUŸ¥¥(@ P€ (@ P€ (@ œU øªFs_ðÞÿ² É={ M¸aCæ`¯—VuîÅáÒ´s姺* >{¤Œœ‹·¦¯Öñ©9y>žÔëyª|-=¾Â?'zv­«/ëE P€ (@ P€ (@ P€¨ øòÚˆþ=øÇá¹·«ÓЧs ;µ“ûñé[ï¢ÈŒúj{ñõ¸1å\{½|òð%£ÒdÊ´m˵A¬”˜¯´Ü|äÖÖžWéj X–#ÎÀª’ÙèψþíÈêÐú_i³P’w›#ˆ¡ö(ÄZÒ=˜žš‚ióà¶V;]c X‰5dza;5x‡vgC‹+uT´ÅÚå³öNK ;/PŒ©ç\ŠV2Ú>眾à+à«ü³9h7èA«ÀÅ£°dÎxüô)1äǾŸaþ´ÿ‡ÿǾY¤?õÞ¸«w`_|Ù_†ªÁÕº×`¹˜ô™-°}qúџ›_‚Ñ^‡õ:ÕT¯çgmÀWøçÄSAÌ4(@ P€ (@ P€ (@ P€8³ðåµ=Ž|ƒ¥oýÓū典åÏz…)úo}Z¤çÐì‚k1äÊdGn^¾Ô¶ìùóQþø(ƒ}eÉtd“]§#óWîAá7e8Ž¦è–¢MX‰í6bGÉ>T–Z´EÊ}iD ÊRl)ÀŽïEÅ1ÙG^-ÚvE¯+/wL/¨¤¯Ûwî äy¢xVú%´ì~ÒÝZŸÄ¦W&`ÔŒ|}—YËÖâ¡,©}gtj9òkq!ö}€~CŒi qX¶ön´;îGËä®èØdø¼/Œ‚Fó•nÇ??Ù€¯¿?„Æ£‘xœßåB\tq×ÐÑ*”zuËæbY°æS~M¥Åz⪫û¢£5—?6|²Û‹Ëe}#´ít.¿JÖG®b€Qû ×wÏzL<Ƙ®oä,¬%Žû¥={t uJGét›ÒÅŸáó‚]z[5j$õIé…+S:…§vF>ê+|µe;¾«Ðjb”µWÊ%2r]…µ qò¡pÃØ´=Z™üس½eÇåh=§ º ­„å=v:të·âùdTœÍ¿BÉÞïÄ@êòƒóqaïÐc5zÀ—W?J ·¡`çìý®B?6äÀB§½pU˜éKK ·cï­ÞݤÞ'°aõj|)Ç uÂàaýÑ.È£X8>Š]¡ØIn#|ùåÞ¶QÎá]{%ÍF²gڴ—ö”ãÕ=ñxöñïß##•IºMe$"—sGÖì/ÞŽ‚,©iôèê6$¡WoDl_¬-hK‹‡ÒßÓd´Á¼°£ VnéSY×3›àà‚Àñi\o×>—ëOl…5¶2¾ŠñP‹^ø›µã¯Ÿ@ÑF²õ=äÝ÷gü?¬‡(kSñî¿ÿ×›üjÀ׳kwcìÅ~lýìs|QXŒcǎ‡–¸ì'ѯ›[{™™U”b“ܶ:ï—õ»?r=AK±õkãþÐU®³-PMŸ¬Åææu´cO\#×Ñd+ŽZ®£_|¼[‹Œëè9/@Ÿ~²>Ü¥)Žò8FøJÍÁÎ¥c¡ŽÏ9BX ×E8"wD4 wìë׿öÙ¸¾7TîßnçU<åSŸô´Äµp÷>Ï÷b­”!i:.%æup«\+ËNRó6HîÖwíá~¤¥îå5Mï×í~òÕ–¯°}—Ÿr{Ôž.èÞ —È=Õí´¯åÆ=ÌWZˆ/6lÂ.ý^`Üzõ¹RžuXá*ì²<þû‹‘ˆW» "È5®pw9Ö<Ö÷,4Öœµ ãå!Îïo‰®=”¶óÙ1ìñíºÚm—=¥£yMn í¶³äˆ^ÀsäY!ìs—™¶¶aÓÝbzæ±Û8úý:®gL©ÓË3P´çİ×ÅÕx¦õYÍhwãïç–š ?S€ (@ P€ (@ P€ (Ÿ¾âó l}òà,yç œ% ~p9†õqdçj¼µþ;}ŸSðeÿõ¾Œó„ü½y80#Cròõ|¦¬Ø‰ñ}Õ®j£Èó2‘jÌ}ˆÜEyØþçL3HÌXoýŸš5Ÿœîèì–î\lXƒA÷Æ´±6¼gLY„Üñ7Hð“ý²óLCÞ’!ÈvO`å…c‡­sž |W?OW¨®3>WbNjgdÛÖ86ÑöŸÛr†YßмéïÇò™"sŠÙcéHIû"#j-ycûw ¬±ë%Óhægã©C ³,†¼æ¯/Á`¬@FŸQF–c‹4,ÚønèäÖUìØP¾DªoЧäã¢o$%ÕBÉY² ˜3ÙVl‡š\Z6¾4‚ú˜+·/Ç„~™§–=ÏL >.Ô„C?«NËÖÿ ŸÝ—Š)ÆaêÜ8mŠ”i¼]¦Ê Hï<È0K‘à‹|gð…¶så†9t“­§zÌïÁâ©0f†€Œ%7%OŽÕ´À±)àË«‹¿trî 3–ÑY_ý[òÖæ"­‡rÆø ™œ ­Ô©9yøÍ7™8°bœòT˜Ò“ÝìöcåÌG0bŠ1‹K–5OM;¤'þ}6ÌIÇ lóZ´J®E½ƒ¯EʱìÒ¶^½ÝêÓ2+à+hã‘ó×cFº}ÎÛ«ÓéêñaÚÊ €/ûØvý±SŽõ“ðµïÃéè8ÄšÊqþU:½¢^JöcfZWd}dä4àOoãý¯Ñ¿Ø_)xdöo±mÜ‘çR t™òe™ÒŠÁ26ñã‹W¦¡ï¸ð÷‡Ì©‹ñl–s¿M/܆ËîÓv¼»vÞêw3žrÉsáÆÝ‚wpó¥£ðaÈú4¼½åEÜÔY­|üåQ¾R²—!¢á"á‰ΛB ÔsSîÝ«JòÜG´T®Z`Þ*™ê¯„;¯â/_ð9z^ \KƒKî¼W¯µ¿§i÷ûå¾òÈèL¼æ^­=ÃÌ]ñ†÷µ¯:vªîŸ¼¦éýÚí! óóŸAzŠr­SÚ05gr»ç£ßm$ÓÐ×”%1¾§Ð–xº¿Hz^íÜŠ¢ÞƒC×Ï%}›{{v wŽ6Žt¿Žvü„>cÊއg ¤ÏÅF{$…¹ŽØ®©ˆëYÍÄð~n4ù (@ P€ (@ P€ (@ øòÇ”Ž?ÀOGô ’îXw¾0¾º]‡!}::ró2—ct™qÆÔcþ‚HN5ƒ©2æ¢döð'Ô »)H˸ؼË•ÙÔœÒ)Ö7°Yñò©¸4SéÌOIÅÈ+„#{?ÃBeÇ´ÜU2¥¤ÝIæž§‘ìOþø'Ôâ/AP)^U€þs×bÚðüC?TbqÖ­ó’3z(EÊ…‚|ôŸ¿·Ÿ+_îáKv§_)æeö„§g“š1Wžl}g¶Ã${I&ö7Úϵ^)i)”/-t2Bª¬—áwëÓ¤­òBÛÊ­¾K'ÝŠQ³ƒê+Ó;”õÇÚ÷¦!y§ðeŒ‘WâÐ×/a¹²«]cKßöÅHî7ÆÞMZ!cÜM8çÈVÌ~I©o%2ÕZ¡ìòÑÕIKÛ¥LiÒ›guĪA8i2U^Þè@p–•Iø),+±`\çÀˆ#Úö©i2òÑfDZš’½D‚:úëÉ©åT§tôìâ/ÄÔ}ì)ÿ´2dŒÄšÁg/-Tfa• Iª·ó%õΔ`­à©ZõBj"ê¶ÆÂÐÿÃØm_–~i/ðø»xÿ÷öýáÛe¢ë¯”ûÃÅ©¸»_wþîŸÈ[f\‘¦‘ ¤~qîî<ÿ?Êu'°R>\'ëåúìX?äyT¾f_G½”§Ò_…íïÎÁÌ·¶¢ëàñ/qÚËË9 ïèúŸ3X0{É6¹§„a(]3=‡L1R0ïñÛæÙÇ“zòR¾àstd³÷!×å!yÇz/6ŠœæX-ÐSbÆI«rÕѯýMìuÞe:ç|™Î9¦™=¦éýÚâÃÒ¬d˜q@zeSÒF⦠›bë yF0ª¯{Í_ÿÒ»šwGë:¡–ö)ýº›|(¨þ1^Û­¼<ß_Nm{h¦7Êq£TOwH•ǰü²›ä¹d2š®ªþ³£z¼«Ç™Åa½ëÏ5#e¬W¹‡êÇœuMÞ³©)#Ìr†w¿< v < jÁú¶´2~é~ííÊ})ø>i#ô( Ñž¿ê~qwáYM ãýܲjÂw P€ (@ P€ (@ P€ ª#À€/Ïz'ñժױ±ÔH ñ.Æõ?IA‹†Æ÷Š=xÿ£/)Ñ—ß4 Ý[9Ç‹?àËÙù˜»ª£õh‘=˜)Á?Sôž·,Ú–‚ú‘ƒ;tô‘¼²eÄ&³¼‹'!50œÚY*i÷4Ó²æçcrº\°gÍ<¤¦UÌQKfF-±G 0LRFæ`ÞC¿B²äÙ E4iX)lÍN65ÏÅêpÓ6·:÷Ì]£ç ”®žŽžÃ¬Q72°dã“èqËu &bð=ƈRóÀt™Ûd¡_`902w¦îkLMUºãzQ:¹f¾â•ȸt„Ù¹_}2mc²9Š—#@Jê¬vþéYóñ¢´¯5`áòéè“iÖÕ1eÙ~ÌIïs ¤e/Â܉öHm•…+1¡Ïˆ@}ìc΄Žðì¤sÎ2M•2™"jû©êr%/µ¾j‡°£MSÆaÅ’‡ÑלN®´`)îLµF[KA^ÁHëØê¹a§åÝ¥tWCLë”,ä¿•ëD“@Ñy÷¤ÀŠELËÍ— Ió| ‘?Íï®Ö&êk€6Ícµsµ“ó,]Î3=¢#ó×þé=ìÑhœ.#±vï ôÐÎ͸÷‘؆0)vÓ)_޶õîm§íá“â•1k~{èq 6‡Æ›+þí3i5øuVþF´˜y)FiÑŽºhöˆŠÚ®¡×>3Ao­Uâ¥_uÆ2Ÿd옚1jrþmøc›~æHZiødÏôkð5`Â|¼6ùhoÞ¶.yßnue`]é\®Ž¥˜Þ¯4Â|åcüu˜}(ùDQÿÑ,–ºŸÕ¾’…‹ÇÍùî§ÞŬ»ìëèo.¸Ù1ʘš¶¯h%n¾h¸9âWÖI=.—zÈUÝSy´€/ÿÉ@QÌÞÎàTÔïŽQ‘FÎÇ^Ó$67sÞã­ë‘ûyå­|aӪƽØ-Mµ®©Yy2rhšï/ÅÒœ;Ó9gÌ]Ùà ;Õ+ø³·4½_[ö¯›ƒnƒ‘$µÑÈ­Ÿ‹ºZº•2úÛ5Q»ÈK½H`Z–»YOÚy:?ÿEÌ|0ómÇôû!ÇŒ–²ÚÙH(òÿ^ï/Þì"—E[«^ërä™tl ‚¹:ÏŽá“¢\WýB¾d„ÔÅnÅ;»Z—JPXO3(Ìñ|¡þ1ܯÏ#Øë3¦#àK=®”â„{ŠôœèvžjIz~V“kêùQ©*?R€ (@ P€ (@ P€ (A€_p¢®òïÃÇo€’£ö–›5ŽÆQm®GóÕùòëqu÷s­¯÷¸¾JW#½ç03X([Fwšk̰ÂÅ2Í£{ÑDbæ¦vôȼ4 ÎI„œ##¦É“ŽÉ™÷çbí¡ÍX~(KÇò4’öɈ=ÉÆˆ=Ò!ºBF!êkö‡:F#“<×î&$êË%ø#h_u«°Ÿ•` ­³uçÒÑå˜òVF‚š²L¦Ÿ»Æ‚1òtvfÍZ[‚Ûz4‘KìÀ+·ÑÖÍLÇà)ztDƒwê«£¼Äð¥vðE øJâÒNΩ@­Ñ¢|Ûet¸~÷Õ•ý¶IûÅ b¿Œ8ÓÍq&%KFÆšlŒŒ¶]̧9^óíãÕØD-“ I° vìµk‘´«ÕÅnå©Zظ>éØMtìZíeí£½o¶d¶MƬµ2šU× ¥ê¸.Ÿ‰?½²‡–/ÇuÊÈpV9Tg;:G)#Ý͈8Ò•¢òîfguLk›¥ÍÂÞ¼Û‚‚L€âÕóðê–Æøñ»â'?½íŽÚ#YżœÛêuÆn¥|ê9¯tdWÇ[M=îÏŠWZîZ¼”¶RFéɤÊÔ~KSûi‹ÔöÉÒ¯¿ï[×>¥.ږѯ?ÚVÞ^­íÂ_úõŸõ +gUô}Êè`ðU,_rÙsŽðeüe§çÃK2ªØæ¨b3Vbü•²£o¦ß“‹Oäþ°ôà¯P´|¼Œ¦§¾d¿_É~zpš`¦máûrš÷3ƒÁ†<¯vL¹vÆÏñ“ÉæuôÎù8:óÊqëÇ;ÿ97?£EÌ(_Ëãðåå¼qÜßTó³ŒÎ4IFÿ›­u¹þW®“ä›#GÙAÆ®ç•Çò¹¦¥ž—îÅniª@¹ù{1:%G,æÍø?4îzºöþ ®é|ç õó’¦÷k‹ó~2eÙ6yF.£5¥÷4§*–`û‚pƒ;Ÿmu„P«V{VNEÊ#ˆÒí™ÍÚ.øÝëýÅ‹]pÞnßÝÚ^߮ώáÒŒz]U®çjžÛ¨yêѸ]žŸû™ÏÏãò6bZšó騭ÞÎû<ê…ܯƒž©ãxÆôþ ä þw>_„¿?«Ï$ˆãYÍû¹å.Ê¥ (@ P€ (@ P€ (@ Ä/À€¯øÍ{ìßù1Þ•‘`¾$ãúôkq®Ú»dnoÀWÁõàc4 uê5=¹ýkÞmˆ 6ë%¸ª«’§ÚÜ d•Ý4¦N±gmæÝNÛÙ­å¤N‘i"Ç÷ JÁðe!mþk˜Î=m‡¨y˾úôyzêvÇzpfÅË'Ét–F÷|†ŒÆ4[FcRÓÎ’ÎÁÉAƒ¶œS¶ÛÑé¥lâúQÍ7¸ Õu#e´”!£¥¸[«#;dÉc“]¦$Há3H!ÖÑ/¤Î2¹/9ˌЮŒšv °È1ÝW–œ“瀾¯¯…»}hÙ²š¶hæMÜGøªIµ3×ÙŽªG*–í\ŠD Ü»«]©ŒÂÑ30ŠÛ¸Ü%Ÿñtl®\ BÒó²Oøe;y¥ŽJTzÛ™‡~R¼Òrd´µ±ÉÀÑÍ à)SÍÍL5ç/^Ž—fêiíöc¡0Ù¡P©‹¶z|º_ûB‹ë’ÖÇ6â—b©¹ÃÛÿ.ÇMÁq(aÛƒ‡Z\„¿éëS°dˇøy熎€¯à©­¤¾^2 =oNÿšþøxã÷½­Ußí`2%0Kö¨€¯ÖfÀ׃¯mÂ_‡8ƒ,ìý€¿I€ÙD-ÀLymze,.§Ýé*›¸~´Óµ÷s ø’ÑÂâ?o\³t,\73S‚ɳ$ t²9U°¶‘#H¹«÷”ÀõÎcùÜÓRÎKñŒ÷^ì–æþu(àÜ.îoŽkš=U²»XòvkûXöÓ¶±÷usörÀ>Þc¸®*uW¾hxÖÐ ªö;˹j»Ü¯¥,^Ÿ1ÕgG=”©÷˜pFÁÇU,®¡kZ¦j]í?ìð|n)õàG P€ (@ P€ (@ P€ ª'À€¯jø•¬ÿ>ÞyH›m ½Úuî‰ÎZÊÐ%‡PT¸ ¥‡­Ä›áª´4tiQ)‹1õœKaŽáIËÊeõÔt ›‘¯ Bíè 7-Ÿú×úÁEþý…x÷íX÷ÙVlÝû5IµËÊÊô¼ Ìy‰‚:ŠRŽP«´Ú»³)ÞNæHbQóV;ÓrQ”:Š”VB75íÜ|™V3Å9þ”jíœâHK1|'§±6üÿj¾Áí£®s+S8kµ¬HÉ@ö/·Ïç,C”!g†59Uì¢^Ë©]­’©i:;ÕVɪHF²r¶Œµ·ó]5°ÒR—ysñ£pÝ»X±j¶~½_— œ/rÀ:eœí¨œqÖ9j£×JÒº9dbNUhmŸš1CúÆÕ×\Ž‹»†bxÙGu³,­üŒwµŽrÞ™£·©ûyóvæó7ÅËj‹B àècpdKäD3rƒÒ ­é@Êè†Ñ k-oÇñéz틹„!¶>¹¿iw­9Ý¡sÔ¬CT`ŽLùûÀtoàz™÷Õ‚ž•kÚØËôù{û¶-@ó+þ / øÒîËßZOÿ¹ßíÀƒöýaÓ—öýÁžzÑðõìZÉóbgžj™fH™Æ•É^onYŽ·<î_€—sÀ*C¸wábtè3ÆX-#@–È´ŽÆd­êÔsrŒmüiŒ LõüPÏ+/åsOK9/ƒîãáê¡.wMS‚Ð3%Ým³¶NÅȬ!<àj\Þçâ(A§Ö>Ê»‡4Õ²Åum2Ê¡!#+rwT #›ÈÝñͼdâi¹`5Z „T<Ã<_¨×ëÚãL<Ò7÷v‘J`­S}ÕcÓZïåÙ1\šª™\gå$ïÊõ<8Pʾ~Ë·ó×cZº1…¨Ïr LÉ”»²L½;n>˜vCŒA‰J»Ý¯Õ²„9´’»=cFª‡¶örX¬’@ÃÞF@¬º<ø¸ŠÅõLy~4jÉÿ)@ P€ (@ P€ (@ P€ˆ&À€¯hBaÖŸÜ_€×ßÕçÔ’-Z⪛£K+g@W‘„}ª„i¯¶—â– u‹xFørŒÎ ÉedOÁ Î%Ùÿš2Åî\͘‹’ÙÃÍŽd5ÈÈ9b‚^6ó¿ýk¦ËÔ}9ú7õ¯ü‹WÎÄ¥#¦¨›†ùì R;žÜ:¢:™#uŠEÍ[íŒ ÖP+çf-ípjVºöz§—µ>Ü»šopGžº.k»,ár ^ž*Á†KÓv¯U¿{-S¤vµÒwM[mShSîMš~ÔÚÛù®Xvê2çÖá¾).2šÈÌÿècŽn{c¹³•äÄST ǵ«çecØ+p/8•4ää=„»ÒR”Îîø÷QÝ,KgNJ•ò©û9·÷Mñ·I,˯@[¨£%Êu´H®£Í¡ÜÚÆ½.Z¶®Çg,å‰a›Ö*ešÄÎiÕ ªè»ïÇÌ´®ÈúHÛÒ”²ƒ§€ù2]ãeÎÑ´´­Ë?™Žvƒ§iq÷‹2jFOýó·ïÍD×aÖ?GþÏÎOÛNáË-Ïhe²×;ÓõRžp_ŽáἉ¬™kfªL¨ Ù£åÈܹö(rn¨S«ç‡ó¼Š¿|îi)Dz‡{±{š¢W¼Ù¿ˆ –I—ƒ‡¸ )m"6èÜ+Þ4Õ²9S ÷ͼ¶4Ø€qɃ`Œ©n[çr{4?ÅS¹Î©[«×ˆÀµGÝ ÜgÏ÷—šiÕ×ylÊTÁŸÃ¥©šç¥s)×óà€/H`WªØ%@Ëqpv ×Jî ʶ‘Ê¢læöŒéùHÒU‚+Ï®j£r}PÓSªáã)ºoGÈ«(@ P€ (@ P€ (@ P€g›¾<¶øžõËðÑÎÃúÞí.þ)¥„vãä÷XõúûÒ½«½šáÚô!Hn¬Ñÿ‹=àˇÅã’1&žžG¤`QA>nèhä§v̸v”Éf•æ ó l}k¤ ñR™Æl”‘ˆüŸ’‘n„îçµFÓ¦MÑT¦Äûâ¹áÈœ¡õ^;˜ÔŽ'÷<•³ }Fú¡C-jÞöU³t3‰–v4k{½ÓKÍ×í³šopGžº.k»,’cZfÉ´jG•8Âàr“ª[îHƒ õåµL±tvªÓaêëhÓ ˜ —³2¤Üª•–º,>–g%#3W•‚¬ÜvEw´n%çKRK4<ò†÷3Fq¶£r>„ )|ð‡=‚–µ™1þµþS¬zë ä¼ä{GÛ&-g…Lkèœz5ž}T7ËÒÊÛxw¯£º_|ÞÎÔãþ¦xÙmáÇòI‘9[ó‹væãÚoæ Ù¼6f-’i\oЦt¯‹V†èÇ~Ü% ì |Ù£t,Û‚? 0/ô­Â|(]‰Ë.ŽMúê ü«tzÉðRvðTø€¯ŠÍAëÔõ=­iýEo¢ñE£™õúõ$L¾czž× Íš6“{DC¬ú Ë5îjpZM|y-Oø€/£jñœŒS¡-’iåF­Ž,7N¦ ž¦L¬žnçU<åsOK9–=Ü‹ÝÓ´ü(Þþ/|úþ*¼±,Ëó­åÖ»½í̃>¢µ(ê{ìiªe‹ëÚâw|eå΂Ü×ì˜Ü¯¾i½µ‰Ï0×rõa_{Â'o¬©ÎýÅJ;v;kH絛zlVçÙ1\šª™šW |Êõ<$àKmÙaþú½Hï*°àËl ŸS¸‘_”6ŽX–@‰]Ÿ»=?I²ªQðqåÙÕag?·ªéÅunÅðüh ñ(@ P€ (@ P€ (@ P€‘ðI'º=2z×Gæè]Ý®KGŸŽJ$W`¿ |¼h9Jôïí0ð–Ah¯ ñsÀמ•22Á}Ê ¹ÂÈqýÑ4‡óCÙæÕX˜¯u®kÁ2½ÐXmz¡à¾dú¬Þ¡“ÝUn˜'_ôí­}ÕÔìEX8ñ†À¨aú†òßÊI©¡GØAÚ:µãɵs.L'’•nÔ÷jQó®T¦krÁÌ\M'U<—ЧºÌ­^ªYäõN¯hõUóµÚÇÚG]ç–§£ZéÐW§9Ê]»£{œºž8¯eŠ¥³sÏêéHfŒF¨¯Ú¦Ê–Q¸w·öò좓H•iÙÊ´lÆ„mü•‘Fœí¥9@„jþa {û}ØS¸Ëÿg&̰‚¿¬é ÃQöq³ ä§؃é©)ÈÑ.QJù<{;ÿ›â¥¶…è9n~>~öÕƒ–£Eªd`UÉlôÖ›4|{E?öã/ªµGëFõ°õ•±¸xœ|Ý(]>m­ "¼«]ò<*_3FT—»MŸ¨%©hYS:ªû øÓb¼ý`èýáÿ¼7?sz¾¼–'ZÀ—ƒ4Ê9àØ6Ü—ÒÕHí9̸§gÌGÙìÁ˜—™Œ úi¨Œúeîý¼R2ŠR><ùpø@IDAT÷´”cY¹?(©Fü螦û.¾ý{°yÍrÌÈœ‘4%K¦Ò›ëTz¡éFJóËÀT¬2‚S<÷8õ~"Sï•)‚Ã\C ¤>Û(×9uCõ¡^{ÔmB>+×+¹€Æy IM_É.–ú†k{uy¼ÏŽê¾û»”V5S—j¦ú¸¸—ÊsCOó¹!-w-^JÛ2ê—öʘ•Ù·¥’ŠþA9g\ò’H.dvdãq>cz~’B«FÁÇ•gWõxV® »oGonA P€ (@ P€ (@ P€8kð屩Kd„¯Í¾:_=Wwv Á:‚Ï–¾…ëƒB4ÃÕ2ÂWg%.,Ö€/µSÅ : [lÁ%µ§6ë÷NCWéµS;zìi‡œ©ÌËDªÑã kJGu¿ÜüŒN ^ñÈ´G©æ´Gj0„³ãɵs.L'’³T¾EèÜS;½\óöoǤý0[O>ü#ëf¦cð-ÐÈZ"#±ôïèèPsK[5‹¼>ñ_Å˧âÒÌzýR§,ÃÒñ×蟃ÿóUV¢aóæqtxW£ýÕv•Žö"éhO\3=CôeŠR™êjR‡>f›¦bÙÎ¥¸&hˆ¯Êí‹1fÂ{è𣦸pðxŒ•éíÜÚ˳‹”=S¦3â6f¡DÊtÆ@Ý'-7y£­Næ(ÈÁâö]µstBû°¿Ô‡íÚ¸¶ájñ4š€Yk‹p[M<þ}TK×é±ö¯–ië†A?£”òyöv3ˆg™âåìW¦pLIAJAœ£¦äK`Šñ ß^Q¯?ñ”1h[-àK›þïúN7ãCsÝ}¯}Ž'†t Ú2èë¾ÇðÀ>ê4ŠŽ@©©ïâý,ç(oZJê6Ö”Žê²g×îÆØ‹ƒŽv¹?ü¦ÝµÈÓ‹’u2¢Øåæ&j™Z«ÔjÚ‘×ÛS:ªûÄSžð_ñŸVù#¿+ÇFbÅÚ¡x´ßã¼—‡½ÓÒç©z^9ï)ñ—Ï=-µ<ñÝ—´zº§)WÊýri6Í]B‡$è-]‚ÞôkA`êÔÈjÚÚxÓ,÷|S®\åv?1JëC¥¯!šËh§öKñT®sözçýÑyíQ· ú\­ûKüvÁ÷Ý Òè_õ½º<ÞgGu_õxz]U®çj@q ÜòÜ—%Ï}úœiÙ˜ÕïkÜ3E œMÅ’mKÑ_œ-æW”6®Æ3¦#à+žg )»j|\yv 󬞰ûvÌmÄ )@ P€ (@ P€ (@ P€u_€_Ûøû‚UxÿKc²F´ì‰ôŸõ†Ë¥§êß³o|´ÍÈ¡A2núkÑJÉ/¦€/µƒJF÷Ê+øiÕŽE%Aý£Ò %ß§,Û†ñ×´stÈB:˜óKfÀ»%›©—BŸ™Qö›¿¾D¦»iâØ/gUðÈ`>¬œš3ô.[=÷YkK$XÄèÑW;žÔN;}Cý?µ¬R¦ÙAe²·tý¡s/zÞ€äbMaéÈGFh'#4ãèØ‚ÑÒשf¥m¯¯c]Í×(äìä‹n­ä+#é݆î2rÃ’my¡žæR1%ï)Œ— ©X^jyã*“Ú©-ÇêÚ½3àxL2%PÀ“JM[ s›žpõÔT 3ò‘ó×cFº{À—PãÉEÕCF+’i%ÕNsñrüÇ¥™¦·(J CÉlc”%iE,ÈìŒ{´Š… ˆêîrN”,ž„~cŒÐÆÐsØHQ öÔµR þ÷>£Sš;®s×böðŽ"¯™™‰!SÌ–SëèÕÛL½´°»’Z¡{JW‡¹£Á_¯HãÖnÎ ¶ðííØWËûc)oP˜”•ë»ð%kògü&Û×Þ_ù Kq Y Tì\‰;.Ž¥Ö‚!ÏàÀk·I(ŽñR¥´QÌÔÀ,c‹b<Ô¯þö¥ñmá–}¸¥sCGXèÈ`>¼óç¸Y‚­×‹ŸïÆÈžFmk:à+žò¸|m÷pÞhç@¬¯=+§"e„l«î“³b'ÆÍohß3ìW¯åsKËqí‘ö÷^’æK0éÆTèªç¹ZQõ:&¨EÝ<è)Íj\[Ô€ïpÑ+åž2Bî)©SðÔ“ã!Mò m°ê¤^#‚¯=Ö6!ï^ï/^íB º ¤í{QÖÎåñ=;:÷•óÁLS5SïûR)×óp÷Ðu2âÛàlëéA3W÷á@jQ>Doc¯Ï˜ZÀW p<Îg Õ(ø9ѳ«z<+#|y~N2e«sŒÒ8\M P€ (@ P€ (@ P€8kð嵩–`ÙÒqØÜ¿q»n¸ªO Úµ°¯“GQ¾kÖüsôÁ½d›–=¯ÃÏzwtäKÀ—: bé•û˜Y;ç“Ñ»ŒÐ%½2ºÁŠÇîÆ%í¤wÒ·ÿûø}¸g¶Õ1Ÿ‚²‰ÐJ»}Á8ô»ÇÜ/UöyÖØ§b÷f¼>ó~d¿dLiUlÜÜ|L®u¡Å„4O\ÌAÅ=F_u.Éäd];ÆÐq¡sOíôrí”òù‹—¢Ã¥£´¢ê¯¬¹+poÚ%hÒ@¦/Ûýž»o±l#eÔ•ƨ+ÑÒשfåc¯W¯¬•ÞÕ|!m±êÙ;pî‘#hѵ+’¶Étœ©ÆtœîõU:'Õ;øeJÎæ”œZæÈ[õ'ô¿¸#û+PøÅ{È2Æ zÆåmÄ´´NJi¯RË_™*ez3û¸H7Oý1 çItÊîÍ+ñØàQòh¹©ALþBiÓ>£…™»~y5Zø÷bÍ‚™Èœ¢í!ëíQÝìö°ƒ)äèðæ"ëöˆw2*œvL •cêD¾Zý:þ)çV tÚ‡qÈ/z)ú8J… ’pìëòÅåœh°}’ûÝcnœ†ÜE ­Ow´‘ý„¯߬cFXåJÅ í’}ñï£Å¨¨ÓÂj£¦ÌZñ~qÉyÚ …• Ã(}4«(¹2zÛh38Ë£·žT%æ¤vF¶›‚EùèÃåCßUñ º:ê! FùÆuѨAøöŠ|ì«å±—W2¶¾ä†é?ï…?2J£ÿÝ(<;v(®JéŒV å^P´ï¾þþü¢à ãŸÏA?#.CßÍð%‹®›„OæÞÞíµûC)ÞÈùnƼ?\üö¬ö²™sjI{ŸC%›ñê“÷!ëEçÑ~ß‹㉠ãþP_^ËãðåópÞÅié¶aÿSƒw´ôÃÌ•SÝÏíåµ|niiJê57Þ{qhšIvðªT$5k¦Þ~=ºŸ× Nœ@Eù¼žû‡ÀóC¸QGUGU\iz¿¶øeú]kÊ?­,Sòð§ßôGGyΫ(-Ä{/çbLÎB³˜Yظw2:Éyç(k˜k¹z¹ö˜)†¼y¾¿­ö0JÚöÆ…¥:ÏŽáÒTÍ\Ÿ)”ëy¸€/-躃]«¯lùȉò‡ñ½Â_ÿ­t¼>cŸñ<©FÁω%/Û?¨~ê>êr«Žãù”=?Vï>h—Ÿ(@ P€ (@ P€ (@ P€g·¾ªÑþw~ŠwÖEO¡Ù¸iÈ•ŽÑ½´¢|í—NØnv@”L)8Q¦Œúr¬Ëò{œ_É]µ£Í$‚™2Ê•.àÜu$òòº"3sŠc±6-Ü/Ž/Œ„¤MeO#H %;óÇB‰G¬r|PË&ª;—Žì½ËH©`qRÇXA@ŽÔí/)YÈg²å‹¢¥­ÖÉ­óÌîÌ” £¢¼Øƒ=¤3ÓõÁ.Þæ®foD±V;ôƒòõbzF˜3$Ú ʘ…³o ¯þÍÉÙ©é,S±Œ~s©Ëè7Áyhß­Qì¬u±´iÖ¢˜|ƒ¸¶½<ºlczÅhJy™›‡ ßË„2ȈDÌEÑì4¼©Œð¥ÏÊî‘?ºž>,Ÿz#2­áû"¤‘» ³G÷–-¼ì£%¬Nƒ!#mUêl[:nvÞÁÇÑ*9§zÇðeS¡AJ‡¾7cV>fßf+5SΩ¸®?Ê~Zàa<×É8ð¥¿/ýñÜXe”Ïåÿë²ð¯WF¯ ‹ë¦nÃe÷…¿Ê«)½˜_ˆ‘—™ TlÀ/;´GS7Ô?’׺bدþìXóâçE¸åø"´î÷G}¹û”v™Üו2kÁ6iødÏôÓ†+óXžçþY„_u>h¼žŽªFøâÇr ¶Íœ]™52k(RsV`éØÐé4í{†”ê­|îiUï^ì–¦¯p9nì“àêÆ!SAÍŽéœõœ¦çk P¸|:údæ¸ܱlVþNÜ–bXʵ#èÚ`í¤ÞC¯=ÖV¡ï^ï/;þ³9ÒOq{h¥ {ÿTïE¡Õ%áŸ/ËŸx^UŸ¡T3uy y5Ï0îÎà%mO—QD Fú½µ½cyAÐ3¦¶Ÿçg ω7nzЛ«# 4èžåùܪÞ}P3â‹ (@ P€ (@ P€ (@€_Õ< Ž~ÿ Ö}±%å‡CSjÐ É=.Aß^]B¦{Ô6Žð¥ŽV #­Ý;Í9µ]hŽ%ëdê´ÁæÔiY2*Ó-{þèèÉ]¶ çæ?‡Q‘)ÌÝR20÷É)Þ×Tæ+^G? ÀÌÍSGNÁԇƣw»ýXõÜó’5B M}–7%ÉYÈ9Z ˜W²Óïê‡5Ö Æ‘Ì m“:ôÃl-9 F*’`$«Ë¾²`Aô¼Íb¯[ŒÜGÇ@)¾¹&ãr§áÑýANjÚ³¤ž·Y‘`æ^Û%ˆ¬ŸD¦¾ÝÖÃ*•±½>öŽn3i×ÎçØ¬}Xœ• £XnSzVbõ‚'0éž¡ô)2•ãýã®á}¾Vy"½«Nîí©L~lXœƒAcB§<Ë’Qäþxõ7¸IFéÐÆÒŽïÉA£Ž®^€Çþë,´I£¨©#1êCHï3‚Ý@h{zq‘}æýÃ&èG¦B$Žó§b|zoìß°CÝc[ëÇü/ðæ8™ÒQ‹a :ž•D"”ó)+¹ôF=ˆl¸Ùf>¬[<3äü^îtIO/E\~ÿÿÆã¶þêt^ö‘¤Òuȹo0f¨ç´–KjVýýÞÿÏÞyFQåü I ôšt ‚X8ˆÞŠb¬‡Šx¶#V޳€íÄò=Dô”ã<6,`áNDA@©Ai!ôHH¤g“ùÿÞÌÎÎìfw³»Ùd“ð]æÍÌ«Ÿ÷fÞ›yßü2^ý³± ¬Lr¯[ú8ºéqÌb…Æ{¾pKRÜ䩨xDOQ,æLì0LçUVÐe·–h-éjæT¸êK öLÖrÅïóG„f8•_YÊv€±Ê¡µWÓzuPÇãú¾KðÎ[ozXò²<¸a"ÆÝ|®ÑËëò‘©_LA¯±³$Àh,KyGþõ4FO×Z‘ȵ/ÖOýLQ‹q©`ÿrLIº3í–ÆäÒˆÛŸÂô'îÇ@éÞ¾ÿf¥Y7ãëò\¼Idb͆ޫGò–ßr¦RlYÛ¶'âÌÛçê'”@ì–^¾®Ë”i³1Ðy9”üÌX)ñ÷qN9 í°Jáß•½i6º_8ÙéI–lN–%› Qn}?£‚ϟϸ*Ðûг m-þ=mþþ¶çÃ@¯/n™|î¿g ºyCïFÀ:=ÎPž-Fº¹»—ã¥Ç¦È3­ìÃSƒž˜tw´Âvûx–¤ÌË‹IzÞž=V‰=]¡ö/cU õ±{áœ}«Ñ×yöŸ¡Ž‡myÌCÙÆXþŸ«ÂÉgÿçÎÐn70ërîá£òëØ ìÓúÈ›HQÁBæ*ððmüBèM¶Ü“ À©N€‚¯pµYÆ1'¯G)P·.¢cê£qYÞÑÏV®àËOØ`/¹[àØ;• œ‚\ddŸDÃèØÆhݺ9Ü´‰d§@AtcD; ݤ5šëËÐYž_a U¿býEdqºÈÎÈAL ¸8›7ò›2ÁÃt¢ 7Ù' ¤c4Z´k"†)¥ FS ù,‰Q°#õÖ(8Øþwä"--K4”-:±±MÐ'sè-ºœc"(K€‚¯²LªìLM|LÛ‡ÿMœ£ѨYK4iÕõ5®2fÕ=!GQNKGNVêԉ…þ‡ü¾ºg›ù# ‘@Qq)ÆNY‚?ìFãFõѺeS4oÚHú€:!ÆÈ`5@n^!ŽeGæñ\tißÿû×(tíФ¦‹ù'         ðB ¤¨Kÿ/ û^"óæMdþ< ›5ç<“UiI‰Ìg"GæÐ‹ óÿ§{qö­“½ä) ` Pð,±0ú¯‰‚¯å/Þ‡ý«þ‹ßÝ”„¶Ý{…‘FíŠ*ïx–¾ý:ŠŠ¸þ½ µ«p, €‹À‡ÿ݉[û€KºÎÓA)»cÎGßãꋺ`îÓ @-$²ø#¬|yúÿñ œ9â’ZXÂðI ¿Vúö&¯Ã•¯}‡]{‡'bÆB§0 ¾"Xù5QðõßGþ„Òœ üþŽÜÈ9²öâÓÿnFjN6ò ŠPpˆmÚíÚ·F—.]1tPwÄE¹©õ¿þ°›—|[¾Ü‹:uO±Â×úÚeI€HÀ 0ãÝd<2s5þoòM¨_ÏûÒ}9Vâן—a÷žœÈ?ØíЦçïÐgðïѵ}\­@™“ú¾\ð%êu½#¯…†/U:6|4 ÉA£E|ÇÉÑksÿ‹Žquñ­XùâF$@$@$@$@$@$@$@$@$@$Pû$ô Ö¿ó®j&êFÙç„KðëO+±,% i'dþ¼°H _-⚣S›¶èׯv:µVÒÊØ¿‹gOÇŸ~§ QûKDUL€‚¯*nO®6 ¾r¶}…ÖcÞ´ÏÃݯ¾ýÆÅ7ó8_{)øª½uË’‘ €IÀ¿à+ Þ7ç/7½—Ù÷¼éSÜuý(Ô/s¥&(À†×šáÍÿy¾áÕcÖ¥ò_RsÿŒm›v¡Ëˆ×ÀWéáÏpÿ7'‡¾éþ9"Œ)ør¯‘ @m#à[ðU€×’nĤµ¾KÜïÚñøòÑ‹ÐÞ·—Zu…‚¯ZU,L5 @ÁW+¡V ¾vþ­GÿKhvÁƒS®A¯â8bl‹&o.Ûë¢üÁ‚pu§z®ãÚì à«6×.ËF$@ß‚/¶¼3¯ÏÿÕ‰ª.¿çQôèܙ۾Å{s_u!ìpÓñÈõ¢®ëLÍsìùòZüã¯$ãcððGsÐÉC€þå`éý­0pÕŒ4ü¡‡‡¯œ•˜=æ"l–„‡Ü³·\™å6)ø Í3F         ¨Nü ¾Þx#Æ-ú]v#¼ f9û1oÖ·0gpíCÈ~ô<ÄV§BUR^(øª$°Œö”%@ÁW«¾v ¾F`í/ÐÏf­rûwïaÀCŸê¤‡?8ßÞØÝ¢^’ƒ]»"#ߘ ѺYs´kŒhˇîr”ÁáˆBlý(Y.2{"¦qCtˆk‰XgZYi°'=ˆ‰FÃFMЦMK´ÿÞ¶œ¬L<–ãù@Ã& qZûvâ×›Ï1¯Y‚èúõô<9Nd"õ„“¾X…ëÚ©{O|yãÉs$@$P»ø|•þP,LÝb6þI<þØ´µ‹ ŽÿŒnþV:qÜñf.Æ™½ŸÅEDÕ‹X2ïEqI4b›Ÿ†fí¯|䤧"+Sú¾ØD!±MZ¢Q³8xïþ(ÌÉB®,+Y⢢Šßö²¥gØÓ‡,å|éGÒ ]5ê5jŠVí{x‰_ò’™ŽºÛ£¡-¾Ò¢”xFo;6Êh;ò¨2,¬x¾#>\\þüŒì§3CT,bœýri~:²ó£Ñ²¥‡ÌLNÆ Çĉ¼ã’GaÑâ4Äyõ # ¾LØÜ“ @í$ˆàkÔ”—1ÿº.€¼½xüÖ xq§:u–¯˜ŒsZ—³ÒÓ°'MÌ«ÄÔG³F }Ì{Û籋°ÿQäÉ\BÓ–-Ѿ©óC}a¶Ë\¼šÛŽiP­[É\|‹²sñzÊ%8|(i¹ybÖ¥¾øm…î2o_v³§ 3NÁWYš…£Ë>G_Û¼º™®Joþ‚I2¿mýõööŸ>—yûw¼ÎÛ/öFœgÎÛË×÷ ÌŸSðeÕ]$|…ƒbˆqœ:‚¯ãx)éVLY ˜‚¯í‹faÀ£¦xª nÓ &[Ë?JG´_:¢8mLs—î¨û‰Úùi4ûîe ø»¡öê7x.qô¦M˰\)¢o›Š‚ññF°’4<>än¼hF"~Ç÷~˜·ÌÕyzpšÒä¤s3;,óXí‡tƯN ¾‡ÿ= žöC(øRp¸‘ @í&à]ð•ƒÕ"6zO µ?Å+åc¹Æt|wG|±GüÅOÇ ÏÞ'v¦,‘8ݶ·®Æ”kâxòsxô±§\×z&üm†£{¾BÊã´KH¥¦âÓľøÁ¢C×áhÕؼy¹ó pëìãÜÞ/›'×Eqô:82Ï¿=¿ÊŸ+Lü?¥ãŒr¤þ“&N²G#n%,sªÆU/ÊrŒg¨4Ð<k_k†¹ÿóˆÖyh|™uàÎÈüùq<ñÌ ®†$Ž—²ý€_Ö˜ùƒ¿Í›ƒ®N=›«l®åó0½Rðe’àžH€H€H€H€H€H€H€H€H€j'P_Y>Gû;”¡§…¯¨¸÷¼ñP0µéóÞ½êË\¶µüãsoÏÅ_ã¿0÷6­‡{`:ÖŽÂmC&à=&™‹¿Væâ3vË\¼ñ|á’ù¸Øi|eÿ²÷Ðs¢±Z—ò~ã˜+d.<,3 ¨ŒÀò¥pNS=2—àË82þ tþœ‚/;5ºI â(øª8Ãc¨‚/ÿK:êæ*/+ÁmÃ&ę́»§`ÖíC`Š‚÷ÿò9zÞiXðzããpóéjòÙ.øºK¾¹ ´‹AVVÈ:ŒŸ8×>þÀ³øö–¾Îú(ÁþmÛq¸ywœÓΘÀ¶‹Ì|áe<ý§ÙÌÂt¼öH&éš±~X²ôi\à­Ãq6=5g4U æ|õ곸nŽêmªkgêjGÁ— $@$PK x|mÇ×õ×—krÏ:Ür©9yßöÿ÷ZL{ý+`è?1ýÑqºõ.»Àè‚{¾Ç5¼1EYÈCYF8Õ7ðLœ;=ZšV&e™ÃgÛéV­sV“G ]Êj,éxÝ‹ ¢±R}íÈhÔÕÓ³Dwn,Š~~gKiÊR›S&OA§°+3ùŸxâ1C æÍâš'@º_ù‡‚/“÷$@$@$@$@$@$@$@$@$@$P; $øò\Ò±ð¿y¼kIÇU«&#æË—1ø95a-¸>¾£Nw.bŸË13.‚ú¬m|Ý1åYL»º/be Ç,4@ƒCß¡õè‰/÷¹oG^:Öüv†t×ã¿æ‘ÙCd6øF¬ýÇhôsΓïÿå+™·7ägÃï–yøqÆ<¼=]9NÁWí¼XªÈ à+rìQ;_]ðÜ ·`ô?YYX¿r!^t™œuòÒÉè{ôV#º.PæL\[,ÿx£¾ü£¾\coÕ]Y‚¯'fÏÅ”!öu±ŠðÑc×ã–oÄ›,¹üÙëĤ¤9ñíŠTã †W}äµ!çÑóÜ–nDÖf þýºÍ‘;^˜…×þÐNluX#d©Ê îKUžØŒ‹ž€šö~ã3§uuO—‚/!ÿ! ZMÀ«à«$ åÅJ·cyÉ—øç½ûdpè¿·á¹×çÉõQø›¨ºŠ€Ê%žêú$žeŠñÒåŒÁuMŽÇ¾~çv´÷=>DN>SwÈòˆôå-ËX¶ô1FD]s\¢.=šœ0sÌ¥úÒc_—e#;j)W¾Ü_ž ["-uåV ?ØÞÓ§uì=J|fYð:&ËB:U[®€öëÎe#åš+Ÿâ¾uv®X53Äof°ý¯¼¯zöñxü󠭈Ǭ0ó0ã£àË$Á= ÔN¾ú]{þqYÈÁ‘C©x÷ÅOõ9fEÄXª3̹ì~wOÃÚqÖŠTÊOÎ6YþqŒˆ¯ß%+O]¢¯<åšÇ>ýFY9k´så,å[f×÷,Gókfè‡/î%P®ºýãŠCξ½`>®ïäîiéãÒYÊÊØôËí8C.[a‚Ÿ?§àË ?H Â(øª0ÂÐ#¨‚/_<ÎÁŸMÄÕ"Š:üËÇèv§a@§÷Ãðæö0¿bùZãØ›àëÕy`\oûä6°Ù[bfòK+Yªñ¹Q઄Aè®[ãR—2ñÜè;0U–y|bö›"kiù×]®NÔ\vRvuX6µ´+`á.Üvža©ÌÊ«ë*-|Y(è" ZKÀ«àK¬X;þ\l–RÇ[;¯è³ü.ÁW×çðì+“ $Í.‘Íê—AΖéxä‘)rø¦.|î½™w‘“6{~þ [·%㨘m.ÈoЦÒÿîþß<^_Cß«cvZëræ hÞ¾î\ü"‡vËY®<û|9°ã£‘N1pñßS8Ȱ(æŒYvçQùµ_– Ë—·ë®å0EL÷¬ˆéìr¶0õ Y†ò>qyàÁÃÌ_& îI€H€H€H€H€H€H€H€H€H vDðå«ä£n›‚¹ã‡È~[sÙÊïðÁýÜ‚,_k,Ũ_"øRmÍc˹Æ9+P:”„W­²TãŸqí%çáÒøv.Ã(®y{íÑX{›åÌÙ&†\Æ(KaÎe'Å‹•®em̬œùs ¾\¤è ° à+,C‹¤¶ ¾†8º¥ÇF Эm >{.ÚÎe€±áƒÿÃy/þ\.´Wç½+â.Õ]Y¾¼ «€"ü¼è Üó躅.{Äω¸ë¯JÜU’†Ç‡ÜåâoŠ•°žS¼V^_¶ÎÓ9-|¹HÑA$@µ–€WÁ—L^úh;ÌÅW‡ë¾Ä”?û¶ðå²(eJùOíÿR–€|C-éEŒåK%KL.ú[|½Çw5\þÌŒìo¼ÊùK! ¾ÒúžzÞxµŒ÷£ˆàÎqÏLy Uð•ùóãxâ™$íçðüÂInÖÓT†\e·-Yé:g«#Wæ}ð0¯Sðe’àžH€H€H€H€H€H€H€H€H€j'@_£.俣I불?£.íÔ\¸ly;pݰ‡!_ÿýo#,q—Kxåm[bq¤ïÀ 3ßÅÔoœb13fY†q÷?F¡½XëÚ¿ì=1¬ò©\ù3ö¯¿ÚÍJ˜òîJC_«VLÖWÃró–n9óç|™•À= „‡_ááR,µSð%{Ycx`}ßHÒÅÂW'eákðbrr”nrÒ·ouÅcy|™¡‹pxÏ,_¶·ÌÔÒ’ cÓª»qFýL¼$¾¦ˆ…¯eä9×u19÷–…¯áNÇ·7v×ÏW¤Ã¢àË1I€H ð.ø²¬OA–Eœ2:ÔóRø’íøàêþX©.%ˆ€ë¯†5-#—`É«…*+]»õ-—H ÃqÃ3ÿÄ Þ]%K–Âò§zê´fÃ0粈þÒEðeYÍRå|[Êyƒ»Õ09lC|å$?‡G{JR”å¥^:yÔ‹«ìÞ,|Qð%ܸ‘ Ø "ø%óÓóËÌOÛc±æ²Ÿ{û]ü5Þ)³{ñpûǶù-8‘‰ä_Å'sgàյƅÿþ*æ$v„kÞ²<㪠eæø]ix³ðEÁ—2$|E†»žjm|-uï9bÎÑ×fu ]0ÿ›éÕÎ}-à²á|Y!­4Ló’V^…f'¶àâ„Gõµ’ÇÏø7^§GæŠ'„‹‚/«>è" ÚJÀ»àKvY’’åoý/¸æÂ2öü÷6üãõyúùËŸ?€‘}¾Ç%:ò"0r]“Pc_?Žs;Ú–9ÎY‰™c.BŠ\³_9Xñl+|¸Æ}ÙF#3‡±èþ®ºå/Ë¿ÍÊ•—ôƒ|ÿ3o¾TÏ“Z†òÉÏŸF\™n?ø<Ú_7¼*bµ.ž/¿ÞÅoÅ{ßÀÄñ÷éÅ¿îEY òŒ ç¿©Ÿý3æ.—#+¯.æAð0#¥…/“÷$@$@$@$@$@$@$@$@$@$P; $øƒ#óG¼S°æ²û™‚µâÝ›í¬ßyl›?Ëi¥a®xU°óh>Z-ÙL¡Ù½B³•o?ŽßÏT®Ŗ_Æ¢»|ß÷›.-|é,ù T ¾ªŠ´—tj«àË4çè¥ÈƩ¸÷¼ñxS~þ;}4:9'j s°òË/°,îLqŠ®ü[ø*ÁÏó?ŦƒqÝÙ]Т¾1‹¼}ÙÇ0Q¬ˆÙÔÆû—½%&)¿Ôó0ê'ðÆ- ëbyðÒ£ã1e™ºd Ätoê°(ø2ò_ ¨Í| ¾P’ŠO¯î‹œ…¿ém\sé(´j‹’œ½ØôÙC˜;ß4Îü$ž]8æbÃ~F6Q—²Ruç«Ï¡wû&È;ú ¾›u)~e$Õf ¸,áº>„‡Ÿ~$…™¿bÕÜ[0©aÊÙ.šò›¾% ½†)JÅ¿õÅ·{TކãÎ×?Æ™mbP\¢Ž­n½Æˆ‰ >Jðe نܳ·\:PVxÎÂñ¢hÖX‰à¬8-rÚ­^FážÙÿAßö†èëÈúéxúïSôŒÅ[-ËNJœ²y-›~EþñÁüLÁ—I‚{         ¨Â#ø¶/š…«XÝ1e*ž¹:-œ@µ3^zg'n{äj]t¥Hú^emÁsïíÇÈ?]€xY6RÖüe#๠ã1U¬|™‚/”¤áÁ!wãUu]æÉ.‹óöÛúî{G¿âò/G~Ó¥àKçÅH ªPðUU¤½¤sÊ ¾„Å®ïÞB߇ ñ•Žfð9Õ(_-3×–¥‘¥õNÌR—YÒ±än2JÚ¥¶~ƒû¡eö¯X.K7êÛµSýèöOÄf’,ë(˜±uÁ¨Mliw<û*^ÙÑôà¿ÃÊÛ%k)OÒ×R.“/‰‚/F:H€H Öð)ø’þ /Þy-ù-ý(Ü?÷#ôj©¿né>ý ŒÄ‡e…ÊwÄv‘SæÏÃϯk¾B\0)7Ž8£üôó7`öõçBéÊìixËsaê?1iâ$_Iêç¯+[+[ÁæÑ.èÒ#êÚØ#cˆ®ÿÄôWÆÉ’‘>_â9gËt<òˆ!ìRa;ÄB£“_!e:RÛx<>ÿhë\îÑ[Ù ò¯æu ¾LÜ“ @í$ˆàk¸XøúÖ¯…/aã&¾R¬Ô\v[œ8ø³kîûÆggaÎÈv:H«í‹^ñ˜níD °tÁðæM°|­9|°à#\ÝÉøž¾ástºÃv©ˆûɼ}Ël+Mà lZu;Ψ¯'[¡ùóŒý»±xötüñé÷qÚ F„ü—H d|…Œ®âk§àKÖ÷]!ëûúYÒÑ$·ë§¯p×}oêË(šçôýé#ðê„«qóù]œB-Kðõê¼w1®·Ó˜ò\’‰^·ÌqvX¶ˆ†+bã/B'gç£_ò鿦ÿóNÜ{¾%öRþ]刻1ãØR–«éxnt¦îTKS¾ KS:g†õ„(ørbàŽH€j5‚/UðÒã°ü“g0áWe8 ¹î \ö§?#®û%—Àh¨ˆ—Uâ%ÏÍ#ëçà‹¹÷aóçµ®Ãqù•7£øûqøVÔXv1–²”™ºä1̘i}u…þ2C;&câ­×«àËkúûdÈž² d?ÜùæJÄÇ’joy.>ð!&Þs‹gæÝŽ-ËbÁåQE’·÷<4~œ[|žÃ¸&ɲ‘–àë†iÖÃ}éÆãÛ?ć¯ÝbñsÆÒó’é¸áöûÐÖV'ÞÊf%ê‡y‚/“÷$@$@$@$@$@$@$@$@$@$P; "øzðŸÿÆÓçÇ•@¬p½6c6&}j‰³Ì@7Þv&½ýZsÒþæ±Ó7/ÇC¯ÎÀ.C(f,ýðê›÷cÜ@÷¼ÿ㟞¯L£*NïッN…3lsÿþÒ-oþœ‚/³¸'ð à+<CŠ¥6 ¾B *AVz& ¢› Ö‘Gýƈkê.œ (î’"deGNtÄæÃѰÚû‹G–Ž<œU„XñS ÄÅ9MY”X`žhá+0NôE$@5™@y‚/WÙŠr““‰"µœaT4jç*Ä./¡8JKz°ºQÊBXºˆ±:ŠËSð匹¤…*} Ó 1ê:O«8ŒðΑܛÇütdE#V•6ˆCã–¥´@Š‘wü0ŠE^bøòÒ à«z#NØËÆOk áUôF°**%éŸ?»6¬Á- ÷uêTJŒ”H€H ²^·{i¾ç*´k^%™)>,K%Þég©D¯K1VIÖ˜ˆ@Ii)^œõâ{4Å7¯]f»B' @m!ðëü×±vÎs5ñI4iå¾Tbm)c¸Ê±oóz¬üè-\òì‡hÖ°pEËxHà”%@ÁW«¾& ¾ö­ú/¾všÆµEÛn½Ð¼]Ä6nAŠÕ+iGa!²ı{qtw ú\q†ÞõtõÊ$sC$@$6‡Óó0x̧((,EïÓ;¢}ÛhÕ¢‰è|+Oè[’½J^ˆžÅÖÔíåŠÁ£' ß Á¨o®×èჇ•O '7‡Žd!uÏaÉ8ŽOþq1®ѵòf $@$@$@$@$@$@$@$@$@$@UN 7ý Ž¿(-A‡^}Ѽm4nÙšAœ5QZR‚“Guøíø Í:õÂåÓ"ª^ý*¯+&Hµ_¬Ñš(øR¸ü²Û¿~‡6®@Iqa VÓ¤e’¿uÏèqá5è=êÔ©KKhÕ´¦˜-  ”}Ç1ýMørÙ^ddå‡%N_‘8ì´b@+•3%ò“¾¦®ûËt´ÃªZwýzQøýÐŽHº¶Fë\µ‰35          *%p| ~ýô_Ø¿f1 NdViÚ5%±&m;¡ó—!þO÷"¶iËš’m擪5 ¾"X=5Uðe"+u8wì0ŠrO˜§Nù}T½X4Šë€èú Ny@$@§MÒEðuäX>JÕ·S’@óÆõСM#ÄDÓÌÚ)ÙXh         S—€Ì äggÈ/]þ`›óª!Ô‰ŠFÖmQ¿IóS·]°ä$PI(øª$°D[Ó_”±ªü¬œù7Iª.xàŪJ’é xXðÃŒ{j)v/‹F hcÌI€H€H€H€H€H€H€H€H€H€H JZ¿ ?½ú0®›³ºJÒc"$@UO€‚¯ªgîJ‘‚/Š…'³üÑ«øíóëqô»æ.ô¿~<ê5nrœ H$@$@$ƒGsñÓÆ4¬”ߪMGt‘×°Aí1ï›ôíÞçŸÕçh‹Ág¶AÃX À£J_$@$@$@$@$@$@$@$@$@$@$Pb]lñ“7ãລùÂgh{æ9ˆŒAI€ª+ ¾"X3|_+-Á‰C»‘µ{+2woÁ±Ô_‘¾uº_x ú¾O¬bj"þz»—-Ð;­–=ú¡e÷3Ѳ[_4i×Y €Õ .Aú&ä‚°@IDAT  S@±£Yúò”j‰Êtq«ã£âÎp§eä!uÿ ÄÄÔÅïDàeþútk¡w·¹ù¬Ù|?®?¬ÿÖoMG\‹èzZ´‘}kùŵˆE\KÙ7u;nѤ>»ìS°Ý±È$@$@$@$@$@$@$@$@$@$@#PœŸ‹½+¿FÊâШu{œ1òf¨•²: ]‹¸3V,†&¨V(øŠ`uTgÁ—¦•B+-Õ×V{ëX¹5”:ŠQZâ0ö´9–}©Ú—”èç5óºÛÞéGù•8¼ù1Î9à(ÌC^æQäg‘ý?†Æm:Šˆ«Z.b.tµ>½k^ÊêWFJ2ŽíÜŒÌÔÍú^…oТ­¬,FZµwDÕ‹EÝèhÔŠqî£Q'ZܲŽp]ûÞÍOŒø±‡1Ã:÷r­Ž+>ñ[7J~ud⺮ìëŠèLöê%?ù3Ú¼™4 @­# Ý“ÞGÉÎØ+‡î.{Þ›_u®Tõq¥šô²wI‰±W]¢û±\S~ÌŸ¿*.~K$r3~Ÿ?¿¥Aøõoaa rò‹‘“gürÅ­ÄYêX¹sòP‚¯V"ÂjÓRý¢m«²·~m•[εo­®54 —ó¯ŠsZŽdæãè1ù‰pLßgæáh¦ˆÉdD—ë*/ÊX£†1h¬~ btËaú±¸7ŒFCÙ׋®‹ºÒÇFÉOíõŸˆ»£¢Ä-{Õíª½uìî·ŽÛµ²~Ýâ.ǯêë]ùp¦%ð–Ïx•»_3.•?ùßùÓG âöNUƒîÇÜSë^NËäe         ˆ}>¢DæËå'†OÔ»VªæÒÕÜ»:¶ö†[]+£ OæÍ3P|ù™ûÜôCâNG§s/A÷W¢MŸÁúæ¢Ü"ûF7š’µo;šwê)såqˆmÞ±ÍZ£AóVú>¶YKÔ©'ßµÕ|w”>g^GÍ›‹[ß«yoÛ±šׯɞ @dPðîzª|•B¨ciº*/CöYGõ|©£êzi±aÉ^„Uú±~^“_q!JÔ^w;ýëÇâ–½šV4JÆÞ]°$“¨‚(»ÈÉQ©ŽÀC8¥ÛÄR‡w?†è*ª~¬´ q–)ÒR醲•èâ±<á•/œò³Ò…I¡”ß&VSå÷&NSm‚6ͶyÛÛã“0ªsVýî‚9%¦3ΩN°nt=D©ÎS15Ý16·œ’óz«Üʯü¢”ÿ˜úˆ®ß@çÔ°u;³9Â-TV¡ðe šK °ÈåŠÐÇåŠàæ¤S¤ÎÙ¯‹8I½„ˆJ Š” J ”ôŸóœ/ùº&zbŸ×Lq•·8õk’Ž)ˆ²§g†SµàMìbˆfTÏæ¼îGDc…Tßgˆ†,±PYAKàãů7/Q’ݯ›ÈK¼um""O¿®üH=ED¦ßúõ£œ*K8¥UJDÕHVÅèb+Å,R›£¤T¡©v˜[`ŠÑº Í¥åI»,™ÙÞ™~LA°›mÇÜYÇV[ÓÕã×MÔ§¿¤íÆLDïËÿ¬›sŒ`v™t &PRTˆä_Õ;Í+^þF·Wƒ‹Ã¬“ xP–zžkÞ^¸]„§á¢¡§éû¸±>yH$@µ—À‰Ü"ü¸î0–ˆèõ{ùÓ¯ f>|Ô¯½1W{k“%#        êK (ç8>ýË0\ö/Ьcê›Ñjž³ôíðý3wàº7WÉÒ”õ«yn™=¨~(øŠ`”'ø:ºu­¾þmÛ3ω`.™tm"°Íb4íÐU,Äõ¬MÅbYHà”')Vm>ûnþrMŸSž €Ià³%»Ð¿g+œ.–¹‘ @¸äeÁ‘_× ÛðÄpEyÊÆ£,}u>÷ÔkÌ︧l#`ÁC&@ÁWÈè*°<ÁWÅS` $@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@µ‰_¬M ¾"ŸI“ @ $@ÁW+-hÁWi ´ {Yë1‚9gÒ5‚@º@Ý(Ô‰Ž”› À)C T ‹G‰†é2¸‘ @m'PW†:1QuPO†=QöÔöêfùH€H€H€H€H€H€H€H€H z¹{}_ÍåsßwÝÈܵ>¥æ¯ëøöÇ+$@ à+ L•ã)Á—V”­¸°r2ÂXk=:õ NLýZ_NHÀzÈÓ ‰è‹ œjÔ'‚F ê !‡=§ZÕ³¼$@$@$@$@$@$@$@$@$š£j.Ÿ3Aà±Wú QG ¿¸‘ „L€‚¯ÑU<` ‚/­0ª£àV; úm-vS< ÛaðYÝ[IŬS/VD_Ä^€m«Aºd)¦yœß¡’rT^´ì[¿ {s#òòéq½àVÿ’ Á‡¸ÞCÐ;Î`^ph~IM—³1è1ä\t¤*<¢æaÅäJÅŽ}éPOÓz: o|ç Ýoެ}Xõë^‰-]ž‹Î+–¿p„VV½ŽçRé–ÞâÈMKEê ýþŽiØgôí jJ¼‘â¹S•@aÆ6lLQ}]=y.E;g_W˜&çw—=_™œÅÖA#öµ@Êx0”0ÈbˆA«cÿbQ V.cÐmU5­mÀ¸ÐÛFU—»*Ó«Ê´|Õ Ï×v‡6¯Fj¶¼ÈÈ;ÚA=|G«Yß By‡þLªx‹ ÿ÷‹šU_'È'À¶8+ú$êBÀûø0”¾®º”ˆù°ð^¿vÞܵ­þÃ?òF-<çjR^ÃSâê‹.ö’¹üÚ¶UÙüul£j)ú ùþò1O\ÛÚËS}Pð†º(É=†”ÔLËDn‡±­:¡ÿ€³Ð±¹oUj ‚/­¤Z(^ÌÍ‘m’±aûV¤¦AfA\‰EƒÍÑ«{Oô>3Îìà23Ò¸¯5rðÊÐN˜ø›ªƒaø)íK ­DÑHÝMt3™~kÏøªt ZCÚ€'#ó8ä¶QÕå®Êôª2-³"¸?ÅØÞû‘ ïh?øŽf ÑïUW(ÏâŸIeɯ¯Pòë7BÔ¬úò_^ /¶ðò¬âØrRñýŠç»Ñpy7òý¾^Å9cr•IÀÇø0ü}Ge‚qû$à£~}úw^¨mõ_“ÊS“òZ^;ŠÌõ@¿ýùÉL̔柰,{qþÚ,—êÔE݆2êµ¼c¨÷—ý]Î>Oì£ô˜ŽKºGjZå.›Ù†¼˜VàÅjUÎþ-ظ?í{õCÖÁ™_¨YüÖ”Îéíë;áö¯•¿‘X›6+±ÚÔ²ŽjyG¿[Îz|]…‚/i+«En½8œåö×¼9˜{eܦô‰³prÁ]¨D4~‘s1gó¿Ð¤ÿÝzÄ™ë°àþAº;ÔA0i‡ËoÎ¾ÍØ ¦Õ:ô> =œÊÂw$âq¤ÎCÌé7y$„äüÙˆàñ㋇½®g®ËÄýƒÊÜxd!̇y²êoN¾¥öÊÝý=ž¿ÿø÷Šr–„YONÁ5ƒ;—ã±*.ç`ëÚߤïh~z„UˆR‘Ü;v€Ó•mCKÿ }hCIÛWØÜM¯ {ÂýrŸ§VaéýC}yužÏÁ4Åc[Ôa¾Ùÿ}Pbµ”E/bܘ‡±µœTÐ÷&|øÞ,\Ø- Öãægã=a ã°P„-Þù_J_i«U‡þÛ3çá>Þü¯›Ñÿn½&®òú¡Êß#ÂK+ä¶QÕå®Êôª2­ðVgØcóÙîõ”|?sž‘Z¡í½‰Xwr4Œ´… ´ŸŠ ;ßÏbßm'ägRÊþï©/ߌÂPTFQe|ÕcEÚF•ež ù `ŸÌt½é~}Õ·ˆxºfð1>ôÝ×Õ¬âò¹ ñ½¾¶ÕøÇB•ײjR^+Bb¶}ÓóûíÏOZq¡±”£øáüµPå\Ò—vŒ–¹Õh õþ²¿ËÙ牫Qј•ZF€‚¯ Tè±ä…øtušCtc´k×…Äê…uºã¹Wá²þm¬NW ‚¯Ò¼ãº*xßwSÑíª¶8ú"ñö8»ƒL¤ågaÝÏ˰ðG}×ég–íùÃZÛ‚T¡Óqxê÷#)z³ZåÀ—Çáª×Ä€ÔÓ‹±qâà€sVÓ8”_°T¥à u£ [ùò›11§¾m+t#0Í:¢wgc²Öo \tZˆ˜Ó®”<'>m}DðõCÍ|©å¶ûY¬ÔtìÓ-¢+­Rƒ:°pb ®|YîO›…²JM²’#·®â“ÞÇ²×ÆÁß7{¼áš@­Šy Ôz•²Xþ"ξòaãÀöïùÃâñSf+ôÙ²´Œp'in ž¾2²GÚBœÖç*Éqð‚$[1ÃîÌÝ2Ý/0„œ}n}_¼x#šGø¶çé’ç×â; q©ïÂçàÃ1MñÀ"å#‹÷þM¦I{Z2g_÷¼-êx\rëE8«CKƒdbã/ßã+ìrô,LùCÃ0ñ% ²e{MÁÐ1Vþž¿ý}u0ÚsYun;³@S½äùeÒ†~¨wŸþìiÛ_Žì}H9dôí{õ®²ûGY÷RV¾BÞl:Í—s¯Ï~›¿ÀÓ fR;ðXÃæÓ^¦@Ça¡„ [†Ý#ò=¾¤à«âußc# jß#Ük½âG^ï­êrWezU™V@°#äÉ_»—–ïó6BÙ­QÉÚÞûC|ÚOE‹¯IPm'ôgRÅ þï¶z²¾ü1ªxICUð]¡·ªÊ;ÓñMÀ×sÊw}ûŽ‹WjïãC_}]M*ó*B|¯¯mõþ±Påµ®š”×Ê£P˜mmÞï·??I¨UºÔj]œ¿ö)€KuDì¥D_Õi õþ²‘ÌvUÊżÔ>|…Z§ÅðÙœoá ß⌠qÕˆž"å06wË_-pÙmBGó¢ÓO@‚¯ÜldmÁŸ[_Ã^pÓ 03ixÁBÖ®åx ÿ•.ñ“`ãSéUí.}Ù‹hwùs’èh¬Í˜nPÒðÌÐ>xR–1Lœ¹ŸßÑ7°ÌÕ@嬪_b³AÓò³U…>Ò¿K¿W–2Æb]þ»äj+î}2EðU¹Ò³ðºæwä‡ðtÿÓð„h7g%cÁ]á±úº¡Å²mÞèsÓ¿õÀ³’óqW f½\Iùæa¯ëê øÊÎÕP$«õån™+â¤Û]%^ÿYüw\tV4r‰” p`Ó·xùž«ð®K+w6¯Ã%]žlqT3cùÓ8óÊ'%±›°øð»èïzTMú¾RI™†3ÚÐ +ópKßÈg¬Ê_›qoû˜ï„sÝóßáÙ;.*#ØÉ‹rúƒË_Ÿ‰ßaéùBðy_"3‚Kž1šj3Æv*[ö2Ø™=ñÍÜ{ž,Cè0¯ª½»~Á§ÓïÃÔ-¡Þ¬5'pM¯U€öèln{ÚvÁ—ÍK•:£ê­šV±à+~®ÿ+ZºC÷RîhÄÆFîyë%Cî§l¼èÄl(aÜS Û‘ïñ%_|ù…­#QuÛE“õJÀ»÷÷ÌñOÚØÞû+ øªîß |M‚úk;µë™d«gWS_þÙÕœ€ïz ½mTó"ŸÙóõœò]ß§–S¶¾úºSHM-xˆïõ¬ÿšZáÌ·]äh s|õo¾hij¥®Üä7ï«<Öùª¿®Ž‚/‹Ep.{2ÛUp1Ð7 G€‚¯àx¹|Xw¾qÎ’7î‹?Ïéßß¾y +3l]/¼÷TëÏZ[À‚¯ìU¸¨ãeX¦‚^þŽt›Ï¥í»æ£~ÿqÎDnÅÆŒe–,+È>€M›¶ãÀ‘#È)ª‡–íNCß³ú]Z± c~Z‘Œ”c'[¿>ê5nN]{ãÌ~ÝÜ…gÙH=tßž„ÑÓWèùxëÛ5º¥±˜6ÑääaI[‡{.g”çö×ðÛ„Á(v4DÏ^Ë0tÄØ…‰Cú®HËw aËÎèѾ1 2vcíÆdìOËE Ag—ù–ìÛ±y2AŠè6èÝÝ·É=n½Ê=Ê#k6¯Yº ÷füZtÄÀAƒÐ»}´Xøj_Î’Ž*ýíØº%i9Ê|ä±SW 8³:{[³ ÛR¢ ÐóÌnpìß„Vý†L ÚîìK1rpw7¬e8”ºÇòŠãÕ—é©[±ù·í’ÉXج׸%:öìþ=: à©Ë‚,¤<‚ oÞ?ýßR=s–oÅïâÄVÛ®èÜÂa-é(óEð³«Vü,u•㬫N8kèyâ×wªbYk˯[°mŠ„Êk÷3ÎÂYñý··²`ÜÎd¥®Æ¢7â„Ä+:w„sÎíØmsÓç6ݯ½#wäÂÎÝǤ^Š…¯Ö}SŽm)iúùžñ=àØ·ß˽fÔ×å¸4^€¸6i Û¶Hy¶Ym¡sw)ËYè\ÎÒ‹ŠÃÆ [p -Íyßw™gq[²1k_*ŽZƒ»Ï» KUšIs°õ¡sQ\,í¹·;¯‚ômøiÙzìȱ±:×NÝÏD¿þ¶²¹ò i3’giS [õD¬ÿþ{$ïË” éŒËG_„8ßUh‹Åpœ¶°M=x ?þ½n{Ï›4g9’FV\ܧ÷öß^Ëãá°/ %B²û㣱oó*ü¼y¿0–§I½–è$usž´5ßÅ ½N=Á‚¯,¼qE+<¶ÂyuØ4¬ùüAtõ™}x튮˜júùöÍ»µÌRŠ…bgûÖ­Øyð°q5j‰.=ÏB¿¾ËøU)gìÞ†ô|y µì†®í‹åËTlÜ´œ”{·>Z´í(íïÆôŒØ?ˆ†²¬”ä9à±€´—Í¿nÆvy~¨¾Fm[öÀÀóÜûtWalqw“q†Œ|‘ºþlØVN_e/“ŒÃ¼YZÕûvÇ£i·>èl-é -ã”F½µ’±b?õ¦¨­¡Ô[yãWù<åŽ/cÝ—t ±ÿ÷ø2¸qRpc‡r?¼ѦÊÅÊ]îÿ=Bn—ÇÝd )-8=¿¬Ûðû€C=c7È=#ïú‹‹z—jÛ ½J›mì>°ßß3ƒjÞËmÿ«q¾´>l[¿;È{¸ìË{Iü9C´EeïéY·C˜Þ×ô}¤ê³Åʤ—•žz¨ååsmÆä8’™#å¶S<†žo½O™1ÙòTþ{•´Åßý¶û®MpÐÇ;miý(ä”蹫¬ç_ŽÜÖý†#Îïå=w°þî!Ïz“æÉŸ$¶êvz™¶®2ì½hb–ضú'¬ß¸'ä=PÞå›’¼[öï'÷¨—1¯Б…Õß-ÁÆ=Æû£|4øôî-ïý p›êl+ øªòïA<;UÉÊ<‹åïý O¥Òö¶•×ï´(ðñýÂYŽŒ'6à·]GäýN}gé(ßfëßfÔs:%MZ_ÃV8ÝõÈ]ÔP}Ч»²ãËa{.5r‹/À6ï&[wË·µ2ú,·hä –ºÍ¸.ll,_Y‡Rqà˜';ëz(®`úA{ü¡?#챈»ÜzŒÌ·¿òîû7ª@û ’—äsDÜ¿3ȳ:¨ï‡¶¸ƒ¹WÜÆNë2q϶rÁ„˜÷xƒ,¿+°„Û¼[v@šŒ;Œïzgbˆ>Žsyòp„–V(÷f(aÔ|éßñSä;¾þ=]²_¯1:÷ˆó©ñiÙ­üûïÙçÊôuƒH;Ü#ãõÒØ½{øþÎ¥§© òÌótÙÚÏT¤|¾_¨:®¤rØÚ{ùã×ÐÚZÐm €oö0Ýöú7þàÚ!cÆŸ±~×>ù–\ O¥¦8ëwĹeÚ´§m2%ßzí?%§´“ï ®i×yi7>æU¬öh}%²¿ËùšË æyirRûŠŒáíñ˜nŸyÕ=„ònL˜ ÔŸYÙ‡ÖדO[bžÎ@¿ýy†³낯c?†e¿¶Ï_[åë.óólXö#’÷gIßÔQæ ÿ€6ÚÈús†XÿAŽ¿üß_@°óÄþJÄk$Pá|A q{æÝMýjÚvdÝmöìÙúï;Nx;ãÈ:—ŸÙŸ®ÓŠ<|™á=N»–ädiÇW¼¤I%¿{çiêœïßamÇš•ÚŽ”-7;ÝÃßVí½I#­¸Ì8û›žž§/÷ní‹§Gû ôÕf|½Þ•ÎñÏûôÿôBmÆ™Îrx¤­âù)Í_¹ÂÄ!c¥–èL{Ä ßh¿}1Åg~Ÿÿz³Q®Œ¥ÚW~Gjk}å3{½&R;g|Ã\å)ܺ@»ÉuÞ¼nìozú5íùú:Ôûøúy>ê6‘øØ\-ãÎ6Î4ëx¤öÅׯ¹•/þÙïÜڗ׃üuZ‚™ßø™Z¦ÍS¦”%)Þ½ ®¶©‡IÔÞ_uÔ·ó亙ny³Ç#K JÀ“ÚœDgZcgiËMóéÚ’½^ÊÔLë3Œ|LÖ>I¶—ÎK^OåkKfúŠ7I›3gª&6±ôtEðåŠaÝÌW^¦­³ÒMž•è<Ÿ¨-X2ÇåGñ08QœöcÍzñ²Oœú‰[]¹ÖjïO6Ó([wc§-Òj;©ÍôY·ñÚ*Óø+k¼6sÉN=F×?ùÉ®û.aæíý ö|$Øâv…ðá.mmL¬,'ÝòyœLžåª¯™K–k3ÍöêY?‰3µ½Åe‹z–KÉÊ)Õ¶/~Ù•'YQ[¸»T;’åÿwpó'z˜K½³x‡ÿcÚ;OÝd‹Ó^wʨýgå1÷0‡7i—8œÿü2mÅü§|†b‘Þ®¥ö|»§Ñç©U¶ø+šŸ/´YwÛãOоÙ|©6d†Ý¾ò í:Ïz·÷ý²¶æ°{:K_2ïËDío¹1r/³{8³>w­´ÚŸ,éhcäÝÿ‘¬ÚÌ‘fÙµÅ~Êm¦¡ö»–Zéàî/ÊI'O[³r“¶fëm_zQ9~}åÓýüÒ—¬ö'£\qþ¶Ø–/a4w‹ëš=ÿ–»¼¶¯=³ Å=·¶ì¯í”·—ûD¿/‹´Å¯=âV÷ö¾P¹¯{j‘¶«œ{Ø*£ÁÎ3OêØÞÆÏj™[ùCk×Þëkñó ®r>a«G•‡ß¿¯o»_Üܤ½³æ„ž¯¥¶8Dœæ–W{ÙÖÌMr¥ÕwêZïÌ€ÏÕ¦9ûF³O·žý‰Úº|gD2vrõÑ ³œýjÀ‰hеus&»ÊæÎɸ·ÇN[T&m+îmùÎdmZ‚ùðØ'Nsï«Ê)ÓÁ%SÝò2g« ¼„I¶lã"O:;?±ê-~š5~òôWÞ±¿¾ßWYu³Û—7 a|Ä8)”±Cò,kÜ*ImƒmSåTH0ïg÷ˆŠ!—k[¹·;û}Pö} S[4ÍjWv¿¦;qòûšýÍ%ä¶á£ÜÖýmÖ¢Úcí„ɾÆñ¶ê²;}¤§¼„ó}MOÒGZVÙ‚|¶ØËáÍmO/i޶hηgYwjœëù.gåÉÿ{UùmÑ~ûo÷ßÿèû¶gâ WÞÃÿü;©-šjŽ%=žç Sµ%K¬qRÙ´Ë{ŽyyŸsÖUf²ÿwÒø±3µfßh«ßâ½K¬~Ò|F8÷c§ÍѦw²’¾ÕõÞi‹À«3Rß ‚}v™÷|W~åšq2€~Ç×÷ Aþή÷{ëž4ÚáÔO–h³ÆšmÒ^ŸÁ×W Œü”R¿d=B{VÓæ‹÷ïÕ:“ ‹Êd-«ý{·ï ™¶o2‰Z²—{©L¤~OßÑ…þŒð–òë1ø¶ážNyùµ?Ó!¸cá%n÷Ìù8 õ9b>÷ý÷s¡͸ƒ»W¬±S‚¶DUå×·$¶Ó½oC)¿Jþèª÷­q¬G_%«Rh ÔûŽÇZZ¡Ü›¡„Ѵ⣫´É æ3ÙÛÞK¹¹?ìã5ۘ߳¯s{7ï‡>ûøâZ’‹¹·ç£xçaÅËàû…½¼a.‡ÕÞÃ_+L¡1 íû†UÿñÚÔ9³|Žý§z|·8éïÒ¨lû³eÚ*ë¶\~ní9Àúv¶/_c!+Íàž—Î’T` ï̘—¯¼†ònt˜ ÔŸQ”úq t>½p³NøíÏ PÆUš2<óøµ}þÚ­|ó´÷îµ÷MôU¹eØz;Zý‡6þòuÉ[QHóÄÞÊÃs$¡ê­>úè#mÆ ÚŽ;´;wj§œàkÏï»Ä\?îññ^´G{ß) ›ýöZŽG*ø*I[lû˜ÒW{kEŠK`å[øå)žÚ¯½uƒýá mÄ壵›.7ÅFƵøÇØâNÑ^¿Ü#Ì wkLº[Kôn=õõV=\îú7lâ(3l_]óÀ[?hß;ÌõÑÓü0ÿ;ÉÙwk¿exæÙã8Ò–,=òÿ»ÑÚ¸L¡”™oS€•®}3ÉâôÀGN!˜‡ÐÊM˜wû\­P]—ôÜÅ^}µq“&jÜàÁAÏ™žQnÅÒddìûj7Ý+ao÷ȧˆsmyÙ8Ó·@oÄ‹Ë=Z¡—Cy‰qMZ&Ú&-e€ì:¯¿„Åkc“’´¤±æG“ÛØ€>Låoõö"¯·• ïo•ŒÙ>ú¸^ú$„±^ÒLôïäkŸ$™ù1öñ‰IÚäÉl÷’:¯}âí‹´,æ©u¶I3U/f¼ ^&pÌÉaÖzé‘ÉEÛd›ý¼{}C3?Î+Vîׄý„ÉÚ„$öÈ0þ C×ÇVƒCBâXml¢ùAÝÉfê tRûdB‚G:R¾ñ?AÛªG|T›å!jJ;ÁàêQþ©KZ‘6¥ -=üeòóÂoÅ ®àÓVÜLñÅ/^KÐË4ÙY&·Dlåó°>l4Œû"1Á~ΪK3ÐëÔŒ¡ì^ ¾¾yÊjçOqoعó´ÿÜê^Ž>#“´û'>àt™eþÏú^;˜Ü}ÑVˆˆË]d'~ú&hIÑ’nõ(kßiÚ&›pÇ.Êqš?1‹™×ª|Ù¿ÊVß2¸ôˆU×¶ò˜ù ÷ÞÎÉ|m_ê.KzcS9y:¢½à»õxþ茶ìÑN^pÀŠ+ ¶b»vëæyˆ½¤íÜ|k’vÝH÷gô%/ù7yãí™7êÜo pµïó§|ç*{8ÚµY_*_yÚµÒ½.Õþu£oò¸ï´O·Š€pë"ÛùG´u^Ûß1·º~kC^Ù‡ePgòE02AKJš -Øi|àW“œÔøgÂ4«±B|uÕƒçóÀ ì]à!öŠ—gäóOOœå.–ò>ÎðÞWÙÇ-ÞÄ[&ºÌu–@åw¦)ö÷Æáà"[_—mïHÞî{8ëÓúñàë+F®|ùpØËa=¼÷ùî÷ŠŒN‚nó{µÉ..SËŒy’ç¸÷K3í0•ÿÌå–Ø$éÍËߌù(¥÷Ó¡ôƒ¡|wñžºu¶üz ¾mØbíÛ_÷€šÄ«¬ïŠáxŽXíÙ½Ÿ ÇxÑŠ;€{%§6s‚z7š©¿•_ßVíùrUä¾ µü'“í‚LÅ4AÆcmý¸qnÉAëÎ 5­PîÍPÂh"¢²žIÎv2Vê*ɳ\}o ÷‡9^SÏ<c_ã½£X[4Ùú¾1a÷·Á“ö÷Ë@Ÿ¡–ÏìÇÊŒ5½Ï7ï•WïíÝY_Î?˜ µ­U¤ ¸ÆnA|ßð^çsă·Û»ödFØßÓìï´ÞÓ´ñ ©¾”íq—ŸfÏK‰6ô1¼FY·×¼†ònR˜uÖXßö<°çÒWý…Ü׆’O{†Ê¸üöW&œuB ¾Â2_Ûç¯3¼ÏÏc™Dðbý‡cüe„:OlµºH ¼(ø ‘ç¡U»_KS=¥\ÎHów¸üÌ~ÿG!†æºæ/ † k·6ãwÆ@Å|éqïSÚ7?¬ÔÒ¶ ´<R6PÚ×6KV"®úi.mÍ\›H«¯öEŠaÌ- Fk‹·ZaJrÒµŸþu«íÝDm·+½ý6¡˜»ˆI•'wÍK®p‰/, (ÿáâP" bË —b:LûxM@—±F{Ê&›±b·SÈf³”õ»—ÊXÕRù[l…ÍøÁ÷Û¿lâ«ß=¥í°‰ÚrËXþ²³r¯óÄÇæ»Y_;ž<ßMHöúŠý.Ž–…/£ÍÄßþ¼öÛžÝÚñ»µÜÇý57ãš}mÔÛÿ’"aòwkRÅGµO&'¸êuìûž|¦zÒ6Áçñ‚Yæ®ü÷:ÛßàŸÜªMµ½,Ø?–¹˜KÔ9'ilÈ_CÛ-ÙÊè3›æÁÄÔEöÕ²ŠnûC¯o‰×ú«g}%ÉG’£™ÚÉLù¬G¿òL0®©ûßó¯`Nî\d ªåú,ÛL×Q»õ m­:jÉÁŽ&b}LáÛçG‹|Û$¨=ÿ [|ò×mKöZñÉß i«æØ­(Ø&u˼\‰hdÑV-óäIùÙã0A—݇œ¶Deg<ÓÆ§l*eÏøãaYQu£¬3µ¾ýh;جP$Ø­å…^§eshÉÊ9á&txf©aǗУ¼óî‚DíÃõöøNhÚ- ›eY!«H7 ³¿RÊþ³Ò&:¼E{Ø&²±D!öü—µ@r~ÊÐÄ’Óü-Úöý'ägªy˜“,ñ–;×ne¹N,ší³Ås0e•‹ûç[b"Ë—ÁªÏ­/k+RŽi»vûöμŠêÜû¯  *ÖK­ýjµ¨¤=ÚÖöXZÒžVËQé祴Jl½|æÔzŠ m5ÔÚCÔ*œ>/UÔ¼D«ñU  ¦Tƒj"0Ü XßZ{ï™õ®Ùkö왽wvþûy’={fÖí·îkþó.iË´reË«n|µl·âù)iÒÜÓs—‹÷Ö¦ÇÏÿtÏq¡Ð´¥{Dƒáé²EâòAb/%jâVæÆ‹çWòxï³gð¶‹ ‰Ò(;‘ËeËfq+«3Ó±|6ÔŒs=âRñãÌtý²—©åÌŸfR®í¾ìqúÄ`P<ã-ÑàÔŸÆÍâO“ u^_;G^Û!ÊÇé²hMÛj& u¨Û¾O7’¹<òŒ˜þ ­Py?¥ÊwAÒX@¿m¨®—TjŠ  a//EÚò˜¼VkôͶ¾Š Éø˜È“&ç}ööºJãÁÇTÀ;ya¸UT0ñ9_qála¢0£¿tïyj|™,êI·ÿÎÙø2­qRô±ƒ} ½L¥‚/Vž"ãäØ[¿í¯ê¿²êÄæížù€ûR…,…N{!ÝÔšµÒ‹ÚÄø-òØÎ§¾pöªîÆ,y±±âŠ n½Ê;JQì}ÂËÉ|Í'¬ÈmKŠdÅ.ñð$³¤TÿÀR鯴v×ëqS\xåËÌLû+Ýžç,°q·6tÜn,øÊ”ƒŠ7 Ç2™7õ½þÅI.‹±eKBªÕâ.W&EqµÎÛ–2!™#~[mõž\‘ÌÝÕiÁ×Îe\`6El’ñâqTÇM¯ëØ7jËl†¥1’–Ó¶1·»¢ ¾ø¤|›$:e_¾YS^:U̬¨‹jÙƒçºõ›/ìx­tñk$ ‹Q ¿øb”^Èn7,N]d‹‹ìà 2ê]ˆ³F4vrË"½GEÆ"wÜÕc!\ÇÉœô¸éÈx‹‰¤%-ZsB9U. %šY¼ J”µ.õ19ÌŒ›èŠ_Jü¯™ê,F’(šPÀà<þ±JöÀvê"ÛÝ\ðÐaš–;ŠcÜŒ¨üe!rØþì]öçáy`,^èÇŽÏ|‘X/vGÏSÇ_û·|ñ-ûœíS Cü¯í2„·Îf‚-G¡+£t=zZYà‰]ãñ aXLJ¸]þœ¶ltîtGèÂÝu·KŒû™I|L‹?—»Ãì»XEZ&ãÖ‰¤¯]6Úï5|›Íq® ÌØ*‘®‹Óyñ¸uŸàkŸh¨Ç¬|9yžø>m¬(ž|xbö[â½õNÐéçqŽrÌÙO˜~1A[LªxÈrÅDB·ÎÖÛBêø˜¢¶²¥Ž ,¨ìdP.¥ðñViÉê\eÍk”iý-¯]‘ë3g6m‰“–ägOrœÏ_QqH_{­½ÄoJþgm¾æVä¶%95æžÌ?[›Ðέp0‘h`[ê™…©Ç¼l˜s$}^NÍ6'íŸá§mNÊ­I†:¾Ñë¢Á\Zð²Í[¹5$7^[Œ——*,Öµùœ^mïöCfɰüâÜíí÷[sÈ =Ï íäíÛ§(;±’©¿² J:ÜïØãk>(©°¬1TOÕ홟Qó‹»3ëWR²,'¢¶UQË<mqá£+ HŒ¡Ô8ŠXû¥¢¾È]ŸQkT–Ä„9©ŒÞFG-U>òkÝT—Ç^´A02hG‚ú¹LÆ‹QëŠ=¹ ùêT9‹»mMç¹î#Uºƒûˆtƾº¯ã}‡|á¸Þ3ì¬e¢qöò0ËÛaôôñòios¬ó C¬™½tä²^GfÄÇãl^oË~Žˆly)×-Øú¾+îK#<>×eKŽÂ¹u8Ëssœ&¿ýŸ'ðºf%úžS¶söŸ(Ïò¢¸ñkxLíù½¯O¡Ç_x~ÍŸaÛŸ_¯eÆbH\ó¨Ò"èç×é¾"åã/[ý ¬Ï²Ïà/L™ýl ¼I‚¯¨Å m•xÜÙ®Q~Ï«m2|êÚ±J<Ï®?øÈk ¾bÞ¦•âÙÛ®pÅH±¾X8{Ý]â­ÕL\$­Zém'‰U\ä4¦M«Åª+Å&e ªIŠ™ÓŠ1?“nxFxí3׺ñ¸¨J‹˜7™¾2âK+Û¦*ÁÂÏÙª'5û±ÓæQÓßïr9¸V˵r‚¡{„eìÍê=f=íæW™2'¿bßËÄõ‰<§oÞåZã|GßfÆso‚/¾p¥¶ø›SÛ`}xbT„À|’å]Üå×’…PÊk>Àv;Mþæ†|°i›à+·õ•úzw‚¡.¤øÔ”éÅKÛÃå”Ü8yÎ;ou?ðNMÞÊ…¿5R2ß/5ub¢SœECÉÁµ²!'Yužù´ [´o‘{òÖ‹-Ê¢XÜœ˜5xmû Ç6i‹ù(ê«4×¢rç{ž—r{Û‚¸sûÿŒÂ6ó„³·fžåùcð·ñkÅV«v<ݺ|GÎS3jI¿¼‚/µU¢+œ°‘R^ãVºN›"Þóq_ó˜Þîö¹Ž† ·Š­B¦uK´5šsïr¶«ãî<¾²ŸBñÒÚð\lbÅ[érÄ2I\W³Å+m©‰ ¶ÎžR:¯¸{Í0UÚRðõÉ_#-ë?š¢E~cs¯½GZõ~¦.gŸf¡x°ÖeI¿³-c¬íbÖ»áåd¾æ/¡Ú ûÏOüc<Ô퓵-Í s¿“ó‰—S³¾¨­t²Ýþñ9i‰aqZ#å–2ÜøJ¶Qçs|QÝol¦5aµ?¤ö“òxyøé$YŽ8÷ž±^ "©ë½™}ž·Å< æýÊ/^îÂÌ7•ÛÔ®½ß±Æ—ç§\kI±ÊP­œyšx˜!òË#ŠK_'`2dÖð\@<^º=‰^æ«ÝzVP2G‡Rãl‰Z$…ÆÎ± Ï]a‚)ªô[ùq= <ˆÐfÐFF'e>ò<Q62hÓÇ^ùL#è]ÿx2Û[?—Éx1j]±§…ç©™ûýæÙ¨q‰š~¾Ýª_·¥¾^Ô7lÍÍ­±µð¨aÉWa"ŒQ£¸1™Z±1—;VˆÝÈóÏÞG¤3öåë¯u•z-i¬gsnáÇŒ‡5ÖéŸL+}aæRD—ƒtðòžízË;OlnäŸn»”Õ¸ëíuìyŒ›ßi„Ç9ñ²ÅÏÛø™í}¸üæéñ 3Ì<(òÞJÒéòߦ¹î IËYZÀÕ(f_çäƒÞS‰æ4C?îöí/ß)c[Až>NL¹e’¸ùFóoÊZ€F¤9óø;[Kº3| ù¦°^ –o#ÆžŠâ’2Q5¿&­‡(ž* òI¤Ù‘×ÒØÿÛí4ù"¤ŒcQI©())1ÿJKE1ÛÒoâ/ï¤ËW8&0Ì»øÖ“¼…»u¶Š{k×&<ãH”–zÒ"ÓVZ¢'Îî[´r²äæ—|kÌ[3îê¿1x÷Éåž¿Q¨Ý³|viêæt?|â:löéïËC:æ×ì奛=°Šœ§6_ZX䃤õÛÙÊ.VÏI\2iŠ˜0éfóoòqùiR’@IDATN[ …%Ó-­1l«G&R±‹•R’²¹Å›Í W“tD,Ó–ð-/¹˜G¦Ëµ0¥*œËqw©¹ûn|9ù׸U,^0O”Ý5E\¢¬S%ʈ÷{Ú\›U¸Ôi²ågª5¬b‘RÜ(_—8î|Ê£ wÝÒGÝ´hž¬LÚÊNFå2΢aíjñÄŒ{Ä„+Š¥µ¯Bqö¨Bqêi±?Í4ºàKû¡ëjò¹b1{µ¶ÎÆ™‡-×Üm àkº|ù‡“\fæÞ¥Å×Å­vÅ’ µ/ §ŒœÛr_~,|9å-è»@oõËûÛXÀiþ;›ëDÕÌ2QR\,Åd…¢°°PÄþt¾šã)îw˜¾Êè÷å6zE…º –Ùo 7ž…ac1¤R i:ªÜ-" Ü-RœGý¶÷¿Žo‘˜äp|)GÚB›Ï8)“±wËÇ ŠG¦eJõtù˜Í)ü\èqcãã–ç'O5{Qé…EÅ¢lf•¨©³¿¸ÂýŠ\_œtK$œ=ßv=A+öe;ó;,Çœ) /'ó5Ÿ°"³²$Ç8ÅÃóÉóXq­h“µ-Í s¿y9‹Ç•S6æwÒ•íöÏ(W>sRþƱß´ØÚçsé„iÍ#Ì™>sÒ¨[1î>eÅšo”'O£´œ¡n‹Y,e‡Ç?T›äDÔ÷›…›F¿ãÆ×ÈÏrŸüäÖÔù˜„…&¿xiaä›ÄÄ…¨ y~ÙÙ«dš’Ú"–NÒ–UÝ>IòÞÂÊàTGñ%­¨&ÆŽ^1DPý®»a²1iÊ~0­üµ·~qÐç9^.ÔìZ˜²Á8ª~>ÜÚ ÓV2ò[§:ÕQ”v„—g[?ÇËm¨õC• lmÒ^æ³ÀºæÞdJQã5ýÜ=íÉqän²]7eðQÜÄcÝ)ꪫD™\K..’Ö¾Øü±€¯‹ó;–¶ú¡<æí‹r.nß¡î—VÒÜ5ji…I¿”Ü)æLtÖ•¤Õ,c+\å0è“aú´9**9H/ïÙ®×qzùäoPnðü5÷I#<ƒS«–6Ú.¿È}ŒL,O/Ï<.ö6ƒÕ!Ö^rÿìîLëèî>¼_\£<Ë‹â&jþeÒ×F‰g3¹Å|9ÏÙñüÚ]k×ϯÙóyfÄÄy~Ž…¯LÖ=¢Œ¿xÝuÚ~ί>ó¶"L}ΤÂíþM‚¯Œò‡¨~^й¸%/vüÈó¯Šg•ØK«øGÒöoŽ»TQpºTß»›ÖеKçŠGo»‚5 ê¡Ìâ&)¤âÂ#š$Ö;Nªoîæ›þ‚¯¦×'»ajó‹¬ÑfB$' \”‘àËÿ@±ûYÜ|Òå?)ìºÑv‘¸ëï‰m.¹5.¨ã }¹³ø0V†à‹-Î8+’¿G¹[gòøß½Ø³g&‚/YPÛëçB)o<ÆN,+šƒßž×eÞ>Ž_gרäQ»5$ÜN“2Ób'-qX,kñpœcÞ‘OœcçÒ¯#çnò—ßÏÏÛÂôò¶ÿ.Œoådp(±láä„`~óø¸LÕ-Ü?ŸüP·5/*uÛý– ËKŸÉ´rëûÉ(lÿ šoxì‚/y¿fË;cRé3Á³ç¡~¨¿žÈS/Û¡|M£Ý–/ËÀÊɤY´•*.’É’à+[ñI!ø±‰œsaD,Žý½YÜä2, 6Æ,\°Å…1Ú]²Ð…_ãîµ@)•–/²<¦I9â®4¾6n5KªEY’õ/Vï°Çœ=Ñxñt¬\"nbbC’Ûi.÷‹+/;£ìåQÅéÃÙz›d½í'cf+;Üo7u´Õo]Oö‰šçØö„)݇Ë/“™|ÎS,nla’’»÷/›öríçÖvžŸ+~îW¸XF˜°‹˜[ sdù²ðU4q¢˜˜ò¯XL,›ïÎ ‚ûi™tNúå…[¿ö›õѬ¯rû}ö À)Ó…ž·²Ý>)UÍ„]| #þF½ß"‰ëÚ>iJ¸Ä„§-e}Õu.Ýñ¥1^ð'ñq¤“©¿õØ»åã•l”)c¬¨ørNÎxÑvÎ’—cHÇ?[žŸf|ÚÅürþR„Λ8»±¢¬j…a±˜ûÅYé }Ê–OýØkÿüÆÎü˱OxêάÏ×|ŠÌÊ’ã”OxÆ=Ò:F©[å›ú‰}tãÄývÝ{Ë…ùÛ©ÇÜo³œ©˜ù” 'ÒYnÿÒ*WÕzNæÆ—§ß§>©(Ûêb:a*«%<_V¨|áaJ _ö]êø9“¾™;ŸôXó͈“™ß~íªST¢¶v†, ¼N¤•Ç?T›”ÄÊ{‚…›F¿ã†ÍÙù0W–;§ºc.ìaaú¸åéuËmPýò&Íó›ûé¦Ã¸‡Å‹å=¿ ‡ò‡¥Ì˳µ3‹k"Î֌ښi¼,µº~œ²Å·ÍÞx(d?˜VþÚÛ/™äßvÎñûص0eƒÇ7d›n´Û¶:‘ßÉ©÷ž‰ÚŽ•g^nýÚ3ó¼/ùm0cuÅ›¶¤< ¼7Ù‡¨q‰š~înbšû©r7&S¿~E³–cè1j$7ÒÊèÔB¿ø˜çu›«òƒÕI[ýP·ð:Âê-çb¶¹RØUâ»H¸bWiáÇÝ"ÄËÊ* ʲhÆécqù™øÇË É&ûéàa™Ìâ‘áLC—µ¨Œ|ò—3²ó¸ÚÒ¢ÜØÆ™~則áÇÉï¼vËÊsÈüöKO¨0Yè矎«äcÃó|ŽýüŽ27 í&òbeÆÝ…îÇe3”õç”>pÓ×ã}¯´"æ]\žºÈ2vân’Ænl, Ë|eìµn¶}³‚á¤;ú7Ëä¡üŒÄ„§MÆ?›ãK#’¸Å)DJçÜ­S²U¦Œ±¢Š*çä¤Åv.ž,ãÔ1$ÏϤøÈ:›ëEõœ QZ¬­òòÌ-©p¿VF$ù0¿úâ¤[:´±7ý“¹o;{ïòüdšÅùšOX‘Yy’’ôÓ'<ó¾fQ^茭äÖ SÆqâ~‡¬ÇÜïär–ºÍ1êxÚ¿´ÊkûÝøòô³rj²µ—ÉtÂTBŸ¤|áa2Ë–f˜AüÌ»õ/æÎ'=Ö|ãq Y2i;í Yx›’H$¨6ICò9báú°³Æ—³óq§Ê{ùX§~ò>88Lž^·Üúµ»>)óžæ~†ahM¿×s[™—÷´×U¸ã¦’ùr¼ÔºÈµÞ匟\k=r­F5a‹J nŠEL,™Vôi÷ƒi寽ŽËÿ¤²Î®ù”+žnÙàñ Y—U9é”S[˜ùšF&íç`+ϼ܆Z?”QòÛ`–”‡Þ43¾÷zÝFKÔôsw~k½ÞXr7aY;~¥]7ò;}7í¢ªØi‹Õwœ¿TŠê𢶮NÔ×o µÚÒ²[¯ba±ü³Õu¯#ìÎÅ[Fùz9WÆ^ºàIKÒÛÅ¢(gܹL¯&™t¶îŸy:‚Ë;g®¬eÀÈ'ãìýÿó¸zóßqeû¤^;Ûr¿y^ñóNxFÛÅʪ¾næÏo¿ô„ “µ~þ¥~í8µßQæ†!ÜDÍ?î.t?îPOÇI޾Ó|ñçÂûïók¦°dIWðÏÆôó?“ñ—­~ñs~cÞ_ð¶%GEÞ‚€€à+‡…`φj×ú×#¯¾+º©Ä/ê¦pÌ‚éúá±cQ(Ù/nyÍgKÇ[Ó·nää…¹â*ÎF\<÷§¿µåñáêÅâ¥éY`â¬Ê–2–ïßÜ?Î^¥mÝRý0E=¼?÷®…ɲão዗ɳï²lOjclø®žðt=yŽXgáòôµŽÈÆS,÷ò¼æ~ß¾ |dR®Í°u¹¶ŸËêO8Á×>ñ^•ÛŸ;ý}¹Xý¢Û÷^2c¹[ò"ø’c½Á€µ¹N:ÔŸð1Daé¹¼üÑ[að‡«Ñû*c_-¾UÖˆUzŒ£¶^äM(_°³ŒÝ¸õбåµBmçèoŠf®HNTä3öþ×ñ.ˆ·¤¦:ý·1ÉîøÒÏÂMÅ;“±/?Îx…ŸË¤LyÇFF¹qÒb°K!Üg‹øaƆûå°rœÆ¿-eC]ð)ûœs™£J2=”‚¯r·ÆßqëžsÙûÑ|Í'¬È¬¼‘óþö ϼM ‹œõ²ŽV§+ø2Êb¸zÌÓ›œO>å‚E:›í/W~–€ê*'&—+#ýáêâŠr]güÂTmYR¾ðüôCÖ‹«E(Ðzȸ;íç>k¾•Î>lÛÉÝêö…¥ÁéoXxüµvƒ­¿â—}Y¸>ì¬ñM'?;kÅD9nˆ÷ï|L&O¯®gÌ…‘o¸ŸaF.ó*\iQÅaP0u‘hp…½…îØ©¹ºÌeT½¥^[EKˆ ‚Òùzª~ШáÚˆàø¤ÊGvͧ<ò|tˆßpu9pì•‘ß©iðº¶álå9“ñbß³ÀºÈò4ðÞd^Qã5ý5¬ó{hëeÔ°¼þ¸¿SÕM÷&ÏA*7¼½¦BQUo™A2 ¤n½ŠÁòϧN¦7öõNt['ËÅŠÎN&Ú* 'vÍqúx4Ù(@YL‡ô‡•Õz #îÖ¯ ÄÊŠù·o¾s6çsÙ¦^Ã|m½–s âg´]>iá~¸q’I3Ó£Ë3¿ŸÇEÓ`uˆµÜ?¿ñ´u ¯=ö=â~Ûã¤F™¦t5ÿrÐצŒ§F“£¸à ϯÝ€ÿw6_fV¦Ê^GÂŽ¿¸[§~ñsaŸ›±Æ/Ⱦ2`Ù.·ÏÚ¼þcññf¯í®¸§«^{Ü|-ø8ùž´_|»@×ì¡]èå4¢\,ül[&®w\F‰…Ÿ$»ß¾ìa1ö›ãÄ5W]!î~f™Ø»m)s3F¼aq£Â{ã¶QîBâͯ:‚4ÖhgËÂW68ÄDR,n±JLÙ,­zò æfˆñ ¶·T™Â,.š#,!ØÚ];ËõKïcÜ"Ö>3É=?ú¶Ù¦¿ ·*®;7­YsòÞÿl ¾Ú[›Es«èhË|÷­E*ªKé|ìà¸Kv-Ô€\.»å]/¨%Ǧ]´¶û¤%ùæØ¾èWTn{0)'«ôÒÂUYë8u1h’PÏ®ÊÅB¿O{k«)nc‹Œ$'÷IeUصÒJ[‘(..–[ÚÔżæñáñž…Ûj=Ï1¢T=µÐ-»%óM;‚óÒðÄû#£°ý'hÞ`l¿}yÈ›ù5ž§Ú–n6Á‹œ§Úcë‘|m޸ܰztî‹Æ#©™u³›gê~|ËÁÅV^Zë'ðÚ%ÖlTÖuøu&ܲ‰dä½\\“–à«%·ñ1ãÏÓ?¶‰U”›¥]ï²;÷®j‡„?kг–§iËCœWÈŸØuu©²¥©·ðœ;}¼W’">«5,#eüòT(f'¬“¥ŠßÜ»ôÁHéòÄÁ½‡åÏiáz°Tå‚'.‹í/3Eµ<”Ä1^±9iuÑ|øTm SžjÖVŒ¨ 4¾}##û'[ÖY¯Å¿j.⣴„ɸ‡j¢—^§Ã¶Ü­n_X,içåN»á(R»çwšÇÌ;k|ü”uϲœÂE¬f~‡ÉÓ«ësgad¦+ù÷3 ÃÈe>¶å—´è튌ù‹xÍÕn;V:³Ì=žXUŸœˆÈgBöƒ´ÁQL•ìšOyäù¨ËFôºl´ÛÖ03ñ;5 ^·Â¶#œƒ­^c÷ðòm+£u•:Ì’™3Ýí Jç'„Tgrœ>^u›£#”µtH/yX6f‘ËZ&Œ|òW°ñü÷Ÿû8krýÎÇòðdyuæR<”ElîÆ9ñ3Ú.VV¹ßÜžß<=‘Ãdm`ä1<¬Ï±_\£Ì C»‰œ™õµ¡ãéÃ.[§÷µüÓ}N¬·/L~ÏŸã&=Ç=÷íëϯS§/] _aóŸ×‘°ã/îÖi Œúlô¡N‰òNìÜoÈ6¾¢mÿH<îl×øà«¢ÉãÏž ÿrÅ^>X%6{Í{ÉûÓ|É-ÿî?ôCÚOë[÷ñÎÁ9Þ¾ì1Qà.~’xvÅÆ˜Xhá-Z˜5vÚÜ$ÑÜOsøæI)ø’Ë\îÆÝ®‘uRRÐäˆT'6÷cçk´-B'CPU¶$).NZÌïìp0¶PŒ(øÚ»in|1ƵÌÏŸG—ÅYëxs$Œí¢-Θ ¾ö~2[Œvóq cë0–ß«ŸKäõ(q—é%üä|³&ø’':oÝú Ž…wŸÁ¹§šÈŸl™´Ì®ù„é7 ç¢#?‘ÔœÄÖG…ESE{0šG}†‡ç.bëËò%Ÿ9Zô&ó/+“¾p.' Ö¢2Üx½/SÂ-->âÛÕ8Qžïnÿ$'Y•Á—g°ÂŒ-×b6Ç?i¢À¬+‘™Žkp^º~øD;‹‚/^œÁž}–n6Á3†„ÌSÓóWLð%Å2\X³z4eް[sÚ#!<ÓÂ\Æ'•xF]ãL ÍêyâT·­ÖÛ5rÿ¸ÛS'ÏsÅH ¾ZÌ-<é´ëÅ\1SÍl½]¡*7Ív¶ßLðݸY,Xð–˜+ÿ–®æâ#nLöuãÊÅòF'<êxÍÒJÆCmµ§ýzoÙò˜ÿs—¬¶Z³òúåüæü öL6›‰ÌTú¦y,¦=?Y?Ô×Û5²tHK]—¸ùÈCÁe9j¹4ÓåµÂµKnϪã¬Ò$èsx©oÓome‹ß“ò8ƒrí¶õ¼ ÇCʶ0IŒ·z+OÒb¡§ìyó=VÇUå«ióf±¢¦FÔÈ¿º-ivöfÓšÞ/¾Àå3fIåQPb..x—?ÛÅw ø˜tf­NkßæXŒ=h÷K“!('a,äú¹a‰w·0JÔ¹ØøE¾( c,onߢó­Á›^æ™ï!ï“Q™äj|iä_ùÉ`ü¶$×=µäõ1Üš´ÏAª|d×|Ê#ÏG]6¢×åtÆ^QÛ îi³nEƒYËsãEÎØê·Ñ×µ7,O»³ÞFM?YÎK“^pÝ⬹ªz:QÄv¦V”ºÅZŸuÅñRlê-iJl]k§m¶1cùçS'ýÆüfùvú:·øËª—»²ñ¯j#ùü•Ýí˜ãôñúÀÛ7BÙJ‡ô‡e­{ËZFe€ÇýÊ€ Cðü'Y÷ù‹hñ» ç[©ü)šZ%ꛥ,i.º¹¡VT”ê·IˆJ„3¿pbåÿ]ïšæWþ—‹Ú†fÑÞÞ*êjª˜Ø)^7xœÌAE˜‰‰|;t¢f«&LU5õ¢U¦¥³½YÔ.ª0Âåo„vÖUe¬¸|NŒCó–:Q5U¿U¥b Δ KEM}ƒ¨¯­ÍræÝ뺤¢ZZ|“e@–ƒ-u‹DI!kŠ«˜E…à¼ôg¿=ìì ¾¼<8+>ñÓiaéf)Å/)4{ÄW0Ž£n³Wnë6îëÖo³æÖÓ¤j¥¶†Æø ™‚âµy}µÞÖ1–ÏbB,ŸßK—½/fWUŠ›®(4Ú’‚¯u¯5 ´ ìÔ)¦¥²5 ôVS±þN>ˆ¸uÆ‹B ·–×~"–¯\-Ì'¦MæmŠd2®’ ovˆÛOs8¥g)ÌI»U(ÄÄ^ñû䶤<dŸ®Õ¬Všmᄇ«Å‡ëeÉ|zoÙB1×…+^d[˜—å¨årñ VFM‘åfk">Õâö+x›çVü°Þ¦Ðaã÷3&xKâ½\û…m?¿Kü‰ç›->½äc±fýV±tn¥¸Ü-3$ζXÐkXù¢Y¶eðŠëé²]0ÕÇ"IrsþLÄQ'  þ¤v&·È¾¹º^=Tß[mŒ¿âu”ÄÄ m…4Èoãï«R¤©Ý3¾˜º(ñt2…'­¦%—xù.uÜ'nju·>’c­Hù–j|™Æ¢º1îÕ´r7¾dãŸEèLƶ1h¶Ê”wlä÷ð'ú8.˜ /ãÎØ»½v&kÆŠò95¢AÎT½im–‹¼sʘx¥Ð:5¶ó)ûœ}¬~JËvNýmo®3'²x&,"9•%Õ·5<ÆJ¶‡Y›¯YÊ^R%+v‡'Ó¡¸•Vê9G}õL–wR@äZN'N²&±­d•ßéÎy9K*÷²ÍÐ[ªøò9­Nq:퟾;Õ‘Þ.N¥¡ ¨,67o–ÛÂ-ªà[ïÆù9õBù½.òm—¤¿…%²,o‰Õ©öÖ-rmÌ ·’M°ë«´Sm¡Z>¿V4«º›“²þ-–ߺÍME ~•yŸ¶“ç›Á!b9Ȥíäín_R—톓a xÎo±3w>ììñ›ŸeU²}•Öëkç‹Rw«UYFbóy~‡ÉÓ«ó+5#kòØIîg8†ÑË|,xã}¼.–9‹.‰øUOÕc}DÁTf9µU”¹‚ˆwëZ–´”‡QûÁèmDÊèÈ‹©ò1jÙˆÞ¦«øÌtÊ«OˆÚ_‘Ȥ .ÏÑך‚ýfÌÛ›TùD(þÜ/.QÓß.*‹ãõ4^'Š9+享Ü墮ºR»uQŽ¯Êœ9e´°¢ÔÍ(n„| ^ëWã銭ßʾWõÙ5U|ì¤{¢XáîèÁøúÔ¿1¿_ß¡sÝËM†o´}úΔG9N¯º?â1ÊR:¤—<,{?å +Íç™0âãq¿2Àq$ŽyþÇê[»ho®|îcä»ÙfN¬/쩹›|Þ"ë /ËÊ_.ºæ\ž¹<¿yzxÞðûùy„…i´—ÑÇðÚoûQr\yÒFq£â=ÿ¢õµQã)cšñZ“¿:«¶tÌÆsü¾ÿü:CÁÃÉö ÝuLÆ_ÉõKåxôçĪÎèq¾\òêÏ”÷ø€@|E€æ8ÙÓ´Üv9.þýÈ«ËÅÇçÛ¹ÏsÚøéˆ‡V=3™-;ƒñßRHõ^³%ÅGïÙ¯|ž÷>c–T~ö'|lf-7Å¢ª*¹¼¨mêý6çX_Åô¤‰o}¢DÅ‹¶Hex€›86&Hä›÷ ^ç¨ùæ?¾LgìÅ,™€ÜŒ/ k·ìD;pî8ˆçUÈ2•jl”ª Ddz±—¹ý(³dëöO–´•k«µÜ/—•›êÀ§lpž,ùø?UÔµrö¦º¤í‡Ox9™¯ù„™•-=üœlOcuØÃU_vcÍ9bpœâEªÇ¼gåÈ#±­9ÝøÆæ´‡Å%búÓªïr»â˜u/'ޑŠR7£¸¢Æ66a}Wqy•(s„ÎyiéKÎ A¤uÕœ—cÖó|··¹ªiÕstÕïWÄwœp°¦ûËôñ8šm³Ž¿'“tpü˜E­×‘ùä¯N½ýˆç¿;¦qÊ–ç{¦gîS?Ç|y •{÷…3`~Áå™ûÁóÛo,Äï·ç™{™ÉÞN=~Ö×(sÃ(nT ¢æŸr¥Ožw<¯U<2ý(Á—z.Œç×–¹žñü:õóù@ _2£"å?o×<íQ¼½I5Ó/)ñ:õ9±wœo<3Ì´ Âý~M‚¯ ³¿}s­xµâmé˵ìU!æÕ|ì+öRÁ†|©ÎbçÇKÅ“·]˶úKn9n×þýaqÍ´Xu}Y•!6rÜìmZ*¦ð­(U#zÞ ±=!J²u|÷/[sýHÜëýÙ¡ü8ÁMv4N|x;—=ìŠ$Æ?à·åd­˜âné8J,üÄqÿön«OÞ8ÆõÓ°ž>N<»t¥Ü:Ó¹6I¬J²r¶^Ì}`’]huº´ô&­®yÓ°}é 7¬$¦»¶—øöZ½›èi'í Õb*[®hÈG³ô±ëݶ¦l‰7½’ÙÆ¥Å3» èÔ17‹§-Œ×,yÔõsšÍOŸ¸XãºññÄô›ÅÙ†àI×ù³Ç\/Ê«Þg–«Ì|^Çâbä‹ÃºÕÒªÛ”ëSŠËΧÂYÎ,{9á°2ArëKwûOçºÿ÷âš«•=‹ãæÕ ÙÖŒ$N¤·ÐTÜjæV$[¶‹•3ÙMŸgt±xû”e'?—Ë}bÝÊy¢˜[K”yU¯æ®VL¶Š2…¶tÊJ(fœŸ÷8B¹^Ì„u<¿üÎÇø­_-Ê&1‹g ª½º|JeÊmD߫ҢԳ=Öé”ߟTëzf'ØÚÒHçäÛ³ÅN¼‹ìc–Tþ÷'rA£~¾˜X¨ëµÓž«ñL¼+o3‹ ÝvE]W}w°ß>}UŠñ`<-òMø‰ºo((™/#é?†äéçÛÙ¬Âòñ]äE8ßñ¥•޽|˜$‘ýñe˜qRø±ƒß4j™RüÆFAe ü8.˜ //f=W¹§2áY ä8xæ|óSä²áSöùÂ{ù¢QiXNħ HTT7ð*|ìžr˜õùšOX‘Y¥Î|©6µ¨\Ô¨·ú]ñˆÎâ’ ÑØÆñ28Nβˆ0Oô-÷ÊÛmŽUnÝ0_¿”dkÿø½AÇ ±9Y¢N0*;QTÊšÚëôX»h¦W€%Ê„žÏ%bÓ.­3”걙ө%bN­õ±°2Ã#*J,sYþ+¥•ù¥ÎµóazJ™´q£”ƒ¨m§_[œªì—éÔý•?¾`v¾ñUžªü”å@oó©ê¦\ –ÕeéÎ:Ž|a…»GIp˜¾íyšõË–ÞŒF-ó225åúáyª±¸6'¶6Sí]bܦÓÐÊ8†{©Rû¾tÜFn#lß¾ù˜AÙH„¾.‡é$!¼ßŽKÿï¨íHpyv ?^ ö;d{ã›ßNý¿3KøôÇbÓ*­¯–°z›¨›ª~O­LwÄS%¬(u3Š·r½ªûl¹†,­‘ªOsi95Ýõx¿1ʾ#Lþo¥îØ®P,ò:¸·ûä.}¾ý‘—ì¤#¸¼;F)kÉú«×7”0½^/‹ä.•Öú$-”YÇ‹¢Æc1Ö)³%Ò‚y«Ü†Ôw”Té׃ù·÷~ùíWžƒÃLÝ^f2†÷Ë ¿¸F™Fq#‡‘òÏIO”¾6JûvíÓŠ}ž«]Ô¶­ÚÛ;¨³«‹º¨õ4Ž:”öóÜêó³m[íh툹4d( :ÐçN}º£m5+72L’aqì148ex]ÔÒÔFý¥×]ýhÈÐÁÒûtl£y^z(ïLƒÓ¼ëEæ\¯Bt­ŸC_9õ2Z©Ü]5‹vß;ÆL›Å¿Žm›¨¡Y¦µ¿Ê¯ÁtÜQƒ-wùœêj£ ·Éü’Ÿ~ýht?ÌËÓÇ)?}ÀAýèÉ:ãOWµµ¶ÒŽöv™}*>ƒhȰai—¿äðeYil¥þƒdYéì/ýò”•d¡Î´µl fÉžú+|ƒè°#†E(oÞ ;hú™'ý¥Ÿý¤ŸÇI?½÷äà·* šYY8Œ†¥É«­¥QÖ{™g²´r –"Â-²~J`2_†Xyu´µPóUmÂq’QÉsþ„—Ýv<"§6ƒ<åaÊÝ5©=Þ¥òÓñcYg·mk¦ŽŽDŸ1plC†Ñ€ùµsÛjiÑõhˆthèv;9jÉgºh[“lb}GìÓÖu_|’cè{&Á¹Mr¦NÙÞÈzvL˜¶Þ×ãô/ìÞÖH-D%?9,‘}o¶ó©‹vnk¥öŽxÝA"”§ôS”ý;w˶«¥M·]ÃŽ9Ž QRÅ(J¹Ü¶iuôBýºÚ©ßà£i¨§!íêh£Ý²Hõ“ýw˜:›*ž¡®uW¹–maSÓê}Šê«‡5< ½]ôÚä/ÓOÊc£1’[¦ÒŸ63R¹hØàB%·§ßܲaµ÷Bý;ey9ìh™>3ͪ¼¨&H•—œ4Ñꢗ&I?¸'žorÛ/ºä3fTmËî¥!_¾ž ËjèïÎŒjo_¦™Ô,Th‘ËTc£îÇu´µQëŽÔžh_6DÖãà4³!è¶•\N_¼öÉØmrëšp¦œ‡É:ÚØœˆ‹c=|Xà<2(ëõ¬Ï׬¡dÿdÇ2º|З)F­°œZÿþ3R³×¶ÆF’ÛªÉ 9B¶}YjàBÏS–û 6'½ö/,Ô.5à“\Ô”l`‚KË?¦Ñߺ)æ•ÿÒÏ ìk‘ë¢,_--ÍÔÚžóv7ÜOO‡œ—ë5‘ÃÒrÃÝçê8t9‰ÜvZTv¬ŽzÀÉ®Ø|£_¿ØÀ#Ñ–5Ò´oM7-Ñ+ëpU¼gÙ<3ŠXæ3Kw Ýûí#èúc©ºµŠ¾\Å|ƒ‹ÚFn#|c’Û|ŒR—}£ê¹ ¿³ÛŽx"¬~fq¼hñ=S¹ÍïÀDM¿t׸E8zxð¼*bXQêfh7rì²nK»|VÕ_Ž…ûYÆžòùJ[|,1X-$åøÓµî%:óÄÄŸ©WQçƒc3 ç)}YOGºÜ£”µ<1Š%IÎ}64Ëç±!ã :þ3²>¥J«ìo·4»ó¶´ê_*ÿzðµLÆð¡“enÑM&ù©¯ Ïì¬5%ç€Ø½‹D×Ï<¿N^íó òü< ÿ:à`ù8ÝOÈüWÞfü•§çÄé2Â}û ¨z«gŸ}–N9å:ôÐCéÀ¤ý^ð¥Ä¤#ø{ÚItú=Á*ÜdN žú'PÑÓqŸ]ºž~zz+/™G(mTg©:M|@ú=R`´mg$íu߃ôy»W=FŸùÚUñtŽy”Ö̺‚õ¤zð è {ˆ®Œk In;²gðÁL¬ûÇct÷_ªéùÕ4fÆ|úõ7=¥o¥ì翘èç¥h³YŠ6ÑòE#ÞµAŠ"Ž—¢ˆ‚RjXñ[Âh(G¸èIÚhÖåCh|bŒ"wa +|Dé=)ÖÉqé+éHNÎäÆð9„›®×¹[k{;IH£0=ãÓ{Ÿ_¨Œ•H£%ø€„'ÁWxfYs‘ŽàKY÷’æ ¥•/<ÄÏø <êjÛDUÿ{ ûãâ¸/çÍ íÏ\fyP•A ¹r*•™ʷȉú–¥‹\á‚¿ Ð lk´G¾5…€ô]]´iy%][8žÞH$RnuI?=Íßt ÑC 0ìé!E¡‹6,{–Æy<-HÄÈÏêL×G³¨ÿçÇË»ÆR´h¡Œ"ὑ_r­O ¾ÒoÿÒ#¶Ž&p"Ý“¸¹¨lM/þ. —Ö½º:iÞC7ИëORi"ÕuÞM'aÍ<=´¸+Àº—&щ?pKÍ©Nß1M¬¬£»/9)ÐOÜ`#ÐAÏIáæeU.,—ÖNÕÚ©Íoœî'ÐÕ¶^üýxúá âû¾üÓýq b_IG˜4ãÞlÀ>[$£ú“뵦}Ò¢íÍÞüüú€ƒúËÝ©¼¯òFÍm¸ý_yÌó´_2~=KœG`y ºcÕ,:ôÌë<1E³W¿@çÛ VOåÓΘ:úÀ F=IÄO^E`ŸÜ¸YоÔ7>  з´Ñ_þë0ºöY3U§NžGó~õc%ò*·rìa +/¿Ì·Ÿ(”Χe¿5ó͹FR°ðÁêMD‡šF|vA\.8èu øŠe\ð•Õíà"Ä%c'Ú¿4ÃÜð·Ûèøÿ¸Õ¸»  €V®Œo—ë\€•D‡¾³G`Mûâñt“QÔ H–¾øö\N@°Jåˆüݲîúd;Ñ1'‚ÎÈÞÀ!€ä•€aáÔI!Íi˜Kß?® }žÀ>irg» vï¶ñ}>åH €@ß&ÐBãHºå}Ês'¿Hå¿klå8 ?‘ÚÊQYøÂ§'h¡{¿x]Ï -­¢ŠßŽír{BÄ¡×Xvï·éË×/ˆÅju3ýúë0ffÛ2úö/Ç-”QóŠ ½x;¸Ü¶jk½_|ëJzɵ ˆ*›N—œin·g»ç@ 4¹­hÉ/èÊ{¬¥Š¦VÒÔ.¡^ô?48H@Û²{iÈ—¯g7¥ªÚ ;¢ç?Sa‘¦¾’ž&ç‡ÆðùáÞm¡Êº„|Ž/ºº÷ÁL¯~~ÝÐ_¾Ý±W·SÔ7 @ð•Ç| %ørâ)ÕÁB™nɃJ؉Â~ù-Õß+k×Ò.ÙO÷?ü:eÄgzøC*µ…‘4o¡,z¡£Ü/‹, j'஽DJ†]Q@úÆVÒÚ­;å`ì`:öӧРËÄrÈsú“Þå7>=‹€Ê·e¾|0wÂ)ô'ßzV4È:ŽÆè¥¿ÓIÿv&,´¤E¸ƒ>Zö5Êy÷ÁCO¢3åVq½ù“ûö¯‹×ÕÓ¦¦ír¢?mÛ°“=î$:õ¤ø{½™âÞó tµ5Rý'ëi{ç!tHç6Ú&%ø'r* Ü{,¶ô|ʈ!€ôrê™ÊûÑÎØØî¸^ðLŇw_I‡Oòpº» ` ßÝÄ»=<õ0Fì•ñå7©¿zãókiÕ+f¤ϯs\8àýþB‚¯<æt$ÁWã‹ A@@@@@@@@@@@@@@@@òK‚¯<ò‡à+ð4€€€€€€€€€€€€€€€€ôB|å1Ó øÊ#|                 ½_yÌ4¾òAƒ€€€€€€€€€€€€€€€€@/$ÁW3 ‚¯<ÂGÐ                 Ð ôÁ×Ä »z!¾Ì¢\QQó`üøñ™y×                 û{^èKçoŠ„Jï³Ï>K§œr zè¡tàÒB~Bù¸ÙQœýü¼]Qœ÷j7•••±øÿð‡?ìÕé@äA@@@@@@@@@@@@@@@@º‡Àý¯ ‚¯îám„Á—?@@@@@@@@@@@@@@@@@@ð(——!øÊ%]ø                 }_yÌS¾òAƒ€€€€€€€€€€€€€€€€@/$ÁW3 ‚¯<ÂGÐ                 Ð @ð•ÇLƒà+ð4€€€€€€€€€€€€€€€€ôB|å1Ó øÊ#|                 ½_yÌ4¾òAƒ€€€€€€€€€€€€€€€€@/$ÁW3 ‚¯<ÂGÐ                 Ð @ð•ÇLƒà+ð4€€€€€€€€€€€€€€€€ôB|å1Ó øÊ#|                 ½_yÌ4¾òAƒ€€€€€€€€€€€€€€€€@/$ÁW3 ‚¯<ÂGÐ                 Ð @ð•ÇLƒà+ð4€€€€€€€€€€€€€€€€ôB|å1Ó øÊ#|                 ½_yÌ4¾òAƒ€€€€€€€€€€€€€€€€@/$ÁW3 ‚¯<ÂGÐ                 Ð @ð•ÇLƒà+ð4€€€€€€€f‰+@IDAT€€€€€€€€€ôB|å1Ó øÊ#|                 ½_yÌ4¾òAƒ€€€€€€€€€€€€€€€€@/$ÁW3 ‚¯<ÂGÐ                 Ð @ð•ÇLƒà+ð4€@Œ@ÛîvzËzú`Ë'TÛØ@Û:v‚L3x(þiq´ü~< è×?¡ÀKˆN`¯œ4¯~Gþ-§æUoS{Ó†èžõ1—ý ¦aŸÿ" ;ùKtä)gÒ #éc)Drz"Ž®=T+çêñùú'Ô¸sGOŒf¯Ó²~Ÿ›«šN;ú:äà½>MH€Ø _±QÉþ¹#[ÿ=U®ŸŠ~%û€á#€€€€A‚/G÷þ€à«{y#4“ÀG[7ÑïæÍ¢¶Ý4xÈa4xØPê…MR–~u´ï¢-ÛhçÎ6:aèpºíœËh˜\TÆ@@@@zöæÍôÆWSÛ¦utÈaCiÈQGÓÀC1^uò¦kÏjmn¢6ù§>_þù]tÜYç8—ñ Y'°¥m;Ýòzmnm¡C‰Í× ”õpà!ѹ&Ò¦æëm­4TÎÓo—óõO~Ѐ€@Ÿ"°¹m[¬_ÙÒºË~åP¹Œ~%7YÌûµþ{Û9ãe¿rdnƒ¯   û=¾òX øÊ#|  @7Ïy‚>nÛJß;–†5Dº@Ú5ôÏ×^£1§œA×àQ7G    éxç‘)ôÉâ—hÔ¥WÓq§œžŽ“ýòžŽ¶´àñû©mÛ6óà:àÀ÷KHtî Ü#ëãâuÐÙÿy}ê„r B ­›6Ñâ—_¦i‘å·ÿñ#>EàîTÑ’õ¢_éÆ\mÚ¸‘–¼ò2}ñèÏÐ-ß×!#(ý‰_yÌm¾òAƒPñ_î§Ç}оö½ïyhtÑú—_¤ú»ið—¾KÿöµOy®÷ΟmoϦWî™Ký Σ1¿ü.’§d¼þÔ,:mðpº©ðâ<ÅÁ‚€€€€€IàŸ¸Ž:ëéÜke\èj©§çÿº’>’V!Ú;öP‡ÜQnàaƒé˜c¢Oü,}íÌÏÑðƒ '}þLJoü–Íþ ÷p5©­ñ\¸õõYÔ@»é;{ç}s¾N´•Þ¹c­XEtFÉõT0âð\` ôsñ«¯ÐÀít÷ùWÞ‹@@ 7ø­´¹ñ€NúöEy¢~Å$«?KÁ× ¶Ý4ý¼«²ê/<‡_‰<|Cð•è@À%à/øÚI‹¿{:=³èä;_¡ ¿éºéÑ[éãE‹©©ÿ¿ÑW¾}¢'ª»éŸy8~úGo¿G£Fê¹§{~BðÕ=œ €€€€@úü_m¼BG]öH N¤ûŸB×äGœ‘"b9»ÁWÎÐÂcFÀ_ðÕçëDû>šM×øyœÀ ?üåÀxt×!_ÝEá€t7Áú•\æ_¹¤ ¿A@@¾òX øÊ#|  ÂÂ×NZzÑéôäËDÓ_¡â_ôÁ×î·gÒ/ÏšB4òw4õí+“,x}|ß5ôÇæÊœ¿~Ýr7§—ñ!øBåèi|_u¯ÑQãÑ=‘~5ù":¥sí Nzÿ_ é‘…õn2žªz†.<á`÷w_>€à«/çnÏI[*ÁW_œ¯SË›ôÐÑ?¤•2 ¾:ãúIq~Ö! øê9u1È.T‚/ô+ÙeÍ}ƒà‹ÓÀ1€€€@.@ð• ªiú ÁWš p€@N¤²ðe¢¿»q3mÛÜHí;‰>| ýì‰tÈÀQïØN›k×Pû¢ƒDƒ9–?öp:Ðãd_ÇNÚÕ²:vuõïGý ¥Ã‡›Ö¹öÉK»jfRÉ(%ø*¡Ûßü/Òµ›öÒAÔ`¿„]Ô¶q+8ìS¾ñJ7 û”ß]Žß]´ý£zÚÑ$÷·‘étÌ tÔ±füx’ øâ4p     Ð ¾FÓ[oN¤‘lûÆç=I_úõó±èëW¤×/ýœNÊÞ6Z³v 5µwÉñû!tÔáCéØáƒÉ™;7víÝC]r\=pÀAr»ÈFªß²›ú>„Ž~ tÂÚÝFJ¿¶wÊéÀ ƒé¨#¥_Ã’ýŠù¹·ƒ6nh¢M;wIYÚyï‘ô9nòg/uìÞKý‹S׎fúhöX‡ 9„>{Â14Ø ßã‚/üÌ l ¾Ò뺉éöùº´òÕ¶•¶·ö£ar]ÀöI? ]ÔÙ!Wˆ­/ìkÙL˵ ¹ö Ö*Žüü‰4ÀÛ%„àËFç@úl ¾Òo“ôö×~[:ö…êƒ4€€€@&ÁW³‚¯<ÂGÐ Ù³ðÕöÍ»î:ªšõAÕïýé:ÿ§g$‰¸6¼ü ÝyÑI÷]F%­¿§ã¤P¬ííÙôÚmOЂ—ÿ™|ß7PÉ#è¸aD}眓bñÛýÁﳤõ¬:mËktÔ¸ä9)Ð’º¾alÿØ!·¼4¶ý£³]#|Ýúàc4ù«¦uÜŽÑЋñ«;¦ÒMçœBƒõ®Œ.3n­ëñªçèG'˜7-xø·ôýr%຀–¿y}A^ÖnFË­*'š[UîXIçÞJ‹¤‹‡ÿ"ÅiŸUâ4ýàK³ÀQîd.ø ?×uçÌ2YÝ=_çólmá+|TŽèt\(E]w›¢®–7èÞ£/‹½¤U´Rn9ÂÜÖ‚¯Ü•iø  _™ ¾Â·Éº=Þû¾ò[ð:€€ì øÊc&Cð•Gø@ ‚¯Íô×3¾F¯Êg'ç½¾”¾ÿíOy¨ê…ÇÚÕö¿ßK·œ3]>ºn{™t<ÎåÏÝëÞ¦wžý}²f-mÝÔF‡ÈÍ_Z—Éí?W}_† Kûé.2×ç/Dÿèí÷hÔHsxÃC“èÎë^Ì<[G&¢Á—΀€€ô Á‚/¿xžEOýe](EQß|–þÏÅ7`¤Ï¤o ånÞ¥EoÅÛ_÷ÍzŠ®a «ˆéWgÓ}Ì›K/û ]|î¿Ó÷ Ž!çÕ7ÜÏ_JkŸGDzûÕaÛRˆv™¢IaÚâ:K Ñ\Á×è_PÓÝ߉[ sÜí^CWþ{ÜR™Ž«s¾4 å’@悯ðsÝ|Î×ù<[ ¾Â§Aå‰;÷¿àòe°K\ëÞ±üêVLJĭŽëptNBð¥Yà@ oÈ\ð¾MF¿B´‚¯¾U‘è øÊc¦@ð•Gø@ sÁWW=½4h4Í•,Ïû{ }Tb+F—íNZzÑéô¤ÜÖÑ|­¿ïšvƒtác…Ëu*š^žFS.ºŸŸ2=¢1wQ×ti'ÖëÒ`_ˆÖápÁß:Ò¹‚/‡¾A@@@z t_ß}ÅvJL'x_âw|h{›v!­”¿OžðúÑ/¿GG ?”Ô³¤Ö>B·|ûÎ$ÑXÊE]éÎ~=|¬ ÑN¼å7_ A@@@z`Á×YT]]Bg ðON£´ðu‚²ðõ•«iãCçÓ0ÿ[W‚_Ž;šiÅ»ïRåcwÓ} Ka—þÏ}4sì§É —äöŒÕr{FO]q—ÍÂ_b|÷0 ¾zÙ|Ý>ÏŽ2_÷›û'2‚¯VÒî"±à ýJl7‡¤—{ƒúXøê®"Žp@@@`¿%ÁW³‚¯<ÂGÐ é ¾¤«8IÈåÀÓ¼hôïhê¼+I?-oÒ½GÿVË3…YB_p¼]És?VÁ¾›d,îÜgY„aÛ_Ÿ&EcÒò—Ç’—ëÆ¶mƒôÖ½n¸ ŸûBt<Þê?_šŽ@@@@zt_Îvˆ~)Òªé¹Ù¤óI˜þòs†…¯d§Z$vþ¯þHÏ]ú9ê¨{†ŽS[6ýññ?ÓuÊz˜þ,yü·ôeÊBØÅôþ›Eô9-7®|iP8êQÒ|õ¡ùº}že¾î7÷OdoЃùW_¡;Úéîó¯îQå‘L ¤%øB¿’´–­¸Û×”9Ô¯@ð•iÑ…{|Êåe¾rI~ƒ(þËý4ð¸OÑ×¾÷=Ï­zQõä›ÊèGWޤ½íž{ˆ:ò:ø­?Ò­=»VpçãTôËÑqÑWÛG4ï'ÿAUr;GeÍëÆ–‡é³ê¹KÛ»Òr×ù1Ë]D_§«ßžAÿ62¾dgãG´|ö'tÚOGÓAïVÐ/ÏøMÌßÂ?¿Bc<’úwí¤ {–?o mPW<ÛBº“oºnÜr7}Všصq+õ?öHê/ow¯‚/¢–—KÃ¥4Ÿ‹ÿµœ Ï8<Oç_ |ƒ€€€ô龪K _ÆžÔíþ„®û÷_Ð#êôç/ ¿þqž_ín£%/¿H ‡ŸK“G;›.jñ–uKÇ–÷é÷O®§1?ü3˜ú)w}B¿Ÿø *•V¾ÁíÝD¿úêµtŸº.­x½Tõ :'î‡o¼@_úï'bWÜûå/¾bHð¯HGðÕ—æëvÁW”ùºÿÜ?–ÝAæ!øêÁµQÈ„@:‚/ô+–µl ÝoM9–Aý _™[¸Hƒ_i@ÊÕ-|åŠ,üH‡@:‚¯Tþwç TòËãhÞwå¶Ž ;GPÁCiåËÿtNÐ7þ<Ÿ~üã“ÜßëšDÓ®{ÁýM#¿NGn£• ?ˆûÑÛïѨMôü Ñ´@ße9ºŒJZOÇ%¶…ìüà9º¡à—‰ûFÐÉ#? ÕòE~G”å?9—ÛD„JCjÁ×úû®¡i7ÌY ›:o¼iõLÆîõ§fÑiƒ‡ÓM…[Ò„S     Ðý²"ø’Ñ^3ïQ:í×±·>â‰øÊYtþ¡»è•…Ê–úœCËß¼–¾3þ•Zðõáœ{èK¿IL4>"}kèZô–ãÑSUÏÐ…'óµñíè„«ãÂ.ub¤ ÷ˆmÿ¢Eu±Ëòß´¼ú*úBb»Ç”‚¯]kè’Q7Ò+Ò•Mˆöá£e³ÿBç=\Mý™ÖÄœÐð ™HGð•*ŒÞ6_÷|‘ÚB,Ô|=àÁ<{ ÍY+àCðÅqà@ HGð•*¹èWä‹Éž—ˆc¼‚ú¾R+\Ⱦ²1ª|E%w Ù ©àë«3^¡Ÿ$êÚLoýÏ]ôøT&âŠEðëtñ«wPá9Zìw}üôtzêòûã–ºXbN¾¬„.¹çj:nX?êÜø&½tùi+&#*˜p]tÇÿ¥ÆßœN÷ß{Ý"_ŸJ¾ˆ¶Ó[?ÿ=þp\8÷výàÕGè»ç°í$=–Áb÷…Jƒ|ýHZøå±ðµýõ{å–“Óé¸ ¢›þø]:¥OBð傟    y',øMÕ‹'¦¶ð•HÅš7^¡Ÿý÷#´È›ªÏ¦û&^H—Ÿ}"ŇðZðu߬?Ó5#LñTãÊEôëû¤5/ó3’î{d]s†c),~u£¼ÿ·ÝM¯¸"¯øùo]|5Ý7é|ú³Næ ¾FÿŒšî>—“P&2‚¯\–jø  O™ ¾Ð¯HÁW”~‚¯|{„   û¾ò˜Í|å>‚ ÁWD8Ûiû–êÄ@êl%rìáIb'Ãç®ÝÔÖØD»ºè CÒ!ÃŽ¤cµ·u¶í$µË>À®wѾ®~t`Òí]Ô¶n+˜nŒä°iðºOã7_i@Â-    ÝJÀOð={©¥±™:ú ¡]»¨kÀ`~˜)œJ×ïŽ]Û©qÇ^xÈArî°—†sDB0f÷¡¥E†KËp÷Pס‡Ópé.›¾²I~ùð|ù¹8v®»ŸÎ×!ø (G¸  Ðk ø ¾"& ýJZàCð•'Ü   _ÑÙe삯ŒÂ d]ð•A\ö'§|íO¹´‚€€€@ï }ÁWïHw”XBð…Ü„%uÁWØì§÷CðµŸf<’ û¬ ¾öfÙH"_Ù ?@@@R€à+_ƒà+Ç€á=€@J×¾øuHß¾ð¢”÷ábötuvÒœ?ÿ™¾|ô‰ô«ÑfÏcø    Xz÷ÚñÑr:âoé ~ý3ð©ï;]öêsôaõ:ÿÑ7é ƒÝýåû~‘Ân%0eÞÓ´ª­‰¾Ùx:ð ìZ©ëÖ„ô¢À„4ïÙgè(ÑŸþpÞ•½(æˆ*€øŸ¹OQÝ®f:÷ÒËЯãÊʱ~å™ghøÓÿþçYñž€€€€€—_^"Ýø‚¯n„ @’¼Rû&=ü¯×鈣¦#=–†y<,’@eáDûδ}kmY¿žvîØA·3žFsb|†     9-+ß N»–9œ>õ¹“iè1ÇÓ !‡gîqñ¡kÏnÚ¾y#57ÔÓ¦5«è3ßú¿tÆ5¥}$uHFO$ðæúÕtÇßž¥!ÆÑðã?MC:JnkzHOŒj¯ÓîŽvÚÞ´•h›œ·O5–¾}RA¯O œÀÒõ«èοUÊ~å:úÓÇÓárý '”½ãÝíí±þ¤)Ö¯l¥Ißü~ndö€O    À@ðÅ`t÷!_ÝMáx ,\ó.Í­[Nïm^Gûöíó^Æï, -%œqüItþˆ¯PÄ^Y$ ¯@@@@²A ñÝjZ;÷iR⯽{:²áeßòã€hègO¥ã¿>†>÷ý"i£_ßJRÓãÔ4|Ds>¬¡åÖÒž½]=.~})Bý<ˆ Ž=‘Î9ù :ûÄ})iH €¸j>©£Ù«–Åú•Nô+.—\¨~å‹Ç~Vö+ÿFÿŽ~%ˆá'€€€@‚_y, |å>‚0tîÝKM»vPGçã<~d‡ÀàƒèˆCÓA˜á €€€€䈀sƒö–ÍÔ¹sGŽBè}ÞÔ :ò:HŽëñî&°W죭;[i'„˜9A?HÖï£Bêá<>  °?Ø+_úݺ ýÊÿgïmà³(®ýñ¯ÞQQA%QA¶…¦P.-š^˵h­B«`óóªå–Hý ¾PhkƒUðš›+"Qˆb£‰À€ &©$B û?³¯g÷Ù}^öy€æÑ°»³óræ;3gæœ=sæxµµœW޲2_‰€D@" HÜ_n¨œ 0iðu‚€–ÅH$§$ggÐܾ¸=é¦S²~²R‰€D@" H$Ó¢·žCcí\;õ¿Ow(dý%­ 7¬†ðó`òO[Ý’X‰€D@" h™¼¸á=èé7Žo™Jª$‰€D@" œ$¤Á×I^+ ¾N"ø²h‰€D Õ"°¿é ÞØ¸ïÑÑâ÷›ë„ŸÐ1‰Ò{V«mRI¸D@" H$‰€D áaì½©ÚæŽ±‹Ö¡c÷ó‚âȉ€D e!pðHVÒ±°oÓŸøM<·]u:“-ù“H$‰@´ˆ#ß¡cÇ—½^MzÇÕ#ñsš[ÚË£µ£…RÆ—H$‰€DàE@|Ć•_'|Y´D@"ÐjØKGM~·wJkvcûÞJlÝÀ¨K“JJãÚC x­`Êk«põ…ýp)³ré¹¢ß9 cB»VSGI¨D@" H$‰€D@" !аëߨñÙ{|¶ —ŽŒ„ÎgâÛÿyø úÜ8]{õ“PI$-ªú}(£#`ËH^/%¹ý›ÝßcÄ%W¼žŒ3Î8ÿ*\Ïÿý-÷¼D•×ûŸÓýI^?‡ÆµüI$‰€DÀ‰€0óÉw5»°½º…•eH¢9äÎkG«Q_ÿ*›i­8„ÖƒH,ôÀbnéÔ®½3+ù,H$‰€Dà´@@|Äf–_'|Y´D@"à‰€BoEÁ1r“}Œ®â^ü'îÅßÑcGÑ|ì]ÑUÜ5ïÕ0J×|T„Ñ;ºW¯G)L±Ç;¢§3òÓò:†ý Ø{ð€úWs°]ÚwÀe$¼_Öƒþè:°G/tíÐÉFÿ®u(®Þ‰Rl¯®PÃ:¶k‡sI‰|nçnêU€µmÓ mÚªÖ½ÖV 7î­x ”ÆëÏC(³Û¨mpý'îE˜úg£V>H$‰€D@" HZ? ­õ’ Zû+´¶WÿÈ ƒ¸3ÂÌk3މ8ô|¬ù0ï¯EÓíº¿F½oÚWƒúÊrt8ë\\4| z]?Ï»Hê“Tä­ÁÎÏ× ±nΤ|ºƒöô'®êý™g£=ýµ¥~gÐÚþ ZÇŸAÞÔû¶mцݟÑ&žõ8t/âÒ½õ7ЬÁ)@(Y]Èíšœ®Ëë†,®ÊîZ˜!s ÜçÅñX¶tôΔ÷I†×d{Mž?BãwÉëBN¯!™½æP=º‘l.>¶«›¯èƒûe$¯ŸÕ±³­Dšb’ÓÅF.ññ^läj$> Œ¾„Ì~N§®èÖ± É醮Éàš¼m„µÕäù3´«x׎ƹ!«[WG|Š×–Òˆ¼Ûˆ?!£‹ÿèjÈìª/Ç¿­ÍäƒD@"pz!`Ì/š>ØÐ[za1/pý¯ý^Óýz^>×XéÄÜbÍ/Z\m.:xä°:§TÓ†_1·ˆ¹¦?mèúߤ Øã"ôèÒÍÖ ÕäöÛ=B\¡Î/¥dÖ¾m;Šg× °¥»Õïiý—pÍê58LOô÷â4‰vO›c´¹DÍæCç«é‚õyEŸ_lÄʉ€D@" H$Çiðuœ•½4ø …Ž|'„C ¾éªIB®ð‚UÝp ‡UZÇGŽ5«ŠÚ#ôÑEÕj…«÷âG ×Þkñ„p¯)?ue¨®5XoE*¢u#)C@&Åj‚®˜5 ®4C*-ž¦¨ŠÙ68³CgMé«+ýìÐu¨c†c€¬©ùˆªÔÊmw%„¡xЮš""8ÌPŒ‹÷Ö=}è¢25£8º× äD˜øŠåvô!I( Dýŵ}põõ¬½K@'2V;—”B~]…¢C(Äå'©p£D¾—H$‰€D@" ‡€0Ú^µö}ÿ-öJp¸¾GIÖh¦?q5ïâ(ÉG7©Wað%ä²–ÒŒª„ÛÖ–6l´mß‘îÛ«Wa€¥>‹pý}›v)ŒÂéÚ†ÂÛÑ:÷Ì‹.E·Þ—¡ã£ž“~qÔãþÛq€þŽáÉ1òqôˆAWŽ éã¡Aë1ãÅ;¦Ó.ŒÎ”cb­®­Ñ–2£ "‚ÆDÉ$ dÈÒ–þÌ+±ˆð®=/F·‹/ÇYDªÈŸD€# äN!ŠÖB^÷uä™ZÈ媌nÈäÆU|×esM.2(Å›¦Ä•½§KFJ4ÞÄXrºø£ÿŒ{MÆÖ?HSXðS-ü˜>iÏBGlÌ9bn:FüWSŒùE[,½°˜ï3æû½S·kFi:OkŽÑÂEZ&æÕø—æa°åGß)x¹Ðó¹×Ð[ú]Ck¯±¹EàAkBmÓ²v¯$ueEd¤Ö}’'G²±ªÛ©ÚWd½¼GŠc …«bò6" ˜„!”ÏÏQ=h¬´ ?–nÈãê‡o]6×dvÝ€ˆŒ«ćañ±X¯Xz“"ßÄ€€0¢°Œ%,CÍ BßDÇŒïLC cƒ½k:r„¼ž‰MyÂÐOÛ”' 3.9û|Uvòû ûy@‹l™T" 8żi[Õuž×m{v¨5ÖôÁÚ†Pqß™Öh¦ªjˆªëƒU½¯nT$îÙ³5¿$Hc¢8ö£àùDq =¯Ðk÷æb<ëïDxSs3jɃ¦Ðÿîiا^÷Ѧ 1— :¿·úwu¯þÔæâHµÌJ" H$ÖŒ€4ø:‰­' ¾N"ø²h‰@+B °²ÿòÕ˜çºÞt—ֽнS—VT Ij¼Þ¾¥ Â…ù—ä‰AÁy/{3¸ç%ñ.Jæ'H$‰€D@"pŠ!Pò¯`gÞû¸tìdõèDáÉJþ¢G vû&”­} éìð´çÃz'‹¾™¢¥" ½^Í_‹J:šôú>q99u=u!HÊ-T-µÕN<]âYí.:v¬R5ØØTYŽ”Ë‡bRÒòŽF´ò'H<(®Þ‰%yÙê‰ÃÅùê®a¯x2\" H$‰€DàôF`ï¶l\úFýyyî’›HâѶdÉÂÕöů†ÞÚRÈ’tH$‰€D@"p’_' xQ¬4ø:‰àË¢%­¥èNaúsA+¡X’y2 ¡CG#Izù:™Í Ë–H$‰€D@"Т¨+û†Œ“qîC[4­‰¸¦}{±gËçè}Ó¸ÖD¶¤Õ'ÂÆð¶qåûÌA&;Ýxwë—3ð´§£×äO" 8ØFóÌ1:b:ñ‚>ÎWòY" "Pw¨_U|' eH$‰€DÒàë$viðuÁ—EKZ9ÊtH„<'¢•·bŒä+ÔúGþ$‰€D@" H$q@@ˆB̿Ј¸\†‡Æè´}KH‘cè´m~¯ŠŸqLÊí^ØÈp‰€D Jä<%`§Nt9—œ:m)k"H$x# ¾âhùIƒ¯(À’Q%(mÎÀÑŽíp¬][R"K-²ìôAŽÇmŽEÛÆ#ÒøKv‰€D@" H$¨RE‡¶g ]€Ä ù‹a¾Ñ| h:ª€þ—¿Ó’Í›;&œž Êì§3²îÞ´!†Ñ¶éˆ*¿{Ç’o$‰€ ržqå4 ¢õf›æ£H:ࣴ•?‰€D@" H$:Òàë$viðuÁ—EKZÇÚàH—rË}+k·E®ðôÕ®¾I ü' pYŽD@" H$SaàÕ%á ièc[jVpX~w‹ÅÖ™\i«Éébs–üI"A íáf$<ITG" @Î3²¸!pè07»½’a‰€D@" œ†Hƒ¯“Øè-Éૹn¾Ü 4Ú¡ÏUÃлËI&ª¢Q’¿ÕGˆò³úaXbO=µWxT™Ÿò‘wå£l×¹'®ÒÕKìZZà åñ‘3;¶z¯^͵lùžàm‡Þ×\‹º¶4¤[7=ÂÛWûÇù|™fì(üƒNžÛò±k¬.ÁÆ’jµÿõ»fzj ^á'§Fîü·5Ðxrðj¥¶Î5—{ßl-pò¨nÜE|¨,˜ŠZ/?wÃË‹Oº‡Ëþì†áéæ¿/¸ËQ­Å®íÎ9÷ŠÛ¯±ºùÅ{)¿vèí0ôÒ×[q+ gTäÄ{úrŸW¼úµWx, ¶®¹Ä}Nˆ¡þ4v 9½ ¹Ç;¥~ÍØùUv4ÐHîÞ×&]xJÕ®%T&áÐÕÛW4´4ì*Ãö{A<´#Þ剽u^4¹Ä+îñà'ñ¢íTÌÇï¸ó´˜¡s§3ælOç Ôy¦Sü¼G6×£|k jŠ)ípAŸA¸è<ÿ‹µÖ¤çmªø_§Éâ}¯»ø¯v‹é‘íêÉã—ÜqÐbD"H$“ˆ€4ø ÿöü»ûŽÐb©Mg\Ô¿:ÅqÐb9Pþ=ví®Fýá£@Û¶èÚ¥zö½}Îõ¶hˆÌà«…ë?W šÎê?ÃúuGs] >+øž„üv¸ü†‘èZ•‚Ò}¢"{ìqù BÖ] …‹Ñgô,5ÑœìRÌÖ=² Nh,R&æ†oÉ@©]Ë1rHo !úŒA® #1¥¹S¡Rî~Bémé…5`qrÌ*t&#;…aÂÐOb×⮹s{ì|…/¶×i´u¾7ß|9BQZ@î§[‰O´G¿ë“Ñ÷ì±Cå·w _ý— {HÍïÑ •¸øÙqÉ»á»/tlÚcàMÉdHæ]×ò¼PV'vÓF»ó†"ùÚSKy-ŽˆÊãã÷c|ƒóÜãW œ]æ Ê¥pñŒž¥ÎàóœW¸‚cOâÁ[±WþôÉ¡u¬¹íáÑ7±äcZÔXFkàçae¯½°u —ý™!ÍmÉ¥ª\Ꙋ>uÖ…è}IôìÞ ¾¢øî lüp9ʘ–ù¢C[ £‹µWm 7mBÁæ"ÔÕ6â‘ßé잸¸ÿ\}u† ô62ØøâO1ìam½õTNf^×õ ǧ=ıŽÂèëDþ¢âq¾û{¨±±Ðbe‹~W¼¬×QßíÐÍÚYéšk±½ ›·~ƒòâ]¨=D›qÈ$§ã9gãÒËbÀà!¸2©Èow ÿÕãoCzà±ÍDfÒl+¼gÅ…âZl^÷¥¶aó¼A$‹÷ñε¾”ôÛqDÀ[Orþ˜Q¸¨L+Þr¼!VÑ~ÿ!OÝáÍXÿüLœ³šEM$^®¦Ãc¡'ìö¸ð“F}ë+Èïxó´˜ñ 3æ|Oã Žv¤y†þ‚õÄO?3×å=’F")Œ•}sÅGøMïc ËlÐüõX7ózÝíñÒóFGEd±7??c~¿^Otd¥ŸXâXGuãoˆìvâóo…¡ÛYzË0tOhF}_+åß×B¤—¯$‰€D@" hHƒ/ÞNM{ðeÎ'(?@F[ê¯n˜0}Bhcíڌ՟lƒ‘‚g'î;\p%ÆŽLtUèDdðÅ„¥Ä9ÙÈ1 ÕžÆÀqéjQâ£õ-¿2?b;Ë÷läÙPô*ú$k†é9¥˜:¤%*f]”‰…˜Ök4ÞMY€@ÆÝP“y…‡ä´z߀å“ûàUg”‚œ@†¨_…dD7:؈î$aÓ°£›ÈPσѯǩ¤á‹Ц³:aó cMÁT¤œŸ_‰_]ëm0uò„îzlÍ+¡v=påµým¼¯aóR\6dºZñ¹DÿoBÐ9:@¤Bûö·gâæÛ_0³žžY„Ùú›Ï§Âêå‹DZþ¼ÇãœçÆZ`\ӻ̔ѫÓü:[€Ïs^ááIj@QþVlw.›ç ÃcîòOcÈÒü½ô Ñ_f'&•w>žå{÷Ö±ær`ÓвÖêZÍãÉù(ãÕ[?¼i½ø¤k¸ìÏ‘Ëc2¹”{Ý'OIÇSšŠÄ–(VDûî lü€ÉQF¾'üê5ÎCâôîU[¼s¼ Ï}: ÞxqÕŸ1õ–~A7ÿ}*®~P[o-Ì-ÃŒ«[r"?æ€dðENwOØÏu^ñZ«y…G@­÷ZŠ…+Xt¬×Qߩ޽èHGñÛžõ î›8[Ãå’t–ÿÏ }©÷æÐpYÄë}Ã÷[°åßqÁW¡¯ÍÃK=ޜؿϢ’&¼€í™÷jz¶X ®ÿ“ºÄg"ŸP†dßâñÎC°Ô,o&6œ‹¾§˜:Hë(Žw ÷k.[‰ó‡Þçˆ6¹ ‘x²0 9ú›“<cÀÅïxó´HA÷œ<èŒ4ßÖϳîljx>Ïð"š¶½Ž¾‰÷ZA“ß@ùë?³é`­—â®ïNëŽ{—ØC'½’Ew ¶Fñt¼ô¼QqÔHuÇ‘fè=‡FšC|â ƒ/aøåõ³ÖŠÆfÿj<}Î@¨_[±¾W½d¸D@" H$v¤Á—ŽÇÞÒ|\Pê0Üꌛ&ŒC/ƒ¯cû·#sÍF–¦ξ ;Ú¬Cõ&齆bÂMÁF|1¥\Jz2¦óCáÍ_ÝO±ùN/³è°7) r‘qwbPž-ÕàË4P2”‰ $“ÁW–‹Á‹Èé)gm*È;NI1ö ïÎÝza@ï“©¤oÆêÙçcòËäÀM7x^4YØ^†dåYaÄħM¨^]‚´±!v›1[ßM‡}dðÑNa¯º…wŒo´XÞÊh4æ ªª—2Ô+Ü #¼y×jœŸ8™ ¥‰ñ&†«Çœæ—Æ(ñNêA£w‚“ý&T>~´…êÎu\Ë\s9±iIk'm­çYçY\±Ÿn‡^ÐîÚãO»w_d¼²ÅòóÈññâ“îá²?GŽ,‹Éù? }›‚UÅÑ#t¬“÷Öo_`ãÇ&GœšxóÐôtkŒÓ¿[E›Ê~1/(Á-ãR@~µ±iÕjg?üwË£+ñÞ#?°)vº|54+8‘'ë¸Î+|¬rþîÎÕõ>ÔZŠ^–k>'?Ð}NðOWÓY!ÑÎ5aXŠ%k ™}ì}£1ä"Ú u¨…Ÿç`ÍGB†7~#‘¹;ÃÏ3žOƵkÒºâ®ç€`/Ìàk|­‹“ÁWãF<ÐyÞÕõ2$k,żá‰xÁ`8IcCÁlô=k¦Ý ‘zçæ²Câ”%x÷éÛNÈ24Þó§ß9)ty­ÿml¸¸ãožÊ¡æw:#Ë·5Ä U÷ãCSwšg‚~ÍÈI»¿|Î>¯¬ y%Ùs^©Ç?È÷—æ¨ WãgIž‘ƒJô 8^z^¯òb ÇO–ìØGY,>èrœÓ¼j…ÊèÓ¶khB›#^®(¸.ÔØ¤ÂÖnLg}É2…D@" H$- ið…c(ýô]TXZjÑñ8Êàë¾ýðmlªÕš³ÃWáG#/7lÚS„U}£ƒµÅ5c'â²nÚÎ?£ÄËàkê•]ÑØlß–@»¼¾|>ãæäªÅÍYU„tœB£=:vT…ã îùÄ µe\]¤^JK¯ð–Q‘Bó|¨pežNND:;i'ºÇ;uCƒ ¾¬ºŽ}v–Í¸Æ `w'KèÞ»nÿðI¢äd|IlÇéñ¢)œÁ×Î5óH/hÒ~§¢g/£nâ»ÁW¨qÇø}Ô)%#Û“iÊëmÝ3™òÂKênåç~W½ž>ŒN{âR‘Sñ2†°¾îž"‚P¹Ë/”}-³ðj…êÏ<^|ïCõÖ±æŠ/2·“‡€w_d¼²ÅòóÈqóâ“^á‘ç,cšØø:г¦¢»Cm®¯ÆÆõoaæ]s ž/OY†Š…lFAfž­ö†Ÿ GyóÐ_µ_.FÑX‘¯¼ ™‹gàGƒû¡£ù1¬{J¿Ä²yÿù—Ùº˜ðÜGxçž!fÚÓÝàë |ñv²`ât\olc5›âB­¥ØXhsI¼çõC|ã2b¦1QÃNzö}üùw£‚>$ïûî#üqÀÍxƒyëæ:®]!tæ•XH^ŠÿB†Uc_ÊDz©ÜËÝàk|ÅåHGnðåfHÖÀÂ1ð—tÊOac/QöMÍH8tX¯¬÷¥de†ß÷šaAnî>in½¼iäoüÎIzï-ÊÁºoªÕûß„qC{©÷Æ?|‘;äÉt¼žðßåæákIAnëçþ•Ù.øè˜Fõ°C£xÛÕöñ‘S°£èK|U´õ‡£}û³qQb®Kì­ˆÙ›äê[|»µ»ë…Ò¢=ÎîÝI‰ƒÑÛvŸˆÀ! ©„ó1 Ÿ÷–ïê²T©FjÐÀÙøãÂät24  qWfš•¡¢³h ¾ýwv×Öë\kIñÍ£ÙîQ’ÿ 7‡:ðD\p®¸rúõ mÑX]‚/>+Äw{ ¥mß•0¿ä º²_ðî½Æj””V‚„ Ñs”Îc_ÿù7¨%Ø/¸z ~È0m®CþÇë±ùû½Z¾g÷Æk†b@϶t¤c¯à#ÑŒ]ee¨9tÄîá‹•y •Ù…ð)+܈Í%Qô‘†jm-Âöò*µ_ 躞ÝI×]t\cÝŽ2ìÙU€‡ÆÜ§/9eòf\‡#Í¢/ôv´A¤}ÏÖXG±fyyñI÷ðpý™2Œ²|Ä¥ ©ú="“¿Â">Ÿ£˜Aµ[ÂÆ’•è5Ü8~*Ùttü0u«òÉhÓ¯çQ®_ovÐ.ªö½1fâHÛÜá¯EÉ[Üä£RQËQFBq’çøéCaÇyèQ¨|íÀ»&á)ƒôÿ|¿Ý^Æsеëþ ?zÌð0žŒÊÿ·êâ'7øz1¯S¯lƶ/¿ÂƲÄ#š•3qõ£0¼?“Weáàf’‹Ëì2ãÕïÁ¥6½‚ž°Ûö&÷#Ù¹+ê±ù³ÍGE¥&ó ½Áà뇓œÅZ(¤ÁW%þvk?<ö‘N{ÒL|’7—9ðÑßê—èô{¿ûUiþ9÷2ª›×}„¢ïiþéÐ?¼}εU¥;·mEñ7Ũ: 8I{t¿¸']…‹lÇ_Ú)µÉÞï¶aëöÂX`E¿]qÑåCpݵým2Xƒ/êe•µØ08ÐNÊÅ”E«0ƒÜf67Ÿ‰~6™Ï¿î*¬NÑYEõÙe-ñœÍ<íZ¸G ¿uTT:Üã5W³|ÝÛ£»«ž–ó4Íð(é¤ PX®Í¹$™#iÄ( Ò»û“­ÂÏ .ýÂÑZËÕz:¿üÞ(6^²\øº%Šk”ã‘'uÜ»|mã~Ü<ùïj̇W¼Ú'ïÀRÕðËý$•çÿ{-n¾eºžûtdýç’~åÌÞ—âÆÇö”bËWEØSOßl„',ÒW^¥êhQ¾y;}Ëi‡súQš®ÃŒ]Ï9Ï4 ±x¹6ï5Í_Uv~j®¯DyÙ^U§ÝkP°~·™ô®%IïJúZU¡!äþóûbÀ5W˜õ4„ŸC JOLÝÂ|.žŒÑ³Ô/‹È!™lH¶v›r*nÌ1ð—W‰€D@" œ^ÄËà‹Nò÷ûï×ñWSSs’þ*•œe‹•eÿ·AÙ©ÒP©|ðúbeñbñ÷º²¥Ò®Ò ™zœÅÊëk¶¸Ó¾s£²L͇òZ¶FùÞQG­ŒÅîi͸ÅÊœD(Ô-2øRãr¨Ïd¦äT¸Ó'ðÌ]ªÇƒB^»B–cåIq3W)é)Z™¢\Û_Jº²©*¸Ì@^†’êŒËžSf-SJ:Uä(Éæ;ªC 8?µ?T(SÌxÉJv  ,ÒéJœµJ«åe–›¼@ °2\Ã÷a®ÅÙK ªdä‚ð,Í AbjºRàÚ^¥JÆ«­lx«õO¤6)°•—» Å왋lmDGšq«6eZø˜XjõI³H™“šhæc¶oŸÄt³Ý¬2“•U¹Êœd'.úsÊ—>R¥ä,J³Ñé¬gêœVûÕ”t½ß;ãÑáŽÔ¬>Uß ÓîœùiÏØ0²êÄéØ[W«TkTÖ½t‡Žß=Êü—¦[XŽZ l£÷"ÿÛ^ø‚‡Ž9´½ñ¶®T&9úÇzÐäʆƒö<×½4^Ïs¼²ìÃ¥fþ"Ýå3fØžmyÍ_¯–o£éõÊÜ }hÂ%ÿ°½l^7ç½… ^×-, =÷®( ÂÁžW¥²l¾³mƒ•¹Ùò… Áâ†Ë{¼²´0¸*Õ+Ù¯ÌôÄVÔkÒü,e;kÿšÚZ“ð¾þ>’qgña¤.PV­˜ãIÛœÌMAtD5^9/ó÷¶ºD2WÐØ÷š½Âme0ÞÈI÷¬³ÿg+i^|R{.s‰ÇœšÆMv~œº„ñRw¾bÔ­*VSg)‹<ç¯%£ x®¬©‰~Ϋ °u›—Œzˆ+o—9ÙbÍI–tôr:8÷Fÿ8¡k.½ïZóµKˆuÇÔvÏÇ££ Ji 8Åsμ4EY’]lãQ§ñÕ¬öŠ÷˜ã½TY1gŠçxmš’¶D)6ã[åÙ°cïsÒ“Íüæ°µ¹Õ>~ÖXîå†ï‹±ñóðc9EY–ZþpÇ)Ú5£V/>é¢?×Ôø-ßX›ûkC?²‡¿~íÞ_ÜÛÂ×cŽrOP˜s aR¬çU‘«¤¨s ”äô eÉ4¾ÞòžQf8ÞëÞ¿¢æ-!ú‚/9Jï~ÚÆ?Î <ݯÍõµÊ®U³M¾Ü¥|]]«¥ðÐeÊ›­¶»åÑ÷Ìø_?gȵ‰Ê/?£LÖÛÛ9'Nxt¥²/¨œ=JþË¡eÆÉsƒÓ}ýœ5þ>È{OyУ̷6U* ›–)·¸¾OQÞÛZiÖC«ôô¨sÇZŒ“**ÛÄaÚ Û¼(ÞWäq¹ž#ÏR&#§(¹¤[pW¼ÆªW8›§ìã9’µTls‰¿µ(ç#«”¼³,\më”G\ç³þѯ©…,¹=ŸÉœ®dòŸ›<[§l(ÌW6ì(å‡ëqÃÉ‹Á²håþ ÊF“<ôù†þÊ£„¼Y­ÌM²Æ¯Ù'Õ|+«ö º«•g Y}ò Jæêyž?úa‰£nõÖÃn°t£^`2l@™o”§Ò1SùÄ¡‹°Ëí>ôó•±:V7>»RyñAŽÁH½ÞÛ‹BëJÆ>ñ†«&°{½2}Ï×y‡²¬¨ÚÄ«êP}àc0çz±ØtWñ“ BÑkÈAQÏÓæø4ø ûÕÏ:*6Ü"_ïE‚‹µðhõŠÅÓ•Y‹xêSfq}+aèK¶Š`Nð Së×áÖvÁºïÛº1:~/d•øÉrÔ]ï«~ú÷Î{'ï«1ÒäÑŸç|8χbé-«•åO:_ïõ¸²âCk®»ñÙ &‹EÏ-ÏT±°ñòµÊ'«7ënŸÏhÎsÌOÙÏ2œlzòJeùü{<óùŽ}ä5e‹ªw …§1‡6*'²nÕö…œKJ³çèu3ôª–œf|ktö;ùì>×H\$.²È> û€ì-¹öVÑZk½ùæ›ÊÆ•ââbeûöíÊ"ZEýûó?µ£7Nó•uñHpŒ|î·1Ž[lB!yü*VÉñöðUQ° ŸªnÁ€¾7ŒÇu}:¹Pr_f½‹rµŠqÄqèÃ\¸Däá‹v…¬}þI¼[Œ™ñG¤ô#¿Je«ñäóÙ8Ô©~÷ø ðØñÆwú„;¦‘{›°*’ˆÔ)×áÀw¯au®šœžƒ¬©CÌûnLé¦Å9‡¶áå׌¿<-óRh·3ÖÎ…Û©yLËØ„y)½Õ{þOCá«è3ú!-ˆvTÑQ µ‹ñü»ÛÐoÌ ÌHéG›f 1­×h¨›Ýbܽj”ÝP´}’0隌ÔÔ^ØòÖ[ÖÑ$–Yô?ÙSÛÑR—¿ýÇ̲Ò$&cÚØë€‰t¼Iî ô4cVãÕÉñƒ)9u®»ضæe¬Ö RcÏÊ,ÂÌ‘ZJÞ¶fVúÙ>äny‡Ó7ÒÛDLI‹N;¿ÄËo±M¤WEÆ9îtÏ1e»÷ÝËtï#†7:$ìX=WM^h<)ɘrÝ¥8Tõ%Þb•LYƒŒ»Eßj@Öì;p×ËŒN M¤ã‹jF"ïÃyj¿¾ïY$„ºóÛž±`äEO°‡¯;h'ð3øò'âi©î]Q„''õ·eaÛe•_‰ß\kyìÚ—÷W\1B["UÒHÜ;n8õ×­Xºä]+Ÿ¤yøºðÿ‘CíÇ=iY‘´»f=6éÒv›/c¶ 9£OÞq¹Í×…¼”Mºo8ê‹ÿŽ5Y¡¤@ÀÛÇUZ±´;N|©uÝ÷Õë¸bؽfÔ{3ò‰†ÁæsðÍücbü!ËzsãäéÚ(^õÖ¨»å´wX†´[/TxÙVJíΪC#ÞÖ÷.±b šp~˜ØÅOQÞf0yl+ÉÅøK-¦¾3ë1 ›ø´C´Õ#àà®<¼µÅ ûï9U;ÞÓÿ‘Ž‘Œ;¶Ì,n’S1¥×¼öcftÄ÷èýxã\A$òñÉçD¯p^=~/ê‘J^K܉8lF.ÉüÛÐÆî2Ì=(×#ˆ¦àÒN´.xÏ%Œ÷ŠB8ÿesš7uxuZd•©Ý9Ëp¾WŸyßämÐXDë°dÛZC¬;ªrðƒTäÒѧê 4¾Ò°õ/ŸËqåcÜ/f%+§Ññ9Æàkêã—vBÕ—´.fë³ÔE¹xù—b@„ÿñvà4òp+÷>á\cYñíwáûb/ËÃOJõ ÇÏÅ®õ¬´^¸K;]HM˜2c¯è„m iýjæ—ˆeb‚‡7b3»‰~ͨ%æzak†{õgÊ*å[Õ‰¬ ýÈ~ûµE›;Ž›£ÜsªÆÜsêó “›(É$»­vÌ!ZÆœè³Å“·ø•£¨"~Û†÷a ÓÐ}(ü8§5Iˆ_·öMø×o.ÄýK‹4á¹OéxÆÈø™ýÈ4”Õ?Ž‹)îáË*:“}=ä-CÖ7Vè-ùë~7Ì ø~Õ“è÷ ¶zº2÷¿ wŒUã uŒ¤™Ù•)¸—Ž:Zú/‹#™ïÄÍÍôždnÛûqKÑðæm¦wB?ô„ôð…4.®ÒÇÅ,lª™ ®)Z> Ɇ"1=›<ÒZ‹(r]ºúÓ½_kú‘âW)¾tåq|¬F5†HÇW6ð½^6¼à;øˆ×ZTóf!êã-¸¾ÖÔªçãh-µ„Áx65~qíyêSäÿø“EÁ=fyx Ö ´Ã»i?ǽÏi^¹ Œ­{G“W­§É«óðeD×Qwà΋àõ ¦3Àx¬Ú¿׺8ãIÕ{N¯y¤c-Þ¼óBü>È=ëö?A!òó¥Ï ²ïê<"è4­ÔñȦ:$Q™MÛÞDßÄ)1t%}Ń)¤ßtèJ\‰ò…ã-]Í¥˜×>/°”7N¾—v9ˆü%owvãg•Î×àñ?$¹Óâ~"D$ÓÚÜš±¤{ çmñ§‹tŸs4ýÊmÃÉÉãD/7°…¸úYGH_$suØö .iê¾™,äžN_;8d–äôlÒåës.ŸX~æ`Ù*ù^2[ôrµJK ü>¾²\$ó!Í$¾¿ päí÷N_ _-ÅeÃtO]ććŽn~}‡èúÏɯ¡üõ_X¼‰<6¾3íçøÝÏ'Ý"6¯G2‚ð$‚°yñmó[ÆÛ¿HüžëˆuÒÆ’¾v™®¯åsŒEyz^ˆèæ2?¼]¤åú[Cw,·¿q7yL{Cܪ?5¯QµôÔL<é•|,º«oø94!úù@-ØgÝÂyøj,[Kß©mûÁg¤¨'¶hßYß×ôºË‹D@" H$­éá+h·yüŠÀÃWÑËu_Ë”üャC{ ‹Ì×WÞáí>Ñyø¢î¬$§-SŠ™'¯‚ ¶k2Ùòú$v̤›»·ÉÓc×P `…m‡Ñ‚ÍÛ‡m÷*yæ2½±öÈL3¼Oýª·—:{íRõ gù»[b™ÕÓå(UFšªbeYšå™´+W{W¤Ìbž-RÓW)FºŠ]«$›+"?ñ—¶¢ÈÜyQœÉp%Ïa™›*ÌwÂÃ@ö"îY"MÙ¤çkíþÒòLœ’®ä—*ÒR¥Bo·¼EÆîjŠ“<Çæ]¬"Èó—±Ëƒ0öÀ.ÏF‹[a»±¹·µËKZÿe¹¬Ž5JÑ*kÇ)îµ®Âôfgy¸³ÚÍ_ß³Ò»ô'_ÿíé#/Zj”`_ã•l±Ûµü ³Oã•̽|í4öôðÅwƒ‘w¨g×*åÌ;”Ø…t'ë¯ÓW—™;·,oVZ¿tßå“Ý•Êö½•´CY”_Ívæêî`‹.N“è 7>ò†²…yòÚÉvfyx. ÞÝÆ½ŸA™_T¯Š^cØ@¹ó•|³néEØ–YÙ¸CYQ^ÇÒÔ+«^ỽf*ù:fá1¡ÝÇx¯,/±võ Ì–s¯bŽÎš;÷ L_a¯Ç×[;ì@4«ý‚èòïáK뇡ÇÛůö“deYóÜȳñC‹wû¯q›+hl{͉^á¡yíˆ3=a2þ©óèâUŒ·'¦)¹¥Uß«*R¤jcHŒƒ”Œ'zð_w+”ŒiÖ<)ø|‘^~hÚµvŽ FÈå} WIcs"¯Ÿß9Ïk^âõ´yÍbž“B÷goÞ+òöM/y Õ?8­¢ï5—¨K$ëŽgнGßä;Ö“Ó2ìë9Ǻ)u‰æ­ÔOÿ}Àïâ¸w¢eyvOUŹ˘'Ø)J[3aÇÆ¥ûX®QŽÇúA£#T_ôËÏk”Òlîé0EYaóæ Ýô| Ê<ð2,Üqò¿fôÂÖ5Ü£?×İfõ߆~d¿ý:4Ïso–Æ7ÇlãMl=byî"ª‡/sž o+ò”Ròä\Ðä ¿ý+ž¼Å·åS6ØûïC¡Æ¹[ÛXaÍõå•qÆš$Yù <œg/ö¾.yÒJQ>Û¥½³<|iùÞòÐ2ey,6<†}óO&3’ì—oz+QžºÒ Ê#ÿüÔL#Ò²Ÿaë{ž®Vùæå»Ø;òêûÜJ“á=¬ü½ /c<+•[ÔõŒ(;EÉ×ëq´Þ=¡<|‰v^5ËÐ'$*+ŠØúæÛ¹X¨ëƒtËs·Hkyh =E†æI7*Õ¶úIèµ”“îHeZgù^/çÚô+´ó„xãƒó”åò•-{¹LiÉÅN™Ô¯,Zéé1Ë*‹ËàÜv9ÓÐÇ{&ûjr½éáKí#•¥ù+ÎþBæa†¼l«žÃ¬2õ3Ÿ9½–*cuÊÒû3ì¦éÌ´¦Î§>ƒ¼¡©¾Lùš<¦­.T¶í¯¦?£ìm9ö »'íí%Y–‡2Âe~¾%×où˜é’f*ëö2n‡Ë”ù“­>2ö%M®çᢗù:>]שjïüë®xž‚߸éò]¯žüÄ{Nò5O›ë ‹'Ùéñ³ŽòÛñš«Ã¶‡Þœ§¹É•yËìs®©oõÈcËeV2(6õ!ç|}ËÕäákŠÊƒŒñ)¿?>²\Èº×øïWwç½ ži`ÁyP™bé+Ëw»ðc⿆—CØôŽ—ófÂ{z&;AðûQV™¢Ÿñ9ƒÏ1â]¤z^?‘á²oÈ> û€ì²´î> =|ÑjÔþ‹ÌÃWàËUø¼ü %õö&òåñüyø²SÍßécîöôÈ€ïÜ¡Æ(Êâ^¨D¢]xš¼+¥«[ËŒÝ×bórôþ€–+¥+¦t=eÔmxýÇÍQCÓ2‘ûí"A5žOˆ9j~‰ÈØôRzkÞ²ÔˆÍ%H;84Çi´ûõ1ÛîW5Žø‡ïJŠi÷ª–ccÙJôzŸöº/[;|ÕÀ†|Lè3F÷ì’Š<òVѧ”00<‚‘¯Ròàe:3ÑrBíòécx3ó%O9ÓúÀØÄ;gU)fŒp¦¬Ãâ ý1Kw%³(¯¿$—n6ïg˜†¼*òxÅàø.ž0ÐL·¤ ·9¼+T¯'¦ëZmê…i#yOé¥{OAâ,òT6“y*Ùð>’Jç¿LçÂSpc žÿý䨂ÕR]úV#y˜è…ÔÍ×v@¼_:=Zøï{z•=.äáÍ_{RUýbäA‹öðeí ýêùÛ0î÷´KGüî{å/ÿÌÜÅÅwYñKM|çyðÚF¼ÎÒr0ÿm `—ÀØî0ÛN2LÇ'‡i÷¯­ßñÀFÆœ&Œ"ïaë,ïaZœJ,ÒQwPY;_ô^W¾KkúKäáè·Y^³&¬Deæx¯¤z8Ñ}gsWñ£Wâþ›-hZ¤Zü¼z=ö‘öôlQ~qE¾»Î“F¼sgwüNß±üèÇÊÛ¹ã{þzkü·š÷`,ßñ9F÷"`¿Å_ï} _ØŒ5ûé‚W#ޜؿW½’Yxû÷ð¥Õ-Ô¸;ý—O&¾¥;KàžµÔÄ}o1Æ­ÿñ§¹‚ˆóš½Âú¸_9v¾%â—­~þ3V¯ÆÍÌ;£‘çFê;9ÍNcS‰¹nx~2ÆÍÑ‚xrÁG3ÑÏ6Òܯq¡‘²vóÒioït”fM¥yÑÿœç5/ñšñ~Ë×<<܆5Oìz½¶qÜ?8M'fÍE#—{Mu]7¸‚`zöÍÉäYDë‡ r«pw¢£’'¹Wþ:ôë‹~CnĈ=h,FŸÆo°÷Å(Ö©Ænr@Ê"TeüŽšaÇúWñÆÖ¸üâ~¸ñG#ÐÃÁBϼ³eòÜ2D[÷qžÕËÌÙë&¯âï€Hù9MNX9­ çgsVÓúÕ¹ú'ÞMëÐ9¹‚®D¬(ú?нâzQª†Ç°fôÂÖ5Ü£?DzfõÛ†¾d€_ù+$úá_rÜh\Tи°|’òäX¿ø÷˜8ë-=0 UésyÑ™Lž)õék yÆ\(ƒ¢.ÝшñöïÈ€ÖÍ¥Þ—g=ƒ9¯|†tÊC2󮾤š¨úêí`àÎבÖÞoùúÑ¿îêxÉ¡æ$_ó´‚ÇÕ×:Ê·÷øÍÕaÛïó¾¸éÎIßJëvCïlzŽôÈÃÌyÄòµk¾ñ’«£à÷|N£,Ç1q·±è’9îÎ{cžQÃ÷|„IüX?Yáq|}l¶y"Cù÷cÄä¿«ÑȨ”NlÏŠó_š/¶­»×Ôï%¾6Xçk`:`3ƒÚO1éܘ':CGääXŠr¯ð`´yˆßñ£bx,Ï{6G©qY8Ø:N㢼Fl}Ôœ?É䊎ʛ§•çY ŒOÅ|f÷ò"lsžþñ¹-Ÿs¢›ó¼æ%^$翼}y¸­<±Û½mŽŒ’^Ç|è윦µæâeº®Ü0àa¬?ð¾É?\#qV¼:· è¤$åYùIã·øç=vƒi 21#õFôìâüHËkþže¯~¯õƒFM(^ÅßEÎÏÉ*itŒ§ºú'cÓâÜ™A›=DÙ;²hýz—¶~5?.…‡(l CûšÑ €Ç{ôç°…S«{ù|ŒEÓ†~d²ä¯Hêè‡ãFüIæ/qþ‘#8¢&h‡víh­Xµÿûì,¼¥nêÑrJ#ÃçÇôcé)3OƪÒ,Øö»ÄпâÆ[b£üóœX䎩½_z¶¥þ¢ÛáMøyÏQ0N4¯¼cÝÄy׌vá]á)õ]"2·~ŒŸöI°|9^4²ù.s6þ×Kêã„¿|„w~7Äxòj“1Ã,JQO_gé_¼¹ÇJ´¡=Ef3…ûmþçT\=M(ÚóeQ\oÝè gðE;ÁȰkŒjØ•˜¶‚6Ãý@Í»¡6ˆžE÷©X–q îš,îi eÍ6AÐ&³bÚd&šÊâIŒ÷ñ±ÊÖ“‘Ì¥*1Ž8 ^KñþÅ\â(Ãõ‘ÕÃ^./s m~[èØüæ.ˆ28^ñXSÛ>Ä×ðîKOáÞ?hÜ]ëDc\€‡fÞƒ¤^º|ƒ,zb ¾Ü6z¹0yÕÙ 7 è¸U¨›¼Ì7êÍdáÍycB®#ýë3¸®b$2÷fÃ)ro_v?nþµÖ~Ó? `ö­ÎZ‚LÒÁ´Ñu0£ÑÄý¦Ñ„½6Ž'£îlÄjð/ÝUT_“›¼Ô#?Ž/§ÉKn1ó3ºåKa–î9¹:~|d9މ³î±ŒG>·+Ÿg¶.»·þú 5šv¼ 3ê²eMÇÚ Û—‹®Œ‘‡/l'ƒ/±G[ü6Ófâ1úfâé«K0{l°ž8wö0ÜþÔ5¾ÁÃÄ׉ÆSÏËç7^­úhã+mØU¯÷ÐFdÚ°ÌëI4¹Ø Z-ý)`éÉ÷ÐæÞ>ææÞ{_z÷ONÆAÆÙ"ëÇëm§ÏŠãyÇÚžÖ_ݤÁ—'Òò…D@" HN+¤ÁWPsGbðÕŒ¢ßÁ7µ"qh_» ÞÇ'¥\ãµTƒ¯¹òÐ`,û €¸RÍÚ¹p‰ÄTÌú‹ÐØh¤Ñ®Qƒô…šQ˜PZš>™²S|°. /Ušw’f¬= ·¿,¾÷/ò Â-åxön¤xïÎÓºÜóú¸ãœ(²4„ŸéÍËúø=­×h¨{ßS q·)lñRøNqC äB¦ëG4^ÚÍ øÎ ‡WÉS¶Ãžµ OËļLwlÜûˆQ—æº2|ð^6ò¿Ü†mUßá r©¾.*2¾ 1:è /Ó¨»‘Ç=ê¾gdâråùº×S$riO˜Óëž64F.ä¸zø2 ¾(Á>òÆu…á‹y˜â§%ÈÚÜù…ÕøU’ØÂîü‘iz¼²ŒqËÇUÔã5s¡Éià K¯p³\o"ËÍ(ËÿÙ9ùØöÝ6|WqÀäyD ¶g`¤ãÁ9‰©)(zËðÿ`ç™®¤† Œ‘F>àÊ#ÉàËïœÉœÎûo_nÃ:$.ô’·…g=)ótjåºpš¢™+x?ˆvñ2]× ÑàÁÖ¨Û€ÉýÇÙ=’ SÒÆaÌ-7àš¡WIùIÃÛƒ—Ïè¶ÕQ7ꌳüÅ“1f–1Ö´‚’S§`ÜÈ1¸aÄ5¸²_hÃ6FšyËéñê§Ñô 3cÏ›P}‘½óèãS³ÛŒaÈ4!mI;ÿ´úÿßt¼¦/ï¼>@y‘ígÍè…­kx˜þä§|ŽU4mÈésOŒO-/Î-ŠŽ[„ɦ,ÈÆÓwcïY¿cÌìbé_ñâ-¼žQÊQ±´ß>¤Î¹¦÷ÕèÖÝŽmÅ”7AsDk÷še¶‰çM=ÿ¢~§zÜJÆåïàVruhA/’^aêÕÁ²Fcñrt¹ö~5g§Á—«ßÍÆç_lCÑîíØGë^CfÜü%3šž¸(nðõ"ÆO½Ò^&§i!Ñ4ÃA“õ>Øà+ZzÂ|ÙŒÉkvæ5Ûœsh\¿qÔ½}ÍÉ&/àÃÈ@­z=& œ¨zç›åxŸ3çÞ‡ùœéîÙÆÚ Þ7͹ÀLÃÆt4s‰™ÞÇZ”ce™¯x¬©ù‡x«JµØ¾©¹Ÿá“uÿƒ·³ yÍŒ¡ÞÌßÀ¯†“AQ ²¨-­ã¾QšM^ͧE×j‹x¸!ÛilÔ=äãÐé­œlw¼®Id¨`ʲV¬I¯lÀ¢»,YØz£ÝqÙß]§ â¹é3˜®ÁÃP‹ç¤;ððm½qÈ)º“~ó/OF}– ®Q׌ò¼÷ñavŠ‹·â»ûM¹Ø‚­†¼ÿ,Éû3®Aì_ÓÈÓ®æMÓ{ AcÔ©‹tè®â*ðñÉõ¿ ?ó´¬ç¿|L{c`OYšð¸¹—Çx¢­þ^ámœÏº¶‡ÿ¶Õ%‡tùê1 öúºÊ«ùñ”6šØ†94'¸åËÃ/¾Ê½€ñ9ƒÏîiïezKîèx¦–†ååüÄëÉõä¶Ó3´Bpãä{òƒ ¿y(]z!“e´¼Þ=9]N\ݤÁ—…º¼“H$‰À錀4ø jýH ¾èðºB2ä*&‹•_MØü~¶‰h.ñZªÁ—©(´aã.œrÆÝó!Ù, S­È°k.v-Ô·¦2“vvO#Ïš!”—±’^ã Ìäõ™FG,Ì3ŽXð¬]¨sÇN$®ÆÓç DºšÏòƲLÙØÇoN»£¬º OÓ‘˜zJýØ.dº–Éq!_Et$fOG¾žxZFWØ2¹ nSl—‡µÏãªÛçQ`ÿHÁËt*x[çãÂûžÛ{-Œç늭Í¥=»ýÜÓº#ojÜt4 {´tt IÚ ¸ë9M‘|ãüµäyë&Û.+.Èz ¸vö`a›>ø‹xÖü+‰ú1_a_Œ?pÚÜÆ-W<®÷=¯q˜+¨ NŸ^áÞ´‰7aÆ2y¸zþçCõãÌBçdãmü—Ó¨æ–HÿªS'÷üºœ ·q¦Ñž¿GæÑœ7 †9Ïf|A¿ãíëÖí´zdlZ0J2®)HÏø#îII R1œWNo{7ÚíiÝû„=ŽÛS¨tì]ãÊäU¼-ÜŠt sõTàOù]3zaëÎë਻ßòý¶!§Ïìá£#ØâŽÑ=rÜB¥L$£Ï±?Cêý #úÙ=)Ùø£Û‡»HË`åóþÞb£!:9Š·'#1Ä­Õ6~û S‡ ¢`õU·ö ømýZ?&‘Q…KK_îñ|J?¤}"bZ†R–ñ°0—Žk¼ÚÙhãÂgO£Ç˜yj÷¾’‡—Sª÷ßø<úMü“zú«<|¹•Ž&ë½=_?ô„7øJ–O#/éBÛaÍX‡ÅúcV.9DW½w¢ç>ìy˜íÈtndÀûœ9¯ð>ÌyœWxh°m›šÌ¹ÀLãs.éý®Eù:œ×Ϥ‰FóÂÃiæx©Ñc\S[âYáŽÛæÆZì.)Aîû¯á÷6ï_ºœx ó¼-Ò9>Âó¬ÜdÑbðåA—ƒÝ?vsêõ{‡lƒé*<ŒxÞFy¡¯#±j6®6¦ä%ý¯cñß…N!ÞxÅÓàËÿAÅÛå2U‘î*(#{€'?a<ÁeNŠzž¶—ôÄÇ´ŸuTüqóª¿W¸V%γ\iòÀ›×ß5eï*¯zäÇö¢‰‡sþª¦uË×-Œ¤ß»Ò¿?²\¨ºGÒ®ßh<†úó̾<:Nv„¥œôÄ<\Ê7ÝtìˆÂ?̶ŽvÍÈù¯ƒ¯sÞçÅW÷å‘>t„¦5x˜ ›ÏîiïezK?,Ú)gð•’†Et|B“zÔe°jÀa2;štg hó¯ú³q?eªN aôy 7G}ŸFFW…2ºò½Âµb=ÿåši€æ[{ÁÓx ØB!þ*)q"%®8¦A=‹{;ñPTŠØÖñ¤J×]ts!ÓµL^ÿÄt”æNE°ªÝCáÀÓ2ºÂ–Éq¦ØiÞ‘…ó¯ºKTEý%¦ÎÂÿË.<‹uB§Ž ØøÒm˜¬þù4øòÑ÷ zœWßíéÜ%ÉvÀYex`nEº y¤£»þ ÜÕm¤)Ø¿XÒˆŸYŠ>‰ÓÕ\èöpÌĵÿ¸õBüá#qOG:î§#I‰ÉZž§ˆ¥ý˜pÊyým¬éRœW{ªiײ¾«¿ö ©ô]ú@,˜Ô7×íÀן#çÝwþšÝã—ˆÃ=­i¼®œÞöáÛǽOx•c…‡JÇÞ±õž•ÖÞWÍñÃÛ‚"§-XDóZ¨Å?­þo˜„”!=xÖ®÷±¬½°u çu`u¥|¿mÈéó#{DË \4І›>÷47ÓþuþK@‚.çñPë>L¿ãeP"ý+FÞÂiˆRŽâímÛøíCáæ ûà;aðµÄôÒ<±j+½%x›PpJ ©^‹«ûÞ¦ŸÊ–Н««GÀ[ÆSÞ_õ_/ÆYɨÙÇ>6þÝe•ôŸ³ñØ£1ðÂnèÜI[÷¼0 ‹w»aÖñ0øòKO$_e+Ñkè}j]Ó2‹ñØÐLè3NõÞ5gU1fŒèÓ3 ­ó´ÎÛ4wÆ-“«¾yLÿ@Ìûœ9¯ð>Ìx\$ë)³Ø ï›æ\`¾3¦)ž{úÖ¢|ÅëgÒäU¦]ˆÇšÚøÏŠyÛô}6¦ö`Êí’×ìû‡”Gdðå&‹FbðŶâ2<—cùq­L®òƒzH¸lìÈwóâ»1æ·o˜É_,ªÆÏ®Ðåz3ÔׇE¡[7}Fø:q½&Ìij/£ß¼?»g<ÎMhÄšiÝq׃ŠÁ$÷ÿ?¾nºEüKÈópGâmª7rïcð墋ŒHweÔÅãêÅgøødzA{.QÌÓö„AOœúYG™|3(g¿¸1žh«¿W¸V0ç“®4yàÍë²w•W=òã0¸ÉVâ=§5hNpË×-Œ¤ß»ÒÉûS”üÞ("ž²\¨ºGÒ®ßÔ ñµÁWmžiÄ;wvÇï4—¬Á‘\CcùŽ|Œî¥¿ Á9ïóâ«^swOËx¯©'öÇ3µš°üóˆ§Éà·â]¸z6×°é‹Ïðñ;+ð—%ïٙױϮ'ïŒ×«Ï^eCC?óVˆ¿ºIƒ/³‰äD@" HNk¤ÁWPóÛ´n"#­^ÌHˈnÕô¸êG}y°9 šwáýw>êà‹üÊÜ:i$Îmcäœ _…tÜÍhý¸›yU¸{@H ¿UyónžONÄÝSInÕkø÷Ìóõå©ä ëe$†Úíâ%8z…›åºß¾JõÑÎ8DäÊ‚ÉäF]ûÈwÛÚK°Ÿ˜ÈÀ0òv2Y?ª,¹nÎ ÕÝÚŸoÿ9WN{K‹vó3¨^}7´ßB¥¤“Øþ>W?¨§· oÞ¦Êx<ÜíøD‘+7Ð2Žtäényt%Þ{$Xf\ó‡›ð“¿žƒ/¿ôDbð%<[Í>(^&,ç¬ÂÊ[6!qô,zJƪÒ,Œ ÕR]þbô#ÂÈ`ºx>>›x•¦3Ñ7É|—ó-“÷ð>Ìù»W8•êÇû¦9˜ ÂŒiŠçšžÓíz™óS^?“&2é=Ç+kjíC|3öí©Äž½ ¸ìŠ î·\Æ{–Œš~Ñ»„6oÐŒÀ¢”E#1øÚMÞ³®þ¡æ•…Ë«\ŽåÄ5ª™\åu÷Zë¡Üà ¨®õxwZÜkMGæî•§^òŸ}Fø:m~þ6Œù½®+)ªÇ¯®0F§Àåž× #±¬< c/vÈïâÖÞñ6ø:žº+—zò >†mãñ¦äI÷!çigddzŸuÔÉÑù…Æ…óI“—óºzàÍyZ:é8ÕåHGž·ÉÃ=òãEºÉVâ½k~FB·|mk»ètß¶5Ž­Ÿ†¡ÇЦÝÅ(Ë…ª{,ýÊI&V癊lâTƒQ`0î|pt^ÝHSS˜ƒ·?Ú¢>Úx;çS¾Îç%/=qùÛ31âvMçÌóås Ÿc zÔ#vI¿ü{]¿¬žX‘À<[FÁ3µ<ÃórN§•×ÓV‹jP_Ù½}Öüã/øÃSÚ¼ °_¶ãsŒí•`Óó2lóò ª›4øbí&o%‰€D@"p# ¾‚?2ƒ¯cuExûƒo´Ôg^Ÿý8)ècGSE²>-Uã´½àü|äe¶ÒNƒ¯«çâªÉ Õz%“²2kÆ[‡Æ†$té„‘x_–•†¡wi®PÒ-ÂÎPsLœ•‰Ü™#,ܯn¤ˆéîž‹Z–5›hªWR·Î¢úÌtÖ§Y³›‡:áüNWàwOEB¶•ÆÓËCÝLè¯íÚEâ,åÎDÏæRôW½ª"·”ŒÀ\ìóŸŸ€1srUšÒ2ÉãÙÈž6ÛUÀjò(æf8×¼c5yÞš¬æ+ÊÏ!#4U7àl]ËäŠW–W@,È­ÀÝN >~„§ð~FF~CtÝ/ÓTLèÇ£ïéYÙ.¼DÕž” §7Œl8"5øRw±N$¯\ª JŒ­›5!Ÿ ²v!ÝÚd+¶öSL:÷øL&=NG!ÎVBäB3ÏÓJËïbð%hÛ½†”Ü)š’[<ßKãèIò¸gþš¿Åãí‡`©@n{WâZ—/]_==ãþ°^5ýCúPC^ÐÂcÀ¼6 ©EF"so6†»ä-v54&  y¼3~\1¿°¿Jr(·Ðnðaº3òÄv<±Q”–x¤c<ÆkLsÊyŸ^áF;¸_C(l‰‡Nî5Z3rIY„ 2†p´å“FGùhó^Ê‚\dÜ-| ÐσÿÚhÌ%EnbO4£È{¢nóÃ#„–Q˜ãE#û0i+‘׃#|vf=F›èžV ¿qþZ¼=Ó±QL'«©¾m»vµÖ‡T¯»èXÎ5â=µC9µƒs£Ööe÷ãæ_kÇ…})˦F¬¾ø"þº+½²^O~Âx‚Ëœõ<íU¾Î1ˆtå[‡Ker~Íz/Ü\6_¼9OãG\sØxœ)Kò°ð¶v½C²•È—Ó4'¸Ñ/¹ÚX§ñÊ…¤'þ²\¨ºó¾íxtTÉö( ¾ø¼al>µEâ{È8ìÃ8l:ñЧ5‚ÿrCÚI…XtÇåð9ÆÊ€ñ^COL_~x¦–'Ë/Êù‰ëXí´6’áö!t9ïl‹¯[@.Í£·ëó¨j¨MÞ'y½ms¨Ïù –ºIƒ/ÖXòV" H$§1ñ2ø‚âó÷߯7*⯦¦¦…üU+/_¬,^,þ–+EÕ^t}¯¼÷7#Þbåƒ-;ô—+ï-³Þ¯ z_£—±Ø‘Ϋ¼èÃs¤*Ô·Õ?DC–È]&n@Y”¢åEZI%' ÓSºJIÖËá™Å.t­PèS6埬ÌÉ(¦#­¤ˆ÷‰FþÚuQ^Ep\g?©ÈQRò“(ã½W¸ñÞëZœi«Ov©£>ÅF]Ó”‚*zOi´ú‰°T Vo 2d3ë•9+ÙÄŽk4ÃÍñ`õ#ü |£k/(t4fPÞ¼l[›z`]™Váu§g:*”i¢¿òvçe’Q„=m<úk#óÚ“Óë>æ<Æ‘zØÞºZ¥òX£²î¥;ô¾2^ÉÞߨ†‰pþ(_© RÇÃ`³_ LIµâí~_#úë®yYeAôÄûfÚí…/˜ùÚò4é¨Vž _‘÷ºƒvú¢Kï]O^g;6Žºšt5*«žoÒ.0™Ï1¡x+ži¾§ãÍ:›eíß LR±õ©¬Ø­Õ-|¨ìùVÞ¤8ΛÊ_þˆÖf7Nž§lÐqãí07¿Ú‘®ŽÒXùŠ:=[T§Æ©©­UÇJqA®’““£ääX¼1D_3ÆïÇA㮆õaÎsY¾¶ôé:_‹Çxe® úì¼Èš½Â <ܯ âû¹l® ¾­Îi¢¿$§a_µ)ƒÍ3'u‰RaàçÁ½h,X6Íì·‚¯rÎYF¾Îk¼h¤:¦:y3•U´"Í¢kJ†R¥—Ïçhæ¼ÂÅÄS”<1÷ò:ß¶ÞCáü×Ö]hµåÃó¤{ßôòqâì”/§‰ÓjÑÂû—5ŸÖÄ0ŽÂ—éÀÔ…hƒ õVE®2ÍX»yð[Û¥,R~ÒZüöŸ˜å-±ÆVðÚEÃ*wAŠÙÏÉë½O:ñÓŸ½Ærøöñèå¸÷%¯âýÔ£ý8]ôAǬcökíF>Ìp«ÜZß%ªø$§ÎQ 8 A³'¦¡×Œö´ax¼[&ºìyDW>Ç*ªqíGöðÙ¯Õö©(VrÅÚ€þ Š#µx{yàÆÛ=ü=ëËýÎWÿŠ·ñ6>6hž‹JŽŠ¡m|÷!½Îqš·7××*Géïã¹ú‡Îå@IDATÖ˜kÊGþù©Ò¤¿ïùß¾M+• bcüû«²Åùú9K!dãüj{ú£õ›•G®´Ò¿µuš?OGžÁle­¯TÞ{ÈNã+_Ušqöå=cÒC]f¸A·=ïPïS”ü]½ö4‘Ós .4æÆ)ΜeÒl`Ië?-UÒ“-œ´8ÉÊ ‡¾ÅηtÞç5V½Âù8w¹ç}3n²A,kQÞç=øˆf6¹âEuö»¦®GùYòsåk:ã"WGÁï—,ÇÛ)h>Œ¡_Ùú´£ÏW.Tî4ùÒ`eÙŽz¿vÎ9Œ×QºG?hñCð_ÎÏiÓ¯ò5ç¹tÿõ‡ólk2p2iàiÃë‰u=¯Ož©ñbV?y„ÓÄiµëX5=ù'Óͺë]5l×½dé“ÉšZw[|= u«>°O×\lêý)T_“ïÂÌ{ˈÖ,²É~$û€ì²œ¼>`Ø[Ek®õæ›o*7nTŠ‹‹•íÛ·+­×૲DÙðñÇJnn®ú·!÷åoª±—f¬•™“«lÐß}üq®Rô}µ9¹•‘im-^ü7å½ÜJé÷ß+¥EùÊÿ½n{-þÛå{—EfTÖÊ ¾jª”Ó´:š2UÉÈÙ¤ªª”ªŠR%oÕë! ´#ÕÄÏøÎ?Ç0ŽÂ—iÕÛ¢ƒ…¹® 8P’Ó)9EdÔ%Ö?¥xSŽmž×>dûI#èðÛü­*ò1¾¢,X‘£•Š>Gë¨R2˜YÁÇr²´AÀƒ×zåðíÃq³ÖX®me+ÛŽ›½/²<¿áyrº¸ÁWUQÇ ?çd(›Ÿ*Zÿ—å)Kf±µÒ”MN#MV?‹eÍè…­k¸k®Qb)Ÿcݸö'{ø•¿9éfÛ%ÚŒK¬và}Àvï›-ŽGÛZqÂ÷;ý‹åKsAdüˆêìQ§ÿŸ½3Œ¢<ÿÿH8Ã¥ @‰Š·%Þ¥ÒXE©H<е…ZѨµŠU-"^Qøð€­( ¢‘Ê!“AÀ“@²I6yÿÏÌî̼³;³Çd“Íñ s½çç=gæ»Ïëø9ªQûi9r?¨.WMðUW¶Uüóbm^âÝ_|»xíž³nZÏýùzñÍG Å“wBWÏt‚øf¯YÐ% ¥T7?"¾ÉÝ%*‹ EåÞ­â{%áÖiOŠ^±Ø¯Ký†äç@ögböþÏŒ÷ÏÿZv5†àËizB|™EÜæÏ®4ĪJ›Yù„o‹w$áôqvõÝhŸÖõEîß"ölÐùr#¾J”÷@æÔÊówþãGQžvÁB ù[rÄ÷{w‰ïwçˆÕYŸˆ´'ïÔû_ÕݤwUцÓgQ_ÁÙE÷¿)²ó3c±ÈÊz×WyçÈòÇlù9–øYsåî]bCNŽÈSŸEP÷|×Þøìdù9ošX]ôä ýù»°ÞéûŒàyRÂ^|¿üœ=Q,ܰCäós{ÁÑBñÕš7ML§,ßáRl0]Wß%x߯¬\>Ë$òóÔ‘©bõ‘І ¾xÌYäð]¤Ü®­ç-ÖýÞ_ØŒŸ¾svcî™'ýˆ8Œq:è¼ÂÙ<ªñ¸9«ƒ–‡ oy Pë–ôÎuÿOÙbîÝÒ˜kCÌs‡ˆ=_Û¤³!ÏÕúÏÃx^i¬g9¹œüÇCçíQoWõ}ÛçýaÒXÀ:ûê±4¨{;?7-mIǓЙJ6ÆÒJ^þïÍV¼k=?álò®jã—Oý„Wè§×oö,Q _ôÈf‘•+·ÍÝÈf¦ƒ,%¡8”—Ü`óÎ?­˜ì ßîºâ'ØV™CÓŒ¦7¹ãe7~ù ¬™–Ňw÷ÂõôL›Ï–¶œ÷¦Ó蔀±±^k:­ûôoÄ«x©›Ì‹_ÎÐ]gX¬I襤ä] RŠÑêP*SvÁã¬$Ë:"‡g5/÷µhÑÉ4iÒ¦»êòHò¥¤»O¬ü‰îSÖ¿Œ@Ý“‚5–§cFFÌ~GVK:~t„—Œ÷sê½ /!è¹ÄÝôGyŠm4£û9ô¶]ÞëS–m¡™ã SÞ²Éj¿0½~dSàzð ³(o˽»u >cªzÙÚ¿l&œ—V ˜O=t²7Ëm¸QܼDÄÙòwÒê#¯Òp/ËÜwï¥Ë&y–Yðñiœ&,îHK=ÃIýrÔ·ØÕ§ÏQJŽ#P6áÖ!ûvî]Т$”Kê’ŽÚ=÷zó/ãéŽùÁû=ÕËÅÓéûw§Ÿæ½õß7Ó™÷Ë-ÿýüu»è¶3½Tl¡ëú&’wuzÇt;-_r2ýþ7Ý›¿©€Æ×.£çÿE½n½d£‘&ëûwqš—²ÿ±ôÍÅt¾òlà0=éÿ+ ? Ö^”˜’êsRFoðó©¼µgJ%={]–mx‰]õ;`99dÕf-Ç»zmwÝ'e~§rÛ—n6ôÙÀñ\ôõ±”ápü’ÛŠ_;s0§V–ÚR¶PŸõt|‰ÓW?Bƒ¥•K<‹*áíã÷DçŒ}^:Ð[z¡{/îãq"/;%yz,«î=?Ž–ü¾7MS$/™•·z õÜ(‡òs0P§…÷òqaq*Çi®æË7_·,Ú@ÏMé¹íè}†y0«<©»~¢Ù¿AÏ}©¥Äf?iå½}‹Îeë7ÐU÷|hã˜è–ô÷hhæ ô7¹“›8Ÿ ^ý½ß2œ¾¬·¡Ì!8@ßw‘Áçž¾©ð9ПÈéÕ}ñsPîÛi|˜Ï ºÿ@¡0ðG…â‡ã Ÿ›ý|ÏŽ‹òþ èó¡ oË0mX½ÂïŽo–Þ;¶’–ä•âRÇ„á{h’Åû Å™³çêàóF¹.ãdã<ËQÀñç3ë•„Ñç°ŒæÝ>ˆòö3>ßEÓ/ëçãÆâÔý#Íèp†÷ïHZ¸÷[ººûVãý¢EÿûËW/ÐÈ1æw‹rÈãSÆÑæzú8¹Ï—Ç‚pÞó:ê3'½Iùo_C:Ÿ¬ß»èÓGFÓíÿÜ&g×òx|z½r—w¬“Ç3ɵ2†^òý”ðǃäͳ¤ãÓ;`Ów;)}8h½Úü’ŽE?®‘¬tIV¹$+_š%.eÿÙ¶BÝR…G¥W$¶¬ù@,´pÿöÒOEÎ>Ã"˜¯ªO ×÷z¤Î×ϽMÿ•B°¥f Ö– ¬Ýîsõ_ŽÝf^¾JU³ˆå¯L7Yõàfã‰/åÈ–«ôå-Õï9"U·F3:ôe©ö¯·iñð²Xzv×-ã¶Pœl¯L—~e¬ÅÁûÛžX(r¬,ìç_O¥Ìõü³Ÿc§‹eëͿؕË9{å\q›lÍKo„¸{Örñ“Oºƒ——7OE9bîtŸ_+a˜ ²å²å©Ú½éžå)•xlØÓ¾ŽìÏ^.î¶ÈßèÛž_¨ËRü$^¹Múå§Q«‡¥êõXcªÝó0lhݳ(•CøåÙFr}áåù”_1}5_ûEð~K%j¿âÒöùä_(ñò…^“ÓÚ}ut[–ÒÂô¶Uo½žô Xœã1o-ûÉßb„k¦bõêè1C^ÖB Óû+´àþË$+\Áó©¥Í`ÃËZåUI—öwp•é×·ÃþĸÇn6d½)nI4óðÔ»‘bJú'æå$Ø}ð<qçïøDLM’1lÄsQÊ3lÁËc MO+‡¿{÷'bŠEz÷+Õe% Å‹)æ¥g}­,CU æNз^jV®g¾Çö펱ª…;—góé›”pö¯Ÿ«·Ù ¯û1üyê~¶Òú„eýVò6bômâ•åK•hwvm9xùØÏ±ô2²‹×¶.6´?gku—‹écý-ï(|”9ÞÊlßeƒÔ3¥>9œ3Ú±µ¼¨>;Œ¿ÁeèäÙÃA½Þ/=óùÑAʇ-òÜæígÉf´>ršƒÍ#´0œÔ¯°û–u¡ÄÉs”ÞÃïsT‡lÛyà2Õ-|IK2îZ÷ž…%/£osÓtñÎGëE¥äG[:QÙoçïŸËéQŽ˜»qS û¼¥wIGÅŸ“ô¼øMèýÞ³$6cgù=ó—ü´RZrËx>ÖÚˆ²« Tßõºk]gìçRÁÛ´ý³Ã¹hýˆ]œ–¼¤¼‡;§.¬3žõvdËÍiSÍK÷i}¦wѤ©âµÏ7è–½äç>å8ÜgQÿ ±Ò‹2Oe Ðù¼œàpoüS5‹T—â7k¹d9ÆëÆóœÏT&yÛ=/©hµ¤ãnÉ ×øùKÓ¾ùñ;g«.úÒd6áÊ~>zq¢Þv‰Fš,t†ý>#xžŒ¸‹Å²ùêÜb‹ã -ßcój–ï£?[ÙŽ 6éÔÊ.üçꆌ1‘–Sòa›w­^:¨W¿=[LÓ—Á¥©þËözûr£ï2Æ¤ÒÆéý§Ú÷óÒº/›þ÷{õ}¨÷e‚§Ïž4UÌÛ« ì0,/ŽŸ¿Eü¨Ý{^}¦ún9x_n7>}µÈxn~w\Æ«]<#®öæÙ追 ï/~î]ÂWbh {mÁM••lé´}{®ÒOüÓ‹ìÝ¥±²ø•zǽN½úRïžæ:j•hGc÷YÅÅeáËJä¨Ïá§7Hý°‚Î5‡í(œ(ÂrËeSÉsár—Òw*s@îßzö4ç¾:ôã¨(q;d檬¤Šrc>Ø©[<Ïa¢Ôf}†tÞ¸u±’癥<ÏÔÆµn\î–sµÒêqäxÎFœF-~®£á?{8{þ ”ÿætÏQýrÒ·ØdºAÏQû›¤¹~;ïC±v̰”Ÿi«ø[7Ïë;Q÷ž½Ég $MÞÛg¡ßá÷ªʸÞzÇÜ~'s‰ËÂѳUÆ„ðŸ«CϾ•ˈ?Ë…’÷µÇg„ß8c•ËÈ]sóó¼ÒGÕqêèhf `üÀXL·&4ô½±7½aô™MñάšßgT‘žû»s¿`Öh m¢¼u8RE1­vò¹z@@@ µˆ”…¯»¤c4 ¸U ¾­¤÷î@)K=žùk¼ôKh)GÑÁ´0îNqTÇØ@ XW-µç?es`!íÒòò9뤾Á<7ûû+š}!   -†@ëTºØ*¾ZL6šMBù·Tén­j¯fƒ¹Y%¤®C,¹»thViBbZ~‰NÊGzÕ~LËH2R  M2θ hɳsiãöõ´¡üZZ¶ü^:Ö”W-¹¥'M[ä¹h½t£ÉNšˆ@;wÅUðH±€€´y|E± @ð¥Z8@¿B·Ï^ç)‰±¯PÁ¢› r¯(VLDÝüð/ïkº±•¯vv?Áo~IFŠšž@L]=uP~-¬~grÑŠ»ûÓí,¤=ë Z1ùŒ¦OPcÄXA˜ @@@¼º²à+Ö×@è„M@™~WÔ¶bë^ai;jÙòG=QÛ)ðå4îh µ‹¤u¯¥ Á€4??ÎÐãí†Ð`p ªØ«¶kÇ&7å ô-ƒ€ò€ÇKÊf¼Ëöî ýGˆŽ4„z°@Þœsˆ±¢9—Ò   ÐÒ (?'éhiÇ–žÁ&H¿"ö:Ê–½ _ØÚCn~N‡è«í•½ÓÇV±UîjUn§aÀ€@Û!ÐãÌÁÕÏЙWÌ4Až0’r·n3]›ñù.š~Y?Ó5œD[‰Œ«dá0[øÂ    ¾¢XÚ²à«rË4àÒT‰þXZ´~.Û^‚€™‘QÌy×ǶW…_ÊC?¶¶K@YBz)øí«Ý­ÆŠVY¬È€€€@3#Э|Ų5áöüx£ÂÁ Gy)êø º^O˱µqêszžÓÛx5°É¾ vÜY(ÏîíÙª¬±Ø`Âe€{œÙ·îmztÌúÔ* iÞ‚çhܨ>Vwq­ ÄðrÊøÿ0PÇžb_‰(ìÛ²à‹\Å”óãn:Ê?j‹ëÑ—9Ë8F¡"JhÖ0V4ëâAâ@@@@@@@@Z7ï- ¢_ŽP\÷8:|à(ué{ =¹7a=–ÖP¾È€€€@k%ÁWK¶M ¾¢ÈQƒ€€€€€€€€€€€€€€€€@K%ÁWK‚¯(ÂGÔ                 Ð @ðÅBƒà+Šð5€€€€€€€€€€€€€€€€´@|E±Ð øŠ"|D                 -@³|Ý;®ªâkX’—.]ª0a„†ß                 m‚À«vVóùhrǰò«h•†J]»v¥víÚQŒà-¬¼ŽŸ~§ÚQœÄÕÜüÌ;WMRJJJsKÒ                 Ð 8Õ[Að„à+€€€€€€€€€€€€€€€€´!|E±°!øŠ"|D                 -_Q,4¾¢Qƒ€€€€€€€€€€€€€€€€@ $ÁW ‚¯(ÂGÔ                 Ð @ðÅBƒà+Šð5€€€€€€€€€€€€€€€€´@|E±Ð øŠ"|D                 -_Q,4¾¢Qƒ€€€€€€€€€€€€€€€€@ $ÁW ‚¯(ÂGÔ                 Ð @ðÅBƒà+Šð5€€€€€€€€€€€€€€€€´@|E±Ð øŠ"|D                 -_Q,4¾¢Qƒ€€€€€€€€€€€€€€€€@ $ÁW ‚¯(ÂGÔ                 Ð @ðÅBƒà+Šð5€€€€€€€€€€€€€€€€´@|E±Ð øŠ"|D                 -_Q,4¾¢Qƒ€€€€€€€€€€€€€€€€@ $ÁW ‚¯(ÂGÔ                 Ð @ðÅBƒà+Šð5€€€€€€€€€€€€€€€€´@|E±Ð øŠ"|D                 -_Q,4¾¢Qƒ€€€€€€€€€€€€€€€€@ $ÁW ‚¯(ÂGÔ                 Ð @ðÅBƒà+Šð5€@HÊöl§¢Ü ü÷ý’¿•êݵ!ùkíŽbbb¨ÇÀ¡tÜðsøïl:vÈÔ®}lkÏ6òJ ¤²œ¶ìÿ‰~(ÜCÛø¯¼úh£Æjà];t¢ÓúžH#ûD§ÿêdêß#T¯p            B‚¯FÁZ |…Æ ®@¢C`Ó[ÏQö’—(¶c'êvìqßë5µNbšY¬B:z¸ŒÊ9DÕ,R9áœKéÒGçQ{†`ŸÀ†Ÿ·SêŠT[_GÝzô ®ü×!ü€Á‡›…®•e‡©âÈajG1ô÷±ÉtÉà‘‚Ð@ð§FqÁW£`E    XöZþ§Ëh`ÂYtáø[©],¬WÙaÍYûmY™A¿¾ÿyrÕD;g¸ €À󟦪v‚.Nº–ºvïÀeôn¹*+iíŠ䮨¤ïžIíØÒ6ˆ¾¢AÝ'_Q„¨AØÿýW´òщtÅ”¿PŸInëhÛ7_ÓšèÀ‘rU×ð½Ô«OOpÜñ4räp5 ^rßúk_ÿ÷·©4*ù¯tÆÄi­?ÃÈ!4K_zˆ†ž5Š.¸Ð't7|°œöVSüWЙçïs¿iOÜ´‰¶p¸òÏÏR§Ø¸¦±€€€€€€€€€€€€€—_Q¬ |E>¢HÀ^ðå¢WS&Òì½?•>xô2êgï¤UÝà«U'2%ö‚¯JZwÅi´d Ñg?¤ûþÝ¥!øŠRA´            &|™p4í _M˱„N àëíéi ‹/Fþv"=øë´¯¬–¨¢€§¯¤mZãgPÙ£R'í¼ï!øjÅ…‹¬5@‚¯õןFï|@”ð‡”2‚¯&+D            Ðl @ðÅ¢à+Šð5€@@¡¾Æ=ò"½wÉF8G÷ÐßnŸFÏç+—ΣµëRé¼.ÆíÒCh÷#TבztíBÇw õêØÞp Õñ2‘uÛ±ÅR ÑѺXê~Ì1Ô¯{Ûê úqWfY\çÔûØžÔ¯W<»·Øê\T¸¿˜T¥ZêÈn¥A}¬—œt×ÕÛÝž:©iª£Â‚B:Pv”#áô{<û³–¯AðeÁ—@ L|¹+éðžtäȪ£Îß·õî×#`ŠŽþ¼“Š ð µqÔ¡s/ê~Âñïß«ÀÂW@Œ¸             ÐD øj"ÐVÑ@ðeE×@š_΢÷&2%·bë‡Ôû¶óµó(‹_£Á×ѽôê3ÿ¢>Þcr«œL}z=?Ö£"ÿSê=áuzü¹Ç©ÓG3é¶$¦nƒï¤â¥ã¨hÍû4bú[Þ‹òîMúó[†Õ1Íù9ãiíÓé¼>²ØÌEóx©Ê©e·Ò†çN¢ôëg’’ y»dò#ôߩ璯\ ‚/™ŽAÀH ¾®|ƒæ_ó,í÷MƘ?Ñoÿ…Nêç#â*ͣϧM£ŒÅy¾>è×ÿïºé¶a¦ë|™pà@@@@@@@@@@@@ J øŠx%Z¾¢Qƒ$àTðUºù}êw§"ÈòZøj¿—î½pª.žyκthGúb±±üã3o.¤¿$x¬ïh‚/ßļmHnO“ÏFïª7O¤‰ãO§.Å»èßk< I®Xõ]ÕË#â*Xó ™þ=˜‰7ÿŽh_6½»F¡µ_N£óºkN\¤-U©]¡Á#iâP¢w?Öª¤gÞ|›Ój–|Að¥Ã8& ÁWéÏÑã׿¦§áÜûî Úõ }÷&溎(šM'õò:qåÑÿuû }­ùs%r›ß—õ>íàfŸøß¯iüï~¥ÝU÷|™pà@@@@@@@@@@@@ J øŠx%Z¾¢Qƒ$’àËwIÇê½ô·[¦êK:fe¥RÜ/Ò9Ï(fºØ×Ò?ѸÁÞeժѫ§ÐÊ­1S©xöeªå,Yðuç#OSÚu#¨/áXÊ˲uÞÿ¹jý‹h$­úò)úµW¬å>zˆÖÿPNgœ;Èc}«z‹Ì¦yDfçL¤ ÿš@#½n ¾û†Üå±ÝuÉ=OÓÊ)#¼Ì‚¯g^y™î»èu™ÈŠÝßÑõ×?CkÙå8 «f|yb Ð`Á—,ÞóJ]võ÷ »J¿X@_õ¤šº!O,£û=W=Þ?w:={ïûêñ•K>¡q×£vê™›*v²8ôW§P¼ÏJ®|©€ð€€€€€€€€€€€€@” @ðÅ€à+Šð5€@@¡¾FŽ¿“þõÛ©æHÜ¿“Þ~þ?ª(J x܃i¼Üã@š7—IdQ×È{ÒhÃ6#my¼üãÍ,¾:çn*œ{5)Ú ]ð5x",@}$÷®Ýk©çõ³Õ+>F]5”âåU½nõ0øüÍŒ÷èÌŽ¾œ÷7úMºbµëw´å»;èTõ¶!øšøÈ,Zpà ohžÝ×ìçrÅÏo§SÙ?.!YÁ— N@À† ¾ª·-¢¿ŽzTû¶¼|:çóÒÛŸ¾‰^~â[¾=Võ8[Ië®?–|À—¦¼Fs^û­Wì8ù|惻            MC‚¯¦ál _–Xp@ Eðe—Ìq“¡…SÏek[%ôÌ„;if¾Çå%çŒ4yY»Á»T" ¾ŠYð¥,”¨‹µÆðµÙžk†§CôàY)ô²q&Þ|+¿úBúMB_Õ—r«ð»¥tò]¼ð#‹Æv±h¬Ÿä^9¬Èû”…f¯ó‘wÙÉ.ÊUCðõòÒwiÊ`YÒE´í=¯¥2Iœ¦øR6¾<ð/4„@C_‡¿x‰»êV—þ…þ±ù>òÚÔ“T½™aç)‚°+éÒytRü>údÔ¯é#\¹ž’.=^w肯@tp@@@@@@@@@@@@ ©@ðÕT¤-âàË .4 ¡ ¾Æýv Qeuë}<%œ:œ.@£ú*Ò-ÞŽn§F?DzÎìÿ•Ä]ºàKÉ݇¶ÓssÞ¦™{ÅbÚÍ1wÒ®£~l­«`Í;4dúøÎ­T°é:“•0Ź ¾²Ö¥Ò(Á׬Åoӽüyð†/ ¾4qš÷_ìA *ø*ýà9züú×8©ôlí]žå]¥ôÀ®¤,ø@›in¯ëh+»ÿ¿-”8ÊW"&y–!ø’`à@@@@@@@@@@@@ j øŠz"¾¢Qƒ$ŠàkÜ#/Ò{7œ œz-|=¾žyómúK‚YDeåQcÙ¾4?®#%”½m-[8›^Þà¹:ñ‰—iAÒ tˆ-| P,|ÑÊÊšF£:j¾<{= _|™yá š‚@C_lá+U±ðE×ÑŒòÙ4Àl¤dÁ—¯…¯„W?¡””a!e‚¯0Á€€€€€€€€€€€€@#€à«‘ ‚¯@tp@ šB|=8‹Þ›8(@2eGÞümøë¹Üznéb¬ ‚/# #ŽqÞô¸ò?¥ž”%‰f±Ðì^¡Ù×oþ.Ÿ£XO9ß%Ó ¶ &/éÁ—Â4-_„YµÛÑ_F)K6rË^Ç»Î7[ìÚù¯›èÅÔoùîŸèïU3¨wl%­»þ4Zò_ówzöóÉ~VÁ”°|7¾|‰à@@@@@@@@@@@@  øŠuoœ|E>¢H 2‚/¢3ÓéŒGWªqÝùÈLúÇu ÔKX•l¥ÞʧÉ_ç]IË-Z ¾Jsè™w h쿦^62V õè^zfÚTšÉV¾4ÁÕ Ͻ‡^Vc=VdL¥«x¬‹ýøÍûtÆŸßRïèîÕ3C8Á— ÿ€@“Eð5ä¡9ô‡É#©®ªÖ/mí{Z7h,}©Þ¹’þ”÷/~ŠGôupåôkžUï$¼ð!¥L©ïŸ;…ž½÷3õxÈC¯Ñý–âUË`Õtð‹O¨¨O"%Œ4 Ç øRqá(€à+ŠÁWá#j€B|]µV´ðÅQ˜ÄWJ”'Ò¸1ÇÓ‘}ÿ£µ¼Ô£²M|:Œí«²ðõcæ‹,[£º£Á'Ò%=»ÑÚ Š¥.Ïönƺn@õäÐæ÷iÀa—raä9çÑ1eFœD¿£-YwЩúr_›ß}–.|þD,D+œ{5õòD©þ+„ ÿûÛT•üW:câ4éAB%Šà+PXýŸ}Ÿ¦^ð?J½Ô#ìRÜös%uýå3Ú¡wwÐcåÓñÚrÛè­^ãè;)à!¿»€*?ø–ö+ׯü‹þõù ¤w| ‚/ A@@@@@@@@@@@¢F‚¯¨¡'‚à+Šð5€@@¡¾|e.=uQŸ€á¨7٠׫³ß þ£«.t?'ßM$_J#{y„ZºàkÌÝT<ûjÓk‡¶®¥/ϦwÙš—yI/ÿû>š2Êœ–Bv?õ©Ùô¡WX¦ù¹düôòôqtj튲7_//~›¦ óXÓ\~³”Nþó»¤,Mù-/M©ZóÞ„àK£„=8'ÐPÁ×¹¯~H·¦Œ¤Ãë3hÉÝ÷ÓVŸîfÈ”¿Óž›LÇ››6ÕÚLÞ•JŸ}ç“ø èÚ%OÐe×£vÒ¾$8ˆ¾¢†‚¯(¢GÔ AØ ¾‚x pÛ]]A…¥5Ô«{*¯¬£^Çô NÞåxó»å:z˜©£N]Ú“ëhõé{ i{üó…ÒÒ–su NîrwíA}Ø_$7¾"IaµUö‚/gDŽ:HµÜ3Ĺ]TßíXŠ—ešþaÖ–þB%TKq{R·>]MB/Í_ ìA@@@@@@@@@@@¢I‚¯(Ò‡…¯(ÂGÔ  4†à+`„-ø&_-¸ðôfC Ò‚¯ÆÊ_Eá‚€€€€€€€€€€€„C‚¯phEØ-_Šà@"FàÀÖ,úäáé¢o§Ï8'bá¶Æ€*Ø2гþNgÝö0>áÏ­1‹È4:+^I¥~§ ¢ó¯¼ªÑãjH›Ö¬¡ü­Ù´jê?)®}`«a ‰~A@@@@@@@@@@@@ ¾Ñiä{|52` à˜@]m }ü×k©lOõzõìû+êÞ§/µkÙå'0Ú…àåߊ©ìà~Ú¿=‡(¦ýî¥O(þøÑNâI ý«éÝ_RŸþý阾}©ç±ÇRl\‡f‘wm-.ù…JQÑÞºfäù4㊛EÚ¶I‚¯(–;_Q„¨A‚¨./¥­K_¥=ß|Lå~ê¾-:èØ½ <ïJ:müÝÔsàжˆyˆ¨geFö7ôiÞ&ÊåþFY*µ9m1CCŽÿ]yê(æhŠmñks*¤@@@@@@@@@@@Ú¾¢Xâ|E>¢‹@uy-9H¢Î–¿Vë8&†:÷ìýٺWL«Í&2Ñ Pí®¥ƒÜç(ûæ°uä¥ëÖ“:5‹cÍ Ò            ]|E‘?_Q„¨AZ$º½}Ý`ºíßYgÕ®Eæ‰h:·½ý/úãE¿¡‹OÙt‘"&hd|52à@ÁCðˆî€€?ì%/Ѧ·ž£óRž¤×ÞéïW@@ÀK@±vã¿ÿA<‚þyíà            ­†_Q,J¾¢Qƒ´îê**X¿’~úr9ÕT¡ îþ}óò êÚ§? J¼ŽN8÷rj×bòƒ„‚4.Úº:ú,o-Ú°šnu1}þãfuIƛϾ”s¿ @@@@@@@@@@@@Z:¾¢X‚|E>¢ˆ<!¨¾¾ŽD}=‰:7ï먞…ʱz]Ù{ÏM÷øº"är•ýB®Ãüw„ÿÊŠù¸„*í§ª²C,꺌Núõ5Ô÷Œ_S»ö±Tﮥ}›ÖÐî¯> ý›×Rüq'P—cûR§ž½©Såïê¬ó_l§®ì§=Ű?ußλWÏcùz{5̘ví¼{Å-ÿaÉÈÈׄ!¨õ䮫§:QGnîOÜÜo¸¹?©ã?õ\Ù{¯•UUСŠ#tˆ­yª8LŠU¯]¿  NF7°Øë”Þý¨–û˜Õ۷з|M•, =éØã©w×Ô§[Oêßúðq—Ž(¶]{þk§îÛ+ÇÜhçʽö|O¹Þ.&&„\À €€€€€€€€€€€€4¾mÐ!ø Š@¢DÀu¤„JwåRÉ®ª8ð3)V¶Ü®£ê_­wï®VΫ¨®ÚEîÕ×V«¤T¡T ‹"bÚŰ€*ŽÚ³¢}å¯#Ū{ϱr-V¿ÇÇ^7ª[¾ÞíøÔóÄaÔ­ßÀ€â«zsÙ÷•îΣ£Å…jZêjª©ŽÓ¤ü¹9}žãjÏ=ï¹»†Ó®¸ó¦_ª±JM¥){%JšÕtvê±.§ì;v¦ØÎ]õsE`vÌ Ô‹—SÒ¬0À `&PãvS^QmÝ·‹”—R%·ÍJn{Êþ(·C帪¶†\ܰd”EU,®RþXdÕ9®uŠë¨î=ÇÊyêÂ×”½ò§\ïÂ}È`x ë;:ÙXý+bAØ…{XVªÆç‰S‰·Æ¿[ÙWçjšjX|Æ}÷u,lÕҤįźr¼]¹¯PâWŽïÞ‹Nï2 ;þŠca)6ˆ4¾"M4Œð ø œ‚4:¶Ž³sõhçÿQ­k;8A]6±S÷cÙbÿõôîù¸C|jÏbE°¥£ZõÆ:}Ô±¤¶ª’ªÙ Y•b‰LµBæÙW•¢’Ÿ~ š£4hL ¾ò&êÞÿ¤V™P(¸–l\CŸän¤!¼œâ‰l]ë¸xŲ[Øòþuå~Dl)"¯–´Õ±LŠ•³øU±2VÌ}hQEïÐî’ƒ”Ï ¯~6M8ë:¦K·–”5¤@@@@@@@@@@@@ ™€à+ŠÁWá#jÃ{wÒOOá¥/§!Wýzœ0Øt'¡P,£)¢¹?z‹Îýãã4àü+CóW Ð fäÔe¯Ñå§žI7Žº„-`ul…¹´Ï’b¹ì½ï¿¢•y›è¥ñ÷Ð1]!ú²§…;            á€à+Zv ÁW„"8ÇVÜ÷9þn¶Nõ{ÇaÀ£AàðÞ|úø¯×ÑõóÖRÇn½Œ86Dà•µ+T«]ºx\ʵVÿõ)•²õ¿¿^>Þÿ&®€€€€€€€€€€€€€€|9€)/|EŠ$ÂhQ_G¹,¤×ÞÙ`àׇÀî¯> >ÃÏ¡®½ûùÜÁ)´ kó·ÒÐãN ¾ÝÛ¶èñ/õ¸mÿnºtèm£à‘KF'ÁW£#¶‚/{6¸                 àO‚/&Mv‚¯&Cˆ@Â% êI±üEÊŸ×ssÃùiÇÿǵkׯ2ì‚@è”®¤–êùO¨ÿ…î³å¸Œ¡ŠSÿ¸Oh9ÉFJA@@@@@@@@@@@Z¾¢X`|E>¢°& XˆQSEÂ]c}WhKí:tfáWûÀîpÚJª£ án3úQEìK] }A«êÈ.€€€€€€€€€€€4 ¾š³u$|YsÁU(`±W}U9[ôªRZK´1Ô®s¡z 1ü&r&ª+Ù²—’‹Hm.Êûn3sq=N¦óOë©€›8¼´c»ÎÝ›:#”BÇm'Bñ{‚áúöíwtH©oaŒwîÒŸ)kÛ"ŽNu d­^ëÞœqrʤŠ-{fË^mi«>ô#}ŸWÌYŽ£“Î=†tŽ¥.!XújCfÑ„@IDAT-uÑuˆÇÒ<ci[ª$ ÌkÓ2nÚ>ÃMtÒP±'mÿù)6O;tíO#RËœáYS ç*X„C nA@@@@@@@@@ i@ðåÇ¹Ž wì ’š:¢öñtÒ°y9žÀ[]y!íø¹„?iuîs :.˜Ox¡¾Jw~Këw”N€ÍÝãFŒ¦³½tz7º+;J˜C%Ù÷Q/÷¸ á¨àº¹.HÝìе'õï?N:¥‹ø@¶é¥Kéìû¿T1¤e•ÐŒ Bk-›^¢ng߯úKHˢ섃²y¸­¯óX÷òIMiÁvÚœM·æPY©‹ªø~ç^}ià !tæ™ tÆÐì˶b]Ö÷JZ£„yÚ?©xý]mªÿ‰éØ…b\´zÝþXÜFŒ¾„ÅD±>„[ǩӶÑÜW|K—v»¾T c¼“Ûo8í>¢ioÊÀrršÄC¢†çGB÷~xÿ´uÃ÷”÷ãN**­"W•‹:uîD=NJƒO:•Fžw:ýªWË–Tl}é*ºjÚZ5ÏeÒÔó¡ãb:è ìZK]lýäVr½I7qŸaYDMž7­~n<]þÐ )9 ”UžM´zQ°”eõ,|‰à@@@@@@@@@š ¾ä’pÒš2éÇRÍE'ºâÖ[iP€ïŽ…?¬¡Ì¯$ÍGì)WЗ’Cµ=Eð%б Èæ†Gx2’^Û&+ß+’Ò©<ãnjsß)lø´žË´õÛmTÙ¡yÖ)öâ›g8¼º™Hs2^¢û’"œŠÈ'ç)áGÅÖשÛé÷¨‰Iš³‘2î;+² 3´ŠŸ·Òf6ëר™tJˆÖÆDm5‰EÎåÙJ·¯¢§î¿æ|¥]±Û¥×>zšîs²¿×ºµw"-Rî\ó^2¹Mõ?1±qTùÿu1`8uÊfó¾â´íD4W®MtKç³é%Ð0Æ;¹ýÎÙXB÷šÐ3¢ioÊÀ*6±0îì°…qN’èf¡W1 ¾Ô­âGzõžIôEÛ‚5>m¥=xUPÁ}Ѐ¢ä ÷ÉtÙ=缾?µ¡þÈuêX|ÅQLÀµ–º¸õõ[èô{Ô–Hm¢M,ÕÆ¹ÙŒmçMØgØÒrؿۆä†{çbŠ<ÉÇU eW½A ž }<´ŠÓÖÉ":ÏNV¶ÝY9Æ5ð!Á—HQÞ:úpmŽ.Üò\ާ«o½™N´z±_[Dë>ørŠ5©—×Ç©WÓÍcNôÁl}Šàkëë×òG3ù×åÖaY]MJϦŒ»O6_‰,øú‚/+V-ùš{ÿ ŠûÕµœ…D¶<ðE“Y?6†Ê/iÎZC]ªó&w§,§•»÷0ÇG' F½B4Æ$¤¾àËM+¦Çѵ/²‘£0¬‰‰Z—Ê|çGÏÓÐ?<ãÇÌ5c龚ýQ&)FåmÌcïÑÇ_nÊ‚¯‹Yð•ÙÆ_íc©rÇ;º°5 œ¶¹5øX„1ÞÉí·5—‘Á——zÎË¥ÃêR«'а'p«¡z*‘»€žé0„^6ÁCÖ8šrÁYÔ«3Qé¾M´n+Ý¿(mýçÁ_KWZΡ•à똘8¶ó×.`&ZK]”çm£M,ÖF¹yÆæM×gØÂrؿۆä†ÜRÑšWoyN$èw»5²ˆÖ³“ájwþ®q@@@@@@@@@| @ðÅ å­\Dkw{„: Eèá¶|Õ•ý@‹–~M>>T¯ñ|‘ÛM.þ“·X e=7–.yèKõrÚÚ}4ãÂcØìŠ(¶S'Š¥ “à«„_÷i×?Κ†À¡ÕOÑq—?Α%ÓÆª·é,+b#$Eþؘ¶¶ˆf\ÜK©®Ò榢üïè§ï¥‡Þ1äA‹rËéæa­ËΜü1,ú‚¯ýôÔ鿢ǹGôšU5MðUúÝÔûÒ‡r<ívZþÆ}tåÈ“©“.€sÓ¡Ÿ¾£…Ïü•þ¿ÝmÒœ/éý;ÏÐÏÉGðUÌ‚¯¶ÔÿÄ´!Á—QèQ½»”Ö½öºqšæn$-ÞËËtö×;žÈ&®Cƒà ¾±z©AËs°Èô[ÎæO=|‡ý»î?̃¼ÅwÑðIsU_éÙUtw[3ë%ñj,¢õì$aõ6óvçŸ`\hf øbÙÖºÅoQN—Ll_ºâúKè—Õÿ¥Íªå.kÁ—kÏ:zëSÈ¡ïéWÓ%'ÑÒ7«EqÁ—M…1è)ç%¨ì4fÁW ¾b+~¦¬uÿ£‚TÃö&Žé;€Î<ÿBÀœ‘‹-ålË¡¼‚Të3uˆ?†z&™0ÐlÑÇ&½¾—íÌ£Gk©Ë±Cè”þnÚ´z5eÿ\¤k&\F½Ê÷³¥¥_Ø[¶´tŠå¯êKΣ½l¢$®K_vJ= #ì“9ìxrÚIßmÜV~õÀ|Ü¥ÎÒ宨Où»~!Î1 IP–]¬ ¼M›iûÞƒTQÂ@™gÂyçSB8–V\¥´sßAÚüï{èÆg¿TSº`m.]Ì(âŽ?‰ËÓ¬ürÊ£oÖl¢íÅG¨‹•20è4yº5_Ÿ¬û†SßuMšë}%ò’‡_x—<4Êʺô1}çw±Uš®‡\w*”%¸îÄuðL`ÙBwÅ!Êݼ•~äºK:xü2 5œúÇ›" ¹œ¬ê]éÎo)ó«ï‰ R'kà ³è¼ †Q§¼…7|²ÊÈNðn2Ø„^KÞI÷¯§{.œäY®-eåθ€jk¹Þ ÜV=‚¯|z4>þ©•öM/PÁÿ›Lýµs¿½›VϾ•®ü[¦÷Îhúl÷tYoï©,øºæUª\r3¹ ·Óÿ6eSAi ¹ª«©û‰ tEâ9d.k9"E\¶¶þ´ƒ¨ä>‹·]iÀÐÓé¢3Y„&;õ+îT¹©Ë1é”~ñTQ˜C_¯ÏñÔö;ìÌóéü¡}uŸ¥?m¡uvP wn:ô¢AgžË÷µLèμ¡§'¸à‹ÃÚ™K[ø‘Óæ©žJ»ˆR¬å5ôá¹Tw<¬?•Íó™ðÊÕ£ò¯SFvG!?„À¢K4E+Ï«Ã}þ1Úeðg„Ðóγ“³2µ/ Þî4”4WÔ‚Ç@@@@@@@@@ Eˆ”à‹„Ãío»„ò½­Jd½ù†xóÓ-¢BMD•øjÑâ7”¿Ebw•ʪ ¾Rïm)ðø¨QÏ=~}¹Û߃ÍOoØÜ |9;=YpÍSÿøCOÇåbA’Ç%§‹µ™iº?Í¿¶O[µÇ"œ‘‘fÄ¥¹5öIbYv ø-‚¬ÊIÞ´'ÎÉ‹¦yÓ§^KYåBlœ“¨§3Í2åbN‚×_¡§ÀöZ‘›9SÇH³ÇŸu~-Ò+]rš®ìô$=é™bš–v/-m‰©ËŒ¼HñZ–oœ£‡©ù×ö¼”Ÿä%X&ˆ9«ò%÷¡†^…Óš˜¶Ö©¬¬ë–’òÜ ‘ìÃJË«²OšiÅ­Dd¦¥Ø2Rý¥.EZ$¼·/ß*±jŽ];H ÌlGK‹_RˆÊa0þmÈÄ&Ôz,µ ?V j»òI˜é´¾ºJøè‰×íâûâRQWìo—˜}±·-r¼cûØðSü¥˜¤¥å¦GÄü§&Há~ˆÆŠåÙ†?oœÕ»?KaËeî9ž –oòñWüµÞ¿Œy.C|3ÿë8ïX(*+ ÅÒF[ÞóX†¨öÉ{¸é©¯*åÙéÞðÅ*©²•pN±éM™–NŒ2"î ׊9Ú˜©§ßwÒ±§Vòè=tÒ?e®Gã ÿÐýÚÈe#ŸFšÅÚül‘fÇ?)Í’ƒUlÕ¢NÖ‹4éH±pw_sÙþí>˜#VæäˆmGÊDŸ»B±0m¢©ŽjuÛ³'æm)´ ;oË{b¼o™JçÃ'ÍYGÍéZùâ%z\m° ·X<¥µã„Y"Ï›ÞÕéFŸòúSXÛVµeŒ w¬ –c~ f.H7Ú¥Ä[)¯¤™þý‘¶“6åI“ƒö"õA‰sBoƒðÜ7Ú”Mßê ÆI~ ÆÜo™æÉáÖƒæ¾}†|î w6/òïß³¥gþ1m¡ä/3æ‚ iöî”äùª¹oQÆžK þ £%ÄI¹ªip4çÕb ´Ö>ÌÏAYø ÁV1m€DXÏ?¦vi=ïðĹ<ÉÏNÎÊ.œ¾4„vÇlœ¹¢UIက€€€€€€€@K%àToµdɱyóf±}ûv‘ŸŸ/Z°à‹‹Îí–Ê`A_ŠcÙ‹GÖ_ò‡¶Äd‘’lˆ<5’|D!UbYŠù#{BRŠHM¦ *<þIJ|»¯ùZí?©‚/í#©œ.åÃ@°ÿ¥" Ù’¤ûåÖa'ØäWh¡Û;M—ìÏø€” ’’“E’‡Ä9²XË>EU¹‹$A…VN ªðhÚ¢\¯Ç"‘®h÷¸ILžæ)CŸxg®Úg™Å9OæþŽ‹VMÓ?š'Î\åqB=P*ù4˜y>¸%OKÓR|êï´ !×ÂÜEf–ZRRüx'/ÈÖl—§’ÀRI‹Ö}*÷Ì‚/‡mÈQ=.˦%ú°â´&&J˜&re8zŽƒúêRñÎMZ=RòñµŸËNüUüÅ?¥x§‹]šPJ|f„«ò»x‚˜rÓXÉr¬øf¯$.+Û$xaI“›17Ý.¦Ü1A×yêÅX±á€äïÀ—žþÅ'Î$ö›@<–tß÷ñ3_“9H"øUùbδ‘2mŽQü!S&©yLÉ\7ýûäd‘¤ÜŒbO†Ø+!Q¤p¸ÉI\$–IéæÞr½—Ý)ÇêGôÚª†§?¨™ÓŒxgÊj7)ÑEk%2·aUOU›/R¥ôªéHf>)É>eï/ôà8:W‡‚/#ÿž2IJ4×A_QÓþIæeÄé‰ËˆÃaÿ¡±99Iã§uš¬9˜û9›xø²Gðå+_§×Áá÷¿)¶ù ¹ÌB+kAX™˜ç3'žt§˜úðTqµ©¾Œóv”™D_yY³ôøUÞ —ˆ)?(¦¤éò\F|/¥ÍJ¸eN[±xQc“^ù|õº Œzâáï´ý;+íKÜs'`]ò7}ç£ý»Ór’Ó õïû2¥1!UXýlE—Éóà`Ï+Jyh~¹ &ªs©T‘[jýœáqkŒINËÕ©¿à52üç ,B˜ŸÈõTæôù‡Ë;س¢àŸlÈe«„ìGÉS¢i¼PÚ£ùÙÉi„×—†Òîg®¼®À€€€€€€€€€@K"Á—_i…&ø’½µ,ÁW¢X¶Q²Sž+fJßædé¶²DI–lA*IdæË?å.g‹’ Fûø"ƒ±;öû¸Æ¿(ÏÌ%ååüçùz  ?dAJ‚/9nR¤˜^äs~³¥üVùä×dÁÝîÈiºdê Å’—d)&{‘!ˆ"¯èÍ. æëåÒÇãC“æ¦h•lá,Y¬Ú#©Y «DvË´ÐÌ{9OÖed¸ß'YZÓ?R‡P”us Á…¯5òüLCàÁåž®+ø˜‹îë@®Q¯•Te/“>ø¤ˆ\oYXæÉGœ33Sþ¤èoùKB8nC ¨ÇUºE)E´eö%âT_}HÌ¿Fc=Z|¶[Qi.»}Ùzq¿ÞîX¸¥ °4Á—~o´Xº~‡!$;ðµxXYÉ"³+%kc§Mßï=dø+Ë¯Ù‰ÓØÂ×=>%?·‹ovzýß<çceÌv¡øø1ÃâWÒs_êq:I*øòGm² ’˜šÁµ\Új‹Ä²ÔD]œ’¼(Të{E"MêËS—BF%ô}k5Kc “d“Å-Ù‡Ò?%¤°8­¨D”—”ˆ*¥m„ÐV­ÚŽÉ:HÊ2˜Kʪ¯@CëGŠÖJýVBªÈ–;ËÚ}"=Y«§\ÇÓ¥|Z LñYŸÈV•´þ¹HêŸó3¤ô$J%÷OЍÙ,XõcÎIuÜXgÓ¸jÃ)×4ð‡s§Ì$A¡<î!ûi‚/?Á-Z!Vï.»kB{¹„9ŒqbñŽbIÔU,Ë–¿ ñUaý.1Cjã_\%vK¢®‚ƒkÅ-RŸ15s—nX‚/)N+áZø ¯.:mÿÎÆJ¿‚ö¹ ÷VùÈ]&Õ%SätÌo@{iÀxë“m¿ÓàíÜy~eÆZß©`œŽç}†ÓþÝq¿f‘œÄ"i<08HEQ$‰ÂLý·äÆâP.»9úÜ’†0:Ÿ»:¯Y0]jÈó€- S Ö'r=ÕúyH·}þ ³ó<zvrZÎúÒ@íNnc‘›+Z—®‚€€€€€€€€´\|ù•]ë|YYq’_˜‘*ÓG”´µ’hJgÆ–µï "sŸô…\wcu`þµ}ŠnÊp+ °ü€ÃyhV5Lž¥ëü×*¿û2&±€½í‘ÓtÉþˆ¦YX!àtK­Ò$ámbÔr~}-´ù„¹Ö$+ñkþ°± ˜()1ržÒ˜!ªÚ³Ê$Êš–¡ ¦‚׃ª\iy¹Ä4Óò‹ZRJ$ A ©^ëaÚ‡"å#~Ò ¡ [CZ•.fÎY –e¬ÕE rž´zg²@”¼ÈdEÌ“†"“h22mH.×ðê±,^1ҢѲß×WoOêâ« bCHË9j¢°BÉ:˜d©ËGðuÿ’­º€J³V¹éU]ÜDÿS{EeÛ—<)’®+Æp>ùQ®¿¿õ/èþdaV]E$\#1{Ï’{?VÃT><*ïdKB2%î‹uër¸NÒc'ø’?ž¦g[ô›lá*}fšX°h™X›kÕ÷Z”#‹YÓ‹Š5/n+þöúªŒ>“E¥ÊÒ¹ÚV¾Qƒ±58¿$o«VmGp>¦y9[ Y˳<ç¦<¥-kW­™™™ž?>^•™!æ¤JVàÔtÈ"9íÖõ@¶8“j³$œ’¨D·ÞPd² 6-}•ØWî§bñÉ‘õÔs KêYÄh|,Ñ:fWòëYÒËzÓ‡}éz8ù她²X ”‘áû·Ldfi©BùÀ&Å/¥Kαì 9Ïò¯Ê}_ú›]ÊgR|‚¯d¯p…lX(!9‹×ÌB³–xŸ"²äõÁäf!ÔJH3gúÔA®“3S ë ²¡,I¨¥¥+19EÌY!6æ[ lärÒê|-=ÛªÙ|(mP’ÊÕ¦ì,Û-—§Ýu¹ÖX×þN:IË2jB©€ûñši9H Á×5/ˆÃ–a°E.}yFßx‰í_,³›.¦ÜÄÖ¾.-Náý3D"šÀÊ#Ú’,|YÅ) ³(È}s¸ŠÐ+¼ôØ ¾DÉZéã«–D‘’:Gd¬Ú’8Ѫ •kµ%ù"cÁ‘š’ÂV²Ebb¢HHHPÿ´v ·Å\g¬…»R} ¡­jmGMOþ"]€C¼¬£±¨¬¼W‚ÈØã+Ȭe«K,å6Ÿ’ÌÖ¾¤|$ÈãŽ,³( °Éù·nãRþ¥~VîÂíŸä8-™7¨ÿYå– '9Máp›¯àK³Ž•·w‹X¶|ž˜qÿD1\§|÷I/®#Yâjéþø‡S~Ðü÷äãâ©n\žå|MÔë`ÚyH¨Ë“&¶Ô¥['>:}Á—“2pÒþŒ•Ê\¹'·pæ<²¿°ÚTƒÚ‹Ô¾ÃoƒqÛ”U;wœ_ÆrŸ«¤ÉI=Óê7µé3jÃíßRN6iPòkæ/3–A®Ý—¡[ìL˜––°Z.3_©¾„0†Så8Ãñ§0¸Éìlê¸âßîy@N—™EÀXÕ›²ßpú“°ÎŠsƒò$•¡4¦+ –Ón8éK¶»Fœ+/9¸h) øò+©V,ø’Hr¶-_6Ë/Ò¥¬†`@){+ër<Ʊô¢ÝæÃƒüÂÝúゆ)_vץح,šñÒb‰vùL˜Ãr0Ïæ4]Áý Ö€ÌÔ?J[-siä@>’òëóÑÂì[9v¯ÏG;v|=1‰EVËÖê ø¥´‡PÕ=ã^¢´T]•X•.‹ÁŒºêqŸ$ædd›>Z•“|mZ¦µ­»È·!‰©~Kô¬ê1ß¶L‹áÍö¨¾ú´âXkk\–‚-EµK̾Xã+ù•ÅUÛ ¾vˆ'õús»øA[J’-ýSS ÛzofI‚/«8ƒ¥Iºo ×Azl_\ ÊR§²`֨Þ<&M›#²K|EP¶Å§ÞØ“)YÓ™Z13[´ëLÐþ6„¶jƒ—þÕE8ÒÒIü!3QK#×q­U3ÂK…Ë[¥ß¸f&Èã–M»±"Vþ¥~Vî|ËÏúÜ蟂Æ)çEãdò,‡-q š&Y¤+q°bª]³|iÂ/ϾBäÜ!>Êœçgýküü ‹\G³Äø ù÷e~QÚZ?Á×SÎQÅŸz5Ý<æÄÀ¼wçΫ¥¤¤„ä^v´õõ[èô{ÞQ/ñËwºï¬^òm鸂^Û&¯àK‰éTþÅÝœ+óV±õuêvú=êEþÈC÷EäÚD·t>›<1¥¦/ ä2{”Ïjj¨ÿ艔tVùªÍqð4ÏŸ]vפØå÷Zί‚ÉoKZ@å·«Üœ¦+¸?¢ŠM/Q·³yq;ÞØZeÜÍåt“òKI´±<ƒÎÒ X.C›²W‚w/‘œ§´¬"šqAr»Ý¦ÇÆÆšÎÍ'RÚmÒ'ÇAI©´à:®…ª!õ§‰L¢>R´îÒŸiÃúuôÙûKèñ¹þ%œ4'‹ëüjÒäø´v%_KË*á|ú·5×Ö…ÔùôÉj‘iCÁÙXÖcNÝu3{ÿ3QSL¯_߇þô‘çÞ“åÒccúú;´ºR¼ŠÎ<éÚªÞ›@ß¿A J¿éÚB·öN¤EÊõ‹_ Ã™“ýú¢2ziìÉ4ý+ÅÑÚpà ï¢îëG¿Ÿ¯\S¶ôðœ”töêѽ3u‰ëF±UßÑoϺY“…YôþŸÎð8¥ zóè%VqK“tß×YzbÚÇRL'­Az“gÚ¹éç¼ ´någ´äýÇiÅ—¦›|’DY%dQå|’ûç÷(îÄõë É3éñÉWÒ©ý{R—.]¨sçXÚ0û7tí³J)™û ¹Îhõ^H=^åvâFÞ»hødÏx—š¹žùMÚùÞt|ã‹jè¼T*ÍNèÒE+îêL×zœóµ§¤óN¥ž=ºpÙw§Ø£Yô›á×zÊ^³ß!öyÞˆô]Xù—ØÉy· §œNiDÇ`9l©ï š&n[ú|Bâ ƒ´8¨¡z*µwì.¹hÝóÉtãCz$΢¼Õ÷R×fús— é?^oSÓçÑ æ$Õ5tüè t5ÏIrߘL—Ýó®ê“_ôGËùR)½uY?zèKÅÙDZyd%pÓ î·‚–ü¾7MS†–Ä—)õêʇVþމ‰£ÔN‰ÀvsZ iÿZbÂ+5?v{¹møö𫹇ì/¬6ånÈœUª×R{ÐÒ©ìårÑÇxÙͱìÏŠƒãüòGö«…Ýz §Õ/6}†’í°úw9öV¿&ûõ+'© 9ÜeùµtÃ)¥ôÜéÇÑCêÄd&íãbè›_o).¿tx\È~éÇþŸñlŽ?yÎk™Ã€ì VmR¹+çG«k†¯ÀG¡øµŽ7çåI Ûg,“Óë´ ÂéK¶;mäæŠz8h5œê­–.]JC‡¥®]»R»vüýÊ©ÜÍ©âÌi|ÁýÁ—ÊH^v%iÉ Rp†Á\H¿¬öý•¾×«ü kþ¸`à>1S³c #xØv¿¦®­ªåüW%ý•——‹*ÉÈŽÓt™ýÙ, ¸1]·ðÅÛ,òluIʯϯԅ© ­—óTB”y$†¯¯u ëdðê½¼¬ödBªD^žËn«baž-¬%El[ÆÆÓª™F¾äzjUžärIN·úhX+2¦iBƇ҆´¡àlìê±Ýu úeEðU·÷c1F¯3$î_²É_h¥‰¹´ýŽ÷L~f¯ÛeøñJ­ÙkˆÄtÁ˜ÉwIG¾–¤¥ãšW ™'ïxýv½Þ&ÍùÚˆ³‘_NÒHðUU^"JÊmj'@OÔòŸ¼ˆe6Á7¹î¦g[ˆ¤ª²E²&%‹’¹ÎX·åàõQŽß? É?¥ˆ¬ÜL#Ó2Ìm”?êë¬ÿ?{wUuþ üGH€° #ˆ€ F"¢ .X«–jójU*FK­­µXƒÕ¢V-*Š(Z*‘ ´QYŒ"’Y KÅ@IH$$!îûÜ;sçž™Ìz“0$ù͇03w=ç{ÎÝŸ9G‚•dº¶Í¶ºjMR·É îx}+ÿÊÃášìŸ‚¯³&û¯ zõãI«œုp·=3Üc¥Y¾þÞÕýÿs«»=óœÇþ6U“íE©×a'û˽5<Ø6e?¿Á¾Â­jZ­óW^üì3œc¿`ûw­å0 ’9ç•ö’ÛzÒ³Úì©fý¦­ôÝ·UP>>©uØó˜¦ä×O}±[®vçó‘|ÏA5¼ðoá¹_ßÔyýï |]ÿq®Qž”e+Çt=ý5+ƒð÷¥·;IOmŸ+ú*#£(@ P€ (@ P€ ê·¾ª•ŸCûn3kÖ¬Z¶£ÚÕ8rÖ[FÀ×WÙÕÆûpz|išä/ØfyŠ3ÐeØÝSµ]¾žÌû̼r£ÝÏÃõÁݩ۪-eíTëá€tU©D_v°›ëÕV¦ °›.u>ȱêñòÌl%DX- Sɯqx/W j’n"•œ¸>Ê/ä­ ðŠ©yò|V}5¾‡(i÷(CeêµV`ˆ<”ñùÐîÀrWëAô©Kv3oK}Ôý€ß_ë"j —Tè+Oj}Aâ³Zµ8Y¿;8GÊN}Pj n£¦K]§Çp5FaõõÑø’@ª5Ï vÛé­c<1ïk­B ´rjɰ#›YÁ9úƒV ÎòhÅË#˜ Z²G`–3ø+{ñxk}¿ÿÀ¹®\%àëš<—)ë­ØöGîTZ«‹€/›éñð%WšÛº¿z/¶Õ §p¾ª×ù2myŠਗëìmÖ[­3¾·åàõÑ×¶£Ö3µ<}ýæßtïHTµÕŽaÓ•}»si•û–xlo€8wN‚¨ R>‡•õá°Íý“¾êàë¬Ãc°§àiRêê XzÔ¾vmzÝ]Þz¹O]·Ç# Ë3øª@{ç‘!Öôcæk{]ÁW˦ZÒç2>x¢¯1ïUÉ“µuÇ]Aa‡>Õ.t×¹‘Ú ­Œ©]>ó©{ÙêðÛR7¹‡›i^<Õj=Lºt<-¾ÂÙþí+½ËÙû»º?€W€©sZ¯sž}®à×lS‘8ÞzçÛû{ÐmªùUÍý¶ç0ï#GèÇ@Z=S~öf~CÞ¿Ë ¶Ë)Hô´¬›®\È6Ÿ¨o÷ê1ÂLpïž–ê/&”ý ¿c¸Ýrµ;_ù©Éõ€‹à+Vç ïú'¸³ý<)Ëö¾v²Yv÷¥ê>Âc»«É¹bYž¶9#CË¿]yî3¤à…Å)(@ P€ (@ P€ (@z)À€¯²CÚ¦ï¾3nŠê7F7e|¥½ëjyKÈZ¶Næ¼iúÝwZöQ‡vhç&í;×°ŒM›´¯–¼ëøš5w™¦Ó—•‘!ËÝš­ù‹;ݾÔîPô‡´wO]¢í+”–”*+µÂÛ´ÔgÍ_ÏëïS4óy]ð-A¹ÑîçaÉ1¥{H·^³×í2º[<–·K[èþÕ¾+h éÔ|ÙM—çI·´>°n_¡³ûÈÂ]ÚìG‡Y¸á#¨È/ê1¥k4hÏ.ÌÐòìÓvp>è«Ü·PY.´”ÔuÒª³Ûʼ]kµ”a.Cý¡Ø¯–vü®Ó9BÍ“ù°1È,^£ƒ×i²A³º¡ÓÓz·¶$cŸvLê`eY¡¶mmª°íÑ%ûŒu”m›­ä;I{sy†v@ê®Þ]ç±By²|ºÕÅœÔ/3æÄwžö)-¥ÉÄ1ojÛèewLÛ•±Äcýúv¢_Ù߆‚Ûx<$RºâT‡cسZƾÚ¾m»´B?I™…b|UoÑ^¸F©zݸæwÚÌy‹´ôÿ­×vn^¯}³lŽöÌï‡+Æúô#´o¼[ðò øÒ}ž™÷¹V{P+-8¨íYõ†R2nE–³¥®‚¯µd}½®¿'Þ“ydúÒÜ,-ýÃ<æqNs¿ö}n¾«•¯ºèÒÑ^z||yt‹mXÊl-c×gw²ÒR]Þ¾ mú«Å8-b˜åf¾o›­ì¥ÜÍýKÞ®uË3MMµZ«SëŒïm9x}ô½í˜©“w5K/W#èíQm—w½”‡œVªkŸ¥w³{,OËX¢n·fýxTÛl¶”B@€’"÷ǰòïèdoÿ¤¯8ø:eï§tI¦—[­ƒý8O“R<Ü”Õ>è_OÔ¬îåvÕ˜ÉÚœ5ë´u{÷hßïߣ­ËL×.~]»Ç †tmû33‹ÝAVÙû¹÷ ºÇmSeŸt¸@Ë>Q¢mß¿I›ùŒÕ’0AK?a¶V¢ÍcÖy6A[¶7[Û{¼XÛ{4[[–:Ác¹ïìµZÛ•®« Ñ^]—)-ˆI+b‡2µw¦ªë“å&E.àËîöo÷XY­ ½¨ûcŸ£ì“Ê ÷i©ê9OâTÍj€Éþ6e{Q굿sÒÍvºÜe;·Ÿ_ÕØÜoÛ­zñ©Ûµs?û w±‡º—l—S°4èË–€`óg¾?»Öª]îô†ðÁ—¯s¶àõÅýù‚g¨&×þ-‚¯W×(“¯‚;ÛÏS k'{Û¤Ý}©ÿíNÉ¿ïÂ9W<–1ݽ$N]¼8(@ P€ (@ P€ (P¯}ÀWÙÞÕV°–èecy¿ñcž¶ú]³°Þß]­•ø©"æ²ýŒ8X½n>èñ=ƒrÃXd©¿Q7§Wo6«Á*úø]Kžuß46žøzŸ½Ù×’Í5x¿O“tª¡t)©<¨u=öHÃ0õaaðeʯwJ«·—.µ¼<Òî#?of„c©wëãÙ¢±üÄéî²Þœjuæw݉)4Q=·†¨y \ý-%xYs–íÒž¤èŽwÏvçYï¢j‰«õ9¿yvÙßý¦Õò™¿<X95¤í@_WílCÁmüÖcy(ênÊ•G=]Sͨ6?ÅáøÒ[ó*Þ¦½÷û„óŒkÆKІîÍ–±. ¡üî|C+PZKŸîP湌ÑÓ?Ð^¹És˜ÞÒׯ¾Ôe­“™iÒm®yÙcÞã“^\íî*ÒVzF¾[­…*¿l×Ak^y1ÊNº^ u»ô~à®”½s£-YR½ëÝ™ªuÉ÷¶¼>úÛv¬êfu}šè ê6Ý÷ƒÈ _û4%?cÞ\¢MOòòÒ»¾T üï¬ôXŸBÉÿ›îõI÷¸j™ØÚ?yWø6w¦¯NŽÁ~œjä`qz|r|IàÕñLíña^e¦”©¯ýôã‹«·¨µnñÓ!í—^ÝtÐ(f´Æu4]»'Èúô4Œ^è½Nµ+É é6YÛêî Òjùë¹tgZt‹`/Ûe –©Ï|úÛþóm+ƒåÃçy‰ÏtIkƒÞç<6·)=Mö¶—àû7µ\¼ñ,Ôùünç6ó«»—m»ÈN-йƒº\ŸûÖÐ÷ï¶Ë)hô%+eiÔ·1Ú6ï â@¦ŒóékŒWÖáÓµ›å*'6Îy•„øh÷zÀ¿E€•¹F©ç¾öóê0ÏëŸÐœk#Oî4˜×N¶ÊÀÞuG íÎî¹¢ºß g¼49(@ P€ (@ P€ (p: 4ú€¯9ß…ðõÕÞ£Úwÿ!ÐË “•üu¦P“€¯mJÙï &7Ìïv=¤¼{¶ïàƒm©î¨w϶Z}1—wl×J-%ÉjqÆ}c\¦ 3UZ’QŸ~›szž&}îʼu²^X‡¥h……Ve¬dµ|ÙeAò(åvÓ¥>ðxsm†¶Ð£u4WïÖR×Uë00Xrä!Ý6íYo§$ϲ޷.U3̇%µGß\©J_9ŶÙV Ùìp£ÅŒ…/+s]úC¼•³S|É$JW޲U¯…eÚºÔ©Z’W‹1fýM6F›½ÒÙ¤¹u»òÎSžú ¤ºûYiùn—խ㣠=—©/;üm(¸M zìë¡wàý„¦”ÖpÔîõÏ{ÒùhÉ˪GCï¯Í[¶^+Uµ<–Qü?í×Cþ¤?—åÍÑ’|%?÷AõÀ+ Üú|úýî}“YnÀ`í…yÎ@¬‚4Ïœ]JJ _wºÒ(Ad]Lêé,X¯v¥É æ¨&­‹™ã“¦[_UvÒsó[>ꥳ¶•X§Mã#XÓH[¢6æÙÙÚ®ê•Ú¬ª>ßËö­Ôõ±ëûé £‘“Bmö˜a¦z½8¶ÙjÏw= ^m;fb •V' ûž%~›…”íýM«[V«ìe[—V õWaÆlÏý¾Ï“}á³lõ0sÅAÞƒç¿LKu·å«KÞð÷OÁ×i%:üý‡5¯ÏO~œ‚§)˜CõµUj'•À«bí«/æj£“­®­²um³‰C´ÑSçj_²Zö2»O4ßwe}ª=”äìºÑ{~½å°e{ ”uš­|éAgYÒ Ø}õßœÿ¤ Ú™^Ab®à­ìCke}Ö~ÏœGo)lÅáƒÚO¸ò“8A[çjUì«Tk=¯nr¦ç„X{Õ¤ ìnÿz€t¸ÇÊ`ùصÐÜ~ïÖÖJ«£ S”ÍmTo±s›¿÷ð·)3Máo/Á÷oŽ·æz}½/Os®ðóëoŸk¿ø˜3Ž ~öfêõ÷Ð÷ïιÂ.§Ò /9o¥õC•P[Èt¦Èó«KP¢Ç9nðúb-)üruÎkw>kÍþ>Ù¹ðoáo-Öpû×?¡;ÛÉSðk';e`o_èœÝιb™rNçëºÞ*~¢(@ P€ (@ P€ ‚@m|5Ñ1ä!XدççUó­í¯ÔnbíÏç(ANN¡Ô=ùRbÛ¢½Ÿ¼ª+)/)Á±£.k©»±mÛ }k;õ¨9?õÇÈê£e¿0sJ·¡ò"9dc­¬”zÑ&ø¶z² Ò¡Êf}v”£¨¸eeÃ>:¶Ú¶ë`»î”ä¢P–…J 6®3:¶ P Ë‹ñS~9Ú´‰–m%:´óªÛ”””õ¡u‹0 ÃÊ]xŸÂHO›¶íÑ$&ȱMlKŽÃÑ2}»Ôët¬l¿íQ“]kQÎO(‹iƒ˜Ê2D·í$uÝÓ×!ûžránѺFë ÎÆÔR‡Ê+“²q–}µ}ä).û`Y°¹ ¶Xsü)ݘ+­…÷|íªŒx)kaz,•ãzy¥ìSôc`t ´ýòaìPK‹¢Ø}Nҭ圤U(ŽlsGŠŠPâÚEËvzVG9&yUȹHñ±rã\¤E›ö83Œs‘(4AÇ&ÍäÿºÕdû¯½c¥|J™çÊñÛØõÇâœs;"è»ÛT½Ü^j_oqÛõ Üsï‡ù½vËÉ¥ã/Åÿ{u‹‘Š…û*qû¹žÇ¿0“W;“Û-W»ó…êSu=P÷×?VfÃÏS×N6Ë ì}i°í®Î-9~¢(@ P€ (@ P€ ê³€Ýx«  wïÞhÕª¢¢äI¾Â¯õ-à+ürSÀóG¡|µ7Gñ§€V^ ­J¢°øª¹@“(DI šœŠš'—K @] —p¯£š¦[W«8í—Û¦I4Z¡éiŸN&õY |ûÄ^x¯3 I³qlÉï<”³>çøôO;¯Nÿ2b )@ P€ (@ P€ (@ú-À€¯–¾"ˆŠWͧœ«³' t¶òe¯ÁF{ël s5‘Ö³š4= Zi ¾ÌVý(Ò*Q“õ+ѵ”ÚfˆB\im‘/ P ŽÈùß$_–ŒÕ®5HW”—Èp¯:y±¼þ ™ŠR€ (@ P€ (@ P€°%À€/[lµ3¾jDZ>,…<êC)1†€}iÇ¥¥¯ÆÝ"íÚ M^F5k 0ØË6!glxzŸß%ÒÊW©´öÕ˜^-¥U/½u/¶óטJy=u%øàž6Hžç¹ÆÄgWâOýÌ«ûgÏiøíÔðúçÔ8s- (@ P€ (@ P€ @ã`ÀWËž_Ä?Å«þßk×â²GVkº®_Á.Oqpuá œ¬‚&Ðÿôh ¾ü èÑÒ…c“(é²^þ8¦Ñ È^•úŸXÚ@5ôÝAŒìb$Ì«)C½h)3[§‡@^»8l±R“ôì¤>•Ä®-’ˆ~âõODù¹r P€ (@ P€ (@ P 0à+‚…Ì€¯âŸâU—çÿˆïÌ—µ6CÏK.Eǧ8\(@ P€ @þ[ðc~©œ^7C|×Þ8·#»q<Š—×?§Si0- (@ P€ (@ P€ @C`ÀWK•_Äçª)@ P€ (@ P€ (@ P€ (@ P€ (PðÁBcÀWñ¹j P€ (@ P€ (@ P€ (@ P€ (@ ÔC|E°ÐðA|®š (@ P€ (@ P€ (@ P€ (@ P€õP€_,4|EŸ«¦(@ P€ (@ P€ (@ P€ (@ P€ @=8m¾þtG=Ô«a’çÎk,aÔ¨Q5\g§(@ P€ (@ P€ (@ P€ (@ P€ ƒÀß:sùäÝÍÃÊî‚ лwo´jÕ QQQh¢É+¬%¸&6#θé¸Ùëõ< :õ︣F»Õë’câ)@ P€ (@ P€ (@ P€ (@ P€ (™ËZ+fÀWüðt®’ (@ P€ (@ í‘Ø@IDATP€ (@ P€ (@ P€õX€_,<|EŸ«¦(@ P€ (@ P€ (@ P€ (@ P€ @=`ÀW _Äçª)@ P€ (@ P€ (@ P€ (@ P€ (PðÁBcÀWñ¹j P€ (@ P€ (@ P€ (@ P€ (@ ÔC|E°ÐðA|®š (@ P€ (@ P€ (@ P€ (@ P€õP€_,4|EŸ«¦(@ P€ (@ P€ (@ P€ (@ P€ @=`ÀW _Äçª)@ P€ (@ P€ (@ P€ (@ P€ (PðÁBcÀWñ¹j P€ (@ P€ (@ P€ (@ P€ (@ ÔC|E°ÐðA|®š (@ P€ (@ P€ (@ P€ (@ P€õP€_,4|EŸ«¦(@ P€ (@ P€ (@ P€ (@ P€ @=`ÀW _Äçª)@ P€ (@ P€ (@ P€ (@ P€ (PðÁBcÀWñ¹j P€ (@ P€ (@ P€ (@ P€ (@ ÔC|E°ÐðA|®š (@ P€ (@ P€ (@ P€ (@ P€õP€_,4|EŸ«¦(@ P€ (@ P€ (@ P€ (@ P€ @=`ÀW _Äçª)@ P€ (@ P€ (@ P€ (@ P€ (PðÁBcÀWñ¹j P€ (@ P€ (@ P€ (@ P€ (@ ÔC|E°ÐðA|®š (@ P€ (@ P€ (@ P€ (@ P€õP€_,4|EŸ«¦(@ P€ (@ P€ (@ P€ (@ P€ @=`ÀW _Äçª)@ P€ (@ P€ (@ P€ (@ P€ (PðÁBcÀWñ¹j P€ (@ P Q œ()FáŽ(ÌúÞø;q´°Q:øÊt³¶g"®w?Ä â.èf­Ûùš¬Þ;á¨BfÎalÝŸ­ã@ѱz™§v-[ ñœ¸¨Ë™HìÒmc›×Ë|0Ñ (@ P€ (@ P€ @ø ø ֿ߬`ÀW­QrA (@ P€ ‚ ïÞŠuSÇ¢²¬­ÚŸ‰6gvD³±Açk,œ(/ñÃù(-:Œ˜–mpåŸg¡]÷‹Tö–UàOÿZ¹…hݪ%Ú¶k‡Ø–zhRïòyâDŽÁÑ£ÇЪE3üý7ÃpÁÙqõ.L0(@ P€ (@ P€ (¾¾Â7«µ9ðUk”\(@ P€ (@ kÿzÊó³1lÔhwV|Ðé돰zîLÄžu®™4¯A1ücÍfÌÿv†^7 ç÷îÕ òVxø0–ÿ÷tk×3{}ƒÈ3A P€ (@ P€ (@ `ÀW`Ÿ:Ë€¯:ååÂ)@ P€ (@ x¬xäzœ}^w º5Ùc¸£hþýéü(Ý=–•Ÿ@ùQ EÛÖè|vtëv]Ú›zÌÒ࿬ÿÏ<äþ´׿º¢Aåõ…eëñÍž<Üù[Ï: g²òPÖÌ]ŽãúgiíL(ZuŽG|ÂèÖ:žÙÂ~ºý·zåjçìÇ‚?$nIcz(@ P€ (@ P€ (@:`ÀW †ºH|…*Åé(@ P€ (@ Ô\À_ÀWÉöÑá®w¬ ^Ÿû F'ž`š†5ª1|Ul}Ý<>`ALY†;ÇÞˆæ§ >²dßzlOÛn·ŒDÇVÁ§6¾‚ q<(@ P€ (@ P€ –¾"Xž øŠ >WM P€ (@ 4:¿_»>C‡o‰G7L˜økô®<Š£¨Dæwkðîš}n§ùK>Ä­]›¹¿7ä2àkûÛxìH±&âÚ”ûqΙÖUqÒcÕGk¬â¾õ]¼øÊ(´´†„ù©«Ñ‹¶·|œŸ÷mæüÕ'gÀWu¡(@ P€ (@ P€ @C`ÀWK—_Äçª)@ P€ (@F'<àk(Ò7<оJ÷;¾˜‡~ÿÛ°2aVŒìa¹U•`·tXPæ@LlKt8£ÎîØÑÖÆ'GÕ 8MÑ¢ySé.2ûò*Óº%â;Æ¡…k]E¹û±7_:Œ‰FËVmЩSÚËô¾^%E…8p¸G¤×Á–mZ✳;Ë´Õ§T× Tá`öAäëëhŽ3Î< =:úïž°q|%c⮹ˆW ²â@þsõ0|íb¾ö»qÛÏÏõ@?YQ‚ãÅ…Ò-h%ƒf-âŵÇ4Rä{Òî?ÿú¸iáO>°*+dxÓzñ[/GòwíEiÙ 4=­ÚŸ…vgµG”5…û¾Üü@ P€ (@ P€ (@F!À€¯3¾"ˆÏUS€ (@ P€N xÀ×åX—–‚þM7•à1÷à±tàf øZä øÚñÍÇH~ð]lõVpÖM‰þíÍ`­r¼3f$ÂH,MŽAÒøºç˜öÁûøC÷b¼üÄC˜¨4 eNpó½1ï¡p‡eß—'ÿ?±Z3§0i*þšÔ[ 6s­·ø·Hñ<¼ùëgáÝiåYþdù^!IÆ"wÀׯðç>BWï®§aÖeðÅú3žÝõ<â$@«dë¿ñÙô™Xõ¹B¼~&þý/ˆ7z-Aúøv˜ó‘Yjžï½þºÜÛßxhÍëxwÔxäxN\ñgüùgÐõL52 `À—7¿S€ (@ P€ (@ P a 0à+‚åË€¯âsÕ (@ P€ @£°ðu/ù&*_;–¿‰~O®pùuÃÈ».FË›­îϿ٠nFGcŠr¼?~$FW‹ꋵiÏáŒ/^E¿IΑ} ŵ݀M›Ö`í.™ùÞgQþP¢s=U¹xjàýxɵVÈ´õV}°Ætvó„©&—õžßúèùŸXaj“ç¾?&VùbÀ—€/qÍž}+¦>ó_ù4ã7­DO ä*üâxúÿ^s²Kw½®?O&ü/²¤ËFãuë‡xí•Û¤e®r¤Ol9¸†{½™_‡–ÜçyÇ56-še¯Âן;CÍÐç¼ðéCz øòÂäW P€ (@ P€ (@ 4p|E°€ðA|®š (@ P€htÁ¾wéxóÄW±è—U¸wðc˜/z7ß?oþ~ :ºóÊÞðzu¶àõ΂ù¸ç|½m.5ðê¬üä^\Ý9EE%ˆ•~º‚Á†<òC‡o‰WI ]W{tÿX.Ý?Ž4º4ºk4r¬À«§gÍÁÄFß~.ûøð/¿Á¨Oä«t¹öùÛqyGwŽJùH÷ŒöÔuÛã(yòJ¥ëFV´®{Úhéë¾ßÄ?ï,­õŽœ8 ³oï¡,øú§pÝ›ÒÒ×/Ç£øoC¬n#]S1àËwÀWå¾cüÐßJî€/Yå˾¹xpè}2àWø“tyž»‹È|;ºæ}Üþq±Y[V@™´ öƒ´ æžG_n VßÙ‹¾Õçs›¹VÇ€/ß(@ P€ (@ P€ (ÐHðÁ‚fÀWñ¹j P€ (@ P Ñ øòGr9æÿgž]ÙkÞC¯ñz®—tÕ8ùæ«q˰KÑ£­«é0bòˆûð¬tóøô¬w%h,ΜÚõn„Y-vY_¯Kkc£ÖƬٶ.z&KÙ€q8øövª<^ øòð%-|÷náKä*¬ÇÆ?Ç}Y(È?Š­%è®ä[l0ºa ðå¸u䛿áÉ»&9Ë¢ÏPôò¨_k%Á^ú‹_NþO P€ (@ P€ (@Æ*À€¯–<¾"ˆÏUS€ (@ P€N ”€¯!C/‡Ñ#b«Xt?«\Ö7 êö®Ø«ó§àÊ—¾ j÷úïKp—Þr“xe©³ŸÀwËã'ç-t©c&Kp×õப\<5ð~¼$#Ÿ~WZ 믶¦Ïa­ÃWÀ—¯õª_ðeµ1åL¾||Yó$ž5UñÀú H8+ù_<‰gþOæçÕgžÿô/°JMmáË3à+{ö­˜úŒèg‘wJ _ƒõî$]/¶ðeJð (@ P€ (@ P€C€_,g|EŸ«¦(@ P€ @ð€¯Ë±n] ú7÷O“/-|uÕ[øpŸ´Œusµ–±ªÏicù ¼²¦?ƒ{÷bíš•5}…kð Ø´î~\м/K _¥…¯‘_•î»Y³Ÿ¬¾†L˜†#õ_É^†ÒJ—´Þõ˜Ñzׯðg邱«GwŠúäEÒ¥bG£KEàa<µëeœU±³.º[dl¯ß¿‹;Ç&!îÌ6Ðãm|OÞñpýLL{g ¬jå?à«DZøzBoáëŠWðâ¿‚G¡²L/|ù“áp P€ (@ P€ (@ 4L|E°\ðA|®š (@ P€ht¡|­MKÁå¢lJv}†#Þ»nXôÉ4ÜÜÙìvÑgàÀ+_sYë¸ÎôXËðhv47 {kea½ò6^ÚQ>Yóø 4cÀW¸_ü8û>¼òLªQd‰Ï±É}=ƒÄvH˜Õwk`WHÀ׿||Ýùi1-Á9k‚t–ˆ±_o@â9ÑÎAþgÀW ަ(@ P€ (@ P€ @`ÀW ”_Äçª)@ P€ (@F'JÀ×: øê à ûñ‡+»ºÞù¿Â§ÓF`XWW‡ˆ%øú¿‹±¦ã˜h]é ¼ªÂw‹þMñpûeÝо¹3xlÇšè7~¾Ìk|ÙkÞC¯ñήþn~äi¼3ª¿³u±ãûñò“aâ}]Öô× 0à+pÀ×âݳC ªGQ¼;é3oÅŠÏucýåjÝKb±¬-àÚéôÿú#ÆQ‚œ¯gcΨñÈÑ'÷ÑÂWÚèvø—,oàó0*¹¿,¨GÊcqF‹½˜A_|­Ï×ça<<ë)ôîæêºQ¦ùqÑß±ó¬±þósõ)Ü/|¹)ø (@ P€ (@ P€B€_,f|EŸ«¦(@ P€ @­|‰Úî/ÞCÂãÎà+qÀ帹Õq|¼f«ËTºbÜ ]1ñ[¾ªöãÞAíÒ_}ôE\ñV¬•®×mQüä@´0¾H·Žc¤[Çt×8iaìæ¡m”u÷=ÿ:ÞÞÅ5A€õÊçOÁ•/}']SŽ“®)o¬Ö5åúÿÌCîOûpý«f÷’æzë÷û ËÖã›=y¸ó·¾ä±ÏŸñçŸG×3\Ó8~ĿϿ«ÌŒÆÄo"ÞÝú—Õ¥£1[ŸD`»t ÙGZût Ž~òG<óÀkÖ¯øÛŖϨ>>Zº“|g)1àËââ' P€ (@ P€ (@ 4|E°”ðA|®š (@ P€htÁ¾†b]Ú£[ør©íþæcŒ{ð]£EÈó‡âõGoÅ=WusjYW¯ð>F+Ý÷¡ªÎü'FÍ6y¬% ¹KZ{èg]úŸ¾/¦Í‹?\e{éË °^{ð›èþà|ô½k"¾ýÓ@(±CF"ðe0¸ÿ‹¿"Wýö\ùËApÇm¹ÆVJÃÒG†aÕ·îÉ‘øû™øõŸïBþÔv˜ùžhIÀ×YʌǷÏÅ㿸ϚA>ÅßúF¿ô't”ÂÈ_ó:>²<¦/}’qgÊ Ú1Ê8|)üH P€ (@ P€ (@F À€¯2¾"ˆÏUS€ (@ P€NÀ_À—}ˆ*å¢<º Z8ŽÃѼ5:¶mþâªN ¨ðJ¢cÑ¢¢ Ž–gàì@Ë‘®#@ ™¦¼èرuµ€­ðá9Gc ø¨¬(ÇIG¥tåy—ÿD6¦u4oîç饫,-Ñ'ÇI õ³¦wÈr¢åköÒ|–GKÝ)ÃÉÖк•÷D?”ƒÊè8é&ò(N¶ˆCë3œí½y¯_Þ"üN P€ (@ P€ (@†-À€¯–/¾"ˆÏUS€ (@ P€N ö¾.aã øª¿åÉ€¯ú[vL9(@ P€ (@ P€ ì0àËŽZ-ÍÀ¯Z‚äb(@ P€ (@ „ ðÅø_ MÛÖ¸öÞ‡B˜ºqOòå{¯¡¤´ ?ŸöIƒ‚xé“ïðÅölŒ¼'ÍšÛhí4ÕøxÉÇÐJŽ`þý¿:MSÈdQ€ (@ P€ (@ P€µ)À€¯ÚÔ sY ø Œ“S€ (@ P€¨ÀËÿ‰­©/!®K7t<·Úu>Íb[Ö`‰ kÖeÇQœ{ùû~DáŸÐ÷îÇÑó÷4¨Ln?x¾ÿb[¶Ä9]» îÌ3Ѻuëz™ÇŠŠ >ŒÜƒ¹ÈÏËǃ?¿·¼ ^æ…‰¦(@ P€ (@ P€ Â`ÀWx^µ:5¾j•“ £(@ P€ (T ;m)²×.AÁö h'«‚Nߨ&hÕú\†®CnA×Á ³µ¨­û ðïôøöǃ(;QY¯‹¸iT$ví„_^Ü7ô=¯^ç…‰§(@ P€ (@ P€ B`ÀWèVµ>%¾j” ¤(@ P€ (’ÀÉÊ(+Ì…£üxHÓ7†‰¢[´Dl\gDÅ4œ®•ÛIMÃá’29^h²Óv\l³htjÛ 1M£NÛ42a (@ P€ (@ P€ @Ý0à«n\CZ*¾BbâD (@ P€ ´À7/ŒAçK‡¡Ç w5è|6ÆÌÍÿv›´$–ƒéÉ×5Æì3Ï (@ P€ (@ P€ @ 0૎`CY,¾BQâ4 (@ P€ ®@Iά|< ÍÛÆá†é+¤u­æ 7³(gzëaKþ—…é+2Œ\ß>ðÜ{M"Z5iD Ì*(@ P€ (@ P€ (PW øª+Ù–Ë€¯8 (@ P€ (@(P¼{+öó r7®Fâ=)(Úµ ÓW¢ë[ÐåÊáhѾSÌuÃÍRyev*BÖ¡BìÈ-BÆž\œ×¡-Æ^{ âZÇâ½µ›±vG6.íÖœçüëǰ†[%˜3 P€ (@ P€ (@ Ô©¾ê”7ðÂð؇c)@ P€ (@ DZ@ÓNB«ª‚vRÞO:œïUú{NêÃqò]ÞOÊ0Í5®êDN-D…þw¬Èú|ä0JîE›.=ùˆxšµiodóØqàÛO‘³~…±üVÏ•qqFë_z `Íψ3¾7kÝQMcÐ$ª)š4Õÿ¢ÏQúgc˜×w÷°¨HsÖúúõ–´ô?ùçzw~?yRƒÃø;‰ªª“¨”?‡”a• «”²rTéãe˜k¸õ.Ãõñ®yáúüú¼Æ´Îù+$À+ÿX JŽ#ÿèq?áÀùgµCŸ³Ï4þ.ŒÃ9íÛxä·°´™ °-ç0¶<Œ …Žm[¢cý/±Í¢a1M£ÐTþbd|´¼ægy×ÇG7m‚¦ægeœ9½>¯± }Ú(ç´MšQM¢äh"_¢äÏ9LðE P€ (@ P€ (@ Ô|E°¨ðA|®š (@ P€hT'+O@¨:š½SÞw£òøQ8*ÊPU^æ|×?ËŸ1ìD9ªäïde…iF`ŒH%ÑThÕÔèv±iL3D5k¦ÒcÓfÍÃŒï®á2L¥¿»†ë]m»œ6çôDÓæ±ý+ŽàÈO;Qš»ŽòãFzô 2gºN ªROcNi•á’Ö“®ñúg}œVUé PÓƒÕôˆ(h’&I_L D7—´Kô¿hã½¥ó½EKÄĶBëø8£Û’ÖóüLl#•Ÿ@žFéÁQyÇœï%•Fð•ŒUé¨2‚²ôÏ'$àªÒ¡iYÃÌiNèAWúôFÐÖÉjAKfS”D4éANz@•ôdNÉp#Êün½›Vú¼Æg% J]Nó˜¦è -wu -=X«}«FðTîIô)>^.&eWM P€ (@ 4h= iÓ»“PV˜‡7Œ”`¥!F÷‡ :Óu9½+Ë< šÛ½"UäÎÄ%£Ÿ‘V΢ý®é§ÃGñúÿÃþÂcrA\tN$Äw0ZÂò;G4H£e'™ã øKÛ¹-b¢ñè pÁÙq 2¿Ì(@ P€ (@ P€ N¥¾N¥¶×ºð寠(@ P€ jI`Ïçóq0c®úó¬[¥ª¥U7ÌÅH PßL‹³/»ݯé3‡Ž”bìœÏ0òŠÜqùawqès¡Ø`–oÞ7¿ü¯Üõ3ôìÔ®Áä‹¡(@ P€ (@ P€ @$ð u×:ðA|®š (@ P€hÐz«T±gvF›sz6è|žÊÌÛ¿KZL;„N_ísµ{ Ž W‚¾®èïs<RàûŸò¤¥¯¦èsö™Ä (@ P€ (@ P€ j À€¯àÕtV|ÕTóS€ (@ P€ (@ P€ (@ P€ (@ P q 0à+‚åÍ€¯âsÕ (@ P€ (@ P€ (@ P€ (@ P€¨‡ øŠ`¡1à+‚ø\5(@ P€ (Шb¢€è¨&hÚ|Ðd|•üç8©¡òd‰ýŒÖ¢¢q²i4´¨¦ò'ÀWãÐN"êdšT9%|Q€ (@ P€ (@ P€µ'À€¯Ú³ {I ø ›Œ3P€ (@ P€K@b¼Ð2ÚèÖŒœØ- ~whد_Žf±8Ý,äé9aȪªDtE™d2ŒJÔ°I˜; P€ (@ P€ (@ ÔH€_5â«ÙÌ øª™ç¦@ĥسs¯bbÐùœ Ð¥C‹ˆ'«îàÀþM}\²}Fw Hè\÷«äê@€åX¨a-²<7 ÷È<1èÞ:×p÷á(Þ Û²åu½xº´ +9 fâÜÌtì9"ûå–Ñ¿_wÔµÁ¸4¾Œ”#+}# ôC´Ç±Êßð:*ÏEúÆ=¤ C¯þèÕ(ÎêÐ3ÌEë-yµŠ©Ý`¯ò‚HßyX–ƒ—@|#ÙÑèA_%•¡ëÔë`¯òddì†ÞU\ïèÕ±áð¡­ë±×8VžKú÷Dó0·+»“;ƒ¾ä"‚¯ˆ ”ÈùgVíF,#\q­ ”æîÁ®ý‡ó•9¾ ¡Kƒ<®Í|úÛžü ¯õB«g ¬íëßÓ+û¼¿RWåÑpïsDິ® ‰Ë¥(@ P€ˆ¨@í|ih¢ÉËNNžŸWaÌöÀM§ËM¿“Èß·Gô>+¢Zâœñˆ –±Š£Ø·w¡ìDд)bcÏ@‡ÎñèÚµ£ß›§¡|cÓÚ ç«`H¿.ART*ÓëzÀÕW èŽè sp4(ž€#w-F%Ü‚åÊl “V íáÊ_­í'€³EB‡À[èþMk±CžXÇœqºlÏ¥˜5¸+R2% S°;m,Úùʪ­a–OL°ý]é¬ýv7*cdE¥1¸àÚ!èÒðžÇÙR m¦º,ÇÐRÐØ§Ú4+ צ¤ “VìÆÃj¶%•nš…®×¦ÔÚòêgù(õƒ±"{)4ÒÀ·úY~µ˜êÒt$u½Æ¦«ü ¯ÅU{/JÝ6C;Wð^ÂéôÝ:Në©jyv?\™Ð!„–#sí×8¨G½É+è1Þ9Y­üß¼)ÐBïÃQ}•cû–ÍØ¸ù{lý©eåå2Q ÄÕý.JD¿~}qn;ÿ'gþ wî¿_XµÖlÿ­&ítÿ\.Q_rÉëÿ%×¢iß!W¿ŠnÖ —ë¿»a ¬Z¿v Œ;­ºáš«ûø½nuäoÇWë÷É2¶ç_ŽËz´÷Ÿ„Ž)Ýøz^9ÞXÊ…“¿Áª?ªáO·ÙKðgà/[õt Ų‚/qYëS—ÆèŠãÒ½£kgpêVË5¹jûü“° AÀµ¯Â-“<înÈytZ;®ý|úÛžü oµ¥&yhØ.Êu¨zíQ°Z˜·tO:¾Ý}Ť–çb蕽üžk•î—ûl;$ðS~ÔpÙUèÞ.ðýÊZHbÐE¨×R¡ß7‘¼ôo°C‚ÛOåuGÐ̨DàºT]=?S€ (@ 4»_CÇLÆo®é‹6rëü› ?5€¯Š|lXõö3ï`7ÇIIèàç®ù;¾ÅêÍzkþ^íqù?C·¶QÕ&9à+Ü €p§¯–2  ”céøxün®çT#f¤á­»<zS·O}ÜðiÈN½×ÿƒ0Dî¦QéþLl–f¼:÷ê‹î­‘”âƒä®xP¿4ýÞA¾«>n’•gabü ¼å^Üxdä<…îþŸÍº§äS ËÑ\ß Ôö ïÒÌÙè:ø1cSVíÆØ~á ”"3}ŽÇœ‰¾õºU,¥^c8Ve§¢ŸßHƒ€ÅSÏF6”ò«EöòM-è‹TUþ†×⪽¥n›Ã§¬BêØ~Þ“ÔŸïêqÚHõ8l.œŒ`?GAîrÄ%$[ù tŒ·¦ª•Om¤u/½KG竟½û"~ùÈ›æ¿ïIxê^ôô³åݱ¸ä£vá•´=xø’pö·~WY/Fè]: ÔÊWy&O]¹™¿§ מí;kÅ_ÿ }®û«käh|[òÎóó\qË?Ãõ­1¦­ë ¬Ò­³ÐsÀƺnœ–޹èï;õvh >¼ý <ò±ž$|^ð}ÔóºÊ^T•Cºv, iñþ¯GBšùÈœ=ƒsî¿Â?_ô±Àbý¨|ÇžEètÙ¯…BZÎ+Hh@××u‘OÛ“¿á^Èîkm_ÿڬɵ“¿y•ëPõÚÃ~"keNÕ\_à4¹Opo€ûö‚«j#©þ\å÷¶îsDî^jȸ. 9mœ (@ P ^ Ø øê÷«?¢Uû³Ñ4F‚¡šDÕÿ€¯Ã»3°Fºm0C½œ¥ØW'Ý„x?_GwÏ2r”oŠ–íÛ¢¹ã8ŠŽ9[.sŽ< ×ß1¤Z 8!|…{îôJø‘E ³%àé1ã° x;m1n©u Y¶²}&ÈW½‘¬q©›1y¸¿G¥‘ºiäÀò‰,UÕ[#QÒ4XÖ– X ÅS™Fññx@¯L‚ò=xîç—áO%¤ cõt÷ó€Ð9ÿ¯.P‡åX}eâC@ïš`gÎQƒøÞ½PÓÏÚ»êL˜C‚1:Áõ½U,¥^7¢€¯†S~>6»ƒÔã‰z¬ò7ÜîzB˜OÝ6ë}À—êçÊ{(êƒOc¶Sô ¬‰zµ•€/ãU¾»uþú•+áæÛEƒ‘”ØŠ¥_™'æÈáødÛ{¸±«çïÆð¥Ë•€/ÿí{;ðñÓ?ÃogÍGaÌ¢=xöæsMP÷´É?ÃíÏ:ƒ¸ô37•â×xZ;gÈÇ?n茿¬u~{1ý~Û·î"”ðåt®³ÿ¥ò4+ÓÏ‚½]›—ãý ¨ûãPößþ–ùᬵUêyJ¨·ññK·×øº¤¶ÒV›Ë©‹|úÛžü ¯ÍüÔÇeÕöõ¯]ƒš\;ùŸW¹U¯=ì&²–æ³ê¢yr¼üXã)¿?ÖP·“SyŒðïj?à«Î~¨ZKe£ÞÆiTgj+{\(@ P€ À©¨€¯èúðu»¿þXZ†Q´¤¤ëT ø:ŒU ¿D«¬ZvíŸ]q¾»ûNJûðÅ—ÝSÈ4gõ¿CÎoëšÚùf+à+” õAL(Ó{¤Š_(@ Ž,Œï4sõ ‡Ï@Nê]ðõhÊçrÔíSŸÀ¸ç2\ºKHõÓ]B¤nåâ¥Á ˜"Ï=‡OKCê½zBÍ—gšvKÀW­µk¡úøÚ9öã¥__Œ)Î^”ìe‰­÷:,G[éáL5¨ÉÍÙ‚µ/¡÷-S$ #°*ç-ô y§VÓT×öüJ½nD_ §üj±>ø;žø^‹«ö^”ºm6¸€/ýô`H*ò&Ð=Ì~<w1^1aôyâj9`Ü\¶×»Þ²—ÞÂäªíµá½0^ öýâ˜0âôì`9J ñŸên³Õ)}#ž; ý­ÉÐØ¾ô¾ô–¾ü½²×¿†~Ã'9Gß·û߸ÍGýø “[tÇkÊBn{ç{¼qO¢2Äõ1ÿKüºëõøÆø:_IK`½ê0П_Õ‹ v‡HÀ×ñP¾]ÔnŠÓÒ¬‡ÿÀ©|˜_ûƬµešµh<1în`ZZîmHÍz)Hu‘OÛ“¿áJrø1‚5¹vò?¯r*÷²jõ>Y ¬Ôºh.&ÐõˆzÝr*þ]OÀ×éRgÌzÂw P€ (@ú#`7àkÆÿÀ¹Ýº£Y›¶èrv\}øª@Ʋ¥Ø}\ ­i\!­Æ÷¶ém}ùøräoÂG«w:Kºùy¸9i ;ØË,þ£»ÖⳇŒ¯ÍÏ»Iå—ãÊ+²_åÈJÿ›¶üˆcÍ›£9š¡ýYç ÏE¢{g%tÃQŠ=;÷Á!鎎ë&ã¼ûE’ñYÎñ2ºwï\íf~qîä–!&¶úøriÝdǶÈ:p'NÍZ·Çyç'¢oB%€¦û³²Q†JID'ôêÞAQôüX°' yzb¥4zôR—! +…´.kyƲÊ*×Cò]…Mk×â‡ýE’È.¸á–!èP[J ¹-»öæ¡DGWëöÝ‘8°¿W7zVÚBû$e³i3¶ïË×åÓ*‰—]‚.Ò„LyÁìΫ^&áä¹¼ ß}³ ?>†æR‡ô²;§[\xQw¿u 7k +uO_õHX^€¬Ýy’ÖtêÑ f‚ŽÒ\ìÙW(Ã¥LºK½(E–äkWN>J‹ÄKÖ›péeHè¢ÔÛЀ”©BÜdŽâý{Ÿ½ƒnrv›&ísaÙúÑèPé@›øî謉õA³’iæËÏÃRÏ›FþZÓ ¯<ä±§¾­ø©ßƒtÅÉ‚ Ü}Š;ïánóîm#Ýdh…rÙ¶7bKÖcŸÑ¬™l{ ‰(ûÍðvKöËÑQœ+-SJ–b¥e*_Û¼¾­d!ç¨lѱžûm«î9÷¥¹™øö»L*1èÝïr èÕÙÍU¼gÖed¡Höz^Ïë7PÆû;8¤nïDæî]È3ê¢,¦Ykt镈ËýtSè}ÿ¸qÓ–Z¨Ëæ>͹ïªÚ¿ k¿ýAò!Aà—Ü€ë¤U@uÿæË±TÒ²yÓvä—{qÄËññ£œ¥dî–ãb âäd¬s+gÉ{Üœ•‡5c¢±?sþ— ®”cÏÁ|l™÷~÷Šsãš±l=®☎]e670—ív±•^˜š5Ó+íߣ7.òqìw`°ánæòÅH_³[~:ì<µï‚~ý/C¯ÎM¥ËÙxg—³®€¯‹*õ–ÔÊŒ9ãäøÒÙÌ’¹,óݵ­é_cã{(yׇ„~œÐ§V_ú¾bëæÈÉ;$Û¬ë|«_ c|õ8äòs¦ÈÎ~Ë!e´s³œ§Ès¼Ô»v»¡÷ŽÝuOÍo¨ŸëÔEO„¿ã‰¿áJÂí8é³ïIÇë¶@ÎŒÐ\6’.çõÃez¡yÖè4èAc °(I¨öÑþñ̹¯­½}›««L=hKo Ëx¸.i6Iw³×šçM®¬yã­}qížw›_9_<‹®·¸CÎ0sUÆôw,Ù+qÇ…·c©+¹‰Y‚ïŸâú€¯™ëbìElßð?lܳ_®i*dÑ—\5 ƒzø_$¸l‹\ìÜãy pÉ þ„æcG%û¨í?êçʱè.çÛ­Q‚-߬ÇÖÝr%)kݹ7®¼bâÍÀ4ÙOnüz¶gçfq]ÏÃeƒd¼E #=Á¾*e;»UºTuhK€–×zÙÿ–ãó·)úÊÇófâÇEc«uu~hõßÐï® ¼‡cÿK¿ò8ç©(ú ;3·!k.*#¦uºõꇾ}Ï•­Ñÿ«x÷z|ùõ÷"ÙÂØfÏéÞý/ïƒæ;æ¢K¿ß3ztéXž¬]¹rmÜçöíiœ“íÝ˜Ž­;³Q*ç)1ÍâpÎE²ÝËzýŸ“ɵíIkæväéç>rÞÜ®k\$óuéè…¤$ÝQ"ë–ó“÷Ëýý ¬Ï×é<ôêw!ÎjígmŽ"d|ù%~ØW€æ-Z ¦}W¹¼½ÎŽ–.[èÒÑû·aÛ®Æù”~¢ŸOÓû ìßÓÃT·ß}@¿™"qœç÷ÁYþ²à²Ó§‹=ë|ôh¥çÝÿ˸æÊ t=¢Îkÿ­.Åûs8Ç?õœÎþ5«~ßc‡ÜÉržë×T]ÎCbB_tñµOp'8Œó™G}øïóa¾y>ÙßÄ¡·œ—û©aî¨Â;^Ù»O^ýPSg}¶Ž;uqM¢ßÞç~IàëóZ»µ²ïü$e½ç`ÖM„8š± Ë…€ÃÑݽʾ®óÞù²‡z/h>; Àæý*Û“÷ðQÝJ°;Üë‘Nr=pÛ÷*P»×Ur-Ü{‡î5‡¹Nu_éqýëÚïèç8öîy„x­浓;Ÿú‡ óVÉuhWçu¨œçÚ½Or½öHœÿ/j]Ô§ržÂ'`ÎæÕHêR}ïîqOAºë³ûÇ0»JùêÇH{# ƒÐ㌓ïGx¤)ÔûR¯­ò˜"xc=~¨Î1Þ¿®÷˜ðŽÇ׫®Wåf!cã&ì—Ghsn"† PíDMîÉ9Sâ6ãE¹Ê±s®R7ÞÕÇ (@ P Ñ Ø øZ°`z÷îV­Z!*ª^wéXMK—bß™ãú«/KK%,@À×É£ÙØ¸ãÊKJÐ4¾?®¸àÌj•H k)_7&_Å™ËñÄàd¸îçTKwˆ)xÿÕ±è.7kû—¢ÓÅ¿sN3n! '_ç1}¹<ÀŠw=À|uUŒYƒ{ E $^ÓrRáü±`1–¿ö’'ùKÅpÌI{I Ä# ’äAš±æáÒòHªï–GÊ3‘?F/{’–UÙKÑψO c]fî”e ž’ŠßîKÆéÚÎùò•Os\8ïlú` ®}Ðzøä=÷ˆI 1íáëª=ôðžÎû{ùžå¸ï²d—…çØ”9‹Ñá“[ð˜A/žÒ²”áržƒyJ«P‹ßÇØ!Ý­—Jvu•a‚\h§y^hë–nš%SŒy&­Ø‡8¸2g'c°³ïDL[˜Š¬¿&ã-£>Y‹×? ?ÿ|*ÉãÞs ßßÂÙ$•RŸ»ºêsõåUïú°ú4êýˆIÓ÷ÅcxËY¹1Eò=Ö•okNõ&…¯Ö0l”GÀ²¾÷÷Y‡7·[)°>%HKdiÒ™’¦Ó°ìŽc¸éŽIÖdʧI‹7ãá!þº«T&4?ú}_ Ýhövu£©O,Á^9‚½jÛEÝîƒ-[Ù™ù2ÞímóÖ60Ë2^À†Gc’«Îx,^ZÒØ<÷aø¸gç1™õÅ~9nš•„k]‘w“ä&àÃÕn*ÛŠºÍ{Ô½ÅxúÌOqƒµsµ’6jr^¹+žáB²FÊöž²ÿ™0Äãá“£ S~\1Kêä®Ï#º~†÷R—=Ò³ ÓÎOà;ôV®ª¿Â­ËV¹ Gêâ›|‹3ØC_²¹¯ðïXŠ•/ÁSœG4Ô NÁâ?uÀ-·8ƒ'OY…¥cû“xÜ]¼ ˜uR|,çH]kÔußë±%ÅYËñ̽ɘëcßëœg8Þ^1·Øà½py\n÷èØ¿^|‹Ïó˜“f !s&&-Ðë<ÆÅ,H’ãˆs£,-.õh±ÐJXÖÉô ë,Bq ï8a-ÈÅ¢çØW|‚´4)UŽñÃ=ŽñáÖãPÊÏ™";û­b¬|íÜ1ÉÙ⃚3óóðñocúS·#œ’?.FúüOü 7f²ã¤ÏX޵³Å-)¾ÎkGaÆŒxÌ|pŠ~ÀW°4ù8ïªÃ}›zc¹þ5'¯$)ç~œ8 w¼åÜ$Èpã“ðå‘ÞÚ=ïv|ÂKƒ.Ä?8•üÖ×øçÝzJ¿Š6ÌB‡kŸpM4Ÿïý/~æªìV _ xæ­ÿÃÎqDªÅ%ýeÞâ: ÎR_lœ7Æù¿H~nfŽ÷œoË»wá’Gôý‰¤eýD|<è—˜®.ÖõyÁ惸 Ÿá—r ·¦Úx_]T†Ÿž _±̽£ÿØ™_]0îýh®ùŽL0÷ŒÞŸ¯§6 Ë~„ËÚ« w`Õ„ùúcàßfcâ°x×EøìåG0j¢/}}’$ü#ý=ÜÜ×c2¼ioŒÁíùšo4¦¿Óoþ+¶É”jÀ×¶wnŵéa€C±$s:ÒÇ]‚ç\ÝLÊ@ëuó Hÿׄjçd¥;þ‹ÇûÝ‚[Sz|ºñé˜>ñ6¯ë™"¬z9#'êV¾_7N˜‡—Ÿ õŽ„#ûK<ÒëzŸëºmò{HØò ž›¯›&áó‚誤Žüõx1ù*¼æ+_Æêå|`ÓLÜxs†moü ×>æ¬iWMKÇþÐßg"­ò.œ¼_ëés:ç@å<²ÚTæõˆs„ýctµ+Â?þYç}°uÍZ*çZ òfxʼ1¡úµn¸ç z&Õ‡ÿÕ¾ö㵤‹­ko#û­Û=ÎU(¯6ŽW¶îĸ&÷¬^ ´¾zwj÷šD¿ƒÜë vÜt ¶lסVÖÕOÎ#õ°絿>G°õÖ$OáŸ/O§CÐ|nÏö±{¿jœ\g8ÏÿÔíÉ{;»æÛßÊ5¬ëzD¹ÎPËCÿ¼géx\ö»¹Æà„I«ö°ó:Ï{:Ïïö¯«lÝ;4Vnoþ®­}hø÷<¹V TÌktO[ë[ðy/´ŒlÝ' ¶yÖk+e?Yuq¦M‹Åc¹nn®¥/Éãž‚€/;Ç]«|«ßé3ö~lŸõ¦ÏL˜e⑦ïsè÷oÍ€¯„”eH›p¥káã}&Îk ã±ÇuÕˆÌHøú|N"nocxwë^–¿mÉJ–r.¥Þ““ ÂÙf¬å‰¨­s•ºñVÓÅÏ (@ P€¾ôZpò$$lÍU$LZüÚy\ÿê¿…/×ÄßÊö}‹¿Ë6¦©Í¾‚6ñàAVqú,ô¸ÁTc$,a0ÆÝ8(ÜŽ·æ*$&!3íat†ÚK 6Êk%×™ÈÍ ó§€2¼ZÀJñ:$õ¸ÉÕJÐä½’$è˱t|<\÷0œÉ> 7ö‰ÅöWÞR‚”äG_ ©{´Çƒ¢”Å;1aHõG‹ë^Cï›&9Sçn-)Üu¹~’,†Éd¶ÜýTʹXçÿJ”:8ÌÏû—?‡‹“•=R£öDYÞ,Xî|(¦/rø´UÒ^(7y\ ›¦É\¥”&FŒ…c?ÎÅr5HÄÈ›Ò"CHyöº‘GN#Æaà9ÀöϤì¬d#eq¦”Sgg¢Ô:9\‚–Rï­vÓØã^¹©`ÝœpåÏxKÀð}­ <Ö9xÊ | NðsøÛC)‰1sUH¹*e' †ÌYÉI½®S½ >c=Þ¸$ =;7ôÖÂ2ò&Cª¼ò²nR@}8jLa¿<ü×ïë1éÿÊ0é^y”î3 ‡H‹Z“¥…%MJJ¥2`Tü1Ì] Ö>¥Ž©Óúû¬Öw~‹ñÁ¸î_ëNiÙ“‘`ÝëðZZ]¸˜Û½Í}ФÐî6ïo1j`µí:¼@û娦I½±m„²lu›7÷O^ûÖá#F9^û(ka.û0lñÊ>fÆúlÜeo9öà¹N—Y݅ɼƒe™=cËd¶Îàcyf9ºî'= R—ú¨ËîY%mþ>ªFÞÓ˜AZê4ªã& t½ÖèjÌ«o[=eÛRÓ®…ªe®îG­u&È1 z]1ÓPžµ#¹ZósÏ” x21ämÙ§Ý\‰qLí|Œ¡Oà\^lYž×¶>B‚ºßru»ä÷ƒÝíA¢ƒ1NŽqjzF¿±6à­Ê~ËuŒÓË좢åvq²³ÈùÍN9¿ñq×÷Æ$£Ž% uój —èÉðf–e'¿ð¶ŠÁÃG [=Žñ ¼˜&Á‹ÆËF=Z~·ëÇ${û­¬Eã¤{+ÆvÑ3y^Ûâˆixë.<”שq1Râóx"cü ·é¤¯kÓìq²Í*V®óÚ rn”¦ì·ôiÕmVÿøeóxV‡û6ÕoDÊÄ.IqƒÊC£òËùjÛ–™Éèàñ3pSáL¤èÑ£îc¼Œ2ñ^âµß Vm¬ð³çßhuéh×8éž±@ºgô× ‘ÇŠ¥Èîîn ùp ^¾Éy%d|©3$ ù÷—ãØú9Xê .ÓÇ}ñs|ù€u~úÓ²gÑý7Ê5ÀEƒ1zÐù8~è;¤.³*LÒôÕøè>ëÀç:/ŽÑ‰À;ÿRϽ”4]#ãå<ÝcüMï ôÃÛÝ­)ÛIOð€¯6Ø9ïw¸f´3 J šr¦®ÿ¹·˜/ßú¾€Ïg¶ÅõC0F=µ2¸º£• Çxºuo¼m ‘@«ƒ_b¿UŽÿÐ ÿ÷®5é…7Æõ¶ÄŽ—¦KÈ›ùJÄ?2¿ÅÍ=¬BßòÎoqýCδéS™ó¥/ŸŽo¶šó9ßÕ´o“ù®UæsN‘ˆÛî»%Yïà3%HJOŸ®bÇ|tëw·sã™ï¡›pæñL¼ý®Ù–œŒÌöI ffËdYþ׌RÒ:$YZ:m‰¼·æa@IDATõ²>%­Ýa–lÄ: P‚½qÏ„›»Þ6ë\ÉË)lU¾Äz²X¿æ­¿]5r4z¶<ŽôwS8ç(ežƒŸáÚî¿t{éåÏ{Ü/pN_„ÞÞÁøÌüºs ¾J±tâHüÎüUŒs!H𸑖aßÛp-(È›ãŸzNg->´kVýX/çbÖKεÆÝˆ¸2¯{4r#GºÏu×dç ú:Ô´ªçŸzÍl¹ærÎä~§\·WÛ¯[ U>Ù<^©ÇdõšAY²z~ëLoLHõCYDõæ±I?}±v»r¡†×$Ò}°ç”B¿_ü8hï|®zæ­!zÝû¹Ô=…@F&`°ÜÞH+¼ÑÕšv]æÉÆy¡óµ ù\–„iÝ]×!×CóŠ¡|=+ƒîpY—{«OùØWÊ6˜,Û ë>'#G·x«à¼>ÕäºÊÖ½CY¿ÝuúÛÿ¨Ã­ìù¾Žõ8—–àÍp®U{d¹ö5®¬¨Ÿ‚_wÅ»ŒÔùB»OVûÛ·™ËV¿^ëGHs]6“lLöúÁFõ}®Õ›‚Ý㮕3UÖûUü ¢^þ›ëGÞæpå~„”‰š&s ó¾„÷½nó>‡>Ýž•³ðÚÇÛÑý†‡ñ°œÓë/;ÇxcÆ@ÿÙ<»¯«¼ŽEþîG­Ø ó7ª©ç±ÜL¨Ÿ{ran3f¿vÏUêÄÛÌ"ß)@ P€ ÜµðÍæëoï—kú_aaáiòwP[õþ,mÖ,ýï}mëA»éÚ«ý÷ærfiŸg¬–?ç:fU^Í"g•6ФÔ4y8¢e³’é‡ûœ>SKIp-GƘ²LËQ–•·s…&··œë‘÷ñ 3´-Kì– -ÌÌSÒ›­ÍnM¯§On”ñ…Úî“ÜË—ºÙ·{Å÷0yì¥-ÌÈVæÉÖNawå7{•2Ϩ9Zž’n§WŽ6g”•¹Ø±½.cyÙ.C·W‚6eázmwv¶üå(éµ[?vj“ÜËë9iËÌ\6Í2ÀmUNèëI›¦ø%¤hë³­y×§¦(ËÕ½†k«Ìñ!äyçbuþÚâͪEž¶bÆ(eùãµÍf9…P‡³Ó¬<›å§—…G~ô:6~޶;ÏÊSÚÛã”u*ù1×í÷ÝÞö`Ô¿Û˜•.g½ôñ]±URîyuwð$Ïm¨°PÙμ¶ÛåBYç(åáL§š%MÆ>c°6gÕN«g¯÷Ø×H ¨5Îoy¸–¯ø`ø ÙÖõm;A)ãqVõ³¬ºt±³ÿrÖûÛüzíʹ ìT¶ŒÔñ–Wñ[ ;ûå¨n—êöj­OY¶š¦œ4ã 0J[‘iîGd2EÙéu+a¼–¶Û<îäh ÝÇ#hj½Ü¹LÙ7yÌ#õ*/S›6Â:> Ÿ¦ìo«¥GêršR—s¼ê²ëØbåSÝ.u½µýèÛÖ`+/úqWuP÷£Æ1Yö—žuEqO—rMYè<ßu:äh‹½ökê6ÈJçá%烡ŸwyïkkoßV¨¸Ž˜±JöÛÖ¾îmÛÖfå5#m³6ÇÜ«eÂyI0+ã‹‹ µ#ë_voßCÿ²D«*) ùO‚–¬y_\ížïûéʾHÊ}ècs´Übk¹?ÌSŽÍRv鿏,í…‹ÌíÚó¾v/SOWö +­Ò 2_‘öÃ[VZô}üèéŸkf^ö~¢%»÷+Îå«Ë.ݶHê?\KÏ­YztWæúðCe•ÚþÌyn; yEû¡¼JË5ÿŠÓµÛ\é¹pÂçZnÉ÷Úêws:yß§.çæ™Ú®qÛ×¾b-IÚüÌ#ÖòËhó''[ã‡Xóåï^·îøøÒ=Ê|¥Ú¢iÊ|2^·Üã¿zg´µLwÕ„Ú%V¾¾]ô„5^]gyö·!V¹ßøô'î|è&?f~⑦×™y9¢½èžo¨öMî´èóý¾@»ÊåŒÖ¾r¥å«w”< yAû¶ØJ㾬Ï=Ö%-|iŸ8Çÿ°ò+ý}ŸÐV¬°ÖW’­½8RÉÃëß»ÆÑf*Ãÿ¶Î3F™g¢]h¦SêÂörGÀúcÖ­À×#öÑæò}¿Û;þ©çtæ9Xh׬»µ)î㭜ץ,ô¸ß“±Ðã3m•uïÄîyƒšVë<>GK§\sÉ9VfÀs9Ï}€ýã•ïc²Z6êù­•ÞB-pýðLŸº<ãsµk€Zº&±{¿$„ã íó”ÊQ½n™¢Ô1ÝÊvÙ†'e‡x¾\¿ùTÎmüÝsõW}oOž÷±œõ6[{Û<’ý¡Z—ÝõsçBMâ>œûakµ@õÙþ}5íçÞaaí¬S5°{ÏÃÞµjàk'wyøÜvÍ«Ü1Ê1ôûd5©×Ó«ÖE¹Îׯ7ϱŽõr½¼l·gýòW× íwÕmO?FV¿7ȵPSÓdcC»Ïá™7ýþj\ãÚ¾¥Í:£ÞÊNÓÆ+ÏÔ{Yêö«nKV}Pê£rÝeo›±{®R7ÞV½Ë—ßiÃ:À:À:À:À:À:Ðxë€on¸Ö‡~¨mܸQÛ¹s§¶k×.­‰¾9éûõü¼ cžn:ö¼u3Cm´ðåÀ޵Ÿ`ó!gÞЦ’~‘èþ•®™î… ï¸ãsïwõW2E‚üÜ.Î÷”Ρ…iVkʯçË3¥ûÅÁ:§‘.vK ÖïtœƒKåW²]ÍÀ¤ùþi¾¿<ý5il’1á©ë\­6™¿ŠtÎêüß«Ièu¯%á&£ï±,”®ë\ŽEãâa61iÙN<|¥÷oF ¤ieÃøÅ‘>ßj\×AºîÖ[œ Oûø¥iº´juƒ«U+ó×r6×Õ9Zòâù˺QÒÊÉ+~饄ô¹< ¯=: ëmÅòc#¹ToMM}•Ë/ÃâáìY*œ’ÄÎÝB ðöúÜÞËóé¯%ã†If+ªe°<{þúrÒ2éÆíJï$]x&Iž®_‹Íõߥ¯_­ÃJTs¬þbK.V1ÖÕEœú«%½e§Í…“½~ é•.¥;HuùÞŸín†¦W~‚¶º§®\™Wú"UXêo³þBZ¶SÉ©ü*ËÃÎ+ßá”Gõ[-w:ÝùPÒ$Ã_mònËy3Ú²Ô¤ëÕÆSqëSK±sÁüJ[´¤jÚÌ¿q©_]Þòú8ä]lYb‘6±¸h¼~™üS¶b†lSëZï[*ÖûÚÝ‹úøqôX«´ûaO+ÃHçGß·ÈKq}‹®+ºýWå%Û .«Xíbq·_-Š–lÅ ¼˜LÈÛ¬3&ÿuZƒVÏÄmbût•aç0ôýP,}LÛh#â©:Ðm¾¢ÛÍ“®°G>–3W<"VÕìý/E ŽñG!|?ám+¢}¡“ù^!ã£îÖ@…bíqú%mP1õØ[~†u¯P㮆¹ÖB ÀÖÙ—x¶P5²R´xžþ¸Ž?ºÎüÍhS5TvíCoZ*‹îOt;äëîM[ÊãS3&½gÅÚÇD›Ym´ÔJ§ïã’I¦ïéŠmÛô˜®`ÒRÌ*ø‡ç]a¦=_¶K™Ý.ÅpÒcËáb)t$ÞpÆ·ºL<׉¸Ç݆…¯oC‹>V;Þ{ÊÛb5+µvÜÈAdݱvqˆÞb©ëÛR—×ÚÖpl,½ G›W9"˜õÿŽÄ•ÿgýž¼h#†ž&ãæÈ:L¼~Þ‘9À¼¿Ç¦CÅòŸþˆ¿ß‹¿— ·¼³eº4°ÎG>šú]n´~ô¼ßÿ}g«È¥“‹3ÇØƒð+gb×Ô Õ}[ŽWþÜ ù‹H€H€H€HÀ PQ¾(øŠÖ§R¬zm!Önßc»4ů.ê{}!z•qVðå $Ù€A½ß$ JܺÂ*ÈöL÷¸bª¼áÏÊã¹æ¥e+DÖ}”bæìSpÅãX&fQÃJ|äl¡$¦ƒ‡ËÖPæ†Lâ׉p!vAÓ\?˜u¶‰ÔB¥áò@Œ³] \ïy ïº\„ÊÖ¶nœ:¿Aí¿v7ô¨®èyCð쌡èÖ¦Yð=èF–Ñ‘ËF¥G÷q.[àŽ‰éi”_ýà.î!‚Þ¾Ú½‡B÷Òx¹[‹¥³¿Ž aèנê× lÕ\ŽêþÐå<>C·[åqÝI/bhá™hV?…tº)ö©ûåW\¯Øí‡È¶ÝÏ©sڧМCß³Aã ·>ǶA^Dž_žºìÓ^ÚûŽ»Úy¢”Géjqyªý_*í¼ßœuýx\o®Ž`ø‹ëdÃouDÖh±_~óåEõƒzÜ Ójl‘~ÆÇ·¢ÓV ±Ú’Íã£íxPÐ÷Lú+•ÆhŸì Ü;/Õó=îÕù‹ñðS÷;>}¬']îöh`jL;ž~Û§Ì`œMs‚]'4ãJ]sP Sb]èõD#û‰ò76Œá¥ë›f¦¯»g½ÕsXQé—'cÆó1iI÷§›®žW¥½v˜<¾qŠ7×Ý»Ž ù¦³æn®ªïÅ$y¶äŠD~õ¹4ÖWªìþVyõÔE@¿ì¢ËÂ[×ï¡ê0ý×F4;•N»L´ÿôÖ9b 5\JÚ¿UŸí3Œ@”»ñlÅ÷åMOY¹íFнä¦M1Uó®0÷Lø±J–x»xD$@$@$@  ¾âŠ: _»¶áíWÞÄf۰п,8-·§}>a_CFBŸð¢NÛÿ‹ Óí‡jP¯'“–l+ʪJÔ³L¢oð9 5I€¼i%oç7“ë£oâ”§OǰÝM [c Kŋѻm,‘k &,”Bò°[/*ˆ{áðQø…¼¡íùÔ­‹ï^š€Y¶Ø£À¶ÄQ¾q.ï4غÔóR™¼å×¶–‡Ù+ßDÁQ²ªA\žI|:‹ªžŒ$ÿQ^²¯þs!–½¿k·nÀ΀˜\4=®Yã¨]â'»!ëÉbÁ$lš=ñ¥¬-¨é°U9ûå9¥°e¾ªÞRŽNdµ_U'u>ôÞ»¨0D„YæcYȤ­ÙøÆ©÷9?H`)äÇ'JËIùò1Ïè>mÝB—‹”é<»LU8,ë€òЋT~e-éÑåáM§‘X•¦€¸û73ìÿGç+OT_ÑûÀ½\¶k8Mµÿ€´!ùו/?.µ)VúÃÜóš¥Û­Ò-q‰u&ŸÛÄ=RþXé¸u=Ð÷¾_£Aë:â¹ç“Ä™¬üÔy›.6.{ -ÃÚ k±aóÎh{j¨ªäõ—$=p7¯þGÚŸ#\Ž½Ò£vó/ox, éüè8ýýªüzêJ»¤X„RZ÷´-h:9ÈÇÀá=Ñ£Ûé8¥S»Ð" ´ïUþ²å«ôq—øôqe"(ia JÃçÁz<”] Á×Wb]¨)t2¬t¥.¼2"Ñ"+ÙoÜl‰Å\”¼A%óªkNŽŸðy­ƒyã5Ú¿óâ½ÿ¬Åšo>Å÷bìÈ™¬úÈD-qŤå!i\ÓΧNÓdIÓИ4¹ç]á–2Ýô¤*ø*ùX­êz³MÔò“XÞ ZãV‹³›>a“!ÖÚõÉÓbëRóÚËf‰%´ß+°T,\iY¸ñÒ²È]ÖË,QÐwäí2§üÑŠÇù[¯¶?ÿÛ¶d7äY¼9>ÁKn6wý•Ù¼*ݵC+æ´ãoA\ôýœÖ<6Ô\UÝÿi·{‰üªs÷‹Îg´íȰ^ëzàwì2÷ö%²ÃGkg‡û:/rê4êöÀ ǰüÎ3ÿÚˆbçS&:Mþq'ö¯¹„éãµÿàãôûãÔÚXÉ[ìzƒ ìtyèrrÓ§˜èv-Ä=£ãJw¬Ry¼ÝœòˆH€H€H€H€¾|ê@8ÁWyÉgxíÕ彎õ©u~Õ³+šÕqâ¿C ¾äÙfyÀ™ðÅÔòõrx¯å‰^Ðý'FeÛ™CdÛ3¹î[úëç ‘7O ѳ5£+N±ÞÎ9QÞ„man³ä¼­£MUG'dzÌŒ#ù'<#m®ÉqGŒ&þµÕ™ÄD·×Ë(.51 ˜¨'Oyâ+Š^ŸŠ“.›ø"ó¬wRžÐƒÎ³žÐy<•G±Ä`>KÒa'ÉsJaÅ1Q¶œ°k³%O ~õ^×ÏTê­oœž<ÇÿH%Ü ûÁ3)ä§é¢XDxìKË‹æ‰%Œ+ì_òfï:±,×T‰t\*œ ·¡€üÙ$)kñ§Ë#6r6à­ô¤þÝëâŽt¾ädáØgqÿÐsQª¶ˆ4üøm½g†¥ýk^æI÷O(.:l7¨„Gnû%– CÞóº,ô½áF¬ÊÃgq̽.öHù `¥ãÖõ ùýv»6ÍØ/Mê¼Nä­Ç©¿ëd[˜‰Í§÷·Ç_%ÖeÍοÜüûåälå¾^&íl«ÕùI§âï©+Aî»HÑbŒúCŸ¨ÛKTDÝC&à–›®B^ãX"±Wº¿Cݪü Kk¾c ÐÝP£à¼èmT47wûiï›æ©”…o?WœNoªÍ_Q=å*¡z˜ùÄéãä¶[,ž1 }F8™c/.À„ٷં<¯Ø ö2ç·'-Aåç\¬¾ÃrÑñéöÄÏ]»©¨:œt=òì:Œ?·iœ7}oêºw¡vÐiÒé××ÈqÒþ,Ào¨4q«tEó¢Çâ²í&Ù¾>”å¼èXZÝŸžt)÷èµ1 ùÓ|ÕX73j+]Á×ö÷AÓî–`IûuÅSÀä%²]ãÉ^kZFr·¿3M{Œ7S~õã²uka[óøËצ¢Ug;=Ó)àW˜¥Åg~q&K“{Þn˜ô¤*ø2¶$¼N¶$4,BWãߥÓÑfû+èÞâStÞ¤wD4ÔÅÊùZŒlÐβÚeoµø£ŒxÛ[X4:ߺV‹š,—¤Ïÿž¿±‹G|5xÞÜÑ#ÞÚ–v ¾î|W,†ûV ‚¯¤)5.è&ÖÁÞ0­ƒÉM‡%ý ýnpÄ`±ôÆsïÀ½:Xm±‡ÍÍX!"¹#b½x,§)Á—Xêzð‚¶ö6˜qž<š‹yB„]Ýma—!ä³,”‰ØMYnsEr+ø gùöÑ Rœ,¦ßÿé¾ (=~íµöçÄžø;_¶Þžgm½²Œ‹SÞ±±,+ËKÔZ{âTxΪ~!íyi ~u¥Ùj÷häIX¢ªßñôG¶ŸdéRç£q+·´9èñ«_?¨ÃN”-uΧ(§ÀC]'4cÝçWnžRfÈ!“|êú¦…ävåÛÂ.mÑz¬¹æ›k®‰Ä4þE˜ñ¼Êï0£ Z; ¿¶Ä%ˆ¯›cuÏÆÌwÒŸ«‡åÆt”ȯ:ÀTçÓ·íŠ6Æ=Üý­×˱`ôÙ0ÝzÑ ¬lÍ>ô ÏZ`*uÝ›4ÿg :ß:LׯbS¾Æ5™úwã1ŽÒïã½þ}~…ìSkc½L—Š5å62– º—ÜÔ)¦1õ1Ý{FÇ冟èHU*ƒw¢¨yŽH€H€H€P´ðWðé ¾~ܼóß^ç†Ô¤-Î;§#®é:ù…|É =*hò ÔpÓ‹ jP¯èþ,Ãs fȶ,# ³\ÊœpD¬k5·­k™[ tZÞ-zšÖ»ÓÏÑ·6äí½Mó®ÁÊq½Ñs²+ó¤MÎ Ÿô€¼¥5‰fDêýüôšÞ­‡g3ÂÏʶŽç6ƒ¶*àÙJGsPÓ‹+xbäM`¸_^aÈè Gá¦Kºã¸#¡ž¼^O¶vúðá~`nÙ;)O§Î³*{¯% òL¤“ä9¥°e"ÝêSD¶u6O¹¤Ko›¦ëg*õÖ7No¦ã~¥nÐýJ~â"tÇèsN¾õŸ(œ‰ï¦÷qUs\o¼x­Ù©p<î*,ãПM’²6ü­™ù#ÌÐâÓ™©3Xÿ? òµbÆt·­½žëýÚÄØ,Hà_GŠ‹[K§MÉäž×e¡ï 7?ª<<÷´{…ÿ‘ò§ë–ºXÇ­ëAòû'(ì w;RÍØ/Mê¼›žˆå¦QMJž”ÍM(8õ84:XÚÓ܆Èùñ}ôë2À|–åú3âL’㊄÷‚nŸ/íÏ¿Üüé’³ NSò8U~=u%È]g¬Eëÿ‹÷ÞX„^ž€æ8AŸOý!aèûA•?òÄ Ð’kd»«ØO‚¼èí2‹¥²8ëne=D¶‰Ý&2•²ðí'Ä—cI?ȉM©÷wÕcO¹J š™üL§ÝrÒW^R„ÿ.‹æ¿€ ³+ ÎYéë+®®“ÿ‘N‹Ÿ¥__pñÄ`!Óigôµ’Žt8ézµr“—Èš9hž½éêmƒb.Ô?ušœtêóöq¨þLüêö"å4qªt¹þô#y9ä³%8ë‹GÐÜÜú]xF·§U÷§'OAîv&3ø2_‰à+ÿF+”v£±iéHX &ø¿œ…ßL²„ ˜þ6ž¸ÔPFˆ5£¿ÉöˆÃŒ—a‚_¥ÿ}DâµÅbSÄÂ×UQ¾é%Ô9ñ ÓŸñ§ÃFcÌeÝÑöȃqP½ƒdƒåÓú¢§W˜U‚¯°éIYð%yžT×>meù!Ùªñœ Á çßm:Üû®XØ:ű°UŽWFvÆÀi«äÜü;òvÜwŽlýø–yíÙ’ñ:Ù’ÑüxDMÀÐiËœ2Æ,’u¥õ÷§]8âÌþ8ï”Ã<‚/O˜êú]«g¡eç+M-lÒB°Ð‚¯^7cÊ…GcW¢äJ ½hÐoq¨ÒQ—oÿ+Þo½ô îý›µ%¥J²l±h‹ç4›ö"¼Zfl ûñ¦EðÊuõ1ðoε„ëœ×¹-n$u3÷`äþðþÐѲ֥¹X>t˜À_×ȶœ­·»ÖÜp»ˆÏnµÅgU%øò_Ûpr˜ì;þO÷Aã>¿öZûCÁp< [µîJ´<"R÷¾— iNøþQÇÕz90¤^'k9ñÒeçŸoÕ/¤=/MÁoÐ:Aè~ÌÌB’~'YºÔùh_¨ÜÒælN¢Ã–ô§3Nñ)±8']'<õWÇëé·½AøÕí¤ó,OØ)Z÷Ô~BpÈ$ŸAõ0(Ì wÉÃÌå[Ñ»•!¬jk¿”éîªà¥ìÿ«BæUeë¿v:NÉB}?{ê`4Ûêžï˜×¤3WMV4RŸƒD~Õ¹¦:Ÿ¾m‡ÄXy÷·ÏÚrÙ2 hÑ#jÍûÑåß¡Où ÞÅZ ÔeTv^Hþý®Î·Óõ«Øù”o¦þÝxÜ£túx×—ßQøþXÏ«‚û ÷…{ýœ&yy(¦¾õ1õ{FÇ•ÞXÅåUq¼Ý0yD$@$@$@$à àËea¥'øÚµmæ½¹6ÊA-:á¼Ó[§dé ¬à+º¥[4Ö˜½¢õkf ­ñ¬uQ‹[1^ŽÒBÙ¬³¡§PDóä­Ÿ¹ÝV"Ï|ˆ#Vˆ>+D²Šìšƒ–‡¾ëîÁ;}N²,dûÅ­“{[L´©j±V¶U¬•©uì¸ÔÄ9È6‘ù²M¤ùØÅÃÌ1Œ•-eõËð˜Q\É&Fq)KËAO–òG=‹gFžgµíuyƒýbóM+ŸIyPlºìýÞ 5ü‰¸Ñbnº†;Iž=<ƒL¾ v%ŽÈŸ°ó®‘­÷tºTÔÙØ"œòúXkô€f5A¶Ç¸Æg¯º²"Nê$NÒ±¸ÇÝ)äÇ)æHù.ðx.Ùˆq‡tÂdÛmÂÂ¥8rvk2Í.“òH¶ ,qërŒOg’º’Ô¿'ÃÞŠOüVe²%[‹è–l"3+h³Å š ¢2¹xÂN¯ýÒõ8Ý{^—…¾7Ü\«òðYs¯‹=RþtÝR—é¸u=ÐùñOÓLÌÏã±ö„$N]þv¢Ôùhz”›D&Ûú>#ÛúƘoPoRGý™A&I\ÄÀNQà—öçÏÈÁ[³ ꫵÐYç'yœ*¿žºä˜=DJ¶`õ» 0yÀˆèqÞpÙ~dLòíGtÓºtYõq†U¡ü“`ê¥=y´ò²xboô™`©Õ]) Ú;dA;@ܺŸ _ìm®S|é¼eRcóœA»å[úålÙ¸ þo2FLvÄ_Îv}IFt:-© ¾2á¢ýêöÄÏ]§-Íñ©®ÏA[Ooy}ò.¶zv}Ïú2v=iJsÜ•q?ï$Âç[ñÓyÑ{‡Ì\‚ó?¹Ù¾× ±hótt4›eÕÖè2I!½>)IÉÉ|5Üó1.ozfÛ>ü¬cù&y½¼éÙQð5¶µú¯à+~ûD#<-Ðr¬ƒiÝn‹Þ?xåÏgá‚´ò_aÓ“ºàK¬€¼p#:÷Ÿb"üôÑcã0ô3E\°¨ä œ¨ºì¢ù· s¿»ÍkZöJol‡›?ȇO˜Û#š'õ–޲ma‘l[˜¤2½ôöŠ^ÁYô|³ðtìm¥C ›Â ¾ôv‡÷®Ø…ËO5µnš[:~‰ñ[aêj#TÛÂWŽXcsü‰…±Yëÿ‰óZ¨Â1.UV¼4ã”ñùöÍ;Ñî|ËzÝyÓ>Âßz­ÇQbõËøô}ì¿xð²æ1*dKÇ Ö6ìT¤õ•¤ÿÓ}A:sVý²Ï¤¥[1¨MŠuCµÅéŽuZ‘? ‹¦ôÀBžšãv’Žå“a&ý•·§_pK'h@{uäúLtÔÙ~’¥KÆ ‡dý 'ìô桉(8çtðÌ[<ñVðXD‡ê¸PûIs¼fä50Ÿª<½sW‡TƒÂ r7BÔ»!LZŠYŸâp±úe| X‚é—XârÓ!ÉO…Ï«ÖCÇ)yÑ~u]Ó÷³vw³¯îÙØùŽ{Qô(ñ\5½°¢š‰üªsí™Î§ÛQ™÷·^ÿusU´`4N`­õéÝ Ñ%°y.‹Ðscy¦ ó­ÃtS¡Øù”o¦þÝxŽ’ôñ¾,gÝ~¤;×~êŒÐswX6Îsš {ÉMkКœ{…>JtÏ|ôÈte?OJg¬¢#ÐÇ™ðÖáð˜H€H€H€H J€‚¯( ç Á×_àåùÿÁ¶×&mϯ;¦ú¾8PÕ‚/ïâ…˜}Mg'Óî·Þ’%OÞ,[2ÒÞ.©¯;OPåÍÓI'¬µôé…™y3¨µõfШ&à¿×2{¬néí]d"äˆÅÜ8G”ErP_,]y?z¢3 —öÂ].6-aÈll_ ûÕV2iǥ⠜tyS–Î/=1›´d3åÅ,¦‹’!Íó­m9 KkÑeIbÑ `bYméV1õƒP‹£ŒI‹DÔgi¨’ä9f±'h»‡eS{£ÇØ%fB‡¿(Vغ6ó ¾dan“ýbì2á]yßÓ~¯4« Åg½ð0ÐÙF2 ªŒî‡”&å P~£ <1—zË(O6R]c‰u]̤<ô‚S¥C/¨Ä§3I]‘pûWÅ*>þ‹­E"$:)ú@BÞ‹uy§YƒÂ r7Ó'\‡ËK˜³Œ£ð@— ¸~ì3ò#/®›‡®ú…6ÓCðOZë žyUzk‡¡ã”lh¿zެïgíîæ\ݳ1óôçªÁa¹ñ%ò«Îùµ¤Îg´íÈh¾”N×Ýe®×Ýó¦Åê²Ó‡ý.OžŒã×È8Þøè²È¤ßÕùÖaº©PìbÊ׸&Sÿn<ÆQú}¼×̯ úcÏËÑëÞkä^õÙÒÑ÷EÁÀ59!æúÎö°cUóŽÁÏŸ$@$@$@$@ ¾âjÂÏXõ¯ç°v§q¢!~Õ÷|4óÝš±\®{Á¾hÒöW"öaKŸª|e£Ö±Ôv:ÉîDP¶õ"–Œì=­ßBs½‹™ÚÌpô <+ çª - ZÔ|}œX·qY~áXL¹(Z©g!ÚJ‚‹ñ=a¡,Lu¶¦ìáãR“Í€‰zñÆ5øjÇn@¶·8.¯Uœ€I§-öXsŽ8"âºBÉ¿ý€I°b>ŠOl~£W*q©éVø>›~It»šÊä¶MÑõ8Ý{^³Ô÷F”‡.Ï=í^á¾u~üDIïNÑxË1IœÉÊ_Ö+½X-"dcKa-?3@¿P´EQÒæéýl«ŠIÒ#à4ÿhœþ@=®ÚŸ¹ù/xkÒ+áµü–ÅSÅâØh\:MÚ¯œ*¿žº¢Ý•JÄÇ£iŠâÚŸh¤L´àÎOнÖ>Ðõ'½ûA§ÓØ&ÎÚÚY‡¯ïoç\¥…=Ž›|k»ãœA?¡EÌ~[.–qNË Î\ŽÉçŠàKY ]e|+„ Ón•Ï.ƒ§›$âËȤ…N¾‹ÌGõ]¥\T{ái‡ÜÃp2†ú¾ó»g±åuôγ_NúžUh|u}NkÜ¥û…˜±ƒ‘Nw:iÒbýé{Û‰Ç[7Ô=ìIW»ŠhKÕ¸ûxw§0Ò3=;‚/ÈK-çu,YŒœúÕpü÷éÑèÐØOõUŠW&Æcœ‘)ð!Š8Ù‘{y·t4¶WÑÂ,+ÕE¸¥KÜý‘õë™·¡o‹œ˜­ c-ƒÉ–z¹ˆpÐùh«b•-øš,yªòh< JOZ‚/l³·õ3„U«œ¬á²§×aâEÇF[›q_ç¸wµ×yðܸ£×ÑÇåj»Ç Õ¢1'£ÿÄU8³ÿݸïá‘8ƸgW?‚c;_k…Õ^¶\æl3h/¢³ß‰@íûgE¾°} ~wd7;ÌÞ"~zA‰ŸÜx-a\7Œ™û®ëu,ÖÿýFüj eíNÙþòÿE·¿´ýÈ—°Ý»L¶Èlü½_# ›o]3tÞ&Œîá})M‹Ä¢‚/|è źNƆ…C½ã)‰ŠHÌá/³â[þàEè9±:œh¤1N°BðåìK ôÑVJýÿ®Ÿ®ÿó¶¥/ž#J˜³êîdlö¢X/Ž{H?’/ýˆ¬Ž`ìì)ZÐJ*²×šh:ãV=^Ôó1ÔËŸ‰%eïòŠ?4q Ý_éqdšëž~,¶~¦Ô9‘¤ß +8¾ƒúÂÐRè·ÃŽS¢iNpT' /•™§´Ç…½[!ùÌ …äîÃ2±˜Óö˜c¸™ë>žyªseâoo<±ñ­-ª{@¢Hgí0|œþó_#‡ú~Öí’›{^{³Vعª+~îäÆéw”ȯ:ççºáè|êqt&õÚ ÝÿÈ-/½þë½ÖX39[ÖLbV =‚¯Lú]ïäå_&éùÎgØ>ÞK+æWý±îKŒP }^ò<(/ºO¶^twËUüù¼(è»&v}'äX%Þaç~1¥ÃŸ$@$@$@$pÀ àk×·ødÝfì©UË,ôZø}ôöØUàˆ¶ípD.Ìß{Äñ°V' Yƒš(—­_P[96ow šâ§¨?o uà ­›AkǪ\ð%o+/~8˜¯‘I ó‡cáCDû¦òðbO)V/x=[ïÊéµta<(éݺ§ûÐ\®‰Y-“‡ü=lKFÈ‹uK† ÷S.[k9æÊ ×±³qëå]…k”oÄkONÂà –dȰ޳R¬÷¥ŸÅèÉ”€¹22D¬üŒw­üîò W²‰zÉoQ¦'OL*/±¶¾´¢Múwýœ!èr½GÙFaáCWK9ÔEé׫ñÜÔ?aÔ¬¨ÄÇ kÈ£K0¾Ÿ‘Ñä9n3aöƒ¸ð´–(ß¾Oíƒ Î³+“›ž'˳ð”7—7ÏðGↂö¨+·Oé×âáa=Õ©©‰¨,ßx,ÒäySn,À‘Rõ¾^ý:îéq…-³BÖ—õ$Ö<+o@.¼Çâ…È×xþÞa¸~ºó`LÄß9VéœT}gp?$[ŠÒpW~õOœ—2±˜×²˜=³h”IyÌÐ×u!&L'.½ bnõñÐe8ôG±.Ъç$¯+ÚÂ|::ߊOPÚŒK ë8-ºXfæßÆöÏËÖ¨FSQ™\¶)™ÜóšeòÅ1}Od}—£× ]>X8¶?Òhðúœ{p…ù†²·gë½$q&+u>Z¯dÑʵˆ(½†Ñ.õ’vIúµO?‡ëH»àÁ0K6ݼúFmI’ã µMm4NOxþ?´?ÿr ZðވѲ­«%µ‘.®püó…hÙ°¿9=U?mĬӔßQÁ—œÛüÖT´èim7ç\zõ­÷᢮§¢e³ƒßâ£å‹ðÔ°ñpå*²™à”WñÄU/æ·¶Œe:üj4Þyôjt+f½JßOÁqYÅàµJl¹zyFž‘ÊçeEΫR];Ì$Î .ú~ÖÝœª{6:ÇÓnéÌU½åíÎ}­¹“§ßQ"¿p·ÞóŒsÝpt>õø;“zí†îä2O¼Vä7Gö–Eø~WçÛ¦“æD\ë{Öd‚üGÛ›hýpÂv¿Ãöñn>GôǺ/qB5s!®>×Zg/^ý<þÐãúèz–n#­Ʌ½gÂUÂó?÷s8ò›H€H€H€4¼àk׿÷1ïíÏS.÷§÷Âé-êa×–å˜÷ïÏRö‡ZÇ ×ïNC=å#ÁWÔz†L?›7(jÉFçjATì$³l †·È·L‡»>⎆Ì\*>Ûĸ»¼¬Ç8îÞñÎ…%˦¢u±ò€G®Ðzë\c|o\0LÐN¾Ç,ù —äžV*“L±~4@"íhÄ0ÇBÌóÛ¢2t\jäË\OFOš}3¦ËÈ÷‚˜=» ë9›Ò–Iˆµâå BVA QðÝ3X`®ãê2L–g+œ5s‡#°ó :&lçgÞp,yeŒ*yððºlWq±+(tÏÄé-$Üʼnøëb]&ÉöƒœíbOúý{?èòó­~‘Ùn²xìÜÏA÷‡ã[oñaºÅÞÏâ®Æz¿°ëcëÔ@FN¶…‘•ÆE"Õ~é:ãdÀó|Ï_¸ûÙ‚n„yuÐâ–û DßÓž|~$¯Áå`%É'ä‹ðwž#üM§æäWþê¼®W~‹“:)'ÍÆ ¯ €z‰Úx ›¦à%%~ô«oÁ t ñÇÚŸ¹ ¾ÄhÅ»SÑ¶çØø@m—Âxf–¥ÞÕ’Çéí»Ê–¾ŽhB[kŠFœ7?y4úv2ÞöMö‘í‡7M··Nr­*Gÿ+ƒï‡KÚ쌱Té‚åê?¸X¬ÑŒaÅ"hûWY]=nJ¥þìJŒ9÷(3¹áëq?|!"¶ü¤ü>[r9fL¿ÝŠ`Á¸_c€m…,åÂI‹dÃŽ‰.ñœ«2.“Ú`pÔjšêOtý‹igÒçde-Öòž'Ã1?ô=sÊ÷g*¼7îJÒÖJLº½H+MªŸŽ÷§â•8 -./±ÄJVæTäa¯üyÜ$ÊŸq¿ª¶Ë¹"è[ ¾Œk6¿?t¿NÙ™ òi¹ßüÔÛ¸«Îƒå¾êo—àäaÎ[‰Ãx|ÉF <ٞϔ®ÀEÍÎöʼ¾¯À‹o…>¿÷ Óÿ`úî~ºÜh^î¿e£›&ÿó×HšŸÿxgËt‘/2=É6®H°ëîz ±·FÍhÖÊVÏ«ZWF›¬ˆ°”‹sXòŸ©8¡ëpç'Ðþn|´l$u]¢GŸÏ¿§÷󲊞TS–ã÷íE e¾ys":ž³ó3áwº‚¯'ĺÖMó {ãåâÐÉàl|"p_ﶸw±õ3ðoÿDZvÆ@{¾/VÖÆœŽb¥,Ù§ï´e²=å)öe›ñ`—,.ój7«d»ËߨÛ]úÅwÙ´qü+}p§”d@IDAT«™?ûŠþOaÃŒþÊX©ÇÂp5þ]:m<º°Ô_žyJ5‘{*ƒ>Zs®ÿËhÎÙˆ‰…0aILRbÆX5;nxµË "À´Ú¯¸1ªg ?i-ƾŒÙCψM‰ïïpýUøu‚¤õÃ7•Žc’~'ÁXÁ Aí ÃqH’;ÙaÇ)N®ƒ¾õ< ®Nˆ§ÊÌS*aëñ²‘‡°å3vm!ˆ•áî]¯rÇàš]¢¸¬°U™›þÛ*Z×&ø«ê¢ÿUÌ«‚Ö3ˆóä%#dÎbŒE¼Ûêq©æèæÉ,Ù¸¿1WÕåCÍ¢n>Á~/Å?3X[[¯}’èqrû§dcèø5ž¸²Ùï&/_cmĽ—¢°Ë$W½„—&óbÿú 'z®z8Ûoræ«ÆT#Ù‚KÌ@zOµÅm@Âgµ&öžA¨±JXÞ©–§“A~“ ð‚¯XK]ɪDë³z£Só:"øZ!‚¯uÉ.wÏÔ½{vDש ¾äacs[¤%üM²u™ÒѨíÃÈz¹¾‹%ê*ëgÇ\)ÂÜi†­xÑN^ÁpÜ>öœÛ&Vde…½bƱŠaMÎ!V[>›#>‹ÙjÍ»‹7©eã¾[Gc²¥<òœÌ8·¸ òÏiÉŠGкû(ÛOf¯|–™O8Îôã’Å—!bÉȪ/ó2Ì•óƒMi<äv$ß‘¢Å¸ãÚ>ˆ§²ÏywËPtlZ‚9Ã/Çõ³Ü•ßDnÂ Ž­|y…˜ùè­hüòŸÑÇ4g)uO¬„¶ò'+ÏÅrÏë18º=µC¢p”X²íW×v²¶uô·&ç\íÿ]ýY¢öÝ?¶«j‡ýúww ø|Ùšl^ÌÖdº0D·N¯Ýýæ:ê¼±-ýf—¦¸§c¬àËÌEi^yñiLŸ-–¼þí“Ûvùö‡tY/t ¼~Ÿ /ŽFÛK–S…xký|3}œlÃâŒG…xñƒ{ðÛ¶ÞyUdÓbŒ|!¦ÄÄÝíÊÛ1é¶¡8E泆^†+wC`5@dbº\gþ¸üØÎQYñ­}f8Ú]9Ó:/±mƒÎË”[³;`˜ôL~[Â?Ñi]¬øõßXÁÊ×â¶í¢VµÎ¼íU{SnºSçÇ‹¢Î¼ênÜróÑ©…—…áûÛÿ<»^Ç ±ïmb)ìµ14ÏÚÖq°l=y‡½õ¤®YÛ'ƆÁó×Õǵ3B»‹J¦ãDO* [0æê»m«\N¬òÝ^¶r9Wü¾‹wì#[k.ÿû4Lx3^Y­®·Oìz5†Œ‰ßŸ}¬÷dùf<ûu¸v¢¶WgÄ3y'φ~wçnÆ{bý쳯”ô=vúÝàXs‚”´== ×]t J>œ…‹Î¸ÒM¯Ç±aî@Oš¿}óN´;ßâ9þ<c' ë{¯¾~Üáu ø<±ë_˜¹\@\®súý_æsV̹£¯Ÿ¬æïvŠòò1öO·áª~=œeFjü»è¢÷eNn­ÅŽ?#ëçá×]®°Óá_¹ŒüÒ﯌p­>“Öã"ßêWüæóIÆ P}¡wNbE–>‡$éQy;NQAÄêí<ýê„á¡2ó”Þ¸ÐJ~‰ó®Íç‚Ü5|wÌ$ïeŽ•—X‡vÖ§S>Îx^•öÚaøµü5·úÎ3™ÇFÂÌUS˜;@ ßÌ×ÂÔëÀtÚ'ÖÏ‘5‡ë6?ùZQ™¬™´5çã»þ¢ßM^¾c ×Kd-$ÙÚJ‚u'3Ñïôûø¨×Àƒpýñ¦Ygà®Ã-ëîò"û=§oÆŸ¯»"nîmìŒr÷Ђ¸uöpkr‚:Ì=cæ=ÌX% oÕ'¦9÷ ,"ž    ýœÀ/øÊfù¦,øª¬D–GPRR‚ÒH9°ÈiØÍš/ÜWV2ÊJ¶`ûvIC®¤!§.6nŒúuãžÎVHô—cñ,Ù[R‰“^²¥‘œÈ‘òÈiØÍmÆ\?å‘2ì’]AkÕ©ô±”#1¸ _akQ-ë(m1Öx†äÙjÍ3Õ£HY JvFP^.áKèMš5CLòヒ|— "~ŒònÜ´iÂ|éÅóèV¤¸d§FÝhÚ´±·øèRvÙGÓësa¨òð Çã‘2Þ#7çîÝÈÖ•uozâ¬à•ÂÅNc˜6¥rïù †—Bp‘’b””J; waÝÑ´±çÉf !Tà%R_‹Š#h Û EÊs|Ú†r”•í’µ–Ôå,¦3,—[¸´³²;´Ý ”ˆ°Ö¶0ßEØ4Â÷^ZŽ’âRäŠ9ÒÝ»sÑ q}oÛ*ídYi)vJšÊ…o]aØ@úìôû&7ÖLŒ¾–ñCnnŽtq + “A?Q&÷ÉÎTï“Ðõ8IùÙØÃ´[‘²2”î´û]é»ë6l ã•ÌáâÖ·tŽÂp’åsl)úZÚÃ\ãäȘVÆE™cŠ&»2û³h$ûáA£Ú5s)-ÁwÎXVʬ^½8¬q¬ˆ'л÷„lwºy{‰Ù^ïF]ü¢…Œq½Wx~mÿº?æ6@înkÐ$vk< Ϙ¦åÈø+“vÖi‚é¤g×Ï{„$ò ™·ü\«ræsA—mßSææÔCƒ&MR·Fðͦ¯d*œ‹\)ÿMšWè=”VÈV}ß|ý17&j¨W÷`4j"óÁ@Ö‰]Ò—îÜeP`ä±NÆhÜ Q-v £¯Ì‘¾2Wâ9â°êwd;жÉVî r±KúûCk“6OIŸf¤=~’A(©ö6g-/Ö-Û¥‘ð­+ã›Æ±ã±Ø‡7ÄTq¿CõWR†é¬DS›Jýˆ^\µ¡8¤˜Äpã”OpYåæ)ñ²Æ ç¶&`æÊݹÀ8?såVô>*Y/à’ãšÉ¼Ê^†Y;Ì,N'åô-e—Þ\5µ¹“ê2ñë¢v­ðz­¯¨ãJéw+—klÖSíãcýþ® þ¸¬Xž“ØÏjê6i&kl‰Û†Ðkriß3vÎÃŒUÄk…ó,ž    _Y,ó¬ ¾²˜÷ý!êò- pvžls•7 k–ŒDÛR•‚¡èÝ9xèïcõâ÷ñë‰/bèM=ñDäͨ涵 d[æy ì«(øÊbÉPð•EøGÁ|<ãR¼cóðÛö²ÆÞŸ-ë^²­ãþôáœu*Mæ…*“@9¶¬xƒ»Æ;šŠµØœzÚ÷·µÃÔsÎ+I€H€H€H€H€H`ÿ"@ÁWË“‚¯,¯€¨KŠÖcóàðÖmäA|XaAlÁÔü<Œ]£ÌCÖÈê³Y&S)órñ܃ƒ?H€[OD^Ÿ žœæåI+¾ÆÓŠcÔ‹k0²ë¾b_Ò“\þ  }Š€aá˰ôÅOf Ë^†…¯T>{kÔDyÝú0¾ùÙŸ ”âùApíÓÞ<žxÛ«xuô9Þ­ Eä•»« Æ–ŽûÛ‡sÖý­D™¨he˜;¤;o_ÚÁçzoŽìêm++:êÀðö¯µÃÀlò ìç(øÊbSð•Eøû{ÔÙìŽ?ãúé |sZ8v&Æ^ÛÍr|OïSŽ+éwÇ.ü C;7Þ§ÒÇÄ @e0¶ØøsÏëáÛŠçbæƒw¢wGïf•‘†I$@û Z¢÷ª+r¨?J»HËEäÙ³òzŸ5°'·.öääŠ? îÒƒW]®ÞŽ¿vnŠ[W»é=ï¶ñÐèߢ¾ë„šå?™Û8¾öÇç¬ûc©2O$P‘JðH~kŒRïGGxÚÊŠŒ1¥°ö£µÃ”òË‹H€H€H€H€H€H`?$@ÁW •‚¯,Â?@¢./+ƦÍ_aÇîƒpÐîïñ=Â1ǵEÓúÕ@ée—Q¤x#Vþ­üÊÅ1í;îcÖÔŠÄl’ d‰@9Š‹6aë·;{p.¾ßòjv Ú¶²¶éÍR¢- Tk†ìÈØæ‘ŸÔÛ7¦«óò Ù´ô%0~ö?Å×àóoËdºVÍ~q,ŽjÚÀͤXõÚ_E^n&EÉ9«ÆÁc V[ùƒ´•¹ÒV'm¥–Åúx¨B§ýaí° q1*     اPð•Åâ à+‹ð5 TC|e±Ð(øÊ"|FM$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@Õ_Y,4 ¾²ŸQ“ @5$@ÁW ‚¯,ÂgÔ$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$P Pð•ÅB£à+‹ð5 TCûŒàkô€ÚÕ_fI~ì±ÇÌ®¾úêÌ¢o                 ‚ÀøÙ?™ù¼åÒ:iå÷™gžAÛ¶mQ¿~}Ô¬Y5öÊ'­ì‹ïzjW¨„‰k_óó裚I£&                jH€‚¯,_Y„ϨI€H€H€H€H€H€H€H€H€H€H€H€H€H€H€H€H  à+‹…FÁWá3j                ¨†(øÊb¡Qð•EøŒšH€H€H€H€H€H€H€H€H€H€H€H€H€H€H€H€ª! ¾²Xh|e>£&                jH€‚¯,_Y„ϨI€H€H€H€H€H€H€H€H€H€H€H€H€H€H€H€H  à+‹…FÁWá3j                ¨†(øÊb¡Qð•EøŒšH€H€H€H€H€H€H€H€H€H€H€H€H€H€H€H€ª! ¾²Xh|e>£&                jH€‚¯,_Y„ϨI€H€H€H€H€H€H€H€H€H€H€H€H€H€H€H€H  à+‹…FÁWá3j                ¨†(øÊb¡Qð•EøŒšH€H€H€H€H€H€H€H€H€H€H€H€H€H€H€H€ª! ¾²Xh|e>£&                jH€‚¯,_Y„ϨI€H€H€H€H€H€H€H€H€H€H€H€H€H€H€H€H  à+‹…FÁWá3j                ¨†(øÊb¡Qð•EøŒšH€H€H€H€H€H€H€H€H€H€H€H€H€H€H€H€ª! ¾²Xh|e>£&   $~./GñúÿbëÇ˰íãå(ùr½øØ›Ä×qºVnmÚæ$vBg‘×Z´902Î\’ À>@€‚¯,_Y„ϨI€H€H€H òÈxcÜUØüߣNƒƒq𡇡ÞÁP£F¾œS?ïÙƒÒíßbgñV”ÿ´ §\ú?èØÿOæ”H€H€H€H€H€H€H€H€H€H€H€²H€‚¯,§à+‹ð5 $ °vþL¼7} N-øŽ?³{‚+ìS{Êwã¿Ï@ÑÇ+Ñ÷¯o£á‘-l Ì= T ¾ªrP|‘¡; d—ÀO܃ÕsÂïoŸ“=XýÎÛxkýlÙñ"»~’óµÑä°ÆhqøhßþDœÒ¢AŒŸýûç7>Á3¦¡àÞçpD».ûwf™;           ØPð•ÅB à+‹ð5 $ ,øŠàÁÁý1bY°çö}oÀ?n9G_²_¡àk¿*Nf†H€H€H€H€H€H€H€H€H€H€H  à+‹…DÁWá3j   H@ ‘àëÉáýqõ[@û úcäYðUÉn tæ<¼«0ûÞ„’[Î@]ç÷~üMÁ×~\¸Ì À>I€‚¯, _Y„ϨI€H€H€H T_½Fß¹ýZº¡üðÆ\ñ'LüÔpú%/…_äžÞ¾m >ß²»së Qýƒpøá‡ IZîæÑÙ&rrêÔF~¦M[ñÞ|È!8òàÚÖµ»JñÉÆ­ø^tf¹õj£é¡qd“r½ÏgO_o.Æ–²°uäÚCÑú0¿-'u¼@ùŽï°as‰ÇA Â1-š¡AlRíè(øòáN'           ¨D|U"ÜdASð•ŒÏ“ @v¤$ø9 sû·ö$°tÕ|4ø7qû%ÞÁ×)†àë‡"<8þ1âŸ_x®5~Üp×$L,pÃ(ýô4-œŽÛî½ u_¾£Å’˜ù9î*?Ó [ßzyß°õ×/1÷¥èÕÂ…É©OÞy®µ:æ\Þ¹/ßÕ¿<ÌUp9ñŽä~œúé?qþÄ…ÎÕöw{ ÿ ?Þf_1¨ø“H€H€H€H€H€H€H€H€H€H€H€*™_• 8Qð|%¢Ãs$@$@$@$=a_Û?|G^e²l _µŠpÝ7À€Ÿö»¡{Û:X4ÇÝþqü¬™¸±C#ó¼#¼2¨?í‡M²KkaÐiÂÓ¦{Kôï{*Þˆ¿½em$9ïõ¹èÑÄqmzë)´þ\4„þ—üøj%ž~ËuÃâ7ÿ„_l]âo×nÝÄÏ[XlZ,“ë:_…¯í…&ÑP­ ¾b€ð' T2 ¾*p¢à)øJD‡çH€H€H€H {R|Ån鸫c.»!º¥ã»ïŽBî?îGçñ†™.±Àõ̵èuœ%ì®mxðæÁaœêvŠ'Ÿc£E-¼ºjô]¸ç¢<Ô•-·£êm~Í´þ%²1¼þæ8œe‹µÊ؆¥íDÇÓZ›a`×"2û“%2ëÜËþ·íík7½?m®±äg]ÿx^gBÖñ¢ÛUXq{Ž?ØE0Ú]è7Õ)«e¦/ë_ I€H€H€H€H€H€H€H€H€H€H€H  PðUƒ¢ à+ˆ ÝI€H€H€H »R|µï{þ÷‚–øiG)¾Ù¼ON|‹íd÷yl÷x4Þ7ˆ¨«ýïÁ²«Ûz2UºV¶¼DÄW‡ˆå¬óLËYQáÕqý±é™B¦|D>_ŒÆ¿›lºŒ¼ëü¹G[4pweŒ^ C\f½4¿oá½èÍÇÆàü‡ ×o±âý+q¼œvýt“­(ÿdmE鄸czœ}›™·Çž—ãÝÖ‘‚/¿I€H€H€H€H€H€H€H€H€H€H€H jPðU5œ}c¡àË I€H€H€H ëR|%²× Ñ˜yÃibmë;Œ/¼ wØ["víÜÞãeñ2k+FCðU,‚/…¯nâ6Ùrs=mÃÈScšë€þ—\޾çó;4CŽíþõûÏ Õ5²ñ£ˆÆ6ŠhìHu½qXºöšM—#{ÛɃ”àKY‹zÛõ1ÂÜJrÒœ'qÝ FJÝ_. ‘ @U à«*(ÄAÁW:“ @– ¤*øêuA7 ìG4lz:"ºçwÀ)ÍlAÔëÐ/ÿϘŸ,/Jܵ´¥D`Ú{ù¶u¸wÊ“¸ãŸ¶XÌ9)Û0nüß^8R¬umzë)´þœœ¹›>¸Èc%̸<‡Ú¢1êæ/_e~“ À>A€‚¯,_Y„ϨI€H€H€H T_½Fß¹ýZ&å;Ü'¾F‹…¯ñ³žÄ¼–±ü<&^)‘ßaåêÕxvædL[fè?vfô> ÛÄÂW ÃÂd{Æwe{Æ:Ê£Fãð³ðEÁ—‘ À>H€‚¯, _Y„ϨI€H€H€H ”_#'anÿÖ B‰àÉáýqõ[@ûKFcÙÿœ–àZëTTŒå'¼òõíÆÑËNOäÓWÐ¸ÐØ²˜$B³ëb„foσs§ÂúbÍû—¢µXK/-|™,ù‡H€H€H€H€H€H€H€H€H€H€H€ö|e±$(øÊ"|FM$@$@$@ TŒà ødÁÃèxËB3¦«Fß;/ê€&"°2>Û7­Â}O|ŠA7_dŠ® ·„«ík0þ©M(¸ø,tm#s ?aüŸnÀbåË|aÏŒ<í˜fœ+^ó^º=ZXÖÅ>yçt¼þ óLôzù•0^ ¾L^üC$@$@$@$@$@$@$@$@$@$@$@û  ¾²X|e>£&   R|u‹Z Zø’<â+#–èÕíìøê?X,[=Ÿþw=ŒÍÌãD«OÜ/â11f|Žk‰®bñ2ÃR—õyú¥¿ã¢µÍÛ>|-®²„]†CûοÄ!%nœÀo±âÝ+q¼½Ýc¢xñÃgè—?ó%œIsÄbØ Þ­)¿Ùð Þ˜1 ÷>‡#Úu1ãç            Ê#@ÁWå±M2_Iñ   È T_#xãÎ<,yúÄ ×ƒ“Áˆç\q–ã©ÿ !qiw´ob µ¢Â«nCP<ù£&   >|jVþßýè=r:¸q‚+yê³ÞÃÒçŸBÏI/á°: @% à«’' ž‚¯DtxŽH€H€H€²G`ÇæÏ1XjÖª‰æmNDãfÍQ¿ñ¡@ÙKÔ>óÏååØQü ¶]„ÍëÖàÐcÛ£àÞP3'gJ%“B$@$@$@$@$@$@$@$@$@$@$@û' ¾²X®|e>£&   $¶oü½ð6-}»J¿Orõyúà#A˳.@‡‹¯CíLÌ5 T1 ¾ª¸ŽŽ‚/MƒÇ$@$@$@$°oØ»÷gD¶ãÇ{÷ÍDVqªjÔÊAýC›QäUÅÜ (øÊb= à+‹ð5 TC_¼³>9}~£¦žI&           ¨|UÅaP𽑠ÀH`ïÏ{ðòˆÞ(^·½&ÏGÓ¶'€˜e             ¾²X(øÊ"|FM$@$@$@Õ„ÀÛ·áóÿŸ¾ö,Ï댖gõÄ;SÿÍO=Çv¿‡*P£F5É “I$@$@$@$@$@$@$@$@$@$@$@$) ¾2%˜ ¾2€G¯$@$@$@$°¯Ø»?ïÙÃ×Ï{ÊåûgùWn‹»éæ|Ë5{cãüîÝØµs;"ßký+±¿w|‹_aæ²åYà˜ü^8¤u;ó÷O¥ßÃØÞÑ‚}·q uê59u‚º›¢žü«ÛèPÔ9øäÔ©‹µrP³fŽ|×BM9Žû6ÎÕ¬i«i\S‹"²}­~1=$@$@$@$@$@$@$@$@$@$@$@$` à+‹U‚¯,ÂgÔ$@$@$@$D@„[¥[‹°ýóELõ1~ün+Ê#? |רm|›ÿ~´Ý~Äž]òo÷.ü\¾[DR5MáT û»VnÔªmü«‹Z"¼2~,ó·¸ç(÷ZuêEÏçÔ=HD\Ç¢IËPïÃRjº—Kü%_¬Ãö/Öb׎ï°ç§ˆ¤5b¦i|—ËoãÛpßóÓ®èoÓÝt³ÜMÚ^C¤ö3äjæäÚé¬ #=¹ò/§n=ó8§Žq,nõê£þá¿À!­ò̆،            Ê%@ÁWåòM:_ ñð$ T)›?—mÿŽo½dŠ™ kZÚjV݃5­fÕm|¨ØB®:²›bÍ*MgUG¶WÄ_†PÌø·û‡øÑ°@VR¬,’£ìÛ-øvý ÔnÐÇžÓÇÛOŽUuR (øÊb1Sð•EøŒšH€H€H€/ßý–Íã/¸ Çvÿ)ìR§y˜"ï‹6`ýÂÿCÑû¯ãœ1ãàæÇ¤è“—‘ ¤J€‚¯TIUÂu|UTI$@$@$@iø±d^rzÞ7OJ­ÒôÍËý|úú³øäå'„é?üNÓH€H€H€H€H€H€H€H€H€H€H€H |e/S¯|eJþI€H€H€H s¥[‹ðí§«ÐòÌ‚Ìc&cÈçÍ@Þ…W‘ @ à«‚¦_éÐâµ$@$@$@$PÅ~þá?)¨Y¨!ÿø!           ¨t|U:âà(ø fÃ3$@$@$@${÷bïîˆüûI¢ß›•$TÛHEðU£v]ÔÈ©]m³À„“ @u @ÁWK‰‚¯,ÂgÔ$@$@$@$K@¬yý) Ë^ü„&P#'5êÔíŸI€H€H€H€H€H€H€H€H€H€H€H€ à+1ŸJ=[ù‚¯Ö¾÷>¶ír‹Ó;4¯Ôü0ðƒ@dÛZ¼¿v›d6Çžv:š×݇óÙŒ÷Þß¹pØ §á„ÃöåĦαtó¬ûr Û3µë7G^‡£‘IÎÊ·‰wW!¡å¢å)§ãè©§%›Wn^õ6”Hé ƒÓN=6#ÙÌã&Ù,í͆jÒÞgƒgª½"öÚ»§¼ÂR)^‡e뾕ðrÑúÔÎûvŸYa¹¶2-}å&ïªkTÁ¸ª,¸j5Ž«2*ûoDéŽY?ª]`›ZýËÐÈË1ÛåXÑkiåøòƒwñEÙµ6¾ñr¯üú’nZù)ªÌ²Ç¹2sŰ«†×ppÞOר业žbXM ŽÉ&  š_qÅ¿_¯_ï~ÚÔj€cNh‰dö vïÜŠ ë?ÃWÅß¡," srP¿þ!øÅ1­qlËÃåŸÿ'Á×ö ïaéúÿ’¸Þ²Fäƒ7ë:LÁw+‡¢I?•z;>xc)¶J• OíÚhܸ9Žnu š7Iþ 0(ºW¦vG§aošßóîw¸éôìת œ–~0 ; 3Ow¸ç]¬¼éô K«‰{9Þ¸·/Îýó<•ÞxwçJœžHKsÚ×ËÔÍx)¦žÔÃV.g ƒE1pÃåѾD :µ7û·}%-¥2†YÃÔÇI¿þšç$O]dó*¼¹ò+ûÂÚÈË?§J„¨{÷ìÆÞˆ<‰‹ùlß´®\‰å«Ö d{?ÊùzMšáèÖmpòÉбíQ‚Óú-:ß´Ä ñîE1ò´Æ1¡ïÏ?k æA5j$ÌdõìƒfiŸ>ÉvuŸ.ž L\¸1ã^?<ýVýcðë_€„ÝVé—xcÉy £6ÚtéŠc›$¼ºË78¨ÊlS]>FßÜUúæàünxï ¬/1&ýBçðÎ8çT¾|\jñg*³ãc£KÒ÷нḖ¦æ®ûÌÚ\\®+Ü!t=âä^á)׆ëOuÕî8+œ«%&8€À>– Àb:ë6qÿX£N”Ûj|Žm`5.<&H€H€\|é²|·þ±Ÿlw,;Ôů/¿­5G»±~É?°hM±Å{œsλø<´lXËë.¿R|é‰R\I:Ü1‡ÞvE.R%‰0•ÓzМÂõgž‚©wE‡ Ô•~¹ Ê«•ÍO8Çî'ŸR@Ya—¬š~NúãSfxS–‡¡§V`áTX*­€JWMGÓþhþè=e9^zjÇPµÁ•o˜ƒÜãÄD:+|Û)÷ò º¯9íëeªrƒ™6Ä SûÖËw¾„S3½¹áÈG¥XõÞj”Õ> 'W±Å´ º©ûÀê#F<ë7ïºüŒ3zé Lî}´÷¢¸_åø×ð\Üª²ß»ëì-wéÛ×½ŽqÃúaʿݴøà¡—ïÂ5ÝZÅ^õ·kpò°gL÷ÉK6bèÉ’àK´^uBœÚq\´Cõìƒtª×quÇ%#Ôw$ów œO6f b·?Õ0åÛo=,s! æ:úÁ]UõUV¾‚Çl•Ù¦j>‰ò»vîpœx±Û‘zéSŒï}l˜"9`ýTf9°PÓÉxé"øêTki¥îܵ÷ÃØùÒ¤3u j³ÓÉR6® ]ƒøG>Àeõ:Á\ Á1 ƒdýi˜0÷y?Aü÷ù„3ûà±BðØe_HwU¤A·‰ûÃuU0ËJ|˜ø^­®c’¬Ô%FJ$@$@UH€‚/öÖµK0ñ8R/˹λü´ R½÷,þ¹r»[\9 ЬYc”—lAq©éîØG|©¾VM¿PÄ5Úš]²£Þˆig×Â÷Æ–ŽŽÂ Gï½@“,Ñó½±xëKøÕaQ‡ Ê1O$_(ëÏ|›&Æêô h›Lëüt<o=x R7$\÷u¸|…»/ö_å›ç!÷JVªÚbZpÝ4¶ù¸è{IS.Ž:ñ„4êûþP"Õ?º¿0s#f¾“\ G#²¸v¡<`Ó#Ÿªj—~–íaoç¸áÿ³w6ðuTeþú^Jy)/ •¢€TÞ‚€à½¸w—³WdE²+èu òW Êþ—¸ÑUÌîj@…€üÐÀ.Á…üy‰@x‰`ÓB ¤´)mhÓ–´$¥IIÚ$œÿ93wæ)רÌ#ÿîïmMµB.³ûy¤Ê&™ëB|zEM™oy}g!"œrqtÖWøå"ú÷êüvÖû²ÊÉô^-k.Âu5Vúù©ïŒ[#ìºÏ9ííeª9 Іr¯(ƒú Ž’èk­IëW…舫^É’L‡²ëf^Ñ"pÉ ðþ³”‰¦žì£“Þ–j©‡e~[§Âí©vi|xPŒ ˆmOÞb¤O'^.|v¹Ø¹}À¹®îÚ*¶t>"nùü ƽåuO±{ÄKu—ø×¥‡/ãšsò¿·;º1™˜}PÉ«Wbx½ÜSu+±°Y¢ïȆ'û˜ÑÎnòèG6:ök<ÿÞ\;Û¢TíW¶1[1eâ|ÂÚžo,éŽÑ¥g/;l\ÉJ ˜å˜5a\,6wMÕ‹x«(ö6»HÂ,Ú‚ë±±žX/öÄ@öþ´`¨LzÙÆ.“>óé ò61Ûørªð@>÷NÙëêÄ“ì´!€€Ž@R{«ûî»O¬X±B¬^½Ztww‹iJ$¹(û“Ôâ,vBÖ#ô콿¡×¤Sšyý¯¿=ÞþÃÑŠmÊC—ÝÃ×Î5Qã“ëÝX;‹*ËOvÙÿow>Düq‹sfîGþ’þaÉÙÕܶt4°æÛµƒr[½0‡ðc´im7½ýîh†‡¯­kWÑy~ÞÁGÑ1 çÓЦ•ôìó+iËÜÊhö|:î´OÐYÇ-ôSX»œžyaõïÞM³gDGŸv¶¼žÀå#/ÂûȪ{iŸã½íëÊ©]nÙvVF6Gä›—¯Ñk¯Èü(Ùi6täÑôѲґíÞ\Komz¾vöe®kþÊêúÎY4::Ž=îHÃ#Ljô*óÚ+¯Ñª [HfY"‘yþÈGe¼æ} ÍóXÉsŒ–ÿáÔùf¿ x$]xÉ'éЙîcC[©kÅJz]Æ+Aºò¾ÿ(:îÔãiáüôM^¤…ú–i®|E¦ùÆR™‘ŸùC§ž}F¢--MÝ ÛÒ1÷21³8F[×vÑÊ5¯Ó–-CäH*uñÈãN¥ODl/7°öÔòÌK´C–â\ÉõÈ£O£3Ï:Žæ®º‹f…“Œíí©b•µ™·ð_#[WÑóO/§ÕÛ¤äsç:z¶èè餓1=l¥µ½oÓ3ÿr<]áî¦I• môéönttú°¬«Ù´'J÷ÇØÖ—uÃôͲ™ôæÊvzqåGgT_$ëÔÙRÿíé$-÷p6þÙ±úã­ôÒúm.£ƒŽ¤ÓN?“Ž[8Sn‹±OÄ–Ž1e’œW­ÙB²e¤£ÊŽ‘=€tcý̳´r­l¤@ó;Ž>qÎY²®¦¥“²-o{†Vɺ.[F§í9ýòºÅ+$Ñ­úãó´ü¥Õ´C–·,q:è°EtâÉ'Év#ÄçQ†<#´vùŸhŪ\Ë%]§^•uJöqªÉQmÙÇG'Ãtfd@ê×[´âޝÑçn~ÊÉ\C[—ãUqÖû?DG.˜+ë¦×gdoãœÀ1Úœ(Ýœ9´‰º×½í”ÉÇêEºr®Géûu^ÜþodëZúSÇ Úà´;n™|ôãgË|Ûµ=Uì¯d}@îm£jÏÖl|בë`YÎV]Lë–ºqÞaDzþ2GÉ1çnñ²¼[ûÂJÕµÓ“ß<ËÃÝ&·j :6••õöÁ¬^+ë騛ËéÏvÊñ Ña»þª,ÁØ$-ëák=}o~ÝâIøùŸÒ†__A ½ßßcô‡[ÿ>uCKúÊ9ôøúßÓ'qr_¿xa3}åÄ1Zõ§å´bÝF9¾Ø%[…ý裟HÑÇNȈ_žÚF+»^£Õëút?¾à(úèÇO¥c ipF¶Ñªµ}²ÞìCGx”Û–=ÿ½òÆ[é¶l1}Öé¬-ÛN+žk—cž·-[ô!úØÇåõ¨]ñ¤ž¼±šV¾±†ÞÚ²Ó‰“fïK‹ŸLŸøèQÆxjZ\_Iû íGœ¬Nò2ãÄ9ÆÚ8¥Ïse¿³jù Z½ñ-RJ-Ûì²3?NeY½ôÆë["Çq^û0‹¤LÇÆÉÇM…ks£ú®ºqû]¢ñ¸êpÙâè)ç|ÈòË6f´&cëö}ä\k=½+µfFÇcocþUÞ&{–Œ¹ÏKØqÎùK.V_Îë‡JÊõóUFM=Ëéâ#3ÇÜSƒÑW™Œ©KÙú¹“þŒŽ]0žuÌfÈ”´M5ä×?8Ÿ`~7=ó#úÀyßõo®nꢛ.>ÎÿyP@.!ýܶʕ/÷1——Ÿbébòr”k@«äШ^ëñdõ¿}›E‡Éñ¢¿lâŸ/Ò\(n_!OܹŸãŒ]n¶¹}-ÍlHÎËVЫé±ÕìùGÈqÙéÎüAÍ-Öly—fÍ;˜>ìϹL_ÃÒÃ×Ì¡7©ýÙ³ÎAríï’ö-˜1™§®uªµ§YéuB㺣¬]å^—7°¼é»6­¥oë¼$^g°ðçë‰_Éê¾Îƒ$õ/[j®ÁÄlÏüDä œ¿½´â5Ú¸E­×¥×>–¹V76°Iz¾~[†œ'=_‡Ï‹Þ\E峿…õ×qæyþ2u]w’ŽëâÖ+ò0f9±qEÜg.æ:–T†[ù½&ç™[ú‡œµûEe'ÒÎÿI¦Ÿ°ÍÅùüÆÑU¹nf_o:Œä„²ÈãÌ=ß·ç³FÍK*ì8y—«~ðTKQ§òM³ë¸ö6PÓIÂS‡æGÁvµ°ÏèbèÄÚð~ƒ½Só¹/,ƒ€€À^L ©½ÕÒ¥KiñâÅ´ï¾ûÒôéÓ¥û…„Ÿ¤g “ 6,Úï¾]ÜýèËÂõÁ5,žiô¼}Ù=|íXÿŠhæñÄ£ŠŽ ™Þ»TB»7µû^ßZŸ‘vN¾2B¹'¢Þ®uî’o¿¥ŸªkíU¾÷ ©«úØñª5,šªSú»žªiïE,Öyƒ¢>åÉ“mÊû v5koaL./å5M:ÏòÝ¿º´g/ïºþ.íþ«ý¢¹V{°Ò÷xr”‹¦ÎÀû˜ÏfÑXåÝ«¾Sé¸ûEK­öΔ/‰òêFÇãËbž‡£¢£AyJáò˜Çµ-±ßŠÌ¦{ñÊDgo´¯]TûemÊèÊ_!š»üBҥ߷Ö:[yUІ†ßS\æÛSÅ*k&žõ0*í2Qת߈ì¨ËRŽ\ÃŒÖ}þ–Y]k›¨ó=gÊ¢¼N„9çIZîaÒòs£=­Ö:^QÛ j+\ž¶îNQk«#åµåÒ/ÛÇJk›§Êµ\4¶»j6ý’[ß ‘S§DÛæDëfG]Ê×ýÚ ‚ñê‘×ÈK›è x¢àíemkQùýHÖÄm;¯T¯†ÝMº?*«u½ÆÑ™\YðþB³­Ý'_£½Í~›Me^ý6=|ézQ.š[|ýPñ;úš«p!÷)_[¾žÅy¹xi[.^·Ö‰[ÏÕíå’ï?â{òÒ¾N7ÞöSq™Ñ^è0åß¿_¼ãxãémËn»†É£ï÷x^öƒÌp/Õ]sŽxü…GÄÕ–4—vn;;ïKB¯_ éÚìçÃóF¶kýãâ:–WOý}‰xpù?\l_±û ¸íŽWðÉê¤:ü;~œZŸIÔ·4‹*K»ªæcZz²¾E›2=ôô˜}ME#'Fµ¹QcäBµ¹Ñ}‡K(J^s¬¥© ‘„+~_?’ä#[ŸNt¢¸æÄÌvÄ­¿îx’·ÛŽ~ðù¤;X=ªŽv‹J¿-ñæ?á$̳ Ê©ˆ}¹Î¥¨¯gsdé™:0t²aŒ¡3Æ)ÉtI· ™ý܉ߴ÷ ^hÈ»M5K'øKó1ûæ¾víUYéSUSW0¨ñ;IËÆÅË»›H”N…´U2`Ü1—“Vu1q9ZÖ€X ðv¢¶]k¶f\è¹P²¾šËw.IJ›yh”›eý†·}|-MÆ6ÜÝ쯧éñÛ¶Ö4µŠú ¯åm&óðUQ/ÚZj­ã;=å]3‘@IDATÉ¥¿KÚ·dbíiÒ2UµdÜ0ÜÅÇÝaí|?[s+Ê!yb=¶ñϺž˜¬îgd4}‚ד`9+oÄÞb’öÌM¢W4V{ëžÎèïŠÚf6"û¼XÅÈô% ³±çyVþ|-9þ¸.YÝIHÄW’r(Z#eÍ<¿$ëX*h_{£e}JéT`=µ ýDæÅ닃ºš­.•ýð.&7o3Ó@¼¯„ãÌ=ß·ç³FíeÖö¼‹¥éäKQ§òM³`븶60Í& O[©šë­…}FWÿ³ÖÕÚ?°>^÷U|éæ1žæ2.“3±=ÿ\ÍZj¸  {%¤öVA_ØàK–ËߌQ€å`ð•Ki¾ÕѬ ¾žÙdO|ùÛ'–3wçrrç|*•WTŠòTpЦ—WÊë0 ¡F8YÕ'².ÐèÛÜ£>QÍ´öê'ÄÃ]z1ʹ§LTTU‹ªÊÀ‚IUsz+ÈAÑT• „‘‡SòrY•èr -¤q[¥Î¯´–•WŠêêªÀ‚žÜ’Š[fÈ<…ñt½î„µ«Q?\sâMUˆÊž …Ûf²§9`ìU–rÒ¬(×Ñ•,åõñ¶:´-ôÇ/“tyˉ».g—Jêbee…~ðï”qæä¿ƒm/ÉË+ÐS'Ÿ†ñCñÊ:¨Å™¿ûD}À *UQåêY@îšV¹]«ü(¶Æ§iO9ú[ÖßÌ”Ü3ѺÏb+÷OÖ)¥£)ïwºl Ž®l:Œº'ª.Úä œ—í”ß~¥ó[Y-ëxEʬÇ3S7’ê"×m?Oe墲"ЮøŒd~S!×Ë-hûÛ{².V©¼Û«²Zá–¸Ë"TÅ7¤\ ƒF9Y²Sa2óQá,Ä+^)ž§4o¥sUò]mœ’8~›­›œi˜¿9T-ý_™j“3ÊÙÔ+·T’ýŸ¨HÒ6ö¶°¶¢Z„›¬õmÓŸÅÔ™\)èò«uÌè¹6mlŒ§Ã7º, lkg^ö:N·MòëªÔ×lFnÁ´Â~o÷|^Ç[^÷œo¸ä<Ù¾Ím ¯ëÒÆ[ÚàKÇKt‚¸ìK—‹ò€áÅ’=n¤·î¾ÀƒýÏWÊp—]˜û6’>Ÿ/W~Þ3ã²¤Ï ¹~á¯ÄNn„¶}¹¸.ÐV,ùüåR¦K˜Þ©ø.˶¸†kq ¾|y-m]°Œã·;nÉ'ª“aJÃÎ%‰3\ŸËDyEEƘ[zÇc©ÉIè[xÝ’1²‡Ô²åÜA¿k‘pÜT”67ºï½ŒvNéUÔX˃›”«ÞöD?’ä#û˜ñZñ³o¤Ìq”dÃçC\']ý-ÕzîPÕÞ³ v0ƒùÒžµÙˆ¨ó Ë©(zåÊ©ó¯ÆH²N¤Òm¤äTÕ¤_ÆðrÅÇÐf}*LÕm¢+Çy×ÿ0û˜M ÆeÒáÃÇÁ6ÕË—í[óÑ_ýÜD³Ïg“Ö1ž¶Î—ËEç#a[•dÌ¥ Q—#_oák@¬PyÜ\oC`.”´¯•Ç2>0æB,¯¡‡¹Ìml½2—m‚§‡as3éP^/÷‚”1NC` À o™ƒ¸ÆDÑý]²¾%”Š<ÙÃÖej2æ æšV3tbìoÓíSºàºæñrÖ B泺ËØlüùy¹5¦~%0aÝ·¡P"ä°“´=sôÁ7 L·cå"¸VW&_²õ>¼>ðzë]7tŒ×ý$ó<ΙÇåé`Ý*§¹´6vÝÑ9´%-Î4J?ãµ1ñÖc¼|%]Çì4ûaõâq…œK˜kˆÒ×[S·•¯'ˆüæu—ë[83³/æ÷¨°Ù×›^)Þ8³}{ò5j?ô0y[?dú¥¨SM3ß±K–:’„gh‘z'½¶1ЮæýŒ.þg¯«SWDø‰B_%Uƒ¯mkŸwÜîy »C¼2ÀÊÜD÷¨Á_ ‘~ý¶š˜UŠö^ÇâI 6*Úƒ“ʪEg¿·l?,ZjRþâV¬I¯Ê64s™\$ÿ{D?àå‹eòÍÁ”;¡T“òòÓKÕ`w‹aìPÏ^EîÔ#‚²›“‹rÑÒ­—ÔâI ÷üÅeÏœK-]¢pPþ)®¦§²¦.ý­Êp_'÷T)º<Ôñ~ö‰ZŸ‰ê&sá½·MsPo{uxÅŸC"ÁÉ»$y™ôµÕøúD†®É˜G{‡åõ,…«šþ*ó­*^ÞÅ+ëh€}­,¿’}«á JÖ¿íy‡È4ØÐo ª‡,\?£Óͦû|1GÕ)åI¤éaw3“Ùðp¼Ü£$îâ Ê©ZÃûÕp†ç/n˜“\¦.ƒ=‰ÊúvýÀ²¯ÍhW'^¯†{Zô·á£—µc$*êÚ c0õÆo«[´ÉWPžÌraF¬Mâoe¥ª›M£}†×ÆŠFïá¥l§ü‡œ§,©È6N•fò6'›n†·72µ¤õ(£ÿKI¯Ú¤A®FåÅ7£tÖ~=Y¬mìáA¨ü}Ì(,]Ÿ“éŒ=ÇÞ]~rœÑݪ§+šŒzàÞÏ2I£ÉfØÍóÁÛAUË*ëDW_¿엋ɬÝòdˆó=>¼YÜy¡7¾Þ±Öso[ÇÛ_`ž´.ϧ ž‚_K®½KlÙ®ãzõnÔu‰Xæ{[#naa×ÝcŸmx짺ï$n@¼zÛåì‰+ë»<íõdxãqï캟yüÒ†[ÊÐmËcÌûى׈—6nÕjÛ»Ä/BŒå’|e¶u¶>(i»“¬Nf×¥dqê:âêãÉ‹éq§á…—·ÍÉûž¦®[â¹Jõìwuo\ô1F.b››­ïHÜGÈ\ë¹G¼>»ú‘<Bð¶28fÌÆ.L? ¯.r¼aÎdÜœ·2£° # œÄù+¢^éüËú¦æGÜãßµ2ÏÇк>© '×%^váý\–1›L™Ëo\¯äÎþÑ|¤WB9ie}µJ«2òå¥brIÞV%sIVEÔÅÄå˜Ãz ›ëmpîQ˜¹PÒ¾Zˆ <™ãƒð¹Pv-–Ws™ÛX8ò:@e5‚¿ÿØÅç̲>(ƒ/=e|É9H›ƒ æ ̘ÊÞf'{dãÓV“J!ËD‹gâʯ^´¢k¯ežq0×µXí‘…¿m=1ñúN6ék¼M6ûÓäí™ÑÿÉPÛûô‚œ¹>X&šÓåÀu×[VFù® Xù×’sŸKsùãÕÃð£äåP¬6&ÙÜ:é:V¯±ö[ÕСװk?$=÷9Ó [ù2À¼îr}ãõ!|Œ¢Æ Ú8T‡µ]Š6ÎÌc­™¯Ñ)ºœÖŒä˜€¿xgš¡=LÞÆ%Ð<ưÉëTáêqAÆ.Ö:’„gh‘ê“cÉÂ<£K<¶UϰlkÃRjû˜$ù8VÆ$·ÒKd^è>ã¡.ï"–µ—´õ[Ö=fŒQ|jä„3z\÷sΕ0öÖ¤ìºx0ª/|ò­®ó)÷€xŸ}†Qg#÷¨—¾ÓX$e‹éùÈÄuMy6 šÔµ×z à².gx¯0ª¼‡åŒÛRzð <'tr3Ƚ´0]6䑸Ãw/i¸™˜/ÂÕw†´8òM¯úšZÑÐØ$Úº¼ ¼_¶ mœ&6'›n†ë|>õˆç“DX›ÓÛ¢F¦.ôøÿ'ì Ò6J/—A èjÔF¥ÞØd:B—Ÿô”2* J|/šò ã@eàÞaªZúÄh·~SY/«gtÜ`Yzè f0Z,ëãï‰}#+ÓˆÊæÙKŸß̼ƒIƒ¯®Q—ið¥=ñpw2C©[Ÿ\çQm{AÜòùKD¹òæuîbƒg°åsã4m`¦âÝù3»ð§[E>ÿƒs´AØ—îÒÆ`NÜ[Å#_÷<ˆ™_«ï»QÊscvãÃ]ÚØ+-O·üGO9×c|Å胷; ë¤UqÔ…„qê:¢Æ—UÞ4dÄæ¸!ýx8¾…§éÍÚj™'KÙߘCÿ|ÆMÅksí}G€YŒ±V>\ ¯Éó¡d1ËÙlpíìlá¸Á†|øÜß{´‹¯›/+ع䓿â长¦ÇBíu¬~ÈñŸsp–¼¯ÊG—¢û9ž-§ÇšË>äãG=fõÂgûÖ|ä‹õuÚÛ™ç6g ê\+.—ämUÒ1—ÓFûÅ ;®L\Ž|½…}ðÂáq›zËÆXš %î«¥ÀIçB<¯áǹÌm˜·iŸ#o å:›§{é´óþ”ÍQsÑ>¿Õk2¤í¥Å„cOÖ°ïþv½ŽÆ_D2Æ9ª¾«?ãE0!Úü¹²Z+scç²Çjlzz>yÝc<ÇÛ=³¾è¹ Åšç›òòõ/ퟥ4>op×mrxa óuÖ4Ïym ”³J‰÷?qÚ¼|êŽÎaØQ>ýJ±Ú˜$së¤ëXÃÝl÷ ¶–ä³lg/&V¸»XË×e´;\ï£Ç(¶±$×àØ…ëG¡Æ™Bìé¾=ùµæ~d¶qžW$ÑRÔ©‚¥Y°±KØ@ŽK’Ô·ðBegyÝy¹;á3ºÂè°®f“Èù4ŽžÊ§xÌÈL¾@²7e).ÓG^fìá‹g´ŒKçQz‚ó¶",jY%ü–yq¶ÿtt3¤î¥oïiÖzVQ¯½šñüxì)XZu_†à×*}O<*®ãZ_ŠVî|ñZz93<§å2XF&Ρ:dË"ο–½uí‘ÒÛ\hyøbŸMO¥e‹n¯˜Ç=.OÆ„×IÔ,wëõV•^¨W[Ö¶tõfýx2ëo3.Ïx̽ί…µq:–lGšŸæ£îçùôëi:"Fo¤ú¶äõˆç%Ü£"_ø Ê“-ökEê,m£©OÁnPªË!™ÎØsì]Ñå'Ó’ÝÞ ÓMïá…{oÀ`R>Me·x{Çõ%UkzðÒMú=¾õ¦[$‰ãák¨‹mwx‚x°Ëõ~Å ¾Êë\#(mìå…­¾çkþØÂ3” Þö[Çmf½Ã ¾®»oe†a–GâÏÀÌ7$/ÝvIZ3Þ0ŒsÛžò½‡yùˆkð§Ê¥œ ô­x‹Q'“Å©åcã”@ƺ™‘¦×&åÓ·ð4ÕÖìÝMÚTurk%KÁÆM…msy[àqqÐåÑGäÃ5PlŸ ô#|¨Äy9ó6T]³²ËŽëIy†W½uµQ*1Û'¯ü¯/×Ütiö«$ø Î’sÎG—xœáýÏ?“3Íš‡/^›š6øðæÛÎwJSŠÊ%¯¶Ê”3ã—mÌe?¯‹UŽLVbFåÅ8íÂØ&‡_H¼=bu?Ñ£cñÚõ?³®ò6À—‡žÊsJ6.+Âx'³ p@@&<¤_âÅ_¯¾úªèêê””DR’¦.™Á×¶WwÜq‡óçryßw<ð¢Ø’°w=äRä©èɾŒ‚ ÞøÕH…¼ý`„‹¸n î"¥Èd,‡-»ç w¼2 žw*«55Õ¢ºÚü«©æ¯ôÕ:0å R®ŠêšŒ8«kjD%3D+¯ïHç˜ Lo9zHŒ7ÃÓùNUTŠº†fÑÑ‹1†S¼ïÑþnÑÜP'ª++¥­”H¥R¢¬¬ÌùsÞÊtdÑ|r‰ó÷ˆù¹¸eâ¦9*ºÛ›E,ËÊ éí‹ÉYÆ™{F[2O³¾ÓŠkd!´¼‹\Ö†Á¼N†Õ­ôýüí>^Çxž=öÁ$l¿CY¤oæ×ÂY2go*sy’•»EZƒSƒœú…}ÂÝLç#S·ç…K¦¯ë:¥ÏÉ­o,zê´É¾ç7m %Ñ–³rQ^½…z]ÏS¢²ºN4·vX NÃËØÍ»fiã<IÚžO®ï*NÎÏ×yC?2=±y²„×#–KÌ&wÜïä}@ü¶QÉf,66yÛvª]r›EYº*ó¶tPéŒ ˜ý£Ë/]'¸q#÷ZÇ.I¹Ô‡—ƒ_öÁóú)“&ßÿÆþè,™^³ Ã&f¥Ïo¿¸Ð˨í 3 ¾~ñì† ã+~çòŸ[ ¾vm\.¼íqÝ—.—ÞµÎKÎ=G”x‚ó§ë·i˜Å ¾~ñBfšÜàëÖ™ôu3^7¯[Åê'ï·~ÿqå祷/&O™ïM/%ôðÞN²zËÛºt'iw’×I»–%‰S×ÙG˜–¶~Bam™.fßÂÖÉ1—Ö#Ýwù‰«ƒB› Üæò6Âè;òè#8›p]t€0¯kºÏ6˜…üˆ­yäC%ÏóÂÛPuÍÊ.[8ÖN+Ã@mŒÏ võÖS*¬Ÿ¼òÇÚ„ë•æfÖs+m¬ÁYrÎ:žüÆú#N“å?¤Mä2…ëqöð<¥à1Ï—7žÐmˆê+}³Á°ê7.›ºKÊ1.å’W[¥ÒM2æb, ¬‹‰Ë‘×-fô¡rè}xÜ\oùù°òáå—ë\ÈK3I_%£+¾‡5³Îz醳r³ÍmÂ8òs–òv¶¹OyãA.KÓ–ç—÷k¶ó*o±û–p ì,““´‡i?É«Õ5ÿ%¨¾Vß‹7 沇锵 9k®Çaç™<ª=Š·–Dzn94õÞ·pKÞžÉ<øsu¹@øZG¦069ô¬ì8³$ó¼0ÎNB,8zÌ㳄³×ð#Î%\ÇT()wD¿–å7¤¿ “Ç9—€9ÏGœµ5.<!RòòàºÂnåu×ÖO„öÅ2.“Á²ÐãL?/{®oçù¶•çÊÛy_ܰƒ<Ú¸\d &™[˜ÂÖ©b¦ÉãÎyìb©#<.[yFÿfu#¬}ä²D\ÏÔ©<õ?¤Ý³êpzjŒ,ã2’^ÏTýýžx®]~¸@@öIí­~ýë_‹§žzÊ1úZ¶l ¾Œ"Û-ÞZÛ!¥‡/Ϩëî§Ö·¨ÞµŒ 9œàƒL= äƒBcÇ“Æùtxk¸Ì뙃ɀ ÁŸKjÆ¥Pé;øµðx™Ž³ —'v¹Ò~pNÒÃWæV†êþÂËÅç7Œ“¾®ë”>g¾læXn?ê×ÑJß»J”<6*îážVÃ@5X>åUu¢³Ÿ{ çéÊÉ®YÛ8!’¶9<Ÿ¼Ž«´Cùqýˆ]X^,a³ÉãòHò‚> aÛèHÇ »øv+üÄàU|‰æ ËO× ¾Õò.¤>Ü«¡gôÂË×7Ûùhi¢ï6·I\¶ÅõÀ¥º²ý^'n=×ë·´¡”6ž"që³éícÛ»Þoó¯¼óß(l݃7úçƒuØü­ÓS²rƒ¯°4£dÒ×ÍxÇ·/·øyôòþÔà‹—µ.1VoY¤®'mwd+Y„qYü8u±÷ac‚\©ga} ëè‘oXÏ=uhúÆ‹ ~_^îž^†Ž‘ Üæò¶Àè;òè#8›p]T\¹2b–Øú‘G>”Ùòbe—5œ4ìªö¶®–^®<ƒ[î©$ƃkC¯,º¡ò¦ÿÆøÇ6[U¼¶æ¦û-÷ÞQÑ\¥óŸªmsNót¸ÎèxìuÛ¦K¶8µÌö6QÝ“oxNæÏI¯´-ζë|‹HÙ6Hï>ác÷ìz©S ¯c‘ùâu&n[•xÌÅÊ¢Àº™_Ë\(—ºe‹ÛvÞ+^þ\ß3¯›õ'i_%ÑÆžLá߬Üls®O^Ù†ËH _Ô²~UÛr³4½øay~y¿f;ïÙ·Ò ûÙÕP‘z[3jÁnÿ>è{°÷ú{¾%ŸcpÙÃtÆZ†6Öaçù¹¸u? @àœMïmçÍà!í™!¯m­ÃŒEýŠNÏ®c±çy\FC_íixó2÷õØŸJ}Ûê¿'ó8š‹ Rò,—5–~fŠ‘q&.sžo<ýÛ]Så᪼½T3¤ œÈ¡?l`R¬²ˆâþäi‡MäÒô– ÒKJ½çI.—E¾ÐT“VÝ—Wù5¯L͘˜Ž³ /ƒxånÆžñ‹s* qYí(¼LQx~Ã8éëºNésÙøõ‹ú”W*|ÏQò“bV.šç¨èéju5¢ÜßKG}ó‡ûá<ݸØ5‹ÞæÓæð|úõ4‰P~\?,ò¨àáõ(:/ÙäI‹•ø+÷> yÛè Çò)[šW,l«öƾ™™8:c† û¥ËO× ®+eÕ­2˜ôÖçë§vaÏË×7Ûù°ôãžS_ÚK‰îò¯"¾Ößï{O#ºD¼´Í5ÓÆSvƒ¯wž½…õUî¶»ºîòÏ©Åþ²Ï_/–>ü¸xiù bu×J±a}—xðÚÒ÷˜†YÅ1øÚ,üo?N×ÕÝ%žö9ñjçr±®kذü^ŸÁž0øâºä0J0ÖɽNæ®MqâÔuÄÞG„µe¹„SÎtÝÒ} ›á¡Ç›óìò6Wêb¡ÇM¼Nû.Fð؎˳àlx»c¦ÎÕ¼Çþ+gýÈ#*õly±²‹ÇÇÕTÙ伨Òצ_0©Žóà#¯ü±>ÎRÆÙòh/ÎM÷[þý†÷ jôÑ®z¿­æ:“¿Ÿ¥ŽrÙyœ:ËÈø/ßð:Ì#3_Ì/M;Û¢Lö•²wÏü˜á3_ìrC„×±È|qŠÕVå3æbeQ`]ŒÌo_|ë@®cQiF•Ÿ¾®ëO>}u”<Ñs¡LtÏD—[¨á×1Ky;ãÚP¯cÑiòüòþÐvžç.ç¾…²w7úíZu«\óló½wy[Úúž6ä¸AÕõ¶êT:Œ~yIEÏe约“f\x{fcvžŸ‹U÷µÙŽ´^›c5Ûy3®öŒËkñdbÆáþŠN± ÕÏó´ZíÛxºçùVUõ]ÜCMöpêªu`Ê]ÏÊ·ÓcÆ9 •ltX3µ‹újnüc+”ÐHÝ“|’ªi‘SÝÌOK•÷–:›ÔdÞ–q†ÇíMþ— ×J‰æžI™§>™àrxa‚Âö¶Tû‹•~ØR”µ'˜‘6_8ónp¿¹ž¦,ÛXzìÍö_ƒ¼êQt^²É£ià([Àë@̶ѓŒ¿i_^ßålçè½%\ÑÐéÝ–õ;»Îd ê\Ôå§ë„¹à^-:»[ü‡HåõZ.^~ÙËXm磥‰¾c|xP¼zÛ%~¿AçþTl xã²~qÃ.ºðWbg:?¶}bÐ#—g(ÅÃ-ùþý~|<ýG¾¾ ¾¶=Ŷ»ŒpFƺ•wgk›£Žv‰*©ÿî˜[sÈ%Mž_®+¶ó:?£l}KàÖПÒ+ˆ—‡2éͰ·£.Ÿ”hKÛiêmnå D}=ºoH{ñrÙÃtÊàÂÛ3ÎÚã¯" ;Ÿ´î{BF|sæyHÜžqy jðż-rf–üeç…qvâIØæñøb×KÒ§—ƒ ŸX?³‹d½šyÒu¬¶Þd32ʈ—‡EW’ö*­ð:Ãt‡×uC¸Ž3yc¯§0Y-|¸îxí5Ïw¬5jƒAÈÞfÄ|^‘D?JQ§Š™&/Þ†{¤õuÖgsýa:„§—Žý;Bß,²øñ±ëž.}e>úRWÃtß‘%=5ÆŒ·ŸGÛA¾ã[¼8  ”@Rƒ¯ûî»O¬X±B¬^½ZtKG<”4ÿIHš^t8n¤Õ(և؟±[´7ê퟿I&µCE/k-AÆQ`ØÛ 'x_{­Ö‡êVív;Œ}0¬í·]÷“/t%.w›Þy>Q”ú¦Â£=ÍÚ(ƒMBó‘‰3òtÛI}Gñ××õBAwS•/§Õƒ_¿~kšÊjümp¢ä1&ÅŒ’ux°_ôÛ*uE~úZ}ªð<0°v,—‘Žeò­ó¿ÍáùÔõÔ•Çë—I^õˆåÓ’—lò¸R%ù?fGÛèK'9Uúíkh¨õ¶gI õ²~ð_g‚1dþÖå§ë„º‹×Ó²2ÏøXm£u–—ƒ_ö2¬í|fêñÏ(ƒ¯ñˆ%7ù}õ}Ë3 ›‚F`kî7Âðm í<¿ÇÛÒ‘ŸûÅ !ÆUÛžcX—ˆeibA2.‹g,ÆãÎ~y“_~}áÏC Ð^½írÖÞ=çäõ½Ýa=»Y6ÑeÊê-kŸ´~Åowd+Y„qYü8y2 ­Ò˜øxÇÛæ9Ÿ¾…§Y×éúàQX¸·/σ‡+BqÇȼüƒ}€©)æ/k¸<úˆ|¸šÒ…ýŠ©yäC¥n”s‡éIÉÊ."œŠ·»IË«|¯Ne5ÊccŒO^ùcmBûrÍÍì·tΤGß{4œ÷û0Ó*]âåÃû?-Ë?k½ëù†÷â ûÖ|Ìüz÷ö¶hC"eðRÕ,Ý ±Oq¹$l«òs±²(°.&.Göàäü:ÌÓZ[žkr‹J3ªüõu]ô¹ø}u”<Æ%¤.0Õ F—›ñ°Ô+[cŽZ)ÂÞ=äFÚÊ›òžØÒ±ðëLlk5éQßA‘'I¯~Þ¸°¦¡Î?®jî1X'.C®Çsèù„ußÔþƒë0¯/‰Û3fPGòA¼gDÇ%”´å© QYY)êÒí(—#ôE²~6Çç̶¸k¡œ•„Ñu‡—¹?®Ë«îp2™Ç‰ËAå¦S¿TÁËV§ÂòkÔg}‡í(.s>?޳ÎÍóŸªÉ4´VeÖTU!Ê¥.UVÕ‰.55ãå[à~Bñສ¹æÆ²`ãL™G¯R}a،Զ֜TÏùœ-ÞµM‹¼óÉÛ¸$úÁÃì©5Ìb¦®[®¯¬Ïæu„µ§\Μë›NÊrÄêKË¿Ù"KØu¿Í-”þ‡´{¼ÝôÓs„I®§¹Ô9ÙpaýƧˆ˜’Ú[Mbƒ¯1ñâRÏHk©Ø`ñÞµéÅ„g°uûÝO‰uxåQ}ÏOHó/óã…7Ïæö+jÀêÄba0™›ØæÄ2l ›K<Ü8B>Ã\‹Þ–ôƒ«”¨e ÍÆÀ4`$Ällì–ô6ˆ©ŠZÑíϳóìjÔ6ï |bÈoúº;EGG‡èèì]¬µá2õ#¸Ì;,Z|—ûä<œmpfý¶ØÌófÜÞ+žÌ`%N™ð…¹€”Tõ¤ØƒweœâaçeÉd|i¥ð°|"R¬²öÓÎrÀûøv~ɤÂϳi˜ÊÞ˜ý€óâ†s*¿¦dx|LÇù„/ºÈcÏ<æéIWÐ![qŽÆbz2Eqˆâ¯¯³…i\¥¢ë-µxžu8ùà=0’ǘ{å"9«vuÝk½Ñç]/g{Êà+N»“¨NfÕ!’Æ©ëˆÒs$7I¹pêµéR?š¼Ág} O“×-¾€­úUþ²˜ã&^§ùX-¹1v ö‰ûˆ<¸f“7©~$·ÆVÎJNƒy`>”-œ“Go[C¦—ªíŠ3—pâ‘ÿ%Ï_~}¹—~طΠßb7«ù‰;¶ó –Ý6œ×'e\¿gÆÁ1›Y¾†L~?oüè_Ë~ ù„|©ÐÁ±G=78,*™6{i&çù<“ÄœcqËÙ¨oqe6Ú<\¬räã|Ù¯d%É2ð‚˺ËãŽJ3ªüõu]ô9•Vp¶ŸûË©¹%ÕeÎRn†A„ 'ÙÕdÌQ¥wš”ÓsÔ¤†22³¼\x—´oÑüìGÜS°jãÕŸi˜Þ/ꌼª{R¢%ðR —=VÚÖ2-çÕ}{ö+¦ëùh>í<7º 3¨hM¯;*î•M®á,—£¢±ËQýh«ÕžÅ•J§¶%çY8'oóò©;Y5Oµ_árëvÍ ð+)ó¤ëX2ÿ©tUmNÆK¥}ÞÚ¸ª£U¢[½_UÄ~BÑສë=g™9vñ)jœY‚¾·wqרýü[·qIô£uªˆi†ë£­¯³:nk“ðÔIYŽXÝðÚn~§MïvÝŸKJÿC^ÀæzÎÇ$JœÄz1FÊg¼Ã×pã­z€ñ   ‡ ¾†ß/¿ø¢kT#¾ÜñŒ¸ãvÏàëvñp»:ç>8|ñűaGÚlhµ¸›ÝwûÝÍ¢cõ±m`‡xkƒxñ‰¥ÚØKÞ×øÌú ­€ÁW2_BúÉÒÛªIk…hîèƒr[‘Ñá~ÑÕÖÈ fÔ›Åú-C>0u¶±éé=]Ý¢_NzGåÖÞb–ú®¨m=ýÒK˜Œ·¿·K4ÖxÞQTšÕ¢ÇwD’}p>ÜÕÀâ-õ-¢WÆ;<,½…õËÓ-uì@ŠMÐEÿ0¥LxÛ¼e(Rȉ®&«Ü®§½§ßI¯¯»]ÔUš'T^«õ6Z!ѧôdˆ/',¹¢›¤aOc»è—\†ûDG3碘» ¾×¢«u­¬Rn«Ò«ò9(º;šxÕuâ#sS¬²6@Y~(/n^Ü<9y”y–ùîënÕ)/¯ò»²Ùð ÎÞ’Pàt6Ýç×ô‚ €é¸ñ`(a¹ó¨-ÇÆ–9T&ê[»Ýìë;§"›˜¨}ãÅ__7åÑÛIySÕ²>ö9å­ô¼½Q{,TzѤcq?LcÁÕ/^Vra¾ºAn×Õ+=ªz5(úz:Œ6@/Üóm%匦Ñ×Û#º{ÕR1‹3lBÞ‘O›Ãõ/Ø.k¦¼½‘u8q=ŠÎ —‡·ŠC’69QWÛ¨+•é Ï­/5m'1¼|¥æ®3:Û‘.?^'ÔÝÚs@YºŸ vòràúo;ïÉ0èo;#û…àÖtÞM–oÏàk|ûJq˹^û’þ>÷rñ‹{îË–¿ Vw¾ žø.qã—.0ÚseÐõüÆË7ÜrÚþs¯Ïw­;·m;7®÷|nx£Ø’63·–Ôa¶t>.ný’·•£–ñê;]ZÅóðÅ=ŠI#¸;ÛT¶¬Ëî»…c<™¾&^Ú²UÓà+i»“¨NZtÆ;4N]GÒÜÊõ˜m¸¿[4T¥˜Žiª%í[xš¼n©·f›ªØQ>x­E1ÇM¼N›m®G7ü›‡ öÉûˆä\Ã¥tÏ&Õäù°=lsåÉÆÎ®^ƒc?©»eµ¾®xwåò<ùôåÙ%Óùö[f8¾¥‹7®7ëSr]âåcÆéÉmÌ&G+EôX¢ù˜ã2O2÷{P4Vz}ú–F ¾ÏbrI8ÇËkÌU<]L^ަ~¤ª¥¼Z{säö¦Œ927ŠJ3ªüõu]’öÕJ—¢ä1æ(þ\ÈÔÆð_Ñånð¥¼Ôê—ùHÎQëšåÚŽôäÞÓÕ*j˜÷?çeC¦è4y~yÈÏóþnÓʤëLáTŒ³†ñ‰[Ÿë–$íÜÀHÎ!Âú.»­=kð¹i½±ñ·O>N1rúCëu°ÝKÞžv›kB•õ-ÎÚc¿³Ö¡=irÓ{\J4´Ë—BÕš¢ Ó\ñ·MdzgžÇ |ã1‡‹Ï².ÀËœëqòºZ,ìdòrà²ÆÒO–zæ!c‡yâu,9~ç}nY•hé”ëãÒ«›jó+ý5e9ϯó¶m/^?¡x„×3Ms½‰S,Ð8³$}{ò5jN ì8y—D?JQ§Š—f¸>jÊúz}š/Ç®o:­ð#Öf„µ«Öö8»î·¹yê?÷f¬«¼Ýäc’½ÿ¹š|Þ|ï ¼@p@@&,)oð5¼þ)Ã0Ë3²}?±vÈ/ì®'r {÷¡À¼4ücèipÑEbXô× ý.š9˜ÔçÓa­á2¯ûƒI–lÖC9õß(•ÙŒ´³f‡»EMŠ/$[Ž+Ì4xújQ*ýW›^¼ên6·¡ð®¿:¹ä<å„ ™½¡Œ‹ÿ®¨ï`™äb6ñ`wXy²|ê´*Ess­Ÿï|.ÛIrodÆ¢HÂ2 {`âÉ£¾+ë›E¿˜.³ô6t½­™yàaùqPW‹SÖÖ1.t6òE<­‡\^*«é–ü°VöþY²è>Ÿ°eêGgê¢1IJXî~ÔÖƒàÒNŽ~Ë7ùÄ-¡LQ¢øëv9 Ï`§ÞZ/´>ºy«j2ßÔ’G=äÐqæp·çy"3uÍô8ÆóçëbYlC£Ú8Yˆù´9YtS3Íìë’Õ£è¼pîf»aòÎpR`Õåd}@>m£…å×ѽOòæ¤:£Ó ?Òå§õÓ»s°“?¤Ê|Ë——o—lçu¼zk³ü¼;ìß¾Á—2ºÚÞ%î 1¬òëF°.Ÿ{x)`쥌¯^ª …ÙëåÏ®ÓÆbÜ£V0-ç÷åâÁûnÌèÇï\¾AD{øÒ2EméøümÀ¶,"/WÖÝ+n½0¿/Ü%[쟨2µµuÉÛ­ ÇeÙò‘¬žë:àR憗%J¾…·õ¼n9¹3¶Ù“Æòµzk˜b›xùǪ³Yú•—d}Dr®?ëÉôCE—4YË9 »¬áÒùãe¦ÚÄÊFsÛ>+† ÉòÇú6Ë|’ËG¯tÌì·Lñù¶%nýͨO ë(—=#δ¼œü~ɳ©¦A÷ƒááÍñŒ1†63™ñKóÉ—7öˆöÙñ`èuEä¢dHÒV%sOó)Çžó…_GBú¾…oTš\ïÂtKë«?y̢䱎 e û]nÆÃhg"æ¨)¹uš¯ûŒCó)ž_£Ý²¶Ù›Š0žñxi^®·Bž÷žþöôZLzk[Cæt47¼×aö¦~Ø–SIÊÝ“*Ë÷h¯h¬›hVˆ&ùÖbkw­ÚX¼rcŒ/çÆ×Ðý®`; ¶ôò ùLC*Gžáé%лîé¸û]V^-Zº¸i:Ì &n¹ ÷¶‹ÚJ™žÒ±ÊšÑÌ‚lû7ÓU}rêZ.mœ\ŸÌ£Í±é¦f*·‹Êhoä²wìz—á®F¿]¬hàÞói““õù´^Íâ[²hnÞUýHgtðУ®OçÃÚ ¹èŸ~ –b[™zÙê#?V/†Y½1ËÏ‹Ùþýžô~án³¨œÖ={ˆ'/]§–|þqÏÃ/ˆiÏ\Áð«ïùZZŸ.O¯Y)–^{‰¯_þB·ô öàrf앎kgW³¸:èiLÖË%_ºQ,[¯d\'Ò˜‡0yí/(ƒ¯ŸûiÜ)ezõÎËõui f¿.· d_ãCÄãu^~4¢sÄ-÷<åijíÙŸ›ýõ§:ã¥U¦Êó”öcêRòv'IäR‡ÇS/0“¨oëM†7Ù4ã² ÑØÞ– jxc÷-QíêpW+Ã2æ™G®'aŒlosóÌÏÚúïžø}D:d®^šöïøúáÅ•$QcF»(ýpeêeÆ<)cûOOæ8ßñó—O_ž]²ìý–vPÎOt;.ëpÈ8%In¥Ö1›z¥å •)K›jæ0ó—æ>.3Bôµޤʪ[õåu,:_:ú$mU²1Wñt1:¿ö¾QyìxötµZzöô·%•¶ oèZwÂÆÝFûc.”´¯Îև̣èrSuÌ[ó"c-MƦæ¨r^§·mUýµœÃKñÒß8[Ãác–è4³õ‡¶6[‘â¯3e ;ÓQϼÆKQ³Õþvc&¬½I\†6þ¶óé įûa97ÏEõ§IÚy/…îÖQ¶&$×›ÜE;ïVç{´¯]®Uò1xúXzïèï-Õ)·_’/:[÷¥CÇžçY9ç§ÇÉêŽÀþ£(ýJ¶vÖ.Šº›¹]üu,'è ô \Íê¬ZËIÿUÖ6 ßѦŸNþýDXWÑ}I½ _oò…Jjœ™t­9?=Ïg:H"ø;q[?dÊ¥¨Sy¦Y°±‹µ L—HžÁÂôGè[”,ì9›ùŒ.©þ«²Ï^Wíc7Sñõ4‚m’ñ‹W=W³= õË   0± ÊàkšÂ '±??¼g—æ{sb‡Ý«ŒŽÐàΧñ3hö¬¹´ß¾s³ŠøË_þÒ¹^Y)—’ðIN`lˆ6mê§1ÃÌ™´Ï>ûÓ‚óif¶Gh`lÑè(ÍÚg?š?7óî¡MÔß/c•·Íœ¹íЂÐû²%vmdhˆwì á±1'Þ}ößÌ·éÊýûùÑÕO•Sû`35?,Æìç6½Ióö£Y£Ã4sÿ÷É´Ì¼Ž ÑˆÌæÌ¹ó)CöÈmW–É›}ôß~³$›™ô¾CÊpŒ††Fœ2ž?7Èk„6½Ù+u`–d:S–ÕBYV6á2Ï«¬3SÊ<324@ý;†iLêƒÌ´PÊnQf |Îä û‰£ORî9$6"ëb¯¬‹³fͤ™²~/<4FE(’L9ˆ~ËØ ôÓà°,ïQYâû/?á±ÚÏÊô†iǰÒ1Õ>îCû-X¥®ÑÀÖAÙ.ªæq–¼7¢- I9q›“‡nî¹z”›¯€%—ämã=tÍiô7?[é””Ü2”.>2¢‰­3!J0AO‰ÝÃ$FÝqiFTÝݾ†eÝuZë}æÒþ’¬½–ýî¦í²Nªf`.}`Ñ!òûg`óFÙÏ—ýøÍÜï=ÓÛÅ‘:¹ÞÜ:"ûë™n}ÈÖþZ1¢:—-­¯%nwdü±ëd2åçÊÛþžNþÚ=NŒr[-úæi²“ú±µ?=N”cÔÌñPˆ{¸o)å¸)#÷9ô‰ûˆ"qÍU?‚yMœ`DÞïØy·òï±7¢Ó>ø7äô,•Í4z{y  àwç~\ðüåžtñï,Š.å?f+~Æ#R( fì¶*¯1—Nw¯9’|·öõûë½ïÐ,s€âKO_]|é’¤0F#Îò„ÐÍœ›n·ÒÎ}÷)_y= 6•bÌ\³ Ñf'í[²':1¯Æ®û…ÈfíÙÐÀVÚ1(çëR‹öÙï :tA¶™šn¥þ÷ûÙ“2Æ[ðCø ˆu'r(p&Ýè’2OºŽ%ÃmíÓëÍ‘í¾”oÏöÑc—‚3KÒ·ç·F¥‹‰Û¸¸ú¡)E*EšQÐî'áO1Ï%Öÿˆº1&QYJ¬§<0Þ‰„Ë  S–@R{«¥K—ÒâÅ‹iß}÷¥éÓ§ ¾¨ ¾@›bAÆ6É*TÊj¨·óZ8Åòì‚€ÀÞD`¢µÉ#«î¢}Ž¿ÂEXÞ :]^¸‡N{SÁJñ½÷îŽBņx¦Ï éÒ` ;Óà«_|-°ßŒ+ °W¢{ÿ~?ºÌµS$ù&=]^V0s†½"‡@lÞ|æ.ºõ¿Úé¥Övºàç­ôs5nY)ÇÞ'§ÇÞ©zêò«„žÝ@„S”êÎ-øØÙÆ8362I_%T|•þ„Hz„îÿû}èsòJª¾ƒžüêiBj  ““ÀDj“ÇhÓò¥tÙÇ.£§Ò…!·\ ¯â¡|¤j*_ÊÓ>ùpŒ½¤Ñ>v0ø²³Á•½ÀØÐ&zð¦Ëès7?å C⽯ €@Q ¼ùÐ5ôÁ¿ùY: jéú)ý¯ãu¼{m]õÿè[Ç_@i{Xªjê¦[/>¦¨ò r˜(Pw&JI•NNŒ3KÇ)ƒ€€€L|0ø*aÂà«„ð'HÒo®¢ïvìqthv¯î$G@&.½¿M6߈õH—Õ´Òò>Y-·¼8'ó·['ŠÝr|’˜6¦ÍÙ—¦í­“ ¸÷„‚Á×ÞSÄNÀðéß–¢–ÞÇé¯ÎôÏà@&?Mô£“?@ßuwKOg·ŒÊä&·æ)xhŸüº€Æ#€º×Ô¹ãÌ©SÖÈ)€€€€@ñÀà«xl#c†ÁW$"Ü   3ú÷“¢«Ù§òšfj¼¡[9æÌ0}ã{ã$ÆG‰Æå·ÜêŸhÓ”7/ù7mæl"iô…O4åÿ~>}ìê§œkÛûé;gaã§hj¸cOZþï´ßÇ®fÉ–SsW#•‡­‚L#oÒ]ÕWÑ?{(4ǵMTû­‹ ö°¡xpr*@ݙʥoÍ;Æ™V4¸    9€ÁWΨ # ¾ Ï1‚€€ÀT&p[ÿ®@IDAT°uíJZ»u'ÑìÙ´pÑb:òP<ŸÊú€¼ïÝF¶®¥—Ön•BΦc>z¼¹îÝÅ5u¥ÙJ+_[K;wKM=p!->îHO]m@ÎAÒƆ¶RÏÆ ôÎè<š7º¶Ó¾tÌâãéÐùð|%lPw²Ñ™‚×0Μ‚…Ž,ƒ€€€š ¾ M4F|0øŠ ·‚€€€€€€€€€€€€€€€€ ¾J¨0ø*!|$                  ¾JXh0ø*!|$                  ¾JXh0ø*!|$                 À^cðUý…Y_~"ÿú׿v"øÇüÇü"Bh)Aàæ{G|~¯bN¬ü.]º”/^Lûî»/MŸ>¦ ù‰CúfÏâìŸ.|7I𠦩©É‘ÿsŸû܄΄Ø3~ñð<'!|íÞF*0ø2pà€€€€€€€€€€€€€€€€€@|E*æe|“.âÉG_%,S|•>’ H_%,4|•>’ H_%,4|•>’ H_%,4|•>’ H_%,4|•>’ H_%,4|•>’ H_%,4|•>’ H_%,4|•>’ H_%,4|•>’ H_%,4|•>’ H_%,4|•>’ H_%,4|•>’ H_%,4|•>’ H_%,4|•>’ H_%,4|•>’ H_%,4|•>’ H_%,4|•>’ H_%,4|•>’ H_%,4|•>’˜T†6­£·W¯ þ5/Ñ;ë^¥÷FwOªü%ÎÌ´i4á1tб§8SFÓgÌL‚€€€€€€€€€€€”ž ¾JX0ø*!|$    0i¬~ðvêºÿ?iæì9´ß!ï£ù –FM3&MþòɈ‚†w¼C;¶õÑ®ƒtè‰gÑÇ¿õï4cÎ>ùD‹°            %$ƒ¯‡ÁW á#iIA`gßFzâ[ÐÇŸLŸ¸ä š1kÖ¤ÈW12ñzûS´ü‘è䨦£>ui1’@œ            {€ ¾öd[0ø²‘ÁyÈÀÛ¯/§gðEúäWÑûùˆ 4N¯<ÿ=½f mÙ±›Fv©­gÓ‚C¤Eï{?tÒñtê¢ù¹E> ïºïÿVÑ1^N'\rõ$̲           Sƒ ¾JXÎ0ø*!|$    0)d|ÐÏ+/¥k—Ù³wÒg¯¢ßï“t¸ý–I{_“¶h‘1)D_%,l|•>’˜ ¾~{Í¥tåÓD'ýõ¥ôí?;€z· m {ë£W¼\ö;´ý{gÓ\ï÷ù†Á×)hd@@@@@@@@@@@`R€ÁW ‹_%„¤A@@&l_]ÿ3ºÿâê|¾ÛC7\^E?îV§Î¤¶g«éÌyúòÀÖ-´~Ë5‡Øw½ï}Ñ‚93ô ÎѸÜ&rœfΙM3i7mØÐGïŽÏ¤ý:ˆß¶ïÀ–´~ë»D³fÒ¼}÷³Ä%o¡Í›¶Ñ–ïÒ(Í¡C>˜Ž>4|ËɱñÝ466ƒæ:2Óæ ›iËv•†”÷à÷ËpÑæk0øò‹            0a Àà«„Eƒ¯ÂGÒ   “‚@Vƒ¯oÿ„î¿ôh#ŸC+ÿ‡ùâòÜ™Ô. ¾NU_ïn¤Ÿßôotí#=ƽêÇU?ü ýøÇP÷£tÈ%·Ñ?ÿèŸiîÃ5t½ô$æ|>üeÚ¶ô"š¿k#ýôº«ôùôeõuÑ×Ó=Wá{{ýùÿ¦Ë¾ñíuÌ»÷ôÏRÛ/¥3åÆf#ô+¹UåUÛÿ–ýèCTÿ·5¤rÁ?çÉøÿKÆn.æÞ ƒ/N Ç            01 Àૄ僯ÂGÒ   “‚@\ƒ¯ÿM‡ù72ïi_36Ò×ϾÊ7ž:éô%tþâ9ôä½zûǛ¾Uv€ÃË3ø Â;éêŸÐ²/M¯?ô3:å_\+0'.é`ìå—Ÿ¦6åU승ªÌ ºáé{èØkð£¹ô Ÿ&êí¤ß=í-¡¶§ªèÌý½[FÈÛªÒ;C>‰.]Lô»Gü*馻+eµ›|Áà˧‡˜°`ðU¢ƒÁW á#iIA «ÁWpKGé}놿¿ÊßÒ±½½šfýþgtúMÊ@ëLºé?ÑEv »h×Vúùu•t­º´ä*Úvë'ÏYÜàëË×ÿj?sÍÝ5D´:oÔ7Ê:ïêÒc_ùôrû×è Î¥´Hyø¢%ÔÞ^E§Îñ¸ß~_0ø2yက€€€€€€€€€L50ø*a‰Ãà«„ð‘4€€€À¤ ÕàëÛ?¡û/=:K>õ6‰'}ázZöÎÈr¯{É7ƲzøÊŒÂ“6à:yÓ£tà%jËF¢ŸHC³¯ Íž»ûúó:åì³ôÚŸ*èhg'H-+ ¾tø@@@@@@@@@@@¦,|•°èaðUBøH@@@`RÈÏà‹èõ–z:å{®®/__Cÿú™2ZàX lXI?ýM7]qÝgÒFWl»ÅPƒ¯qzñþèå…§ÓÅû -˜ãFôúÓKé”k”G¯3©MnÑxæœ-ôí3¾Fÿá”À™ôPóUô‹\ïb¯?ÿßtÊ7~ã\¹È0XƒÁפPXd@@@@@@@@@@@ @_€˜4 |%%‡p    àÈfðuž4˜z,«‡/Ç87¾Rq~.Zò~ÚÑû"µÉ­ÕçÒÖSÇ9Ǿ·®0ƒ¯ñtÅW‘2íRŸ“N?‰ÚþŠ}özÚþ½3h®¼¶uÅÓ¢/»†]î½gÊ{ušDŸ–Û?~‰>âo÷˜ÝàkÅïn¦³ü"‘”kó/ÿ’¨HC>÷ýß*:æÂËé„K®¹ŠS             ¾JXJ0ø*!|$    0)d3øúöþ’~ð‰C£óùîFúù­·Óµ¨mÍÏ¥W|•®­8ŸNZ0Û¹à|-ù*m»õ/ÉõË•3ÞO÷ýâ7ôņ§ÍHä¯ó¾pÝqÕ'i‘oÀE´ye]õƒ[éÒ†e^ ó>ûeúk.¢ÌóΨomðõ÷þ–®<ÎH™6?¿”ŽúÆïHmMùG¹5åL”Ãà‹ÁÀ!€€€€€€€€€€€LP0ø*aÁÁà«„ð‘4€€€À¤ ið•<[c»†hóÀnZ°ÿlÜ9N :€æ¦·wŒëøn臆fîCsw ÓØ¼èp§í30Ð/͹fÓܱÝ4¶ïtè¼$‰Úb7ÏÃàËä_            0 Àà«„¥ƒ¯ÂGÒ   “‚@! ¾&ˆLÀà+.ƒ€€€€€€€€€€€À ƒ¯ ¾JIƒ€€L ÝÔö/—ÑÇ?sý±³'EžŠ•‰áÛ©ùßþ™—_IÇ]üb%ƒxA@@@@@@@@@@@ŠL_Eœ-z|e£ƒk    Mà½ñ1zî_¤íë^£…9‘~íÈûiú̙ѧÂBÐÎíoÓö-›hÓš.£Ôî£}ûàTÈ=ò           “’ ¾JX¬0ø*!|$    0iŒ¾;Hk~m~ñqzëÍI“¯Bfdö¾ûÓûOKч/ø"íäâBF¸@@@@@@@@@@@@ö0|íaà<9|q8ü ŒîÜAÃ}$¤ç/|$iÓhÎþÑœ–‡Ó@@@@@@@@@@@@`€ÁW _%„¤A@@@ „xúûSèÓ 4}Öì"¤€(A@@@@@@@@@@@¦:|•P`ðUBøH@@@Š@àͶfZñËïÓÉ_¼žŽúÔ¥EHQ‚€€€€€€€€€€€Lu0ø*¡Àà«„ð‘4€€€ÀŽÝ´þ‰ûhëk/Ð)WÜ@+{ ø¡èCŸü-øðÉL Q€€€€€€€€€€€Lu0ø*¡Àà«„ð‘4€€€À”' ¶_ãã$Þ“ãcôž:–ßê÷{cê[“ßéó㣻i׎·id`+íÚ¾•FÞyÛùÜôÍž¿€Ž\ò:âì¿¢™û̧ñÝ#´éÅÇiÃ3Í4´y=íwćiî‡Ðœñ¿Õñ̹óhÚŒ4}ú š6sM“ßÓgÌtÎM›>“¦Ï”ÇÎ9y]þž6}:Ñ´iS¾ì@@@@@@@@@@@¦2|•°ôaðUBøH@@@`ÒPÆYƒÖÐÀ¯Ð`ïZÞIc#ïÊ?ö-Ïïv ²ÔýÓ¤ñ”2¨R†TÓ¥ÁÕŒÙûÈ¿¹4cŽüs¾ùo÷xæù¾>ÿð£èÀ£N†\[y޾;Hï¬ïÒ2Ic0%Ã{£»hl—<Þ-åq¾w¹ÇÎuuÞýïIÃ4i„&ÿ#!͘5›¦Ïšë‹)ƒ1ïo†:ž#ÿ¤ÁÙ~ ¥\GŸHû/ZìäË*.€€€€€€€€€€€€L80ø*a‘Áà«„ð‘4€€€À¤!0üöfzã±{iãóÐüÃŽ”Þ´Žu¼hÍ=ðPíQKz×R†Q3¤¡”ò¨5>ïJ£0i4& Úv)ocïl£‘íÛüïÁÞ7#³…gü9õ©Ki¿3²<€€€€€€€€€€€€À”'ƒ¯ª ¾JIƒ€€L ï¼ù:ý©îúПÿ}èüÏ:Þ­&EÆ ” e¶ñ¹ßÓš‡ï¢²ŠïÒû?znbF4            ¥"ƒ¯R‘—éÂà«„ð‘4€€€À¤ ðô Ÿ§cË¿L ÏøÔ¤ÈO±2±ãÍÕôü-WÒ§~ö˜ÜªrN±’A¼            {€ ¾öd[0ø²‘ÁyÈÀÞ#·+üM›>=·Sø® Ï4ÓûOMÑìùLa È:€€€€€€€€€€€L|0ø*aÂà«„ð‘4€€€€€€€€€€€€€€€€L@0ø*a¡Áà«„ð‘4€€€À¤$0cÑ éìkÆ4y0…?ï Aã‚hì½) YIJ_%,X|•>’˜T¦Kû®}¤µ×Lììh”ë{ÒèëÝ1×øË¸€            – ¾JXt0ø*!ü"&=²e ­X·M¦0‹Ž:õt:lnî‰mym­{g”hÞatê)GQŒ ¹'‚;'!Z³lm“ª3뀣èôÛ+ó˜OÝ(x†F¶Ð²ëH"£CŽ=•Ž=µ­àŒ áÄÐï‚e·•BÏK‘¦d¦Œ½æÏœFSÜ©WVíÝ{¾òé0vÊZì¸           0I Àà+£`ߣ­=ëéQ¹ÿÍôyô£Ò>÷DœxoˆzÞØâЬtô¦0g¹|í¤—ÛþèrpôÇèô£¤±íkèùŽ7eü³è#gGGì«äÙ.ïëpîS¿æ~ }Â!ê0â3B¯µ=G›•ÕƒüÌ:ä#tÞ)G¸?öÀÿ;×-£?¾ñNÖ”fÍ;€?ìZtÔaÂêåÛËéüêg<ýËcoÐ7O?0kþôÅtû9‹¨ú5uæzlÃCtºS¶ú@(˨|Ñ_£u'ÜLo<ûÊUëBã+ÒÉäu£ðí|ùvZt~µñ ÿò=ûÍÓ Ÿb, ¢ß…Élac)…žgKsËËíôê¶wå`ãp:ë¼Èíârçdg³¯4öY¿ŒžËaL±PŽ)>tôÄSdÏu¼«ÊÓ× 4úÚ?ÉûŒöÆò„L           Å'ƒ/Îx×VúÓ“ÏÐúÁñôÙ9tVy9-šÃoŠ>ÞðLJèv¹7Îø]ô·g„ådðÅt{F ÛÚL‹/¼Ù‰ß7(b÷¹ •:ûo¢HÓ­--tÐ —éLíacþ€O a;:‡nn¼…¾rÁ ¶öŠó•©ã˜4"~ŸcD\@/…¼;G|=ƒ¯\5«znOÓÒDZòõê"#—±Ìl9æÚGZ}­¼ã+ôѫ٘&På?z„þûŸ 1¦£ß÷Púß?'*ûÁãôÒ5{§×ÀÝÒØëÿ³w'€QU÷À?!‚€ b ʊТ_Ѝ+iÅ¥.E#Åê¥ÏÔZD)*ÐWÁ¶P¬¥Xª E*‹l! ! äýï23çΖ™É2Iø¦Å™¹ë¹¿sÏ‹÷óœújh¯ðüœW íY P€ (@ P€ (@ P€ (PË |á vþÖ™=r9åá!N‡ø:s«ÞY‰ç6´÷H¾´+†/ÄÁçRà?o´ÓÏ뇙ÎòjëœW¿ÓÕÀWÖ²˜7¤‡–Åx!Ù†l!O™‘‹…wk'_h:j Ä2i:G¹#)Y-=PŽÑz Lê¢9èS eQA`à+$ÐHœçþ÷éç7N©_g[T·L૥ܳÅx¾~¿¢S¯ô¾§8¸{#þá×xüM÷=Åß7ìŽâB²õ^¸¿r)žÞ¤¾ü9Þ½·aþnj½{i½|5—Ÿóªé „ (@ P€ (@ P€ (@ ø`à '±~YvŸæ1ôú(ûïGÈ/Õºç -ðµûóïàXM_2T[º Õ¦òçëAè¼õEÛMž¨;˜jϵg˜ú{ VȰ€ƒüä¢*6Éf#!Íd ãåñ0½¤°OT"ö¼îèÖé46­^mûJ]0jÌptôŸ&sn1à»øÊ^µWz+óSXT`IÆ ˜ð†ñ€6Y†`ËqÁf/AÁîƒR¢»­NïÛ„Õ_nCé)àÂËFá:[G¥ vé é|³½Êe´@û.]‘dë‹.†_rT”`Çæ<ìüþ ¬ÒBÖ‹F»ó/A¯~½Ð©µÁQQŒÂïŽèå‰ïÕÍ»‡/GÖ}º[öFË–-Ñ¢}ô0‰šËŽñ‡t´KIßlÿßÀ))~‹¸öèÚ3 }m]à+WᮿK¤þZÃ^Rˆ›¶àûå8¥û…‘4p0º(Ý•í+Ä¡âõ˜2j‚1DàøÙX;y0*â›è{? °ßZÙwÐçŸ×=|X›kÖ§ö1ö‚îõbGÁºÿbÓ–]8&v¢§Cï>—Êñy÷jå(+–ÞÖŽh[’ÞÖ|Ô…Ì)ÛW€"é+:ö$vsŸ+n»PÏ}íÛ‹r ʺMí˜Ô—¾=àèmk/)À¿Ø„]‡ç‰ÔuçKzãÒ>¾ŽÃâÂB‘¶ê¿‡/)WÞV|ó]”–Ëi,Û³õÆi3þªB*#¬ö¢£ú9pÛÐÂ;—¿+Œfݺâ»÷BŸnWÕ=x.+\‡Öl(¢¥´Ý.]ûcà D´,X„ †<¤¯à¼¶z®j{3Öå8Üõ¦ëÚЩÅؼm'•V \6xag¶y_G”†ZÎàÏmóXvKè× Ùi‹8tILžÃ5ÚËP¸ÿ¶ü} îš™«—nö²µ&M*úü¹ÆXϲÊìü}Ó¶ªÿFÝÒZhcz!=ÿ¡üž\"mC®š(Ü´[ ¾G¹\tv“„Ár͵^ùÕ …ßnBrQvYÿç¹\;Cn[~‚9ÁÞç(ÇëùÑWàkfî^L¾Ì_ˆ«ÿ˜|~þºqO1âŸ`åžÃºÚ±gÇ7ØžW€bó~ἄ®èß§/.ö¸_(Ý[ˆò»ùÀÈûð©V¸{^Á¶GÉïf+$öòüÝ ~»úqÊ9™¿Ë¸ÇI”ë¿cï&¬Z³ Gä Ó€Q¸¡ówËC»w`‹vc^Cµ{„.r Mê†ø 嚦ԌÜ7åm—û¦oêmG›×¾’ð9LtàßY¹÷NJ©ø‘ (@ P€ (@ P€ (@ 4¾$ðµ)'ßuè‡_õ#‰…(°_'ŠÖãƒÏwë'FË »ã¢Sßá[-4VÓÀ—ô6+¹²ä™¤3”àîù"EzPYhô ¢>WNÏñ Öcfj7eŠó£O»·Í1v:sb–ÞSìyHOÖÃfÉÙ qçwé˜ Cü¯Ú®Ëø2‡§tîÂã½bÓ\ ¨eêS“³–!g²1SÞüt–RÄaáÒÑHc„8´Õá+ –cÊt¼í±]ç×”Ìxej*¬±¡2|<ëÜ–õ†s1¯÷”Œyxùɱp>rÝ47#3ÀC– ¹9YrÓ|9ö­ÆCýÆø,CZÖlØò^5{2“º•°ž;ÿV†å³Gz–ßÒcAî+Hµ¹÷Ký-ÃŒž¹r›ÖóŽ÷+kéfLÞEfT`nr2ÓÂcA›sý=öúš'.ɦ‹%°ç±daNÞexÛ²V!w²ñ¾,o9Oö_¶´lüí¥‰ÐòÎW º0–QŽ×–ݹú·Ø…xîK[Li„å ´Qg¡œïÊ>$Å"õcÖwuu-=¯-ý&WÚµºOõ8Ì}•¬[‚{œ>çþ]ïiX¸vRÖMÁ¼/cì g+ó±ˆ×$;VÏ}c2}µ™ñ˜=;¯>”­çc×V÷&ª«ƒïö&+‡|j½I°rñà­¸í!×EÖ]9?äþÕÚ¾õ¹a”S9ï]×%ë}Ï(˜Ù-¥,ÎÖóF½>;—p¾«×aQ ãZ¶ “¤Mé5©¾Þ¾w¨mÌr­tîUÞ…ȸ` Œ«Ip¿Yîß“d,[ÿ{|õp2²ŒË¹²aù˜’…ÍoLFÔWøí& ½DõžkAÐðÚ–ŸÀW°÷9Ö°|óø*”À—ò›hY(ÿz.Ú&?®O1ý_X™áÖ±|Çr‡ÞrÝ }»F¶üe¢¾ÜWH¥`Ð{&»'wv¼J §Iyï¹­ŽÀŸßTÊ+ì~]2½¥“Ò †t çš&…Û·|:ú¥+Wù½?¸Nü o+?b)3VÉpÑý]‡ãó÷A›ö½“kÓü@ P€ (@ P€ (@ P€ š¤_^Õjàë v®^Š´! „+R0ô’&ò]c˜È¾¼ è{‚38 sÓf¯Â/ý£2}®a•5Õr³s7#nV?Ü¥=OT_^!éYhñ|Ü>T’hŽv­ƒL^(ûõüè÷Ÿç‚ò½øã`3{¨r¹´ÅÜ=²+ÙÆgcþooG¼dWšÇµCLTæ¦v‡Ù¹R2cÞTwÏ…cÊÀÛ\“2´äÝz×Z˜Ÿš€)ú3\éag­ô°“èJ[ $/÷$ßeÆcíÁ™H”}ú;¦‚E{È|h›œ…õoOvõFe—ž¿±ôüåRXÃN)X¼~®“àŸñª@àé̹] ûä8CKyÈ Ñ»¶´ÖKÐëÒK>²à…ë‡ Û ¿¨á4{Þ|Ä'Ã}z†Ì‡ñ&ÃrNJ€3?§îϵ± …õ2CaVÜ-aÅv(Æ Érî™åLË^†—&s…ò´žˆ¦öå:ÎŒÅyxò:#å¯.\û“Í¥'ÃhÖâ¹oéíÈgÐÄ|qZ”¬~ABÎ^ØÒ°tóKÞÅÙÎX·h*F=ä¬Q%4§´K»Yb—eÚM’kóãú¡G r²ïq ¿‡I‹%tvÌ ·½¸Uý}òUªUrÆBüõÉw/{eL›·sÆvó·y÷t Bæâ͘z3äÝ;‘zއÛÞÂ:µÞôÒ{´Ñ²Îs­çH5 Ê>­çGš„Œç(½XzUEH |}ôÆ<§ïÇ=¤cf¥tCÆgÆîSŸX‚¿=~̺P¾ûc<Ðo¬+\õª 9Ñ6Ò¾m>ZyT_1õŸà]Ë‘áo×Ý×Q¦¤{~7Ÿº]ï].Jîq[•žÊ¦,Â;Ϥ˜=Éòr }gúÝH“k‡öJ}þ"×Ð`_a]Ó”ÞÚ´ýe,ÈÅ“©Æ5Kû^¼f>l£C‰Ë9 !ÞþæOœ¯ßmpï´uù¢(@ P€ (@ P€ (@ P€MY€/¯Ú -ðUþÝ—Xþß½úVš_8c†÷D3m˜Hg/a|¥ÌX‹7R¶ãÛ]z¹’3eøÃ©î¡Š´!µÜ½(eHÏMS±2=Þ;ôbY/½´ÌÔ{iñB {‚ú€oFnîöÓ}g JíÑÅÒ‹ &IðJz¡’à•óe·²¤Ç³É^=ž•IoKÝÍÞ–lK‘û¤ôôá FhJ™ƒ Çyõ³oõ|üc{Küèân¸òÇÃôP€zLÎ ä!èÜÔ^®Ð™¯ž5ìã KØ%$ï Ie-ÛÉÃ<{‹’a?eÛYúó\ç}‚ëôžš”0“‚¥G(§øãé¢3zâPƒîaC={?2W óÍw¯Vî,‘°Å#lá¬c»ôPïì¡JzðÚ-=xy;*¤°g`ióP4g¬ó]îýiŸ¯šžû2”Ü4é!i޾+g]*û­X'¡›QfïlÎà–”EqÎL`Ö2t˜ç‘ZÃX³×aœÖÅŸ@Œ ´JÏvÍžíWI¤©R# †µòð=a¯¤ ¡½¸6êÿƒ¯úP›3rÊ5@i¼Ú¦ÄrþÌ÷Ѳ[Wtë%†%zžÿÞû³œg¾Ž[Úã 2T®3Dè|…ßÞÂ:µÞä0œç¼zD–óß‚ ¿œÖë¿ïëzáòYxâïkqlùr\­ö$gÌ TiOÒƒÓ é5p3›*½8…}-S\!+÷pÇZ\ 7‚u|EG ç8Ä ‚:Û˜*ëû³zl°eJS]=k¨Twh)ìß™¸Dâ<Ÿšžô~8Ýì™Í£'BßµüT_¯W×îÇÄ>ÎÀ¬u[ö½«1áÒ›\Á­‡ßÚ‚Gw‘^¸Iï^ _ýŒôÖ:ç[WEé³ÐqÔÓúÔ¤)ïáëgŒžÁÊ%ðÕÖOà«FÛýZ¶›lÉ€û±­Lz S.“j ìÕµ‡ä˜•™Z)å:÷ï#¦û%èqÙUÒ³cP¯ð®i˜õÈ ¬=¶Ë¥!Oî·Ì~(ME»üæš÷›×_¿áß;™»ã(@ P€ (@ P€ (@ P€h |yU®ÖªnHGG>|÷sÓ·!C9Þ|=Îן³)ÛˆDà+[z™/! îfh¼ …6Ó5šcßr\Ð/]/µtø‘Àâ^Y\ÓµÙêÃûd,Û¯ü‰¾•ðÿ¡>àKÉš‡‡.»Ç++ FG#º²Û¿x™3ͬô9ò^Bj·ˆj8)9kr&²Hí±%C†×{ÒÇðz€tÎ3:®P…5¤5iÆRLN»Z{Ø!á_q—}9ÓÐï.#^äîÉF­?wdjqÕpƒ;ô"5/=|%Ôz_²g ”5¢†™Ü!)õ¡³¯@Œ~<–íº{ QÏ/wøNPŒjùÜ_7+£²Œ^ö2$4ó¤søEÙ½%h—-ÃZM”a­,õï? ²o¹ÔuºQ×Z¯-s´Ÿ|bä\”^å’Í™?»’}û`ŠA\L,âÚµF¡ÒÃQhíEuõýÙW}”­“°å¨,cÛ$,ž?#;y…+}oÑ÷ÔMsÓ1ÒìáÐßq«eqûÒ{‘«W¼Û[Xǡ֛eˆ;å¸,Á%3DUk×…0¯ëJ¹]vz‘•öäy<5°õw~æd` 9ÖmJö iGîk¿Úk–µŒŠ­êµÏwÈÙzŒÎkXØ¿35p‰Äyö>MkW»³\o}TDˆ“|¾R§ÿS.¿÷[?[ŠŒê=Å4ì-Ÿ ­ïÒü¿g Ï¤úÞ_V€ÿáë·Æ]Ž—µ¥®þ=J–OÔ{Ô øª­íŽ˜þ¬ÌpŸçZJ¿’ÚH#€†>÷ã_›Œëzù¿†Vž nHǰ®iZªy¹Îk„{:àú½÷ÞÉ4­¦0œM P€ (@ P€ (@ P€ ±_^•§„µ¾øfU6—C9vz#'Äš[S¶‘À— )”Ð@3”)A§©fÐÉýÀVzE‘Þ R:ôÓË‘ò`Û‚ò«Ñõ_p;^À Žî´”ú€ÞvroͲ[2oê »Ý=_ûƒ#ÈžéÆË6Z'ÁçИÎ5’ÓÆcôðQ:lútó~¨ªîÏõÐR Hh½…í•Þ¼ŸGú æðkæÎÓ22!¥wÅx‘Ò¿—7\þIýß-"5°ç§7ÕN Eø›nÝqxßÜçŸôh´`=žKí¦oÈQ¼רÒõQæl2¼à'úð‚ÖÝ >ën›·œ~¬®Þ±Ü= ù¬ K±Õs\Sµ óÜwHïZ8{×’a‹f¦šÃPªC[*=YÎ)ËBshNKy%Û¥ôXçª3u]%H¡¿;ëÔub{±nÉû›ºmWÛ([ƒôî£ÍÞΜë$c|ÆhŒ1ö©6dé\Ëù®îÇßqû<Ç-á7”öÎq¨õæ§ú<·këºðÜv pݰbÕ:äïÊÇ®¢c8räˆIœ‡<çõÆXÔç(íÉ#Ìaé1Q– ÉVuRÎoXzÊ›$AÚçÌ ­ô$5Mz’š£Òù;çþÍ0Âç›z^ø>w|£zÎ…ÔnjP—ê>}—ÕOx·çyØû4µ]ë«õè³&B›è+ðÜîÂß¾€!æ=Å–¿LÄe›a°>ixææÎ8qº¥X”âé ̉)XW¼dÌÇ@¯ÚÚîÌU…˜<Ø£çG¹öÜÜå'ȱ3÷M¹£¯Šr sŸÿÁ¾Î5Í,ƒ£¬ÿù× ¬û*ùwá˜ü—ÎëGžóâáqp² ×ïƒÚöC¹wòu›`ñá P€ (@ P€ (@ P€ (ÐøøòªC%¬ ðut÷çø÷ú"}íV C1zh‚²%‡ éø.v—I­záæÑý}öV³xñb}Ûn»MY7ÌÊC1WDÖ¥J"WÛ¤ k¶W†¹k}˜~^?èƒø¹ÊlËCXeºkÙ0Ëçg5õŸŸEôÉÉ)²º= ·§óÎOéÊõPÙX°ûp¯’,C‘å˜C‘Ù±z~&ÆLq†ÁÜKŸR½ð·¸7Åæªcu®ò(õéá+ïÈ“®ÊÜ[T¼B›o¤ø‘Pû"q/ïû“»—3e{–zu¯§†\çÌö7ݽf >I°+Ù vA œ¨½Q©áŸž^»—!úΓ!úôéîíª_ן‘2=ìs_rÎBÓ¢»Ú¥ÔËsZ=GüÔ—vxek^áGÍ#u³êg]õø'-ÎÃs×uò’󜠮ã9Ï÷wµ½ø^Â9Uݶ«mÈLmÈÖÌŸq…Ë;ßS&eã·Ý [;whÁ9Ï×»ºŸI‹wÈq{÷ÒãóW}mØÇ4w{ ã8Ôýù­së¹½VzkL”P­\üÛÒcÞ¬[š=Dú8he’zÝÐÃié2,©Þ±;8«/®«²~ .[u]‹“2D l(k… ƒ:HÂ0ÒkÖ¤ødãºé7$â{Ïêy¡ž£î¥•kƒó:-áõœs/è“ÙnjpW÷Y_çyØû4)\ë[ê1SpóB |}ÆÜ‘†_Œ¦÷ÎåÜ‹%˜åœð=_¿!¡¾nÏ9Ó÷vgæJàë2À—¬¢ QùÈØ›ðçmÎõ­ï©þÏfÞ‹$¹†øÒ¶ƵyßdzÐï¶,k|~³^#\ç†,ëj{jÛåÞ‰/ŸâœH P€ (@ P€ (@ P€ @Ó`àË«>ƒ|9„ÞùDúx0^ †¢sôÈ(9ú«™ô´ù¿Û å½Ð¼=ú ü¢OŸAÛ‹Ð!¶™±ü³Î_p`¹ôr’nör²xw.®ún.âGfêeÈX¼O^×E>+°-aýMwB?¨ø²Vì‡õáp8,ÛŠ ò¨î½º¤d`öè.8yÒ² Ë—Sźõ)P:ƒ£l¾^ÿ%V}ð.²ß0†éSWR‡S÷çó¡¥-»s'z×,õà x„2f̆”^ݵõó))ýÐ[‘Ò_ ¸T_ªÜð7ݺ³p¿)å’M,X©ÝÊ0+¹²ô^ƒ¬CvúôôÚuæË¦SŒt#Víƒþ! W]XÖUÊRç¾e˜7 \=)+µç=ËpƒêƒmKY,–Ž’æ"ÁlÃ)3ÌÞÜü¬«Ú¹Â0ÖÍy}S× ·½xmÔœ nÛ»>ØWð5¾\¹ ï.ËÆr½.Õ-Ihn÷Bhyžê^ê~ü·=oâ“Ò7å:÷UG™Z{s–*„ãP÷ç·Î}œÛuz]°cyF<Ò]W›8<†”Ë{¢í¹±ˆnƒ¨_aì£7>—~øJ{r^ÜÁ õXCµU×õpRëÒ“ÞAéI¯lÍ,ô¥—(Ãlwú— þ¡^û¼ÏQm¾Q=çBj7kx/”sNÝg}çaïÓ´w­ïQATMÀE|¾~¿ªS‡vOa |ÎÀë?M€=ÀOîI¹_¸c|Š>œwÐ=|Õ`»þ_Ž{v|Ï?Z…·ß9Ÿy’¥à‹}‹pù¹Á éè^;økšc_Ž ~—kU[Z&7=/j‹ØX¹~ÄDaãkc‘>Sû±1ðʽ“óºã* ?P€ (@ P€ (@ P€ (@¦'ÀÀ—Wø:Y„e9Ÿ.¯õýOHa‡º†}¬À—<šVÂ!“äâ¾yc²µ$EVI(&F+¯òÛòÖßtÿÇv)¤ô@IDATê×Ã_Y1{Õ^LÔR:!¾ª{@¯!8cíAÜ8@VíîvnÅò7gbÊLgøË=l˜õ˜vË1i=Î(õýõª£õ¾–,½¯é¡'óA¨:Ü—ôTsP†‚ ¾ôÕןj§7üM¯Ö&ÈJV¿€^cŒ^ªRf¬Å);qôú¥½ÒfçbÎ8›kKyóÓ‘<ÅpV{þr- °‡¹b¯ƒ‚ |ã…d²5óº8÷KV#¹×}˜J¤-À‘9£0?=Æá(½~iÇ ³æ÷‘Å”í’e8½œ‰2|§z~)DZIìFšvþ!:ŸòZo/ʶ}¶ e¾úÑ^VŒ­k–cfú×p¶ êóÉëªmê~fÈuånוâ§Ãv›Þ×!\ç¾¥BmojéÝŸ‡Ÿzs¯­}’ÀWº„Í^³ôs».¯ j™Œ…›ßFJý‡Â],¥—>—>W¹æx„9¬çwˆ¶j™”óÛ(P±„EmfX4¹ßÀwS/0kiÈ•ß9›GñÝâýIm_¡¾Ân758ç"qž‡½O“:oQ’’4aš m<Ç×ÐÆÞuÌ_¯™2ðäˤë­^_‡A¿7¯n8„‰½‚ÿÅ øª­í|YT»ölú|9~û£®á“¦,Áš§¯Ã)G•uᾺ¦í˜?I~¯>I“3ãí©×™C»wðñ´ds¸Õ_~}Ü;…~+é. ?Q€ (@ P€ (@ P€ (@F"ÀÀ—WEørã£w?Cióæhîµ¾6á4NŸVfÈrÚ„îW§b`§–®uß×¶+yæÂÑfƒ-/OŸhÁ‰\ N/å!½åaº¿éæjµð¦><öýp½úT÷€~ßòéè—n;’³–!gò0ŸµWT ªuk0‰e%vÄulç1ÝØÄêRÍ0{í^ŒKlmÚËuLêC} Ûù !8ö-—ž1ŒÐ“»ç ¥þ$|±lw†ùìáÈŽ {ZKïîWõõ§Ú©Á ÓÝÛ®á'G2.½¡”L̲ ei‰“±tG†+#ð©=b©=©YJ “h“Âr§êCfªç—ϰXÙj^qŒ1ìiœûJ`ù|ùþ0Ðþ÷,{Ýn7îFLÿVfx^3µíå刊‹s_¿er ÀWmm×_àË^^†r mçûzm×›ð©VôŸý%óÆ¢Y¯P¯Íß)¯¹E¸Û3m©·jù¬Ã¢ºÚ^Ø÷NF=ñŸ (@ P€ (@ P€ (@ P ) 0ðåU»g°åÃwL›ÑWßú?èä…ÑkißNb}NvkõìŽÔÔpǼÜkÔOàËú͹wkøEy€my˜îoºs+@Ia¾?Z DŸ‹ÙºyÜKúþä/â{ißS«}@¯†$T±tÇBK HßjñÇH¶Ý&a¸dd-|“Sº¡`É4 ™`Äoüõ>¦>üvšú>&ÅRvèk˜15<æ|jÀÇ_`íãéÒc†t –œ–…—_šŒn{ns;ªvîЋµ)k Ã\×^‚¼o¾‡Ô<ν°'ºu ½;usÓ1*Óˆ±h[Õ"9yè)š3Öz©½diˆÍáµuœ/Õ\ y¨ÓÓæ­Åœ±‰ÎUô÷5³Ò1:Ë,Cˆç¾eC¾¨=I©‹e¯Þß<Æ'TÏ×pêJòð{RÂH=Ìb Çù Ĩa)9÷½†D,‘ó¾—vÞk¯IXð9t+_#!¸ÑFÀ*„ö¢Óßgµ>ôú?*´듡:kñW¶à@Ú+¤êÎ6õ¼†tmUÚ{ª´w#6§¾Âlo"Öq¨õ&…óìÝN+¯åü1‡,Ô"uv]PÉÙØ›3Ñâ­So‘`ªÓ–6«^缃­a—YuòužT¬CzÂ(,×/"ššñš½¶HB¸žq5ç\ßïê¹ã XUQ µ…ù;£m:\µ¬õrž eMö©«Ã^“z ¾9Z·­n´õý½j+ð%ãâÚ.?1ÂQrýûÏ·‹p­@Ö÷¿ÿc\–8[ä~á÷oÍÂÔÑÝôÉ–À×ËŸãÝ{• i-m×+ð%ªGG\…—·I®~?,¿[b_/i?7w¼Æèåkô+(ùǸê_²Ýp®ijàËû¾Éާ§É½Šëê!Aywõú}ÐzGU{ •o¡Ü;i 5½GÕ¶Á(@ P€ (@ P€ (@ P€h¨ |<Œová´Ö —¼šK Û¶í–>ºŒ×…½úàÂh­Ï.½“.œß­7:ÅU—Sz k%¯Ñ‘ |IbÀ 3™OýÊlËÃtÓMy779™zZ$+öæèÃè9çóîû_0kº—Q@û~@ïÀÇÓ®1‡ÒÖKÃÂUO`xŸNhé(GáÆ0cô3D#±—…›ñ\JØ !~ÈCæŽR0cñcHØíbšã´½ß­n“Þ¤ô%äø¥÷--¿ãï˜ö-Ÿ&=2-Þ4cé|Ü|E¢Ë÷cõ¢ç‘®÷peîN4¯’a µ‘è2|šs¸CmnZÖB(µÔ«¹¨¶„2< ¿À’3±êÕ_ Ã é?¤[7´“m«C…Ú²V wò ÷FƒüdíÑÌX)sÙLæùt]zcÊpÑ&Ë%g`Å«÷£oGy¬}º[—¿†QŒY´­,Ø|©€”s>FN16.çg¯x7õ½HºbÙÅü.ÕÜ2\Tuç¾¹É`ÞÔ¶¼Þ Íp•^Oî8öåH/ow¹&dÌ[_¥ô…œrRäxíáÑp=+/=„Í4{óˆ±#'#fçG²ïIX<ï ½$·¯Æ¬GîÂÆ Œäì2<¤VáµW¡|ðnÑX”ž€‡œ™»ŒÙ˜þókÑó¢vh.½"–—îÄ;3D¦YÈd9×r‚:×öašôlèjmãg`þonFB»hìÿf5ž™îjïZqÕs?¼ö¦œ/²½ä`C­7Ó-sÁ ÜwQç%[ÿ‰ŸzȼÆHØÁÙ£›,^9µ(eõu]°ôÀ#ûÔÎÁ¥<ÒÖ¾YýLw^óÌKP0wï³°é½³©C«™ Váî+:àÚë¡Ð°Ë¬:ù*³×9+e³eaGîdx^Mœ¥ö÷®^}ÿž(~Êuº&í&lé‘®~ÏsM-ü}jçÞüÔLÑó>îß8uÊôZ |ɹôïߌÀO^1/Œr¿°4÷IŒìÛ 1r¿°sÃGxnÔ}Xhîá·¶àÅÑ]ôojà WOúyÆïf›îÝÐ>ªv¶ëøB9Þ¸=÷,3 4bÊ+˜1þZ$ÆK¯¤Ž•îÂ?^x¯Ç3búðï‡áxµ=|©çyð×´‚E“0ä!ó~DîV¼zŸüVÇÈï×V¼3ë×µÜY·“æåâ¹±Úbíß;iç[MïQåä;(@ P€ (@ P€ (@ P€hˆg}àëdÑWÈùüÛ ë&aèš[ÍòÒÃ×2éáë¸,V=|9‡ýRà FA­î¼{‘QÒËÃôÝ9wÃ5PYÏ2ÝyøÊzòà{…”U×õŽsUóÝ;âs¼Bµ¬_«@/ËÛ ñBÚ@dëš­ë[¾¥ÍÆî9ãÌã·cùôë‘.=gU÷J›±J†Ó†„óÿÐRúêÁ¬T²ª+ƒ¾«gáò00=[Ÿè³swcœÍiX]ýÉãP?/mˆ@çù¤î/Kz¥š,©6¿ë© WûY)Ÿ¾¬ Wwp&=BPú¬Š¬öâ·´®¾Ú»½p9®˜î 5¹öúà»w7¯ÅÌ Å«gÁ6&ËßlËtÏkf8í-¬ãp™ô ¥HÞ_$¸{¡óÚļœž/÷õÞ½ËMóÓ1rŠ»÷=÷ãÓø Ñû£t(ôIuöJï|ßɺɞëÚ²±;w¢~] «ÌÎo³pê5I›4~ÞzÌkô¼d.Ô›º¯ùR4ÑzïwÆ(VX.²j}ŸçZiÃß§r] óžÁÐòþgí¾dÛrýûÝÍ—ãéϼ÷c™ò3é-ëÿÆIœÑ|I{võ¤åœ&ï¿_Uˆ©ƒåw9ÌíªA2ïÀ—lv÷r í7Nz«î•†uÅsÑ·‚|iÅ ãÚ¬¶UŸÅ… »!==Ë2Wû²Ü)ríx[Ÿnm{áÞ;ÕüÕRH~¡(@ P€ (@ P€ (@ P€ Là¬|9mÁ»Ÿä]-ݯJÅÀx_4ª›p ï£l+•~ÁZõ’¾ú×ÃŽˆ‰71Þ.Öfõ è5F %ˆ9CÊCØIÒËŽöœÍ|hoäHÔé³åa¾çPjÊ|m¨½¢9èâM‹2¤7#Ü2;w¯„•œ Õ3ð犼EHH6zâr«è{ éIëEL{h¦w¸Ä&C9>òî;È2|™<òĺ%ó0ó¥,,÷‘û²%Ç¿žŒqÃÝÁ‚ ì 1;^Çä(Æ’ì)˜0Ó#LaKÂyO Ý²ß`L¶6/C†×{ÒÀ‘)…«ñâÓ0ÓGA’Çgá©)÷bPÕO© ²yן]ÁéÅl‚ÎåyÞø 8}Õõ<Ã2¾í}OuŸ—ZÞªšÞ›ìû°äOZofÞa([JžÉú®Kt†ÝÜûs”¬CöãÄÍ=Mÿ$=…­úë¯Pò§;!¦$Dµþ§yõv[ øµlÓ\t™i.cÃÂÍŸ Åì…Ì׊ûÖ-ÁŒg'à ¯p  “f<‡Çîn†͵íÒþ‡8K6çWbÑ‹Ïã¡™ÆÃtuŸã³à7¤¢“3ìåšN{q­ì󃿶a/^‡yÏÏDÖž•¤mƆñ™`òãÐM=½}îÁ:±D5ž[MË”^òƶÀa'-X/AAwÖ¶z{“öêq8_ÚÓf`Õ/;à5éuímkMZƆ¹ÆhÃmʹøÂ½C _ÆŒ•¤ 5sžù=dÛêÎo}»Åx!Ù†lÝ.ˤÇÅaÞ—g‰ü¾Wÿ{bÇé5ϸÄGnÑLØ,¿{á·›]Ì£¨ïó\ÛmxûTÎ=ø²ó[-ÕÎp¾òÿž>“èË¿.!¢ñ}¼8¬v[ÆåXù÷ñ褙ÞAª>2”ã”§qÚ ¯áw-“{­ÛŸ³ìãU)ÇDW9Bßnù¶Eh;äA}›Öm¹wcß¿Ê~¿îyµÓ–±á¾'Äԇơ‡pTž .ð¥­ò5M[gßj<ûÀÌñøýÒîS¦ÿv2úw,âŒ;ñò§Ý[$ç=QË÷NêùÞ=ªfÀ(@ P€ (@ P€ (@ P€h¨g}à+’³xñb}÷·Ýv[$‹qöíÛQââR¸I^QQˆ‰iƒvíZÃ+ïâ!c¯¨@ù±c°Ë0IQQ1ˆi‡v­-Oú=ÖðÿÕ^VŒý¥DGG!Jöß©cðI– Y·TÖ… 5ª•£M»vhS]éý—%à{ÊNËŽ*+gÙsXÇäìU2 Ñ»YÀmyÍt÷|¥ÍR‡bôZTà°£¬¬ åv1¨ƒ6íƒò³—• ¬Ü.õ.u×Û…WwjQêú³½BüI™åœ“#EûN œîŽåÜ/)qŸÃí:vDµ§N˜í%¬"JÝV”—ã˜];f­mÆ NÎïjËpgvïÛ/õ-í%JÚ‹†Põaµ·`C |IÏl{¥wEíJPQR‚R1ЮOqí:Ê0²Õ·ï°ÊÐMfJûßWbG\\”\÷¢Ð±£ gYÇŠŠ“2rs1UQ(+)G´t†YY-ÇàûúZ›eÖ†ˆ½¦ŸÙSœ:Ü©¥¼õø¥í&<—œçˆ®IÛªÍÚh!#mÇFS››4¶%Ã8í/sÝ/ÄÆÆ¡}»8và±[i7¥Ò^ä"¦ÿnÆùj¿ál×c7>¿Êµ§\®¡GO×ÐØXãA-Â)ùoNœ®ò¹ºß‰Á^Ó” ”ïƒ=J¬dݨ6róøñrØ+pRÊÒ¼eë ¯ñ5¹wRŠÆ (@ P€ (@ P€ (@ P I0ðÁjdà+‚øÜu øxú5Ò3V2—æaêðN!oÏ^°Hz3zfóì(äq 4F?¯Æx(‘-s–H/•Ìì¼zVŒlá¸÷zh&Y¯6Ñuøª‡²×÷.*UpH/_|Q€ (@ P€ (@ P€ (@ 4n¾"X |EŸ»®‘€£p .¨ ™‚U{¢ð”É:oZŠ #' ×,…s¨ÈŠ+S ± 0ðUãsTã_/NÀ]3Í«‰Çð‘5Þ7Ðh´¾´ž¾øò/ uìU^bï^þ7Ç9 (@ P€ (@ P€ (@ P€`à+‚ø |EŸ»®™€½»çÆ#±K» ·eí…ǹ’-s)>™:<ðYÎ…ùN¦$ ¾RdHÇ…ÆŽMéëêX,=ºv’ŒÅyÿÄu¬OºfóC“Ðú÷Š“^¾´Þ¾øòÐb^ZØë ó^Þ8œB P€ (@ P€ (@ P€ ¡_¬4¾"ˆÏ]G@  s“»#3Ͻë”Ì…˜75!uæ^Ÿ(и*6!5a¤ÑÓ-»s'"Øødã>ðš—¾bÓ\$ŒÌT6”‚…kç!%‘Wå¬û¨e½bšKO_ÍϺCxÀ•2„£]º÷bØ+ gR€ (@ P€ (@ P€ (@F%ÀÀW«‹¯âs×()Ì÷‡ÑÑèÔ¹'ºtd8#"Á6; 7mÅáJim»¢bÇR®FP ée0ï›oq\·ë„ž‰]mÕV_EÔ‚_ÍexGÉ~Õ/mGíO{õ:«Ï<(@ P€ (@ P€ (@ P€MS€¯Ö+_Äç®)@ P€ (@ P€ (@ P€ (@ P€ (ÐøŠ`¥1ðA|îš (@ P€ (@ P€ (@ P€ (@ P€P€¯V_Äç®)@ P€ (@ P€ (@ P€ (@ P€ (ÐøŠ`¥1ðA|îš (@ P€ (@ P€ (@ P€ (@ P€P€¯V_Äç®)@ P€ (@ P€ (@ P€ (@ P€ (ÐLàë7?kÞùjVä×_]ßÀ=÷ÜS³ qm P€ (@ P€ (@ P€ (@ P€ (@ Pà¬xþÍÓúqþöç-C:Þ·ß~½zõBë֭ѬY3œS%¯¶`.ü¿?VÂÙWC[gÞ¼yz‘&L˜ÐЊÆòP€ (@ P€ (@ P€ (@ P€ (@ P€ P ܼ_µP™ |Õ"7A P€ (@ P€ (@ P€ (@ P€ (@³H€¯V6_Äç®)@ P€ (@ P€ (@ P€ (@ P€ (ÐøŠ`¥1ðA|îš (@ P€ (@ P€ (@ P€ (@ P€P€¯V_Äç®)@ P€ (@ P€ (@ P€ (@ P€ (ÐøŠ`¥1ðA|îš (@ P€ (@ P€ (@ P€ (@ P€P€¯V_Äç®)@ P€ (@ P€ (@ P€ (@ P€ (ÐøŠ`¥1ðA|îš (@ P€ (@ P€ (@ P€ (@ P€P€¯V_Äç®)@ P€ (@ P€ (@ P€ (@ P€ (ÐøŠ`¥1ðA|îš (@ P€ (@ P€ (@ P€ (@ P€P€¯V_Äç®)@ P€ (@ P€ (@ P€ (@ P€ (ÐøŠ`¥1ðA|îš (@ P€ (@ P€ (@ P€ (@ P€P€¯V_Äç®)@ P€ (@ P€ (@ P€ (@ P€ (ÐøŠ`¥1ðA|îš (@ P€ (@ P€ (@ P€ (@ P€P€¯V_Äç®)@ P€ (@ P€ (@ P€ (@ P€ (ÐøŠ`¥1ðA|îš (@ P€ (@ P€ (@ P€ (@ P€P€¯V_Äç®)@ P€ (@ P€ (@ P€ (@ P€ (ÐøŠ`¥1ðA|îš (@ P€ (@ P€ (@ P€ (@ P€P€¯V_Äç®)@ P€ (@ P€ (@ P€ (@ P€ (ÐøŠ`¥1ðA|îš (@ P€ (@ P€ (@ P€ (@ P€P€¯V_Äç®)@ 4a•'±¥è[lÛÿ6ËûÁòÒq´QÍ¢Ðû‚.èsÑ%HŠïŠn:5ˆr±¨N øh©´¥Ýz›ÚV¼Zk¯¶1­Ñ÷¢®úŸ~»¢]l\C(Ë@ P€ (@ P€ (@ P€ (PÇ |Õ1p Í3ðH‡ó(@ P ýGàáwæàÀGкM´n×-cbÃÙT­¯sæÌi?z å?”áÔ©SH|-&^õ“Zß7HÚø÷öõøýÞÂ9ç4C\Û¶Ò¦Ú¢yó¨ÚÜEØÛª”vT!í©üèQÄD·À 7ýRS†½A®H P€ (@ P€ (@ P€ (Ð(øŠ`51ðA|îš @øÝ‡ÿÀª]›qåOFã„„y”gNŸÆ?ú{ v`Áϧ {Ç‹d9Y( œr8ð“מ@›ŽqõOŠ11 åXi)V缇 [ÆémªA’…¢(@ P€ (@ P€ (@ P€¨5¾j2ô 1ðº× (@ÀHï^{OŸÀÈ[n1t`ïûKñÝþ“ˆë=.raà ÔÓÜÃÅÅøxÉbüñæûpÅ%?ª§½r7MàpÅQÜüçg1häHtïÓW_ùÌ¡­øêÝM@G.¿e¢CÛd-½áÓOqpç.|0ñ™:Û7L P€ (@ P€ (@ P€ (Ð0øŠ`=0ðA|îš @ð|U ÷ú>xëS 1ûLþµZ‰ôá3ðéàþƒðø:¹q>~}…ªŠ)¥o¢k\0[ªûeøª{cî (@ P€ (@ P€ (@ 4¾"X |EŸ»¦(ÐD|¾ÖÞÒHzñLø_M´êyXu à3ðµu!~=à·²·ã±Ò?#¯:ç&)@ P€ (@ P€ (@ P€  0ðH§Žç1ðUÇÀÜ<(@³P V_Ž üð]1Ž=ŠÓˆE\§‹Ðñ¢¶5í?àÀöÝ8q hÞÂX§­¬ÓÌÏZìáË '7(Z |…ѦŽïÙ…ƒû-¢Ñ"¶=Îír!ââ¢üú°‡/¿4œA P€ (@ P€ (@ P€ šœ_¬R¾"ˆÏ]S€h¢5 |X1¯ÎF‘§Ïˆ0åo¢ëEÞ“¢÷ç"û–lÏ5äû8d{ñ1Þ³øò6ᔆ'P¯ÛTi>>zä¼·(ß äªÿû?ßÛkº6/Ÿ,œH P€ (@ P€ (@ P€ š¤_¬V¾"ˆÏ]S€h¢5 |•¾ÿwšŒ¸×ô¾_ó. ¶×üósÜúÓÎι–w¾,üB P€ (@ P€ (@ P€ š´_¬^¾"ˆÏ]S€h¢a¾Ô ÉˆG‘¹x2âͤVéªùxjÔ3ºXbÖbLþí`C¯|+þÚþF|¥}“À2?*ë˜=€•ÆÀ…=:Ëzü“/~m5 |…Ñ¦Šæe ûÁwu‹¿õ!n¼¥·9,ª廾:÷@œó´øj§ E P€ (@ P€ (@ P€ êD€¯:a n£ |çÄ¥(@ P xp_'·.įüVßÑøüÔÃ:tãŽÿýþ”eôÚõĉ§p¡Ì®n@¥fà+ç5š¾ªkÞmª¹·ôÁ[ïËÑß÷*^~õ'fØ+8 ¾‚sâR (@ P€ (@ P€ (@ P )0ðÁZdà+‚øÜ5(@&*nàë‡U³ðĨ¾âw'£­‡ÏÉ»B „ýSJÿŒ®q@uëxlÂò•/ ¿4Pš¾ªkÞmê{|8à*,“¡¼b-RG^’ _!qqa P€ (@ P€ (@ P€ (ШøŠ`õ1ðA|îš @7ðUúþðÔ-¯ŠJ&²+'Bò\–—»·¢ã1 |%È{ÿtþð耟þ/þøÏt´´¬ø _}8·aÔ$ðr›ÂFÌk3¶È¡ßúßM¸f€gì2° _}8— (@ P€ (@ P€ (@ 4%¾"X› |EŸ»¦(ÐD |•K_™Z_¸›‰„+ørõðµBz­­#!°cóXǺë7¾¬üÖ0jø ½M¹{øJzåCL˜Ð;$¾Bââ (@ P€ (@ P€ (@ P Q 0ðÁêcà+‚øÜ5(@&*0ð DR¹u!  Ù(½ åJïBC¬½ íúãÏðRæ—2÷<}â1tŒÜ!0à¦Uëq}r}ý`þÁÀW0J\&ÒÕ¾CoSȽ¥Þz_ŽzÄÓÈþèn¯žöy0ðH‡ó(@ P€ (@ P€ (@ P€ @Ó`à+‚õÉÀWñ¹k P€MT Pà+ñ7/ãö»ûâô‰J¯£oÞ¶ ¹ÝSð‰>çÇx ÿ¸´‡ú:°b.~7:[Ÿ“ôâ˜ð«¾Æúå[eºõ!耡¸wã+¸¬¯úª<´ ›þµ¶ñ#ÐÊXÚòO¾,üÒ@¾†b|nZ§½Ê=£ðA›!µ©¢y÷!ûA&U^‰¿y÷<ñÄé=çÄUâàù× ©¯5ŒéÜ5_N ¾S€ (@ P€ (@ P€ (@¦/ÀÀW똯âs× š¨@ ÀW CŽÏ~¿ú_dŽ4‚]Ú²ñ#~ŒÖ‡ÿƒ‚­Î5ïÁǞ…ÊÐ{çeà¾ë\è;IʰåÓ|}Úí·!¹¯$b<^ |y€ðkƒø TäÞ˜Rú!:~=7´6%!Ê¿Jˆò+eÓ‰?ŠŠ÷¿D‘6mÄñÇÆ¢¥2ßù‘/§ß)@ P€ (@ P€ (@ P€ @Ó`à+‚uÌÀWñ¹k P€MT ÜÀ×àW>Àú⇵ïá­Ic‹+äe@%Þ÷4nÿÃݸ0ÎÎoß|ÿøÅ«F E™8.c_ºñíeüG_ üÚ Â|ÝŒÇJg"AÚK¨mêÌ¡ø`b&þó¾štà ÅMoeáÚ[z£™{¢ë_. ~ (@ P€ (@ P€ (@ P€M^€¯V1_Äç®)@ 4QïÀWxzüÐT"Ñ;δ逸8ïЖeËŽ“(?Tûqš·ŠA«öÐ2Æÿ: |Yôø¥ ø |…[ÔPÛTeéa”)Çéè(DǶC›ó[û z9ËÃÀ—S‚ï (@ P€ (@ P€ (@ P é 0ðÁ:fà+‚øÜ5(@&*P[¯ºæaà«®…¹ýÚ¨ÍÀWm”'Ð6ø ¤Ãy (@ P€ (@ P€ (@ P i 0ðÁúdà+‚øÜ5(@&*0åÝyÈÿá n¸cš5oÞ`roAÖüûC̼u"&$6Ør²`g·@Ù‰r¤ÎÍÂ¥ƒ!iè°‘»ìœ8P‚÷&<Ý ËÉÂQ€ (@ P€ (@ P€ (@ Ô\€¯š†½¾Â¦ãŠ (àGàóÝÛ0-gÎmßçw錶:"¦U+?K×ïä3gÎàXi)ÊJ¡øÛïеŘ“ö+´ˆò?ôcý–{£€·ÀÓÿú>)ØŒ Ðþ‚ Ðö¼hÞ@ÎÙÊ“'Qvø0ï—?Åøå•ÿƒ;¯¸Þû 8… (@ P€ (@ P€ (@ P I 0ðÁêdà+‚øÜ5(@&,ðå·Ûñîæ5X÷ÝTžv4¸#íÔö<Œè™„Ÿºmc[7¸ò±@P´6ôÖ†ÕøxÇרu¨HÕ >7;§úvKá'}ãù_ (@ P€ (@ P€ (@ P€M[€¯Ö/_Äç®)@ œŽ3§QRþŽ´7ˆ£jÖ ZŸ‹scFc ……hTÇOÄ¡ò2œ:}ºA”;6º.ˆkÇ^òDm° (@ P€ (@ P€ (@ P þøª?k¯=1ðåE  (ÐÀf¯ÎCÂ-Œ¼¹•ŒÅ¡@ãøñìLÌùÙdôèxQã<–š (@ P€ (@ P€ (@ P â |E° øŠ >wM P€A é×úr«ùcPËs! PÀ¿@þ½˜ð—qÇÀkpÿÕ7ú_s(@ P€ (@ P€ (@ P€ (@€¯8u=‹¯ºæö)@ P \•'ñ_|ˆ¼â=h.C1vëÐ ¯ú âZƆ»I®G³VÀ^y l]‹Å?ÃiGÿX¿ ‰çwÆØW³§¯³ö¬àS€ (@ P€ (@ P€ (@ðø ß®Æk2ðUcBn€ ‚8}æ *Ïœ–ᨔ!+µwù®¿Ë÷rûqìûá0ö•¾²h=¥ØcÜ ‘hvÎ9x{ãj¼·yRéÒ¾#:·•?í: ]l¢›7—?QˆjÖ-´wý{sù®}n†sä|Q 1 híGûãÐÚùÇõ]Ú1MæK»:r¼‡ÊËPR~åýÀÑRì•v5²WÜrY²´°;*±ò›¯ñÞ–58&m¯k‡ ѱu[tŒ;×õ~nL+½MiK­miíJ{o~Ž|—ÏÚôæ®ïlgùübÙ)@ P€ (@ P€ (@ P€ @¨ |…*V‹Ë3ðU‹˜Ü(@³\@ i}¾kö”ÄQû ùS$H¢…IÊOÚqºê´E´ÀH3´nƒÖ-ä¼Çµˆ5Þ]Óbßö<\qñôé*«Öë×ú=;õ}?uR¶{§ìÆÙG¹|>n¾kA²3©’ ÄF·”žÁbÐ6¶5ÚHˆ¥­üÑ‚b—ué'"&*ZÝ ?S ^´óyÛþ=غÿ[ gý`žË']çðqí|–óü¤„³ªäÍ$hå [ÅF·ó¶b[´DŒ|ŽÕ?›Ó´ïÚt™¦÷½.è¢ÿÑ‚‘¾^%G‘'åØ/ËŽS8)½?vùl¯¬”?ò].ßµ2<])m¬ gªÎÈŸ*=x©—EÚ[kÙ+­Ë»V­½Ÿ×¶N—ÈŸ‹e^K_Eá4 P€ (@ P€ (@ P€ (@F"ÀÀW+Нâs× šˆÀ! ªÌúä=Þ+ºöFB»ŽèÒî|½÷­óZµAËèèÑÖ֫˜+>zßK°å{ ¨í<´_†Œüã‡\Ÿ& mål"§#€@±ô¸µhÝ*¬Þµ}$•Ðþ|= u~\;\Ц-:´>WHiá)­w»ÆöÒÚÚI ˆ“ö¦õ2¦…Ù´P™öþý%zÈm`B"~6pzžߨå¥(@ P€ (@ P€ (@ P€¾"x0ðA|îš @8åp`›/#UÂR7÷¿²Q¦´ÀÚôaxÏ$Œ•áîø¢@] hAÃ_¿ûgŒpµÞn´¡H϶—6åÊ_cþ—+1ò ¾¤×ÙFÀã¥(@ P€ (@ P€ (@ P€^€¯V!_Äç®)@ 4ò7â?ßlÀó7ÝÛ¨¦Hzüšô柰tÂSú°yú`Xø-ðÄoàò„ž¸¥ÿU ºœõQ¸íÅ{ð䲿âí{¦±ÝÕ8÷A P€ (@ P€ (@ P€ jQ€¯ZÄ uS |…*Æå)@ P@È“ÀFUUú\t‰:¹Q~~o󤨣EÔÙ×ãR£¬°FZèóÖáÊî6œÓª‘Aí;gËŒºtb¢¢kwÃÜ(@ P€ (@ P€ (@ P€ @ 0ðU§¼7ÎÀW`Î¥(@ P€ (@ P€ (@ P€ (@ P€ ¬ |Y=êõ_õÊÍQ€ (@ P€ (@ P€ (@ P€ (@ P Ñ 0ðÁ*dà+‚øÜ5(@&&P%Çs§q²ê *Q…3ò§¡¾¢q¢Ð ­Îií3_ˆ„Àii#Ç«Nëí¥²A·˜Úщ’¶­·»fú{íl•[¡(@ P€ (@ P€ (@ P€ˆ„_‘P7÷ÉÀWñ¹k P€MH@ ®”UUêÁ•ÆvXqçD!Í[±YÞF.pR^Z›i¸±ÈºŽ“°eœÄ.ù¢(@ P€ (@ P€ (@ P€hœ |E°ÞøŠ ~ vm/ÊÇW»É¢ÑcðPÄÇÔ`cúªìÙ°ßUÈÛõÀФøšnð¬X¿öêÁŽü/¿Â¡JúŸ'N=ÈÃzØëL£=º¶úŠeè«ÑÖ_c+¸ó:RuªVÂ^ŽÒ½X¿uD£Ë€+Ð9.X ;v®]ç´ßžî¸<é¢`W¬µåΕv׊í®Ö<Ïö mù»Êäfªu<_ÞÆí1ï±ê÷¼àß)ê×»‘ïÍQŽ]ÛwàP…üµhø.>¿Æ±mä(áßQºk¶~'ˆÆ%†ââ ïÂß'׬K¦ýû‰óµöþýMÝÕ»¿2ÚÉ¿Ì÷üw€ ýá=ûL¡…Û¢ñ|*/Ú…{AîRÐBþ~aKºØüûEã9–”þjï7$¿éþ‹s(P·þîÕêv¯Ü:(@Æ!ÀÀ—W=Æþ‚9uh‡®½/Ak¯eŒ Çö`Ïí¯Õ¼ül'øÀW)6¬\‹ƒÚ¿‹½À†k/¿¸š–Ëò¹Æòí1|höáPX(³7̉¢¯òüš#xlhûPV÷±l9fõkƒ‡·È¬¤—qdódÔt‹>vÒä&ÕZ=”‰‘m†áMˆþMî<9è¸ ãxôD!r?Ý.=|m/ŒË{WwqàÛµ¹(,“–èóqŵüþÖù5t”bçúMز}¾ÝQŒÒvY41çµGž½Ø·?ú$% ¥ß ¸g4“çŸÓ’ƒ;ºIø©ŽH@ò”ôðeyÙå|Þô֯݊]Å¥°ëç3Ð>¾laÐÐÁÇÃÛŠ ¯ ç )ú¦žX³©®í™{-ÿ/n=w8¾Ð¾&Í@þ¦ÑÖœU_oÚ`ªZ»ÓÚ_¨™€r/‹k°æØ* ÕÚK£ºÇrÿ}K{²ÔyØõH:?p/x{6¬Džü­Eƒùû–Rµ~Oëö©öï£å»°2·§Zhç@ ØF]‹‹™#ªY«åµE+qkçë£l7éù5ØüØPe ?†"P¾aÚ |X_¥vþA({ç²µ.Ш~¿B?úHœ¯µöïoB?Ü ×ðWFŸÓü9R—÷A“6iÑ@*"Èb8°ò·âºßXîRä_¹.F-P‹¿!‘øMoж,\“ðyOÖ¤˜G P x¾T+û~|úþr|Sê0§Æàú;ïDw?ÿ‚zß§Å¿¾ÑpW÷ò½ _¡Þ†º|uÅç|‹@íßX”cÁMmp·öwÙÔ×pì½I2ÌRð¯ò=[°Qº‹ï}z4¹ÿ*»[¾ÜŠŠçã2Wo†M­ÕCù | ¬ÅÀ—ÿ2_«gÓ’ôªim–žŠÊ6Ìv…N.}~5VN½¢šÍ–ãÿúwÄ“ZÐñìè \Â…gg΋˜0f¶W³$ÝEÿüFö¨~ãìå«:Lί ‡ôëU"mÆý*GîÜgpÛýrOòóéϼ‡§ÞŽÎÊ}aÅ–?£gÿ_ékL_·¿¼<ØÀ×F | ‹hàK+tðí®ñ\«›ö}‘Ÿ“3â“•{Y¤bý±÷Œß”Z¿ÇªÃUÿþ¤í¦Ú{òÈ=<ôŽ+õPmùC´T}…ÉìùȈ½/¹6Ÿ‰'žCåºéšÅ°cÉÄXÜ6ϺûŸÏߌ¿Ý•dÈoA ”o™ƒ6ýî×—yýLö~ è=pÁzh0¿_5¹ÿò¿n$Î×Zû÷7ux"ø+ã–9¿@¿ûÿ®ïÙÕ¾íð‹ØÐ§Ööon­cÞÔJùêb#þÎù³Ñ¢.|ëg›Ž]‹Ý3Ýcg°ùÄ\$ñ~ÒÃ…_­@-ÞgDâ7½!ºûÿ;rC,-ËT€¿úôw¯VÝö8Ÿ ÀÙ ÀÀ—YËósñÁê<8£^Æä8Üpç8\âó/•ØðÏùXWÌiÒ^¶s›×v‚|…ú/B]>˜Cà2.­«Üíû~ï2|Ó¥½Ñ>ðüïZÏÿå_>\#¯U¡¾ÈɈÆMòT¥)þWÙŽ¢Dw¾Iè”Þ"LÈÚ«éÞ=;~ІtlÛ½/òa½Ÿ Tf?«œÕ“éUóê?PuåJè䆗Ö`ÁäÕl¸oéˆGôÿhòF¬8ºIÕg²ôm~ÿï'1(åeû}qÄ‘èßYÚΉRlúrþýÉVeþp,=°CÎW&ùøØZ†–k#CÌñEº°KÏ^eÒ×þrìÅ+cñ;õ?Öf$ Ç¥[Žh?=Øn9—µ™¿ÂgÇ_@OóÞ0ìÀ—Üq~ŸŸ£úoOgô¬áoV²p^Á¶»Æs­nÚ÷EáÔqý¬£Ü˪/9Ïkó«NEùû“yÑòм÷f¦úëYY9æz}ÐèWÊòß)ªÑU|ü†áì»0튞ÈÖÃä²½¤g±sÓèÁŸöjpë{v9æÈlt¿þÛ—„…›?Ƹ¤jnÒ껈p|ØÖ+-`‘ÆïWMî¿­‰óµöþýMÀŠ«ÑLe¬6ðUÛ¿¹5: çÊuxOàÜE{÷Ο} ¬jB*Žz}Jš°Ÿ¾2®þ½{HEà¨ڻÏPÛŒ+”\GаvèïÈ «¤,M0þëÓß½Z0[å2 šº@m¾Pæëw³Wi"÷rTmÿ÷Usçεþù‹ö}aÕ·'ü•ìDÕg ë¼#Ë9ªªù¿¯?¾·áܧï¹ÊÔë«~é’BûsÍkUÇ”Y>?†º¼Ïpbý «šŸê®ß#!íøûªg“ŒuS_ÛÒšaáƒ?kœ÷øyÕz¿m±aIc,s$éUsýýgìU;7ýÉl+¨’ÀW•6-💪—œ×ÜXµâhu˛󯫺Õù{$ï·¾ôaUþ)ïuó >´,wéãVS{Õg*kŽÁ-P U§ÍsQÚ@ºùÛkžÓ·>ÿª5J,çê·‡ ª¼t¯«}é÷b/©Úk¶1µíI_–u·Aïv‰åƒmwçZݴ9½#8[¹—EjÕújÿ²Á¢úÛµú÷'íš ß_§V­ñ{,Ê1ó÷3û yz sÜZ¦ÐþNQMAT_Ç[ù]Õ³×(×Ô¤g«vòg½ÔÍ®Ü^5ÁüÝCêüªFòW¬a¿Ûc›_sÝ+ÈöàWä’ P“û¯@ëò| €îcÖæ×~îݾ«û]ô±úT‡÷õ{ AïÍÿ9öYÖܾp‚«½½¶™w) °ŠX¤&Àßt­Bý¹U‹„ë3$.B PÀK ܼÕ[o½UµqãÆª;vTíܹ³êmËá¤ãÂMœ…³/ßëØ‘»è¯È+—¹Qpý-Ãqxå?±±Dëë+P_v|)ëmÖÖ‹³áÎqÉðÙ˜ïêSÃêá+˜ÿrLý/°-Ë;P”¿‡++ѪC7ôˆ÷Ñ‹ýò ŠQ)½WuJì ×®é­Ð-©‡ÈHWÙŸåbË®bh#Åuê+“‡ÂµIG)6¬þ ù{ŽÈü8ïâît¥Ì÷‡T~[¶nÁ7»‹Q~Êj)î¼0l°ïa ½ÊcÇ® _acþ^}ý-ÎCBÒe–t1BýÊíÊGñqÍ(QŒذr%6Ëq ÅÅv-ÚÛ‹°³ð°µ’¾zøø/Ê¥,±m÷ݦE\\6d.–®Àì‡v¡ ø8¢[u@ÏñfÙ¬ÿµÙ éá+ª|Öäþ{‹Ë ¿N ²aú6œ§Též]8P´÷K7†#œ0ÛŠÊÊVHì}±ë|tˆíöb»·XŽ¡…¬.õqa7ôp©ÔW¨:ν;ph×vl)øÅzµÍÆáâÞp¥ÇЋÎ5ÜïvìÙò5ò ÷¡øH¹I««>,ç•ëô°—b×÷°ñ/÷ã¶ìOôUç¯ÞŽ«å?>¾°«8ÄÀQn­‡6Ç´ž×ŽëËvs×ï¹fž;Ú‚­º$ê¦E»¤]HûîáË<Ömr¬ÒÞ5Âq硋죟«ecA”Y/œôv¡ÛU·=ca¿ÿ,/Ú…ÂÃZ/5Ñf›´.jœkZKÎíÖÓ»®¥îÚ¾r6¢ƒçüúhA{YKýæn«Æõ¬¼h r¿Ø"õ$×9{_~%†öŽw­Rºk>[›#rÑλî—“ùþ{4°ÊÇŸnÀŽ’£ˆ‰‰Ñë=¡{ôíç«ÝCê5ðµã|Ks“vŸ‡¼­²ŽV^ó:y™\·.v]x]Eø¡XzøR{ªÓ¾J?Ç­®3†¡Kýv.½­ý”αë-$$Ž7çÞ‹•Ç_Á¥®Fî½R+éáëÜj{ø’ß1³½¶ê$×h±*/ÊÇÆÍ;p@®'ÚOr§„$ –ä}mV~7åzãØ³+s7Ëù ë ÿ±ôn^ý„s½ eGi‘\çËQúûýJ÷äcŸtYݪz÷pŸß¡œŸvéÉ2okòåwCûIÖ®yÝt.“ßÔUè]©^SìÈÿò løzŽJ›’V…óä÷­O¿¾ò{ë£wE¥ÎŒ{šÿÖ;{øúaí+è=lŠ«„-ÏCÆ Ý]ß=?Xù".»~škòóy%¸³wœ¥íMßT†_&Eáû-k±që>Tœ”kM˹ó@IDATöˆïÛ“<îG8°kŽè¿=Ö¾ïúezl‡®è*7V'íÆ×6¡h¿qOÐî¢.è{ÅtöÛŨ‡åz´}géëH±[Æ¡óúcðåÝÑÒuÚ™TM» éZbý*åô1Ø6ì}‘¶¯Ð®ï5¸î:0e^°Ç¨¬¢ µ­º¯Æï¦v¯ðÕúï7-û”{‡/?ú_[bü.žw1.tzÇGÉðä±ÿßÞû×qÜwž?üåJ”DÙ’e[¶LÚ²%‘“«µnã{NR§õ– ©œs•r ºŠË j¯î#©Š²¸u\¸.[H•!® ÖñÙj»"؉áZ¶VP*µï¢²H)„,B! ¤R E€x €¾_Ï{3óëy=ÿú½‚à÷Ià›73ÝýëOÿú׿éùMOåõ䑾|›õ±ê–…-~>Û¨Iíyý$öSùϺ#ýWŸ`úïq+ôæÓµd_âüWï¥õù$ßß”)ë5…¬nì¶äc\_êgèÏ?ñ.úüª©»úiúÙ?¦% 䢯Ïâcm†ÿ[E”ööûõ¨k}=;9ûßèîW^=ÈëØÑ‘éÿ“òüÀþ;>@·Ò¼³Ÿá×i‰íʧþ…Þ¬ú·w°ÿðóÞ59á/œ´_{Tçµi~™lÕüjWÛ–n«+/Ñï°?ðÚ Ezö…<ó9ÇÑ?©Ás4Ž\C*q[îs îú•·Ìpì7Ưæy}ÓŒs¹ü¯ç i¥¯y®g£ó7¾›ÏÞ™umôœˆ¶¶¹¾ÍXá«Ñu¹}ï ûfû*¾Û®>A^»œ§=óæm¶¾ø•ªók›ÊB×ëdÞ¹IžÛÈ2òmÆXv;Ù”:²}}eî-zæÿ¾›>ûW•öí9BðDp¹¼Ÿ>Às{á”ZvY…¦T73ÌI×$ró3j²‰ìpõC²öÊJ8.óäÒ‰ÏYw1N6kÞ-‚1ø)Ç]6ÏÒK|æå×ߤ%=ñÇóZ]<ÒU³ºz#ï—eõ büŒjmòèF=czsmоU’on1*O–ùŠ<ó@²Än¸ûâéú[hõ@ö¾æû |wrÿûºÂû±¢¿ÿësôüytŒÉÛ6aÖYm¨[¿JkÏöÈý@ߟ åË;ß'ç`çÉdáØ«HÀ5Þê‰'ž Ã‡Óž={¨µµ•uü¸Fœ9gIVRÅÇ¿ªÿá1µä•+w%¯ðUôWøzü§'c7}…¯Å)UðŸæíR¶çN§†‚'i‹áLJ»«û jòøÕççù›)©ÒÌXXŽq¼[MÌFŸÎ)«©‘þ Lî 5Û=ƒ5«šIyŽÌWƒ…Út^^݃j6ÏÓå¥ãª»*Cah\öÉ| ÞSþSC…@ÆÁÈÓ»¥™ñ }´.c“j¸ÇÏO®~ ž6ëVG&ƒü£y NÎVuxQ UWöŠžÃïO©®F° &Ã'£jÏ#ÕÝ?ªæ-½"iWy¾¨úãx{ìzÔø´}9„ùâhŒnh.a:©‡Q¹ùÕ•žxÑv8>¶K!aµ³é_—I†¦”â'3 Õ6§H¿X˜W½±œµÌÝj´X!˜Eæ<ù%µ>6Þëë©ñ¹¨’—ÂUã¸n>3™çB1Ô³pu¸ÍëYxIyk¶¾:©Š£}ö~Ó;Æö¹¤ÆúCý:U˜TQzŠ­ãø`ø¯<¿²Ý¥†&gL‘ yì¶ÃO°Èz¬Úèëžøî³Úg?}ô[¯ $Wjæ _3GÕĈW9J^‘è¢*;ªŠ¯ŸV§V—RÎ͸—쯽#jb$¦Ý© ÆŽ‡c˜fŽÝj|rÄÐÙGÜÚÇÅÞæOµ{Q]P¥¾0ümU¼TÑiÙ÷¾ôÔ¤úR°r^˜¿g7º¿¬ŽÊÕð–‹ê~¿ßw}Y½ä¯ÊÇ«è=PÝÿ£“ꙉ/º*íÑž:Y#÷é7¨‡EÝäù•íϨÇN„«˜¥­ð•ÕV»´¯ÑØÖyúˆÐ}ŸkðíûEº4·Ùwá'ä´;Öj;óÔQ&L«‡¥¯vàˆšžðWQè*s ýͰÌòìdìØÕ38¢{ºªº*|\i³cmR~YÜüí°.Ö-±RGÏà°êýhH\…i…ÿn[ñÊI×’®C~QýîGjÛªÒ¯}2e¾¦k”¸%ø˜+NÏ«aÃîõ«éˆ-7óMÓ][LâR¹>óËpÃ7ÏÿõåLü6új#}Ê$;Y¹^pö3¼ -ª‰ð:Ë jr2\Ë»3 ¤é…ŦUÓ»µ¹«í5„6~«+LQCF¿}·{È:?á2ŽJ?©±s4ìQ6øzŇå>—à®_NeÆŒ_’y^ß4Ï\@VÿËç*¿³¤­W_]ôÃj_rØ;YG»Ñs"V¹°ÍXá«ÑuÑ×…Á›œ|»œ¹=òöÝò®ó›Ë⸘3®ï ̌…óµ]ƒ<7™ö1ø6v,¯lF“Ú1œçV*¯¬kÖ9i™ÆÅÞÉôömW?$_ßqž'¯ íR÷pœìn¼›¦¿7,›ÔðĸꋙÏ/ôGæ\t¿,—_ãgèùм÷rœÇô&Ú”ôy‹ooÈ“uŽ éúÆ¿Fö5$ù»>_ o³µþI›T§,nþ¶Ï/æ[ÈÚ=2­ÄëÙx$Ëë …½­ ør×µøë«þäÿˆðf®Ò÷7nîÊ>ŸxMÃ#º[ð ¾ÔHð0‹¶w}ê¸ý™jnÍàꛫµ™þo«õw¦1Ûŧ\T£½â1Y_ÇõMãn.?ƒ+2< ¦uÿ¼kψ[ÕKóúÜѦq™®mžo|±¶RÍN9úvŸ%à:ŽJ¿0(³s4®\k DwÔ1—à¬_®eJ›'Æ/+ó,óPÑëójç¹…([ñ;‹ïV¾ºê‡dØ—ŒöNTÏØlôœˆUF.Ѻ_êH`ˆ™éG£ëRŸOàh—3µ§cÞ Óu^øl¹ý#yç&¹IêWþc»fŒë’L××1þsÝs`.v² uÔíhÎ+k¢K zž»ú@‹¬Uðyæ¤ý¶rµw~ú¸o7?$¿.:Ï“³à®u—ö2ðMªýÎ÷\óŽãéï·—Ý¥ºùÞCô^Ha¨ò0¹—VÚs1æûùêo9ncï+Óv?ÈðcÊtÑ )[È<ƒÚ,›Â³ÙNs‹1ò$ÏWd™’-ißn¨/Ñw{‰á^·þ0¯† Õk..¯oÌ|(]¾—ºGD@˜cÛ°¸¹mhŒŽ‡5·õ«ôö”}NöEçù>'½“µÀ6€løªi‹Œ_¥SjÔøúêªX|J=ñø×•Äõõ¯?®¾óÃgÔ+çãoŠúçÖˆÝ!È, |~p#DžŸ!é$ÊAsz$|òH;½ÃÅpUœù#‘›@¤úÇ ¢ÒìD¸‚R5hªRE|c¦ÑÇ玄OëÕŸ¦ʨ<úéŒy±LÏŒ $“ ¢l£¿kyŽüžà›>‹‹üW αû©k@É’éñè* á͉ډ^™fJ¬»µ8­ÄMF¹Ê@IÜŒ2.øi¾áÀñãü¦EÔ×yþ¸\…­WM vQ$ò÷üQ¾à>¾ –çÄ fX3ê€~—º|² od*ÔŸò¼¹úRßDõ×!x2ZòªH$yWt•'L‚:“5 ¡Ì«Ï?¬•˜~!Ÿ.+ô ç˜ËÈÜ3ê;Öñ2»å'éG¶ç'ƒ~ÕÕ?a”ý¸R_3ðE;Áá…?u5úc2`®^¸83aØÒaãn» Beߦ|mœ5VFÒüïÿü«oªߺXWðWZà‰W[Ù_½ö×+y {¹pÜxŠOÚ!ã (NÛÕ;¤¦çÔâ‚*y¦Ìµ}\ì­Ks2IŽÑ¡vˆÉl9öeÐOs‚£[MÌÈ»ö¼ª‚\õNæ³5gŒa=CGŒ`Fý„®ìË2€µc½ø2Vª“ÁV~ÐUŽïhÀ×ýÿþ[êE±’Wñ»b…®‚\ÉK|DÀ¯ðõ§Û¾}û¸úÚ1X¹|L="|‚/=ô»ÿA”Õõûêé·ÄÊz«¯ªÁýÍ:çê&/X‹€xëx:/‚ÂŒ1!¡¢5þsƒæÀœæy›TG®¾œ·Š8—Î6ÝiNÚÝÞ%´bEW¿ˆu1ã|½›.:Γ;ûXfûéñ¥qónÉTõQi«ý±MÞ¶8n¼"Ã5«(RŽ›²O»úòÚ3ôÜ|T)›_oóY̘Þ$›â¦« »FžìóÉ×È¢!­›î¾¸´Wv}·(vÖag„ß ß@sÄ¿õ'ǹŸKunšÁO’º+ûUR{Ê~.Ó8Ï5Ô¡w¢!±  [‚¾jš!cÀ×ê)õDðõÕ ÐËâ’ßߟ:SSŠÞáŸc=(wÊR;Ë…?á’ð'n†N#g(ó‰™È2ÐOèWå,‚à âW¨‰0 >£¬&úüÒ¡žæ×¿ðSz5/¾y$Wõ¨d+_Kç¯lU="'¨8¸ª6­tÖ8XLÞ·®Êlÿ2Ÿ²ê5–<­¤°;æÍ‚QË»LäŠJÚ e2'ŒUƒªBJ§ENËö’ûƒà=™áÝ”©­í,¿Vc`hD1‚åjÏ ÷ÌŒr{u{F69ã²ÒŒXÕ¨Ç\åÍË}±/éྠ>ÉÅlÆÖ³cáëÝ¢«Âé4SCáSæ}ãÕçìbú…tÚ‡›­óRüdÙðÀ SG¦ý€“x™ÝòóJŠùGm™}`jXܘÕ:À2PP- xwõOVòç½›ßãyÅTZì–i¹~a‡ªœ#ê¨ë?:iùpE¸°ïpžbbn0¸ZÅF&>F‚¾žn;JÓb•;¶y¾Ö¹ _µ´<Á²½¹_+êôë?«|UôK3öþøuw¿ýG_VýCQ½X}å]Ú IþñL'²¿r™A?\Jr5A1yº8%ƒˆy%ĈJ8·?±­dµ·.i¸Ž6»'ªÎ›¢_ã|š~–ŒIéÁ#6íäq®à·w—š¨y•¬)‰ÿËh^ÁËŸƒðëïE¹˜#䘢;1Ö{_ÇÂW“f{jü `FÀWáÕó5Áb¯Š­pe­³r…/ðµq^=W‘zä©Wƒ€.¿¯U=í+u fÛ±ÄúEº®ö½»SS/¹Ã©ŽõôUaØ^Ùü8¹ºD0+ý =žúÁÕae¤Ÿjø¸’a“Üe‘äó·Cy­[BÖÀ/X(†1ÌÌ\}AÔ!Z7W]c Wò6–ëx×µ2Å´±l« žV ‘‚u÷«¡þЧÖãÿX­ŽdÀ²5‘‹ó~UüßššŸézà\_]–lKÖ]9.»úóÂ%1ŽU‹øå¡î¹Û4gN¶7¨Iì†ì›ö¹ 9?ÎÔ3Ž~’eE —9g®±d®s îú¥”k™Ñ~â»>ó¾©Û\€´é¦ÿRÛJN묯u\ÏÚíKº½‹«ae¿ôQÌk—9»Œ1×`[êëH²¼IG[wŸÀÝ.ë`äd?¦ž¼“ØécI:/Ù}`»ä.¯a·xõöÈÔƒ’«¯Øæ4ìµ5ëј90w;Ùœ:Æô·*W›î2'Ý´ñÐÉq×E—yòzêÞ´y7{§0öJ®W®]]û¼ñ_ ÁžËqS™¸úV?ÃI7ØúÉ{dÖûkvÔ´›šWw×Õ¨<Ùç+Láu†¡±?êñÅÓô=¶ÐêzúšÎbv<¼¦ïÇê{°£b>Q>PËÎó¾.6ÔªãÕzû_Rwe¿’û£í)ûy˜&Ò·sÝÏ1ÇÖâÖG¤Î¶]gW}¯Ãîè¢ã?u¬«¯ ûÀ«bFƒ^µœVSú¸<6Fã§½ú|…ŽHv±6ÉQ–Üþv|Køu¨ñ ø€´{ÄãrhOY7ƒ…Å?©Š!'góø±:îå+dâ›™Û¸*Sâ—ß–òÁ"ß_áï¯6›x¥Ñd.îcxb­½ƒ÷ÓÊ”íh³9y]õõÛR·ŸÔ]Î7¬«¸Î5IJ‰´á5 ¯î5a½V“ýþ`b…¯:lš;Ûk0°ÿ}³7XýYž+Ø ¶žqT–Ù¨9w®²®ŽÛB7åî¬_YĈ)3î&•džÇ7u› °ëL–jEçâÏF™õðW+—9ÛË®G?ìöE–c·wR*Ûv¨õωØeŒ±Bw¢¶Ô&g–}¬‹©9|‚:ì²Y¦¥=ëÊ; Ô%á‹zÉä±Mba\߆s•ZÈ]¢²&ÕSÖÃâc:™q,©8ÿ˜ÈWÚfýlx ߨ:Æô7_–´ïY]æ¤ë±wÉb:ø!õô‡yòzê.Ç—ÆÎ»%SÕG¥ 7tU$ ß`œ#ô&ΞËz÷‚8_¹?_`÷3t£F†ìcºi³dSêÑUcÞ)ÇA„AЮ¢Ý“6å‹Ûô=©\}¬ž¾VÉ›ƒ¸zÃûÃ]]áõEƒëhj×q“ˆì?qý*Úž²Ÿi¸7æ~N>½3kƒ_  põ ૦ 2|­WÏŒ«qý÷âz³&žë’*>!VþzâYµ)Ë5à«o`@ $ýõ‰'®ÅDl£ÚáãµÏ®™ƒmÒñÚ‹ÙòÂŒRý½½¼zTeå2í NŠ˜Õ¥C`“ÇtZkËŒ4…ø). c‚-̺V¾äÅåéÚJru)“(3&­¬¯ttâöëòŠb5+?0°ÐÓ«†FÆÕÔL–à%ÅØ,«™â¸èW½=¼Ú¯6ç·W—¸ $å”ÌìíePý!¸DÚ_Ÿ ó ¼È{âå*ÆSÒé•m'û _‡Î¢ï<ToÿŸœŠ  KÙ)?—pŸlÿà© ^-Í—{ˆ_ \¸}>2P¨êD'eøYMí ¼ÂjÆl‰´¶~#Û5åx «iiª’H] ÒÊ SÁZ /u–ºzØŽ÷«þ~óo ?œ|0VI‘E¶¯JÀ—¶zV=sôêÑG¿¨>Ý}OlØ`Q¼’ÎOùÎx’©X7‚§öB—ýŬTOû¸Ø[—4RÆÐîI…ýBÚ³4ý4:HõôÔèf?û½ÒÆOÉ‚c·¥Ìñö?½ÍìiE}-ã„M¨š€¯ê« ¥"º*Ï•Á–ƒÇÎ76à«[¼êQÈ Ëô·B™–ø5ãßV_ú£ßW=È«}>®îúçeüJÇG‹¹^é8<%(ýs,¶·‘n{ûÚÚGîsé#²Ÿ‡ö™sÍd;ø4±rE>SÚMªc]}UôÛ¸¨[J<l¯ÿ·¦íóÉ.Î&9Ë2#Kœ¿m“[ì²u÷Ë›rrÕ-ÁSÖMäc[Ù/Ѫki¶š[ÛÈÏT¦ÏÃ5HŸ°!ë%'’EÐW¿²=ö#ÓÇȦӺr‘c‹µ¹þo,¥ê©[–¶|V]õ•m!u7’o?CÊ7ÈN‚>V‡M“eæms—ñ%µÕ„ý´3í*|Y{:]2§MñmmieÞ5+ÁíŽí2M^®iŒ*Ç›3—`Õ¯@ üe~ƒè'ÒÛ˜{meó™œæì:T+q#9­k=êÑ™6´/BΘkèÄjòAY—zçDì2š67=Á–¦Éw¼‘u1t1fÜ•å5Â.eÚÚ³›Ç,Ü/tIØØÊqqlÓXDÞ00a”Åjó]})óay+¥R'mõǃöòw°“œ6 RäßRǘþÈ©7òË*û¶Ývx?dšF‡¹ýºúŽ~ {8ež¼žºK»Òèy·ÚV2÷H¹‡£‘ÎÕS­×¢oÔðe×-Ño¥mŠ)3·np½$ó\24æԥ«‚•͆Eê*í˜d ÷›bÿeèåžg%Ë–â‹ÛôÝ^b¸W–ílg˜¹ÿàšÿø¿ãÑ{Õu´”Ó®ca‚­Žó†l·À¿Šì¶§”%H#ËŠÑ]®µÿ§õƒyt¾ø€€ÀV!€€¯š–ÈðU“β£ôŠXékTŠ ´N_üº¨H6µóê&Á@/&§â&­dYÚ`0 ­ƒ­õx8™¨ÏNˆU”Ä ƒÐAñ/JÌtqr†E 'Q:Ôá 1["]Œƒ`­«t,$s£”¾†FÖG”“VÖW::qû+Å–Ôä° ñYúßÝjhüxòÓø†üüƒŸà _éåçcÿ–rJf}©ï|©–*¸XÚPæ)u2n²÷ˆxí¨©°ËF™¶ö”ÌrÚü$l•cB—„­9¶i,¸dØ¥W‰õ_¡,WJÉ|ãÜ«ˆ¨£­’oÊñ ½u¾®vR§mxcú›.Ke•};뜴LcúqãcŽñ½è\óõ²múNÞyòzê.íJhë+ͧÿ­'ï0û–ÌÛV¶Ne½Ö|m}‡ÓÅÕ+n(¡è·Ò6Å–™S7dK•A^cÙê+c5gq<°)b_¶~Ã+E« V6y"u ÊLØ_Í8ñ+‹Þ¸úâ‰óAYv6^v;3'_íÈ6ÂúV‘:ÚFʙՆÆùÒ’I\ÿ‘ûe;ë´R– ŸËºÅèŽNkíÿiý€Ó%É£óÅ@¶ |Õ´D¾Ø/Žú«|}GŽ,ñåðŃ–‘X#º¿#n‹Ûï§ãoù*—`Ðäýr`“ûý¤ÖÁÖ?Èßáñp2ѼyBª«g@MÕñéi5ï÷››ŸSãÁ«Ât:Û4yø ·…˲)ÒÅ8a]Ä«.2°Õ2 Ûžö”²Æ”)ë+¸ý²bå…YUœU½bå7qØ=ä;Ö2•m»¤ÆÅSAD]ªxL§Ž«é™5;;¯æ¦ÇUW5o)§df{å§­´´6”y:)—¨¥ÊIž—ï3_G”Úve5;]T£Cª»`»°ç„‚N)ôG^ÈÌ“Ÿ‘ÐòC<©U} [Ñlã ¥ÊýÈpůA=¿0´QÏÈtçÕéYx"F6DZ[¿IkWq<ÐU±/é&íbDǯ¤öW³H‘‡¥—:KÝýjddX Çÿ «yO!àÿŒPLˆIJ|L=Øñš¹:_Œü9ŸS§¾§Ê õ…¢-& bi\À¿Ö4è«=ʰOÚKÃfTA6¢}\ìmž4RF[ »iô‹ý”ºÏmÖ?<’¨›ÃC¼Ò!¯ ˜å“.³ÎÅ­ÍŒúÆÚ\SJðuúÔ·ÕÝnòkS‚£º-Ëà««ðuQ=fŒÑ÷¨‡‡¿¥¾ô¨zæä uôÔiõü‰°Þ›ðeo_³eâåé#²Ÿ¶]g-uÜèf¹Vûž)í&ÕQÊ’»¯¦ØFaå'Ëì oVEÈÙýn™ÖàÞYŒü¤4qþ¶<Dz-d5t§zª\Á€zÆxo)¬³”EäÓ _ÂÚFAu¹é6ê55Ü#âHNËÇ ªy&¤—¥Zû`†k%9Öäñ±®Žÿ+klÛNoG×úz¥%´…Ì7Ÿ‘ž.ƒ}ÉiÓd™yÚ\Ï3¾Èt¶mÙ7SÙ ŸEÖÞN—fcÒÊLË;<ε„ûøº·×+Úf6b.!Ž‘dÚp÷2ãüYŽ]ÑE;‡:“g. -¯0×Ú­ä´®õ¨G?dÚSŽ¥µJØÓ¸9»Œæu| {‚-M6åPãêb\'Ű•zôY¯œv9µÌºòNA'}…š¾—®gg¡åå2Ë1ï½è¼m°jvu¾2­jÁq‘Ÿ­M%ß”ãA{×a›+b ™RǘþæænÓeßÎ:'-Ó4v< ”ß°q¾^¶mî~Éååœ'¯§î²/ö2¬rÓæEuRn[Ùú뵆äkë;œÎõ~™iB+ÎÏÐ2êOfÝàsÓ˜ÇÊ m”­Þi\ÄñÀ¦ˆ}:€)ßÜ¢°'6y"u ÊLØÏ‡R?YôÆÕO+\–íngæÅýÆê}+ºnUùBÔÑ6Rά64MǵXYú•lgFÊôsY·ÝÑi­ý?­ètb%ç¨<:_|@@`«@ÀWMKÈ ­ÚU¹jNOÜ!óz¢1+|% Z(qƒ\Üþ !?œ3>y š|\lr¿ŸÔ:Øúù;<:·á>Žæ¨<%.’x›}þ»§Ãtú@š<|Fx¦æb?ZŠü-ÒŰ–r,$[Û“lº^y- :’õI/SÖW:qûeŒír‰ƒ²Šj¸_u©ñ¹ Q%²Žü$ïø¬e­9ñt—”sj8,/³c˜Ò†Öv¨Vvr ÜxeôIŽ™¬WL›K†¥…9U^›¨/`ºúýeØE[fÔ»äüdÉöíÙà)½âÄœ*Tœûð ™ðUD…!~å‘pU½±™° %ÏÍëùy…DZ[»¥µ«8èª\Þ8®³²ßi¦•OŠ<|’¼Y<<¡ÏUsNûò‚O–‹apU¦€/óü—2z-©—Þ<©ž9ñªe%£0xˈyzø3A_|ô„íuwaš†|‰àZÕÙnípÞ>.ö6%ì§¶:ð(®ü d£_¤è§¡û#ùV~ m›ÁkeÙVÆ?Álhdm3—±^|啰€GR¿=v"“>Ÿ:ñ5OŸþžz~yÉK³e¾Ø|šWž ü¸zìÔÅÚ:½ÞŒ€¯p|ÏÛ¾6}IÝ—ÒGd?l»ÎÔÐñ¸WÆØw1^ÄððÍx‹ÝI­í„¤:õÈÛWSì€Ædó—dýcÇÆYÕïÛéÿÈ´ylR=²ÄúÛ6ØbŸÕÐà”Õô1~è£8¾EÖÍh£œº&}_™g CLÇÛ8HŸ°!øÔ¾ªr1dá1ê®®‚&òk2×1\Ž«›çÿ .ÖÍôvt­¯WœlˈžIyü ™.n,˜ë | z‘ϦÕÅÀÆ=ÉöÚÎì“öÓÎN´«°“Íô“d»Ød ‡s çês’z—s.!”3Þ—´êWeÆÝ¤rmgCô;y.À®3Ñ<ì¿“ÓºÖ£ýíê£3bìõ²ïmÆœH(£œÏÌûЧ]Þ¤½ª { áœh [©°Ë©eÖaó“˜Uމú lÓXTJ–+¡vO+ý:G—ž‘ãéÕ2Îu´ÕCÚ¼”ãA{Ë49m³/ZcëÓßtauÈê2']½óÙäúNòCÐwòÌ“×SwiW¤õYÔ“·ŸGÜ·9ÎX@á„‹SÃA´ö[ßát®÷Ë »(m“Ôç˜2ƒz&醮“¸†·1•!mœH“QXÖ¥«)6.R× Ì„ýÄfúâ Åz‡Ñ䪑þø¢¿kƘ:򮁠6;Fdzô+ÙΚÙÏ«amFÝ6{&­•q@6¾jXË ­¸€¯Uõʳ?Rßÿþ¸}ü uìüZM.ÞŽÕÓê;_õWøâ€¯­ðewY…Âá2nLÉý‘W¹ù© „2ÒILs­ƒ­Ÿ)‡ÇÃÉÄpŸž¸ O‚db9s"^¥Eœ’&O¼3䳑î\J¹FÒ±à÷dÛb9äEI'?ÍÁfIe}¥£·¿R¹’Z˜_ˆ½q//öFlOâG ±þtû7ºXDsgN„¯ì'/älaàHp~¸Á7ŠúzTwo¯êå×$V^…$ÚÂàUIem‡j†‹ÇG‚ ¸ž‘¢:2Þ›ÚÈ~q@K‹ ja1r¾/ôü¤*øm{Må3ßø\Шʟ©ß%Œmõ´¯Ù2¶_ùûˆìçm×Y×cßåx’ÓîØjeîË[Çzújšˆñ7 ·GÙ\öòlxóÊðq%»\6)‹,yým“|Í/!«¡;âDÓ—ï VL5®·êÑ5Ù× ^¡±:îâØÆaöñ[‚Qß Ålpì'ý抺Mæâ:†›ãªåêf‹^ºÖ×k®„¶4yd÷3ä’žÑé@+ ØÍ+äL¸Û´ºð•lC¯“¹¢²oÚü̸ëÄzÆÑ´2e{Úd ‡s4õq [¼f‹õÎu.ÁY¿ê(3î&Uó¸vÖ<òÏ›n™©alìHNëZzô#Ô74•aÜ3ª÷£ s"²ÏXeO°¥qbfÚß ºº˜Ë§p·ËéeÖ“w½$Ç6EU^özýëlžôWE-¨Él f‹Š§Ô#M'Åñ`®ÇNú’5´Žòþ´\X²Ê±6ëœt=öÎGÿש¿ïä™'¯§îiãK=yÇ󬑶:|ÚL%}Š^ßg}ƒ|¿Ì°‹r,—ev)¯np ÎófM°)|§Á}n1EnJY×ÀŽ%ì7[ßþKÚ‡ÆÏYÚËô÷ÖÛÊ3cÁ_/ÈÅ&ôÊ’òúÖ½m$£¬6Ôð¥ëèW²57ÙÏ_­És qzç·#¾A@`«@ÀWMK¬©gŸƒ´NÇÄrúÑãÊ%ãW¿ó¬=øå©Ñðœ'¦T$Þ+8V#BtG¬=±ú;î|ÞL²Ù‚’8€%Ó‘é#þ]{Î7MžX‡ZÈdßLw.M¹ýh‘Že˜ðoWû¥Ì©Á‚¿ò†þ9²N¾ŸÖ¬¯tt$`5=>A=ä¿Ï,ÌÎÛ’9qObIä ?~]`´Åô; Ð@OhpTàVÊà(®{M ÍüDxÓŒüW.J¦µ7ííàK,XÁåö[Ì?Óp@}þ|s§Ï¿±ïï T7d ×™ó‹jû-VôÑܽ?“ñBqH\TÎéêŸ423yF[·Yý1†—!YÜ‘ÖÖFqvÐÏN—}JB†¯kôñ7÷ƒž€³œ¤K‘Gg!ƒZ¸X'øæü¾PPƒã3¢àøÍJpÊ’úæ¿¿'l箇ՓoÙXŽþ×Ãó¸.üÃis% åÓêé£Eõ$ÿß”cçÕ`°‚ ëу_QϯÚËÐ2Íœø–xm©¯ ózñäQ/ÿ'S2žˆvÓºÞcy*vn" ¬£Þ± xNÚKÛ8æÚ>.öÖ%ÖÙOm7Tep«yC>]?e c\@âDõ5Ë…žAeÌÄ«§RlÿýWýzÁÛQó©W×@h›RÛLÞ$2ÆÕxü€¯³—Ä*w^ŸþŒúæIûkGO¿uT=Rðí«þ~X=SÕý-³Â—¬OáË5Aœú5–÷{õ¬ÖãÁǽ¾—©ßœ#ãqíßJJ¹ö©3Ò/Òe9Û÷:ìN3êèÞWÓí€Á/ÈéX‡úk|\“­áãJvÆX-ò4ö‡Ä²È’Ïßó¶n Y¥_`ž[Vþêá]ã>©ƒ³®É¾ÉÓ—Ãà"®¨wåêçžð-øDë¤Z_#îù£=#†ßÝL.®c¸Wk¯™šåÿÄb6ÒÛѵ¾^ m)yäñ3¤^’Üö+87®0¬uCö1g›æèW»Ž/~]â¾%«Ÿ)û·ôYêGÓÊ”íi“)<.æ&¹Æq ö×1— ë™K¿ê(Ó:GÀ•‘²Ø˜s;~;;Ï[À@Ú®¾5Éiê¡Ë¨C?B}“sBΘq¯¦jÖ͘ gެ²'ØRUšWǧ¦ÔÿÍÌY.~¬uðw6¦.†.ư•zл,í\L™Î6ßÇû-t©¦¿ˆc1r5žE(hðfõZÌó!å|ixjÊVJ=’tRç,Ží]Ò6®Žæœ‡agë‘ÕeNº{'ÐÔlºú!õ÷óäuÔ]ö%£ý|uäíg÷-m5ñ}¯Úq“øsý܃`îáý0ËCE¬?áq9†9úº¢?ú×V®º‘Ê\Úfß7ñ 6Á¦p¾îºš"ç-ëرèþškd¯²ñÿ4Ñ/´z¤®þ`>p5ñC5}úMuéÒ%õæé—Õ¾#Â8¿gN×}?`¬F¦è‹=Åø{¾ùdm¡oTÍÌ/ªRiQÍÇDCåf œô–›LýrãÛÚãádâôˆÿd“¾Q2 Š³ ,KIÍÏÕP¯ÿ*ÇêIvÄûFãÒä1&7 gÖ—(î;ݹŒ«k¸ôº–¹K óëóx…­ÙéI5 ƒ$¼‹‹ƒ!kÎÉÉA3œšãòfԙ®ô·á –eA·5¯Î²À“OCâ|¡6ˆ‡'*Ã@¾á7ZT œ_iq^MËüü6ëSǃձJæ«^ºúÔÄñYµÈ+hiÝë\…¡bµtS_ƦÔüÜl0a×¾èr¹ÙJëИ%€ÆÚ_„°îúGÔÔ̯l£ë»¨æg§  ŸŠ“ùl¸œ~®üüÚ$,< l3. *í3xÄ|œðêôÇ8^Y&EEÙúµ]Gq\^$–gåÓ1U=_äv÷lÓÕ_ðõ›¿{ǃ`¢,ý˜—˜ nWt²GOq?(—U¹´ ¦Œ}¬o\®Á&dl«]:¾Ö‘õŒèõðð·ÔwSÅ“ÇÔ÷Ÿú–z¤÷㦮pÐGtu¯™£a@ØÝ¼Y¿â:ú3=}\}áßV:pëù×_UÏŸ:¡ž.þ@ þQ¸’W׿vÝ8¯¾ôù+¥°L'¢Ýü~=0ƶ¨ÚF³ÅaÛä læÄ€msmŸÒt~{ë’F7»¹ºLAg<»´8?£Æ‚§…«:j¼z-¥¿pÞòõšmÏบåq£Ìú¹07­FĘÍOŽEKŒ¨¥øYVã½¢ßúy¼Ÿ÷ú”?Š£"@Ë•«0Ê1ÎÞf¢^Çú à‹õùÅb¨ë¾>ÝßûEõµ‰Iõô‰cêI›.³Œ!^Oºe¾ŒøH=¬ž¾´¤2õ;ž _WÈAíÆxìÞ¾BIj6ûˆxºUúE ¼0³}¯ÃîÔTLìp­£{_ýÅ6n²l²Ïɱ1êãON{> ¶=ãQÛ#û¢dg”Ù8Y²ûÛ¾mSÈ*ë^sêb$¨I·FÝêÐ59ÉÓ—C¶QTdzø"2}b=ýýoÁ'Z_ÿý½8=jø ú5‰þºÎ}0×1üêø¿’˜m;½¸Ö×+-¡-ÝýŒÕ§ûBõ¯«gÈ»vZ˜ŸUG"ã¼>Gêž»Msó«]m¯­¥ä>Ù·òù,îãhZ™i×Ëáq97áÆU²°n×5—à¨_õ”ÓOÒ˜v8EŸfý¯n!Ûµr¼ïfŽ÷yõÕ|®ô÷ì׳¡¾É›å‚M̸gÕ'ËÎF̉ØeŒ @‰Ñ-ÚâTøÀ]× ?¿e:fW#êbèb [©Ï±Ëéíénóc`»“®WÒåj<‹@0¾‘+áVÆÊÈ|\xvÒVJ=tÒËUÚ»;)Dm\cú›.«.Y]椛3ºú!è;™çÉ똻”}É>¾4‡«Viý1ŠWÕóï5•fÔH_!ðUu Lø¨¾i?y¿Ì°Å_ õYgf=[Ï.çËé Y¹òIuBÖŸ˜~Ë€9°ÉÁÔ—@®e?îß(敇|¤œVYzÕø¸ù4°–Q¿~0MíP‡\¢L_àØoÓ¹´±Žs,øî‘U¼ÂIom_Y9H™ÒË”õ•Ž…¾@tC0,žQãÕ•X¢íýÝ3<K#zÀvq(óëWC2¸MËä¿îpñx¸”¹U¦×OìÎøw…¸p©WÁy]•UºâÛ¡"u8áà;¹æªWAݤŠþUš7G‚òkdç×ú: óÇü96‚¼º*u5tÄK7¯† }¬¬H!õ¯š±äPSG¶9ý1©ªÌ‡Rú¬h× Oq<ÊëøhøjÒØvïêç€Æ ·tyüSK3j Ú±ykþ=æª~rÛ·u"²Šµ-+º@~Yµ¬Ð%Xx´h|鲊ßý¢˜$©æ•TNá‹ê™e¹˜\)ìSn_-M(Ÿž¤ —vÔ6NylÚ§ä`o]Òh cžÊ´ñ/ ª0¬3¥¿Tkf| SÛŽ—d«‰“¾²Ø®Cߨ´‘Kz›åëeÀ—Öç—Ž>n®|ecìû”zL{éô²¿Ø_[j×wc…±ÂWÔKœW¥/ŸWú㨱ß?n–)ûè“Ãá+Tmöå¡áo«/ùyûuzð¿°5Mÿ$ÚjÇöM.Õ±ÄúEu²ïœ§ðî`wšRGÎÔ­¯¦ÛÙç̱1ÅÇõõÉû>†kuPh9š(K¬¿ÜÒ§6ë^›N¾zÁëk\·h?rÒµ4ßF‹’¨ãõp­­§±G–k´¥q–÷#z½Ù+Úi]²Ë.uÔÐcß¿hŽÿ[KMîIoGïl—úꄲÎ5méêgð‚žÆÓä>¿ð»§·úŠyæícn6ëâÄÀq|ñ Çÿ#í§ÝÏLðYÇÑ´2åØm“)¼žv[Wщk<ÿH=s ®úå\fL?Ic7Õè¹…p<õéÖ~ËöüÂê\Šk=¼Rõ#Ô·ø€¯,õª­ieO#æDì2šóRA_ŠÑ-äµwqòËý¨Kê|IŠœnv9Ûøå–·$dߎ×ùt¹’Ú¬~yEùž¯aYAÈ^¥È^‘OÍøÍ§&褗‘8.õÒÙNÒ ÙêªcL«–U—¬YÆÚÈœtsÆCw?¤^]ÌÏý²8¿ÀÞ_Ýt#yœ*úmmŠfꦫ)òp¾²®ÒŽ%_#û­œðÅ>°.埳L(Ó?äÐצ†ÅÜmŸš÷Ò¼lÙÞËE†Šáì°[Ûp®YEl¨k¿JjOÙÏ£6¦Ys qz·ßoZ|ƒ€Àf¸î¾VÏ<›)hËÎz改R×¥Ó/ªñѯ[óøúè¸:vêBl›úyÆžàà§Xz}µg¤æ†‚Zð]šÏ^5ç-«)ËS¶Ú‘íçÉøE~òÈEI¿X]F¾ë}ÄŒrð2ž: +ú ›Á1¥ÙIÕW'‚}‡ºÐ;¨¦<_dAô„ÃN9—/å±¿Ž°¤FƒElËøF%ô³sÙS•§ÇÎ:¬ ŸEY”çx”Þ€a¥>]ªWJáõËÔ¨Ÿ·±´pz™%ñ´|Oäf6G­Â¤Ä+§ Š 3“sW¡WLZV¼òQX¿ÕäpøºH¿½ˆøõs¼â‡þ,L™+ìÔÁE~¢¦ßþ3åéSsQ•uÙXM÷ƒj~‰íP‘Dý‘êê“«1y'Tþ‘ýÅN«.ÍÕ ¸9ÖWËÞ¥zFÔLTÝdvÊOˆ»uä«ËøÊó§†Â›,:˜(*¶>÷ªôÇ^RþÚí”~“Ю^^®Ú^Ý8[U½Û¤Û½oxRÜ´ö%K‘Ç?Íûæ~4Ò±ÕþÐÅ}‰Wϳµ‘…øñF(R Y~U=6üûêþ˜à„û»VñÔ1u:š®úûÔ±¯6÷Óß8Zð¥ƒRN½yLýÅàÉ2÷?¨Ë9*VöòV8 åA¿ÿF=Y »´5¢’þ¦x¡mAϰšÒ«SZêÙÓ?ZcOÒÇ ¿—öq±·.iøY­ù¢êíh¼rÖÔÂBø:dJ h³ëçâÌ$çïÊúíTùÖcsq6vúLù»4릭äÛÕݯ&¦koñ¤·Yþ±>ðåYqŸùæ7þX=`íóšígÔF'ÕKÖɰ¿ ;oé/Õ_þÈçÔÓ~ðãò1õn7ýg¬´'úǃ_«YÏë'é£çÕØðÃÁ±5¯ÄÇ+áé´/ýš¹ÚW÷ÿ›ÍÞ¤Ùj‡öÚ³éÖGâý¢J1¹íB×Õõ$uIDAT{v'¦bb·[uùûjºHò7ùQ]5Ú/| _»zÔ¯Ú:9à¶'v,n€,¹ýmݶ)ü‚¨¯]{:_Ÿ>=÷aé늓së÷Æ ß»¯¦³×ñôô‰m,d¯Ù|âüH™¦8$ýý.5!œüfq©”Ÿ ¿*þ¯„U³ÞŽa’üõUåép5®žZ=só3*ÍyþsÕ‡¨úg]Ý}l#øJx&\ý­gÄ ðÖ©óÛ´J™œÒÁ¯v·½~©Ñïº}‡qT–Y3/Á×Ë9æh*usá¥ýÍyÖ1—à¦_ŽeÆŒ_’yÞy(§¹€4ÿ+ŠXþNH[O=*Eä×Cƒy´<öNVβ݀9»Œ‘¾äË£#Z29Ö7¤-b[w5 .Ú6¦ùRN›ï“ß.§—é×7Þ~Ê„ïXO—«ñ,L9ç'ëÂ7˜ç¤ÿJ©G‚Nzy _Μs´“SGösÇÂ9çÚ±­NYóÎI{uÌoï"h,?ÝýúúÎB¶yò@âüuO_üÌóçí§Œû– ÃG¦Ô˜±J}uî…¯]G‹áÚ^a^õß/ËåÄö×üº‘Îf¼3kîµçqy¯Í—hß¾γn=x ZGÿÔ5ZZò°,–rÖ–XÿBy’õo.œ[äzéêuо{#eùe6ñ›ûËÒâ"]*•hë»k×.–ã@‚.¦Èœ;¿&ÖÍ’õæ÷Ç^7k×ÊÒZ¸¤Ûû2kÞM·ßNóä. ÷ƒ3gHçÌÆ‚õj?pÐïój•ó°ÁW.œ£‹%¢ÜVø{ïMhOÄ>¸W@§\£Ë9ï(Ô¾k'ÝÈýc‡iÆS‹ÙßÒN»)yܤ•çè¡]¥¿Ò¹ØŽþ}ÅŽ.;GüŠYã¾›x iDÛÇÅÞ:¥á¶åWYr °î컉°ØÚTêñ',]8C ¬<´h?a?ëNtl‰Op„íß… ´Xâ¼Ëœ÷þ›èöƒ   ®Ò}E÷™¸Ïîó/Uô¹ûåÎýè†zÆË¸‚š¹ŸÇè¹ùÚ»¯}§vºÙ2F_®ŽÑ·íÚ›ÞïY3Øê&µoî>’âé*e¶ï›dwr×±Ú.Më«A»›+læØ6tth{¿Sû¯)‰þµÉþv­™ödÖµL¹UOÊ ãy²»ç6…‹_‡1|óý__Ø|;Ô7­Ô•:üŒµÊ…0û†ìƒV}² Ïü Ýôñ?ðŠå"ôïºìc¿³Msdàj{Óø9oÒ8ê.Oc®WŒòëœKpÒ¯:Ë4ä¯÷Gî¹€ þW¬Lõ¤Í4<àØï ¶ïÖÒsNû>úy* MÑßÿÎ}×tEír†Z7>ïæê¼›¼kô½ß½~õÑ<"c³eúõ÷äœ,ÉÀ²îS겓›\ǺdeRl»²ÏIWÉ6ÉÞ¹ú!nºè¨%Mª»'Mó~á??D÷þïÞl! M-ÒïÜǾ&ßO:·P½ÿÀ÷Kjï_D˜ð½Uî—¹êF¤FWýç¦ê*Û†¤ûc™`\M_¼ý!K]Û†åÌeC]ûUíÙÔ¹†,pq€\Yâ­lbÑ¡C‡hïÞ½_ÕJM øÒÁ^:˜ëriÎ_\¥³çW¼›XçxûÒÒ­Ñ•ò­sð—þ´é ¯äÕNûù®üÁ;é]·î¤ÛnÙI·ðöž]mðÕœ /¨¤}W5à+I0s"ðÚ3ÑŸýM‘žŸ,Ò'ÿÓ$=ò‹|V^xŒvÝûÙÊ>TXà@…Æø ù \¦uZT^ØXþÄ[$…Ã>ØÒIìN$Kx‘œGAÀ$ð|•c‚$Í3·÷¯Ìýn{cH¯ìN:£M<þö&ÂFQ •ÀÚkôØüÏT|¹HÅK¿F“ã¿C‘+azì¡]ôÙÊ=8¾ ·À7áp%œïuôëºWkÀýàÿº>ù_ É9úÃ_ºýÚ«$n•—x.øîê\p÷?üû›{ø·aRÖ—ÑõPÇú!õf0¾àkns”   °uÔðuøðaÚ³gOs¾t×ÿSâÕ¼..–½`¯3¼ZÁÙ·Êôu…W\Y£ÅåuZ¹²QðÕÉ_»v´ÒÞÝmt¯npûÁNºíæNº¿tÐ×¼*Ñ.^õ«•#¿š°ØWæÖEÀWfT×ĉ¯}ïw齿úhUÖš˜þSú•ôV£:÷Òè÷îþdeU>£ol†þì×ïº&ê!A¶6î¬XâVùÚÚÒW¤ÛÇ«{íI[ÝKŸŠÀ‹k¡9·¼Œ«´A Š—»Î?™ûÝuÎ vgk)üí­Õ*^£ßmy/WÂCô§½¿Bù!¼µ•sôÔ_þ}òóÕh/꣙òŸÑ][pq´æV%ýÚª-¹ìÖ^ù&u|àA>ØMS‹ã¤™Áçz$°Fgž{‚üèƒô£jõ“V¸¼6 ]u¼6[æz”_×c«£Î   >-𵾡h•WîÒ+zxe‘~:·Lóìu™ßؤZyvoóËy}† ÓÕñW©¬ôÕâY稱5^~lWöj¡wÜÒAï×núð]û¼¿t`X[«ŸÎG²yßøÚ<Ö›SÒú“{ßEPY¥»ZduÑ üŸøt ÐÜñ?$<ã'˜`@ .:Øë°¬_ƒ«é×8ê×9fúÈ€¯F¿7“8i»XæÞré_¯ž¶ÈÕïê)h;¤…ÝÙb­{‹5ÄÀ™§¿Dïúå/4ººøJøãJ«Ý„ð#+èWVR8oKà@×—N¾AtÃô¡÷`5Ã-Ñ&›*Ä}ó¡}ôà_™…v LÒsøKÞCÁæ‘kñ×õPÇk±]®o™ðu}·?j  ×;-ð¥W÷ZZ^£ù W觯/Ó 'éµ7®ð+ùÕªvî褎Žjá`­}»ÛéÖ›wÐþÖîÍ·®ÐÒå5ÚØØ òj™®\YåeÈÖ醽­ôžÛvн‡öÑûïØC·ØÁ«€µ_µU¾ðµ »ß ¿Î¢ÿaúì£ß³V®gpŒï×éöŒ± ÖL°@,t¸óe`YáÕ‹¶új_:ÔZ¿ÀqwKíàïÌŸ¥çèû>ZyB¶kˆŽÿ^›NŒÐýd‰ûÌ*o\ƒÁ’Ñú¤ýÖý®ƒûÛž¼ý.-ãí~vgëµ0üí­×&˜€~åêÃÿ,Y¯„»zhì±?¥_¿Ï|Ù#À@VЯ¬¤p€ÀÕ%pþüÞ›èó"Þ¹{`œFÿ°{½Êñz¨ãÕÕ"”žŸÀsþ úèçä%,.Ð#ÿ ·ù)"€€€ÀµJ`Ë|é`/½º×Ü|‰ž;qfN—8€k–xe¯–Öþ§Í[Ñk}ƒ¹ÊezÏ;;é¿pÝÉ+wéÏ«¼Øßÿó~cÕ kmåÉœ©R¼îÉF™¼ˆ_ñØN‡Þ½‹îûðz×­»¼U¾®Æ«ðu­v›t¹×–ÎÑìë§éíònÚ]¾Hùeew¾›îE¤W:=œ P/üÅ#_½Ù4-}k°*gÞ"Vè•çž§s«0vã]t¿6h /“­ÛgQG÷~׈үå<`w¶jëÁßÞª-¹®oktîµYzãüÛÔqC]xçNún£{>P¹xzqf‰þú‡gé'§VhÇŽÔÉ+µµó«U%MkËíì\§ܱ“þõ}7ÓÞ½‡öíéàór¬0Ò AÀWƒ@"¸Nl¹€¯·—ʼ:×2Mÿt‘¦N,Òo­QGçNôj%½ª—þã75ÒÚÚ¿ªñ ÝýþÝô™O¾‹ºø5ú£_ÿø­‰9N¿ì|µ·W^ÙØÊ¯ôᕾÖV¯ð*_ô ÷Ü@¾k½û»ùu¼zØ&ŠÅ¢WâÇ>ö±M.Å€€€€€€€€€€€€€€€€\‹¶LÀ—oéòzãÜÛtñíËte¥L¼8íÛÛIí-àUö¾ô¹õµººÊÁZTøùtçíÆoâyõõešü§ótêì §i'|¾þnïhãÕÁ-ñ búÕûö鍊nÚGï                  °í4-àëøO.Ðè}•^ ½{÷qÀV+--­ÐÊÊ*­¯op×­–Ëü·Fkü}ø=ôk…éî÷íäx®Nw…¾óôMó·þ­ƒ¾ä§_ëØÙÑN;:ÛhçÎVºïî›èÁO½îýày¶A@@@@@@@@@@@@@@@@@`Ûøö·¿M‡¢={öPkk+µðëýÅ´êªd%àë§ôÒ«Ë´{Oe…¯Å¥-/¯V‚¼x…/ø¥_é¸Á|O'ýÚÿ´ß øjoo÷¾¾Í_'^åWB¶´q¸—ðÕÚÆ«|µµqÐW íÚÑB÷}ø|½_uµƒ€€€€€€€€€€€€€€€€le~À×Þ½{ðõâÉ ô×÷*M¿z™Ú;÷Py½…Wèri•W÷ZçW:n~O£RüÇ_ïå¾8àë#ïßEÞÊ^cO…_ú5ŽòÓÖÚBm¡Æou¤½»ˆWøº‘~ãß¾_鈾$'lƒ€€€€€€€€€€€€€€€€l:àëðáÃ_á륟^¤ñÉ×èÄ+Kte½“–¯´ÐÛK«te•WöÚPäUYHÌ øÚX£qÀ×ÿRØG÷ܵ»ðµJýßÞ¢ù)¯ðÕÚÎñ^­õ–E¼kÏκy ýÜÝ7Яþò{èCï¿Ñ8?@@@@@@@@@@@@@@@@@@`»hZÀ׫¯/ÒÓÅ3ôÂÉKôæ… º¸Dty•huM¯ê¥¾ªy…¯õ5ºûÎvúô'öQ|uvvò«¯Ð·ž|‹^|å µ¶µG}Ì[iƒÚhìm¡;oë䀯é—>v;½ïŽ}Æyø                 Û…@Ó¾Þ8·LÇ^Zà¿ ôµÈA_ŠÖZvÒ:µÓÚyU¾ÔÆ:|•éÃðõ¿þò~º÷•¾N¼ºJ£?8O/x_ïÕVe^IزQ¦ÖÝvSÝ÷áøï&ú™ÝDï<¸{»´ ê                 ¦|½½¸J¯Y¢_¾@ÿýÇçéÔY~£ÚEkª“Ö¯ÏåÅmµÐ|­¯­ÒGÞ×N¿ñ+7pÀ×.joo§z…¾Þ Ujkï¬|yË‚ñê`ìÕ¦ViWÛ ½ÿ];è?z+u}ð½çö½tþN£‚ø                 Û…@Ó¾VË´¸´J/Ÿz›~ôÿ¡éW/ÓÂb+•ʤÚw‘jé óµ±±Á_Wè#¼Â×gþçø•Ž;©µµ•½Vhô‡é_~ÊÁ]í;8à«òJGµ¾JåË´»£L÷+úÈ]{éü*ÇÃwÞ@ûövRg‡ùêÇíÒP¨€€€€€€€€€€€€€€€€€|ç;ß¡C‡Ñž={¼8«ÅŸF`ѹ¬s0×ëg—èè çèÄÌ%:5w…Î_"ZÙØá­ô¥ZÛIŸ·¡ÖéÎw¶Ó¯üÂ^oÅ.]þ«gÊôÔ?/Ñ«gש­­ƒ÷ðÊ^ÖJ+´£e…Þ@t×;é#‡n Ÿï:Hwܶ—Ú8(¬¥¥Ò#Øzš𥫪ƒ¹––Ëôæùe:ùêÛôÜ¿œ§™×.Óü… º¼ÚN-í»©¥c'ñíÝÝA·Þ¼ƒöìjãß-t¹´Áç­ñ·âŸü ȵ­/Ÿ§Ýí%ºõ@+zÏ^úè=7Ó¡÷ÝHï¸e·—Á^[OÁ €€€€€€€€€€€€€€€€€@ã耯Ç7~…/_ÄõuEWV×èìüezñ'oy¯x|íl‰.)ZYë¤ÕvZW´¶ÁA]ª•×ñâW2ŠUºZZ;¨µc7­¯^¦òۯѭûËô3w {?xÝóÁ›é¶[÷ÐŽÎv^L$ò Ç7€€€€€€€€€€€€€€€€€l#Møò^Ù¸¡¨´²F/]áÕ¾.Óé³þß2»p….-•i¹´Æa´¶nÒmÛ±Ÿ:nx7¿÷qVÞ:I‡ÞÕB¿öÀ]ô³¹•nÜ¿ƒvílçwQ¶àUŽ&6ü؆šðå3Sù¥ƒ¿.ó+ϽµLgÞ\¢×Î\¢y~Ýã¥Å+´ÌaW®¬sÀ—>OQ¹Ì^WÖ¨´¶“.«ƒÞö*¯ðuï¡]ôÙ߸—îëz§äÕ‚÷8úˆñ                  °Í lZÀ—樹*¯x\÷VüZ.•yU¯u/¸kWÓÇ6ø[Ÿ·¸t…ÎrPØÌ©·éØKéù%Ú(/ÓÏ~øú܃÷Ñ}÷ÞÆ_xã6×OT@@@@@@@@@@@@@@@@@@ø›¿ù:tèíÙ³‡ßŒØJ-lÅëp]½.^KP øZ¤é—ÏÑv–N¾rž.¾]¢»¤ßþßþºïgÞuõ„DÉ                  pø_{÷îÝ_šúZ[Ûð^ãxæì%:ñ“7éø‹gè¹çOÓmïØG¿ý›£þÜ»¯.                  W€ø:|øðÖYá+ŠB¯ôuæìÛôòÉy/àkßÞô©OÞC‡Ý=¿A@@@@@@@@@@@@@@@@@`[Øò_z¥¯ÒJ™W¼W:¶·µÒmïÜOûöíÜÖ ƒÊ€€€€€€€€€€€€€€€€€@”ÀßþíßÒ¡C‡¶î _Qñ@@@@@@@@@@@@@@@@@®Wøº^[õ¸æ耯Çc…¯k®å 0€€€€€€€€€€€€€€€€€ÀuG_×]“£Â                 ×*ï~÷»tèÐ!¬ðu­6 ä¸~ àëúikÔ@@@@@@@@@@@@@@@@@à' ¾>Œ¾®ñv„ø                 ×|]Œ*‚€€€€€€€€€€€€€€€€lãããtèÐ!¬ðµ=šµØÎtÀ^é¸[uØ6¾÷½ïa…¯mÓš¨€€€€€€€€€€€€€€€€€À¶% ”¢¿û»¿£»îº‹vïÞM­­­ÔÂ;Õ¶­1*                 ×(ååeúÇüGºóÎ;i×®]øºFÛbƒ€€€€€€€€€€€€€€€€\fggIÿÝ~ûí´cÇ|]mŽ*‚€€€€€€€€€€€€€€€€\£þéŸþÉ òºå–[¨££ƒZZZðJÇk´-!6€€€€€€€€€€€€€€€€€À6&ðöÛoÓ?ÿó?Óm·ÝFûöí£¶¶6|mãöFÕ@@@@@@@@@@@@@@@@@®aÏ>û,mllÐÁƒ½×9z«{é¾Õ# Žš€€€€€€€€€€€€€€€€€\›t°×o¼á­ì¥_åØÞÞ^y•£^ÝKÿqµ”Þø­ßú-úÍßüMºÿþû¯ÍšBj¸F ¼ýöÛôÒK/Ñââ"½ãï ½{÷zÁ^­­­AÀ—®šðå×ñŽ;ÞM<ðýâ/þkú¹Ÿû9zÿûßï%ôã@@@@@@@@@@@@@@@@@@ ~J)*•J4??ï­è¥½ôëo¼ñFÚµkWì¥KòVö’+|™Åë0ùQüCÄ…µpÄGñ¿ÁI­œçZùͧ{›zWk m¬oð~E,µño/âŒSo¨u>¯•—S^^mú,N£+¢ü¼9#Nâ}6xÿZy:y‰2}xuÓó-‡'!'nioåã­ÔÆéô>ýÙØP´¾±NkZŽª˜-´Îùéz(-ñ~]'Rœjå|9}ï\ßÐ%é´Ù¼úiaõ1†ÿYçãm,þ_ ØÎy{r^Ñœ—®ƒ—Š¿õ•3õžÊGïñ~U²öw󷢯|å+â76A@@ ™€ŽüÖŸƒ&Ÿˆ£    CÀ÷'n¸á†˜3°;‰Àìì¬wþX<¥sçÎyßûÞ÷ÆŸ„# ° ÀlƒF¼Æ«àÛ[ŒI×xCÖ!>t xÛ,)ta›5èuZ_qq*ª  L@=%}âŽÛöË}iÛ¶ãþ¾¤oy,º­·µµQgg'íØ±ƒvïÞíýíܹÓÛ'WõÒçéB%ò( ¡ÁøpªAIœHqà’Þ«8H«µ•ß ©ã™tï¬dè…FG>éÔÎi¡¼@­õu/à‹Ïöâ¡6ôñj@Ô:GCyÁU:VÊ‹îâ 1ÂòÊãÌ[;Ú¨]—Ïyè ­Jˆ—>Î!VüShµ¶r U‹·j¡>¿³³ÔšÂâ°*tÒ Î£¼¾æÉ­÷êüÚXþ >Ï;MŸé2½šrP˜NÏÁ\:0MŸ¥ƒÇôGŸ¯ÿ÷Aê:jÑõaÍC×[×uƒÓr¸——F§ÔûÖ«yxé#|~5;oÓ BÓ'{éxCéP8¢‰‰ÿê}ãÈB`aaÁ;í¶ÛnËr:Îo½õ–·ïæ›o®9†é^~ùeï$øcñ¬Îž=ë<|øpüI8Û€ìÁ6hÄk¼ ¾½Å˜t7dâCꀷ͒B¶Yƒ^§Õñõ×ש Ú ×<?ΦQIÊÏv,mŸ©U4tEXtAuthorBruno P. Kinoshitaouað/tEXtDescriptionNew logo for Apache OpenNLP projectJ3NÌtEXtCreation Time2017-04-12zÇ=¤DtEXtCopyrightCC Attribution http://creativecommons.org/licenses/by/3.0/ôÇïä IDATxœìÝw|UõùðÏó=7›©(²Hqµàª2G±ŠBÕÖQû«”!ŠÓ#;jE‘`qÖZ[ÅÕª@¸Ñ:€$„$lÙÙ9çûüþ¸7 Hrn’çýzÝ—ÜsÎ=ßçDHž|Çó„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„hWÈé„ðV úϸH“îát•½-} VÙ½þã¾Wv/‡OØ©¶GÊeÛšYÚ8Ò£çÏÇgd”Ÿê½Ú›ô¡ÝXSxk´e»Œœa¹)G:ÏæP×®}{¶F,µ÷ìµ™Ìõ–m·6‡ºŠÎÞy¡Óqœ ºÀ>å¶QZ\nsI×Âne4åûB§ãjs£è¼oç$æ&55ŠIuÒ™þßš0uíë*ÏÏÉ\œÑrѶ.§ÕŽ>¡|ña —rÑZ¿®~ÏјMeNÇÕQiÒó@øµÓqÀæA1AÈXUÔØë-å7Àk§ÚCC)ÀWY8v°ÒBâó ô¡RX>$7å‡S½o{À슃â7[£-Åúï5t~×O{z*C}×±Ô¶ÿðÏçØçDÛ­áXpNW©ßF§ã8l؀傀¢ÀB&‡@)€ŸìÓ^&Þ ¢Ÿ ±‹o °7ÑòK þ$ˆqÂÿ'å¾j$€ÿ0ÔÛĈV‘Å·!»æ÷Âù‘3û0ìo‰`F˜]ÍóX‹ÝÆI¢è%Žþ5â2¥°–€Îƒ™o(9R:±ðÙ°;ƒîÍýÚéøD‡Âà?Û÷¦…Ä­(qùM¾.çƒR§ƒB4‰€~úØ=¤Èì[d ¨È° —…g³Â÷`þŒ¯ƒ´ú„&åxÓ¿õD?ß 3-$bw²gY[€€>@D¦ s¥g¯"“ž *ê@ÅDÑ HŠê¬`¿Bg{Làhú¤pEÄ„ ±9Ï;£@㬲ˆ÷#®)É¢íŠ „ÄЭ  ÈàâÂäðO™8…@)Aã·9:T;;kqRåŸçEMPMv²™õèžÊãIQS;—X¢\Q%7# «ÀŒšÚà»+ι T/[Z÷)Úåtð#k,ú¨oÖ¨/Ÿ+z6|)¯„ÑÚ± Q†ùYe¯¥c¨ü²)Dû ˜ƒ±± 9<«09|vñ²Ð~NÖ2›Ï0¿ àg¦Tž3 &ðñKÀ`¯˜‡îÍ$QôŠ®ªH‰Àu®aÜW|8|%/ðkÕØ„h7rˆZêtBˆÖC@$€¹šTnQrxZÁòð»ø± ‚œŽËùÐYÀD»ÀXàâù‘Ó®4cÌNî°†1Îr0Ô6AE/ÀŒ_Võ$ºÿ«Ôsé¨b?þààÒˆ.­›p\€©g˜ÅNR?—šð'§£B´:Å@,1þ^X˜_˜aYÞ·»ÓAÛÆ@„öm= D+zÐ(/¾ @wÍêqCã0Üá`¨m‚ yB¹ÿëîU$ »˜ìy©¶9ÚÚc¬=l†\ÓÝÌ?â@´ÆììÅ#[â¾s#§ÝIDËàžCs"ïÛ„ fæâüÙ-H3!æäô°„-±¹)Ÿ8‹Â=~؇}î/LÚfŸ§ºLÌ<èT0DÜ€ù°¹íñýó£ÿÆ] ºÀ÷g/L5ýŠŠ5^‘Üz3éQô%p'ˆžîPf Ù.-+öKÝ99F~jC ˜ÑknTâ»Dô2Nœ$îeæ»fg-¾ÞÌ\œßJáÖ¼rí¹Ãz;ˆÂQÝÌ6¨<§(9ì~6É1teòǪÈýžŸ„;ß h)š €´$Š'#‰¢ B>¨"O¬‘,RÀçp¯2c°]¤BÝçø—>.ûýCÓº¶n´âTÌ‹šþ­õNÔK©‰±Ì¶ý£çd'ý£Õ‚k½\†^µ2f´¯Ó!×AOþUáòðÈn Tñ‹8“.€9™I?€ñŸ–ü È`w© ?COB†ž½á[çê®aû7´³ÁøØ*¢.`¾5M`Í—––ù~ðÓC ;çñöQu¿½1£¦öV¤žóõ'ºŽLÝ3;kÑç­[ øÕ™…‡ð€Ó!¼Â 0>/\6?pî|2Qg‡”–À .‘ªÚ¤`vöâ»=¯Ñåª.»*© “E/`•чv ¾±KèG]J[ìbÚb•a›]L[t m±‹è@Y:PzXýÀ6-‚¶àþ¯Ë­¢²×7Þ;ÈÇéç5Í‹œ~£õ=1N”$Z ,ÕüÍÉlÓI"€€ûÓCâîv:!„×ðÓ#Eg…¿×ì‹]4ÿž ƒ{u:r ÆaËNfÂ`Ÿ2ÚÐG­s}ö2a0XOlÖ˜Ú!ÙëÙ I<¿{)J÷Â]5¿AlÓ{l¡kºÀÝ«°&° °ÆêsnC«Ðèý€EË0CLåW’Dî]þ7ÆØDÐ÷ÌÊ~ô«æŽ!=$þ·|[ø¦h}eÜŽôv¹‡jZ¿„Q ÖÙ‰oˆÏKkp ¿Žì£ µ«5b©ÍårÓó©Ûí~GŸ>ÃUêçØ‚Œv*G+ÜÔyܶD4žô(zn‹8L„·:ÏÚÝ{È6Fj¨5°±×Ý«H` `›À6Úó×ÖŒ[Ô5wà´ïäK&¡á$ÑÔUj‰$Ñ øC©7Ó#‡J![!„§¥ñIÑòˆËœD4ž$Š^‚5µ msUèî5´(ç¿hM±¢Úç¸÷çÝ~ÞýΉlÚà‚¯#lf—ÌÎZœ8)çéö¼ý]?.W¯­ÄhÙMHá©+³N)^1Äé@DãH¢è%z&eÇäÞ‹¨èEôHµUñg›ÛxXÛ˜Áó+z¡m[xbÛ-çròY:š…ÑÓÏœøƒŸàßÀeLÀòN¥ƒçä,þ¶5ãs S|CóœCám(H³þïñ§#†:‰89I½ˆAÆ`­½`¥"At¿ÜǺ2ã¶x¹®{N±EÿÜ62æb§Ÿ§#X0`Æ/mÖ_ŸdÁÊ€nœ•µxƒ»–xé+-&154n´ÓA!¼ Šß=žÜ€Ó‘ˆ“DÑ‹œµpË^ÛÂ#󫇕-Tô*ºÁRhV`‹>ªêY´ ‰c€m«w¶^{AðI§lnä´;µÖŸÚàE„ú¢ÙY‹ÞmÅм ‘¦ÓúÆÆ8ˆ»0ÐÙ¯–mi½›$Š^¦WçÞO³MßÖ3ä\ñßêÄ6‡ÅÿÔ6ýT}¼r‹êe[ôæÎË/pú™Ús8/:ñåŠVúú–hò¬ÌÅÃͬG÷´f|^‡Ð J­^– …m…508Úßà—™¥ ‹·’DÑ˹ÞÒ6ne‹Ž×3ä\7q„zŒ-žÂéÊDRW÷D^rÅ œ~¦öÄŒIŒ0 J>ãÎ\¶“5 ™•µèIª½@©ãŠti~Å„)ßs„µÝX¼<|‚ÓAˆúÉ7m/œœ™­-[ßsíÄ‘-t%¨{I«¿VÎmd¹ÖQŸ_gD–€Í`^Tâ5†Å_㫚 ´Æ úÅœ­‹¾lÅÐÚF^úñL§ãBx=ÙÇé8D]’(z©¾Ïgþ›mü½F‚X# ¬^é¬Ëq•­é[üye"©m@—Ò.]Žþ°iÉ×ჯpú™Ú²¹Ñ‰÷x n \Â’"³r®Ÿ‘¹HŠô6„a¦õK8áv†Bˆ©‹Ö¶ÔöB’(z1¿€ lá{®YXÛ½`¥Æ|D[ú-d•çÊŽ©]ìÞYÓ‡@¯}ñ‹³~¤6ÇjºæEM{ž+ÐðÞ臕摳³'ŽÁ*Ùçᤇp:!„w!à·ÉÃŽCÔÔÐ>áz?›Q´mtÌH0>eMÁ¨¬­è¹}Ÿv×\„M¾¬±À.£©,gMà2TL’ckø¼ÂÀµ2o®qÌAf ±§äuýúÄWÒV­p×¼¨Ä»Z*–®váí§@7w×¶±zMÏá—Ø·¶Ðéh„ð6L4ƒÀ§52AÌšT ˜{¸OEu†óp’­bF`ÀZ§ãÕ$Qôrá«6íȾùü!dá=hÈ "l?»_@@o¶é?v© e ¦:%$€1"#ì’ÉÈýê 瞨í0Ž—,á$I"ð%.iÉXu=óî–¼k#à|Ÿë Ü"¿¸Q“AÖ¿Æåç7÷}yÅ ŸBëX ÈAL¿pN´½3./^zUÀø¼D¸ÉÐsP´G•ÒÿkØæylÑq÷PÛq¦Ó´o4j}¿øŽBˆŽ‚Æf”wš°õÆç&MØv•aSbJ"à¸Ó±yÒ0¦:ƒ¨&‰bàSæ2Š ìœâ½¾#J÷ï–7Þ¶ŠŒ/Ê hƒU 6X´Á.0>·ŠÔÇåEôyi‘ú“ÍÆË•¿(Vu׸3E_­ù_ßõ¼ ȩ碒RCãdN’🔳-pbN¢å2ÂÀx€v:&óõÇ–‡F9†p“D± ˆÉÈØ[­d—ØeêwÖQucù!uYù×ò£Æë¸1¤¼.· ÕUºX]¥ËÔ(ÒÁ Õ5’DTõ*F–<êÐãáÉ ¦mè7¼áÝm„-ªËØìŸƒ&n›¤H°ÓéxÁt«ÓA7IÛ»Ô5›-*ò¬¥è™üy3W˜m? ÆapU‚XƸ/B/ÖŠ DCδÉ^ýY°ì"$„“Æç} íº Dß9 @²G¼—Å,mÄ/2¿ÈÏèÉB0ϯ› õ 3û‚Ôb¦jà9Ïk*G"Æ Ã?87ãh«*€c»¥(ðM€wü²Þ‘ÉÐs³iSÙÖo˜±Ës˜¹Öb•šÇH-„âÌ\ÊU—4 º÷Ó~¿º¼µžAˆ!ðS)¡ñW9‡]§òö)V·ÃÉ.DW;Ö¶¨"‰bó˼o·Ú¸ @Fy‡5« *‘dtÓ–ÇLºÏSÕK»FÅd¬H:Tz—…7ðQŒ•©Áq²ç« ˜¸õ#€_r.¾œMùÙä4IÛ"Å>Lô,3Á”ÙÀbpÅq"üÎVøDCm­îITž ãùF>&:önùøßgn2ËœˆÉ1Œ iý¾‰Ûžò¢Ó¡Ñ‘ó Løƒm38Ò‰vE5IÛ(˜ó¾ºÿëÐKw˜ËŒªt•É_õÖ}•ïñ°íR±°hƒ‚P3QƒÆ>bÙ5ÛÖä8ôX^e^Tâ5LèëyŒµÚöpöÂÔ–jSkáÞ:'ü1@ÇJ€89%,þ‡„ÜÔ¯EˆŽ*àà¶Ï‹Î ÿ À9­Ý61¤¿Ãdè¹ #€]0VAÓï xÀ¡z«x /«®l©IÌjaÍ!h÷‹A>†ùN?—×`L Æ Ï—"ý'§Ãê`ü•ÆE\{–ÓÑQ‘ Í„õÎ4Ž0GÚU¤G±;è{0°°øugVG™€êžÂ:ÃË`Ð]å.×U†­·Ô¿îyŒù ôš…׿}ø½ÃÖfÍ‹Jœ ºæQZ9;kÑŽÔöõµ¬²×Ò1tD,Ö[N#DG¤4ÉäȶzaÌ ¢šå‚Eë‘Å6.vÓúf<Ê &ôhh±ŠÇ‹”­'¦DžD—"°1ÓéçjãbŒ®ñbŽq6¤6/Žû BˆŽJ“ÚìPÓXìïPÛ’(¶ Ŭ¡vs=¥oj1»ç*ªË,"?&•Z1$]ñªºî–Boˆrú¹„¨ðPzHüoCˆŽHkk‡Sm rªm!‰b»›¿¾D3-Òµz¹žWu¨—“_"ƒlÞÄʹŒª4Ééç¢bà…ôðáç9ˆ XûjÛG—urªm!‰b»УøY†Ú\«6ê/W%} »|¸†z¡zˆÚã:¦»Þ¸¶‹ÓÏ%D-Alé·ÒC†vs:!:’.Eþ…Nµm‘+Щ¶…$ŠíÆàŒŒrMø³qý=‰5‡—M*QxšAÇ*÷öxÁVo¤†$$¦†Æ _–ÐÕég@Áp½¾£ §C¢Ã8”SîTÓŠáçTÛBÅvehÞ†™Ô‹õ”½©Ó£X‘ v†vÓ¬’êYöïL`"¦U†Í?§…ħ§†Ä= ¥J„óxø™!‡g;…F¯ÞŽ-(1líXo¦D±]˜Ûú¥ úO»Ê‹Œû™Õ®†zk'ƒZãÞrjÐŽÚ«¤5ŒË¡Û[š …w %ÐË*Û•ÿï a ²§p ç¤õKåtBtÇË»œüª–¡µ*rªm!‰b›6oÀ”þó¢WBñÃý·æ~®@«ëK k&I!)—Aw'ä¥î‹ËK½…€[>À—€[mÍߥ…Äÿ]z…CÄßÐ/a€ÓÑÞ‘ËêéTÛe®2éQt$Šmcú΋J|ÚØ`€ôoÇ`•3´1½KÄgе’ÂúǪÒ7YZmc¨ojÏm,'ŸªÂѱù©¯—®óx»â¸Ë*/Ûœ’0‘/†èè:ÛÄoÉÂ+!ZYv§ÚîÚ£³$Š’D±1a*Ã*ù€ûƒmß8-ëÑã&LÅ…Æ?\ úbÌg××›X»æ¢¡0ŸA3jÏm¸±Ìrõµàº˜A`¢Àƒ]&ê1Í4¤v|ñù)Ϥ…Æã‡‚Àêo ÄÀ-úÅiu>7:ñÞ^¡qך-Ç„A'ûœûBüò´Âk}Ý÷6’©¡q7ÓF÷œUÇœ¡¯~¯÷È_Üóž”Ô¢7¸@´>Ê=ùU¢%I¢èåæGOÉL/ÁÝû›e•ù1×›ÖgÁ—”úm*W¢•’R7Çf§þ\ûîZRüTø¤ Kú?°ûû­Ý^7aŽy­ßo°2n«›¸ˆA•Ic¤]N—ðéþ©&º¸zK?õ8rff%}:«ž8}}K&—•úÇ©84t}¿øÛ±=õÕùÂ8†c𠯨çÛ)#ÁÙˆûŸj`Né²£1XeÇç¥mOë;ìV^ÀÉ]S. ò+zÀïŒAˆöCÓAÎ|obð—Ž4,ªÈг›=íWÌôÜ ýaƒè3ß<»_dà⪋‰&Åæ®ÛØÐ½ûŸ±T3þйÿÑm÷0i—_pÔŸžkvøõ¾w‡ïÙwïö9ëÅݾgoÜísö7»|Ͼ“|}“ª¬*Q$2˜é½†z¯Ìúô8˜fzcâY&Lù;Ö¾©^}÷V•¦‰Û±.•À3OôVÁø]jhÜD§Ã¢­+Zqˆ™Ÿ”žðCm‹ òCÜK-ˆšq3þ ÷°²­™7#sQ6¤…$<ì.~]ðj\^ʳ'ºŸ¹É,Ó®›4(Kƒ¦ÚLoÆ—Ìü5ÃxÙ"×=ŒÁ–R¿´IÅÚ¯¡ž×DÐT¹Ø…>:Q?oïþ:€ìê#}u¿On:õ¯‚h J\þ=ßÍO{”o8O%bz"%4þ*§ã¢-cÖ8ØüF)ã<zöBfLb„¶ô€ºx8+époYÆs*¯eà‡¢ÒÀ“Ï}0åûÇ M˜×ô/˜ÎDÓr÷p÷‚Š¡fšáR<¤œÕ`@œéq;B­ÞÅ1Xe§!>pϧ¬¸êoÖOJh|OM½m¦3˜l_•(ÖǘéˆUæúiľµRdµ ðùy¾'€Ó;ÙàBc€‡ÂÅX•1tplÎú]Æ!D›T”6ŠAÃjŸŸ;Õ¶¨&‰¢—™9³,{ç/ÎÎ\¼ ÒC†]ÄÐÿ@uaáã Æ˜¦LÚ7aê…Æƒ«˜ü_„mÝÐï™Ð§zA‹»U&ê[JÆu€~ „rŽšÑfH¹²o×ÀÇ‹6Ïû¸öý Ãx˶í'«bdžß“‰ü\ZÇ1è2¿FM•KjÈýR >þ¶•¿ Ì_hCY‰ñ¶$ŽÞŠýk‰Ý´¾`Cذ›l­¿ÐÍ *õdËXõ~ĵC¯Ëù ÔÁ8„hS ž íÉ d'c° :Ù¾p“DÑ‹,Œž~¦{-qÕ‚-—ÿ8HzC¿ ¨âƒéîØík3ë»×‰¨2Ÿ}¶Ë~Q(Á#ÔÍ=Õ« Ó Ëïrí²Æ2¤l•SNºX³q÷¢-f$†l[»3-4á0H1¾sÏ&-š#¸\¢ ø“¿]ÿ+,OÈMýº©Ï|J€ùp«´u]öõÚU.åõ$Š0$wÝÖÔи;‰ém8;Íå2«ì)v0!Ú ^1ȧÐ:ò:*:,òs§}ç~ls0H¢è5ÌAf ]Pò.€€|eÓͳ³Ì²ô¡þ ã-çV^Oà¤Øí©«O¥­Äܤ£‹ÎOü?» /1è7\5ì\Yбr ‚-_}=iZÁ„äÏ ·ÝkrŒyÆ’Mæ¡úîÏš¿%Â Š·6€“m&ÀÑŠkpg€Î€çÊYB'î&»ÒBãWzf\^zÖ©<cÍÎ\t[KÞ¿½0j ={ŠÏK{/-$~>€9 ]ÓJƦ‡ÆmŒÍK{Þá8„ðj¼4¯È:òuJ¡µ²7É\oü2ÑÒd1‹0cL_WAéj¿ª8tœ”9#gÑ`2–¸Ìã#둯gŸN›ÓX|xNÖâ5øZ&ú/@¥UŸ+°0š)±Ì({JƒJ4©T[Ñ[Q.Ðü‡ÎóÀEfaE"l­ø£àSët.Ë™øNh=¸°,0(.?µ{\~jH\~j¸û•v6åÛþ†aô…V =«~@`Ü ­~L I0Ó1T~Ùq^½=Š•>Ê¿êfü§µ‚i3-K sjõ¦^¯ø™"ƒ×¸ÑéXtJ!¢ùÉY‡­Äh#Ë*}…Á#*i"þÝÌ- €Ô„D0ÿÑã#?¹ØuûÕHm–ߴ̬ÅøÐ 1~[‚ IDATý9ÐÀ̽˜)¤”Öe»0øùI›ÌÇ=??zôJÿ«uS¦]5·*ÙMàçlEÿNÈMÍF#Äb½…mØ `'€ÔÊãÂη5ˆxÀÓ¸ŸqýcØíCr×mmøn¢%i[×þe ¦N§¡wh_пµâª‡1½±&|øàÛÖîw0!¼ ¯äSdý“Ö¼@W§ã°=è@pãt’(:Ššö ˜ÇT#¢i³2¿©ýâ®%ð|XZaÌÕùkö6w,f¾YàÛŠ`ZÌÜ µÒ{Ýôðš™çÍß\®íO&?‘¼d׃ŕ׬Z5Æ®}/"í[1Œ½Lsh»õN,šgaHnÊ~°d]XBW—æm­ç¥„Æ¿—º®9ÚÍ/6ý‘ôá70ì/t9éZι>ÚZ½qРØÁåÆ!„ã/ éæë뺽È:2@„ÓñT"ÐS2ìì=dèÙAó£éOUÿ˜•¹èqHé?ˆþ yzDx(!/µÞE$-Bó¯ìrL€?ÎÚ©I­£n…wŸôsDéræ‘‹â¶§¼Ù\IbmÃrSŽÆæ§¾—Ÿz+Êð C{·Øüµ™Ì|7œÞ~†éŠc»&9ƒà•0Žÿ-b`á²°q…Éáoùú{N†%‰Žú2—Ø‹ÈV‡Ìš>‰ÁÓ<}ÖÕ*¼RúÄŸ©ÞE!^›ŸöZQ™m¼»${VÕ–€DX¦µfŒù‚¹Él°jl^ê?Û[!È »S¶^knfŒÙÉ(+:—@gÁ@Wm«ýšíÝüÉ\oÊoÃõˆßžöVZ¿øÇA˜âl$49=$þ»ØüÔ—CˆºlvÝV¸<ü”¿§s€&øà³A ¸èbØäȶÍBL+ÎúcÖq§ãÕ$QtÀüÈéw0øIC;”5)ëéÒƒù;ˆ7„{œÏ.qùý ­lIö¬Ýžïûqö¶É}vÄ Ûü½µãñfˆéoøÿPwÃ*¥ ÜóÀö–›•¸†‰’çd.ÚàtÌÞæ£íW%^òñù®q2žIí÷Cüö´oœŒCˆÚˆyáé|žAÕ[3{oNXŸÃ¶Æ_BÔ$CÏ­l^Ôô˜øETÿó-&è›gþ¸p;Øm€¡U`@ëQ×å|p¬Õƒ­+µPk5}ôè•ÆÉ¯n_æFM¿ÂåW² å_Ïò=5u0š˜×ÏJ|ÛŒüKV Óë™0u™åú€\‡C ¢7Ó#‡Êÿ!¼ñŒÎ“r8†¨IÅVôHÔŒX€_GuO.3øîYYn€´„ÉjlÇÇŠÇÇíHßÔÊ¡6èɧm±•úþì-¹7;Kkš=m$ÓUÅÐ…€ßäûÅüð™çžüêŽãš]kô(ÞU¨…„ Ìø×JŒîp¿øáe2{ä>çt¢.I[ÉÜÈi*Ø«áQsŽÀsæd%­€Ôиá`~Ôó3 <Ÿ—öJ+‡zRJó|Vj:ÀmjPƒÍSûû¾0rz43ý €ï)¶Î.ëÝ'‚'œÚçÛ§¸¼ôïˆÑ¨}Ê[ÃÎ =üˆÓqÑY¤ôxƒ:U4„ó$QlóLéO 5y§æ7ff%-€´ÐØ(bz½bÛºJ_ :cj+‡Ú(OoJü޵Ú9ö‚Çít,µcbTï½û£O©ˆ¬M¼@§Ó‹€.* ò¿ïôîÑþÄnO}•˜–91ÏH‰oÔ߆öÚí…h‹ˆhZ฼¯œŽCÔOÅfFL †6Ö<·±ãoìNwÀ÷½²;³z€ç'ûÉe³iUƒ+‹Æ†š_®á•‰l} VóXQ“K@Ì‹JŒC3-º`ðT3Ât²† WêÜãðƒ;½è‡˜ñJJßø'»P$õ…h>oŒËYât¢a’(¶ 3ò/= C­ÐÏãð^Ûæß˜fQ:†ºÊ ßUuv« š} ç¬f/ªÝœþö݃_Gqñ¯ÏŸ}¹Ó±œÌÎqQ|³îÕÔÏ2aâ Nïð3ßE„[àU… \¦¡Šïhj íÝàŒŒrMô[0v9¡“RX½.,á„;SØŒÒÖ IˆöŒì›î"r¸¶ª8!)ÓB’¢¦v.ƒñÀ<—°¦›ÌœGw‡O‚_çÃÌ+z„z: ñ9`Ê ÒišŸ—ÖŠ• Oî8Š–ÚÖ_Üât,'¢ z ƒ z7ås]ðPPI)F4púu?ëS¾¼vRøŒb0¿ Ð/ë|ŠèÉM‰£#HÈKÝ—’0šÁëø9J”¡ùen¢ ƒ¸´­Õ ít‘qm§IÙ^QÑC4Lz[€cú–A½ð`ÃÌÄœ³uÑ—’0Œ '¸/€ ¾ƒA/S~Z¿ø¯SCîó–rþ¸x}.îóGoªê_Þ‰Ñ#Àî~ÇMúº•”ø X÷ }uv§CwÔ“$ÌÌÅùd¹nøH=§‡ÊðsýbóS¾ à~§ãð›ô~ñÓ:IÌÒ£(ÄéÙiØë?>ÛéY¢$Qlf+1Ú0¬âWÊäÄA æd&ý RB㯢š·‡0˜˜—r™±+-$~ņð᎗\)Ð%Kír~Àé8êãa€ñXÕ{âUMºqÝAšôœ±ÏžpžÚ¬m vrýEÉ}]T|Q“âè@bóSW0Ãùí»óÒúÅ^Wÿ)—$ŠBœº]†M±þ“r¶9ˆhI›”þ7€j ÅòÛ:ËïaH¡oá”K­pÍÝkÛvNzHÜ¢5=‡ƽNË–ìc«Ày¯WôrzÚ{ö€?0p~ÅÛG{¸^lÊç¨gaáÌ€uº©•õÖE7%ŽŽ¦ÔÇw"§W@*ñÏÔsãÂëœE!NÕ·JÙWI’ضH¢ØŒæG%&1ðµg»î0aêua ]µm¼ àÌfjÒ—A‰>öæô°„„fºg­²YÑóYãœi¿~;'0øáªDscÌMMZENõ$Šõ¥ S7æó=ƒnP\÷ G5%ŽŽæºœJ øÀ~g#áîdЛïõYcú¥´ÓEÂ…hsôj «øÊ€qùùNÇ"šFÅf2?rZ"€)µÿl3F™›Ì‚•m¸4ÿ›€õ}þ4õeÍkÒBâ¦ch«/Pòó+{ž·öš‚Òª¼Ó4ÁoóôP¯/hÊB‰:½¤ÌÈnì‡Çf<[®»M1õiB ÒmkwBëQœ.uaoq¡p¨:ŒmP ÷NÈù=Ý#¿dµA’(6ƒùÑÓïb¢Ú›¸—3Ñ-föâ\èzèQ®uŸ¢Ãpïs[ýbü  Q=U P¦sˆñÞ'QWt>û4Ù÷ß¿RàµNßší6dßýçõãÁÊ÷ ˜•½‰EßÝ„[Õ)²MÐ{š vÔsì4‹ww q;Ò?eð4§ãø¶Ô¸ªy¸±›ÖR"Gˆ“aàc õËÀ Û/ª/N”Ç9Mó"§ßÈÌÏ£v½ ¦ s²mÜ \´}èxÔȳÆb½ÕÐýÖ…%t%pOC# @ƒ£4˜¿¨µsKC®)-õßðQĵ#®Îù Õ6W?§wßûöìôŠZ,«|>@îd™±µÏÙç¼ d¢(9üWš0ÀŠ“ÝÃjº°·¤N)«k$Ö‹€:¥ˆ%Ql¬øü´'SCâ/$àn'ã ¦ÇÒCþ›Ÿ²¾âÐ!M®Ë)Dq„Ä qÛž“‰mŸ$ЧÁ½k¿†Z_G?>'{qÕææc°ÊÆlnÌ=‡å¦p@6€+¯é9<Èåo]ª ®eâQº¿°¬²uˆ»fךCM|¬S²~½ix»5Ú:‘=ãû`ÐÝ•ïIÁ$³"1gÌ#ÆÎFÝèx‹¸©½ð\T·æ9¶ø¨- °ŠÆ—øæAŽAp1øõ áÃÙ¶v'˜‚HE!j* `¹å2ë26ûgŒw:Ñ$QÐ&~õÌap´‘M€Ü) vçL\yØÈý^1 öœ¡çE%þDà, úÀw.¦Ïfd/Êôl$6ÝÿLLšÈ…Æ=Qg(Œ/-qü[Úe¢=Ù51*\½/3›dºç}ÚÀ@îù¡'eÂÔóX æð3Ãkìt$ñyiÛÓÃncÍ0œŠƒ€_”¸ÿ°$ŠB[˜ñ’¥ÊŸï6~G£¾·Š¶GÅ&š?`f?[ÛkÐ|%njSz3¨7±`c^dâ>Öã­À¢Òܵ¤¨šX¿ô³àËŸ+ñ šæY¨ÑÃHcÖ÷‹ÿ ÛSÿÚBñz6¡ö âÚø±O¬7 `Yè0] €m¢—›pÛBÔN¹Ñ‰eæu¦¯‚›rЙþß6¶,O{››’’Ö/~ åN€.Ý#„38ÂÛü q¹©2±ý“D± Ìð‡ÎÖÚ^KÕeWZ¡'€;˜pGaßÑùQ‰¯jâ¿ÍÉLúpÏxlí¹Ã^õ1øI®ü(¥„Å”›úu«ÇÝJöˆº@ÕN* 4»²7¤fWþ°ó„­[špÛú†ìï ÷p#Õݘ€h066!`‚_Z"v{ê¢õ! yþývÈÙ·/D«!P&3¯xm€OIZU™™ƒØ!H¢ØHf„ÙÅ0Š?y’KÀyò™i‘ÞO Ÿm¥÷«C° µÂQÏù*ri²Ï`Û8ƒ€3™ø€B¢€(®¹x¥+ã‰iܼ¨Ä÷”VÏܺð0|çº=Ƥ†Æ&V+îÀ‡4^Ø8hРÁ'Üz®-Ú998e0=}ÓkÙ–w pYØu®ÖôTo}€ãÛ$Šjpzu bœŽGˆv¨À&¾ƒæÏ‰h]à„œÆ-í’$Š`†˜þ†Qò.@µ÷þ=àk¯XýHm*/öÝlæ›%-C7ÿä"Ò|Ÿ@€´Ò×Ï‹J\fÛþsÌóÄ祭Jú­¶w @ÀùÇvŸ`IsÇæ4UÖi <:®ž“©dNÌY‹û_ïcÐyÍ®8M±›Ö¤„ÅR_èêt™µè oJk›”ótéœì¤×fg-ŽUP2ÐÙ°J?ž?`f?¸.çƒÒ®g` ·§ôMh°Xw[²g|ÿÜãqè³ÞË2×@ñ²°Q]ZAS¾oÒŽ*nô]³*Z̆íW? ÂŽC!Ú+éQlgff-üÀs£A[ÏH\8'gñ·ƒ32Ê?‰ºbti©ÿE< ÀX§c=m¤‡Çßa&ž ¸Kå)šSqØxù©Ü¾«.øà ?ý@OßÃf±ét^È„©?¶¯¼£œü¿q„Óñ!D{#‰b;5'sqcDOûõ‚¨ö̬…ß_™õéñú¸¾œ¬ kÏÖ»b…t›´k|T,ƒ®«>BŸ/ËL€âác\Lx#hü¶SZ±7)çéR¹§íé3À‹]µã“ÃÂFٟýÀK!D3‘¡çvŒž•™ô^¹«x—9È €«·¯Ù«”ºÝGéÛœŽïT± Eªº¸6(ͳ€WÂ`œªãhrIÑ ÉMùLw¢ì@$„­Iz;sÓ’Cžïcs×mL Mc€šºµßþñ1,Òg8Ì=´âªò$JÓQ6HkfËÐö>?ƒwŸùtαfzŒ*»÷ø=WïlÂHéõLæ(Üq;¨8³1p|ÎÍݾðNqÛSV§†Æ?A\c¼BˆÓ ‰bõs^÷7ׇ õCþúzk>î¹?¦¯¶¬Ëˆi¢D‚Y»sÕET½‡50Ð €É@‰vOˆ> æ jŸÁ¥6ô~jÓŽS{çäà*Óó=w<©ìAä•0ŠðÌÊÌ—ízÛBQ×Á¼3¦õ9t€NÇ"„í$ŠÔ¬²‘»öñ½÷Eœ¥m×eº\w‡B11ö0s±ÊeÅŸƒÂÀ@Bи© ÝAtƒ¯ðgX6vOˆÎ&¦U6ë•ç>“õ}Sâ6Ê:MfÏâÚL/ßò9í» „¨ŠS»|º½Ù”{‹¶o VÙZ#n÷uY„:B´u’(Šz=sÀ{'»nçäàeu‰&Íç1ë! ŠCã0G2ñLE4s÷øè/˜xIŸ³z­>YØŠâÚÓ<±ûaàƒ|Ь#3«N€—ÑØö·]¡8¹kv­9”2lC Ðéx„¢-“DQœ?€ MU›ÀW8wÉ®bßV¼^€½ÆhÒ£Á¸¨êÙ;1Âez}ÏþŸ¶îž5¥OrÖ; ]ª _à.‡þÓkyö×Pdùª÷Ã.Òìû\#±Y,è?ã"V|5ƒ/®ˆ#@€N à.Ó³@>˜þ§ ýY÷òâ*VV‹f›¿îé¡ñc™Ý7…BœIŠу»Š‹—…ö+\>™/ã,(d¸àúÂ|vÒ1½’7o°‰GvOŒŠUL㸠€qò†Ð ·wOˆ^vý±Ïòk”´Ù312š™ÿäqˆ¡”»7qi„_³çî¯t™˜y𔺑FO?SCe¦»5tÿ\ÚÝý: ÀE ܨ´ÂQ#ðÈü¨ÄÕ¤TòÌ- ¿iéx;šØ¼Ô¦…Æ_Æx§cBˆ¶JEqRó¶Øàƒ¢g"ûhÖwÚl'&‡ûø„™Þ.óÑïž16÷(à.˃eYiÒöÞ3µ6| Ш ñ†¬ïöLŒþSïe™Us ™Õ£¨Q\o?½ù[(ráÿÀUóY´´yž¼~æ 3Ð8^2ÅfžÐiÔí£n ÜÃZß37*ñp¢aæÓá `±Y¼Ê 1ý[¨'!/un óA…¢‰$Q§…ÆÀî4>÷¥›²;I³ô" ©È È)Xöf÷3™ë­>É[’ˆø yj€i<ƒ<ŽØýðŠÞL”X (3pܶ›íá<Ì‹œ~#ˆß€{JË"¥üJVšCM™ÒLbóS¾`Ðd§ãBˆ¶FEÑ,Μ”s¬Ó„mÑ•¨Þ¹1½X¸<<½$9<¢òÚÞ˲62p164µfúwïå[·@ayÀ=«Ïé¥DÍ¿…ÛüÈ©—€øu4fQŽÛ^ŸxÀ*Þá#²èÆÜ€€‘Æž’¹§±¨O|~Ê3 ¼àtBÑ–H…hVãs¾8¸4â~.^Aî29 `ˆ d%‡ý9pBî¿ 89óàÖû"F±ëŸ ÜÒÈÛÛÄz>x!ª3•XS=Î,îôæ}÷”üîaá†hbJñË–‹?67%5¸óÌâ°i]Ë]t1£™p€Î ] ´¹QÓÿ;'kѧ§þ±=0.`àb§cBˆ¶@EÑìΜ”sŒ·%Güâùp¯vî $‡]t ÷!2¡û?SÊæÐÛöø© Àí¸õ+}žÉÊ€Àbû>zTž à9šò}as?‹ëxñCLÖÐy§²Òãfmylkcî—˜›t@ €”¤¨©•’1ƒ˜BýÿŸbàâ¦îÉ-꛿¾dCøð›mÛÞàl§ãBo'‰¢hî!àœ…EÉÙÌü*ÈÝ#G ÉEg…‡ñ¥·Ñƒ»ŠÉ\om¼wÐÝ縊ºñµ Þ(7´ž‡V„uE9þâqÚ°¬¹ŸÁŒ1;±UÜм6aÊÌ̤'N5‰›–õèqÓçF&®&ÂPâ2hnä´kôÁ©´!ê²míΔ~ñ·*`-H¾žªòrëÚ=u:ŽSeÛöWçþ-[Và qòMR´¨À 9o$‡°Õ A~Sèçû!'Ç\O6 ~6£|ÿø˜1å°Ó ®ï>Lø{Ïgܾý,5ÄgTÞ š°mg}Ÿ;Fyém êVïIâq³3“VÌn†væd/þzÁ€ñZët º—´ª)¢q$QlF ÛSÓÓûÅ'ríõ¢Ñˆð·áŽn2è·V:‡ÞN³ˆ×i¶™õoàQž„@WsÉ;üRˆ?œ½|S+ë&¸ËìÔ@@¹^G–÷íðžçS‹”Ä!`t§^™´¢9Ûš¹eáL|q OŠšÚð\FqJb·§þ@³ÏkBˆöDEÑ*:MÌ[­p—Ï0!®¨ÐxWºW?³KƒîB­¡\&~îœeYyàÃ>ÐÕãôÆÀ‰9Ÿ7w¼K#îócâ«ê9U¨|Ô_ê9~Úæd&ý „ê9åWÂteK´ÙÑù[E Û' !D$Q­&hü¶·+nT#ÜPx ü¯•oÏMÞò>ƒ={K´Å àØŠÈLªùq~¢%b=fœ ¾¢×ÿ™ùãÂ}-Ñ&0ðR}ÇQ½Còâôüj×çÅûf-¾7¸B´E’(ŠV81÷I0ÕH†¸¿09â•ïUy§™ò€™VTN8wYö®YNfO€«û-'Ãè]ÿq^ÝíUòñÁ;¨·Ö"õjÉv;²ØüõùÚ]ªÈ>éÅBÑÁH¢(Z]`YÉ€ÿWó(/+\>z?›QD ”°¶€‚'C{2xBO-£±å-$Wòödh#»EÚ«0ý‡Å‡QÏBRó¯ÅÅå¥,`F‹ôP !D[%‰¢pD—ûò3 <½æQ õW¼´ò]ð3[þ …+úõ"ÐØZ·øG—‰™-6¯Œ4•Öw¼\Ù>-Õf%Õ77²¸žc¢À~þ%÷Øìt,Bá-$QŽ Ÿ»”Qk¿gÂ]EË#j–¥±\3zaÍôtKƦIï¯ï¸*S->W€úÚ¨7Ѽ®Ìúô8HÐf I !Ds’DQ8†ÌPcž!3?s|iÄYPøtTo¬ùA¬í<1gSËÆFõ&fdè‹Z²]3:15ËÿT4Œ-Ù®¨——ž…zÊ4 !DG$‰¢pTç?çlfpíí÷ÎT»wÌPÖTïèR©E l{²5rê?C·´d»psýg8¯%Û5Åå§¼Â"§ãB§I¢øÿíÝ_Œ\Uðï™ÙÒvKÐjÄ(/j›¶&b$Ú`TjûÐ51}P h°B‚†ÒB—ŒnC^HŠEE‚Hb4Z# †¨¥¤˜†˜PÑên¥íi¬i*ôÏnwçø DÜînÓtggŸÏÛÜsï9ßÌd2¿Ì½çºn´'_Ë™ëØ}áøö%צæêW,ÉPïõ~ÞéL­ý“9£¡fÕ×WÜri'ÆÜ¶ô†ö|¼IDATùµæºÉÚjÊ““©ýêÐ}Iy´Û9ºI¡H×½iÝÁc5¹k’¦ûRrÁ«Ô”m¥ÌÎ-Á’ül’ÃÍRË·ZiÍøwç_ÍÞ›K²l’¦#íÁ¿›éñ˜^+­ö¼ö©Ï%9Ðí,Ý¢PdNX42rO’Ãg9íhï‰ÞïÍFž$©%ߟ¢éCÍå#÷Ö¤ÌÔXýË7}¼¦Ü>E·Òšdn:íŠçöm—|2Éñngè…"sBùÊó'K)ÓnÇWJî/7?3k?Ø}ƒ»“ü~òÖºn˲ßm-m]t¾ãlY±éª¤þ(ÉdKï´›L|†“Y´æÐ®gjêµÝÎÐ EæŒãó›ßÉÔË’Œ•æ“^:¯–[§l+¹ªÙ<õ§-Ë6}~ÛÒæŸk×[Þ½áƒý+6>˜dÒëKÍC·níèn0œÝêáÇÔ»»`¶õt;¼â-× ½tbû’ûkòÕ‰m5ùÉÂuŸ›íL}û·>Ú¿ü–ÓÌv¾¤–úб梻ûWlúam·÷´å×­Áá‰'n½tãâ±ÓY™šË“|ª¶óÞ³ ÿBi6¦.T™Ue¸½!ïh¾¯&«º`¶(™SJcüµÝ¼)þín$Û¦¸¤ãz.(×–Ë’ºdšÓÞœZ×—RÖ7kÒ¿|c’-ÉÑš\˜dñØè¤·–§ÒN)Wßöç;þv^á™1«²{ì±Ó«?ݘ—§’¼³Ûyfƒ[ÏÌ) ¯NÊ® ‡÷ö®?еåa6ýaàèxO]›É–Ë™Þâš¼+ÿÙ§ù\ŠÄZRnêÜ:Ù¬kºhÍá]ÿl7ò™ØRxP(2ç”Zø¿×©ÓNr™ ­}ÏŽ×|8ÉP‡‡­%_Ü<´µkÿ 2½5w=Õ.ùD’SÝÎÐi E朅íòÓ$GÿûòðžÅ;º™ç­ýÇ{| $¤3Û»ý±Ñn\~ûàÀƒè›´æÐ®µTÅ"ðš§PdÎ)7>;’ZN’ÔroY÷›Óg¹dÖ´öµ^Þ<4pM)õ#Iž˜¡nÿšÔ/¿mÁe·ý厧g¨O:lõ¡Ç™4Ö&ñ)ðš¥PdŽjïHrr|^ã¾n'™ÌæÁ;Ÿì¸²¤½2¥lϹ '“úp©ù잸¤oèÎo¶v·Æ:‘•ÎùèðÎ'FÇzÞ“ZïIòR·óÌ4³ž™“zç-Þyòô±m­ÛÿB·³LgóÐ]{“ìMòåþå–×”•¥–%iÔKRËkrAIFSs"%Gj2Üh´Ÿkôþ¶µ¯5Ú¹dåï©õ±Îõÿ?µYæôgÔikŸÿÅ‹In|äíÛ¸hÞËW–RVÖR.NòÖ´ó†ó黑Æ?¦ko¶3R›eÏùŒñºUë´ïíhYtº'c³òšh|¤˜,p6õÛï?—™Â0ôœMU¼ˆd®IEND®B`‚apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/images/parsetree1.png0100644 0000000 0000000 00000025426 14523004075 026236 0ustar00rootroot0000000 0000000 ‰PNG  IHDRVü,_Œ¿ IDATx^íytTåùÇ¿aKÀzÔD‚-Hl)T%žº„b]XÃiàÐ6U¬¨ö§- àÑVjâ¡‚I[O ‡°ˆKEâÒ!,Új±,‡F¢Áb Û‚`Μæ««aÀ­[C¿ãE$\kryºª6èÂ…ÀªU@vvx×äçµµ@Y™éªn³3$ày«ç§0úD¨æbõñ°94pœÅêø¤®û÷EEÀ®]|ìOeÖL‘(VŸ¯ ½\ÕP§Og ÀçÓÎá9L€buxÒÙ¼¤&MjnqåÊÐæ/ ä X“ËÓµ©#X‡3ÿê‰ c'=G€bõÜ”%§Ãrb`Æ žgMMÖBá(VŸ®•æä„ŸaUÃu˧H8,HŠ5m¨Óßú €1—ª¤;|8s¬éŸ¶«ÏgY}úªªªy üH«Ï'ÃsœÅêø°$@~#@±úmF9 Ç P¬ŽO;@$à7«ßf”ã!pœÅêø°$@~#@±úmFüóŸÿÄ!CpêÔ©ˆÑõïßyyyPÿUÿïC  8F€bu }Ë®¨¨À´iÓpæÌ™¸•uíÚŸþ9öîÝ‹={ö4ýWý?…! €e«eTÎ|ä‘Gðøã£±±1n'²³³qìØ±¸åŒ(\ÛÈx D%@±ºhq”””à¹çžÃùóçãö*''Gމ[®¥(Ü–äýA$@±:0ë·Ýv6n܈ .Ämýª«®Â¿ÿýï¸åÒ]€ÂM7q¶ç%k gkĈغu«%~ãßÀ{ï½—ÂÞ¤§j 7=œÙŠ» P¬I˜ŸâÿøGÜš2220tèPM¶A»(Ü Íx°ÇK±Ú˜ÿ¯|å+8pà@Ü;Zµj…Q£Fáå—_Ž[6è(Ü ¯ŽŸb5™×ÜÜ\ÔÊ߆ŽsµnÝS¦LAyyy¼¢ü½M®M`,î*k÷îÝñ™|¯^œ«]»vx衇 Çžx9K€Âu–?[·F bíÖ­êêêâéС–/_ŽÉ“'Ç-Ëî"@áºk>‚Þß‹U6ŒŒW§N°}ûv|ík_ úüû~üfÂ0aæÍ›çû±s€Îð½XCË–I€‚J€b êÌsÜ$@)#@±¦ -+&*Š5¨3Ïq“ ¤ŒÅš2´¬˜H ¨(Ö Î<ÇM$2žëþý@Q0v,0gN$Ÿ… ùðTY™ È¿çÎ5ç¸r%P\œ2Ƭ8 V­&Mäk ̔ςÈ<÷êÜ}70e °kWdÙÂB@êËÎNCÇÙ„/ x^¬òÂ0{1™‰U/Z5›JÐ<@¹zy…+iŠTÍÞhelÕÕÀ°a¡õÒ½{èyÉ’HËÚ‘²”«—W„³}÷…XÍ" «büòÚ²¥9ºuvJØz¢d-*+¾}c?ÅÔÔD«’´:Zô›hy_0x^¬÷Ü,] #N»b­¨`„âõ%ëéÃø;õo³ˆU‰U>ÙÌ‘×W…3ý÷¼Xå…qøpd¤bG¬Æ²ÎL[Mhs)ѬþÍ3–Xcý.}dþ'à ±öë×¼)¡ß¬2n^™åXUÞXþXìfR4‹@£Éóôi`æÌЛ5s¬þXNŒÂb•<˜QvNÄÚIvbRØfâ”srš7±dm̘ž{Ub5;0}:óí‰Ïᆱ Fdº~}è´fMäq+³ˆ•ËÀD¤²TÄ)ÿ/—þ´÷ý7ïn‘¯Äª?r#­¤Ü4ìKr¨¨uøpàÚkûî/?)@±&‡5k1'à+±ÊUJ@þ_ÿHÇ ª`½dÈfÕ AÀ»ïF>ÚS¬ÁZé­ïĪRò)+Š5ÝËÉ=í©§—ª*óP¬î™+?öÄ—bU/šüüð´2ÇêÇ%}L±>øA±k-¤{´žkºA±= °J€bµJŠåH€HÀ"ŠÕ"(# «(V«¤XŽH€, X-‚b1 °JÀ·bÍÈÈc ÿ¾pá‚U.,ç3:t@CCCÓ¨.¹ä\wÝu˜8q"~ðƒøl´ŽÓ|%Ö>}úàСCaL/^¼£dóòò°{÷n§Ù³ýèܹ3N:ÑBëÖ­qîÜ9,Z´6lÀû￯•»ôÒKQPP€)S¦à¶ÛnKaÏXuøB¬FqvíÚŸþyÄü}ùË_ÆÑ£G#Ä„‰öû%5›óV­ZáÏþ3FŒÁ'Ÿ|‚Å‹ã•W^ÁþýûqöìYôìÙßþö·1uêT 2Äïø8¾$ð¬X%ò0>ÚKtjõ2ʸM›6Ú Š—7\vÙe!/™×'žx?ýéOˆD±¿ýíoñÆohO@"ç«®º #GŽÄŒ3 OF¼H O‰µ°°¯½öZØxäEô€üù€¯%K–àÞ{ï »{ôèÑxþù笑·¥‚€YšGµs×]waùòå©hV«óÍ7ßÄï~÷;¼õÖ[¨­­…äk%tûí·cæÌ™´/Ðð„XÑeÛ¶mÑØØ˜ô™ìر#NËW#é.;QpÒ;à ¿ùÍoâ]ùö“K"ÇW_}Õ1:•••XµjvìØ¡¥–²²²0pà@L˜0÷Èß âx®k»ví"ÍÓ)9£Ì333ñÅ_~Á¤ Àw¾ólÚ´É´úAƒáïÿ{ªšnq½K—.ÅÚµkµ7‚úúzôèÑùùù(..F‘ü)X^#à*±ÊNíƒ>6 ·Ür ªä+ŠºÆŒ£í믧Ÿ~Z˵ñJœÀ´iÓðì³ÏšVлwo(+23C¿SÏ}×®è  ù›ðÙÙ… õëÊJ oßð¾ÿN½ú÷رÀœ9‘ãºjkÃÙ85Úêj`Ø0`åJ ¸Ø¼jŽV¬}´åó«=§X¤º]Yד&[·æ­}öYhzõ20{½¸õu’j†^¨?©bÍɉ”ˆD^¸ÑD)¿“Ý›ÉÊme,sçÆ7 ýÆ’%¡Œþ ÄìEä&±*iÊ8ôo‚zþj<ò cÆ„ÞHómVñ GÕ©ä!¬ÌÞxÜ6÷Éê•q«7:Y7Ý»ò=.j]éûﵕ¬>³ûR.Võb3“®t׋b•~£­h«Df‘…›ÄªæA¢Öh‘”¼1VT„Þ ;v4«ªGƦÞH£‰ÕìÍÈþòõæÂfÑ¢èÁ„~mÔÔD«’´¼1E‹~½IÈû½N¹XãÉÓkb•Ç÷¬,àý÷ãðhb•¯ç\ºHOÿ˜í6±ÆŠ¤Œ¿‹õf)óiU¬²6ÜÆ!/i}ôoL½ëIÍËäÉÑS8éÛˆ$±ÆZ^ë/~LŠÔcl4±Ê#œä%Š…¢JõùmãE«ú¹¼ÐUkîe9FkÓï/ÖhóoäÁˆß›+!-bõÈâE±JRþr‹~"–XûõkÞŒP9L7ŠÕ,2“h¬ÍJcš$žX®7_Fö{mÆÅŒ4~úÍD7nôÚ'â¯;(Vó©—¡Ü&8ÊÂ>v,<f|AwÞÝ(V³Gs³v¬T€ñäÅj¾ÀÌš±Nјm¢ÚXÎ,šBi«ßR*êÔ©š0!¶X•´Ôq­5kÜsÜJ¿¾dL÷Ý,^:R&o[¶„Ÿˆ%VcÔO¬AM˜môÉ›’\úSñø¥Ð ¬ºÒ"ÖX{^M¨s¹j‡wþ|`Þ¼æc1±õTþÑ-çXëG½ÀeãM6WŒ»ÎÉ«™LZ°ž=u«â8|8píµáohj «§¦´©³)«ßŽ[ehÌ7ªãJÑ^*% 3àÖG9éû#'Ï<yÙŠX•Œ¹ù[ ²äÛ A€üQZã9bŠ•b80®ýô³(Óìñ^±>hà†e¤³0ûtT¼«ž? {FUêDþ^¦ÙbŠÕ ¯û}HjÄjå#­Æ.z= Æ£d/b•òêÅ’ŸïŽ´š-›Xé›d}„9ˆi5cm–Çf*À¾ÌÜtGRÄꦱ/$@$à4ŠÕé`û$@¾#@±únJ9  § P¬NÏÛ'ðŠÕwSÊ‘ 8M ­b•¿=ñâE§Çœòöƒ2N=È Ž9 iÓ¦M5jTÓë¤C‡6lþøÇ?¢G©h’u¦€Åš ¨y¡X“³x{ì1üüç?«¬U«V8þ<î¼óN¼ñÆ8uêÚµk‡ë¯¿Ï<ó ®¹æšä4ÎZRB€bMÖ FoAsK–ΤI“°J°ê®6mÚàìÙ³Q«ýÞ÷¾‡W^yõõõ² @ii)n¸á†–t…÷¦€Åš ¨ŒXS@ÕûUŽ1o½õVØ@Ú·o3gÎØÜ´iÓ°nÝ:?~­[·Fÿþý1þ|Œ=Úv]¼!ù(Öä3E£· ŽÙÊÒ‘Gö={ö„íܹ3Nœ8aåvKefÏžŠŠ =z’BèÓ§~øa|ÿûß·t? %ŸÅš|¦k ˜z©Ê+®¸GŽ ërvv6ŽÉ—ö¦ø’¨uùòåøè£´uسgOüä'?ÁLùò`^i#@±¦u£· ŽY¿tºwïŽÏäUtWnn.>üðì0kU–••añâÅøÏþ£2¸üòË!)„yòý–¼RJ€bMÞ J&ˆcîÒ¥ Nž<¶‚òòò°{÷–Uù‡?ürúààÁƒ¸pá‚vtkòäÉxòÉ'[V1ï6%@±¦`aQ2A³œ+mhh[5²+¿y󿬤ÔT¹aÃ-jÝ»w¯v¤ë’K.Á¸qã´¯ä X“Ã1¬– HF?h?¹mÛ¶8wî\Øc¥|ï¡Ç/9¥0kÖ,ìÚµKcVVn½õVí ¼'@±&Î.ê~–L´AûmÌr„I™õ—DyÈŸVðéµoß>-ûöÛo£±±:uÂM7Ý„^xÁ§#Nݰ(Ö°õ›d¬ òÓ˜e,rÉ7n܈‘#GZAà«2rtK>°uëV\z饸àƒ|5¾T&­bMõ`X? ¸Åê†Y`H€|E€bõÕtr0$@n @±ºaØ _ X}5 €P¬n˜öHÀWk}C=F­…ê«cÂX7aöûYU³°­drºäxÞ‚Í ðÚÁ×°±x#N4žÀÐò¡(-,ÅØ«ÇZê¿þþ¬öY–îa¡ä¨®† äì~q±y§Oò$‡+V> ,[Yvút ¬ ÈÌ ýnÿ~ ¨;˜3'²üÂ…@mmø=ÉUjjQÌÆ.-nÝ „}׮ȾòÕ²ÙÙ©é§kMH¬ÆÖž¨ÕäS2°sGÌ ûõú}ë)V/® öYÉBº¯—¢~8J<Œ’lNN¸,ÍêQ÷‰\ôÒQu{U¬Æ±ËxÔ”§û’%ͲÕ[ÊS®Í«Œb5#VZõÝ6JÁ8@EEH;š‹UÉEd©„¡«Y”æ'±Êøe÷'ÑìŒ@e%з/M¬êç" cžQä"ùÙE‹šëQžs¬fo*F.±"ÖX¿³:_~+—±êE'Õ ¯üŽr-j5‹’båm£M‚•¬Q´ÑúmóÊLøVÆ£—‹´)³¿žC—v]"„¥DªÞ(öÛgZÙ­.\#w%Z¹¿ld™6_ú¼¹ôE/b)gœ³ùµÚŸDË™EQf·£ßÓ ¤_¿PtÖ«Ws.×O«¼1MšÔœKŽ&OýF s¬Í«5-b5ž ЋÈ,âQÝSÝúÇôX/´x2Žö{ã£m¼ˆUú ïS¬ûU*C/V‘‘ñÍÆ(xÅE=në™(±>µã©ˆÇv)×Ò C=w©kížµMØeÜÑæ%ZŠEÿóD#éDk™b¥äþõ뛣RãýÆ^«Ù©€£q}~Ù8ÆÓ‰Ì•ßîqX£Ý2æê¬ˆ5ÚÑ(c×X—Êq¦C¬fGÐÌÞpâ‰UŸ£ÕÇ,·luñêÅ<»j6Æç×n-Û^†Êñ•(Z[„™CfjÑ«1¿*óµü¶åѶ‘}KsÁVÆ"2¸ï>`ñâÐc¿DT[¶„Ÿˆ%VcÔk&f½|׬ñæq+³T€‘/÷­¬8D¬ö†$±Û±+Vc»fçX­F¬ê±úêîWkrŠ'VãF“]ffåÕ㿤*D¦ó¾Ú”¾Í:On{²)kÌŸš¥Œm(^òóTŸoV;Û²ád¶sÝR±ê7Ãd<~ɱR¬-{%9±JÔc–4>^[f¼k´ßë7cTÎ×nŽUŸgŒ'V‹Õk,±¾~èuÓ”BK?  8©4†<þ«JHî·[‡n¦}ª¼Š¼G^52,e¢ŸCã&™•ùM¤ŒDZòÝÔ'Ï<yÖÒŠXÕ1¢hQ›J Hÿ¼ôXkìk"«ÍE«ˆÌìT@¢ÆÊXO´uýÉx«Ù©ýw<±Ên»ÕS±Ä*"3n¦7Ò]êÈš>£Žué…O!èSê$ˆY.¸%lvƤߜ2û4V¼«>wH~î\ŠÕÎÜø¹¬+"VíêŸÞRçX[’#ÔŸc5Ëå7YŒg*ã‰U$,R{õÀ«ÚÚˆuÖlóJeÕ÷SêÑoìD‹ØÍ„¤?Çj¬'ÑÅkvlKú[º½ÔÒyܽG÷†©3޵%ókwLQêÏ£êïu* ÚGZÍÎr*éæç{ï#­Ì±Ú]QñË'E¬ñ›ñO‰tEZþ!Æ‘@ðP¬6çœbµ ŒÅI €(V›“N±ÚÆâ$@k'C&H-Š5µ|Y; @ P¬œt96ŒŒ \¼x1ð˜ÆŒƒ 6h233ñÔSOaÚ´içbÅj…ËŠ@ÐÅÚ½{w|&)ûß%o2—_~9>þøc´jÕ "ܵk›¿?"P‹Ãâ`)V‹ X,8‚*Ö6mÚàüùóÚD·k× “>xð`¼ýöÛÚÏû÷ï={ögaØ)Åj‹ƒ@Ä*úª«W¯^øàƒâNôÝwßgŸ}Vñ—¾ô%lÛ¶ }å›nxi(V.0‚Xõ‘§ ÿÁį~õ+ÛkaÓ¦M?~eo¾ùf¼ùæ›Z{W^y%:”²¶ÜZ1ÅêÖ™a¿#à±þìg?ÃO<ÑÄñúë¯ÇÎ;ÓÆuþüùxì±ÇÐØØˆÎ;k' FŽ™¶ölˆbu’>Ûv%¯‹U¢ÄÃò×ÿw=ÿüó=z´c¬÷ïß¡C‡â¿ÿý/Z·n»îº ÏÈ—ãúø¢X}<¹Zb¼*ÖöíÛkÑ¡\"°sçÎ% …wåååaïÞ½Z 鎠S8¬ˆª)ÖtÒf[ž à5±JÕ•cÇŽ¹ž³œ$HZ6Ï.»ì2|ôÑG®ï³R¬vh±l xI¬Jªò¨/¢òÚµ|ùrÜÿýhûøñã^ë~ÔþR¬¾™J„HÀ-(V·ÌûA$à«o¦’!p ŠÕ-3Á~ ø†Åꛩä@H€ÜB€buËL°$@¾!@±úf*ƒ3ÚµZ>%K0wÄܤÜm0R¾sº¸˜3(( wáB`ýz ²0~[ßþý@Q°dIsù¤C²X¡êËØ±¡þ/Gm-PV&¥ 4®¹Q¦tåÊ/\«f‰} #@±6 húôf))Hnë®]ÀÖ­‘¢7«^´Æ1=ð€7äJ±RZž#@±†GvÆHέb-,V­²³›—œU±Êrï–-‘o$n\À«g…}ŠI@‰µ°O!ªV¡¦®F+?ÿ[ó›Rõ õµjòsó±âݨk¨Ãº ë0öê±ØY»……ÚÏä*¸¢‹7"«}–öoc*@•¿æË×4•3ÖQ”W„ÕãVk÷ëÛÞqdª?¬6mÇê4GKHd—•¼ÿ~¸°Ü(Ö{î–.Œ§]±VTDÊÙ*Çt–£XÓI›m%…€«Õ(ËYCfirUrÛýénTM®ÂàœÁZÛë÷­Ç¸5ãš$¬ÊÉï”\õbÝwlŸ&á‘Wl§’ª±-U‡üW¤.BÖ?; b‰õ¿¦N =b«¦Å*ù^ù­E‹ÂóÂvÄj,k‡aºËR¬é&ÎöZL@‰uHî&ÙI¥ 6/@ù{åØV² ]ÚuÑä–›•Iê&÷)Q–ßQ®E´J¬ÏÞþ,F® c;f›[ú:nî}sDÛf‘°U±Ä*›>ò“&5ç0Ý*Ö~ýBùÑ^½Â7«Œ›Wf9Öêj`Ø0À+X«ÕÕÍr®! ÄZZXª‰P]"·ñkÆc턵¸ºûÕšÜnésKSz ZnVE­J¸"ÎmnÓ¢^ýã¿´¯iïþüû#ÚN¥X¥î™3C¡ä!åË­Üv*@P0 ÒΩ³Í/×,JCG(V·Î û•@KÅj²™X+÷T⊬+4¹ªG~½XU^רIÉó¦[¬rLI¬iÂ÷ŠUx銭YyÜÊ,bõÚËbõÚŒ±¿MQ£Q’?-y±DË©&±ªèVÿ¨ÿÔŽ§Pº½´)OkåD‚µ>ZNeÄ*b•K¢UÉaΟÈJuÓ9V}_TjCɵ’ ðÚ²§X½6cìoÔÇq³«^nÆÈTŸB *cŽU6³N4žÐ>Œ ò¬ÑêÐGÑ*Çšn±ž>J ,[™£å{UJ@ú©?‹ë¥ ªX/EŠ•¢ò;§Œr³{*@Ž`©{bíðë£\jÌï¦#b•6”È¢ÈO÷dÇÚHSŸ²¢XÓ=+lL(±JîSÓU¾S‰On‰ö8.¿‹uÕL€ª®ë?ÔNätɉyÖ©T€B¥„åæˆUÿ&Ÿý”€W_ŒX½:sì7 €k P¬®vŒHÀ«(V¯ÎûM$àZ«k§†#ð*ŠÕ«3Ç~“ ¸–ÅêÚ©aÇH >ŒŒ \¼x1~A—hÓ¦ Ο?nݺáøñã.î©õ®Q¬ÖY±$ ¸Ž€—ÅÚ¹sgœ:uJc*oñ`¤‰ ÑIDAT­[·Æ… pýõ×cçήcm§C«Z,K.#àE±öîÝ|ðFò¡‡Âc=ÖDõÇ?þ1ž~úiíßòß3f¸Œ¸µîP¬Ö8± ¸’€—Ä:zôh¼ð Çk¯½ï¼óNT¦}ûöÅ¿þõ/´mÛ®d«S«ç¦Œ&f^ë+¯¼‚ï~÷»Z§»wGZžÂŽ;âôéÓ¸ôÒKññÇ[¾Ïé‚«Ó3ÀöI Ü.V•7m×®é–-[0bÄ-{ûí·ãÅ_L¨žtÞD±¦“6Û"$p«XÛ·o¯=ÂKÿdC*×wÜ—^zI«sóæÍ>|x2ªMIkJ°²RH·‰µG8&ÂÀŸþô'Üzë­IqÙe—á“O>Aff&¾øâ‹¤×ŸŒ )ÖdPd$à·ˆõºë®Ãßþö7ÂwÞ‰ 6¤œˆ¤Ξ=‹¯~õ«Ø/ßO袋buÑd°+$`—€Ób}øá‡ñøãkݾòÊ+qèÐ!»ChQù%K–àÞ{ïÕêÿþæ7¿iQ}ɺ™bMIÖCpR¬Ò¶\:uÂÉ“'}s“ƒÆÛo¿V­ZiŸârú¢Xž¶O- à”Xe·_Ú>wî\ zŸü[/¹äœ9sF;¢åäE±:IŸm“ ø’ÅêËiå H€œ$@±:IŸm“ ø’ÅêËiå H€œ$@±:IŸm“ ø’ÅêËiå H€œ$@±:IŸm“€  6/Àk_ÃÆâÈjŸeãNûE?û (.ªªšï]¹2ô3uÉ‡ŠŠ€]»"ë7–µÓUïØ±Àœ9‘w.\ÔÖee@f&P] ˜µ)§®fÎrrÂëR÷èk_°À¼=;}We)ÖD¨ñð1U«€I“€­[‚‚Ð@•h{õjšà’%Íåôeå^31ÆC§¶¾ê¾hb0¨¬úömnÁL¬2¾E‹Â˪rr§v¼~Æú=ÅÚz¼—|F š,e˜êw<Š\­”5J× .½X avvóÑÄ*%¦O£Q¬êßòÅXúè[?¾DúlÅje¦Y†\@@Ÿ 8ÑxCˇbÖY(Ý^Ššº­‡EyEX=nu½5JK_‘HI¤÷o„~K¬òûXuÅê ª÷ž{€¥K%òX«ü)/bÕG¹F±ªÈ{òäH±& ÍäFŠ5™4Y ¤€™XëÎÔ¡jrç Æú}ë1nÍ8¬›°c¯k»'±¢9³Êâ‰U"ÍŠŠÈˆ3^Çôõ>ùØn±ŠX% °fM(窢\³T€Ü?wndt¯_v~O±Ú¡Å²$à 3±– ,ÁÜsµ^Õ7ÔcÔªQÈÍÊM(jµÍÅ«N$f|”‡P_o¿~¡ÈRŸÛ%V-j/ÔÆW´Í+%W}_Ìò¹ñúí÷k¢äx ¤™€™XK K›¢S?ŠU6ÀŒ»þ±Ä*WúÍ·AƒÌO¨©3ž~0Ëé&2Ík"Ôx 8@ Õbuc*@J™®_ßü¸o"­:PŠJ¯*ÄÔ—¦bÓ¤MÚÑ,­D¯"­YU³"eW¬ú¨RŸ›U?W© c~Ud*ѵ>jV’VQw¬HXMoÁI9A±àÃ!’€Fñèe¶vÏZŒÏüÜ|-w)ySÉg*ÑEÛ,ÒËYm‚Åê‹ÕˆÕL’fWý’ó¯"~cÎUß•n(Ê+jÚŒ³Âͬ Åš(9ÞG>#`&+õ3jåøJti×EËM~~æsÈ—ÊF‹LS‘c½¹÷ÍZÔ¦™šõh¯Ròsõæ×#»?Ý­åƒc Þ,w›È4S¬‰Pã=$àC±•õÈJ`ÆÈ.§¤­íG¶Gˆ]Žgx©Ó ú1Óz ÇŠj­N;Åj•Ë‘€Ï èó–Æ ý‘)ã½K´$»èâc5;{«÷‡ä {”vìËX‡ô1i©‡bµ;ã,O$à)Ñò¿©ÅšJº¬›HÀqÆO‡¥£Ck:(³  ´Pi‰d¡²3ŠÕ-–%  (V X„H€ì XíÐbY °@€bµ‰EH€HÀŠÕ-–%  (V X„H€ì XíÐbY °@€bµ‰EH€HÀŠÕ-–%  (V X„H€ì XíÐbY °@àÿ9úØÀóÍÃIEND®B`‚apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/introduction.xml0100644 0000000 0000000 00000041577 14523004075 025460 0ustar00rootroot0000000 0000000 Introduction
Description The Apache OpenNLP library is a machine learning based toolkit for the processing of natural language text. It supports the most common NLP tasks, such as tokenization, sentence segmentation, part-of-speech tagging, named entity extraction, chunking, parsing, and coreference resolution. These tasks are usually required to build more advanced text processing services. OpenNLP also includes maximum entropy and perceptron based machine learning. The goal of the OpenNLP project will be to create a mature toolkit for the aforementioned tasks. An additional goal is to provide a large number of pre-built models for a variety of languages, as well as the annotated text resources that those models are derived from.
General Library Structure The Apache OpenNLP library contains several components, enabling one to build a full natural language processing pipeline. These components include: sentence detector, tokenizer, name finder, document categorizer, part-of-speech tagger, chunker, parser, coreference resolution. Components contain parts which enable one to execute the respective natural language processing task, to train a model and often also to evaluate a model. Each of these facilities is accessible via its application program interface (API). In addition, a command line interface (CLI) is provided for convenience of experiments and training.
Application Program Interface (API). Generic Example OpenNLP components have similar APIs. Normally, to execute a task, one should provide a model and an input. A model is usually loaded by providing a FileInputStream with a model to a constructor of the model class: After the model is loaded the tool itself can be instantiated. After the tool is instantiated, the processing task can be executed. The input and the output formats are specific to the tool, but often the output is an array of String, and the input is a String or an array of String.
Command line interface (CLI)
Description OpenNLP provides a command line script, serving as a unique entry point to all included tools. The script is located in the bin directory of OpenNLP binary distribution. Included are versions for Windows: opennlp.bat and Linux or compatible systems: opennlp.
List of tools The list of command line tools for Apache OpenNLP , as well as a description of its arguments, is available at section .
Setting up OpenNLP script uses JAVA_CMD and JAVA_HOME variables to determine which command to use to execute Java virtual machine. OpenNLP script uses OPENNLP_HOME variable to determine the location of the binary distribution of OpenNLP. It is recommended to point this variable to the binary distribution of current OpenNLP version and update PATH variable to include $OPENNLP_HOME/bin or %OPENNLP_HOME%\bin. Such configuration allows calling OpenNLP conveniently. Examples below suppose this configuration has been done.
Generic Example Apache OpenNLP provides a common command line script to access all its tools: This script prints current version of the library and lists all available tools: . Usage: opennlp TOOL where TOOL is one of: Doccat learnable document categorizer DoccatTrainer trainer for the learnable document categorizer DoccatConverter converts leipzig data format to native OpenNLP format DictionaryBuilder builds a new dictionary SimpleTokenizer character class tokenizer TokenizerME learnable tokenizer TokenizerTrainer trainer for the learnable tokenizer TokenizerMEEvaluator evaluator for the learnable tokenizer TokenizerCrossValidator K-fold cross validator for the learnable tokenizer TokenizerConverter converts foreign data formats (namefinder,conllx,pos) to native OpenNLP format DictionaryDetokenizer SentenceDetector learnable sentence detector SentenceDetectorTrainer trainer for the learnable sentence detector SentenceDetectorEvaluator evaluator for the learnable sentence detector SentenceDetectorCrossValidator K-fold cross validator for the learnable sentence detector SentenceDetectorConverter converts foreign data formats (namefinder,conllx,pos) to native OpenNLP format TokenNameFinder learnable name finder TokenNameFinderTrainer trainer for the learnable name finder TokenNameFinderEvaluator Measures the performance of the NameFinder model with the reference data TokenNameFinderCrossValidator K-fold cross validator for the learnable Name Finder TokenNameFinderConverter converts foreign data formats (bionlp2004,conll03,conll02,ad) to native OpenNLP format CensusDictionaryCreator Converts 1990 US Census names into a dictionary POSTagger learnable part of speech tagger POSTaggerTrainer trains a model for the part-of-speech tagger POSTaggerEvaluator Measures the performance of the POS tagger model with the reference data POSTaggerCrossValidator K-fold cross validator for the learnable POS tagger POSTaggerConverter converts conllx data format to native OpenNLP format ChunkerME learnable chunker ChunkerTrainerME trainer for the learnable chunker ChunkerEvaluator Measures the performance of the Chunker model with the reference data ChunkerCrossValidator K-fold cross validator for the chunker ChunkerConverter converts ad data format to native OpenNLP format Parser performs full syntactic parsing ParserTrainer trains the learnable parser ParserEvaluator Measures the performance of the Parser model with the reference data BuildModelUpdater trains and updates the build model in a parser model CheckModelUpdater trains and updates the check model in a parser model TaggerModelReplacer replaces the tagger model in a parser model All tools print help when invoked with help parameter Example: opennlp SimpleTokenizer help]]> OpenNLP tools have similar command line structure and options. To discover tool options, run it with no parameters: The tool will output two blocks of help. The first block describes the general structure of this tool command line: The general structure of this tool command line includes the obligatory tool name (TokenizerTrainer), the optional format parameters ([.namefinder|.conllx|.pos]), the optional parameters ([-abbDict path] ...), and the obligatory parameters (-model modelFile ...). The format parameters enable direct processing of non-native data without conversion. Each format might have its own parameters, which are displayed if the tool is executed without or with help parameter: To switch the tool to a specific format, add a dot and the format name after the tool name: The second block of the help message describes the individual arguments: Most tools for processing need to be provided at least a model: When tool is executed this way, the model is loaded and the tool is waiting for the input from standard input. This input is processed and printed to standard output. Alternative, or one should say, most commonly used way is to use console input and output redirection options to provide also an input and an output files: output.txt]]> Most tools for model training need to be provided first a model name, optionally some training options (such as model type, number of iterations), and then the data. A model name is just a file name. Training options often include number of iterations, cutoff, abbreviations dictionary or something else. Sometimes it is possible to provide these options via training options file. In this case these options are ignored and the ones from the file are used. For the data one has to specify the location of the data (filename) and often language and encoding. A generic example of a command line to launch a tool trainer might be: or with a format: Most tools for model evaluation are similar to those for task execution, and need to be provided fist a model name, optionally some evaluation options (such as whether to print misclassified samples), and then the test data. A generic example of a command line to launch an evaluation tool might be:
OpenNLP Models
OpenNLP Models OpenNLP supports training NLP models that can be used by OpenNLP. In this documentation we will refer to these models as "OpenNLP models." All NLP components of OpenNLP support this type of model. The sections below in this documentation describe how to train and use these models. Pre-trained models are available for some languages and some OpenNLP components.
ONNX Models OpenNLP supports ONNX models via the ONNX Runtime for the Name Finder. and Document Categorizer. This allows models trained by other frameworks such as PyTorch and Tensorflow to be used by OpenNLP. The documentation for each of the OpenNLP components that supports ONNX models describes how to use ONNX models for inference. Note that OpenNLP does not support training models that can be used by the ONNX Runtime - ONNX models must be created outside OpenNLP using other tools.
System Properties
String Interning OpenNLP provides different implementations for String interning to reduce memory footprint. By default, OpenNLP uses a custom String interner implementation. Users may override by setting the following system property: In addition, users can provide custom String interner implementations by implementing the interface 'StringInterner' and specify this class via 'opennlp.interner.class'.
apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/langdetect.xml0100644 0000000 0000000 00000023624 14523004075 025042 0ustar00rootroot0000000 0000000 Language Detector
Classifying The OpenNLP Language Detector classifies a document in ISO-639-3 languages according to the model capabilities. A model can be trained with Maxent, Perceptron or Naive Bayes algorithms. By default, normalizes a text and the context generator extracts n-grams of size 1, 2 and 3. The n-gram sizes, the normalization and the context generator can be customized by extending the LanguageDetectorFactory. The default normalizers are: Normalizers Normalizer Description EmojiCharSequenceNormalizer Replaces emojis by blank space UrlCharSequenceNormalizer Replaces URLs and E-Mails by a blank space. TwitterCharSequenceNormalizer Replaces hashtags and Twitter usernames by blank spaces. NumberCharSequenceNormalizer Replaces number sequences by blank spaces ShrinkCharSequenceNormalizer Shrink characters that repeats three or more times to only two repetitions.
Language Detector Tool The easiest way to try out the language detector is the command line tool. The tool is only intended for demonstration and testing. The following command shows how to use the language detector tool. The input is read from standard input and output is written to standard output, unless they are redirected or piped.
Language Detector API To perform classification you will need a machine learning model - these are encapsulated in the LanguageDetectorModel class of OpenNLP tools. First you need to grab the bytes from the serialized model on an InputStream - we'll leave it you to do that, since you were the one who serialized it to begin with. Now for the easy part: With the LanguageDetectorModel in hand we are just about there: Note that the both the API or the CLI will consider the complete text to choose the most probable languages. To handle mixed language one can analyze smaller chunks of text to find language regions.
Training The Language Detector can be trained on annotated training material. The data can be in OpenNLP Language Detector training format. This is one document per line, containing the ISO-639-3 language code and text separated by a tab. Other formats can also be available. The following sample shows the sample from above in the required format. Note: The line breaks marked with a backslash are just inserted for formatting purposes and must not be included in the training data.
Training Tool The following command will train the language detector and write the model to langdetect.bin: Note: To customize the language detector, extend the class opennlp.tools.langdetect.LanguageDetectorFactory add it to the classpath and pass it in the -factory argument.
Training with Leipzig The Leipzig Corpora collection presents corpora in different languages. The corpora are a collection of individual sentences collected from the web and newspapers. The Corpora are available as plain text and as MySQL database tables. The OpenNLP integration can only use the plain text version. The individual plain text packages can be downloaded here: https://wortschatz.uni-leipzig.de/en/download This corpora is specially good to train Language Detector and a converter is provided. First, you need to download the files that compose the Leipzig Corpora collection to a folder. Apache OpenNLP Language Detector supports training, evaluation and cross validation using the Leipzig Corpora. For example, the following command shows how to train a model. The following sequence of commands shows how to convert the Leipzig Corpora collection at folder leipzig-train/ to the default Language Detector format, by creating groups of 5 sentences as documents and limiting to 10000 documents per language. Then, it shuffles the result and select the first 100000 lines as train corpus and the last 20000 as evaluation corpus: leipzig.txt $ perl -MList::Util=shuffle -e 'print shuffle();' < leipzig.txt > leipzig_shuf.txt $ head -100000 < leipzig_shuf.txt > leipzig.train $ tail -20000 < leipzig_shuf.txt > leipzig.eval]]>
Training API The following example shows how to train a model from API. lineStream = new PlainTextByLineStream(inputStreamFactory, StandardCharsets.UTF_8); ObjectStream sampleStream = new LanguageDetectorSampleStream(lineStream); TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); params.put(TrainingParameters.ALGORITHM_PARAM, PerceptronTrainer.PERCEPTRON_VALUE); params.put(TrainingParameters.CUTOFF_PARAM, 0); LanguageDetectorFactory factory = new LanguageDetectorFactory(); LanguageDetectorModel model = LanguageDetectorME.train(sampleStream, params, factory); model.serialize(new File("langdetect.bin"));]]>
apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/lemmatizer.xml0100644 0000000 0000000 00000030173 14523004075 025076 0ustar00rootroot0000000 0000000 Lemmatizer The lemmatizer returns, for a given word form (token) and Part of Speech tag, the dictionary form of a word, which is usually referred to as its lemma. A token could ambiguously be derived from several basic forms or dictionary words which is why the postag of the word is required to find the lemma. For example, the form `show' may refer to either the verb "to show" or to the noun "show". Currently, OpenNLP implement statistical and dictionary-based lemmatizers.
Lemmatizer Tool The easiest way to try out the Lemmatizer is the command line tool, which provides access to the statistical lemmatizer. Note that the tool is only intended for demonstration and testing. Once you have trained a lemmatizer model (see below for instructions), you can start the Lemmatizer Tool with this command: The Lemmatizer now reads a pos tagged sentence(s) per line from standard input. For example, you can copy this sentence to the console: The Lemmatizer will now echo the lemmas for each word postag pair to the console:
Lemmatizer API The Lemmatizer can be embedded into an application via its API. Currently, a statistical and DictionaryLemmatizer are available. Note that these two methods are complementary and the DictionaryLemmatizer can also be used as a way of post-processing the output of the statistical lemmatizer. The statistical lemmatizer requires that a trained model is loaded into memory from disk or from another source. In the example below it is loaded from disk: After the model is loaded a LemmatizerME can be instantiated. The Lemmatizer instance is now ready to lemmatize data. It expects a tokenized sentence as input, which is represented as a String array, each String object in the array is one token, and the POS tags associated with each token. The following code shows how to determine the most likely lemma for a sentence. The lemmas array contains one lemma for each token in the input array. The corresponding tag and lemma can be found at the same index as the token has in the input array. The DictionaryLemmatizer is constructed by passing the InputStream of a lemmatizer dictionary. Such dictionary consists of a text file containing, for each row, a word, its postag and the corresponding lemma, each column separated by a tab character. Alternatively, if a (word,postag) pair can output multiple lemmas, the the lemmatizer dictionary would consist of a text file containing, for each row, a word, its postag and the corresponding lemmas separated by "#": First the dictionary must be loaded into memory from disk or another source. In the sample below it is loaded from disk. After the dictionary is loaded the DictionaryLemmatizer can be instantiated. The DictionaryLemmatizer instance is now ready. It expects two String arrays as input, a containing the tokens and another one their respective postags. The following code shows how to find a lemma using a DictionaryLemmatizer. The tags array contains one part-of-speech tag for each token in the input array. The corresponding tag and lemmas can be found at the same index as the token has in the input array.
Lemmatizer Training The training data consist of three columns separated by tabs. Each word has been put on a separate line and there is an empty line after each sentence. The first column contains the current word, the second its part-of-speech tag and the third its lemma. Here is an example of the file format: Sample sentence of the training data: The Universal Dependencies Treebank and the CoNLL 2009 datasets distribute training data for many languages.
Training Tool OpenNLP has a command line tool which is used to train the models on various corpora. Usage of the tool: Its now assumed that the english lemmatizer model should be trained from a file called 'en-lemmatizer.train' which is encoded as UTF-8. The following command will train the lemmatizer and write the model to en-lemmatizer.bin:
Training API The Lemmatizer offers an API to train a new lemmatizer model. First a training parameters file needs to be instantiated: Then we read the training data: lineStream = null; LemmaSampleStream lemmaStream = null; try { lineStream = new PlainTextByLineStream( (inputStreamFactory), StandardCharsets.UTF_8); lemmaStream = new LemmaSampleStream(lineStream); } catch (IOException e) { CmdLineUtil.handleCreateObjectStreamError(e); } ]]> The following step proceeds to train the model: LemmatizerModel model; try { LemmatizerFactory lemmatizerFactory = LemmatizerFactory .create(params.getFactory()); model = LemmatizerME.train(params.getLang(), lemmaStream, mlParams, lemmatizerFactory); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while reading training data or indexing data: " + e.getMessage(), e); } finally { try { sampleStream.close(); } catch (IOException e) { } }
Lemmatizer Evaluation The built in evaluation can measure the accuracy of the statistical lemmatizer. The accuracy can be measured on a test data set. There is a command line tool to evaluate a given model on a test data set. The following command shows how the tool can be run: This will display the resulting accuracy score, e.g.:
apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/machine-learning.xml0100644 0000000 0000000 00000012467 14523004075 026134 0ustar00rootroot0000000 0000000 Machine Learning
Maximum Entropy To explain what maximum entropy is, it will be simplest to quote from Manning and Schütze* (p. 589): Maximum entropy modeling is a framework for integrating information from many heterogeneous information sources for classification. The data for a classification problem is described as a (potentially large) number of features. These features can be quite complex and allow the experimenter to make use of prior knowledge about what types of information are expected to be important for classification. Each feature corresponds to a constraint on the model. We then compute the maximum entropy model, the model with the maximum entropy of all the models that satisfy the constraints. This term may seem perverse, since we have spent most of the book trying to minimize the (cross) entropy of models, but the idea is that we do not want to go beyond the data. If we chose a model with less entropy, we would add `information' constraints to the model that are not justified by the empirical evidence available to us. Choosing the maximum entropy model is motivated by the desire to preserve as much uncertainty as possible. So that gives a rough idea of what the maximum entropy framework is. Don't assume anything about your probability distribution other than what you have observed. On the engineering level, using maxent is an excellent way of creating programs which perform very difficult classification tasks very well. For example, precision and recall figures for programs using maxent models have reached (or are) the state of the art on tasks like part of speech tagging, sentence detection, prepositional phrase attachment, and named entity recognition. On the engineering level, an added benefit is that the person creating a maxent model only needs to inform the training procedure of the event space, and need not worry about independence between features. While the authors of this implementation of maximum entropy are generally interested using maxent models in natural language processing, the framework is certainly quite general and useful for a much wider variety of fields. In fact, maximum entropy modeling was originally developed for statistical physics. For a very in-depth discussion of how maxent can be used in natural language processing, try reading Adwait Ratnaparkhi's dissertation. Also, check out Berger, Della Pietra, and Della Pietra's paper A Maximum Entropy Approach to Natural Language Processing, which provides an excellent introduction and discussion of the framework. *Foundations of statistical natural language processing . Christopher D. Manning, Hinrich Schütze. Cambridge, Mass. : MIT Press, c1999.
Implementation We have tried to make the opennlp.maxent implementation easy to use. To create a model, one needs (of course) the training data, and then implementations of two interfaces in the opennlp.maxent package, EventStream and ContextGenerator. These have fairly simple specifications, and example implementations can be found in the OpenNLP Tools preprocessing components. We have also set in place some interfaces and code to make it easier to automate the training and evaluation process (the Evaluable interface and the TrainEval class). It is not necessary to use this functionality, but if you do you'll find it much easier to see how well your models are doing. The opennlp.grok.preprocess.namefind package is an example of a maximum entropy component which uses this functionality. We have managed to use several techniques to reduce the size of the models when writing them to disk, which also means that reading in a model for use is much quicker than with less compact encodings of the model. This was especially important to us since we use many maxent models in the Grok library, and we wanted the start up time and the physical size of the library to be as minimal as possible. As of version 1.2.0, maxent has an io package which greatly simplifies the process of loading and saving models in different formats.
apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/morfologik-addon.xml0100644 0000000 0000000 00000013777 14523004075 026173 0ustar00rootroot0000000 0000000 Morfologik Addon Morfologik provides tools for finite state automata (FSA) construction and dictionary-based morphological dictionaries. The Morfologik Addon implements OpenNLP interfaces and extensions to allow the use of FSA Morfologik dictionary tools.
Morfologik Integration To allow for an easy integration with OpenNLP, the following implementations are provided: The MorfologikPOSTaggerFactory extends POSTaggerFactory, which helps create a POSTagger model with an embedded FSA TagDictionary. The MorfologikTagDictionary implements an FSA based TagDictionary, allowing for much smaller files than the default XML based with improved memory consumption. The MorfologikLemmatizer implements an FSA based Lemmatizer dictionaries. The first two implementations can be used directly from command line, as in the example bellow. Having an FSA Morfologik dictionary (see next section how to build one), you can train a POS Tagger model with an embedded FSA dictionary. The example trains a POSTagger with a CONLL corpus named portuguese_bosque_train.conll and an FSA dictionary named pt-morfologik.dict. It will output a model named pos-pt_fsadic.model. Another example follows. It shows how to use the MorfologikLemmatizer. You will need a lemma dictionary and info file, in this example, we will use a very small Portuguese dictionary. Its syntax is lemma,lexeme,postag. File lemmaDictionary.txt: Mandatory metadata file, which must have the same name but .info extension lemmaDictionary.info: The following code creates a binary FSA Morfologik dictionary, loads it in MorfologikLemmatizer and uses it to find the lemma the word "casa" noun and verb.
Morfologik CLI Tools The Morfologik addon provides a command line tool. XMLDictionaryToTable makes easy to convert from an OpenNLP XML based dictionary to a tabular format. MorfologikDictionaryBuilder can take a tabular dictionary and output a binary Morfologik FSA dictionary.
apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/namefinder.xml0100644 0000000 0000000 00000063253 14523004075 025042 0ustar00rootroot0000000 0000000 Name Finder
Named Entity Recognition The Name Finder can detect named entities and numbers in text. To be able to detect entities the Name Finder needs a model. The model is dependent on the language and entity type it was trained for. The OpenNLP projects offers a number of pre-trained name finder models which are trained on various freely available corpora. They can be downloaded at our model download page. To find names in raw text the text must be segmented into tokens and sentences. A detailed description is given in the sentence detector and tokenizer tutorial. It is important that the tokenization for the training data and the input text is identical.
Name Finder Tool The easiest way to try out the Name Finder is the command line tool. The tool is only intended for demonstration and testing. Download the English person model and start the Name Finder Tool with this command: The name finder now reads a tokenized sentence per line from stdin, an empty line indicates a document boundary and resets the adaptive feature generators. Just copy this text to the terminal: the name finder will now output the text with markup for person names: Pierre Vinken , 61 years old , will join the board as a nonexecutive director Nov. 29 . Mr . Vinken is chairman of Elsevier N.V. , the Dutch publishing group . Rudolph Agnew , 55 years old and former chairman of Consolidated Gold Fields PLC , was named a director of this British industrial conglomerate .]]>
Name Finder API To use the Name Finder in a production system it is strongly recommended to embed it directly into the application instead of using the command line interface. First the name finder model must be loaded into memory from disk or another source. In the sample below it is loaded from disk. There is a number of reasons why the model loading can fail: Issues with the underlying I/O The version of the model is not compatible with the OpenNLP version The model is loaded into the wrong component, for example a tokenizer model is loaded with TokenNameFinderModel class. The model content is not valid for some other reason After the model is loaded the NameFinderME can be instantiated. The initialization is now finished and the Name Finder can be used. The NameFinderME class is not thread safe, it must only be called from one thread. To use multiple threads multiple NameFinderME instances sharing the same model instance can be created. The input text should be segmented into documents, sentences and tokens. To perform entity detection an application calls the find method for every sentence in the document. After every document clearAdaptiveData must be called to clear the adaptive data in the feature generators. Not calling clearAdaptiveData can lead to a sharp drop in the detection rate after a few documents. The following code illustrates that: the following snippet shows a call to find The nameSpans arrays contains now exactly one Span which marks the name Pierre Vinken. The elements between the start and end offsets are the name tokens. In this case the start offset is 0 and the end offset is 2. The Span object also knows the type of the entity. In this case it is person (defined by the model). It can be retrieved with a call to Span.getType(). Additionally to the statistical Name Finder, OpenNLP also offers a dictionary and a regular expression name finder implementation.
Using an ONNX Model Using an ONNX model is similar, except we will utilize the NameFinderDL class instead. You must provide the path to the model file and the vocabulary file to the name finder. (There is no need to load the model as an InputStream as in the previous example.) The name finder requires a tokenized list of strings as input. The output will be an array of spans. categories = new HashMap<>(); String[] tokens = new String[]{"George", "Washington", "was", "president", "of", "the", "United", "States", "."}; NameFinderDL nameFinderDL = new NameFinderDL(model, vocab, false, getIds2Labels()); Span[] spans = nameFinderDL.find(tokens);]]> For additional examples, refer to the NameFinderDLEval class.
Name Finder Training The pre-trained models might not be available for a desired language, can not detect important entities or the performance is not good enough outside the news domain. These are the typical reason to do custom training of the name finder on a new corpus or on a corpus which is extended by private training data taken from the data which should be analyzed.
Training Tool OpenNLP has a command line tool which is used to train the models available from the model download page on various corpora. Note that ONNX model support is not available through the command line tool. The models that can be trained using the tool are OpenNLP models. ONNX models are trained through deep learning frameworks and then utilized by OpenNLP. The data can be converted to the OpenNLP name finder training format. Which is one sentence per line. Some other formats are available as well. The sentence must be tokenized and contain spans which mark the entities. Documents are separated by empty lines which trigger the reset of the adaptive feature generators. A training file can contain multiple types. If the training file contains multiple types the created model will also be able to detect these multiple types. Sample sentence of the data: Pierre Vinken , 61 years old , will join the board as a nonexecutive director Nov. 29 . Mr . Vinken is chairman of Elsevier N.V. , the Dutch publishing group .]]> The training data should contain at least 15000 sentences to create a model which performs well. Usage of the tool: It is now assumed that the english person name finder model should be trained from a file called 'en-ner-person.train' which is encoded as UTF-8. The following command will train the name finder and write the model to en-ner-person.bin: The example above will train models with a pre-defined feature set. It is also possible to use the -resources parameter to generate features based on external knowledge such as those based on word representation (clustering) features. The external resources must all be placed in a resource directory which is then passed as a parameter. If this option is used it is then required to pass, via the -featuregen parameter, an XML custom feature generator which includes some clustering features shipped with the TokenNameFinder. Currently, three formats of clustering lexicons are accepted: Space separated two column file specifying the token and the cluster class as generated by toolkits such as word2vec. Space separated three column file specifying the token, clustering class and weight as such as Clark's clusters. Tab separated three column Brown clusters as generated by Liang's toolkit. Additionally it is possible to specify the number of iterations, the cutoff and to overwrite all types in the training data with a single type. Finally, the -sequenceCodec parameter allows to specify a BIO (Begin, Inside, Out) or BILOU (Begin, Inside, Last, Out, Unit) encoding to represent the Named Entities. An example of one such command would be as follows:
Training API To train the name finder from within an application it is recommended to use the training API instead of the command line tool. Basically three steps are necessary to train it: The application must open a sample data stream Call the NameFinderME.train method Save the TokenNameFinderModel to a file The three steps are illustrated by the following sample code: lineStream = new PlainTextByLineStream(new MarkableFileInputStreamFactory(trainingFile), StandardCharsets.UTF_8); TokenNameFinderModel trainedModel; try (ObjectStream sampleStream = new NameSampleDataStream(lineStream)) { trainedModel = NameFinderME.train("eng", "person", sampleStream, TrainingParameters.defaultParams(), factory); } File modelFile = new File("en-ner-person.bin"); try (OutputStream modelOut = new BufferedOutputStream(new FileOutputStream(modelFile))) { trainedModel.serialize(modelOut); }]]>
Custom Feature Generation OpenNLP defines a default feature generation which is used when no custom feature generation is specified. Users which want to experiment with the feature generation can provide a custom feature generator. Either via an API or via a xml descriptor file.
Feature Generation defined by API The custom generator must be used for training and for detecting the names. If the feature generation during training time and detection time is different the name finder might not be able to detect names. The following lines show how to construct a custom feature generator which is similar to the default feature generator but with a BrownTokenFeature added. The javadoc of the feature generator classes explain what the individual feature generators do. To write a custom feature generator please implement the AdaptiveFeatureGenerator interface or if it must not be adaptive extend the FeatureGeneratorAdapter. The train method which should be used is defined as samples, TrainingParameters trainParams, TokenNameFinderFactory factory) throws IOException]]> where the TokenNameFinderFactory allows to specify a custom feature generator. To detect names the model which was returned from the train method must be passed to the NameFinderME constructor.
Feature Generation defined by XML Descriptor OpenNLP can also use a xml descriptor file to configure the feature generation. The descriptor file is stored inside the model after training and the feature generators are configured correctly when the name finder is instantiated. The following sample shows a xml descriptor which contains the default feature generator plus several types of clustering features: 2 2 2 2 true false 2 2 brownCluster brownCluster brownCluster word2vec.cluster clark.cluster ]]> The root element must be featureGenerators, each sub-element adds a feature generator to the configuration. The sample xml contains additional feature generators with respect to the API defined above. The following table shows the supported feature generators (you must specify the Factory's FQDN): Feature Generators Feature Generator Parameters CharacterNgramFeatureGeneratorFactory min and max specify the length of the generated character ngrams DefinitionFeatureGeneratorFactory none DictionaryFeatureGeneratorFactory dict is the key of the dictionary resource to use, and prefix is a feature prefix string PreviousMapFeatureGeneratorFactory none SentenceFeatureGeneratorFactory begin and end to generate begin or end features, both are optional and are boolean values TokenClassFeatureGeneratorFactory none TokenFeatureGeneratorFactory none BigramNameFeatureGeneratorFactory none TokenPatternFeatureGeneratorFactory none POSTaggerNameFeatureGeneratorFactory model is the file name of the POS Tagger model to use WordClusterFeatureGeneratorFactory dict is the key of the clustering resource to use BrownClusterTokenFeatureGeneratorFactory dict is the key of the clustering resource to use BrownClusterTokenClassFeatureGeneratorFactory dict is the key of the clustering resource to use BrownClusterBigramFeatureGeneratorFactory dict is the key of the clustering resource to use WindowFeatureGeneratorFactory prevLength and nextLength must be integers and specify the window size
Window feature generator can contain other generators.
Evaluation The built in evaluation can measure the named entity recognition performance of the name finder. The performance is either measured on a test dataset or via cross validation.
Evaluation Tool The following command shows how the tool can be run: Note: The command line interface does not support cross evaluation in the current version.
Evaluation API The evaluation can be performed on a pre-trained model and a test dataset or via cross validation. In the first case the model must be loaded and a NameSample ObjectStream must be created (see code samples above), assuming these two objects exist the following code shows how to perform the evaluation: In the cross validation case all the training arguments must be provided (see the Training API section above). To perform cross validation the ObjectStream must be resettable. sampleStream = new NameSampleDataStream( new PlainTextByLineStream(dataIn, StandardCharsets.UTF_8)); TokenNameFinderCrossValidator evaluator = new TokenNameFinderCrossValidator("eng", null, TrainingParameters.defaultParams(), null, (TokenNameFinderEvaluationMonitor) null); evaluator.evaluate(sampleStream, 10); FMeasure result = evaluator.getFMeasure(); System.out.println(result.toString());]]>
Named Entity Annotation Guidelines Annotation guidelines define what should be labeled as an entity. To build a private corpus it is important to know these guidelines and maybe write a custom one. Here is a list of publicly available annotation guidelines: MUC6 MUC7 ACE CONLL 2002 CONLL 2003
apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/opennlp.xml0100644 0000000 0000000 00000007721 14523004075 024403 0ustar00rootroot0000000 0000000 Version OpenNLP Written and maintained by the Apache OpenNLP Development Community License and Disclaimer The ASF licenses this documentation to you under the Apache License, Version 2.0 (the "License"); you may not use this documentation except in compliance with the License. You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, this documentation and its contents are distributed under the License on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
2011 2024 The Apache Software Foundation
Apache OpenNLP Developer Documentation
apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/parser.xml0100644 0000000 0000000 00000036661 14523004075 024231 0ustar00rootroot0000000 0000000 Parser
Parsing A parser returns a parse tree from a sentence according to a phrase structure grammar. A parse tree specifies the internal structure of a sentence. For example, the following image represents a parse tree for the sentence 'The cellphone was broken in two days': A parse tree can be used to determine the role of subtrees or constituents in the sentence. For example, it is possible to know that 'The cellphone' is the subject of the sentence and the verb (action) is 'was broken.'
Parser Tool The easiest way to try out the Parser is the command line tool. The tool is only intended for demonstration and testing. Download the English chunking parser model from the website and start the Parse Tool with the following command. Loading the big parser model can take several seconds, be patient. Copy this sample sentence to the console. The parser should now print the following to the console. With the following command the input can be read from a file and be written to an output file. article-parsed.txt.]]> The article-tokenized.txt file must contain one sentence per line which is tokenized with the English tokenizer model from our website. See the Tokenizer documentation for further details.
Parsing API The Parser can be easily integrated into an application via its API. To instantiate a Parser the parser model must be loaded first. Unlike the other components to instantiate the Parser a factory method should be used instead of creating the Parser via the new operator. The parser model is either trained for the chunking parser or the tree insert parser the parser implementation must be chosen correctly. The factory method will read a type parameter from the model and create an instance of the corresponding parser implementation. Right now the tree insert parser is still experimental and there is no pre-trained model for it. The parser expect a whitespace tokenized sentence. A utility method from the command line tool can parse the sentence String. The following code shows how the parser can be called. The topParses array only contains one parse because the number of parses is set to 1. The Parse object contains the parse tree. To display the parse tree call the show method. It either prints the parse to the console or into a provided StringBuffer. Similar to Exception.printStackTrace. TODO: Extend this section with more information about the Parse object.
Parser Training The OpenNLP offers two different parser implementations, the chunking parser and the treeinsert parser. The later one is still experimental and not recommended for production use. (TODO: Add a section which explains the two different approaches) The training can either be done with the command line tool or the training API. In the first case the training data must be available in the OpenNLP format. Which is the Penn Treebank format, but with the limitation of a sentence per line. Penn Treebank annotation guidelines can be found on the Penn Treebank home page. A parser model also contains a pos tagger model, depending on the amount of available training data it is recommended to switch the tagger model against a tagger model which was trained on a larger corpus. The pre-trained parser model provided on the website is doing this to achieve a better performance. (TODO: On which data is the model on the website trained, and say on which data the tagger model is trained)
Training Tool OpenNLP has a command line tool which is used to train the models available from the model download page on various corpora. The data must be converted to the OpenNLP parser training format, which is shortly explained above. To train the parser a head rules file is also needed. (TODO: Add documentation about the head rules file) Usage of the tool: The model on the website was trained with the following command: Its also possible to specify the cutoff and the number of iterations, these parameters are used for all trained models. The -parserType parameter is an optional parameter, to use the tree insertion parser, specify TREEINSERT as type. The TaggerModelReplacer tool replaces the tagger model inside the parser model with a new one. Note: The original parser model will be overwritten with the new parser model which contains the replaced tagger model. Additionally there are tools to just retrain the build or the check model.
Training API The Parser training API supports the training of a new parser model. Four steps are necessary to train it: A HeadRules class needs to be instantiated: currently EnglishHeadRules and AncoraSpanishHeadRules are available. The application must open a sample data stream. Call a Parser train method: This can be either the CHUNKING or the TREEINSERT parser. Save the ParseModel to a file The following code snippet shows how to instantiate the HeadRules: The following code illustrates the three other steps, namely, opening the data, training the model and saving the ParserModel into an output file. stringStream = new PlainTextByLineStream(inputStreamFactory, StandardCharsets.UTF_8); ObjectStream sampleStream = new ParseSample(stringStream); ParserType type = parseParserType(params.getParserType()); if (ParserType.CHUNKING.equals(type)) { model = opennlp.tools.parser.chunking.Parser.train( params.getLang(), sampleStream, rules, mlParams); } else if (ParserType.TREEINSERT.equals(type)) { model = opennlp.tools.parser.treeinsert.Parser.train(params.getLang(), sampleStream, rules, mlParams); } } catch (IOException e) { throw new TerminateToolException(-1, "IO error while reading training data or indexing data: " + e.getMessage(), e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } CmdLineUtil.writeModel("parser", modelOutFile, model); ]]>
Parser Evaluation The built in evaluation can measure the parser performance. The performance is measured on a test dataset.
Parser Evaluation Tool The following command shows how the tool can be run: A sample of the command considering you have a data sample named en-parser-chunking.eval, and you trained a model called en-parser-chunking.bin: and here is a sample output: The Parser Evaluation tool reimplements the PARSEVAL scoring method as implemented by the EVALB script, which is the most widely used evaluation tool for constituent parsing. Note however that currently the Parser Evaluation tool does not allow to make exceptions in the constituents to be evaluated, in the way Collins or Bikel usually do. Any contributions are very welcome. If you want to contribute please contact us on the mailing list or comment on the jira issue OPENNLP-688.
Evaluation API The evaluation can be performed on a pre-trained model and a test dataset or via cross validation. In the first case the model must be loaded and a Parse ObjectStream must be created (see code samples above), assuming these two objects exist the following code shows how to perform the evaluation: In the cross validation case all the training arguments must be provided (see the Training API section above). To perform cross validation the ObjectStream must be resettable. stringStream = new PlainTextByLineStream(inputStreamFactory, StandardCharsets.UTF_8); ObjectStream sampleStream = new ParseSample(stringStream); ParserCrossValidator evaluator = new ParserCrossValidator("eng", trainParameters, headRules, \ parserType, listeners.toArray(new ParserEvaluationMonitor[listeners.size()]))); evaluator.evaluate(sampleStream, 10); FMeasure result = evaluator.getFMeasure(); System.out.println(result.toString());]]>
apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/postagger.xml0100644 0000000 0000000 00000027105 14523004075 024721 0ustar00rootroot0000000 0000000 Part-of-Speech Tagger
Tagging The Part of Speech Tagger marks tokens with their corresponding word type based on the token itself and the context of the token. A token might have multiple pos tags depending on the token and the context. The OpenNLP POS Tagger uses a probability model to predict the correct pos tag out of the tag set. To limit the possible tags for a token a tag dictionary can be used which increases the tagging and runtime performance of the tagger.
POS Tagger Tool The easiest way to try out the POS Tagger is the command line tool. The tool is only intended for demonstration and testing. Download the English maxent pos model and start the POS Tagger Tool with this command: The POS Tagger now reads a tokenized sentence per line from stdin. Copy these two sentences to the console: The POS Tagger will now echo the sentences with pos tags to the console: The tag set used by the English pos model is the Penn Treebank tag set.
POS Tagger API The POS Tagger can be embedded into an application via its API. First the pos model must be loaded into memory from disk or another source. In the sample below it is loaded from disk. After the model is loaded the POSTaggerME can be instantiated. The POS Tagger instance is now ready to tag data. It expects a tokenized sentence as input, which is represented as a String array, each String object in the array is one token. The following code shows how to determine the most likely pos tag sequence for a sentence. The tags array contains one part-of-speech tag for each token in the input array. The corresponding tag can be found at the same index as the token has in the input array. The confidence scores for the returned tags can be easily retrieved from a POSTaggerME with the following method call: The call to probs is stateful and will always return the probabilities of the last tagged sentence. The probs method should only be called when the tag method was called before, otherwise the behavior is undefined. Some applications need to retrieve the n-best pos tag sequences and not only the best sequence. The topKSequences method is capable of returning the top sequences. It can be called in a similar way as tag. Each Sequence object contains one sequence. The sequence can be retrieved via Sequence.getOutcomes() which returns a tags array and Sequence.getProbs() returns the probability array for this sequence.
Training The POS Tagger can be trained on annotated training material. The training material is a collection of tokenized sentences where each token has the assigned part-of-speech tag. The native POS Tagger training material looks like this: Each sentence must be in one line. The token/tag pairs are combined with "_". The token/tag pairs are whitespace separated. The data format does not define a document boundary. If a document boundary should be included in the training material it is suggested to use an empty line. The Part-of-Speech Tagger can either be trained with a command line tool, or via a training API.
Training Tool OpenNLP has a command line tool which is used to train the models available from the model download page on various corpora. Usage of the tool: The following command illustrates how an English part-of-speech model can be trained:
Training API The Part-of-Speech Tagger training API supports the training of a new pos model. Basically three steps are necessary to train it: The application must open a sample data stream Call the 'POSTagger.train' method Save the POSModel to a file The following code illustrates that: lineStream = new PlainTextByLineStream(new MarkableFileInputStreamFactory(new File("en-pos.train")), StandardCharsets.UTF_8); ObjectStream sampleStream = new WordTagSampleStream(lineStream); model = POSTaggerME.train("eng", sampleStream, TrainingParameters.defaultParams(), new POSTaggerFactory()); } catch (IOException e) { e.printStackTrace(); }]]> The above code performs the first two steps, opening the data and training the model. The trained model must still be saved into an OutputStream, in the sample below it is written into a file.
Tag Dictionary The tag dictionary is a word dictionary which specifies which tags a specific token can have. Using a tag dictionary has two advantages, inappropriate tags can not been assigned to tokens in the dictionary and the beam search algorithm has to consider fewer possibilities and can search faster. The dictionary is defined in a xml format and can be created and stored with the POSDictionary class. Please for now checkout the javadoc and source code of that class. Note: The format should be documented and sample code should show how to use the dictionary. Any contributions are very welcome. If you want to contribute please contact us on the mailing list or comment on the jira issue OPENNLP-287.
Evaluation The built-in evaluation can measure the accuracy of the pos tagger. The accuracy can be measured on a test data set or via cross validation.
Evaluation Tool There is a command line tool to evaluate a given model on a test data set. The following command shows how the tool can be run: This will display the resulting accuracy score, e.g.: There is a command line tool for cross-validation of the test data set. The following command shows how the tool can be run: This will display the resulting accuracy score, e.g.:
apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/sentdetect.xml0100644 0000000 0000000 00000024660 14523004075 025073 0ustar00rootroot0000000 0000000 Sentence Detector
Sentence Detection The OpenNLP Sentence Detector can detect that a punctuation character marks the end of a sentence or not. In this sense a sentence is defined as the longest white space trimmed character sequence between two punctuation marks. The first and last sentence make an exception to this rule. The first non whitespace character is assumed to be the start of a sentence, and the last non whitespace character is assumed to be a sentence end. The sample text below should be segmented into its sentences. After detecting the sentence boundaries each sentence is written in its own line. Usually Sentence Detection is done before the text is tokenized and that's the way the pre-trained models on the website are trained, but it is also possible to perform tokenization first and let the Sentence Detector process the already tokenized text. The OpenNLP Sentence Detector cannot identify sentence boundaries based on the contents of the sentence. A prominent example is the first sentence in an article where the title is mistakenly identified to be the first part of the first sentence. Most components in OpenNLP expect input which is segmented into sentences.
Sentence Detection Tool The easiest way to try out the Sentence Detector is the command line tool. The tool is only intended for demonstration and testing. Download the english sentence detector model and start the Sentence Detector Tool with this command: Just copy the sample text from above to the console. The Sentence Detector will read it and echo one sentence per line to the console. Usually the input is read from a file and the output is redirected to another file. This can be achieved with the following command. output.txt]]> For the english sentence model from the website the input text should not be tokenized.
Sentence Detection API The Sentence Detector can be easily integrated into an application via its API. To instantiate the Sentence Detector the sentence model must be loaded first. After the model is loaded the SentenceDetectorME can be instantiated. The Sentence Detector can output an array of Strings, where each String is one sentence. The result array now contains two entries. The first String is "First sentence." and the second String is "Second sentence." The whitespace before, between and after the input String is removed. The API also offers a method which simply returns the span of the sentence in the input string. The result array again contains two entries. The first span beings at index 2 and ends at 17. The second span begins at 18 and ends at 34. The utility method Span.getCoveredText can be used to create a substring which only covers the chars in the span.
Sentence Detector Training
Training Tool OpenNLP has a command line tool which is used to train the models available from the model download page on various corpora. The data must be converted to the OpenNLP Sentence Detector training format. Which is one sentence per line. An empty line indicates a document boundary. In case the document boundary is unknown, it's recommended to have an empty line every few ten sentences. Exactly like the output in the sample above. Usage of the tool: To train an English sentence detector use the following command: It should produce the following output: ... 95: .. loglikelihood=-288.25556805874436 0.9834118369854598 96: .. loglikelihood=-287.2283680343481 0.9834118369854598 97: .. loglikelihood=-286.2174830344526 0.9834118369854598 98: .. loglikelihood=-285.222486981048 0.9834118369854598 99: .. loglikelihood=-284.24296917223916 0.9834118369854598 100: .. loglikelihood=-283.2785335773966 0.9834118369854598 Wrote sentence detector model. Path: en-sent.bin ]]>
Training API The Sentence Detector also offers an API to train a new sentence detection model. Basically three steps are necessary to train it: The application must open a sample data stream Call the SentenceDetectorME.train method Save the SentenceModel to a file or directly use it The following sample code illustrates these steps: lineStream = new PlainTextByLineStream(new MarkableFileInputStreamFactory(new File("en-sent.train")), StandardCharsets.UTF_8); SentenceModel model; try (ObjectStream sampleStream = new SentenceSampleStream(lineStream)) { model = SentenceDetectorME.train("eng", sampleStream, new SentenceDetectorFactory("eng", true, null, null), TrainingParameters.defaultParams()); } try (OutputStream modelOut = new BufferedOutputStream(new FileOutputStream(modelFile))) { model.serialize(modelOut); }]]>
Evaluation
Evaluation Tool The command shows how the evaluator tool can be run: The en-sent.eval file has the same format as the training data.
apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/tokenizer.xml0100644 0000000 0000000 00000044132 14523004075 024737 0ustar00rootroot0000000 0000000 Tokenizer
Tokenization The OpenNLP Tokenizers segment an input character sequence into tokens. Tokens are usually words, punctuation, numbers, etc. The following result shows the individual tokens in a whitespace separated representation. OpenNLP offers multiple tokenizer implementations: Whitespace Tokenizer - A whitespace tokenizer, non whitespace sequences are identified as tokens Simple Tokenizer - A character class tokenizer, sequences of the same character class are tokens Learnable Tokenizer - A maximum entropy tokenizer, detects token boundaries based on probability model Most part-of-speech taggers, parsers and so on, work with text tokenized in this manner. It is important to ensure that your tokenizer produces tokens of the type expected by your later text processing components. With OpenNLP (as with many systems), tokenization is a two-stage process: first, sentence boundaries are identified, then tokens within each sentence are identified.
Tokenizer Tools The easiest way to try out the tokenizers are the command line tools. The tools are only intended for demonstration and testing. There are two tools, one for the Simple Tokenizer and one for the learnable tokenizer. A command line tool the for the Whitespace Tokenizer does not exist, because the whitespace separated output would be identical to the input. The following command shows how to use the Simple Tokenizer Tool. To use the learnable tokenizer download the english token model from our website. To test the tokenizer copy the sample from above to the console. The whitespace separated tokens will be written back to the console. Usually the input is read from a file and written to a file. article-tokenized.txt]]> It can be done in the same way for the Simple Tokenizer. Since most text comes truly raw and doesn't have sentence boundaries and such, it's possible to create a pipe which first performs sentence boundary detection and tokenization. The following sample illustrates that. Of course this is all on the command line. Many people use the models directly in their Java code by creating SentenceDetector and Tokenizer objects and calling their methods as appropriate. The following section will explain how the Tokenizers can be used directly from java.
Tokenizer API The Tokenizers can be integrated into an application by the defined API. The shared instance of the WhitespaceTokenizer can be retrieved from a static field WhitespaceTokenizer.INSTANCE. The shared instance of the SimpleTokenizer can be retrieved in the same way from SimpleTokenizer.INSTANCE. To instantiate the TokenizerME (the learnable tokenizer) a Token Model must be created first. The following code sample shows how a model can be loaded. After the model is loaded the TokenizerME can be instantiated. The tokenizer offers two tokenize methods, both expect an input String object which contains the untokenized text. If possible it should be a sentence, but depending on the training of the learnable tokenizer this is not required. The first returns an array of Strings, where each String is one token. The output will be an array with these tokens. The second method, tokenizePos returns an array of Spans, each Span contain the start and end character offsets of the token in the input String. The tokenSpans array now contain 5 elements. To get the text for one span call Span.getCoveredText which takes a span and the input text. The TokenizerME is able to output the probabilities for the detected tokens. The getTokenProbabilities method must be called directly after one of the tokenize methods was called. The tokenProbs array now contains one double value per token, the value is between 0 and 1, where 1 is the highest possible probability and 0 the lowest possible probability.
Tokenizer Training
Training Tool OpenNLP has a command line tool which is used to train the models available from the model download page on various corpora. The data can be converted to the OpenNLP Tokenizer training format or used directly. The OpenNLP format contains one sentence per line. Tokens are either separated by a whitespace or by a special <SPLIT> tag. Tokens are split automatically on whitespace and at least one <SPLIT> tag must be present in the training text. The following sample shows the sample from above in the correct format. , 61 years old, will join the board as a nonexecutive director Nov. 29. Mr. Vinken is chairman of Elsevier N.V., the Dutch publishing group. Rudolph Agnew, 55 years old and former chairman of Consolidated Gold Fields PLC, was named a nonexecutive director of this British industrial conglomerate.]]> Usage of the tool: To train the english tokenizer use the following command: ... 95: ... loglikelihood=-2.0234942537226366 1.0 96: ... loglikelihood=-2.0107265117555935 1.0 97: ... loglikelihood=-1.998139365828305 1.0 98: ... loglikelihood=-1.9857283791639697 1.0 99: ... loglikelihood=-1.9734892753591327 1.0 100: ... loglikelihood=-1.9614179307958106 1.0 Writing tokenizer model ... done (0,044s) Wrote tokenizer model to Path: en-token.bin]]>
Training API The Tokenizer offers an API to train a new tokenization model. Basically three steps are necessary to train it: The application must open a sample data stream Call the TokenizerME.train method Save the TokenizerModel to a file or directly use it The following sample code illustrates these steps: lineStream = new PlainTextByLineStream(new MarkableFileInputStreamFactory(new File("en-sent.train")), StandardCharsets.UTF_8); ObjectStream sampleStream = new TokenSampleStream(lineStream); TokenizerModel model; try { model = TokenizerME.train(sampleStream, TokenizerFactory.create(null, "eng", null, true, null), TrainingParameters.defaultParams()); } finally { sampleStream.close(); } OutputStream modelOut = null; try { modelOut = new BufferedOutputStream(new FileOutputStream(modelFile)); model.serialize(modelOut); } finally { if (modelOut != null) modelOut.close(); }]]>
Detokenizing Detokenizing is simple the opposite of tokenization, the original non-tokenized string should be constructed out of a token sequence. The OpenNLP implementation was created to undo the tokenization of training data for the tokenizer. It can also be used to undo the tokenization of such a trained tokenizer. The implementation is strictly rule based and defines how tokens should be attached to a sentence wise character sequence. The rule dictionary assign to every token an operation which describes how it should be attached to one continuous character sequence. The following rules can be assigned to a token: MERGE_TO_LEFT - Merges the token to the left side. MERGE_TO_RIGHT - Merges the token to the right side. RIGHT_LEFT_MATCHING - Merges the token to the right side on first occurrence and to the left side on second occurrence. The following sample will illustrate how the detokenizer with a small rule dictionary (illustration format, not the xml data format): The dictionary should be used to de-tokenize the following whitespace tokenized sentence: The tokens would get these tags based on the dictionary: NO_OPERATION said -> NO_OPERATION " -> MERGE_TO_RIGHT This -> NO_OPERATION is -> NO_OPERATION a -> NO_OPERATION test -> NO_OPERATION " -> MERGE_TO_LEFT . -> MERGE_TO_LEFT]]> That will result in the following character sequence:
Detokenizing API The Detokenizer can be used to detokenize the tokens to String. To instantiate the Detokenizer (a rule based detokenizer) a DetokenizationDictionary (the rule of dictionary) must be created first. The following code sample shows how a rule dictionary can be loaded. After the rule dictionary is loaded the DictionaryDetokenizer can be instantiated. The detokenizer offers two detokenize methods, the first detokenize the input tokens into a String. Tokens which are connected without a space in-between can be separated by a split marker. "); Assert.assertEquals("A co-worker helped.", sentence);]]> The API also offers a method which simply returns operations array in the input tokens array. Output:
Detokenizer Dictionary Detokenization Dictionary is the rule dictionary about detokenizer. tokens - an array of tokens that should be detokenized according to an operation. operations - an array of operations which specifies which operation should be used for the provided tokens. The following code sample shows how a rule dictionary can be created.
apache-opennlp-2.3.3-src/opennlp-docs/src/docbkx/uima-integration.xml0100644 0000000 0000000 00000012565 14523004075 026206 0ustar00rootroot0000000 0000000 UIMA Integration The UIMA Integration wraps the OpenNLP components in UIMA Analysis Engines which can be used to automatically annotate text and train new OpenNLP models from annotated text.
Running the pear sample in CVD The Cas Visual Debugger is shipped as part of the UIMA distribution and is a tool which can run the OpenNLP UIMA Annotators and display their analysis results. The source distribution comes with a script which can create a sample UIMA application. Which includes the sentence detector, tokenizer, pos tagger, chunker and name finders for English. This sample application is packaged in the pear format and must be installed with the pear installer before it can be run by CVD. Please consult the UIMA documentation for further information about the pear installer. The OpenNLP UIMA pear file must be build manually. First download the source distribution, unzip it and go to the apache-opennlp/opennlp folder. Type "mvn install" to build everything. Now build the pear file, go to apache-opennlp/opennlp-uima and build it as shown below. Note the models will be downloaded from the old SourceForge repository and are not licensed under the AL 2.0. After the pear is installed start the Cas Visual Debugger shipped with the UIMA framework. And click on Tools -> Load AE. Then select the opennlp.uima.OpenNlpTextAnalyzer_pear.xml file in the file dialog. Now enter some text and start the analysis engine with "Run -> Run OpenNLPTextAnalyzer". Afterwards the results will be displayed. You should see sentences, tokens, chunks, pos tags and maybe some names. Remember the input text must be written in English.
Further Help For more information about how to use the integration please consult the javadoc of the individual Analysis Engines and checkout the included xml descriptors. TODO: Extend this documentation with information about the individual components. If you want to contribute please contact us on the mailing list or comment on the jira issue OPENNLP-49.
apache-opennlp-2.3.3-src/opennlp-docs/src/main/resources/xsl/html.xsl0100644 0000000 0000000 00000002374 14523004075 026173 0ustar00rootroot0000000 0000000 4 apache-opennlp-2.3.3-src/opennlp-morfologik-addon/bin/morfologik-addon0100644 0000000 0000000 00000001622 14523004075 026370 0ustar00rootroot0000000 0000000 #!/bin/sh # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. mvn -e -q exec:java "-Dexec.mainClass=opennlp.morfologik.cmdline.CLI" "-Dexec.args=$*" apache-opennlp-2.3.3-src/opennlp-morfologik-addon/bin/morfologik-addon.bat0100644 0000000 0000000 00000001754 14523004075 027143 0ustar00rootroot0000000 0000000 @ECHO OFF REM # Licensed to the Apache Software Foundation (ASF) under one REM # or more contributor license agreements. See the NOTICE file REM # distributed with this work for additional information REM # regarding copyright ownership. The ASF licenses this file REM # to you under the Apache License, Version 2.0 (the REM # "License"); you may not use this file except in compliance REM # with the License. You may obtain a copy of the License at REM # REM # http://www.apache.org/licenses/LICENSE-2.0 REM # REM # Unless required by applicable law or agreed to in writing, REM # software distributed under the License is distributed on an REM # REM # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY REM # KIND, either express or implied. See the License for the REM # specific language governing permissions and limitations REM # under the License. mvn -e -q exec:java "-Dexec.mainClass=opennlp.morfologik.cmdline.CLI" "-Dexec.args=%*" apache-opennlp-2.3.3-src/opennlp-morfologik-addon/pom.xml0100644 0000000 0000000 00000005025 14523004075 023760 0ustar00rootroot0000000 0000000 4.0.0 org.apache.opennlp opennlp 2.3.3 ../pom.xml opennlp-morfologik-addon jar Apache OpenNLP Morfologik Addon http://maven.apache.org org.carrot2 morfologik-stemming ${morfologik.version} compile org.carrot2 morfologik-tools ${morfologik.version} compile org.slf4j slf4j-api org.apache.opennlp opennlp-tools org.apache.opennlp opennlp-tools test-jar test org.junit.jupiter junit-jupiter-api test org.junit.jupiter junit-jupiter-engine test org.slf4j slf4j-simple test apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/bin/morfologik-addon0100644 0000000 0000000 00000002422 14523004075 030102 0ustar00rootroot0000000 0000000 #!/bin/sh # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # Note: Do not output anything in this script file, any output # may be inadvertantly placed in any output files if # output redirection is used. if [ -z "$JAVACMD" ] ; then if [ -n "$JAVA_HOME" ] ; then JAVACMD="$JAVA_HOME/bin/java" else JAVACMD="`which java`" fi fi # Might fail if $0 is a link OPENNLP_HOME=`dirname "$0"`/.. $JAVACMD -Xmx1024m -Dlog4j.configurationFile=../conf/log4j2.xml -cp "lib/*" opennlp.morfologik.cmdline.CLI $@ apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/bin/morfologik-addon.bat0100644 0000000 0000000 00000003547 14523004075 030660 0ustar00rootroot0000000 0000000 @ECHO off REM # Licensed to the Apache Software Foundation (ASF) under one REM # or more contributor license agreements. See the NOTICE file REM # distributed with this work for additional information REM # regarding copyright ownership. The ASF licenses this file REM # to you under the Apache License, Version 2.0 (the REM # "License"); you may not use this file except in compliance REM # with the License. You may obtain a copy of the License at REM # REM # http://www.apache.org/licenses/LICENSE-2.0 REM # REM # Unless required by applicable law or agreed to in writing, REM # software distributed under the License is distributed on an REM # # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY REM # KIND, either express or implied. See the License for the REM # specific language governing permissions and limitations REM # under the License. REM # Note: Do not output anything in this script file, any output REM # may be inadvertantly placed in any output files if REM # output redirection is used. SETLOCAL IF "%JAVA_CMD%" == "" ( IF "%JAVA_HOME%" == "" ( SET JAVA_CMD=java ) ELSE ( REM # Keep JAVA_HOME to short-name without spaces FOR %%A IN ("%JAVA_HOME%") DO SET JAVA_CMD=%%~sfA\bin\java ) ) REM # Should work with Windows XP and greater. If not, specify the path to where it is installed. IF "%OPENNLP_HOME%" == "" ( SET OPENNLP_HOME=%~sp0.. ) ELSE ( REM # Keep OPENNLP_HOME to short-name without spaces FOR %%A IN ("%OPENNLP_HOME%") DO SET OPENNLP_HOME=%%~sfA ) setLocal EnableDelayedExpansion set CLASSPATH=" FOR %%A IN ("%OPENNLP_HOME%\lib\*.jar") DO ( set CLASSPATH=!CLASSPATH!;%%A ) set CLASSPATH=!CLASSPATH!" %JAVA_CMD% -Xmx1024m "-Dlog4j.configurationFile=%OPENNLP_HOME%\conf\log4j2.xml" -cp %CLASSPATH% opennlp.morfologik.cmdline.CLI %* ENDLOCAL./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-morfologik-addon_src_main_java_opennlp_morfologik_b0100644 0000000 0000000 00000000205 14523004075 032470 xustar000000000 0000000 133 path=apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/builder/MorfologikDictionaryBuilder.java apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/builder/Morfologi0100644 0000000 0000000 00000007066 14523004075 034237 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.morfologik.builder; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Path; import java.util.Properties; import morfologik.stemming.DictionaryMetadata; import morfologik.stemming.EncoderType; import morfologik.tools.DictCompile; /** * Utility class to build Morfologik dictionaries from a tab separated * values file. *

* The first column is the word, the second its lemma and the third a POS * tag (base,inflected,tag). If there is no lemma information leave the * second column empty. */ public class MorfologikDictionaryBuilder { /** * Helper to compile a morphological dictionary automaton. * * @param input The {@link Path input file} (base,inflected,tag). * An associated metadata ({@code *.info}) file must exist. * @param overwrite Whether to overwrite the output file if it exists, or not. * @param validate Whether to validate input to make sure it makes sense. * @param acceptBom Whether to accept leading BOM bytes (UTF-8), or not. * @param acceptCr Whether to accept CR bytes in input sequences ({@code \r}), or not. * @param ignoreEmpty Whether to ignore empty lines in the input, or not. * * @return The resulting dictionary {@link Path}. * @throws Exception Thrown if errors occurred during dictionary compilation. */ public Path build(Path input, boolean overwrite, boolean validate, boolean acceptBom, boolean acceptCr, boolean ignoreEmpty) throws Exception { DictCompile compiler = new DictCompile(input, overwrite, validate, acceptBom, acceptCr, ignoreEmpty); compiler.call(); Path metadataPath = DictionaryMetadata.getExpectedMetadataLocation(input); return metadataPath.resolveSibling( metadataPath.getFileName().toString().replaceAll( "\\." + DictionaryMetadata.METADATA_FILE_EXTENSION + "$", ".dict")); } /** * Helper to compile a morphological dictionary automaton using default * parameters. * * @param input The {@link Path input file} (base,inflected,tag). * An associated metadata ({@code *.info}) file must exist. * * @return The resulting dictionary {@link Path}. * @throws Exception Thrown if errors occurred during dictionary compilation. */ public Path build(Path input) throws Exception { return build(input, true, true, false, false, false); } Properties createProperties(Charset encoding, String separator, EncoderType encoderType) throws IOException { Properties properties = new Properties(); properties.setProperty("fsa.dict.separator", separator); properties.setProperty("fsa.dict.encoding", encoding.name()); properties.setProperty("fsa.dict.encoder", encoderType.name()); return properties; } } apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/cmdline/CLI.java0100644 0000000 0000000 00000011471 14523004075 033611 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.morfologik.cmdline; import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.morfologik.cmdline.builder.MorfologikDictionaryBuilderTool; import opennlp.morfologik.cmdline.builder.XMLDictionaryToTableTool; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CmdLineTool; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.TypedCmdLineTool; import opennlp.tools.util.Version; public final class CLI { private static final Logger logger = LoggerFactory.getLogger(CLI.class); private static final String CMD = "opennlp-morfologik-addon"; private static Map toolLookupMap; static { toolLookupMap = new LinkedHashMap<>(); List tools = new LinkedList<>(); tools.add(new MorfologikDictionaryBuilderTool()); tools.add(new XMLDictionaryToTableTool()); for (CmdLineTool tool : tools) { toolLookupMap.put(tool.getName(), tool); } toolLookupMap = Collections.unmodifiableMap(toolLookupMap); } /** * @return A set which contains all tool names. */ public static Set getToolNames() { return toolLookupMap.keySet(); } private static void usage() { logger.info("OpenNLP Morfologik Addon {}.", Version.currentVersion()); logger.info("Usage: {} TOOL", CMD); // distance of tool name from line start int numberOfSpaces = -1; for (String toolName : toolLookupMap.keySet()) { if (toolName.length() > numberOfSpaces) { numberOfSpaces = toolName.length(); } } numberOfSpaces = numberOfSpaces + 4; final StringBuilder sb = new StringBuilder("where TOOL is one of: \n\n"); for (CmdLineTool tool : toolLookupMap.values()) { sb.append(" " + tool.getName()); sb.append(" ".repeat(Math.max(0, StrictMath.abs( tool.getName().length() - numberOfSpaces)))); sb.append(tool.getShortDescription()).append("\n"); } logger.info(sb.toString()); logger.info("All tools print help when invoked with help parameter"); logger.info("Example: opennlp-morfologik-addon POSDictionaryBuilder help"); } @SuppressWarnings("rawtypes") public static void main(String[] args) { if (args.length == 0) { usage(); System.exit(0); } String[] toolArguments = new String[args.length - 1]; System.arraycopy(args, 1, toolArguments, 0, toolArguments.length); String toolName = args[0]; //check for format String formatName = StreamFactoryRegistry.DEFAULT_FORMAT; int idx = toolName.indexOf("."); if (-1 < idx) { formatName = toolName.substring(idx + 1); toolName = toolName.substring(0, idx); } CmdLineTool tool = toolLookupMap.get(toolName); try { if (null == tool) { throw new TerminateToolException(1, "Tool " + toolName + " is not found."); } if ((0 == toolArguments.length && tool.hasParams()) || 0 < toolArguments.length && "help".equals(toolArguments[0])) { if (tool instanceof TypedCmdLineTool) { logger.info(((TypedCmdLineTool) tool).getHelp(formatName)); } else if (tool instanceof BasicCmdLineTool) { logger.info(tool.getHelp()); } System.exit(0); } if (tool instanceof TypedCmdLineTool) { ((TypedCmdLineTool) tool).run(formatName, toolArguments); } else if (tool instanceof BasicCmdLineTool) { if (-1 == idx) { ((BasicCmdLineTool) tool).run(toolArguments); } else { throw new TerminateToolException(1, "Tool " + toolName + " does not support formats."); } } else { throw new TerminateToolException(1, "Tool " + toolName + " is not supported."); } } catch (TerminateToolException e) { logger.error(e.getLocalizedMessage(), e); System.exit(e.getCode()); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-morfologik-addon_src_main_java_opennlp_morfologik_c0100644 0000000 0000000 00000000223 14523004075 032471 xustar000000000 0000000 147 path=apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/cmdline/builder/MorfologikDictionaryBuilderParams.java apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/cmdline/builder/M0100644 0000000 0000000 00000004542 14523004075 034105 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.morfologik.cmdline.builder; import java.io.File; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.params.EncodingParameter; /** * Params for Dictionary tools. */ interface MorfologikDictionaryBuilderParams extends EncodingParameter { @ParameterDescription(valueName = "in", description = "The input file (base,inflected,tag). An associated metadata (*.info) file must exist.") File getInputFile(); @ParameterDescription(valueName = "true|false", description = "Accept leading BOM bytes (UTF-8).") @OptionalParameter(defaultValue = "false") Boolean getAcceptBOM(); @ParameterDescription(valueName = "true|false", description = "Accept CR bytes in input sequences (\r).") @OptionalParameter(defaultValue = "false") Boolean getAcceptCR(); @ParameterDescription(valueName = "FSA5|CFSA2", description = "Automaton serialization format.") @OptionalParameter(defaultValue = "FSA5") String getFormat(); @ParameterDescription(valueName = "true|false", description = "Ignore empty lines in the input.") @OptionalParameter(defaultValue = "false") Boolean getIgnoreEmpty(); @ParameterDescription(valueName = "true|false", description = "Overwrite the output file if it exists.") @OptionalParameter(defaultValue = "false") Boolean getOverwrite(); @ParameterDescription(valueName = "true|false", description = "Validate input to make sure it makes sense.") @OptionalParameter(defaultValue = "false") Boolean getValidate(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-morfologik-addon_src_main_java_opennlp_morfologik_c0100644 0000000 0000000 00000000221 14523004075 032467 xustar000000000 0000000 145 path=apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/cmdline/builder/MorfologikDictionaryBuilderTool.java apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/cmdline/builder/M0100644 0000000 0000000 00000004447 14523004075 034111 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.morfologik.cmdline.builder; import java.io.File; import java.nio.file.Path; import morfologik.stemming.DictionaryMetadata; import opennlp.morfologik.builder.MorfologikDictionaryBuilder; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.TerminateToolException; public class MorfologikDictionaryBuilderTool extends BasicCmdLineTool { interface Params extends MorfologikDictionaryBuilderParams { } @Override public String getShortDescription() { return "builds a binary POS Dictionary using Morfologik"; } @Override public String getHelp() { return getBasicHelp(Params.class); } @Override public void run(String[] args) { Params params = validateAndParseParams(args, Params.class); File dictInFile = params.getInputFile(); CmdLineUtil.checkInputFile("dictionary input file", dictInFile); Path metadataPath = DictionaryMetadata.getExpectedMetadataLocation(dictInFile.toPath()); CmdLineUtil.checkInputFile("dictionary metadata (.info) input file", metadataPath.toFile()); MorfologikDictionaryBuilder builder = new MorfologikDictionaryBuilder(); try { builder.build(dictInFile.toPath(), params.getOverwrite(), params.getValidate(), params.getAcceptBOM(), params.getAcceptCR(), params.getIgnoreEmpty()); } catch (Exception e) { throw new TerminateToolException(-1, "Error while creating Morfologik POS Dictionary: " + e.getMessage(), e); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-morfologik-addon_src_main_java_opennlp_morfologik_c0100644 0000000 0000000 00000000214 14523004075 032471 xustar000000000 0000000 140 path=apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/cmdline/builder/XMLDictionaryToTableParams.java apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/cmdline/builder/X0100644 0000000 0000000 00000003550 14523004075 034116 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.morfologik.cmdline.builder; import java.io.File; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.params.EncodingParameter; /** * Params for Dictionary tools. */ interface XMLDictionaryToTableParams extends EncodingParameter { @ParameterDescription(valueName = "in", description = "OpenNLP XML Tag Dictionary.") File getInputFile(); @ParameterDescription(valueName = "out", description = "Output for Morfologik " + "(.info will be also created).") File getOutputFile(); @ParameterDescription(valueName = "char", description = "Column separator " + "(must be a single character)") @OptionalParameter(defaultValue = ",") String getSeparator(); @ParameterDescription(valueName = "value", description = " Type of lemma-inflected " + "form encoding compression that precedes automaton construction. Allowed " + "values: [suffix, infix, prefix, none].") @OptionalParameter(defaultValue = "prefix") String getEncoder(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-morfologik-addon_src_main_java_opennlp_morfologik_c0100644 0000000 0000000 00000000212 14523004075 032467 xustar000000000 0000000 138 path=apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/cmdline/builder/XMLDictionaryToTableTool.java apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/cmdline/builder/X0100644 0000000 0000000 00000010273 14523004075 034116 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.morfologik.cmdline.builder; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.util.Iterator; import java.util.Properties; import morfologik.stemming.DictionaryMetadata; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.postag.POSDictionary; public class XMLDictionaryToTableTool extends BasicCmdLineTool { private static final Logger logger = LoggerFactory.getLogger(XMLDictionaryToTableTool.class); private static String SEPARATOR; public String getShortDescription() { return "reads an OpenNLP XML tag dictionary and outputs it in a tabular file"; } @Override public String getHelp() { return getBasicHelp(Params.class); } @Override public void run(String[] args) { Params params = validateAndParseParams(args, Params.class); File dictInFile = params.getInputFile(); File dictOutFile = params.getOutputFile(); Charset encoding = params.getEncoding(); SEPARATOR = params.getSeparator(); CmdLineUtil.checkInputFile("dictionary input file", dictInFile); CmdLineUtil.checkOutputFile("dictionary output file", dictOutFile); POSDictionary tagDictionary; try { tagDictionary = POSDictionary.create(new FileInputStream(dictInFile)); } catch (IOException e) { throw new TerminateToolException(-1, "Error while loading XML POS Dictionary: " + e.getMessage(), e); } Iterator iterator = tagDictionary.iterator(); try (BufferedWriter writer = Files.newBufferedWriter(dictOutFile.toPath(), encoding)) { while (iterator.hasNext()) { String word = iterator.next(); for (String tag : tagDictionary.getTags(word)) { if (valid(word, tag)) { String entry = createEntry(word, tag); writer.write(entry); writer.newLine(); } } } logger.info("Created dictionary: {}", dictOutFile.toPath()); } catch (IOException e) { throw new TerminateToolException(-1, "Error while writing output: " + e.getMessage(), e); } Properties info = new Properties(); info.setProperty("fsa.dict.separator", SEPARATOR); info.setProperty("fsa.dict.encoding", params.getEncoding().name()); info.setProperty("fsa.dict.encoder", params.getEncoder()); Path metaPath = DictionaryMetadata.getExpectedMetadataLocation(dictOutFile.toPath()); try { info.store(Files.newOutputStream(metaPath), "Info file for FSA Morfologik dictionary."); } catch (IOException e) { throw new TerminateToolException(-1, "Error while writing metadata output: " + e.getMessage(), e); } logger.info("Created metadata: {}", dictOutFile.toPath()); } private boolean valid(String word, String tag) { if (word.contains(SEPARATOR) || tag.contains(SEPARATOR)) { logger.warn("invalid entry because contains separator - word: {} tag: {}", word, tag); return false; } return true; } private String createEntry(String word, String tag) { return "" + SEPARATOR + // base word + SEPARATOR + tag; } interface Params extends XMLDictionaryToTableParams { } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-morfologik-addon_src_main_java_opennlp_morfologik_l0100644 0000000 0000000 00000000201 14523004075 032476 xustar000000000 0000000 129 path=apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/lemmatizer/MorfologikLemmatizer.java apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/lemmatizer/Morfol0100644 0000000 0000000 00000006446 14523004075 034264 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.morfologik.lemmatizer; import java.io.IOException; import java.nio.file.Path; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Set; import morfologik.stemming.Dictionary; import morfologik.stemming.DictionaryLookup; import morfologik.stemming.WordData; import opennlp.tools.lemmatizer.Lemmatizer; /** * A {@link Lemmatizer} implementation based on Morfologik binary * dictionaries */ public class MorfologikLemmatizer implements Lemmatizer { private final Dictionary dictionary; /** * Initializes a {@link MorfologikLemmatizer} and related {@link Dictionary} * from the input tab separated dictionary. * * @param dictionaryPath The dictionary referenced via a valid, readable {@link Path}. * * @throws IOException Thrown if IO errors occurred while reading in from * {@code dictionaryPath}. */ public MorfologikLemmatizer(Path dictionaryPath) throws IOException { this(Dictionary.read(dictionaryPath)); } /** * Initializes a {@link MorfologikLemmatizer} and related {@link Dictionary} * from the input tab separated dictionary. * * @param dictionary The {@link Dictionary} to be used. */ public MorfologikLemmatizer(Dictionary dictionary) { this.dictionary = dictionary; } private List lemmatize(String word, String postag) { List dictMap = new DictionaryLookup(dictionary).lookup(word.toLowerCase()); Set lemmas = new HashSet<>(); for (WordData wordData : dictMap) { if (Objects.equals(postag, asString(wordData.getTag()))) { lemmas.add(asString(wordData.getStem())); } } return Collections.unmodifiableList(new ArrayList<>(lemmas)); } private String asString(CharSequence tag) { if (tag == null) { return null; } return tag.toString(); } @Override public String[] lemmatize(String[] toks, String[] tags) { String[] lemmas = new String[toks.length]; for (int i = 0; i < toks.length; i++) { List l = lemmatize(toks[i], tags[i]); if (l.size() > 0) { lemmas[i] = l.get(0); } else { lemmas[i] = null; } } return lemmas; } @Override public List> lemmatize(List toks, List tags) { List> lemmas = new ArrayList<>(); for (int i = 0; i < toks.size(); i++) { lemmas.add(lemmatize(toks.get(i), tags.get(i))); } return lemmas; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-morfologik-addon_src_main_java_opennlp_morfologik_t0100644 0000000 0000000 00000000204 14523004075 032511 xustar000000000 0000000 132 path=apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/tagdict/MorfologikPOSTaggerFactory.java apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/tagdict/Morfologi0100644 0000000 0000000 00000012760 14523004075 034225 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.morfologik.tagdict; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.util.Map; import morfologik.stemming.DictionaryMetadata; import opennlp.tools.postag.POSTaggerFactory; import opennlp.tools.postag.TagDictionary; import opennlp.tools.util.model.ArtifactSerializer; import opennlp.tools.util.model.ByteArraySerializer; /** * The factory provides a Morfologik specific {@link POSTaggerFactory} implementation * and initializes related resources. */ public class MorfologikPOSTaggerFactory extends POSTaggerFactory { private static final String MORFOLOGIK_POSDICT_SUF = "morfologik_dict"; private static final String MORFOLOGIK_DICT_INFO_SUF = "morfologik_info"; private static final String MORFOLOGIK_POSDICT = "tagdict." + MORFOLOGIK_POSDICT_SUF; private static final String MORFOLOGIK_DICT_INFO = "tagdict." + MORFOLOGIK_DICT_INFO_SUF; private TagDictionary dict; private byte[] dictInfo; private byte[] dictData; public MorfologikPOSTaggerFactory() { } /** * Initializes a {@link TagDictionary} from a {@link File dictionary file}. * * @param dictionary The {@link File} used as input for creating the dictionary. * * @return A valid {@link TagDictionary} ready for use. * @throws FileNotFoundException Thrown if {@code dictionary} or related metadata * could not be read in. * @throws IOException Thrown if IO errors occurred. */ public TagDictionary createTagDictionary(File dictionary) throws IOException { if (!dictionary.canRead()) { throw new FileNotFoundException("Could not read dictionary: " + dictionary.getAbsolutePath()); } Path dictionaryMeta = DictionaryMetadata.getExpectedMetadataLocation(dictionary.toPath()); if (dictionaryMeta == null || !dictionaryMeta.toFile().canRead()) { throw new FileNotFoundException("Could not read dictionary metadata: " + dictionaryMeta.getFileName()); } this.dictData = Files.readAllBytes(dictionary.toPath()); this.dictInfo = Files.readAllBytes(dictionaryMeta); return createMorfologikDictionary(dictData, dictInfo); } /** * @return The {@link TagDictionary} used. * @throws RuntimeException Thrown if errors occurred loading or reading * Morfologik dictionary files. */ @Override public TagDictionary getTagDictionary() { if (this.dict == null) { if (artifactProvider != null) { Object obj = artifactProvider.getArtifact(MORFOLOGIK_POSDICT); if (obj != null) { byte[] data = artifactProvider.getArtifact(MORFOLOGIK_POSDICT); byte[] info = artifactProvider.getArtifact(MORFOLOGIK_DICT_INFO); try { this.dict = createMorfologikDictionary(data, info); } catch (IllegalArgumentException e) { throw new RuntimeException( "Could not load the dictionary files to Morfologik.", e); } catch (IOException e) { throw new RuntimeException( "IO error while reading the Morfologik dictionary files.", e); } } } } return this.dict; } @Override public void setTagDictionary(TagDictionary dictionary) { this.dict = dictionary; } @Override public TagDictionary createEmptyTagDictionary() { throw new UnsupportedOperationException( "Morfologik POS Tagger factory does not support this operation"); } @Override public TagDictionary createTagDictionary(InputStream in) throws IOException { throw new UnsupportedOperationException( "Morfologik POS Tagger factory does not support this operation"); } @Override @SuppressWarnings("rawtypes") public Map createArtifactSerializersMap() { Map serializers = super.createArtifactSerializersMap(); serializers.put(MORFOLOGIK_POSDICT_SUF, new ByteArraySerializer()); serializers.put(MORFOLOGIK_DICT_INFO_SUF, new ByteArraySerializer()); return serializers; } @Override public Map createArtifactMap() { Map artifactMap = super.createArtifactMap(); artifactMap.put(MORFOLOGIK_POSDICT, this.dictData); artifactMap.put(MORFOLOGIK_DICT_INFO, this.dictInfo); return artifactMap; } private TagDictionary createMorfologikDictionary(byte[] data, byte[] info) throws IOException { morfologik.stemming.Dictionary dict = morfologik.stemming.Dictionary .read(new ByteArrayInputStream(data), new ByteArrayInputStream(info)); return new MorfologikTagDictionary(dict); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-morfologik-addon_src_main_java_opennlp_morfologik_t0100644 0000000 0000000 00000000201 14523004075 032506 xustar000000000 0000000 129 path=apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/tagdict/MorfologikTagDictionary.java apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/tagdict/Morfologi0100644 0000000 0000000 00000005424 14523004075 034224 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.morfologik.tagdict; import java.util.ArrayList; import java.util.List; import morfologik.stemming.Dictionary; import morfologik.stemming.DictionaryLookup; import morfologik.stemming.IStemmer; import morfologik.stemming.WordData; import opennlp.tools.postag.TagDictionary; /** * A {@link TagDictionary} implementation based on Morfologik binary * dictionaries */ public class MorfologikTagDictionary implements TagDictionary { private final IStemmer dictLookup; private final boolean isCaseSensitive; /** * Initializes a case sensitive {@link MorfologikTagDictionary} * * @param dict A Morfologik FSA {@link Dictionary}. * @throws IllegalArgumentException Thrown if FSA's root node cannot be acquired * (dictionary is empty). */ public MorfologikTagDictionary(Dictionary dict) throws IllegalArgumentException { this(dict, true); } /** * Initializes a {@link MorfologikTagDictionary} * * @param dict A Morfologik FSA {@link Dictionary}. * @param caseSensitive If {@code true} it performs case-sensitive lookup * @throws IllegalArgumentException Thrown if FSA's root node cannot be acquired * (dictionary is empty). */ public MorfologikTagDictionary(Dictionary dict, boolean caseSensitive) throws IllegalArgumentException { this.dictLookup = new DictionaryLookup(dict); this.isCaseSensitive = caseSensitive; } @Override public String[] getTags(String word) { if (!isCaseSensitive) { word = word.toLowerCase(); } List data = dictLookup.lookup(word); if (data != null && data.size() > 0) { List tags = new ArrayList<>(data.size()); for (WordData aData : data) { tags.add(aData.getTag().toString()); } if (tags.size() > 0) return tags.toArray(new String[0]); return null; } return null; } @Override public boolean isCaseSensitive() { return isCaseSensitive; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-morfologik-addon_src_main_java_opennlp_morfologik_u0100644 0000000 0000000 00000000165 14523004075 032520 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/util/MorfologikUtil.java apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/main/java/opennlp/morfologik/util/MorfologikUt0100644 0000000 0000000 00000002425 14523004075 034244 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.morfologik.util; import java.io.File; import morfologik.stemming.DictionaryMetadata; /** * A utility class that helps in finding (related) Morfologik files. */ public class MorfologikUtil { public static File getExpectedPropertiesFile(File dictFile) { return DictionaryMetadata.getExpectedMetadataLocation(dictFile.toPath()).toFile(); } public static File getExpectedPropertiesFile(String dictFile) { return getExpectedPropertiesFile(new File(dictFile)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-morfologik-addon_src_test_java_opennlp_morfologik_A0100644 0000000 0000000 00000000170 14523004075 032463 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/java/opennlp/morfologik/AbstractMorfologikTest.java apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/java/opennlp/morfologik/AbstractMorfologi0100644 0000000 0000000 00000004114 14523004075 034317 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.morfologik; import java.io.File; import java.io.InputStream; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; import morfologik.stemming.DictionaryMetadata; import opennlp.morfologik.builder.MorfologikDictionaryBuilder; public abstract class AbstractMorfologikTest { protected static Path createMorfologikDictionary() throws Exception { Path tabFilePath = File.createTempFile(AbstractMorfologikTest.class.getName(), ".txt").toPath(); tabFilePath.toFile().deleteOnExit(); Path infoFilePath = DictionaryMetadata.getExpectedMetadataLocation(tabFilePath); infoFilePath.toFile().deleteOnExit(); Files.copy(getResourceStream("/dictionaryWithLemma.txt"), tabFilePath, StandardCopyOption.REPLACE_EXISTING); Files.copy(getResourceStream("/dictionaryWithLemma.info"), infoFilePath, StandardCopyOption.REPLACE_EXISTING); MorfologikDictionaryBuilder builder = new MorfologikDictionaryBuilder(); return builder.build(tabFilePath); } private static InputStream getResourceStream(String name) { return AbstractMorfologikTest.class.getResourceAsStream(name); } protected static URL getResource(String name) { return AbstractMorfologikTest.class.getResource(name); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-morfologik-addon_src_test_java_opennlp_morfologik_b0100644 0000000 0000000 00000000211 14523004075 032520 xustar000000000 0000000 137 path=apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/java/opennlp/morfologik/builder/MorfologikDictionaryBuilderTest.java apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/java/opennlp/morfologik/builder/Morfologi0100644 0000000 0000000 00000005332 14523004075 034264 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.morfologik.builder; import java.io.File; import java.nio.file.Path; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.morfologik.AbstractMorfologikTest; import opennlp.morfologik.lemmatizer.MorfologikLemmatizer; /** * Tests for the {@link MorfologikDictionaryBuilder} class. */ public class MorfologikDictionaryBuilderTest extends AbstractMorfologikTest { @Test public void testMultithreading() throws Exception { // Part 1: compile a FSA lemma dictionary // we need the tabular dictionary. It is mandatory to have info // file with same name, but .info extension // this will build a binary dictionary located in compiledLemmaDictionary final Path rawLemmaDictionary = new File(getResource("/dictionaryWithLemma.txt").getFile()).toPath(); Path compiledLemmaDictionary = new MorfologikDictionaryBuilder().build(rawLemmaDictionary); // Part 2: load a MorfologikLemmatizer and use it MorfologikLemmatizer lemmatizer = new MorfologikLemmatizer(compiledLemmaDictionary); String[] toks = {"casa", "casa"}; String[] tags = {"NOUN", "V"}; Runnable runnable = () -> { String[] lemmas = lemmatizer.lemmatize(toks, tags); Assertions.assertEquals("casa", lemmas[0]); Assertions.assertEquals("casar", lemmas[1]); }; ExecutorService executorService = Executors.newFixedThreadPool(2); for (int i = 0; i < 1000; i++) { executorService.execute(runnable); } executorService.shutdown(); executorService.awaitTermination(1, TimeUnit.SECONDS); } @Test public void testBuildDictionary() throws Exception { Path output = createMorfologikDictionary(); MorfologikLemmatizer ml = new MorfologikLemmatizer(output); Assertions.assertNotNull(ml); output.toFile().deleteOnExit(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-morfologik-addon_src_test_java_opennlp_morfologik_l0100644 0000000 0000000 00000000205 14523004075 032535 xustar000000000 0000000 133 path=apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/java/opennlp/morfologik/lemmatizer/MorfologikLemmatizerTest.java apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/java/opennlp/morfologik/lemmatizer/Morfol0100644 0000000 0000000 00000004410 14523004075 034304 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.morfologik.lemmatizer; import java.nio.file.Path; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.morfologik.AbstractMorfologikTest; import opennlp.tools.lemmatizer.Lemmatizer; /** * Tests for the {@link MorfologikLemmatizer} class. */ public class MorfologikLemmatizerTest extends AbstractMorfologikTest { @Test public void testLemmatizeInsensitive() throws Exception { Lemmatizer dict = createDictionary(false); String[] toks = {"casa", "casa", "Casa"}; String[] tags = {"V", "NOUN", "PROP"}; String[] lemmas = dict.lemmatize(toks, tags); Assertions.assertEquals("casar", lemmas[0]); Assertions.assertEquals("casa", lemmas[1]); // lookup is case-insensitive. There is no entry casa - prop Assertions.assertNull(lemmas[2]); } @Test public void testLemmatizeMultiLemma() throws Exception { MorfologikLemmatizer dict = createDictionary(false); String[] toks = {"foi"}; String[] tags = {"V"}; List> lemmas = dict.lemmatize(Arrays.asList(toks), Arrays.asList(tags)); Assertions.assertTrue(lemmas.get(0).contains("ir")); Assertions.assertTrue(lemmas.get(0).contains("ser")); } private MorfologikLemmatizer createDictionary(boolean caseSensitive) throws Exception { Path output = createMorfologikDictionary(); output.toFile().deleteOnExit(); return new MorfologikLemmatizer(output); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-morfologik-addon_src_test_java_opennlp_morfologik_t0100644 0000000 0000000 00000000210 14523004075 032541 xustar000000000 0000000 136 path=apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/java/opennlp/morfologik/tagdict/MorfologikPOSTaggerFactoryTest.java apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/java/opennlp/morfologik/tagdict/Morfologi0100644 0000000 0000000 00000007377 14523004075 034270 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.morfologik.tagdict; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.morfologik.AbstractMorfologikTest; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSSample; import opennlp.tools.postag.POSTaggerFactory; import opennlp.tools.postag.POSTaggerME; import opennlp.tools.postag.TagDictionary; import opennlp.tools.postag.WordTagSampleStream; import opennlp.tools.util.MarkableFileInputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.ModelType; /** * Tests for the {@link MorfologikPOSTaggerFactory} class. */ public class MorfologikPOSTaggerFactoryTest extends AbstractMorfologikTest { private static ObjectStream createSampleStream() throws IOException { MarkableFileInputStreamFactory sampleDataIn = new MarkableFileInputStreamFactory( new File(getResource("/AnnotatedSentences.txt").getFile())); ObjectStream lineStream = null; try { lineStream = new PlainTextByLineStream(sampleDataIn, StandardCharsets.UTF_8); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } return new WordTagSampleStream(lineStream); } private static POSModel trainPOSModel(ModelType type, POSTaggerFactory factory) throws IOException { return POSTaggerME.train("en", createSampleStream(), TrainingParameters.defaultParams(), factory); } @Test public void testPOSTaggerWithCustomFactory() throws Exception { Path dictionary = createMorfologikDictionary(); dictionary.toFile().deleteOnExit(); POSTaggerFactory inFactory = new MorfologikPOSTaggerFactory(); TagDictionary inDict = inFactory.createTagDictionary(dictionary.toFile()); inFactory.setTagDictionary(inDict); POSModel posModel = trainPOSModel(ModelType.MAXENT, inFactory); Assertions.assertNotNull(posModel); POSTaggerFactory factory = posModel.getFactory(); Assertions.assertNotNull(factory); Assertions.assertTrue(factory.getTagDictionary() instanceof MorfologikTagDictionary); ByteArrayOutputStream out = new ByteArrayOutputStream(); posModel.serialize(out); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); POSModel fromSerialized = new POSModel(in); Assertions.assertNotNull(fromSerialized); // check for equality Assertions.assertEquals(posModel, fromSerialized); factory = fromSerialized.getFactory(); Assertions.assertNotNull(factory); Assertions.assertTrue(factory.getTagDictionary() instanceof MorfologikTagDictionary); Assertions.assertEquals(2, factory.getTagDictionary().getTags("casa").length); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-morfologik-addon_src_test_java_opennlp_morfologik_t0100644 0000000 0000000 00000000205 14523004075 032545 xustar000000000 0000000 133 path=apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/java/opennlp/morfologik/tagdict/MorfologikTagDictionaryTest.java apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/java/opennlp/morfologik/tagdict/Morfologi0100644 0000000 0000000 00000006443 14523004075 034261 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.morfologik.tagdict; import java.nio.file.Path; import java.util.Arrays; import java.util.List; import morfologik.stemming.Dictionary; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.morfologik.AbstractMorfologikTest; import opennlp.tools.postag.TagDictionary; /** * Tests for the {@link MorfologikTagDictionary} class. */ public class MorfologikTagDictionaryTest extends AbstractMorfologikTest { @Test public void testNoLemma() throws Exception { MorfologikTagDictionary dict = createDictionary(false); List tags = Arrays.asList(dict.getTags("carro")); Assertions.assertEquals(1, tags.size()); Assertions.assertTrue(tags.contains("NOUN")); } @Test public void testPOSDictionaryInsensitive() throws Exception { TagDictionary dict = createDictionary(false); List tags = Arrays.asList(dict.getTags("casa")); Assertions.assertEquals(2, tags.size()); Assertions.assertTrue(tags.contains("NOUN")); Assertions.assertTrue(tags.contains("V")); // this is the behavior of case insensitive dictionary // if we search it using case insensitive, Casa as a proper noun // should be lower case in the dictionary tags = Arrays.asList(dict.getTags("Casa")); Assertions.assertEquals(2, tags.size()); Assertions.assertTrue(tags.contains("NOUN")); Assertions.assertTrue(tags.contains("V")); } @Test public void testPOSDictionarySensitive() throws Exception { TagDictionary dict = createDictionary(true); List tags = Arrays.asList(dict.getTags("casa")); Assertions.assertEquals(2, tags.size()); Assertions.assertTrue(tags.contains("NOUN")); Assertions.assertTrue(tags.contains("V")); // this is the behavior of case insensitive dictionary // if we search it using case insensitive, Casa as a proper noun // should be lower case in the dictionary tags = Arrays.asList(dict.getTags("Casa")); Assertions.assertEquals(1, tags.size()); Assertions.assertTrue(tags.contains("PROP")); } private MorfologikTagDictionary createDictionary(boolean caseSensitive) throws Exception { return this.createDictionary(caseSensitive, null); } private MorfologikTagDictionary createDictionary(boolean caseSensitive, List constant) throws Exception { Path output = createMorfologikDictionary(); output.toFile().deleteOnExit(); Dictionary dic = Dictionary.read(output); return new MorfologikTagDictionary(dic, caseSensitive); } } apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/resources/AnnotatedSentences.txt0100644 0000000 0000000 00000031454 14523004075 032556 0ustar00rootroot0000000 0000000 Last_JJ September_NNP ,_, I_PRP tried_VBD to_TO find_VB out_RP the_DT address_NN of_IN an_DT old_JJ school_NN friend_NN whom_WP I_PRP had_VBD not_RB seen_VBN for_IN 15_CD years_NNS ._. I_PRP just_RB knew_VBD his_PRP$ name_NN ,_, Alan_NNP McKennedy_NNP ,_, and_CC I_PRP 'd_MD heard_VBD the_DT rumour_NN that_IN he_PRP 'd_MD moved_VBD to_TO Scotland_NNP ,_, the_DT country_NN of_IN his_PRP$ ancestors_NNS ._. So_IN I_PRP called_VBD Julie_NNP ,_, a_DT friend_NN who's_WDT still_RB in_IN contact_NN with_IN him_PRP ._. She_PRP told_VBD me_PRP that_IN he_PRP lived_VBD in_IN 23213_CD Edinburgh_NNP ,_, Worcesterstreet_NNP 12_CD ._. I_PRP wrote_VBD him_PRP a_DT letter_NN right_RB away_RB and_CC he_PRP answered_VBD soon_RB ,_, sounding_VBG very_RB happy_JJ and_CC delighted_JJ ._. Last_JJ year_NN ,_, I_PRP wanted_VBD to_TO write_VB a_DT letter_NN to_TO my_PRP$ grandaunt_NN ._. Her_PRP$ 86_CD th_NN birthday_NN was_VBD on_IN October_NNP 6_CD ,_, and_CC I_PRP no_RB longer_RB wanted_VBD to_TO be_VB hesitant_JJ to_TO get_VB in_IN touch_NN with_IN her_PRP ._. I_PRP did_VBD not_RB know_VB her_PRP face-to-face_RB ,_, and_CC so_RB it_PRP was_VBD not_RB easy_JJ for_IN me_PRP to_TO find_VB out_RP her_PRP$ address_NN ._. As_IN she_PRP had_VBD two_CD apartments_NNS in_IN different_JJ countries_NNS ,_, I_PRP decided_VBD to_TO write_VB to_TO both_DT ._. The_DT first_JJ was_VBD in_IN 12424_CD Paris_NNP in_IN Rue-de-Grandes-Illusions_NNP 5_CD ._. But_CC Marie_NNP Clara_NNP ,_, as_IN my_PRP$ aunt_NN is_VBZ called_VBN ,_, prefered_VBN her_PRP$ apartment_NN in_IN Berlin_NNP ._. It_PRP 's_VBZ postcode_JJ is_VBZ 30202_CD ._. She_PRP lived_VBD there_RB ,_, in_IN beautiful_JJ Kaiserstra§e_NNP 13_CD ,_, particulary_NN in_IN summer_NN ._. Hi_UH my_PRP$ name_NN is_VBZ Stefanie_NNP Schmidt_NNP ,_, how_WRB much_RB is_VBZ a_DT taxi_NN from_IN Ostbahnhof_NNP to_TO Hauptbahnhof_NNP ?_. About_IN 10_CD Euro_NNP ,_, I_PRP reckon_VBP ._. That_DT sounds_VBZ good_JJ ._. So_RB please_VB call_VB a_DT driver_NN to_TO Leonardstra§e_NNP 112_CD ,_, near_IN the_DT Ostbahnhof_NNP in_IN 56473_CD Hamburg_NNP ._. I_PRP 'd_MD like_VB to_TO be_VB at_IN Silberhornstra§e_NNP 12_CD as_RB soon_RB as_IN possible_JJ ._. Thank_VB you_PRP very_RB much_RB !_. Hi_NNP Mike_NNP ,_, it_PRP 's_VBZ Stefanie_NNP Schmidt_NNP ._. I_PRP 'm_VBP in_IN NŸrnberg_NNP at_IN the_DT moment_NN and_CC I_PRP 've_VBP got_VBD the_DT problem_NN that_IN my_PRP$ bike_NN has_VBZ broken_VBN ._. Could_MD you_PRP please_VB pick_VB me_PRP up_RP from_IN Seidlstra§e_NNP 56_CD ,_, I_PRP 'm_VBP in_IN the_DT CafŽ_NNP "Mondnacht"_NNP at_IN the_DT moment_NN ._. Please_VB hurry_VB up_RB ,_, I_PRP need_VBP to_TO be_VB back_RB in_IN Ulm_NNP at_IN 8_CD p.m._NN !_. My_PRP$ husband_NN George_NNP and_CC me_PRP recently_RB celebrated_VBD our_PRP$ 10_CD th_JJ wedding_NN anniversary_NN ._. We_PRP got_VBD married_VBN on_IN March_NNP 11_CD ,_, 1995_CD ._. Therefore_RB ,_, we_PRP found_VBD a_DT photo_NN album_NN with_IN pictures_NNS of_IN our_PRP$ first_JJ own_JJ apartment_NN ,_, which_WDT was_VBD in_IN 81234_CD Munich_NNP ._. As_IN a_DT young_JJ married_JJ couple_NN ,_, we_PRP did_VBD not_RB have_VB enough_JJ money_NN to_TO afford_VB a_DT bigger_JJR lodge_NN than_IN this_DT one_CD in_IN Blumenweg_NNP 1_CD ._. But_CC only_RB five_CD years_NNS later_RB ,_, my_PRP$ husband_NN was_VBD offered_VBN a_DT well-payed_JJ job_NN in_IN 17818_CD Hamburg_NNP ,_, so_IN we_PRP moved_VBD there_RB ._. Since_IN then_RB ,_, our_PRP$ guests_NNS have_VBP to_TO ring_VB at_IN Veilchenstra§e_NNP 11_CD if_IN they_PRP want_VBP to_TO visit_VB us_PRP ,_, Luise_NNP and_CC George_NNP Bauer_NNP ._. I_PRP read_VBD your_PRP$ help-wanted_JJ ad_NN with_IN great_JJ attention_NN ._. I_PRP 'm_VBP a_DT student_NN of_IN informatics_NNS ,_, 6th_JJ semester,_NN and_CC I_PRP 'm_VBP very_RB interested_VBN in_IN your_PRP$ part-time_JJ job_NN offer_NN ._. I_PRP have_VBP a_DT competent_JJ knowledge_NN of_IN programming_NN and_CC foreign_JJ languages_NNS ,_, like_IN French_JJ and_CC Italian_JJ ._. I_PRP 'm_VBP looking_VBG forward_RB to_TO your_PRP$ reply_NN ._. Alisa_NNP Fernandes_NNP ,_, a_DT tourist_NN from_IN Spain_NNP ,_, went_VBD to_TO the_DT reception_NN desk_NN of_IN the_DT famous_JJ Highfly-Hotel_NNP in_IN 30303_CD Berlin_NNP ._. As_IN she_PRP felt_VBD quite_RB homesick_JJ ,_, she_PRP asked_VBD the_DT staff_NN if_IN they_PRP knew_VBD a_DT good_JJ Spanish_JJ restaurant_NN in_IN Berlin_NNP ._. The_DT concierge_NN told_VBD her_PRP to_TO go_VB to_TO the_DT "Tapasbar"_NN in_IN Chesterstr._NNP 2_CD ._. Alisa_NNP appreciated_VBD the_DT hint_NN and_CC enjoyed_VBD a_DT delicious_JJ traditional_JJ meal_NN ._. An_DT old_JJ friend_NN from_IN France_NNP is_VBZ currently_RB travelling_VBG around_IN Europe_NNP ._. Yesterday_NN ,_, she_PRP arrived_VBD in_IN Berlin_NNP and_CC we_PRP met_VBD up_RP spontaneously_RB ._. She_PRP wanted_VBD me_PRP to_TO show_VB her_PRP some_DT famous_JJ sights_NNS ,_, like_IN the_DT Brandenburger_NNP Tor_NNP and_CC the_DT Reichstag_NNP ._. But_CC it_PRP was_VBD not_RB easy_JJ to_TO meet_VB up_RP in_IN the_DT city_NN because_IN she_PRP hardly_RB knows_VBZ any_DT streetname_NN or_CC building_NN ._. So_IN I_PRP proposed_VBD to_TO meet_VB at_IN a_DT quite_RB local_JJ point:_NN the_DT cafŽ_NN "Daily's"_NN in_IN Unter-den-Linden_NNP 18,_CD 30291_CD Berlin_NNP ._. It_PRP is_VBZ five_CD minutes_NNS away_RB from_IN the_DT underground_JJ station_NN "Westbad"_NN ._. She_PRP found_VBD it_PRP instantly_RB and_CC we_PRP spent_VBD a_DT great_JJ day_NN in_IN the_DT capital_NN ._. Where_WRB did_VBD you_PRP get_VB those_DT great_JJ shoes_NNS ?_. They_PRP look_VBP amazing_JJ ,_, I_PRP love_VBP the_DT colour_NN ._. Are_VBP they_PRP made_VBN of_IN leather_NN ?_. No,_NNP that_DT 's_VBZ faked_VBN ._. But_CC anyway_RB ,_, I_PRP like_VBP them_PRP too_RB ._. I_PRP got_VBD them_PRP from_IN Hamburg._NNP Do_VBP not_RB you_PRP know_VB the_DT famous_JJ shop_NN in_IN Veilchenstra§e_NNP ?_. It_PRP 's_VBZ called_VBN "Twentytwo"_NNP ._. I_PRP 've_VBP never_RB heard_VBN of_IN that_DT before_RB ._. Could_MD you_PRP give_VB me_PRP the_DT complete_JJ address_NN ?_. Sure_JJ ,_, it_PRP 's_VBZ in_IN Veilchenstra§e_NNP 12_CD ,_, in_IN 78181_CD Hamburg_NNP ._. I_PRP deem_VBP it_PRP best_RB to_TO write_VB a_DT letter_NN to_TO the_DT owner_NN if_IN the_DT shoes_NNS are_VBP still_RB available_JJ ._. His_PRP$ name_NN is_VBZ Gerhard_NNP Fritsch_NNP ._. Hi_UH ,_, am_VBP I_PRP talking_VBG to_TO the_DT inquiries_NNS ?_. My_PRP$ name_NN is_VBZ Mike_NNP Sander_NNP and_CC I_PRP 'd_MD like_VB to_TO know_VB if_IN it_PRP is_VBZ possible_JJ to_TO get_VB information_NN about_IN an_DT address_NN if_IN I_PRP merely_RB know_VBP the_DT name_NN and_CC the_DT phone_NN number_NN of_IN a_DT person_NN !_. How_WRB is_VBZ he_PRP or_CC she_PRP called_VBD ?_. His_PRP$ name_NN is_VBZ Stefan_NNP Miller_NNP and_CC his_PRP$ number_NN is_VBZ the_DT 030/827234_CD ._. I'll_NNP have_VBP a_DT look_NN in_IN the_DT computer..._NN I_PRP found_VBD a_DT Stefan_NNP Miller_NNP who_WP lives_VBZ in_IN Leipzig._NNP Is_VBZ that_DT right_NN ?_. Yes_UH ,_, it_PRP definitely_RB is_VBZ ._. So_RB Stefan_NNP Miller_NNP lives_VBZ in_IN Heinrich-Heine-Stra§e_NNP 112_CD ,_, in_IN 20193_CD Leipzig_NNP ._. Thank_VB you_PRP very_RB much_RB for_IN the_DT information_NN ._. Bye_NNP !_. On_IN July_NNP 14_CD ,_, the_DT father_NN of_IN a_DT family_NN got_VBD painfully_RB injured_VBN after_IN he_PRP had_VBD tried_VBN to_TO start_VB a_DT barbecue_NN ._. The_DT flaring_VBG flames_NNS burnt_VBP instantly_RB through_IN his_PRP$ jacket_NN ,_, which_WDT he_PRP managed_VBD to_TO pull_VB off_RP last-minute_JJ ._. Although_IN the_DT wounds_NNS were_VBD n't_RB life-threatening_JJ ,_, it_PRP was_VBD urgent_JJ to_TO bring_VB him_PRP directly_RB into_IN ambulance_NN ._. But_CC the_DT only_JJ hospital_NN that_WDT had_VBD opened_VBN that_IN Sunday_NNP was_VBD the_DT Paracelsus_NNP Hospital_NNP in_IN 83939_CD Weilheim_NNP ,_, which_WDT was_VBD 2_CD hours_NNS away_RB ._. Convulsed_JJ with_IN pain_NN ,_, the_DT man_NN finally_RB arrived_VBD in_IN Stifterstra§e_NNP 15_CD ,_, where_WRB the_DT personal_NN immediately_RB took_VBD care_NN of_IN him_PRP ._. Last_JJ year_NN ,_, I_PRP worked_VBD as_IN a_DT delivery_NN boy_NN for_IN a_DT small_JJ local_JJ magazine_NN ._. I_PRP worked_VBD in_IN the_DT area_NN of_IN 83454_CD Ottobrunn_NNP ._. I_PRP had_VBD a_DT list_NN with_IN the_DT home_NN addresses_NNS of_IN our_PRP$ costumers_NNS whom_WP I_PRP brought_VBD their_PRP$ papers_NNS once_RB a_DT week_NN ._. An_DT elderly_JJ lady_NN ,_, who_WP was_VBD called_VBN Elenor_NNP Meier_NNP ,_, lived_VBD in_IN GŠrtnerweg_NNP 6_CD ,_, and_CC I_PRP always_RB drove_VBD there_RB first_RB ,_, because_IN I_PRP liked_VBD her_PRP the_DT most_JJS ._. Afterwards_RB ,_, I_PRP went_VBD to_TO a_DT student_NN ,_, Gina_NNP Schneider_NNP ,_, who_WP lived_VBD still_RB in_IN her_PRP$ parent's_NNS house_NN in_IN GŠrtnerweg_NNP 25_CD ._. The_DT last_JJ in_IN line_NN was_VBD the_DT retired_JJ teacher_NN Bruno_NNP Schulz_NNP in_IN Dramenstra§e_NNP 15_CD ._. He_PRP was_VBD friendly_JJ enough_RB to_TO tip_VB sometimes_RB ._. Our_PRP$ business_NN company_NN was_VBD founded_VBN in_IN 1912_CD by_IN the_DT singer_NN and_CC entertainer_NN Michel_NNP Seile_NNP ._. He_PRP opened_VBD the_DT first_JJ agency_NN in_IN Erding_NNP ,_, a_DT small_JJ town_NN near_IN Munich_NNP ._. Now_RB ,_, more_JJR than_IN 90_CD years_NNS of_IN turbulent_JJ ups_NNS and_CC downs_NNS later_RB ,_, we_PRP finally_RB decided_VBD to_TO situate_VB our_PRP$ company_NN in_IN a_DT more_JJR central_JJ and_CC frequented_JJ area_NN ._. Last_JJ year_NN ,_, we_PRP moved_VBD into_IN an_DT empty_JJ factory_NN building_NN in_IN 30303_CD Berlin_NNP ._. It_PRP is_VBZ located_VBN in_IN Barmerstr._NNP 34_CD ._. When_WRB George_NNP Miller_NNP ,_, a_DT tourist_NN from_IN England_NNP ,_, came_VBD to_TO Munich_NNP ,_, he_PRP had_VBD no_DT idea_NN how_WRB to_TO read_VB the_DT city_NN maps_NNS ._. He_PRP depended_VBD completely_RB on_IN the_DT help_NN and_CC information_NN of_IN German_JJ pedestrians_NNS ._. One_CD day_NN ,_, he_PRP simply_RB could_MD not_RB find_VB the_DT famous_JJ Lenbachhaus_NNP ._. So_RB he_PRP asked_VBD a_DT young_JJ woman_NN for_IN help_NN ._. She_PRP pointed_VBD at_IN a_DT street_NN sign_NN and_CC explained_VBD to_TO him_PRP that_IN he_PRP 'd_MD find_VB the_DT Lenbachhaus_NNP in_IN Luisenstra§e_NNP 33_CD ,_, which_WDT is_VBZ in_IN 80333_CD Munich_NNP ._. Miller_NNP was_VBD very_RB grateful_JJ and_CC could_MD finally_RB enjoy_VB the_DT exhibition_NN ._. On_IN March_NNP 15_CD ,_, there_EX was_VBD an_DT accident_NN near_IN Munich_NNP ._. The_DT driver_NN got_VBD badly_RB injured_VBN ._. Driving_VBG alone_RB not_RB far_RB from_IN her_PRP$ home_NN ,_, the_DT middle-aged_JJ woman_NN crashed_VBD at_IN high_JJ speed_NN into_IN a_DT tree_NN ._. A_DT resident_NN ,_, who_WP lives_VBZ near_IN the_DT street_NN where_WRB the_DT accident_NN took_VBD place_NN ,_, called_VBN instantly_RB the_DT police_NN ._. He_PRP reported_VBD what_WP had_VBD happened_VBN and_CC gave_VBD his_PRP$ name_NN and_CC address_NN to_TO the_DT officer_NN ._. He_PRP 's_VBZ called_VBN Peter_NNP Schubert_NNP and_CC he_PRP lives_VBZ at_IN Max-Lšw-Stra§e_NNP 13_CD in_IN 84630_CD Gauting_NNP ._. The_DT police_NN arrived_VBD ten_CD minutes_NNS later_RB and_CC brought_VBD the_DT woman_NN into_IN hospital_NN ._. Although_IN she_PRP had_VBD multiple_JJ trauma_NN ,_, she_PRP 's_VBZ out_IN of_IN mortal_JJ danger_NN ._. Hi_NNP ,_, how_WRB are_VBP you_PRP ?_. Are_VBP nt't_RB you_PRP a_DT friend_NN of_IN Natalie_NNP ?_. Yeah_UH for_IN sure_JJ ._. How_WRB did_VBD you_PRP know_VB that_DT ?_. I_PRP saw_VBD you_PRP sitting_VBG next_JJ to_TO her_PRP at_IN uni_JJ ._. Yeah_NNP she_PRP 's_VBZ my_PRP$ best_JJS friend_NN ._. Are_VBP you_PRP going_VBG to_TO her_PRP party_NN next_JJ friday_NN ?_. Oh_UH yes_UH ,_, I_PRP 'd_MD really_RB like_VB to_TO ._. But_CC in_IN fact_NN I_PRP do_VBP n't_RB know_VB yet_RB where_WRB it_PRP takes_VBZ place_NN ._. I_PRP can_MD tell_VB you_PRP :_: ring_NN at_IN Baumann,_NNP Meisenstra§e_NNP 5_CD ,_, in_IN 81737_CD Munich_NNP ._. The_DT party_NN starts_VBZ at_IN 9_CD p.m._NN ._. I_PRP hope_VBP you_PRP 'll_MD find_VB it_PRP ._. Thank_VB you_PRP very_RB much_RB ,_, see_VBP you_PRP next_JJ friday_NN !_. My_PRP$ name_NN is_VBZ Michael_NNP Hinterhofer_NNP ._. When_WRB I_PRP was_VBD 21_CD ,_, I_PRP moved_VBD out_RP from_IN my_PRP$ parents_NNS home_NN into_IN my_PRP$ first_JJ own_JJ appartment_NN in_IN order_NN to_TO study_VB in_IN a_DT bigger_JJR city_NN ._. My_PRP$ new_JJ home_NN was_VBD in_IN Lilienstra§e_NNP 1_CD in_IN 25334_CD Hamburg_NNP ._. But_CC I_PRP realized_VBD quickly_RB that_IN life_NN in_IN a_DT metropolis_NN was_VBD n't_RB relaxed_VBN enough_RB for_IN me_PRP ._. So_IN I_PRP decided_VBD to_TO move_VB into_IN a_DT smaller_JJR town_NN ._. Now_RB I_PRP 'm_VBP a_DT tenant_NN with_IN an_DT elderly_JJ widow_NN ._. We_PRP live_VBP in_IN BŸrgerstra§e_NNP 2_CD in_IN 63737_CD Heidelberg_NNP ._. I_PRP really_RB like_IN the_DT smalltown_JJ flair_NN and_CC my_PRP$ studies_NNS at_IN Heidelberg_NNP 's_POS notable_JJ university_NN ._.apache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/resources/dictionaryWithLemma.dict0100644 0000000 0000000 00000000337 14523004075 033046 0ustar00rootroot0000000 0000000 \fsa_+^Cc€f¨meninapioÐão,ADo,NOUN,AAznho,AEj,ABjoi,AHCAr,VDsearØsaÈi`ona,ADaznha,AEJ,ˆr,AA,V-INFAA,ˆr"roÒasa,AA,PROPapache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/resources/dictionaryWithLemma.info0100644 0000000 0000000 00000000756 14523004075 033063 0ustar00rootroot0000000 0000000 # # REQUIRED PROPERTIES # # Column (lemma, inflected, tag) separator. This must be a single byte in the target encoding. fsa.dict.separator=, # The charset in which the input is encoded. UTF-8 is strongly recommended. fsa.dict.encoding=UTF-8 # The type of lemma-inflected form encoding compression that precedes automaton # construction. Allowed values: [suffix, infix, prefix, none]. # Details are in Daciuk's paper and in the code. # Leave at 'prefix' if not sure. fsa.dict.encoder=prefixapache-opennlp-2.3.3-src/opennlp-morfologik-addon/src/test/resources/dictionaryWithLemma.txt0100644 0000000 0000000 00000000325 14523004075 032737 0ustar00rootroot0000000 0000000 carro,carro,NOUN casa,casa,NOUN Casa,Casa,PROP casa,casinha,NOUN casa,casona,NOUN casar,casa,V casar,casar,V-INF ir,foi,V menino,menina,NOUN menino,menininho,NOUN menino,menino,NOUN menino,meninão,NOUN ser,foi,V apache-opennlp-2.3.3-src/opennlp-tools/bin/opennlp0100644 0000000 0000000 00000001615 14523004075 022517 0ustar00rootroot0000000 0000000 #!/bin/sh # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. mvn -e -q exec:java "-Dexec.mainClass=opennlp.tools.cmdline.CLI" "-Dexec.args=$*" apache-opennlp-2.3.3-src/opennlp-tools/bin/opennlp.bat0100644 0000000 0000000 00000001747 14523004075 023272 0ustar00rootroot0000000 0000000 @ECHO OFF REM # Licensed to the Apache Software Foundation (ASF) under one REM # or more contributor license agreements. See the NOTICE file REM # distributed with this work for additional information REM # regarding copyright ownership. The ASF licenses this file REM # to you under the Apache License, Version 2.0 (the REM # "License"); you may not use this file except in compliance REM # with the License. You may obtain a copy of the License at REM # REM # http://www.apache.org/licenses/LICENSE-2.0 REM # REM # Unless required by applicable law or agreed to in writing, REM # software distributed under the License is distributed on an REM # REM # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY REM # KIND, either express or implied. See the License for the REM # specific language governing permissions and limitations REM # under the License. mvn -e -q exec:java "-Dexec.mainClass=opennlp.tools.cmdline.CLI" "-Dexec.args=%*" apache-opennlp-2.3.3-src/opennlp-tools/lang/de/abb_DE.xml0100644 0000000 0000000 00000025570 14523004075 023506 0ustar00rootroot0000000 0000000  östl. AB-Whg. Abl. Abs. Anm. Aufl. Ausf. Bd. Best.-Nr. Bio. Bj. Blk. Bsp. Dipl.-Ing. Eigent.-Whg. Eigent.-Whgn. Eigt.-Whg. Eigt.-Whgn. Fr. Gal. Gart.ant. Grd. Grdst. H. Hdt. Hr. Hrsg. Jahrh. Jg. Jh. Kl.-Whg. Kl.-Whgn. Mais.-Whg. Mais.-Whgn. Md. Mio. Mrd. MwSt. N cont. NB-Whg. Nb.-Whg. Nb.-Whgn. Nfl. Nordd. Nr. Pak. Prov. Südd. S. Sout. Str. Tsd. Wdh. Wg.Whg. Whgn. Zi. Ziegelbauw. Ztr.-Hzg. Ztrhzg. Zw.-Whg. Zw.-Whgn. a.a.O. abzgl. afrz. ahd. b. bezugsf. bibl. bspw. bzgl. bzw. c. d. h. d.h. dgl. dt. ev. e.V. e. V. ebd. ebda. ehem. engl. ff. frühnhd. freist. frz. geb. gestr. ggf. grds. griech. hd. hl. i. d. R. i.G. i.d.R. i.e.S. kath. lat. lt. möbl. mfrz. mhd. mnl. näml. nördl. n. Chr. n.Chr. n.V. nhd. nl. o.Ä. o.ä. o. Ä. o. ä. o. g. o.g. röm.-kath. rd. ren. ren.bed. rest. südl. südnl. s. d. s. o. s. u. s.d. s.o. s.u. san. spätmnl. u. u. a. u.a. USt-IdNr. usw. v. Chr. v. a. v.Chr. v.a. vgl. westl. wg. z. B. z. T. z.B. z.T. zz. zzgl. zzt. B. a. B. A. B. eng. B. Eng. B. sc. B. Sc. M. a. M. A. M. eng. M. Eng. M. sc. M. Sc. Mag. iur. Dipl.med. Dipl. med. Dipl.-Med. Dipl.biol. Dipl. biol. Dipl.-Biol. Dipl.chem. Dipl. chem. Dipl.-Chem. Dipl.kff. Dipl. Kff. Dipl.-Kff. Dipl.kfm. Dipl. Kfm. Dipl.-Kfm. Dipl.math. Dipl. math. Dipl.-Math. Dipl.inf. Dipl.-Inf. Dipl.-Inform. Dipl.-Inform. Med. Dipl.ing. Dipl. ing. Dipl.-Ing. Dipl.phys. Dipl. phys. Dipl.-Phys. Dipl. rer. oec. Dipl. rer. pol. Dr. h. c. Dr. h.c. Dr.-Ing. Dr. Ing. Dr. iur. Dr. med. Dr.med. Dr. med. dent. Dr.phil. Dr. phil. Dr. rer. nat. Dr. sc. hum. Dr. sc. Hum. Dr. Prof.Dr. Prof. Dr. Prof. Dr. med. Prof.Dr.med. Prof. Dr.med. Prof. Dr.-Ing. apache-opennlp-2.3.3-src/opennlp-tools/lang/de/namefinder/de-namefinder.xml0100644 0000000 0000000 00000002474 14523004075 027216 0ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/de/namefinder/fg-conll03-deu.xml0100644 0000000 0000000 00000002623 14523004075 027133 0ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/en/namefinder/en-namefinder.xml0100644 0000000 0000000 00000002277 14523004075 027243 0ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/lang/en/parser/en-head_rules0100644 0000000 0000000 00000001352 14523004075 025624 0ustar00rootroot0000000 0000000 20 ADJP 0 NNS QP NN $ ADVP JJ VBN VBG ADJP JJR NP JJS DT FW RBR RBS SBAR RB 15 ADVP 1 RB RBR RBS FW ADVP TO CD JJR JJ IN NP JJS NN 5 CONJP 1 CC RB IN 2 FRAG 1 2 INTJ 0 4 LST 1 LS : 19 NAC 0 NN NNS NNP NNPS NP NAC EX $ CD QP PRP VBG JJ JJS JJR ADJP FW 8 PP 1 IN TO VBG VBN RP FW 2 PRN 1 3 PRT 1 RP 14 QP 0 $ IN NNS NN JJ RB DT CD NCD QP JJR JJS 7 RRC 1 VP NP ADVP ADJP PP 10 S 0 TO IN VP S SBAR ADJP UCP NP 13 SBAR 0 WHNP WHPP WHADVP WHADJP IN DT S SQ SINV SBAR FRAG 7 SBARQ 0 SQ S SINV SBARQ FRAG 12 SINV 0 VBZ VBD VBP VB MD VP S SINV ADJP NP 9 SQ 0 VBZ VBD VBP VB MD VP SQ 2 UCP 1 15 VP 1 TO VBD VBN MD VBZ VB VBG VBP VP ADJP NN NNS NP 6 WHADJP 0 CC WRB JJ ADJP 4 WHADVP 1 CC WRB 8 WHNP 0 WDT WP WP$ WHADJP WHPP WHNP 5 WHPP 1 IN TO FW 2 X 1 apache-opennlp-2.3.3-src/opennlp-tools/lang/en/postag/en-tagdict.xml0100644 0000000 0000000 00003165414 14523004075 025745 0ustar00rootroot0000000 0000000 brave wishful Cabrera indignation champions liquidated computer-driven jet Wrap " # Ministry ! timed & brawl ' stressing $ % answer possibly sleeve ( ) . rushing Sandra , - 3 2 H&R 1 7 6 5 4 constructive ; payments : 9 Burnham 8 ? retiring D relies plummeting clouded E A chairs B C rejection M N ignorance O H I drawing K relief elephants relied U advised inefficient times S R darkened Y Roosevelt Z grotesque f Omni termed formally e b Fed c confused ` slated a airborne n consultant o cutting Options Lehman analyze advocates s safeguard Few invaded basis Fournier consumption holster drop infant entity futility Merksamer Asahi estimated basic jar civilian composition affectionate derived jam fathers guilt dozens unrest belongs advises resist adviser timid jaw much Monte weary ENERGY column fewer wears brass update Enserch small-town grapevine Paula suspicions spectators possible ruthless shrugged conspicuously Pravda reached spends Trouble Minnesota Sagan estimates Airways injection universally Mastergate magnitude minimize shadows hospitals reaches entire which royal anyone Production suspicious Institutional consolidated Eye hasty folklore last-minute two-day haste vans visually Economics modernized tolerance discrepancy write-off Abramson interpreted job Third-quarter resign dominion asserting hamburger shoulders interpreter regular-season uniforms muse assistance joy explicitly counties thought space Harper boys rather Citicorp discriminatory construction dingy aimed responding Blockbuster helps Connecticut psychologist Swiss recall Norway warning pencils manufacturing single formulate 9.80 reluctantly proposition Phoenix Really NEWS inserted muscles fumes Tell sleepy Pretoria analyst diversifying contract Spielvogel Bonner plunging Jarrodsville GAF vain Iron gaming deployed defensive Kozinski prisoner while one-day shoreline drum reinstated disagreement jeopardize drug cyclist answering Tommy Fat repercussions instrument pervasive Automatic whipped Far adversary 9.75 fought scientific nearing 2,000 Swedish advance forbidden sugar speculate swivel its teachers strangled although Thursday FTC Era bosses throat October terribly Boulevard Coleman admirable prey Grabski loaded McBride Mexico terrible thirty-five advocate abolish machinery press minimum dimly Holland Automated iron Datapoint graduation absolute Szolds worrisome Money builds contrary Dillon armored rates emergence Mather assignment reformer disobedience invested rated Honda Upon emergency Married requiring shoved must columnist friends unwilling curious Toseland subsequently churchyard Adelia Gloucester Eve marshal mute cherished Banxquote spare spark Advisory vary rumor lightning Prebon railway desirable argued stereo unlikely maximize oldest Aska walking argues dominance deviation garment Nonetheless all-time Girl Once joyous vast accidental Scott unfriendly beneath advantages D'Arcy helped newsprint Bundesbank prohibited Sherlock executives Hubbard giant gloomy G-7 pinpoint everything zero draw yourself Asia working compelling attracted attracts leaning outset matters Armenian Interpublic Wyoming displayed visual Eugene hallway ranking dance culture Tuxapoka placement Goodyear backward operates interbank Give complexity operated evidenced bluntly straighten accelerating Stalinist resolve drag prop Confederate pros Henrietta verbal amended fixing spate brother End succeeding restrictions purse Frayne Gillett connected acceleration trumpet Remember patent bicycle stalls contrast possessed Asea FOR drew sure Only wants populist hearing Emerson batch Zeta Eli golden characters dissolve carry-forward collapsing Operations Ridley nests interfere officers finding glass making resumed judiciary lung-cancer Container certificates philosophers ultimately chains unnecessarily century packaged-goods glare addition enacted Section weights target McCarthy furious Keith brewer pillar Fleet visions thumbs Apparently jeopardy Bush Kinder-Care Afghanistan wait briefing Cross kid Mengistu Patel Whittington Louis Shell Gorky stance black seizing limits Californians confirms awoke convention demonstrated vulnerable snakes mounts Farmers impress endangered lobbied owners discovery deserve flashed disappointing Bethlehem wage midday restructuring flashes extraordinarily Frankly sunk weighed sung hottest Cherokee whatsoever boat Stubblefield shipbuilding antitrust amazing Aug. sums forever speeches stands Chevy nothing time-honored Get construct comments Opponents Jeffrey body Cheney edition Taiwan rocked straightened blacks Alberta violently rocket key Borden coup wallpaper '' Crowd eager Chandler script Agnos cheekbones Crown oral imitation buy-outs containing lightweight disclosed meetings walk wall ignored barge Mead Shere HK$ Dover U.S.A chlorofluorocarbons whipping enhance organization wake touched demonstrates artist Indianapolis stems counseling Morristown audio communication singers touches funny audit temblor cows Buzz amendments bitterly wedding suit laying disabled disposed parking halted confirmed Maxicare deliver dough premises combine Meeting rented exercising beleaguered steps stripes exceeded emotion Ga. disarray funds snatched vulnerability obligated 'd pictures DEPOSIT followed Pension chuckled insistent neighboring 'S Karen striped compelled clinical jacket usual 30,000 larger stern Cineplex snapping succeeds sued 's company-owned Fulton -RCB- within Nebraska 'm equity Warner surpluses middle results gather trials barefoot gripes appropriate such doubt controlled suck openings offering rental league relative Vermont textile whichever emerging bridge controller HBO whooping equivalent recalled erosion investor conjunction busted adverse episodes Beech sends swept immensely generator indifferent treated giants exhibition skipping Gas reception -- duration loosen Elliott revolutionary barns occupy English-language guide fight redeem Environmental 35 36 33 34 39 37 occurs 38 turning showed danced imperative staring intervened 43 Gabriel 42 Itel 41 depreciation 40 stamps opportunities erased brain dancer turn severance homogeneous dances questioned billionaire 22 turf 23 organized 24 25 26 27 28 29 upheld Buck 30 afraid 32 crime 31 FileNet shower twelve ways born figuring 19 bore 17 18 Amdura 15 16 consequently battered 13 14 11 probes 12 21 20 allegations figure 20,000 Developments Evans pinned bricks rounded proceeded erect boss predicted Lotus 4\/32 seller Schneider 10 dashed Robins plots Gillette half-hour mixture hormone relating 79 recording 78 77 both Beefeater unreal Researchers 82 83 80 81 timing 86 siphoned 87 barometer 84 Current 85 67 expedition 66 schoolhouse 69 high-quality 68 association generates labels relation white bout Honolulu properly generated bursts 70 71 72 73 74 75 pigment 76 omnibus Moody cries 59 ambulance 58 57 antibody 56 55 singer engineering insolvent cooperate republics vanished Mushkat brace sailed allocation 64 65 ballooning 62 fearful 63 severe accent 60 61 glaring Minister popularity 49 bowl 48 ethnic crucial 45 deliberations 44 Realty 47 46 descent plainly discovering beaten 51 52 53 54 Chrysler relish masters tight eyebrows 50 elders malice accept bases kidnapped Sacramento ancient typewriter GOP 12-month sales intimate expectations STORES prizes considers real-estate speaking Immunex Geneva wishes Highland mortgage prized boil Isler researcher conveniently traced ward GNP wished flattened Hoag Viacom special-interest Fla traces Patent rarely Leona latter sailing disposal Pacific length boiler 99 want Teddy 98 hence peasants steak 97 listeners steal entertained 96 95 94 crisp 93 Foster 92 Congress 91 dedication 90 restricted access Johnson wholly fluctuations pullout patrolman brand Moore Troop 88 hates based 89 steam bolt Products hated Beers shocked compliance Cousin 45-year-old supercomputer GTE incidents witnesses bold OPEC sliding linked custom excesses thrown succeed implication tailspin throws Putting campaigns property advising sense staying witnessed withheld controversial hooked Adler blades indebted loan-loss bulls Salomon bomb revolving responsibilities wave hatch feelings friend Burt warn stop warm orchestra bony wart stocks pretty wars reared bond jetliner rejecting cunning wary bone laborers wash For Fox bono marine boot mistake immoral matter locally Visitors Udall thumping Bruckner steep Children steel rules ruled Ahmanson squarely observe discoveries steer book boom boon Schroders ranchers unloading Consultants seasonal IMA bright Da EC awareness warehouse leaked E. Co Barclay systematic objects hungry these intelligence defenses Ed Lorenzo Du astonished Do F. aspect steering opening bitter De Di IMF Ernie GE Fe scandal rival refrain aviation authority G. El FM ascending dating marriages chamber Place define stir Ga Nucor slaves morning enthusiasts implicated GM H. shooting circuits ham Hold broadcast Colo. has Certainly hat Kelly A$ component tourists adjoining A. had bushels climate stampede processes Probably Home monitor spectrum Fiske Stuart Wash. Holy processed Holt AB AG hay assumptions congressman III Windsor AM B. Sweden AN Aw At As Janice tested municipals immediacy Ah controversy C$ Ad Am An stubborn tonight locate Donoghue activity C. Al music sites By His ammunition clenched CS Ca viewed tracks Europeans Gradually authorize therefore never Be there CD approaching Schaeffer D. Him eternal motionless damaged govern somehow package M. traversed diverted Mutual calculation nagging gatherings authenticity Hope assault doctors her voluntary Leonard hen hem La Electronic transfer Gould pediatric activist batteries N. canyon pointed Ernst establishing 7.875 Color Me sensible damages spawned O. Church compensate Ma Daniel Md lands Benefit Council My IFI emeritus Giles Mr P. OK subscribe unless Manville Says OF feminine mega-issues hierarchy airline Catatonia Hong stay gallery star defied pretax appearances No retains forties 25,000 On preserving Oh Hey Hez insights Sabella efficiency Of stag calculating Methodist PC Her marital interior hid I. wisdom Go conceived him type retailer motions Issues his Massachusetts hit practically primary Marcos portrayal medicine IG He II onto staffers approve J. RU-486 IN locking pleasure sovereignty printing cheerfully Afghan owned dinner Network owner translations genetically If Perspective peninsula In K. Called goods reassessment scaring bruises Is It politician effectiveness arrest IBM Mesa three-quarters Jo annual L. legislators agreement Horn Had modify noses Jr Hal M$ abortion moderately night stem step Up giveaway winked editorial-page W. countries Metropolitan Merc full-year pro-choice monstrous submarine Shakespeare Rising awfully responsibility US Gyp V. Berlin revenues To churches modifications directives demon neighborhoods cocked incest portrayed unauthorized appraisal TW TV theft god organizing contradictions Norton messages We trustees dresses substantially depending Analytical Military liberalism futures-related editions Jewish complicity dressed wedge Barber aliens optimism repeated Va grabbed weep challenge Sara lighting reckless unaware Syrian down slackened week Drabinsky proportion demons Chicken climbed S. Former Gun Palfrey scandals surfaced Guy clobbered rebel heightened imagine Pa meaningless Scorpio dividend Hospital economy Albert possibility tumble R. Agnelli Suddenly thinner bestowed outflows PS Or gon totaled 19th-century got Oy gracefully Oxford dose struck So \*\* slashed initially collector SS Somewhere Cunningham ousted feminist uncertainty formation sounds Re Plant Plans tricky Saul tricks Surely moreover regret T. mattered defects Chicago-based immediate furnished devised learned ordered sensory actual weak wear involvement architects Wharton extensions Valentine lamps initiate gum shadow Plaza fifty planetary Tomlin Saint chopping stepping Saks Rachel alcohol backed Lippens congressmen mediator pharmaceutical stemmed wildcat switch Mehl establishes transport carpenter rationale refunding reporters IRAs artery jury just recordings fifth Handley guy theme blue-collar Shayne awaited gut established tossed contribute gun notions stockholders Overseas Commissioner Bermuda Said HUD swift despite Press discomfort attorneys looming Reinvestment preserve reproduce softening hovering scheduling vacancy unpopular totally Meet swing Leventhal shifts coaster jump objected smack Orkem Plato Montedison committees Got north two-part junk orderly traded aborted Tibet tariff snack-food trades trader acceptance DISCOUNT commissioned \* grandmother gambling flashing Same God commissioner fumbled their slogans river predicting Lang Lane dogs predictions said solemn Land noted college vehemently Saab personality lore syndicate references Georgian Deere childish solely chemical Irish sail detected concealing isolated Crandall portfolio harness featuring he confess Southerners resignations Fortune Australian Index Laos summoned Feb. singled keeping disrupted artificial murky go assessing taxpayer gift Fear servant financed indicate excellent de sustained shouts loot battery profit-taking Banks runaway do finances dangling prevented Ill look Jerry safe transfers violence wreck Richter Inc operator Advanced recovered newer en Firms notes et handsome Imo Unless gravely ca player lone by long wallet dock anti-Semitic installment Glory Harold FirstSouth Charleston liberal depends dignity be predicts establishment mysterious suppressor Fujitsu decided holiday Last played maximum nicknamed eloquent makers suggestion Office lighted collect Alexander does depress instituted skiing boast icy criminals edged Late foreign-currency Uniroyal lighter expects recommend statistics sack Fees edges ice directs `` members crap termination market-makers Gintel boats at as prediction leverage ax ai MONEY am privilege an cruelty ad mindless Hills growth newly Chairman Hendrik supreme 62.875 no makeup door forgotten California of realm Profits on oh legally 1,850 emissions maybe commitment or grower done cliff ox board trooper crossed delay small warfare wisely fastest catastrophes radiation squeezed CORP. Banco gradually crew Mercer necessity carefree fairness Water Fazio conservatism me twisting backup seventeen appreciation Bronfman collected vague Salinas my masterpiece malignant Yetnikoff bankers lows na teaching specified route Poland Arizona item Vince Giuliani Private technology cousin scooted India variations love warns high-definition eminent raped perfectly underscore conservatives Arts everywhere lots Lower remembering guarding Success ink stillness Saab-Scania loud endure la lightly lost loss catastrophic dome 1,800 microscope Minpeco Messiah Exchequer conservation if Mulford celebrate puck is it doll ill crib mimesis weakest rapid know in knot lose Recruit unfolds twenty Katie blue hostile continent strains Ian smart premiums Philippines JAL hearings pounding metropolitan arbitragers viable knew winner etc. ready Illuminating rhythms deficit-reduction Huxley aluminum BankAmerica Stowey slack knee outraged Marcus Scenario how expiration wo law-enforcement cling rendered loan reads pure Environmentalism hot load Pauling we climb busiest give events Lebanon restructure Summer brought havoc shrieked Johnny downside Mansion Block puny solitary voluntarily consciousness front us Israeli weeks up field peering Ariz pistol departures high-tech impressive Thornburgh to Iran affects v. chambre Army sipping pull round pulp hub messenger poorly inspection crop Iraq amount drained Willings conservative ta knit grinned so state-owned impression mysteries pump Globe providing openness counting Ronald birthday acknowledge ceramic 29\/32 strings appears Lady liberty reach tax-exempt implement bunch react System institution ladder provides Minn. provider suitors Elsinger knocking dilemma provided flooding Hague wrapped perpetual marching Hun sucking guardian applies insist Meeker energetic First self-employed Homes whether Remic Arab course open frightening Defense margin ignoring processor brothers broad-based Redmond EURODOLLARS Peabody delta Laff Hub redeemed associations adults contractors affidavits viewpoint Nigel objectivity cast-iron tomorrow courts wastes stricken contact Arby southern engage wasted portfolios Night Mingo Xtra suggesting Arco hum spear hut walked Lingus opponents mayor speak ITT haven evenly Nimitz appeals should Mutton stones decides grimly contended outpost Area determination Ashurst discouraging spilled butler Seattle puts yielded Lake contender Landry perpetuate IRS Mines rough producing disposable Cairo waterworks importance Jersey contain sensibilities babies yard Hot creatures prevailing beneficial mural clips push girl IRA froze attempts How Peugeot IPO ye ya urgent lock strategy refers nearest Nadine Blood motors gadgets applied menace poorer guarantee pushed mainframes discontinued Edwards president Are murmured chance Ark attraction bribery ceased 52-week distinction Depression competes attracting GATT few fee fed TransCanada grinning Philips ministers secondary undercut fraudulent visited token rhetoric GASB soybeans rivals enjoy Jesus Art ankles predict guess magical guest shorts crops having novels alarmed Harlem change Giants regulations distributed Europe capital expenses Brian i.e. witch Should distributes North negotiator retained fax fat wheels luck far repurchase fan borrow rural lacking confrontation delicate soaking discounted fad restored backbone misunderstood Chemicals Command underwater occasion education creativity Budget hotels Axa gradual Salvador Packwood-Roth methodically Greenwich homeowners FEMA furriers sensual Bahamas Kyle freeze inside venture Warsaw Demand diverse glow Machinists obvious errors Against limiting pressured Currently appealed medium-sized Judith doldrums Loral publications peddling silence echoed lender indeed recovering finest concentrating makeshift build dragged benign thinly FERC built identifying concentration formidable ethical Better NATIONAL pressures sending clergyman pilots thinks club improvement clue initiatives PepsiCo Seven topiary Crude endanger retreat stunned infamous obscure Program eye punch intellect occupation damage accusations Democracy Jesse Marion locks dissatisfied penny permits drastic fulfilling INTERBANK proudly shaking requirements curtains Bay Adobe distributor Combined Bar relevant subsidized Britain whining exceedingly into cereal reconciliation luxury schedule things Noriega embarrassing CBS professionals etc everyday ours blew sentiment Affairs workstations orgasm comprehensive Doris bundle feature expanded Clayton austerity 11\/32 descended backlog deferring gingerly glasses Clean tissue deferred likelihood adventure furnace high-grade dubious bridges foresee Marina Marine Gene Act Ada learning oust alter arguments Classic restricts stays upstairs quickly defaulted shores withdrawn Royal implicit Petco exported 55,000 unwarranted Consider Add nostalgia unhappy orange ducks explains devastation awhile Jacques Aer ceiling freely recalling exporter Sununu saddled Anything Flint reopen uproar Rudolph Age Aga shrinkage surrounded Peter era bandages Beaver precious unusual Medfield question devastating ensuing rugged multiple Manila adult freedoms Marketers appointment representative Healthcare originally foods effect ferry historical People glut lodge Mikey stallion expired nothin stare specially stark obscurity sacrifice expires represented boasted whereabouts wiser charitable continuous sewage singing again Air overhaul start stars satisfaction prize saving Census Wedtech propaganda cells Haskins Benton sacrifices Quebec techniques boulder start-up Publishers dared delegate Sheraton robbery upset aggressive end Nick options containers readily observation tremendously refrigerator represents Heights Canton Weston reading ego Democrats transaction 1.375 bolted aired BNL All egg terraces Calif. organs bidder School Tonkin forests achievement Amy E-mail Hawaiian persuaded injuries serene representation Lavelle Gen. surprising Ana And Any owning state Richmond credible Ann experiencing Amendment Florence landing designs leader tradition Netherlands blow defendants negotiated 11\/16 inch paused hard-line Inflation struggled traditions tides bloc Consumer vinegar struggles consulted Cicero specialty educate investment-grade benefit accompanies paradoxically threatening outspoken Kidder over bleak protein oven accompanied But Paper sprawling spokeswoman traveler psychological number overhang dumping gin contingency Being Dollar Whatever consisting arteries typically apartheid littered fille before adamant crashes double-decker traveled stake stairs Perhaps accommodate intervention leaking Arnold arises crashed FDIC Eichmann films Juan arrested BILLS provincial bolster hydrogen hardest Trelleborg clever Minerals banks invariably breed rocking stall in-house boundary close doctor facto Consulting facts oval occasionally get postal Atlanta efficacy draining exhausting Scotland Vecchio irresponsible gem stale Indians money-market carefully Otherwise safely Bergsma indictment households Hydro-Quebec Indiana discipline fraction practitioners purchasers Eisenhower Vinson accessories persons headquarters stand stomach sorrow DAF Bryant bands moderates buy-and-hold confines inception recorders impose Eileen hurling break operation DAX bread Mich pending Peasants eroding guarantees confined import central fetch screen Cilcorp Garryowen welfare flexible guaranteed Lucille include O'Kicki gas prime traffic sitting operating gay poster Unable crusade novel unseen gap talent protect addressing posted recover Princeton\/Newport walks handed Often witnessing flooded skeptics files clock quicker Venice flight billed walls Campeau Riegle Collins opted knuckles resemblance filed DEC location remains uncover Mission nursery procedures prior DES squeeze official DDB returning Coopers redcoat Planners projecting repairing machine dusk comparison Rafale statement Calgary-based pamphlets Warren employs dust stack Palace cotton Merrill projection stage Car staff Chase Can tax-loss duty able deciding Cap mounting mixed accessible receive application standard swaps 1,200 Coates print Juet Kravis rubles divergence handle Reuben slipped determines East stockade parental lure associate pride scrub danger defaults resistance FOREIGN regretted serve sweaters defined Milan instinct Bey neighborhood available declare Haney graveyard exalted Xerox Okay price Ben staggered Easy Fourth referring explosive threats Norberg Hopkins defer cursed pence CDL Banque fur caught notice resent Transmission stadiums CDs angle familiar lung rustling CEO Bally reclaim Kirby competitor automobiles faces Greece interviews Heaven takes faced varying taken conference overnight Straszheim reports charges victim fun charged Burgess receivers Dogtown angel Notes populations explosion Big anger passive Seidman Beijing Eventually Hines cigarette dump Robert photographs CIA inclination impulse dumb bitterness sticking Public threatened refrigerators dull lush high-school demonstration misunderstanding clocks vaudeville views determined timely journalism CNW for Richards angry swelled MIPS CO. Commodities clout distinct gifts legislator journalist glad information unstable fascinating guilty Mullins pretense occasional 'll carpeting hunger evil Hartford jumping Ginnie pleasantly ensuring updating effective wanted London dual Norwood D.C cloth pockets wired crashing stolen frequently purely CMS responsible diamonds extradition galvanized visitor emphasized proportions fog afternoons terminated Brewing foe cloud e.g. emphasizes Allianz lump Scottish reinsurance Jupiter answers fried Candlestick Flight buy-out misfortune please duck pleased wounds victims wires riskier restrict Mellon Estate parliamentary Reports fly roses even apprehensions passing evolved ever clay Yesterday dancing firing 'em Arbuckle fit Mills fix Bob notify announcements deduction Strategic pulled passion profit decade turban skepticism stains Box Boy families Dynamics Byrd clad Oklahoma safety Claire Ashland 2683.20 Greene propagandists horn brushed receivables hose parade Marxist Jerome Grandma reunification video opened thunder host notion contentious animation Previously neutral stationery extract slumping ratification bite Farm herself existed Pamela Kemper Blanche dependent chiefly Cohen Thank Barbara East-West wives senators noting Judges Below historians cartridge 1,500 increasing disasters hour meaning boosts bird A.C. totaling electronically undervalued public discounting raucous treatments bailout Software Milunovich sagged Brookings Emergency supply-side dramatically immunity notified lasted seemingly hook flames Faulkner motive releases Officer code Leaseway careers inspected insulting factors items determining secrets dam ARCO Cup factory day Businessland large hope Academy deteriorate misstated Each bill driveway blaze hops creator lights released coal Kennedy offset coat calendar Listen Hawaii welcomed Aquino portions folks acid A.G. bind engineers Torrijos cup Municipals reason Commodity otherwise Earl liquidation sufficient respond rotation sixth privatization unveiled sixty hold privacy EDT EDS regarding Nutritional openly sights neutrons recorder abstraction recorded ought pledge Bakes heading Baker Meyer Travel home non-recurring Angeles-based concludes holy Hogan savings quit goddamn retinoblastoma explaining thank Del prosecutors victories Deb drug-related probability hole portion satisfying peaceful articles dozen maneuvered guinea extraordinary secede Hirey Baldwin hypoglycemia pupil concluded cut stamping Sandinista installations midyear biwa Grumman acre intense HDTV honest potentially unrealistic multimillion-dollar Actually applications difficulties death-penalty Frank functioning spurring sectors kidding fronts arrive winter Anyone Clearly defeat Dan horses focusing resolution Day so-called Robards Tharp Dad bits cooperatives Nevada reinvestment depict palladium actively buildup Township registration arranging Reebok database Sierra abilities insists Stoltzman cops equipment cope Copper Times-Stock 7.60 obligations eyes interest Cie beset procedural Sitting copy barring cool cook lying adequate June Everyone 7.75 Rector models Olin Sisulu Kizzie breasts swear anonymity blade eyed deepest sweat Olga acts low-interest drunk foreseen Tandem 7.42 DLJ Armonk Paxton suits publish healing reckoning Wisconsin tubes landlord applicants Executive renewed lifetime pronounced Eddington Cigna 7.52 come comb Sikes drums Mips 7.50 7.51 practice belched July DNA high-yield 80486 defend con DFC debates 7.20 cop cow depository 7.25 faded scrambled nevertheless floors understood strengths retaining Small-business burned dressing Fraud Kenneth Coastal identities issuance 7.37 Publications Abbie period cost sweep Including Olympics fellows sweet reductions Anderson editorials profitability cork generate Speaking Mike 7.03 hurricane corn Farouk 8.375 roommate seven-day Conchita 7.10 hefty deductions chasing 1.125 coincidence secrecy Analysts sacred cry 7.15 Westwood emotionally Johnnie increase Beckett core Oppenheimer cord renewal airing greatcoat excessive suing Diego divisions house modest hostages fascinated avoid Delphine A.M. inexpensive unused blame Through setback strategies legislatures drugs energies hours slender Gen-Probe cushion scrap operational blinked goal measurements traveling nightmare detergent screens dislike Aunt Unix cents exemption funnel remove exploded Natural low-priced gods Unit according modern mirror indirectly believed unfolding Smiling Rahn Just believes Buddha blank distracted afforded resorts bankrupt return framework Rhode Oakland folded Neither AMERICAN adds 18,000 equipped lethal reassuring remote together automotive swell hailed cold Auto Ahmad herbicide commonplace converts Parents goes genius DPC wrangling Mortgage-Backed retaliation Co. suite Fraser blast inspector Squibb protest Vermont-Slauson solution misses evaluation afterward Madame Miss Vista blocked Australia cameras abnormal coin evaluating sheets Cos chances Using revelations sighed Cox significantly A.P. missed one-half causing punitive steelmaker merchandise FAA swings Rouge half-man until Dubinsky frequencies projections regarded dealings producers twentieth-century endured universe servants borrowed ear ratio persuade Farrell eat Chancellor minorities hurtling disappearance masonry Sales imagery nude wrist successors measuring mutual-fund debate write investigated expressing lower-than-expected imports MERRILL Investor benefit-seeking chemistry Parks civilization Olympia studio expression roiling Constitution careful captured Elkhorn permitting splitting Earthmen recollection Larsen Daikin replaces umbrella Cananea superb unsecured replaced Socialist Petrie thrifts highways Paris staircase laughed impatiently Another debenture enforcement janitor tails Allied-Signal marketed railroad Sometime alcoholic SsangYong island AT&T Spiegel headed Templeton Telerate overwhelmingly lofty Radio Alaskan sketch ahead Captain Matilda indefinitely refineries plunged nationwide elbow marketer tires arbitrator fabulous underwrite FT-SE socialist sympathetic editors socialism underscored disappointments barrier Egg Conservatives Center laser strategist fully exercisable thoughts Thermo ladies soft-drink Protestant Hughes Navigation tenfold Pictures Levy Testament Agriculture series Ngoc interest-rate Secretary hardware hastily propped FHA claiming across respected remaining adjustment withdraw muttering harmony interpretation Regulatory inspired strokes Gate champagne Winnebago enjoying dollars Proceeds Indeed expressive outcome dividends grains Sally deceptive Gary highroad Georgia dismiss Kuala selective 7.90 terror 13-week sporting Nine-month investigator inflows fever fulfilled Professor bursting 7.95 Graphics 7.93 7.92 7.98 collapses pavement 7.96 conciliatory portraying Game anymore ratios positively collapsed Travelers Palestinian warming across-the-board FDA commonly virtue 7.88 gravity TREASURY frivolous highway volunteer resolutions Delicious conferences beauty demise sleeping Dolores chooses father selected withdrew illness banking profoundly FCC sailors importing Without O.K. Walters Houston blending averaged readers Sugarman FBI averages hotel rating 1,400 Provident breaking 500,000 intelligent justified minimal preferring counters dot strange assistant nature Bofors commitments bias Hispanic Panama volatile contend going Leon American Tokyo catalog Justice Tokyu consultants stopping content justifies EPA Schools dispatched corruption Task brilliant survival repairs transported Tass wildly assurance Death withdrawals nervousness sentence collection mouths spring Marwick risen skiers rises Faberge Favre payment feedlots jurors imposed EMS nuts selection relationship pattern imposes Reich dog invited infrastructure wrapping invites provide consistently Wichita selecting plantation Garratt Did stakes corporations supposedly Tana expand fallout gridlock exchanges collecting Lesk Less emerge diversified conglomerate logic exchanged duo Hunt due survived dug tax-free Ivan Pizza bayonet payroll FASB sudden Concerned landslide COMMERCIAL destroy Lorin Buffett debentures stirred instruction 6.25 dry principles disagreed instantly resting certain Until serial Sorrell Paramount risks rescue Dun risky ruptured insect Supreme Keeping Group distinctive usefulness equivalents advisory reformulated propose commanding frankly Whitbread Angels gazed piano Party Take planting did Left exit obtain nuances anyhow tired overwhelming divided Nationwide Aerospace Angelo cross crouched des Kitty Ogilvy contest Talk acquirer acquires infringement Nadeau pulling convertible morally private Kitti bike Fair possessions acquired del shifting agendas depicted trigger failures repaid retribution Jefferies paralyzed obtaining Gross mutual plates Glazer eyelids Cranston Unlike Cotton Ferguson Fall ESB Telegraph charity spectacle Taft well-being 6.79 annuities dinners cooling repair Dr. marked breathe eyebrow Webster Belli collective infantry bids properties Fame intends himself Spartan Senator market EST perhaps ESP Doc other 6.90 2638.73 crown '80s Hugo departments sandy misinterpreted dim Kayabashi dip luncheon Disabilities setup die dig Hugh crowd EPO Typically exempt origin proving punished magnified revoked technologies sway MORTGAGE Dow context swam summer Don swap clientele Sandburg mushroomed Ryusenji holding whole-wheat Margaret intensifying Eggs religion Marketing Guarantee joke Net mania heed alternate timber Francis explosions Hees heel violates Francie armies digs unwelcome quality somebody violated instruments trillion vastly bullion Magazine imaginary Jacobson jammed transform 21.5 P&G aesthetic 21.3 guard Chamber debts Exploration ropes Gran lucrative Gras 142.10 21.7 enjoyed pity pits divan lawyers gardens join situated labor farmers Smurfit downgraded red peoples Boyer accurately debut medieval easing unions observers John architecture foreclosed pretended Abrams trapped Assurance Scientists naczelnik description Calhoun reputation pharmaceuticals salvage Overall Investigation verge yielding Finance Dave barbed heir Helion Gray country shampoo necessities speech tremble override Traviata Battery recruiting Aetna raw steeped arsenals Greg jolt organize rat complaints business following bullish Grey factions supplement Days repression hinder intensified dominate Friday symbolized televised unrelated New orthodox Lyonnais Jewelers dived Margins Beretta Coach rag advantage ran female musket unborn upgraded peculiar 39.55 jobs Springs amateur 8,000 USAir help indexation element odor elect support rot preparation searching Yale identify recommendation Casey dominant row rod suppose category specializing speeds television concession small-business N.C. vehicle rumors easily Freeway Kraft sixty-five Soviet violations resilience tests perceptions Mitchell Egan foreseeable speedy held Managers marginally Hibor Yank enormous foster hell lenders reserved dire Labor Friday-the-13th surprisingly Joel reserves cliche strengthen polite dish Sverdlovsk Ground Nam disk frowning Measure venture-capital dirt joint joins hero extends easier hers here 1980s affiliates Despite herb cursing herd proceedings class-action OAS decay polish tanks bourbon Jobs Especially Either Normally Urban recourse Help prosperous Storer affiliated Stores marketplace hens Cardinal adapted Gorbachev Joan dive rig offer Hell Liberal Waddell steeple rid Vientiane Republicans preoccupation deepening delegates allowance understand declines themes production permanently declined concurrent N.H. Carla structured underneath stumbled Highway ribbons under Christopher structures Port thirty overcoat Killpath eliminate rye dreaming patrol rug dancers patron proprietor run odds Poles scenarios Bradley damned bureaucratic Post pick scrutiny orthodontic N.J. Osaka consulting Volume perverse remain skidded strategists Challenge insult Revco McClellan Petersburg scientist cheeks removal Nye chic proclaim province seven-year Value Media newsletter Confederation saved Ferranti Carol recognizing upgrade Jacob mingled rub Verdi high-priced saves loathsome soliciting Electronics teacher teaches deputies Pons Pont insure coffers confirming Finkelstein prematurely Pope Flom swimming acute Daimler-Benz firmer Ruder pigs Networks Coast Poor firmed chip Over chin counter ripped alarm charge Government Shares counted democratic Pops universities Guaranteed lacks Ellis instructed amazed sad Lauder pint stock inadequate guards restoring yeast slept pink pine Centers Young productive receiving Schlesinger opposes 142.75 lifts pimp happened sat Egon say bearing closure saw years No. uncomfortable voiced fortunate precaution pill museums Courtaulds buying pile McLennan opposed fighter robust understated corner Orleans crying domination broken suburbs Liberty bowling broker anecdote proceeds casinos remark Lexus Developers overcome Manufacturing allocated structural heat Cockburn heap hear Campbell toward Thomas police 47-year-old Istat head N.M. OTC intellectual swollen signals Hedges Sharon voices cabins assassination policy Nicholas media Meanwhile payable Suzuki Roderick pipe Ambassador chilling collateral corps Donna Agricole infringed Jose one-hour jeans Now noncallable Nor Not Zurich vividly formula Unfortunately advertisers Pfeiffer Newmark becoming she partner 500-Stock defiance Searle nineteenth monitoring patterns death Mississippi Murata unwillingness molecular prosecution view Morishita decent midsized Discovery six execution 22.8 Mazda weaker slightly smoking weaken specialists acted centuries 22.5 40-year-old Southwest jumps Off Olgivanna Geographic N.Y. tightened glimpse shy backing accumulation brilliantly College sit history charts sir conform deeper sin fuels Additional extracted scenery conceive conception aged striking Oil packaged brisk reaching accumulated everybody light clerks Redford Space ages documented Reserve packages wagon measurement Forest Fla. executive Egyptian Mining secretaries Genentech sex Airline N.V. advertise vice department set shrill Kume life-insurance Avondale Services prefers individuals PLC slaughter suspension sea amused unleashed Theatre sandwich see Going PLO passport fringe manages manager abused yield spy criminality peril Cathy betrayed actor chew Claiborne rejected buyer embrace courting auditorium chef Deaver suitable church vine Buying submitted channels son Nynex managed one-man Pole abuses Convention swooped confident experienced Ryan Kurt bringing records winds satellite experiences raised clinging subject Sante Dakota occurred breathtaking looking Santa democracy counsel countenance swayed Stanza simultaneous inspectors scholarship Doman inaccurate persisted beings Crossland dazzling interview attached 20th tobacco pointing stunning design adhesive deeply Oak Oscar firmly computing hunted wages PBS squares sky level reiterated wings someone underlying Danny competence ski 1990s disgruntled Other Thanks Ernest targeted pieces executing roadways Spain illustrated Cleveland Toledo Members cheese confronted squinting awful wines radically advocating PCs poverty Anthony Authority purchasing cheers seats Gorboduc ourselves premium Poet twenty-five prosecuting taught Iranian illustrates fossil unconscious Denver eating wrong Tyler compound specialist wrote signaled jumbo conscientious Burger lingering scheme Harry reduced PWA Unisys dromozoa Finally Dale bandwagon Out Daly Our Asia-Pacific monster checkbook roots Lloyds climbing memorandum Furukawa Damn dropped unusually guarded September differences resigning imported Cities\/ABC laden document importer assess seeds accepts mostly improper reduces dolls poured implemented Montgomery Helmsley lucky assert runs exceeding relate Giovanni raises narrows terms album unanimously disruption encounter taped seeks after Convertible fundamentally Wyss glamorous tapes Edgar bribe fruit Virginia austere 600,000 Deloitte horizon Corning assets deference encourage efforts specialize sue McDonald physicians minority brick Report Musmanno about sum sun Daer bonuses Herr halls poorest Here above rebuild bride painfully Accord rush recycling 300,000 negotiate Winston promise punish accompanying Owen variety cancers Hoechst Knudson Year-earlier blink Hess listing casually blind brief costly Advertisers Behind tag dial Comprehensive tab bring brink merchandising glamour Data farmer Everybody Old Sands Guard headlines rooms wine rude wind wing others national wink incentives Verwoerd Lortie Ironically milestones parliament tax shrink tap tan wins 90,000 oily Street doorway Chancery oils stock-market Dark mentioned sphere title seems Tower Hilton Experts lubricants One sell-off mathematical wipe Friend unsafe Rabbi dies diet wish ruin wise anyway compromise died H.H. budgets murder Calgary wire expressed bearings 23.5 -LRB- marginal dissent environment jokes window shipyard PSE Ambrosiano beating Dingell wiry claimants rebellion bidding best-known leaped Vitro supermarkets dice reinforcements satisfactory breeding isolation sunny rule melted Orr H.F. with dealt desire circumstances Turning flowing prominently deals casualty glasnost assassin roofs premier Oso manhood Supply blazing Welch Teamsters French staffs 5\/32 levels Rogers verdict Noranda Point else barrels patted ritual deserves conditions shorter senses nail knowledge unique communications Revolution Battle training stabilized appointments toilet stumble Sotheby Throat crawled Wertheim leased solicit razor charities Advertising manners Harrington specifications leases sneaked yelling statutes testing informal Leaving breakers hammered wastewater precisely tractors drinking envelope rusty Siberia fireplace Rican contributions fibers Commerzbank Goya scared escaping 2653.28 comrades virtually deficiency crude delivering distinguish talks streams Fogg wide-ranging sensed steered resemble wondered legitimate pulse analysis landscape twins unsettled par cautious Detroit findings 5\/16 name altogether pay drifted Blackstone Tiananmen pad depend broker-dealer surveyed Years Telecommunications theoretical informed scarce pan neither Means euphoria categories sketches loath prostitutes terrorism strangers knowing harbor lobby deeds involve highlight stretching shortly languages retirement blend terrorist smile itself Global EG&G secretly flagship Supper inclined dictator homosexual supermarket pushers Sarah subordinates Wakeman cruel plea gained Growth consumer-products products far-reaching deemed Newark Powers Pay creature Pat Par tales pen per subordinated Wells pet cables twist translate 10.77 Cocom Sibylla year-before Voyager investors innocent bets pulls changed remainder Gardens affluent Francois statewide Pan fusion Pam flowers cycle Standard restriction kinds means meant efficiently Salter Ontario quotations whole hybrid Conservative Colorado hot-dipped Short-term dunes preacher deserved appoint grease gripped restricting Monsanto tribute ancestral nonrecurring ideology grasped Pa. Naval innovation Securities despair executions drizzle positioned play pie Dutch pig ongoing meals Zenith football plan pin Museum navy pit Almost challenging presidency changes kicking heroes restructured grandfather glorious pop pot tenant Gold stinging quantity Carnival Golf Recently consistency became titled weakened titles Pastern Good Lizzie chronic guideline beta useless 've influential January Entertainment best crawling royalty historically divide financial-services Korea Force Paribas Acadia gave Sperry behaved intrusion bend Laboratory absent whereby preserved sooner Denmark groped schedules Bridget mainstream belief preserves sensitivity whose willingness behind moments workstation whereas bell scheduled heroic Writing belt innovative posture succeeded circulated crush breathing large-scale corpse Dandy Company retrofit orchard legitimacy Individual reminds Manhattan Montreal anything Erbamont couch examining grandeur coverage genetic gaze pro Kaiser clause bent curve ruined Gov. Life distances beyond remembers silently sustain inexplicable modestly buildings Lonrho spending aisle jealous Put hobby Tucker gapt guilders Doolin environmentalists countered put Clifford anxiously Caribbean mapping tsunami twice Foundation resigned Rubin extreme loans testify superiority Forks Leslie curse gang staggering costing Nippon ranked managers Trinity beef roared Semiconductor Above stimulators jurisdiction beep Cappy been bees beer logically Medical survey bureaucrat Rifenburgh About Cynthia divine guessed majority long-awaited Review Like gate beds floating pitch diving whopping wells presidents Likewise statutory dictates Quarterly pegged upper Advisers Islands computerizing 're resort Francesca incredible sweeping bacterium Prudential jointly incredibly MiniScribe clients 2008 solidly 2009 2006 2007 2004 store 2005 2003 columns upheaval jewelry storm rescind story Partners pumps 2010 instant 2018 wiped 2019 Carat forgive engine S.p taxable 2016 image transmission Nicaraguan butter reservation bearish Litigation Simpson immense Robertson barely satisfy revamped Politics 20.5 plummeted founding 20.9 instances burial Macmillan Ridge stops faster consider Lion current domain postwar weekly stood bear install coating beat unsolicited stool Consolidated gain Sullivan demonstrators boxcar Trial Airport beam Line courtyard gathered 2001 2000 amendment waive normal driving high-speed stone tragedy transportation Pattison autumn assorted competitiveness respectable aims ailment victory RJR likely Lexington Bombay drain interim Benson thrive holdings Applied respondents Lisa waist husband stole laughing contributed hands S.C attractive S.A buried handy pianist archrival Thurmond Achenbaum game stages draft slips spreads pregnancy approach heating manner staged Joyce basketball enclosed after-tax Gogh ultimate Intelogic marketable consultation twisted asserted correct button Clearing workbench connects frustration wonderful reins BART missions threaten mouthpiece Phelan uneasiness tightening bodies expert Lighting thrill Italian acres Cafe sharper wrinkled stepped Werner Verne catastrophe squinted Throughout Nasdaq product overseeing Cady cropped account Alaska Critics produce attendant skilled intellectuals carved Packard undesirable accomplished accusing stove scornful Stephens pollutants sweetened sharply O'Connor miserable Ackerman sedan 35,000 quacks targeting sucked Donovan Bozell theory listened Walker S&P Chapter S&L capital-gains Russians Unilever Solar governed Eagle economists hotel-casino bartender inclusion aide aids Hesse electrical removes removed frustrating necessary local bench decks Harmony Whoever drastically westward composer constructions yanked furiously Project composed bolstered Cape SAC Heller Federation international high-performance journey Creek grace Investors ownership trademark nearby Iceland Hyman analysts conversion harm killed hymen prescription plow hardly gravel running plot Garrison tempted SAS yuppies tucked fierce complained outskirts disregarded grade Powell Mose accounted kills slide hard Cane attractions coveted humming suggested SCI Most Moss engendered slick artists transferred Camp plumb slice cancer conspiracy hall Bishop half Whenever cancel Bureau restrictive clicked contraceptives Enfield Gerald flat-rolled nearer Kruger Gramm-Rudman verse shallow Call nation helpful Release More Cetus continually thrift phoned shopping Compared killer Industry Majdanek gamble repeal interpret signal repeat optimistic hang phones hand quo journal redhead draws drawn separate cleaning Moon severity medicines Mercedes halt Similar excuse indexing diagnosis governor Lufkin drama city expect Merkur Dentsu evolutionary describe Moll Palestine footsteps plus problems computerized Companies Ruvolo hawk cite Phelps present plug highest-quality impatient August harder haze conducting neglect hangs delight costs Vivian third-largest partnerships tendered hazy Reagan sequester viewers restated ballot signed mid-October free-market Rothschilds Edna Argentina Wendy hate Indian Sunnyvale hats conserve Case combat rings winking Excluding concerning systems asset-backed faithful technically Stewart depended vigor vowed identical images Dulcey Small multibillion-dollar reject courses have specific Eastern Order outsider RTC treating deadlines scarcely intuition operators kittens aerospace warehouses Plus attempting surging nearly factories Continental Carr Cars conclusions drank mental Carl Reuveni Robin gauge Ovcharenko Leyte haul Care placing loopholes defended passengers Kahler thanks roll knock squall 8.10 role right shutters Cabinet preparations eighth rigid partial hits native Acting Traub Again smells arranged 8.25 defender towels reinforcement subsidizing sweetly enemies relying retreated behavior warned net commerce 8.35 daring inquiry Action mention Sasser longing 8.30 Investment 8.32 8.33 Baby markets drainage prevents Krenz Little veranda spokesmen essentially broke journalists L.A. triple-A new Halloween 8.47 NatWest JSP 8.40 ballet fastest-growing 8.45 8.42 treasures prepayments root treasurer Goulding Russ Ivy compact Loan march medical height Into rope Chivas births delighted partnership Ruth notable regiment Lalaurie Economic ghetto roof particularly Needham year-earlier agrarian non-violent room distant scientists remarks notably Its Bausch cottage rational raiders universal trained garments keeps ventures attributed obsolete congressional laboratory Ashton-Tate helping 8.05 reimburse 8.04 re-examine 8.03 attributes 8.02 prominent 8.09 albeit assessment Federated 8.06 Mountain libel impressed deposit Eddie influences influenced donating eighteenth rosy hill manufacturers dairy slapped Manufacturers Hino belts creators breathed rose Mancuso session Cruise single-A Turner disclosure trimmed voted catalyst courthouse Felice humanitarian weighing Keene oxygen broad Helmut votes voter 3.35 freezing Tribune anonymous Accordingly acquisition promotional helpless Felix pollution 3.25 seizure Nathan organized-crime cigar Roebuck 3.16 omit 3.18 rooted guitar square freeway Bake Occasionally Authorities marks envy reflects Mollie Back Eurodollar four-game scanned Korean gentle flexibility co-author hire Mitsui imminent opposition hips rows Security Sciences crushed Jan gently restless mounted Peace fast-food oversubscribed puzzling recounts Johnston investment sprung Dalton distribute allows Khmer below Somalia Hill conveyed Noting spokesman hint problem tended bottle daily rout deserted superstition Trans remedy tender velvet computer-guided estate Jen Trade Eastman treatment groundwork Inc. companions Jew Haven candle prosecutorial hide KGB Kafka Jed entirely Enviropact Lowe Memphis relatively hysterical Across mass-market FEDERAL roles bottom Singer Love new-issue Base accordance wandering restrain elimination Inco Bass exposed fingerprint upstream procedure citizen Bari Northeast delayed spotty admit Barr Ind. mortgage-backed Jay Kasparov basket L.P. grants High reflect progress 37.5 Further KKR Ore. comprises parting lantern Jim ignorant nonprofit stubbornly eliminating Ball Quasimodo Republican veto agriculture preliminary constituted 1.5765 irregularities L.J. Lord 3.52 constitutes several communism oversees mid-1970s communist governing Wayne rained turbulence romance leaving Year 3.69 shivering Femina dirty introducing transparent Sassy Drugs Yeah lending Bank community assassinations general Banc entrepreneur myth p53 airy whisky pretend high admits daylight very Look doors Catholic shocking contingent Schroder rolls kissed canvases 0.5 0.4 0.3 certificate 0.2 0.1 replenished case-by-case Hooker 0.9 endorsement exchange lineup 0.7 0.6 Long nod unpublished Lone elite random slammed Typical overseas clamped dusty stimulation not nor Microsystems Kansas now anchored qualities myself coordinator shield plowed purposes Disney launches computers towers soothing Szold Andrus launched dizzying slash British legislation hauled SmithKline roulette lowest belong misdeeds quantities p.m decline stabbed slate Elec transit grunted semiconductor coupons Trinova vaguely parties commute splendid counterpart throughout Coughlin permission Jr. knows Symbol regulation Copernicus known generic decide slave absurdity Long-term increased Jon Lomb veil restaurant inept vein Joe because southeast increases dialysis believing shrinking premiere apparently quickest minutes ballads greatest painful tasks gates bushel Personal HOME bushes 5,000 mountain higher 157 northward 155 gasps 154 2.25 150 Board hypocrisy trifle Hart-Scott-Rodino exports once Apple comparable 165 apart 168 Berry Batman 160 prodding Dell letters akin consummated warmed beatnik 179 principals oil 170 could 175 rebates rendezvous Exxon honored lieutenant living ones negotiations 9\/16 180 recessions Seagram 185 Maguire Del. 114 lecture 115 auctions 112 113 throttle 110 111 bottling taste 119 cabinets 2.60 slight Records poll begged passage broadcasting troublesome 125 121 Filipinos 122 9\/32 Shack stint strained environments embryo portrait cough Assurances 2.50 Corsica 120 example tentative 2.58 odd Capel good-looking pound 135 Harvey protective 136 telephones employer Rousseau today retire telephoned Iowa Muller bankruptcies Saturday vines contemplating experience types 2.46 employee coupon 130 employed Deep Morgan 145 enters Zealand 149 still Siemens improperly newborn vaccine advertisements assumption off 140 Lumpur Midland thoroughly Funds traders Taking court joint-venture defunct roughly integral slipping only understandable Purnick Moreover happiness buckle museum vitality responses understandably destination roadway upright preceded Tuesday negotiation pension Guess abundance Rochester humanity sunburn severed herds legends Deal Dec. moment Dean waking Dead Deposit Figure federally juries dishonesty Falcon irritation oak Dear cheaper sessions negotiating oat Engelken Sure plumbing Bulgaria masses bellowed standing count fragile masks underwriter 190 niece Projects speeding 198 home-equity nondescript LBO Maryland protection republic Letch musical Factory Libya professional copies coupe shadowing pizza Brazilian embodiment Connolly Mercury stiff plummet coups stick earnest Kay protecting network 3,000 poet contracting trusts actors balked poem squeezing LDP Korotich similarly Mobil growing oath aroused organizational contraction Foley oats undisclosed prompting deductibility fantasies fervor Key PRIME Ken hopefully fences shattering 150,000 installation anticipate presidential juice paints imposition Embarcadero Copernican chunks ends stimulated admitted kitchen Shann voluptuous supper bearded owl warmth own excitement 3\/4 pounds 50,000 bucket bells stop-loss LIN contraceptive penalties belly cheaply predecessor happy festival Westmoreland 3\/8 grossly plausible theatrical tumor adaptation produced supervised intervene Shall preference producer produces abortion-rights Shale checked machinist grocery frowned exchange-rate single-A-3 single-A-2 seize single-A-1 Express surrender earthquake Infiniti livelihood Kid validity fallen Kia arising Kim Batibot marry upscale demonstrate index Thousands listening Laurence spreadsheet propulsion inform Hutchinson flicked require foreign Sharp classics disciplinary royalties mid-1980s well Share instrumentation compass Treatment owe realistic neatly surrendered betting supply individualism drifting disliked trucking buckskin would-be Lesko suppliers units Ingersoll Michael positions Penney Minella Jelke tracking unity farther invoke tension our out 2,500 absently hundred Getting awarded falling Bartlett went 1.8 1.7 unfortunate 1.6 followers cover 1.5 38.5 marketers 1.9 revulsion 1.4 1.3 groups 1.2 1.1 Mich. airplane concealed compare insisting disks carriers Snelling 141.70 boiling supervisor collateralized locked examination Moscow 2.75 Cornell pachinko ground advertised 2.625 wept pollen 109 108 union 107 highly 106 105 weapons velocity 104 103 Dinkins 102 101 simplify 100 covered united miracle 2.85 progressive polled 141.45 Rianta crystal Reform livestock budgeted Glendora 141.52 grudgingly Utah advertiser old allegedly township LSI lasting workers audition were Anyway terrific DaPuzzo doorstep bellwether curiosity global symbolic government-owned affordable Design Ptolemy adjusters company Andrews management nowadays west Elizabeth Bickwit dipped caution one Teagan licenses minute Shearson state-controlled Lincoln Ekco Berbera licensed backers year-to-year non-U.S. clearance LTV publication gases benefiting wreckage savage 141.90 Singapore channel Deng robots occupied freeways external particular managing academic married barn refer theological bark duties bare missiles Intergroup defending plastics 10-year ... shown wide Caltrans tail reorganization clung ratified shows surge Northwest Mother wealth underground faculty audits epicycles partly patient BroadBeach bath emphasis Noel Fossett discouraged stacked salvation bars buttons screening incur bass comfort base strikes Levine O'Brien client ditch conviction Guber anywhere Eromonga tritium Brown-Forman cheered full-time long-range software band friendship Commerce bank widespread tank concessions bang primarily gentleman Idaho 45,000 Keating Ky. mandatory fulfillment States tame sporadic fictional economics seismic softness extending sidewalk deliberately remarked Financing stimulus sentences drinks lab feeble meets lad honeymoon ally lag tale discounts sentenced lap Otto tall Prentice talk law Nazis benefited precision bans obviously lay cable departure appropriated PAPER Violet source take retrieve economies Prague gentlemen clues appearance improves chapters shuttle tweed Miranda deliberate historic improved haunting Declining O'Connell Estee shops J.P. intolerable gamblers thrusting accrued wild substituting mothers Already Let numerous Greenspan Warburg Leo MGM quackery eagerly accomplishment Lee reconsider volunteered shoot Led will Cupertino inflation shook incident shore Financial anti-Semitism virtual Silicon Legent segments announce empire preceding tape Bowes fiber short achievements concedes CACI None Law liberals Lockheed conceded dumped Modern Violin sciences dangerous master barrage proclaimed Honecker Lewis okay metals capabilities follows 60,000 segment Dickens ranges sweaty revoke Freres provisions shots ranged GMAC revolt MCI high-profile Las Herald taut Lao Bates presents clubs Upjohn amounts streets MCA intricate graying trailer wondering virtues intraday spiked trailed vigorously muttered Nora vocabulary task Pearce boxes Daily Nestle wife crossroads Speaker characteristic subscriber also shout 1.20 1.22 newsletters 1.24 1.23 overpriced garbage evident Mrs. adopt 1.15 sunshine 1.16 1.18 cheerful 1.19 bureau supplier supplies 1.30 1.35 wasting 1.32 Andreas always log convince restraining magnificent wandered Clinton athletes neglected airports comforting leaping Irving 1.27 lot 1.25 magnetic 1.26 low 1.29 Irvine 1.44 ugly exaggerate 1.43 taxi Patterson 1.40 Mitterrand N.J 1.42 advertising Prince reveals Barney resurgent letting N.C designed N.Y Honeywell baby N.V 1.36 1.37 MacDonald offspring Right moderation 1.55 nineteen 1.54 1.52 1.50 designer Older cosmic back supplied piling talking either Hanson presence CALL MLX original south 1.48 rotting gestures trespass sports sketchy ended 1.65 undertaken jailed discretion Cathay values intentionally Dunkin divorce formulation Liz drunken conclude valued lacked condition 1.71 wrongdoing Harris Holmes 1.75 hundreds numbered Fujisawa uphill battle post-crash sound Unilab whom 1.80 1.82 Human dental 1.85 federal Davis underwear Calif replied MIT mid-1990s gushed ontological David Basir resulted headaches manipulation downstairs Dick threshold registered Fashion usage forbidding Service announcer announces Merchant gasping corporation Daiwa backdrop Stock-index pour entrenched focus Consumers downright Know Demler extra greedy U.S.-Soviet concentrated distinguished Mousie wretched announced replies participant bail drivers port prayer Mikhail inviting decisively Ltd souls cultural apartment minicomputers Bay-area pose telecommunications franchisee J.C. millions ball penetrate balk post Illinois bale n't let chaotic bald oppose stored screeched Traffic recommending leg bleeding Ill. led Lt. MTM prayed stores Total annoyed growers concentrate unemployment Organization Communist priced health-care nurse remedies rebound niche effectively parochial repayment regards Humana Taliesin uninsured stable Communism facade fearing Prairie pork straining match output Theater anti-government athletic bookkeeping Sutton pony Lou Lilian cultures Los purpose Israel pool implications Steppenwolf Arlene 1.02 couple participate shoving unspeakable availability lit Community 1.07 lip 1.04 pressure 1.03 800,000 Brooklyn 1.06 1.05 videocassette poor around lid enjoyment Judge 2659.22 instead 1.10 1.11 architectural prices 1.12 bags lie gouging communities threat quieted triumph Fire airlines thread boring Edisto guaranteeing frantic shoppers Miami Universal sleek effects capitalize sleep emigration amid well-known struggle suitor Pasadena senator Saudi Kohl Spring petroleum imagination honesty mad uprising map man may permissible organizations Calderone Crombie Mister accepting Leval Polly what unscrupulous ponies volume landfill dining soaked distressed greenhouse centennial Commerciale reforming balance hostess Poodle enactment gloom sells Five cement smiling begins burst breakdown 500-stock ammo McGraw-Hill Hambrecht Cela educational High-grade acceptable glistening Koenig Zipper funded Madison chosen Charlotte met capitalism legislative Machinery men earnings parallel Financiere Betty Canadian glory capitalist Always hardy readiness According proposals nobody Calloway NFL aligned intriguing glancing NEW abuse whites burns unsuccessful Based Except decorated Kobe whip Oedipus animals gene forcing Men Mel Turkey toast heartily powerful composite Met county Koch counts weird Donnelley evaluate fashion Ellen credits Bernard Investment-grade Eight sprawled Toronto screamed officially Malaysia warriors forfeiture extortion Andrew savvy Bare-Faced shaping boosted substituted marriage struggling capita substitutes NIH thoughtfully Williams individual being erupted actually NBI 9000 NBC when BanPonce Man Wilfred Square Andrei talents constituency Mad Mae Judiciary Natick exodus Mac permanent Justin focal tumor-suppressor fitness reactions elephant Sherman Md. eccentric disappointment Looking May Max muffled re-election lining facsimile besides labor-management Siddo gets shelves silver old-fashioned urging transition productions suites NEC opportunity April briefcase suited Shamir discussed influx mph eighteen syndicated Mo. appetite disappeared bribed Dataproducts Workers delegation CBOE vowing syndicates amass mob Instruments cell severely realizes mom disaster precipitated Fiat Artie simply contrasts rhythmic chorus conflict realized sideways policyholders Estimated notices simple Shattuck alleged pioneers noticed Victor numbers alleges denying Nov. Farmington Enterprises inexperienced eventually Estimates robberies institute Foods echoing careless rancher 6\/32 symbolism civilized discovered confirm spotlight cornered buses essence oversee corrected experimented pushing substitute harsh questionnaire mud dragging busily Brannon Qintex Jenny losses follow Pathet capitalization cocaine Deutsche weigh DRAMs weight Together weighs longest thriving businesses emerges teen-age fifteen Peterson disapproval compatible blessing Insurers ivory Arlington globe cent Japanese emerged hugging Mackenzie muscle swallowed Assembly Depending Icahn couples desecration mature coupled HealthVest Jenks Schaffner leaned cycles Channel Crime guests promotions flowed solicitation Thrift startling technical physician filthy burden initial undergo unpaid Currency 8.85 flower 8.70 confiscated experimental dulled NWA without Senior quietly largest imaginative fundamentals bankruptcy-court culmination 8.75 smell cabin junk-holders Louisville two-story INC. Social possibilities identity epic Kroger holders scaled tendency 8.60 downtown regardless surviving expire Direct shells reconcile Opera tainted Tele-Communications mix fullest valuable trotted Beghin-Say offsetting 8.50 8.55 Rupert belonged canceled constituents Edison Final gear Ms. Hathaway power Bullock tack reduction Fink Equity stock-index Theresa shoes NSC symbol Fine Find posing denominations Brady Mr. NRM conspired Wellcome doctrine Technology privately Barre McCaw Kong Negro Avery biotechnology chambers Tolley Barry Film enemy participated price-earnings terrified processors degrees Symphony shock governments consents streamed largely remembered daughters maturing analyzing attended clutter bothering profession pitcher advances fertilizer pitches compete materials slope declared event finishes advanced Filipino cage Cambridge James gasoline theater regard meet washing evolution 540 median dawn stadium commissioners cafe pitched components YOU Angie 1818 steady resignation sped sidewalks homosexuals sweetheart biggest parted index-arbitrage spectator Jolla guidelines Commons baseline Fluor 1845 experts happier non-food declares censorship invisible crouch fruits erupt misplaced outnumbered multiples revolver 1\/2-year ports days averaging zone suspend Milken banning grandiose 18.7 echo strengthening 18.5 updated Jamie 0.19 Kingdom CFTC gourmet gleaming assessed alongside rationalize spat Embassy Adam automatic Gorham double preferred all-out Anacomp Harvard areas orders Schering-Plough 0.03 589 span 0.05 smelled indicator African Sheldon deduct planted Upper generous completely hillside wicker especially fuel planter alike 550 concerts Survey Digest conductor assigned finished inflated Hells commodities evacuation Hello confront wicked aftershocks ludicrous wooden flush headache Division plagued 0.25 brown lowered adding Whether issuers attacking Building Morgenzon Nobody Tenneco rock Jaguar Northern rode Buddy 0.60 border capability sterling consequences patched someday Investments menu assured Hispanics scent subsidy sandwiches patches regain scene unraveled western pupils publicly Woolworth maturity Bear commenting memo mandate roar Women Drilling road Lester simpler Calif.-based Beam Westamerica publicity trading commotion marketing Never Running focuses officials loosely marijuana Per-share Steichen worried Star worries publicist alien Stay laughter telephone Bebear diluted Federal flung mess every posed eight poisonous Helva conspiring Douglas focused 5.9 Neptune seniority progressed wrap reviews 504 authentic designated richest unwanted 500 exciting economist salespeople low-income Limited theatre interference mere violent beers celestial Black chess chest 1888 security McCall Spokesmen alibi gorgeous errand Persians corresponding Zoete gifted Lucy 5.7 puzzle 5.8 5.5 5.6 5.3 5.4 5.1 5.2 dodge Woman shifted commodity brightest alliances Bancroft sponsored angels callous Hamrick practiced feeds Poughkeepsie discussion appear clinic conducted Property unhappiness cave U.S.S.R. omitted stretches practices fury valuation furs shelter Politburo fluid practicing arena drink appeal stretched sour charter Equipment acknowledging soul suggest discussing indicated soup calls favor indicates cheap mailed sort Kabul lively corpses expensive Marathon laundry scrapped sore Columbus negligible LOAN sensitive dismissed candidates ounces pinch 700,000 documents Ebensburg printer medium Nuclear Princeton printed overly elementary Pace wounded Treasurys procurement recreation bowed thicker appropriations Wolfe Carmer Exports practical cars pouring care card Internal Continent moist Light CFCs morality envisioned routinely literary assuming agreed Pakistan declaration Wright cart rabbi filmed cast Communists cash elusive settlers speculators case Prohibition thumb Broadway Pretty song cheapest Thomson publicized undoubtedly mythological dismissal regions worsen pickers cats breach continuously pursue commentary subscription strenuous interrupted drill agrees stirring Resource Earth recycled strength soon Pact sons pipeline foreigners Hitachi brushing Richert automated cane misleading feels equaling conscience ridge camp Fujis transmitted solo drive credentials sole thousands sold confusion insisted autos personal-care jets Institutions topple Rubicam cans Graham Books combination slowest proposing some atoms stream mundane assembly losers centers circumstance Occidental Brandon pastor annually Jonathan coordinate Generale soloist Papa boards arrange magazines injury pursuits Thayer McDonough explanations Rhone-Poulenc subjects chefs posts Much Orders finishing Amsterdam concerns sources restitution Jordan Billy fund Markets meddling rollers cake cheer nasty visitors cheek adjacent streak frustrated fingers hemorrhaging repetition soil calm call demands paper breaks Columbia calf temporary virus ruling currently Mahzeer hanging another sofa rider rides equality full dramatic check Briggs Chambers paramount Renaissance petrochemical came 14-year-old searches soft Palo Moreland HomeFed swamped Donald Palm develops facing benefits searched average minerals Monetary watering Pretax confesses recruited covering confessed Lublin visit reformers Nicaragua diversify lesser Senate Wade Who runway began coldly something takeover-stock asked Attorneys Why entrepreneurs PaineWebber buy-back repayments Pittston Joshua preferential continental Waco new-home salaries further junk-bond soak towns separately 400 soap soar tunnel derision Takeover foyer Inland pursuing seeking abortions widening lawsuit Courter plains joining laboratories portraits customs skirt flatly girlfriend Transit traditional Margalo Intel francs soda a.m. yards represent solving jolted background smashed returned atmospheric Maybe Emhart bound Detrex astronauts Everything Michelangelo confusing Mayer enough capitalized dispelled 17.6 17.5 17.2 sidewise insulin topped Millie fleet Steelworkers saddle three-dimensional conservatorship better against Industries deprived constitution invention shareholders saying Rockefeller terminate consensus Boston 450 Inouye Study flying Aircraft Capcom cheating voting Atlantic correspondence society Sung windshield landed Atlantis relocation shaved Wall they Gatward fell unprepared nine Sohmer Commonwealth renaissance convenience Martin apparatus Walt anybody approximate educated programs Pryor lesson structure calculations Industrial delivers charging murdered Such Chan excluding Cellular ordinarily enabling earlier flashlight skill them then right-hand murderer delivery Hammond birth-control Telephone sabotage plenty irritated writhing Way melting Was War prospectus Godot Bologna two-thirds Slowly ashore belonging Berkeley darted Reitman unified Poitrine Durkin Wait accuracy imitated custody expenditure acquainted Initiative second study displaying Crusaders looks camps childhood Doctor examinations Eaton escort forthright Chez theology Tucson Mercantile Chiron stuff Agreement thin Ltd. Pennsylvania included this appreciate firsthand recognized fend Colgate-Palmolive Nixon Mayor includes affect stabilize smaller looms denounced affiliate Gutfreund Norfolk various stuck declining 4.1 thieves Fleming 4.4 4.5 4.2 4.3 4.8 4.9 Martha 4.6 adequately 4.7 Pilson maneuvering recognizes felt Suez administrators burdens wrecking constitute passed passes merchants packaging snow points invitation deficiencies donated recommends revived cautioned ants intervals favorite conditioning Saatchi civic 17.50 data-processing habit civil crisis tailored surplus luxurious Wash Dictaphone Champs fault fastened breakthrough combined Wars worrying quake 10\/32 President feat actions loathed prohibition combines publishing fear detail Nellie loose exploration contacts affected Sound 2003\/2007 deterioration tennis Witter evidently networks showers unable Minneapolis worthy that Leave surgical deteriorating than Representatives rebuffed previously races revival memories Tokyo-based model cutbacks weaknesses shining raced skiff abundant Downey weighted dialing elaborate monopolies consolidating crises traditionally affirmed feed modes forefinger confidential Taylor feel girls Local cease investigators feet fees climax subpoena infinite organic Wang directed whoever circuit consolidation suffering standpoint motivation 486 Goodson prototype simultaneously X-rays whisper looting toxic criminal one-year choose artillery Tomorrow Madrid Protection Izaak 475 WPP director putting impelled Guterman symbols coins flesh Hence Miller episode comedy knights failed rebuilding ushered ballroom Ways Stop accurate respective WSJ enjoined beautifully depletion edge toxin heaven harbors nuisance Kerr-McGee developers heaved fruitless Meredith integrated Sawyer Burnside House-passed users C.D.s solutions Though Recent ponder translated Weyerhaeuser requests nationally turned subsidiaries dealership Precious directly accuse S.C. manufactured bracing stalled 6\/2 Secret Jerell manufactures Railway manufacturer popular Bavaria coincides privatized voice interests booming -RRB- pumping South merely employing Armstrong displays regulatory doubts during Eric meat notification mean rhythm graphics offense reinvested distress regulators Abel meal Subcommittee office Operating terminals naturally S.A. domestic Jennifer alternatives regains creeping Unocal shedding substantive alliance Solidarity framed deductible praised uneven tend bacon 330 parts party spoke promoting prevails tent tens substantial alcoves recession Drive offers pencil Masson project enthusiastic air-freight frames masculine Fletcher discuss 340 skeptical Ramada pre-trial Walton pills each myriad bills Custer Belgian mistakes mistaken sidelines Faith inhumane bathing 1930s tell interesting choppy Skase DeVoe choices 325 RICO semiannually 320 electronic sequence Bloomingdale pro-life hurled collects pillars physical congress softened Recognition outlays 16.1 Eidsmo 16.2 cruise backs aboard While wanting trimming 300 seriousness Stamford seventh Guaranty WCRS earning refuse single-family patriotic Bankers religious membership promotion granted enact response timidity chapter ozone pilot incorrectly infection showing onion quarrel acquitted 3.2 3.1 3.8 3.7 3.9 3.4 Province 3.3 3.6 transformation 3.5 Enterprise Espectador Ethan blows paneling Stick retailing Graduate backwoods newcomers Those gainers crumble among blown Still everyone listed spots teen phased Independence write-down imagined decisions routes ever-changing performed perfume performer pays Wellington unanticipated vegetable Breeden newspaper spouses flaws Woods tracked Falconbridge listen Voting greatly Walter Persian editorial modernization criteria recipients Independent Automobile void Seventh studying write-downs reasoning judging begun lotion finance pawn high-end avoidance Jones elections authorization since Yankee accountants cooled cooler motivated ashes Dennis tear Asset Something creaked bank-holding prepaid workshop solved quack fatal team employers Bancorp conceptual ease eagerness Katharine considered judicial whistled reconstruct path Toyota east subordinate zip investments political Minority your Cie. sport past concepts Nations troops environmental pass election Presidential ears earn matched residential blond nice customer matches Newport formerly prostitute 13th devotion crushing awaken Rubbermaid pesticide cost-cutting Chevron curled Maynard vote Employees absurd Seems sanctions intermediate blood pricing F-16 go-ahead ridges Hamilton fashionable spinoff F-14 referred devices surprise critic offered annoyance coordination wildlife irrelevant Which Naturally Broadcasting reoffered Nielsen textiles A[fj] definitely metaphysical depositary whatever RISC Title exhibit Hanover pleaded presenting sorry lumber rampant Americans NYSE Marshal arbitrary hills percent coolly straw Output Westridge stray identified Cathcart discussions grief mankind Kuwait second-largest fields pork-barrel control Mideast Burlington cholesterol Roberts year-end benchmark Roberti sorts identifies Motorola canoe stability acquiring cockpit prisoners attention argue accounts run-up Democrat extended Timothy you tables underestimated diesel Belgium AGIP latest dealers Volokh people candy parks laptop bottles seasonally games pairs mainly piled waving Hundreds Died exile bottled touting starving stalked Similarly syndrome beneficiaries Diet Additionally Turnpike inspect lemon suddenly nodded Assets Rumors Concerto block Freddy Colombia child-care farewell Vanguard flawed Roberta deflator Spanish excited Strip anguish Jessica taxed undergoing degree taxes streetcar mystery hurting travel nominal 380 disguise Unification Holdings hurry slumped 386 Catholics Middle fleeing 370 pertussis scraping pains enterprise paint strip BANKERS Storage broadened 375 Brassnose cafeteria Dill Beebes footing ashamed complicated Portfolio turns 360 Vietnam complement erotic sharing hopeful cosmetics lately piles exist hurts university Munich leadership unsuccessfully potential worsening radish swaying Chris 350 arbitrage begin jobless Attorney tower orthodontist organ towel rifle Separately storage reliable auction arrogant ghost continued impatience Professional politics Vatican blackened endorsed virgin deep Hammarskjold Director breath favorable Paul affection orchestras Acceptance Profit 200 favorably plate Montagu papers miles Country Dodge breast illegally magic voyage fixed-income continues Beta idea 210 superior Park 216 Beth Elsewhere riders extensive Integrated management-led Boren asserts Best cracked affecting intruder deck Part 1920s Delmed gerrymandering setbacks 220 Paso quotas debt 225 defenders needs 229 Victorian exceptional yes independent barley yen equities Dutch\/Shell yet 15.6 plays dear obligation describes phenomena Rubens deal expose dean capture eyeing dead deaf priest staging passwords engines flavor vault Earnings classical contemporary platinum trash seeming securities therapy eliminated enforce prolonged garage destruction colon frequency routine 7:30 accused treats treaty restraint paintings restaurants projected sample 2.5 2.4 requirement export 2.7 You 2.6 2.9 2.8 National sponsor 2.1 promising 2.3 memory 2.2 Montana adjustments urban quarry color cooperative decency badly accompany forget Emile refinery Founders Communication Marvin ardent fixed bother Geronimo banished mills dried favored tuition Cromwell refiners Master commercial Thompson Bumiputra questions pursuit attending soaring priorities slowdown fears Revenue geared comment varied plant settling plans Sidhpur Second strain settles arbitration plank Bruno Table aside publishes publisher Venture shipped unbelievable Paramount-MCA rebate published situation porch completed Early requesting 2662.91 Angeles delicious Murdoch Electric Allday representatives Showtime extension idle plane traps Boesky described Burnsides reveal recognition Maurice Ethyl bracket tours inquest deja bikes trail train leveled hopelessly noble Barron combining stature challenges trailing glance Civil Hasbro pursued challenged Prevot enjoys settled precarious Guber-Peters Koreans parents Yet futuristic commands outfit limitations insight confided Yes drift applicable enhanced agony amounted resolved rubble partners ample diamond Esselte cooperation agenda statute potent afternoon importantly definitively inner-city destructive agency quoted circumspect filling apparel quotes Fudo cooperating ASSOCIATION Smith greater withdrawal Working Development deposits adjustable encouraging face-to-face spot touchy House-Senate Tennessee LONDON Fuji forgot place serious suicide attain Beer rubber Rosenthal Seaman builders Peladeau rubbed summers Tilghman present-day District headlights chores Because abandoned Society reasonably Partnership vaginal Baltic theaters Kirk desk Mortgage executed critical easy anti-takeover downgrade entitlement Somers initiative scratch entitled facilitate previous park trips Electron speaks ambiguous reasonable enterprises rivalry Brouwer Prosecutor weapon reinforce part incumbent lapses happens December optical haunts bathroom eligible handled Gilmore jerked Fund welcome Conference tickets comptroller suggests text submit reinforcing narrator Burton pale effort Texas layoffs intended reduce palm spun Societe input pall consciously coughed Parenthood handwriting spur natural Composite caresses trade cites outlined Alliance Income consume tracing competing meters outlines CERTIFICATES deny cited Bruce demonstrations plaid Peters jackets plain Petroleos Institutes consult trace shareholder Tenders track Grimm avoided 99.75 school appliances fucken Chugai tract rifles During handles spotted examine test 280 lurched shrank unlawful urbanization IAFP addressed Aricaras conferees airport hazards Jacobs Under midnight refuses page Petroleum deaths clarify essay refused bathed Guinness Jacoby brutal when-issued 270 prepare Provigo strategic 275 Systems addresses McNamee Reliance outlawed pair Bell Missouri institutions pain finally European Oregon 1.8667 paid fueled spit emptied removing overdue 7\/8 trunks spin Sansui apiece profound gangs Angel Helen Individuals City Cuban Heidenstam attach bacteria Elders attack pace 240 Corporations arrests one-time bosom little pack alive Bert dreadful though Cambria mountain-bike signing Journal priceless 300-a-share proper 247 refusal nervous consideration 230 pact Bern Miami-based Gilbert Games 235 prepared Lazard 260 provisional aggressively agents greenmail tearing Abraham object prepares salmonella festivities Weirton accidents protected Quickview 250 252 error pegboard private-sector versions White term Citibank embodied secret Ultimately disappear Digital Forsythe shakeout Brenner Abortion incentive Stoll developed competitors King price\/earnings beans thoroughbred upbeat comin Mitsubishi Forbes trick Arctic screaming pacing purchases impressions comic Hart Associates clearer sensations Gates Skeptics theirs distributors turnaround purchased cleared Weisfield biological slightest washed Soup Associated superiors subcommittee judgment Sometimes vivid Stone made needing experiments suburb usually conversation foundation trial sophisticated preferences ridiculous purple Construction forecasting jazz solar Weiss including strongest developer irrational bullet reluctant lead spoken leaf jaws insects surgery Bids industrials 7th personnel pessimistic Gunny technological processing Hawk Between coughing 14.3 14.5 14.6 label display indicating enthusiastically arbitrarily Mateo 14.2 lean revised elected O'Donnell active opinions blue-chip Have make deliveries Wastewater leap hunters credited therapeutic Store indication tried TVs perceived lavish palms atomic Your pretending due-process fuzzy Sun tries Howard dictators mail 80,000 malaise 950 TVS fared heavier candidacy Dealers securely Nissan main tremendous surgeon expected maid castle franchisees brewing Portugal mentality puzzled carried Dartmouth peered reporter disgusted scant asks Ted Ten report carries mechanical carrier 1.8340 reported liquidity Knight-Ridder forehead suspense prisons invests Vernon 1.8355 vacation FK-506 Ramirez needle UFO 1.8353 Prudential-Bache objections bored Ireland forest-products chairmen banker mountains adjust protests crowded medication Tan smallest Brothers deficits Tax prosperity rookie farming fourth Salinger dilutive Hall 1950s unclear Half coatings Bias three-month midst literally minimills tends Ogden synthetic contains Feathertop 9:30 beast penetrated almost foundations Transportation surveillance analyzed experiment action Faced seriously Committee consumers momentum clarification filing UAL Hank free-lance corporate forming Askington Hang dress Hans glued acting societies chairman scale interstate exclusivity females Upton Cablevision lonely major Wilson scalp Reverend contention Leader Galileo sexually morale anxious bears Gandhi beard totals overtime scams Kellogg Statistics Matra blunt sitter pipelines Six liquidate tenor communicate Beginning appealing governmental Peoples Ski mileage styles tabloid psychologists cyclical admitting drafted Christians contemplated Moriarty pregnant specify behave tacked broader She corridor broaden Wedd Fannie unlimited Steinhardt Down placid strike absorbed written comparatively Court From chips Craig species buyers liable Sit Sir jail young picking Myra narrow Arkla Family equally mate Constable arise reflected cemetery THE repeatedly perform loses loser Sihanouk derivative 70,000 grandchildren misery Sex presented china scary prohibits shared enabled sniffed scars youth places leveraged pools defective shares enables eggs islands scare legal powers famous Skinner reinvest Health maze revive child Crane performers hectic grateful administrative placed yours resisted Sen Estimate Quarter forecast Doug Convex enlisted chill See crackdown Sea seasons device Chevrolet paced spurt strife graceful 5\/8 Some Wohlstetter Shylock 75,000 likewise Sri Fred arrives leaves Richard Free St. spoiled sheriff Rock arrived industry fares Song four-day cubic Valley approached stride packs many solid Activity covert covers takeover one-third Pierre subscribers strict approaches creditor Rudman TVA residents athletics physics translation Sr. Soon valley watched Sons capped reopened blanket Lynch franchisers February TRO Sony casual mainstay hypothetical reversed district watches TRW negotiators second-quarter shudder male Amgen humorous prestigious Roger already tackle Allied broadly unidentified bloody revise standstill perestroika mall Hettie Artists Uncle 11.25 beliefs weakening arched Could mask beach Father TPA skin mass mast parody Fran presently chief mare dream hints agencies mark temptation Exterior comes mart fountain Son Soo administration senior trough issue Milwaukee attribute carpets achieve coroner disadvantage magazine Griffith controls TNT details borrowings farms temporarily woo won 42.5 judgments Road reversal brains Delaware vision Finland tense replacing jams America Antonio maps address big-time special Matthews fundamental Boesel battlefield need Knife using 800 fish amazement brethren West Giant outflow missing Room Orchestra Productions Lucien Forces ordinary laughs heaviest creative Emma carving worthless attract smoke Hewlett-Packard doubted blocking Richfield sociologist Doaty smothered salmon fist 8.7 8.9 8.8 pretrial civilizational examiner horrible cereals trouble division missile Barton examined Rome wet Tariff INDUSTRIES thorough streaming firm dictatorship o'clock web guerrillas Institution fire louder Were Student Employers wealthy Carbide Panamanian vendors accords methods behalf proves considerable proven losing Nevertheless Maude trembling who stained volatility Armco theories opinion proved 13.1 13.2 populated 13.8 grave 13.4 13.5 switching 13.6 investigations Trotter considerably Pharmaceutical general-purpose near circulating Frederick neat Iran-Contra abolished murders anticipated Hesperus combinations reflection Instead neck anticipates understanding purchase former Concord fits throw area style wonderfully circulation wit formed Freedom taxpayers fragment Armed 850 five desolate program-trading capable win Popular reflecting message 15,000 mission arrival handkerchief visits why natural-gas Tisch Kageyama paragraph mystique Dalkon Rowe Miriam TCI Sam overstate youngest Ages woes 880 knife ring creating services tying Outside regulator loving provinces Hastings Well Cologne flurry thwart Prieur crumpled caller different Panisse creation Brodie pertinent recipes manifest influence allegiance voice-activated closet closes closer Weil bewildered neon boomers detailed closed decliners radical similar Germans Say Glass Roth floated San 24-hour bluff 1.8470 musicians plowing residence persistent Birmingham ripe furnishings choked Germany defeated bombers Khan Enron nomination subtle Ross Veterans Rosa programmers 1.8485 Research Rose divisive champion wiping liked issued Peruvian detectors issuer manufacture issues likes called procreation Agency clear-cut Week accomplish wax way profitably 20.125 estimating believe war snoring was ESPN abandoning risk army naval driven rise arms driver drives hopeless Aichi 24.9 Clay audience 18.95 profitable communists Generally mains threatens Waxman wad opposing spurred reeling wood arts Technical McKinley Rourke vs. intercourse forward Eugenia lifted Rex Rey wool Slater READY bullets Rev Providence Omaha flair Papa-san 4,000 constraints copyright vessels moonlight brunt proceeding coming Cavalry SHV professors rigs chanted breakfast stayed next whirling Three digital abruptly twenty-four voters utilization Haas Given enforced Senators Samuel convictions hair appliance surprises incinerator hail irons flags steadied news rift surprised passenger Foothills SKF McDuffie irony Gibby agree breadth Hahn squat dreams scrawled inner candidate SDI muddy vue woke scores gender electricity Congressmen Ray reactors redemptions Afrika scored coffee SEC 9,000 size salesman reforms United roads Sanford result opposite credit-card nets cocktail definite overwhelmed stagnant animal misrepresentations functions reluctance Red nest Cancer liabilities resume notebook squad Nancy grain operations raged harvest middlemen employees quarterly flash via doubling Beecham clutching avoiding Hiroshima planners authors anatomy excluded comparisons watching file 17\/32 McGill York grasp tilted exhausted Roe grass contempt Roh shocks teen-agers atmosphere Rob Rod Manitoba doubled salesmen underwritten Roy violate Brawer non-financial container Ron Aeronautics decidedly rapidly peaked trying appreciated Ends judge Dallas steadily giving gigantic desert establish quest utterly symptoms loosened clearly sector incorporates wander grant swells Devil justification fortune Agents silly ASSETS grand incorporated three regained returns characterize work worm celebrated earthy letter worn dialect videos bidders cattle heavily landmark recreational threw promote program fund-raising Africa word brush wore regulated Cawthorn 9.2 9.1 dollar-denominated 9.4 Elaine campus ride 9.9 Paterson 9.7 feared 9.8 9.5 9.6 Credit Julia Bridge contained Dixon fiercely Nobel Julie Reuter flame Winter Pentagon Genetics von 26.23 reinforced issuing defraud fine find film rice rich fill glanced engages Raymond Conway ribs outer engaged confuse 900 periods pants rattling Domestic Banking float Champion 747 time Imagine psychology speculation thereby Steel microphone mansion anatomical Sources outlets worship pocket contends lined smug protested lines malls uncle linen queer queen break-even Fitzwater prospect perceive Georgia-Pacific 27.9 namely currency Station 250,000 Whittle 27.1 coherent year-on-year Usually trousers impaired Torrio tilt Iverson indicators till Four veterans elegant tile unduly aunt majors Wheat thanked triumphantly transactions Voltaire competent booze qualify distaste crumbled bounce diminished appointed 30-day strengthened 700 reckons scramble Wednesday Whitehead Sears materialize 7.8 7.7 vital 7.9 definitive fulfill Va. Microsoft entrepreneurial orbit damaging 12.4 frantically 12.3 12.6 87.5 12.5 12.7 prefer 12.9 guidance Skolman crunch Ariz. cooks van Field Seats negotiable songs refinancing powder insider embargo flock author Dumont alleging uncommon 7.5 7.6 7.3 7.4 7.1 7.2 complaint complains males disrupt photo planned burdened photos wider great widen money-losing planner meager genes poetry D.C. hatred Henry Winslow Whitten given unwise Keenan Lines screeching secured Rather calmed raining amusing tangled auto survivors credibility costumes debacle accident bigger Food Bryan Hernandez Medicare emphasizing polls susceptible statistical Linda visiting Aikman primitive productivity inhabitants green vendor receipts advertisement robot links Sandinistas frequent outcry hollow dishes Van method partially settle stockholder Jennie narrative snap human-rights preferably Oakes related ambivalent request useful Via monumental Relations decreased assist hunch tire Mattel panic flood unscathed Results scrambling panel tiny Athletics explore personalities nonsense erode flashy 30-year speculative Fort lunged building borrowing 750 Texaco gives Ford Location impending scraped inherited Daffynition provision WHO profits dentist fitted mentally Heiser weeklong tips Congressional satisfied exposing checks yellow electoral downturn Contel hairy Comsat approved drilled hairs high-interest lovely Supervision fourteen elements Juanita offerings assembled politicians Prosecutors Lawyers propane contents Steve attendance drafting colleagues entities variables Dorrance hamper individually conscious professor Susie packet Quotron delightful 13\/16 use difficult sinking agreements 1970s Marshall Matsuo Steinberg Colgate goodness approves LIBOR Yellow backlogs plentiful Accounting handful fights feeling pennies B.A.T Jess prime-time nerves supposed Garry auditors hindered science GRAINS preoccupied Noxell vessel tells prudent 18.65 submitting triggering liking Atlas Bogart shapes modified percentages failure Debate third-quarter True tapping Wilder concluding shaped lobbyists packed taping contested setting ranging seizures Marks Stern inspire profile thus Computers approval cabinet gasped exploit Motors English natives expecting unit fishermen changing CenTrust potato reacted Marin Mario Guzman ties brokerage milling 1105 understands Engineering Matson income briefly Grafin gathering downward loyalty nights therein 8.3 8.2 platform 8.5 million 8.4 8.1 Berlitz relaxing Trig Bottom warrants mainframe Maria stopped Susan warranty tied Use Cubans convent Garth Seabrook criticized secure Club Dallas-based furrow Taxation remarkable tide takeovers advancing phony overheard remarkably characteristics promoters Cemetery tick Gibson compiled Theodore radio income-tax roaring Japan phone Westinghouse bothered asbestos undo barred enable frightened radar Partlow discernible attitudes specialized explode Lieutenant IFAR specializes year-ago loudly carriage Stein Power literature chose angered middle-aged barren injured formal hiding Arias Brazil Waertsilae Rothschild equity-purchase Following 200,000 Conasupo barrel highest convert insiders descending Philippine March affair receptor Television beginnings choking invite Lodge Nashua definition Machine Yamaichi Mexican Gansevoort pipes Jews myths municipal started hesitation lawn Nelson Prices budding Mitsukoshi supports accounting explained contemplate Dodd Utilities Two 600 principal laws sealed slow Contra Aviation violating 6.8 Nothing choke Chuck 6.9 Jean converting Parker withstand stringent requested colleges bond-equivalent review maneuvers Gamble peak Argiento Wilbur limbo Chestman sufficiently Violetta investigating unveil evening logistics checking targets clouds allies Scientific limbs perjury gains lazy peas Anheuser anti-abortionists award abroad aware Amira Fernandez comfortable Nikkei comfortably would future consisted approximately soared Stearns critics stress Wathen bedroom Source 11.7 differently 11.8 Dogs doing polished slug 11.5 bonus 11.4 Finding dread disk-drive straight Resources taxation slacks clothing Treasury intentions dealing adapt financially sister 6.2 6.3 6.1 stationed 6.6 6.7 knocked 6.4 6.5 defendant disciplined Oliver uniform makes maker swung stimulate Insurance Does meeting aiming dripped aborigine street rights Giorgio vested blaming rested Dole ticket pleasant Backer limit helicopter sentencing Hoelzer Dearborn flew yelled Sharpshooter fled Monica Ekstrohm Pfizer rumored attorney VAX O'Banion diplomats breeze punishment interval eleven flared capitalists wound Montero chicken principle massage solve anytime flights FUNDS wakeful banner parlor immune absolutely pages Octel mourning appearing banned lard telling German cease-fire revisions prowess last Bonds atop sometimes respects carpet resembles Marsh Pierce regularly Russian participation phrase lash investigation 6,000 mandated Bakker flaw Grosse flat unchanged Pitney Jeff Jeep flag late tub attendants eastern citizens Klein lawyer brakes Sunday Marty colorful copper farmhouse participating 57-year-old Fifth Cities inability extent seemed bargaining Leipzig sexual bondholders Shopping extend violation fabrication buoyed 650 nigger human two absorb Carlos interviewed resembled summary Freind Stockholm chatter Stock urgency Where Holden baseball humor McKinney Philip homeland option urges books Aeroflot shied trend Eurocom Superfund Mass. Adm. windows devaluation When investigate urged lobbying Canada forestall floor leading sponsors undertaking recommendations scuttled shaving try assumed shrewd rebels sensational Atlanta-based Canaan Wilmington assumes data Medicaid calmly Posner date Warner-Lambert arms-control entrance witness The hired earthquake-related Thi widow 1960s older hires Wisman confinement intersection League over-all Information replace expense dash showroom inventory Goodman laid Tim Kohlberg respect hurdles instructions attend lobbyist Vogelstein destined Arthur attacked happily dark beeper swallow Milpitas gripping dare collapse Beauclerk four-year-old alternative listings architect unpleasant reader Prospect Chung toe co-chief spree rocky land turtle observations Merchants pedestrian toy Technologies undefined ton rocks too top Adds lenses Macneff illusion agricultural Mason needed months flour Lung lamp slew blankets shift sergeant investing sinister engineered tie Grigorss saloon strewn shine tin Lloyd maintaining tip UPS championship filled center chancellor slim vacant patrols damp lugged slid vehicles toothpaste armed insurer Too Coca-Cola Top Tom alert awkward rewards damn Declaration Toy disagree concrete booth flows adjuster record insured promptly trees reserve boost buddies unfairly adjusted boasts ratings Shafer 10.5 budget 10.6 might 10.3 10.4 10.1 10.2 Olivetti 10.8 UV-B reviewed dwelling Austin US$ presumably 30-share campaign Luis boots diplomacy spray Snow speaker slip USX endowed awake slit 7\/16 darling Bill USA Aluminum spirit soybean USI Cadillac ten Try meanwhile pioneer five-cent What rounds haunted tea impact Kent dedicated candles civilians Mobile Founding closed-end shirt Walnut Lilly antiseptic 7\/32 Metall Deputy lack labs default await hunting subjective monetary treat Suppose draped Kemp prompted mornings Florio order Innopac recoup appellate Holding Hollander ships slot lagged Aristotle backgrounds the flamboyant grounded ending Gerry bronze classroom Runkel scratched helplessly blonde fortunes administrator cluster lady inhabited Andersson plastic institutional Volkswagen incurred U.K. answered pleading celebrity deputy ribbon Ala. generation B.V. asset troubled told Utility Plymouth toll authorities troubles wherever Buffalo dynamic promoter tomb truce moral horns truck Quick renamed piers promoted grew smiled Norman whack ignore muster tone injunction illegal suffer smiles taking bureaus hard-disk licensing expertise short-lived legend library advice resources fancy Bang-Jensen exception tool took self-conscious infected first-quarter policies marrying Blue Reynolds hesitated internationally priority tony plaster stating motion tons streamlining tensions involves U.N. tops station leisure narrowing criticism overalls Dorfman massacre mistress Russell involved polyps Ratners refunds treasury Democratic grab connect horse UBS-Phillips Goldsmith Carolina hacker disturb Nuovo knelt Alar Alan peasant dismayed cellar disruptions Simmons Nogol gray torn amusement shelters tore peace nursing lower Shareholders liability distributions Fleischmann village wholesale bones preamble tanned BRIEFS bonds health astonishing Wild Marlin Worldwide Will doubtful branch incompetence upon turmoil scattered uncovered Economists disclosing trivial Lufthansa Village MeraBank express decision brandy 10,000 425,000 brands destroyed Interest eventual endless painter Rainbow Picop boosting toes suggestions kronor 300-day clears freed Empire shortages swiftly truly Herman Christ Akzo Schwartz entered timetable shave sisters exceeds petrochemicals aimless writes writer penalty younger darkness motion-picture characterized painted clothes hand-held philosophy Odeon finger trunk diminishing Cobb involving surveys elevated greeted Citizens manipulate Coal disease grip enduring grin grim recital sight airwaves grid develop upside poker generating paradise regrets tears poked looked Conrad naked swinging succession writings maintain flow coated exactly Appropriations designers movements signs Laura nowhere laugh MGM\/UA part-time reasoned pricings Taipei mergers teams system innocence documentary deadline buddy day-to-day lies earns armor advise Coda Finnish intensify Code Control Foreign lackluster life significant graduate truth worked worker Alma Quist Murray Cody trust guerrilla Garden Mahfouz 4.25 works Quite reliance lied Fidelity subsidies Would artificially historian Bronner fabled world Bradstreet Quint Col. Sergeant Stephen become 4.75 Golden 13,000 Goupil necessarily Reflecting Buckley drawings decades Brussels considering Barclays demand exclusively indexes Coke Also tourism battled Penny tourist Daewoo Quina Hyde Furthermore Maxwell Giffen battles early discretionary ailing softly attempt fleets spared indirect performance tapped successive mercy Rate monitored delivered nervously Cable Erich bending vacated personally seven high-risk disdain artistic cable-TV Soviets birth Savings Bankruptcy imply After sadly reform carbon performing Conn industrialized grove Sept. topic aborigines like relieve U.S. Hitler grown unexpectedly Rosen Cook travelers outside reminder Fernando link constantly grows line Edythe Apogee 4.92 words Cold reminded Cole citing maintains glowed limp flip write-offs applying dissident donations Alex inventories signaling Come CORP jumped Alec Keep tour horror afterwards Rank plight pungent honestly Rand habits anchor delaying function contributing Corr Corp budge Merck outperformed yearly Ohio expenditures Pioneer soften dwarf lowering softer dogged lift town Pinnacle gross desperation parked Spencer Yield amassed noisy Geely drilling chimney healed Eyes students sixteen Upham indignant desperately grievance fools York-based teach noise richer Kean toys group Cos. freedom featured University racked located ingenious contribution features Commodore intact Victoria moving cleaned companies SOYBEANS two-tier fighters cities cleaner Transport bankruptcy explain acquisitions microprocessor Details ocean handling plucked naive Twenty lasts debris programming Accepted Planning cookies warnings materially minicomputer Duke shortage keyboard Allstates announcement compliment postponed Baird blocks talked wilderness hedging elderly mushrooms warrant Contras stupid impossible Duff turnover Beyond hosts deceased paying Vienna tenants longtime subdued agent refugees bastard tooth recalls Glenn coarse Equitec carrying arguing catching Resolution consolidate D.T. Aside protesters dimension Edwin Malcolm doubtless concert scorn stations Movieline collar concern marines score persist bizarre stealing birds council sexy curtailed Perlman weekend selections cradle inhibit sexes worth branches unavailable ecological Studies wagons sculpture Asian Texans semiconductors launching Virgin Blumenfeld sworn Hoffman pumped spectacular clippings merge Common capitalistic hammer mired apparent allowing CNBC unpredictable cooking Earthquake scout bombs Their Sloan LYNCH kindly 39,000 Polish supporters qualified Cypress replacement cause testament Fitzgerald industrywide Devices permit Vickers beloved shipping Music sets chattering faults undemocratic mentioning favorites academy describing mother Corp. conventional half-breed Milton Market release overcapacity William mining parity concept Pearson scope becomes suffered real mutually considerations Southwestern read apples colored insider-trading Orange rehabilitation abstract Rights swelling worst coach rear reap Benjamin merit worse away Scowcroft sprang sophistication remained Corps worry heavens cleanup Vietnamese These Corry receiver Seventeen received playwright ACCOUNT Fighting France admission receives Fruit Messrs. happen white-collar piece granting disturbance differed shattered Annualized There Components Isaac Wis. centerpiece Posted fellow Imperial pesticides invitations common offensive daughter desks Ciba-Geigy worlds estimate resulting Circus Summers whenever With direct impersonal arriving Okla. absence later hampered vegetables aftermath Franco falls decrease caffeine-free questionable abrupt drought commit hovered instance Wine hitting TRUST household associates willing traffickers charming Rankin associated Ehrlich Weekes Selkirk Michigan Video clutched crossing humble Thornburg memorable activists circles Vesole complete companion clutch Specter tractor Shortly outstanding watchers endlessly ominous rein circled expanding recovery benches outdoor grow service Melloan claim swore ledger selfish wrists venerable corrupt conceal colonial false weather rubbing Bloc prevent Hudson ceremony applause superpower soldier bicycles criticize Latin Policy nails language Carpenter unconsolidated long-term dreamed Rates separated Along probe Ventures Rated agreeing rent knees contracts Lawrence Police Please high-pitched Advancing concede rely ankle fella Alfred Hungary Broad distinctions directory Earlier summit directors Diana spontaneous filings renew transformed Majority tools Postal halfway Diane ACCEPTANCES complicate Dunn class northern winning urgently ambassador Later Phil unravel Venezuela rest machinists clash scratching C.J. Stanford Albany outweigh baked coast Brody high-technology triple coalition Grenfell Christie Hancock tortured gesture coats Genetic Highlands a.m T-bills skipped Stevenson Nashville entry renewing tentatively Consequently crumbling desktop resale creates smoked Rapid Cincinnati ironic subway compared Mercedes-Benz created sympathy salary Kurzweil compares Staff nickname immigrants Legal respectively overcast SciMed developing-country Bristol-Myers borrowers Deltec bit foil sloppy Wheeler urge nephew Gilborn sick Boies bin big muzzle counterparts drove installed 12-year interested 2\/32 concerned side reassured Cooper bastards 4.875 Alley keys graduates burning Shannon invest picks mortality Allen strongly precise melancholy Laband Polaroid deregulation visible Wally hinted Hungarian Florida Utsumi Drew planet graduated Side perspective Quayle planes Stacy Perrin Burmah Visa colors crack Wildlife foes utter bleached destroying sign gotten Jane serving sigh obtained salami Kodyke measure near-term exercise annuity balls invent statements built-in packing Average nation-state facilities Macklin double-digit recognizable Tenn. taller undermined starvation Jan. forge saloons Allan nuclear motives patience tenure Stocks box youthful bow boy Aaron refined vibrant Jake overhead awesome desperate bookings nullify raider Rebel aided 1,000 diagnostic Having ban final bag career Herbert hopes Cambodian bad Dominion Nature aides prone mistakenly Jastrow bay siege hoped colony Pemex bat Lauderdale bar foam Plan Manic unbroken tropical proof holidays cartoons Toronto-based normally gossip supported dimensions butt hiring denies kept enthusiasm 156.7 beautiful exceed denied exclude brings scuttle complied fantastic dioxide force fishing closely finds slopes tougher indefinite Within Pendleton difficulty Denny neighbor Jackson Manuel disturbing buzz exact House required beg bed fines incomes enter Wales maternal requires depressed roller-coaster notorious fined on-site bet peeled Greenberg enchanted prose husbands Football surely Realist meaningful Educational quick 40.1 Chicago Fargo roller contracted prosecutions vacuum bid revenue denial businessmen Shevardnadze added rolled embarrassed propelled condemned Jamaica Carroll four-year buys Education cracks objectives competitive proud consistent energy Spelman R.J. Funding Sens. snapped yourselves interruption tumbled impeccable integrate prove heads Heavy Computer Procter bunk quiet Mamma registering Charles temple goin colonel Donaldson Toubro smoothly Class Todman crane Vincent Shapiro complex priests Sherwin financiers R.H. plants sought bump modernize 62.5 Clara businessman Metal moons proxy Clark Airlines golf gold OFFERED site unfortunately deter R.I. bull bulk indications Kleinwort sits bulb writers unload waiters bouncing bust busy good coaches metal vagina Drug Navy bush closest modeled incorrect irresistible leather crash Automotive contractor electric incompetent bury diplomatic gone humans narrowly refugee five-year leaders economic difference Bong syrup tremors Lybrand Bond Bonn burn coffin immediately car cat overbuilt tangible can cap Beatrice children Nate cab Ching advancers arose petition celebrating Imports homely China triggered naming Costa killings budgetary Completion pullback lured reference wrecked Century freight Trecker celebration Treaty pistols somewhat competition electronics underwriters craft Mixte predictable imperial Municipal mechanism Strange Peltz Child baskets Chile insane Jazz bugs Jason perilous enrollment thereafter quivering disclose obstacles Born Carolinas Bork Avenue heights vodka planning Arabia Book annualized reeled London-based outline Fathers buds Auvil non-profit smoothed Quantum eaten shouted opera silk prelude Lyford mail-order romantic Jayark Comair friendly vaults Kentucky bug improving Drexel but Charlie bus buy introduce Duclos raising existential used resident longer gown admired Lipton situations sins connection tongue stronger longed narrowed sink Skyros picture stabilizing nutrition stories sing stretch hourly relatives exposure Bible appalled connecting quirt auctioned movies boredom calling ruining Gavin Chien tones Chief narrower Both funding beginning demanding Sinyard excitedly foremost oxen opens inheritance quite Energy uses kidney user fledgling fragrance courtroom intensity entertain failing panting Washington-based departed government Louisiana exporters Lolotte promised mood causal supplying pragmatic sagging projects blowing independently aim explicit promises Reserves retain air embraced Threlkeld retail mold raise exclusive marched exercises Morris aid embraces Hutton zing rewarding attempted repeating oddly Compaq left sheep sheer painting sheet shutdown exercised intensive Tesoro prescribed shah dapper chocolate Reno cocoa Rep. Newman legs casino ago discrepancies tightly illuminated Satellite dwell rails tactical disturbed chilly Lynn Alabama 50.3 exploring spinning Hurricane choosing any dubbed cost-of-living Figures Presidents seeing bundled willful strictly public-relations lent lens samples and Besides Wachter Fiscal diversification phase Institute lend Nomura sensation existing integration generally nicely prints appeared Nekoosa all quaint houses studios yields speed Brokerage Orthodox shed reckon topics housed racial declaring margins workout Reed Montpelier gallons legislature cured hurdle activities hospitable regime Lyondell move Deseret proponents Frankfurt Temple prostitution ruble committee committed spreading bites reputable month oversight Dreyfus Corporate Canelo region Others reportedly dominated emancipation most Shelley workplace utmost commuters patients Troubled quarters southwest widened curbs CPAs Kan. assurances Sydney entitle drying Times crawl prevailed illustrate aggravated violin additional ambiguities bitch sometime earth scholar Kane accountability studies Ready caused more relaxed age crimes value Tony affidavit spell lover loves scream attributable loophole Facilities chloride backlash Cray ceramics Gulf Lionel Robinson expressions studied approvals matching representing unexplained dominates thoughtful causes levy Touche moon Convenience ethics Gargan add masseur Napoleon playing resentment materialized achieved expelled crazy panels Schwarz Asked Purdew spent ads lest less double-A those dependents dispose loved ace customers devil mahogany spend felony tighter meadow tighten Grace suspected act lets cosmetic billings Christies normalcy Lauren polyethylene Laurel Rorer elevator lingerie veteran Obviously suburban redcoats upgrading buggy rushed Lambert toad strips owns choice robbed reasons Seeing personal racing blamed Goldman axe ability bipartisan Katz vocal RATE Jack induce blames settlement Gruberova reassurance Acala seconds string stripped Freud keen Kate frighten Russia Harbors brokers keep afford Seoul proliferation Kerry Prof. bloated outright Christian General anti-abortion Bennett Deacon Presidency dessert leery establishments finish Real homeless Town Stark militia Read Azoff 17,000 impeachment faintly Managua Byron Lawson forthcoming Seward shut Midler StatesWest four first-half confession defense sincere bankruptcy-law accord Rebs leftist tankers Byrne forty protects insistence Cambodia State restrained mighty praise increasingly grades momentary forth countryside shell Thanksgiving Trading relax Indonesia Publishing restraints dealer circular are billion-dollar Somehow initiated Failure shelf arm occasions fork form eased exclusion Waiting art Assistant revamping sturdy fort surged Randolph Brooks disproportionate ask Luzon ship 1-2-3 personal-injury stranger mode typical sections outrage money fore Fremont acquire centered mock apt Hotel insurers Mickey owes point doomed bank-backed devise shaken exceptionally owed luxury-car outsiders shop supervisors foot gyrations show three-year shot fool dismal aggressiveness shoe except Kremlin Leading sunlight food left-hand Gladdy Hohlbein Palmer favors philosophical lousy informing testimony excess ass fixed-price racketeering fond actuality Ethiopia fresh ate forms Marriott Connaught folk Ortiz Yields Boise fold Western Nicolas enforcers Cruz realization shortcomings negative occur bureaucrats That Tampa refining angrily Short lukewarm ingredients Stevens dripping movement bought borders B'dikkat Among LBOs essential texture deadly Safeco Intelligence paradox touch codes psyllium attacks array justify Jenrette Shops fantasy Jenkins epicenter tragic demanded classes AIDS hazard Delhi prospects tasted Communications bivouac refinance tastes Pete appalling designing moves precedent stemming consumer Acquisition consumed kicked Fireman George Someone taboo Inspector execute Fried Monmouth pickup watch beverages yesterday canvas fanfare Comex sluggish rattle rays frenzy tumbling often linking tough constitutional ideological hepatitis cumulative sweater justice Pinkerton through frozen Hyundai Peru classic population testified bubbles layer Merieux equal destiny Fairfield Della moved relations peers fixed-rate dense 1\/4 1\/8 Barrett workings novelist honey Madden permitted rank social rang recently empty reset rand 1\/2 nations Nikko accelerate differentials Register apprehension Republic assortment hoarse burglary bounced AZT Mahler McFeeley antique waiver retired Penn Euro distance rolling awaiting riding fiction rape note Quebecor water vintage faith movie incapable Maggie Nugget unknown Claudio sympathies nose patch Packwood apply disappears Newton newest furniture where chemicals correspondent indicted postpone rare announcing proceed wonder none litigation Pedersen Eduard administered patents nonperforming Gardner shipments detectives countless humiliation clambered arrangement Apart Shield Randy Fisher apple restore speculated turbines investment-banking expansion noon Delta Pulley subjected circle northeast unfair guided rate paths November Tobacco Colonel Competition premature economically Commercial fourth-quarter slowing entertainment balanced rash identification spread 16,000 technique faint leasing limited Boveri scar Gratt temperature basically yeah Capone year chaos selling Safety Richardson observes Seagate observed furor travels unspecified dangers attic bureaucracy plaintiffs fails HyperCard chase exclaimed slower substance viability Bobby chickens blindly slowed emergencies sentimental picket franchise mound Flying borough teens charm ABC ABB sticky picked hikers controllers mount transplants Vancouver sticks towering gardening chart newspapers garden ABM begging escaped Tandy adopted Monday Thor Thom ordinance ranch Therefore successes mouth Adams forest tactics stared binge subsidiary engagement regulate quarter advent valid Interior currencies mouse socks addicts Includes overlook whispered Peck granite Refcorp Rev. engineer Paxus Peat Southam fragments Northrop clarity performances surface articulate revolution vigorous towards guys elsewhere mill revision significance ringing accepted 190.58-point know-how milk mile mild alleviate Perry tissues sideline Joseph Students teeth Rural Antar protesting bubble collectors soldiers probable jungle conclusion massages Odds Management range B-2 Grand plead This escape foolish mink attitude Criminal Grant genuine starting probably mine mind billions engaging authorized slowly embarrassment divestiture mildly rests mint Linden confidence Science process chair really jitters chain successfully Francisco Gramm indifference jittery Queen goodwill offshore Coniston obstacle AMR courage AFL-CIO ghastly accelerated scripts tribunal AND ANC Southeast Sells charcoal contradiction Laboratories coward commented ranks Gonzalez faltered yell crimson They presentation thick Hampshire afflicted Then Amoco apartments Island opponent quota rattled Caterpillar Ferdinand quote suitcase volunteers terrifying inflation-adjusted goals beside County enlarge dropping shoulder costume thief maneuver miss assisting mist total photograph fret vetoed shipment privileges pesetas free search Stanley Walitzee Mack discharge repaired discrimination comeback whispering basement unnecessary parent Capital Savaiko Macy Alicia Made editor Third scenario Mirage instrumental adventures seating privileged burgeoning divorced computer Vegas poised Isabella thigh Quinlan discarded disguised locations blasted refund converter statesmen convincing desires Goldberg monopoly sand sang Nguyen Marlowe anxiety converted reminiscent desired sank cautiously highs insufficient 100-share altered possession Segundo fray Morse publishers constructed curiously same completion sleeves Italy profited pause suspicion affairs half-dozen Darman dealerships claims think winding Johns handicap sale similarity merits Altman flies thing salt Menlo mumbled sake intangible Nazi lawmakers unprecedented longstanding Main monitors Horse Chiefs questioning Superior Watson Mail overruns sides two-year completing restoration objection happening proposes reservations proposed technicians redemption cavalry Sachs tanker evasion curb Chemical relieved cure delinquent says tumultuous Customs mayoral forgetting hears Calenda heart measured third discount anti-drug Bicycle measures abandon Oct. glossy Housing unexpected Hardly heard buck Machines unconstitutional dollar cuts Reproductive Pennzoil Philadelphia consecutive hoofs socially machines chemists Boeing differ Shaw proposal healthy Letter negligence miners personal-computer save integrity illustration NCAA chromosome pitching refuge barriers mice buffer buffet Marous developing certainly objective Thus toppled heavy operate Western-style Thelma Think proteins Boyd stumbling Hebrew Shea Boys from anthrax longer-term durable hurried prestige Protestants Honduras alligator supportive prevail Metromedia dwellings between Gallery commanded twists disclosures governors important conversations intent ambition departing commander hidden Langford merging themselves intend found shippers rage floating-rate assure phenomenon unlocked Matt dying preparing shortfall Tire multinational honor undermine Hawkins conditioner astronomy Combustion Mass 5.25 complain split face wheel Nearly prohibit surrounding gunmen survive motor Monsieur possess drowned zero-coupon cult Washington factor snack Renault Docherty Ship Egypt billing exaggerated fact subsided prompt 100,000 minor rake Vila served Interstate Sports platoon Craven alley dissolved remodeling Airbus slavery Semel cellular Connie inherent certainty dispute billion poison lavender steelmakers medium-term vicious commercials Arkansas killing devoted raid Containers Doyle onerous tube prosecutor classified supervising bucking compulsion over-the-counter exotic knight facility emotions rail Heinz rain disposition Gordon consent powerhouse cups Freeman Franklin muscular misconduct waters Suisse supporting touching drops serves specifically skills waste chunk marble Lawmakers LATE whiskey 19th sober supervision disorders Ever uneasy fail directories Even youngsters prevention NCNB shuddered satire preventing housing hideous Show minister Conner table Shop create fair Roper titanium experimentation Series Pharmaceuticals snail cried earthquakes Make position Mann qualifications pressed encouraged settlements Aoun Many Intermediate cargo Manu diseases Switzerland character minds daytime Time dates presses long-distance fake aging Southern policeman cowboy briskly delays Conn. acknowledges Owners Vice saint suspended Brands secretary cares snake industrial article acknowledged fall strapped Styka Burke diplomat Mama Litvack preclude 5.75 separating rack race Retirement cared fame internally prosecuted undeveloped positive Initial cards mines Fritzie Capitol discover dated tune A-Z Serial clerk conditional encourages fighting Sioux efficient overboard 5.94 intention allow Mary Marx fans Mars recent View Mark officer offices Producers readings Bobbie Marc perfect lists wheat photographic Ocean separation moderate Payne woods Bunker nonetheless continue industries assume Burns buckled portray Remics participants joined Neal chewed spacecraft Memories Union neighbors Jerusalem Midwest smooth realities Cutler affirmative Work Piepsam callers Somebody diabetics scenes recognize lived ensure member scholars waves court-appointed low-sulfur nerve Sterling Houston-based standards register compensation utility Neb. waved introduced Colombian Castro formulated dialogue firms Larry fate kiss founded terminal diversion Bros. invasion overall devote deteriorated Hammack trains founder Very yearning Seita convicted detached cream weakness rally rising disorder accustomed names fast Joint insurance named 400,000 Bronx slashing evidence implies S&Ls fare volumes afloat pro-democracy fast-growing farm Baltimore creek buzzing implied Pittsburgh trails Enforcement BellSouth winners anniversary constant lessons indictments worthwhile Christmas thousand obliged sparked RATES caring scented presentations politely Sadie aggregates stroke convey Wilmer Trust shirts provoked Worse consists Wolf mentions carry holes thwarted entering dispel distribution Every unofficial creep Price Worth Gelbart uncanny huddled flopped 19.95 holds apron pardon getting ministry aspects England clear carts accomplishments clean guiding 26-week Holiday John-and-Linda waiter reactionary diversity unfavorable waited distinctly Lipper stroll Andy Neil closing stated Cuba Rootbeer fired Although gunfire fires Carson schools family anticipation copying loyal argument asking minus consist paved Yorker besieged Wood depth condemn discourage strong aircraft Trustcorp engulfed lives liver invade encouragement startled page-one feeding writing McDonnell Ptolemaic Brown Ivory ferroelectric six-month seal Administration automatically 40,000 Freddie Appeals Southmark Toshiba Sidley Comptroller Hollywood notwithstanding rendering Maidenform Fresenius motel anticipating punishable convenient generations licked Terry responsive BPCA blueprint distributing forecasts hearts complaining inevitable uncertainties less-developed lungs manage hung seas seat bomber hunt tarnished Murphy along commission alone bread-and-butter reviewing Brokers static Signal waiting short-term Anne unnamed U.S.A. sizable tangle inevitably inward Beach Maine examples fertilizers territory Association strode states captain consortium lengthy license Dassault International crept Willis holder recapitalization Trump plaintiff seed feathers seen seem material fitting seek Prime continuity Governor 66.7 Decker cousins actress harmful turbine Prior News meantime frontier trucks unbearable curbing sees comply lunch arrangements select Shanghai explanation Terms planets world-wide twirling Fortunately crest lifting grenades expectation -LCB- suspects troop Harbor Asarco federation marking nationalism fabric opium thrust regular percentage camera maturities WHEN regional Nev. Rockwell person reducing deficit 50-50 Gaubert detailing Carter calculated Wachovia existence ever-present Institut pledged tree Pepsi casting aspirations musician heels low-cost Things Maier crews Bernstein flushed Planned curtail inappropriate forefront curtain huge specter Ryder logical Nadir Dozen funeral Arabs trembled overtures countrymen improvements Coors mailing anarchy Seng chartered recommended self mortgages impulses fairly switches exceptions sell capacity stranded aloud prospective uncertain switched cases Ralph bogus resuming periodic Specialized Edward Next Feeling freeing prison nickel calculates glowing 1.875 allowed one-fourth casserole send Tiger ghosts Unice drawer Anta beaches sent timbers painters line-item Rally Sen. Roman utilities Curt penetration Business status 3\/32 plunge Negotiable trap seized biography disappointed junior sullen statue season tray Today proprietorship wearily Prize stiffened passionate inflict penetrating Balzac Inside devoid safer temperatures troubling Lowell detect advisers merchant merger metaphor inquiries gaining cigarettes aching Petrochemical first merged controlling retreating revelation heated adopting savings-and-loan parcel invented heater brow tremor Thatcher achieving Norwegian Bradford stress-related entertaining Patrick sympathize Nabisco Silver hospital introduction Central seated laundering guns leave Arafat disastrous River relationships ministries spirits adoption wearing Cowboys Commission retailers sounded starts lagging exists Blatz successful maintained Hawthorne guts Coffee successor housewives fiscal However least closings Strong Alto revealed spite disposing Henderson Mountains distressing committing conduct pasture unlike legendary Ramey realty cheated seldom consequence forced depths financial imprisoned bishop reward outlook unfamiliar learn Quest forces posting lease Shaefer Finnair mobile remember compounded trusted airplanes inferior correction 19.6 Gregory 19.7 gubernatorial trustee bargains lounge trip trim refusing treacherous Telesis eroded ounce upward Anheuser-Busch Mosbacher emotional bottoms Seth sovereign Addison employment automobile determine depressing Before lire Since heritage Parsow espionage futures spiritual repay confirmation 13.50 convinced monthly reality depression intensely pressing Blair Great biting simplicity thinking rebounded lips financier commercially revealing reporting sellers Twelve development politically Blake Morrison streamline spire department-store semiannual internal realism ideas lion partisan schemes blooming distorted Amen subsequent ideal developments harshly true Amex Antarctica players Ludie detective realize Ortega fraud military directions middle-class poems earliest 190-point imbalances Taiwanese Traders Futures homer homes credit grounds Kevin live fleeting amortization spill balloon Dayton liquid huts Greek Green apologized adjusting potatoes improve Broderick throwing Phillips Blinder continuing mineral 20-year suspect underwriting customary Edelman Circuit envelopes Motor list p.m. section hurt Donuts Camden slump Medicine Stadium corners earmarked villages Underwriters ragged 1970 1971 financing nine-month 1972 Krasnoyarsk subsidize 1973 1974 1975 brutality 1976 1977 1978 occurring 1979 signature stiffly compost 1990 originated 7,000 1982 1983 1980 1981 1986 1987 metric 1984 1985 independence virulence 1988 1989 shade chewing Hanford trends silent frank Major 550,000 Deukmejian trendy Works 1995 1996 1997 leads ambitions 1998 1991 1992 equation shady Broker 1993 1994 Kodak reply rallies earned franc World 1999 extremely reverse territorial judges employ shaft Discovision Karipo judged Mount pillows bran Puerto asleep unprofitable kick portable unconcerned somewhere payout student ordering connections UNESCO Alice however Falls rallied maintenance respectability kids physically frame 2-for-1 bucks widely Several Simms aftershock enormously repel cracking inquired clumsy liquor foreign-exchange existent Rice Rick Rich perception catch breakup widens Amid Rica incomplete brooding commissions Garcia hoping cross-border NATO Department conflicts Hunter bred inched responded wonders bikers NASA inches Simon success Zion tariffs Linear poultry Harrison imposing shake audiences Meridian brew Knight Leigh-Pemberton shaky Rico 1900 topping bargain Dresdner 1906 shall ambitious 1908 fence Steven creditors greatness frail reaction shame hesitate collaboration Ohbayashi reviving hospitality Parliament launch encountered tumors momentarily king quarreling kind version disputes Exchange command disputed labeled 1920 Bros figured brim jealousy Large cater reacting 1927 gloves figures research shouting Beverly Executives 1935 1939 Jefferson clearing kill fists 1930 glared Valdez woman hazardous per-share 1947 1946 1949 researchers leaks outperform languishing tripled criticisms shape 1943 1942 Stevie Flannagan Officials fingerprints headline 1959 1958 1957 direction lawsuits 1953 undertake presumed 1952 1951 Chinese 1950 miniature share knowledgeable elbows printers Casualty stresses skinny Negroes directing environmentally 1967 sharp 1966 1969 1963 1962 1965 flapping stressed inventor women 1961 1960 Czechoslovakia hedge massive popping decisive districts fiduciary claimed apache-opennlp-2.3.3-src/opennlp-tools/lang/en/tokenizer/en-detokenizer.xml0100644 0000000 0000000 00000005161 14523004075 027353 0ustar00rootroot0000000 0000000 " ' . ? ! , ; : ( ) } { ] [ `` '' % n't 've 'd 'll 's 're 'm .org .com .net # apache-opennlp-2.3.3-src/opennlp-tools/lang/es/abb_ES.xml0100644 0000000 0000000 00000010461 14523004075 023535 0ustar00rootroot0000000 0000000 a.C. a. de C. a.J.C. a. de J.C. a. m. apdo. apdo. aprox. Av. Avda. Bs. As. c.c. cap. D. Da. Dña. d.C. d. de C. d.J.C. d. de J.C dna. EE. UU. etc. f.c. F.C. FF. AA. Dr. Dra. Gob. Lic. Ing. Pdte. Pdta. p. pág. n.° no. núm. p.ej. p. m. Prof. Profa. q.e.p.d. S.A. S.L. Sr. Sra. Srta. Ud. Vd. Uds. Vds. vol. v. lu. ma. mi. ju. vi. sá. do. en. febr. mzo. abr. my. jun. jul. ag. agt. set. sept. oct. nov. novbre. dic. dicbre. apache-opennlp-2.3.3-src/opennlp-tools/lang/es/parser/es-head-rules0100644 0000000 0000000 00000002722 14523004075 025556 0ustar00rootroot0000000 0000000 13 SENTENCE 0 PREP SP[CS].* CS.* GRUP\\.VERB S SA COORD CONJ GRUP\\.NOM SN S 12 S 0 PREP SP[CS].* COORD CONJ CS.* GRUP\\.VERB S SA GRUP\\.NOM SN 22 SA 0 NC.*P.* GRUP\\.NOM \\$ NC.*S.* SADV GRUP\\.ADV AQA.* AQC.* V[MAS]P.* V[MAS]G.* SA S\\.A GRUP\\.A AQS.* SN GRUP\\.NOM D.* S RG RN 21 S.A 0 NC.*P.* GRUP\\.NOM \\$ NC.*S.* SADV GRUP\\.ADV AQA.* AQC.* V[MAS]P.* V[MAS]G.* S\\.A GRUP\\.A AQS.* SN GRUP\\.NOM D.* S RG RN 20 SADV 1 S RG RN SADV GRUP\\.ADV SP[CS].* PREP Z.* AQA.* AQC.* S\\.A GRUP\\.A CONJ CS.* SN GRUP\\.NOM AQS.* NC.*S.* 8 SP 0 SP[CS].* PREP CS.* CONJ V[MAS]G.* V[MAS]P.* 20 GRUP.A 1 NC.*P.* GRUP\\.NOM \\$ NC.*S.* SADV GRUP\\.ADV AQA.* AQC.* V[MAS]P.* V[MAS]G.* GRUP\\.A AQS.* SN GRUP\\.NOM D.* S RG RN 18 GRUP.ADV 0 RG RN GRUP\\.ADV PREP SP.* Z.* AQA.* AQC.* GRUP\\.A S\\.A CS.* CONJ SN GRUP\\.NOM AQS.* NC.*S.* 23 GRUP.VERB 0 INFINITIU GERUNDI PARTICIPI PREP SP[CS].* V[MAS].*[IS].* V[MAS]P.* V.*C.* V[MAS]IP3S.* V.* V[MAS]G.* V[MAS]IP[12]S.* GRUP\\.VERB SA S\\.A GRUP\\.A NC.*S.* NC.*P.* GRUP\\.NOM SN S 5 INFINITIU 0 VMN.* V[MAS]N.* V.* 5 GERUNDI 0 VMG.* V[MAS]G.* V.* 5 PARTICIPI 0 VMP.* V[MAS]P.* V.* 6 MORFEMA.PRONOMINAL 0 P.* SN.* GRUP\\.NOM.* GRUP\\.VERB 7 MORFEMA.VERBAL 0 GRUP\\.VERB P.* SN.* GRUP\\.NOM.* S 9 COORD 1 CONJ CC.* RB RN SP[CS].* PREP CS 16 INC 0 S SN GRUP\\.NOM GRUP\\.VERB SADV GRUP.ADV SA S\\.A GRUP\\.A PREP SP[CS].* CONJ CS D.* 3 INTERJECCIO 0 I 3 NEG 0 RN 6 PREP 0 PREP SP[CS].* CONJ CS 7 RELATIU 0 P.* SN GRUP\\.NOM S GRUP\\.VERB 2 SPEC 0 2 X 1 apache-opennlp-2.3.3-src/opennlp-tools/lang/fr/abb_FR.xml0100644 0000000 0000000 00000014746 14523004075 023547 0ustar00rootroot0000000 0000000 a.m. auj. av. bât. bd. c. c.-à-d. ch. chap. co. coll. dép. dir. Dr. e. éd. etc. E.U. ex. fam. fr. géo. gén. hist. hôt. H.S. i.e. incl. inf. int. l. lt. M. M.D. M.D.R. m. math. mai. min. Mlle. Mme. MM. mn. Mons. mq. M.S. M.S.G. M.S.I. M.S.M. M.S.P. M.T. M.T.P. n. nb. N.D. N.D.L.R. N.S.F. O.N.U. P. p. p.d.g. p.ex. pl. p.m. prof. préf. R. R.A.S. r.d. R.D.F. R.F. R.P. S. s. S.A. S.A.S. S.C.I. S.D. S.D.F. S.D.N. S.E. S.E.C.A. S.E.I. S.G.D.G. S.G.M. S.G.P. S.G.S. S.G.T. S.G.T.P. S.I. S.I.E. S.I.L. sing. S.L. S.N.C. S.N.C.F. S.N.E.C.M.A. S.N.I. S.N.L. S.N.P.C. S.N.P.L. S.N.R. S.N.T.F. S.N.U.A. S.N.V. S.N.X. S.O.S. T.S.F. T.T.C. U.E. V. W.-C. C.G.T. C.I. C.N.I.L. C.N.R.S. janv. févr. avr. juil. juill. sept. oct. nov. déc. apache-opennlp-2.3.3-src/opennlp-tools/lang/fr/tokenizer/fr-detokenizer.xml0100644 0000000 0000000 00000011637 14523004075 027372 0ustar00rootroot0000000 0000000 " ' . ? ! , ; : ( ) } { ] [ `` '' % L' l' D' d' S' s' N' n' C' c' m' J' j' T' t' Z' z' Qu' qu' Ma' ma' Jusqu' jusqu' AUJOURD' Aujourd' aujourd' Lorsqu' lorsqu' Puisqu' puisqu' Presqu' presqu' Prud' prud' Quelqu' quelqu' Quoiqu' quoiqu' dizaï' Optim' Demak' Automobil' s ex- # apache-opennlp-2.3.3-src/opennlp-tools/lang/ga/abb_GA.xml0100644 0000000 0000000 00000005130 14523004075 023472 0ustar00rootroot0000000 0000000 tel. Mr. Mrs. .i. Uacht. m.sh. lch. lgh. Dr. uimh. Co. gCo. tUacht. Uas. tUas. Msc. Ms. Sr. Jr. Bros. fig. Jan. Feb. Mar. Apr. Jun. Jul. Aug. Sep. Sept. Oct. Nov. Dec. Ean. Fea. Már. Aib. Bea. Mei. Iúl. Lún. M.Fr. D.Fr. Sam. Nol. Ltd. Teo. apache-opennlp-2.3.3-src/opennlp-tools/lang/ga/tokenizer/ga-detokenizer.xml0100644 0000000 0000000 00000005371 14523004075 027330 0ustar00rootroot0000000 0000000 " ' . ? ! , ; : ( ) } { ] [ » « `` '' % .org .com .net # - m' d' b' mb' dh' lem' apache-opennlp-2.3.3-src/opennlp-tools/lang/general/tokenizer/special_char_dict.xml0100644 0000000 0000000 00000004442 14523004075 031064 0ustar00rootroot0000000 0000000 „ †“ » « " ' . ? ! , ; : ( ) } { ] [ `` '' % # apache-opennlp-2.3.3-src/opennlp-tools/lang/it/abb_IT.xml0100644 0000000 0000000 00000057100 14523004075 023550 0ustar00rootroot0000000 0000000 a.c. ades. all. Amn. Arch. Avv. Bcc. c.a. C.A.P. Cc. c/cbanc. c/cpost. c.c.p. Chia.mo c.m. Co. c.p. C.P. C.p.r C.so corr. c.s. c.v. Dott. Dott.ssa Dr. ecc. Egr. Egr.i Egr.ia e.p.c. es. fatt. F.lli Gent.mo Gent.ma Gent.me Gent.mi Geom. g. gg. Id. Ill.mo Ing. int. Jr. lett. Mo. Mons. N.B. n. ogg. on. p. pag. p. pp. p.c. p.c. p.c.c. p.f. p.r. P.S. p.v. P.za P.T. Preg.mo Prof. Prof.ssa R. racc. Rag. Rev. ric. Rif. RP. RSVP. S. S.A. S.acc. S.B.F. seg. sgg. ss. Sig. Sigg. Sig.na Sig.ra Sig.ra sig.na s.n.c. Soc. S.p.A. Spett. S.P.M. Sr. S.r.l. Stim.mo tel. u.s. V. V.le V.P. v.r. v.s. ab. abbigl. abbrev. abl. a.C. ac. a.c. acc. accorc. accr. adatt. a.d.r. aeron. aerodin. affl. agg. agr. agric. alch. alg. alim. allev. allus. alt. anat. anat. comp. ant. antifr. anton. antrop. ar. arald. arc. arch. archeol. aritm. arred. art. artig. artigl. artt. assic. assol. astr. astrol. astron. att. attrav. aus. autom. avv. avvers. bal. ball. batt. bibl. bioch. biol. bot. bur. ca. cal. cap. capol. card. caus. c.d. c.d'a. centr. cfr. chim. chim. ind. chir. ciber. cin. citol. class. cod. civ. cod. pen. cod. proc. civ. cod. proc. pen. coll. com. comm. comp. compar. compl. conc. concl. condiz. confr. cong. congiunt. coniug. consec. contab. contr. coop. corr. correl. corrisp. cost. costr. cristall. cron. cuc. c.v.d. d.C. dat. decoraz. denom. deriv. derm. determ. dial. difett. dimin. dimostr. dipart. diplom. Dir. dir. Dir. Amm. Dir. Can. Dir. Civ. Dir. d. lav. Dir. internaz. Dir. it. Dir. pen. Dir. priv. Dir. proces. Dir. pub. Dir. rom. disus. Dott. Dr. eban. ebr. ecc. etc. eccl. econ. econ. az. econ. dom. econ. pol. ed. edil. edit. egiz. elab. elettr. elettron. ellitt. embr. enclic. enigm. enol. entom. epigr. es. escl. estens. estr. min. etim. etn. etol. eufem. f. fam. farm. ferr. fig. filat. filol. filos. fin. fis. fisiol. fisiopatol. folcl. fon. fotogr. fr. fut. g. gen. geneal. geod. geofis. geogr. geogr. antr. geogr. fis. geol. geom. germ. giorn. gr. gram. ha. ibid. icon. id. idraul. ig. imp. imper. imperf. impers. ind. indecl. indef. indeterm. inf. inform. ing. ingl. ins. inter. intr. invar. iron. irreg. is. istol. it. ittiol. l. lat. lav. femm. lav. pubbl. lett. ling. lit. loc. loc. div. long. macch. mar. mat. mater. max. mecc. med. mediev. merc. merid. metall. meteor. metr. metrol. microb. mil. min. miner. mitol. mod. morf. mus. n. n.a. neg. neol. neur. nom. numism. oc. occ. occult. oculist. od. ogg. oland. onomat. op. ord. ord. scol. oref. orient. ornit. orogr. ott. p. p.a. pag. pagg. pp. paleobot. paleogr. paleont. paleozool. paletn. papir. parapsicol. part. partic. pass. patol. pedag. pegg. per.ind. pers. petr. petrogr. pitt. pl. poet. pol. popol. port. poss. pr. pref. preist. prep. pres. pret. priv. prof. pron. pronom. propr. prov. psicoan. psicol. qlco. qlcu. qualif. radiotecn. rag. rar. recipr. reg. region. rel. rem. rep. retor. rifl. rit. rom. scherz. scien. scult. sec. secc. seg. segg. sigill. sig. sigg. simb. sin. sing. sociol. sogg. sp. spett. spreg. S.S. st. stat. st. d. dir. st. d. filos. st. d. rel. suff. sup. superl. tav. tecn. tecnol. ted. tel. telecom. temp. teol. term. tess. tipogr. topog. tosc. tr. trad. trasp. ungh. urban. v. val. veter. vezz. voc. vol. volg. voll. zool. zoot. apache-opennlp-2.3.3-src/opennlp-tools/lang/ml/MaxentQNTrainerParams.txt0100644 0000000 0000000 00000003002 14523004075 026617 0ustar00rootroot0000000 0000000 # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Sample machine learning properties file Algorithm=MAXENT_QN Iterations=100 Cutoff=0 # Number of threads Threads=1 # Costs for L1- and L2-regularization. These parameters must be larger or # equal to zero. The higher they are, the more penalty will be imposed to # avoid overfitting. The parameters can be set as follows: # if L1Cost = 0 and L2Cost = 0, no regularization will be used, # if L1Cost > 0 and L2Cost = 0, L1 will be used, # if L1Cost = 0 and L2Cost > 0, L2 will be used, # if both paramters are set to be larger than 0, Elastic Net # (i.e. L1 and L2 combined) will be used. L1Cost=0.1 L2Cost=0.1 # Number of Hessian updates to store NumOfUpdates=15 # Maximum number of objective function's evaluations MaxFctEval=30000apache-opennlp-2.3.3-src/opennlp-tools/lang/ml/MaxentTrainerParams.txt0100644 0000000 0000000 00000001541 14523004075 026366 0ustar00rootroot0000000 0000000 # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Sample machine learning properties file Algorithm=MAXENT Iterations=100 Cutoff=5 apache-opennlp-2.3.3-src/opennlp-tools/lang/ml/NaiveBayesTrainerParams.txt0100644 0000000 0000000 00000001526 14523004075 027163 0ustar00rootroot0000000 0000000 # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Sample machine learning properties file Algorithm=NAIVEBAYES Cutoff=5 apache-opennlp-2.3.3-src/opennlp-tools/lang/ml/PerceptronSequenceTrainerParams.txt0100644 0000000 0000000 00000001556 14523004075 030752 0ustar00rootroot0000000 0000000 # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Sample machine learning properties file Algorithm=PERCEPTRON_SEQUENCE Iterations=300 Cutoff=0 apache-opennlp-2.3.3-src/opennlp-tools/lang/ml/PerceptronTrainerParams.txt0100644 0000000 0000000 00000001545 14523004075 027257 0ustar00rootroot0000000 0000000 # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Sample machine learning properties file Algorithm=PERCEPTRON Iterations=300 Cutoff=0 apache-opennlp-2.3.3-src/opennlp-tools/lang/nl/abb_NL.xml0100644 0000000 0000000 00000015141 14523004075 023541 0ustar00rootroot0000000 0000000 a.d.h.v. afd. afk. afz. a.h.w. a.g.v. a.j.b. a.m. a.s. a.u.b. Aanw.vnw. Abs. Achterv. betr. bijv. bijz. blz. bv. b.v b.v.d. ca. c.q. c.s. d.a.v. dhr. d.i. d.m.v d.m.v. dr. drs. d.w.z. d.z.z e.a. e.c. e.d. e.e.a. etc. e.v. e.v.a. evt. excl. fam. fig. Fr. Gr. Grs. H.M. Hert. Hr. i.c.m. id. i.e. i.g.v. i.h.a. i.h.b. i.h.k.v. i.i.g. Inf. Ing. Inz. i.p.v. ir. i.v.m. i.z.g.st. Kymr. Kzr. Lgrs. m.a.w. max. m.b.t. m.b.v. mevr. m.i. min. m.i.v. m.n. m.v.g. m.u.v. Mr. n. Chr. n.m.m. nr. o.a. o.b.v. o.m. opm. o.v.v. Onz. Orth. r.k. p. pag. p.k. p.p. prof. prof. em. resp. t.a.v. t.g.t. t.g.v t.h.t. t.o.v. t.w. t.z.t. Uitdr. v. v.Chr v.h Verdr. Verg. Versch. Vorst.d. jan. feb. mrt. apr. aug. sep. okt. nov. dec. ma. di. wo. do. vr. za. zo. apache-opennlp-2.3.3-src/opennlp-tools/lang/pl/abb_PL.xml0100644 0000000 0000000 00000006176 14523004075 023555 0ustar00rootroot0000000 0000000 br. cd. cdn. dn. godz. itp. itd. jw. m.in. min. np. nr. pt. r. tj. tzn. tzw. ul. dr. dyr. lic. mgr. p. p.o. prof. pon. pn. wt. wto. Å›r. Å›ro. czw. cz. piÄ…. piÄ…t. pt. sob. so. nie. niedz. ndz. stycz. mar. kwiec. czerw. lip. sierp. wrzes. pazdz. listop. grudz. apache-opennlp-2.3.3-src/opennlp-tools/lang/pt/abb_PT.xml0100644 0000000 0000000 00000356731 14523004075 023602 0ustar00rootroot0000000 0000000 a. a.al. a.b. a.c. a.c.e. a.d. a.h. a.m. a.m.a. a.m.d.g. a.p. a.r. a.s. a.-s. a.t. a.u.c. a.v. a.v.c. aa. ab. ab.e abc. abis. abissín. abl. abr. abrev. abs. Ã¥bs. absol. abstr. abus. ac. acad. academ. acadêm. acc. accel. acep. acepç. açor. acus. acúst. ad. adag. adapt. adit. adj. adj.2g. adj.2g.2n. adjet. adm. admir. admr. adv. adv.º adverb. advoc. aer. aerof. aeron. aerost. aet. aetat. af.o afér. afl. afls. afor. afr. afric. afrolus. ag. ág. ag.to agl. agn. ago. agr. agric. agrim. agrol. agron. aj. aj.te al. alat. alb. alent. alentej. alf. alfaiat. álg. alg. algar. algv. alm. alm.-esqdra alm.te alop. alp. alq. alquil. als. alt. alt.-al. altan. alter. altern. altit. alto-al. alus. alv. alveit. alven. am. am.a am.o amár. amer. an. anál. anal. anam. anarq. anat. and. anes. ang. angl. angl.-sax. angol. anim. anôn. ansp.a ant. antec. antig. antiq. antol. antôn. anton. antonom. antr. antrop. antropogr. antropol. antropon. antropôn. anu. ap. apart. apênd. apic. apl. apóc. aport. aportg. aportug. aprox. apt. apt.º aq. ár. ar. ara. aráb. aracn. aram. arb. arboric. arc. arc.o arcaic. arceb. arcebd. arcip. arcipd. ard. arg. arit. aritm. aritmol. arm. arq. arqueol. arquid. arquip. arquit. arr. art. art.o artes. artesan. artilh. artíst. aru. as. ascet. asiát. ásio-lus. asolus. asp. asp.te ass. assem. assemb. assim. assist. assoc. ast. astr. astr.f. astr.f.pl. astr.m. astr.m.pl. astrol. astron. astrôn. astronáut. astroním. at. át. at.o at.te ativ. atl. atlt. atm. atôm. atom. atr. atual. atualid. atualm. au. aum. aus. austr. austral. aut. auto. autom. automat. aux. aux.o av. aven. aviaç. avic. ax. axiôn. b. b.a. b.-art. b.-artes b.b. b.eis b.el b.f. b.i.d. b.-lat. b.-letr. b.m. b.o b.t.u. b.v. bact. bacter. bacteriol. bal. balíst. bált. bar. bárb. basq. bat. bbl. beir. bel.-art. beng. berb. bíb. bíbl. bibl. bibl.f. bibl.m. bibl.m.pl. bibliof. bibliog. bibliogr. bibliol. bibliôn. bibliot. bibliotec. bibliotecon. biblog. biblol. biblon. bilh.e bim. bimen. biodim. biofís. biogên. biogen. biogeo. biogeog. biogeogr. biogr. biol. biom. bioq. bioquím. biot. biotip. biotipol. birm. birrel. bisp. bispd. bitr. bitrans. bm. boêm. bol. boliv. bomb. bor. bord. borg. borr. bot. br. bras. brasil. bret. brig. brig.o brit. brom. bromat. btl. bud. búlg. bur. burl. buroc. c. c.a.a. c.ág. c.-alm. c.b. c.c. c.com. c.d. c.de c.dessa c.el c.g.s. c.h. c.i.f. c.ia c.-riq. c.ta c.v. cab. cabo-verd. caç. cad. caf. cal. calç. cálc. calcog. calcogr. cald. calig. caligr. calor. calorim. calv. calvin. câm. can. canad. canal. canaliz. cant. cap. cap.ão cap.m.g. cap.-ten. capac. capit. capix. caps. capt. car. card. carn. carp. carr. cart. cartogr. cast. casuís. casuíst. cat. catal. catar. catarin. categ. catol. catól. catolic. catóp. catópt. caus. causal. causalid. cav. cav.o cb. cc. ce. cear. celt. célt. cên. cenog. cent. cênt. centr. cer. cerâm. cerv. cest. cet. cf. cfr. ch. ch.b. ch.e ch.m. chanc. chancel. chap. chapel. chil. chin. chul. cia. ciber. cibern. cicl. cid. ciênc. cienc. cient. cig. cin. cineg. cinem. cinematogr. cing. cinol. cinz. cir. circ. círc. circunscr. cirurg. cit. citol. citt. cl. clas. clás. cláss. clich. clim. climatol. clín. cm.g* cob. cód. códs. cogn. col. col.º colet. colomb. cols. com. com.dor com.e com.or comb. combin. combinat. combust. comdor. comend. comerc. comp. comp.e comp.t compar. compl. compr. compt. comte. comunic. côn. con. côn.º conc. concess. concret. cond. conf. confed. confeit. confl. confls. cong. conhec. conj. conjug. conq. conquil. conquiliol. cons. cons.º consel. conselh. conseq. const. constel. constr. cont. cont.dor cont.or contab. contemp. contr. coord. cop. copul. copulat. coq. cor. coreog. coreogr. corog. corogr. corr. correi. corresp. corrup. corrupt. corrut. cos. cosec. cosm. cosmog. cosmogr. cosmol. cost. costa-ric. costa-riq. cot. côv. cp. cr. cr.a cr.º créd. cresc. cresc.te crim. criminol. cript. criptog. crist. cristal. cristalogr. cristand. cristian. crôn. cron. cron.f. cron.f.pl. cron.m. cron.m.pl. cronol. cronom. cronôn. crust. cruz. ctv. cu.ft. cu.in. cu.yd. cul. culin. cult. cump.to curt. cut. cutel. cv. cvs. cx. cyat. d. d.ª d.a. d.b. d.c. d.c.c. d.-cm d.e d.g. d.p. d.r d.ra d.v. da. dactilog. dactilogr. dactilos. dactilosc. dad. dasim. dat. dd. dec. decl. declin. decor. decr. decresc. ded.o def. defect. defin. definit. del. del.t dele. dem. democ. democr. demog. demogr. demonstr. dens. dep. depr. deprec. deps. der. deriv. derm. des. des.dor des.or desc. desemb. desemboc. desen. desin. desp. despor. desus. det. determ. dev. dev.º dez. dez.º diác. dial. dialet. dialét. dic. did. didát. diet. dif. dig.mo dim. dimin. din. dinam. dinâm. dioc. dipl. diplom. dir. disc. disfem. diss. docs. docum. dog. dogm. dogmát. dól. dom. domin. domín. dór. dr. dr.a dr.as dra. dram. drav. drs. dual. dualid. dur. dz. e. e.a. e.b. e.c. e.c.f. e.d. e.e.m.p. e.e.p. e.f. e.g. e.m. e.-m. e.m.p. e.n.e. e.r. e.r.m. e.s.e. e/s. ecd. ecl. écl. ecles. ecol. econ. ed. edd. edif. educ. ee. efem. egíp. el. el.s. el.s.f. el.s.f.pl. el.s.m. el.s.m.pl. elem. eletr. eletrodin. eletrol. eletrom. eletrôn. eletrot. elipt. em.ª em.mo em.mº emb. emb.or embal. embr. embriol. emigr. emol. emp. empír. empr. emprés. enc. encícl. encicl. end. endoc. energ. energét. enf. eng. eng.º enol. ens. ent. entom. entomol. enx. epig. epigr. epíst. eq. equat. equit. equiv. ergol. erud. esc. escand. escoc. escol. escolást. escr. escul. escult. esgr. esl. eslav. eslov. esot. esp. espec. especialm. especif. específ. espect. espectrogr. espel. espeleol. espet. espir. espirit. espiritual. esport. esq. est. estad. estat. estatíst. estenog. estenogr. estereogr. estét. estil. estim. eston. estr. estrang. estrangeir. estrat. estratég. estrem. estrut. estud. et. et.m.pl. etc. etim. etimol. etióp. étn. etn. etnog. etnogr. etnol. etnolog. etol. euf. eufêm. eufem. eufon. eufôn. eufor. eur. ex. ex.ª ex.ma ex.mo excl. exclam. exclamat. excurs. exe. exérc. exp. exper. experim. expl. explet. explor. explos. export. expr. express. expression. ext. extens. extrat. f. f.adv. f.aport. f.d. f.e.m. f.m.m. f.nom. f.º f.o.b. f.ºr.º f.os f.ºv.o f.paral. f.parl. f.port. f.r. f.red. f.s.a. f.v. f.verb. fáb. fac. falc. falcoar. fam. farm. farmac. farmacol. farmacop. fasc. fascs. fauv. fed. feder. feit. fem. fen. fenom. fenôm. fer. ferrad. ferrov. feud. fev. fev.º ff. fg. fig. figd. figur. figurat. figurativ. fil. filat. filol. filos. fin. finl. fís. fis. fís.-quím. fisc. fisioc. fisiocr. fisiocrat. fisiol. fisl. fispat. fitog. fitogr. fitol. fitopat. fitossoc. fl. flam. flex. flor. floric. fls. flum. flumin. fluv. fm. fo. fog. fol. folc. folcl. folh. fols. fon. fonét. fonol. for. form. fórm. formul. fort. fos. fós. fot. foto. fotoan. fotoanál. fotogr. fotom. fov. fr. fr.-maç. frânc. franc. freg. frenol. freq. frig. frut. fs. fss. ft. ft.p. fulv. fund. fut. futb. futeb. futur. g. g.al g.de g.m. g.-m. g.m.t. g.p. gaél. gal. galic. galv. gar. gasc. gaul. gav. gen. gên. geneal. genét. genov. geo. geod. geof. geofís. geog. geogn. geogr. geol. geom. geomor. geomorf. geon. geôn. ger. germ. gin. ginást. ginec. ginecol. gír. gliptog. gliptogr. gliptol. gliptot. gloss. glót. glotol. gn. gnom. gót. gov. gr. gráf. graf. grafol. grafosc. gram. grav. grd. groen. groenl. gt. guar. guat. guatem. guin. gutt. guz. h. h.c. h.cont. h.i.s. h.j.s. h.mod. h.n. h.p. h.p.-h. h.sag. hab. hag. hagiog. hagiogr. hagiol. haplol. hast. hebd. hebr. helm. helmin. helmintol. hem. heort. heort.f. heort.f.pl. heort.m. heort.m.pl. heortôn. her. herál. heráld. herb. herd.o herp. herpét. herpet. herpetogr. herpetol. het. hib. híb. hibr. híbr. hibrid. hidr. hidrául. hidrod. hidrog. hidrogr. hidrol. hidrom. hidrost. hidrot. hier. hier.f. hier.f.pl. hier.m. hier.m.pl. hierôn. hierosolim. hig. higr. hind. híp. hip. hipiat. hipnot. hipnoter. hipoc. hipocor. hipol. hipót. hipot. hisp. hisp.-am. hisp.-amer. hisp.-lat. hisp-ár. hist. histol. historiog. historiogr. hol. hom. homeo. homeop. homof. homog. homogr. homon. homôn. hon. hond. hort. hortic. hot. hotent. humor. húng. i. i.d. i.e. iat. ib. ibér. ibid. iconog. iconogr. iconol. ict. ictiol. id. id.q. idiot. idol. idolol. igr. il. il.ma il.mo ilum. ilus. ilusion. ilustr. imigr. imit. imp. imper. imperat. imperf. impes. impess. import. impr. impres. impression. improp. impror. in. inc. incoat. incóg. ind. índ. indef. indet. indian. indiv. indoch. indon. indost. indum. indust. indúst. inf. infan. infant. infer. infin. infinit. infinitiv. infl. inform. ing. ing.-n.-am. ingl. ins. inscr. insep. inst. instit. int. integr. intens. interamn. interj. interjet. intern. internac. interr. interrog. interrogat. intj. intr. intrans. inus. inv. invar. invariav. invenç. invest. investig. iog. ir. iran. iraq. irl. iron. irôn. irr. irreg. isl. islam. island. isr. israel. it. ít. ital. itál. italian. iug. j.d. j.r j.z jam. jan. jan.o jap. jard. jardin. jav. jaz. jes. joalh. joc. jog. jorn. jr. jud. jul. jun. jur. juris. jurisp. jurispr. just. k.o. l. l.c. l.da l.do l.l.b. l.l.d. l.n. l.º l.p. l.q. lab. labor. laborat. labort. lact. lâm. lanç. lanc. lap. lapid. larg. lat. latit. latoar. lb. leg. lég. legisl. légs. leit. let. lex. lib. lic.do lig. lim. lin. líng. ling. lingüíst. líq. lit. liter. literal. literat. litog. litogr. litol. litt.d. lituan. litur. liturg. liv. livr. ll. loc. loc.s. loc.v. log. lóg. logar. logíst. lomb. long. loq. lr. lt.da ltd. ltda. ludol. lug. lund. lunf. lus. lusit. luso-afr. luso-asit. lut. luv. m. m.ª m.a.-al. m.al m.alt.-al. m.b. m.ço m.d. m.d.c. m.e m.es m.esa m.f. m.kg m.kg* m.kgf m.lle m.m.c. m.me m.mo m.º m.or m.-q.-perf. m.q.perf. m.t.s. m.ta m.to maç. maçon. mad. madeir. mag. magn. magnet. magnit. mai. maiúsc. maj. maj.-brig. mal. malab. malac. malacol. malai. malg. malh. mamal. man. manuf. maomet. map. máq. maq. maquinof. mar. mar.g. maranh. marc. march. marchet. marg. marin. marinh. marn. marr. marroq. martin. marx. masc. mat. matad. matem. mater. material. matogros. mato-gros. máx. mct. mec. mecân. mecan. mecanogr. med. méd. mediev. medv. mem. memo. memor. mens. mer. merc. mercad. merid. met. metáf. metaf. metafis. metafór. metal. metalog. metalur. metát. meteor. meton. métr. metr. metrif. metrol. mex. mexic. mi. micol. microbiol. microfot. microg. microl. microm. microsc. microscóp. mil. min. mín. miner. ming. minh. minúsc. mist. míst. mit. mit.f. mit.f.pl. mit.gr. mit.m. mit.m.f. mit.m.pl. mitol. mitôn. mk. mm. moag. mob. moçamb. mod. moed. mon. monog. monogr. mons. mont. montanh. mor. moralid. morf. morfol. moto. mov. mr. mrs. ms. mun. mús. mus. mus.b. mus.d. mus.h. museol. n. n.b. n.e. n.n. n.n.e. n.n.o. n.n.w. n.o n.º n.o. n.obs. n.p. n.p.loc. n.p.pers. n.pr. n.r.p. n.s. n.s.p. n.sr.a n.ss.p. n.t. n.w. nac. nap. nat. natur. náu. náua. náut. nav. nav.fl. naz. neerl. neg. neo-ár. neoguin. neol. neolog. neozel. nep. neur. neutr. nicar. nicarag. nig. niger. nob. nobil. nom. nom.-acus. nor. nórd. norm. normat. nort.-am. norueg. notic. nov. nov.o num. núm. numis. numism. nutr. o. o.d.c o.d.c. o.k. o.n.o. ob. obed. obg.mo obr. obr.mo obr.o obs. obsol. obst. obstet. oc. ocean. oceanogr. ocid. ocul. ocult. odont. odontol. of. ofid. oft. oftalm. oftalmol. olig. onç. oneol. onom. onomást. onomat. onomatop. op. opp. ópt. optat. or. orat. ord. ordin. org. organiz. orig. origin. orign. orn. ornit. ornitol. orog. orogr. orôn. ort. ortogr. ortográf. ortop. ostr. otorr. otorrin. otorrino. our. ouriv. out. out.o oz. p. p.a p.ae. p.al. p.b. p.c. p.c.c. p.d. p.e p.e. p.e.f. p.e.o. p.ex. p.ext. p.f. p.f.v. p.h. p.i. p.j. p.l. p.m. p.m.e. p.m.o. p.m.o.m. p.m.p. p.n. p.n.a.m. p.p. p.p.s. p.per. p.r. p.r.j. p.s. p.v. pa. pa.g. pag. pág. pagg. págg. págs. pal. paleob. paleog. paleogr. paleont. paleontol. paleoz. pals. pan. pan.-amer. panam. papel. paq. par. pár.o paraens. parag. paraib. paral. paran. paras. parassint. parl. parn. parnas. parôn. part. partic. pass. passm. passr. passt. past. pat. patol. pátr. patr. patr.f. patr.f.pl. patr.m. patr.m.pl. patron. patrôn. paul. paulist. pç. pça. pdl. pec. ped. pedag. pediat. pedol. pedr. pej. pel. pent. peq. per. pér. perf. perfum. períf. perífr. pern. pernamb. pers. pérs. perspect. perspectiv. peruv. pesc. pesq. pess. pet. petr. petrog. petrogr. petrol. petroq. pf. pg. ph.b. ph.d. piaui. piauien. picar. píl. pint. pinx. pinx.t pirot. pirotec. pirotéc. pisc. piscic. pizz. pl. planej. plat. pleb. pm. pneu. poes. poét. pol. políc. polin. polít. pop. popul. port. porto-riq. posit. poss. possess. pot. potam. pov. pp. pr. prác. prát. prec. preced. precis. pred. predic. pref. pré-hist. prep. prepos. pres. presb.º presc. presid. prest. pret. prev. prim. primit. princ. princip. priv. probl. problem. proc. prod. prof. prof.ª prof.as profis. profiss. profission. profs. prom. pron. pronon. pronún. propag. propos. propr. pros. pros.f. pros.m. prosc. prosôn. prost. prostét. prót. prot. protest. protét. protoc. protoz. prov. provav. provb. provç. provc. proven. provenç. provinc. prox. pseud. psic. psican. psicofisl. psicogn. psicol. psicopat. psiq. psiquiat. pto. pts. pub. public. pug. pulv. px.t q. q.b. q.do q.e.d. q.g. q.-g. q.i.d. q.l. q.p. q.s. q.s.i.d. q.ta q.to q.v. ql. qq.v. qual. qualif. quant. quantit. quart. quest. quí. quích. quím. quimb. quinz. quinzen. quir. quirom. r. r.ª r.e r.i.p. r.no r.p. r.p.m. r.p.s. r.s r.s.a. r.s.v.p. rac. racion. racional. rad. rád. radical. radioat. radiod. radiodif. radiog. radiogr. radiol. radiot. radiotec. radiotéc. radiotécn. radioter. rall. rd. real. realid. rec. rec.º recip. recíp. recípr. red. ref. ref.te refl. reform. reg. reg.º regim. region. regress. rel. relaç. relat. relativ. relig. reloj. rem. rem.te rep. repart. repert. report. repúb. res. rest. restr. restrit. result. ret. retór. retrosp. rev. rev.a rev.do rev.mo rev.o revers. rg. rib. rit. rod. rol. rom. romn. rot. rub. rum. rur. rural. rus. russ. rúst. s. s.2g. s.2g.2n. s.a. s.a.c. s.a.f. s.a.i. s.a.r. s.a.r.l. s.a.s. s.a.t.g. s.b. s.c. s.carid.e s.d. s.e. s.e.o. s.em.a s.em.as s.ex.a s.ex.as s.f. s.f.2n. s.f.f. s.f.m. s.f.pl. s.g. s.h. s.i.d. s.il.ma s.il.mas s.j.d. s.l.n.d. s.loc. s.m. s.m.2n. s.m.a. s.m.f. s.m.i. s.m.j. s.m.pl. s.n. s.o s.o. s.o.s. s.or s.p. s.p.loc. s.p.pers. s.p.q.r. s.r s.r. s.res s.rev.a s.rev.ma s.rev.mas s.rta s.s. s.s.a s.s.a.a. s.s.as s.s.e. s.s.o. s.s.w. s.t.d. s.t.l. s.ta s.to s.v. s.v.p. s.vv. s.w. sab. sac. sal. sals. sân. sâns. sânscr. sap. sapat. sarg. sarg.-aj. sarg.-aj.te sát. sb. sc. sc.b. sc.d. sc.i.d. sc.j.d. sc.m. sc.t sc.t.d. sch. scl.t scr. scrps.t scul. sec. séc. secr. sécs. sect. seg. segg. segs. sel. sem. semânt. semic. semin. semiol. semít. semit. sen. sent. sep. septent. seq. seqq. sér. ser.-cr. serg. seric. sericic. serr. serralh. serv. sérv. set. set.o setent. sf. sg. sh.tn. siam. sib. sid. sider. siderogr. siderotéc. sigil. sign. signif. síl. silog. silv. silvic. simb. símb. simból. simbol. simpl. sin. sing. sinon. sinôn. sint. sínt. sir. sír. sist. sit. snr. snr.a soc. social. sociol. sól. son. sor. sór. sost. sov. soviét. sp. spp. sq.ft. sq.in. sq.m. sq.rd. sq.yd. sr. sr.a sr.as sr.es sr.ta sres. ss. ss.aa.cc. ss.aa.ff. ss.aa.ii. ss.aa.rr. ss.aa.ss. ss.ex.as ss.gg. ss.hh. ss.il.mas ss.mm. ss.mm.aa. ss.mm.ff. ss.mm.ii. ss.pp. ss.rev.as ss.rev.mas ss.s.as ss.ss. stac. sto. sub. subafl. subafls. subdiác. subj. subjunt. subord. subst. subvar. suc. sue. suec. suf. sul. sul-af. sul-afr. sul-amer. sup. sup.e super. superf. superl. supl. suprf. suprl. suprs. surr. surreal. t. t.c. t.d. t.geogr. t.i. t.i.d. t.p. t.p.m. t.s.f. t.te t.te-c.el tab. táb. tai. taí. tail. tam. tâm. tan. tang. tanoar. taquigr. tát. taur. taurom. taxid. tb. teat. teatr. tec. téc. tecel. técn. tecn. tecnog. tecnogr. tecnol. tect. tel. tele. telec. telecom. telef. telef.s. teleg. telegr. telégr. telem. telev. temp. temper. ten. ten.-cel. teol. teôn. teor. teos. ter. terap. terapêut. terat. teratol. térm. term. termin. terminol. termod. termodinâm. termom. terr. territ. tes. test. test.o têxt. tib. tibet. tint. tip. tipogr. tipol. tir. tít. ton. tôn. tóp. top. top.f. top.f.pl. top.m. top.m.f. top.m.pl. topog. topogr. topol. topon. topôn. torp. tosc. tox. toxiol. tr. trab. trabalh. trad. tradic. tráf. trans. transit. transj. transm. transmont. transobj. transp. trat. trav. trem. trib. trig. trigon. trim. trimest. trit. triv. trop. tt. tun. tunis. tup. tupi-guar. tur. turc. turism. tv. u. u.e. u.i. u.inf. u.s. u.sup. ucr. ucraín. ucran. ult. umb. un. unif. univ. univers. urb. urban. urol. urug. us. usual. util. utilid. utilit. utop. utópi. v. v.a v.a. v.-alm. v.carid.e v.de v.dessa v.e.mas v.e.mavossa v.ex.a v.ex.as v.ex.ma v.g. v.h. v.i. v.i./cm2 v.il.ma v.l. v.m. v.m.as v.m.ce v.mag.a v.o v.or v.p. v.rev.a v.rev.as v.rev.ma v.rev.mas v.s. v.s.a v.s.as v.s.f.f. v.s.ilma v.s.s. vad. vadm. val. var. vasc. vb. vc. veg. vel. veloc. ven. ven.or venat. venez. venezuel. verb. verbal. vern. veros. veross. vers. versif. vet. veter. vid. vidr. vig. vig.o vin. vinic. viol. vit. vitic. vitr. viz. vl. vm.ce vm.ces vo. voc. vog. vol. volat. voll. vols. vox. vs. vulc. vulg. vv. vv.aa. vv.carid.es vv.ex.as vv.ex.mas vv.gg. vv.hh. vv.il.mas vv.ll. vv.m.ces vv.mag.as vv.mm. vv.pp. vv.rev.as vv.rev.mas vv.s.as vv.ss. vv.ss.il.mas w. w.c. w.n.w x. x.p.t.o. x.y.z. xenof. xerog. xerogr. xilog. xin. yd.p.sec. z. zend. zo. zool. zoot. zootec. zootéc. apache-opennlp-2.3.3-src/opennlp-tools/lang/pt/tokenizer/pt-detokenizer.xml0100644 0000000 0000000 00000004551 14523004075 027417 0ustar00rootroot0000000 0000000 " ' . ? ! , ; : ( ) } { ] [ » « `` '' % .org .com .net # - apache-opennlp-2.3.3-src/opennlp-tools/pom.xml0100644 0000000 0000000 00000013724 14523004075 021672 0ustar00rootroot0000000 0000000 4.0.0 org.apache.opennlp opennlp 2.3.3 ../pom.xml opennlp-tools jar Apache OpenNLP Tools org.slf4j slf4j-api org.junit.jupiter junit-jupiter-api test org.junit.jupiter junit-jupiter-engine test org.junit.jupiter junit-jupiter-params test org.mockito mockito-core ${mockito.version} test org.slf4j slf4j-simple test com.ginsberg junit5-system-exit 1.1.2 test src/main/resources true org.apache.maven.plugins maven-jar-plugin true opennlp.tools.cmdline.CLI org.apache.opennlp.tools test-jar maven-javadoc-plugin opennlp.tools.cmdline create-javadoc-jar jdk18+ [18,] org.apache.maven.plugins maven-surefire-plugin ${maven.surefire.plugin} -Xmx2048m -Djava.security.manager=allow -Dorg.slf4j.simpleLogger.defaultLogLevel=off ${opennlp.forkCount} false **/stemmer/* **/stemmer/snowball/* **/*IT.java jmh org.openjdk.jmh jmh-core ${jmh.version} test org.openjdk.jmh jmh-generator-annprocess ${jmh.version} test org.codehaus.mojo build-helper-maven-plugin 3.2.0 add-test-source generate-test-sources add-test-source src/jmh/java apache-opennlp-2.3.3-src/opennlp-tools/src/jmh/java/opennlp/tools/util/jvm/BenchmarkRunner.java0100644 0000000 0000000 00000001712 14523004075 033150 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.jvm; public class BenchmarkRunner { public static void main(String[] args) throws Exception { org.openjdk.jmh.Main.main(args); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_jmh_java_opennlp_tools_util_jvm_StringDed0100644 0000000 0000000 00000000166 14523004075 032600 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/jmh/java/opennlp/tools/util/jvm/StringDeduplicationBenchmark.java apache-opennlp-2.3.3-src/opennlp-tools/src/jmh/java/opennlp/tools/util/jvm/StringDeduplicationBenchm0100644 0000000 0000000 00000005275 14523004075 034244 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.jvm; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.infra.Blackhole; /** * A benchmark class / setup by Aleksey Shipilëv. * Resides here to investigate performance of String deduplication approaches * on different environments. *

* Origin: * * https://shipilev.net/jvm/anatomy-quarks/10-string-intern/ *

* His conclusion:
* "Do not use String.intern() without thinking very hard about it, okay?" */ @State(Scope.Benchmark) public class StringDeduplicationBenchmark { @Param({"1", "100", "10000", "1000000"}) private int size; private JvmStringInterner str; private CHMStringInterner chm; private HMStringInterner hm; private CHMStringDeduplicator chmd05; private NoOpStringInterner noop; @Setup public void setup() { str = new JvmStringInterner(); chm = new CHMStringInterner(); hm = new HMStringInterner(); chmd05 = new CHMStringDeduplicator(); noop = new NoOpStringInterner(); } @Benchmark public void intern(Blackhole bh) { for (int c = 0; c < size; c++) { bh.consume(str.intern("String" + c)); } } @Benchmark public void chm(Blackhole bh) { for (int c = 0; c < size; c++) { bh.consume(chm.intern("String" + c)); } } @Benchmark public void hm(Blackhole bh) { for (int c = 0; c < size; c++) { bh.consume(hm.intern("String" + c)); } } @Benchmark public void chmd05(Blackhole bh) { for (int c = 0; c < size; c++) { bh.consume(chmd05.intern("String" + c)); } } @Benchmark public void noop(Blackhole bh) { for (int c = 0; c < size; c++) { bh.consume(noop.intern("String" + c)); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/jmh/java/opennlp/tools/util/jvm/StringListBenchmark.java0100644 0000000 0000000 00000002422 14523004075 034000 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.jvm; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.infra.Blackhole; import opennlp.tools.util.jvm.jmh.ExecutionPlan; import opennlp.tools.util.StringList; /** * A benchmark class to test different implementation of {@link StringList} within OpenNLP */ public class StringListBenchmark { @Benchmark public void newWithArrayConstructor(Blackhole blackhole, ExecutionPlan exec) { blackhole.consume(new StringList(exec.strings)); } } apache-opennlp-2.3.3-src/opennlp-tools/src/jmh/java/opennlp/tools/util/jvm/jmh/ExecutionPlan.java0100644 0000000 0000000 00000004254 14523004075 033424 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.jvm.jmh; import java.util.Random; import org.openjdk.jmh.annotations.Level; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; @State(Scope.Benchmark) public class ExecutionPlan { private static final String CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; private static final Random RANDOM = new Random(42); @Param({"1", "100", "10000", "1000000"}) private int size; @Param({"opennlp.tools.util.jvm.CHMStringDeduplicator", "opennlp.tools.util.jvm.CHMStringInterner", "opennlp.tools.util.jvm.HMStringInterner", "opennlp.tools.util.jvm.JvmStringInterner", "opennlp.tools.util.jvm.NoOpStringInterner"}) private String internerClazz; public String[] strings; @Setup(Level.Iteration) public void setUp() { System.setProperty("opennlp.interner.class", internerClazz); strings = new String[size]; for (int i = 0; i < size; i++) { strings[i] = generateRandomString(15); } } private static String generateRandomString(int length) { final StringBuilder randomString = new StringBuilder(); for (int i = 0; i < length; i++) { int index = RANDOM.nextInt(CHARS.length()); randomString.append(CHARS.charAt(index)); } return randomString.toString(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/ChunkSample.java0100644 0000000 0000000 00000015226 14523004075 032337 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; import opennlp.tools.commons.Sample; import opennlp.tools.util.Span; /** * Class for holding chunks for a single unit of text. */ public class ChunkSample implements Sample { private static final long serialVersionUID = -3092850871020409815L; private final List sentence; private final List tags; private final List preds; /** * Initializes a {@link ChunkSample} instance. * * @param sentence * The training sentence. * @param tags * The POS tags for the {@code sentence}. * @param preds * The chunk tags in B-* I-* notation. */ public ChunkSample(String[] sentence, String[] tags, String[] preds) { this(Arrays.asList(sentence), Arrays.asList(tags), Arrays.asList(preds)); } /** * Initializes a {@link ChunkSample} instance. * * @param sentence * The training sentence. * @param tags * The POS tags for the {@code sentence}. * @param preds * The chunk tags in B-* I-* notation. */ public ChunkSample(List sentence, List tags, List preds) { validateArguments(sentence.size(), tags.size(), preds.size()); this.sentence = List.copyOf(sentence); this.tags = List.copyOf(tags); this.preds = List.copyOf(preds); } /** * @return Retrieves the training sentence. */ public String[] getSentence() { return sentence.toArray(new String[0]); } /** * @return Retrieves the POS Tags for the sentence. */ public String[] getTags() { return tags.toArray(new String[0]); } /** * @return Retrieves the chunk tags in B-* I-* notation. */ public String[] getPreds() { return preds.toArray(new String[0]); } /** * @return the phrases as an array of spans. */ public Span[] getPhrasesAsSpanList() { return phrasesAsSpanList(getSentence(), getTags(), getPreds()); } /** * Create arrays of {@link Span spans} of phrases. * * @param aSentence * The training sentence. * @param aTags * The POS tags for the {@code sentence}. * @param aPreds * The chunk tags in B-* I-* notation. * * @return the phrases as an array of spans */ public static Span[] phrasesAsSpanList(String[] aSentence, String[] aTags, String[] aPreds) { validateArguments(aSentence.length, aTags.length, aPreds.length); // initialize with the list maximum size List phrases = new ArrayList<>(aSentence.length); String startTag = ""; int startIndex = 0; boolean foundPhrase = false; for (int ci = 0, cn = aPreds.length; ci < cn; ci++) { String pred = aPreds[ci]; if (pred.startsWith("B-") || !pred.equals("I-" + startTag) && !pred.equals("O")) { // start if (foundPhrase) { // handle the last phrases.add(new Span(startIndex, ci, startTag)); } startIndex = ci; startTag = pred.substring(2); foundPhrase = true; } else if (pred.equals("I-" + startTag)) { // middle // do nothing } else if (foundPhrase) { // end phrases.add(new Span(startIndex, ci, startTag)); foundPhrase = false; startTag = ""; } } if (foundPhrase) { // leftover phrases.add(new Span(startIndex, aPreds.length, startTag)); } return phrases.toArray(new Span[0]); } private static void validateArguments(int sentenceSize, int tagsSize, int predsSize) throws IllegalArgumentException { if (sentenceSize != tagsSize || tagsSize != predsSize) throw new IllegalArgumentException( "All arrays must have the same length: " + "sentenceSize: " + sentenceSize + ", tagsSize: " + tagsSize + ", predsSize: " + predsSize + "!"); } /** * Creates a nice to read string for the phrases formatted as following:
* * [NP Rockwell_NNP ] [VP said_VBD ] [NP the_DT agreement_NN ] [VP calls_VBZ ] [SBAR for_IN ] * [NP it_PRP ] [VP to_TO supply_VB ] [NP 200_CD additional_JJ so-called_JJ shipsets_NNS ] * [PP for_IN ] [NP the_DT planes_NNS ] ._. * * * @return A nice to read string representation of the chunk phases */ public String nicePrint() { Span[] spans = getPhrasesAsSpanList(); StringBuilder result = new StringBuilder(" "); for (int tokenIndex = 0; tokenIndex < sentence.size(); tokenIndex++) { for (Span span : spans) { if (span.getStart() == tokenIndex) { result.append("[").append(span.getType()).append(" "); } if (span.getEnd() == tokenIndex) { result.append("]").append(' '); } } result.append(sentence.get(tokenIndex)).append("_").append(tags.get(tokenIndex)).append(' '); } if (sentence.size() > 1) result.setLength(result.length() - 1); for (Span span : spans) { if (span.getEnd() == sentence.size()) { result.append(']'); } } return result.toString(); } @Override public String toString() { StringBuilder chunkString = new StringBuilder(); for (int ci = 0; ci < preds.size(); ci++) { chunkString.append(sentence.get(ci)).append(" ").append(tags.get(ci)) .append(" ").append(preds.get(ci)).append("\n"); } return chunkString.toString(); } @Override public int hashCode() { return Objects.hash(Arrays.hashCode(getSentence()), Arrays.hashCode(getTags()), Arrays.hashCode(getPreds())); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof ChunkSample a) { return Arrays.equals(getSentence(), a.getSentence()) && Arrays.equals(getTags(), a.getTags()) && Arrays.equals(getPreds(), a.getPreds()); } return false; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_chunker_ChunkSamp0100644 0000000 0000000 00000000163 14523004075 032557 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/ChunkSampleSequenceStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/ChunkSampleSequenceStream0100644 0000000 0000000 00000005503 14523004075 034261 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import java.io.IOException; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.Sequence; import opennlp.tools.ml.model.SequenceStream; import opennlp.tools.util.ObjectStream; /** * A {@link SequenceStream} implementation encapsulating {@link ChunkSample samples}. */ public class ChunkSampleSequenceStream implements SequenceStream { private final ObjectStream samples; private final ChunkerContextGenerator contextGenerator; /** * Creates a {@link ChunkSampleSequenceStream} with given {@code samples} using * a {@link ChunkerContextGenerator}. * * @param samples The data stream of {@link ChunkSample samples}. * @param generator A {@link ChunkerContextGenerator} which shall be used. */ public ChunkSampleSequenceStream(ObjectStream samples, ChunkerContextGenerator generator) { this.samples = samples; this.contextGenerator = generator; } @Override public Sequence read() throws IOException { ChunkSample sample = samples.read(); if (sample != null) { String[] sentence = sample.getSentence(); String[] tags = sample.getTags(); Event[] events = new Event[sentence.length]; for (int i = 0; i < sentence.length; i++) { // it is safe to pass the tags as previous tags because // the context generator does not look for non predicted tags String[] context = contextGenerator.getContext(i, sentence, tags, null); events[i] = new Event(tags[i], context); } return new Sequence<>(events,sample); } return null; } @Override public Event[] updateContext(Sequence sequence, AbstractModel model) { // TODO: Should be implemented for Perceptron sequence learning ... return null; } @Override public void reset() throws IOException, UnsupportedOperationException { samples.reset(); } @Override public void close() throws IOException { samples.close(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/ChunkSampleStream.java0100644 0000000 0000000 00000004567 14523004075 033521 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; /** * Parses the conll 2000 shared task shallow parser training data. *

* Data format is specified on the conll page:
* * http://www.cnts.ua.ac.be/conll2000/chunking/ */ public class ChunkSampleStream extends FilterObjectStream { private static final Logger logger = LoggerFactory.getLogger(ChunkSampleStream.class); /** * Initializes a {@link ChunkSampleStream instance}. * * @param samples A plain text {@link ObjectStream line stream}. */ public ChunkSampleStream(ObjectStream samples) { super(samples); } @Override public ChunkSample read() throws IOException { List toks = new ArrayList<>(); List tags = new ArrayList<>(); List preds = new ArrayList<>(); for (String line = samples.read(); line != null && !line.equals(""); line = samples.read()) { String[] parts = line.split(" "); if (parts.length != 3) { logger.error("Skipping corrupt line: {}", line); } else { toks.add(parts[0]); tags.add(parts[1]); preds.add(parts[2]); } } if (toks.size() > 0) { return new ChunkSample(toks.toArray(new String[0]), tags.toArray(new String[0]), preds.toArray(new String[0])); } return null; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/Chunker.java0100644 0000000 0000000 00000005170 14523004075 031521 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import opennlp.tools.util.Sequence; import opennlp.tools.util.Span; /** * The interface for chunkers which provide chunk tags for a sequence of tokens. */ public interface Chunker { /** * Generates chunk tags for the given sequence returning the result in an array. * * @param toks an array of the tokens or words of the sequence. * @param tags an array of the pos tags of the sequence. * * @return an array of chunk tags for each token in the sequence. */ String[] chunk(String[] toks, String[] tags); /** * Generates tagged chunk {@link Span spans} for the given sequence returning * the result in a {@link Span span} array. * * @param toks an array of the tokens or words of the sequence. * @param tags an array of the pos tags of the sequence. * * @return an array of {@link Span spans} with chunk tags for each chunk in the sequence. */ Span[] chunkAsSpans(String[] toks, String[] tags); /** * Computes the top k chunk {@link Sequence sequences} for the specified sentence with * the specified pos-tags. * * @param sentence The tokens of the sentence. * @param tags The pos-tags for the specified sentence. * * @return the top k chunk {@link Sequence sequences} for the specified sentence. */ Sequence[] topKSequences(String[] sentence, String[] tags); /** * Computes the top k chunk {@link Sequence sequences} for the specified sentence with * the specified pos-tags. * * @param sentence The tokens of the sentence. * @param tags The pos-tags for the specified sentence. * @param minSequenceScore A lower bound on the score of a returned sequence. * * @return the top k chunk {@link Sequence sequences} for the specified sentence. */ Sequence[] topKSequences(String[] sentence, String[] tags, double minSequenceScore); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_chunker_ChunkerCo0100644 0000000 0000000 00000000161 14523004075 032545 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/ChunkerContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/ChunkerContextGenerator.j0100644 0000000 0000000 00000003453 14523004075 034247 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import opennlp.tools.util.BeamSearchContextGenerator; import opennlp.tools.util.TokenTag; /** * Interface for a {@link BeamSearchContextGenerator} used in syntactic chunking. */ public interface ChunkerContextGenerator extends BeamSearchContextGenerator { /** * Retrieves the contexts for chunking of the specified {@code idx}. * * @param idx The index of the token in the specified {@code toks} array for which the context * should be constructed. * @param toks The tokens of the sentence. The {@code toString} methods of these objects * should return the token text. * @param tags The POS tags for the specified tokens. * @param preds The previous decisions made in the tagging of this sequence. * Only indices less than {@code idx} will be examined. * @return An array of predictive contexts on which a model basis its decisions. */ String[] getContext(int idx, String[] toks, String[] tags, String[] preds); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_chunker_ChunkerCr0100644 0000000 0000000 00000000157 14523004075 032555 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/ChunkerCrossValidator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/ChunkerCrossValidator.jav0100644 0000000 0000000 00000006024 14523004075 034237 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import java.io.IOException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.eval.CrossValidationPartitioner; import opennlp.tools.util.eval.FMeasure; /** * Cross validator for {@link Chunker}. */ public class ChunkerCrossValidator { private final String languageCode; private final TrainingParameters params; private final FMeasure fmeasure = new FMeasure(); private final ChunkerEvaluationMonitor[] listeners; private final ChunkerFactory chunkerFactory; /** * Initializes a {@link ChunkerCrossValidator} instance via given parameters. * * @param languageCode An ISO conform language code. * @param factory The {@link ChunkerFactory} for creating related objects. * @param params The {@link TrainingParameters} for the context of cross validation. * @param listeners the {@link ChunkerEvaluationMonitor evaluation listeners}. */ public ChunkerCrossValidator(String languageCode, TrainingParameters params, ChunkerFactory factory, ChunkerEvaluationMonitor... listeners) { this.chunkerFactory = factory; this.languageCode = languageCode; this.params = params; this.listeners = listeners; } /** * Starts the evaluation. * * @param samples The {@link ObjectStream} of {@link ChunkSample samples} to train and test with. * @param nFolds Number of folds. It must be greater than zero. * * @throws IOException Thrown if IO errors occurred. */ public void evaluate(ObjectStream samples, int nFolds) throws IOException { CrossValidationPartitioner partitioner = new CrossValidationPartitioner<>(samples, nFolds); while (partitioner.hasNext()) { CrossValidationPartitioner.TrainingSampleStream trainingSampleStream = partitioner.next(); ChunkerModel model = ChunkerME.train(languageCode, trainingSampleStream, params, chunkerFactory); // do testing ChunkerEvaluator evaluator = new ChunkerEvaluator(new ChunkerME(model), listeners); evaluator.evaluate(trainingSampleStream.getTestSampleStream()); fmeasure.mergeInto(evaluator.getFMeasure()); } } public FMeasure getFMeasure() { return fmeasure; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_chunker_ChunkerEv0100644 0000000 0000000 00000000162 14523004075 032557 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/ChunkerEvaluationMonitor.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/ChunkerEvaluationMonitor.0100644 0000000 0000000 00000002022 14523004075 034250 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import opennlp.tools.util.eval.EvaluationMonitor; /** * A marker interface for evaluating {@link Chunker chunkers}. */ public interface ChunkerEvaluationMonitor extends EvaluationMonitor { } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/ChunkerEvaluator.java0100644 0000000 0000000 00000005021 14523004075 033377 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import opennlp.tools.util.eval.Evaluator; import opennlp.tools.util.eval.FMeasure; /** * The {@link ChunkerEvaluator} measures the performance of the given {@link Chunker} with the provided * reference {@link ChunkSample samples}. * * @see Evaluator * @see Chunker * @see ChunkSample */ public class ChunkerEvaluator extends Evaluator { private final FMeasure fmeasure = new FMeasure(); /** * The {@link Chunker} used to create the predicted {@link ChunkSample} objects. */ private final Chunker chunker; /** * Initializes a {@link ChunkerEvaluator} instance with the given {@link Chunker}. * * @param chunker The {@link Chunker} to evaluate. * @param listeners The {@link ChunkerEvaluationMonitor evaluation listeners}. */ public ChunkerEvaluator(Chunker chunker, ChunkerEvaluationMonitor... listeners) { super(listeners); this.chunker = chunker; } /** * Evaluates the given reference {@link ChunkSample} object. *

* This is done by finding the phrases with the {@link Chunker} in the sentence from the reference * {@link ChunkSample}. The found phrases are then used to calculate and update the scores. * * @param reference the reference {@link ChunkSample}. * * @return The predicted {@link ChunkSample}. */ @Override protected ChunkSample processSample(ChunkSample reference) { String[] preds = chunker.chunk(reference.getSentence(), reference.getTags()); ChunkSample result = new ChunkSample(reference.getSentence(), reference.getTags(), preds); fmeasure.updateScores(reference.getPhrasesAsSpanList(), result.getPhrasesAsSpanList()); return result; } public FMeasure getFMeasure() { return fmeasure; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/ChunkerEventStream.java0100644 0000000 0000000 00000004323 14523004075 033676 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import opennlp.tools.ml.model.Event; import opennlp.tools.util.AbstractEventStream; import opennlp.tools.util.ObjectStream; /** * Class for creating an event stream out of data files for training a {@link Chunker}. */ public class ChunkerEventStream extends AbstractEventStream { private final ChunkerContextGenerator cg; /** * Creates a new event stream based on the specified data stream using the given context generator. * * @param d The data stream for this event stream. * @param cg A {@link ChunkerContextGenerator} which should be used for the event stream {@code d}. */ public ChunkerEventStream(ObjectStream d, ChunkerContextGenerator cg) { super(d); this.cg = cg; } @Override protected Iterator createEvents(ChunkSample sample) { if (sample != null) { List events = new ArrayList<>(); String[] toksArray = sample.getSentence(); String[] tagsArray = sample.getTags(); String[] predsArray = sample.getPreds(); for (int ei = 0, el = sample.getSentence().length; ei < el; ei++) { events.add(new Event(predsArray[ei], cg.getContext(ei,toksArray,tagsArray,predsArray))); } return events.iterator(); } else { return Collections.emptyListIterator(); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/ChunkerFactory.java0100644 0000000 0000000 00000005341 14523004075 033051 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import opennlp.tools.util.BaseToolFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.SequenceValidator; import opennlp.tools.util.TokenTag; import opennlp.tools.util.ext.ExtensionLoader; public class ChunkerFactory extends BaseToolFactory { /** * Creates a {@link ChunkerFactory} that provides the default implementation * of the resources. */ public ChunkerFactory() { } /** * Instantiates a {@link ChunkerFactory} via a given {@code subclassName}. * * @param subclassName The class name used for instantiation. If {@code null}, an * instance of {@link ChunkerFactory} will be returned * per default. Otherwise, the {@link ExtensionLoader} mechanism * is applied to load the requested {@code subclassName}. * * @return A valid {@link ChunkerFactory} instance. * @throws InvalidFormatException Thrown if the {@link ExtensionLoader} mechanism failed to * create the factory associated with {@code subclassName}. */ public static ChunkerFactory create(String subclassName) throws InvalidFormatException { if (subclassName == null) { // will create the default factory return new ChunkerFactory(); } try { return ExtensionLoader.instantiateExtension(ChunkerFactory.class, subclassName); } catch (Exception e) { String msg = "Could not instantiate the " + subclassName + ". The initialization threw an exception."; throw new InvalidFormatException(msg, e); } } @Override public void validateArtifactMap() throws InvalidFormatException { // no additional artifacts } public SequenceValidator getSequenceValidator() { return new DefaultChunkerSequenceValidator(); } public ChunkerContextGenerator getContextGenerator() { return new DefaultChunkerContextGenerator(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/ChunkerME.java0100644 0000000 0000000 00000016133 14523004075 031744 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import opennlp.tools.ml.BeamSearch; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.SequenceTrainer; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.TrainerFactory.TrainerType; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.ml.model.SequenceClassificationModel; import opennlp.tools.util.DownloadUtil; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Sequence; import opennlp.tools.util.SequenceValidator; import opennlp.tools.util.Span; import opennlp.tools.util.TokenTag; import opennlp.tools.util.TrainingParameters; /** * The class represents a maximum-entropy-based {@link Chunker}. This chunker can be used to * find flat structures based on sequence inputs such as noun phrases or named entities. */ public class ChunkerME implements Chunker { public static final int DEFAULT_BEAM_SIZE = 10; private Sequence bestSequence; /** * The model used to assign chunk tags to a sequence of tokens. */ private final SequenceClassificationModel model; private final ChunkerContextGenerator contextGenerator; private final SequenceValidator sequenceValidator; /** * Initializes a {@link Chunker} by downloading a default model. * * @param language The language of the model. * @throws IOException Thrown if the model cannot be downloaded or saved. */ public ChunkerME(String language) throws IOException { this(DownloadUtil.downloadModel(language, DownloadUtil.ModelType.CHUNKER, ChunkerModel.class)); } /** * Initializes a {@link Chunker} with the specified {@link ChunkerModel}. * The {@link #DEFAULT_BEAM_SIZE} is used. * * @param model A valid {@link ChunkerModel model} instance. */ public ChunkerME(ChunkerModel model) { contextGenerator = model.getFactory().getContextGenerator(); sequenceValidator = model.getFactory().getSequenceValidator(); if (model.getChunkerSequenceModel() != null) { this.model = model.getChunkerSequenceModel(); } else { this.model = new BeamSearch<>(DEFAULT_BEAM_SIZE, model.getChunkerModel(), 0); } } @Override public String[] chunk(String[] toks, String[] tags) { TokenTag[] tuples = TokenTag.create(toks, tags); bestSequence = model.bestSequence(tuples, new Object[] {}, contextGenerator, sequenceValidator); List c = bestSequence.getOutcomes(); return c.toArray(new String[0]); } @Override public Span[] chunkAsSpans(String[] toks, String[] tags) { String[] preds = chunk(toks, tags); return ChunkSample.phrasesAsSpanList(toks, tags, preds); } @Override public Sequence[] topKSequences(String[] sentence, String[] tags) { TokenTag[] tuples = TokenTag.create(sentence, tags); return model.bestSequences(DEFAULT_BEAM_SIZE, tuples, new Object[] { }, contextGenerator, sequenceValidator); } @Override public Sequence[] topKSequences(String[] sentence, String[] tags, double minSequenceScore) { TokenTag[] tuples = TokenTag.create(sentence, tags); return model.bestSequences(DEFAULT_BEAM_SIZE, tuples, new Object[] { }, minSequenceScore, contextGenerator, sequenceValidator); } /** * Populates the specified array with the probabilities of the last decoded sequence. The * sequence was determined based on the previous call to {@code chunk}. The * specified array should be at least as large as the number of tokens in the previous * call to {@code chunk}. * * @param probs An array used to hold the probabilities of the last decoded sequence. */ public void probs(double[] probs) { bestSequence.getProbs(probs); } /** * Returns an array with the probabilities of the last decoded sequence. The * sequence was determined based on the previous call to {@link #chunk(String[], String[])}. * * @return An array with the same number of probabilities as tokens when * {@link ChunkerME#chunk(String[], String[])} was last called. */ public double[] probs() { return bestSequence.getProbs(); } /** * Starts a training of a {@link ChunkerModel} with the given parameters. * * @param lang The ISO conform language code. * @param in The {@link ObjectStream} of {@link ChunkSample} used as input for training. * @param mlParams The {@link TrainingParameters} for the context of the training. * @param factory The {@link ChunkerFactory} for creating related objects defined via {@code mlParams}. * * @return A valid, trained {@link ChunkerModel} instance. * @throws IOException Thrown if IO errors occurred. * @throws IllegalArgumentException Thrown if the specified {@link TrainerType} is not supported. */ public static ChunkerModel train(String lang, ObjectStream in, TrainingParameters mlParams, ChunkerFactory factory) throws IOException { int beamSize = mlParams.getIntParameter(BeamSearch.BEAM_SIZE_PARAMETER, ChunkerME.DEFAULT_BEAM_SIZE); Map manifestInfoEntries = new HashMap<>(); TrainerType trainerType = TrainerFactory.getTrainerType(mlParams); MaxentModel chunkerModel = null; SequenceClassificationModel seqChunkerModel = null; if (TrainerType.EVENT_MODEL_TRAINER.equals(trainerType)) { ObjectStream es = new ChunkerEventStream(in, factory.getContextGenerator()); EventTrainer trainer = TrainerFactory.getEventTrainer(mlParams, manifestInfoEntries); chunkerModel = trainer.train(es); } else if (TrainerType.SEQUENCE_TRAINER.equals(trainerType)) { SequenceTrainer trainer = TrainerFactory.getSequenceModelTrainer( mlParams, manifestInfoEntries); // TODO: This will probably cause issue, since the feature generator uses the outcomes array ChunkSampleSequenceStream ss = new ChunkSampleSequenceStream(in, factory.getContextGenerator()); seqChunkerModel = trainer.train(ss); } else { throw new IllegalArgumentException("Trainer type is not supported: " + trainerType); } if (chunkerModel != null) { return new ChunkerModel(lang, chunkerModel, beamSize, manifestInfoEntries, factory); } else { return new ChunkerModel(lang, seqChunkerModel, manifestInfoEntries, factory); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/ChunkerModel.java0100644 0000000 0000000 00000017647 14523004075 032516 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.file.Path; import java.util.Map; import java.util.Properties; import opennlp.tools.ml.BeamSearch; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.ml.model.SequenceClassificationModel; import opennlp.tools.util.BaseToolFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.TokenTag; import opennlp.tools.util.model.BaseModel; /** * The {@link ChunkerModel} is the model used by a learnable {@link Chunker}. * * @see ChunkerME */ public class ChunkerModel extends BaseModel { private static final long serialVersionUID = 1608653769616498232L; private static final String COMPONENT_NAME = "ChunkerME"; private static final String CHUNKER_MODEL_ENTRY_NAME = "chunker.model"; /** * Initializes a {@link ChunkerModel} instance via given parameters. * * @param languageCode An ISO conform language code. * @param chunkerModel A valid {@link SequenceClassificationModel}. * @param manifestInfoEntries Additional information kept in the manifest. * @param factory The {@link ChunkerFactory} for creating related objects. */ public ChunkerModel(String languageCode, SequenceClassificationModel chunkerModel, Map manifestInfoEntries, ChunkerFactory factory) { super(COMPONENT_NAME, languageCode, manifestInfoEntries, factory); artifactMap.put(CHUNKER_MODEL_ENTRY_NAME, chunkerModel); checkArtifactMap(); } /** * Initializes a {@link ChunkerModel} instance via given parameters. * * @param languageCode An ISO conform language code. * @param chunkerModel A valid {@link MaxentModel}. * @param manifestInfoEntries Additional information kept in the manifest. * @param factory The {@link ChunkerFactory} for creating related objects. */ public ChunkerModel(String languageCode, MaxentModel chunkerModel, Map manifestInfoEntries, ChunkerFactory factory) { this(languageCode, chunkerModel, ChunkerME.DEFAULT_BEAM_SIZE, manifestInfoEntries, factory); } /** * Initializes a {@link ChunkerModel} instance via given parameters. * * @param languageCode An ISO conform language code. * @param chunkerModel A valid {@link MaxentModel}. * @param beamSize The size of the beam that should be used when decoding sequences. * @param manifestInfoEntries Additional information kept in the manifest. * @param factory The {@link ChunkerFactory} for creating related objects. */ public ChunkerModel(String languageCode, MaxentModel chunkerModel, int beamSize, Map manifestInfoEntries, ChunkerFactory factory) { super(COMPONENT_NAME, languageCode, manifestInfoEntries, factory); artifactMap.put(CHUNKER_MODEL_ENTRY_NAME, chunkerModel); Properties manifest = (Properties) artifactMap.get(MANIFEST_ENTRY); manifest.put(BeamSearch.BEAM_SIZE_PARAMETER, Integer.toString(beamSize)); checkArtifactMap(); } /** * Initializes a {@link ChunkerModel} instance via given parameters. * * @param languageCode An ISO conform language code. * @param chunkerModel A valid {@link MaxentModel}. * @param factory The {@link ChunkerFactory} for creating related objects. */ public ChunkerModel(String languageCode, MaxentModel chunkerModel, ChunkerFactory factory) { this(languageCode, chunkerModel, null, factory); } /** * Initializes a {@link ChunkerModel} instance via a valid {@link InputStream}. * * @param in The {@link InputStream} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public ChunkerModel(InputStream in) throws IOException { super(COMPONENT_NAME, in); } /** * Initializes a {@link ChunkerModel} instance via a valid {@link File}. * * @param modelFile The {@link File} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public ChunkerModel(File modelFile) throws IOException { super(COMPONENT_NAME, modelFile); } /** * Initializes a {@link ChunkerModel} instance via a valid {@link Path}. * * @param modelPath The {@link Path} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public ChunkerModel(Path modelPath) throws IOException { this(modelPath.toFile()); } /** * Initializes a {@link ChunkerModel} instance via a valid {@link URL}. * * @param modelURL The {@link URL} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public ChunkerModel(URL modelURL) throws IOException { super(COMPONENT_NAME, modelURL); } @Override protected void validateArtifactMap() throws InvalidFormatException { super.validateArtifactMap(); if (!(artifactMap.get(CHUNKER_MODEL_ENTRY_NAME) instanceof AbstractModel)) { throw new InvalidFormatException("Chunker model is incomplete!"); } // Since 1.8.0 we changed the ChunkerFactory signature. This will check the if the model // declares a not default factory, and if yes, check if it was created before 1.8 final String factoryName = getManifestProperty(FACTORY_NAME); if ( (factoryName != null && !factoryName.equals("opennlp.tools.chunker.ChunkerFactory") ) && this.getVersion().getMajor() <= 1 && this.getVersion().getMinor() < 8) { throw new InvalidFormatException("The Chunker factory '" + factoryName + "' is no longer compatible. Please update it to match the latest ChunkerFactory."); } } /** * @deprecated use {@link ChunkerModel#getChunkerSequenceModel()} instead. This method will be removed soon. */ @Deprecated public MaxentModel getChunkerModel() { if (artifactMap.get(CHUNKER_MODEL_ENTRY_NAME) instanceof MaxentModel) { return (MaxentModel) artifactMap.get(CHUNKER_MODEL_ENTRY_NAME); } else { return null; } } /** * @return Retrieves a {@link SequenceClassificationModel}. */ public SequenceClassificationModel getChunkerSequenceModel() { Properties manifest = (Properties) artifactMap.get(MANIFEST_ENTRY); if (artifactMap.get(CHUNKER_MODEL_ENTRY_NAME) instanceof MaxentModel) { String beamSizeString = manifest.getProperty(BeamSearch.BEAM_SIZE_PARAMETER); int beamSize = ChunkerME.DEFAULT_BEAM_SIZE; if (beamSizeString != null) { beamSize = Integer.parseInt(beamSizeString); } return new BeamSearch<>(beamSize, (MaxentModel) artifactMap.get(CHUNKER_MODEL_ENTRY_NAME)); } else if (artifactMap.get(CHUNKER_MODEL_ENTRY_NAME) instanceof SequenceClassificationModel) { return (SequenceClassificationModel) artifactMap.get(CHUNKER_MODEL_ENTRY_NAME); } else { return null; } } @Override protected Class getDefaultFactory() { return ChunkerFactory.class; } /** * @return Retrieves the active {@link ChunkerFactory}. */ public ChunkerFactory getFactory() { return (ChunkerFactory) this.toolFactory; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_chunker_DefaultCh0100644 0000000 0000000 00000000170 14523004075 032523 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/DefaultChunkerContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/DefaultChunkerContextGene0100644 0000000 0000000 00000007077 14523004075 034262 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import opennlp.tools.util.TokenTag; /** * Features based on chunking model described in Fei Sha and Fernando Pereira. Shallow * parsing with conditional random fields. In Proceedings of HLT-NAACL 2003. Association * for Computational Linguistics, 2003. */ public class DefaultChunkerContextGenerator implements ChunkerContextGenerator { /** * Initializes a {@link DefaultChunkerContextGenerator} instance. */ public DefaultChunkerContextGenerator() { } @Override public String[] getContext(int i, String[] toks, String[] tags, String[] preds) { // Words in a 5-word window String w_2, w_1, w0, w1, w2; // Tags in a 5-word window String t_2, t_1, t0, t1, t2; // Previous predictions String p_2, p_1; if (i < 2) { w_2 = "w_2=bos"; t_2 = "t_2=bos"; p_2 = "p_2=bos"; } else { w_2 = "w_2=" + toks[i - 2]; t_2 = "t_2=" + tags[i - 2]; p_2 = "p_2=" + preds[i - 2]; } if (i < 1) { w_1 = "w_1=bos"; t_1 = "t_1=bos"; p_1 = "p_1=bos"; } else { w_1 = "w_1=" + toks[i - 1]; t_1 = "t_1=" + tags[i - 1]; p_1 = "p_1=" + preds[i - 1]; } w0 = "w0=" + toks[i]; t0 = "t0=" + tags[i]; if (i + 1 >= toks.length) { w1 = "w1=eos"; t1 = "t1=eos"; } else { w1 = "w1=" + toks[i + 1]; t1 = "t1=" + tags[i + 1]; } if (i + 2 >= toks.length) { w2 = "w2=eos"; t2 = "t2=eos"; } else { w2 = "w2=" + toks[i + 2]; t2 = "t2=" + tags[i + 2]; } return new String[] { //add word features w_2, w_1, w0, w1, w2, w_1 + w0, w0 + w1, //add tag features t_2, t_1, t0, t1, t2, t_2 + t_1, t_1 + t0, t0 + t1, t1 + t2, t_2 + t_1 + t0, t_1 + t0 + t1, t0 + t1 + t2, //add pred tags p_2, p_1, p_2 + p_1, //add pred and tag p_1 + t_2, p_1 + t_1, p_1 + t0, p_1 + t1, p_1 + t2, p_1 + t_2 + t_1, p_1 + t_1 + t0, p_1 + t0 + t1, p_1 + t1 + t2, p_1 + t_2 + t_1 + t0, p_1 + t_1 + t0 + t1, p_1 + t0 + t1 + t2, //add pred and word p_1 + w_2, p_1 + w_1, p_1 + w0, p_1 + w1, p_1 + w2, p_1 + w_1 + w0, p_1 + w0 + w1 }; } @Override public String[] getContext(int index, TokenTag[] sequence, String[] priorDecisions, Object[] additionalContext) { String[] token = TokenTag.extractTokens(sequence); String[] tags = TokenTag.extractTags(sequence); return getContext(index, token, tags, priorDecisions); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_chunker_DefaultCh0100644 0000000 0000000 00000000171 14523004075 032524 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/DefaultChunkerSequenceValidator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/DefaultChunkerSequenceVal0100644 0000000 0000000 00000003433 14523004075 034242 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import opennlp.tools.util.SequenceValidator; import opennlp.tools.util.TokenTag; /** * The default chunker {@link SequenceValidator} implementation. */ public class DefaultChunkerSequenceValidator implements SequenceValidator { private boolean validOutcome(String outcome, String prevOutcome) { if (outcome.startsWith("I-")) { if (prevOutcome == null) { return false; } else { if (prevOutcome.equals("O")) { return false; } return prevOutcome.substring(2).equals(outcome.substring(2)); } } return true; } private boolean validOutcome(String outcome, String[] sequence) { String prevOutcome = null; if (sequence.length > 0) { prevOutcome = sequence[sequence.length - 1]; } return validOutcome(outcome,prevOutcome); } @Override public boolean validSequence(int i, TokenTag[] sequence, String[] s, String outcome) { return validOutcome(outcome, s); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/chunker/package-info.java0100644 0000000 0000000 00000001646 14523004075 032452 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package related to finding non-recursive syntactic annotation such as noun phrase chunks. */ package opennlp.tools.chunker; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_AbstractC0100644 0000000 0000000 00000000157 14523004075 032513 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/AbstractConverterTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/AbstractConverterTool.jav0100644 0000000 0000000 00000010533 14523004075 034225 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import java.io.IOException; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.util.ObjectStream; /** * Base class for format conversion tools. * * @param The class of data sample the tool converts, * for example {@link opennlp.tools.postag.POSSample} */ public abstract class AbstractConverterTool extends TypedCmdLineTool { private static final Logger logger = LoggerFactory.getLogger(AbstractConverterTool.class); /** * Constructor with type parameter. * * @param sampleType class of the template parameter */ protected AbstractConverterTool(Class sampleType) { super(sampleType); } @Override public String getShortDescription() { Map> factories = StreamFactoryRegistry.getFactories(type); StringBuilder help = new StringBuilder(); if (2 == factories.keySet().size()) { //opennlp + foreign for (String format : factories.keySet()) { if (!StreamFactoryRegistry.DEFAULT_FORMAT.equals(format)) { help.append(format); } } return "Converts " + help + " data format to native OpenNLP format"; } else if (2 < factories.keySet().size()) { for (String format : factories.keySet()) { if (!StreamFactoryRegistry.DEFAULT_FORMAT.equals(format)) { help.append(format).append(","); } } return "Converts external data formats (" + help.substring(0, help.length() - 1 ) + ") to native OpenNLP format"; } else { throw new AssertionError("There should be more than 1 factory registered for converter " + "tool"); } } private String createHelpString(String format, String usage) { return "Usage: " + CLI.CMD + " " + getName() + " " + format + " " + usage; } @Override public String getHelp() { Map> factories = StreamFactoryRegistry.getFactories(type); StringBuilder help = new StringBuilder("help|"); for (String formatName : factories.keySet()) { if (!StreamFactoryRegistry.DEFAULT_FORMAT.equals(formatName)) { help.append(formatName).append("|"); } } return createHelpString(help.substring(0, help.length() - 1), "[help|options...]"); } @Override public String getHelp(String format) { return getHelp(); } @Override public void run(String format, String[] args) { if (0 == args.length) { logger.info(getHelp()); } else { format = args[0]; ObjectStreamFactory streamFactory = getStreamFactory(format); String[] formatArgs = new String[args.length - 1]; System.arraycopy(args, 1, formatArgs, 0, formatArgs.length); String helpString = createHelpString(format, ArgumentParser.createUsage(streamFactory.getParameters())); if (0 == formatArgs.length || (1 == formatArgs.length && "help".equals(formatArgs[0]))) { logger.info(helpString); System.exit(0); } String errorMessage = ArgumentParser.validateArgumentsLoudly(formatArgs, streamFactory.getParameters()); if (null != errorMessage) { throw new TerminateToolException(1, errorMessage + "\n" + helpString); } try (ObjectStream sampleStream = streamFactory.create(formatArgs)) { T sample; while ((sample = sampleStream.read()) != null) { logger.info(sample.toString()); } } catch (IOException e) { throw new TerminateToolException(-1, "IO error while converting data : " + e.getMessage(), e); } } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_AbstractC0100644 0000000 0000000 00000000164 14523004075 032511 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/AbstractCrossValidatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/AbstractCrossValidatorToo0100644 0000000 0000000 00000002343 14523004075 034262 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; /** * Base class for cross validator tools. */ public abstract class AbstractCrossValidatorTool extends AbstractTrainerTool { /** * Constructor with type parameters. * * @param sampleType class of the template parameter * @param params interface with parameters */ protected AbstractCrossValidatorTool(Class sampleType, Class

params) { super(sampleType, params); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_AbstractE0100644 0000000 0000000 00000000157 14523004075 032515 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/AbstractEvaluatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/AbstractEvaluatorTool.jav0100644 0000000 0000000 00000003434 14523004075 034222 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import opennlp.tools.util.ObjectStream; /** * Base class for evaluator tools. */ public abstract class AbstractEvaluatorTool extends AbstractTypedParamTool { protected P params; protected ObjectStreamFactory factory; protected ObjectStream sampleStream; /** * Constructor with type parameters. * * @param sampleType class of the template parameter * @param params interface with parameters */ protected AbstractEvaluatorTool(Class sampleType, Class

params) { super(sampleType, params); } @Override public void run(String format, String[] args) { validateAllArgs(args, this.paramsClass, format); params = ArgumentParser.parse( ArgumentParser.filter(args, this.paramsClass), this.paramsClass); factory = getStreamFactory(format); String[] fargs = ArgumentParser.filter(args, factory.getParameters()); validateFactoryArgs(factory, fargs); sampleStream = factory.create(fargs); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/AbstractTrainerTool.java0100644 0000000 0000000 00000004001 14523004075 034014 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import java.io.IOException; import opennlp.tools.util.InsufficientTrainingDataException; import opennlp.tools.util.TrainingParameters; /** * Base class for trainer tools. */ public abstract class AbstractTrainerTool extends AbstractEvaluatorTool { protected TrainingParameters mlParams; /** * Constructor with type parameters. * * @param sampleType class of the template parameter * @param params interface with parameters */ protected AbstractTrainerTool(Class sampleType, Class

params) { super(sampleType, params); } protected TerminateToolException createTerminationIOException(IOException e) { if (e instanceof InsufficientTrainingDataException) { return new TerminateToolException(-1, "\n\nERROR: Not enough training data\n" + "The provided training data is not sufficient to create enough events to train a model.\n" + "To resolve this error use more training data, if this doesn't help there might\n" + "be some fundamental problem with the training data itself."); } return new TerminateToolException(-1, "IO error while reading training data or indexing data: " + e.getMessage(), e); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_AbstractT0100644 0000000 0000000 00000000160 14523004075 032526 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/AbstractTypedParamTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/AbstractTypedParamTool.ja0100644 0000000 0000000 00000004063 14523004075 034137 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; /** * Base class for tools which take additional parameters. For example, trainers or evaluators. */ public abstract class AbstractTypedParamTool extends TypedCmdLineTool { /** * variable to access the parameters */ protected final Class

paramsClass; /** * Constructor with type parameters. * * @param sampleType class of the template parameter * @param paramsClass interface with parameters */ protected AbstractTypedParamTool(Class sampleType, Class

paramsClass) { super(sampleType); this.paramsClass = paramsClass; } @Override public String getHelp(String format) { if ("".equals(format) || StreamFactoryRegistry.DEFAULT_FORMAT.equals(format)) { return getBasicHelp(paramsClass, StreamFactoryRegistry.getFactory(type, StreamFactoryRegistry.DEFAULT_FORMAT).getParameters()); } else { ObjectStreamFactory factory = StreamFactoryRegistry.getFactory(type, format); if (null == factory) { throw new TerminateToolException(1, "Format " + format + " is not found.\n" + getHelp()); } return "Usage: " + CLI.CMD + " " + getName() + "." + format + " " + ArgumentParser.createUsage(paramsClass, factory.getParameters()); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/ArgumentParser.java0100644 0000000 0000000 00000042503 14523004075 033036 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import java.io.File; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.nio.charset.Charset; import java.nio.charset.IllegalCharsetNameException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import opennlp.tools.commons.Internal; /** * Parser for command line arguments. The parser creates a dynamic proxy which * can be access via a command line argument interface. * *

* * The command line argument proxy interface must follow these conventions:
* - Methods do not define arguments
* - Method names must start with get
* - Allowed return types are Integer, Boolean, String, File and Charset.
*

* Note: Do not use this class, internal use only! */ @Internal public class ArgumentParser { public @Retention(RetentionPolicy.RUNTIME) @interface OptionalParameter { // CHECKSTYLE:OFF String DEFAULT_CHARSET = "DEFAULT_CHARSET"; // CHECKSTYLE:ON String defaultValue() default ""; } public @Retention(RetentionPolicy.RUNTIME) @interface ParameterDescription { String valueName(); String description() default ""; } private interface ArgumentFactory { String INVALID_ARG = "Invalid argument: %s %s \n"; Object parseArgument(Method method, String argName, String argValue); } private static class IntegerArgumentFactory implements ArgumentFactory { @Override public Object parseArgument(Method method, String argName, String argValue) { Object value; try { value = Integer.parseInt(argValue); } catch (NumberFormatException e) { throw new TerminateToolException(1, String.format(INVALID_ARG, argName, argValue) + "Value must be an integer!", e); } return value; } } private static class BooleanArgumentFactory implements ArgumentFactory { @Override public Object parseArgument(Method method, String argName, String argValue) { return Boolean.parseBoolean(argValue); } } private static class StringArgumentFactory implements ArgumentFactory { @Override public Object parseArgument(Method method, String argName, String argValue) { return argValue; } } private static class FileArgumentFactory implements ArgumentFactory { @Override public Object parseArgument(Method method, String argName, String argValue) { return new File(argValue); } } private static class CharsetArgumentFactory implements ArgumentFactory { @Override public Object parseArgument(Method method, String argName, String charsetName) { try { if (OptionalParameter.DEFAULT_CHARSET.equals(charsetName)) { return Charset.defaultCharset(); } else if (Charset.isSupported(charsetName)) { return Charset.forName(charsetName); } else { throw new TerminateToolException(1, String.format(INVALID_ARG, argName, charsetName) + "Encoding not supported on this platform."); } } catch (IllegalCharsetNameException e) { throw new TerminateToolException(1, String.format(INVALID_ARG, argName, charsetName) + "Illegal encoding name."); } } } private record ArgumentProxy(Map arguments) implements InvocationHandler { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (args != null) throw new IllegalStateException(); return arguments.get(method.getName()); } } private static final Map, ArgumentFactory> argumentFactories; static { Map, ArgumentFactory> factories = new HashMap<>(); factories.put(Integer.class, new IntegerArgumentFactory()); factories.put(Boolean.class, new BooleanArgumentFactory()); factories.put(String.class, new StringArgumentFactory()); factories.put(File.class, new FileArgumentFactory()); factories.put(Charset.class, new CharsetArgumentFactory()); argumentFactories = Collections.unmodifiableMap(factories); } private ArgumentParser() { } private static void checkProxyInterfaces(Class... proxyInterfaces) { for (Class proxyInterface : proxyInterfaces) { if (null != proxyInterface) { if (!proxyInterface.isInterface()) throw new IllegalArgumentException("proxy interface is not an interface!"); // all checks should also be performed for super interfaces Method[] methods = proxyInterface.getMethods(); if (methods.length == 0) throw new IllegalArgumentException("proxy interface must at least declare one method!"); for (Method method : methods) { // check that method names start with get if (!method.getName().startsWith("get") && method.getName().length() > 3) throw new IllegalArgumentException(method.getName() + " method name does not start with 'get'!"); // check that method has zero arguments if (method.getParameterTypes().length != 0) { throw new IllegalArgumentException(method.getName() + " method must have zero parameters but has " + method.getParameterTypes().length + "!"); } // check return types of interface Class returnType = method.getReturnType(); Set> compatibleReturnTypes = argumentFactories.keySet(); if (!compatibleReturnTypes.contains(returnType)) { throw new IllegalArgumentException(method.getName() + " method must have compatible return type! Got " + returnType + ", expected one of " + compatibleReturnTypes); } } } } } private static String methodNameToParameter(String methodName) { // remove get from method name char[] parameterNameChars = methodName.toCharArray(); // name length is checked to be at least 4 prior parameterNameChars[3] = Character.toLowerCase(parameterNameChars[3]); return "-" + new String(parameterNameChars).substring(3); } /** * Creates a usage string which can be printed in case the user did specify the arguments * incorrectly. Incorrectly is defined as {@link ArgumentParser#validateArguments(String[], Class)} * returns {@code false}. * * @param argProxyInterface interface with parameter descriptions * @return the help message usage string */ public static String createUsage(Class argProxyInterface) { return createUsage(new Class[]{argProxyInterface}); } /** * Auxiliary record that holds information about an argument. This is used by the * {@link GenerateManualTool}, which creates a Docbook for the CLI automatically. */ record Argument(String argument, String value, String description, boolean optional) { } /** * Outputs the arguments as a data structure, so it can be used to create documentation. * * @param argProxyInterfaces interfaces with parameter descriptions * @return the help message usage string */ public static List createArguments(Class... argProxyInterfaces) { checkProxyInterfaces(argProxyInterfaces); Set duplicateFilter = new HashSet<>(); List arguments = new LinkedList<>(); for (Class argProxyInterface : argProxyInterfaces) { if (null != argProxyInterface) { for (Method method : argProxyInterface.getMethods()) { ParameterDescription desc = method.getAnnotation(ParameterDescription.class); OptionalParameter optional = method.getAnnotation(OptionalParameter.class); if (desc != null) { String paramName = methodNameToParameter(method.getName()); if (duplicateFilter.contains(paramName)) { continue; } else { duplicateFilter.add(paramName); } boolean isOptional = optional != null; Argument arg = new Argument(paramName.substring(1), desc.valueName(), desc.description(), isOptional); arguments.add(arg); } } } } return arguments; } /** * Creates a usage string which can be printed in case the user did specify the arguments * incorrectly. Incorrectly is defined as {@link ArgumentParser#validateArguments(String[], * Class[])} returns {@code false}. * * @param argProxyInterfaces interfaces with parameter descriptions * @return the help message usage string */ public static String createUsage(Class... argProxyInterfaces) { checkProxyInterfaces(argProxyInterfaces); Set duplicateFilter = new HashSet<>(); StringBuilder usage = new StringBuilder(); StringBuilder details = new StringBuilder(); for (Class argProxyInterface : argProxyInterfaces) { if (null != argProxyInterface) { for (Method method : argProxyInterface.getMethods()) { ParameterDescription desc = method.getAnnotation(ParameterDescription.class); OptionalParameter optional = method.getAnnotation(OptionalParameter.class); if (desc != null) { String paramName = methodNameToParameter(method.getName()); if (duplicateFilter.contains(paramName)) { continue; } else { duplicateFilter.add(paramName); } if (optional != null) usage.append('['); usage.append(paramName).append(' ').append(desc.valueName()); details.append('\t').append(paramName).append(' ').append(desc.valueName()).append('\n'); if (desc.description().length() > 0) { details.append("\t\t").append(desc.description()).append('\n'); } if (optional != null) usage.append(']'); usage.append(' '); } } } } if (usage.length() > 0) usage.setLength(usage.length() - 1); if (details.length() > 0) { details.setLength(details.length() - 1); usage.append("\n\nArguments description:\n").append(details); } return usage.toString(); } /** * Tests if the argument are correct or incorrect. Incorrect means, that mandatory arguments are missing or * there are unknown arguments. The argument value itself can also be incorrect, but this * is checked by the {@link ArgumentParser#parse(String[], Class)} method and reported accordingly. * * @param args command line arguments * @param argProxyInterface interface with parameters description * @return {@code true} if arguments are valid, {@code false otherwise} */ public static boolean validateArguments(String[] args, Class argProxyInterface) { return validateArguments(args, new Class[]{argProxyInterface}); } /** * Tests if the argument are correct or incorrect. Incorrect means, that mandatory arguments are missing or * there are unknown arguments. The argument value itself can also be incorrect, but this * is checked by the {@link ArgumentParser#parse(String[], Class)} method and reported accordingly. * * @param args command line arguments * @param argProxyInterfaces interfaces with parameters description * @return {@code true} if arguments are valid, {@code false otherwise} */ public static boolean validateArguments(String[] args, Class... argProxyInterfaces) { return null == validateArgumentsLoudly(args, argProxyInterfaces); } /** * Tests if the arguments are correct or incorrect. * * @param args command line arguments * @param argProxyInterface interface with parameters description * @return {@code null}, if arguments are valid or error message otherwise */ public static String validateArgumentsLoudly(String[] args, Class argProxyInterface) { return validateArgumentsLoudly(args, new Class[]{argProxyInterface}); } /** * Tests if the arguments are correct or incorrect. * * @param args command line arguments * @param argProxyInterfaces interfaces with parameters description * @return {@code null}, if arguments are valid or error message otherwise */ public static String validateArgumentsLoudly(String[] args, Class... argProxyInterfaces) { // number of parameters must be always be even if (args.length % 2 != 0) { return "Number of parameters must be always be even"; } int argumentCount = 0; List parameters = new ArrayList<>(Arrays.asList(args)); for (Class argProxyInterface : argProxyInterfaces) { for (Method method : argProxyInterface.getMethods()) { String paramName = methodNameToParameter(method.getName()); int paramIndex = CmdLineUtil.getParameterIndex(paramName, args); String valueString = CmdLineUtil.getParameter(paramName, args); if (valueString == null) { OptionalParameter optionalParam = method.getAnnotation(OptionalParameter.class); if (optionalParam == null) { if (-1 < paramIndex) { return "Missing mandatory parameter value: " + paramName; } else { return "Missing mandatory parameter: " + paramName; } } else { parameters.remove("-" + paramName); } } else { parameters.remove(paramName); parameters.remove(valueString); argumentCount++; } } } if (args.length / 2 > argumentCount) { return "Unrecognized parameters encountered: " + parameters; } return null; } /** * Parses the passed arguments and creates an instance of the proxy interface. *

* In case an argument value cannot be parsed a {@link TerminateToolException} is * thrown which contains an error message which explains the problems. * * @param args arguments * @param argProxyInterface interface with parameters description * * @return parsed parameters * * @throws TerminateToolException if an argument value cannot be parsed. * @throws IllegalArgumentException if validateArguments returns {@code false}, * if the proxy interface is not compatible. */ @SuppressWarnings("unchecked") public static T parse(String[] args, Class argProxyInterface) { checkProxyInterfaces(argProxyInterface); if (!validateArguments(args, argProxyInterface)) throw new IllegalArgumentException("Passed args must be valid!"); Map arguments = new HashMap<>(); for (Method method : argProxyInterface.getMethods()) { String parameterName = methodNameToParameter(method.getName()); String valueString = CmdLineUtil.getParameter(parameterName, args); if (valueString == null) { OptionalParameter optionalParam = method.getAnnotation(OptionalParameter.class); if (optionalParam.defaultValue().length() > 0) valueString = optionalParam.defaultValue(); } Class returnType = method.getReturnType(); Object value; if (valueString != null) { ArgumentFactory factory = argumentFactories.get(returnType); if (factory == null) throw new IllegalStateException("factory for '" + returnType + "' must not be null"); value = factory.parseArgument(method, parameterName, valueString); } else value = null; arguments.put(method.getName(), value); } return (T) java.lang.reflect.Proxy.newProxyInstance( argProxyInterface.getClassLoader(), new Class[]{argProxyInterface}, new ArgumentProxy(arguments)); } /** * Filters arguments leaving only those pertaining to {@code argProxyInterface}. * * @param args arguments * @param argProxyInterface interface with parameters description * @param T * @return arguments pertaining to {@code argProxyInterface} */ public static String[] filter(String[] args, Class argProxyInterface) { ArrayList parameters = new ArrayList<>(args.length); for (Method method : argProxyInterface.getMethods()) { String parameterName = methodNameToParameter(method.getName()); int idx = CmdLineUtil.getParameterIndex(parameterName, args); if (-1 < idx) { parameters.add(parameterName); String valueString = CmdLineUtil.getParameter(parameterName, args); if (null != valueString) { parameters.add(valueString); } } } return parameters.toArray(new String[0]); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/BasicCmdLineTool.java0100644 0000000 0000000 00000002330 14523004075 033204 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import opennlp.tools.commons.Internal; /** * A simple {@link CmdLineTool tool} which can be executed from the command line. *

* Note: Do not use this class, internal use only! */ @Internal public abstract class BasicCmdLineTool extends CmdLineTool { /** * Executes the tool with the given parameters. * * @param args arguments */ public abstract void run(String[] args); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/CLI.java0100644 0000000 0000000 00000024455 14523004075 030514 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.chunker.ChunkerConverterTool; import opennlp.tools.cmdline.chunker.ChunkerCrossValidatorTool; import opennlp.tools.cmdline.chunker.ChunkerEvaluatorTool; import opennlp.tools.cmdline.chunker.ChunkerMETool; import opennlp.tools.cmdline.chunker.ChunkerTrainerTool; import opennlp.tools.cmdline.dictionary.DictionaryBuilderTool; import opennlp.tools.cmdline.doccat.DoccatConverterTool; import opennlp.tools.cmdline.doccat.DoccatCrossValidatorTool; import opennlp.tools.cmdline.doccat.DoccatEvaluatorTool; import opennlp.tools.cmdline.doccat.DoccatTool; import opennlp.tools.cmdline.doccat.DoccatTrainerTool; import opennlp.tools.cmdline.entitylinker.EntityLinkerTool; import opennlp.tools.cmdline.langdetect.LanguageDetectorConverterTool; import opennlp.tools.cmdline.langdetect.LanguageDetectorCrossValidatorTool; import opennlp.tools.cmdline.langdetect.LanguageDetectorEvaluatorTool; import opennlp.tools.cmdline.langdetect.LanguageDetectorTool; import opennlp.tools.cmdline.langdetect.LanguageDetectorTrainerTool; import opennlp.tools.cmdline.languagemodel.NGramLanguageModelTool; import opennlp.tools.cmdline.lemmatizer.LemmatizerEvaluatorTool; import opennlp.tools.cmdline.lemmatizer.LemmatizerMETool; import opennlp.tools.cmdline.lemmatizer.LemmatizerTrainerTool; import opennlp.tools.cmdline.namefind.CensusDictionaryCreatorTool; import opennlp.tools.cmdline.namefind.TokenNameFinderConverterTool; import opennlp.tools.cmdline.namefind.TokenNameFinderCrossValidatorTool; import opennlp.tools.cmdline.namefind.TokenNameFinderEvaluatorTool; import opennlp.tools.cmdline.namefind.TokenNameFinderTool; import opennlp.tools.cmdline.namefind.TokenNameFinderTrainerTool; import opennlp.tools.cmdline.parser.BuildModelUpdaterTool; import opennlp.tools.cmdline.parser.CheckModelUpdaterTool; import opennlp.tools.cmdline.parser.ParserConverterTool; import opennlp.tools.cmdline.parser.ParserEvaluatorTool; import opennlp.tools.cmdline.parser.ParserTool; import opennlp.tools.cmdline.parser.ParserTrainerTool; import opennlp.tools.cmdline.parser.TaggerModelReplacerTool; import opennlp.tools.cmdline.postag.POSTaggerConverterTool; import opennlp.tools.cmdline.postag.POSTaggerCrossValidatorTool; import opennlp.tools.cmdline.postag.POSTaggerEvaluatorTool; import opennlp.tools.cmdline.postag.POSTaggerTrainerTool; import opennlp.tools.cmdline.sentdetect.SentenceDetectorConverterTool; import opennlp.tools.cmdline.sentdetect.SentenceDetectorCrossValidatorTool; import opennlp.tools.cmdline.sentdetect.SentenceDetectorEvaluatorTool; import opennlp.tools.cmdline.sentdetect.SentenceDetectorTool; import opennlp.tools.cmdline.sentdetect.SentenceDetectorTrainerTool; import opennlp.tools.cmdline.tokenizer.DictionaryDetokenizerTool; import opennlp.tools.cmdline.tokenizer.SimpleTokenizerTool; import opennlp.tools.cmdline.tokenizer.TokenizerConverterTool; import opennlp.tools.cmdline.tokenizer.TokenizerCrossValidatorTool; import opennlp.tools.cmdline.tokenizer.TokenizerMEEvaluatorTool; import opennlp.tools.cmdline.tokenizer.TokenizerMETool; import opennlp.tools.cmdline.tokenizer.TokenizerTrainerTool; import opennlp.tools.util.Version; public final class CLI { private static final Logger logger = LoggerFactory.getLogger(CLI.class); public static final String CMD = "opennlp"; private static Map toolLookupMap; static { toolLookupMap = new LinkedHashMap<>(); List tools = new LinkedList<>(); // Document Categorizer tools.add(new DoccatTool()); tools.add(new DoccatTrainerTool()); tools.add(new DoccatEvaluatorTool()); tools.add(new DoccatCrossValidatorTool()); tools.add(new DoccatConverterTool()); // Language Detector tools.add(new LanguageDetectorTool()); tools.add(new LanguageDetectorTrainerTool()); tools.add(new LanguageDetectorConverterTool()); tools.add(new LanguageDetectorCrossValidatorTool()); tools.add(new LanguageDetectorEvaluatorTool()); // Dictionary Builder tools.add(new DictionaryBuilderTool()); // Tokenizer tools.add(new SimpleTokenizerTool()); tools.add(new TokenizerMETool()); tools.add(new TokenizerTrainerTool()); tools.add(new TokenizerMEEvaluatorTool()); tools.add(new TokenizerCrossValidatorTool()); tools.add(new TokenizerConverterTool()); tools.add(new DictionaryDetokenizerTool()); // Sentence detector tools.add(new SentenceDetectorTool()); tools.add(new SentenceDetectorTrainerTool()); tools.add(new SentenceDetectorEvaluatorTool()); tools.add(new SentenceDetectorCrossValidatorTool()); tools.add(new SentenceDetectorConverterTool()); // Name Finder tools.add(new TokenNameFinderTool()); tools.add(new TokenNameFinderTrainerTool()); tools.add(new TokenNameFinderEvaluatorTool()); tools.add(new TokenNameFinderCrossValidatorTool()); tools.add(new TokenNameFinderConverterTool()); tools.add(new CensusDictionaryCreatorTool()); // POS Tagger tools.add(new opennlp.tools.cmdline.postag.POSTaggerTool()); tools.add(new POSTaggerTrainerTool()); tools.add(new POSTaggerEvaluatorTool()); tools.add(new POSTaggerCrossValidatorTool()); tools.add(new POSTaggerConverterTool()); //Lemmatizer tools.add(new LemmatizerMETool()); tools.add(new LemmatizerTrainerTool()); tools.add(new LemmatizerEvaluatorTool()); // Chunker tools.add(new ChunkerMETool()); tools.add(new ChunkerTrainerTool()); tools.add(new ChunkerEvaluatorTool()); tools.add(new ChunkerCrossValidatorTool()); tools.add(new ChunkerConverterTool()); // Parser tools.add(new ParserTool()); tools.add(new ParserTrainerTool()); // trains everything tools.add(new ParserEvaluatorTool()); tools.add(new ParserConverterTool()); // trains everything tools.add(new BuildModelUpdaterTool()); // re-trains build model tools.add(new CheckModelUpdaterTool()); // re-trains build model tools.add(new TaggerModelReplacerTool()); // Entity Linker tools.add(new EntityLinkerTool()); // Language Model tools.add(new NGramLanguageModelTool()); for (CmdLineTool tool : tools) { toolLookupMap.put(tool.getName(), tool); } toolLookupMap = Collections.unmodifiableMap(toolLookupMap); } /** * @return a set which contains all tool names */ public static Set getToolNames() { return toolLookupMap.keySet(); } /** * @return a read only map with tool names and instances */ public static Map getToolLookupMap() { return toolLookupMap; } private static void usage() { logger.info("OpenNLP {}.", Version.currentVersion() ); logger.info("Usage: {} TOOL", CMD); // distance of tool name from line start int numberOfSpaces = -1; for (String toolName : toolLookupMap.keySet()) { if (toolName.length() > numberOfSpaces) { numberOfSpaces = toolName.length(); } } numberOfSpaces = numberOfSpaces + 4; final StringBuilder sb = new StringBuilder("where TOOL is one of: \n\n"); for (CmdLineTool tool : toolLookupMap.values()) { sb.append(" ").append(tool.getName()); sb.append(" ".repeat(Math.max(0, StrictMath.abs( tool.getName().length() - numberOfSpaces)))); sb.append(tool.getShortDescription()).append("\n"); } logger.info(sb.toString()); logger.info("All tools print help when invoked with help parameter"); logger.info("Example: opennlp SimpleTokenizer help"); } public static void main(String[] args) { if (args.length == 0) { usage(); System.exit(0); } final long startTime = System.currentTimeMillis(); String[] toolArguments = new String[args.length - 1]; System.arraycopy(args, 1, toolArguments, 0, toolArguments.length); String toolName = args[0]; //check for format String formatName = StreamFactoryRegistry.DEFAULT_FORMAT; int idx = toolName.indexOf("."); if (-1 < idx) { formatName = toolName.substring(idx + 1); toolName = toolName.substring(0, idx); } CmdLineTool tool = toolLookupMap.get(toolName); try { if (null == tool) { throw new TerminateToolException(1, "Tool " + toolName + " is not found."); } if ((0 == toolArguments.length && tool.hasParams()) || 0 < toolArguments.length && "help".equals(toolArguments[0])) { if (tool instanceof TypedCmdLineTool) { logger.info(((TypedCmdLineTool) tool).getHelp(formatName)); } else if (tool instanceof BasicCmdLineTool) { logger.info(tool.getHelp()); } System.exit(0); } if (tool instanceof TypedCmdLineTool) { ((TypedCmdLineTool) tool).run(formatName, toolArguments); } else if (tool instanceof BasicCmdLineTool) { if (-1 == idx) { ((BasicCmdLineTool) tool).run(toolArguments); } else { throw new TerminateToolException(1, "Tool " + toolName + " does not support formats."); } } else { throw new TerminateToolException(1, "Tool " + toolName + " is not supported."); } } catch (TerminateToolException e) { logger.error(e.getLocalizedMessage(), e); System.exit(e.getCode()); } final long endTime = System.currentTimeMillis(); logger.info(String.format("Execution time: %.3f seconds\n", (endTime - startTime) / 1000.0)); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/CmdLineTool.java0100644 0000000 0000000 00000004506 14523004075 032251 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; /** * Base class for all command line tools. */ public abstract class CmdLineTool { protected CmdLineTool() { } /** * @return Retrieves the name of the command line tool. The name (used as command) * must not contain white spaces. */ public String getName() { if (getClass().getName().endsWith("Tool")) { return getClass().getSimpleName().substring(0, getClass().getSimpleName().length() - 4); } else { return getClass().getSimpleName(); } } /** * @return Retrieves whether the tool has any command line params */ public boolean hasParams() { return true; } protected String getBasicHelp(Class argProxyInterface) { return getBasicHelp(new Class[]{argProxyInterface}); } protected String getBasicHelp(Class... argProxyInterfaces) { return "Usage: " + CLI.CMD + " " + getName() + " " + ArgumentParser.createUsage(argProxyInterfaces); } /** * @return Retrieves a description on how to use the tool */ public abstract String getHelp(); protected T validateAndParseParams(String[] args, Class argProxyInterface) { String errorMessage = ArgumentParser.validateArgumentsLoudly(args, argProxyInterface); if (null != errorMessage) { throw new TerminateToolException(1, errorMessage + "\n" + getHelp()); } return ArgumentParser.parse(args, argProxyInterface); } /** * @return Retrieves a short description of what the tool does */ public String getShortDescription() { return ""; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/CmdLineUtil.java0100644 0000000 0000000 00000024664 14523004075 032260 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Locale; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.commons.Internal; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.MarkableFileInputStreamFactory; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.BaseModel; /** * Util class for the command line interface. *

* Note: Do not use this class, internal use only! */ @Internal public final class CmdLineUtil { private static final Logger logger = LoggerFactory.getLogger(CmdLineUtil.class); static final int IO_BUFFER_SIZE = 1024 * 1024; private CmdLineUtil() { // not intended to be instantiated } /** * Check that the given input file is valid. *

* To pass the test it must:
* - exist
* - not be a directory,
* - and be accessibly.
* * @param name the name which is used to refer to the file in an error message, it * should start with a capital letter. * * @param inFile the particular {@link File} to check to qualify an input file * * @throws TerminateToolException if test does not pass this exception is * thrown and an error message is printed to the console. */ public static void checkInputFile(String name, File inFile) { String isFailure = null; if (inFile.isDirectory()) { isFailure = "The " + name + " file is a directory!"; } else if (!inFile.exists()) { isFailure = "The " + name + " file does not exist!"; } else if (!inFile.canRead()) { isFailure = "No permissions to read the " + name + " file!"; } if (null != isFailure) { throw new TerminateToolException(-1, isFailure + " Path: " + inFile.getAbsolutePath()); } } /** * Tries to ensure that it is possible to write to an output file. *

* The method does nothing if it is possible to write otherwise * it prints an appropriate error message and a {@link TerminateToolException} is thrown. *

* Computing the contents of an output file (e.g. ME model) can be very time-consuming. * Prior to this computation it should be checked once that writing this output file is * possible to be able to fail fast if not. If this validation is only done after a * time-consuming computation it could frustrate the user. * * @param name human-friendly file name. for example perceptron model * @param outFile the particular {@link File} to check to qualify an output file */ public static void checkOutputFile(String name, File outFile) { String isFailure = null; if (outFile.exists()) { // The file already exists, ensure that it is a normal file and that it is // possible to write into it if (outFile.isDirectory()) { isFailure = "The " + name + " file is a directory!"; } else if (outFile.isFile()) { if (!outFile.canWrite()) { isFailure = "No permissions to write the " + name + " file!"; } } else { isFailure = "The " + name + " file is not a normal file!"; } } else { // The file does not exist ensure its parent // directory exists and has write permissions to create // a new file in it File parentDir = outFile.getAbsoluteFile().getParentFile(); if (parentDir != null && parentDir.exists()) { if (!parentDir.canWrite()) { isFailure = "No permissions to create the " + name + " file!"; } } else { isFailure = "The parent directory of the " + name + " file does not exist, " + "please create it first!"; } } if (null != isFailure) { throw new TerminateToolException(-1, isFailure + " Path: " + outFile.getAbsolutePath()); } } public static FileInputStream openInFile(File file) { try { return new FileInputStream(file); } catch (FileNotFoundException e) { throw new TerminateToolException(-1, "File '" + file + "' cannot be found", e); } } public static InputStreamFactory createInputStreamFactory(File file) { try { return new MarkableFileInputStreamFactory(file); } catch (FileNotFoundException e) { throw new TerminateToolException(-1, "File '" + file + "' cannot be found", e); } } /** * Writes a {@link BaseModel} to disk. Occurring errors are printed to the console * to inform the user. * * @param modelName name of the model, name is used in error messages. * @param modelFile output file of the model * @param model the model itself which should be written to disk */ public static void writeModel(String modelName, File modelFile, BaseModel model) { CmdLineUtil.checkOutputFile(modelName + " model", modelFile); logger.info("Writing {} model ... ", modelName); long beginModelWritingTime = System.currentTimeMillis(); try (OutputStream modelOut = new BufferedOutputStream( new FileOutputStream(modelFile), IO_BUFFER_SIZE)) { model.serialize(modelOut); } catch (IOException e) { throw new TerminateToolException(-1, "Error during writing model file '" + modelFile + "'", e); } long modelWritingDuration = System.currentTimeMillis() - beginModelWritingTime; logger.info(String.format("done (%.3fs)\n", modelWritingDuration / 1000d)); logger.info("Wrote {} model to path: {}", modelName, modelFile.getAbsolutePath()); } /** * Returns the index of the parameter in the arguments, or {@code -1} if the parameter is not found. * * @param param parameter name * @param args arguments * @return the index of the parameter in the arguments, or {@code -1} if the parameter is not found */ public static int getParameterIndex(String param, String[] args) { for (int i = 0; i < args.length; i++) { if (args[i].startsWith("-") && args[i].equals(param)) { return i; } } return -1; } /** * Retrieves the specified parameter from the given arguments. * * @param param parameter name * @param args arguments * @return parameter value */ public static String getParameter(String param, String[] args) { int i = getParameterIndex(param, args); if (-1 < i) { i++; if (i < args.length) { return args[i]; } } return null; } /** * Retrieves the specified parameter from the specified arguments. * * @param param parameter name * @param args arguments * @return parameter value */ public static Integer getIntParameter(String param, String[] args) { String value = getParameter(param, args); try { if (value != null) return Integer.parseInt(value); } catch (NumberFormatException ignored) { // in this case return null } return null; } /** * Retrieves the specified parameter from the specified arguments. * * @param param parameter name * @param args arguments * @return parameter value */ public static Double getDoubleParameter(String param, String[] args) { String value = getParameter(param, args); try { if (value != null) return Double.parseDouble(value); } catch (NumberFormatException ignored) { // in this case return null } return null; } public static void checkLanguageCode(String code) { List languageCodes = new ArrayList<>(Arrays.asList(Locale.getISOLanguages())); languageCodes.add("x-unspecified"); if (!languageCodes.contains(code)) { throw new TerminateToolException(1, "Unknown language code " + code + ", " + "must be an ISO 639 code!"); } } public static boolean containsParam(String param, String[] args) { for (String arg : args) { if (arg.equals(param)) { return true; } } return false; } public static void handleStdinIoError(IOException e) { throw new TerminateToolException(-1, "IO Error while reading from stdin: " + e.getMessage(), e); } public static TerminateToolException createObjectStreamError(IOException e) { return new TerminateToolException(-1, "IO Error while creating an Input Stream: " + e.getMessage(), e); } public static void handleCreateObjectStreamError(IOException e) { throw createObjectStreamError(e); } // its optional, passing null is allowed public static TrainingParameters loadTrainingParameters(String paramFile, boolean supportSequenceTraining) { TrainingParameters params = null; if (paramFile != null) { checkInputFile("Training Parameter", new File(paramFile)); try (InputStream paramsIn = new BufferedInputStream(new FileInputStream(paramFile))) { params = new opennlp.tools.util.TrainingParameters(paramsIn); } catch (IOException e) { throw new TerminateToolException(-1, "Error during parameters loading: " + e.getMessage(), e); } if (!TrainerFactory.isValid(params)) { throw new TerminateToolException(1, "Training parameters file '" + paramFile + "' is invalid!"); } TrainerFactory.TrainerType trainerType = TrainerFactory.getTrainerType(params); if (!supportSequenceTraining && trainerType.equals(TrainerFactory.TrainerType.EVENT_MODEL_SEQUENCE_TRAINER)) { throw new TerminateToolException(1, "Sequence training is not supported!"); } } return params; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_DetailedF0100644 0000000 0000000 00000000162 14523004075 032462 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/DetailedFMeasureListener.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/DetailedFMeasureListener.0100644 0000000 0000000 00000017240 14523004075 034106 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import opennlp.tools.commons.Internal; import opennlp.tools.util.Span; import opennlp.tools.util.eval.EvaluationMonitor; /** * This listener will gather detailed information about the sample under evaluation and will * allow detailed FMeasure for each outcome. *

* Note: Do not use this class, internal use only! */ @Internal public abstract class DetailedFMeasureListener implements EvaluationMonitor { private int samples = 0; private final Stats generalStats = new Stats(); private final Map statsForOutcome = new HashMap<>(); protected abstract Span[] asSpanArray(T sample); @Override public void correctlyClassified(T reference, T prediction) { samples++; // add all true positives! Span[] spans = asSpanArray(reference); for (Span span : spans) { addTruePositive(span.getType()); } } @Override public void misclassified(T reference, T prediction) { samples++; Span[] references = asSpanArray(reference); Span[] predictions = asSpanArray(prediction); Set refSet = new HashSet<>(Arrays.asList(references)); Set predSet = new HashSet<>(Arrays.asList(predictions)); for (Span ref : refSet) { if (predSet.contains(ref)) { addTruePositive(ref.getType()); } else { addFalseNegative(ref.getType()); } } for (Span pred : predSet) { if (!refSet.contains(pred)) { addFalsePositive(pred.getType()); } } } private void addTruePositive(String type) { Stats s = initStatsForOutcomeAndGet(type); s.incrementTruePositive(); s.incrementTarget(); generalStats.incrementTruePositive(); generalStats.incrementTarget(); } private void addFalsePositive(String type) { Stats s = initStatsForOutcomeAndGet(type); s.incrementFalsePositive(); generalStats.incrementFalsePositive(); } private void addFalseNegative(String type) { Stats s = initStatsForOutcomeAndGet(type); s.incrementTarget(); generalStats.incrementTarget(); } private Stats initStatsForOutcomeAndGet(String type) { if (!statsForOutcome.containsKey(type)) { statsForOutcome.put(type, new Stats()); } return statsForOutcome.get(type); } private static final String PERCENT = "%\u00207.2f%%"; private static final String FORMAT = "%12s: precision: " + PERCENT + "; recall: " + PERCENT + "; F1: " + PERCENT + "."; private static final String FORMAT_EXTRA = FORMAT + " [target: %3d; tp: %3d; fp: %3d]"; public String createReport() { return createReport(Locale.getDefault()); } public String createReport(Locale locale) { StringBuilder ret = new StringBuilder(); int tp = generalStats.getTruePositives(); int found = generalStats.getFalsePositives() + tp; ret.append("Evaluated ").append(samples).append(" samples with ") .append(generalStats.getTarget()).append(" entities; found: ") .append(found).append(" entities; correct: ").append(tp).append(".\n"); ret.append(String.format(locale, FORMAT, "TOTAL", zeroOrPositive(generalStats.getPrecisionScore() * 100), zeroOrPositive(generalStats.getRecallScore() * 100), zeroOrPositive(generalStats.getFMeasure() * 100))); ret.append("\n"); SortedSet set = new TreeSet<>(new F1Comparator()); set.addAll(statsForOutcome.keySet()); for (String type : set) { ret.append(String.format(locale, FORMAT_EXTRA, type, zeroOrPositive(statsForOutcome.get(type).getPrecisionScore() * 100), zeroOrPositive(statsForOutcome.get(type).getRecallScore() * 100), zeroOrPositive(statsForOutcome.get(type).getFMeasure() * 100), statsForOutcome.get(type).getTarget(), statsForOutcome.get(type) .getTruePositives(), statsForOutcome.get(type) .getFalsePositives())); ret.append("\n"); } return ret.toString(); } @Override public String toString() { return createReport(); } private double zeroOrPositive(double v) { if (v < 0) { return 0; } return v; } private class F1Comparator implements Comparator { @Override public int compare(String o1, String o2) { if (o1.equals(o2)) return 0; double t1 = 0; double t2 = 0; if (statsForOutcome.containsKey(o1)) t1 += statsForOutcome.get(o1).getFMeasure(); if (statsForOutcome.containsKey(o2)) t2 += statsForOutcome.get(o2).getFMeasure(); t1 = zeroOrPositive(t1); t2 = zeroOrPositive(t2); if (t1 + t2 > 0d) { if (t1 > t2) return -1; return 1; } return o1.compareTo(o2); } } /** * Holds the statistics. */ private static class Stats { // maybe we could use FMeasure class, but it wouldn't allow us to get // details like total number of false positives and true positives. private int falsePositiveCounter = 0; private int truePositiveCounter = 0; private int targetCounter = 0; public void incrementFalsePositive() { falsePositiveCounter++; } public void incrementTruePositive() { truePositiveCounter++; } public void incrementTarget() { targetCounter++; } public int getFalsePositives() { return falsePositiveCounter; } public int getTruePositives() { return truePositiveCounter; } public int getTarget() { return targetCounter; } /** * Retrieves the arithmetic mean of the precision scores calculated for each * evaluated sample. * * @return the arithmetic mean of all precision scores */ public double getPrecisionScore() { int tp = getTruePositives(); int selected = tp + getFalsePositives(); return selected > 0 ? (double) tp / (double) selected : 0; } /** * Retrieves the arithmetic mean of the recall score calculated for each * evaluated sample. * * @return the arithmetic mean of all recall scores */ public double getRecallScore() { int target = getTarget(); int tp = getTruePositives(); return target > 0 ? (double) tp / (double) target : 0; } /** * Retrieves the f-measure score. *

* {@code f-measure = 2 * precision * recall / (precision + recall)} * * @return the f-measure or -1 if precision + recall <= 0 */ public double getFMeasure() { if (getPrecisionScore() + getRecallScore() > 0) { return 2 * (getPrecisionScore() * getRecallScore()) / (getPrecisionScore() + getRecallScore()); } else { // cannot divide by zero, return error code return -1; } } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_Evaluatio0100644 0000000 0000000 00000000160 14523004075 032570 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/EvaluationErrorPrinter.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/EvaluationErrorPrinter.ja0100644 0000000 0000000 00000016640 14523004075 034240 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import java.io.OutputStream; import java.io.PrintStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import opennlp.tools.commons.Internal; import opennlp.tools.util.Span; import opennlp.tools.util.eval.EvaluationMonitor; /** * Note: Do not use this class, internal use only! */ @Internal public abstract class EvaluationErrorPrinter implements EvaluationMonitor { protected PrintStream printStream; protected EvaluationErrorPrinter(OutputStream outputStream) { this(new PrintStream(outputStream)); } protected EvaluationErrorPrinter(PrintStream printStream) { this.printStream = printStream; } // for the sentence detector protected void printError(Span[] references, Span[] predictions, T referenceSample, T predictedSample, String sentence) { List falseNegatives = new ArrayList<>(); List falsePositives = new ArrayList<>(); findErrors(references, predictions, falseNegatives, falsePositives); if (falsePositives.size() + falseNegatives.size() > 0) { printSamples(referenceSample, predictedSample); printErrors(falsePositives, falseNegatives, sentence); } } // for namefinder, chunker... protected void printError(String id, Span[] references, Span[] predictions, T referenceSample, T predictedSample, String[] sentenceTokens) { List falseNegatives = new ArrayList<>(); List falsePositives = new ArrayList<>(); findErrors(references, predictions, falseNegatives, falsePositives); if (falsePositives.size() + falseNegatives.size() > 0) { if (id != null) { printStream.println("Id: {" + id + "}"); } printSamples(referenceSample, predictedSample); printErrors(falsePositives, falseNegatives, sentenceTokens); } } protected void printError(Span[] references, Span[] predictions, T referenceSample, T predictedSample, String[] sentenceTokens) { printError(null, references, predictions, referenceSample, predictedSample, sentenceTokens); } // for pos tagger protected void printError(String[] references, String[] predictions, T referenceSample, T predictedSample, String[] sentenceTokens) { List filteredDoc = new ArrayList<>(); List filteredRefs = new ArrayList<>(); List filteredPreds = new ArrayList<>(); for (int i = 0; i < references.length; i++) { if (!references[i].equals(predictions[i])) { filteredDoc.add(sentenceTokens[i]); filteredRefs.add(references[i]); filteredPreds.add(predictions[i]); } } if (filteredDoc.size() > 0) { printSamples(referenceSample, predictedSample); printErrors(filteredDoc, filteredRefs, filteredPreds); } } // for others protected void printError(T referenceSample, T predictedSample) { printSamples(referenceSample, predictedSample); printStream.println(); } /** * Auxiliary method to print tag errors * * @param filteredDoc * the document tokens which were tagged wrong * @param filteredRefs * the reference tags * @param filteredPreds * the predicted tags */ private void printErrors(List filteredDoc, List filteredRefs, List filteredPreds) { printStream.println("Errors: {"); printStream.println("Tok: Ref | Pred"); printStream.println("---------------"); for (int i = 0; i < filteredDoc.size(); i++) { printStream.println(filteredDoc.get(i) + ": " + filteredRefs.get(i) + " | " + filteredPreds.get(i)); } printStream.println("}\n"); } /** * Auxiliary method to print span errors * * @param falsePositives * false positives span * @param falseNegatives * false negative span * @param doc * the document text */ private void printErrors(List falsePositives, List falseNegatives, String doc) { printStream.println("False positives: {"); for (Span span : falsePositives) { printStream.println(span.getCoveredText(doc)); } printStream.println("} False negatives: {"); for (Span span : falseNegatives) { printStream.println(span.getCoveredText(doc)); } printStream.println("}\n"); } /** * Auxiliary method to print span errors * * @param falsePositives * false positives span * @param falseNegatives * false negative span * @param toks * the document tokens */ private void printErrors(List falsePositives, List falseNegatives, String[] toks) { printStream.println("False positives: {"); printStream.println(print(falsePositives, toks)); printStream.println("} False negatives: {"); printStream.println(print(falseNegatives, toks)); printStream.println("}\n"); } /** * Auxiliary method to print spans * * @param spans * the span list * @param toks * the tokens array * @return the spans as string */ private String print(List spans, String[] toks) { return Arrays.toString(Span.spansToStrings( spans.toArray(new Span[0]), toks)); } /** * Auxiliary method to print expected and predicted samples. * * @param referenceSample The {@link S} from the references. * @param predictedSample The {@link S} of the predictions. */ private void printSamples(S referenceSample, S predictedSample) { String details = "Expected: {\n" + referenceSample + "}\nPredicted: {\n" + predictedSample + "}"; printStream.println(details); } /** * Outputs falseNegatives and falsePositives spans from the references and * predictions list. * * @param references The {@link Span spans} from the references. * @param predictions The {@link Span spans} of the predictions. * @param falseNegatives The false negatives list. * @param falsePositives The false positives list. */ private void findErrors(Span[] references, Span[] predictions, List falseNegatives, List falsePositives) { falseNegatives.addAll(Arrays.asList(references)); falsePositives.addAll(Arrays.asList(predictions)); for (Span referenceName : references) { for (Span prediction : predictions) { if (referenceName.equals(prediction)) { // got it, remove from fn and fp falseNegatives.remove(referenceName); falsePositives.remove(prediction); } } } } @Override public void correctlyClassified(T reference, T prediction) { // do nothing } @Override public abstract void misclassified(T reference, T prediction) ; } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_FineGrain0100644 0000000 0000000 00000000163 14523004075 032504 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/FineGrainedReportListener.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/FineGrainedReportListener0100644 0000000 0000000 00000073214 14523004075 034237 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import java.io.OutputStream; import java.io.PrintStream; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import opennlp.tools.util.Span; import opennlp.tools.util.eval.FMeasure; import opennlp.tools.util.eval.Mean; public abstract class FineGrainedReportListener { private static final char[] alpha = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; private final PrintStream printStream; private final Stats stats = new Stats(); public FineGrainedReportListener(PrintStream printStream) { this.printStream = printStream; } /** * Writes the report to the {@link OutputStream}. Should be called only after * the evaluation process. */ public FineGrainedReportListener(OutputStream outputStream) { this.printStream = new PrintStream(outputStream); } private static String generateAlphaLabel(int index) { char[] labelChars = new char[3]; int i; for (i = 2; i >= 0; i--) { if (index >= 0) { labelChars[i] = alpha[index % alpha.length]; index = index / alpha.length - 1; } else { labelChars[i] = ' '; } } return new String(labelChars); } public abstract void writeReport(); // api methods // general stats protected Stats getStats() { return this.stats; } private long getNumberOfSentences() { return stats.getNumberOfSentences(); } private double getAverageSentenceSize() { return stats.getAverageSentenceSize(); } private int getMinSentenceSize() { return stats.getMinSentenceSize(); } private int getMaxSentenceSize() { return stats.getMaxSentenceSize(); } private int getNumberOfTags() { return stats.getNumberOfTags(); } // token stats private double getAccuracy() { return stats.getAccuracy(); } private double getTokenAccuracy(String token) { return stats.getTokenAccuracy(token); } private SortedSet getTokensOrderedByFrequency() { return stats.getTokensOrderedByFrequency(); } private int getTokenFrequency(String token) { return stats.getTokenFrequency(token); } private int getTokenErrors(String token) { return stats.getTokenErrors(token); } private SortedSet getTokensOrderedByNumberOfErrors() { return stats.getTokensOrderedByNumberOfErrors(); } private SortedSet getTagsOrderedByErrors() { return stats.getTagsOrderedByErrors(); } private int getTagFrequency(String tag) { return stats.getTagFrequency(tag); } private int getTagErrors(String tag) { return stats.getTagErrors(tag); } private double getTagPrecision(String tag) { return stats.getTagPrecision(tag); } private double getTagRecall(String tag) { return stats.getTagRecall(tag); } private double getTagFMeasure(String tag) { return stats.getTagFMeasure(tag); } private SortedSet getConfusionMatrixTagset() { return stats.getConfusionMatrixTagset(); } private SortedSet getConfusionMatrixTagset(String token) { return stats.getConfusionMatrixTagset(token); } private double[][] getConfusionMatrix() { return stats.getConfusionMatrix(); } private double[][] getConfusionMatrix(String token) { return stats.getConfusionMatrix(token); } private String matrixToString(SortedSet tagset, double[][] data, boolean filter) { // we don't want to print trivial cases (acc=1) int initialIndex = 0; String[] tags = tagset.toArray(new String[0]); StringBuilder sb = new StringBuilder(); int minColumnSize = Integer.MIN_VALUE; String[][] matrix = new String[data.length][data[0].length]; for (int i = 0; i < data.length; i++) { int j = 0; for (; j < data[i].length - 1; j++) { matrix[i][j] = data[i][j] > 0 ? Integer.toString((int) data[i][j]) : "."; if (minColumnSize < matrix[i][j].length()) { minColumnSize = matrix[i][j].length(); } } matrix[i][j] = MessageFormat.format("{0,number,#.##%}", data[i][j]); if (data[i][j] == 1 && filter) { initialIndex = i + 1; } } final String headerFormat = "%" + (minColumnSize + 2) + "s "; // | 1234567 | final String cellFormat = "%" + (minColumnSize + 2) + "s "; // | 12345 | final String diagFormat = " %" + (minColumnSize + 2) + "s"; for (int i = initialIndex; i < tagset.size(); i++) { sb.append(String.format(headerFormat, generateAlphaLabel(i - initialIndex).trim())); } sb.append("| Accuracy | <-- classified as\n"); for (int i = initialIndex; i < data.length; i++) { int j = initialIndex; for (; j < data[i].length - 1; j++) { if (i == j) { String val = "<" + matrix[i][j] + ">"; sb.append(String.format(diagFormat, val)); } else { sb.append(String.format(cellFormat, matrix[i][j])); } } sb.append( String.format("| %-6s | %3s = ", matrix[i][j], generateAlphaLabel(i - initialIndex))).append(tags[i]); sb.append("\n"); } return sb.toString(); } protected void printGeneralStatistics() { printHeader("Evaluation summary"); printStream.append( String.format("%21s: %6s", "Number of sentences", getNumberOfSentences())).append("\n"); printStream.append( String.format("%21s: %6s", "Min sentence size", getMinSentenceSize())).append("\n"); printStream.append( String.format("%21s: %6s", "Max sentence size", getMaxSentenceSize())).append("\n"); printStream.append( String.format("%21s: %6s", "Average sentence size", MessageFormat.format("{0,number,#.##}", getAverageSentenceSize()))).append("\n"); printStream.append( String.format("%21s: %6s", "Tags count", getNumberOfTags())).append("\n"); printStream.append( String.format("%21s: %6s", "Accuracy", MessageFormat.format("{0,number,#.##%}", getAccuracy()))).append("\n"); printFooter("Evaluation Corpus Statistics"); } protected void printTokenOccurrencesRank() { printHeader("Most frequent tokens"); SortedSet toks = getTokensOrderedByFrequency(); final int maxLines = 20; int maxTokSize = 5; int count = 0; Iterator tokIterator = toks.iterator(); while (tokIterator.hasNext() && count++ < maxLines) { String tok = tokIterator.next(); if (tok.length() > maxTokSize) { maxTokSize = tok.length(); } } int tableSize = maxTokSize + 19; String format = "| %3s | %6s | %" + maxTokSize + "s |"; printLine(tableSize); printStream.append(String.format(format, "Pos", "Count", "Token")).append("\n"); printLine(tableSize); // get the first 20 errors count = 0; tokIterator = toks.iterator(); while (tokIterator.hasNext() && count++ < maxLines) { String tok = tokIterator.next(); int frequency = getTokenFrequency(tok); printStream.append(String.format(format, count, frequency, tok) ).append("\n"); } printLine(tableSize); printFooter("Most frequent tokens"); } protected void printTokenErrorRank() { printHeader("Tokens with the highest number of errors"); printStream.append("\n"); SortedSet toks = getTokensOrderedByNumberOfErrors(); int maxTokenSize = 5; int count = 0; Iterator tokIterator = toks.iterator(); while (tokIterator.hasNext() && count++ < 20) { String tok = tokIterator.next(); if (tok.length() > maxTokenSize) { maxTokenSize = tok.length(); } } int tableSize = 31 + maxTokenSize; String format = "| %" + maxTokenSize + "s | %6s | %5s | %7s |\n"; printLine(tableSize); printStream.append(String.format(format, "Token", "Errors", "Count", "% Err")); printLine(tableSize); // get the first 20 errors count = 0; tokIterator = toks.iterator(); while (tokIterator.hasNext() && count++ < 20) { String tok = tokIterator.next(); int ocurrencies = getTokenFrequency(tok); int errors = getTokenErrors(tok); String rate = MessageFormat.format("{0,number,#.##%}", (double) errors / ocurrencies); printStream.append(String.format(format, tok, errors, ocurrencies, rate) ); } printLine(tableSize); printFooter("Tokens with the highest number of errors"); } protected void printTagsErrorRank() { printHeader("Detailed Accuracy By Tag"); SortedSet tags = getTagsOrderedByErrors(); printStream.append("\n"); int maxTagSize = 3; for (String t : tags) { if (t.length() > maxTagSize) { maxTagSize = t.length(); } } int tableSize = 65 + maxTagSize; String headerFormat = "| %" + maxTagSize + "s | %6s | %6s | %7s | %9s | %6s | %9s |\n"; String format = "| %" + maxTagSize + "s | %6s | %6s | %-7s | %-9s | %-6s | %-9s |\n"; printLine(tableSize); printStream.append(String.format(headerFormat, "Tag", "Errors", "Count", "% Err", "Precision", "Recall", "F-Measure")); printLine(tableSize); for (String tag : tags) { int ocurrencies = getTagFrequency(tag); int errors = getTagErrors(tag); String rate = MessageFormat.format("{0,number,#.###}", (double) errors / ocurrencies); double p = getTagPrecision(tag); double r = getTagRecall(tag); double f = getTagFMeasure(tag); printStream.append(String.format(format, tag, errors, ocurrencies, rate, MessageFormat.format("{0,number,#.###}", p > 0 ? p : 0), MessageFormat.format("{0,number,#.###}", r > 0 ? r : 0), MessageFormat.format("{0,number,#.###}", f > 0 ? f : 0)) ); } printLine(tableSize); printFooter("Tags with the highest number of errors"); } protected void printGeneralConfusionTable() { printHeader("Confusion matrix"); SortedSet labels = getConfusionMatrixTagset(); double[][] confusionMatrix = getConfusionMatrix(); printStream.append("\nTags with 100% accuracy: "); int line = 0; for (String label : labels) { if (confusionMatrix[line][confusionMatrix[0].length - 1] == 1) { printStream.append(label).append(" (") .append(Integer.toString((int) confusionMatrix[line][line])) .append(") "); } line++; } printStream.append("\n\n"); printStream.append(matrixToString(labels, confusionMatrix, true)); printFooter("Confusion matrix"); } protected void printDetailedConfusionMatrix() { printHeader("Confusion matrix for tokens"); printStream.append(" sorted by number of errors\n"); SortedSet toks = getTokensOrderedByNumberOfErrors(); for (String t : toks) { double acc = getTokenAccuracy(t); if (acc < 1) { printStream .append("\n[") .append(t) .append("]\n") .append( String.format("%12s: %-8s", "Accuracy", MessageFormat.format("{0,number,#.##%}", acc))) .append("\n"); printStream.append( String.format("%12s: %-8s", "Ocurrencies", getTokenFrequency(t))).append("\n"); printStream.append( String.format("%12s: %-8s", "Errors", getTokenErrors(t))).append("\n"); SortedSet labels = getConfusionMatrixTagset(t); double[][] confusionMatrix = getConfusionMatrix(t); printStream.append(matrixToString(labels, confusionMatrix, false)); } } printFooter("Confusion matrix for tokens"); } /** Auxiliary method that prints a emphasised report header */ private void printHeader(String text) { printStream.append("=== ").append(text).append(" ===\n"); } /** Auxiliary method that prints a marker to the end of a report */ private void printFooter(String text) { printStream.append("\n<-end> ").append(text).append("\n\n"); } /** Auxiliary method that prints a horizontal line of a given size */ private void printLine(int size) { for (int i = 0; i < size; i++) { printStream.append("-"); } printStream.append("\n"); } /** * A comparator that sorts the confusion matrix labels according to the * accuracy of each line */ public static class MatrixLabelComparator implements Comparator { private final Map confusionMatrix; public MatrixLabelComparator(Map confusionMatrix) { this.confusionMatrix = confusionMatrix; } @Override public int compare(String o1, String o2) { if (o1.equals(o2)) { return 0; } ConfusionMatrixLine t1 = confusionMatrix.get(o1); ConfusionMatrixLine t2 = confusionMatrix.get(o2); if (t1 == null || t2 == null) { if (t1 == null) { return 1; } else { return -1; } } double r1 = t1.getAccuracy(); double r2 = t2.getAccuracy(); if (r1 == r2) { return o1.compareTo(o2); } if (r2 > r1) { return 1; } return -1; } } public static class GroupedMatrixLabelComparator implements Comparator { private final HashMap categoryAccuracy; private final Map confusionMatrix; public GroupedMatrixLabelComparator(Map confusionMatrix) { this.confusionMatrix = confusionMatrix; this.categoryAccuracy = new HashMap<>(); // compute grouped categories for (Entry entry : confusionMatrix.entrySet()) { final String key = entry.getKey(); final ConfusionMatrixLine confusionMatrixLine = entry.getValue(); final String category; if (key.contains("-")) { category = key.split("-")[0]; } else { category = key; } double currentAccuracy = categoryAccuracy.getOrDefault(category, 0.0d); categoryAccuracy.put(category, currentAccuracy + confusionMatrixLine.getAccuracy()); } } @Override public int compare(String o1, String o2) { if (o1.equals(o2)) { return 0; } String c1 = o1; String c2 = o2; if (o1.contains("-")) { c1 = o1.split("-")[0]; } if (o2.contains("-")) { c2 = o2.split("-")[0]; } if (c1.equals(c2)) { // same category - sort by confusion matrix ConfusionMatrixLine t1 = confusionMatrix.get(o1); ConfusionMatrixLine t2 = confusionMatrix.get(o2); if (t1 == null || t2 == null) { if (t1 == null) { return 1; } else { return -1; } } double r1 = t1.getAccuracy(); double r2 = t2.getAccuracy(); if (r1 == r2) { return o1.compareTo(o2); } if (r2 > r1) { return 1; } return -1; } else { // different category - sort by category Double t1 = categoryAccuracy.get(c1); Double t2 = categoryAccuracy.get(c2); if (t1 == null || t2 == null) { if (t1 == null) { return 1; } else { return -1; } } if (t1.equals(t2)) { return o1.compareTo(o2); } if (t2 > t1) { return 1; } return -1; } } } public Comparator getMatrixLabelComparator(Map confusionMatrix) { return new MatrixLabelComparator(confusionMatrix); } public static class SimpleLabelComparator implements Comparator { private final Map map; public SimpleLabelComparator(Map map) { this.map = map; } @Override public int compare(String o1, String o2) { if (o1.equals(o2)) { return 0; } int e1 = 0, e2 = 0; if (map.containsKey(o1)) e1 = map.get(o1).value(); if (map.containsKey(o2)) e2 = map.get(o2).value(); if (e1 == e2) { return o1.compareTo(o2); } return e2 - e1; } } public Comparator getLabelComparator(Map map) { return new SimpleLabelComparator(map); } public static class GroupedLabelComparator implements Comparator { private final HashMap categoryCounter; private final Map labelCounter; public GroupedLabelComparator(Map map) { this.labelCounter = map; this.categoryCounter = new HashMap<>(); // compute grouped categories for (Entry entry : labelCounter.entrySet()) { final String key = entry.getKey(); final Counter value = entry.getValue(); final String category; if (key.contains("-")) { category = key.split("-")[0]; } else { category = key; } int currentCount = categoryCounter.getOrDefault(category, 0); categoryCounter.put(category, currentCount + value.value()); } } @Override public int compare(String o1, String o2) { if (o1.equals(o2)) { return 0; } String c1 = o1; String c2 = o2; if (o1.contains("-")) { c1 = o1.split("-")[0]; } if (o2.contains("-")) { c2 = o2.split("-")[0]; } if (c1.equals(c2)) { // same category - sort by confusion matrix Counter t1 = labelCounter.get(o1); Counter t2 = labelCounter.get(o2); if (t1 == null || t2 == null) { if (t1 == null) { return 1; } else { return -1; } } int r1 = t1.value(); int r2 = t2.value(); if (r1 == r2) { return o1.compareTo(o2); } if (r2 > r1) { return 1; } return -1; } else { // different category - sort by category Integer t1 = categoryCounter.get(c1); Integer t2 = categoryCounter.get(c2); if (t1 == null || t2 == null) { if (t1 == null) { return 1; } else { return -1; } } if (t1.equals(t2)) { return o1.compareTo(o2); } if (t2 > t1) { return 1; } return -1; } } } /** * Represents a line in the confusion table. */ public static class ConfusionMatrixLine { private final Map line = new HashMap<>(); private final String ref; private int total = 0; private int correct = 0; private double acc = -1; /** * Creates a new {@link ConfusionMatrixLine} * * @param ref * the reference column */ private ConfusionMatrixLine(String ref) { this.ref = ref; } /** * Increments the counter for the given column and updates the statistics. * * @param column * the column to be incremented */ private void increment(String column) { total++; if (column.equals(ref)) correct++; if (!line.containsKey(column)) { line.put(column, new Counter()); } line.get(column).increment(); } /** * @return Retrieves the calculated accuracy of this element */ public double getAccuracy() { // we save the accuracy because it is frequently used by the comparator if (StrictMath.abs(acc - 1.0d) < 0.0000000001) { if (total == 0) acc = 0.0d; acc = (double) correct / (double) total; } return acc; } /** * @param column The column to retrieve the counter value for. * @return Retrieves the counter value for the given {@code column}. */ public int getValue(String column) { Counter c = line.get(column); if (c == null) return 0; return c.value(); } } /** * Implements a simple counter */ public static class Counter { private int c = 0; private void increment() { c++; } public int value() { return c; } } public class Stats { // general statistics private final Mean accuracy = new Mean(); private final Mean averageSentenceLength = new Mean(); // token statistics private final Map tokAccuracies = new HashMap<>(); private final Map tokOccurrences = new HashMap<>(); private final Map tokErrors = new HashMap<>(); // tag statistics private final Map tagOccurrences = new HashMap<>(); private final Map tagErrors = new HashMap<>(); private final Map tagFMeasure = new HashMap<>(); // represents a Confusion Matrix that aggregates all tokens private final Map generalConfusionMatrix = new HashMap<>(); // represents a set of Confusion Matrix for each token private final Map> tokenConfusionMatrix = new HashMap<>(); private int minimalSentenceLength = Integer.MAX_VALUE; private int maximumSentenceLength = Integer.MIN_VALUE; public void add(String[] toks, String[] refs, String[] preds) { int length = toks.length; averageSentenceLength.add(length); if (minimalSentenceLength > length) { minimalSentenceLength = length; } if (maximumSentenceLength < length) { maximumSentenceLength = length; } updateTagFMeasure(refs, preds); for (int i = 0; i < toks.length; i++) { commit(toks[i], refs[i], preds[i]); } } public void add(int length, String ref, String pred) { averageSentenceLength.add(length); if (minimalSentenceLength > length) { minimalSentenceLength = length; } if (maximumSentenceLength < length) { maximumSentenceLength = length; } // String[] toks = reference.getSentence(); String[] refs = { ref }; String[] preds = { pred }; updateTagFMeasure(refs, preds); commit("", ref, pred); } public void add(String[] text, String ref, String pred) { int length = text.length; this.add(length, ref, pred); } public void add(CharSequence text, String ref, String pred) { int length = text.length(); this.add(length, ref, pred); } /** * Includes new evaluation data. * * @param tok * the evaluated token * @param ref * the reference pos tag * @param pred * the predicted pos tag */ private void commit(String tok, String ref, String pred) { // token stats if (!tokAccuracies.containsKey(tok)) { tokAccuracies.put(tok, new Mean()); tokOccurrences.put(tok, new Counter()); tokErrors.put(tok, new Counter()); } tokOccurrences.get(tok).increment(); // tag stats if (!tagOccurrences.containsKey(ref)) { tagOccurrences.put(ref, new Counter()); tagErrors.put(ref, new Counter()); } tagOccurrences.get(ref).increment(); // updates general, token and tag error stats if (ref.equals(pred)) { tokAccuracies.get(tok).add(1); accuracy.add(1); } else { tokAccuracies.get(tok).add(0); tokErrors.get(tok).increment(); tagErrors.get(ref).increment(); accuracy.add(0); } // populate confusion matrixes if (!generalConfusionMatrix.containsKey(ref)) { generalConfusionMatrix.put(ref, new ConfusionMatrixLine(ref)); } generalConfusionMatrix.get(ref).increment(pred); if (!tokenConfusionMatrix.containsKey(tok)) { tokenConfusionMatrix.put(tok, new HashMap<>()); } if (!tokenConfusionMatrix.get(tok).containsKey(ref)) { tokenConfusionMatrix.get(tok).put(ref, new ConfusionMatrixLine(ref)); } tokenConfusionMatrix.get(tok).get(ref).increment(pred); } private void updateTagFMeasure(String[] refs, String[] preds) { // create a set with all tags Set tags = new HashSet<>(Arrays.asList(refs)); tags.addAll(Arrays.asList(preds)); // create samples for each tag for (String tag : tags) { List reference = new ArrayList<>(); List prediction = new ArrayList<>(); for (int i = 0; i < refs.length; i++) { if (refs[i].equals(tag)) { reference.add(new Span(i, i + 1)); } if (preds[i].equals(tag)) { prediction.add(new Span(i, i + 1)); } } if (!this.tagFMeasure.containsKey(tag)) { this.tagFMeasure.put(tag, new FMeasure()); } // populate the F-measure this.tagFMeasure.get(tag).updateScores( reference.toArray(new Span[0]), prediction.toArray(new Span[0])); } } private double getAccuracy() { return accuracy.mean(); } private int getNumberOfTags() { return this.tagOccurrences.keySet().size(); } private long getNumberOfSentences() { return this.averageSentenceLength.count(); } private double getAverageSentenceSize() { return this.averageSentenceLength.mean(); } private int getMinSentenceSize() { return this.minimalSentenceLength; } private int getMaxSentenceSize() { return this.maximumSentenceLength; } private double getTokenAccuracy(String token) { return tokAccuracies.get(token).mean(); } private int getTokenErrors(String token) { return tokErrors.get(token).value(); } private int getTokenFrequency(String token) { return tokOccurrences.get(token).value(); } private SortedSet getTokensOrderedByFrequency() { SortedSet toks = new TreeSet<>(new SimpleLabelComparator(tokOccurrences)); toks.addAll(tokOccurrences.keySet()); return Collections.unmodifiableSortedSet(toks); } private SortedSet getTokensOrderedByNumberOfErrors() { SortedSet toks = new TreeSet<>(new SimpleLabelComparator(tokErrors)); toks.addAll(tokErrors.keySet()); return toks; } private int getTagFrequency(String tag) { return tagOccurrences.get(tag).value(); } private int getTagErrors(String tag) { return tagErrors.get(tag).value(); } private double getTagFMeasure(String tag) { return tagFMeasure.get(tag).getFMeasure(); } private double getTagRecall(String tag) { return tagFMeasure.get(tag).getRecallScore(); } private double getTagPrecision(String tag) { return tagFMeasure.get(tag).getPrecisionScore(); } private SortedSet getTagsOrderedByErrors() { SortedSet tags = new TreeSet<>(getLabelComparator(tagErrors)); tags.addAll(tagErrors.keySet()); return Collections.unmodifiableSortedSet(tags); } private SortedSet getConfusionMatrixTagset() { return getConfusionMatrixTagset(generalConfusionMatrix); } private double[][] getConfusionMatrix() { return createConfusionMatrix(getConfusionMatrixTagset(), generalConfusionMatrix); } private SortedSet getConfusionMatrixTagset(String token) { return getConfusionMatrixTagset(tokenConfusionMatrix.get(token)); } private double[][] getConfusionMatrix(String token) { return createConfusionMatrix(getConfusionMatrixTagset(token), tokenConfusionMatrix.get(token)); } /** * Creates a matrix with {@code N} lines and {@code N + 1} columns with the data from * confusion matrix. The last column is the accuracy. */ private double[][] createConfusionMatrix(SortedSet tagset, Map data) { int size = tagset.size(); double[][] matrix = new double[size][size + 1]; int line = 0; for (String ref : tagset) { int column = 0; for (String pred : tagset) { matrix[line][column] = data.get(ref) != null ? data .get(ref).getValue(pred) : 0; column++; } // set accuracy matrix[line][column] = data.get(ref) != null ? data.get(ref).getAccuracy() : 0; line++; } return matrix; } private SortedSet getConfusionMatrixTagset( Map data) { SortedSet tags = new TreeSet<>(getMatrixLabelComparator(data)); tags.addAll(data.keySet()); List col = new LinkedList<>(); for (String t : tags) { col.addAll(data.get(t).line.keySet()); } tags.addAll(col); return Collections.unmodifiableSortedSet(tags); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/GenerateManualTool.java0100644 0000000 0000000 00000023565 14523004075 033634 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.io.StringReader; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.StringTokenizer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.ArgumentParser.Argument; public class GenerateManualTool { private static final Logger logger = LoggerFactory.getLogger(GenerateManualTool.class); private static final int MAX_LINE_LENGTH = 110; // optimized for printing public static void main(String[] args) throws FileNotFoundException { if (args.length != 1) { logger.info(getUsage()); System.exit(0); } StringBuilder sb = new StringBuilder(); appendHeader(sb); // organize by package name LinkedHashMap> packageNameToolMap = new LinkedHashMap<>(); for (Entry entry : CLI.getToolLookupMap().entrySet()) { final String toolName = entry.getKey(); final CmdLineTool tool = entry.getValue(); String packageName = tool.getClass().getPackage().getName(); packageName = packageName.substring(packageName.lastIndexOf(".") + 1); if (!packageNameToolMap.containsKey(packageName)) { packageNameToolMap.put(packageName, new LinkedHashMap<>()); } packageNameToolMap.get(packageName).put(toolName, tool); } // add tools grouped by package for (Entry> entry : packageNameToolMap.entrySet()) { appendToolGroup(entry.getKey(), entry.getValue(), sb); } // footer appendFooter(sb); // output to file try (PrintWriter out = new PrintWriter(args[0])) { out.println(sb); } } /** * @return this tool usage */ private static String getUsage() { return "Requires one argument: \n" + " Path to the output XML file \n"; } /** * Appends a group of tools, based on the tool package name * * @param groupName The groupName to use. * @param toolsMap The {@link Map} of all cmd-line tools available. * @param sb The {@link StringBuilder} to fill. */ private static void appendToolGroup(String groupName, Map toolsMap, StringBuilder sb) { sb.append("

\n\n"); sb.append("").append(firstCaps(groupName)).append("\n\n"); for (Entry entry : toolsMap.entrySet()) { appendTool(groupName, entry.getKey(), entry.getValue(), sb); } sb.append("
\n\n"); } /** * Appends a tool. * * @param groupName The groupName to use. * @param toolName The name of the tool to use. * @param tool The {@link CmdLineTool} to append. * @param sb The {@link StringBuilder} to fill. */ private static void appendTool(String groupName, String toolName, CmdLineTool tool, StringBuilder sb) { sb.append("
\n\n"); sb.append("").append(toolName).append("\n\n"); sb.append("").append(firstCaps(tool.getShortDescription())) .append("\n\n"); appendCode(tool.getHelp(), sb); if (TypedCmdLineTool.class.isAssignableFrom(tool.getClass())) { appendHelpForTool((TypedCmdLineTool) tool, sb); } sb.append("
\n\n"); } private static void appendHelpForTool(TypedCmdLineTool tool, StringBuilder sb) { Class type = tool.type; Set formats = StreamFactoryRegistry.getFactories(type).keySet(); sb.append("The supported formats and arguments are:\n\n"); Map> formatArguments = new LinkedHashMap<>(); for (String formatName : formats) { if (!StreamFactoryRegistry.DEFAULT_FORMAT.equals(formatName)) { ObjectStreamFactory format = tool.getStreamFactory(formatName); formatArguments.put(formatName, ArgumentParser.createArguments(format.getParameters())); } } appendArgumentTable(formatArguments, sb); } private static void appendArgumentTable( Map> formatArguments, StringBuilder sb) { sb.append( "\n"); sb.append( "FormatArgumentValue" + "OptionalDescription\n"); sb.append("\n"); for (Entry> entry : formatArguments.entrySet()) { final String format = entry.getKey(); final List arguments = entry.getValue(); int i = 0; for (Argument argument : arguments) { sb.append("\n"); if (i == 0) { sb.append("").append(format).append("\n"); } sb.append("").append(argument.argument()) .append("\n"); sb.append("").append(argument.value()).append("\n"); sb.append("").append(yes(argument.optional())) .append("\n"); sb.append("").append(firstCaps(argument.description())) .append("\n"); sb.append("\n"); i++; } } sb.append("\n"); sb.append("\n\n"); } private static void appendHeader(StringBuilder sb) { sb.append("\n" + "\n" + "\n" + "\n\n" + "\n\n" + "\n\n" + "The Command Line Interface\n\n" + "" + "This section details the available tools and parameters of the Command Line Interface. " + "For a introduction in its usage please refer to . " + "\n\n"); } private static void appendFooter(StringBuilder sb) { sb.append("\n\n"); } private static String firstCaps(String str) { if (str.length() > 1) { return str.substring(0, 1).toUpperCase() + str.substring(1); } else { return str; } } private static String yes(boolean optional) { if (optional) { return "Yes"; } return "No"; } private static void appendCode(String help, StringBuilder sb) { sb.append("\n" + "\n").append(" \n"); } /** * Prevents long lines. Lines are optimized for printing. */ private static String splitLongLines(String stringBlock) { StringBuilder sb = new StringBuilder(); String line; try (BufferedReader reader = new BufferedReader(new StringReader(stringBlock))) { while ((line = reader.readLine()) != null) { if (line.length() <= MAX_LINE_LENGTH) { sb.append(line).append("\n"); } else { StringTokenizer tok = new StringTokenizer(line, " "); int lineLen = 0; while (tok.hasMoreTokens()) { String word = tok.nextToken() + " "; if (lineLen + word.length() > MAX_LINE_LENGTH) { sb.append("\n "); lineLen = 8; } sb.append(word); lineLen += word.length(); } } } } catch (Exception e) { // nothing to do } return sb.toString(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/ModelLoader.java0100644 0000000 0000000 00000004732 14523004075 032270 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import java.io.BufferedInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.Objects; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.commons.Internal; import opennlp.tools.util.InvalidFormatException; /** * Loads a model and does all the error handling for the command line tools. *

* Note: Do not use this class, internal use only! * * @param */ @Internal public abstract class ModelLoader { private static final Logger logger = LoggerFactory.getLogger(ModelLoader.class); private final String modelName; protected ModelLoader(String modelName) { this.modelName = Objects.requireNonNull(modelName, "modelName must not be null!"); } protected abstract T loadModel(InputStream modelIn) throws IOException; public T load(File modelFile) { long beginModelLoadingTime = System.currentTimeMillis(); CmdLineUtil.checkInputFile(modelName + " model", modelFile); logger.info("Loading {} model ... ", modelName); T model; try (InputStream modelIn = new BufferedInputStream( CmdLineUtil.openInFile(modelFile), CmdLineUtil.IO_BUFFER_SIZE)) { model = loadModel(modelIn); } catch (InvalidFormatException e) { throw new TerminateToolException(-1, "Model has invalid format", e); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while loading model file '" + modelFile + "'", e); } long modelLoadingDuration = System.currentTimeMillis() - beginModelLoadingTime; logger.info(String.format("done (%.3fs)\n", modelLoadingDuration / 1000d)); return model; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/ObjectStreamFactory.java0100644 0000000 0000000 00000002323 14523004075 034005 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import opennlp.tools.util.ObjectStream; public interface ObjectStreamFactory { /** * @return Retrieves interface with parameters description. */ Class

getParameters(); /** * Creates an {@link ObjectStream} of the template type {@code T}. * * @param args arguments * @return The created {@link ObjectStream} instance. */ ObjectStream create(String[] args); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/PerformanceMonitor.java0100644 0000000 0000000 00000011317 14523004075 033707 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import java.io.PrintStream; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.commons.Internal; import opennlp.tools.log.LogPrintStream; /** * The {@link PerformanceMonitor} measures increments to a counter. * During the computation it prints out current and average throughput * per second. After the computation is done it prints a final performance * report. *

* Note: This class is not thread safe. *

* Note: Do not use this class, internal use only! */ @Internal public class PerformanceMonitor { private static final Logger logger = LoggerFactory.getLogger(PerformanceMonitor.class); private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1, runnable -> { Thread thread = new Thread(runnable); thread.setName("opennlp.tools.cmdline.PerformanceMonitor"); thread.setDaemon(true); return thread; }); private final String unit; private ScheduledFuture beeperHandle; private volatile long startTime = -1; private volatile int counter; private final PrintStream out; public PerformanceMonitor(PrintStream out, String unit) { this.out = out; this.unit = unit; } public PerformanceMonitor(String unit) { this(new LogPrintStream(logger), unit); } public boolean isStarted() { return startTime != -1; } public void incrementCounter(int increment) { if (!isStarted()) throw new IllegalStateException("Must be started first!"); if (increment < 0) throw new IllegalArgumentException("increment must be zero or positive but was " + increment + "!"); counter += increment; } public void incrementCounter() { incrementCounter(1); } public void start() { if (isStarted()) throw new IllegalStateException("Already started!"); startTime = System.currentTimeMillis(); } public void startAndPrintThroughput() { start(); final Runnable beeper = new Runnable() { private long lastTimeStamp = startTime; private int lastCount = counter; @Override public void run() { int deltaCount = counter - lastCount; long timePassedSinceLastCount = System.currentTimeMillis() - lastTimeStamp; double currentThroughput; if (timePassedSinceLastCount > 0) { currentThroughput = deltaCount / ((double) timePassedSinceLastCount / 1000); } else { currentThroughput = 0; } long totalTimePassed = System.currentTimeMillis() - startTime; double averageThroughput; if (totalTimePassed > 0) { averageThroughput = counter / (((double) totalTimePassed) / 1000); } else { averageThroughput = 0; } out.printf("current: %.1f " + unit + "/s avg: %.1f " + unit + "/s total: %d " + unit + "%n", currentThroughput, averageThroughput, counter); lastTimeStamp = System.currentTimeMillis(); lastCount = counter; } }; beeperHandle = scheduler.scheduleAtFixedRate(beeper, 1, 1, TimeUnit.SECONDS); } public void stopAndPrintFinalResult() { if (!isStarted()) throw new IllegalStateException("Must be started first!"); if (beeperHandle != null) { // yeah we have time to finish current // printing if there is one beeperHandle.cancel(false); } scheduler.shutdown(); long timePassed = System.currentTimeMillis() - startTime; double average; if (timePassed > 0) { average = counter / (timePassed / 1000d); } else { average = 0; } out.printf("Average: %.1f " + unit + "/s %n", average); out.println("Total: " + counter + " " + unit); out.println("Runtime: " + timePassed / 1000d + "s"); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_StreamFac0100644 0000000 0000000 00000000157 14523004075 032512 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/StreamFactoryRegistry.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/StreamFactoryRegistry.jav0100644 0000000 0000000 00000024531 14523004075 034253 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Map; import opennlp.tools.formats.BioNLP2004NameSampleStreamFactory; import opennlp.tools.formats.ChunkerSampleStreamFactory; import opennlp.tools.formats.Conll02NameSampleStreamFactory; import opennlp.tools.formats.Conll03NameSampleStreamFactory; import opennlp.tools.formats.ConllXPOSSampleStreamFactory; import opennlp.tools.formats.ConllXSentenceSampleStreamFactory; import opennlp.tools.formats.ConllXTokenSampleStreamFactory; import opennlp.tools.formats.DocumentSampleStreamFactory; import opennlp.tools.formats.EvalitaNameSampleStreamFactory; import opennlp.tools.formats.LanguageDetectorSampleStreamFactory; import opennlp.tools.formats.LemmatizerSampleStreamFactory; import opennlp.tools.formats.NameSampleDataStreamFactory; import opennlp.tools.formats.ParseSampleStreamFactory; import opennlp.tools.formats.SentenceSampleStreamFactory; import opennlp.tools.formats.TokenSampleStreamFactory; import opennlp.tools.formats.TwentyNewsgroupSampleStreamFactory; import opennlp.tools.formats.WordTagSampleStreamFactory; import opennlp.tools.formats.ad.ADChunkSampleStreamFactory; import opennlp.tools.formats.ad.ADNameSampleStreamFactory; import opennlp.tools.formats.ad.ADPOSSampleStreamFactory; import opennlp.tools.formats.ad.ADSentenceSampleStreamFactory; import opennlp.tools.formats.ad.ADTokenSampleStreamFactory; import opennlp.tools.formats.brat.BratNameSampleStreamFactory; import opennlp.tools.formats.conllu.ConlluLemmaSampleStreamFactory; import opennlp.tools.formats.conllu.ConlluPOSSampleStreamFactory; import opennlp.tools.formats.conllu.ConlluSentenceSampleStreamFactory; import opennlp.tools.formats.conllu.ConlluTokenSampleStreamFactory; import opennlp.tools.formats.convert.NameToSentenceSampleStreamFactory; import opennlp.tools.formats.convert.NameToTokenSampleStreamFactory; import opennlp.tools.formats.convert.POSToSentenceSampleStreamFactory; import opennlp.tools.formats.convert.POSToTokenSampleStreamFactory; import opennlp.tools.formats.convert.ParseToPOSSampleStreamFactory; import opennlp.tools.formats.convert.ParseToSentenceSampleStreamFactory; import opennlp.tools.formats.convert.ParseToTokenSampleStreamFactory; import opennlp.tools.formats.frenchtreebank.ConstitParseSampleStreamFactory; import opennlp.tools.formats.irishsentencebank.IrishSentenceBankSentenceStreamFactory; import opennlp.tools.formats.irishsentencebank.IrishSentenceBankTokenSampleStreamFactory; import opennlp.tools.formats.leipzig.LeipzigLanguageSampleStreamFactory; import opennlp.tools.formats.letsmt.LetsmtSentenceStreamFactory; import opennlp.tools.formats.masc.MascNamedEntitySampleStreamFactory; import opennlp.tools.formats.masc.MascPOSSampleStreamFactory; import opennlp.tools.formats.masc.MascSentenceSampleStreamFactory; import opennlp.tools.formats.masc.MascTokenSampleStreamFactory; import opennlp.tools.formats.moses.MosesSentenceSampleStreamFactory; import opennlp.tools.formats.muc.Muc6NameSampleStreamFactory; import opennlp.tools.formats.nkjp.NKJPSentenceSampleStreamFactory; import opennlp.tools.formats.ontonotes.OntoNotesNameSampleStreamFactory; import opennlp.tools.formats.ontonotes.OntoNotesPOSSampleStreamFactory; import opennlp.tools.formats.ontonotes.OntoNotesParseSampleStreamFactory; /** * Registry for {@link ObjectStreamFactory object stream factories}. */ public final class StreamFactoryRegistry { private static final Map, Map>> registry = new HashMap<>(); static { ChunkerSampleStreamFactory.registerFactory(); DocumentSampleStreamFactory.registerFactory(); NameSampleDataStreamFactory.registerFactory(); ParseSampleStreamFactory.registerFactory(); SentenceSampleStreamFactory.registerFactory(); TokenSampleStreamFactory.registerFactory(); WordTagSampleStreamFactory.registerFactory(); LemmatizerSampleStreamFactory.registerFactory(); LanguageDetectorSampleStreamFactory.registerFactory(); NameToSentenceSampleStreamFactory.registerFactory(); NameToTokenSampleStreamFactory.registerFactory(); POSToSentenceSampleStreamFactory.registerFactory(); POSToTokenSampleStreamFactory.registerFactory(); ParseToPOSSampleStreamFactory.registerFactory(); ParseToSentenceSampleStreamFactory.registerFactory(); ParseToTokenSampleStreamFactory.registerFactory(); OntoNotesNameSampleStreamFactory.registerFactory(); OntoNotesParseSampleStreamFactory.registerFactory(); OntoNotesPOSSampleStreamFactory.registerFactory(); BioNLP2004NameSampleStreamFactory.registerFactory(); Conll02NameSampleStreamFactory.registerFactory(); Conll03NameSampleStreamFactory.registerFactory(); EvalitaNameSampleStreamFactory.registerFactory(); ConllXPOSSampleStreamFactory.registerFactory(); ConllXSentenceSampleStreamFactory.registerFactory(); ConllXTokenSampleStreamFactory.registerFactory(); ADChunkSampleStreamFactory.registerFactory(); ADNameSampleStreamFactory.registerFactory(); ADSentenceSampleStreamFactory.registerFactory(); ADPOSSampleStreamFactory.registerFactory(); ADTokenSampleStreamFactory.registerFactory(); TwentyNewsgroupSampleStreamFactory.registerFactory(); Muc6NameSampleStreamFactory.registerFactory(); ConstitParseSampleStreamFactory.registerFactory(); BratNameSampleStreamFactory.registerFactory(); LetsmtSentenceStreamFactory.registerFactory(); MosesSentenceSampleStreamFactory.registerFactory(); ConlluTokenSampleStreamFactory.registerFactory(); ConlluSentenceSampleStreamFactory.registerFactory(); ConlluPOSSampleStreamFactory.registerFactory(); ConlluLemmaSampleStreamFactory.registerFactory(); IrishSentenceBankSentenceStreamFactory.registerFactory(); IrishSentenceBankTokenSampleStreamFactory.registerFactory(); LeipzigLanguageSampleStreamFactory.registerFactory(); NKJPSentenceSampleStreamFactory.registerFactory(); MascNamedEntitySampleStreamFactory.registerFactory(); MascPOSSampleStreamFactory.registerFactory(); MascSentenceSampleStreamFactory.registerFactory(); MascTokenSampleStreamFactory.registerFactory(); } public static final String DEFAULT_FORMAT = "opennlp"; private StreamFactoryRegistry() { // not intended to be instantiated } /** * Registers factory which reads format named {@code formatName} and * instantiates streams producing objects of {@code sampleClass} class. * * @param sampleClass class of the objects, produced by the streams instantiated by the factory * @param formatName name of the format * @param factory instance of the factory * @return true if the factory was successfully registered */ public static boolean registerFactory(Class sampleClass, String formatName, ObjectStreamFactory factory) { boolean result; Map> formats = registry.get(sampleClass); if (null == formats) { formats = new HashMap<>(); } if (!formats.containsKey(formatName)) { formats.put(formatName, factory); registry.put(sampleClass, formats); result = true; } else { result = false; } return result; } /** * Unregisters a factory which reads format named {@code formatName} and * instantiates streams producing objects of {@code sampleClass} class. * * @param sampleClass class of the objects, produced by the streams instantiated by the factory * @param formatName name of the format */ public static void unregisterFactory(Class sampleClass, String formatName) { Map> formats = registry.get(sampleClass); if (null != formats) { formats.remove(formatName); } } /** * Returns all factories which produce objects of {@code sampleClass} class. * * @param sampleClass class of the objects, produced by the streams instantiated by the factory * @return formats mapped to factories */ @SuppressWarnings("unchecked") public static Map> getFactories(Class sampleClass) { return (Map>) (Object) registry.get(sampleClass); } /** * Returns a factory which reads format named {@code formatName} and * instantiates streams producing objects of {@code sampleClass} class. * * @param sampleClass class of the objects, produced by the streams instantiated by the factory * @param formatName name of the format, if null, assumes OpenNLP format * @return factory instance */ @SuppressWarnings("unchecked") public static ObjectStreamFactory getFactory(Class sampleClass, String formatName) { if (null == formatName) { formatName = DEFAULT_FORMAT; } ObjectStreamFactory factory = registry.containsKey(sampleClass) ? (ObjectStreamFactory) registry.get(sampleClass).get(formatName) : null; if (factory != null) { return factory; } else { try { Class factoryClazz = Class.forName(formatName); // TODO: Need to check if it can produce the desired output // Otherwise there will be class cast exceptions later in the flow try { return (ObjectStreamFactory) factoryClazz.getDeclaredConstructor().newInstance(); } catch (InstantiationException | NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { return null; } } catch (ClassNotFoundException e) { return null; } } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_SystemInp0100644 0000000 0000000 00000000162 14523004075 032574 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/SystemInputStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/SystemInputStreamFactory.0100644 0000000 0000000 00000002610 14523004075 034240 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import java.io.InputStream; import java.nio.charset.Charset; import opennlp.tools.util.InputStreamFactory; public class SystemInputStreamFactory implements InputStreamFactory { private boolean isTainted = false; public static Charset encoding() { return Charset.defaultCharset(); } @Override public InputStream createInputStream() { if (!isTainted) { isTainted = true; return System.in; } else { throw new UnsupportedOperationException( "The System.in stream can't be re-created to read from the beginning!"); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_Terminate0100644 0000000 0000000 00000000160 14523004075 032567 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/TerminateToolException.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/TerminateToolException.ja0100644 0000000 0000000 00000004011 14523004075 034205 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import opennlp.tools.commons.Internal; /** * Exception to terminate the execution of a command line tool. *

* The exception should be thrown to indicate that the VM should be terminated with * the specified error code, instead of just calling {@link System#exit(int)}. *

* The return code convention is to return:
* {@code 0} in case of graceful termination
* {@code -1} in case of runtime errors, such as {@link java.io.IOException}
* {@code 1} in case of invalid parameters. *

* Note: Do not use this class, internal use only! */ @Internal public class TerminateToolException extends RuntimeException { private static final long serialVersionUID = -8501408388025885818L; private final int code; private final String message; public TerminateToolException(int code, String message, Throwable t) { super(t); this.code = code; this.message = message; } public TerminateToolException(int code, String message) { this.code = code; this.message = message; } public TerminateToolException(int code) { this(code, null); } public int getCode() { return code; } @Override public String getMessage() { return message; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/TypedCmdLineTool.java0100644 0000000 0000000 00000010356 14523004075 033257 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import java.util.Map; /** * Base class for tools which support processing of samples of some type {@link T} * coming from a stream of a certain format. */ public abstract class TypedCmdLineTool extends CmdLineTool { /** * variable to access the type of the generic parameter. */ protected final Class type; /** * Constructor with type parameters. * * @param sampleType class of the template parameter */ protected TypedCmdLineTool(Class sampleType) { this.type = sampleType; } /** * Returns stream factory for the type of this tool for the format. * * @param format data format name * @return The {@link ObjectStreamFactory factory} for the type of this tool for the format. */ protected ObjectStreamFactory getStreamFactory(String format) { ObjectStreamFactory factory = StreamFactoryRegistry.getFactory(type, format); if (null != factory) { return factory; } else { throw new TerminateToolException(1, "Format " + format + " is not found.\n" + getHelp()); } } /** * Validates arguments using parameters from {@code argProxyInterface} and the parameters of the * format. * * @param args arguments * @param argProxyInterface interface with parameter descriptions * @param format data format name * @param The generic type. */ protected void validateAllArgs(String[] args, Class argProxyInterface, String format) { ObjectStreamFactory factory = getStreamFactory(format); String errMessage = ArgumentParser.validateArgumentsLoudly(args, argProxyInterface, factory.getParameters()); if (null != errMessage) { throw new TerminateToolException(1, errMessage + "\n" + getHelp(format)); } } /** * Validates arguments for a format processed by the {@code factory}. * @param factory The {@link ObjectStreamFactory factory} to use. * @param args arguments */ protected void validateFactoryArgs(ObjectStreamFactory factory, String[] args) { String errMessage = ArgumentParser.validateArgumentsLoudly(args, factory.getParameters()); if (null != errMessage) { throw new TerminateToolException(1, "Format parameters are invalid: " + errMessage + "\n" + "Usage: " + ArgumentParser.createUsage(factory.getParameters())); } } @Override protected String getBasicHelp(Class... argProxyInterfaces) { Map> factories = StreamFactoryRegistry.getFactories(type); String formatsHelp = " "; if (1 < factories.size()) { StringBuilder formats = new StringBuilder(); for (String format : factories.keySet()) { if (!StreamFactoryRegistry.DEFAULT_FORMAT.equals(format)) { formats.append(".").append(format).append("|"); } } formatsHelp = "[" + formats.substring(0, formats.length() - 1) + "] "; } return "Usage: " + CLI.CMD + " " + getName() + formatsHelp + ArgumentParser.createUsage(argProxyInterfaces); } @Override public String getHelp() { return getHelp(""); } /** * Executes the tool with the given parameters. * * @param format format to work with * @param args command line arguments */ public abstract void run(String format, String[] args); /** * @param format data format * @return Retrieves a description on how to use the tool. */ public abstract String getHelp(String format); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_chunker_C0100644 0000000 0000000 00000000176 14523004075 032547 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/ChunkEvaluationErrorListener.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/ChunkEvaluationEr0100644 0000000 0000000 00000004067 14523004075 034210 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.chunker; import java.io.OutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.chunker.ChunkSample; import opennlp.tools.chunker.ChunkerEvaluationMonitor; import opennlp.tools.cmdline.EvaluationErrorPrinter; import opennlp.tools.log.LogPrintStream; import opennlp.tools.util.eval.EvaluationMonitor; /** * A default implementation of {@link EvaluationMonitor} that prints * to an output stream. * */ public class ChunkEvaluationErrorListener extends EvaluationErrorPrinter implements ChunkerEvaluationMonitor { private static final Logger logger = LoggerFactory.getLogger(ChunkEvaluationErrorListener.class); /** * Creates a listener that will print to the configured {@code logger}. */ public ChunkEvaluationErrorListener() { super(new LogPrintStream(logger)); } /** * Creates a listener that will print to a given {@link OutputStream} */ public ChunkEvaluationErrorListener(OutputStream outputStream) { super(outputStream); } @Override public void misclassified(ChunkSample reference, ChunkSample prediction) { printError(reference.getPhrasesAsSpanList(), prediction.getPhrasesAsSpanList(), reference, prediction, reference.getSentence()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_chunker_C0100644 0000000 0000000 00000000166 14523004075 032546 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/ChunkerConverterTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/ChunkerConverterT0100644 0000000 0000000 00000002437 14523004075 034233 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.chunker; import opennlp.tools.chunker.ChunkSample; import opennlp.tools.cmdline.AbstractConverterTool; import opennlp.tools.cmdline.params.BasicFormatParams; /** * Tool to convert multiple data formats into native OpenNLP chunker training * format. * * @see AbstractConverterTool * @see ChunkSample */ public class ChunkerConverterTool extends AbstractConverterTool { public ChunkerConverterTool() { super(ChunkSample.class); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_chunker_C0100644 0000000 0000000 00000000173 14523004075 032544 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/ChunkerCrossValidatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/ChunkerCrossValid0100644 0000000 0000000 00000006072 14523004075 034210 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.chunker; import java.io.IOException; import java.util.LinkedList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.chunker.ChunkSample; import opennlp.tools.chunker.ChunkerCrossValidator; import opennlp.tools.chunker.ChunkerEvaluationMonitor; import opennlp.tools.chunker.ChunkerFactory; import opennlp.tools.cmdline.AbstractCrossValidatorTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.chunker.ChunkerCrossValidatorTool.CVToolParams; import opennlp.tools.cmdline.params.CVParams; import opennlp.tools.util.eval.EvaluationMonitor; import opennlp.tools.util.eval.FMeasure; import opennlp.tools.util.model.ModelUtil; public final class ChunkerCrossValidatorTool extends AbstractCrossValidatorTool { interface CVToolParams extends TrainingParams, CVParams { } private static final Logger logger = LoggerFactory.getLogger(ChunkerCrossValidatorTool.class); public ChunkerCrossValidatorTool() { super(ChunkSample.class, CVToolParams.class); } @Override public String getShortDescription() { return "K-fold cross validator for the chunker"; } @Override public void run(String format, String[] args) { super.run(format, args); mlParams = CmdLineUtil.loadTrainingParameters(params.getParams(), false); if (mlParams == null) { mlParams = ModelUtil.createDefaultTrainingParameters(); } List> listeners = new LinkedList<>(); if (params.getMisclassified()) { listeners.add(new ChunkEvaluationErrorListener()); } ChunkerCrossValidator validator; try { ChunkerFactory chunkerFactory = ChunkerFactory .create(params.getFactory()); validator = new ChunkerCrossValidator(params.getLang(), mlParams, chunkerFactory, listeners.toArray(new ChunkerEvaluationMonitor[0])); validator.evaluate(sampleStream, params.getFolds()); } catch (IOException e) { throw createTerminationIOException(e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } FMeasure result = validator.getFMeasure(); logger.info(result.toString()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_chunker_C0100644 0000000 0000000 00000000201 14523004075 032534 xustar000000000 0000000 129 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/ChunkerDetailedFMeasureListener.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/ChunkerDetailedFM0100644 0000000 0000000 00000002374 14523004075 034076 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.chunker; import opennlp.tools.chunker.ChunkSample; import opennlp.tools.chunker.ChunkerEvaluationMonitor; import opennlp.tools.cmdline.DetailedFMeasureListener; import opennlp.tools.util.Span; public class ChunkerDetailedFMeasureListener extends DetailedFMeasureListener implements ChunkerEvaluationMonitor { @Override protected Span[] asSpanArray(ChunkSample sample) { return sample.getPhrasesAsSpanList(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_chunker_C0100644 0000000 0000000 00000000166 14523004075 032546 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/ChunkerEvaluatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/ChunkerEvaluatorT0100644 0000000 0000000 00000006755 14523004075 034235 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.chunker; import java.io.IOException; import java.util.LinkedList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.chunker.ChunkSample; import opennlp.tools.chunker.ChunkerEvaluationMonitor; import opennlp.tools.chunker.ChunkerEvaluator; import opennlp.tools.chunker.ChunkerME; import opennlp.tools.chunker.ChunkerModel; import opennlp.tools.cmdline.AbstractEvaluatorTool; import opennlp.tools.cmdline.PerformanceMonitor; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.chunker.ChunkerEvaluatorTool.EvalToolParams; import opennlp.tools.cmdline.params.EvaluatorParams; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.eval.EvaluationMonitor; /** * A default {@link ChunkSample}-centric implementation of {@link AbstractEvaluatorTool} * that prints to an output stream. * * @see AbstractEvaluatorTool * @see EvalToolParams */ public final class ChunkerEvaluatorTool extends AbstractEvaluatorTool { interface EvalToolParams extends EvaluatorParams { } private static final Logger logger = LoggerFactory.getLogger(ChunkerEvaluatorTool.class); public ChunkerEvaluatorTool() { super(ChunkSample.class, EvalToolParams.class); } @Override public String getShortDescription() { return "Measures the performance of the Chunker model with the reference data"; } @Override public void run(String format, String[] args) { super.run(format, args); ChunkerModel model = new ChunkerModelLoader().load(params.getModel()); List> listeners = new LinkedList<>(); if (params.getMisclassified()) { listeners.add(new ChunkEvaluationErrorListener()); } ChunkerEvaluator evaluator = new ChunkerEvaluator(new ChunkerME(model), listeners.toArray(new ChunkerEvaluationMonitor[0])); final PerformanceMonitor monitor = new PerformanceMonitor("sent"); try (ObjectStream measuredSampleStream = new ObjectStream<>() { public ChunkSample read() throws IOException { monitor.incrementCounter(); return sampleStream.read(); } public void reset() throws IOException { sampleStream.reset(); } public void close() throws IOException { sampleStream.close(); } }) { monitor.startAndPrintThroughput(); evaluator.evaluate(measuredSampleStream); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while reading test data: " + e.getMessage(), e); } // sorry that this can fail monitor.stopAndPrintFinalResult(); logger.info(evaluator.getFMeasure().toString()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_chunker_C0100644 0000000 0000000 00000000157 14523004075 032546 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/ChunkerMETool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/ChunkerMETool.jav0100644 0000000 0000000 00000005754 14523004075 034063 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.chunker; import java.io.File; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.chunker.ChunkSample; import opennlp.tools.chunker.ChunkerME; import opennlp.tools.chunker.ChunkerModel; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CLI; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.PerformanceMonitor; import opennlp.tools.cmdline.SystemInputStreamFactory; import opennlp.tools.postag.POSSample; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; public class ChunkerMETool extends BasicCmdLineTool { private static final Logger logger = LoggerFactory.getLogger(ChunkerMETool.class); @Override public String getShortDescription() { return "Learnable chunker"; } @Override public String getHelp() { return "Usage: " + CLI.CMD + " " + getName() + " model < sentences"; } @Override public void run(String[] args) { if (args.length != 1) { logger.info(getHelp()); } else { ChunkerModel model = new ChunkerModelLoader().load(new File(args[0])); ChunkerME chunker = new ChunkerME(model); PerformanceMonitor perfMon = null; try (ObjectStream lineStream = new PlainTextByLineStream( new SystemInputStreamFactory(), SystemInputStreamFactory.encoding())) { perfMon = new PerformanceMonitor("sent"); perfMon.start(); String line; while ((line = lineStream.read()) != null) { POSSample posSample; try { posSample = POSSample.parse(line); } catch (InvalidFormatException e) { logger.warn("Invalid format: {}", line, e); continue; } String[] chunks = chunker.chunk(posSample.getSentence(), posSample.getTags()); logger.info(new ChunkSample(posSample.getSentence(), posSample.getTags(), chunks).nicePrint()); perfMon.incrementCounter(); } } catch (IOException e) { CmdLineUtil.handleStdinIoError(e); } perfMon.stopAndPrintFinalResult(); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_chunker_C0100644 0000000 0000000 00000000164 14523004075 032544 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/ChunkerModelLoader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/ChunkerModelLoade0100644 0000000 0000000 00000002625 14523004075 034144 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.chunker; import java.io.IOException; import java.io.InputStream; import opennlp.tools.chunker.ChunkerModel; import opennlp.tools.cmdline.ModelLoader; import opennlp.tools.commons.Internal; /** * Loads a {@link ChunkerModel} for the command line tools. *

* Note: Do not use this class, internal use only! */ @Internal public class ChunkerModelLoader extends ModelLoader { public ChunkerModelLoader() { super("Chunker"); } @Override protected ChunkerModel loadModel(InputStream modelIn) throws IOException { return new ChunkerModel(modelIn); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_chunker_C0100644 0000000 0000000 00000000164 14523004075 032544 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/ChunkerTrainerTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/ChunkerTrainerToo0100644 0000000 0000000 00000005166 14523004075 034230 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.chunker; import java.io.File; import java.io.IOException; import opennlp.tools.chunker.ChunkSample; import opennlp.tools.chunker.ChunkerFactory; import opennlp.tools.chunker.ChunkerME; import opennlp.tools.chunker.ChunkerModel; import opennlp.tools.cmdline.AbstractTrainerTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.chunker.ChunkerTrainerTool.TrainerToolParams; import opennlp.tools.cmdline.params.TrainingToolParams; import opennlp.tools.util.model.ModelUtil; public class ChunkerTrainerTool extends AbstractTrainerTool { interface TrainerToolParams extends TrainingParams, TrainingToolParams { } public ChunkerTrainerTool() { super(ChunkSample.class, TrainerToolParams.class); } @Override public String getName() { return "ChunkerTrainerME"; } @Override public String getShortDescription() { return "Trainer for the learnable chunker"; } @Override public void run(String format, String[] args) { super.run(format, args); mlParams = CmdLineUtil.loadTrainingParameters(params.getParams(), false); if (mlParams == null) { mlParams = ModelUtil.createDefaultTrainingParameters(); } File modelOutFile = params.getModel(); CmdLineUtil.checkOutputFile("sentence detector model", modelOutFile); ChunkerModel model; try { ChunkerFactory chunkerFactory = ChunkerFactory .create(params.getFactory()); model = ChunkerME.train(params.getLang(), sampleStream, mlParams, chunkerFactory); } catch (IOException e) { throw createTerminationIOException(e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } CmdLineUtil.writeModel("chunker", modelOutFile, model); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_chunker_T0100644 0000000 0000000 00000000160 14523004075 032561 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/TrainingParams.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/chunker/TrainingParams.ja0100644 0000000 0000000 00000002636 14523004075 034131 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.chunker; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.params.BasicTrainingParams; import opennlp.tools.commons.Internal; /** * TrainingParams for Chunker tools. *

* Note: Do not use this class, internal use only! */ @Internal interface TrainingParams extends BasicTrainingParams { @ParameterDescription(valueName = "factoryName", description = "A sub-class of ChunkerFactory where to get implementation and resources.") @OptionalParameter String getFactory(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_dictionar0100644 0000000 0000000 00000000174 14523004075 032620 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/dictionary/DictionaryBuilderParams.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/dictionary/DictionaryBuil0100644 0000000 0000000 00000002630 14523004075 034242 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.dictionary; import java.io.File; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.params.EncodingParameter; import opennlp.tools.commons.Internal; /** * Params for Dictionary tools. *

* Note: Do not use this class, internal use only! */ @Internal interface DictionaryBuilderParams extends EncodingParameter { @ParameterDescription(valueName = "in", description = "Plain file with one entry per line") File getInputFile(); @ParameterDescription(valueName = "out", description = "The dictionary file.") File getOutputFile(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_dictionar0100644 0000000 0000000 00000000172 14523004075 032616 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/dictionary/DictionaryBuilderTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/dictionary/DictionaryBuil0100644 0000000 0000000 00000004572 14523004075 034251 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.dictionary; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.Reader; import java.nio.charset.Charset; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.dictionary.Dictionary; public class DictionaryBuilderTool extends BasicCmdLineTool { interface Params extends DictionaryBuilderParams { } @Override public String getShortDescription() { return "Builds a new dictionary"; } @Override public String getHelp() { return getBasicHelp(Params.class); } @Override public void run(String[] args) { Params params = validateAndParseParams(args, Params.class); File dictInFile = params.getInputFile(); File dictOutFile = params.getOutputFile(); Charset encoding = params.getEncoding(); CmdLineUtil.checkInputFile("dictionary input file", dictInFile); CmdLineUtil.checkOutputFile("dictionary output file", dictOutFile); try (Reader in = new BufferedReader(new InputStreamReader(new FileInputStream(dictInFile), encoding)); OutputStream out = new FileOutputStream(dictOutFile)) { Dictionary dict = Dictionary.parseOneEntryPerLine(in); dict.serialize(out); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while reading training data or indexing data: " + e.getMessage(), e); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_doccat_Do0100644 0000000 0000000 00000000164 14523004075 032522 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/doccat/DoccatConverterTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/doccat/DoccatConverterToo0100644 0000000 0000000 00000002446 14523004075 034165 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.doccat; import opennlp.tools.cmdline.AbstractConverterTool; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.doccat.DocumentSample; /** * Tool to convert multiple data formats into native OpenNLP doccat training * format. * * @see AbstractConverterTool * @see DocumentSample */ public class DoccatConverterTool extends AbstractConverterTool { public DoccatConverterTool() { super(DocumentSample.class); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_doccat_Do0100644 0000000 0000000 00000000171 14523004075 032520 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/doccat/DoccatCrossValidatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/doccat/DoccatCrossValidat0100644 0000000 0000000 00000011101 14523004075 034116 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.doccat; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.LinkedList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.AbstractCrossValidatorTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.doccat.DoccatCrossValidatorTool.CVToolParams; import opennlp.tools.cmdline.params.CVParams; import opennlp.tools.cmdline.params.FineGrainedEvaluatorParams; import opennlp.tools.doccat.DoccatCrossValidator; import opennlp.tools.doccat.DoccatEvaluationMonitor; import opennlp.tools.doccat.DoccatFactory; import opennlp.tools.doccat.DocumentSample; import opennlp.tools.doccat.FeatureGenerator; import opennlp.tools.util.eval.EvaluationMonitor; import opennlp.tools.util.model.ModelUtil; public final class DoccatCrossValidatorTool extends AbstractCrossValidatorTool { interface CVToolParams extends CVParams, TrainingParams, FineGrainedEvaluatorParams { } private static final Logger logger = LoggerFactory.getLogger(DoccatCrossValidatorTool.class); public DoccatCrossValidatorTool() { super(DocumentSample.class, CVToolParams.class); } @Override public String getShortDescription() { return "K-fold cross validator for the learnable Document Categorizer"; } @Override public void run(String format, String[] args) { super.run(format, args); mlParams = CmdLineUtil.loadTrainingParameters(params.getParams(), false); if (mlParams == null) { mlParams = ModelUtil.createDefaultTrainingParameters(); } List> listeners = new LinkedList<>(); if (params.getMisclassified()) { listeners.add(new DoccatEvaluationErrorListener()); } DoccatFineGrainedReportListener reportListener = null; File reportFile = params.getReportOutputFile(); OutputStream reportOutputStream = null; if (reportFile != null) { CmdLineUtil.checkOutputFile("Report Output File", reportFile); try { reportOutputStream = new FileOutputStream(reportFile); reportListener = new DoccatFineGrainedReportListener(reportOutputStream); listeners.add(reportListener); } catch (FileNotFoundException e) { throw createTerminationIOException(e); } } FeatureGenerator[] featureGenerators = DoccatTrainerTool .createFeatureGenerators(params.getFeatureGenerators()); DoccatEvaluationMonitor[] listenersArr = listeners .toArray(new DoccatEvaluationMonitor[0]); DoccatCrossValidator validator; try { DoccatFactory factory = DoccatFactory.create(params.getFactory(), featureGenerators); validator = new DoccatCrossValidator(params.getLang(), mlParams, factory, listenersArr); validator.evaluate(sampleStream, params.getFolds()); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while reading training data or indexing data: " + e.getMessage(), e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } logger.info("done"); if (reportListener != null) { logger.info("Writing fine-grained report to {}", params.getReportOutputFile().getAbsolutePath()); reportListener.writeReport(); try { // TODO: is it a problem to close the stream now? reportOutputStream.close(); } catch (IOException e) { // nothing to do } } logger.info("Accuracy: {}, Number of documents: {}", validator.getDocumentAccuracy(), validator.getDocumentAccuracy()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_doccat_Do0100644 0000000 0000000 00000000176 14523004075 032525 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/doccat/DoccatEvaluationErrorListener.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/doccat/DoccatEvaluationEr0100644 0000000 0000000 00000003722 14523004075 034130 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.doccat; import java.io.OutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.EvaluationErrorPrinter; import opennlp.tools.doccat.DoccatEvaluationMonitor; import opennlp.tools.doccat.DocumentSample; import opennlp.tools.log.LogPrintStream; import opennlp.tools.util.eval.EvaluationMonitor; /** * A default implementation of {@link EvaluationMonitor} that prints to an * output stream. */ public class DoccatEvaluationErrorListener extends EvaluationErrorPrinter implements DoccatEvaluationMonitor { private static final Logger logger = LoggerFactory.getLogger(DoccatEvaluationErrorListener.class); /** * Creates a listener that will print to the configured {@code logger}. */ public DoccatEvaluationErrorListener() { super(new LogPrintStream(logger)); } /** * Creates a listener that will print to a given {@link OutputStream} */ public DoccatEvaluationErrorListener(OutputStream outputStream) { super(outputStream); } @Override public void misclassified(DocumentSample reference, DocumentSample prediction) { printError(reference, prediction); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_doccat_Do0100644 0000000 0000000 00000000164 14523004075 032522 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/doccat/DoccatEvaluatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/doccat/DoccatEvaluatorToo0100644 0000000 0000000 00000011543 14523004075 034156 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.doccat; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.LinkedList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.AbstractEvaluatorTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.PerformanceMonitor; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.doccat.DoccatEvaluatorTool.EvalToolParams; import opennlp.tools.cmdline.params.EvaluatorParams; import opennlp.tools.cmdline.params.FineGrainedEvaluatorParams; import opennlp.tools.doccat.DoccatEvaluationMonitor; import opennlp.tools.doccat.DoccatModel; import opennlp.tools.doccat.DocumentCategorizerEvaluator; import opennlp.tools.doccat.DocumentCategorizerME; import opennlp.tools.doccat.DocumentSample; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.eval.EvaluationMonitor; /** * A default {@link DocumentSample}-centric implementation of {@link AbstractEvaluatorTool} * that prints to an output stream. * * @see AbstractEvaluatorTool * @see EvalToolParams */ public final class DoccatEvaluatorTool extends AbstractEvaluatorTool { interface EvalToolParams extends EvaluatorParams, FineGrainedEvaluatorParams { } private static final Logger logger = LoggerFactory.getLogger(DoccatEvaluatorTool.class); public DoccatEvaluatorTool() { super(DocumentSample.class, EvalToolParams.class); } @Override public String getShortDescription() { return "Measures the performance of the Doccat model with the reference data"; } @Override public void run(String format, String[] args) { super.run(format, args); DoccatModel model = new DoccatModelLoader().load(params.getModel()); List> listeners = new LinkedList<>(); if (params.getMisclassified()) { listeners.add(new DoccatEvaluationErrorListener()); } DoccatFineGrainedReportListener reportListener = null; File reportFile = params.getReportOutputFile(); OutputStream reportOutputStream = null; if (reportFile != null) { CmdLineUtil.checkOutputFile("Report Output File", reportFile); try { reportOutputStream = new FileOutputStream(reportFile); reportListener = new DoccatFineGrainedReportListener(reportOutputStream); listeners.add(reportListener); } catch (FileNotFoundException e) { throw new TerminateToolException(-1, "IO error while creating Doccat fine-grained report file: " + e.getMessage()); } } DocumentCategorizerEvaluator evaluator = new DocumentCategorizerEvaluator( new DocumentCategorizerME(model), listeners.toArray(new DoccatEvaluationMonitor[0])); final PerformanceMonitor monitor = new PerformanceMonitor("doc"); try (ObjectStream measuredSampleStream = new ObjectStream<>() { @Override public DocumentSample read() throws IOException { monitor.incrementCounter(); return sampleStream.read(); } @Override public void reset() throws IOException { sampleStream.reset(); } @Override public void close() throws IOException { sampleStream.close(); } }) { monitor.startAndPrintThroughput(); evaluator.evaluate(measuredSampleStream); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while reading test data: " + e.getMessage(), e); } // sorry that this can fail monitor.stopAndPrintFinalResult(); logger.info(evaluator.toString()); if (reportListener != null) { logger.info("Writing fine-grained report to {}", params.getReportOutputFile().getAbsolutePath()); reportListener.writeReport(); try { // TODO: is it a problem to close the stream now? reportOutputStream.close(); } catch (IOException e) { // nothing to do } } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_doccat_Do0100644 0000000 0000000 00000000200 14523004075 032511 xustar000000000 0000000 128 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/doccat/DoccatFineGrainedReportListener.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/doccat/DoccatFineGrainedR0100644 0000000 0000000 00000004712 14523004075 034027 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.doccat; import java.io.OutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.FineGrainedReportListener; import opennlp.tools.doccat.DoccatEvaluationMonitor; import opennlp.tools.doccat.DocumentSample; import opennlp.tools.log.LogPrintStream; /** * Generates a detailed report for the POS Tagger. *

* It is possible to use it from an API and access the statistics using the * provided getters */ public class DoccatFineGrainedReportListener extends FineGrainedReportListener implements DoccatEvaluationMonitor { private static final Logger logger = LoggerFactory.getLogger(DoccatFineGrainedReportListener.class); /** * Creates a listener that will print to the configured {@code logger}. */ public DoccatFineGrainedReportListener() { this(new LogPrintStream(logger)); } /** * Creates a listener that prints to a given {@link OutputStream} */ public DoccatFineGrainedReportListener(OutputStream outputStream) { super(outputStream); } // methods inherited from EvaluationMonitor @Override public void misclassified(DocumentSample reference, DocumentSample prediction) { statsAdd(reference, prediction); } @Override public void correctlyClassified(DocumentSample reference, DocumentSample prediction) { statsAdd(reference, prediction); } private void statsAdd(DocumentSample reference, DocumentSample prediction) { getStats().add(reference.getText(), reference.getCategory(), prediction.getCategory()); } @Override public void writeReport() { printGeneralStatistics(); printTagsErrorRank(); printGeneralConfusionTable(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_doccat_Do0100644 0000000 0000000 00000000162 14523004075 032520 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/doccat/DoccatModelLoader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/doccat/DoccatModelLoader.0100644 0000000 0000000 00000002631 14523004075 033775 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.doccat; import java.io.IOException; import java.io.InputStream; import opennlp.tools.cmdline.ModelLoader; import opennlp.tools.commons.Internal; import opennlp.tools.doccat.DoccatModel; /** * Loads a {@link DoccatModel} for the command line tools. *

* Note: Do not use this class, internal use only! */ @Internal public class DoccatModelLoader extends ModelLoader { public DoccatModelLoader() { super("Document Categorizer"); } @Override protected DoccatModel loadModel(InputStream modelIn) throws IOException { return new DoccatModel(modelIn); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/doccat/DoccatTool.java0100644 0000000 0000000 00000006072 14523004075 033370 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.doccat; import java.io.File; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CLI; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.PerformanceMonitor; import opennlp.tools.cmdline.SystemInputStreamFactory; import opennlp.tools.doccat.DoccatModel; import opennlp.tools.doccat.DocumentCategorizerME; import opennlp.tools.doccat.DocumentSample; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ParagraphStream; import opennlp.tools.util.PlainTextByLineStream; public class DoccatTool extends BasicCmdLineTool { private static final Logger logger = LoggerFactory.getLogger(DoccatTool.class); @Override public String getShortDescription() { return "Learned document categorizer"; } @Override public String getHelp() { return "Usage: " + CLI.CMD + " " + getName() + " model < documents"; } @Override public void run(String[] args) { if (0 == args.length) { logger.info(getHelp()); } else { DoccatModel model = new DoccatModelLoader().load(new File(args[0])); DocumentCategorizerME documentCategorizerME = new DocumentCategorizerME(model); /* * moved initialization to the try block to catch new IOException */ ObjectStream documentStream; PerformanceMonitor perfMon = new PerformanceMonitor("doc"); perfMon.start(); try { documentStream = new ParagraphStream(new PlainTextByLineStream( new SystemInputStreamFactory(), SystemInputStreamFactory.encoding())); String document; while ((document = documentStream.read()) != null) { String[] tokens = WhitespaceTokenizer.INSTANCE.tokenize(document); double[] prob = documentCategorizerME.categorize(tokens); String category = documentCategorizerME.getBestCategory(prob); DocumentSample sample = new DocumentSample(category, tokens); logger.info(sample.toString()); perfMon.incrementCounter(); } } catch (IOException e) { CmdLineUtil.handleStdinIoError(e); } perfMon.stopAndPrintFinalResult(); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_doccat_Do0100644 0000000 0000000 00000000162 14523004075 032520 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/doccat/DoccatTrainerTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/doccat/DoccatTrainerTool.0100644 0000000 0000000 00000006602 14523004075 034052 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.doccat; import java.io.File; import java.io.IOException; import opennlp.tools.cmdline.AbstractTrainerTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.doccat.DoccatTrainerTool.TrainerToolParams; import opennlp.tools.cmdline.params.TrainingToolParams; import opennlp.tools.doccat.BagOfWordsFeatureGenerator; import opennlp.tools.doccat.DoccatFactory; import opennlp.tools.doccat.DoccatModel; import opennlp.tools.doccat.DocumentCategorizerME; import opennlp.tools.doccat.DocumentSample; import opennlp.tools.doccat.FeatureGenerator; import opennlp.tools.util.ext.ExtensionLoader; import opennlp.tools.util.model.ModelUtil; public class DoccatTrainerTool extends AbstractTrainerTool { interface TrainerToolParams extends TrainingParams, TrainingToolParams { } public DoccatTrainerTool() { super(DocumentSample.class, TrainerToolParams.class); } @Override public String getShortDescription() { return "Trainer for the learnable document categorizer"; } @Override public void run(String format, String[] args) { super.run(format, args); mlParams = CmdLineUtil.loadTrainingParameters(params.getParams(), false); if (mlParams == null) { mlParams = ModelUtil.createDefaultTrainingParameters(); } File modelOutFile = params.getModel(); CmdLineUtil.checkOutputFile("document categorizer model", modelOutFile); FeatureGenerator[] featureGenerators = createFeatureGenerators(params .getFeatureGenerators()); DoccatModel model; try { DoccatFactory factory = DoccatFactory.create(params.getFactory(), featureGenerators); model = DocumentCategorizerME.train(params.getLang(), sampleStream, mlParams, factory); } catch (IOException e) { throw createTerminationIOException(e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } CmdLineUtil.writeModel("document categorizer", modelOutFile, model); } static FeatureGenerator[] createFeatureGenerators(String featureGeneratorsNames) { if (featureGeneratorsNames == null) { return new FeatureGenerator[]{new BagOfWordsFeatureGenerator()}; } String[] classes = featureGeneratorsNames.split(","); FeatureGenerator[] featureGenerators = new FeatureGenerator[classes.length]; for (int i = 0; i < featureGenerators.length; i++) { featureGenerators[i] = ExtensionLoader.instantiateExtension( FeatureGenerator.class, classes[i]); } return featureGenerators; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_doccat_Tr0100644 0000000 0000000 00000000157 14523004075 032547 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/doccat/TrainingParams.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/doccat/TrainingParams.jav0100644 0000000 0000000 00000003136 14523004075 034111 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.doccat; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.params.BasicTrainingParams; import opennlp.tools.commons.Internal; /** * TrainingParams for DocCat. *

* Note: Do not use this class, internal use only! */ @Internal interface TrainingParams extends BasicTrainingParams { @ParameterDescription(valueName = "fg", description = "Comma separated feature generator classes. Bag of words is used if not specified.") @OptionalParameter String getFeatureGenerators(); @ParameterDescription(valueName = "factoryName", description = "A sub-class of DoccatFactory where to get implementation and resources.") @OptionalParameter String getFactory(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_entitylin0100644 0000000 0000000 00000000167 14523004075 032665 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/entitylinker/EntityLinkerTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/entitylinker/EntityLinker0100644 0000000 0000000 00000012120 14523004075 034311 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.entitylinker; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CLI; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.PerformanceMonitor; import opennlp.tools.cmdline.SystemInputStreamFactory; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.entitylinker.EntityLinker; import opennlp.tools.entitylinker.EntityLinkerFactory; import opennlp.tools.entitylinker.EntityLinkerProperties; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; public class EntityLinkerTool extends BasicCmdLineTool { private static final Logger logger = LoggerFactory.getLogger(EntityLinkerTool.class); @Override public String getShortDescription() { return "Links an entity to an external data set"; } @Override public void run(String[] args) { if (0 == args.length) { logger.info(getHelp()); } else { // TODO: Ask Mark if we can remove the type, the user knows upfront if s/he tries // to link place names or company mentions ... String entityType = "location"; // Load the properties, they should contain everything that is necessary to instantiate // the component // TODO: Entity Linker Properties constructor should not duplicate code EntityLinkerProperties properties; try { properties = new EntityLinkerProperties(new File(args[0])); } catch (IOException e) { throw new TerminateToolException(-1, "Failed to load the properties file!"); } // TODO: It should not just throw Exception. EntityLinker entityLinker; try { entityLinker = EntityLinkerFactory.getLinker(entityType, properties); } catch (Exception e) { throw new TerminateToolException(-1, "Failed to instantiate the Entity Linker: " + e.getMessage()); } PerformanceMonitor perfMon = new PerformanceMonitor("sent"); perfMon.start(); try (ObjectStream untokenizedLineStream = new PlainTextByLineStream( new SystemInputStreamFactory(), SystemInputStreamFactory.encoding())) { List document = new ArrayList<>(); String line; while ((line = untokenizedLineStream.read()) != null) { if (line.trim().isEmpty()) { // Run entity linker ... and output result ... StringBuilder text = new StringBuilder(); Span[] sentences = new Span[document.size()]; Span[][] tokensBySentence = new Span[document.size()][]; Span[][] namesBySentence = new Span[document.size()][]; for (int i = 0; i < document.size(); i++) { NameSample sample = document.get(i); namesBySentence[i] = sample.getNames(); int sentenceBegin = text.length(); Span[] tokens = new Span[sample.getSentence().length]; // for all tokens for (int ti = 0; ti < sample.getSentence().length; ti++) { int tokenBegin = text.length(); text.append(sample.getSentence()[ti]); text.append(" "); tokens[ti] = new Span(tokenBegin, text.length()); } tokensBySentence[i] = tokens; sentences[i] = new Span(sentenceBegin, text.length()); text.append("\n"); } List linkedSpans = entityLinker.find(text.toString(), sentences, tokensBySentence, namesBySentence); for (Span linkedSpan : linkedSpans) { logger.info(linkedSpan.toString()); } perfMon.incrementCounter(document.size()); document.clear(); } else { document.add(NameSample.parse(line, false)); } } } catch (IOException e) { CmdLineUtil.handleStdinIoError(e); } perfMon.stopAndPrintFinalResult(); } } @Override public String getHelp() { return "Usage: " + CLI.CMD + " " + getName() + " model < sentences"; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_langdetec0100644 0000000 0000000 00000000202 14523004075 032562 xustar000000000 0000000 130 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/LanguageDetectorConverterTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/LanguageDetect0100644 0000000 0000000 00000002516 14523004075 034145 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.langdetect; import opennlp.tools.cmdline.AbstractConverterTool; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.langdetect.LanguageSample; /** * Tool to convert multiple data formats into native OpenNLP language detection * training format. * * @see AbstractConverterTool * @see LanguageSample */ public class LanguageDetectorConverterTool extends AbstractConverterTool { public LanguageDetectorConverterTool() { super(LanguageSample.class); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_langdetec0100644 0000000 0000000 00000000207 14523004075 032567 xustar000000000 0000000 135 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/LanguageDetectorCrossValidatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/LanguageDetect0100644 0000000 0000000 00000010762 14523004075 034147 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.langdetect; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.LinkedList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.AbstractCrossValidatorTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.CVParams; import opennlp.tools.cmdline.params.FineGrainedEvaluatorParams; import opennlp.tools.langdetect.LanguageDetectorCrossValidator; import opennlp.tools.langdetect.LanguageDetectorEvaluationMonitor; import opennlp.tools.langdetect.LanguageDetectorFactory; import opennlp.tools.langdetect.LanguageSample; import opennlp.tools.util.eval.EvaluationMonitor; import opennlp.tools.util.model.ModelUtil; public final class LanguageDetectorCrossValidatorTool extends AbstractCrossValidatorTool { interface CVToolParams extends CVParams, TrainingParams, FineGrainedEvaluatorParams { } private static final Logger logger = LoggerFactory.getLogger(LanguageDetectorCrossValidatorTool.class); public LanguageDetectorCrossValidatorTool() { super(LanguageSample.class, CVToolParams.class); } @Override public String getShortDescription() { return "K-fold cross validator for the learnable Language Detector"; } @Override public void run(String format, String[] args) { super.run(format, args); mlParams = CmdLineUtil.loadTrainingParameters(params.getParams(), false); if (mlParams == null) { mlParams = ModelUtil.createDefaultTrainingParameters(); } List> listeners = new LinkedList<>(); if (params.getMisclassified()) { listeners.add(new LanguageDetectorEvaluationErrorListener()); } LanguageDetectorFineGrainedReportListener reportListener = null; File reportFile = params.getReportOutputFile(); OutputStream reportOutputStream = null; if (reportFile != null) { CmdLineUtil.checkOutputFile("Report Output File", reportFile); try { reportOutputStream = new FileOutputStream(reportFile); reportListener = new LanguageDetectorFineGrainedReportListener(reportOutputStream); listeners.add(reportListener); } catch (FileNotFoundException e) { throw createTerminationIOException(e); } } LanguageDetectorEvaluationMonitor[] listenersArr = listeners .toArray(new LanguageDetectorEvaluationMonitor[0]); LanguageDetectorCrossValidator validator; try { LanguageDetectorFactory factory = LanguageDetectorFactory.create(params.getFactory()); validator = new LanguageDetectorCrossValidator(mlParams, factory, listenersArr); validator.evaluate(sampleStream, params.getFolds()); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while reading training data or indexing data: " + e.getMessage(), e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } logger.info("done"); if (reportListener != null) { logger.info("Writing fine-grained report to {}", params.getReportOutputFile().getAbsolutePath()); reportListener.writeReport(); try { // TODO: is it a problem to close the stream now? reportOutputStream.close(); } catch (IOException e) { // nothing to do } } logger.info("Accuracy: {} Number of documents: {}", validator.getDocumentAccuracy(), validator.getDocumentCount()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_langdetec0100644 0000000 0000000 00000000214 14523004075 032565 xustar000000000 0000000 140 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/LanguageDetectorEvaluationErrorListener.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/LanguageDetect0100644 0000000 0000000 00000004544 14523004075 034150 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.langdetect; import java.io.OutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.EvaluationErrorPrinter; import opennlp.tools.langdetect.LanguageDetectorEvaluationMonitor; import opennlp.tools.langdetect.LanguageSample; import opennlp.tools.log.LogPrintStream; import opennlp.tools.util.eval.EvaluationMonitor; /** * A default implementation of {@link EvaluationMonitor} that prints to an * output stream. */ public class LanguageDetectorEvaluationErrorListener extends EvaluationErrorPrinter implements LanguageDetectorEvaluationMonitor { private static final Logger logger = LoggerFactory.getLogger(LanguageDetectorEvaluationErrorListener.class); /** * Creates a listener that will print to the configured {@code logger}. */ public LanguageDetectorEvaluationErrorListener() { super(new LogPrintStream(logger)); } /** * Creates a listener that will print to a given {@link OutputStream} */ public LanguageDetectorEvaluationErrorListener(OutputStream outputStream) { super(outputStream); printStream.println("Expected\tPredicted\tContext"); } @Override public void misclassified(LanguageSample reference, LanguageSample prediction) { printError(reference, prediction); } @Override protected void printError(LanguageSample referenceSample, LanguageSample predictedSample) { printStream.println(String.join("\t", referenceSample.language().getLang(), predictedSample.language().getLang(), referenceSample.context())); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_langdetec0100644 0000000 0000000 00000000202 14523004075 032562 xustar000000000 0000000 130 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/LanguageDetectorEvaluatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/LanguageDetect0100644 0000000 0000000 00000011706 14523004075 034146 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.langdetect; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.LinkedList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.AbstractEvaluatorTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.PerformanceMonitor; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.EvaluatorParams; import opennlp.tools.cmdline.params.FineGrainedEvaluatorParams; import opennlp.tools.langdetect.LanguageDetectorEvaluationMonitor; import opennlp.tools.langdetect.LanguageDetectorEvaluator; import opennlp.tools.langdetect.LanguageDetectorME; import opennlp.tools.langdetect.LanguageDetectorModel; import opennlp.tools.langdetect.LanguageSample; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.eval.EvaluationMonitor; /** * A default {@link LanguageSample}-centric implementation of {@link AbstractEvaluatorTool} * that prints to an output stream. * * @see AbstractEvaluatorTool * @see EvalToolParams */ public final class LanguageDetectorEvaluatorTool extends AbstractEvaluatorTool { interface EvalToolParams extends EvaluatorParams, FineGrainedEvaluatorParams { } private static final Logger logger = LoggerFactory.getLogger(LanguageDetectorEvaluatorTool.class); public LanguageDetectorEvaluatorTool() { super(LanguageSample.class, EvalToolParams.class); } @Override public String getShortDescription() { return "Measures the performance of the Language Detector model with the reference data"; } @Override public void run(String format, String[] args) { super.run(format, args); LanguageDetectorModel model = new LanguageDetectorModelLoader().load(params.getModel()); List> listeners = new LinkedList<>(); if (params.getMisclassified()) { listeners.add(new LanguageDetectorEvaluationErrorListener()); } LanguageDetectorFineGrainedReportListener reportListener = null; File reportFile = params.getReportOutputFile(); OutputStream reportOutputStream = null; if (reportFile != null) { CmdLineUtil.checkOutputFile("Report Output File", reportFile); try { reportOutputStream = new FileOutputStream(reportFile); reportListener = new LanguageDetectorFineGrainedReportListener(reportOutputStream); listeners.add(reportListener); } catch (FileNotFoundException e) { throw new TerminateToolException(-1, "IO error while creating LanguageDetector fine-grained report file: " + e.getMessage()); } } LanguageDetectorEvaluator evaluator = new LanguageDetectorEvaluator( new LanguageDetectorME(model), listeners.toArray(new LanguageDetectorEvaluationMonitor[0])); final PerformanceMonitor monitor = new PerformanceMonitor("doc"); try (ObjectStream measuredSampleStream = new ObjectStream<>() { @Override public LanguageSample read() throws IOException { monitor.incrementCounter(); return sampleStream.read(); } @Override public void reset() throws IOException { sampleStream.reset(); } @Override public void close() throws IOException { sampleStream.close(); } }) { monitor.startAndPrintThroughput(); evaluator.evaluate(measuredSampleStream); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while reading test data: " + e.getMessage(), e); } // sorry that this can fail monitor.stopAndPrintFinalResult(); logger.info(evaluator.toString()); if (reportListener != null) { logger.info("Writing fine-grained report to {}", params.getReportOutputFile().getAbsolutePath()); reportListener.writeReport(); try { // TODO: is it a problem to close the stream now? reportOutputStream.close(); } catch (IOException e) { // nothing to do } } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_langdetec0100644 0000000 0000000 00000000216 14523004075 032567 xustar000000000 0000000 142 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/LanguageDetectorFineGrainedReportListener.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/LanguageDetect0100644 0000000 0000000 00000004471 14523004075 034147 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.langdetect; import java.io.OutputStream; import opennlp.tools.cmdline.FineGrainedReportListener; import opennlp.tools.langdetect.LanguageDetectorEvaluationMonitor; import opennlp.tools.langdetect.LanguageSample; /** * Generates a detailed report for the POS Tagger. *

* It is possible to use it from an API and access the statistics using the * provided getters. */ public class LanguageDetectorFineGrainedReportListener extends FineGrainedReportListener implements LanguageDetectorEvaluationMonitor { /** * Creates a listener that will print to {@link System#err} */ public LanguageDetectorFineGrainedReportListener() { this(System.err); } /** * Creates a listener that prints to a given {@link OutputStream} */ public LanguageDetectorFineGrainedReportListener(OutputStream outputStream) { super(outputStream); } // methods inherited from EvaluationMonitor @Override public void misclassified(LanguageSample reference, LanguageSample prediction) { statsAdd(reference, prediction); } @Override public void correctlyClassified(LanguageSample reference, LanguageSample prediction) { statsAdd(reference, prediction); } private void statsAdd(LanguageSample reference, LanguageSample prediction) { getStats().add(reference.context(), reference.language().getLang(), prediction.language().getLang()); } @Override public void writeReport() { printGeneralStatistics(); printTagsErrorRank(); printGeneralConfusionTable(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_langdetec0100644 0000000 0000000 00000000200 14523004075 032560 xustar000000000 0000000 128 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/LanguageDetectorModelLoader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/LanguageDetect0100644 0000000 0000000 00000002744 14523004075 034150 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.langdetect; import java.io.IOException; import java.io.InputStream; import opennlp.tools.cmdline.ModelLoader; import opennlp.tools.commons.Internal; import opennlp.tools.langdetect.LanguageDetectorModel; /** * Loads a {@link LanguageDetectorModel} for the command line tools. *

* Note: Do not use this class, internal use only! */ @Internal public class LanguageDetectorModelLoader extends ModelLoader { public LanguageDetectorModelLoader() { super("Language Detector"); } @Override protected LanguageDetectorModel loadModel(InputStream modelIn) throws IOException { return new LanguageDetectorModel(modelIn); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_langdetec0100644 0000000 0000000 00000000171 14523004075 032567 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/LanguageDetectorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/LanguageDetect0100644 0000000 0000000 00000005764 14523004075 034155 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.langdetect; import java.io.File; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CLI; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.PerformanceMonitor; import opennlp.tools.cmdline.SystemInputStreamFactory; import opennlp.tools.langdetect.Language; import opennlp.tools.langdetect.LanguageDetector; import opennlp.tools.langdetect.LanguageDetectorME; import opennlp.tools.langdetect.LanguageDetectorModel; import opennlp.tools.langdetect.LanguageSample; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ParagraphStream; import opennlp.tools.util.PlainTextByLineStream; public class LanguageDetectorTool extends BasicCmdLineTool { private static final Logger logger = LoggerFactory.getLogger(LanguageDetectorTool.class); @Override public String getShortDescription() { return "Learned language detector"; } @Override public String getHelp() { return "Usage: " + CLI.CMD + " " + getName() + " model < documents"; } @Override public void run(String[] args) { if (0 == args.length) { logger.info(getHelp()); } else { LanguageDetectorModel model = new LanguageDetectorModelLoader().load(new File(args[0])); LanguageDetector langDetectME = new LanguageDetectorME(model); /* * moved initialization to the try block to catch new IOException */ ObjectStream documentStream; PerformanceMonitor perfMon = new PerformanceMonitor("doc"); perfMon.start(); try { documentStream = new ParagraphStream(new PlainTextByLineStream( new SystemInputStreamFactory(), SystemInputStreamFactory.encoding())); String document; while ((document = documentStream.read()) != null) { Language lang = langDetectME.predictLanguage(document); LanguageSample sample = new LanguageSample(lang, document); logger.info(sample.toString()); perfMon.incrementCounter(); } } catch (IOException e) { CmdLineUtil.handleStdinIoError(e); } perfMon.stopAndPrintFinalResult(); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_langdetec0100644 0000000 0000000 00000000200 14523004075 032560 xustar000000000 0000000 128 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/LanguageDetectorTrainerTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/LanguageDetect0100644 0000000 0000000 00000005517 14523004075 034151 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.langdetect; import java.io.File; import java.io.IOException; import opennlp.tools.cmdline.AbstractTrainerTool; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.langdetect.LanguageDetectorFactory; import opennlp.tools.langdetect.LanguageDetectorME; import opennlp.tools.langdetect.LanguageDetectorModel; import opennlp.tools.langdetect.LanguageSample; import opennlp.tools.util.model.ModelUtil; public class LanguageDetectorTrainerTool extends AbstractTrainerTool { interface TrainerToolParams extends TrainingParams { @ArgumentParser.ParameterDescription(valueName = "modelFile", description = "output model file.") File getModel(); @ArgumentParser.ParameterDescription(valueName = "paramsFile", description = "training parameters file.") @ArgumentParser.OptionalParameter() String getParams(); } public LanguageDetectorTrainerTool() { super(LanguageSample.class, TrainerToolParams.class); } @Override public String getShortDescription() { return "Trainer for the learnable language detector"; } @Override public void run(String format, String[] args) { super.run(format, args); mlParams = CmdLineUtil.loadTrainingParameters(params.getParams(), false); if (mlParams == null) { mlParams = ModelUtil.createDefaultTrainingParameters(); } File modelOutFile = params.getModel(); CmdLineUtil.checkOutputFile("language detector model", modelOutFile); LanguageDetectorModel model; try { LanguageDetectorFactory factory = LanguageDetectorFactory.create(params.getFactory()); model = LanguageDetectorME.train(sampleStream, mlParams, factory); } catch (IOException e) { throw createTerminationIOException(e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } CmdLineUtil.writeModel("language detector", modelOutFile, model); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_langdetec0100644 0000000 0000000 00000000163 14523004075 032570 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/TrainingParams.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/langdetect/TrainingParams0100644 0000000 0000000 00000002763 14523004075 034214 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.langdetect; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.commons.Internal; /** * TrainingParams for Language Detector. *

* Note: Do not use this class, internal use only! */ @Internal interface TrainingParams { @ParameterDescription(valueName = "paramsFile", description = "training parameters file.") @OptionalParameter() String getParams(); @ParameterDescription(valueName = "factoryName", description = "A sub-class of LanguageDetectorFactory" + " where to get implementation and resources.") @OptionalParameter String getFactory(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_languagem0100644 0000000 0000000 00000000176 14523004075 032606 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/languagemodel/NGramLanguageModelTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/languagemodel/NGramLangua0100644 0000000 0000000 00000006545 14523004075 034125 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.languagemodel; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CLI; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.PerformanceMonitor; import opennlp.tools.cmdline.SystemInputStreamFactory; import opennlp.tools.languagemodel.NGramLanguageModel; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; /** * Command line tool for {@link opennlp.tools.languagemodel.NGramLanguageModel}. */ public class NGramLanguageModelTool extends BasicCmdLineTool { private static final Logger logger = LoggerFactory.getLogger(NGramLanguageModelTool.class); @Override public String getShortDescription() { return "Gives the probability and most probable next token(s) of a sequence of tokens in a " + "language model"; } @Override public void run(String[] args) { File lmFile = new File(args[0]); try (InputStream stream = new BufferedInputStream(new FileInputStream(lmFile))) { NGramLanguageModel nGramLanguageModel = new NGramLanguageModel(stream); PerformanceMonitor perfMon = null; try (ObjectStream lineStream = new PlainTextByLineStream( new SystemInputStreamFactory(), SystemInputStreamFactory.encoding())) { perfMon = new PerformanceMonitor("nglm"); perfMon.start(); String line; while ((line = lineStream.read()) != null) { double probability; String[] predicted; // TODO : use a Tokenizer here String[] tokens = line.split(" "); try { probability = nGramLanguageModel.calculateProbability(tokens); predicted = nGramLanguageModel.predictNextTokens(tokens); } catch (Exception e) { logger.error("Error for line: {}", line, e); continue; } logger.info("{} -> prob: {}, next: {}", Arrays.toString(tokens), probability, Arrays.toString(predicted)); perfMon.incrementCounter(); } } catch (IOException e) { CmdLineUtil.handleStdinIoError(e); } perfMon.stopAndPrintFinalResult(); } catch (IOException e) { logger.error(e.getLocalizedMessage(), e); } // do nothing } @Override public String getHelp() { return "Usage: " + CLI.CMD + " " + getName() + " model"; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_lemmatize0100644 0000000 0000000 00000000201 14523004075 032622 xustar000000000 0000000 129 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/lemmatizer/LemmaEvaluationErrorListener.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/lemmatizer/LemmaEvaluatio0100644 0000000 0000000 00000004044 14523004075 034233 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.lemmatizer; import java.io.OutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.EvaluationErrorPrinter; import opennlp.tools.lemmatizer.LemmaSample; import opennlp.tools.lemmatizer.LemmatizerEvaluationMonitor; import opennlp.tools.log.LogPrintStream; import opennlp.tools.util.eval.EvaluationMonitor; /** * A default implementation of {@link EvaluationMonitor} that prints to an * output stream. */ public class LemmaEvaluationErrorListener extends EvaluationErrorPrinter implements LemmatizerEvaluationMonitor { private static final Logger logger = LoggerFactory.getLogger(LemmaEvaluationErrorListener.class); /** * Creates a listener that will print to the configured {@code logger}. */ public LemmaEvaluationErrorListener() { super(new LogPrintStream(logger)); } /** * Creates a listener that will print to a given {@link OutputStream} */ public LemmaEvaluationErrorListener(OutputStream outputStream) { super(outputStream); } @Override public void misclassified(LemmaSample reference, LemmaSample prediction) { printError(reference.getLemmas(), prediction.getLemmas(), reference, prediction, reference.getTokens()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_lemmatize0100644 0000000 0000000 00000000174 14523004075 032633 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/lemmatizer/LemmatizerEvaluatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/lemmatizer/LemmatizerEval0100644 0000000 0000000 00000010240 14523004075 034242 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.lemmatizer; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.AbstractEvaluatorTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.EvaluatorParams; import opennlp.tools.cmdline.params.FineGrainedEvaluatorParams; import opennlp.tools.lemmatizer.LemmaSample; import opennlp.tools.lemmatizer.LemmatizerEvaluationMonitor; import opennlp.tools.lemmatizer.LemmatizerEvaluator; import opennlp.tools.lemmatizer.LemmatizerModel; /** * A default {@link LemmaSample}-centric implementation of {@link AbstractEvaluatorTool} * that prints to an output stream. * * @see AbstractEvaluatorTool * @see EvalToolParams */ public final class LemmatizerEvaluatorTool extends AbstractEvaluatorTool { private static final Logger logger = LoggerFactory.getLogger(LemmatizerEvaluatorTool.class); public LemmatizerEvaluatorTool() { super(LemmaSample.class, EvalToolParams.class); } @Override public String getShortDescription() { return "Measures the performance of the Lemmatizer model with the reference data"; } @Override public void run(String format, String[] args) { super.run(format, args); LemmatizerModel model = new LemmatizerModelLoader().load(params.getModel()); LemmatizerEvaluationMonitor missclassifiedListener = null; if (params.getMisclassified()) { missclassifiedListener = new LemmaEvaluationErrorListener(); } LemmatizerFineGrainedReportListener reportListener = null; File reportFile = params.getReportOutputFile(); OutputStream reportOutputStream = null; if (reportFile != null) { CmdLineUtil.checkOutputFile("Report Output File", reportFile); try { reportOutputStream = new FileOutputStream(reportFile); reportListener = new LemmatizerFineGrainedReportListener( reportOutputStream); } catch (FileNotFoundException e) { throw new TerminateToolException(-1, "IO error while creating Lemmatizer fine-grained report file: " + e.getMessage()); } } LemmatizerEvaluator evaluator = new LemmatizerEvaluator( new opennlp.tools.lemmatizer.LemmatizerME(model), missclassifiedListener, reportListener); logger.info("Evaluating ... "); try { evaluator.evaluate(sampleStream); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while reading test data: " + e.getMessage(), e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } logger.info("done"); if (reportListener != null) { logger.info("Writing fine-grained report to {}", params.getReportOutputFile().getAbsolutePath()); reportListener.writeReport(); try { // TODO: is it a problem to close the stream now? reportOutputStream.close(); } catch (IOException e) { // nothing to do } } logger.info("Accuracy: {}", evaluator.getWordAccuracy()); } interface EvalToolParams extends EvaluatorParams, FineGrainedEvaluatorParams { } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_lemmatize0100644 0000000 0000000 00000000210 14523004075 032622 xustar000000000 0000000 136 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/lemmatizer/LemmatizerFineGrainedReportListener.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/lemmatizer/LemmatizerFine0100644 0000000 0000000 00000005162 14523004075 034243 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.lemmatizer; import java.io.OutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.FineGrainedReportListener; import opennlp.tools.lemmatizer.LemmaSample; import opennlp.tools.lemmatizer.LemmatizerEvaluationMonitor; import opennlp.tools.log.LogPrintStream; /** * Generates a detailed report for the Lemmatizer. *

* It is possible to use it from an API and access the statistics using the * provided getters. */ public class LemmatizerFineGrainedReportListener extends FineGrainedReportListener implements LemmatizerEvaluationMonitor { private static final Logger logger = LoggerFactory.getLogger(LemmatizerFineGrainedReportListener.class); /** * Creates a listener that will print to the configured {@code logger}. */ public LemmatizerFineGrainedReportListener() { super(new LogPrintStream(logger)); } /** * Creates a listener that prints to a given {@link OutputStream} */ public LemmatizerFineGrainedReportListener(OutputStream outputStream) { super(outputStream); } // methods inherited from EvaluationMonitor @Override public void misclassified(LemmaSample reference, LemmaSample prediction) { statsAdd(reference, prediction); } @Override public void correctlyClassified(LemmaSample reference, LemmaSample prediction) { statsAdd(reference, prediction); } private void statsAdd(LemmaSample reference, LemmaSample prediction) { getStats().add(reference.getTokens(), reference.getTags(), prediction.getTags()); } @Override public void writeReport() { printGeneralStatistics(); // token stats printTokenErrorRank(); printTokenOccurrencesRank(); // tag stats printTagsErrorRank(); // confusion tables printGeneralConfusionTable(); printDetailedConfusionMatrix(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_lemmatize0100644 0000000 0000000 00000000165 14523004075 032633 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/lemmatizer/LemmatizerMETool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/lemmatizer/LemmatizerMETo0100644 0000000 0000000 00000006033 14523004075 034164 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.lemmatizer; import java.io.File; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CLI; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.PerformanceMonitor; import opennlp.tools.cmdline.SystemInputStreamFactory; import opennlp.tools.lemmatizer.LemmaSample; import opennlp.tools.lemmatizer.LemmatizerME; import opennlp.tools.lemmatizer.LemmatizerModel; import opennlp.tools.postag.POSSample; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; public class LemmatizerMETool extends BasicCmdLineTool { private static final Logger logger = LoggerFactory.getLogger(LemmatizerMETool.class); public String getShortDescription() { return "Learnable lemmatizer"; } @Override public String getHelp() { return "Usage: " + CLI.CMD + " " + getName() + " model < sentences"; } @Override public void run(String[] args) { if (args.length != 1) { logger.info(getHelp()); } else { LemmatizerModel model = new LemmatizerModelLoader().load(new File(args[0])); LemmatizerME lemmatizer = new LemmatizerME(model); PerformanceMonitor perfMon = null; try (ObjectStream lineStream = new PlainTextByLineStream( new SystemInputStreamFactory(), SystemInputStreamFactory.encoding())) { perfMon = new PerformanceMonitor("sent"); perfMon.start(); String line; while ((line = lineStream.read()) != null) { POSSample posSample; try { posSample = POSSample.parse(line); } catch (InvalidFormatException e) { logger.warn("Invalid format: {}", line); continue; } String[] lemmas = lemmatizer.lemmatize(posSample.getSentence(), posSample.getTags()); logger.info(new LemmaSample(posSample.getSentence(), posSample.getTags(), lemmas).toString()); perfMon.incrementCounter(); } } catch (IOException e) { CmdLineUtil.handleStdinIoError(e); } perfMon.stopAndPrintFinalResult(); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_lemmatize0100644 0000000 0000000 00000000172 14523004075 032631 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/lemmatizer/LemmatizerModelLoader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/lemmatizer/LemmatizerMode0100644 0000000 0000000 00000002664 14523004075 034252 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.lemmatizer; import java.io.IOException; import java.io.InputStream; import opennlp.tools.cmdline.ModelLoader; import opennlp.tools.commons.Internal; import opennlp.tools.lemmatizer.LemmatizerModel; /** * Loads a {@link LemmatizerModel} for the command line tools. *

* Note: Do not use this class, internal use only! */ @Internal public class LemmatizerModelLoader extends ModelLoader { public LemmatizerModelLoader() { super("Lemmatizer"); } @Override protected LemmatizerModel loadModel(InputStream modelIn) throws IOException { return new LemmatizerModel(modelIn); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_lemmatize0100644 0000000 0000000 00000000172 14523004075 032631 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/lemmatizer/LemmatizerTrainerTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/lemmatizer/LemmatizerTrai0100644 0000000 0000000 00000005251 14523004075 034260 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.lemmatizer; import java.io.File; import java.io.IOException; import opennlp.tools.cmdline.AbstractTrainerTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.lemmatizer.LemmatizerTrainerTool.TrainerToolParams; import opennlp.tools.cmdline.params.TrainingToolParams; import opennlp.tools.lemmatizer.LemmaSample; import opennlp.tools.lemmatizer.LemmatizerFactory; import opennlp.tools.lemmatizer.LemmatizerME; import opennlp.tools.lemmatizer.LemmatizerModel; import opennlp.tools.util.model.ModelUtil; public class LemmatizerTrainerTool extends AbstractTrainerTool { interface TrainerToolParams extends TrainingParams, TrainingToolParams { } public LemmatizerTrainerTool() { super(LemmaSample.class, TrainerToolParams.class); } @Override public String getName() { return "LemmatizerTrainerME"; } @Override public String getShortDescription() { return "Trainer for the learnable lemmatizer"; } @Override public void run(String format, String[] args) { super.run(format, args); mlParams = CmdLineUtil.loadTrainingParameters(params.getParams(), false); if (mlParams == null) { mlParams = ModelUtil.createDefaultTrainingParameters(); } File modelOutFile = params.getModel(); CmdLineUtil.checkOutputFile("lemmatizer model", modelOutFile); LemmatizerModel model; try { LemmatizerFactory lemmatizerFactory = LemmatizerFactory .create(params.getFactory()); model = LemmatizerME.train(params.getLang(), sampleStream, mlParams, lemmatizerFactory); } catch (IOException e) { throw createTerminationIOException(e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } CmdLineUtil.writeModel("lemmatizer", modelOutFile, model); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_lemmatize0100644 0000000 0000000 00000000163 14523004075 032631 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/lemmatizer/TrainingParams.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/lemmatizer/TrainingParams0100644 0000000 0000000 00000002644 14523004075 034251 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.lemmatizer; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.params.BasicTrainingParams; import opennlp.tools.commons.Internal; /** * TrainingParams for the Lemmatizer. *

* Note: Do not use this class, internal use only! */ @Internal interface TrainingParams extends BasicTrainingParams { @ParameterDescription(valueName = "factoryName", description = "A sub-class of LemmatizerFactory where to get implementation and resources.") @OptionalParameter String getFactory(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_lemmatize0100644 0000000 0000000 00000000161 14523004075 032627 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/lemmatizer/package-info.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/lemmatizer/package-info.j0100644 0000000 0000000 00000001636 14523004075 034106 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Classes giving access to the opennlp.tools.lemmatizer functionalities. */ package opennlp.tools.cmdline.lemmatizer; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_namefind_0100644 0000000 0000000 00000000176 14523004075 032566 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/CensusDictionaryCreatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/CensusDictionary0100644 0000000 0000000 00000010611 14523004075 034221 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.namefind; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.nio.charset.Charset; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.formats.NameFinderCensus90NameStream; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.StringList; /** * This tool helps create a loadable dictionary for the {@code NameFinder}, * from data collected from US Census data. *

* Data for the US Census and names can be found here for the 1990 Census: *
*
www.census.gov */ public class CensusDictionaryCreatorTool extends BasicCmdLineTool { /** * Create a list of expected parameters. */ interface Parameters { @ParameterDescription(valueName = "code") @OptionalParameter(defaultValue = "eng") String getLang(); @ParameterDescription(valueName = "charsetName") @OptionalParameter(defaultValue = "UTF-8") String getEncoding(); @ParameterDescription(valueName = "censusDict") String getCensusData(); @ParameterDescription(valueName = "dict") String getDict(); } private static final Logger logger = LoggerFactory.getLogger(CensusDictionaryCreatorTool.class); public String getShortDescription() { return "Converts 1990 US Census names into a dictionary"; } public String getHelp() { return getBasicHelp(Parameters.class); } /** * Creates a dictionary. * * @param sampleStream stream of samples. * @return a {@code Dictionary} class containing the name dictionary * built from the input file. * @throws IOException IOException */ public static Dictionary createDictionary(ObjectStream sampleStream) throws IOException { Dictionary mNameDictionary = new Dictionary(true); StringList entry; entry = sampleStream.read(); while (entry != null) { if (!mNameDictionary.contains(entry)) { mNameDictionary.put(entry); } entry = sampleStream.read(); } return mNameDictionary; } public void run(String[] args) { Parameters params = validateAndParseParams(args, Parameters.class); File testData = new File(params.getCensusData()); File dictOutFile = new File(params.getDict()); CmdLineUtil.checkInputFile("Name data", testData); CmdLineUtil.checkOutputFile("Dictionary file", dictOutFile); InputStreamFactory sampleDataIn = CmdLineUtil.createInputStreamFactory(testData); Dictionary mDictionary; try (ObjectStream sampleStream = new NameFinderCensus90NameStream( sampleDataIn, Charset.forName(params.getEncoding()))) { logger.info("Creating Dictionary..."); mDictionary = createDictionary(sampleStream); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while reading training data or indexing data: " + e.getMessage(), e); } logger.info("Saving Dictionary..."); try (OutputStream out = new FileOutputStream(dictOutFile)) { mDictionary.serialize(out); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while writing dictionary file: " + e.getMessage(), e); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_namefind_0100644 0000000 0000000 00000000176 14523004075 032566 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/NameEvaluationErrorListener.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/NameEvaluationEr0100644 0000000 0000000 00000004064 14523004075 034137 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.namefind; import java.io.OutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.EvaluationErrorPrinter; import opennlp.tools.log.LogPrintStream; import opennlp.tools.namefind.NameSample; import opennlp.tools.namefind.TokenNameFinderEvaluationMonitor; import opennlp.tools.util.eval.EvaluationMonitor; /** * A default implementation of {@link EvaluationMonitor} that prints * to an output stream. */ public class NameEvaluationErrorListener extends EvaluationErrorPrinter implements TokenNameFinderEvaluationMonitor { private static final Logger logger = LoggerFactory.getLogger(NameEvaluationErrorListener.class); /** * Creates a listener that will print to the configured {@code logger}. */ public NameEvaluationErrorListener() { super(new LogPrintStream(logger)); } /** * Creates a listener that will print to a given {@link OutputStream}. */ public NameEvaluationErrorListener(OutputStream outputStream) { super(outputStream); } @Override public void misclassified(NameSample reference, NameSample prediction) { printError(reference.getId(), reference.getNames(), prediction.getNames(), reference, prediction, reference.getSentence()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_namefind_0100644 0000000 0000000 00000000173 14523004075 032563 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/NameSampleCountersStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/NameSampleCounte0100644 0000000 0000000 00000005676 14523004075 034152 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.namefind; import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; /** * Counts tokens, sentences and names by type. */ public class NameSampleCountersStream extends FilterObjectStream { private static final Logger logger = LoggerFactory.getLogger(NameSampleCountersStream.class); private int sentenceCount; private int tokenCount; private Map nameCounters = new HashMap<>(); protected NameSampleCountersStream(ObjectStream samples) { super(samples); } @Override public NameSample read() throws IOException { NameSample sample = samples.read(); if (sample != null) { sentenceCount++; tokenCount += sample.getSentence().length; for (Span nameSpan : sample.getNames()) { Integer nameCounter = nameCounters.get(nameSpan.getType()); if (nameCounter == null) { nameCounter = 0; } nameCounters.put(nameSpan.getType(), nameCounter + 1); } } return sample; } @Override public void reset() throws IOException, UnsupportedOperationException { super.reset(); sentenceCount = 0; tokenCount = 0; nameCounters = new HashMap<>(); } public int getSentenceCount() { return sentenceCount; } public int getTokenCount() { return tokenCount; } public Map getNameCounters() { return Collections.unmodifiableMap(nameCounters); } public void printSummary() { logger.info("Training data summary:"); logger.info("#Sentences: {}", getSentenceCount()); logger.info("#Tokens: {}", getTokenCount()); int totalNames = 0; for (Map.Entry counter : getNameCounters().entrySet()) { logger.info("# {} entities: {}", counter.getKey(), counter.getValue()); totalNames += counter.getValue(); } logger.info("# total: {}", totalNames); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_namefind_0100644 0000000 0000000 00000000177 14523004075 032567 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TokenNameFinderConverterTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TokenNameFinderC0100644 0000000 0000000 00000002461 14523004075 034053 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.namefind; import opennlp.tools.cmdline.AbstractConverterTool; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.namefind.NameSample; /** * Tool to convert multiple data formats into native OpenNLP name finder * training format. * * @see AbstractConverterTool * @see NameSample */ public class TokenNameFinderConverterTool extends AbstractConverterTool { public TokenNameFinderConverterTool() { super(NameSample.class); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_namefind_0100644 0000000 0000000 00000000204 14523004075 032556 xustar000000000 0000000 132 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TokenNameFinderCrossValidatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TokenNameFinderC0100644 0000000 0000000 00000013256 14523004075 034057 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.namefind; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.AbstractCrossValidatorTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.namefind.TokenNameFinderCrossValidatorTool.CVToolParams; import opennlp.tools.cmdline.params.CVParams; import opennlp.tools.cmdline.params.FineGrainedEvaluatorParams; import opennlp.tools.namefind.BilouCodec; import opennlp.tools.namefind.BioCodec; import opennlp.tools.namefind.NameSample; import opennlp.tools.namefind.NameSampleTypeFilter; import opennlp.tools.namefind.TokenNameFinderCrossValidator; import opennlp.tools.namefind.TokenNameFinderEvaluationMonitor; import opennlp.tools.namefind.TokenNameFinderFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.SequenceCodec; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.eval.EvaluationMonitor; public final class TokenNameFinderCrossValidatorTool extends AbstractCrossValidatorTool { interface CVToolParams extends TrainingParams, CVParams, FineGrainedEvaluatorParams { } private static final Logger logger = LoggerFactory.getLogger(TokenNameFinderCrossValidatorTool.class); public TokenNameFinderCrossValidatorTool() { super(NameSample.class, CVToolParams.class); } @Override public String getShortDescription() { return "K-fold cross validator for the learnable Name Finder"; } @Override public void run(String format, String[] args) { super.run(format, args); mlParams = CmdLineUtil.loadTrainingParameters(params.getParams(), true); if (mlParams == null) { mlParams = new TrainingParameters(); } byte[] featureGeneratorBytes = TokenNameFinderTrainerTool.openFeatureGeneratorBytes(params.getFeaturegen()); Map resources; try { resources = TokenNameFinderTrainerTool.loadResources(params.getResources(), params.getFeaturegen()); } catch (IOException e) { throw new TerminateToolException(-1,"IO error while loading resources", e); } if (params.getNameTypes() != null) { String[] nameTypes = params.getNameTypes().split(","); sampleStream = new NameSampleTypeFilter(nameTypes, sampleStream); } List> listeners = new LinkedList<>(); if (params.getMisclassified()) { listeners.add(new NameEvaluationErrorListener()); } String sequenceCodecImplName = params.getSequenceCodec(); if ("BIO".equals(sequenceCodecImplName)) { sequenceCodecImplName = BioCodec.class.getName(); } else if ("BILOU".equals(sequenceCodecImplName)) { sequenceCodecImplName = BilouCodec.class.getName(); } SequenceCodec sequenceCodec; try { sequenceCodec = TokenNameFinderFactory.instantiateSequenceCodec(sequenceCodecImplName); } catch (InvalidFormatException e) { throw new TerminateToolException(-1, e.getMessage(), e); } TokenNameFinderFineGrainedReportListener reportListener = null; File reportFile = params.getReportOutputFile(); OutputStream reportOutputStream = null; if (reportFile != null) { CmdLineUtil.checkOutputFile("Report Output File", reportFile); try { reportOutputStream = new FileOutputStream(reportFile); reportListener = new TokenNameFinderFineGrainedReportListener(sequenceCodec, reportOutputStream); listeners.add(reportListener); } catch (FileNotFoundException e) { throw new TerminateToolException(-1, "IO error while creating Name Finder fine-grained report file: " + e.getMessage()); } } TokenNameFinderFactory nameFinderFactory; try { nameFinderFactory = TokenNameFinderFactory.create(params.getFactory(), featureGeneratorBytes, resources, sequenceCodec); } catch (InvalidFormatException e) { throw new TerminateToolException(-1, e.getMessage(), e); } TokenNameFinderCrossValidator validator; try { validator = new TokenNameFinderCrossValidator(params.getLang(), params.getType(), mlParams, nameFinderFactory, listeners.toArray(new TokenNameFinderEvaluationMonitor[0])); validator.evaluate(sampleStream, params.getFolds()); } catch (IOException e) { throw createTerminationIOException(e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } logger.info("done"); if (reportFile != null) { reportListener.writeReport(); } logger.info(validator.getFMeasure().toString()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_namefind_0100644 0000000 0000000 00000000212 14523004075 032555 xustar000000000 0000000 138 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TokenNameFinderDetailedFMeasureListener.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TokenNameFinderD0100644 0000000 0000000 00000002413 14523004075 034051 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.namefind; import opennlp.tools.cmdline.DetailedFMeasureListener; import opennlp.tools.namefind.NameSample; import opennlp.tools.namefind.TokenNameFinderEvaluationMonitor; import opennlp.tools.util.Span; public class TokenNameFinderDetailedFMeasureListener extends DetailedFMeasureListener implements TokenNameFinderEvaluationMonitor { @Override protected Span[] asSpanArray(NameSample sample) { return sample.getNames(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_namefind_0100644 0000000 0000000 00000000177 14523004075 032567 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TokenNameFinderEvaluatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TokenNameFinderE0100644 0000000 0000000 00000012244 14523004075 034055 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.namefind; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.LinkedList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.AbstractEvaluatorTool; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.PerformanceMonitor; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.namefind.TokenNameFinderEvaluatorTool.EvalToolParams; import opennlp.tools.cmdline.params.EvaluatorParams; import opennlp.tools.cmdline.params.FineGrainedEvaluatorParams; import opennlp.tools.namefind.NameFinderME; import opennlp.tools.namefind.NameSample; import opennlp.tools.namefind.NameSampleTypeFilter; import opennlp.tools.namefind.TokenNameFinderEvaluationMonitor; import opennlp.tools.namefind.TokenNameFinderEvaluator; import opennlp.tools.namefind.TokenNameFinderModel; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.eval.EvaluationMonitor; /** * A default {@link NameSample}-centric implementation of {@link AbstractEvaluatorTool} * that prints to an output stream. * * @see AbstractEvaluatorTool * @see EvalToolParams */ public final class TokenNameFinderEvaluatorTool extends AbstractEvaluatorTool { interface EvalToolParams extends EvaluatorParams, FineGrainedEvaluatorParams { @OptionalParameter @ParameterDescription(valueName = "types", description = "name types to use for evaluation") String getNameTypes(); } private static final Logger logger = LoggerFactory.getLogger(TokenNameFinderEvaluatorTool.class); public TokenNameFinderEvaluatorTool() { super(NameSample.class, EvalToolParams.class); } @Override public String getShortDescription() { return "Measures the performance of the NameFinder model with the reference data"; } @Override public void run(String format, String[] args) { super.run(format, args); TokenNameFinderModel model = new TokenNameFinderModelLoader().load(params.getModel()); List> listeners = new LinkedList<>(); if (params.getMisclassified()) { listeners.add(new NameEvaluationErrorListener()); } TokenNameFinderFineGrainedReportListener reportListener = null; File reportFile = params.getReportOutputFile(); OutputStream reportOutputStream = null; if (reportFile != null) { CmdLineUtil.checkOutputFile("Report Output File", reportFile); try { reportOutputStream = new FileOutputStream(reportFile); reportListener = new TokenNameFinderFineGrainedReportListener(model.getSequenceCodec(), reportOutputStream); listeners.add(reportListener); } catch (FileNotFoundException e) { throw new TerminateToolException(-1, "IO error while creating Name Finder fine-grained report file: " + e.getMessage()); } } if (params.getNameTypes() != null) { String[] nameTypes = params.getNameTypes().split(","); sampleStream = new NameSampleTypeFilter(nameTypes, sampleStream); } TokenNameFinderEvaluator evaluator = new TokenNameFinderEvaluator( new NameFinderME(model), listeners.toArray(new TokenNameFinderEvaluationMonitor[0])); final PerformanceMonitor monitor = new PerformanceMonitor("sent"); try (ObjectStream measuredSampleStream = new ObjectStream<>() { @Override public NameSample read() throws IOException { monitor.incrementCounter(); return sampleStream.read(); } @Override public void reset() throws IOException { sampleStream.reset(); } @Override public void close() throws IOException { sampleStream.close(); } }) { monitor.startAndPrintThroughput(); evaluator.evaluate(measuredSampleStream); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while reading test data: " + e.getMessage(), e); } // sorry that this can fail monitor.stopAndPrintFinalResult(); if (reportFile != null) { reportListener.writeReport(); } logger.info(evaluator.getFMeasure().toString()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_namefind_0100644 0000000 0000000 00000000213 14523004075 032556 xustar000000000 0000000 139 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TokenNameFinderFineGrainedReportListener.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TokenNameFinderF0100644 0000000 0000000 00000006603 14523004075 034060 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.namefind; import java.io.OutputStream; import java.util.Comparator; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.FineGrainedReportListener; import opennlp.tools.log.LogPrintStream; import opennlp.tools.namefind.NameSample; import opennlp.tools.namefind.TokenNameFinderEvaluationMonitor; import opennlp.tools.util.SequenceCodec; /** * Generates a detailed report for the NameFinder. *

* It is possible to use it from an API and access the statistics using the * provided getters. */ public class TokenNameFinderFineGrainedReportListener extends FineGrainedReportListener implements TokenNameFinderEvaluationMonitor { private static final Logger logger = LoggerFactory.getLogger(TokenNameFinderFineGrainedReportListener.class); private final SequenceCodec sequenceCodec; /** * Creates a listener that will print to the configured {@code logger}. */ public TokenNameFinderFineGrainedReportListener(SequenceCodec seqCodec) { this(seqCodec, new LogPrintStream(logger)); } /** * Creates a listener that prints to a given {@link OutputStream}. */ public TokenNameFinderFineGrainedReportListener(SequenceCodec seqCodec, OutputStream outputStream) { super(outputStream); this.sequenceCodec = seqCodec; } // methods inherited from EvaluationMonitor @Override public void misclassified(NameSample reference, NameSample prediction) { statsAdd(reference, prediction); } @Override public void correctlyClassified(NameSample reference, NameSample prediction) { statsAdd(reference, prediction); } private void statsAdd(NameSample reference, NameSample prediction) { String[] refTags = sequenceCodec.encode(reference.getNames(), reference.getSentence().length); String[] predTags = sequenceCodec.encode(prediction.getNames(), prediction.getSentence().length); // we don't want it to compute token frequency, so we pass an array of empty strings instead // of tokens getStats().add(new String[reference.getSentence().length], refTags, predTags); } @Override public Comparator getMatrixLabelComparator(Map confusionMatrix) { return new GroupedMatrixLabelComparator(confusionMatrix); } @Override public Comparator getLabelComparator(Map map) { return new GroupedLabelComparator(map); } @Override public void writeReport() { printGeneralStatistics(); printTagsErrorRank(); printGeneralConfusionTable(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_namefind_0100644 0000000 0000000 00000000175 14523004075 032565 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TokenNameFinderModelLoader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TokenNameFinderM0100644 0000000 0000000 00000002737 14523004075 034073 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.namefind; import java.io.IOException; import java.io.InputStream; import opennlp.tools.cmdline.ModelLoader; import opennlp.tools.commons.Internal; import opennlp.tools.namefind.TokenNameFinderModel; /** * Loads a {@link TokenNameFinderModel} for the command line tools. *

* Note: Do not use this class, internal use only! */ @Internal public final class TokenNameFinderModelLoader extends ModelLoader { public TokenNameFinderModelLoader() { super("Token Name Finder"); } @Override protected TokenNameFinderModel loadModel(InputStream modelIn) throws IOException { return new TokenNameFinderModel(modelIn); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_namefind_0100644 0000000 0000000 00000000166 14523004075 032565 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TokenNameFinderTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TokenNameFinderT0100644 0000000 0000000 00000007473 14523004075 034104 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.namefind; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CLI; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.PerformanceMonitor; import opennlp.tools.cmdline.SystemInputStreamFactory; import opennlp.tools.namefind.NameFinderME; import opennlp.tools.namefind.NameSample; import opennlp.tools.namefind.TokenNameFinder; import opennlp.tools.namefind.TokenNameFinderModel; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; public final class TokenNameFinderTool extends BasicCmdLineTool { private static final Logger logger = LoggerFactory.getLogger(TokenNameFinderTool.class); @Override public String getShortDescription() { return "Learnable name finder"; } @Override public String getHelp() { return "Usage: " + CLI.CMD + " " + getName() + " model1 model2 ... modelN < sentences"; } @Override public void run(String[] args) { if (args.length == 0) { logger.info(getHelp()); } else { NameFinderME[] nameFinders = new NameFinderME[args.length]; for (int i = 0; i < nameFinders.length; i++) { TokenNameFinderModel model = new TokenNameFinderModelLoader().load(new File(args[i])); nameFinders[i] = new NameFinderME(model); } PerformanceMonitor perfMon = new PerformanceMonitor("sent"); perfMon.start(); try (ObjectStream untokenizedLineStream = new PlainTextByLineStream( new SystemInputStreamFactory(), SystemInputStreamFactory.encoding())) { String line; while ((line = untokenizedLineStream.read()) != null) { String[] whitespaceTokenizerLine = WhitespaceTokenizer.INSTANCE.tokenize(line); // A new line indicates a new document, // adaptive data must be cleared for a new document if (whitespaceTokenizerLine.length == 0) { for (NameFinderME nameFinder : nameFinders) { nameFinder.clearAdaptiveData(); } } List names = new ArrayList<>(); for (TokenNameFinder nameFinder : nameFinders) { Collections.addAll(names, nameFinder.find(whitespaceTokenizerLine)); } // Simple way to drop intersecting spans, otherwise the // NameSample is invalid Span[] reducedNames = NameFinderME.dropOverlappingSpans( names.toArray(new Span[0])); NameSample nameSample = new NameSample(whitespaceTokenizerLine, reducedNames, false); logger.info(nameSample.toString()); perfMon.incrementCounter(); } } catch (IOException e) { CmdLineUtil.handleStdinIoError(e); } perfMon.stopAndPrintFinalResult(); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_namefind_0100644 0000000 0000000 00000000175 14523004075 032565 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TokenNameFinderTrainerTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TokenNameFinderT0100644 0000000 0000000 00000015644 14523004075 034103 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.namefind; import java.io.BufferedInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import opennlp.tools.cmdline.AbstractTrainerTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.namefind.TokenNameFinderTrainerTool.TrainerToolParams; import opennlp.tools.cmdline.params.TrainingToolParams; import opennlp.tools.namefind.BilouCodec; import opennlp.tools.namefind.BioCodec; import opennlp.tools.namefind.NameSample; import opennlp.tools.namefind.NameSampleTypeFilter; import opennlp.tools.namefind.TokenNameFinderFactory; import opennlp.tools.namefind.TokenNameFinderModel; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.SequenceCodec; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.featuregen.GeneratorFactory; import opennlp.tools.util.model.ArtifactSerializer; import opennlp.tools.util.model.ModelUtil; public final class TokenNameFinderTrainerTool extends AbstractTrainerTool { interface TrainerToolParams extends TrainingParams, TrainingToolParams { } public TokenNameFinderTrainerTool() { super(NameSample.class, TrainerToolParams.class); } @Override public String getShortDescription() { return "Trainer for the learnable name finder"; } static byte[] openFeatureGeneratorBytes(String featureGenDescriptorFile) { if (featureGenDescriptorFile != null) { return openFeatureGeneratorBytes(new File(featureGenDescriptorFile)); } return null; } public static byte[] openFeatureGeneratorBytes(File featureGenDescriptorFile) { byte[] featureGeneratorBytes = null; // load descriptor file into memory if (featureGenDescriptorFile != null) { try (InputStream bytesIn = new BufferedInputStream( CmdLineUtil.openInFile(featureGenDescriptorFile))) { featureGeneratorBytes = ModelUtil.read(bytesIn); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while reading training data or indexing data: " + e.getMessage(), e); } } return featureGeneratorBytes; } /** * Load the resources, such as dictionaries, by reading the feature xml descriptor * and looking into the directory passed as argument. * * @param resourcePath The directory in which the resources are to be found. * @param featureGenDescriptor The feature xml descriptor. * @return A map consisting of the file name of the resource and its corresponding Object. */ public static Map loadResources(File resourcePath, File featureGenDescriptor) throws IOException { Map resources = new HashMap<>(); if (resourcePath != null) { Map> artifactSerializers = new HashMap<>(); if (featureGenDescriptor != null) { try (InputStream xmlDescriptorIn = new BufferedInputStream( CmdLineUtil.openInFile(featureGenDescriptor))) { artifactSerializers.putAll( GeneratorFactory.extractArtifactSerializerMappings(xmlDescriptorIn)); } } for (Map.Entry> serializerMapping : artifactSerializers.entrySet()) { String resourceName = serializerMapping.getKey(); try (InputStream resourceIn = new BufferedInputStream( CmdLineUtil.openInFile(new File(resourcePath, resourceName)))) { resources.put(resourceName, serializerMapping.getValue().create(resourceIn)); } } } return resources; } @Override public void run(String format, String[] args) { super.run(format, args); mlParams = CmdLineUtil.loadTrainingParameters(params.getParams(), true); if (mlParams == null) { mlParams = new TrainingParameters(); } File modelOutFile = params.getModel(); byte[] featureGeneratorBytes = openFeatureGeneratorBytes(params.getFeaturegen()); // TODO: Support Custom resources: // Must be loaded into memory, or written to tmp file until descriptor // is loaded which defines parses when model is loaded Map resources; try { resources = loadResources(params.getResources(), params.getFeaturegen()); } catch (IOException e) { throw new TerminateToolException(-1, e.getMessage(), e); } CmdLineUtil.checkOutputFile("name finder model", modelOutFile); if (params.getNameTypes() != null) { String[] nameTypes = params.getNameTypes().split(","); sampleStream = new NameSampleTypeFilter(nameTypes, sampleStream); } String sequenceCodecImplName = params.getSequenceCodec(); if ("BIO".equals(sequenceCodecImplName)) { sequenceCodecImplName = BioCodec.class.getName(); } else if ("BILOU".equals(sequenceCodecImplName)) { sequenceCodecImplName = BilouCodec.class.getName(); } SequenceCodec sequenceCodec; try { sequenceCodec = TokenNameFinderFactory.instantiateSequenceCodec(sequenceCodecImplName); } catch (InvalidFormatException e) { throw new TerminateToolException(-1, e.getMessage(), e); } TokenNameFinderFactory nameFinderFactory; try { nameFinderFactory = TokenNameFinderFactory.create(params.getFactory(), featureGeneratorBytes, resources, sequenceCodec); } catch (InvalidFormatException e) { throw new TerminateToolException(-1, e.getMessage(), e); } NameSampleCountersStream counters = new NameSampleCountersStream(sampleStream); sampleStream = counters; TokenNameFinderModel model; try { model = opennlp.tools.namefind.NameFinderME.train( params.getLang(), params.getType(), sampleStream, mlParams, nameFinderFactory); } catch (IOException e) { throw createTerminationIOException(e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } counters.printSummary(); CmdLineUtil.writeModel("name finder", modelOutFile, model); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_namefind_0100644 0000000 0000000 00000000161 14523004075 032560 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TrainingParams.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/namefind/TrainingParams.j0100644 0000000 0000000 00000004234 14523004075 034106 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.namefind; import java.io.File; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.params.BasicTrainingParams; import opennlp.tools.commons.Internal; /** * TrainingParameters for Name Finder. *

* Note: Do not use this class, internal use only! */ @Internal interface TrainingParams extends BasicTrainingParams { @ParameterDescription(valueName = "modelType", description = "The type of the token name finder model") @OptionalParameter String getType(); @ParameterDescription(valueName = "resourcesDir", description = "The resources directory") @OptionalParameter File getResources(); @ParameterDescription(valueName = "featuregenFile", description = "The feature generator descriptor file") @OptionalParameter File getFeaturegen(); @OptionalParameter @ParameterDescription(valueName = "types", description = "name types to use for training") String getNameTypes(); @OptionalParameter(defaultValue = "opennlp.tools.namefind.BioCodec") @ParameterDescription(valueName = "codec", description = "sequence codec used to code name spans") String getSequenceCodec(); @ParameterDescription(valueName = "factoryName", description = "A sub-class of TokenNameFinderFactory") @OptionalParameter String getFactory(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_params_Ba0100644 0000000 0000000 00000000162 14523004075 032526 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/params/BasicFormatParams.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/params/BasicFormatParams.0100644 0000000 0000000 00000002204 14523004075 034050 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.params; import java.io.File; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; /** * Common format parameters. */ public interface BasicFormatParams extends EncodingParameter { @ParameterDescription(valueName = "sampleData", description = "data to be used, usually a file name.") File getData(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_params_Ba0100644 0000000 0000000 00000000164 14523004075 032530 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/params/BasicTrainingParams.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/params/BasicTrainingParam0100644 0000000 0000000 00000002457 14523004075 034144 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.params; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.commons.Internal; /** * Common training parameters. *

* Note: Do not use this class, internal use only! */ @Internal public interface BasicTrainingParams extends LanguageParams { @ParameterDescription(valueName = "paramsFile", description = "training parameters file.") @OptionalParameter() String getParams(); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/params/CVParams.java0100644 0000000 0000000 00000002764 14523004075 033043 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.params; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.commons.Internal; /** * Common cross validator parameters. *

* Note: Do not use this class, internal use only! */ @Internal public interface CVParams { @ParameterDescription(valueName = "true|false", description = "if true will print false negatives and false positives.") @OptionalParameter(defaultValue = "false") Boolean getMisclassified(); @ParameterDescription(valueName = "num", description = "number of folds, default is 10.") @OptionalParameter(defaultValue = "10") Integer getFolds(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_params_De0100644 0000000 0000000 00000000165 14523004075 032537 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/params/DetokenizerParameter.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/params/DetokenizerParamet0100644 0000000 0000000 00000002112 14523004075 034227 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.params; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; public interface DetokenizerParameter { @ParameterDescription(valueName = "dictionary", description = "specifies the file with detokenizer dictionary.") String getDetokenizer(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_params_En0100644 0000000 0000000 00000000162 14523004075 032546 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/params/EncodingParameter.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/params/EncodingParameter.0100644 0000000 0000000 00000003010 14523004075 034075 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.params; import java.nio.charset.Charset; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.commons.Internal; /** * Encoding parameter. The DEFAULT_CHARSET is handled by * {@link opennlp.tools.cmdline.ArgumentParser#parse(String[], Class)}. *

* Note: Do not use this class, internal use only! */ @Internal public interface EncodingParameter { @ParameterDescription(valueName = "charsetName", description = "encoding for reading and writing text, if absent the system default is used.") @OptionalParameter(defaultValue = OptionalParameter.DEFAULT_CHARSET) Charset getEncoding(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_params_Ev0100644 0000000 0000000 00000000160 14523004075 032554 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/params/EvaluatorParams.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/params/EvaluatorParams.ja0100644 0000000 0000000 00000002741 14523004075 034141 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.params; import java.io.File; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.commons.Internal; /** * Common evaluation parameters. *

* Note: Do not use this class, internal use only! */ @Internal public interface EvaluatorParams { @ParameterDescription(valueName = "model", description = "the model file to be evaluated.") File getModel(); @ParameterDescription(valueName = "true|false", description = "if true will print false negatives and false positives.") @OptionalParameter(defaultValue = "false") Boolean getMisclassified(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_params_Fi0100644 0000000 0000000 00000000173 14523004075 032544 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/params/FineGrainedEvaluatorParams.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/params/FineGrainedEvaluat0100644 0000000 0000000 00000002436 14523004075 034140 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.params; import java.io.File; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.commons.Internal; /** * Common evaluation parameters. *

* Note: Do not use this class, internal use only! */ @Internal public interface FineGrainedEvaluatorParams { @ArgumentParser.ParameterDescription(valueName = "outputFile", description = "the path of the fine-grained report file.") @ArgumentParser.OptionalParameter File getReportOutputFile(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_params_La0100644 0000000 0000000 00000000157 14523004075 032544 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/params/LanguageParams.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/params/LanguageParams.jav0100644 0000000 0000000 00000002052 14523004075 034103 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.params; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; public interface LanguageParams { @ParameterDescription(valueName = "language", description = "language which is being processed.") String getLang(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_params_Tr0100644 0000000 0000000 00000000163 14523004075 032572 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/params/TrainingToolParams.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/params/TrainingToolParams0100644 0000000 0000000 00000002350 14523004075 034213 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.params; import java.io.File; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.commons.Internal; /** * Common training parameters. *

* Note: Do not use this class, internal use only! */ @Internal public interface TrainingToolParams extends BasicTrainingParams { @ParameterDescription(valueName = "modelFile", description = "output model file.") File getModel(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_parser_Bu0100644 0000000 0000000 00000000166 14523004075 032567 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/BuildModelUpdaterTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/BuildModelUpdaterT0100644 0000000 0000000 00000004727 14523004075 034152 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.parser; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.parser.Parse; import opennlp.tools.parser.ParserEventTypeEnum; import opennlp.tools.parser.ParserModel; import opennlp.tools.parser.chunking.ParserEventStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.model.ModelUtil; public final class BuildModelUpdaterTool extends ModelUpdaterTool { private static final Logger logger = LoggerFactory.getLogger(BuildModelUpdaterTool.class); public String getShortDescription() { return "Trains and updates the build model in a parser model"; } @Override protected ParserModel trainAndUpdate(ParserModel originalModel, ObjectStream parseSamples, ModelUpdaterParams parameters) throws IOException { Dictionary mdict = ParserTrainerTool.buildDictionary(parseSamples, originalModel.getHeadRules(), 5); parseSamples.reset(); // TODO: training individual models should be in the chunking parser, not here // Training build logger.info("Training builder"); ObjectStream bes = new ParserEventStream(parseSamples, originalModel.getHeadRules(), ParserEventTypeEnum.BUILD, mdict); EventTrainer trainer = TrainerFactory.getEventTrainer( ModelUtil.createDefaultTrainingParameters(), null); MaxentModel buildModel = trainer.train(bes); parseSamples.close(); return originalModel.updateBuildModel(buildModel); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_parser_Ch0100644 0000000 0000000 00000000166 14523004075 032553 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/CheckModelUpdaterTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/CheckModelUpdaterT0100644 0000000 0000000 00000004772 14523004075 034130 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.parser; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.parser.Parse; import opennlp.tools.parser.ParserEventTypeEnum; import opennlp.tools.parser.ParserModel; import opennlp.tools.parser.chunking.ParserEventStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.model.ModelUtil; /** * Trains a new check model. */ public final class CheckModelUpdaterTool extends ModelUpdaterTool { private static final Logger logger = LoggerFactory.getLogger(CheckModelUpdaterTool.class); @Override public String getShortDescription() { return "Trains and updates the check model in a parser model"; } @Override protected ParserModel trainAndUpdate(ParserModel originalModel, ObjectStream parseSamples, ModelUpdaterParams parameters) throws IOException { Dictionary mdict = ParserTrainerTool.buildDictionary(parseSamples, originalModel.getHeadRules(), 5); parseSamples.reset(); // TODO: Maybe that should be part of the ChunkingParser ... // Training build logger.info("Training check model"); ObjectStream bes = new ParserEventStream(parseSamples, originalModel.getHeadRules(), ParserEventTypeEnum.CHECK, mdict); EventTrainer trainer = TrainerFactory.getEventTrainer( ModelUtil.createDefaultTrainingParameters(), null); MaxentModel checkModel = trainer.train(bes); parseSamples.close(); return originalModel.updateCheckModel(checkModel); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_parser_Mo0100644 0000000 0000000 00000000161 14523004075 032567 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/ModelUpdaterTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/ModelUpdaterTool.j0100644 0000000 0000000 00000005415 14523004075 034127 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.parser; import java.io.File; import java.io.IOException; import opennlp.tools.cmdline.AbstractTypedParamTool; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.ObjectStreamFactory; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.TrainingToolParams; import opennlp.tools.parser.Parse; import opennlp.tools.parser.ParserModel; import opennlp.tools.util.ObjectStream; /** * Abstract base class for tools which update the parser model. */ abstract class ModelUpdaterTool extends AbstractTypedParamTool { interface ModelUpdaterParams extends TrainingToolParams { } protected ModelUpdaterTool() { super(Parse.class, ModelUpdaterParams.class); } protected abstract ParserModel trainAndUpdate(ParserModel originalModel, ObjectStream parseSamples, ModelUpdaterParams parameters) throws IOException; @Override public final void run(String format, String[] args) { ModelUpdaterParams params = validateAndParseParams( ArgumentParser.filter(args, ModelUpdaterParams.class), ModelUpdaterParams.class); // Load model to be updated File modelFile = params.getModel(); ParserModel originalParserModel = new ParserModelLoader().load(modelFile); ObjectStreamFactory factory = getStreamFactory(format); String[] fargs = ArgumentParser.filter(args, factory.getParameters()); validateFactoryArgs(factory, fargs); ParserModel updatedParserModel; try (ObjectStream sampleStream = factory.create(fargs)) { updatedParserModel = trainAndUpdate(originalParserModel, sampleStream, params); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while reading training data or indexing data: " + e.getMessage(), e); } CmdLineUtil.writeModel("parser", modelFile, updatedParserModel); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_parser_Pa0100644 0000000 0000000 00000000164 14523004075 032557 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/ParserConverterTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/ParserConverterToo0100644 0000000 0000000 00000002371 14523004075 034260 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.parser; import opennlp.tools.cmdline.AbstractConverterTool; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.parser.Parse; /** * Tool to convert multiple data formats into native OpenNLP parser * format. * * @see AbstractConverterTool * @see Parse */ public class ParserConverterTool extends AbstractConverterTool { public ParserConverterTool() { super(Parse.class); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_parser_Pa0100644 0000000 0000000 00000000164 14523004075 032557 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/ParserEvaluatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/ParserEvaluatorToo0100644 0000000 0000000 00000005054 14523004075 034254 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.parser; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.AbstractEvaluatorTool; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.EvaluatorParams; import opennlp.tools.parser.Parse; import opennlp.tools.parser.Parser; import opennlp.tools.parser.ParserEvaluator; import opennlp.tools.parser.ParserFactory; import opennlp.tools.parser.ParserModel; /** * A default {@link Parse}-centric implementation of {@link AbstractEvaluatorTool} * that prints to an output stream. * * @see AbstractEvaluatorTool * @see EvaluatorParams */ public class ParserEvaluatorTool extends AbstractEvaluatorTool { private static final Logger logger = LoggerFactory.getLogger(ParserEvaluatorTool.class); public ParserEvaluatorTool() { super(Parse.class, EvaluatorParams.class); } @Override public String getShortDescription() { return "Measures the performance of the Parser model with the reference data"; } @Override public void run(String format, String[] args) { super.run(format, args); ParserModel model = new ParserModelLoader().load(params.getModel()); Parser parser = ParserFactory.create(model); ParserEvaluator evaluator = new ParserEvaluator(parser); logger.info("Evaluating ... "); try { evaluator.evaluate(sampleStream); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while reading test data: " + e.getMessage(), e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } logger.info("done"); logger.info(evaluator.getFMeasure().toString()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_parser_Pa0100644 0000000 0000000 00000000162 14523004075 032555 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/ParserModelLoader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/ParserModelLoader.0100644 0000000 0000000 00000002741 14523004075 034075 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.parser; import java.io.IOException; import java.io.InputStream; import opennlp.tools.cmdline.ModelLoader; import opennlp.tools.commons.Internal; import opennlp.tools.parser.ParserModel; import opennlp.tools.util.InvalidFormatException; /** * Loads a {@link ParserModel} for the command line tools. *

* Note: Do not use this class, internal use only! */ @Internal public final class ParserModelLoader extends ModelLoader { public ParserModelLoader() { super("Parser"); } @Override protected ParserModel loadModel(InputStream modelIn) throws IOException, InvalidFormatException { return new ParserModel(modelIn); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/ParserTool.java0100644 0000000 0000000 00000013770 14523004075 033471 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.parser; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.regex.Pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CLI; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.PerformanceMonitor; import opennlp.tools.cmdline.SystemInputStreamFactory; import opennlp.tools.cmdline.tokenizer.TokenizerModelLoader; import opennlp.tools.parser.AbstractBottomUpParser; import opennlp.tools.parser.Parse; import opennlp.tools.parser.Parser; import opennlp.tools.parser.ParserFactory; import opennlp.tools.parser.ParserModel; import opennlp.tools.tokenize.Tokenizer; import opennlp.tools.tokenize.TokenizerME; import opennlp.tools.tokenize.TokenizerModel; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; public final class ParserTool extends BasicCmdLineTool { private static final Logger logger = LoggerFactory.getLogger(ParserTool.class); @Override public String getShortDescription() { return "Performs full syntactic parsing"; } @Override public String getHelp() { return "Usage: " + CLI.CMD + " " + getName() + " [-bs n -ap n -k n -tk tok_model] model < sentences \n" + "-bs n: Use a beam size of n.\n" + "-ap f: Advance outcomes in with at least f% of the probability mass.\n" + "-k n: Show the top n parses. This will also display their log-probabilities.\n" + "-tk tok_model: Use the specified tokenizer model to tokenize the sentences. " + "Defaults to a WhitespaceTokenizer."; } private static final Pattern UNTOKENIZED_PAREN_PATTERN_1 = Pattern.compile("([^ ])([({)}])"); private static final Pattern UNTOKENIZED_PAREN_PATTERN_2 = Pattern.compile("([({)}])([^ ])"); public static Parse[] parseLine(String line, Parser parser, int numParses) { return parseLine( line, parser, WhitespaceTokenizer.INSTANCE, numParses ); } public static Parse[] parseLine(String line, Parser parser, Tokenizer tokenizer, int numParses) { // fix some parens patterns line = UNTOKENIZED_PAREN_PATTERN_1.matcher(line).replaceAll("$1 $2"); line = UNTOKENIZED_PAREN_PATTERN_2.matcher(line).replaceAll("$1 $2"); // tokenize List tokens = Arrays.asList( tokenizer.tokenize(line)); String text = String.join(" ", tokens); Parse p = new Parse(text, new Span(0, text.length()), AbstractBottomUpParser.INC_NODE, 0, 0); int start = 0; int i = 0; for (Iterator ti = tokens.iterator(); ti.hasNext(); i++) { String tok = ti.next(); p.insert(new Parse(text, new Span(start, start + tok.length()), AbstractBottomUpParser.TOK_NODE, 0, i)); start += tok.length() + 1; } Parse[] parses; if (numParses == 1) { parses = new Parse[]{parser.parse(p)}; } else { parses = parser.parse(p, numParses); } return parses; } @Override public void run(String[] args) { if (args.length < 1) { logger.info(getHelp()); } else { ParserModel model = new ParserModelLoader().load(new File(args[args.length - 1])); Integer beamSize = CmdLineUtil.getIntParameter("-bs", args); if (beamSize == null) { beamSize = AbstractBottomUpParser.defaultBeamSize; } Integer numParses = CmdLineUtil.getIntParameter("-k", args); boolean showTopK; if (numParses == null) { numParses = 1; showTopK = false; } else { showTopK = true; } Double advancePercentage = CmdLineUtil.getDoubleParameter("-ap", args); if (advancePercentage == null) { advancePercentage = AbstractBottomUpParser.defaultAdvancePercentage; } Tokenizer tokenizer = WhitespaceTokenizer.INSTANCE; String tokenizerModelName = CmdLineUtil.getParameter( "-tk", args ); if (tokenizerModelName != null ) { TokenizerModel tokenizerModel = new TokenizerModelLoader().load(new File(tokenizerModelName)); tokenizer = new TokenizerME( tokenizerModel ); } Parser parser = ParserFactory.create(model, beamSize, advancePercentage); PerformanceMonitor perfMon = null; try (ObjectStream lineStream = new PlainTextByLineStream( new SystemInputStreamFactory(), SystemInputStreamFactory.encoding())) { perfMon = new PerformanceMonitor("sent"); perfMon.start(); String line; while ((line = lineStream.read()) != null) { if (line.trim().length() == 0) { logger.debug("empty line"); } else { Parse[] parses = parseLine(line, parser, tokenizer, numParses); for (int pi = 0, pn = parses.length; pi < pn; pi++) { if (showTopK) { logger.debug("{} {} ", pi, parses[pi].getProb()); } parses[pi].show(); perfMon.incrementCounter(); } } } } catch (IOException e) { CmdLineUtil.handleStdinIoError(e); } perfMon.stopAndPrintFinalResult(); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_parser_Pa0100644 0000000 0000000 00000000162 14523004075 032555 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/ParserTrainerTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/ParserTrainerTool.0100644 0000000 0000000 00000014647 14523004075 034160 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.parser; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.AbstractTrainerTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.EncodingParameter; import opennlp.tools.cmdline.params.TrainingToolParams; import opennlp.tools.cmdline.parser.ParserTrainerTool.TrainerToolParams; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.parser.HeadRules; import opennlp.tools.parser.Parse; import opennlp.tools.parser.ParserModel; import opennlp.tools.parser.ParserType; import opennlp.tools.parser.chunking.Parser; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ext.ExtensionLoader; import opennlp.tools.util.model.ArtifactSerializer; import opennlp.tools.util.model.ModelUtil; public final class ParserTrainerTool extends AbstractTrainerTool { interface TrainerToolParams extends TrainingParams, TrainingToolParams, EncodingParameter { } private static final Logger logger = LoggerFactory.getLogger(ParserTrainerTool.class); public ParserTrainerTool() { super(Parse.class, TrainerToolParams.class); } @Override public String getShortDescription() { return "Trains the learnable parser"; } static Dictionary buildDictionary(ObjectStream parseSamples, HeadRules headRules, int cutoff) { logger.info("Building dictionary ..."); Dictionary mdict; try { mdict = Parser. buildDictionary(parseSamples, headRules, cutoff); } catch (IOException e) { logger.error("Error while building dictionary.", e); mdict = null; } logger.info("done"); return mdict; } static ParserType parseParserType(String typeAsString) { ParserType type = null; if (typeAsString != null && typeAsString.length() > 0) { type = ParserType.parse(typeAsString); if (type == null) { throw new TerminateToolException(1, "ParserType training parameter '" + typeAsString + "' is invalid!"); } } return type; } static HeadRules createHeadRules(TrainerToolParams params) throws IOException { ArtifactSerializer headRulesSerializer; if (params.getHeadRulesSerializerImpl() != null) { headRulesSerializer = ExtensionLoader.instantiateExtension(ArtifactSerializer.class, params.getHeadRulesSerializerImpl()); } else { if ("en".equals(params.getLang()) || "eng".equals(params.getLang())) { headRulesSerializer = new opennlp.tools.parser.lang.en.HeadRules.HeadRulesSerializer(); } else if ("es".equals(params.getLang()) || "spa".equals(params.getLang())) { headRulesSerializer = new opennlp.tools.parser.lang.es.AncoraSpanishHeadRules.HeadRulesSerializer(); } else { // default for now, this case should probably cause an error ... headRulesSerializer = new opennlp.tools.parser.lang.en.HeadRules.HeadRulesSerializer(); } } Object headRulesObject = headRulesSerializer.create(new FileInputStream(params.getHeadRules())); if (headRulesObject instanceof HeadRules) { return (HeadRules) headRulesObject; } else { throw new TerminateToolException(-1, "HeadRules Artifact Serializer must create an object of type HeadRules!"); } } // TODO: Add param to train tree insert parser @Override public void run(String format, String[] args) { super.run(format, args); mlParams = CmdLineUtil.loadTrainingParameters(params.getParams(), true); if (mlParams != null) { if (!TrainerFactory.isValid(mlParams.getParameters("build"))) { throw new TerminateToolException(1, "Build training parameters are invalid!"); } if (!TrainerFactory.isValid(mlParams.getParameters("check"))) { throw new TerminateToolException(1, "Check training parameters are invalid!"); } if (!TrainerFactory.isValid(mlParams.getParameters("attach"))) { throw new TerminateToolException(1, "Attach training parameters are invalid!"); } if (!TrainerFactory.isValid(mlParams.getParameters("tagger"))) { throw new TerminateToolException(1, "Tagger training parameters are invalid!"); } if (!TrainerFactory.isValid(mlParams.getParameters("chunker"))) { throw new TerminateToolException(1, "Chunker training parameters are invalid!"); } } if (mlParams == null) { mlParams = ModelUtil.createDefaultTrainingParameters(); } File modelOutFile = params.getModel(); CmdLineUtil.checkOutputFile("parser model", modelOutFile); ParserModel model; try { HeadRules rules = createHeadRules(params); ParserType type = parseParserType(params.getParserType()); if (params.getFun()) { Parse.useFunctionTags(true); } if (ParserType.CHUNKING.equals(type)) { model = opennlp.tools.parser.chunking.Parser.train( params.getLang(), sampleStream, rules, mlParams); } else if (ParserType.TREEINSERT.equals(type)) { model = opennlp.tools.parser.treeinsert.Parser.train(params.getLang(), sampleStream, rules, mlParams); } else { throw new IllegalStateException(); } } catch (IOException e) { throw createTerminationIOException(e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } CmdLineUtil.writeModel("parser", modelOutFile, model); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_parser_Ta0100644 0000000 0000000 00000000170 14523004075 032560 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/TaggerModelReplacerTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/TaggerModelReplace0100644 0000000 0000000 00000004200 14523004075 034131 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.parser; import java.io.File; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CLI; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.postag.POSModelLoader; import opennlp.tools.parser.ParserModel; import opennlp.tools.postag.POSModel; // user should train with the POS tool public final class TaggerModelReplacerTool extends BasicCmdLineTool { private static final Logger logger = LoggerFactory.getLogger(TaggerModelReplacerTool.class); @Override public String getShortDescription() { return "Replaces the tagger model in a parser model"; } @Override public String getHelp() { return "Usage: " + CLI.CMD + " " + getName() + " parser.model tagger.model"; } @Override public void run(String[] args) { if (args.length != 2) { logger.info(getHelp()); } else { File parserModelInFile = new File(args[0]); ParserModel parserModel = new ParserModelLoader().load(parserModelInFile); File taggerModelInFile = new File(args[1]); POSModel taggerModel = new POSModelLoader().load(taggerModelInFile); ParserModel updatedParserModel = parserModel.updateTaggerModel(taggerModel); CmdLineUtil.writeModel("parser", parserModelInFile, updatedParserModel); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_parser_Tr0100644 0000000 0000000 00000000157 14523004075 032606 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/TrainingParams.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/parser/TrainingParams.jav0100644 0000000 0000000 00000003631 14523004075 034150 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.parser; import java.io.File; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.params.BasicTrainingParams; import opennlp.tools.commons.Internal; /** * TrainingParams for {@link opennlp.tools.parser.Parser}. *

* Note: Do not use this class, internal use only! */ @Internal interface TrainingParams extends BasicTrainingParams { @ParameterDescription(valueName = "CHUNKING|TREEINSERT", description = "one of CHUNKING or TREEINSERT, default is CHUNKING.") @OptionalParameter(defaultValue = "CHUNKING") String getParserType(); @ParameterDescription(valueName = "className", description = "head rules artifact serializer class name") @OptionalParameter String getHeadRulesSerializerImpl(); @ParameterDescription(valueName = "headRulesFile", description = "head rules file.") File getHeadRules(); @ParameterDescription(valueName = "true|false", description = "Learn to generate function tags.") @OptionalParameter(defaultValue = "false") Boolean getFun(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_postag_PO0100644 0000000 0000000 00000000173 14523004075 032536 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/POSEvaluationErrorListener.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/POSEvaluationError0100644 0000000 0000000 00000004005 14523004075 034152 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.postag; import java.io.OutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.EvaluationErrorPrinter; import opennlp.tools.log.LogPrintStream; import opennlp.tools.postag.POSSample; import opennlp.tools.postag.POSTaggerEvaluationMonitor; import opennlp.tools.util.eval.EvaluationMonitor; /** * A default implementation of {@link EvaluationMonitor} that prints * to an output stream. */ public class POSEvaluationErrorListener extends EvaluationErrorPrinter implements POSTaggerEvaluationMonitor { private static final Logger logger = LoggerFactory.getLogger(POSEvaluationErrorListener.class); /** * Creates a listener that will print to the configured {@code logger}. */ public POSEvaluationErrorListener() { super(new LogPrintStream(logger)); } /** * Creates a listener that will print to a given {@link OutputStream}. */ public POSEvaluationErrorListener(OutputStream outputStream) { super(outputStream); } @Override public void misclassified(POSSample reference, POSSample prediction) { printError(reference.getTags(), prediction.getTags(), reference, prediction, reference.getSentence()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_postag_PO0100644 0000000 0000000 00000000157 14523004075 032540 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/POSModelLoader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/POSModelLoader.jav0100644 0000000 0000000 00000002577 14523004075 034013 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.postag; import java.io.IOException; import java.io.InputStream; import opennlp.tools.cmdline.ModelLoader; import opennlp.tools.commons.Internal; import opennlp.tools.postag.POSModel; /** * Loads a {@link POSModel} for the command line tools. *

* Note: Do not use this class, internal use only! */ @Internal public final class POSModelLoader extends ModelLoader { public POSModelLoader() { super("POS Tagger"); } @Override protected POSModel loadModel(InputStream modelIn) throws IOException { return new POSModel(modelIn); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_postag_PO0100644 0000000 0000000 00000000167 14523004075 032541 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/POSTaggerConverterTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/POSTaggerConverter0100644 0000000 0000000 00000002450 14523004075 034134 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.postag; import opennlp.tools.cmdline.AbstractConverterTool; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.postag.POSSample; /** * Tool to convert multiple data formats into native OpenNLP part of speech tagging * training format. * * @see AbstractConverterTool * @see POSSample */ public class POSTaggerConverterTool extends AbstractConverterTool { public POSTaggerConverterTool() { super(POSSample.class); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_postag_PO0100644 0000000 0000000 00000000174 14523004075 032537 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/POSTaggerCrossValidatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/POSTaggerCrossVali0100644 0000000 0000000 00000011073 14523004075 034073 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.postag; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.AbstractCrossValidatorTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.namefind.TokenNameFinderTrainerTool; import opennlp.tools.cmdline.params.CVParams; import opennlp.tools.cmdline.params.FineGrainedEvaluatorParams; import opennlp.tools.cmdline.postag.POSTaggerCrossValidatorTool.CVToolParams; import opennlp.tools.postag.POSSample; import opennlp.tools.postag.POSTaggerCrossValidator; import opennlp.tools.postag.POSTaggerEvaluationMonitor; import opennlp.tools.util.model.ModelUtil; public final class POSTaggerCrossValidatorTool extends AbstractCrossValidatorTool { interface CVToolParams extends CVParams, TrainingParams, FineGrainedEvaluatorParams { } private static final Logger logger = LoggerFactory.getLogger(POSTaggerCrossValidatorTool.class); public POSTaggerCrossValidatorTool() { super(POSSample.class, CVToolParams.class); } @Override public String getShortDescription() { return "K-fold cross validator for the learnable POS tagger"; } @Override public void run(String format, String[] args) { super.run(format, args); mlParams = CmdLineUtil.loadTrainingParameters(params.getParams(), false); if (mlParams == null) { mlParams = ModelUtil.createDefaultTrainingParameters(); } POSTaggerEvaluationMonitor missclassifiedListener = null; if (params.getMisclassified()) { missclassifiedListener = new POSEvaluationErrorListener(); } POSTaggerFineGrainedReportListener reportListener = null; File reportFile = params.getReportOutputFile(); OutputStream reportOutputStream = null; if (reportFile != null) { CmdLineUtil.checkOutputFile("Report Output File", reportFile); try { reportOutputStream = new FileOutputStream(reportFile); reportListener = new POSTaggerFineGrainedReportListener( reportOutputStream); } catch (FileNotFoundException e) { throw createTerminationIOException(e); } } Map resources; try { resources = TokenNameFinderTrainerTool.loadResources(params.getResources(), params.getFeaturegen()); } catch (IOException e) { throw new TerminateToolException(-1,"IO error while loading resources", e); } byte[] featureGeneratorBytes = TokenNameFinderTrainerTool.openFeatureGeneratorBytes(params.getFeaturegen()); POSTaggerCrossValidator validator; try { validator = new POSTaggerCrossValidator(params.getLang(), mlParams, params.getDict(), featureGeneratorBytes, resources, params.getTagDictCutoff(), params.getFactory(), missclassifiedListener, reportListener); validator.evaluate(sampleStream, params.getFolds()); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while reading training data or indexing data: " + e.getMessage(), e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } logger.info("done"); if (reportListener != null) { logger.info("Writing fine-grained report to {}", params.getReportOutputFile().getAbsolutePath()); reportListener.writeReport(); try { // TODO: is it a problem to close the stream now? reportOutputStream.close(); } catch (IOException e) { // nothing to do } } logger.info("Accuracy: {}", validator.getWordAccuracy()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_postag_PO0100644 0000000 0000000 00000000167 14523004075 032541 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/POSTaggerEvaluatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/POSTaggerEvaluator0100644 0000000 0000000 00000010172 14523004075 034127 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.postag; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.AbstractEvaluatorTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.EvaluatorParams; import opennlp.tools.cmdline.params.FineGrainedEvaluatorParams; import opennlp.tools.cmdline.postag.POSTaggerEvaluatorTool.EvalToolParams; import opennlp.tools.postag.POSEvaluator; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSSample; import opennlp.tools.postag.POSTaggerEvaluationMonitor; /** * A default {@link POSSample}-centric implementation of {@link AbstractEvaluatorTool} * that prints to an output stream. * * @see AbstractEvaluatorTool * @see EvalToolParams */ public final class POSTaggerEvaluatorTool extends AbstractEvaluatorTool { private static final Logger logger = LoggerFactory.getLogger(POSTaggerEvaluatorTool.class); interface EvalToolParams extends EvaluatorParams, FineGrainedEvaluatorParams { } public POSTaggerEvaluatorTool() { super(POSSample.class, EvalToolParams.class); } @Override public String getShortDescription() { return "Measures the performance of the POS tagger model with the reference data"; } @Override public void run(String format, String[] args) { super.run(format, args); POSModel model = new POSModelLoader().load(params.getModel()); POSTaggerEvaluationMonitor missclassifiedListener = null; if (params.getMisclassified()) { missclassifiedListener = new POSEvaluationErrorListener(); } POSTaggerFineGrainedReportListener reportListener = null; File reportFile = params.getReportOutputFile(); OutputStream reportOutputStream = null; if (reportFile != null) { CmdLineUtil.checkOutputFile("Report Output File", reportFile); try { reportOutputStream = new FileOutputStream(reportFile); reportListener = new POSTaggerFineGrainedReportListener( reportOutputStream); } catch (FileNotFoundException e) { throw new TerminateToolException(-1, "IO error while creating POS Tagger fine-grained report file: " + e.getMessage()); } } POSEvaluator evaluator = new POSEvaluator( new opennlp.tools.postag.POSTaggerME(model), missclassifiedListener, reportListener); logger.info("Evaluating ... "); try { evaluator.evaluate(sampleStream); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while reading test data: " + e.getMessage(), e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } logger.info("done"); if (reportListener != null) { logger.info("Writing fine-grained report to {}", params.getReportOutputFile().getAbsolutePath()); reportListener.writeReport(); try { // TODO: is it a problem to close the stream now? reportOutputStream.close(); } catch (IOException e) { // nothing to do } } logger.info("Accuracy: {}", evaluator.getWordAccuracy()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_postag_PO0100644 0000000 0000000 00000000203 14523004075 032530 xustar000000000 0000000 131 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/POSTaggerFineGrainedReportListener.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/POSTaggerFineGrain0100644 0000000 0000000 00000005126 14523004075 034032 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.postag; import java.io.OutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.FineGrainedReportListener; import opennlp.tools.log.LogPrintStream; import opennlp.tools.postag.POSSample; import opennlp.tools.postag.POSTaggerEvaluationMonitor; /** * Generates a detailed report for the POS Tagger. *

* It is possible to use it from an API and access the statistics using the * provided getters * */ public class POSTaggerFineGrainedReportListener extends FineGrainedReportListener implements POSTaggerEvaluationMonitor { private static final Logger logger = LoggerFactory.getLogger(POSTaggerFineGrainedReportListener.class); /** * Creates a listener that will print to the configured {@code logger}. */ public POSTaggerFineGrainedReportListener() { this(new LogPrintStream(logger)); } /** * Creates a listener that prints to a given {@link OutputStream}. */ public POSTaggerFineGrainedReportListener(OutputStream outputStream) { super(outputStream); } // methods inherited from EvaluationMonitor @Override public void misclassified(POSSample reference, POSSample prediction) { statsAdd(reference, prediction); } @Override public void correctlyClassified(POSSample reference, POSSample prediction) { statsAdd(reference, prediction); } private void statsAdd(POSSample reference, POSSample prediction) { getStats().add(reference.getSentence(), reference.getTags(), prediction.getTags()); } @Override public void writeReport() { printGeneralStatistics(); // token stats printTokenErrorRank(); printTokenOccurrencesRank(); // tag stats printTagsErrorRank(); // confusion tables printGeneralConfusionTable(); printDetailedConfusionMatrix(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_postag_PO0100644 0000000 0000000 00000000156 14523004075 032537 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/POSTaggerTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/POSTaggerTool.java0100644 0000000 0000000 00000005445 14523004075 034031 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.postag; import java.io.File; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CLI; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.PerformanceMonitor; import opennlp.tools.cmdline.SystemInputStreamFactory; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSSample; import opennlp.tools.postag.POSTaggerME; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; public final class POSTaggerTool extends BasicCmdLineTool { private static final Logger logger = LoggerFactory.getLogger(POSTaggerTool.class); @Override public String getShortDescription() { return "Learnable part of speech tagger"; } @Override public String getHelp() { return "Usage: " + CLI.CMD + " " + getName() + " model < sentences"; } @Override public void run(String[] args) { if (args.length != 1) { logger.info(getHelp()); } else { POSModel model = new POSModelLoader().load(new File(args[0])); POSTaggerME tagger = new POSTaggerME(model); PerformanceMonitor perfMon = null; try (ObjectStream lineStream = new PlainTextByLineStream( new SystemInputStreamFactory(), SystemInputStreamFactory.encoding())) { perfMon = new PerformanceMonitor("sent"); perfMon.start(); String line; while ((line = lineStream.read()) != null) { String[] whitespaceTokenizerLine = WhitespaceTokenizer.INSTANCE.tokenize(line); String[] tags = tagger.tag(whitespaceTokenizerLine); POSSample sample = new POSSample(whitespaceTokenizerLine, tags); logger.info(sample.toString()); perfMon.incrementCounter(); } } catch (IOException e) { CmdLineUtil.handleStdinIoError(e); } perfMon.stopAndPrintFinalResult(); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_postag_PO0100644 0000000 0000000 00000000165 14523004075 032537 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/POSTaggerTrainerTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/POSTaggerTrainerTo0100644 0000000 0000000 00000011446 14523004075 034101 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.postag; import java.io.File; import java.io.IOException; import java.util.Map; import opennlp.tools.cmdline.AbstractTrainerTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.namefind.TokenNameFinderTrainerTool; import opennlp.tools.cmdline.params.TrainingToolParams; import opennlp.tools.cmdline.postag.POSTaggerTrainerTool.TrainerToolParams; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.postag.MutableTagDictionary; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSSample; import opennlp.tools.postag.POSTaggerFactory; import opennlp.tools.postag.POSTaggerME; import opennlp.tools.postag.TagDictionary; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.model.ModelUtil; public final class POSTaggerTrainerTool extends AbstractTrainerTool { interface TrainerToolParams extends TrainingParams, TrainingToolParams { } public POSTaggerTrainerTool() { super(POSSample.class, TrainerToolParams.class); } @Override public String getShortDescription() { return "Trains a model for the part-of-speech tagger"; } @Override public void run(String format, String[] args) { super.run(format, args); mlParams = CmdLineUtil.loadTrainingParameters(params.getParams(), true); if (mlParams != null && !TrainerFactory.isValid(mlParams)) { throw new TerminateToolException(1, "Training parameters file '" + params.getParams() + "' is invalid!"); } if (mlParams == null) { mlParams = ModelUtil.createDefaultTrainingParameters(); } File modelOutFile = params.getModel(); CmdLineUtil.checkOutputFile("pos tagger model", modelOutFile); Map resources; try { resources = TokenNameFinderTrainerTool.loadResources( params.getResources(), params.getFeaturegen()); } catch (IOException e) { throw new TerminateToolException(-1,"IO error while loading resources", e); } byte[] featureGeneratorBytes = TokenNameFinderTrainerTool.openFeatureGeneratorBytes(params.getFeaturegen()); POSTaggerFactory postaggerFactory; try { postaggerFactory = POSTaggerFactory.create(params.getFactory(), featureGeneratorBytes, resources, null); } catch (InvalidFormatException e) { throw new TerminateToolException(-1, e.getMessage(), e); } if (params.getDict() != null) { try { postaggerFactory.setTagDictionary(postaggerFactory .createTagDictionary(params.getDict())); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while loading POS Dictionary", e); } } if (params.getTagDictCutoff() != null) { try { TagDictionary dict = postaggerFactory.getTagDictionary(); if (dict == null) { dict = postaggerFactory.createEmptyTagDictionary(); postaggerFactory.setTagDictionary(dict); } if (dict instanceof MutableTagDictionary) { POSTaggerME.populatePOSDictionary(sampleStream, (MutableTagDictionary)dict, params.getTagDictCutoff()); } else { throw new IllegalArgumentException( "Can't extend a POSDictionary that does not implement MutableTagDictionary."); } sampleStream.reset(); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while creating/extending POS Dictionary: " + e.getMessage(), e); } } POSModel model; try { model = opennlp.tools.postag.POSTaggerME.train(params.getLang(), sampleStream, mlParams, postaggerFactory); } catch (IOException e) { throw createTerminationIOException(e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } CmdLineUtil.writeModel("pos tagger", modelOutFile, model); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_postag_Tr0100644 0000000 0000000 00000000157 14523004075 032607 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/TrainingParams.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/postag/TrainingParams.jav0100644 0000000 0000000 00000004063 14523004075 034151 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.postag; import java.io.File; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.params.BasicTrainingParams; import opennlp.tools.commons.Internal; /** * TrainingParameters for Name Finder. *

* Note: Do not use this class, internal use only! */ @Internal interface TrainingParams extends BasicTrainingParams { @ParameterDescription(valueName = "featuregenFile", description = "The feature generator descriptor file") @OptionalParameter File getFeaturegen(); @ParameterDescription(valueName = "resourcesDir", description = "The resources directory") @OptionalParameter File getResources(); @ParameterDescription(valueName = "dictionaryPath", description = "The XML tag dictionary file") @OptionalParameter File getDict(); @ParameterDescription(valueName = "tagDictCutoff", description = "TagDictionary cutoff. If specified will create/expand a mutable TagDictionary") @OptionalParameter Integer getTagDictCutoff(); @ParameterDescription(valueName = "factoryName", description = "A sub-class of POSTaggerFactory where to get implementation and resources.") @OptionalParameter String getFactory(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_sentdetec0100644 0000000 0000000 00000000202 14523004075 032612 xustar000000000 0000000 130 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorConverterTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetect0100644 0000000 0000000 00000002515 14523004075 034215 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.sentdetect; import opennlp.tools.cmdline.AbstractConverterTool; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.sentdetect.SentenceSample; /** * Tool to convert multiple data formats into native OpenNLP sentence detector * training format. * * @see AbstractConverterTool * @see SentenceSample */ public class SentenceDetectorConverterTool extends AbstractConverterTool { public SentenceDetectorConverterTool() { super(SentenceSample.class); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_sentdetec0100644 0000000 0000000 00000000207 14523004075 032617 xustar000000000 0000000 135 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorCrossValidatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetect0100644 0000000 0000000 00000006655 14523004075 034226 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.sentdetect; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.AbstractCrossValidatorTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.params.CVParams; import opennlp.tools.cmdline.sentdetect.SentenceDetectorCrossValidatorTool.CVToolParams; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.sentdetect.SDCrossValidator; import opennlp.tools.sentdetect.SentenceDetectorEvaluationMonitor; import opennlp.tools.sentdetect.SentenceDetectorFactory; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.sentdetect.SentenceSampleStream; import opennlp.tools.util.eval.FMeasure; import opennlp.tools.util.model.ModelUtil; public final class SentenceDetectorCrossValidatorTool extends AbstractCrossValidatorTool { private static final Logger logger = LoggerFactory.getLogger(SentenceDetectorCrossValidatorTool.class); interface CVToolParams extends TrainingParams, CVParams { } public SentenceDetectorCrossValidatorTool() { super(SentenceSample.class, CVToolParams.class); } @Override public String getShortDescription() { return "K-fold cross validator for the learnable sentence detector"; } @Override public void run(String format, String[] args) { super.run(format, args); mlParams = CmdLineUtil.loadTrainingParameters(params.getParams(), false); if (mlParams == null) { mlParams = ModelUtil.createDefaultTrainingParameters(); } SDCrossValidator validator; SentenceDetectorEvaluationMonitor errorListener = null; if (params.getMisclassified()) { errorListener = new SentenceEvaluationErrorListener(); } char[] eos = null; if (params.getEosChars() != null) { String eosString = SentenceSampleStream.replaceNewLineEscapeTags(params.getEosChars()); eos = eosString.toCharArray(); } try { Dictionary abbreviations = SentenceDetectorTrainerTool.loadDict(params.getAbbDict()); SentenceDetectorFactory sdFactory = SentenceDetectorFactory.create( params.getFactory(), params.getLang(), true, abbreviations, eos); validator = new SDCrossValidator(params.getLang(), mlParams, sdFactory, errorListener); validator.evaluate(sampleStream, params.getFolds()); } catch (IOException e) { throw createTerminationIOException(e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } FMeasure result = validator.getFMeasure(); logger.info(result.toString()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_sentdetec0100644 0000000 0000000 00000000202 14523004075 032612 xustar000000000 0000000 130 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorEvaluatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetect0100644 0000000 0000000 00000006036 14523004075 034217 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.sentdetect; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.AbstractEvaluatorTool; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.EvaluatorParams; import opennlp.tools.cmdline.sentdetect.SentenceDetectorEvaluatorTool.EvalToolParams; import opennlp.tools.sentdetect.SentenceDetectorEvaluationMonitor; import opennlp.tools.sentdetect.SentenceDetectorEvaluator; import opennlp.tools.sentdetect.SentenceDetectorME; import opennlp.tools.sentdetect.SentenceModel; import opennlp.tools.sentdetect.SentenceSample; /** * A default {@link SentenceSample}-centric implementation of {@link AbstractEvaluatorTool} * that prints to an output stream. * * @see AbstractEvaluatorTool * @see EvalToolParams */ public final class SentenceDetectorEvaluatorTool extends AbstractEvaluatorTool { interface EvalToolParams extends EvaluatorParams { } private static final Logger logger = LoggerFactory.getLogger(SentenceDetectorEvaluatorTool.class); public SentenceDetectorEvaluatorTool() { super(SentenceSample.class, EvalToolParams.class); } @Override public String getShortDescription() { return "Measures the performance of the learnable sentence detector"; } @Override public void run(String format, String[] args) { super.run(format, args); SentenceModel model = new SentenceModelLoader().load(params.getModel()); SentenceDetectorEvaluationMonitor errorListener = null; if (params.getMisclassified()) { errorListener = new SentenceEvaluationErrorListener(); } SentenceDetectorEvaluator evaluator = new SentenceDetectorEvaluator( new SentenceDetectorME(model), errorListener); logger.info("Evaluating ... "); try { evaluator.evaluate(sampleStream); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while reading training data or indexing data: " + e.getMessage(), e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } logger.info("done"); logger.info(evaluator.getFMeasure().toString()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_sentdetec0100644 0000000 0000000 00000000171 14523004075 032617 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetect0100644 0000000 0000000 00000005632 14523004075 034220 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.sentdetect; import java.io.File; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CLI; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.PerformanceMonitor; import opennlp.tools.cmdline.SystemInputStreamFactory; import opennlp.tools.sentdetect.SentenceDetectorME; import opennlp.tools.sentdetect.SentenceModel; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ParagraphStream; import opennlp.tools.util.PlainTextByLineStream; /** * A sentence detector which uses a maxent model to predict the sentences. */ public final class SentenceDetectorTool extends BasicCmdLineTool { private static final Logger logger = LoggerFactory.getLogger(SentenceDetectorTool.class); @Override public String getShortDescription() { return "Learnable sentence detector"; } @Override public String getHelp() { return "Usage: " + CLI.CMD + " " + getName() + " model < sentences"; } /** * Perform sentence detection on a stream of sentences. *

* A newline will be treated as a paragraph boundary. */ @Override public void run(String[] args) { if (args.length != 1) { logger.info(getHelp()); } else { SentenceModel model = new SentenceModelLoader().load(new File(args[0])); SentenceDetectorME sdetector = new SentenceDetectorME(model); PerformanceMonitor perfMon = new PerformanceMonitor("sent"); perfMon.start(); try (ObjectStream paraStream = new ParagraphStream(new PlainTextByLineStream( new SystemInputStreamFactory(), SystemInputStreamFactory.encoding()))) { String para; while ((para = paraStream.read()) != null) { String[] sents = sdetector.sentDetect(para); for (String sentence : sents) { logger.info(sentence); } perfMon.incrementCounter(sents.length); } } catch (IOException e) { CmdLineUtil.handleStdinIoError(e); } perfMon.stopAndPrintFinalResult(); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_sentdetec0100644 0000000 0000000 00000000200 14523004075 032610 xustar000000000 0000000 128 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorTrainerTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetect0100644 0000000 0000000 00000007351 14523004075 034220 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.sentdetect; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import opennlp.tools.cmdline.AbstractTrainerTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.TrainingToolParams; import opennlp.tools.cmdline.sentdetect.SentenceDetectorTrainerTool.TrainerToolParams; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.TrainerFactory.TrainerType; import opennlp.tools.sentdetect.SentenceDetectorFactory; import opennlp.tools.sentdetect.SentenceDetectorME; import opennlp.tools.sentdetect.SentenceModel; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.sentdetect.SentenceSampleStream; import opennlp.tools.util.model.ModelUtil; public final class SentenceDetectorTrainerTool extends AbstractTrainerTool { interface TrainerToolParams extends TrainingParams, TrainingToolParams { } public SentenceDetectorTrainerTool() { super(SentenceSample.class, TrainerToolParams.class); } @Override public String getShortDescription() { return "Trainer for the learnable sentence detector"; } static Dictionary loadDict(File f) throws IOException { Dictionary dict = null; if (f != null) { CmdLineUtil.checkInputFile("abb dict", f); dict = new Dictionary(new BufferedInputStream(new FileInputStream(f))); } return dict; } @Override public void run(String format, String[] args) { super.run(format, args); mlParams = CmdLineUtil.loadTrainingParameters(params.getParams(), false); if (mlParams != null) { if (!TrainerType.EVENT_MODEL_TRAINER.equals(TrainerFactory.getTrainerType(mlParams))) { throw new TerminateToolException(1, "Sequence training is not supported!"); } } if (mlParams == null) { mlParams = ModelUtil.createDefaultTrainingParameters(); } File modelOutFile = params.getModel(); CmdLineUtil.checkOutputFile("sentence detector model", modelOutFile); char[] eos = null; if (params.getEosChars() != null) { String eosString = SentenceSampleStream.replaceNewLineEscapeTags( params.getEosChars()); eos = eosString.toCharArray(); } SentenceModel model; try { Dictionary dict = loadDict(params.getAbbDict()); SentenceDetectorFactory sdFactory = SentenceDetectorFactory.create( params.getFactory(), params.getLang(), true, dict, eos); model = SentenceDetectorME.train(params.getLang(), sampleStream, sdFactory, mlParams); } catch (IOException e) { throw createTerminationIOException(e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } CmdLineUtil.writeModel("sentence detector", modelOutFile, model); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_sentdetec0100644 0000000 0000000 00000000204 14523004075 032614 xustar000000000 0000000 132 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceEvaluationErrorListener.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceEvalua0100644 0000000 0000000 00000004125 14523004075 034221 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.sentdetect; import java.io.OutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.EvaluationErrorPrinter; import opennlp.tools.log.LogPrintStream; import opennlp.tools.sentdetect.SentenceDetectorEvaluationMonitor; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.eval.EvaluationMonitor; /** * A default implementation of {@link EvaluationMonitor} that prints * to an output stream. */ public class SentenceEvaluationErrorListener extends EvaluationErrorPrinter implements SentenceDetectorEvaluationMonitor { private static final Logger logger = LoggerFactory.getLogger(SentenceEvaluationErrorListener.class); /** * Creates a listener that will print to the configured {@code logger}. */ public SentenceEvaluationErrorListener() { super(new LogPrintStream(logger)); } /** * Creates a listener that will print to a given {@link OutputStream}. */ public SentenceEvaluationErrorListener(OutputStream outputStream) { super(outputStream); } @Override public void misclassified(SentenceSample reference, SentenceSample prediction) { printError(reference.getSentences(), prediction.getSentences(), reference, prediction, reference.getDocument()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_sentdetec0100644 0000000 0000000 00000000170 14523004075 032616 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceModelLoader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceModelL0100644 0000000 0000000 00000002773 14523004075 034167 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.sentdetect; import java.io.IOException; import java.io.InputStream; import opennlp.tools.cmdline.ModelLoader; import opennlp.tools.commons.Internal; import opennlp.tools.sentdetect.SentenceModel; import opennlp.tools.util.InvalidFormatException; /** * Loads a {@link SentenceModel} for the command line tools. *

* Note: Do not use this class, internal use only! */ @Internal final class SentenceModelLoader extends ModelLoader { public SentenceModelLoader() { super("Sentence Detector"); } @Override protected SentenceModel loadModel(InputStream modelIn) throws IOException, InvalidFormatException { return new SentenceModel(modelIn); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_sentdetec0100644 0000000 0000000 00000000163 14523004075 032620 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/TrainingParams.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/TrainingParams0100644 0000000 0000000 00000003317 14523004075 034240 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.sentdetect; import java.io.File; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.params.BasicTrainingParams; import opennlp.tools.commons.Internal; /** * TrainingParams for Sentence Detector. *

* Note: Do not use this class, internal use only! */ @Internal interface TrainingParams extends BasicTrainingParams { @ParameterDescription(valueName = "path", description = "abbreviation dictionary in XML format.") @OptionalParameter File getAbbDict(); @ParameterDescription(valueName = "string", description = "EOS characters.") @OptionalParameter String getEosChars(); @ParameterDescription(valueName = "factoryName", description = "A sub-class of SentenceDetectorFactory where to get implementation and resources.") @OptionalParameter String getFactory(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_tokenizer0100644 0000000 0000000 00000000170 14523004075 032652 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/CommandLineTokenizer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/CommandLineToke0100644 0000000 0000000 00000004470 14523004075 034203 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.tokenizer; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.PerformanceMonitor; import opennlp.tools.cmdline.SystemInputStreamFactory; import opennlp.tools.tokenize.Tokenizer; import opennlp.tools.tokenize.TokenizerStream; import opennlp.tools.tokenize.WhitespaceTokenStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; final class CommandLineTokenizer { private static final Logger logger = LoggerFactory.getLogger(CommandLineTokenizer.class); private final Tokenizer tokenizer; CommandLineTokenizer(Tokenizer tokenizer) { this.tokenizer = tokenizer; } void process() { ObjectStream untokenizedLineStream; ObjectStream tokenizedLineStream; PerformanceMonitor perfMon = null; try { untokenizedLineStream = new PlainTextByLineStream(new SystemInputStreamFactory(), SystemInputStreamFactory.encoding()); tokenizedLineStream = new WhitespaceTokenStream( new TokenizerStream(tokenizer, untokenizedLineStream)); perfMon = new PerformanceMonitor("sent"); perfMon.start(); String tokenizedLine; while ((tokenizedLine = tokenizedLineStream.read()) != null) { logger.info(tokenizedLine); perfMon.incrementCounter(); } } catch (IOException e) { CmdLineUtil.handleStdinIoError(e); } perfMon.stopAndPrintFinalResult(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_tokenizer0100644 0000000 0000000 00000000202 14523004075 032646 xustar000000000 0000000 130 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/DetokenEvaluationErrorListener.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/DetokenEvaluati0100644 0000000 0000000 00000003730 14523004075 034254 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.tokenizer; import java.io.OutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.EvaluationErrorPrinter; import opennlp.tools.log.LogPrintStream; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.tokenize.TokenizerEvaluationMonitor; import opennlp.tools.util.eval.EvaluationMonitor; /** * A default implementation of {@link EvaluationMonitor} that prints * to an output stream. */ public class DetokenEvaluationErrorListener extends EvaluationErrorPrinter implements TokenizerEvaluationMonitor { private static final Logger logger = LoggerFactory.getLogger(DetokenEvaluationErrorListener.class); /** * Creates a listener that will print to the configured {@code logger}. */ public DetokenEvaluationErrorListener() { super(new LogPrintStream(logger)); } /** * Creates a listener that will print to a given {@link OutputStream}. */ public DetokenEvaluationErrorListener(OutputStream outputStream) { super(outputStream); } @Override public void misclassified(TokenSample reference, TokenSample prediction) { printError(reference, prediction); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_tokenizer0100644 0000000 0000000 00000000202 14523004075 032646 xustar000000000 0000000 130 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/DetokenizationDictionaryLoader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/DetokenizationD0100644 0000000 0000000 00000002461 14523004075 034263 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.tokenizer; import java.io.IOException; import java.io.InputStream; import opennlp.tools.cmdline.ModelLoader; import opennlp.tools.tokenize.DetokenizationDictionary; final class DetokenizationDictionaryLoader extends ModelLoader { DetokenizationDictionaryLoader() { super("detokenizer dictionary"); } @Override protected DetokenizationDictionary loadModel(InputStream modelIn) throws IOException { return new DetokenizationDictionary(modelIn); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_tokenizer0100644 0000000 0000000 00000000175 14523004075 032657 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/DictionaryDetokenizerTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/DictionaryDetok0100644 0000000 0000000 00000005522 14523004075 034265 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.tokenizer; import java.io.File; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CLI; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.PerformanceMonitor; import opennlp.tools.cmdline.SystemInputStreamFactory; import opennlp.tools.tokenize.Detokenizer; import opennlp.tools.tokenize.DictionaryDetokenizer; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; public final class DictionaryDetokenizerTool extends BasicCmdLineTool { private static final Logger logger = LoggerFactory.getLogger(DictionaryDetokenizerTool.class); @Override public String getShortDescription() { return "Normalizes tokenized text according to rules defined in a detokenizer dictionary"; } @Override public String getHelp() { return "Usage: " + CLI.CMD + " " + getName() + " detokenizerDictionary"; } @Override public void run(String[] args) { if (args.length != 1) { logger.info(getHelp()); } else { try { Detokenizer detokenizer = new DictionaryDetokenizer( new DetokenizationDictionaryLoader().load(new File(args[0]))); try (ObjectStream tokenizedLineStream = new PlainTextByLineStream(new SystemInputStreamFactory(), SystemInputStreamFactory.encoding())) { PerformanceMonitor perfMon = new PerformanceMonitor("sent"); perfMon.start(); String tokenizedLine; while ((tokenizedLine = tokenizedLineStream.read()) != null) { // white space tokenize line String[] tokens = WhitespaceTokenizer.INSTANCE.tokenize(tokenizedLine); logger.info(detokenizer.detokenize(tokens, null)); perfMon.incrementCounter(); } perfMon.stopAndPrintFinalResult(); } } catch (IOException e) { CmdLineUtil.handleStdinIoError(e); } } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_tokenizer0100644 0000000 0000000 00000000167 14523004075 032660 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/SimpleTokenizerTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/SimpleTokenizer0100644 0000000 0000000 00000003245 14523004075 034315 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.tokenizer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CLI; public final class SimpleTokenizerTool extends BasicCmdLineTool { private static final Logger logger = LoggerFactory.getLogger(SimpleTokenizerTool.class); @Override public String getShortDescription() { return "Character class tokenizer"; } @Override public String getHelp() { return "Usage: " + CLI.CMD + " " + getName() + " < sentences"; } @Override public boolean hasParams() { return false; } @Override public void run(String[] args) { if (args.length != 0) { logger.info(getHelp()); } else { CommandLineTokenizer tokenizer = new CommandLineTokenizer(opennlp.tools.tokenize.SimpleTokenizer.INSTANCE); tokenizer.process(); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_tokenizer0100644 0000000 0000000 00000000200 14523004075 032644 xustar000000000 0000000 128 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/TokenEvaluationErrorListener.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/TokenEvaluation0100644 0000000 0000000 00000004044 14523004075 034277 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.tokenizer; import java.io.OutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.EvaluationErrorPrinter; import opennlp.tools.log.LogPrintStream; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.tokenize.TokenizerEvaluationMonitor; import opennlp.tools.util.eval.EvaluationMonitor; /** * A default implementation of {@link EvaluationMonitor} that prints * to an output stream. */ public class TokenEvaluationErrorListener extends EvaluationErrorPrinter implements TokenizerEvaluationMonitor { private static final Logger logger = LoggerFactory.getLogger(TokenEvaluationErrorListener.class); /** * Creates a listener that will print to the configured {@code logger}. */ public TokenEvaluationErrorListener() { super(new LogPrintStream(logger)); } /** * Creates a listener that will print to a given {@link OutputStream}. */ public TokenEvaluationErrorListener(OutputStream outputStream) { super(outputStream); } @Override public void misclassified(TokenSample reference, TokenSample prediction) { printError(reference.getTokenSpans(), prediction.getTokenSpans(), reference, prediction, reference.getText()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_tokenizer0100644 0000000 0000000 00000000172 14523004075 032654 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/TokenizerConverterTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/TokenizerConver0100644 0000000 0000000 00000002460 14523004075 034316 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.tokenizer; import opennlp.tools.cmdline.AbstractConverterTool; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.tokenize.TokenSample; /** * Tool to convert multiple data formats into native OpenNLP sentence detector * training format. * * @see AbstractConverterTool * @see TokenSample */ public class TokenizerConverterTool extends AbstractConverterTool { public TokenizerConverterTool() { super(TokenSample.class); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_tokenizer0100644 0000000 0000000 00000000177 14523004075 032661 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/TokenizerCrossValidatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/TokenizerCrossV0100644 0000000 0000000 00000006144 14523004075 034304 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.tokenizer; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.AbstractCrossValidatorTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.params.CVParams; import opennlp.tools.cmdline.tokenizer.TokenizerCrossValidatorTool.CVToolParams; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.tokenize.TokenizerCrossValidator; import opennlp.tools.tokenize.TokenizerEvaluationMonitor; import opennlp.tools.tokenize.TokenizerFactory; import opennlp.tools.util.eval.FMeasure; import opennlp.tools.util.model.ModelUtil; public final class TokenizerCrossValidatorTool extends AbstractCrossValidatorTool { interface CVToolParams extends CVParams, TrainingParams { } private static final Logger logger = LoggerFactory.getLogger(TokenizerCrossValidatorTool.class); public TokenizerCrossValidatorTool() { super(TokenSample.class, CVToolParams.class); } @Override public String getShortDescription() { return "K-fold cross validator for the learnable tokenizer"; } @Override public void run(String format, String[] args) { super.run(format, args); mlParams = CmdLineUtil.loadTrainingParameters(params.getParams(), false); if (mlParams == null) { mlParams = ModelUtil.createDefaultTrainingParameters(); } TokenizerCrossValidator validator; TokenizerEvaluationMonitor listener = null; if (params.getMisclassified()) { listener = new TokenEvaluationErrorListener(); } try { Dictionary dict = TokenizerTrainerTool.loadDict(params.getAbbDict()); TokenizerFactory tokFactory = TokenizerFactory.create( params.getFactory(), params.getLang(), dict, params.getAlphaNumOpt(), null); validator = new opennlp.tools.tokenize.TokenizerCrossValidator(mlParams, tokFactory, listener); validator.evaluate(sampleStream, params.getFolds()); } catch (IOException e) { throw createTerminationIOException(e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } FMeasure result = validator.getFMeasure(); logger.info(result.toString()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_tokenizer0100644 0000000 0000000 00000000174 14523004075 032656 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/TokenizerMEEvaluatorTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/TokenizerMEEval0100644 0000000 0000000 00000005626 14523004075 034202 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.tokenizer; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.AbstractEvaluatorTool; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.EvaluatorParams; import opennlp.tools.cmdline.tokenizer.TokenizerMEEvaluatorTool.EvalToolParams; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.tokenize.TokenizerEvaluationMonitor; import opennlp.tools.tokenize.TokenizerEvaluator; import opennlp.tools.tokenize.TokenizerModel; /** * A default {@link TokenSample}-centric implementation of {@link AbstractEvaluatorTool} * that prints to an output stream. * * @see AbstractEvaluatorTool * @see EvalToolParams */ public final class TokenizerMEEvaluatorTool extends AbstractEvaluatorTool { private static final Logger logger = LoggerFactory.getLogger(TokenizerMEEvaluatorTool.class); interface EvalToolParams extends EvaluatorParams { } public TokenizerMEEvaluatorTool() { super(TokenSample.class, EvalToolParams.class); } @Override public String getShortDescription() { return "Measures the performance of the learnable tokenizer"; } @Override public void run(String format, String[] args) { super.run(format, args); TokenizerModel model = new TokenizerModelLoader().load(params.getModel()); TokenizerEvaluationMonitor misclassifiedListener = null; if (params.getMisclassified()) { misclassifiedListener = new TokenEvaluationErrorListener(); } TokenizerEvaluator evaluator = new TokenizerEvaluator( new opennlp.tools.tokenize.TokenizerME(model), misclassifiedListener); logger.info("Evaluating ... "); try { evaluator.evaluate(sampleStream); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while reading test data: " + e.getMessage(), e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } logger.info("done"); logger.info(evaluator.getFMeasure().toString()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_tokenizer0100644 0000000 0000000 00000000163 14523004075 032654 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/TokenizerMETool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/TokenizerMETool0100644 0000000 0000000 00000003356 14523004075 034226 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.tokenizer; import java.io.File; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.cmdline.BasicCmdLineTool; import opennlp.tools.cmdline.CLI; import opennlp.tools.tokenize.TokenizerModel; public final class TokenizerMETool extends BasicCmdLineTool { private static final Logger logger = LoggerFactory.getLogger(TokenizerMETool.class); @Override public String getShortDescription() { return "Learnable tokenizer"; } @Override public String getHelp() { return "Usage: " + CLI.CMD + " " + getName() + " model < sentences"; } @Override public void run(String[] args) { if (args.length != 1) { logger.info(getHelp()); } else { TokenizerModel model = new TokenizerModelLoader().load(new File(args[0])); CommandLineTokenizer tokenizer = new CommandLineTokenizer(new opennlp.tools.tokenize.TokenizerME(model)); tokenizer.process(); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_tokenizer0100644 0000000 0000000 00000000170 14523004075 032652 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/TokenizerModelLoader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/TokenizerModelL0100644 0000000 0000000 00000002655 14523004075 034244 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.tokenizer; import java.io.IOException; import java.io.InputStream; import opennlp.tools.cmdline.ModelLoader; import opennlp.tools.commons.Internal; import opennlp.tools.tokenize.TokenizerModel; /** * Loads a {@link TokenizerModel} for the command line tools. *

* Note: Do not use this class, internal use only! */ @Internal public final class TokenizerModelLoader extends ModelLoader { public TokenizerModelLoader() { super("Tokenizer"); } @Override protected TokenizerModel loadModel(InputStream modelIn) throws IOException { return new TokenizerModel(modelIn); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_tokenizer0100644 0000000 0000000 00000000170 14523004075 032652 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/TokenizerTrainerTool.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/TokenizerTraine0100644 0000000 0000000 00000007300 14523004075 034302 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.tokenizer; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import opennlp.tools.cmdline.AbstractTrainerTool; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.TrainingToolParams; import opennlp.tools.cmdline.tokenizer.TokenizerTrainerTool.TrainerToolParams; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.TrainerFactory.TrainerType; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.tokenize.TokenizerFactory; import opennlp.tools.tokenize.TokenizerModel; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.ModelUtil; public final class TokenizerTrainerTool extends AbstractTrainerTool { interface TrainerToolParams extends TrainingParams, TrainingToolParams { } public TokenizerTrainerTool() { super(TokenSample.class, TrainerToolParams.class); } @Override public String getShortDescription() { return "Trainer for the learnable tokenizer"; } static Dictionary loadDict(File f) throws IOException { Dictionary dict = null; if (f != null) { CmdLineUtil.checkInputFile("abb dict", f); dict = new Dictionary(new BufferedInputStream(new FileInputStream(f))); } return dict; } @Override public void run(String format, String[] args) { super.run(format, args); if (null != params.getParams()) mlParams = CmdLineUtil.loadTrainingParameters(params.getParams(), false); else mlParams = TrainingParameters.setParams(args); if (mlParams != null) { if (!TrainerFactory.isValid(mlParams)) { throw new TerminateToolException(1, "Training parameters file '" + params.getParams() + "' is invalid!"); } if (!TrainerType.EVENT_MODEL_TRAINER.equals(TrainerFactory.getTrainerType(mlParams))) { throw new TerminateToolException(1, "Sequence training is not supported!"); } } if (mlParams == null) { mlParams = ModelUtil.createDefaultTrainingParameters(); } File modelOutFile = params.getModel(); CmdLineUtil.checkOutputFile("tokenizer model", modelOutFile); TokenizerModel model; try { Dictionary dict = loadDict(params.getAbbDict()); TokenizerFactory tokFactory = TokenizerFactory.create( params.getFactory(), params.getLang(), dict, params.getAlphaNumOpt(), null); model = opennlp.tools.tokenize.TokenizerME.train(sampleStream, tokFactory, mlParams); } catch (IOException e) { throw createTerminationIOException(e); } finally { try { sampleStream.close(); } catch (IOException e) { // sorry that this can fail } } CmdLineUtil.writeModel("tokenizer", modelOutFile, model); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_cmdline_tokenizer0100644 0000000 0000000 00000000162 14523004075 032653 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/TrainingParams.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/cmdline/tokenizer/TrainingParams.0100644 0000000 0000000 00000004150 14523004075 034162 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.tokenizer; import java.io.File; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.params.BasicTrainingParams; import opennlp.tools.commons.Internal; /** * TrainingParameters for Tokenizer. *

* Note: Do not use this class, internal use only! */ @Internal interface TrainingParams extends BasicTrainingParams { @ParameterDescription(valueName = "isAlphaNumOpt", description = "Optimization flag to skip alpha numeric tokens for further tokenization") @OptionalParameter(defaultValue = "false") Boolean getAlphaNumOpt(); @ParameterDescription(valueName = "path", description = "abbreviation dictionary in XML format.") @OptionalParameter File getAbbDict(); @ParameterDescription(valueName = "factoryName", description = "A sub-class of TokenizerFactory where to get implementation and resources.") @OptionalParameter String getFactory(); @ParameterDescription(valueName = "cutOffNum", description = "Minimal number of times a feature must be seen") @OptionalParameter String getCutoff(); @ParameterDescription(valueName = "iterationsNum", description = "Number of training iterations") @OptionalParameter String getIterations(); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/commons/Internal.java0100644 0000000 0000000 00000002643 14523004075 031714 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.commons; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Classes, fields, or methods annotated {@code @Internal} are for OpenNLP * internal use only. Such elements are likely to be removed, have a different access level, * or might experience a signature change in upcoming releases of OpenNLP. */ @Documented @Retention(value = RetentionPolicy.RUNTIME) public @interface Internal { String value() default ""; /** * The OpenNLP release when an element was first declared internal. */ String since() default ""; } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/commons/Sample.java0100644 0000000 0000000 00000001717 14523004075 031362 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.commons; import java.io.Serializable; /** * Represents a generic type of processable elements. */ public interface Sample extends Serializable { } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/commons/ThreadSafe.java0100644 0000000 0000000 00000004670 14523004075 032150 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.commons; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Classes, fields, or methods annotated {@code @ThreadSafe} are safe to use * in multithreading contexts. In general, classes that adhere to (one of) * the following concepts: *

    *
  • Statelessness: no methods relies on external state or * maintain state at all,
  • *
  • Immutability: all attributes are {@code final} so that * internal state can't be modified at all,
  • *
  • Thread locality: non-{@code final} fields are only * accessed via an independently initialized copy,
  • *
  • Atomicity: all operations on fields are perform via * {@link java.util.concurrent.atomic atomic data types}, or
  • *
  • Synchronization: all non-final methods, fields, or * method local variables are manipulated via locks, that is, in a * {@code synchronized} manner
  • *
* are safe to use from multiple threads. In addition, thread-safety can be * achieved by using the concepts of either *
    *
  • {@link java.util.concurrent.locks.ReentrantLock ReentrantLock}, or *
  • {@link java.util.concurrent.locks.ReadWriteLock ReadWriteLock} *
* in which a thread acquires the lock for write operations and protects * the locked object or data element from changes until the lock is released. */ @Documented @Retention(value = RetentionPolicy.RUNTIME) public @interface ThreadSafe { /** * The OpenNLP release when an element was first declared {@code thread-safe}. */ String since() default ""; } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/commons/Trainer.java0100644 0000000 0000000 00000002501 14523004075 031535 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.commons; import java.util.Map; import opennlp.tools.util.TrainingParameters; /** * Represents a common base for training implementations. */ public interface Trainer { /** * Conducts the initialization of an {@link Trainer} via * {@link TrainingParameters} and a {@link Map report map}. * * @param trainParams The {@link TrainingParameters} to use. * @param reportMap The {@link Map} instance used as report map. */ void init(TrainingParameters trainParams, Map reportMap); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/commons/package-info.java0100644 0000000 0000000 00000001615 14523004075 032462 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package related to common interfaces used in different contexts. */ package opennlp.tools.commons; apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/dictionary/Dictionary.java0100644 0000000 0000000 00000022313 14523004075 032733 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.dictionary; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.util.AbstractSet; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.StringTokenizer; import opennlp.tools.dictionary.serializer.Attributes; import opennlp.tools.dictionary.serializer.DictionaryEntryPersistor; import opennlp.tools.dictionary.serializer.Entry; import opennlp.tools.util.StringList; import opennlp.tools.util.model.DictionarySerializer; import opennlp.tools.util.model.SerializableArtifact; /** * An iterable and serializable dictionary implementation. * * @see SerializableArtifact * @see Iterable */ public class Dictionary implements Iterable, SerializableArtifact { private final Set entrySet = new HashSet<>(); private final boolean isCaseSensitive; private int minTokenCount = 99999; private int maxTokenCount = 0; /** * Initializes an empty {@link Dictionary}. * By default, the resulting instance will not be case-sensitive. */ public Dictionary() { this(false); } /** * Initializes an empty {@link Dictionary}. * * @param caseSensitive Whether the new instance will operate case-sensitive, or not. */ public Dictionary(boolean caseSensitive) { isCaseSensitive = caseSensitive; } /** * Initializes the {@link Dictionary} from an existing dictionary resource. * * @param in The {@link InputStream} that references the dictionary content. * * @throws IOException Thrown if IO errors occurred. */ public Dictionary(InputStream in) throws IOException { isCaseSensitive = DictionaryEntryPersistor.create(in, entry -> put(entry.tokens())); } /** * Adds the tokens to the dictionary as one new entry. * * @param tokens the new entry */ public void put(StringList tokens) { entrySet.add(applyCaseSensitivity(tokens)); minTokenCount = StrictMath.min(minTokenCount, tokens.size()); maxTokenCount = StrictMath.max(maxTokenCount, tokens.size()); } public int getMinTokenCount() { return minTokenCount; } public int getMaxTokenCount() { return maxTokenCount; } /** * Checks if this dictionary has the given entry. * * @param tokens The query of tokens to be checked for. * @return {@code true} if it contains the entry, {@code false} otherwise. */ public boolean contains(StringList tokens) { return entrySet.contains(applyCaseSensitivity(tokens)); } /** * Removes the given tokens form the current instance. * * @param tokens The tokens to be filtered out (= removed). */ public void remove(StringList tokens) { entrySet.remove(applyCaseSensitivity(tokens)); } /** * @return Retrieves a token-{@link Iterator} over all elements. */ @Override public Iterator iterator() { final Iterator entries = entrySet.iterator(); return new Iterator<>() { @Override public boolean hasNext() { return entries.hasNext(); } @Override public StringList next() { return entries.next(); } @Override public void remove() { entries.remove(); } }; } /** * @return Retrieves the number of tokens in the current instance. */ public int size() { return entrySet.size(); } /** * Writes the current instance to the given {@link OutputStream}. * * @param out A valid {@link OutputStream}, ready for serialization. * @throws IOException Thrown if IO errors occurred. */ public void serialize(OutputStream out) throws IOException { Iterator entryIterator = new Iterator<>() { private final Iterator dictionaryIterator = Dictionary.this.iterator(); @Override public boolean hasNext() { return dictionaryIterator.hasNext(); } @Override public Entry next() { StringList tokens = dictionaryIterator.next(); return new Entry(tokens, new Attributes()); } @Override public void remove() { throw new UnsupportedOperationException(); } }; DictionaryEntryPersistor.serialize(out, entryIterator, isCaseSensitive); } @Override public boolean equals(Object obj) { boolean result; if (obj == this) { result = true; } else if (obj instanceof Dictionary dictionary) { result = entrySet.equals(dictionary.entrySet); } else { result = false; } return result; } @Override public int hashCode() { return entrySet.hashCode(); } @Override public String toString() { return entrySet.toString(); } /** * Reads a {@link Dictionary} which has one entry per line. * The tokens inside an entry are whitespace delimited. * * @param in A {@link Reader} instance used to parse the dictionary from. * @return The parsed {@link Dictionary} instance; guaranteed to be non-{@code null}. * @throws IOException Thrown if IO errors occurred during read and parse operations. */ public static Dictionary parseOneEntryPerLine(Reader in) throws IOException { BufferedReader lineReader = new BufferedReader(in); final Dictionary dictionary = new Dictionary(); String line; while ((line = lineReader.readLine()) != null) { StringTokenizer whiteSpaceTokenizer = new StringTokenizer(line, " "); String[] tokens = new String[whiteSpaceTokenizer.countTokens()]; if (tokens.length > 0) { int tokenIndex = 0; while (whiteSpaceTokenizer.hasMoreTokens()) { tokens[tokenIndex++] = whiteSpaceTokenizer.nextToken(); } dictionary.put(new StringList(tokens)); } } return dictionary; } /** * Converts this {@link Dictionary} to a {@link Set}. *

* Note: Only {@link AbstractSet#iterator()}, {@link AbstractSet#size()} and * {@link AbstractSet#contains(Object)} methods are implemented. *

* If this dictionary entries are multi tokens only the first token of the * entry will be part of the {@link Set}. * * @return A {@link Set} containing all entries of this {@link Dictionary}. */ public Set asStringSet() { return new AbstractSet<>() { @Override public Iterator iterator() { final Iterator entries = entrySet.iterator(); return new Iterator<>() { @Override public boolean hasNext() { return entries.hasNext(); } @Override public String next() { return entries.next().getToken(0); } @Override public void remove() { throw new UnsupportedOperationException(); } }; } @Override public int size() { return entrySet.size(); } @Override public boolean contains(Object obj) { boolean result = false; if (obj instanceof String str) { result = entrySet.contains(new StringList(isCaseSensitive, str)); } return result; } @Override public boolean equals(Object o) { if (! (o instanceof Set)) { return false; } Set toCheck = (Set) o; if (entrySet.size() != toCheck.size()) { return false; } Iterator toCheckIter = toCheck.iterator(); for (StringList entry : entrySet) { if (isCaseSensitive) { if (!entry.equals(new StringList(true, toCheckIter.next()))) { return false; } } else { if (!entry.compareToIgnoreCase(new StringList(false, toCheckIter.next()))) { return false; } } } return true; } @Override public int hashCode() { return entrySet.hashCode(); } }; } /** * @return Retrieves the serializer class for {@link Dictionary} * * @see DictionarySerializer */ @Override public Class getArtifactSerializerClass() { return DictionarySerializer.class; } /** * @return {@code true}, if this {@link Dictionary} is case-sensitive. */ public boolean isCaseSensitive() { return isCaseSensitive; } private StringList applyCaseSensitivity(StringList list) { if (isCaseSensitive) { return list.toCaseSensitive(); } else { return list.toCaseInsensitive(); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/dictionary/Index.java0100644 0000000 0000000 00000003637 14523004075 031705 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.dictionary; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import opennlp.tools.util.StringList; /** * This classes indexes {@link StringList string lists}. This makes it possible * to check if a certain token is contained in at least one of the * {@link StringList}s. */ public class Index { private final Set tokens = new HashSet<>(); /** * Initializes an {@link Index} with the given {@link Iterator} * over {@link StringList} elements. * * @param tokenLists The iterable {@link StringList} elements. */ public Index(Iterator tokenLists) { while (tokenLists.hasNext()) { StringList tokens = tokenLists.next(); for (int i = 0; i < tokens.size(); i++) { this.tokens.add(tokens.getToken(i)); } } } /** * Checks if at least one {@link StringList} contains the specified {@code token}. * * @param token The element to check for. * * @return {@code true} if the token is contained, {@code false} otherwise. */ public boolean contains(String token) { return tokens.contains(token); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/dictionary/package-info.java0100644 0000000 0000000 00000001604 14523004075 033152 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package related to parsing and storing dictionaries. */ package opennlp.tools.dictionary; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_dictionary_serial0100644 0000000 0000000 00000000162 14523004075 032652 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/dictionary/serializer/Attributes.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/dictionary/serializer/Attributes.0100644 0000000 0000000 00000004263 14523004075 034267 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.dictionary.serializer; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Objects; /** * The {@link Attributes} class stores name value pairs. *

* Problem: If a {@link HashMap} is used storing name-value pairs this results * in a very high memory footprint, replace it. */ public class Attributes { private final Map mNameValueMap = new HashMap<>(); /** * Retrieves the value for the given key or {@code null} if attribute it not set. * * @param key The key to get the desired value for. * * @return The value for the given key or {@code null} */ public String getValue(String key) { return mNameValueMap.get(key); } /** * Sets a key/value pair. * * @param key The key that uniquely identifies the specified {@code value}. * Must not be {@code null}. * @param value The value that shall be retrievable via its {@code key}. * Must not be {@code null}. */ public void setValue(String key, String value) { Objects.requireNonNull(key, "key must not be null"); Objects.requireNonNull(value, "value must not be null"); mNameValueMap.put(key, value); } /** * Iterates over the keys. * * @return Retrieves a key-based {@link Iterator}. */ public Iterator iterator() { return mNameValueMap.keySet().iterator(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_dictionary_serial0100644 0000000 0000000 00000000200 14523004075 032643 xustar000000000 0000000 128 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/dictionary/serializer/DictionaryEntryPersistor.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/dictionary/serializer/DictionaryE0100644 0000000 0000000 00000024024 14523004075 034272 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.dictionary.serializer; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.StandardCharsets; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParserFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.stream.StreamResult; import org.xml.sax.ContentHandler; import org.xml.sax.InputSource; import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.AttributesImpl; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.StringList; import opennlp.tools.util.model.UncloseableInputStream; /** * A persistor used by for reading and writing {@link Dictionary dictionaries} * of all kinds. * * @see Dictionary */ public class DictionaryEntryPersistor { private static final SAXParserFactory SAX_PARSER_FACTORY = SAXParserFactory.newInstance(); private static final String SAX_FEATURE_NAMESPACES = "http://xml.org/sax/features/namespaces"; // TODO: should check for invalid format, make it save private static class DictionaryContenthandler implements ContentHandler { private final EntryInserter mInserter; private boolean mIsInsideTokenElement; private boolean mIsCaseSensitiveDictionary; private final List mTokenList = new LinkedList<>(); private final StringBuilder token = new StringBuilder(); private Attributes mAttributes; private DictionaryContenthandler(EntryInserter inserter) { mInserter = inserter; mIsCaseSensitiveDictionary = true; } /** * Not implemented. */ @Override public void processingInstruction(String target, String data) throws SAXException { } /** * Not implemented. */ @Override public void startDocument() throws SAXException { } @Override public void startElement(String uri, String localName, String qName, org.xml.sax.Attributes atts) throws SAXException { if (DICTIONARY_ELEMENT.equals(localName)) { mAttributes = new Attributes(); for (int i = 0; i < atts.getLength(); i++) { mAttributes.setValue(atts.getLocalName(i), atts.getValue(i)); } /* get the attribute here ... */ if (mAttributes.getValue(ATTRIBUTE_CASE_SENSITIVE) != null) { mIsCaseSensitiveDictionary = Boolean.parseBoolean(mAttributes.getValue(ATTRIBUTE_CASE_SENSITIVE)); } mAttributes = null; } else if (ENTRY_ELEMENT.equals(localName)) { mAttributes = new Attributes(); for (int i = 0; i < atts.getLength(); i++) { mAttributes.setValue(atts.getLocalName(i), atts.getValue(i)); } } else if (TOKEN_ELEMENT.equals(localName)) { mIsInsideTokenElement = true; } } @Override public void characters(char[] ch, int start, int length) throws SAXException { if (mIsInsideTokenElement) { token.append(ch, start, length); } } /** * Creates the Profile object after processing is complete * and switches mIsInsideNgramElement flag. */ @Override public void endElement(String uri, String localName, String qName) throws SAXException { if (TOKEN_ELEMENT.equals(localName)) { mTokenList.add(token.toString().trim()); token.setLength(0); mIsInsideTokenElement = false; } else if (ENTRY_ELEMENT.equals(localName)) { String[] tokens = mTokenList.toArray( new String[0]); Entry entry = new Entry(new StringList(tokens), mAttributes); try { mInserter.insert(entry); } catch (InvalidFormatException e) { throw new SAXException("Invalid dictionary format!", e); } mTokenList.clear(); mAttributes = null; } } /** * Not implemented. */ @Override public void endDocument() throws SAXException { } /** * Not implemented. */ @Override public void endPrefixMapping(String prefix) throws SAXException { } /** * Not implemented. */ @Override public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { } /** * Not implemented. */ @Override public void setDocumentLocator(Locator locator) { } /** * Not implemented. */ @Override public void skippedEntity(String name) throws SAXException { } /** * Not implemented. */ @Override public void startPrefixMapping(String prefix, String uri) throws SAXException { } } private static final String DICTIONARY_ELEMENT = "dictionary"; private static final String ENTRY_ELEMENT = "entry"; private static final String TOKEN_ELEMENT = "token"; private static final String ATTRIBUTE_CASE_SENSITIVE = "case_sensitive"; /** * Creates {@link Entry}s from the given {@link InputStream} and * forwards these {@link Entry}s to the {@link EntryInserter}. *

* Note: * After creation is finished the provided {@link InputStream} is closed. * * @param in The open {@link InputStream} to read entries from. * @param inserter inserter to forward entries to * * @return The {@code isCaseSensitive} attribute of a {@link Dictionary}. * * @throws IOException Thrown if IO errors occurred. * @throws InvalidFormatException Thrown if parameters were invalid. */ public static boolean create(InputStream in, EntryInserter inserter) throws IOException { DictionaryContenthandler profileContentHandler = new DictionaryContenthandler(inserter); XMLReader xmlReader; try { xmlReader = SAX_PARSER_FACTORY.newSAXParser().getXMLReader(); // Note: // There is a compatibility problem here: JAXP default is false while SAX 2 default is true! // OpenNLP requires it activated! xmlReader.setFeature(SAX_FEATURE_NAMESPACES, true); xmlReader.setContentHandler(profileContentHandler); xmlReader.parse(new InputSource(new UncloseableInputStream(in))); } catch (ParserConfigurationException | SAXException e) { throw new InvalidFormatException("The profile data stream has " + "an invalid format!", e); } return profileContentHandler.mIsCaseSensitiveDictionary; } /** * Serializes the given entries to the given {@link OutputStream}. *

* Note: * After the serialization is finished the provided * {@link OutputStream} remains open. * * @param out The {@link OutputStream} to serialize to. * @param entries The {@link Entry entries} to serialize. * @param casesensitive Indicates if the written dictionary should be * case-sensitive, or not. * * @throws IOException Thrown if IO errors occurred. * @throws InvalidFormatException Thrown if parameters were invalid. */ public static void serialize(OutputStream out, Iterator entries, boolean casesensitive) throws IOException { StreamResult streamResult = new StreamResult(out); SAXTransformerFactory tf = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); TransformerHandler hd; try { hd = tf.newTransformerHandler(); } catch (TransformerConfigurationException e) { throw new InvalidFormatException("The Transformer configuration must be valid!"); } Transformer serializer = hd.getTransformer(); serializer.setOutputProperty(OutputKeys.ENCODING, StandardCharsets.UTF_8.name()); serializer.setOutputProperty(OutputKeys.INDENT, "yes"); hd.setResult(streamResult); try { hd.startDocument(); AttributesImpl dictionaryAttributes = new AttributesImpl(); dictionaryAttributes.addAttribute("", "", ATTRIBUTE_CASE_SENSITIVE, "", String.valueOf(casesensitive)); hd.startElement("", "", DICTIONARY_ELEMENT, dictionaryAttributes); while (entries.hasNext()) { Entry entry = entries.next(); serializeEntry(hd, entry); } hd.endElement("", "", DICTIONARY_ELEMENT); hd.endDocument(); } catch (SAXException e) { throw new IOException("Error during serialization: " + e.getMessage(), e); } } private static void serializeEntry(TransformerHandler hd, Entry entry) throws SAXException { AttributesImpl entryAttributes = new AttributesImpl(); for (Iterator it = entry.attributes().iterator(); it.hasNext();) { String key = it.next(); entryAttributes.addAttribute("", "", key, "", entry.attributes().getValue(key)); } hd.startElement("", "", ENTRY_ELEMENT, entryAttributes); StringList tokens = entry.tokens(); for (String token : tokens) { hd.startElement("", "", TOKEN_ELEMENT, new AttributesImpl()); hd.characters(token.toCharArray(), 0, token.length()); hd.endElement("", "", TOKEN_ELEMENT); } hd.endElement("", "", ENTRY_ELEMENT); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/dictionary/serializer/Entry.java0100644 0000000 0000000 00000002564 14523004075 034106 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.dictionary.serializer; import opennlp.tools.util.StringList; /** * An {@link Entry} is a {@link StringList} which can * optionally be mapped to attributes. *

* {@link Entry entries} are read and written by the {@link DictionaryEntryPersistor}. * * @see DictionaryEntryPersistor * @see Attributes */ public record Entry(StringList tokens, Attributes attributes) { @Deprecated(forRemoval = true) public StringList getTokens() { return tokens; } @Deprecated(forRemoval = true) public Attributes getAttributes() { return attributes; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_dictionary_serial0100644 0000000 0000000 00000000165 14523004075 032655 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/dictionary/serializer/EntryInserter.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/dictionary/serializer/EntryInsert0100644 0000000 0000000 00000002207 14523004075 034345 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.dictionary.serializer; import opennlp.tools.util.InvalidFormatException; public interface EntryInserter { /** * @param entry The {@link Entry} to insert. * * @throws InvalidFormatException Thrown if the {@code entry} has an invalid format. */ void insert(Entry entry) throws InvalidFormatException; } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_doccat_BagOfWords0100644 0000000 0000000 00000000163 14523004075 032461 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/BagOfWordsFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/BagOfWordsFeatureGenerator0100644 0000000 0000000 00000004156 14523004075 034163 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import java.util.ArrayList; import java.util.Collection; import java.util.Map; import java.util.Objects; import opennlp.tools.util.featuregen.StringPattern; /** * Generates a feature for each word in a document. */ public class BagOfWordsFeatureGenerator implements FeatureGenerator { private final boolean useOnlyAllLetterTokens; /** * Instantiates a default {@link BagOfWordsFeatureGenerator} instance. */ public BagOfWordsFeatureGenerator() { this(false); } /** * Instantiates a {@link BagOfWordsFeatureGenerator} instance. * * @param useOnlyAllLetterTokens Whether to use only all-letter tokens, or not. */ BagOfWordsFeatureGenerator(boolean useOnlyAllLetterTokens) { this.useOnlyAllLetterTokens = useOnlyAllLetterTokens; } @Override public Collection extractFeatures(String[] text, Map extraInformation) { Objects.requireNonNull(text, "text must not be null"); Collection bagOfWords = new ArrayList<>(text.length); for (String word : text) { if (useOnlyAllLetterTokens) { StringPattern pattern = StringPattern.recognize(word); if (pattern.isAllLetter()) bagOfWords.add("bow=" + word); } else { bagOfWords.add("bow=" + word); } } return bagOfWords; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/DoccatCrossValidator.java0100644 0000000 0000000 00000006775 14523004075 034011 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import java.io.IOException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.eval.CrossValidationPartitioner; import opennlp.tools.util.eval.Mean; /** * Cross validator for {@link DocumentCategorizer}. */ public class DoccatCrossValidator { private final String languageCode; private final TrainingParameters params; private final Mean documentAccuracy = new Mean(); private final DoccatEvaluationMonitor[] listeners; private final DoccatFactory factory; /** * Instantiates a {@link DoccatCrossValidator} with the * given {@link FeatureGenerator generators}. * * @param languageCode An ISO conform language code. * @param mlParams The {@link TrainingParameters} for the context of cross validation. * @param factory The {@link DoccatFactory} for creating related objects. * @param listeners the {@link DoccatEvaluationMonitor evaluation listeners}. */ public DoccatCrossValidator(String languageCode, TrainingParameters mlParams, DoccatFactory factory, DoccatEvaluationMonitor ... listeners) { this.languageCode = languageCode; this.params = mlParams; this.listeners = listeners; this.factory = factory; } /** * Starts the evaluation. * * @param samples The {@link ObjectStream} of {@link DocumentSample samples} to train and test with. * @param nFolds Number of folds. It must be greater than zero. * * @throws IOException Thrown if IO errors occurred. */ public void evaluate(ObjectStream samples, int nFolds) throws IOException { CrossValidationPartitioner partitioner = new CrossValidationPartitioner<>( samples, nFolds); while (partitioner.hasNext()) { CrossValidationPartitioner.TrainingSampleStream trainingSampleStream = partitioner .next(); DoccatModel model = DocumentCategorizerME.train(languageCode, trainingSampleStream, params, factory); DocumentCategorizerEvaluator evaluator = new DocumentCategorizerEvaluator( new DocumentCategorizerME(model), listeners); evaluator.evaluate(trainingSampleStream.getTestSampleStream()); documentAccuracy.add(evaluator.getAccuracy(), evaluator.getDocumentCount()); } } /** * @return Retrieves the accuracy for all iterations. */ public double getDocumentAccuracy() { return documentAccuracy.mean(); } /** * @return Retrieves the number of words which where validated over all iterations. * The result is the amount of folds multiplied by the total number of words. */ public long getDocumentCount() { return documentAccuracy.count(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_doccat_DoccatEval0100644 0000000 0000000 00000000160 14523004075 032466 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/DoccatEvaluationMonitor.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/DoccatEvaluationMonitor.ja0100644 0000000 0000000 00000002041 14523004075 034160 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import opennlp.tools.util.eval.EvaluationMonitor; /** * A marker interface for evaluating {@link DocumentCategorizer doccat}. */ public interface DoccatEvaluationMonitor extends EvaluationMonitor { } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/DoccatFactory.java0100644 0000000 0000000 00000012156 14523004075 032447 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Map; import opennlp.tools.util.BaseToolFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.ext.ExtensionLoader; /** * The factory that provides Doccat default implementations and resources. */ public class DoccatFactory extends BaseToolFactory { private static final String FEATURE_GENERATORS = "doccat.featureGenerators"; private FeatureGenerator[] featureGenerators; /** * Instantiates a {@link DoccatFactory} that provides the default implementation of * the resources. */ public DoccatFactory() {} /** * Instantiates a {@link DoccatFactory} that provides the default implementation of * the resources. * * @param featureGenerators The {@link FeatureGenerator featureGenerators} to use. */ public DoccatFactory(final FeatureGenerator[] featureGenerators) { init(featureGenerators); } protected void init(FeatureGenerator[] featureGenerators) { this.featureGenerators = featureGenerators; } @Override public Map createManifestEntries() { Map manifestEntries = super.createManifestEntries(); if (getFeatureGenerators() != null) { manifestEntries.put(FEATURE_GENERATORS, featureGeneratorsAsString()); } return manifestEntries; } private String featureGeneratorsAsString() { List fgs = Arrays.asList(getFeatureGenerators()); Iterator iter = fgs.iterator(); StringBuilder sb = new StringBuilder(); if (iter.hasNext()) { sb.append(iter.next().getClass().getCanonicalName()); while (iter.hasNext()) { sb.append(',').append(iter.next().getClass().getCanonicalName()); } } return sb.toString(); } @Override public void validateArtifactMap() throws InvalidFormatException { // nothing to validate } /** * Factory method the framework uses create a new {@link DoccatFactory}. * * @param subclassName The name of the class implementing the {@link DoccatFactory}. * @param featureGenerators The {@link FeatureGenerator featureGenerators} to use. * * @return A valid {@link DoccatFactory} instance. * * @throws InvalidFormatException Thrown if the {@link ExtensionLoader} mechanism failed to * create the factory associated with {@code subclassName}. */ public static DoccatFactory create(String subclassName, FeatureGenerator[] featureGenerators) throws InvalidFormatException { if (subclassName == null) { // will create the default factory return new DoccatFactory(featureGenerators); } try { DoccatFactory theFactory = ExtensionLoader.instantiateExtension( DoccatFactory.class, subclassName); theFactory.init(featureGenerators); return theFactory; } catch (Exception e) { String msg = "Could not instantiate the " + subclassName + ". The initialization threw an exception."; throw new InvalidFormatException(msg, e); } } private FeatureGenerator[] loadFeatureGenerators(String classNames) { String[] classes = classNames.split(","); FeatureGenerator[] fgs = new FeatureGenerator[classes.length]; for (int i = 0; i < classes.length; i++) { fgs[i] = ExtensionLoader.instantiateExtension(FeatureGenerator.class, classes[i]); } return fgs; } /** * @return Retrieves the {@link FeatureGenerator generators} used. */ public FeatureGenerator[] getFeatureGenerators() { if (featureGenerators == null) { if (artifactProvider != null) { String classNames = artifactProvider .getManifestProperty(FEATURE_GENERATORS); if (classNames != null) { this.featureGenerators = loadFeatureGenerators(classNames); } } if (featureGenerators == null) { // could not load using artifact provider // load bag of words as default this.featureGenerators = new FeatureGenerator[]{new BagOfWordsFeatureGenerator()}; } } return featureGenerators; } /** * @param featureGenerators The {@link FeatureGenerator featureGenerators} to use. */ public void setFeatureGenerators(FeatureGenerator[] featureGenerators) { this.featureGenerators = featureGenerators; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/DoccatModel.java0100644 0000000 0000000 00000010106 14523004075 032071 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.file.Path; import java.util.Map; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.util.BaseToolFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.model.BaseModel; /** * A model for document categorization */ public class DoccatModel extends BaseModel { private static final String COMPONENT_NAME = "DocumentCategorizerME"; private static final String DOCCAT_MODEL_ENTRY_NAME = "doccat.model"; /** * Initializes a {@link DoccatModel} instance via given parameters. * * @param languageCode An ISO conform language code. * @param doccatModel A valid {@link MaxentModel} to be used. * @param manifestInfoEntries Additional information kept in the manifest. * @param factory The {@link DoccatFactory} to be used. */ public DoccatModel(String languageCode, MaxentModel doccatModel, Map manifestInfoEntries, DoccatFactory factory) { super(COMPONENT_NAME, languageCode, manifestInfoEntries, factory); artifactMap.put(DOCCAT_MODEL_ENTRY_NAME, doccatModel); checkArtifactMap(); } /** * Initializes a {@link DoccatModel} instance via a valid {@link InputStream}. * * @param in The {@link InputStream} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public DoccatModel(InputStream in) throws IOException { super(COMPONENT_NAME, in); } /** * Initializes a {@link DoccatModel} instance via a valid {@link File}. * * @param modelFile The {@link File} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public DoccatModel(File modelFile) throws IOException { super(COMPONENT_NAME, modelFile); } /** * Initializes a {@link DoccatModel} instance via a valid {@link Path}. * * @param modelPath The {@link Path} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public DoccatModel(Path modelPath) throws IOException { this(modelPath.toFile()); } /** * Initializes a {@link DoccatModel} instance via a valid {@link URL}. * * @param modelURL The {@link URL} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public DoccatModel(URL modelURL) throws IOException { super(COMPONENT_NAME, modelURL); } @Override protected void validateArtifactMap() throws InvalidFormatException { super.validateArtifactMap(); if (!(artifactMap.get(DOCCAT_MODEL_ENTRY_NAME) instanceof AbstractModel)) { throw new InvalidFormatException("Doccat model is incomplete!"); } } /** * @return Retrieves the active {@link DoccatFactory}. */ public DoccatFactory getFactory() { return (DoccatFactory) this.toolFactory; } @Override protected Class getDefaultFactory() { return DoccatFactory.class; } /** * @return Retrieves the active {@link MaxentModel}. */ public MaxentModel getMaxentModel() { return (MaxentModel) artifactMap.get(DOCCAT_MODEL_ENTRY_NAME); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/DocumentCategorizer.java0100644 0000000 0000000 00000006406 14523004075 033700 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import java.util.Map; import java.util.Set; import java.util.SortedMap; /** * Interface for classes which categorize documents. */ public interface DocumentCategorizer { /** * Categorizes the given {@code text} provided as tokens along with * the provided {@code extraInformation}. * * @param text The tokens of text to categorize. * @param extraInformation The extra information used for this context. * @return The per category probabilities. */ double[] categorize(String[] text, Map extraInformation); /** * Categorizes the given {@code text}, provided in separate tokens. * * @param text The tokens of text to categorize. * @return The per category probabilities. */ double[] categorize(String[] text); /** * Retrieves the best category from previously generated {@code outcome} probabilities * * @param outcome An array of computed outcome probabilities. * @return The best category represented as String. */ String getBestCategory(double[] outcome); /** * Retrieves the index of a certain category. * * @param category The category for which the {@code index} is to be found. * @return The index. */ int getIndex(String category); /** * Retrieves the category at a given {@code index}. * * @param index The index for which the {@code category} shall be found. * @return The category represented as String. */ String getCategory(int index); /** * Retrieves the number of categories. * * @return The no. of categories. */ int getNumberOfCategories(); /** * Retrieves the name of the category associated with the given probabilities. * * @param results The probabilities of each category. * @return The name of the outcome. */ String getAllResults(double[] results); /** * Retrieves a {@link Map} in which the key is the category name and the value is the score. * * @param text The tokenized input text to classify. * @return A {@link Map} with the score as a key. */ Map scoreMap(String[] text); /** * Retrieves a {@link SortedMap} of the scores sorted in ascending order, * together with their associated categories. *

* Many categories can have the same score, hence the {@link Set} as value. * * @param text the input text to classify * @return A {@link SortedMap} with the score as a key. */ SortedMap> sortedScoreMap(String[] text); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_doccat_DocumentCa0100644 0000000 0000000 00000000174 14523004075 032510 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/DocumentCategorizerContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/DocumentCategorizerContext0100644 0000000 0000000 00000003446 14523004075 034326 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import java.util.Collection; import java.util.LinkedList; import java.util.Map; /** * Context generator for {@link DocumentCategorizer}. * * @see DocumentCategorizer */ class DocumentCategorizerContextGenerator { private final FeatureGenerator[] mFeatureGenerators; /** * Instantiates a {@link DocumentCategorizerContextGenerator} instance. * * @param featureGenerators The {@link FeatureGenerator featureGenerators} to use. */ DocumentCategorizerContextGenerator(FeatureGenerator... featureGenerators) { mFeatureGenerators = featureGenerators; } public String[] getContext(String[] text, Map extraInformation) { Collection context = new LinkedList<>(); for (FeatureGenerator mFeatureGenerator : mFeatureGenerators) { Collection extractedFeatures = mFeatureGenerator.extractFeatures(text, extraInformation); context.addAll(extractedFeatures); } return context.toArray(new String[0]); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_doccat_DocumentCa0100644 0000000 0000000 00000000165 14523004075 032510 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/DocumentCategorizerEvaluator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/DocumentCategorizerEvaluat0100644 0000000 0000000 00000006003 14523004075 034273 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.eval.Evaluator; import opennlp.tools.util.eval.Mean; /** * The {@link DocumentCategorizerEvaluator} measures the performance of * the given {@link DocumentCategorizer} with the provided reference * {@link DocumentSample samples}. * * @see DocumentCategorizer * @see DocumentSample * @see Evaluator */ public class DocumentCategorizerEvaluator extends Evaluator { private final DocumentCategorizer categorizer; private final Mean accuracy = new Mean(); /** * Initializes a {@link DocumentCategorizerEvaluator} instance. * * @param categorizer the {@link DocumentCategorizer} instance. * @param listeners the {@link DoccatEvaluationMonitor evaluation listeners}. */ public DocumentCategorizerEvaluator(DocumentCategorizer categorizer, DoccatEvaluationMonitor ... listeners) { super(listeners); this.categorizer = categorizer; } /** * Evaluates the given reference {@link DocumentSample sample}. *

* This is done by categorizing the document from the provided * {@link DocumentSample}. The detected category is then used * to calculate and update the score. * * @param sample The reference {@link TokenSample}. * @return The processed {@link TokenSample}. */ public DocumentSample processSample(DocumentSample sample) { String[] document = sample.getText(); double[] probs = categorizer.categorize(document); String cat = categorizer.getBestCategory(probs); if (sample.getCategory().equals(cat)) { accuracy.add(1); } else { accuracy.add(0); } return new DocumentSample(cat, sample.getText()); } /** * {@code accuracy = correctly categorized documents / total documents} * * @return Retrieves the accuracy of provided {@link DocumentCategorizer}. */ public double getAccuracy() { return accuracy.mean(); } public long getDocumentCount() { return accuracy.count(); } /** * Represents this object as human-readable {@link String}. */ @Override public String toString() { return "Accuracy: " + accuracy.mean() + "\n" + "Number of documents: " + accuracy.count(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_doccat_DocumentCa0100644 0000000 0000000 00000000167 14523004075 032512 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/DocumentCategorizerEventStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/DocumentCategorizerEventSt0100644 0000000 0000000 00000005274 14523004075 034273 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import java.util.Iterator; import opennlp.tools.ml.model.Event; import opennlp.tools.util.AbstractEventStream; import opennlp.tools.util.ObjectStream; /** * Iterator-like class for modeling document classification events. */ public class DocumentCategorizerEventStream extends AbstractEventStream { private final DocumentCategorizerContextGenerator mContextGenerator; /** * Initializes a {@link DocumentCategorizerEventStream} via samples and * {@link FeatureGenerator feature generators}. * * @param samples {@link ObjectStream} of {@link DocumentSample samples}. * @param featureGenerators One or more {@link FeatureGenerator} to use. */ public DocumentCategorizerEventStream(ObjectStream samples, FeatureGenerator... featureGenerators) { super(samples); mContextGenerator = new DocumentCategorizerContextGenerator(featureGenerators); } /** * Initializes a {@link DocumentCategorizerEventStream} via samples. * {@link BagOfWordsFeatureGenerator} is used as feature generator. * * @param samples {@link ObjectStream} of {@link DocumentSample samples}. */ public DocumentCategorizerEventStream(ObjectStream samples) { super(samples); mContextGenerator = new DocumentCategorizerContextGenerator(new BagOfWordsFeatureGenerator()); } @Override protected Iterator createEvents(final DocumentSample sample) { return new Iterator<>() { private boolean isVirgin = true; @Override public boolean hasNext() { return isVirgin; } @Override public Event next() { isVirgin = false; return new Event(sample.getCategory(), mContextGenerator.getContext(sample.getText(), sample.getExtraInformation())); } public void remove() { throw new UnsupportedOperationException(); } }; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_doccat_DocumentCa0100644 0000000 0000000 00000000156 14523004075 032510 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/DocumentCategorizerME.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/DocumentCategorizerME.java0100644 0000000 0000000 00000012211 14523004075 034111 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; /** * A Max-Ent based implementation of {@link DocumentCategorizer}. */ public class DocumentCategorizerME implements DocumentCategorizer { private final DoccatModel model; private final DocumentCategorizerContextGenerator mContextGenerator; /** * Initializes a {@link DocumentCategorizerME} instance with a doccat model. * Default feature generation is used. * * @param model the {@link DoccatModel} to be used for categorization. */ public DocumentCategorizerME(DoccatModel model) { this.model = model; this.mContextGenerator = new DocumentCategorizerContextGenerator(this.model .getFactory().getFeatureGenerators()); } /** * Categorize the given {@code text} provided as tokens along with * the provided extra information. * * @param text The text tokens to categorize. * @param extraInformation Additional information for context to be used by the feature generator. * @return The per category probabilities. */ @Override public double[] categorize(String[] text, Map extraInformation) { return model.getMaxentModel().eval( mContextGenerator.getContext(text, extraInformation)); } @Override public double[] categorize(String[] text) { return this.categorize(text, Collections.emptyMap()); } @Override public Map scoreMap(String[] text) { Map probDist = new HashMap<>(); double[] categorize = categorize(text); int catSize = getNumberOfCategories(); for (int i = 0; i < catSize; i++) { String category = getCategory(i); probDist.put(category, categorize[getIndex(category)]); } return probDist; } @Override public SortedMap> sortedScoreMap(String[] text) { SortedMap> descendingMap = new TreeMap<>(); double[] categorize = categorize(text); int catSize = getNumberOfCategories(); for (int i = 0; i < catSize; i++) { String category = getCategory(i); double score = categorize[getIndex(category)]; if (descendingMap.containsKey(score)) { descendingMap.get(score).add(category); } else { Set newset = new HashSet<>(); newset.add(category); descendingMap.put(score, newset); } } return descendingMap; } @Override public String getBestCategory(double[] outcome) { return model.getMaxentModel().getBestOutcome(outcome); } @Override public int getIndex(String category) { return model.getMaxentModel().getIndex(category); } @Override public String getCategory(int index) { return model.getMaxentModel().getOutcome(index); } @Override public int getNumberOfCategories() { return model.getMaxentModel().getNumOutcomes(); } @Override public String getAllResults(double[] results) { return model.getMaxentModel().getAllOutcomes(results); } /** * Starts a training of a {@link DoccatModel} with the given parameters. * * @param lang The ISO conform language code. * @param samples The {@link ObjectStream} of {@link DocumentSample} used as input for training. * @param mlParams The {@link TrainingParameters} for the context of the training. * @param factory The {@link DoccatFactory} for creating related objects defined via {@code mlParams}. * * @return A valid, trained {@link DoccatModel} instance. * @throws IOException Thrown if IO errors occurred. */ public static DoccatModel train(String lang, ObjectStream samples, TrainingParameters mlParams, DoccatFactory factory) throws IOException { Map manifestInfoEntries = new HashMap<>(); EventTrainer trainer = TrainerFactory.getEventTrainer( mlParams, manifestInfoEntries); MaxentModel model = trainer.train( new DocumentCategorizerEventStream(samples, factory.getFeatureGenerators())); return new DoccatModel(lang, model, manifestInfoEntries, factory); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/DocumentSample.java0100644 0000000 0000000 00000007020 14523004075 032634 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; import opennlp.tools.commons.Sample; /** * Class which holds a classified document and its category. */ public class DocumentSample implements Sample { private static final long serialVersionUID = -1775688015002177141L; private final String category; private final List text; private final Map extraInformation; /** * Initializes a {@link DocumentSample instance}. * * @param category The category to be used. Must not be {@code null}. * @param text The plain text in a tokenized form. Must not be {@code null}. */ public DocumentSample(String category, String[] text) { this(category, text, null); } /** * Initializes a {@link DocumentSample instance}. * * @param category The category to be used.Must not be {@code null}. * @param text The plain text in a tokenized form. Must not be {@code null}. * @param extraInformation Additional information for context. */ public DocumentSample(String category, String[] text, Map extraInformation) { Objects.requireNonNull(text, "text must not be null"); this.category = Objects.requireNonNull(category, "category must not be null"); this.text = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(text))); if (extraInformation == null) { this.extraInformation = Collections.emptyMap(); } else { this.extraInformation = extraInformation; } } /** * @return Retrieves the category. */ public String getCategory() { return category; } /** * @return Retrieves the text in a tokenized form. */ public String[] getText() { return text.toArray(new String[0]); } /** * @return Retrieves contextual extra information. */ public Map getExtraInformation() { return extraInformation; } @Override public String toString() { StringBuilder sampleString = new StringBuilder(); sampleString.append(category).append('\t'); for (String s : text) { sampleString.append(s).append(' '); } if (sampleString.length() > 0) { // remove last space sampleString.setLength(sampleString.length() - 1); } return sampleString.toString(); } @Override public int hashCode() { return Objects.hash(getCategory(), Arrays.hashCode(getText())); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof DocumentSample a) { return getCategory().equals(a.getCategory()) && Arrays.equals(getText(), a.getText()); } return false; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/DocumentSampleStream.java0100644 0000000 0000000 00000004647 14523004075 034024 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import java.io.IOException; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; /** * Reads in string encoded training samples, parses them and * outputs {@link DocumentSample} objects. *

* Format:
* Each line contains one sample document.
* The category is the first string in the line followed by a tab and whitespace * separated document tokens. *

* Sample line: * {@code category-string tab-char whitespace-separated-tokens line-break-char(s)} * * @see DocumentSample */ public class DocumentSampleStream extends FilterObjectStream { /** * Initializes a {@link DocumentSampleStream instance}. * * @param samples A plain text {@link ObjectStream line stream}. */ public DocumentSampleStream(ObjectStream samples) { super(samples); } @Override public DocumentSample read() throws IOException { String sampleString = samples.read(); if (sampleString != null) { // Whitespace tokenize entire string String[] tokens = WhitespaceTokenizer.INSTANCE.tokenize(sampleString); DocumentSample sample; if (tokens.length > 1) { String category = tokens[0]; String[] docTokens = new String[tokens.length - 1]; System.arraycopy(tokens, 1, docTokens, 0, tokens.length - 1); sample = new DocumentSample(category, docTokens); } else { throw new IOException("Empty lines, or lines with only a category string are not allowed!"); } return sample; } return null; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/FeatureGenerator.java0100644 0000000 0000000 00000002541 14523004075 033161 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import java.util.Collection; import java.util.Map; /** * Interface for generating features for document categorization. */ public interface FeatureGenerator { /** * Extracts features from given {@code text} fragments. * * @param text The text fragments to extract features from * @param extraInformation Optional extra information to be used by the {@link FeatureGenerator}. * @return A collection of features. */ Collection extractFeatures(String[] text, Map extraInformation); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_doccat_NGramFeatu0100644 0000000 0000000 00000000156 14523004075 032457 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/NGramFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/NGramFeatureGenerator.java0100644 0000000 0000000 00000005745 14523004075 034117 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Objects; import opennlp.tools.util.InvalidFormatException; /** * Generates ngram features for a document. * * @see FeatureGenerator */ public class NGramFeatureGenerator implements FeatureGenerator { private final int minGram; private final int maxGram; /** * Instantiates an {@link NGramFeatureGenerator} instance with configurable ngram parameters. * * @param minGram The minimum words in ngram features. * @param maxGram The maximum words in ngram features. * @throws InvalidFormatException Thrown if parameter values are invalid or inconsistent. */ public NGramFeatureGenerator(int minGram, int maxGram) throws InvalidFormatException { if (minGram > 0 && maxGram > 0) { if (minGram <= maxGram) { this.minGram = minGram; this.maxGram = maxGram; } else { throw new InvalidFormatException( "Minimum range value (minGram) should be less than or equal to maximum range value (maxGram)!"); } } else { throw new InvalidFormatException("Both minimum range value (minGram) & maximum " + "range value (maxGram) should be greater than or equal to 1!"); } } /** * Instantiates an {@link NGramFeatureGenerator} instance with a Bi grams config. * * @throws InvalidFormatException Thrown if parameter values are invalid or inconsistent. */ public NGramFeatureGenerator() throws InvalidFormatException { this(2, 2); } @Override public Collection extractFeatures(String[] text, Map extraInfo) { Objects.requireNonNull(text, "text must not be null"); List features = new ArrayList<>(); for (int i = 0; i <= text.length - minGram; i++) { final StringBuilder sb = new StringBuilder(); sb.append("ng="); for (int y = 0; y < maxGram && i + y < text.length; y++) { sb.append(":"); sb.append(text[i + y]); int gramCount = y + 1; if (maxGram >= gramCount && gramCount >= minGram) { features.add(sb.toString()); } } } return features; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/doccat/package-info.java0100644 0000000 0000000 00000001577 14523004075 032253 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package for classifying a document into a category. */ package opennlp.tools.doccat; apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/entitylinker/BaseLink.java0100644 0000000 0000000 00000006672 14523004075 032704 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.entitylinker; import java.util.HashMap; import java.util.Map; import java.util.Objects; /** * Represents a minimal tuple of information. * Intended to be used with {@link LinkedSpan}. * * @see EntityLinker * @see LinkedSpan */ public abstract class BaseLink { private String itemParentID; private String itemID; private String itemName; private String itemType; private Map scoreMap = new HashMap<>(); public BaseLink(String itemParentID, String itemID, String itemName, String itemType) { this.itemParentID = itemParentID; this.itemID = itemID; this.itemName = itemName; this.itemType = itemType; } public String getItemParentID() { return itemParentID; } /** * @param itemParentID The parent ID of the linked item */ public void setItemParentID(String itemParentID) { this.itemParentID = itemParentID; } public String getItemID() { return itemID; } /** * @param itemID This field can store, for example, the primary key of * a now in an external/linked data source. */ public void setItemID(String itemID) { this.itemID = itemID; } public String getItemName() { return itemName; } /** * @param itemName An item name can be the native name (often a normalized * version of something) from an external linked data source. */ public void setItemName(String itemName) { this.itemName = itemName; } public String getItemType() { return itemType; } /** * * @param itemType An item type can be the native type from an external * linked database. For instance, a product type or code. */ public void setItemType(String itemType) { this.itemType = itemType; } public Map getScoreMap() { return scoreMap; } public void setScoreMap(Map scoreMap) { this.scoreMap = scoreMap; } @Override public String toString() { return "\tBaseLink" + "\n\titemParentID=" + itemParentID + ", \n\titemID=" + itemID + ", \n\titemName=" + itemName + ", \n\titemType=" + itemType + ", \n\tscoreMap=" + scoreMap + "\n"; } @Override public int hashCode() { return Objects.hash(itemParentID, itemID, itemName, itemType); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof BaseLink other) { return Objects.equals(itemParentID, other.itemParentID) && Objects.equals(itemID, other.itemID) && Objects.equals(itemName, other.itemName) && Objects.equals(itemType, other.itemType); } return false; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/entitylinker/EntityLinker.java0100644 0000000 0000000 00000012003 14523004075 033616 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.entitylinker; import java.io.IOException; import java.util.List; import opennlp.tools.util.Span; /** * EntityLinkers establish connections with external data to enrich extracted * entities. *

* For instance, for Location entities a linker can be developed to * look up each found location in a geonames gazetteer. Another example may be to * find peoples' names and look them up in a database or active directory. * Intended to return n best matches for any given search, but can also be * implemented as deterministic. * * @param A type that extends {@link Span}. {@link LinkedSpan} and {@link BaseLink} * are available to provide this signature. Use: * {@link EntityLinker}<LinkedSpan<BaseLink>> as a default. */ public interface EntityLinker { /** * Initializes an {@link EntityLinker} and allows for passing properties * through the {@link EntityLinkerFactory} into all impls dynamically. *

* {@link EntityLinker} impls should initialize reusable objects * used by the impl in this method. If this is done, any errors will be * captured and thrown by the {@link EntityLinkerFactory}. * * @param initializationData The {@link EntityLinkerProperties} that contains * properties needed by the impl, as well as any * other objects required. * @throws IOException Thrown if IO errors occurred. */ void init(EntityLinkerProperties initializationData) throws IOException; /** * Links an entire document of named entities to an external source. * * @param doctext The full text of the document. * @param sentences An array of {@link Span sentence spans}. * @param tokensBySentence An array of {@link Span tokens spans} that correspond to * each sentence. The outer array refers to the sentence, the inner * array is the tokens for the outer sentence. Similar * in nature to Map of SentenceIndex keys to List of * tokens as values. * @param namesBySentence An array of {@link Span name spans} that correspond to each * sentence. The outer array refers to the sentence, * the inner array refers to the tokens that for the * same sentence. Similar in nature to * Map<SentenceIndex,List<Name Spans For This * Sentence's Tokens>> @ return. * * @return A list of {@link T} instances. */ List find(String doctext, Span[] sentences, Span[][] tokensBySentence, Span[][] namesBySentence); /** * Links the names that correspond to the tokens[] spans. The {@code sentenceIndex} * can be used to get the sentence text and tokens from the text based on the * sentence and token spans. The text is available for additional context. * * @param doctext The full text of the document. * @param sentences An array of {@link Span sentence spans}. * @param tokensBySentence An array of {@link Span tokens spans} that correspond to each * sentence. The outer array refers to the sentence, the inner * array is the tokens for the outer sentence. Similar * in nature to Map of SentenceIndex keys to List of * tokens as values. * @param namesBySentence An array of {@link Span name spans} that correspond to each * sentence. The outer array refers to the sentence, * the inner array refers to the tokens that for the * same sentence. Similar in nature to * Map<SentenceIndex,List<Name Spans For This * Sentence's Tokens>> @ return. * @param sentenceIndex The index to the sentence span that the {@code tokensBySentence} * corresponds to. * * @return A list of {@link T} instances. */ List find(String doctext, Span[] sentences, Span[][] tokensBySentence, Span[][] namesBySentence, int sentenceIndex); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_entitylinker_Enti0100644 0000000 0000000 00000000162 14523004075 032646 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/entitylinker/EntityLinkerFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/entitylinker/EntityLinkerFactory.0100644 0000000 0000000 00000010075 14523004075 034313 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.entitylinker; import java.io.IOException; import java.util.Objects; import opennlp.tools.util.ext.ExtensionLoader; /** * Generates a {@link EntityLinker} instances via a {@code properties} file configuration. *

* In the properties file, the linker implementation must be * provided using {@code "linker"} as the properties key, and the * full class name as value. */ public class EntityLinkerFactory { /** * Retrieves a {@link EntityLinker} instance matching the {@code properties} configuration. * * @param entityType The type of entity being linked to. This value is used to * retrieve the implementation of the {@link EntityLinker} from the * {@link EntityLinker} properties file. * Must not be {@code null}. * @param properties An object that extends {@link EntityLinkerProperties}. * This object will be passed into the * {@link EntityLinker#init(EntityLinkerProperties)} method, * so it is an appropriate place to put additional resources. * Must not be {@code null}. * * @return The {@link EntityLinker} instance for the {@code properties} configuration. * @throws IOException Thrown if IO errors occurred. * @throws IllegalArgumentException Thrown if parameters were invalid. */ public static synchronized EntityLinker getLinker(String entityType, EntityLinkerProperties properties) throws IOException { if (entityType == null || properties == null) { throw new IllegalArgumentException("Null argument in entityLinkerFactory"); } String linkerImplFullName = properties.getProperty("linker." + entityType, ""); if (linkerImplFullName == null || linkerImplFullName.equals("")) { throw new IllegalArgumentException("linker." + entityType + " property must be set!"); } EntityLinker linker = ExtensionLoader.instantiateExtension(EntityLinker.class, linkerImplFullName); linker.init(properties); return linker; } /** * Retrieves a {@link EntityLinker} instance matching the {@code properties} configuration. * * @param properties An object that extends {@link EntityLinkerProperties}. * This object will be passed into the * {@link EntityLinker#init(EntityLinkerProperties)} method, * so it is an appropriate place to put additional resources. * Must not be {@code null}. * * @return The {@link EntityLinker} instance for the {@code properties} configuration. * @throws IOException Thrown if IO errors occurred. * @throws IllegalArgumentException Thrown if parameters were invalid. */ public static synchronized EntityLinker getLinker(EntityLinkerProperties properties) throws IOException { Objects.requireNonNull(properties, "properties argument must not be null"); String linkerImplFullName = properties.getProperty("linker", ""); if (linkerImplFullName == null || linkerImplFullName.equals("")) { throw new IllegalArgumentException("\"linker\" property must be set!"); } EntityLinker linker = ExtensionLoader.instantiateExtension(EntityLinker.class, linkerImplFullName); linker.init(properties); return linker; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_entitylinker_Enti0100644 0000000 0000000 00000000165 14523004075 032651 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/entitylinker/EntityLinkerProperties.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/entitylinker/EntityLinkerProperti0100644 0000000 0000000 00000005557 14523004075 034443 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.entitylinker; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * Properties wrapper for {@link EntityLinker} implementations. * * @see EntityLinkerFactory */ public class EntityLinkerProperties { private Properties props; /** * Initializes {@link EntityLinkerProperties} via a {@link File} reference. * * @param propertiesFile The {@link File} that references the {@code *.properties} * configuration. * * @throws IOException Thrown if IO errors occurred. */ public EntityLinkerProperties(File propertiesFile) throws IOException { try (InputStream stream = new BufferedInputStream(new FileInputStream(propertiesFile))) { init(stream); } } /** * Initializes {@link EntityLinkerProperties} via a {@link InputStream} reference. * * @param propertiesIn The {@link InputStream} that references the {@code *.properties} * configuration. * * @throws IOException Thrown if IO errors occurred. */ public EntityLinkerProperties(InputStream propertiesIn) throws IOException { init(propertiesIn); } private void init(InputStream propertiesIn) throws IOException { props = new Properties(); props.load(propertiesIn); } /** * Retrieves a property value for a given {@code key}. * * @param key The key to the desired item in the properties configuration * {@code key=value} * @param defaultValue A default value in case the {@code key}, or the value are * missing * @return A property value as a {@link String}. * @throws IOException Thrown if the properties object was not initialized properly. */ public String getProperty(String key, String defaultValue) throws IOException { if (props != null) { return props.getProperty(key, defaultValue); } else { throw new IOException("EntityLinkerProperties was not successfully initialized"); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/entitylinker/LinkedSpan.java0100644 0000000 0000000 00000014173 14523004075 033237 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.entitylinker; import java.util.ArrayList; import java.util.Objects; import opennlp.tools.util.Span; /** * A default, extended {@link Span} that holds additional information about a {@link Span}. * * @param The generic type that specializes a {@link BaseLink}. */ public class LinkedSpan extends Span { private ArrayList linkedEntries; private int sentenceid = 0; private String searchTerm; /** * Initializes a new {@link LinkedSpan}. Sets the prob to {@code 0} as default. * * @param linkedEntries The {@code n} best linked entries from * an external data source. * @param s The start position of a {@link Span}. * Must be equal to or greater than {@code 0}. * Must not be greater than {@code e}. * @param e The end position of a {@link Span}, which is {@code +1} * more than the last element in the span. * Must be equal to or greater than {@code 0}. * @param type The type of the span. * * @throws IllegalArgumentException Thrown if given parameters are invalid. */ public LinkedSpan(ArrayList linkedEntries, int s, int e, String type) { this(linkedEntries, s, e, type, 0d); } /** * Initializes a new {@link LinkedSpan}. * * @param linkedEntries The {@code n} best linked entries from * an external data source. * @param s The start position of a {@link Span}. * Must be equal to or greater than {@code 0}. * Must not be greater than {@code e}. * @param e The end position of a {@link Span}, which is {@code +1} * more than the last element in the span. * Must be equal to or greater than {@code 0}. * @param type The type of the span. * @param prob The probability of the {@link Span}. * * @throws IllegalArgumentException Thrown if given parameters are invalid. */ public LinkedSpan(ArrayList linkedEntries, int s, int e, String type, double prob) { super(s, e, type, prob); this.linkedEntries = linkedEntries; } /** * Initializes a new {@link LinkedSpan}. * * @param linkedEntries The {@code n} best linked entries from * an external data source. * @param s The start position of a {@link Span}. * Must be equal to or greater than {@code 0}. * Must not be greater than {@code e}. * @param e The end position of a {@link Span}, which is {@code +1} * more than the last element in the span. * Must be equal to or greater than {@code 0}. * * @throws IllegalArgumentException Thrown if given parameters are invalid. */ public LinkedSpan(ArrayList linkedEntries, int s, int e) { super(s, e); this.linkedEntries = linkedEntries; } /** * Initializes a new {@link LinkedSpan} via an existing {@link Span} * which is shifted by the specified {@code offset}. * * @param linkedEntries The {@code n} best linked entries from * an external data source. * @param span The existing {@link Span}. * @param offset The positive or negative shift offset. * * @throws IllegalArgumentException Thrown if given parameters are invalid. */ public LinkedSpan(ArrayList linkedEntries, Span span, int offset) { super(span, offset); this.linkedEntries = linkedEntries; } /** * @return Retrieves the {@code n} best linked entries from an external data source. * For instance, this will hold gazetteer entries for a search into a geonames * gazetteer. */ public ArrayList getLinkedEntries() { return linkedEntries; } /** * @param linkedEntries The {@code n} best linked entries from an external data source. * For instance, this will hold gazetteer entries for a search * into a geonames gazetteer. */ public void setLinkedEntries(ArrayList linkedEntries) { this.linkedEntries = linkedEntries; } /** * @return Retrieves the id or index of the sentence from which this span was extracted. */ public int getSentenceid() { return sentenceid; } /** * @param sentenceid The id or index of the sentence from which this span was extracted. */ public void setSentenceid(int sentenceid) { this.sentenceid = sentenceid; } /** * @return Retrieves the search term that was used to link this span to an external data * source. */ public String getSearchTerm() { return searchTerm; } /** * @param searchTerm The search term that is used to link this span to an external data * source. */ public void setSearchTerm(String searchTerm) { this.searchTerm = searchTerm; } @Override public String toString() { return "LinkedSpan\nsentenceid=" + sentenceid + "\nsearchTerm=" + searchTerm + "\nlinkedEntries=\n" + linkedEntries + "\n"; } @Override public int hashCode() { return Objects.hash(linkedEntries, sentenceid, searchTerm); } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (obj instanceof LinkedSpan other) { return Objects.equals(this.linkedEntries, other.linkedEntries) && this.sentenceid == other.sentenceid && Objects.equals(this.searchTerm, other.searchTerm); } return false; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/entitylinker/package-info.java0100644 0000000 0000000 00000001617 14523004075 033532 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package related to linking entities to external data sources. */ package opennlp.tools.entitylinker; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_AbstractS0100644 0000000 0000000 00000000165 14523004075 032572 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/AbstractSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/AbstractSampleStreamFacto0100644 0000000 0000000 00000002435 14523004075 034255 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import opennlp.tools.cmdline.ObjectStreamFactory; /** * Base class for sample stream factories. */ public abstract class AbstractSampleStreamFactory implements ObjectStreamFactory { protected Class

params; private AbstractSampleStreamFactory() { } protected AbstractSampleStreamFactory(Class

params) { this.params = params; } public String getLang() { return "eng"; } public Class

getParameters() { return params; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_BioNLP2000100644 0000000 0000000 00000000164 14523004075 032210 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/BioNLP2004NameSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/BioNLP2004NameSampleStrea0100644 0000000 0000000 00000014222 14523004075 033547 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import opennlp.tools.commons.Internal; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; import opennlp.tools.util.StringUtil; /** * A {@link ObjectStream sample stream} for the training files of the * BioNLP/NLPBA 2004 shared task. *

* The data contains five named entity types: *

    *
  • {@code DNA}
  • *
  • {@code RNA}
  • *
  • {@code protein}
  • *
  • {@code cell_type}
  • *
  • {@code cell_line}
  • *
*

* Data can be found on this * website, * or in * this repository. *

* The BioNLP/NLPBA 2004 data were originally published here: *

* * http://www-tsujii.is.s.u-tokyo.ac.jp/GENIA/ERtask/report.html, *

* yet this page was gone when last checked in December 2022. *

* It looks like this repo contains a copy of the data located on the original page: * The BioNLP 2004 seems to be related to http://www.geniaproject.org/shared-tasks/bionlp-jnlpba-shared-task-2004 *

* Note: * Do not use this class, internal use only! */ @Internal public class BioNLP2004NameSampleStream implements ObjectStream { public static final int GENERATE_DNA_ENTITIES = 0x01; public static final int GENERATE_PROTEIN_ENTITIES = 0x01 << 1; public static final int GENERATE_CELLTYPE_ENTITIES = 0x01 << 2; public static final int GENERATE_CELLLINE_ENTITIES = 0x01 << 3; public static final int GENERATE_RNA_ENTITIES = 0x01 << 4; private final int types; private final ObjectStream lineStream; /** * Initializes a {@link BioNLP2004NameSampleStream}. * * @param in The {@link InputStreamFactory} to use. * @param types The types to use. * * @throws IOException Thrown if IO errors occurred during initialization. */ public BioNLP2004NameSampleStream(InputStreamFactory in, int types) throws IOException { this.lineStream = new PlainTextByLineStream(in, StandardCharsets.UTF_8); this.types = types; } @Override public NameSample read() throws IOException { List sentence = new ArrayList<>(); List tags = new ArrayList<>(); boolean isClearAdaptiveData = false; // Empty line indicates end of sentence String line; while ((line = lineStream.read()) != null && !StringUtil.isEmpty(line.trim())) { if (line.startsWith("###MEDLINE:")) { isClearAdaptiveData = true; lineStream.read(); continue; } if (line.contains("ABSTRACT TRUNCATED")) continue; String[] fields = line.split("\t"); if (fields.length == 2) { sentence.add(fields[0]); tags.add(fields[1]); } else { throw new IOException("Expected two fields per line in training data, got " + fields.length + " for line '" + line + "'!"); } } if (sentence.size() > 0) { // convert name tags into spans List names = new ArrayList<>(); int beginIndex = -1; int endIndex = -1; for (int i = 0; i < tags.size(); i++) { String tag = tags.get(i); if (tag.endsWith("DNA") && (types & GENERATE_DNA_ENTITIES) == 0) tag = "O"; if (tag.endsWith("protein") && (types & GENERATE_PROTEIN_ENTITIES) == 0) tag = "O"; if (tag.endsWith("cell_type") && (types & GENERATE_CELLTYPE_ENTITIES) == 0) tag = "O"; if (tag.endsWith("cell_line") && (types & GENERATE_CELLTYPE_ENTITIES) == 0) tag = "O"; if (tag.endsWith("RNA") && (types & GENERATE_RNA_ENTITIES) == 0) tag = "O"; if (tag.startsWith("B-")) { if (beginIndex != -1) { names.add(new Span(beginIndex, endIndex, tags.get(beginIndex).substring(2))); beginIndex = -1; endIndex = -1; } beginIndex = i; endIndex = i + 1; } else if (tag.startsWith("I-")) { endIndex++; } else if (tag.equals("O")) { if (beginIndex != -1) { names.add(new Span(beginIndex, endIndex, tags.get(beginIndex).substring(2))); beginIndex = -1; endIndex = -1; } } else { throw new IOException("Invalid tag: " + tag); } } // if one span remains, create it here if (beginIndex != -1) names.add(new Span(beginIndex, endIndex, tags.get(beginIndex).substring(2))); return new NameSample(sentence.toArray(new String[0]), names.toArray(new Span[0]), isClearAdaptiveData); } else if (line != null) { // Just filter out empty events, if two lines in a row are empty return read(); } else { // source stream is not returning anymore lines return null; } } @Override public void reset() throws IOException, UnsupportedOperationException { lineStream.reset(); } @Override public void close() throws IOException { lineStream.close(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_BioNLP2000100644 0000000 0000000 00000000173 14523004075 032210 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/BioNLP2004NameSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/BioNLP2004NameSampleStrea0100644 0000000 0000000 00000005665 14523004075 033562 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.ObjectStream; /** * @see BioNLP2004NameSampleStream */ public class BioNLP2004NameSampleStreamFactory

extends AbstractSampleStreamFactory { interface Parameters extends BasicFormatParams { @ParameterDescription(valueName = "DNA,protein,cell_type,cell_line,RNA") String getTypes(); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(NameSample.class, "bionlp2004", new BioNLP2004NameSampleStreamFactory<>(Parameters.class)); } protected BioNLP2004NameSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); int typesToGenerate = 0; if (params.getTypes().contains("DNA")) { typesToGenerate = typesToGenerate | BioNLP2004NameSampleStream.GENERATE_DNA_ENTITIES; } else if (params.getTypes().contains("protein")) { typesToGenerate = typesToGenerate | BioNLP2004NameSampleStream.GENERATE_PROTEIN_ENTITIES; } else if (params.getTypes().contains("cell_type")) { typesToGenerate = typesToGenerate | BioNLP2004NameSampleStream.GENERATE_CELLTYPE_ENTITIES; } else if (params.getTypes().contains("cell_line")) { typesToGenerate = typesToGenerate | BioNLP2004NameSampleStream.GENERATE_CELLLINE_ENTITIES; } else if (params.getTypes().contains("RNA")) { typesToGenerate = typesToGenerate | BioNLP2004NameSampleStream.GENERATE_RNA_ENTITIES; } try { return new BioNLP2004NameSampleStream( CmdLineUtil.createInputStreamFactory(params.getData()), typesToGenerate); } catch (IOException e) { throw new IllegalStateException(e); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ChunkerSa0100644 0000000 0000000 00000000164 14523004075 032566 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ChunkerSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ChunkerSampleStreamFactor0100644 0000000 0000000 00000004500 14523004075 034266 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import opennlp.tools.chunker.ChunkSample; import opennlp.tools.chunker.ChunkSampleStream; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; /** * Factory producing OpenNLP {@link ChunkSampleStream}s. */ public class ChunkerSampleStreamFactory

extends AbstractSampleStreamFactory { interface Parameters extends BasicFormatParams { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(ChunkSample.class, StreamFactoryRegistry.DEFAULT_FORMAT, new ChunkerSampleStreamFactory<>(Parameters.class)); } protected ChunkerSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); CmdLineUtil.checkInputFile("Data", params.getData()); InputStreamFactory sampleDataIn = CmdLineUtil.createInputStreamFactory(params.getData()); ObjectStream lineStream = null; try { lineStream = new PlainTextByLineStream(sampleDataIn, params.getEncoding()); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } return new ChunkSampleStream(lineStream); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_Conll02Na0100644 0000000 0000000 00000000161 14523004075 032370 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/Conll02NameSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/Conll02NameSampleStream.j0100644 0000000 0000000 00000016636 14523004075 034007 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import opennlp.tools.commons.Internal; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; import opennlp.tools.util.StringUtil; /** * Parser for the Dutch and Spanish ner training files of the CONLL 2002 shared task. *

* The Dutch data has a {@link #DOCSTART} tag to mark article boundaries, * adaptive data in the feature generators will be cleared before every article.
* The Spanish data does not contain article boundaries, * adaptive data will be cleared for every sentence. *

* The data contains four named entity types: Person, Organization, Location and Misc.
*

* Data can be found on this * web site. *

* Note: * Do not use this class, internal use only! */ @Internal public class Conll02NameSampleStream implements ObjectStream { public enum LANGUAGE { NLD, SPA } public static final int GENERATE_PERSON_ENTITIES = 0x01; public static final int GENERATE_ORGANIZATION_ENTITIES = 0x01 << 1; public static final int GENERATE_LOCATION_ENTITIES = 0x01 << 2; public static final int GENERATE_MISC_ENTITIES = 0x01 << 3; public static final String DOCSTART = "-DOCSTART-"; private final LANGUAGE lang; private final ObjectStream lineStream; private final int types; /** * Initializes a {@link Conll02NameSampleStream}. * * @param lang The language of the CONLL 02 data. * @param lineStream An {@link ObjectStream} over the lines * in the CONLL 02 data file. * @param types The entity types to include in the Name Sample object stream. */ public Conll02NameSampleStream(LANGUAGE lang, ObjectStream lineStream, int types) { this.lang = lang; this.lineStream = lineStream; this.types = types; } /** * Initializes a {@link Conll02NameSampleStream}. * * @param lang The language of the CONLL 02 data. * @param in The {@link InputStreamFactory} for the input file. * @param types The entity types to include in the Name Sample object stream. * * @throws IOException Thrown if IO errors occurred. */ public Conll02NameSampleStream(LANGUAGE lang, InputStreamFactory in, int types) throws IOException { /* * NOTE: KEEP this encoding here! The original CONLL 2002 data is provided as: ISO_8859_1. */ this (lang, new PlainTextByLineStream(in, StandardCharsets.ISO_8859_1), types); /* * If related files are (incorrectly) interpreted as 'UTF-8' without prior conversion of * the train/test files, then á, é, ñ,.. will be misinterpreted during processing and in * resulting outcomes, e.g. produced via TokenNameFinderConverter. * * As a consequence, users of related tooling (OpenNLP Doc: CONLL 2002) will thus suffer * from corrupted intermediate files, as an out-of the box experience. * * Details see: https://issues.apache.org/jira/browse/OPENNLP-1512 */ } static Span extract(int begin, int end, String beginTag) throws InvalidFormatException { String type = beginTag.substring(2); switch (type) { case "PER": type = "person"; break; case "LOC": type = "location"; break; case "MISC": type = "misc"; break; case "ORG": type = "organization"; break; default: throw new InvalidFormatException("Unknown type: " + type); } return new Span(begin, end, type); } @Override public NameSample read() throws IOException { List sentence = new ArrayList<>(); List tags = new ArrayList<>(); boolean isClearAdaptiveData = false; // Empty line indicates end of sentence String line; while ((line = lineStream.read()) != null && !StringUtil.isEmpty(line)) { if (LANGUAGE.NLD.equals(lang) && line.startsWith(DOCSTART)) { isClearAdaptiveData = true; continue; } String[] fields = line.split(" "); if (fields.length == 3) { sentence.add(fields[0]); tags.add(fields[2]); } else { throw new IOException("Expected three fields per line in training data, got " + fields.length + " for line '" + line + "'!"); } } // Always clear adaptive data for spanish if (LANGUAGE.SPA.equals(lang)) isClearAdaptiveData = true; if (sentence.size() > 0) { // convert name tags into spans List names = new ArrayList<>(); int beginIndex = -1; int endIndex = -1; for (int i = 0; i < tags.size(); i++) { String tag = tags.get(i); if (tag.endsWith("PER") && (types & GENERATE_PERSON_ENTITIES) == 0) tag = "O"; if (tag.endsWith("ORG") && (types & GENERATE_ORGANIZATION_ENTITIES) == 0) tag = "O"; if (tag.endsWith("LOC") && (types & GENERATE_LOCATION_ENTITIES) == 0) tag = "O"; if (tag.endsWith("MISC") && (types & GENERATE_MISC_ENTITIES) == 0) tag = "O"; if (tag.startsWith("B-")) { if (beginIndex != -1) { names.add(extract(beginIndex, endIndex, tags.get(beginIndex))); beginIndex = -1; endIndex = -1; } beginIndex = i; endIndex = i + 1; } else if (tag.startsWith("I-")) { endIndex++; } else if (tag.equals("O")) { if (beginIndex != -1) { names.add(extract(beginIndex, endIndex, tags.get(beginIndex))); beginIndex = -1; endIndex = -1; } } else { throw new IOException("Invalid tag: " + tag); } } // if one span remains, create it here if (beginIndex != -1) names.add(extract(beginIndex, endIndex, tags.get(beginIndex))); return new NameSample(sentence.toArray(new String[0]), names.toArray(new Span[0]), isClearAdaptiveData); } else if (line != null) { // Just filter out empty events, if two lines in a row are empty return read(); } else { // source stream is not returning anymore lines return null; } } @Override public void reset() throws IOException, UnsupportedOperationException { lineStream.reset(); } @Override public void close() throws IOException { lineStream.close(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_Conll02Na0100644 0000000 0000000 00000000170 14523004075 032370 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/Conll02NameSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/Conll02NameSampleStreamFa0100644 0000000 0000000 00000006651 14523004075 034022 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.commons.Internal; import opennlp.tools.formats.Conll02NameSampleStream.LANGUAGE; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! * * @see Conll02NameSampleStream */ @Internal public class Conll02NameSampleStreamFactory

extends LanguageSampleStreamFactory { interface Parameters extends BasicFormatParams { @ParameterDescription(valueName = "spa|nld") String getLang(); @ParameterDescription(valueName = "per,loc,org,misc") String getTypes(); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(NameSample.class, "conll02", new Conll02NameSampleStreamFactory<>(Parameters.class)); } protected Conll02NameSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); LANGUAGE lang; if ("nl".equals(params.getLang()) || "nld".equals(params.getLang())) { lang = LANGUAGE.NLD; language = params.getLang(); } else if ("es".equals(params.getLang()) || "spa".equals(params.getLang())) { lang = LANGUAGE.SPA; language = params.getLang(); } else { throw new TerminateToolException(1, "Unsupported language: " + params.getLang()); } int typesToGenerate = 0; if (params.getTypes().contains("per")) { typesToGenerate = typesToGenerate | Conll02NameSampleStream.GENERATE_PERSON_ENTITIES; } if (params.getTypes().contains("org")) { typesToGenerate = typesToGenerate | Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES; } if (params.getTypes().contains("loc")) { typesToGenerate = typesToGenerate | Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES; } if (params.getTypes().contains("misc")) { typesToGenerate = typesToGenerate | Conll02NameSampleStream.GENERATE_MISC_ENTITIES; } try { return new Conll02NameSampleStream(lang, CmdLineUtil.createInputStreamFactory(params.getData()), typesToGenerate); } catch (IOException e) { throw CmdLineUtil.createObjectStreamError(e); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_Conll03Na0100644 0000000 0000000 00000000161 14523004075 032371 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/Conll03NameSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/Conll03NameSampleStream.j0100644 0000000 0000000 00000014714 14523004075 034003 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; import opennlp.tools.util.StringUtil; /** * An import stream which can parse the CONLL03 data. */ public class Conll03NameSampleStream implements ObjectStream { public enum LANGUAGE { EN, DE } private final LANGUAGE lang; private final ObjectStream lineStream; private final int types; /** * Initializes a {@link Conll03NameSampleStream}. * * @param lang The language of the CONLL 03 data. * @param lineStream An {@link ObjectStream} over the lines * in the CONLL 03 data file. * @param types The entity types to include in the Name Sample object stream. */ public Conll03NameSampleStream(LANGUAGE lang, ObjectStream lineStream, int types) { this.lang = lang; this.lineStream = lineStream; this.types = types; } /** * Initializes a {@link Conll03NameSampleStream}. * * @param lang The language of the CONLL 03 data. * @param in The {@link InputStreamFactory} for the input file. * @param types The entity types to include in the Name Sample object stream. * * @throws IOException Thrown if IO errors occurred. */ public Conll03NameSampleStream(LANGUAGE lang, InputStreamFactory in, int types) throws IOException { this(lang, new PlainTextByLineStream(in, StandardCharsets.UTF_8), types); } @Override public NameSample read() throws IOException { List sentence = new ArrayList<>(); List tags = new ArrayList<>(); boolean isClearAdaptiveData = false; // Empty line indicates end of sentence String line; while ((line = lineStream.read()) != null && !StringUtil.isEmpty(line)) { if (line.startsWith(Conll02NameSampleStream.DOCSTART)) { isClearAdaptiveData = true; String emptyLine = lineStream.read(); if (!StringUtil.isEmpty(emptyLine)) throw new IOException("Empty line after -DOCSTART- not empty: '" + emptyLine + "'!"); continue; } String[] fields = line.split(" "); // For English: WORD POS-TAG SC-TAG NE-TAG if (LANGUAGE.EN.equals(lang) && fields.length == 4) { sentence.add(fields[0]); tags.add(fields[3]); // 3 is NE-TAG } // For German: WORD LEMA-TAG POS-TAG SC-TAG NE-TAG else if (LANGUAGE.DE.equals(lang) && fields.length == 5) { sentence.add(fields[0]); tags.add(fields[4]); // 4 is NE-TAG } else { throw new IOException("Incorrect number of fields per line for language: '" + line + "'!"); } } if (sentence.size() > 0) { // convert name tags into spans List names = new ArrayList<>(); int beginIndex = -1; int endIndex = -1; for (int i = 0; i < tags.size(); i++) { String tag = tags.get(i); if (tag.endsWith("PER") && (types & Conll02NameSampleStream.GENERATE_PERSON_ENTITIES) == 0) tag = "O"; if (tag.endsWith("ORG") && (types & Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES) == 0) tag = "O"; if (tag.endsWith("LOC") && (types & Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES) == 0) tag = "O"; if (tag.endsWith("MISC") && (types & Conll02NameSampleStream.GENERATE_MISC_ENTITIES) == 0) tag = "O"; if (tag.equals("O")) { // O means we don't have anything this round. if (beginIndex != -1) { names.add(Conll02NameSampleStream.extract(beginIndex, endIndex, tags.get(beginIndex))); beginIndex = -1; endIndex = -1; } } else if (tag.startsWith("B-")) { // B- prefix means we have two same entities next to each other if (beginIndex != -1) { names.add(Conll02NameSampleStream.extract(beginIndex, endIndex, tags.get(beginIndex))); } beginIndex = i; endIndex = i + 1; } else if (tag.startsWith("I-")) { // I- starts or continues a current name entity if (beginIndex == -1) { beginIndex = i; endIndex = i + 1; } else if (!tag.endsWith(tags.get(beginIndex).substring(1))) { // we have a new tag type following a tagged word series // also may not have the same I- starting the previous! names.add(Conll02NameSampleStream.extract(beginIndex, endIndex, tags.get(beginIndex))); beginIndex = i; endIndex = i + 1; } else { endIndex ++; } } else { throw new IOException("Invalid tag: " + tag); } } // if one span remains, create it here if (beginIndex != -1) names.add(Conll02NameSampleStream.extract(beginIndex, endIndex, tags.get(beginIndex))); return new NameSample(sentence.toArray(new String[0]), names.toArray(new Span[0]), isClearAdaptiveData); } else if (line != null) { // Just filter out empty events, if two lines in a row are empty return read(); } else { // source stream is not returning anymore lines return null; } } @Override public void reset() throws IOException, UnsupportedOperationException { lineStream.reset(); } @Override public void close() throws IOException { lineStream.close(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_Conll03Na0100644 0000000 0000000 00000000170 14523004075 032371 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/Conll03NameSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/Conll03NameSampleStreamFa0100644 0000000 0000000 00000006455 14523004075 034025 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.formats.Conll03NameSampleStream.LANGUAGE; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.ObjectStream; /** * @see Conll03NameSampleStream */ public class Conll03NameSampleStreamFactory

extends LanguageSampleStreamFactory { interface Parameters extends BasicFormatParams { @ParameterDescription(valueName = "eng|deu") String getLang(); @ParameterDescription(valueName = "per,loc,org,misc") String getTypes(); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(NameSample.class, "conll03", new Conll03NameSampleStreamFactory<>(Parameters.class)); } protected Conll03NameSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); // TODO: support the other languages with this CoNLL. LANGUAGE lang; if ("eng".equals(params.getLang())) { lang = LANGUAGE.EN; language = params.getLang(); } else if ("deu".equals(params.getLang())) { lang = LANGUAGE.DE; language = params.getLang(); } else { throw new TerminateToolException(1, "Unsupported language: " + params.getLang()); } int typesToGenerate = 0; if (params.getTypes().contains("per")) { typesToGenerate = typesToGenerate | Conll02NameSampleStream.GENERATE_PERSON_ENTITIES; } if (params.getTypes().contains("org")) { typesToGenerate = typesToGenerate | Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES; } if (params.getTypes().contains("loc")) { typesToGenerate = typesToGenerate | Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES; } if (params.getTypes().contains("misc")) { typesToGenerate = typesToGenerate | Conll02NameSampleStream.GENERATE_MISC_ENTITIES; } try { return new Conll03NameSampleStream(lang, CmdLineUtil.createInputStreamFactory(params.getData()), typesToGenerate); } catch (IOException e) { throw CmdLineUtil.createObjectStreamError(e); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ConllXPOS0100644 0000000 0000000 00000000157 14523004075 032466 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ConllXPOSSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ConllXPOSSampleStream.jav0100644 0000000 0000000 00000007347 14523004075 034104 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import opennlp.tools.commons.Internal; import opennlp.tools.postag.POSSample; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ParagraphStream; import opennlp.tools.util.PlainTextByLineStream; /** * Parses the data from the CONLL 06 shared task into POS Samples. *

* More information about the data format can be found * here. *

* Note: * Do not use this class, internal use only! */ @Internal public class ConllXPOSSampleStream extends FilterObjectStream { /** * Initializes a {@link ConllXPOSSampleStream}. * * @param lineStream A {@link ObjectStream line stream} representing the input. */ public ConllXPOSSampleStream(ObjectStream lineStream) { super(new ParagraphStream(lineStream)); } /** * Initializes a {@link ConllXPOSSampleStream}. * * @param in The {@link InputStreamFactory} to use. * @param charset The {@link Charset} to interpret characters with. * * @throws IOException Thrown if IO errors occurred during initialization. */ public ConllXPOSSampleStream(InputStreamFactory in, Charset charset) throws IOException { super(new ParagraphStream(new PlainTextByLineStream(in, charset))); } @Override public POSSample read() throws IOException { // The CONLL-X data has a word per line and each line is tab separated // in the following format: // ID, FORM, LEMMA, CPOSTAG, POSTAG, ... (max 10 fields) // One paragraph contains a whole sentence and, the token // and tag will be read from the FORM and POSTAG field. String paragraph = samples.read(); POSSample sample = null; if (paragraph != null) { // paragraph get lines BufferedReader reader = new BufferedReader(new StringReader(paragraph)); List tokens = new ArrayList<>(100); List tags = new ArrayList<>(100); String line; while ((line = reader.readLine()) != null) { final int minNumberOfFields = 5; String[] parts = line.split("\t"); if (parts.length >= minNumberOfFields) { tokens.add(parts[1]); tags.add(parts[4]); } else { throw new InvalidFormatException("Every non-empty line must have at least " + minNumberOfFields + " fields: '" + line + "'!"); } } // just skip empty samples and read next sample if (tokens.size() == 0) sample = read(); sample = new POSSample(tokens.toArray(new String[0]), tags.toArray(new String[0])); } return sample; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ConllXPOS0100644 0000000 0000000 00000000166 14523004075 032466 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ConllXPOSSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ConllXPOSSampleStreamFact0100644 0000000 0000000 00000005062 14523004075 034113 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.commons.Internal; import opennlp.tools.postag.POSSample; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! * * @see ConllXPOSSampleStream */ @Internal public class ConllXPOSSampleStreamFactory

extends AbstractSampleStreamFactory { public static final String CONLLX_FORMAT = "conllx"; interface Parameters extends BasicFormatParams { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(POSSample.class, CONLLX_FORMAT, new ConllXPOSSampleStreamFactory<>(Parameters.class)); } protected ConllXPOSSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); InputStreamFactory inFactory = CmdLineUtil.createInputStreamFactory(params.getData()); try { return new ConllXPOSSampleStream(inFactory, StandardCharsets.UTF_8); } catch (UnsupportedEncodingException e) { // this shouldn't happen throw new TerminateToolException(-1, "UTF-8 encoding is not supported: " + e.getMessage(), e); } catch (IOException e) { // That will throw an exception CmdLineUtil.handleCreateObjectStreamError(e); return null; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ConllXSen0100644 0000000 0000000 00000000173 14523004075 032550 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ConllXSentenceSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ConllXSentenceSampleStrea0100644 0000000 0000000 00000004465 14523004075 034251 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.DetokenizerParameter; import opennlp.tools.commons.Internal; import opennlp.tools.formats.convert.POSToSentenceSampleStream; import opennlp.tools.postag.POSSample; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! */ @Internal public class ConllXSentenceSampleStreamFactory

extends DetokenizerSampleStreamFactory { interface Parameters extends ConllXPOSSampleStreamFactory.Parameters, DetokenizerParameter { // TODO: make chunk size configurable } public static void registerFactory() { StreamFactoryRegistry.registerFactory(SentenceSample.class, ConllXPOSSampleStreamFactory.CONLLX_FORMAT, new ConllXSentenceSampleStreamFactory<>(Parameters.class)); } protected ConllXSentenceSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); ObjectStream posSampleStream = StreamFactoryRegistry.getFactory(POSSample.class, ConllXPOSSampleStreamFactory.CONLLX_FORMAT).create( ArgumentParser.filter(args, ConllXPOSSampleStreamFactory.Parameters.class)); return new POSToSentenceSampleStream(createDetokenizer(params), posSampleStream, 30); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ConllXTok0100644 0000000 0000000 00000000170 14523004075 032555 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ConllXTokenSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ConllXTokenSampleStreamFa0100644 0000000 0000000 00000004316 14523004075 034204 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.DetokenizerParameter; import opennlp.tools.commons.Internal; import opennlp.tools.formats.convert.POSToTokenSampleStream; import opennlp.tools.postag.POSSample; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! */ @Internal public class ConllXTokenSampleStreamFactory

extends DetokenizerSampleStreamFactory { interface Parameters extends ConllXPOSSampleStreamFactory.Parameters, DetokenizerParameter { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(TokenSample.class, ConllXPOSSampleStreamFactory.CONLLX_FORMAT, new ConllXTokenSampleStreamFactory<>(Parameters.class)); } protected ConllXTokenSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); ObjectStream samples = StreamFactoryRegistry.getFactory(POSSample.class, ConllXPOSSampleStreamFactory.CONLLX_FORMAT).create( ArgumentParser.filter(args, ConllXPOSSampleStreamFactory.Parameters.class)); return new POSToTokenSampleStream(createDetokenizer(params), samples); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_Detokeniz0100644 0000000 0000000 00000000170 14523004075 032634 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/DetokenizerSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/DetokenizerSampleStreamFa0100644 0000000 0000000 00000003453 14523004075 034270 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.DetokenizerParameter; import opennlp.tools.tokenize.DetokenizationDictionary; import opennlp.tools.tokenize.Detokenizer; import opennlp.tools.tokenize.DictionaryDetokenizer; /** * Base class for factories which need a {@link Detokenizer}. */ public abstract class DetokenizerSampleStreamFactory extends AbstractSampleStreamFactory { protected DetokenizerSampleStreamFactory(Class

params) { super(params); } protected Detokenizer createDetokenizer(DetokenizerParameter p) { try { return new DictionaryDetokenizer(new DetokenizationDictionary( new BufferedInputStream(new FileInputStream(p.getDetokenizer())))); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while loading detokenizer dict: " + e.getMessage(), e); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_Directory0100644 0000000 0000000 00000000157 14523004075 032651 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/DirectorySampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/DirectorySampleStream.jav0100644 0000000 0000000 00000007532 14523004075 034263 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Stack; import opennlp.tools.util.ObjectStream; /** * The directory sample stream allows for creating an {@link ObjectStream} * from a directory listing of files. */ public class DirectorySampleStream implements ObjectStream { private final List inputDirectories; private final boolean recursive; private final FileFilter fileFilter; private final Stack directories = new Stack<>(); private final Stack textFiles = new Stack<>(); /** * Initializes a {@link DirectorySampleStream}. * * @param dirs The {@link File directories} to read. * @param fileFilter The {@link FileFilter filter} to apply while enumerating files. * @param recursive Enables or disables recursive file listing. * * @throws IllegalArgumentException Thrown if one element in {@code dirs} is not a directory. */ public DirectorySampleStream(File[] dirs, FileFilter fileFilter, boolean recursive) { this.fileFilter = fileFilter; this.recursive = recursive; List inputDirectoryList = new ArrayList<>(dirs.length); for (File dir : dirs) { if (!dir.isDirectory()) { throw new IllegalArgumentException( "All passed in directories must be directories, but \"" + dir + "\" is not!"); } inputDirectoryList.add(dir); } inputDirectories = Collections.unmodifiableList(inputDirectoryList); directories.addAll(inputDirectories); } /** * Initializes a {@link DirectorySampleStream}. * * @param dir The {@link File directory} to read. * @param fileFilter The {@link FileFilter filter} to apply while enumerating files. * @param recursive Enables or disables recursive file listing. * * @throws IllegalArgumentException Thrown if {@code dir} is not a directory. */ public DirectorySampleStream(File dir, FileFilter fileFilter, boolean recursive) { this(new File[]{dir}, fileFilter, recursive); } @Override public File read() throws IOException { while (textFiles.isEmpty() && !directories.isEmpty()) { File dir = directories.pop(); File[] files; if (fileFilter != null) { files = dir.listFiles(fileFilter); } else { files = dir.listFiles(); } Arrays.sort(files); for (File file : files) { if (file.isFile()) { textFiles.push(file); } else if (recursive && file.isDirectory()) { directories.push(file); } } } if (!textFiles.isEmpty()) { return textFiles.pop(); } else { return null; } } @Override public void reset() { directories.clear(); textFiles.clear(); directories.addAll(inputDirectories); } /** * {@inheritDoc} * Calling this function has no effect on the stream. */ @Override public void close() throws IOException { } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_DocumentS0100644 0000000 0000000 00000000165 14523004075 032605 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/DocumentSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/DocumentSampleStreamFacto0100644 0000000 0000000 00000004525 14523004075 034272 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.doccat.DocumentSample; import opennlp.tools.doccat.DocumentSampleStream; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; /** * Factory producing OpenNLP {@link DocumentSampleStream}s. */ public class DocumentSampleStreamFactory

extends AbstractSampleStreamFactory { interface Parameters extends BasicFormatParams { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(DocumentSample.class, StreamFactoryRegistry.DEFAULT_FORMAT, new DocumentSampleStreamFactory<>(Parameters.class)); } protected DocumentSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); CmdLineUtil.checkInputFile("Data", params.getData()); InputStreamFactory sampleDataIn = CmdLineUtil.createInputStreamFactory(params.getData()); ObjectStream lineStream = null; try { lineStream = new PlainTextByLineStream(sampleDataIn, params.getEncoding()); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } return new DocumentSampleStream(lineStream); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_EvalitaNa0100644 0000000 0000000 00000000161 14523004075 032544 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/EvalitaNameSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/EvalitaNameSampleStream.j0100644 0000000 0000000 00000015406 14523004075 034155 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import opennlp.tools.commons.Internal; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; import opennlp.tools.util.StringUtil; /** * Parser for the Italian NER training files of the Evalita 2007 and 2009 NER shared tasks. *

* The data does not contain article boundaries, * adaptive data will be cleared for every sentence. *

* Named Entities are annotated in the IOB2 format (as used in CoNLL 2002 shared task) *

* The Named Entity tag consists of two parts: * 1. The IOB2 tag: 'B' (for 'begin') denotes the first token of a * Named Entity, I (for 'inside') is used for all other tokens in a * Named Entity, and 'O' (for 'outside') is used for all other words; * 2. The Entity type tag: PER (for Person), ORG (for Organization), * GPE (for Geo-Political Entity), or LOC (for Location). *

* Each file consists of four columns separated by a blank, containing * respectively the token, the Elsnet PoS-tag, the Adige news story to * which the token belongs, and the Named Entity tag. *

* Data can be found on this * web site. *

* Note: * Do not use this class, internal use only! */ @Internal public class EvalitaNameSampleStream implements ObjectStream { public enum LANGUAGE { IT } public static final int GENERATE_PERSON_ENTITIES = 0x01; public static final int GENERATE_ORGANIZATION_ENTITIES = 0x01 << 1; public static final int GENERATE_LOCATION_ENTITIES = 0x01 << 2; public static final int GENERATE_GPE_ENTITIES = 0x01 << 3; public static final String DOCSTART = "-DOCSTART-"; private final LANGUAGE lang; private final ObjectStream lineStream; private final int types; public EvalitaNameSampleStream(LANGUAGE lang, ObjectStream lineStream, int types) { this.lang = lang; this.lineStream = lineStream; this.types = types; } public EvalitaNameSampleStream(LANGUAGE lang, InputStreamFactory in, int types) throws IOException { this(lang, new PlainTextByLineStream(in, StandardCharsets.UTF_8),types); } private static Span extract(int begin, int end, String beginTag) throws InvalidFormatException { String type = beginTag.substring(2); switch (type) { case "PER": type = "person"; break; case "LOC": type = "location"; break; case "GPE": type = "gpe"; break; case "ORG": type = "organization"; break; default: throw new InvalidFormatException("Unknown type: " + type); } return new Span(begin, end, type); } @Override public NameSample read() throws IOException { List sentence = new ArrayList<>(); List tags = new ArrayList<>(); boolean isClearAdaptiveData = false; // Empty line indicates end of sentence String line; while ((line = lineStream.read()) != null && !StringUtil.isEmpty(line)) { if (line.startsWith(DOCSTART)) { isClearAdaptiveData = true; String emptyLine = lineStream.read(); if (!StringUtil.isEmpty(emptyLine)) throw new IOException("Empty line after -DOCSTART- not empty: '" + emptyLine + "'!"); continue; } String[] fields = line.split(" "); // For Italian: WORD POS-TAG SC-TAG NE-TAG if (LANGUAGE.IT.equals(lang) && fields.length == 4) { sentence.add(fields[0]); tags.add(fields[3]); // 3 is NE-TAG } else { throw new IOException("Incorrect number of fields per line for language: '" + line + "'!"); } } // Always clear adaptive data for Italian if (LANGUAGE.IT.equals(lang)) isClearAdaptiveData = true; if (sentence.size() > 0) { // convert name tags into spans List names = new ArrayList<>(); int beginIndex = -1; int endIndex = -1; for (int i = 0; i < tags.size(); i++) { String tag = tags.get(i); if (tag.endsWith("PER") && (types & GENERATE_PERSON_ENTITIES) == 0) tag = "O"; if (tag.endsWith("ORG") && (types & GENERATE_ORGANIZATION_ENTITIES) == 0) tag = "O"; if (tag.endsWith("LOC") && (types & GENERATE_LOCATION_ENTITIES) == 0) tag = "O"; if (tag.endsWith("GPE") && (types & GENERATE_GPE_ENTITIES) == 0) tag = "O"; if (tag.startsWith("B-")) { if (beginIndex != -1) { names.add(extract(beginIndex, endIndex, tags.get(beginIndex))); beginIndex = -1; endIndex = -1; } beginIndex = i; endIndex = i + 1; } else if (tag.startsWith("I-")) { endIndex++; } else if (tag.equals("O")) { if (beginIndex != -1) { names.add(extract(beginIndex, endIndex, tags.get(beginIndex))); beginIndex = -1; endIndex = -1; } } else { throw new IOException("Invalid tag: " + tag); } } // if one span remains, create it here if (beginIndex != -1) names.add(extract(beginIndex, endIndex, tags.get(beginIndex))); return new NameSample(sentence.toArray(new String[0]), names.toArray(new Span[0]), isClearAdaptiveData); } else if (line != null) { // Just filter out empty events, if two lines in a row are empty return read(); } else { // source stream is not returning anymore lines return null; } } @Override public void reset() throws IOException, UnsupportedOperationException { lineStream.reset(); } @Override public void close() throws IOException { lineStream.close(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_EvalitaNa0100644 0000000 0000000 00000000170 14523004075 032544 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/EvalitaNameSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/EvalitaNameSampleStreamFa0100644 0000000 0000000 00000006346 14523004075 034177 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.commons.Internal; import opennlp.tools.formats.EvalitaNameSampleStream.LANGUAGE; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! * * @see EvalitaNameSampleStream */ @Internal public class EvalitaNameSampleStreamFactory

extends LanguageSampleStreamFactory { interface Parameters extends BasicFormatParams { @ParameterDescription(valueName = "it") String getLang(); @ParameterDescription(valueName = "per,loc,org,gpe") String getTypes(); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(NameSample.class, "evalita", new EvalitaNameSampleStreamFactory<>(Parameters.class)); } protected EvalitaNameSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); LANGUAGE lang; if ("it".equals(params.getLang())) { lang = LANGUAGE.IT; language = params.getLang(); } else { throw new TerminateToolException(1, "Unsupported language: " + params.getLang()); } int typesToGenerate = 0; final String types = params.getTypes(); if (types.contains("per")) { typesToGenerate = typesToGenerate | EvalitaNameSampleStream.GENERATE_PERSON_ENTITIES; } if (types.contains("org")) { typesToGenerate = typesToGenerate | EvalitaNameSampleStream.GENERATE_ORGANIZATION_ENTITIES; } if (types.contains("loc")) { typesToGenerate = typesToGenerate | EvalitaNameSampleStream.GENERATE_LOCATION_ENTITIES; } if (types.contains("gpe")) { typesToGenerate = typesToGenerate | EvalitaNameSampleStream.GENERATE_GPE_ENTITIES; } try { return new EvalitaNameSampleStream(lang, CmdLineUtil.createInputStreamFactory(params.getData()), typesToGenerate); } catch (IOException e) { throw CmdLineUtil.createObjectStreamError(e); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_LanguageD0100644 0000000 0000000 00000000175 14523004075 032534 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/LanguageDetectorSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/LanguageDetectorSampleStr0100644 0000000 0000000 00000004707 14523004075 034273 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.doccat.DocumentSampleStream; import opennlp.tools.langdetect.LanguageDetectorSampleStream; import opennlp.tools.langdetect.LanguageSample; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; /** * Factory producing OpenNLP {@link DocumentSampleStream}s. */ public class LanguageDetectorSampleStreamFactory

extends AbstractSampleStreamFactory { interface Parameters extends BasicFormatParams { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(LanguageSample.class, StreamFactoryRegistry.DEFAULT_FORMAT, new LanguageDetectorSampleStreamFactory<>(Parameters.class)); } protected LanguageDetectorSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); CmdLineUtil.checkInputFile("Data", params.getData()); InputStreamFactory sampleDataIn = CmdLineUtil.createInputStreamFactory(params.getData()); ObjectStream lineStream = null; try { lineStream = new PlainTextByLineStream(sampleDataIn, params.getEncoding()); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } return new LanguageDetectorSampleStream(lineStream); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_LanguageS0100644 0000000 0000000 00000000165 14523004075 032552 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/LanguageSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/LanguageSampleStreamFacto0100644 0000000 0000000 00000002235 14523004075 034233 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; /** * Stream factory for those streams which carry language. */ public abstract class LanguageSampleStreamFactory extends AbstractSampleStreamFactory { protected String language; protected LanguageSampleStreamFactory(Class

params) { super(params); } @Override public String getLang() { return language; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_Lemmatize0100644 0000000 0000000 00000000167 14523004075 032635 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/LemmatizerSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/LemmatizerSampleStreamFac0100644 0000000 0000000 00000004517 14523004075 034263 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.lemmatizer.LemmaSample; import opennlp.tools.lemmatizer.LemmaSampleStream; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; /** * Factory producing OpenNLP {@link LemmaSampleStream}s. */ public class LemmatizerSampleStreamFactory

extends AbstractSampleStreamFactory { interface Parameters extends BasicFormatParams { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(LemmaSample.class, StreamFactoryRegistry.DEFAULT_FORMAT, new LemmatizerSampleStreamFactory<>(Parameters.class)); } protected LemmatizerSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); CmdLineUtil.checkInputFile("Data", params.getData()); InputStreamFactory sampleDataIn = CmdLineUtil.createInputStreamFactory(params.getData()); ObjectStream lineStream = null; try { lineStream = new PlainTextByLineStream(sampleDataIn, params.getEncoding()); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } return new LemmaSampleStream(lineStream); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_NameFinde0100644 0000000 0000000 00000000166 14523004075 032533 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/NameFinderCensus90NameStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/NameFinderCensus90NameStr0100644 0000000 0000000 00000010434 14523004075 034051 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import java.nio.charset.Charset; import java.util.Locale; import opennlp.tools.commons.Internal; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.StringList; import opennlp.tools.util.StringUtil; /** * This class helps to read the US Census data from the files to build a * StringList for each dictionary entry in the name-finder dictionary. * The entries in the source file are as follows: *

* SMITH 1.006 1.006 1 *

    *
  • The first field is the name (in ALL CAPS). *
  • The next field is a frequency in percent. *
  • The next is a cumulative frequency in percent. *
  • The last is a ranking. *
*

* Note: * Do not use this class, internal use only! */ @Internal public class NameFinderCensus90NameStream implements ObjectStream { private final Locale locale; private final Charset encoding; private final ObjectStream lineStream; /** * Initializes a {@link NameFinderCensus90NameStream} via {@link ObjectStream}. * * @param lineStream An {@link ObjectStream} that represents the * input file to be attached to this class. */ public NameFinderCensus90NameStream(ObjectStream lineStream) { this.locale = new Locale("en"); // locale is English this.encoding = Charset.defaultCharset(); // todo how do we find the encoding for an already open ObjectStream() ? this.lineStream = lineStream; } /** * Initializes a {@link NameFinderCensus90NameStream} via an {@link InputStreamFactory} * and a {@link Charset}. * Opens an associated stream object with the specified encoding specified. * * @param in The {@link InputStreamFactory} for the input file. * @param encoding the {@link Charset} to apply to the input stream. * * @throws IOException Thrown if IO errors occurred. */ public NameFinderCensus90NameStream(InputStreamFactory in, Charset encoding) throws IOException { this.locale = new Locale("en"); // locale is English this.encoding = encoding; this.lineStream = new PlainTextByLineStream(in, this.encoding); } @Override public StringList read() throws IOException { String line = lineStream.read(); StringList name = null; if ((line != null) && (!StringUtil.isEmpty(line))) { String name2; // find the location of the name separator in the line of data. int pos = line.indexOf(' '); if ((pos != -1)) { String parsed = line.substring(0, pos); // the data is in ALL CAPS ... so the easiest way is to convert // back to standard mixed case. if ((parsed.length() > 2) && (parsed.startsWith("MC"))) { name2 = parsed.substring(0,1).toUpperCase(locale) + parsed.substring(1,2).toLowerCase(locale) + parsed.substring(2,3).toUpperCase(locale) + parsed.substring(3).toLowerCase(locale); } else { name2 = parsed.substring(0,1).toUpperCase(locale) + parsed.substring(1).toLowerCase(locale); } name = new StringList(new String[]{name2}); } } return name; } @Override public void reset() throws IOException, UnsupportedOperationException { lineStream.reset(); } @Override public void close() throws IOException { lineStream.close(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_NameSampl0100644 0000000 0000000 00000000165 14523004075 032561 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/NameSampleDataStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/NameSampleDataStreamFacto0100644 0000000 0000000 00000004522 14523004075 034163 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.namefind.NameSample; import opennlp.tools.namefind.NameSampleDataStream; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; /** * Factory producing OpenNLP {@link NameSampleDataStream}s. */ public class NameSampleDataStreamFactory

extends AbstractSampleStreamFactory { public interface Parameters extends BasicFormatParams { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(NameSample.class, StreamFactoryRegistry.DEFAULT_FORMAT, new NameSampleDataStreamFactory<>(Parameters.class)); } protected NameSampleDataStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); CmdLineUtil.checkInputFile("Data", params.getData()); InputStreamFactory sampleDataIn = CmdLineUtil.createInputStreamFactory(params.getData()); ObjectStream lineStream = null; try { lineStream = new PlainTextByLineStream(sampleDataIn, params.getEncoding()); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } return new NameSampleDataStream(lineStream); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ParseSamp0100644 0000000 0000000 00000000162 14523004075 032574 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ParseSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ParseSampleStreamFactory.0100644 0000000 0000000 00000004447 14523004075 034222 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.parser.Parse; import opennlp.tools.parser.ParseSampleStream; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; /** * Factory producing OpenNLP {@link ParseSampleStream}s. */ public class ParseSampleStreamFactory

extends AbstractSampleStreamFactory { public interface Parameters extends BasicFormatParams { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(Parse.class, StreamFactoryRegistry.DEFAULT_FORMAT, new ParseSampleStreamFactory<>(Parameters.class)); } protected ParseSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); CmdLineUtil.checkInputFile("Data", params.getData()); InputStreamFactory sampleDataIn = CmdLineUtil.createInputStreamFactory(params.getData()); ObjectStream lineStream = null; try { lineStream = new PlainTextByLineStream(sampleDataIn, params.getEncoding()); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } return new ParseSampleStream(lineStream); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_SentenceS0100644 0000000 0000000 00000000165 14523004075 032573 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/SentenceSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/SentenceSampleStreamFacto0100644 0000000 0000000 00000004533 14523004075 034257 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.sentdetect.SentenceSampleStream; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; /** * Factory producing OpenNLP {@link SentenceSampleStream}s. */ public class SentenceSampleStreamFactory

extends AbstractSampleStreamFactory { interface Parameters extends BasicFormatParams { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(SentenceSample.class, StreamFactoryRegistry.DEFAULT_FORMAT, new SentenceSampleStreamFactory<>(Parameters.class)); } protected SentenceSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); CmdLineUtil.checkInputFile("Data", params.getData()); InputStreamFactory sampleDataIn = CmdLineUtil.createInputStreamFactory(params.getData()); ObjectStream lineStream = null; try { lineStream = new PlainTextByLineStream(sampleDataIn, params.getEncoding()); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } return new SentenceSampleStream(lineStream); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_TokenSamp0100644 0000000 0000000 00000000162 14523004075 032602 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/TokenSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/TokenSampleStreamFactory.0100644 0000000 0000000 00000004474 14523004075 034230 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.tokenize.TokenSampleStream; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; /** * Factory producing OpenNLP {@link TokenSampleStream}s. */ public class TokenSampleStreamFactory

extends LanguageSampleStreamFactory { interface Parameters extends BasicFormatParams { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(TokenSample.class, StreamFactoryRegistry.DEFAULT_FORMAT, new TokenSampleStreamFactory<>(Parameters.class)); } protected TokenSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); CmdLineUtil.checkInputFile("Data", params.getData()); InputStreamFactory sampleDataIn = CmdLineUtil.createInputStreamFactory(params.getData()); ObjectStream lineStream = null; try { lineStream = new PlainTextByLineStream(sampleDataIn, params.getEncoding()); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } return new TokenSampleStream(lineStream); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_TwentyNew0100644 0000000 0000000 00000000165 14523004075 032650 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/TwentyNewsgroupSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/TwentyNewsgroupSampleStre0100644 0000000 0000000 00000004375 14523004075 034430 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import opennlp.tools.doccat.DocumentSample; import opennlp.tools.tokenize.Tokenizer; import opennlp.tools.util.ObjectStream; public class TwentyNewsgroupSampleStream implements ObjectStream { private final Tokenizer tokenizer; private final Map catFileMap = new HashMap<>(); private Iterator> catFileTupleIterator; TwentyNewsgroupSampleStream(Tokenizer tokenizer, Path dataDir) throws IOException { this.tokenizer = tokenizer; for (Path dir : Files.newDirectoryStream(dataDir, Files::isDirectory)) { for (Path file : Files.newDirectoryStream(dir)) { catFileMap.put(file, dir.getFileName().toString()); } } reset(); } @Override public DocumentSample read() throws IOException { if (catFileTupleIterator.hasNext()) { Map.Entry catFileTuple = catFileTupleIterator.next(); String text = new String(Files.readAllBytes(catFileTuple.getKey())); return new DocumentSample(catFileTuple.getValue(), tokenizer.tokenize(text)); } return null; } @Override public void reset() throws IOException, UnsupportedOperationException { catFileTupleIterator = catFileMap.entrySet().iterator(); } @Override public void close() throws IOException { } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_TwentyNew0100644 0000000 0000000 00000000174 14523004075 032650 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/TwentyNewsgroupSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/TwentyNewsgroupSampleStre0100644 0000000 0000000 00000006752 14523004075 034431 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.File; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.EncodingParameter; import opennlp.tools.doccat.DocumentSample; import opennlp.tools.tokenize.SimpleTokenizer; import opennlp.tools.tokenize.Tokenizer; import opennlp.tools.tokenize.TokenizerME; import opennlp.tools.tokenize.TokenizerModel; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.ObjectStream; public class TwentyNewsgroupSampleStreamFactory

extends AbstractSampleStreamFactory { public static void registerFactory() { StreamFactoryRegistry.registerFactory(DocumentSample.class, "20newsgroup", new TwentyNewsgroupSampleStreamFactory<>(TwentyNewsgroupSampleStreamFactory.Parameters.class)); } protected TwentyNewsgroupSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { TwentyNewsgroupSampleStreamFactory.Parameters params = ArgumentParser.parse(args, TwentyNewsgroupSampleStreamFactory.Parameters.class); Tokenizer tokenizer = WhitespaceTokenizer.INSTANCE; if (params.getTokenizerModel() != null) { try { tokenizer = new TokenizerME(new TokenizerModel(params.getTokenizerModel())); } catch (IOException e) { throw new TerminateToolException(-1, "Failed to load tokenizer model!", e); } } else if (params.getRuleBasedTokenizer() != null) { String tokenizerName = params.getRuleBasedTokenizer(); if ("simple".equals(tokenizerName)) { tokenizer = SimpleTokenizer.INSTANCE; } else if ("whitespace".equals(tokenizerName)) { tokenizer = WhitespaceTokenizer.INSTANCE; } else { throw new TerminateToolException(-1, "Unknown tokenizer: " + tokenizerName); } } try { return new TwentyNewsgroupSampleStream( tokenizer, params.getDataDir().toPath()); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while opening sample data: " + e.getMessage(), e); } } interface Parameters extends EncodingParameter { @ArgumentParser.ParameterDescription(valueName = "dataDir", description = "dir containing the 20newsgroup folders") File getDataDir(); @ArgumentParser.ParameterDescription(valueName = "modelFile") @ArgumentParser.OptionalParameter File getTokenizerModel(); @ArgumentParser.ParameterDescription(valueName = "name") @ArgumentParser.OptionalParameter String getRuleBasedTokenizer(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_WordTagSa0100644 0000000 0000000 00000000164 14523004075 032536 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/WordTagSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/WordTagSampleStreamFactor0100644 0000000 0000000 00000004562 14523004075 034246 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.commons.Internal; import opennlp.tools.postag.POSSample; import opennlp.tools.postag.WordTagSampleStream; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; /** * Note: * Do not use this class, internal use only! */ @Internal public class WordTagSampleStreamFactory

extends AbstractSampleStreamFactory { public interface Parameters extends BasicFormatParams { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(POSSample.class, StreamFactoryRegistry.DEFAULT_FORMAT, new WordTagSampleStreamFactory<>(Parameters.class)); } protected WordTagSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); CmdLineUtil.checkInputFile("Data", params.getData()); InputStreamFactory sampleDataIn = CmdLineUtil.createInputStreamFactory(params.getData()); ObjectStream lineStream = null; try { lineStream = new PlainTextByLineStream(sampleDataIn, params.getEncoding()); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } return new WordTagSampleStream(lineStream); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ad_ADChun0100644 0000000 0000000 00000000160 14523004075 032445 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADChunkSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADChunkSampleStream.ja0100644 0000000 0000000 00000021342 14523004075 033765 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ad; import java.io.IOException; import java.util.ArrayList; import java.util.List; import opennlp.tools.chunker.ChunkSample; import opennlp.tools.commons.Internal; import opennlp.tools.formats.ad.ADSentenceStream.Sentence; import opennlp.tools.formats.ad.ADSentenceStream.SentenceParser.Leaf; import opennlp.tools.formats.ad.ADSentenceStream.SentenceParser.Node; import opennlp.tools.formats.ad.ADSentenceStream.SentenceParser.TreeElement; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.StringUtil; /** * Parser for Floresta Sita(c)tica Arvores Deitadas corpus, output to for the * Portuguese Chunker training. *

* The heuristic to extract chunks where based o paper 'A Machine Learning * Approach to Portuguese Clause Identification', (Eraldo Fernandes, Cicero * Santos and Ruy Milidiú).
*

* Data can be found on * this web site. * *

* Information about the format:
* Susana Afonso. * * "Ãrvores deitadas: Descrição do formato e das opções de análise na Floresta Sintáctica". *
* 12 de Fevereiro de 2006. *

* Detailed info about the * NER tagset. *

* Note: Do not use this class, internal use only! */ @Internal public class ADChunkSampleStream implements ObjectStream { protected final ObjectStream adSentenceStream; private int start = -1; private int end = -1; private int index = 0; public static final String OTHER = "O"; /** * Instantiates a {@link ADChunkSampleStream} stream from {@link ObjectStream}, * that could be a {@link PlainTextByLineStream} object. * * @param lineStream An {@link ObjectStream} as input. */ public ADChunkSampleStream(ObjectStream lineStream) { this.adSentenceStream = new ADSentenceStream(lineStream); } /** * Instantiates a {@link ADChunkSampleStream} stream from an {@link InputStreamFactory}. * * @param in The {@link InputStreamFactory} for the corpus. * @param charsetName The {@link java.nio.charset.Charset charset} to use * for reading of the corpus. */ public ADChunkSampleStream(InputStreamFactory in, String charsetName) throws IOException { this(new PlainTextByLineStream(in, charsetName)); } @Override public ChunkSample read() throws IOException { Sentence paragraph; while ((paragraph = this.adSentenceStream.read()) != null) { if (end > -1 && index >= end) { // leave return null; } if (start > -1 && index < start) { index++; // skip this one } else { Node root = paragraph.getRoot(); List sentence = new ArrayList<>(); List tags = new ArrayList<>(); List target = new ArrayList<>(); processRoot(root, sentence, tags, target); if (sentence.size() > 0) { index++; return new ChunkSample(sentence, tags, target); } } } return null; } protected void processRoot(Node root, List sentence, List tags, List target) { if (root != null) { TreeElement[] elements = root.getElements(); for (TreeElement element : elements) { if (element.isLeaf()) { processLeaf((Leaf) element, false, OTHER, sentence, tags, target); } else { processNode((Node) element, sentence, tags, target, null); } } } } private void processNode(Node node, List sentence, List tags, List target, String inheritedTag) { String phraseTag = getChunkTag(node); boolean inherited = false; if (phraseTag.equals(OTHER) && inheritedTag != null) { phraseTag = inheritedTag; inherited = true; } TreeElement[] elements = node.getElements(); for (int i = 0; i < elements.length; i++) { if (elements[i].isLeaf()) { boolean isIntermediate = false; String tag = phraseTag; Leaf leaf = (Leaf) elements[i]; String localChunk = getChunkTag(leaf); if (localChunk != null && !tag.equals(localChunk)) { tag = localChunk; } if (isIntermediate(tags, target, tag) && (inherited || i > 0)) { isIntermediate = true; } if (!isIncludePunctuations() && leaf.getFunctionalTag() == null && ( !( i + 1 < elements.length && elements[i + 1].isLeaf() ) || !( i > 0 && elements[i - 1].isLeaf() ) ) ) { isIntermediate = false; tag = OTHER; } processLeaf(leaf, isIntermediate, tag, sentence, tags, target); } else { int before = target.size(); processNode((Node) elements[i], sentence, tags, target, phraseTag); // if the child node was of a different type we should break the chunk sequence for (int j = target.size() - 1; j >= before; j--) { if (!target.get(j).endsWith("-" + phraseTag)) { phraseTag = OTHER; break; } } } } } protected void processLeaf(Leaf leaf, boolean isIntermediate, String phraseTag, List sentence, List tags, List target) { String chunkTag; if (leaf.getFunctionalTag() != null && phraseTag.equals(OTHER)) { phraseTag = getPhraseTagFromPosTag(leaf.getFunctionalTag()); } if (!phraseTag.equals(OTHER)) { if (isIntermediate) { chunkTag = "I-" + phraseTag; } else { chunkTag = "B-" + phraseTag; } } else { chunkTag = phraseTag; } sentence.add(leaf.getLexeme()); if (leaf.getSyntacticTag() == null) { tags.add(leaf.getLexeme()); } else { tags.add(ADChunkSampleStream.convertFuncTag(leaf.getFunctionalTag(), false)); } target.add(chunkTag); } protected String getPhraseTagFromPosTag(String functionalTag) { if (functionalTag.equals("v-fin")) { return "VP"; } else if (functionalTag.equals("n")) { return "NP"; } return OTHER; } public static String convertFuncTag(String t, boolean useCGTags) { if (useCGTags) { if ("art".equals(t) || "pron-det".equals(t) || "pron-indef".equals(t)) { t = "det"; } } return t; } protected String getChunkTag(Leaf leaf) { String tag = leaf.getSyntacticTag(); if ("P".equals(tag)) { return "VP"; } return null; } protected String getChunkTag(Node node) { String tag = node.getSyntacticTag(); String phraseTag = tag.substring(tag.lastIndexOf(":") + 1); while (phraseTag.endsWith("-")) { phraseTag = phraseTag.substring(0, phraseTag.length() - 1); } // maybe we should use only np, vp and pp, but will keep ap and advp. if (phraseTag.equals("np") || phraseTag.equals("vp") || phraseTag.equals("pp") || phraseTag.equals("ap") || phraseTag.equals("advp") || phraseTag.equals("adjp")) { phraseTag = StringUtil.toUpperCase(phraseTag); } else { phraseTag = OTHER; } return phraseTag; } public void setStart(int aStart) { this.start = aStart; } public void setEnd(int aEnd) { this.end = aEnd; } @Override public void reset() throws IOException, UnsupportedOperationException { adSentenceStream.reset(); } @Override public void close() throws IOException { adSentenceStream.close(); } protected boolean isIncludePunctuations() { return false; } protected boolean isIntermediate(List tags, List target, String phraseTag) { return target.size() > 0 && target.get(target.size() - 1).endsWith("-" + phraseTag); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ad_ADChun0100644 0000000 0000000 00000000167 14523004075 032454 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADChunkSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADChunkSampleStreamFac0100644 0000000 0000000 00000007155 14523004075 034014 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ad; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import opennlp.tools.chunker.ChunkSample; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.commons.Internal; import opennlp.tools.formats.LanguageSampleStreamFactory; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; /** * A Factory to create a Arvores Deitadas ChunkStream from the command line * utility. *

* Note: * Do not use this class, internal use only! */ @Internal public class ADChunkSampleStreamFactory

extends LanguageSampleStreamFactory { interface Parameters { //all have to be repeated, because encoding is not optional, //according to the check if (encoding == null) { below (now removed) @ParameterDescription(valueName = "charsetName", description = "encoding for reading and writing text, if absent the system default is used.") Charset getEncoding(); @ParameterDescription(valueName = "sampleData", description = "data to be used, usually a file name.") File getData(); @ParameterDescription(valueName = "language", description = "language which is being processed.") String getLang(); @ParameterDescription(valueName = "start", description = "index of first sentence") @OptionalParameter Integer getStart(); @ParameterDescription(valueName = "end", description = "index of last sentence") @OptionalParameter Integer getEnd(); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(ChunkSample.class, "ad", new ADChunkSampleStreamFactory<>(Parameters.class)); } protected ADChunkSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); language = params.getLang(); InputStreamFactory sampleDataIn = CmdLineUtil.createInputStreamFactory(params.getData()); ObjectStream lineStream = null; try { lineStream = new PlainTextByLineStream(sampleDataIn, params.getEncoding()); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } ADChunkSampleStream sampleStream = new ADChunkSampleStream(lineStream); if (params.getStart() != null && params.getStart() > -1) { sampleStream.setStart(params.getStart()); } if (params.getEnd() != null && params.getEnd() > -1) { sampleStream.setEnd(params.getEnd()); } return sampleStream; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ad_ADName0100644 0000000 0000000 00000000157 14523004075 032436 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADNameSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADNameSampleStream.jav0100644 0000000 0000000 00000036366 14523004075 033777 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ad; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import opennlp.tools.commons.Internal; import opennlp.tools.formats.ad.ADSentenceStream.Sentence; import opennlp.tools.formats.ad.ADSentenceStream.SentenceParser.Leaf; import opennlp.tools.formats.ad.ADSentenceStream.SentenceParser.Node; import opennlp.tools.formats.ad.ADSentenceStream.SentenceParser.TreeElement; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; /** * Parser for Floresta Sita(c)tica Arvores Deitadas corpus, output to for the * Portuguese NER training. *

* The data contains four named entity types: Person, Organization, Group, * Place, Event, ArtProd, Abstract, Thing, Time and Numeric.
*

* Data can be found on * this web site. * *

* Information about the format:
* Susana Afonso. * * "Ãrvores deitadas: Descrição do formato e das opções de análise na Floresta Sintáctica". *
* 12 de Fevereiro de 2006. *

* Detailed info about the * NER tagset. *

* Note: * Do not use this class, internal use only! */ @Internal public class ADNameSampleStream implements ObjectStream { /* * Pattern of a NER tag in Arvores Deitadas */ private static final Pattern TAG_PATTERN = Pattern.compile("<(NER:)?(.*?)>"); private static final Pattern WHITESPACE_PATTERN = Pattern.compile("\\s+"); private static final Pattern UNDERLINE_PATTERN = Pattern.compile("[_]+"); private static final Pattern HYPHEN_PATTERN = Pattern.compile("((\\p{L}+)-$)|(^-(\\p{L}+)(.*))|((\\p{L}+)-(\\p{L}+)(.*))"); private static final Pattern ALPHANUMERIC_PATTERN = Pattern.compile("^[\\p{L}\\p{Nd}]+$"); /* * Map to the Arvores Deitadas types to our types. It is read-only. */ private static final Map HAREM; static { Map harem = new HashMap<>(); final String person = "person"; harem.put("hum", person); harem.put("official", person); harem.put("member", person); final String organization = "organization"; harem.put("admin", organization); harem.put("org", organization); harem.put("inst", organization); harem.put("media", organization); harem.put("party", organization); harem.put("suborg", organization); final String group = "group"; harem.put("groupind", group); harem.put("groupofficial", group); final String place = "place"; harem.put("top", place); harem.put("civ", place); harem.put("address", place); harem.put("site", place); harem.put("virtual", place); harem.put("astro", place); final String event = "event"; harem.put("occ", event); harem.put("event", event); harem.put("history", event); final String artprod = "artprod"; harem.put("tit", artprod); harem.put("pub", artprod); harem.put("product", artprod); harem.put("V", artprod); harem.put("artwork", artprod); final String _abstract = "abstract"; harem.put("brand", _abstract); harem.put("genre", _abstract); harem.put("school", _abstract); harem.put("idea", _abstract); harem.put("plan", _abstract); harem.put("author", _abstract); harem.put("absname", _abstract); harem.put("disease", _abstract); final String thing = "thing"; harem.put("object", thing); harem.put("common", thing); harem.put("mat", thing); harem.put("class", thing); harem.put("plant", thing); harem.put("currency", thing); final String time = "time"; harem.put("date", time); harem.put("hour", time); harem.put("period", time); harem.put("cyclic", time); final String numeric = "numeric"; harem.put("quantity", numeric); harem.put("prednum", numeric); harem.put("currency", numeric); HAREM = Collections.unmodifiableMap(harem); } private final ObjectStream adSentenceStream; /* * To keep the last left contraction part */ private String leftContractionPart = null; private final boolean splitHyphenatedTokens; /** * Initializes a new {@link ADNameSampleStream} stream from a {@link ObjectStream}, * that could be a {@link PlainTextByLineStream} object. * * @param lineStream An {@link ObjectStream} as input. * @param splitHyphenatedTokens If {@code true} hyphenated tokens will be separated: * "carros-monstro" > "carros" "-" "monstro". */ public ADNameSampleStream(ObjectStream lineStream, boolean splitHyphenatedTokens) { this.adSentenceStream = new ADSentenceStream(lineStream); this.splitHyphenatedTokens = splitHyphenatedTokens; } /** * Initializes a new {@link ADNameSampleStream} from an {@link InputStreamFactory} * * @param in The Corpus {@link InputStreamFactory}. * @param charsetName The {@link java.nio.charset.Charset charset} to use * for reading of the corpus. * @param splitHyphenatedTokens If {@code true} hyphenated tokens will be separated: * "carros-monstro" > "carros" "-" "monstro". */ @Deprecated public ADNameSampleStream(InputStreamFactory in, String charsetName, boolean splitHyphenatedTokens) throws IOException { this(new PlainTextByLineStream(in, charsetName), splitHyphenatedTokens); } private int textID = -1; @Override public NameSample read() throws IOException { Sentence paragraph; // we should look for text here. if ((paragraph = this.adSentenceStream.read()) != null) { int currentTextID = getTextID(paragraph); boolean clearData = false; if (currentTextID != textID) { clearData = true; textID = currentTextID; } Node root = paragraph.getRoot(); List sentence = new ArrayList<>(); List names = new ArrayList<>(); process(root, sentence, names); return new NameSample(sentence.toArray(new String[0]), names.toArray(new Span[0]), clearData); } return null; } /** * Recursive method to process a {@link Node} in Arvores Deitadas format. * * @param node The {@link Node} to be processed. * @param sentence The {@link List sentence tokens} processed so far. * @param names The {@link List names} processed so far. */ private void process(Node node, List sentence, List names) { if (node != null) { for (TreeElement element : node.getElements()) { if (element.isLeaf()) { processLeaf((Leaf) element, sentence, names); } else { process((Node) element, sentence, names); } } } } /** * Processes a {@link Leaf} of Arvores Detaitadas format * * @param leaf The {@link Leaf} to be processed * @param sentence The {@link List sentence tokens} processed so far. * @param names The {@link List names} processed so far. */ private void processLeaf(Leaf leaf, List sentence, List names) { boolean alreadyAdded = false; if (leftContractionPart != null) { // will handle the contraction String right = leaf.getLexeme(); String c = PortugueseContractionUtility.toContraction( leftContractionPart, right); if (c != null) { String[] parts = WHITESPACE_PATTERN.split(c); sentence.addAll(Arrays.asList(parts)); alreadyAdded = true; } else { // contraction was missing! why? sentence.add(leftContractionPart); // keep alreadyAdded false. } leftContractionPart = null; } String namedEntityTag = null; int startOfNamedEntity = -1; String leafTag = leaf.getSecondaryTag(); boolean expandLastNER = false; // used when we find a tag if (leafTag != null) { if (leafTag.contains("") && !alreadyAdded) { String[] lexemes = UNDERLINE_PATTERN.split(leaf.getLexeme()); if (lexemes.length > 1) { sentence.addAll(Arrays.asList(lexemes).subList(0, lexemes.length - 1)); } leftContractionPart = lexemes[lexemes.length - 1]; return; } if (leafTag.contains("")) { // this one an be part of the last name expandLastNER = true; } namedEntityTag = getNER(leafTag); } if (namedEntityTag != null) { startOfNamedEntity = sentence.size(); } if (!alreadyAdded) { sentence.addAll(processLexeme(leaf.getLexeme())); } if (namedEntityTag != null) { names .add(new Span(startOfNamedEntity, sentence.size(), namedEntityTag)); } if (expandLastNER) { // if the current leaf has the tag , it can be the continuation of // a NER. // we check if it is true, and expand the last NER int lastIndex = names.size() - 1; if (names.size() > 0) { Span last = names.get(lastIndex); if (last.getEnd() == sentence.size() - 1) { names.set(lastIndex, new Span(last.getStart(), sentence.size(), last.getType())); } } } } private List processLexeme(String lexemeStr) { List out = new ArrayList<>(); String[] parts = UNDERLINE_PATTERN.split(lexemeStr); for (String tok : parts) { if (tok.length() > 1 && !ALPHANUMERIC_PATTERN.matcher(tok).matches()) { out.addAll(processTok(tok)); } else { out.add(tok); } } return out; } private List processTok(String tok) { boolean tokAdded = false; String original = tok; List out = new ArrayList<>(); LinkedList suffix = new LinkedList<>(); char first = tok.charAt(0); if (first == '«') { out.add(Character.toString(first)); tok = tok.substring(1); } char last = tok.charAt(tok.length() - 1); if (last == '»' || last == ':' || last == ',' || last == '!' ) { suffix.add(Character.toString(last)); tok = tok.substring(0, tok.length() - 1); } // lets split all hyphens if (this.splitHyphenatedTokens && tok.contains("-") && tok.length() > 1) { Matcher matcher = HYPHEN_PATTERN.matcher(tok); String firstTok = null; String hyphen = "-"; String secondTok = null; String rest = null; if (matcher.matches()) { if (matcher.group(1) != null) { firstTok = matcher.group(2); } else if (matcher.group(3) != null) { secondTok = matcher.group(4); rest = matcher.group(5); } else if (matcher.group(6) != null) { firstTok = matcher.group(7); secondTok = matcher.group(8); rest = matcher.group(9); } addIfNotEmpty(firstTok, out); addIfNotEmpty(hyphen, out); addIfNotEmpty(secondTok, out); addIfNotEmpty(rest, out); tokAdded = true; } } if (!tokAdded) { if (!original.equals(tok) && tok.length() > 1 && !ALPHANUMERIC_PATTERN.matcher(tok).matches()) { out.addAll(processTok(tok)); } else { out.add(tok); } } out.addAll(suffix); return out; } private void addIfNotEmpty(String firstTok, List out) { if (firstTok != null && firstTok.length() > 0) { out.addAll(processTok(firstTok)); } } /** * Parses a NER tag in Arvores Deitadas format. * * @param tags The NER tag in Arvores Deitadas format. * @return The NER tag, or {@code null} if not a NER tag in Arvores Deitadas format. */ private static String getNER(String tags) { if (tags.contains("")) { return null; } String[] tag = tags.split("\\s+"); for (String t : tag) { Matcher matcher = TAG_PATTERN.matcher(t); if (matcher.matches()) { String ner = matcher.group(2); if (HAREM.containsKey(ner)) { return HAREM.get(ner); } } } return null; } @Override public void reset() throws IOException, UnsupportedOperationException { adSentenceStream.reset(); } @Override public void close() throws IOException { adSentenceStream.close(); } enum Type { ama, cie, lit } // works for Amazonia // private static final Pattern meta1 = Pattern // .compile("^(?:[a-zA-Z\\-]*(\\d+)).*?p=(\\d+).*"); // // // works for selva cie // private static final Pattern meta2 = Pattern // .compile("^(?:[a-zA-Z\\-]*(\\d+)).*?p=(\\d+).*"); private int getTextID(Sentence paragraph) { final String meta = paragraph.getMetadata(); Type corpusType; Pattern metaPattern; int textIdMeta2 = -1; String textMeta2 = ""; if (meta.startsWith("LIT")) { corpusType = Type.lit; metaPattern = Pattern.compile("^([a-zA-Z\\-]+)(\\d+).*?p=(\\d+).*"); } else if (meta.startsWith("CIE")) { corpusType = Type.cie; metaPattern = Pattern.compile("^.*?source=\"(.*?)\".*"); } else { // ama corpusType = Type.ama; metaPattern = Pattern.compile("^(?:[a-zA-Z\\-]*(\\d+)).*?p=(\\d+).*"); } if (corpusType.equals(Type.lit)) { Matcher m2 = metaPattern.matcher(meta); if (m2.matches()) { String textId = m2.group(1); if (!textId.equals(textMeta2)) { textIdMeta2++; textMeta2 = textId; } return textIdMeta2; } else { throw new RuntimeException("Invalid metadata: " + meta); } } else if (corpusType.equals(Type.cie)) { Matcher m2 = metaPattern.matcher(meta); if (m2.matches()) { String textId = m2.group(1); if (!textId.equals(textMeta2)) { textIdMeta2++; textMeta2 = textId; } return textIdMeta2; } else { throw new RuntimeException("Invalid metadata: " + meta); } } else if (corpusType.equals(Type.ama)) { Matcher m2 = metaPattern.matcher(meta); if (m2.matches()) { return Integer.parseInt(m2.group(1)); // currentPara = Integer.parseInt(m.group(2)); } else { throw new RuntimeException("Invalid metadata: " + meta); } } return 0; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ad_ADName0100644 0000000 0000000 00000000166 14523004075 032436 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADNameSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADNameSampleStreamFact0100644 0000000 0000000 00000006514 14523004075 034006 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ad; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.commons.Internal; import opennlp.tools.formats.LanguageSampleStreamFactory; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; /** * A Factory to create a Arvores Deitadas NameSampleDataStream from the command line * utility. *

* Note: * Do not use this class, internal use only! */ @Internal public class ADNameSampleStreamFactory

extends LanguageSampleStreamFactory { interface Parameters { //all have to be repeated, because encoding is not optional, //according to the check if (encoding == null) { below (now removed) @ParameterDescription(valueName = "charsetName", description = "encoding for reading and writing text, if absent the system default is used.") Charset getEncoding(); @ParameterDescription(valueName = "sampleData", description = "data to be used, usually a file name.") File getData(); @ParameterDescription(valueName = "split", description = "if true all hyphenated tokens will be separated (default true)") @OptionalParameter(defaultValue = "true") Boolean getSplitHyphenatedTokens(); @ParameterDescription(valueName = "language", description = "language which is being processed.") String getLang(); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(NameSample.class, "ad", new ADNameSampleStreamFactory<>(Parameters.class)); } protected ADNameSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); language = params.getLang(); InputStreamFactory sampleDataIn = CmdLineUtil.createInputStreamFactory(params.getData()); ObjectStream lineStream = null; try { lineStream = new PlainTextByLineStream(sampleDataIn, params.getEncoding()); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } return new ADNameSampleStream(lineStream, params.getSplitHyphenatedTokens()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ad_ADPOSS0100644 0000000 0000000 00000000156 14523004075 032341 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADPOSSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADPOSSampleStream.java0100644 0000000 0000000 00000013222 14523004075 033703 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ad; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; import java.util.regex.Pattern; import opennlp.tools.commons.Internal; import opennlp.tools.formats.ad.ADSentenceStream.Sentence; import opennlp.tools.formats.ad.ADSentenceStream.SentenceParser.Leaf; import opennlp.tools.formats.ad.ADSentenceStream.SentenceParser.Node; import opennlp.tools.formats.ad.ADSentenceStream.SentenceParser.TreeElement; import opennlp.tools.postag.POSSample; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; /** * Note: * Do not use this class, internal use only! */ @Internal public class ADPOSSampleStream implements ObjectStream { private static final Pattern WHITESPACES_PATTERN = Pattern.compile("\\s+"); private final ObjectStream adSentenceStream; private final boolean expandME; private final boolean isIncludeFeatures; /** * Creates a new {@link ADPOSSampleStream} stream from a {@link ObjectStream}, * that could be a {@link PlainTextByLineStream} object. * * @param lineStream A {@link ObjectStream} stream as input. * @param expandME If {@code true} will expand the multiword expressions, each word of the * expression will have the POS Tag that was attributed to the * expression plus the prefix {@code B-} or {@code I-} (CONLL convention). * @param includeFeatures If {@code true} will combine the POS Tag with the feature tags. */ public ADPOSSampleStream(ObjectStream lineStream, boolean expandME, boolean includeFeatures) { this.adSentenceStream = new ADSentenceStream(lineStream); this.expandME = expandME; this.isIncludeFeatures = includeFeatures; } /** * Creates a new {@link POSSample} stream from an {@link InputStreamFactory} * * @param in The {@link InputStreamFactory} for the corpus. * @param charsetName The {@link java.nio.charset.Charset charset} to use * for reading of the corpus. * @param expandME If {@code true} will expand the multiword expressions, each word of the * expression will have the POS Tag that was attributed to the * expression plus the prefix {@code B-} or {@code I-} (CONLL convention). * @param includeFeatures If {@code true} will combine the POS Tag with the feature tags. */ public ADPOSSampleStream(InputStreamFactory in, String charsetName, boolean expandME, boolean includeFeatures) throws IOException { this(new PlainTextByLineStream(in, charsetName), expandME, includeFeatures); } @Override public POSSample read() throws IOException { Sentence paragraph; if ((paragraph = this.adSentenceStream.read()) != null) { Node root = paragraph.getRoot(); List sentence = new ArrayList<>(); List tags = new ArrayList<>(); process(root, sentence, tags); return new POSSample(sentence, tags); } return null; } private void process(Node node, List sentence, List tags) { if (node != null) { for (TreeElement element : node.getElements()) { if (element.isLeaf()) { processLeaf((Leaf) element, sentence, tags); } else { process((Node) element, sentence, tags); } } } } private void processLeaf(Leaf leaf, List sentence, List tags) { if (leaf != null) { String lexeme = leaf.getLexeme(); String tag = leaf.getFunctionalTag(); if (tag == null) { tag = leaf.getLexeme(); } if (isIncludeFeatures && leaf.getMorphologicalTag() != null) { tag += " " + leaf.getMorphologicalTag(); } tag = WHITESPACES_PATTERN.matcher(tag).replaceAll("="); if (tag == null) tag = lexeme; if (expandME && lexeme.contains("_")) { StringTokenizer tokenizer = new StringTokenizer(lexeme, "_"); if (tokenizer.countTokens() > 0) { List toks = new ArrayList<>(tokenizer.countTokens()); List tagsWithCont = new ArrayList<>( tokenizer.countTokens()); toks.add(tokenizer.nextToken()); tagsWithCont.add("B-" + tag); while (tokenizer.hasMoreTokens()) { toks.add(tokenizer.nextToken()); tagsWithCont.add("I-" + tag); } sentence.addAll(toks); tags.addAll(tagsWithCont); } else { sentence.add(lexeme); tags.add(tag); } } else { sentence.add(lexeme); tags.add(tag); } } } @Override public void reset() throws IOException, UnsupportedOperationException { adSentenceStream.reset(); } @Override public void close() throws IOException { adSentenceStream.close(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ad_ADPOSS0100644 0000000 0000000 00000000165 14523004075 032341 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADPOSSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADPOSSampleStreamFacto0100644 0000000 0000000 00000006424 14523004075 033746 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ad; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.commons.Internal; import opennlp.tools.formats.LanguageSampleStreamFactory; import opennlp.tools.postag.POSSample; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; /** * Note: * Do not use this class, internal use only! */ @Internal public class ADPOSSampleStreamFactory

extends LanguageSampleStreamFactory { interface Parameters { @ParameterDescription(valueName = "charsetName", description = "encoding for reading and writing text, if absent the system default is used.") Charset getEncoding(); @ParameterDescription(valueName = "sampleData", description = "data to be used, usually a file name.") File getData(); @ParameterDescription(valueName = "language", description = "language which is being processed.") String getLang(); @ParameterDescription(valueName = "expandME", description = "expand multiword expressions.") @OptionalParameter(defaultValue = "false") Boolean getExpandME(); @ParameterDescription(valueName = "includeFeatures", description = "combine POS Tags with word features, like number and gender.") @OptionalParameter(defaultValue = "false") Boolean getIncludeFeatures(); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(POSSample.class, "ad", new ADPOSSampleStreamFactory<>(Parameters.class)); } protected ADPOSSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); language = params.getLang(); InputStreamFactory sampleDataIn = CmdLineUtil.createInputStreamFactory(params.getData()); ObjectStream lineStream = null; try { lineStream = new PlainTextByLineStream(sampleDataIn, params.getEncoding()); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } return new ADPOSSampleStream(lineStream, params.getExpandME(), params.getIncludeFeatures()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ad_ADSent0100644 0000000 0000000 00000000163 14523004075 032464 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADSentenceSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADSentenceSampleStream0100644 0000000 0000000 00000013032 14523004075 034065 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ad; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import opennlp.tools.commons.Internal; import opennlp.tools.formats.ad.ADSentenceStream.Sentence; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.sentdetect.lang.Factory; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; /** * Note: * Do not use this class, internal use only! */ @Internal public class ADSentenceSampleStream implements ObjectStream { private final ObjectStream adSentenceStream; private int text = -1; private int para = -1; private boolean isSameText; private boolean isSamePara; private Sentence sent; private final boolean isIncludeTitles; private boolean isTitle; private final char[] ptEosCharacters; /** * Initializes a new {@link ADSentenceSampleStream} from a {@link ObjectStream}, * that could be a {@link PlainTextByLineStream} object. * * @param lineStream A stream of lines as {@link String}. * @param includeHeadlines If {@code true} will output the sentences marked * as news headlines. */ public ADSentenceSampleStream(ObjectStream lineStream, boolean includeHeadlines) { this.adSentenceStream = new ADSentenceStream(lineStream); ptEosCharacters = Factory.ptEosCharacters; Arrays.sort(ptEosCharacters); this.isIncludeTitles = includeHeadlines; } /** * Initializes a new {@link ADSentenceSampleStream}. * * @param in The {@link InputStreamFactory} for the corpus. * @param charsetName The {@link java.nio.charset.Charset charset} to use * for reading of the corpus. * @param includeHeadlines If {@code true} will output the sentences marked * as news headlines. * @throws IOException Thrown if IO errors occurred. */ public ADSentenceSampleStream(InputStreamFactory in, String charsetName, boolean includeHeadlines) throws IOException { this(new PlainTextByLineStream(in, charsetName), includeHeadlines); } // The Arvores Deitadas Corpus has information about texts and paragraphs. @Override public SentenceSample read() throws IOException { if (sent == null) { sent = this.adSentenceStream.read(); updateMeta(); if (sent == null) { return null; } } StringBuilder document = new StringBuilder(); List sentences = new ArrayList<>(); do { do { if (!isTitle || isIncludeTitles) { if (hasPunctuation(sent.getText())) { int start = document.length(); document.append(sent.getText()); sentences.add(new Span(start, document.length())); document.append(" "); } } sent = this.adSentenceStream.read(); updateMeta(); } while (isSamePara); // break; // got one paragraph! } while (isSameText); String doc; if (document.length() > 0) { doc = document.substring(0, document.length() - 1); } else { doc = document.toString(); } return new SentenceSample(doc, sentences.toArray(new Span[0])); } private boolean hasPunctuation(String text) { text = text.trim(); if (text.length() > 0) { char lastChar = text.charAt(text.length() - 1); return Arrays.binarySearch(ptEosCharacters, lastChar) >= 0; } return false; } // there are some different types of metadata depending on the corpus. // TODO Merge this patterns private static final Pattern META_1 = Pattern .compile("^(?:[a-zA-Z\\-]*(\\d+)).*?p=(\\d+).*"); private void updateMeta() { if (this.sent != null) { String meta = this.sent.getMetadata(); Matcher m = META_1.matcher(meta); int currentText; int currentPara; if (m.matches()) { currentText = Integer.parseInt(m.group(1)); currentPara = Integer.parseInt(m.group(2)); } else { throw new RuntimeException("Invalid metadata: " + meta); } isSamePara = isSameText = false; if (currentText == text) isSameText = true; if (isSameText && currentPara == para) isSamePara = true; isTitle = meta.contains("title"); text = currentText; para = currentPara; } else { this.isSamePara = this.isSameText = false; } } @Override public void reset() throws IOException, UnsupportedOperationException { adSentenceStream.reset(); } @Override public void close() throws IOException { adSentenceStream.close(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ad_ADSent0100644 0000000 0000000 00000000172 14523004075 032464 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADSentenceSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADSentenceSampleStream0100644 0000000 0000000 00000006152 14523004075 034072 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ad; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.commons.Internal; import opennlp.tools.formats.LanguageSampleStreamFactory; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; /** * Note: * Do not use this class, internal use only! */ @Internal public class ADSentenceSampleStreamFactory

extends LanguageSampleStreamFactory { interface Parameters { @ParameterDescription(valueName = "charsetName", description = "encoding for reading and writing text.") Charset getEncoding(); @ParameterDescription(valueName = "sampleData", description = "data to be used, usually a file name.") File getData(); @ParameterDescription(valueName = "language", description = "language which is being processed.") String getLang(); @ParameterDescription(valueName = "includeTitles", description = "if true will include sentences marked as headlines.") @OptionalParameter(defaultValue = "false") Boolean getIncludeTitles(); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(SentenceSample.class, "ad", new ADSentenceSampleStreamFactory<>(Parameters.class)); } protected ADSentenceSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); language = params.getLang(); boolean includeTitle = params.getIncludeTitles(); InputStreamFactory sampleDataIn = CmdLineUtil.createInputStreamFactory(params.getData()); ObjectStream lineStream = null; try { lineStream = new PlainTextByLineStream(sampleDataIn, params.getEncoding()); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } return new ADSentenceSampleStream(lineStream, includeTitle); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADSentenceStream.java0100644 0000000 0000000 00000044020 14523004075 033644 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ad; import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.List; import java.util.Stack; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.commons.Internal; import opennlp.tools.formats.ad.ADSentenceStream.SentenceParser.Node; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; /** * Stream filter which merges text lines into sentences, following the Arvores * Deitadas syntax. *

* Information about the format:
* Susana Afonso. * * "Ãrvores deitadas: Descrição do formato e das opções de análise na Floresta Sintáctica". *
* 12 de Fevereiro de 2006. *

* Note: * Do not use this class, internal use only! */ @Internal public class ADSentenceStream extends FilterObjectStream { public static class Sentence { private String text; private Node root; private String metadata; public static final String META_LABEL_FINAL = "final"; public String getText() { return text; } public void setText(String text) { this.text = text; } public Node getRoot() { return root; } public void setRoot(Node root) { this.root = root; } public void setMetadata(String metadata) { this.metadata = metadata; } public String getMetadata() { return metadata; } } /** * Parses a sample of AD corpus. A sentence in AD corpus is represented by a * Tree. In this class we declare some types to represent that tree. Today we get only * the first alternative (A1). */ public static class SentenceParser { private static final Logger logger = LoggerFactory.getLogger(SentenceParser.class); private static final Pattern NODE_PATTERN = Pattern .compile("([=-]*)([^:=]+:[^\\(\\s]+)(\\(([^\\)]+)\\))?\\s*(?:(\\((<.+>)\\))*)\\s*$"); private static final Pattern LEAF_PATTERN = Pattern .compile("^([=-]*)([^:=]+):([^\\(\\s]+)\\([\"'](.+)[\"']\\s*((?:<.+>)*)\\s*([^\\)]+)?\\)\\s+(.+)"); private static final Pattern BIZARRE_LEAF_PATTERN = Pattern .compile("^([=-]*)([^:=]+=[^\\(\\s]+)\\(([\"'].+[\"'])?\\s*([^\\)]+)?\\)\\s+(.+)"); private static final Pattern PUNCTUATION_PATTERN = Pattern.compile("^(=*)(\\W+)$"); private static final Pattern PUNCTUATION_DOT_PATTERN = Pattern.compile("\\»\\s+\\."); private static final Pattern PUNCTUATION_COMMA_PATTERN = Pattern.compile("\\»\\s+\\,"); private String text,meta; /** * Parses a sentence string into a {@link Sentence}. * * @param sentenceString The input string to parse. * @param isTitle {@code true} if it represents a title element, {@code false} otherwise. * @param para The parameter number. * @param isBox {@code true} if it represents a box element, {@code false} otherwise. * * @return A {@link Sentence} instance parsed from {@code sentenceString}. */ public Sentence parse(String sentenceString, int para, boolean isTitle, boolean isBox) { Sentence sentence = new Sentence(); Node root = new Node(); try (BufferedReader reader = new BufferedReader(new StringReader(sentenceString))) { // first line is String line = reader.readLine(); boolean useSameTextAndMeta = false; // to handle cases where there are diff sug of parse (&&) // should find the source source while (!line.startsWith("SOURCE")) { if (line.equals("&&")) { // same sentence again! useSameTextAndMeta = true; break; } line = reader.readLine(); if (line == null) { return null; } } if (!useSameTextAndMeta) { // got source, get the metadata String metaFromSource = line.substring(7); line = reader.readLine(); // we should have the plain sentence // we remove the first token int start = line.indexOf(" "); text = line.substring(start + 1).trim(); text = fixPunctuation(text); String titleTag = ""; if (isTitle) titleTag = " title"; String boxTag = ""; if (isBox) boxTag = " box"; if (start > 0) { meta = line.substring(0, start) + " p=" + para + titleTag + boxTag + metaFromSource; } } sentence.setText(text); sentence.setMetadata(meta); // now we look for the root node // skip lines starting with ### line = reader.readLine(); while (line != null && line.startsWith("###")) { line = reader.readLine(); } // got the root. Add it to the stack Stack nodeStack = new Stack<>(); root.setSyntacticTag("ROOT"); root.setLevel(0); nodeStack.add(root); /* now we have to take care of the lastLevel. Every time it raises, we will add the leaf to the node at the top. If it decreases, we remove the top. */ while (line != null && line.length() != 0 && !line.startsWith("") && !line.equals("&&")) { TreeElement element = this.getElement(line); if (element != null) { // The idea here is to keep a stack of nodes that are candidates for // parenting the following elements (nodes and leafs). // 1) When we get a new element, we check its level and remove from // the top of the stack nodes that are brothers or nephews. while (!nodeStack.isEmpty() && element.getLevel() > 0 && element.getLevel() <= nodeStack.peek().getLevel()) { Node nephew = nodeStack.pop(); } if (element.isLeaf() ) { // 2a) If the element is a leaf and there is no parent candidate, // add it as a daughter of the root. if (nodeStack.isEmpty()) { root.addElement(element); } else { // 2b) There are parent candidates. // look for the node with the correct level Node peek = nodeStack.peek(); if (element.level == 0) { // add to the root nodeStack.firstElement().addElement(element); } else { Node parent = null; int index = nodeStack.size() - 1; while (parent == null) { if (peek.getLevel() < element.getLevel()) { parent = peek; } else { index--; if (index > -1) { peek = nodeStack.get(index); } else { parent = nodeStack.firstElement(); } } } parent.addElement(element); } } } else { // 3) Check if the element that is at the top of the stack is this // node parent, if yes add it as a son if (!nodeStack.isEmpty() && nodeStack.peek().getLevel() < element.getLevel()) { nodeStack.peek().addElement(element); } else { logger.warn("should not happen!"); } // 4) Add it to the stack so it is a parent candidate. nodeStack.push((Node) element); } } line = reader.readLine(); } } catch (Exception e) { logger.warn("Caught exception for the given sentence: '{}'", sentenceString, e); return sentence; } // second line should be SOURCE sentence.setRoot(root); return sentence; } private String fixPunctuation(String text) { text = PUNCTUATION_DOT_PATTERN.matcher(text).replaceAll("»."); text = PUNCTUATION_COMMA_PATTERN.matcher(text).replaceAll("»,"); return text; } /** * Parse a tree element from a AD line * * @param line * the AD line * @return the tree element */ public TreeElement getElement(String line) { // Note: all levels are higher than 1, because 0 is reserved for the root. // try node Matcher nodeMatcher = NODE_PATTERN.matcher(line); if (nodeMatcher.matches()) { int level = nodeMatcher.group(1).length() + 1; String syntacticTag = nodeMatcher.group(2); Node node = new Node(); node.setLevel(level); node.setSyntacticTag(syntacticTag); return node; } Matcher leafMatcher = LEAF_PATTERN.matcher(line); if (leafMatcher.matches()) { int level = leafMatcher.group(1).length() + 1; String syntacticTag = leafMatcher.group(2); String funcTag = leafMatcher.group(3); String lemma = leafMatcher.group(4); String secondaryTag = leafMatcher.group(5); String morphologicalTag = leafMatcher.group(6); String lexeme = leafMatcher.group(7); Leaf leaf = new Leaf(); leaf.setLevel(level); leaf.setSyntacticTag(syntacticTag); leaf.setFunctionalTag(funcTag); leaf.setSecondaryTag(secondaryTag); leaf.setMorphologicalTag(morphologicalTag); leaf.setLexeme(lexeme); leaf.setLemma(lemma); return leaf; } Matcher punctuationMatcher = PUNCTUATION_PATTERN.matcher(line); if (punctuationMatcher.matches()) { int level = punctuationMatcher.group(1).length() + 1; String lexeme = punctuationMatcher.group(2); Leaf leaf = new Leaf(); leaf.setLevel(level); leaf.setLexeme(lexeme); return leaf; } // process the bizarre cases if (line.equals("_") || line.startsWith("].*")) { return null; } Leaf leaf = new Leaf(); leaf.setLevel(level + 1); leaf.setSyntacticTag(""); leaf.setMorphologicalTag(""); leaf.setFunctionalTag(""); leaf.setLexeme(lexeme); return leaf; } } logger.warn("Couldn't parse leaf: {}", line); Leaf leaf = new Leaf(); leaf.setLevel(1); leaf.setSyntacticTag(""); leaf.setMorphologicalTag(""); leaf.setFunctionalTag(""); leaf.setLexeme(line); return leaf; } /** Represents a tree element, Node or Leaf */ public abstract static class TreeElement { private String syntacticTag; private String morphologicalTag; private int level; public boolean isLeaf() { return false; } public void setSyntacticTag(String syntacticTag) { this.syntacticTag = syntacticTag; } public String getSyntacticTag() { return syntacticTag; } public void setLevel(int level) { this.level = level; } public int getLevel() { return level; } public void setMorphologicalTag(String morphologicalTag) { this.morphologicalTag = morphologicalTag; } public String getMorphologicalTag() { return morphologicalTag; } } /** Represents the AD node */ public static class Node extends TreeElement { private final List elems = new ArrayList<>(); public void addElement(TreeElement element) { elems.add(element); } public TreeElement[] getElements() { return elems.toArray(new TreeElement[0]); } @Override public String toString() { StringBuilder sb = new StringBuilder(); // print itself and its children sb.append("=".repeat(Math.max(0, this.getLevel()))); sb.append(this.getSyntacticTag()); if (this.getMorphologicalTag() != null) { sb.append(this.getMorphologicalTag()); } sb.append("\n"); for (TreeElement element : elems) { sb.append(element.toString()); } return sb.toString(); } } /** Represents the AD leaf */ public static class Leaf extends TreeElement { private String word; private String lemma; private String secondaryTag; private String functionalTag; @Override public boolean isLeaf() { return true; } public void setFunctionalTag(String funcTag) { this.functionalTag = funcTag; } public String getFunctionalTag() { return this.functionalTag; } public void setSecondaryTag(String secondaryTag) { this.secondaryTag = secondaryTag; } public String getSecondaryTag() { return this.secondaryTag; } public void setLexeme(String lexeme) { this.word = lexeme; } public String getLexeme() { return word; } private String emptyOrString(String value, String prefix, String suffix) { if (value == null) return ""; return prefix + value + suffix; } @Override public String toString() { StringBuilder sb = new StringBuilder(); // print itself and its children sb.append("=".repeat(Math.max(0, this.getLevel()))); if (this.getSyntacticTag() != null) { sb.append(this.getSyntacticTag()).append(":") .append(getFunctionalTag()).append("(") .append(emptyOrString(getLemma(), "'", "' ")) .append(emptyOrString(getSecondaryTag(), "", " ")) .append(this.getMorphologicalTag()).append(") "); } sb.append(this.word).append("\n"); return sb.toString(); } public void setLemma(String lemma) { this.lemma = lemma; } public String getLemma() { return lemma; } } } private static final Pattern SENT_START = Pattern.compile("]*>"); private static final Pattern SENT_END = Pattern.compile(""); private static final Pattern EXT_END = Pattern.compile(""); private static final Pattern TITLE_START = Pattern.compile("]*>"); private static final Pattern TITLE_END = Pattern.compile(""); private static final Pattern BOX_START = Pattern.compile("]*>"); private static final Pattern BOX_END = Pattern.compile(""); private static final Pattern PARA_START = Pattern.compile("]*>"); private static final Pattern TEXT_START = Pattern.compile("]*>"); private final SentenceParser parser; private int paraID = 0; private boolean isTitle = false; private boolean isBox = false; public ADSentenceStream(ObjectStream lineStream) { super(lineStream); parser = new SentenceParser(); } @Override public Sentence read() throws IOException { final StringBuilder sentence = new StringBuilder(); boolean sentenceStarted = false; while (true) { String line = samples.read(); if (line != null) { if (sentenceStarted) { if (SENT_END.matcher(line).matches() || EXT_END.matcher(line).matches()) { sentenceStarted = false; } else if (!line.startsWith("A1")) { sentence.append(line).append('\n'); } } else { if (SENT_START.matcher(line).matches()) { sentenceStarted = true; } else if (PARA_START.matcher(line).matches()) { paraID++; } else if (TITLE_START.matcher(line).matches()) { isTitle = true; } else if (TITLE_END.matcher(line).matches()) { isTitle = false; } else if (TEXT_START.matcher(line).matches()) { paraID = 0; } else if (BOX_START.matcher(line).matches()) { isBox = true; } else if (BOX_END.matcher(line).matches()) { isBox = false; } } if (!sentenceStarted && sentence.length() > 0) { return parser.parse(sentence.toString(), paraID, isTitle, isBox); } } else { // handle end of file if (sentenceStarted) { if (sentence.length() > 0) { return parser.parse(sentence.toString(), paraID, isTitle, isBox); } } else { return null; } } } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ad_ADToke0100644 0000000 0000000 00000000167 14523004075 032461 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADTokenSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/ADTokenSampleStreamFac0100644 0000000 0000000 00000004300 14523004075 034011 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ad; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.DetokenizerParameter; import opennlp.tools.commons.Internal; import opennlp.tools.formats.DetokenizerSampleStreamFactory; import opennlp.tools.formats.convert.NameToTokenSampleStream; import opennlp.tools.namefind.NameSample; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! */ @Internal public class ADTokenSampleStreamFactory

extends DetokenizerSampleStreamFactory { interface Parameters extends ADNameSampleStreamFactory.Parameters, DetokenizerParameter { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(TokenSample.class, "ad", new ADTokenSampleStreamFactory<>(Parameters.class)); } protected ADTokenSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); ObjectStream samples = StreamFactoryRegistry.getFactory( NameSample.class, "ad").create( ArgumentParser.filter(args, ADNameSampleStreamFactory.Parameters.class)); return new NameToTokenSampleStream(createDetokenizer(params), samples); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ad_Portug0100644 0000000 0000000 00000000171 14523004075 032625 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/PortugueseContractionUtility.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/PortugueseContractionU0100644 0000000 0000000 00000015571 14523004075 034303 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ad; import java.util.Collections; import java.util.HashMap; import java.util.Map; import opennlp.tools.commons.Internal; import opennlp.tools.util.StringUtil; /** * Utility class to handle Portuguese contractions. *

* Some Corpora split contractions in its parts, for example, "da" > "de" + * "a", but according to the phase of language processing, NER for instance, we * can't decide if to split a contraction or not, specially because contractions * inside names are not separated, but outside are. * *

* Note: * Do not use this class, internal use only! */ @Internal public class PortugueseContractionUtility { protected static final Map CONTRACTIONS; static { Map elems = new HashMap<>(); // 103 CONTRACTIONS. elems.put("a+a", "\u00e0"); elems.put("a+as", "\u00e0s"); elems.put("a+aquele", "\u00e0quele"); elems.put("a+aqueles", "\u00e0queles"); elems.put("a+aquela", "\u00e0quela"); elems.put("a+aquelas", "\u00e0quelas"); elems.put("a+aquilo", "\u00e0quilo"); elems.put("a+o", "ao"); elems.put("a+os", "aos"); elems.put("com+mim", "comigo"); elems.put("com+n\u00f2s", "conosco"); elems.put("com+si", "consigo"); elems.put("com+ti", "contigo"); elems.put("com+v\u00f2s", "convosco"); elems.put("de+a\u00ed", "da\u00ed"); elems.put("de+algu\u00e9m", "dalgu\u00e9m"); elems.put("de+algum", "dalgum"); elems.put("de+alguma", "dalguma"); elems.put("de+alguns", "dalguns"); elems.put("de+algumas", "dalgumas"); elems.put("de+ali", "dali"); elems.put("de+aqu\u00e9m", "daqu\u00e9m"); elems.put("de+aquele", "daquele"); elems.put("de+aquela", "daquela"); elems.put("de+aqueles", "daqueles"); elems.put("de+aquelas", "daquelas"); elems.put("de+aqui", "daqui"); elems.put("de+aquilo", "daquilo"); elems.put("de+ele", "dele"); elems.put("de+ela", "dela"); elems.put("de+eles", "deles"); elems.put("de+elas", "delas"); elems.put("de+entre", "dentre"); elems.put("de+esse", "desse"); elems.put("de+essa", "dessa"); elems.put("de+esses", "desses"); elems.put("de+essas", "dessas"); elems.put("de+este", "deste"); elems.put("de+esta", "desta"); elems.put("de+estes", "destes"); elems.put("de+estas", "destas"); elems.put("de+isso", "disso"); elems.put("de+isto", "disto"); elems.put("de+o", "do"); elems.put("de+a", "da"); elems.put("de+os", "dos"); elems.put("de+as", "das"); elems.put("de+outrem", "doutrem"); elems.put("de+outro", "doutro"); elems.put("de+outra", "doutra"); elems.put("de+outros", "doutros"); elems.put("de+outras", "doutras"); elems.put("de+um", "dum"); elems.put("de+uma", "duma"); elems.put("de+uns", "duns"); elems.put("de+umas", "dumas"); elems.put("esse+outro", "essoutro"); elems.put("essa+outra", "essoutra"); elems.put("este+outro", "estoutro"); elems.put("este+outra", "estoutra"); elems.put("ele+o", "lho"); elems.put("ele+a", "lha"); elems.put("ele+os", "lhos"); elems.put("ele+as", "lhas"); elems.put("em+algum", "nalgum"); elems.put("em+alguma", "nalguma"); elems.put("em+alguns", "nalguns"); elems.put("em+algumas", "nalgumas"); elems.put("em+aquele", "naquele"); elems.put("em+aquela", "naquela"); elems.put("em+aqueles", "naqueles"); elems.put("em+aquelas", "naquelas"); elems.put("em+aquilo", "naquilo"); elems.put("em+ele", "nele"); elems.put("em+ela", "nela"); elems.put("em+eles", "neles"); elems.put("em+elas", "nelas"); elems.put("em+esse", "nesse"); elems.put("em+essa", "nessa"); elems.put("em+esses", "nesses"); elems.put("em+essas", "nessas"); elems.put("em+este", "neste"); elems.put("em+esta", "nesta"); elems.put("em+estes", "nestes"); elems.put("em+estas", "nestas"); elems.put("em+isso", "nisso"); elems.put("em+isto", "nisto"); elems.put("em+o", "no"); elems.put("em+a", "na"); elems.put("em+os", "nos"); elems.put("em+as", "nas"); elems.put("em+outro", "noutro"); elems.put("em+outra", "noutra"); elems.put("em+outros", "noutros"); elems.put("em+outras", "noutras"); elems.put("em+um", "num"); elems.put("em+uma", "numa"); elems.put("em+uns", "nuns"); elems.put("em+umas", "numas"); elems.put("por+o", "pelo"); elems.put("por+a", "pela"); elems.put("por+os", "pelos"); elems.put("por+as", "pelas"); elems.put("para+a", "pra"); elems.put("para+o", "pro"); elems.put("para+as", "pras"); elems.put("para+os", "pros"); CONTRACTIONS = Collections.unmodifiableMap(elems); } /** * Merges a contraction. * * @param left The left component. * @param right The right component. * @return The merged contraction. */ public static String toContraction(String left, String right) { String key = left + "+" + right; if (CONTRACTIONS.containsKey(key)) { return CONTRACTIONS.get(key); } else { StringBuilder sb = new StringBuilder(); String[] parts = left.split("_"); for (int i = 0; i < parts.length - 1; i++) { sb.append(parts[i]).append(" "); } key = parts[parts.length - 1] + "+" + right; if (CONTRACTIONS.containsKey(key)) { sb.append(CONTRACTIONS.get(key)); return sb.toString(); } if (right.contains("_")) { parts = right.split("_"); key = left + "+" + parts[0]; if (CONTRACTIONS.containsKey(key)) { sb.append(CONTRACTIONS.get(key)).append(" "); for (int i = 1; i < parts.length; i++) { sb.append(parts[i]).append(" "); } return sb.toString(); } } String leftLower = StringUtil.toLowerCase(parts[parts.length - 1]); key = leftLower + "+" + right; if (CONTRACTIONS.containsKey(key)) { String r = CONTRACTIONS.get(key); String firstChar = r.substring(0, 1); r = StringUtil.toUpperCase(firstChar) + r.substring(1); sb.append(r); return sb.toString(); } } return null; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ad/package-info.java0100644 0000000 0000000 00000001633 14523004075 033046 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Experimental package related to the {@code Arvores Deitadas corpus} format. */ package opennlp.tools.formats.ad; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_brat_Anno0100644 0000000 0000000 00000000166 14523004075 032610 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/AnnotationConfiguration.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/AnnotationConfigurat0100644 0000000 0000000 00000006731 14523004075 034306 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.HashMap; import java.util.Map; import opennlp.tools.tokenize.WhitespaceTokenizer; public class AnnotationConfiguration { public static final String SPAN_TYPE = "Span"; public static final String ENTITY_TYPE = "Entity"; public static final String RELATION_TYPE = "Relation"; public static final String ATTRIBUTE_TYPE = "Attribute"; public static final String EVENT_TYPE = "Event"; private final Map typeToClassMap; public AnnotationConfiguration(Map typeToClassMap) { this.typeToClassMap = Collections.unmodifiableMap(new HashMap<>(typeToClassMap)); } public String getTypeClass(String type) { return typeToClassMap.get(type); } public static AnnotationConfiguration parse(InputStream in) throws IOException { Map typeToClassMap = new HashMap<>(); BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8)); // Note: This only supports entities and relations section String line; String sectionType = null; while ((line = reader.readLine()) != null) { line = line.trim(); if (!line.isEmpty()) { if (!line.startsWith("#")) { if (line.startsWith("[") && line.endsWith("]")) { sectionType = line.substring(line.indexOf('[') + 1, line.indexOf(']')); } else { String typeName = WhitespaceTokenizer.INSTANCE.tokenize(line)[0]; switch (sectionType) { case "entities": typeToClassMap.put(typeName, AnnotationConfiguration.ENTITY_TYPE); break; case "relations": typeToClassMap.put(typeName, AnnotationConfiguration.RELATION_TYPE); break; case "attributes": typeToClassMap.put(typeName, AnnotationConfiguration.ATTRIBUTE_TYPE); break; case "events": typeToClassMap.put(typeName, AnnotationConfiguration.EVENT_TYPE); break; default: break; } } } } } return new AnnotationConfiguration(typeToClassMap); } public static AnnotationConfiguration parse(File annConfigFile) throws IOException { try (InputStream in = new BufferedInputStream(new FileInputStream(annConfigFile))) { return parse(in); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_brat_Anno0100644 0000000 0000000 00000000166 14523004075 032610 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/AnnotatorNoteAnnotation.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/AnnotatorNoteAnnotat0100644 0000000 0000000 00000002245 14523004075 034266 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; public class AnnotatorNoteAnnotation extends BratAnnotation { private final String attachedId; protected AnnotatorNoteAnnotation(String id, String attachedId, String note) { super(id, "#AnnotationNote"); this.attachedId = attachedId; this.setNote(note); } public String getAttachedId() { return attachedId; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_brat_Attr0100644 0000000 0000000 00000000162 14523004075 032623 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/AttributeAnnotation.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/AttributeAnnotation.0100644 0000000 0000000 00000002557 14523004075 034230 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; public class AttributeAnnotation extends BratAnnotation { private final String attachedTo; private final String value; protected AttributeAnnotation(String id, String type, String attachedTo, String value) { super(id, type); this.attachedTo = attachedTo; this.value = value; } public String getAttachedTo() { return attachedTo; } public String getValue() { return value; } @Override public String toString() { return super.toString() + " " + attachedTo + (value != null ? " " + value : ""); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/BratAnnotation.java0100644 0000000 0000000 00000002671 14523004075 034014 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; import java.util.Objects; public abstract class BratAnnotation { private final String id; private final String type; private String note; protected BratAnnotation(String id, String type) { this.id = Objects.requireNonNull(id); this.type = Objects.requireNonNull(type); this.note = ""; } public String getId() { return id; } public String getType() { return type; } public void setNote(String note) { this.note = note; } public String getNote() { return note; } @Override public String toString() { return (id + " " + type + " " + note).trim(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_brat_Brat0100644 0000000 0000000 00000000163 14523004075 032602 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/BratAnnotationStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/BratAnnotationStream0100644 0000000 0000000 00000022342 14523004075 034245 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; /** * Reads the annotations from the brat {@code .ann} annotation file. */ public class BratAnnotationStream implements ObjectStream { static abstract class BratAnnotationParser { static final int ID_OFFSET = 0; static final int TYPE_OFFSET = 1; static final String NOTES_TYPE = "AnnotatorNotes"; BratAnnotation parse(Span[] tokens, CharSequence line) throws IOException { return null; } protected int parseInt(String intString) throws InvalidFormatException { try { return Integer.parseInt(intString); } catch (NumberFormatException e) { throw new InvalidFormatException(e); } } } static class SpanAnnotationParser extends BratAnnotationParser { private static final int BEGIN_OFFSET = 2; private static final int END_OFFSET = 3; @Override BratAnnotation parse(Span[] values, CharSequence line) throws IOException { if (values.length > 4) { String type = values[BratAnnotationParser.TYPE_OFFSET].getCoveredText(line).toString(); int firstTextTokenIndex = -1; int beginIndex = parseInt(values[BEGIN_OFFSET].getCoveredText(line).toString()); List fragments = new ArrayList<>(); for (int i = END_OFFSET; i < values.length; i++) { int endOffset; int nextBeginOffset = -1; if (values[i].getCoveredText(line).toString().contains(";")) { String[] parts = values[i].getCoveredText(line).toString().split(";"); endOffset = parseInt(parts[0]); fragments.add(new Span(beginIndex, endOffset, type)); beginIndex = parseInt(parts[1]); } else { endOffset = parseInt(values[i].getCoveredText(line).toString()); firstTextTokenIndex = i + 1; fragments.add(new Span(beginIndex, endOffset, type)); break; } } String id = values[BratAnnotationParser.ID_OFFSET].getCoveredText(line).toString(); String coveredText = line.subSequence(values[firstTextTokenIndex].getStart(), values[values.length - 1].getEnd()).toString(); try { return new SpanAnnotation(id, type, fragments.toArray(new Span[0]), coveredText); } catch (IllegalArgumentException e) { throw new InvalidFormatException(e); } } else { throw new InvalidFormatException("Line must have at least 5 fields"); } } } static class RelationAnnotationParser extends BratAnnotationParser { private static final int ARG1_OFFSET = 2; private static final int ARG2_OFFSET = 3; private String parseArg(String arg) throws InvalidFormatException { if (arg.length() > 4) { return arg.substring(5).trim(); } else { throw new InvalidFormatException("Failed to parse argument: " + arg); } } @Override BratAnnotation parse(Span[] tokens, CharSequence line) throws IOException { return new RelationAnnotation(tokens[BratAnnotationParser.ID_OFFSET].getCoveredText(line).toString(), tokens[BratAnnotationParser.TYPE_OFFSET].getCoveredText(line).toString(), parseArg(tokens[ARG1_OFFSET].getCoveredText(line).toString()), parseArg(tokens[ARG2_OFFSET].getCoveredText(line).toString())); } } static class EventAnnotationParser extends BratAnnotationParser { @Override BratAnnotation parse(Span[] tokens, CharSequence line) throws IOException { String[] typeParts = tokens[TYPE_OFFSET].getCoveredText(line).toString().split(":"); if (typeParts.length != 2) { throw new InvalidFormatException(String.format( "Failed to parse [%s], type part must be in the format type:trigger", line)); } String type = typeParts[0]; String eventTrigger = typeParts[1]; Map arguments = new HashMap<>(); for (int i = TYPE_OFFSET + 1; i < tokens.length; i++) { String[] parts = tokens[i].getCoveredText(line).toString().split(":"); if (parts.length != 2) { throw new InvalidFormatException(String.format( "Failed to parse [%s], argument parts must be in form argument:value", line)); } arguments.put(parts[0], parts[1]); } return new EventAnnotation(tokens[ID_OFFSET].getCoveredText(line).toString(),type, eventTrigger, arguments); } } static class AttributeAnnotationParser extends BratAnnotationParser { private static final int ATTACHED_TO_OFFSET = 2; private static final int VALUE_OFFSET = 3; @Override BratAnnotation parse(Span[] values, CharSequence line) throws IOException { if (values.length == 3 || values.length == 4) { String value = null; if (values.length == 4) { value = values[VALUE_OFFSET].getCoveredText(line).toString(); } return new AttributeAnnotation(values[ID_OFFSET].getCoveredText(line).toString(), values[TYPE_OFFSET].getCoveredText(line).toString(), values[ATTACHED_TO_OFFSET].getCoveredText(line).toString(), value); } else { throw new InvalidFormatException("Line must have 3 or 4 fields"); } } } static class AnnotatorNoteParser extends BratAnnotationParser { private static final int ATTACH_TO_OFFSET = 2; private static final int START_VALUE_OFFSET = 3; @Override BratAnnotation parse(Span[] tokens, CharSequence line) throws IOException { Span noteSpan = new Span( tokens[START_VALUE_OFFSET].getStart(), tokens[tokens.length - 1].getEnd() ); return new AnnotatorNoteAnnotation(tokens[ID_OFFSET].getCoveredText(line).toString(), tokens[ATTACH_TO_OFFSET].getCoveredText(line).toString(), noteSpan.getCoveredText(line).toString()); } } private final AnnotationConfiguration config; private final BufferedReader reader; private final String id; BratAnnotationStream(AnnotationConfiguration config, String id, InputStream in) { this.config = config; this.id = id; reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8)); } public BratAnnotation read() throws IOException { String line = reader.readLine(); if (line != null) { Span[] tokens = WhitespaceTokenizer.INSTANCE.tokenizePos(line); if (tokens.length > 2) { String annId = tokens[BratAnnotationParser.ID_OFFSET].getCoveredText(line).toString(); if (annId.length() == 0) { throw new InvalidFormatException("annotation id is empty"); } // The first letter of the annotation id marks the annotation type final BratAnnotationParser parser; switch (annId.charAt(0)) { case 'T': parser = new SpanAnnotationParser(); break; case 'R': parser = new RelationAnnotationParser(); break; case 'A': parser = new AttributeAnnotationParser(); break; case 'E': parser = new EventAnnotationParser(); break; case '#': // the # can be a Note or a comment... if a note, handle it, otherwise skip the unsupported type.. if ( tokens[BratAnnotationParser.TYPE_OFFSET].getCoveredText(line).toString().equals( BratAnnotationParser.NOTES_TYPE) ) { parser = new AnnotatorNoteParser(); } else { return read(); } break; default: // Skip it, do that for everything unsupported (e.g. "*" id) return read(); } try { return parser.parse(tokens, line); } catch (IOException e) { throw new IOException(String.format("Failed to parse ann document with id [%s.ann]", id), e); } } } return null; } public void reset() throws IOException, UnsupportedOperationException { reader.reset(); } public void close() throws IOException { reader.close(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/BratDocument.java0100644 0000000 0000000 00000007526 14523004075 033464 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import opennlp.tools.util.ObjectStream; /** * Brat (brat rapid annotation tool) is based on the stav visualiser * which was originally made in order to visualise BioNLP'11 Shared Task data. *

* Data can be found on this * web site. *

* Information about the format are found on this * web site. */ public class BratDocument { private final AnnotationConfiguration config; private final String id; private final String text; private final Map annotationMap; public BratDocument(AnnotationConfiguration config, String id, String text, Collection annotations) { this.config = config; this.id = id; this.text = text; Map annMap = new HashMap<>(); List noteList = new ArrayList<>(); for (BratAnnotation annotation : annotations) { if (annotation instanceof AnnotatorNoteAnnotation) { noteList.add((AnnotatorNoteAnnotation)annotation); } else { annMap.put(annotation.getId(), annotation); } } // attach AnnotatorNote to the appropriate Annotation. // the note should ALWAYS have an appropriate id in the map, // but just to be safe, check for null. for (AnnotatorNoteAnnotation note: noteList) { BratAnnotation annotation = annMap.get(note.getAttachedId()); if (annotation != null) { annotation.setNote(note.getNote()); } } annotationMap = Collections.unmodifiableMap(annMap); } public AnnotationConfiguration getConfig() { return config; } public String getId() { return id; } public String getText() { return text; } public BratAnnotation getAnnotation(String id) { return annotationMap.get(id); } public Collection getAnnotations() { return annotationMap.values(); } public static BratDocument parseDocument(AnnotationConfiguration config, String id, InputStream txtIn, InputStream annIn) throws IOException { Reader txtReader = new InputStreamReader(txtIn, StandardCharsets.UTF_8); StringBuilder text = new StringBuilder(); char[] cbuf = new char[1024]; int len; while ((len = txtReader.read(cbuf)) > 0) { text.append(cbuf, 0, len); } Collection annotations = new ArrayList<>(); ObjectStream annStream = new BratAnnotationStream(config, id, annIn); BratAnnotation ann; while ((ann = annStream.read()) != null) { annotations.add(ann); } annStream.close(); return new BratDocument(config, id, text.toString(), annotations); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_brat_Brat0100644 0000000 0000000 00000000161 14523004075 032600 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/BratDocumentParser.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/BratDocumentParser.j0100644 0000000 0000000 00000015353 14523004075 034146 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.namefind.NameSample; import opennlp.tools.sentdetect.SentenceDetector; import opennlp.tools.tokenize.Tokenizer; import opennlp.tools.util.Span; public class BratDocumentParser { private static final Logger logger = LoggerFactory.getLogger(BratDocumentParser.class); private final SentenceDetector sentDetector; private final Tokenizer tokenizer; private final Set nameTypes; public BratDocumentParser(SentenceDetector sentenceDetector, Tokenizer tokenizer) { this(sentenceDetector, tokenizer, null); } public BratDocumentParser(SentenceDetector sentenceDetector, Tokenizer tokenizer, Set nameTypes) { if (nameTypes != null && nameTypes.size() == 0) { throw new IllegalArgumentException("nameTypes should be null or have one or more elements"); } this.sentDetector = sentenceDetector; this.tokenizer = tokenizer; this.nameTypes = nameTypes; } public List parse(BratDocument sample) { // Note: Some entities might not match sentence boundaries, // to be able to print warning a set of entities id must be maintained // to check if all entities have been used up after the matching is done Set entityIdSet = new HashSet<>(); Map coveredIndexes = new HashMap<>(); for (BratAnnotation ann : sample.getAnnotations()) { if (isSpanAnnotation(ann)) { entityIdSet.add(ann.getId()); for (Span span : ((SpanAnnotation) ann).getSpans()) { for (int i = span.getStart(); i < span.getEnd(); i++) { coveredIndexes.put(i, span); } } } } // Map spans to tokens, and merge fragments based on token // // Detect sentence and correct sentence spans assuming no split can be inside a name annotation List sentences = new ArrayList<>(); for (Span sentence : sentDetector.sentPosDetect(sample.getText())) { Span conflictingName = coveredIndexes.get(sentence.getStart()); if (sentences.size() > 0 && conflictingName != null && conflictingName.getStart() < sentence.getStart()) { Span lastSentence = sentences.remove(sentences.size() - 1); sentences.add(new Span(lastSentence.getStart(), sentence.getEnd())); logger.info("Correcting sentence segmentation in document {}", sample.getId()); } else { sentences.add(sentence); } } // TODO: Token breaks should be enforced on name span boundaries // a) Just split tokens // b) Implement a custom token split validator which can be injected into the Tokenizer // Currently we are missing all List samples = new ArrayList<>(sentences.size()); for (Span sentence : sentences) { String sentenceText = sentence.getCoveredText( sample.getText()).toString(); Span[] tokens = tokenizer.tokenizePos(sentenceText); // Note: // A begin and end token index can be identical, but map to different // tokens, to distinguish between between the two begin indexes are // stored with a negative sign, and end indexes are stored with a positive sign // in the tokenIndexMap. // The tokenIndexMap maps to the sentence local token index. Map tokenIndexMap = new HashMap<>(); for (int i = 0; i < tokens.length; i++) { tokenIndexMap.put(-(sentence.getStart() + tokens[i].getStart()), i); tokenIndexMap.put(sentence.getStart() + tokens[i].getEnd(), i + 1); } List names = new ArrayList<>(); for (BratAnnotation ann : sample.getAnnotations()) { if (isSpanAnnotation(ann)) { SpanAnnotation entity = (SpanAnnotation) ann; List mappedFragments = new ArrayList<>(); for (Span entitySpan : entity.getSpans()) { if (sentence.contains(entitySpan)) { entityIdSet.remove(ann.getId()); entitySpan = entitySpan.trim(sample.getText()); Integer nameBeginIndex = tokenIndexMap.get(-entitySpan.getStart()); Integer nameEndIndex = tokenIndexMap.get(entitySpan.getEnd()); if (nameBeginIndex != null && nameEndIndex != null) { mappedFragments.add(new Span(nameBeginIndex, nameEndIndex, entity.getType())); } else { logger.warn("Dropped entity {} ({}) in document {} as it is not matching " + "tokenization!", entity.getId(), entitySpan.getCoveredText(sample.getText()), sample.getId()); } } } Collections.sort(mappedFragments); for (int i = 1; i < mappedFragments.size(); i++) { if (mappedFragments.get(i - 1).getEnd() == mappedFragments.get(i).getStart()) { mappedFragments.set(i, new Span(mappedFragments.get(i - 1).getStart(), mappedFragments.get(i).getEnd(), mappedFragments.get(i).getType())); mappedFragments.set(i - 1, null); } } for (Span span : mappedFragments) { if (span != null ) { names.add(span); } } } } samples.add(new NameSample(sample.getId(), Span.spansToStrings(tokens, sentenceText), names.toArray(new Span[0]), null, samples.size() == 0)); } for (String id : entityIdSet) { logger.warn("Dropped entity {} in document {}" + ", is not matching sentence segmentation!", id, sample.getId()); } return samples; } private boolean isSpanAnnotation(BratAnnotation ann) { return ann instanceof SpanAnnotation && (nameTypes == null || nameTypes.contains(ann.getType())); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_brat_Brat0100644 0000000 0000000 00000000161 14523004075 032600 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/BratDocumentStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/BratDocumentStream.j0100644 0000000 0000000 00000007423 14523004075 034144 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; import java.io.BufferedInputStream; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Stack; import opennlp.tools.util.ObjectStream; public class BratDocumentStream implements ObjectStream { private final AnnotationConfiguration config; private List documentIds = new LinkedList<>(); private Iterator documentIdIterator; /** * Creates a {@link BratDocumentStream} which reads the documents from the given input directory. * * @param config the annotation.conf from the brat project as an Annotation Configuration object * @param bratCorpusDirectory the directory containing all the brat training data files * @param searchRecursive specifies if the corpus directory should be traversed recursively * to find training data files. * @param fileFilter a custom file filter to filter out certain files or null to accept all files * * @throws IOException if reading from the brat directory fails in anyway */ public BratDocumentStream(AnnotationConfiguration config, File bratCorpusDirectory, boolean searchRecursive, FileFilter fileFilter) throws IOException { if (!bratCorpusDirectory.isDirectory()) { throw new IOException("Input corpus directory must be a directory " + "according to File.isDirectory()!"); } this.config = config; Stack directoryStack = new Stack<>(); directoryStack.add(bratCorpusDirectory); while (!directoryStack.isEmpty()) { for (File file : directoryStack.pop().listFiles(fileFilter)) { if (file.isFile()) { String annFilePath = file.getAbsolutePath(); if (annFilePath.endsWith(".ann")) { // cutoff last 4 chars ... String documentId = annFilePath.substring(0, annFilePath.length() - 4); File txtFile = new File(documentId + ".txt"); if (txtFile.exists() && txtFile.isFile()) { documentIds.add(documentId); } } } else if (searchRecursive && file.isDirectory()) { directoryStack.push(file); } } } reset(); } @Override public BratDocument read() throws IOException { BratDocument doc = null; if (documentIdIterator.hasNext()) { String id = documentIdIterator.next(); try (InputStream txtIn = new BufferedInputStream(new FileInputStream(id + ".txt")); InputStream annIn = new BufferedInputStream(new FileInputStream(id + ".ann"))) { doc = BratDocument.parseDocument(config, id, txtIn, annIn); } } return doc; } @Override public void reset() { documentIdIterator = documentIds.iterator(); } @Override public void close() { // No longer needed, make the object unusable documentIds = null; documentIdIterator = null; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_brat_Brat0100644 0000000 0000000 00000000163 14523004075 032602 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/BratNameSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/BratNameSampleStream0100644 0000000 0000000 00000007464 14523004075 034165 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; import java.io.IOException; import java.util.List; import java.util.Set; import opennlp.tools.namefind.NameSample; import opennlp.tools.sentdetect.SentenceDetector; import opennlp.tools.sentdetect.SentenceDetectorME; import opennlp.tools.sentdetect.SentenceModel; import opennlp.tools.tokenize.Tokenizer; import opennlp.tools.tokenize.TokenizerME; import opennlp.tools.tokenize.TokenizerModel; import opennlp.tools.util.ObjectStream; /** * Generates Name Sample objects for a Brat Document object. */ public class BratNameSampleStream extends SegmenterObjectStream { private final BratDocumentParser parser; /** * Creates a new {@link BratNameSampleStream}. * @param sentDetector a {@link SentenceDetector} instance * @param tokenizer a {@link Tokenizer} instance * @param samples a {@link BratDocument} {@link ObjectStream} */ public BratNameSampleStream(SentenceDetector sentDetector, Tokenizer tokenizer, ObjectStream samples) { super(samples); this.parser = new BratDocumentParser(sentDetector, tokenizer, null); } /** * Creates a new {@link BratNameSampleStream}. * @param sentModel a {@link SentenceModel} model * @param tokenModel a {@link TokenizerModel} model * @param samples a {@link BratDocument} {@link ObjectStream} */ public BratNameSampleStream(SentenceModel sentModel, TokenizerModel tokenModel, ObjectStream samples) { super(samples); // TODO: We can pass in custom validators here ... this.parser = new BratDocumentParser(new SentenceDetectorME(sentModel), new TokenizerME(tokenModel), null); } /** * Creates a new {@link BratNameSampleStream}. * @param sentDetector a {@link SentenceDetector} instance * @param tokenizer a {@link Tokenizer} instance * @param samples a {@link BratDocument} {@link ObjectStream} * @param nameTypes the name types to use or null if all name types */ public BratNameSampleStream(SentenceDetector sentDetector, Tokenizer tokenizer, ObjectStream samples, Set nameTypes) { super(samples); this.parser = new BratDocumentParser(sentDetector, tokenizer, nameTypes); } /** * Creates a new {@link BratNameSampleStream}. * @param sentModel a {@link SentenceModel} model * @param tokenModel a {@link TokenizerModel} model * @param samples a {@link BratDocument} {@link ObjectStream} * @param nameTypes the name types to use or null if all name types */ public BratNameSampleStream(SentenceModel sentModel, TokenizerModel tokenModel, ObjectStream samples, Set nameTypes) { super(samples); // TODO: We can pass in custom validators here ... this.parser = new BratDocumentParser(new SentenceDetectorME(sentModel), new TokenizerME(tokenModel), nameTypes); } @Override protected List read(BratDocument sample) throws IOException { return parser.parse(sample); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_brat_Brat0100644 0000000 0000000 00000000172 14523004075 032602 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/BratNameSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/BratNameSampleStream0100644 0000000 0000000 00000013377 14523004075 034165 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.Set; import java.util.stream.Collectors; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.namefind.NameSample; import opennlp.tools.sentdetect.NewlineSentenceDetector; import opennlp.tools.sentdetect.SentenceDetector; import opennlp.tools.sentdetect.SentenceDetectorME; import opennlp.tools.sentdetect.SentenceModel; import opennlp.tools.tokenize.SimpleTokenizer; import opennlp.tools.tokenize.Tokenizer; import opennlp.tools.tokenize.TokenizerME; import opennlp.tools.tokenize.TokenizerModel; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.ObjectStream; public class BratNameSampleStreamFactory extends AbstractSampleStreamFactory { interface Parameters { @ParameterDescription(valueName = "bratDataDir", description = "location of brat data dir") File getBratDataDir(); @ParameterDescription(valueName = "annConfFile") File getAnnotationConfig(); @ParameterDescription(valueName = "modelFile") @OptionalParameter File getSentenceDetectorModel(); @ParameterDescription(valueName = "modelFile") @OptionalParameter File getTokenizerModel(); @ParameterDescription(valueName = "name") @OptionalParameter String getRuleBasedTokenizer(); @ParameterDescription(valueName = "value") @OptionalParameter(defaultValue = "false") Boolean getRecursive(); @ParameterDescription(valueName = "names") @OptionalParameter String getNameTypes(); } protected BratNameSampleStreamFactory() { super(Parameters.class); } /** * Checks that non of the passed values are null. * * @param objects * @return true or false */ private boolean notNull(Object... objects) { for (Object obj : objects) { if (obj == null) return false; } return true; } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); if (notNull(params.getRuleBasedTokenizer(), params.getTokenizerModel())) { throw new TerminateToolException(-1, "Either use rule based or statistical tokenizer!"); } // TODO: Provide the file name to the annotation.conf file and implement the parser ... AnnotationConfiguration annConfig; try { annConfig = AnnotationConfiguration.parse(params.getAnnotationConfig()); } catch (IOException e) { throw new TerminateToolException(1, "Failed to parse annotation.conf file!"); } // TODO: Add an optional parameter to search recursive // TODO: How to handle the error here ? terminate the tool? not nice if used by API! ObjectStream samples; try { samples = new BratDocumentStream(annConfig, params.getBratDataDir(), params.getRecursive(), null); } catch (IOException e) { throw new TerminateToolException(-1, e.getMessage()); } SentenceDetector sentDetector; if (params.getSentenceDetectorModel() != null) { try { sentDetector = new SentenceDetectorME(new SentenceModel(params.getSentenceDetectorModel())); } catch (IOException e) { throw new TerminateToolException(-1, "Failed to load sentence detector model!", e); } } else { sentDetector = new NewlineSentenceDetector(); } Tokenizer tokenizer = WhitespaceTokenizer.INSTANCE; if (params.getTokenizerModel() != null) { try { tokenizer = new TokenizerME(new TokenizerModel(params.getTokenizerModel())); } catch (IOException e) { throw new TerminateToolException(-1, "Failed to load tokenizer model!", e); } } else if (params.getRuleBasedTokenizer() != null) { String tokenizerName = params.getRuleBasedTokenizer(); if ("simple".equals(tokenizerName)) { tokenizer = SimpleTokenizer.INSTANCE; } else if ("whitespace".equals(tokenizerName)) { tokenizer = WhitespaceTokenizer.INSTANCE; } else { throw new TerminateToolException(-1, "Unknown tokenizer: " + tokenizerName); } } Set nameTypes = null; if (params.getNameTypes() != null) { String[] nameTypesArr = params.getNameTypes().split(","); if (nameTypesArr.length > 0) { nameTypes = Arrays.stream(nameTypesArr).map(String::trim).collect(Collectors.toSet()); } } return new BratNameSampleStream(sentDetector, tokenizer, samples, nameTypes); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(NameSample.class, "brat", new BratNameSampleStreamFactory()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_brat_Even0100644 0000000 0000000 00000000156 14523004075 032611 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/EventAnnotation.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/EventAnnotation.java0100644 0000000 0000000 00000002727 14523004075 034207 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Objects; public class EventAnnotation extends BratAnnotation { private final String eventTrigger; private final Map arguments; protected EventAnnotation(String id, String type, String eventTrigger, Map arguments) { super(id, type); this.eventTrigger = Objects.requireNonNull(eventTrigger); this.arguments = Collections.unmodifiableMap(new HashMap<>(arguments)); } public String getEventTrigger() { return eventTrigger; } public Map getArguments() { return arguments; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_brat_Rela0100644 0000000 0000000 00000000161 14523004075 032573 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/RelationAnnotation.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/RelationAnnotation.j0100644 0000000 0000000 00000002463 14523004075 034210 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; public class RelationAnnotation extends BratAnnotation { private final String arg1; private final String arg2; protected RelationAnnotation(String id, String type, String arg1, String arg2) { super(id, type); this.arg1 = arg1; this.arg2 = arg2; } public String getArg1() { return arg1; } public String getArg2() { return arg2; } @Override public String toString() { return super.toString() + " arg1:" + getArg1() + " arg2:" + getArg2(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_brat_Segm0100644 0000000 0000000 00000000164 14523004075 032606 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/SegmenterObjectStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/SegmenterObjectStrea0100644 0000000 0000000 00000003253 14523004075 034225 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; import java.io.IOException; import java.util.Collections; import java.util.Iterator; import java.util.List; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; public abstract class SegmenterObjectStream extends FilterObjectStream { private Iterator sampleIt = Collections.emptyIterator(); public SegmenterObjectStream(ObjectStream in) { super(in); } protected abstract List read(S sample) throws IOException; public final T read() throws IOException { if (sampleIt.hasNext()) { return sampleIt.next(); } else { S inSample = samples.read(); if (inSample != null) { List outSamples = read(inSample); if (outSamples != null) { sampleIt = outSamples.iterator(); } return read(); } } return null; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/SpanAnnotation.java0100644 0000000 0000000 00000002720 14523004075 034020 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; import java.util.Arrays; import opennlp.tools.util.Span; public class SpanAnnotation extends BratAnnotation { private final Span[] spans; private final String coveredText; SpanAnnotation(String id, String type, Span[] spans, String coveredText) { super(id, type); this.spans = Arrays.copyOf(spans, spans.length); Arrays.sort(this.spans); this.coveredText = coveredText; } public Span[] getSpans() { return spans; } public String getCoveredText() { return coveredText; } @Override public String toString() { return super.toString() + " " + Arrays.toString(spans) + " " + getCoveredText(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/brat/package-info.java0100644 0000000 0000000 00000001664 14523004075 033416 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Experimental package related to the corpus format used by the "brat rapid annotation tool" (brat). */ package opennlp.tools.formats.brat; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_conllu_Co0100644 0000000 0000000 00000000170 14523004075 032615 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluLemmaSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluLemmaSampleS0100644 0000000 0000000 00000004153 14523004075 034207 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Objects; import opennlp.tools.lemmatizer.LemmaSample; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; public class ConlluLemmaSampleStream extends FilterObjectStream { private final ConlluTagset tagset; /** * Initializes a {@link ConlluLemmaSampleStream}. * * @param samples The {@link ObjectStream samples} used as input. * @param tagset The {@link ConlluTagset} to use. Must not be {@code null}. */ public ConlluLemmaSampleStream(ObjectStream samples, ConlluTagset tagset) { super(samples); this.tagset = Objects.requireNonNull(tagset); } @Override public LemmaSample read() throws IOException { ConlluSentence sentence = samples.read(); if (sentence != null) { List tokens = new ArrayList<>(); List tags = new ArrayList<>(); List lemmas = new ArrayList<>(); for (ConlluWordLine line : sentence.getWordLines()) { tokens.add(line.getForm()); tags.add(line.getPosTag(tagset)); lemmas.add(line.getLemma()); } return new LemmaSample(tokens, tags, lemmas); } return null; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_conllu_Co0100644 0000000 0000000 00000000177 14523004075 032624 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluLemmaSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluLemmaSampleS0100644 0000000 0000000 00000005533 14523004075 034212 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.commons.Internal; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.lemmatizer.LemmaSample; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; /** * Note: Do not use this class, internal use only! */ @Internal public class ConlluLemmaSampleStreamFactory

extends AbstractSampleStreamFactory { interface Parameters extends BasicFormatParams { @ArgumentParser.ParameterDescription(valueName = "tagset", description = "u|x u for unified tags and x for language-specific part-of-speech tags") @ArgumentParser.OptionalParameter(defaultValue = "u") String getTagset(); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(LemmaSample.class, ConlluPOSSampleStreamFactory.CONLLU_FORMAT, new ConlluLemmaSampleStreamFactory<>(Parameters.class)); } protected ConlluLemmaSampleStreamFactory(Class

params) { super(params); } public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); ConlluTagset tagset; switch (params.getTagset()) { case "u": tagset = ConlluTagset.U; break; case "x": tagset = ConlluTagset.X; break; default: throw new TerminateToolException(-1, "Unknown tagset parameter: " + params.getTagset()); } InputStreamFactory inFactory = CmdLineUtil.createInputStreamFactory(params.getData()); try { return new ConlluLemmaSampleStream(new ConlluStream(inFactory), tagset); } catch (IOException e) { // That will throw an exception CmdLineUtil.handleCreateObjectStreamError(e); } return null; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_conllu_Co0100644 0000000 0000000 00000000166 14523004075 032622 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluPOSSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluPOSSampleStr0100644 0000000 0000000 00000003775 14523004075 034174 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Objects; import opennlp.tools.postag.POSSample; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; public class ConlluPOSSampleStream extends FilterObjectStream { private final ConlluTagset tagset; /** * Initializes a {@link ConlluPOSSampleStream}. * * @param samples The {@link ObjectStream samples} used as input. * @param tagset The {@link ConlluTagset} to use. Must not be {@code null}. */ public ConlluPOSSampleStream(ObjectStream samples, ConlluTagset tagset) { super(samples); this.tagset = Objects.requireNonNull(tagset); } @Override public POSSample read() throws IOException { ConlluSentence sentence = samples.read(); if (sentence != null) { List tokens = new ArrayList<>(); List tags = new ArrayList<>(); for (ConlluWordLine line : sentence.getWordLines()) { tokens.add(line.getForm()); tags.add(line.getPosTag(tagset)); } return new POSSample(tokens, tags); } return null; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_conllu_Co0100644 0000000 0000000 00000000175 14523004075 032622 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluPOSSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluPOSSampleStr0100644 0000000 0000000 00000005532 14523004075 034165 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.commons.Internal; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.postag.POSSample; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; /** * Note: Do not use this class, internal use only! */ @Internal public class ConlluPOSSampleStreamFactory

extends AbstractSampleStreamFactory { public static final String CONLLU_FORMAT = "conllu"; interface Parameters extends BasicFormatParams { @ArgumentParser.ParameterDescription(valueName = "tagset", description = "u|x u for unified tags and x for language-specific part-of-speech tags") @ArgumentParser.OptionalParameter(defaultValue = "u") String getTagset(); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(POSSample.class, CONLLU_FORMAT, new ConlluPOSSampleStreamFactory<>(Parameters.class)); } protected ConlluPOSSampleStreamFactory(Class

params) { super(params); } public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); ConlluTagset tagset; switch (params.getTagset()) { case "u": tagset = ConlluTagset.U; break; case "x": tagset = ConlluTagset.X; break; default: throw new TerminateToolException(-1, "Unknown tagset parameter: " + params.getTagset()); } InputStreamFactory inFactory = CmdLineUtil.createInputStreamFactory(params.getData()); try { return new ConlluPOSSampleStream(new ConlluStream(inFactory), tagset); } catch (IOException e) { // That will throw an exception CmdLineUtil.handleCreateObjectStreamError(e); } return null; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_conllu_Co0100644 0000000 0000000 00000000157 14523004075 032622 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluSentence.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluSentence.jav0100644 0000000 0000000 00000005423 14523004075 034213 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Optional; public class ConlluSentence { private final List wordLines; private final String sentenceIdComment; private final String textComment; private boolean newDocument; private String documentId; private boolean newParagraph; private String paragraphId; private Map textLang; private String translit; ConlluSentence(List wordLines, String sentenceIdComment, String textComment) { this.wordLines = wordLines; this.sentenceIdComment = sentenceIdComment; this.textComment = textComment; } public ConlluSentence(List wordLines, String sentenceIdComment, String textComment, boolean newDocument, String documentId, boolean newParagraph, String paragraphId, Map textLang, String translit) { this.wordLines = wordLines; this.sentenceIdComment = sentenceIdComment; this.textComment = textComment; this.newDocument = newDocument; this.documentId = documentId; this.newParagraph = newParagraph; this.paragraphId = paragraphId; this.textLang = textLang; this.translit = translit; } public List getWordLines() { return wordLines; } public String getSentenceIdComment() { return sentenceIdComment; } public String getTextComment() { return textComment; } public boolean isNewDocument() { return newDocument; } public Optional getDocumentId() { return Optional.ofNullable(documentId); } public boolean isNewParagraph() { return newParagraph; } public Optional getParagraphId() { return Optional.ofNullable(paragraphId); } public Optional> getTextLang() { return Optional.ofNullable(textLang); } public Optional getTranslit() { return Optional.ofNullable(translit); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_conllu_Co0100644 0000000 0000000 00000000173 14523004075 032620 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluSentenceSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluSentenceSamp0100644 0000000 0000000 00000004446 14523004075 034261 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; import java.io.IOException; import java.util.ArrayList; import java.util.List; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; public class ConlluSentenceSampleStream extends FilterObjectStream { private final int sentencesPerSample; /** * Initializes a {@link ConlluSentenceSampleStream}. * * @param samples The {@link ObjectStream samples} used as input. * @param sentencesPerSample The number of sentences per sample. Must not be negative. */ public ConlluSentenceSampleStream(ObjectStream samples, int sentencesPerSample) { super(samples); this.sentencesPerSample = sentencesPerSample; } @Override public SentenceSample read() throws IOException { StringBuilder documentText = new StringBuilder(); List sentenceSpans = new ArrayList<>(); ConlluSentence sentence; for (int i = 0; i < sentencesPerSample && (sentence = samples.read()) != null; i++) { int startIndex = documentText.length(); documentText.append(sentence.getTextComment()).append(' '); sentenceSpans.add(new Span(startIndex, documentText.length() - 1)); } if (documentText.length() > 0) { documentText.setLength(documentText.length() - 1); return new SentenceSample(documentText, sentenceSpans.toArray(new Span[0])); } return null; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_conllu_Co0100644 0000000 0000000 00000000202 14523004075 032611 xustar000000000 0000000 130 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluSentenceSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluSentenceSamp0100644 0000000 0000000 00000005113 14523004075 034251 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.commons.Internal; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! * * @see ConlluSentenceSampleStream */ @Internal public class ConlluSentenceSampleStreamFactory

extends AbstractSampleStreamFactory { interface Parameters extends BasicFormatParams { @ArgumentParser.ParameterDescription(valueName = "sentencesPerSample", description = "number of sentences per sample") String getSentencesPerSample(); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(SentenceSample.class, ConlluPOSSampleStreamFactory.CONLLU_FORMAT, new ConlluSentenceSampleStreamFactory<>(ConlluSentenceSampleStreamFactory.Parameters.class)); } protected ConlluSentenceSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); InputStreamFactory inFactory = CmdLineUtil.createInputStreamFactory(params.getData()); try { return new ConlluSentenceSampleStream(new ConlluStream(inFactory), Integer.parseInt(params.getSentencesPerSample())); } catch (IOException e) { // That will throw an exception CmdLineUtil.handleCreateObjectStreamError(e); } return null; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluStream.java0100644 0000000 0000000 00000021156 14523004075 034044 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Map.Entry; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; import java.util.stream.Collectors; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ParagraphStream; import opennlp.tools.util.PlainTextByLineStream; /** * The CoNNL-U Format is specified * here. */ public class ConlluStream implements ObjectStream { private final ObjectStream sentenceStream; private static final Pattern regex = Pattern.compile("text_([a-z]{2,3})"); /** * Initializes a {@link ConlluStream}. * * @param in The {@link InputStreamFactory} to use. Characters will be interpreted in UTF-8. * * @throws IOException Thrown if IO errors occurred during initialization. */ public ConlluStream(InputStreamFactory in) throws IOException { this.sentenceStream = new ParagraphStream(new PlainTextByLineStream(in, StandardCharsets.UTF_8)); } @Override public ConlluSentence read() throws IOException { String sentence = sentenceStream.read(); if (sentence != null) { List wordLines = new ArrayList<>(); BufferedReader reader = new BufferedReader(new StringReader(sentence)); boolean newDocument = false; boolean newParagraph = false; String documentId = null; String paragraphId = null; String sentenceId = null; String text = null; Map textLang = null; String translit = null; String line; while ((line = reader.readLine()) != null) { // # indicates a comment line and contains additional data if (line.trim().startsWith("#")) { String commentLine = line.trim().substring(1); int separator = commentLine.indexOf('='); if (separator != -1) { String firstPart = commentLine.substring(0, separator).trim(); String secondPart = commentLine.substring(separator + 1, commentLine.length()).trim(); if (!secondPart.isEmpty()) { switch (firstPart) { case "newdoc id": newDocument = true; documentId = secondPart; break; case "newpar id": newParagraph = true; paragraphId = secondPart; break; case "sent_id": sentenceId = secondPart; break; case "text": text = secondPart; break; case "translit": translit = secondPart; break; } } if (firstPart.startsWith("text_")) { if (textLang == null) { textLang = new HashMap<>(); } addTextLang(firstPart, secondPart, textLang); } } else { switch (commentLine.trim()) { case "newdoc": newDocument = true; break; case "newpar": newParagraph = true; break; } } } else { wordLines.add(new ConlluWordLine(line)); } } wordLines = postProcessContractions(wordLines); return new ConlluSentence(wordLines, sentenceId, text, newDocument, documentId, newParagraph, paragraphId, textLang, translit); } return null; } private List postProcessContractions(List lines) { // 1. Find contractions Map index = new HashMap<>(); Map> contractions = new HashMap<>(); List linesToDelete = new ArrayList<>(); for (int i = 0; i < lines.size(); i++) { ConlluWordLine line = lines.get(i); index.put(line.getId(), i); if (line.getId().contains("-")) { List expandedContractions = new ArrayList<>(); String[] ids = line.getId().split("-"); int start = Integer.parseInt(ids[0]); int end = Integer.parseInt(ids[1]); for (int j = start; j <= end; j++) { String js = Integer.toString(j); expandedContractions.add(js); linesToDelete.add(js); } contractions.put(line.getId(), expandedContractions); } } // 2. Merge annotation for (Entry> entry : contractions.entrySet()) { final String contractionId = entry.getKey(); final List expandedContractions = entry.getValue(); int contractionIndex = index.get(contractionId); ConlluWordLine contraction = lines.get(contractionIndex); List expandedParts = new ArrayList<>(); for (String id : expandedContractions) { expandedParts.add(lines.get(index.get(id))); } ConlluWordLine merged = mergeAnnotation(contraction, expandedParts); lines.set(contractionIndex, merged); } // 3. Delete the expanded parts for (int i = linesToDelete.size() - 1; i >= 0; i--) { lines.remove(index.get(linesToDelete.get(i)).intValue()); } return lines; } /** * Merges token level annotations. * * @param contraction The line that receives the annotation. * @param expandedParts The lines to get annotation. * * @return The {@link ConlluWordLine merged line}. */ private ConlluWordLine mergeAnnotation(ConlluWordLine contraction, List expandedParts) { String id = contraction.getId(); String form = contraction.getForm(); String lemma = expandedParts.stream() .filter(p -> !"_".equals(p.getLemma())) .map(ConlluWordLine::getLemma) .collect(Collectors.joining("+")); String uPosTag = expandedParts.stream() .filter(p -> !"_".equals(p.getPosTag(ConlluTagset.U))) .map(p -> p.getPosTag(ConlluTagset.U)) .collect(Collectors.joining("+")); String xPosTag = expandedParts.stream() .filter(p -> !"_".equals(p.getPosTag(ConlluTagset.X))) .map(p -> p.getPosTag(ConlluTagset.X)) .collect(Collectors.joining("+")); String feats = expandedParts.stream() .filter(p -> !"_".equals(p.getFeats())) .map(ConlluWordLine::getFeats) .collect(Collectors.joining("+")); String head = contraction.getHead(); String deprel = contraction.getDeprel(); String deps = contraction.getDeps(); String misc = contraction.getMisc(); return new ConlluWordLine(id, form, lemma, uPosTag, xPosTag, feats,head, deprel, deps, misc); } private Map addTextLang(String firstPart, String secondPart, Map textLang) throws InvalidFormatException { String lang = ""; try { Matcher regexMatcher = regex.matcher(firstPart); if (regexMatcher.find()) { lang = regexMatcher.group(1); } } catch (PatternSyntaxException e) { throw new InvalidFormatException(e); } if (!lang.isEmpty()) { textLang.put(new Locale(lang), secondPart); } else { throw new InvalidFormatException(String.format("Locale language code is invalid: %s", lang)); } return textLang; } @Override public void close() throws IOException { sentenceStream.close(); } @Override public void reset() throws IOException, UnsupportedOperationException { sentenceStream.reset(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluTagset.java0100644 0000000 0000000 00000001557 14523004075 034043 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; public enum ConlluTagset { U, X } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_conllu_Co0100644 0000000 0000000 00000000170 14523004075 032615 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluTokenSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluTokenSampleS0100644 0000000 0000000 00000005261 14523004075 034235 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; import java.io.IOException; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.StringUtil; public class ConlluTokenSampleStream extends FilterObjectStream { /** * Initializes a {@link ConlluTokenSampleStream}. * * @param samples The {@link ObjectStream samples} used as input. */ public ConlluTokenSampleStream(ObjectStream samples) { super(samples); } @Override public TokenSample read() throws IOException { ConlluSentence sentence = samples.read(); if (sentence != null) { if (sentence.getTextComment() != null) { StringBuilder text = new StringBuilder(sentence.getTextComment()); int searchIndex = 0; for (ConlluWordLine wordLine : sentence.getWordLines()) { // skip over inserted words which are not in the source text if (wordLine.getId().contains(".")) { continue; } String token = wordLine.getForm(); int tokenIndex = text.indexOf(token, searchIndex); if (tokenIndex == -1) { throw new IOException(String.format("Failed to match token [%s] in sentence [%s] with text [%s]", token, sentence.getSentenceIdComment(), text)); } searchIndex = tokenIndex + token.length(); if (searchIndex < text.length()) { if (!StringUtil.isWhitespace(text.charAt(searchIndex))) { text.insert(searchIndex, TokenSample.DEFAULT_SEPARATOR_CHARS); } } } return TokenSample.parse(text.toString(), TokenSample.DEFAULT_SEPARATOR_CHARS); } else { throw new IOException("Sentence is missing raw text sample!"); } } return null; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_conllu_Co0100644 0000000 0000000 00000000177 14523004075 032624 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluTokenSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluTokenSampleS0100644 0000000 0000000 00000004510 14523004075 034231 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.commons.Internal; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! * * @see ConlluTokenSampleStream */ @Internal public class ConlluTokenSampleStreamFactory

extends AbstractSampleStreamFactory { interface Parameters extends BasicFormatParams { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(TokenSample.class, ConlluPOSSampleStreamFactory.CONLLU_FORMAT, new ConlluTokenSampleStreamFactory<>(ConlluTokenSampleStreamFactory.Parameters.class)); } protected ConlluTokenSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); InputStreamFactory inFactory = CmdLineUtil.createInputStreamFactory(params.getData()); try { return new ConlluTokenSampleStream(new ConlluStream(inFactory)); } catch (IOException e) { // That will throw an exception CmdLineUtil.handleCreateObjectStreamError(e); } return null; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_conllu_Co0100644 0000000 0000000 00000000157 14523004075 032622 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluWordLine.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/ConlluWordLine.jav0100644 0000000 0000000 00000010036 14523004075 034166 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; import opennlp.tools.util.InvalidFormatException; public class ConlluWordLine { private final String id; private final String form; private final String lemma; private final String uPosTag; private final String xPosTag; private final String feats; private final String head; private final String deprel; private final String deps; private final String misc; ConlluWordLine(String id, String form, String lemma, String uPosTag, String xPosTag, String feats, String head, String deprel, String deps, String misc) { this.id = id; this.form = form; this.lemma = lemma; this.uPosTag = uPosTag; this.xPosTag = xPosTag; this.feats = feats; this.head = head; this.deprel = deprel; this.deps = deps; this.misc = misc; } ConlluWordLine(String line) throws InvalidFormatException { String[] fields = line.split("\t"); if (fields.length != 10) { throw new InvalidFormatException("Line [" + line + "] must have exactly 10 fields"); } id = fields[0]; form = fields[1]; lemma = fields[2]; uPosTag = fields[3]; xPosTag = fields[4]; feats = fields[5]; head = fields[6]; deprel = fields[7]; deps = fields[8]; misc = fields[9]; } /** * @return Retrieves the word index. An Integer starting at {@code 1} for each new sentence; * may be a range for multiword tokens; may be a decimal number for empty nodes. */ public String getId() { return id; } /** * @return Retrieves the word form or punctuation symbol. */ public String getForm() { return form; } /** * @return Retrieves the lemma or stem of the word form. */ public String getLemma() { return lemma; } /** * @param tagset The {@link ConlluTagset type of tag} to retrieve, either universal * ({@link ConlluTagset#U}) or language specific ({@link ConlluTagset#X}). * * @return Retrieves the Universal part-of-speech tag or the language-specific part-of-speech tag; * underscore if not available. * @throws IllegalStateException Thrown if a non-supported {@link ConlluTagset} was specified. */ public String getPosTag(ConlluTagset tagset) { switch (tagset) { case U: return uPosTag; case X: return xPosTag; default: throw new IllegalStateException("Unexpected tagset value: " + tagset); } } /** * @return Retrieves morphological features from the universal feature inventory * or from a defined language-specific extension; underscore if not available. */ public String getFeats() { return feats; } /** * @return Retrieves the head of the current word, which is either a value of ID or zero (0). */ public String getHead() { return head; } /** * @return Retrieves the Universal dependency relation to the HEAD (root if HEAD = 0) * or a defined language-specific subtype of one. */ public String getDeprel() { return deprel; } /** * @return Retrieves the enhanced dependency graph in the form of a list of * head-deprel pairs. */ public String getDeps() { return deps; } /** * @return Retrieves any other annotation. */ public String getMisc() { return misc; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/conllu/package-info.java0100644 0000000 0000000 00000001607 14523004075 033757 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Experimental package related to the CoNNL-U format. */ package opennlp.tools.formats.conllu; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_convert_A0100644 0000000 0000000 00000000200 14523004075 032612 xustar000000000 0000000 128 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/AbstractToSentenceSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/AbstractToSentenc0100644 0000000 0000000 00000005320 14523004075 034261 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.convert; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Objects; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.tokenize.Detokenizer; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; public abstract class AbstractToSentenceSampleStream extends FilterObjectStream { private final Detokenizer detokenizer; private final int chunkSize; /** * @param detokenizer The {@link Detokenizer} to use. Must not be {@code null}. * @param samples The {@link ObjectStream samples} as input. Must not be {@code null}. * @param chunkSize The size of chunks. Must be equal to or greater than {@code 0}. * * @throws IllegalArgumentException Thrown if parameters are invalid. */ AbstractToSentenceSampleStream(Detokenizer detokenizer, ObjectStream samples, int chunkSize) { super(samples); this.detokenizer = Objects.requireNonNull(detokenizer, "detokenizer must not be null"); if (chunkSize < 0) { throw new IllegalArgumentException("chunkSize must be zero or larger but was " + chunkSize + "!"); } if (chunkSize > 0) { this.chunkSize = chunkSize; } else { this.chunkSize = Integer.MAX_VALUE; } } protected abstract String[] toSentence(T sample); @Override public SentenceSample read() throws IOException { List sentences = new ArrayList<>(); T posSample; int chunks = 0; while ((posSample = samples.read()) != null && chunks < chunkSize) { sentences.add(toSentence(posSample)); chunks++; } if (sentences.size() > 0) { return new SentenceSample(detokenizer, sentences.toArray(new String[sentences.size()][])); } else if (posSample != null) { return read(); // filter out empty line } return null; // last sample was read } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_convert_F0100644 0000000 0000000 00000000175 14523004075 032632 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/FileToByteArraySampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/FileToByteArraySa0100644 0000000 0000000 00000004204 14523004075 034164 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.convert; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import opennlp.tools.commons.Internal; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! */ @Internal public class FileToByteArraySampleStream extends FilterObjectStream { /** * Initializes a {@link FileToByteArraySampleStream}. * * @param samples The {@link ObjectStream} containing the files. */ public FileToByteArraySampleStream(ObjectStream samples) { super(samples); } private static byte[] readFile(File file) throws IOException { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); try (InputStream in = new BufferedInputStream(new FileInputStream(file))) { byte[] buffer = new byte[1024]; int length; while ((length = in.read(buffer, 0, buffer.length)) > 0) { bytes.write(buffer, 0, length); } } return bytes.toByteArray(); } @Override public byte[] read() throws IOException { File sampleFile = samples.read(); if (sampleFile != null) { return readFile(sampleFile); } else { return null; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_convert_F0100644 0000000 0000000 00000000172 14523004075 032627 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/FileToStringSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/FileToStringSampl0100644 0000000 0000000 00000005035 14523004075 034244 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.convert; import java.io.File; import java.io.IOException; import java.io.Reader; import java.nio.charset.Charset; import java.nio.file.Files; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; /** * Provides the ability to read the contents of files * contained in an object stream of files. */ public class FileToStringSampleStream extends FilterObjectStream { private final Charset encoding; /** * Initializes a {@link FileToStringSampleStream}. * * @param samples The {@link ObjectStream} containing the files. * @param encoding The {@link Charset} encoding of the files. */ public FileToStringSampleStream(ObjectStream samples, Charset encoding) { super(samples); this.encoding = encoding; } /** * Reads the contents of a {@code textFile} to a string. * * @param textFile The {@link File} to read. * @param encoding The {@link Charset} of the {@code textFile}. * * @return The string contents of the file. * @throws IOException Thrown if the file could not be read. */ private static String readFile(File textFile, Charset encoding) throws IOException { StringBuilder text = new StringBuilder(); try (Reader in = Files.newBufferedReader(textFile.toPath(), encoding)) { char[] buffer = new char[1024]; int length; while ((length = in.read(buffer, 0, buffer.length)) > 0) { text.append(buffer, 0, length); } } return text.toString(); } @Override public String read() throws IOException { File sampleFile = samples.read(); if (sampleFile != null) { return readFile(sampleFile, encoding); } else { return null; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_convert_N0100644 0000000 0000000 00000000174 14523004075 032641 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/NameToSentenceSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/NameToSentenceSam0100644 0000000 0000000 00000003515 14523004075 034210 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.convert; import opennlp.tools.commons.Internal; import opennlp.tools.namefind.NameSample; import opennlp.tools.tokenize.Detokenizer; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! */ @Internal public class NameToSentenceSampleStream extends AbstractToSentenceSampleStream { /** * Initializes a {@link NameToSentenceSampleStream}. * * @param detokenizer The {@link Detokenizer} to use. Must not be {@code null}. * @param samples The {@link ObjectStream samples} as input. Must not be {@code null}. * @param chunkSize The size of chunks. Must be equal to or greater than {@code 0}. * * @throws IllegalArgumentException Thrown if parameters are invalid. */ public NameToSentenceSampleStream(Detokenizer detokenizer, ObjectStream samples, int chunkSize) { super(detokenizer, samples, chunkSize); } @Override protected String[] toSentence(NameSample sample) { return sample.getSentence(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_convert_N0100644 0000000 0000000 00000000203 14523004075 032632 xustar000000000 0000000 131 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/NameToSentenceSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/NameToSentenceSam0100644 0000000 0000000 00000004507 14523004075 034212 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.convert; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.DetokenizerParameter; import opennlp.tools.commons.Internal; import opennlp.tools.formats.DetokenizerSampleStreamFactory; import opennlp.tools.formats.NameSampleDataStreamFactory; import opennlp.tools.namefind.NameSample; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! * * @see NameToSentenceSampleStream */ @Internal public class NameToSentenceSampleStreamFactory

extends DetokenizerSampleStreamFactory { interface Parameters extends NameSampleDataStreamFactory.Parameters, DetokenizerParameter { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(SentenceSample.class, "namefinder", new NameToSentenceSampleStreamFactory<>(Parameters.class)); } protected NameToSentenceSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); ObjectStream nameSampleStream = StreamFactoryRegistry.getFactory( NameSample.class, StreamFactoryRegistry.DEFAULT_FORMAT).create( ArgumentParser.filter(args, NameSampleDataStreamFactory.Parameters.class)); return new NameToSentenceSampleStream(createDetokenizer(params), nameSampleStream, 30); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_convert_N0100644 0000000 0000000 00000000171 14523004075 032636 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/NameToTokenSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/NameToTokenSample0100644 0000000 0000000 00000004077 14523004075 034231 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.convert; import java.io.IOException; import opennlp.tools.commons.Internal; import opennlp.tools.namefind.NameSample; import opennlp.tools.tokenize.Detokenizer; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! */ @Internal public class NameToTokenSampleStream extends FilterObjectStream { private final Detokenizer detokenizer; /** * Initializes a {@link NameToTokenSampleStream}. * * @param detokenizer The {@link Detokenizer} to use. Must not be {@code null}. * @param samples The {@link ObjectStream samples} as input. Must not be {@code null}. * * @throws IllegalArgumentException Thrown if parameters are invalid. */ public NameToTokenSampleStream(Detokenizer detokenizer, ObjectStream samples) { super(samples); this.detokenizer = detokenizer; } @Override public TokenSample read() throws IOException { NameSample nameSample = samples.read(); TokenSample tokenSample = null; if (nameSample != null ) { tokenSample = new TokenSample(detokenizer, nameSample.getSentence()); } return tokenSample; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_convert_N0100644 0000000 0000000 00000000200 14523004075 032627 xustar000000000 0000000 128 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/NameToTokenSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/NameToTokenSample0100644 0000000 0000000 00000004446 14523004075 034231 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.convert; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.DetokenizerParameter; import opennlp.tools.commons.Internal; import opennlp.tools.formats.DetokenizerSampleStreamFactory; import opennlp.tools.formats.NameSampleDataStreamFactory; import opennlp.tools.namefind.NameSample; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! * * @see NameToTokenSampleStream */ @Internal public class NameToTokenSampleStreamFactory

extends DetokenizerSampleStreamFactory { interface Parameters extends NameSampleDataStreamFactory.Parameters, DetokenizerParameter { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(TokenSample.class, "namefinder", new NameToTokenSampleStreamFactory<>(Parameters.class)); } protected NameToTokenSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); ObjectStream nameSampleStream = StreamFactoryRegistry.getFactory( NameSample.class, StreamFactoryRegistry.DEFAULT_FORMAT).create( ArgumentParser.filter(args, NameSampleDataStreamFactory.Parameters.class)); return new NameToTokenSampleStream(createDetokenizer(params), nameSampleStream); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_convert_P0100644 0000000 0000000 00000000173 14523004075 032642 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/POSToSentenceSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/POSToSentenceSamp0100644 0000000 0000000 00000003540 14523004075 034147 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.convert; import opennlp.tools.commons.Internal; import opennlp.tools.postag.POSSample; import opennlp.tools.tokenize.Detokenizer; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! */ @Internal public class POSToSentenceSampleStream extends AbstractToSentenceSampleStream { /** * Initializes a {@link POSToSentenceSampleStream}. * * @param detokenizer The {@link Detokenizer} to use. Must not be {@code null}. * @param samples The {@link ObjectStream samples} as input. Must not be {@code null}. * @param chunkSize The size of chunks. Must be equal to or greater than {@code 0}. * * @throws IllegalArgumentException Thrown if parameters are invalid. */ public POSToSentenceSampleStream(Detokenizer detokenizer, ObjectStream samples, int chunkSize) { super(detokenizer, samples, chunkSize); } @Override protected String[] toSentence(POSSample sample) { return sample.getSentence(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_convert_P0100644 0000000 0000000 00000000202 14523004075 032633 xustar000000000 0000000 130 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/POSToSentenceSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/POSToSentenceSamp0100644 0000000 0000000 00000004460 14523004075 034151 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.convert; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.DetokenizerParameter; import opennlp.tools.commons.Internal; import opennlp.tools.formats.DetokenizerSampleStreamFactory; import opennlp.tools.formats.WordTagSampleStreamFactory; import opennlp.tools.postag.POSSample; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! * * @see POSToSentenceSampleStream */ @Internal public class POSToSentenceSampleStreamFactory

extends DetokenizerSampleStreamFactory { interface Parameters extends WordTagSampleStreamFactory.Parameters, DetokenizerParameter { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(SentenceSample.class, "pos", new POSToSentenceSampleStreamFactory<>(Parameters.class)); } protected POSToSentenceSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); ObjectStream posSampleStream = StreamFactoryRegistry.getFactory(POSSample.class, StreamFactoryRegistry.DEFAULT_FORMAT).create( ArgumentParser.filter(args, WordTagSampleStreamFactory.Parameters.class)); return new POSToSentenceSampleStream(createDetokenizer(params), posSampleStream, 30); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_convert_P0100644 0000000 0000000 00000000170 14523004075 032637 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/POSToTokenSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/POSToTokenSampleS0100644 0000000 0000000 00000004203 14523004075 034124 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.convert; import java.io.IOException; import java.util.Objects; import opennlp.tools.commons.Internal; import opennlp.tools.postag.POSSample; import opennlp.tools.tokenize.Detokenizer; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! */ @Internal public class POSToTokenSampleStream extends FilterObjectStream { private final Detokenizer detokenizer; /** * Initializes a {@link POSToTokenSampleStream}. * * @param detokenizer The {@link Detokenizer} to use. Must not be {@code null}. * @param samples The {@link ObjectStream samples} as input. Must not be {@code null}. * * @throws IllegalArgumentException Thrown if parameters are invalid. */ public POSToTokenSampleStream(Detokenizer detokenizer, ObjectStream samples) { super(samples); this.detokenizer = Objects.requireNonNull(detokenizer, "detokenizer must not be null!"); } @Override public TokenSample read() throws IOException { POSSample posSample = samples.read(); TokenSample tokenSample = null; if (posSample != null ) { tokenSample = new TokenSample(detokenizer, posSample.getSentence()); } return tokenSample; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_convert_P0100644 0000000 0000000 00000000177 14523004075 032646 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/POSToTokenSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/POSToTokenSampleS0100644 0000000 0000000 00000004417 14523004075 034133 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.convert; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.DetokenizerParameter; import opennlp.tools.commons.Internal; import opennlp.tools.formats.DetokenizerSampleStreamFactory; import opennlp.tools.formats.WordTagSampleStreamFactory; import opennlp.tools.postag.POSSample; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! * * @see POSToTokenSampleStream */ @Internal public class POSToTokenSampleStreamFactory

extends DetokenizerSampleStreamFactory { interface Parameters extends WordTagSampleStreamFactory.Parameters, DetokenizerParameter { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(TokenSample.class, "pos", new POSToTokenSampleStreamFactory<>(Parameters.class)); } protected POSToTokenSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); ObjectStream posSampleStream = StreamFactoryRegistry.getFactory(POSSample.class, StreamFactoryRegistry.DEFAULT_FORMAT).create( ArgumentParser.filter(args, WordTagSampleStreamFactory.Parameters.class)); return new POSToTokenSampleStream(createDetokenizer(params), posSampleStream); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_convert_P0100644 0000000 0000000 00000000170 14523004075 032637 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/ParseToPOSSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/ParseToPOSSampleS0100644 0000000 0000000 00000004023 14523004075 034116 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.convert; import java.io.IOException; import java.util.ArrayList; import java.util.List; import opennlp.tools.commons.Internal; import opennlp.tools.parser.Parse; import opennlp.tools.postag.POSSample; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! */ @Internal public class ParseToPOSSampleStream extends FilterObjectStream { /** * Initializes a {@link ParseToPOSSampleStream}. * * @param samples The {@link ObjectStream samples} as input. Must not be {@code null}. * * @throws IllegalArgumentException Thrown if parameters are invalid. */ public ParseToPOSSampleStream(ObjectStream samples) { super(samples); } @Override public POSSample read() throws IOException { Parse parse = samples.read(); if (parse != null) { List sentence = new ArrayList<>(); List tags = new ArrayList<>(); for (Parse tagNode : parse.getTagNodes()) { sentence.add(tagNode.getCoveredText()); tags.add(tagNode.getType()); } return new POSSample(sentence, tags); } else { return null; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_convert_P0100644 0000000 0000000 00000000177 14523004075 032646 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/ParseToPOSSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/ParseToPOSSampleS0100644 0000000 0000000 00000004241 14523004075 034120 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.convert; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.commons.Internal; import opennlp.tools.formats.LanguageSampleStreamFactory; import opennlp.tools.formats.ParseSampleStreamFactory; import opennlp.tools.parser.Parse; import opennlp.tools.postag.POSSample; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! * * @see ParseToPOSSampleStream */ @Internal public class ParseToPOSSampleStreamFactory extends LanguageSampleStreamFactory { private ParseToPOSSampleStreamFactory() { super(ParseSampleStreamFactory.Parameters.class); } @Override public ObjectStream create(String[] args) { ParseSampleStreamFactory.Parameters params = ArgumentParser.parse(args, ParseSampleStreamFactory.Parameters.class); ObjectStream parseSampleStream = StreamFactoryRegistry.getFactory(Parse.class, StreamFactoryRegistry.DEFAULT_FORMAT).create( ArgumentParser.filter(args, ParseSampleStreamFactory.Parameters.class)); return new ParseToPOSSampleStream(parseSampleStream); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(POSSample.class, "parse", new ParseToPOSSampleStreamFactory()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_convert_P0100644 0000000 0000000 00000000204 14523004075 032635 xustar000000000 0000000 132 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/ParseToSentenceSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/ParseToSentenceSa0100644 0000000 0000000 00000004503 14523004075 034223 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.convert; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.DetokenizerParameter; import opennlp.tools.commons.Internal; import opennlp.tools.formats.DetokenizerSampleStreamFactory; import opennlp.tools.formats.ParseSampleStreamFactory; import opennlp.tools.parser.Parse; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! */ @Internal public class ParseToSentenceSampleStreamFactory extends DetokenizerSampleStreamFactory { interface Parameters extends ParseSampleStreamFactory.Parameters, DetokenizerParameter { } private ParseToSentenceSampleStreamFactory() { super(Parameters.class); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); ObjectStream parseSampleStream = StreamFactoryRegistry.getFactory(Parse.class, StreamFactoryRegistry.DEFAULT_FORMAT).create( ArgumentParser.filter(args, ParseSampleStreamFactory.Parameters.class)); return new POSToSentenceSampleStream(createDetokenizer(params), new ParseToPOSSampleStream(parseSampleStream), 30); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(SentenceSample.class, "parse", new ParseToSentenceSampleStreamFactory()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_convert_P0100644 0000000 0000000 00000000201 14523004075 032632 xustar000000000 0000000 129 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/ParseToTokenSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/convert/ParseToTokenSampl0100644 0000000 0000000 00000004534 14523004075 034254 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.convert; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.DetokenizerParameter; import opennlp.tools.commons.Internal; import opennlp.tools.formats.DetokenizerSampleStreamFactory; import opennlp.tools.formats.ParseSampleStreamFactory; import opennlp.tools.formats.WordTagSampleStreamFactory; import opennlp.tools.parser.Parse; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! */ @Internal public class ParseToTokenSampleStreamFactory extends DetokenizerSampleStreamFactory { interface Parameters extends ParseSampleStreamFactory.Parameters, DetokenizerParameter { } private ParseToTokenSampleStreamFactory() { super(Parameters.class); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); ObjectStream parseSampleStream = StreamFactoryRegistry.getFactory(Parse.class, StreamFactoryRegistry.DEFAULT_FORMAT).create( ArgumentParser.filter(args, WordTagSampleStreamFactory.Parameters.class)); return new POSToTokenSampleStream(createDetokenizer(params), new ParseToPOSSampleStream(parseSampleStream)); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(TokenSample.class, "parse", new ParseToTokenSampleStreamFactory()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_frenchtre0100644 0000000 0000000 00000000177 14523004075 032667 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/frenchtreebank/ConstitDocumentHandler.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/frenchtreebank/ConstitDoc0100644 0000000 0000000 00000013135 14523004075 034250 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.frenchtreebank; import java.util.LinkedList; import java.util.List; import java.util.Stack; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import opennlp.tools.parser.AbstractBottomUpParser; import opennlp.tools.parser.Constituent; import opennlp.tools.parser.Parse; import opennlp.tools.util.Span; class ConstitDocumentHandler extends DefaultHandler { private static final String SENT_ELEMENT_NAME = "SENT"; private static final String WORD_ELEMENT_NAME = "w"; private static final String SENT_TYPE_NAME = "S"; private final List parses; private boolean insideSentenceElement; /** * A token buffer, a token might be build up by multiple * {@link #characters(char[], int, int)} calls. */ private final StringBuilder tokenBuffer = new StringBuilder(); private final StringBuilder text = new StringBuilder(); private int offset; private final Stack stack = new Stack<>(); private final List cons = new LinkedList<>(); ConstitDocumentHandler(List parses) { this.parses = parses; } private String cat; private String subcat; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { String type = qName; if (SENT_ELEMENT_NAME.equals(qName)) { // Clear everything to be ready for the next sentence text.setLength(0); offset = 0; stack.clear(); cons.clear(); type = SENT_TYPE_NAME; insideSentenceElement = true; } else if (WORD_ELEMENT_NAME.equals(qName)) { // Note: // If there are compound words they are represented in a couple // of ways in the training data. // Many of them are marked with the compound attribute, but not // all of them. Thats why it is not used in the code to detect // a compound word. // Compounds are detected by the fact that a w tag is appearing // inside a w tag. // // The type of a compound word can be encoded either cat of the compound // plus the catint of each word of the compound. // Or all compound words have the cat plus subcat of the compound, in this // case they have an empty cat attribute. // // This implementation hopefully decodes these cases correctly! String newCat = attributes.getValue("cat"); if (newCat != null && newCat.length() > 0) { cat = newCat; } String newSubcat = attributes.getValue("subcat"); if (newSubcat != null && newSubcat.length() > 0) { subcat = newSubcat; } if (cat != null) { type = cat + (subcat != null ? subcat : ""); } else { String catint = attributes.getValue("catint"); if (catint != null) { type = cat + catint; } else { type = cat + subcat; } } } stack.push(new Constituent(type, new Span(offset, offset))); tokenBuffer.setLength(0); } @Override public void characters(char[] ch, int start, int length) throws SAXException { tokenBuffer.append(ch, start, length); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { boolean isCreateConstituent = true; if (insideSentenceElement) { if (WORD_ELEMENT_NAME.equals(qName)) { String token = tokenBuffer.toString().trim(); if (token.length() > 0) { cons.add(new Constituent(AbstractBottomUpParser.TOK_NODE, new Span(offset, offset + token.length()))); text.append(token).append(" "); offset += token.length() + 1; } else { isCreateConstituent = false; } } Constituent unfinishedCon = stack.pop(); if (isCreateConstituent) { int start = unfinishedCon.getSpan().getStart(); if (start < offset) { cons.add(new Constituent(unfinishedCon.getLabel(), new Span(start, offset - 1))); } } if (SENT_ELEMENT_NAME.equals(qName)) { // Finished parsing sentence, now put everything together and create // a Parse object String txt = text.toString(); int tokenIndex = -1; Parse p = new Parse(txt, new Span(0, txt.length()), AbstractBottomUpParser.TOP_NODE, 1,0); for (Constituent con : cons) { String type = con.getLabel(); if (!type.equals(AbstractBottomUpParser.TOP_NODE)) { if (AbstractBottomUpParser.TOK_NODE.equals(type)) { tokenIndex++; } Parse c = new Parse(txt, con.getSpan(), type, 1, tokenIndex); p.insert(c); } } parses.add(p); insideSentenceElement = false; } tokenBuffer.setLength(0); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_frenchtre0100644 0000000 0000000 00000000201 14523004075 032653 xustar000000000 0000000 129 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/frenchtreebank/ConstitParseSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/frenchtreebank/ConstitPar0100644 0000000 0000000 00000004442 14523004075 034266 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.frenchtreebank; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.SAXParser; import org.xml.sax.SAXException; import opennlp.tools.parser.Parse; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.XmlUtil; public class ConstitParseSampleStream extends FilterObjectStream { private final SAXParser saxParser; private final List parses = new ArrayList<>(); /** * Initializes a {@link ConstitParseSampleStream}. * * @param samples The {@link ObjectStream byte[] samples} as input. Must not be {@code null}. * * @throws IllegalArgumentException Thrown if parameters are invalid. */ protected ConstitParseSampleStream(ObjectStream samples) { super(samples); saxParser = XmlUtil.createSaxParser(); } @Override public Parse read() throws IOException { if (parses.isEmpty()) { byte[] xmlbytes = samples.read(); if (xmlbytes != null) { List producedParses = new ArrayList<>(); try { saxParser.parse(new ByteArrayInputStream(xmlbytes), new ConstitDocumentHandler(producedParses)); } catch (SAXException e) { throw new IOException(e.getMessage(), e); } parses.addAll(producedParses); } } if (parses.size() > 0) { return parses.remove(0); } return null; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_frenchtre0100644 0000000 0000000 00000000210 14523004075 032653 xustar000000000 0000000 136 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/frenchtreebank/ConstitParseSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/frenchtreebank/ConstitPar0100644 0000000 0000000 00000004235 14523004075 034266 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.frenchtreebank; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.commons.Internal; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.formats.DirectorySampleStream; import opennlp.tools.formats.convert.FileToByteArraySampleStream; import opennlp.tools.parser.Parse; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! * * @see ConstitParseSampleStream */ @Internal public class ConstitParseSampleStreamFactory extends AbstractSampleStreamFactory { // TODO: The parameters have an encoding, but the data is in xml interface Parameters extends BasicFormatParams { } private ConstitParseSampleStreamFactory() { super(Parameters.class); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); return new ConstitParseSampleStream(new FileToByteArraySampleStream( new DirectorySampleStream(params.getData(), null, false))); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(Parse.class, "frenchtreebank", new ConstitParseSampleStreamFactory()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_frenchtre0100644 0000000 0000000 00000000165 14523004075 032664 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/frenchtreebank/package-info.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/frenchtreebank/package-in0100644 0000000 0000000 00000001627 14523004075 034201 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Experimental package related to the French Treebank format. */ package opennlp.tools.formats.frenchtreebank; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_irishsent0100644 0000000 0000000 00000000205 14523004075 032707 xustar000000000 0000000 133 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/irishsentencebank/IrishSentenceBankDocument.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/irishsentencebank/IrishSe0100644 0000000 0000000 00000024315 14523004075 034265 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.irishsentencebank; import java.io.BufferedInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.Span; import opennlp.tools.util.XmlUtil; /** * A structure to hold an Irish Sentence Bank document, which is a collection * of tokenized sentences. *

* The sentence bank can be downloaded from this * website. *

* It was originally published and described * * http://www.lexiconista.com/datasets/sentencebank-ga/, yet this * page was gone when last checked in December 2022. */ public class IrishSentenceBankDocument { public static class IrishSentenceBankFlex { final String surface; final String[] flex; public String getSurface() { return surface; } public String[] getFlex() { return flex; } public IrishSentenceBankFlex(String sf, String[] fl) { this.surface = sf; this.flex = fl; } } public static class IrishSentenceBankSentence { private final String source; private final String translation; private final String original; private final Span[] tokens; private final IrishSentenceBankFlex[] flex; public String getSource() { return source; } public String getTranslation() { return translation; } public String getOriginal() { return original; } public Span[] getTokens() { return tokens; } public IrishSentenceBankFlex[] getFlex() { return flex; } public TokenSample getTokenSample() { return new TokenSample(original, tokens); } public IrishSentenceBankSentence(String src, String trans, String orig, Span[] toks, IrishSentenceBankFlex[] flx) { this.source = src; this.translation = trans; this.original = orig; this.tokens = toks; this.flex = flx; } } private final List sentences; /** * Initializes an empty {@link IrishSentenceBankDocument}. */ public IrishSentenceBankDocument() { sentences = new ArrayList<>(); } /** * @param sent A {@link IrishSentenceBankSentence} to be added. */ public void add(IrishSentenceBankSentence sent) { this.sentences.add(sent); } /** * @return Retrieves an unmodifiable list of all {@link IrishSentenceBankSentence sentences}. */ public List getSentences() { return Collections.unmodifiableList(sentences); } /** * Helper to adjust the span of punctuation tokens: ignores spaces to the left of the string. * @param s The string to check. * @param start The offset of the start of the string. * * @return The offset adjusted to ignore spaces to the left. */ private static int advanceLeft(String s, int start) { int ret = start; for (char c : s.toCharArray()) { if (c == ' ') { ret++; } else { return ret; } } return ret; } /** * Helper to adjust the span of punctuation tokens: ignores spaces to the right of the string. * @param s The string to check. * @param start The offset of the start of the string. * * @return The offset of the end of the string, adjusted to ignore spaces to the right. */ private static int advanceRight(String s, int start) { int end = s.length() - 1; int ret = start + end + 1; for (int i = end; i > 0; i--) { if (s.charAt(i) == ' ') { ret--; } else { return ret; } } return ret; } /** * Parses the data provided via an {@link InputStream} into a * {@link IrishSentenceBankDocument}. * * @param is A valid, open {@link InputStream} ready for use. * * @return A valid {@link IrishSentenceBankDocument}. * @throws IOException Thrown if IO errors occurred. */ public static IrishSentenceBankDocument parse(InputStream is) throws IOException { IrishSentenceBankDocument document = new IrishSentenceBankDocument(); try { DocumentBuilder docBuilder = XmlUtil.createDocumentBuilder(); Document doc = docBuilder.parse(is); String root = doc.getDocumentElement().getNodeName(); if (!root.equalsIgnoreCase("sentences")) { throw new IOException("Expected root node " + root); } NodeList nl = doc.getDocumentElement().getChildNodes(); for (int i = 0; i < nl.getLength(); i++) { Node sentnode = nl.item(i); if (sentnode.getNodeName().equals("sentence")) { String src = sentnode.getAttributes().getNamedItem("source").getNodeValue(); String trans = ""; Map toks = new HashMap<>(); Map> flx = new HashMap<>(); List spans = new ArrayList<>(); NodeList sentnl = sentnode.getChildNodes(); int flexes = 1; java.lang.StringBuilder orig = new java.lang.StringBuilder(); for (int j = 0; j < sentnl.getLength(); j++) { final String name = sentnl.item(j).getNodeName(); switch (name) { case "flex": String slottmpa = sentnl.item(j).getAttributes().getNamedItem("slot").getNodeValue(); Integer flexslot = Integer.parseInt(slottmpa); if (flexslot > flexes) { flexes = flexslot; } flx.computeIfAbsent(flexslot, k -> new ArrayList<>()); String tkn = sentnl.item(j).getAttributes().getNamedItem("lemma").getNodeValue(); flx.get(flexslot).add(tkn); break; case "translation": trans = sentnl.item(j).getFirstChild().getTextContent(); break; case "original": int last = 0; NodeList orignl = sentnl.item(j).getChildNodes(); for (int k = 0; k < orignl.getLength(); k++) { switch (orignl.item(k).getNodeName()) { case "token": String tmptok = orignl.item(k).getFirstChild().getTextContent(); spans.add(new Span(last, last + tmptok.length())); String slottmpb = orignl.item(k).getAttributes().getNamedItem("slot").getNodeValue(); int tokslot = Integer.parseInt(slottmpb); if (tokslot > flexes) { flexes = tokslot; } toks.put(tokslot, tmptok); orig.append(tmptok); last += tmptok.length(); break; case "#text": String tmptxt = orignl.item(k).getTextContent(); orig.append(tmptxt); if (!" ".equals(tmptxt)) { spans.add(new Span(advanceLeft(tmptxt, last), advanceRight(tmptxt, last))); } last += tmptxt.length(); break; default: throw new IOException("Unexpected node: " + orignl.item(k).getNodeName()); } } break; case "#text": case "#comment": break; default: throw new IOException("Unexpected node: " + name); } } IrishSentenceBankFlex[] flexa = new IrishSentenceBankFlex[flexes]; for (Entry entry : toks.entrySet()) { final Integer flexidx = entry.getKey(); final String left = entry.getValue(); if (flx.get(flexidx) == null) { flexa = null; break; } int rsize = flx.get(flexidx).size(); String[] right = new String[rsize]; right = flx.get(flexidx).toArray(right); flexa[flexidx - 1] = new IrishSentenceBankFlex(left, right); } Span[] spanout = new Span[spans.size()]; spanout = spans.toArray(spanout); document.add(new IrishSentenceBankSentence(src, trans, orig.toString(), spanout, flexa)); } else if (!sentnode.getNodeName().equals("#text") && !sentnode.getNodeName().equals("#comment")) { throw new IOException("Unexpected node: " + sentnode.getNodeName()); } } return document; } catch (SAXException e) { throw new IOException("Failed to parse IrishSentenceBank document", e); } } /** * Parses the data provided via a {@link File} into a * {@link IrishSentenceBankDocument}. * * @param file A valid {@link File} that holds the data to process. * * @return A valid {@link IrishSentenceBankDocument}. * @throws IOException Thrown if IO errors occurred. */ static IrishSentenceBankDocument parse(File file) throws IOException { try (InputStream in = new BufferedInputStream(Files.newInputStream(file.toPath()))) { return parse(in); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_irishsent0100644 0000000 0000000 00000000213 14523004075 032706 xustar000000000 0000000 139 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/irishsentencebank/IrishSentenceBankSentenceStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/irishsentencebank/IrishSe0100644 0000000 0000000 00000004405 14523004075 034263 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.irishsentencebank; import java.io.IOException; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; class IrishSentenceBankSentenceStream implements ObjectStream { private final IrishSentenceBankDocument source; private Iterator sentenceIt; IrishSentenceBankSentenceStream(IrishSentenceBankDocument source) { this.source = source; reset(); } @Override public SentenceSample read() throws IOException { StringBuilder sentencesString = new StringBuilder(); List sentenceSpans = new LinkedList<>(); while (sentenceIt.hasNext()) { IrishSentenceBankDocument.IrishSentenceBankSentence sentence = sentenceIt.next(); int begin = sentencesString.length(); if (sentence.getOriginal() != null) { sentencesString.append(sentence.getOriginal()); } sentenceSpans.add(new Span(begin, sentencesString.length())); sentencesString.append(' '); } // end of stream is reached, indicate that with null return value if (sentenceSpans.size() == 0) { return null; } return new SentenceSample(sentencesString.toString(), sentenceSpans.toArray(new Span[0])); } @Override public void reset() { sentenceIt = source.getSentences().iterator(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_irishsent0100644 0000000 0000000 00000000222 14523004075 032706 xustar000000000 0000000 146 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/irishsentencebank/IrishSentenceBankSentenceStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/irishsentencebank/IrishSe0100644 0000000 0000000 00000004340 14523004075 034261 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.irishsentencebank; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.ObjectStream; /** * @see IrishSentenceBankSentenceStream */ public class IrishSentenceBankSentenceStreamFactory

extends AbstractSampleStreamFactory { interface Parameters extends BasicFormatParams { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(SentenceSample.class, "irishsentencebank", new IrishSentenceBankSentenceStreamFactory<>( IrishSentenceBankSentenceStreamFactory.Parameters.class)); } protected IrishSentenceBankSentenceStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); CmdLineUtil.checkInputFile("Data", params.getData()); IrishSentenceBankDocument isbDoc = null; try { isbDoc = IrishSentenceBankDocument.parse(params.getData()); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } return new IrishSentenceBankSentenceStream(isbDoc); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_irishsent0100644 0000000 0000000 00000000216 14523004075 032711 xustar000000000 0000000 142 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/irishsentencebank/IrishSentenceBankTokenSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/irishsentencebank/IrishSe0100644 0000000 0000000 00000003413 14523004075 034261 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.irishsentencebank; import java.io.IOException; import java.util.Iterator; import opennlp.tools.commons.Internal; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! */ @Internal class IrishSentenceBankTokenSampleStream implements ObjectStream { private final IrishSentenceBankDocument source; private Iterator sentenceIt; IrishSentenceBankTokenSampleStream(IrishSentenceBankDocument source) { this.source = source; reset(); } @Override public TokenSample read() throws IOException { if (sentenceIt.hasNext()) { IrishSentenceBankDocument.IrishSentenceBankSentence sentence = sentenceIt.next(); return sentence.getTokenSample(); } else { return null; } } @Override public void reset() { sentenceIt = source.getSentences().iterator(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_irishsent0100644 0000000 0000000 00000000225 14523004075 032711 xustar000000000 0000000 149 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/irishsentencebank/IrishSentenceBankTokenSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/irishsentencebank/IrishSe0100644 0000000 0000000 00000004352 14523004075 034264 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.irishsentencebank; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.formats.DetokenizerSampleStreamFactory; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.ObjectStream; /** * @see IrishSentenceBankTokenSampleStream */ public class IrishSentenceBankTokenSampleStreamFactory

extends DetokenizerSampleStreamFactory { interface Parameters extends BasicFormatParams { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(TokenSample.class, "irishsentencebank", new IrishSentenceBankTokenSampleStreamFactory<>( IrishSentenceBankTokenSampleStreamFactory.Parameters.class)); } protected IrishSentenceBankTokenSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); CmdLineUtil.checkInputFile("Data", params.getData()); IrishSentenceBankDocument isbDoc = null; try { isbDoc = IrishSentenceBankDocument.parse(params.getData()); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } return new IrishSentenceBankTokenSampleStream(isbDoc); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_irishsent0100644 0000000 0000000 00000000170 14523004075 032710 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/irishsentencebank/package-info.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/irishsentencebank/package0100644 0000000 0000000 00000001636 14523004075 034313 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Experimental package related to the Irish Sentence Bank format. */ package opennlp.tools.formats.irishsentencebank; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_leipzig_L0100644 0000000 0000000 00000000175 14523004075 032623 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/leipzig/LeipzigLanguageSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/leipzig/LeipzigLanguageSa0100644 0000000 0000000 00000015420 14523004075 034213 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.leipzig; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Random; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.IntStream; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.langdetect.Language; import opennlp.tools.langdetect.LanguageSample; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.MarkableFileInputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; public class LeipzigLanguageSampleStream implements ObjectStream { private class LeipzigSentencesStream implements ObjectStream { private final String lang; private final Iterator lineIterator; /** * Initializes a {@link LeipzigSentencesStream}. * * @param lang An ISO language code. * @param sentencesFile The {@link File} which contains sentences to process. * @param sentencesPerSample The number of sentences per sample. * @param numberOfSamples The number of samples to process at maximum. * * @throws IOException Thrown if IO errors occurred. * @throws InvalidFormatException Thrown if {@code sentencesFile} has not enough lines to process. */ LeipzigSentencesStream(String lang, File sentencesFile, int sentencesPerSample, int numberOfSamples) throws IOException { this.lang = lang; // The file name contains the number of lines, but to make this more stable // the file is once scanned for the count even tough this is slower int totalLineCount = (int) Files.lines(sentencesFile.toPath()).count(); int requiredLines = sentencesPerSample * numberOfSamples; if (totalLineCount < requiredLines) throw new InvalidFormatException( String.format("%s does not contain enough lines (%d lines < %d required lines).", sentencesFile.getPath(), totalLineCount, requiredLines)); List indexes = IntStream.range(0, totalLineCount) .boxed().collect(Collectors.toList()); Collections.shuffle(indexes, random); Set selectedLines = new HashSet<>(indexes.subList(0, requiredLines)); List sentences = new ArrayList<>(); try (ObjectStream lineStream = new PlainTextByLineStream( new MarkableFileInputStreamFactory(sentencesFile), StandardCharsets.UTF_8)) { int lineIndex = 0; String line; while ((line = lineStream.read()) != null) { int tabIndex = line.indexOf('\t'); if (tabIndex != -1) { if (selectedLines.contains(lineIndex)) { sentences.add(line); } } lineIndex++; } } Collections.shuffle(sentences, random); lineIterator = sentences.iterator(); } @Override public LanguageSample read() throws IOException { StringBuilder sampleString = new StringBuilder(); int count = 0; while (count < sentencesPerSample && lineIterator.hasNext()) { String line = lineIterator.next(); int textStart = line.indexOf('\t') + 1; sampleString.append(line.substring(textStart)).append(" "); count++; } if (sampleString.length() > 0) { return new LanguageSample(new Language(lang), sampleString); } return null; } } private final int sentencesPerSample; private final Map langSampleCounts; private final File[] sentencesFiles; private Iterator sentencesFilesIt; private ObjectStream sampleStream; private final Random random; /** * Initializes a {@link LeipzigLanguageSampleStream}. * * @param leipzigFolder The {@link File directory} which contains files to process. * @param sentencesPerSample The number of sentences per sample. * @param samplesPerLanguage The number of samples per language to process at maximum. * * @throws IOException Thrown if IO errors occurred. */ public LeipzigLanguageSampleStream(File leipzigFolder, final int sentencesPerSample, final int samplesPerLanguage) throws IOException { this.sentencesPerSample = sentencesPerSample; sentencesFiles = leipzigFolder.listFiles(pathname -> !pathname.isHidden() && pathname.isFile() && pathname.getName().length() >= 3 && pathname.getName().substring(0,3).matches("[a-z]+")); if (null == sentencesFiles) { throw new TerminateToolException(-1 , "Directory " + leipzigFolder + " empty , No files to read!"); } Arrays.sort(sentencesFiles); Map langCounts = Arrays.stream(sentencesFiles) .map(file -> file.getName().substring(0, 3)) .collect(Collectors.groupingBy(String::toString, Collectors.summingInt(v -> 1))); langSampleCounts = langCounts.entrySet().stream() .collect(Collectors.toMap(Map.Entry::getKey, e -> samplesPerLanguage / e.getValue())); random = new Random(23); reset(); } @Override public LanguageSample read() throws IOException { LanguageSample sample; if (sampleStream != null && (sample = sampleStream.read()) != null) { return sample; } else { if (sentencesFilesIt.hasNext()) { File sentencesFile = sentencesFilesIt.next(); String lang = sentencesFile.getName().substring(0, 3); sampleStream = new LeipzigSentencesStream(lang, sentencesFile, sentencesPerSample, langSampleCounts.get(lang)); return read(); } } return null; } @Override public void reset() throws IOException { sentencesFilesIt = Arrays.asList(sentencesFiles).iterator(); sampleStream = null; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_leipzig_L0100644 0000000 0000000 00000000204 14523004075 032614 xustar000000000 0000000 132 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/leipzig/LeipzigLanguageSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/leipzig/LeipzigLanguageSa0100644 0000000 0000000 00000006361 14523004075 034217 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.leipzig; import java.io.File; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.EncodingParameter; import opennlp.tools.commons.Internal; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.langdetect.LanguageSample; import opennlp.tools.util.ObjectStream; /** * Note: * Do not use this class, internal use only! * * @see LeipzigLanguageSampleStream */ @Internal public class LeipzigLanguageSampleStreamFactory

extends AbstractSampleStreamFactory { interface Parameters extends EncodingParameter { @ParameterDescription(valueName = "sentencesDir", description = "dir with Leipzig sentences to be used") File getSentencesDir(); @ParameterDescription(valueName = "sentencesPerSample", description = "number of sentences per sample") String getSentencesPerSample(); @ParameterDescription(valueName = "samplesPerLanguage", description = "number of samples per language") String getSamplesPerLanguage(); @ParameterDescription(valueName = "samplesToSkip", description = "number of samples to skip before returning") @OptionalParameter(defaultValue = "0") String getSamplesToSkip(); } protected LeipzigLanguageSampleStreamFactory(Class

params) { super(params); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(LanguageSample.class, "leipzig", new LeipzigLanguageSampleStreamFactory<>(Parameters.class)); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); File sentencesFileDir = params.getSentencesDir(); try { return new SampleSkipStream<>(new SampleShuffleStream<>( new LeipzigLanguageSampleStream(sentencesFileDir, Integer.parseInt(params.getSentencesPerSample()), Integer.parseInt(params.getSamplesPerLanguage()) + Integer.parseInt(params.getSamplesToSkip()))), Integer.parseInt(params.getSamplesToSkip())); } catch (IOException e) { throw new TerminateToolException(-1, "IO error while opening sample data.", e); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_leipzig_S0100644 0000000 0000000 00000000165 14523004075 032631 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/leipzig/SampleShuffleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/leipzig/SampleShuffleStre0100644 0000000 0000000 00000003275 14523004075 034261 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.leipzig; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Random; import opennlp.tools.util.ObjectStream; class SampleShuffleStream implements ObjectStream { private final List bufferedSamples = new ArrayList<>(); private Iterator sampleIt; SampleShuffleStream(ObjectStream samples) throws IOException { T sample; while ((sample = samples.read()) != null) { bufferedSamples.add(sample); } Collections.shuffle(bufferedSamples, new Random(23)); reset(); } @Override public T read() throws IOException { if (sampleIt.hasNext()) { return sampleIt.next(); } return null; } @Override public void reset() throws IOException, UnsupportedOperationException { sampleIt = bufferedSamples.iterator(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_leipzig_S0100644 0000000 0000000 00000000162 14523004075 032626 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/leipzig/SampleSkipStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/leipzig/SampleSkipStream.0100644 0000000 0000000 00000003066 14523004075 034165 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.leipzig; import java.io.IOException; import opennlp.tools.util.ObjectStream; class SampleSkipStream implements ObjectStream { private final ObjectStream samples; private final int samplesToSkip; SampleSkipStream(ObjectStream samples, int samplesToSkip) throws IOException { this.samples = samples; this.samplesToSkip = samplesToSkip; skipSamples(); } @Override public T read() throws IOException { return samples.read(); } @Override public void reset() throws IOException, UnsupportedOperationException { this.samples.reset(); skipSamples(); } private void skipSamples() throws IOException { int i = 0; while (i < samplesToSkip && (samples.read()) != null) { i++; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_leipzig_p0100644 0000000 0000000 00000000156 14523004075 032666 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/leipzig/package-info.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/leipzig/package-info.java0100644 0000000 0000000 00000001627 14523004075 034130 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Experimental package related to the {@code Leipzig} corpus format. */ package opennlp.tools.formats.leipzig; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_letsmt_De0100644 0000000 0000000 00000000177 14523004075 032627 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/letsmt/DetokenizeSentenceSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/letsmt/DetokenizeSentence0100644 0000000 0000000 00000005422 14523004075 034314 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.letsmt; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Objects; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.tokenize.Detokenizer; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; public class DetokenizeSentenceSampleStream extends FilterObjectStream { private final Detokenizer detokenizer; /** * Initializes a {@link DetokenizeSentenceSampleStream}. * * @param detokenizer The {@link Detokenizer} to use. Must not be {@code null}. * @param samples The {@link ObjectStream samples} as input. Must not be {@code null}. * * @throws IllegalArgumentException Thrown if parameters are invalid. */ public DetokenizeSentenceSampleStream(Detokenizer detokenizer, ObjectStream samples) { super(samples); this.detokenizer = Objects.requireNonNull(detokenizer); } @Override public SentenceSample read() throws IOException { SentenceSample sample = samples.read(); if (sample != null) { List sentenceTexts = new ArrayList<>(); for (Span sentenceSpan : sample.getSentences()) { sentenceTexts.add(sample.getDocument().substring(sentenceSpan.getStart(), sentenceSpan.getEnd())); } StringBuilder documentText = new StringBuilder(); List newSentenceSpans = new ArrayList<>(); for (String sentenceText : sentenceTexts) { String[] tokens = WhitespaceTokenizer.INSTANCE.tokenize(sentenceText); int begin = documentText.length(); documentText.append(detokenizer.detokenize(tokens, null)); newSentenceSpans.add(new Span(begin, documentText.length())); documentText.append(' '); } return new SentenceSample(documentText, newSentenceSpans.toArray(new Span[0])); } return null; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_letsmt_Le0100644 0000000 0000000 00000000157 14523004075 032635 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/letsmt/LetsmtDocument.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/letsmt/LetsmtDocument.jav0100644 0000000 0000000 00000012070 14523004075 034251 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.letsmt; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import javax.xml.parsers.SAXParser; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; import opennlp.tools.util.XmlUtil; /** * A structure to hold the letsmt document. The documents contain sentences and depending on the * source it either contains tokenized text (words) or an un-tokenized sentence string. *

* The format specification can be found * * here. */ public class LetsmtDocument { private static final String ORG_XML_FEATURES_DISALLOW_DOCTYPE_DECL = "http://apache.org/xml/features/disallow-doctype-decl"; public static class LetsmtSentence { private String nonTokenizedText; private String[] tokens; public String getNonTokenizedText() { return nonTokenizedText; } public String[] getTokens() { if (tokens != null) { return Arrays.copyOf(tokens, tokens.length); } return null; } } /** * A {@link DefaultHandler content handler} to receive and process SAX events. */ public static class LetsmtDocumentHandler extends DefaultHandler { private final List sentences = new ArrayList<>(); private final StringBuilder chars = new StringBuilder(); private List tokens = new ArrayList<>(); @Override public void characters(char[] ch, int start, int length) throws SAXException { chars.append(ch, start, length); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); // Note: // words are optional in sentences, if there are no words just the chars have to be captured switch (qName) { case "w": tokens.add(chars.toString().trim()); chars.setLength(0); break; // TODO: The sentence should contain the id, so it can be tracked back to the // place it came from case "s": LetsmtSentence sentence = new LetsmtSentence(); if (tokens.size() > 0) { sentence.tokens = tokens.toArray(new String[0]); tokens = new ArrayList<>(); } else { sentence.nonTokenizedText = chars.toString().trim(); } sentences.add(sentence); chars.setLength(0); } } } private final List sentences; private LetsmtDocument(List sentences) { this.sentences = sentences; } /** * @return Retrieves the sentences of a {@link LetsmtDocument}. */ public List getSentences() { return Collections.unmodifiableList(sentences); } /** * @param letsmtXmlIn The {@link InputStream} referencing the document to parse. * * @return A valid {@link LetsmtDocument} instance. * @throws IOException Thrown if IO errors occurred during loading or parsing. */ static LetsmtDocument parse(InputStream letsmtXmlIn) throws IOException { SAXParser saxParser = XmlUtil.createSaxParser(); try { XMLReader xmlReader = saxParser.getXMLReader(); LetsmtDocumentHandler docHandler = new LetsmtDocumentHandler(); xmlReader.setContentHandler(docHandler); xmlReader.setFeature(ORG_XML_FEATURES_DISALLOW_DOCTYPE_DECL, true); xmlReader.parse(new InputSource(letsmtXmlIn)); return new LetsmtDocument(docHandler.sentences); } catch (SAXException e) { throw new IOException("Failed to parse letsmt xml!", e); } } /** * @param file The {@link File} referencing the document to parse. * * @return A valid {@link LetsmtDocument} instance. * @throws IOException Thrown if IO errors occurred during loading or parsing. */ static LetsmtDocument parse(File file) throws IOException { try (InputStream in = new BufferedInputStream(new FileInputStream(file))) { return parse(in); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_letsmt_Le0100644 0000000 0000000 00000000165 14523004075 032634 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/letsmt/LetsmtSentenceStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/letsmt/LetsmtSentenceStre0100644 0000000 0000000 00000004504 14523004075 034321 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.letsmt; import java.io.IOException; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; class LetsmtSentenceStream implements ObjectStream { private final LetsmtDocument source; private Iterator sentenceIt; LetsmtSentenceStream(LetsmtDocument source) { this.source = source; reset(); } @Override public SentenceSample read() throws IOException { StringBuilder sentencesString = new StringBuilder(); List sentenceSpans = new LinkedList<>(); for (int i = 0; sentenceIt.hasNext() && i < 25 ; i++) { LetsmtDocument.LetsmtSentence sentence = sentenceIt.next(); int begin = sentencesString.length(); if (sentence.getTokens() != null) { sentencesString.append(String.join(" ", sentence.getTokens())); } else if (sentence.getNonTokenizedText() != null) { sentencesString.append(sentence.getNonTokenizedText()); } sentenceSpans.add(new Span(begin, sentencesString.length())); sentencesString.append(' '); } // end of stream is reached, indicate that with null return value if (sentenceSpans.size() == 0) { return null; } return new SentenceSample(sentencesString.toString(), sentenceSpans.toArray(new Span[0])); } @Override public void reset() { sentenceIt = source.getSentences().iterator(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_letsmt_Le0100644 0000000 0000000 00000000174 14523004075 032634 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/letsmt/LetsmtSentenceStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/letsmt/LetsmtSentenceStre0100644 0000000 0000000 00000006066 14523004075 034326 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.letsmt; import java.io.File; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.tokenize.DetokenizationDictionary; import opennlp.tools.tokenize.Detokenizer; import opennlp.tools.tokenize.DictionaryDetokenizer; import opennlp.tools.util.ObjectStream; /** * @see LetsmtSentenceStream */ public class LetsmtSentenceStreamFactory

extends AbstractSampleStreamFactory { interface Parameters extends BasicFormatParams { @ArgumentParser.ParameterDescription(valueName = "dictionary", description = "specifies the file with detokenizer dictionary.") @ArgumentParser.OptionalParameter File getDetokenizer(); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(SentenceSample.class, "letsmt", new LetsmtSentenceStreamFactory<>( LetsmtSentenceStreamFactory.Parameters.class)); } protected LetsmtSentenceStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); CmdLineUtil.checkInputFile("Data", params.getData()); LetsmtDocument letsmtDoc = null; try { letsmtDoc = LetsmtDocument.parse(params.getData()); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } // TODO Implement a filter stream to remove splits which are not at an eos char ObjectStream samples = new LetsmtSentenceStream(letsmtDoc); if (params.getDetokenizer() != null) { try { Detokenizer detokenizer = new DictionaryDetokenizer( new DetokenizationDictionary(params.getDetokenizer())); samples = new DetokenizeSentenceSampleStream(detokenizer, samples); } catch (IOException e) { throw new TerminateToolException(-1, "Failed to load detokenizer rules!", e); } } return samples; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/letsmt/package-info.java0100644 0000000 0000000 00000001625 14523004075 033773 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Experimental package related to the {@code letsmt} corpus format. */ package opennlp.tools.formats.letsmt; apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascDocument.java0100644 0000000 0000000 00000040622 14523004075 033444 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.xml.parsers.SAXParser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; import opennlp.tools.util.Span; import opennlp.tools.util.XmlUtil; public class MascDocument { private static final Logger logger = LoggerFactory.getLogger(MascDocument.class); private final List sentences; private final String pathToFile; private Iterator sentenceIterator; private boolean hasPennTags = false; private boolean hasNamedEntities = false; public MascDocument(String path, List sentences) { this.pathToFile = path; this.sentences = sentences; this.sentenceIterator = sentences.iterator(); } /** * Initializes a {@link MascDocument} with all the stand-off annotations translated into the * internal structure. * * @param path The path where the document header is. * @param f_primary The {@link InputStream file} with the raw corpus text. * @param f_seg The {@link InputStream file} with segmentation into quarks. * @param f_ne The {@link InputStream file} with named entities. * @param f_penn The {@link InputStream file} with tokenization and Penn POS tags produced * by GATE-5.0 ANNIE application. * @param f_s The {@link InputStream file} with sentence boundaries. * @return A document containing the text and its annotations. Immutability is not guaranteed yet. * @throws IOException if the raw data cannot be read or the alignment of the raw data * with annotations fails */ public static MascDocument parseDocument(String path, InputStream f_primary, InputStream f_seg, InputStream f_penn, InputStream f_s, InputStream f_ne) throws IOException { String text = readText(f_primary); List words = parseWords(f_seg); List sentenceSpans = parseSentences(f_s); List sentences = combineAnnotations(text, sentenceSpans, words); final MascDocument doc = new MascDocument(path, sentences); // if the file has Penn POS tags, add them if (f_penn != null) { doc.addPennTags(parsePennTags(f_penn)); } if (f_ne != null) { doc.addNamedEntityTags(parseNamedEntity(f_ne)); } //TODO: make the annotations immutable //TODO: should we cleanup the document (e.g. remove sentences without tokens?) return doc; } /** * Reads in the corpus file text. * * @param stream A valid, open {@link InputStream stream} for a corpus file. * * @return The text of the file. * @throws IOException Thrown if IO errors occurred. */ private static String readText(InputStream stream) throws IOException { try (Reader reader = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8))) { StringBuilder contents = new StringBuilder(); char[] buffer = new char[8192]; int read; while ((read = reader.read(buffer, 0, buffer.length)) > 0) { contents.append(buffer, 0, read); } return contents.toString(); } } /** * Parses the word segmentation stand-off annotation * * @param f_seg A valid, open {@link InputStream stream} for a file with segmentation. * @return A list of individual quarks, expressed as MascWord-s * @throws IOException Thrown if IO errors occurred. */ private static List parseWords(InputStream f_seg) throws IOException { try (BufferedInputStream bStream = new BufferedInputStream(f_seg)) { SAXParser saxParser = XmlUtil.createSaxParser(); MascWordParser handler = new MascWordParser(); try { saxParser.parse(bStream, handler); } catch (SAXException e) { throw new IOException("Could not parse the region annotation file"); } return Collections.unmodifiableList(handler.getAnchors()); } } /** * Parses the sentence annotation file, align it with the raw text * * @param f_s A valid, open {@link InputStream stream} for a sentence annotation file. * @return The {@link List} delimiting each sentence. * @throws IOException if the sentence file cannot be parsed or closed */ private static List parseSentences(InputStream f_s) throws IOException { try (BufferedInputStream bStream = new BufferedInputStream(f_s)) { SAXParser saxParser = XmlUtil.createSaxParser(); MascSentenceParser handler = new MascSentenceParser(); try { saxParser.parse(bStream, handler); } catch (SAXException e) { throw new IOException("Could not parse the sentence annotation file"); } List anchors = handler.getAnchors(); /* * Filter out sentence overlaps. * Keep only those sentences where sentence.end < nextSentence.beginning * avoid deleting in the middle and repeatedly shifting the list by copying into a new list */ //TODO: can we know a priori, if we need this filtering? List filteredAnchors = new ArrayList<>(); for (int i = 0; i < anchors.size() - 1; i++) { if (anchors.get(i).getEnd() < anchors.get(i + 1).getStart()) { filteredAnchors.add(anchors.get(i)); } } filteredAnchors.add(anchors.get(anchors.size() - 1)); return Collections.unmodifiableList(filteredAnchors); } } /** * Parses the Penn-POS (GATE5-ANNIE) stand-off annotation. * * @param f_penn A valid, open {@link InputStream stream} for a file with Penn POS tags. * * @return A map of three sub-maps: tokenToTag, from Penn token ID (int) to Penn POS-tag, * tokenToBase, from Penn token ID (int) to the base and tokenToQuarks, from Penn token ID * (int) to a List of quark IDs contained in that token. * @throws IOException Thrown if IO errors occurred. */ private static Map> parsePennTags(InputStream f_penn) throws IOException { Map> tagsAndBases = new HashMap<>(); try (BufferedInputStream bStream = new BufferedInputStream(f_penn)) { SAXParser saxParser = XmlUtil.createSaxParser(); MascPennTagParser handler = new MascPennTagParser(); try { saxParser.parse(bStream, handler); } catch (SAXException e) { throw new IOException("Could not parse the Penn tag annotation file"); } tagsAndBases.put("tokenToTag", handler.getTags()); tagsAndBases.put("tokenToBase", handler.getBases()); tagsAndBases.put("tokenToQuarks", handler.getTokenToQuarks()); return tagsAndBases; } } /** * Parses the named entity stand-off annotation. * * @param f_ne A valid, open {@link InputStream stream} for a file with named entity annotations. * @return A map with two sub-maps, entityIDtoEntityType, mapping entity ID integers * to entity type Strings, and entityIDsToTokens, mapping entity ID integers to Penn * token ID integers. * @throws IOException Thrown if IO errors occurred. */ private static Map> parseNamedEntity(InputStream f_ne) throws IOException { try (BufferedInputStream bStream = new BufferedInputStream(f_ne)) { SAXParser saxParser = XmlUtil.createSaxParser(); MascNamedEntityParser handler = new MascNamedEntityParser(); try { saxParser.parse(bStream, handler); } catch (SAXException e) { throw new IOException("Could not parse the named entity annotation file", e); } Map entityIDtoEntityType = handler.getEntityIDtoEntityType(); Map> entityIDsToTokens = handler.getEntityIDsToTokens(); Map> results = new HashMap<>(); results.put("entityIDtoEntityType", entityIDtoEntityType); results.put("entityIDsToTokens", entityIDsToTokens); return results; } } /** * Combines the raw text with annotations that every file should have. * * @param text The raw text. * @param sentenceSpans The spans defining individual sentences. Overlaps are not permitted. * @param words The quarks of the raw text. * @return A list of sentences, each of which is a list of quarks. Some quarks may belong to * more than one sentence. Quarks which do not belong to a single sentence are silently dropped. * @throws IOException If sentences and quarks cannot be aligned. */ private static List combineAnnotations(String text, List sentenceSpans, List words) throws IOException { int wordIndex = 0; int wordCount = words.size(); List sentences = new ArrayList<>(); for (Span s : sentenceSpans) { if (s.getEnd() - s.getStart() > 0) { List quarks = new ArrayList<>(); int sentenceStart = s.getStart(); int sentenceEnd = s.getEnd(); // TODO: is it okay that quarks can cross sentence boundary? What are the implications? /* * Allow quarks to cross sentence boundary. * The decisive factor determining if a quark belongs to a sentence is if they overlap. * I.e. sent.getEnd() > quark.getStart() && sent.getStart() < quark.getEnd() */ MascWord nextWord = words.get(wordIndex); // Find sentence beginning, should not be needed unless overlaps occur while (sentenceStart < nextWord.getEnd() && wordIndex > 0) { wordIndex--; nextWord = words.get(wordIndex); } // TODO: can this be translated into Span's methods .crosses()/.contains()? // Find all quarks contained or crossing the span of that sentence boolean sentenceOver = false; while ((!sentenceOver) && wordIndex < wordCount) { nextWord = words.get(wordIndex); int nextWordStart = nextWord.getStart(); int nextWordEnd = nextWord.getEnd(); // word either ends or starts or ends & starts in the middle of sentence if (sentenceEnd > nextWordStart && sentenceStart < nextWordEnd) { quarks.add(nextWord); if (sentenceEnd == nextWordEnd) { sentenceOver = true; } wordIndex++; } else if (sentenceEnd <= nextWordStart) { sentenceOver = true; } else { wordIndex++; } } // If we are at the end of words, but not in the last sentence, throw an error if (!sentenceOver && sentences.size() != sentenceSpans.size() - 1) { throw new IOException("Sentence ends and word ends do not match." + "First sentence not completed ends at character: " + sentenceEnd); } MascSentence sentence = new MascSentence(sentenceStart, sentenceEnd, text, quarks, words); sentences.add(sentence); } } return Collections.unmodifiableList(sentences); } /** * Attaches the named entity labels to individual tokens. * * @param namedEntities A map with two sub-maps, entityIDtoEntityType, mapping entity ID integers * to entity type Strings, and entityIDsToTokens, mapping entity ID integers to Penn * token ID integers */ private void addNamedEntityTags(Map> namedEntities) { try { Map entityIDtoEntityType = (Map) namedEntities.get("entityIDtoEntityType"); Map> entityIDsToTokens = (Map>) namedEntities.get("entityIDsToTokens"); for (MascSentence s : sentences) { boolean success = s.addNamedEntities(entityIDtoEntityType, entityIDsToTokens); if (!success) { logger.warn("Issues occurred in the file: {}", pathToFile); } } hasNamedEntities = true; } catch (IOException e) { logger.error("Failed connecting tokens and named entities. " + "The error occurred in the file: {}", pathToFile, e); } } /** * Attach tags and bases to MascWords in each of the sentences. * * @param tagMaps A map of three sub-maps: tokenToTag, from Penn token ID (int) to Penn POS-tag, * * tokenToBase, from Penn token ID (int) to the base and tokenToQuarks, from Penn token ID * * (int) to a List of quark IDs contained in that token. */ private void addPennTags(Map> tagMaps) throws IOException { try { // Extract individual mappings Map tokenToTag = (Map) tagMaps.get("tokenToTag"); Map tokenToBase = (Map) tagMaps.get("tokenToBase"); Map tokenToQuarks = (Map) tagMaps.get("tokenToQuarks"); //Check that all tokens have at least one quark. for (Map.Entry token : tokenToQuarks.entrySet()) { if (token.getValue().length == 0) { logger.warn("Token without quarks: {}", token.getKey()); } } Map quarkToTokens = new HashMap<>(); for (Map.Entry tokenAndQuarks : tokenToQuarks.entrySet()) { int token = tokenAndQuarks.getKey(); int[] quarks = tokenAndQuarks.getValue(); for (int quark : quarks) { //very rarely, one quark may belong to several token //this is probably a mistake in the corpus annotation if (quarkToTokens.containsKey(quark)) { int[] tokens = quarkToTokens.get(quark); int[] newTokens = new int[tokens.length + 1]; newTokens[0] = token; System.arraycopy(tokens, 0, newTokens, 1, tokens.length); logger.warn("One quark belongs to several tokens. f-seg ID: {}.", quark); logger.warn("The error occurred in file: {}", pathToFile); quarkToTokens.put(quark, newTokens); } else { quarkToTokens.put(quark, new int[] {token}); } } } for (MascSentence s : sentences) { boolean success = s.tokenizePenn(tokenToQuarks, quarkToTokens, tokenToBase, tokenToTag); if (!success) { logger.warn("Issues occurred in the file: {}", pathToFile); } } hasPennTags = true; } catch (Exception e) { throw new IOException("Could not attach POS tags to words. " + e.getMessage() + Arrays.toString(e.getStackTrace())); } } /** * Checks whether there is Penn tagging produced by GATE-5.0 ANNIE. * * @return {@code true} if this file has aligned tags/tokens, {@code false} otherwise. */ public boolean hasPennTags() { return hasPennTags; } /** * Checks whether there is NER by GATE-5.0 ANNIE. * * @return {@code true} if this file has named entities, {@code false} otherwise. */ public boolean hasNamedEntities() { return hasNamedEntities; } /** * @return Retrieves the next sentence or {@code null} if end of document reached. */ public MascSentence read() { MascSentence next = null; if (sentenceIterator.hasNext()) { next = sentenceIterator.next(); } return next; } /** * Resets the reading of sentences to the beginning of the document. */ public void reset() { this.sentenceIterator = this.sentences.iterator(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_masc_Masc0100644 0000000 0000000 00000000161 14523004075 032566 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascDocumentStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascDocumentStream.j0100644 0000000 0000000 00000017312 14523004075 034130 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.io.BufferedInputStream; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Stack; import javax.xml.parsers.SAXParser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.XmlUtil; public class MascDocumentStream implements ObjectStream { private static final Logger logger = LoggerFactory.getLogger(MascDocumentStream.class); /** * A helper class to parse the header (.hdr) files. */ private static class HeaderHandler extends DefaultHandler { private HashMap annotationFiles = null; private String file = null; private String fType = null; protected HashMap getPathList() { return annotationFiles; } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // create a new annotation file and put it in map // initialize File object and set path attribute if (qName.equalsIgnoreCase("annotation") || qName.equalsIgnoreCase("primaryData")) { file = attributes.getValue("loc"); fType = attributes.getValue("f.id"); // initialize list if (annotationFiles == null) { annotationFiles = new HashMap<>(); } } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // add annotation object to list if (qName.equalsIgnoreCase("annotation") || qName.equalsIgnoreCase("primaryData")) { annotationFiles.put(fType, file); } } } private final List documents = new LinkedList<>(); private Iterator documentIterator; private final SAXParser saxParser; public MascDocumentStream(File mascCorpusDirectory) throws IOException { this(mascCorpusDirectory, true, pathname -> pathname.getName().contains("")); } /** * Creates a MascDocumentStream to read the documents from a given directory. * Works iff all annotation files mentioned in the headers are present. * * @param mascCorpusDirectory the directory containing all the MASC files * @param searchRecursive whether the search should go through subdirectories * @param fileFilter a custom file filter to filter out some files or * null to accept anything * @throws IOException if any stage of the stream creation fails */ public MascDocumentStream(File mascCorpusDirectory, boolean searchRecursive, FileFilter fileFilter) throws IOException { saxParser = XmlUtil.createSaxParser(); if (!mascCorpusDirectory.isDirectory()) { throw new IOException("Input corpus directory must be a directory " + "according to File.isDirectory()!"); } int failedLoads = 0; Stack directoryStack = new Stack<>(); directoryStack.add(mascCorpusDirectory); while (!directoryStack.isEmpty()) { for (File file : directoryStack.pop().listFiles(fileFilter)) { if (file.isFile()) { String hdrFilePath = file.getAbsolutePath(); // look for the header files if (hdrFilePath.endsWith(".hdr")) { HashMap fileGroup = checkAnnotations(hdrFilePath); InputStream f_primary = new BufferedInputStream( new FileInputStream(fileGroup.get("f.text"))); InputStream f_seg = (fileGroup.containsKey("f.seg")) ? new BufferedInputStream(new FileInputStream(fileGroup.get("f.seg"))) : null; InputStream f_penn = (fileGroup.containsKey("f.penn")) ? new BufferedInputStream(new FileInputStream(fileGroup.get("f.penn"))) : null; InputStream f_s = (fileGroup.containsKey("f.s")) ? new BufferedInputStream(new FileInputStream(fileGroup.get("f.s"))) : null; InputStream f_ne = (fileGroup.containsKey("f.ne")) ? new BufferedInputStream(new FileInputStream(fileGroup.get("f.ne"))) : null; try { documents.add(MascDocument.parseDocument(hdrFilePath, f_primary, f_seg, f_penn, f_s, f_ne)); } catch (IOException e) { logger.error("Failed to parse the file: {}", hdrFilePath, e); failedLoads++; } } } else if (searchRecursive && file.isDirectory()) { directoryStack.push(file); } } } logger.info("Documents loaded: {}", documents.size()); if (failedLoads > 0) { logger.info("Failed loading {} documents.", failedLoads); } reset(); } /** * Check that all annotation files mentioned in the header are present * * @param path The path to header * @throws IOException If corpus integrity is violated */ private HashMap checkAnnotations(String path) throws IOException { HeaderHandler handler = new HeaderHandler(); HashMap fileGroup = new HashMap<>(); File hdrFile = new File(path); try { saxParser.parse(hdrFile, handler); } catch (SAXException e) { throw new IOException("Invalid corpus format. " + "Could not parse the header: " + path); } HashMap annotationFiles = handler.getPathList(); String pathToFolder = hdrFile.getParentFile().getAbsolutePath(); for (Map.Entry annotation : annotationFiles.entrySet()) { File file = new File(pathToFolder, annotation.getValue()); if (!(file.isFile() && file.exists())) { throw new IOException("Corpus integrity violated. " + "Annotation file " + file.getAbsolutePath() + " is missing."); } fileGroup.put(annotation.getKey(), file); } return fileGroup; } /** * Reset the reading of all documents to the first sentence. * Reset the corpus to the first document. */ @Override public void reset() { for (MascDocument doc : documents) { doc.reset(); } documentIterator = documents.iterator(); } /** * Return the next document. Client needs to check if this document has the necessary annotations. * * @return A corpus document with all its annotations. * @throws IOException if anything goes wrong. */ @Override public MascDocument read() throws IOException { MascDocument doc = null; if (documentIterator.hasNext()) { doc = documentIterator.next(); } return doc; } /** * Remove the corpus from the memory. */ @Override public void close() { documentIterator = null; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_masc_Masc0100644 0000000 0000000 00000000164 14523004075 032571 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascNamedEntityParser.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascNamedEntityParse0100644 0000000 0000000 00000007663 14523004075 034172 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; /** * A class to process the MASC Named entity stand-off annotation file */ public class MascNamedEntityParser extends DefaultHandler { private static final Logger logger = LoggerFactory.getLogger(MascNamedEntityParser.class); private final Map entityIDtoEntityType = new HashMap<>(); private final Map> entityIDsToTokens = new HashMap<>(); private final Map tokenToEntity = new HashMap<>(); public Map getEntityIDtoEntityType() { return entityIDtoEntityType; } public Map> getEntityIDsToTokens() { return entityIDsToTokens; } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { try { if (qName.equals("a")) { int entityID = Integer.parseInt( attributes.getValue("ref").replaceFirst("ne-n", "")); String label = attributes.getValue("label"); if (entityIDtoEntityType.containsKey(entityID)) { throw new SAXException("Multiple labels for one named entity"); } else { entityIDtoEntityType.put(entityID, label); } } if (qName.equals("edge")) { int entityID = Integer.parseInt( attributes.getValue("from").replaceFirst("ne-n", "")); int tokenID = Integer.parseInt( attributes.getValue("to").replaceFirst("penn-n", "")); if (!entityIDsToTokens.containsKey(entityID)) { List tokens = new ArrayList<>(); tokens.add(tokenID); entityIDsToTokens.put(entityID, tokens); } else { entityIDsToTokens.get(entityID).add(tokenID); } /* Not sure what to do with this. There might be multiple entity links to one token. E.g. Colorado will be one token with the entities "city" and "province". For now, we'll only raise alarm when one TokenID should be assigned to different top-level labels, e.g. person & location (since we are dropping the low-level annotations at the moment). To make this work in OpenNLP (does not allow overlaps), we'll keep only the first named entity type. */ //todo: Do we want to give the user control over which types have priority? String type = entityIDtoEntityType.get(entityID); if (tokenToEntity.containsKey(tokenID) && !type.equals(tokenToEntity.get(tokenID))) { logger.warn("One token assigned to different named entity types.\n" + "\tPenn-TokenID: {}\n\tToken types: \"{}\", \"{}\"\n\tKeeping only " + "\"type\"", tokenID, type, tokenToEntity.get(tokenID)); } tokenToEntity.put(tokenID, type); } } catch (Exception e) { throw new SAXException("Could not parse the named entity annotation file.\n" + e.getMessage(), e); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_masc_Masc0100644 0000000 0000000 00000000172 14523004075 032570 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascNamedEntitySampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascNamedEntitySampl0100644 0000000 0000000 00000006434 14523004075 034167 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.io.IOException; import java.util.List; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; public class MascNamedEntitySampleStream extends FilterObjectStream { private MascDocument buffer; /** * Initializes {@link MascNamedEntitySampleStream} from a stream of {@link MascDocument documents}. * * @param samples A {@link ObjectStream} of samples. * @throws IOException Thrown if none of the documents has NE labels. */ public MascNamedEntitySampleStream(ObjectStream samples) throws IOException { super(samples); try { do { buffer = samples.read(); } while (!buffer.hasNamedEntities()); } catch (Exception e) { throw new IOException("None of the documents has named entity labels" + e.getMessage()); } } /** * Reads the next sample of named entities. * * @return One {@link NameSample sentence together with its named entity annotation}. * @throws IOException Thrown if the sample cannot be extracted */ @Override public NameSample read() throws IOException { /* * Read the documents one sentence at a time * If the document is over, move to the next one * If both document stream and sentence stream are over, return null */ try { MascSentence sentence = buffer.read(); while (sentence == null) { buffer = samples.read(); if (buffer == null) { return null; } if (buffer.hasNamedEntities()) { sentence = buffer.read(); } } List tokens = sentence.getTokenStrings(); String[] tokensArray = new String[tokens.size()]; tokens.toArray(tokensArray); List namedEntities = sentence.getNamedEntities(); Span[] namedEntitiesArray = new Span[namedEntities.size()]; namedEntities.toArray(namedEntitiesArray); // TODO: should the user decide about clearAdaptiveData? return new NameSample(tokensArray, namedEntitiesArray, true); } catch (IOException e) { throw new IOException("Could not get a sample of named entities from the data."); } } @Override public void close() throws IOException { samples.close(); } @Override public void reset() throws IOException, UnsupportedOperationException { samples.reset(); buffer = samples.read(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_masc_Masc0100644 0000000 0000000 00000000201 14523004075 032561 xustar000000000 0000000 129 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascNamedEntitySampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascNamedEntitySampl0100644 0000000 0000000 00000005224 14523004075 034163 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.io.FileFilter; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.ObjectStream; public class MascNamedEntitySampleStreamFactory

extends AbstractSampleStreamFactory { public static final String MASC_FORMAT = "masc"; protected MascNamedEntitySampleStreamFactory(Class

params) { super(params); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(NameSample.class, MASC_FORMAT, new MascNamedEntitySampleStreamFactory<>( MascNamedEntitySampleStreamFactory.Parameters.class)); } @Override public ObjectStream create(String[] args) { MascNamedEntitySampleStreamFactory.Parameters params = ArgumentParser.parse(args, MascNamedEntitySampleStreamFactory.Parameters.class); try { FileFilter fileFilter = pathname -> pathname.getName().contains(params.getFileFilter()); return new MascNamedEntitySampleStream( new MascDocumentStream(params.getData(), params.getRecurrentSearch(), fileFilter)); } catch (IOException e) { CmdLineUtil.handleCreateObjectStreamError(e); } return null; } interface Parameters extends BasicFormatParams { @ArgumentParser.ParameterDescription(valueName = "recurrentSearch", description = "search through files recursively") boolean getRecurrentSearch(); @ArgumentParser.ParameterDescription(valueName = "fileFilterString", description = "only include files which contain a given string in their name") String getFileFilter(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_masc_Masc0100644 0000000 0000000 00000000162 14523004075 032567 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascPOSSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascPOSSampleStream.0100644 0000000 0000000 00000005631 14523004075 034004 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.io.IOException; import java.util.List; import opennlp.tools.postag.POSSample; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; public class MascPOSSampleStream extends FilterObjectStream { private MascDocument buffer; /** * Initializes {@link MascPOSSampleStream} from a stream of {@link MascDocument documents}. * * @param samples A {@link ObjectStream} of samples. * @throws IOException Thrown if none of the documents has POS tags. */ public MascPOSSampleStream(ObjectStream samples) throws IOException { super(samples); try { do { buffer = samples.read(); } while (!buffer.hasPennTags()); // For now, we'll always use Penn tags } catch (Exception e) { throw new IOException("None of the documents has POS tags" + e.getMessage()); } } /** * Reads the next sample. * * @return One {@link POSSample sentence together with its POS tags}. * @throws IOException Thrown if the sample cannot be extracted. */ @Override public POSSample read() throws IOException { /* * Read the documents one sentence at a time * If the document is over, move to the next one * If both document stream and sentence stream are over, return null */ try { MascSentence sentence = buffer.read(); while (sentence == null) { buffer = samples.read(); if (buffer == null) { return null; } if (buffer.hasPennTags()) { sentence = buffer.read(); } } List tokens = sentence.getTokenStrings(); List POStags = sentence.getTags(); return new POSSample(tokens, POStags); } catch (IOException e) { throw new IOException("Could not get a sample of POS tags from the data."); } } @Override public void close() throws IOException { samples.close(); } @Override public void reset() throws IOException, UnsupportedOperationException { samples.reset(); buffer = samples.read(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_masc_Masc0100644 0000000 0000000 00000000171 14523004075 032567 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascPOSSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascPOSSampleStreamF0100644 0000000 0000000 00000005175 14523004075 034037 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.io.FileFilter; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.postag.POSSample; import opennlp.tools.util.ObjectStream; public class MascPOSSampleStreamFactory

extends AbstractSampleStreamFactory { public static final String MASC_FORMAT = "masc"; protected MascPOSSampleStreamFactory(Class

params) { super(params); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(POSSample.class, MASC_FORMAT, new MascPOSSampleStreamFactory<>( MascPOSSampleStreamFactory.Parameters.class)); } @Override public ObjectStream create(String[] args) { MascPOSSampleStreamFactory.Parameters params = ArgumentParser.parse(args, MascPOSSampleStreamFactory.Parameters.class); try { FileFilter fileFilter = pathname -> pathname.getName().contains(params.getFileFilter()); return new MascPOSSampleStream( new MascDocumentStream(params.getData(), params.getRecurrentSearch(), fileFilter)); } catch (IOException e) { // That will throw an exception CmdLineUtil.handleCreateObjectStreamError(e); } return null; } interface Parameters extends BasicFormatParams { @ArgumentParser.ParameterDescription(valueName = "recurrentSearch", description = "search through files recursively") boolean getRecurrentSearch(); @ArgumentParser.ParameterDescription(valueName = "fileFilterString", description = "only include files which contain a given string in their name") String getFileFilter(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_masc_Masc0100644 0000000 0000000 00000000160 14523004075 032565 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascPennTagParser.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascPennTagParser.ja0100644 0000000 0000000 00000006755 14523004075 034061 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.util.HashMap; import java.util.Map; import java.util.Stack; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; /** * A class for parsing MASC's Penn tagging/tokenization stand-off annotation */ public class MascPennTagParser extends DefaultHandler { private final Map tokenToQuarks = new HashMap<>(); private final Map tokenToTag = new HashMap<>(); private final Map tokenToBase = new HashMap<>(); private final Stack tokenStack = new Stack<>(); private final Stack tokenStackTag = new Stack<>(); public Map getTags() { return tokenToTag; } public Map getBases() { return tokenToBase; } public Map getTokenToQuarks() { return tokenToQuarks; } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { try { //get the link between region and Penn tag if (qName.equals("node")) { tokenStack.push(Integer.parseInt(attributes.getValue("xml:id") .replaceFirst("penn-n", ""))); } if (qName.equals("link")) { if (tokenStack.isEmpty()) { throw new SAXException("The linking of tokens to quarks is broken."); } String[] targets = attributes.getValue("targets") .replace("seg-r", "").split(" "); int[] regions = new int[targets.length]; for (int i = 0; i < targets.length; i++) { int region = Integer.parseInt(targets[i]); regions[i] = region; } tokenToQuarks.put(tokenStack.pop(), regions); } if (qName.equals("a")) { tokenStackTag.push(Integer.parseInt(attributes.getValue("ref") .replaceFirst("penn-n", ""))); } if (qName.equals("f")) { String type = attributes.getValue("name"); if (tokenStackTag.isEmpty()) { throw new SAXException("The linking of tokens to their tags/bases is broken."); } if (type.equals("msd")) { tokenToTag.put(tokenStackTag.peek(), attributes.getValue("value")); } else if (type.equals("base")) { tokenToBase.put(tokenStackTag.peek(), attributes.getValue("value")); } } } catch (Exception e) { throw new SAXException("Could not parse the Penn-POS annotation file.\n" + e.getMessage(), e); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // we can forget the current node if (qName.equals("a")) { tokenStackTag.pop(); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascSentence.java0100644 0000000 0000000 00000027053 14523004075 033435 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.util.Span; public class MascSentence extends Span { private static final Logger logger = LoggerFactory.getLogger(MascSentence.class); private static final long serialVersionUID = 6295507533472650848L; /** * A helper class to extract the extract a quark from the corpus file even if it is beyond the * bounds of the sentence. * * @param wordsById Quarks of the sentence organized by their id * @param allDocumentWords Quarks of the document organized by their id */ private record QuarkExtractor(Map wordsById, List allDocumentWords) { /** * Extract a quark by its key * * @param key The quark's ID * @return The {@link MascWord quark reference}. * @throws IOException Thrown if the {@code key} was not found in the document. */ private MascWord get(int key) throws IOException { // First, check if this word is in the sentence // TODO: evaluate the necessity: HashMaps are O(1), right? if (wordsById.containsKey(key)) { return wordsById.get(key); } else { for (MascWord wordFromWholeDocument : allDocumentWords) { if (wordFromWholeDocument.getId() == key) { return wordFromWholeDocument; } } } throw new IOException("Word" + key + " not found in the document."); } } private final List allDocumentWords; private final String text; private final List words; private final Map wordsById; private List sentenceTokens = null; private final Map tokensById = new HashMap<>(); private List namedEntities = new ArrayList<>(); /** * Initializes a {@link MascSentence} containing its associated text and quarks * * @param s Start of the sentence within the corpus file * @param e End of the sentence within the corpus file * @param text The reference to text of the corpus file * @param sentenceQuarks The quarks found in that sentence * @param allQuarks The reference to a list of all quarks in the file */ public MascSentence(int s, int e, String text, List sentenceQuarks, List allQuarks) { super(s, e); this.text = text; this.words = sentenceQuarks; this.allDocumentWords = allQuarks; // We'll create a map of word ID's and the word ref's to speed up the tokenization HashMap idToWordMap = new HashMap<>(); for (MascWord w : sentenceQuarks) { idToWordMap.put(w.getId(), w); } wordsById = idToWordMap; } /** * Add the Penn tokenization and POS tagging to the sentence. * * @param tokenToQuarks A map from token ID to quarks in that token. * @param quarkToTokens A map of quark IDs and the token IDs containing that quark. * @param tokenToBase Token ID to the token base. * @param tokenToTag Token ID to the POS tag. * * @return {@code true} if no issue encountered, {@code false} if tokens cross sentence boundaries. * @throws IOException Thrown if IO errors occurred. */ boolean tokenizePenn(Map tokenToQuarks, Map quarkToTokens, Map tokenToBase, Map tokenToTag) throws IOException { boolean fileWithoutIssues = true; QuarkExtractor extractor = new QuarkExtractor(wordsById, allDocumentWords); sentenceTokens = new ArrayList<>(); Map tokensProcessed = new HashMap<>(); for (MascWord w : words) { int currentQuarkId = w.getId(); //extract the node to which this word belongs int[] tokens = quarkToTokens.get(currentQuarkId); //Only continue, if the word belongs to at least one node if (tokens != null) { for (int token : tokens) { //check if we already have the token if (!tokensProcessed.containsKey(token)) { int[] quarksOfToken = tokenToQuarks.get(token); // Get the quark IDs contained in the token if (quarksOfToken == null) { logger.warn("Token without quarks found: {}", token); } for (int quark : quarksOfToken) { if (!wordsById.containsKey(quark)) { fileWithoutIssues = false; logger.warn("Some tokens cross sentence boundaries." + "\n\tQuark ID: {}" + "\n\tPenn token ID: {}", quark, token ); } } /*Because there are some quarks which are parts of tokens outside a sentence We need to check every time if that quark was actually assigned to the sentence If not, we need to extract it manually from the whole document*/ MascWord[] quarks = new MascWord[quarksOfToken.length]; //Get the actual quark references for (int currentQuark = 0; currentQuark < quarks.length; currentQuark++) { quarks[currentQuark] = extractor.get(quarksOfToken[currentQuark]); } int start = extractor.get(quarksOfToken[0]).getStart(); int end = extractor.get(quarksOfToken[quarksOfToken.length - 1]).getEnd(); //only insert tokens with non-zero length, apparently some of them exist in the corpus if (end - start > 0) { sentenceTokens.add(new MascToken(start, end, token, tokenToTag.get(token), tokenToBase.get(token), quarks)); tokensProcessed.put(token, true); } } } } } for (int i = 0; i < sentenceTokens.size(); i++) { MascToken t = sentenceTokens.get(i); tokensById.put(t.getTokenId(), i); } sentenceTokens = Collections.unmodifiableList(sentenceTokens); return fileWithoutIssues; } /** * Add the named entity annotation to the tokenized sentence * * @param entityIDtoEntityType Maps the named entity ID to its type * @param entityIDsToTokens A list of tokens covered by each named entity * * @return {@code true} if all went well, {@code false} if named entities overlap. * @throws IOException Thrown if IO errors occurred. */ boolean addNamedEntities(Map entityIDtoEntityType, Map> entityIDsToTokens) throws IOException { boolean fileWithoutIssues = true; if (sentenceTokens == null) { throw new IOException("Named entity labels provided for an un-tokenized sentence."); } //for each named entity identify its span for (Map.Entry> namedEntity : entityIDsToTokens.entrySet()) { int entityID = namedEntity.getKey(); String type = entityIDtoEntityType.get(entityID); List tokenIDs = namedEntity.getValue(); int start = sentenceTokens.size(); int end = 0; boolean entityInThisSentence = false; for (int tokenID : tokenIDs) { if (tokensById.containsKey(tokenID)) { entityInThisSentence = true; if (tokensById.get(tokenID) < start) { start = tokensById.get(tokenID); } if (tokensById.get(tokenID) > end) { end = tokensById.get(tokenID) + 1; } } } if (entityInThisSentence) { namedEntities.add(new Span(start, end, type)); } } Comparator compareByStart = Comparator.comparingInt(Span::getStart); namedEntities.sort(compareByStart); Set overlaps = new HashSet<>(); int leftIndex = 0; int rightIndex = leftIndex + 1; while (rightIndex < namedEntities.size()) { Span leftSpan = namedEntities.get(leftIndex); Span rightSpan = namedEntities.get(rightIndex); if (leftSpan.contains(rightSpan) || leftSpan.crosses(rightSpan)) { logger.warn("Named entities overlap. This is forbidden in OpenNLP." + "\n\tKeeping the longer of them."); if (rightSpan.length() > leftSpan.length()) { overlaps.add(leftIndex); } else { overlaps.add(rightIndex); } fileWithoutIssues = false; rightIndex++; } else { leftIndex++; } } if (!fileWithoutIssues) { List namedEntitiesNoOverlaps = new ArrayList<>(); for (int i = 0; i < namedEntities.size() - 1; i++) { if (!overlaps.contains(i)) { namedEntitiesNoOverlaps.add(namedEntities.get(i)); } } namedEntities = Collections.unmodifiableList(namedEntitiesNoOverlaps); } return fileWithoutIssues; } /** * @return Retrieves the {@link List named entities}, e.g. {@code Span(1,3, "org")} for tokens [1,3). */ public List getNamedEntities() { return namedEntities; } /** * @return Retrieves text of the sentence as defined by the sentence segmentation annotation. */ public String getSentDetectText() { return text.substring(getStart(), getEnd()); } /** * @return Retrieves text of the sentence as defined by the tokens in it. */ public String getTokenText() { if (sentenceTokens.isEmpty()) { return ""; } return text.substring(sentenceTokens.get(0).getStart(), sentenceTokens.get(sentenceTokens.size() - 1).getEnd()); } /** * @return The texts of the individual tokens in the sentence */ public List getTokenStrings() { List tokenArray = new ArrayList<>(); for (MascToken t : sentenceTokens) { tokenArray.add(text.substring(t.getStart(), t.getEnd())); } return Collections.unmodifiableList(tokenArray); } /** * Retrieves the boundaries of individual tokens. * * @return The {@link List spans} representing the tokens of the sentence, * according to Penn tokenization. */ public List getTokensSpans() { List tokenSpans = new ArrayList<>(); int offset = sentenceTokens.isEmpty() ? 0 : sentenceTokens.get(0).getStart(); for (MascToken i : sentenceTokens) { tokenSpans.add(new Span(i.getStart() - offset, i.getEnd() - offset)); } return Collections.unmodifiableList(tokenSpans); } /** * @return Get the (individual) tags of tokens in the sentence. * * @throws IOException Thrown if used on an un-tokenized sentence. */ public List getTags() throws IOException { List tags = new ArrayList<>(); for (MascToken t : sentenceTokens) { tags.add(t.getPos()); } return tags; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_masc_Masc0100644 0000000 0000000 00000000161 14523004075 032566 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascSentenceParser.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascSentenceParser.j0100644 0000000 0000000 00000003553 14523004075 034121 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.util.ArrayList; import java.util.List; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import opennlp.tools.util.Span; /** * A class to parse the sentence segmentation stand-off annotation. */ class MascSentenceParser extends DefaultHandler { private final List sentenceAnchors = new ArrayList<>(); public List getAnchors() { return sentenceAnchors; } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { try { // create a sentence and put it into the list of sentences if (qName.equalsIgnoreCase("region")) { String[] anchors = attributes.getValue("anchors").split(" "); int left = Integer.parseInt(anchors[0]); int right = Integer.parseInt(anchors[1]); sentenceAnchors.add(new Span(left, right)); } } catch (Exception e) { throw new SAXException("Could not parse the sentence annotation file."); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_masc_Masc0100644 0000000 0000000 00000000167 14523004075 032574 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascSentenceSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascSentenceSampleSt0100644 0000000 0000000 00000006274 14523004075 034170 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.io.IOException; import java.util.ArrayList; import java.util.List; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; public class MascSentenceSampleStream extends FilterObjectStream { private final int sentencesPerSample; private MascDocument buffer; public MascSentenceSampleStream(ObjectStream samples, int sentencesPerSample) throws IOException { super(samples); this.sentencesPerSample = sentencesPerSample; buffer = samples.read(); } /** * Reads a new {@link SentenceSample sample of sentences}. * * @return The {@link SentenceSample specified number of sentences}. * If fewer left, then return whatever is left. * * @throws IOException Thrown if IO errors occurred during read operation. */ @Override public SentenceSample read() throws IOException { try { StringBuilder documentText = new StringBuilder(); List sentenceSpans = new ArrayList<>(); for (int i = 0; i < sentencesPerSample; i++) { MascSentence sentence = buffer.read(); if (sentence != null) { // Current document still has sentences int startIndex = documentText.length(); documentText.append(sentence.getSentDetectText()).append(' '); sentenceSpans.add(new Span(startIndex, documentText.length() - 1)); } else if ((buffer = samples.read()) != null) { documentText.append('\n'); // Current document exhausted, but we can still move on to the next one i--; // This round does not count } else { // We exhausted all sentences in all documents break; } } if (documentText.length() > 0) { documentText.setLength(documentText.length() - 1); return new SentenceSample(documentText, sentenceSpans.toArray(new Span[0])); } return null; } catch (IOException e) { throw new IOException("You are reading an empty document stream. " + "Did you close it?"); } } @Override public void close() throws IOException { samples.close(); } @Override public void reset() throws IOException, UnsupportedOperationException { samples.reset(); buffer = samples.read(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_masc_Masc0100644 0000000 0000000 00000000176 14523004075 032574 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascSentenceSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascSentenceSampleSt0100644 0000000 0000000 00000005607 14523004075 034167 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.io.FileFilter; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.ObjectStream; public class MascSentenceSampleStreamFactory

extends AbstractSampleStreamFactory { public static final String MASC_FORMAT = "masc"; protected MascSentenceSampleStreamFactory(Class

params) { super(params); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(SentenceSample.class, MASC_FORMAT, new MascSentenceSampleStreamFactory<>(MascSentenceSampleStreamFactory.Parameters.class)); } @Override public ObjectStream create(String[] args) { MascSentenceSampleStreamFactory.Parameters params = ArgumentParser.parse(args, MascSentenceSampleStreamFactory.Parameters.class); try { FileFilter fileFilter = pathname -> pathname.getName().contains(params.getFileFilter()); return new MascSentenceSampleStream( new MascDocumentStream(params.getData(), params.getRecurrentSearch(), fileFilter), Integer.parseInt(params.getSentencesPerSample())); } catch (IOException e) { // That will throw an exception CmdLineUtil.handleCreateObjectStreamError(e); } return null; } interface Parameters extends BasicFormatParams { @ArgumentParser.ParameterDescription(valueName = "sentencesPerSample", description = "number of sentences per sample") String getSentencesPerSample(); @ArgumentParser.ParameterDescription(valueName = "recurrentSearch", description = "search through files recursively") boolean getRecurrentSearch(); @ArgumentParser.ParameterDescription(valueName = "fileFilterString", description = "only include files which contain a given string in their name") String getFileFilter(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascToken.java0100644 0000000 0000000 00000004714 14523004075 032750 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import opennlp.tools.util.Span; /** * A specialized {@link Span} to express tokens in {@link MascDocument documents}. */ public class MascToken extends Span { private static final long serialVersionUID = -780646706788037041L; private final String pos; private final String base; private final int tokenId; private final MascWord[] quarks; /** * Initializes a {@link MascToken} which may combine multiple quarks. * * @param s The start of the token in the corpus file. * Must be equal to or greater than {@code 0}. * @param e The end of the token in the corpus file. * Must be equal to or greater than {@code 0} and be greater than {@code s}. * @param pennId The ID of the token as assigned by the Penn stand-off annotation. * @param pos The POS-tag. * @param base The base form. * @param quarks The {@link MascWord array of Quarks} contained in the token. * * @throws IllegalArgumentException Thrown if one of the parameters are invalid. */ public MascToken(int s, int e, int pennId, String pos, String base, MascWord[] quarks) { super(s, e); this.pos = pos; this.base = base; this.tokenId = pennId; this.quarks = quarks; } /** * @return Retrieves the ID of the token. */ public int getTokenId() { return tokenId; } /** * @return Retrieves the base form. */ public String getBase() { return base; } /** * @return Retrieves the POS tag. */ public String getPos() { return pos; } /** * @return Retrieves quarks of the token. */ public MascWord[] getQuarks() { return quarks; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_masc_Masc0100644 0000000 0000000 00000000164 14523004075 032571 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascTokenSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascTokenSampleStrea0100644 0000000 0000000 00000007453 14523004075 034174 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.io.IOException; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; public class MascTokenSampleStream extends FilterObjectStream { private static final Logger logger = LoggerFactory.getLogger(MascTokenSampleStream.class); private MascDocument buffer; /** * Initializes a {@link MascTokenSampleStream}. * * @param samples The {@link ObjectStream} samples to process. * @throws IOException Thrown if non of the {@link MascDocument documents} had Penn tokenization. */ public MascTokenSampleStream(ObjectStream samples) throws IOException { super(samples); try { do { buffer = samples.read(); } while (!buffer.hasPennTags()); // For now, we only use Penn tokenization } catch (Exception e) { throw new IOException("None of the documents has Penn tokenization" + e.getMessage()); } } @Override public TokenSample read() throws IOException { /* * Read the documents one sentence at a time * If the document is over, move to the next one * If both document stream and sentence stream are over, return null */ try { boolean sentenceFound = true; String sentenceString; List tokenSpans; MascSentence sentence; do { sentence = buffer.read(); while (sentence == null) { buffer = samples.read(); if (buffer == null) { return null; } if (buffer.hasPennTags()) { sentence = buffer.read(); } } sentenceString = sentence.getTokenText(); tokenSpans = sentence.getTokensSpans(); if (sentenceString.length() == 0) { logger.warn("Zero sentence found. There is a sentence " + "without any tokens. sentence: {}, spans: {}", sentenceString, tokenSpans); sentenceFound = false; } for (int i = 0; i < tokenSpans.size(); i++) { Span t = tokenSpans.get(i); if (t.getEnd() - t.getStart() == 0) { logger.warn("Zero token found. There is a token without any quarks." + " sentence: {}, spans: {}", sentenceString, tokenSpans); sentenceFound = false; } } } while (!sentenceFound); Span[] tokensSpansArray = new Span[tokenSpans.size()]; tokenSpans.toArray(tokensSpansArray); return new TokenSample(sentenceString, tokensSpansArray); } catch (IOException e) { throw new IOException("Could not get a sample of tokens from the data."); } } @Override public void close() throws IOException { samples.close(); } @Override public void reset() throws IOException, UnsupportedOperationException { samples.reset(); buffer = samples.read(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_masc_Masc0100644 0000000 0000000 00000000173 14523004075 032571 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascTokenSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascTokenSampleStrea0100644 0000000 0000000 00000005451 14523004075 034170 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.io.FileFilter; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.ObjectStream; public class MascTokenSampleStreamFactory

extends AbstractSampleStreamFactory { public static final String MASC_FORMAT = "masc"; protected MascTokenSampleStreamFactory(Class

params) { super(params); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(TokenSample.class, MASC_FORMAT, new MascTokenSampleStreamFactory<>(MascTokenSampleStreamFactory.Parameters.class)); } @Override public ObjectStream create(String[] args) { MascTokenSampleStreamFactory.Parameters params = ArgumentParser.parse(args, MascTokenSampleStreamFactory.Parameters.class); try { FileFilter fileFilter = pathname -> pathname.getName().contains(params.getFileFilter()); return new MascTokenSampleStream( new MascDocumentStream(params.getData(), params.getRecurrentSearch(), fileFilter)); } catch (IOException e) { // That will throw an exception CmdLineUtil.handleCreateObjectStreamError(e); } return null; } interface Parameters extends BasicFormatParams { @ArgumentParser.ParameterDescription(valueName = "sentencesPerSample", description = "number of sentences per sample") String getSentencesPerSample(); @ArgumentParser.ParameterDescription(valueName = "recurrentSearch", description = "search through files recursively") boolean getRecurrentSearch(); @ArgumentParser.ParameterDescription(valueName = "fileFilterString", description = "only include files which contain a given string in their name") String getFileFilter(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascWord.java0100644 0000000 0000000 00000003165 14523004075 032602 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import opennlp.tools.util.Span; public class MascWord extends Span { private static final long serialVersionUID = 2133473549058189775L; private final int id; /** * Holds one of MASC's quarks, that is: basic-level units (may be sub-word). * * @param s The beginning of the word in the corpus file. * Must be equal to or greater than {@code 0}. * @param e The end of the word in the corpus file. * Must be equal to or greater than {@code 0} and be greater than {@code s}. * @param id The id as assigned by the stand-off annotation. * * @throws IllegalArgumentException Thrown if one of the parameters are invalid. */ public MascWord(int s, int e, int id) { super(s, e); this.id = id; } public int getId() { return id; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/MascWordParser.java0100644 0000000 0000000 00000003653 14523004075 033761 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.util.ArrayList; import java.util.List; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; /** * Class to parse the word ("quark") segmentation stand-off annotation. */ class MascWordParser extends DefaultHandler { private final List wordAnchors = new ArrayList<>(); public List getAnchors() { return wordAnchors; } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { try { // create a word and put it into the list of words if (qName.equalsIgnoreCase("region")) { int id = Integer.parseInt(attributes.getValue("xml:id").replaceFirst("seg-r", "")); String[] anchors = attributes.getValue("anchors").split(" "); int left = Integer.parseInt(anchors[0]); int right = Integer.parseInt(anchors[1]); wordAnchors.add(new MascWord(left, right, id)); } } catch (Exception e) { throw new SAXException("Could not parse the word segmentation annotation file."); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/masc/package-info.java0100644 0000000 0000000 00000001621 14523004075 033402 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Experimental package related to the {@code MASC} corpus format. */ package opennlp.tools.formats.masc; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_moses_Mos0100644 0000000 0000000 00000000171 14523004075 032645 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/moses/MosesSentenceSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/moses/MosesSentenceSample0100644 0000000 0000000 00000004434 14523004075 034263 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.moses; import java.io.IOException; import java.util.LinkedList; import java.util.List; import opennlp.tools.sentdetect.EmptyLinePreprocessorStream; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; public class MosesSentenceSampleStream extends FilterObjectStream { /** * Initializes a {@link MosesSentenceSampleStream}. * * @param sentences The {@link ObjectStream samples} as input. * Must not be {@code null}. * * @throws IllegalArgumentException Thrown if parameters are invalid. */ public MosesSentenceSampleStream(ObjectStream sentences) { super(new EmptyLinePreprocessorStream(sentences)); } @Override public SentenceSample read() throws IOException { StringBuilder sentencesString = new StringBuilder(); List sentenceSpans = new LinkedList<>(); String sentence; for (int i = 0; i < 25 && (sentence = samples.read()) != null; i++) { int begin = sentencesString.length(); sentence = sentence.trim(); sentencesString.append(sentence); int end = sentencesString.length(); sentenceSpans.add(new Span(begin, end)); sentencesString.append(' '); } if (sentenceSpans.size() > 0) { return new SentenceSample(sentencesString.toString(), sentenceSpans.toArray(new Span[0])); } return null; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_moses_Mos0100644 0000000 0000000 00000000200 14523004075 032636 xustar000000000 0000000 128 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/moses/MosesSentenceSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/moses/MosesSentenceSample0100644 0000000 0000000 00000004547 14523004075 034270 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.moses; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; /** * Factory producing OpenNLP {@link MosesSentenceSampleStream} objects. */ public class MosesSentenceSampleStreamFactory

extends AbstractSampleStreamFactory { interface Parameters extends BasicFormatParams { } public static void registerFactory() { StreamFactoryRegistry.registerFactory(SentenceSample.class, "moses", new MosesSentenceSampleStreamFactory<>(Parameters.class)); } protected MosesSentenceSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); CmdLineUtil.checkInputFile("Data", params.getData()); InputStreamFactory sampleDataIn = CmdLineUtil.createInputStreamFactory(params.getData()); ObjectStream lineStream = null; try { lineStream = new PlainTextByLineStream(sampleDataIn, params.getEncoding()); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } return new MosesSentenceSampleStream(lineStream); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_muc_Docum0100644 0000000 0000000 00000000164 14523004075 032616 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/muc/DocumentSplitterStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/muc/DocumentSplitterStrea0100644 0000000 0000000 00000004721 14523004075 034307 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.muc; import java.io.IOException; import java.util.ArrayList; import java.util.List; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.ObjectStream; class DocumentSplitterStream extends FilterObjectStream { private static final String DOC_START_ELEMENT = ""; private static final String DOC_END_ELEMENT = ""; private final List docs = new ArrayList<>(); DocumentSplitterStream(ObjectStream samples) { super(samples); } @Override public String read() throws IOException { if (docs.isEmpty()) { String newDocs = samples.read(); if (newDocs != null) { int docStartOffset = 0; while (true) { int startDocElement = newDocs.indexOf(DOC_START_ELEMENT, docStartOffset); int endDocElement = newDocs.indexOf(DOC_END_ELEMENT, docStartOffset); if (startDocElement != -1 && endDocElement != -1) { if (startDocElement < endDocElement) { docs.add(newDocs.substring(startDocElement, endDocElement + DOC_END_ELEMENT.length())); docStartOffset = endDocElement + DOC_END_ELEMENT.length(); } else { throw new InvalidFormatException(" element is not closed!"); } } else if (startDocElement != endDocElement) { throw new InvalidFormatException("Missing or element!"); } else { break; } } } } if (docs.size() > 0) { return docs.remove(0); } else { return null; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_muc_Muc6N0100644 0000000 0000000 00000000171 14523004075 032475 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/muc/Muc6NameSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/muc/Muc6NameSampleStreamF0100644 0000000 0000000 00000005245 14523004075 034044 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.muc; import java.io.File; import java.nio.charset.StandardCharsets; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.cmdline.tokenizer.TokenizerModelLoader; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.formats.DirectorySampleStream; import opennlp.tools.formats.convert.FileToStringSampleStream; import opennlp.tools.namefind.NameSample; import opennlp.tools.tokenize.Tokenizer; import opennlp.tools.tokenize.TokenizerME; import opennlp.tools.tokenize.TokenizerModel; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.StringUtil; public class Muc6NameSampleStreamFactory extends AbstractSampleStreamFactory { protected Muc6NameSampleStreamFactory() { super(Parameters.class); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(NameSample.class, "muc6", new Muc6NameSampleStreamFactory()); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); TokenizerModel tokenizerModel = new TokenizerModelLoader().load(params.getTokenizerModel()); Tokenizer tokenizer = new TokenizerME(tokenizerModel); ObjectStream mucDocStream = new FileToStringSampleStream( new DirectorySampleStream(params.getData(), file -> StringUtil.toLowerCase(file.getName()).endsWith(".sgm"), false), StandardCharsets.UTF_8); return new MucNameSampleStream(tokenizer, mucDocStream); } interface Parameters extends BasicFormatParams { @ParameterDescription(valueName = "modelFile") File getTokenizerModel(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/muc/MucElementNames.java0100644 0000000 0000000 00000003156 14523004075 033746 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.muc; import java.util.Collections; import java.util.HashSet; import java.util.Set; class MucElementNames { static final String DOC_ELEMENT = "DOC"; static final String HEADLINE_ELEMENT = "HL"; static final String DATELINE_ELEMENT = "DATELINE"; static final String DD_ELEMENT = "DD"; static final String SENTENCE_ELEMENT = "s"; static final Set CONTENT_ELEMENTS; static { Set contentElementNames = new HashSet<>(); contentElementNames.add(MucElementNames.HEADLINE_ELEMENT); contentElementNames.add(MucElementNames.DATELINE_ELEMENT); contentElementNames.add(MucElementNames.DD_ELEMENT); contentElementNames.add(MucElementNames.SENTENCE_ELEMENT); CONTENT_ELEMENTS = Collections.unmodifiableSet(contentElementNames); } private MucElementNames() { } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_muc_MucNa0100644 0000000 0000000 00000000163 14523004075 032551 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/muc/MucNameContentHandler.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/muc/MucNameContentHandler0100644 0000000 0000000 00000010563 14523004075 034162 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.muc; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.Stack; import opennlp.tools.namefind.NameSample; import opennlp.tools.tokenize.Tokenizer; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.Span; public class MucNameContentHandler extends SgmlParser.ContentHandler { private static final String ENTITY_ELEMENT_NAME = "ENAMEX"; private static final String TIME_ELEMENT_NAME = "TIMEX"; private static final String NUM_ELEMENT_NAME = "NUMEX"; private static final Set NAME_ELEMENT_NAMES; private static final Set EXPECTED_TYPES; static { Set types = new HashSet<>(); types.add("PERSON"); types.add("ORGANIZATION"); types.add("LOCATION"); types.add("DATE"); types.add("TIME"); types.add("MONEY"); types.add("PERCENT"); EXPECTED_TYPES = Collections.unmodifiableSet(types); Set nameElements = new HashSet<>(); nameElements.add(ENTITY_ELEMENT_NAME); nameElements.add(TIME_ELEMENT_NAME); nameElements.add(NUM_ELEMENT_NAME); NAME_ELEMENT_NAMES = Collections.unmodifiableSet(nameElements); } private final Tokenizer tokenizer; private final List storedSamples; private boolean isInsideContentElement = false; private final List text = new ArrayList<>(); private boolean isClearAdaptiveData = false; private final Stack incompleteNames = new Stack<>(); private final List names = new ArrayList<>(); /** * Initializes a {@link MucNameContentHandler}. * * @param tokenizer The {@link Tokenizer} to use. Must not be {@code null}. * @param storedSamples The {@link List samples} as input. * Must not be {@code null}. */ public MucNameContentHandler(Tokenizer tokenizer, List storedSamples) { this.tokenizer = tokenizer; this.storedSamples = storedSamples; } @Override public void startElement(String name, Map attributes) throws InvalidFormatException { if (MucElementNames.DOC_ELEMENT.equals(name)) { isClearAdaptiveData = true; } if (MucElementNames.CONTENT_ELEMENTS.contains(name)) { isInsideContentElement = true; } if (NAME_ELEMENT_NAMES.contains(name)) { String nameType = attributes.get("TYPE"); if (!EXPECTED_TYPES.contains(nameType)) { throw new InvalidFormatException("Unknown timex, numex or namex type: " + nameType + ", expected one of " + EXPECTED_TYPES); } incompleteNames.add(new Span(text.size(), text.size(), nameType.toLowerCase(Locale.ENGLISH))); } } @Override public void characters(CharSequence chars) { if (isInsideContentElement) { String[] tokens = tokenizer.tokenize(chars.toString()); text.addAll(Arrays.asList(tokens)); } } @Override public void endElement(String name) { if (NAME_ELEMENT_NAMES.contains(name)) { Span nameSpan = incompleteNames.pop(); nameSpan = new Span(nameSpan.getStart(), text.size(), nameSpan.getType()); names.add(nameSpan); } if (MucElementNames.CONTENT_ELEMENTS.contains(name)) { storedSamples.add(new NameSample(text.toArray(new String[0]), names.toArray(new Span[0]), isClearAdaptiveData)); if (isClearAdaptiveData) { isClearAdaptiveData = false; } text.clear(); names.clear(); isInsideContentElement = false; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_muc_MucNa0100644 0000000 0000000 00000000161 14523004075 032547 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/muc/MucNameSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/muc/MucNameSampleStream.j0100644 0000000 0000000 00000004464 14523004075 034102 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.muc; import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.List; import opennlp.tools.namefind.NameSample; import opennlp.tools.tokenize.Tokenizer; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; public class MucNameSampleStream extends FilterObjectStream { private final Tokenizer tokenizer; private final List storedSamples = new ArrayList<>(); /** * Initializes a {@link MucNameSampleStream}. * * @param tokenizer The {@link Tokenizer} to use. Must not be {@code null}. * @param samples The {@link ObjectStream samples} as input. * Must not be {@code null}. * * @throws IllegalArgumentException Thrown if parameters are invalid. */ protected MucNameSampleStream(Tokenizer tokenizer, ObjectStream samples) { super(samples); this.tokenizer = tokenizer; } @Override public NameSample read() throws IOException { if (storedSamples.isEmpty()) { String document = samples.read(); if (document != null) { // Note: This is a hack to fix invalid formatting in // some MUC files ... document = document.replace(">>", ">"); new SgmlParser().parse(new StringReader(document), new MucNameContentHandler(tokenizer, storedSamples)); } } if (storedSamples.size() > 0) { return storedSamples.remove(0); } else { return null; } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/muc/SgmlParser.java0100644 0000000 0000000 00000011250 14523004075 032775 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.muc; import java.io.IOException; import java.io.Reader; import java.util.HashMap; import java.util.Map; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.StringUtil; /** * SAX style SGML parser. *

* Note:
* The implementation is very limited, but good enough to * parse the MUC corpora. Its must very likely be extended/improved/fixed to parse * a different SGML corpora. */ public class SgmlParser { public static abstract class ContentHandler { public void startElement(String name, Map attributes) throws InvalidFormatException { } public void characters(CharSequence chars) throws InvalidFormatException{ } public void endElement(String name) throws InvalidFormatException { } } private static String extractTagName(CharSequence tagChars) throws InvalidFormatException { int fromOffset = 1; if (tagChars.length() > 1 && tagChars.charAt(1) == '/') { fromOffset = 2; } for (int ci = 1; ci < tagChars.length(); ci++) { if (tagChars.charAt(ci) == '>' || StringUtil.isWhitespace(tagChars.charAt(ci))) { return tagChars.subSequence(fromOffset, ci).toString(); } } throw new InvalidFormatException("Failed to extract tag name!"); } private static Map getAttributes(CharSequence tagChars) { // format: // space // key // = // " <- begin // value chars // " <- end Map attributes = new HashMap<>(); StringBuilder key = new StringBuilder(); StringBuilder value = new StringBuilder(); boolean extractKey = false; boolean extractValue = false; for (int i = 0; i < tagChars.length(); i++) { // White space indicates begin of new key name if (StringUtil.isWhitespace(tagChars.charAt(i)) && !extractValue) { extractKey = true; } // Equals sign indicated end of key name else if (extractKey && ('=' == tagChars.charAt(i) || StringUtil.isWhitespace(tagChars.charAt(i)))) { extractKey = false; } // Inside key name, extract all chars else if (extractKey) { key.append(tagChars.charAt(i)); } // " Indicates begin or end of value chars else if ('"' == tagChars.charAt(i)) { if (extractValue) { attributes.put(key.toString(), value.toString()); // clear key and value buffers key.setLength(0); value.setLength(0); } extractValue = !extractValue; } // Inside value, extract all chars else if (extractValue) { value.append(tagChars.charAt(i)); } } return attributes; } public void parse(Reader in, ContentHandler handler) throws IOException { StringBuilder buffer = new StringBuilder(); boolean isInsideTag = false; boolean isStartTag = true; int lastChar = -1; int c; while ((c = in.read()) != -1) { if ('<' == c) { if (isInsideTag) { throw new InvalidFormatException("Did not expect < char!"); } if (buffer.toString().trim().length() > 0) { handler.characters(buffer.toString().trim()); } buffer.setLength(0); isInsideTag = true; isStartTag = true; } buffer.appendCodePoint(c); if ('/' == c && lastChar == '<') { isStartTag = false; } if ('>' == c) { if (!isInsideTag) { throw new InvalidFormatException("Did not expect > char!"); } if (isStartTag) { handler.startElement(extractTagName(buffer), getAttributes(buffer)); } else { handler.endElement(extractTagName(buffer)); } buffer.setLength(0); isInsideTag = false; } lastChar = c; } if (isInsideTag) { throw new InvalidFormatException("Did not find matching > char!"); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/muc/package-info.java0100644 0000000 0000000 00000001617 14523004075 033250 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Experimental package related to the {@code MUC} corpus format. */ package opennlp.tools.formats.muc; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_nkjp_NKJP0100644 0000000 0000000 00000000167 14523004075 032472 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/nkjp/NKJPSegmentationDocument.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/nkjp/NKJPSegmentationDocu0100644 0000000 0000000 00000020071 14523004075 034110 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.nkjp; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.LinkedHashMap; import java.util.Map; import javax.xml.parsers.DocumentBuilder; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import opennlp.tools.util.Span; import opennlp.tools.util.XmlUtil; public class NKJPSegmentationDocument { public static class Pointer { final String doc; final String id; final int offset; final int length; final boolean space_after; public Pointer(String doc, String id, int offset, int length, boolean space_after) { this.doc = doc; this.id = id; this.offset = offset; this.length = length; this.space_after = space_after; } public Span toSpan() { return new Span(this.offset, this.offset + this.length); } @Override public String toString() { return doc + "#string-range(" + id + "," + offset + "," + length + ")"; } } public Map> getSegments() { return segments; } Map> segments; NKJPSegmentationDocument() { this.segments = new LinkedHashMap<>(); } NKJPSegmentationDocument(Map> segments) { this(); this.segments = segments; } public static NKJPSegmentationDocument parse(InputStream is) throws IOException { Map> sentences = new LinkedHashMap<>(); try { DocumentBuilder docBuilder = XmlUtil.createDocumentBuilder(); Document doc = docBuilder.parse(is); XPathFactory xPathfactory = XPathFactory.newInstance(); XPath xpath = xPathfactory.newXPath(); final XPathExpression SENT_NODES = xpath.compile("/teiCorpus/TEI/text/body/p/s"); final XPathExpression SEG_NODES = xpath.compile("./seg|./choice"); final XPathExpression SEG_NODES_ONLY = xpath.compile("./seg"); NodeList nl = (NodeList) SENT_NODES.evaluate(doc, XPathConstants.NODESET); for (int i = 0; i < nl.getLength(); i++) { Node sentnode = nl.item(i); String sentid = null; if (sentnode.getAttributes().getNamedItem("xml:id") != null) { sentid = sentnode.getAttributes().getNamedItem("xml:id").getTextContent(); } Map segments = new LinkedHashMap<>(); NodeList segnl = (NodeList) SEG_NODES.evaluate(sentnode, XPathConstants.NODESET); for (int j = 0; j < segnl.getLength(); j++) { Node n = segnl.item(j); if (n.getNodeName().equals("seg")) { String segid = xmlID(n); Pointer pointer = fromSeg(n); segments.put(segid, pointer); } else if (n.getNodeName().equals("choice")) { NodeList choices = n.getChildNodes(); for (int k = 0; k < choices.getLength(); k++) { if (choices.item(k).getNodeName().equals("nkjp:paren")) { if (!checkRejectedParen(choices.item(k))) { NodeList paren_segs = (NodeList) SEG_NODES_ONLY.evaluate(choices.item(k), XPathConstants.NODESET); for (int l = 0; l < paren_segs.getLength(); l++) { String segid = xmlID(paren_segs.item(l)); Pointer pointer = fromSeg(paren_segs.item(l)); segments.put(segid, pointer); } } } else if (choices.item(k).getNodeName().equals("seg")) { if (!checkRejected(choices.item(k))) { String segid = xmlID(choices.item(k)); Pointer pointer = fromSeg(choices.item(k)); segments.put(segid, pointer); } } } } } sentences.put(sentid, segments); } } catch (SAXException | XPathExpressionException | IOException e) { throw new IOException("Failed to parse NKJP document", e); } return new NKJPSegmentationDocument(sentences); } static boolean checkRejected(Node n) { if (n.getAttributes() == null) { return false; } if (n.getAttributes().getNamedItem("nkjp:rejected") == null) { return false; } String rejected = n.getAttributes().getNamedItem("nkjp:rejected").getTextContent(); return rejected.equals("true"); } static boolean checkRejectedParen(Node n) { if (n.getChildNodes().getLength() == 0) { return false; } else { for (int i = 0; i < n.getChildNodes().getLength(); i++) { Node m = n.getChildNodes().item(i); if (m.getNodeName().equals("seg")) { if (!checkRejected(m)) { return false; } } } return true; } } static String xmlID(Node n) throws IOException { if (n.getAttributes() == null || n.getAttributes().getLength() < 1) { throw new IOException("Missing required attributes"); } String id = null; if (n.getAttributes().getNamedItem("xml:id") != null) { id = n.getAttributes().getNamedItem("xml:id").getTextContent(); } if (id == null) { throw new IOException("Missing xml:id attribute"); } return id; } static Pointer fromSeg(Node n) throws IOException { if (n.getAttributes() == null || n.getAttributes().getLength() < 2) { throw new IOException("Missing required attributes"); } String ptr = null; if (n.getAttributes().getNamedItem("corresp") != null) { ptr = n.getAttributes().getNamedItem("corresp").getTextContent(); } String spacing = ""; if (n.getAttributes().getNamedItem("nkjp:nps") != null) { spacing = n.getAttributes().getNamedItem("nkjp:nps").getTextContent(); } if (ptr == null) { throw new IOException("Missing required attribute"); } boolean space_after = (ptr.equals("yes")); if (!ptr.contains("#") || !ptr.contains("(") || ptr.charAt(ptr.length() - 1) != ')') { throw new IOException("String " + ptr + " does not appear to be a valid NKJP corresp attribute"); } int docend = ptr.indexOf('#'); String document = ptr.substring(0, docend); int pointer_start = ptr.indexOf('(') + 1; String[] pieces = ptr.substring(pointer_start, ptr.length() - 1).split(","); if (pieces.length < 3 || pieces.length > 4) { throw new IOException("String " + ptr + " does not appear to be a valid NKJP corresp attribute"); } String docid = pieces[0]; int offset; int length; if (pieces.length == 3) { offset = Integer.parseInt(pieces[1]); length = Integer.parseInt(pieces[2]); } else { int os1 = Integer.parseInt(pieces[1]); int os2 = Integer.parseInt(pieces[2]); offset = (os1 * 1000) + os2; length = Integer.parseInt(pieces[3]); } return new Pointer(document, docid, offset, length, space_after); } static NKJPSegmentationDocument parse(File file) throws IOException { try (InputStream in = new BufferedInputStream(new FileInputStream(file))) { return parse(in); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_nkjp_NKJP0100644 0000000 0000000 00000000167 14523004075 032472 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/nkjp/NKJPSentenceSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/nkjp/NKJPSentenceSampleSt0100644 0000000 0000000 00000007060 14523004075 034060 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.nkjp; import java.io.IOException; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; public class NKJPSentenceSampleStream implements ObjectStream { private final NKJPSegmentationDocument segments; private final NKJPTextDocument text; private Iterator>> segmentIt; NKJPSentenceSampleStream(NKJPSegmentationDocument segments, NKJPTextDocument text) { this.segments = segments; this.text = text; reset(); } @Override public SentenceSample read() throws IOException { StringBuilder sentencesString = new StringBuilder(); List sentenceSpans = new LinkedList<>(); Map paragraphs = text.getParagraphs(); while (segmentIt.hasNext()) { Map.Entry> segment = segmentIt.next(); int start = 0; int end = 0; boolean started = false; String lastParagraphId = ""; String currentParagraph = ""; for (String s : segment.getValue().keySet()) { NKJPSegmentationDocument.Pointer currentPointer = segment.getValue().get(s); Span currentSpan = currentPointer.toSpan(); if (!started) { start = currentSpan.getStart(); started = true; lastParagraphId = currentPointer.id; currentParagraph = paragraphs.get(currentPointer.id); } if (!lastParagraphId.equals(currentPointer.id)) { int new_start = sentencesString.length(); sentencesString.append(currentParagraph.substring(start, end)); int new_end = sentencesString.length(); sentenceSpans.add(new Span(new_start, new_end)); sentencesString.append(' '); start = currentSpan.getStart(); end = currentSpan.getEnd(); lastParagraphId = currentPointer.id; currentParagraph = paragraphs.get(currentPointer.id); } else { end = currentSpan.getEnd(); } } int new_start = sentencesString.length(); sentencesString.append(currentParagraph.substring(start, end)); int new_end = sentencesString.length(); sentenceSpans.add(new Span(new_start, new_end)); sentencesString.append(' '); } // end of stream is reached, indicate that with null return value if (sentenceSpans.size() == 0) { return null; } return new SentenceSample(sentencesString.toString(), sentenceSpans.toArray(new Span[0])); } @Override public void reset() { segmentIt = segments.getSegments().entrySet().iterator(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_nkjp_NKJP0100644 0000000 0000000 00000000176 14523004075 032472 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/nkjp/NKJPSentenceSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/nkjp/NKJPSentenceSampleSt0100644 0000000 0000000 00000004654 14523004075 034066 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.nkjp; import java.io.File; import java.io.IOException; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.params.BasicFormatParams; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.ObjectStream; public class NKJPSentenceSampleStreamFactory

extends AbstractSampleStreamFactory { interface Parameters extends BasicFormatParams { @ArgumentParser.ParameterDescription(valueName = "text", description = "file containing NKJP text") File getTextFile(); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(SentenceSample.class, "nkjp", new NKJPSentenceSampleStreamFactory<>(NKJPSentenceSampleStreamFactory.Parameters.class)); } protected NKJPSentenceSampleStreamFactory(Class

params) { super(params); } @Override public ObjectStream create(String[] args) { Parameters params = ArgumentParser.parse(args, Parameters.class); CmdLineUtil.checkInputFile("Data", params.getData()); CmdLineUtil.checkInputFile("Text", params.getTextFile()); NKJPSegmentationDocument segDoc = null; NKJPTextDocument textDoc = null; try { segDoc = NKJPSegmentationDocument.parse(params.getData()); textDoc = NKJPTextDocument.parse(params.getTextFile()); } catch (IOException ex) { CmdLineUtil.handleCreateObjectStreamError(ex); } return new NKJPSentenceSampleStream(segDoc, textDoc); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_nkjp_NKJP0100644 0000000 0000000 00000000157 14523004075 032471 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/nkjp/NKJPTextDocument.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/nkjp/NKJPTextDocument.jav0100644 0000000 0000000 00000015562 14523004075 034053 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.nkjp; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Collections; import java.util.HashMap; import java.util.Map; import javax.xml.parsers.DocumentBuilder; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import opennlp.tools.util.XmlUtil; /** * The National corpus of Polish (NKJP) format. *

* Information about the format are found on this * web site. *

* A 1-million word corpus can be found on this * * web site. *

* The NKJP schema can be found * here. */ public class NKJPTextDocument { private Map divtypes; private Map>> texts; NKJPTextDocument() { divtypes = new HashMap<>(); texts = new HashMap<>(); } NKJPTextDocument(Map divtypes, Map>> texts) { this(); this.divtypes = divtypes; this.texts = texts; } public static NKJPTextDocument parse(InputStream is) throws IOException { Map divtypes = new HashMap<>(); Map>> texts = new HashMap<>(); try { DocumentBuilder docBuilder = XmlUtil.createDocumentBuilder(); Document doc = docBuilder.parse(is); XPathFactory xPathfactory = XPathFactory.newInstance(); XPath xpath = xPathfactory.newXPath(); final XPathExpression TEXT_NODES_EXAMPLE = xpath.compile("/teiCorpus/TEI/text/group/text"); final XPathExpression TEXT_NODES_SAMPLE = xpath.compile("/teiCorpus/TEI/text"); final XPathExpression DIV_NODES = xpath.compile("./body/div"); final XPathExpression PARA_NODES = xpath.compile("./p|./ab"); doc.getDocumentElement().normalize(); String root = doc.getDocumentElement().getNodeName(); if (!root.equalsIgnoreCase("teiCorpus")) { throw new IOException("Expected root node " + root); } String current_text = ""; NodeList textnl = (NodeList) TEXT_NODES_EXAMPLE.evaluate(doc, XPathConstants.NODESET); if (textnl.getLength() == 0) { textnl = (NodeList) TEXT_NODES_SAMPLE.evaluate(doc, XPathConstants.NODESET); } for (int i = 0; i < textnl.getLength(); i++) { Node textnode = textnl.item(i); current_text = attrib(textnode, "xml:id", true); Map> current_divs = new HashMap<>(); NodeList divnl = (NodeList) DIV_NODES.evaluate(textnode, XPathConstants.NODESET); for (int j = 0; j < divnl.getLength(); j++) { Node divnode = divnl.item(j); String divtype = attrib(divnode, "type", false); String divid = attrib(divnode, "xml:id", true); divtypes.put(divid, divtype); Map current_paras = new HashMap<>(); NodeList paranl = (NodeList) PARA_NODES.evaluate(divnode, XPathConstants.NODESET); for (int k = 0; k < paranl.getLength(); k++) { Node pnode = paranl.item(k); String pid = attrib(pnode, "xml:id", true); if (pnode.getChildNodes().getLength() != 1 && !pnode.getFirstChild().getNodeName().equals("#text")) { throw new IOException("Unexpected content in p element " + pid); } String ptext = pnode.getTextContent(); current_paras.put(pid, ptext); } current_divs.put(divid, current_paras); } texts.put(current_text, current_divs); } } catch (SAXException | XPathExpressionException | IOException e) { throw new IOException("Failed to parse NKJP document", e); } return new NKJPTextDocument(divtypes, texts); } static NKJPTextDocument parse(File file) throws IOException { try (InputStream in = new BufferedInputStream(new FileInputStream(file))) { return parse(in); } } Map getDivtypes() { return Collections.unmodifiableMap(this.divtypes); } Map>> getTexts() { return Collections.unmodifiableMap(this.texts); } /** * Segmentation etc. is done only in relation to the paragraph, * which are unique within a document. This is to simplify * working with the paragraphs within the document * * @return A map of paragraph IDs and their text. */ Map getParagraphs() { Map paragraphs = new HashMap<>(); for (String dockey : texts.keySet()) { for (String divkey : texts.get(dockey).keySet()) { for (String pkey : texts.get(dockey).get(divkey).keySet()) { paragraphs.put(pkey, texts.get(dockey).get(divkey).get(pkey)); } } } return paragraphs; } /** * Helper method to get the value of an attribute. * * @param n The {@link Node} to be processed. * @param attrib The name of the attribute. * @param required Whether the attribute is required or not. * * @return The value of the attribute, or null if not required and not present * @throws IOException Thrown if IO errors occurred. */ private static String attrib(Node n, String attrib, boolean required) throws IOException { if (required && (n.getAttributes() == null || n.getAttributes().getLength() == 0)) { throw new IOException("Missing required attributes in node " + n.getNodeName()); } if (n.getAttributes().getNamedItem(attrib) != null) { return n.getAttributes().getNamedItem(attrib).getTextContent(); } else { if (required) { throw new IOException("Required attribute \"" + attrib + "\" missing in node " + n.getNodeName()); } else { return null; } } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/nkjp/package-info.java0100644 0000000 0000000 00000001644 14523004075 033426 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Experimental package related to the National corpus of Polish {@code NKJP} format. */ package opennlp.tools.formats.nkjp; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ontonotes0100644 0000000 0000000 00000000170 14523004075 032730 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/DocumentToLineStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/DocumentToLineS0100644 0000000 0000000 00000003570 14523004075 034264 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ontonotes; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import opennlp.tools.formats.brat.SegmenterObjectStream; import opennlp.tools.util.ObjectStream; /** * Reads a plain text file and return each line as a {@link String} object. */ public class DocumentToLineStream extends SegmenterObjectStream { /** * Initializes a {@link DocumentToLineStream}. * * @param samples The {@link ObjectStream samples} as input. * Must not be {@code null}. * * @throws IllegalArgumentException Thrown if parameters are invalid. */ public DocumentToLineStream(ObjectStream samples) { super(samples); } @Override protected List read(String sample) throws IOException { List lines = Arrays.asList(sample.split("\n")); // documents must be empty line terminated if (!lines.get(lines.size() - 1).trim().isEmpty()) { lines = new ArrayList<>(lines); lines.add(""); } return lines; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ontonotes0100644 0000000 0000000 00000000175 14523004075 032735 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/OntoNotesFormatParameters.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/OntoNotesFormat0100644 0000000 0000000 00000002040 14523004075 034340 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ontonotes; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; public interface OntoNotesFormatParameters { @ParameterDescription(valueName = "OntoNotes 4.0 corpus directory") String getOntoNotesDir(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ontonotes0100644 0000000 0000000 00000000175 14523004075 032735 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/OntoNotesNameSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/OntoNotesNameSa0100644 0000000 0000000 00000012417 14523004075 034265 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ontonotes; import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import opennlp.tools.namefind.NameSample; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; import opennlp.tools.util.StringUtil; /** * Name Sample Stream parser for the OntoNotes 4.0 corpus. */ public class OntoNotesNameSampleStream extends FilterObjectStream { private final Map tokenConversionMap; private final List nameSamples = new LinkedList<>(); /** * Initializes a {@link OntoNotesNameSampleStream}. * * @param samples The {@link ObjectStream samples} as input. * Must not be {@code null}. * * @throws IllegalArgumentException Thrown if parameters are invalid. */ public OntoNotesNameSampleStream(ObjectStream samples) { super(samples); Map tokenConversionMap = new HashMap<>(); tokenConversionMap.put("-LRB-", "("); tokenConversionMap.put("-RRB-", ")"); tokenConversionMap.put("-LSB-", "["); tokenConversionMap.put("-RSB-", "]"); tokenConversionMap.put("-LCB-", "{"); tokenConversionMap.put("-RCB-", "}"); tokenConversionMap.put("-AMP-", "&"); this.tokenConversionMap = Collections.unmodifiableMap(tokenConversionMap); } private String convertToken(String token) { StringBuilder convertedToken = new StringBuilder(token); int startTagEndIndex = convertedToken.indexOf(">"); if (token.contains("=\"") && startTagEndIndex != -1) { convertedToken.delete(0, startTagEndIndex + 1); } int endTagBeginIndex = convertedToken.indexOf("<"); int endTagEndIndex = convertedToken.indexOf(">"); if (endTagBeginIndex != -1 && endTagEndIndex != -1) { convertedToken.delete(endTagBeginIndex, endTagEndIndex + 1); } String cleanedToken = convertedToken.toString(); if (tokenConversionMap.get(cleanedToken) != null) { cleanedToken = tokenConversionMap.get(cleanedToken); } return cleanedToken; } @Override public NameSample read() throws IOException { if (nameSamples.isEmpty()) { String doc = samples.read(); if (doc != null) { BufferedReader docIn = new BufferedReader(new StringReader(doc)); boolean clearAdaptiveData = true; String line; while ((line = docIn.readLine()) != null) { if (line.startsWith("")) { break; } String[] tokens = WhitespaceTokenizer.INSTANCE.tokenize(line); List entities = new LinkedList<>(); List cleanedTokens = new ArrayList<>(tokens.length); int tokenIndex = 0; int entityBeginIndex = -1; String entityType = null; boolean insideStartEnmaxTag = false; for (String token : tokens) { // Split here, next part of tag is in new token if (token.startsWith("")) { entityBeginIndex = tokenIndex; insideStartEnmaxTag = false; } else { continue; } } if (token.endsWith("")) { entities.add(new Span(entityBeginIndex, tokenIndex + 1, entityType)); entityBeginIndex = -1; } cleanedTokens.add(convertToken(token)); tokenIndex++; } nameSamples.add(new NameSample(cleanedTokens .toArray(new String[0]), entities .toArray(new Span[0]), clearAdaptiveData)); clearAdaptiveData = false; } } } if (!nameSamples.isEmpty()) { return nameSamples.remove(0); } else { return null; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ontonotes0100644 0000000 0000000 00000000204 14523004075 032726 xustar000000000 0000000 132 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/OntoNotesNameSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/OntoNotesNameSa0100644 0000000 0000000 00000004271 14523004075 034264 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ontonotes; import java.io.File; import java.nio.charset.StandardCharsets; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.formats.DirectorySampleStream; import opennlp.tools.formats.convert.FileToStringSampleStream; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.ObjectStream; public class OntoNotesNameSampleStreamFactory extends AbstractSampleStreamFactory { public OntoNotesNameSampleStreamFactory() { super(OntoNotesFormatParameters.class); } @Override public ObjectStream create(String[] args) { OntoNotesFormatParameters params = ArgumentParser.parse(args, OntoNotesFormatParameters.class); ObjectStream documentStream = new DirectorySampleStream(new File( params.getOntoNotesDir()), file -> { if (file.isFile()) { return file.getName().endsWith(".name"); } return file.isDirectory(); }, true); return new OntoNotesNameSampleStream( new FileToStringSampleStream(documentStream, StandardCharsets.UTF_8)); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(NameSample.class, "ontonotes", new OntoNotesNameSampleStreamFactory()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ontonotes0100644 0000000 0000000 00000000203 14523004075 032725 xustar000000000 0000000 131 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/OntoNotesPOSSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/OntoNotesPOSSam0100644 0000000 0000000 00000003510 14523004075 034215 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ontonotes; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.formats.convert.ParseToPOSSampleStream; import opennlp.tools.parser.Parse; import opennlp.tools.postag.POSSample; import opennlp.tools.util.ObjectStream; public class OntoNotesPOSSampleStreamFactory extends AbstractSampleStreamFactory { private final OntoNotesParseSampleStreamFactory parseSampleStreamFactory = new OntoNotesParseSampleStreamFactory(); protected OntoNotesPOSSampleStreamFactory() { super(OntoNotesFormatParameters.class); } @Override public ObjectStream create(String[] args) { ObjectStream parseSampleStream = parseSampleStreamFactory.create(args); return new ParseToPOSSampleStream(parseSampleStream); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(POSSample.class, "ontonotes", new OntoNotesPOSSampleStreamFactory()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ontonotes0100644 0000000 0000000 00000000176 14523004075 032736 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/OntoNotesParseSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/OntoNotesParseS0100644 0000000 0000000 00000003737 14523004075 034323 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ontonotes; import java.io.IOException; import opennlp.tools.parser.Parse; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; // Should be possible with this one, to train the parser and pos tagger! public class OntoNotesParseSampleStream extends FilterObjectStream { /** * Initializes a {@link OntoNotesParseSampleStream}. * * @param samples The {@link ObjectStream samples} as input. * Must not be {@code null}. * * @throws IllegalArgumentException Thrown if parameters are invalid. */ public OntoNotesParseSampleStream(ObjectStream samples) { super(samples); } @Override public Parse read() throws IOException { StringBuilder parseString = new StringBuilder(); while (true) { String parse = samples.read(); if (parse != null) { parse = parse.trim(); } if (parse == null || parse.isEmpty()) { if (parseString.length() > 0) { return Parse.parseParse(parseString.toString()); } else { return null; } } parseString.append(parse).append(" "); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ontonotes0100644 0000000 0000000 00000000205 14523004075 032727 xustar000000000 0000000 133 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/OntoNotesParseSampleStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/OntoNotesParseS0100644 0000000 0000000 00000004656 14523004075 034324 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ontonotes; import java.io.File; import java.nio.charset.StandardCharsets; import opennlp.tools.cmdline.ArgumentParser; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.formats.AbstractSampleStreamFactory; import opennlp.tools.formats.DirectorySampleStream; import opennlp.tools.formats.convert.FileToStringSampleStream; import opennlp.tools.parser.Parse; import opennlp.tools.util.ObjectStream; public class OntoNotesParseSampleStreamFactory extends AbstractSampleStreamFactory { protected OntoNotesParseSampleStreamFactory() { super(OntoNotesFormatParameters.class); } @Override public ObjectStream create(String[] args) { OntoNotesFormatParameters params = ArgumentParser.parse(args, OntoNotesFormatParameters.class); ObjectStream documentStream = new DirectorySampleStream(new File( params.getOntoNotesDir()), file -> { if (file.isFile()) { return file.getName().endsWith(".parse"); } return file.isDirectory(); }, true); // We need file to line here ... and that is probably best doen with the plain text stream // lets copy it over here, refactor it, and then at some point we replace the current version // with the refactored version return new OntoNotesParseSampleStream(new DocumentToLineStream(new FileToStringSampleStream( documentStream, StandardCharsets.UTF_8))); } public static void registerFactory() { StreamFactoryRegistry.registerFactory(Parse.class, "ontonotes", new OntoNotesParseSampleStreamFactory()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_formats_ontonotes0100644 0000000 0000000 00000000160 14523004075 032727 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/package-info.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/ontonotes/package-info.ja0100644 0000000 0000000 00000001620 14523004075 034157 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Experimental package related to the OntoNotes 4.0 format. */ package opennlp.tools.formats.ontonotes; apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/formats/package-info.java0100644 0000000 0000000 00000001632 14523004075 032461 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Experimental package related to converting various corpora to OpenNLP Format. */ package opennlp.tools.formats; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_langdetect_Defaul0100644 0000000 0000000 00000000204 14523004075 032535 xustar000000000 0000000 132 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/DefaultLanguageDetectorContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/DefaultLanguageDetecto0100644 0000000 0000000 00000004737 14523004075 034225 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import java.util.ArrayList; import java.util.Collection; import opennlp.tools.ngram.NGramCharModel; import opennlp.tools.util.normalizer.AggregateCharSequenceNormalizer; import opennlp.tools.util.normalizer.CharSequenceNormalizer; /** * A context generator for language detector. */ public class DefaultLanguageDetectorContextGenerator implements LanguageDetectorContextGenerator { protected final int minLength; protected final int maxLength; protected final CharSequenceNormalizer normalizer; /** * Creates a customizable {@link DefaultLanguageDetectorContextGenerator} that computes ngrams from text. * * @param minLength The min number of ngrams characters. Must be greater than {@code 0}. * @param maxLength The max number of ngrams characters. Must be greater than {@code 0} * and must be greater than {@code minLength}. * @param normalizers Zero or more normalizers to be applied in to the text before extracting ngrams. */ public DefaultLanguageDetectorContextGenerator(int minLength, int maxLength, CharSequenceNormalizer... normalizers) { this.minLength = minLength; this.maxLength = maxLength; this.normalizer = new AggregateCharSequenceNormalizer(normalizers); } @Override public T[] getContext(CharSequence document) { Collection context = new ArrayList<>(); NGramCharModel model = new NGramCharModel(); model.add(normalizer.normalize(document), minLength, maxLength); for (CharSequence token : model) { context.add(token); } return (T[]) context.toArray(new CharSequence[0]); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/Language.java0100644 0000000 0000000 00000004035 14523004075 032317 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import java.io.Serializable; import java.util.Objects; /** * Class for holding the document language and its confidence */ public class Language implements Serializable { private static final long serialVersionUID = -2692630786925291644L; private final String lang; private final double confidence; /** * @param lang The language identifier. */ public Language(String lang) { this(lang, 0); } /** * @param lang The language identifier. * @param confidence The confidence computed during language detection. */ public Language(String lang, double confidence) { Objects.requireNonNull(lang, "lang must not be null"); this.lang = lang; this.confidence = confidence; } public String getLang() { return lang; } public double getConfidence() { return confidence; } @Override public String toString() { return getLang() + " (" + this.confidence + ")"; } @Override public int hashCode() { return Objects.hash(getLang(), getConfidence()); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof Language a) { return getLang().equals(a.getLang()); } return false; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetector.java0100644 0000000 0000000 00000003331 14523004075 034007 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import java.io.Serializable; /** * The interface for {@link LanguageDetector} which predicts the {@link Language} for a context. */ public interface LanguageDetector extends Serializable { /** * Predicts the {@link Language languages} for the full {@code content} length. * * @param content The textual content to detect potential {@link Language languages} from. * @return the predicted languages */ Language[] predictLanguages(CharSequence content); /** * Predicts the {@link Language} for the full {@code content} length. * * @param content The textual content to detect potential {@link Language languages} from. * @return the language with the highest confidence */ Language predictLanguage(CharSequence content); /** * @return Retrieves an array of language (codes) that are supported by a {@link LanguageDetector}. */ String[] getSupportedLanguages(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_langdetect_Langua0100644 0000000 0000000 00000000163 14523004075 032550 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorConfig.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorConfig0100644 0000000 0000000 00000006535 14523004075 034226 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; public class LanguageDetectorConfig { public static final int DEFAULT_MAX_LENGTH = 10000; public static final int DEFAULT_CHUNK_SIZE = 200; public static final int DEFAULT_MIN_CONSEC_IMPROVEMENTS = 2; public static final double DEFAULT_MIN_DIFF = 0.20; public static final LanguageDetectorConfig DEFAULT_LANGUAGE_DETECTOR_CONFIG = new ImmutableLanguageDetectorConfig(); private int maxLength = DEFAULT_MAX_LENGTH; private int chunkSize = DEFAULT_CHUNK_SIZE; private int minConsecImprovements = DEFAULT_MIN_CONSEC_IMPROVEMENTS; private double minDiff = DEFAULT_MIN_DIFF; /** * @return The maximum length in codepoints of text to process. */ public int getMaxLength() { return maxLength; } public void setMaxLength(int maxLength) { this.maxLength = maxLength; } /** * After processing a chunk of this size, the probing * detection will compute probabilities and determine * if there is enough confidence to stop. * * @return The size in codepoints of chunk to process at each step for * the probing detection. */ public int getChunkSize() { return chunkSize; } public void setChunkSize(int chunkSize) { this.chunkSize = chunkSize; } /** * If this value equals {@code 0}, probing detection will * rely solely on {@link #getMinDiff()} * * @return The minimum number of consecutive increased probabilities * for the top language required in probing detection * to stop early. */ public int getMinConsecImprovements() { return minConsecImprovements; } public void setMinConsecImprovements(int minConsecImprovements) { this.minConsecImprovements = minConsecImprovements; } /** * If this value equals {@code 0}, probing detection will * rely solely on {@link #getMinConsecImprovements()} * * @return The minimum difference in confidence between the top predicted * language and the next most likely language. */ public double getMinDiff() { return minDiff; } public void setMinDiff(double minDiff) { this.minDiff = minDiff; } private static class ImmutableLanguageDetectorConfig extends LanguageDetectorConfig { @Override public void setMaxLength(int maxLength) { //no-op } @Override public void setChunkSize(int chunkSize) { //no-op } @Override public void setMinConsecImprovements(int minConsecImprovements) { //no-op } @Override public void setMinDiff(double minDiff) { //no-op } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_langdetect_Langua0100644 0000000 0000000 00000000175 14523004075 032553 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorContex0100644 0000000 0000000 00000002446 14523004075 034256 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import java.io.Serializable; /** * A context generator interface for {@link LanguageDetector}. */ public interface LanguageDetectorContextGenerator extends Serializable { /** * Retrieves the contexts for a {@code document} using character ngrams. * * @param document The textual input used to extract context from. * * @return An array of contexts on which a model basis its decisions. */ T[] getContext(CharSequence document); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_langdetect_Langua0100644 0000000 0000000 00000000173 14523004075 032551 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorCrossValidator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorCrossV0100644 0000000 0000000 00000006777 14523004075 034250 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import java.io.IOException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.eval.CrossValidationPartitioner; import opennlp.tools.util.eval.Mean; /** * Cross validator for {@link LanguageDetector}. */ public class LanguageDetectorCrossValidator { private final TrainingParameters params; private final Mean documentAccuracy = new Mean(); private final LanguageDetectorEvaluationMonitor[] listeners; private final LanguageDetectorFactory factory; /** * Initializes a {@link LanguageDetectorCrossValidator} with the * given {@link TrainingParameters parameters}. * * @param mlParams The {@link TrainingParameters} for the context of cross validation. * @param factory The {@link LanguageDetectorFactory} for creating related objects. * @param listeners the {@link LanguageDetectorEvaluationMonitor evaluation listeners}. */ public LanguageDetectorCrossValidator(TrainingParameters mlParams, LanguageDetectorFactory factory, LanguageDetectorEvaluationMonitor ... listeners) { this.params = mlParams; this.listeners = listeners; this.factory = factory; } /** * Starts the evaluation. * * @param samples The {@link ObjectStream} of {@link LanguageSample samples} to train and test with. * @param nFolds Number of folds. It must be greater than zero. * * @throws IOException Thrown if IO errors occurred. */ public void evaluate(ObjectStream samples, int nFolds) throws IOException { CrossValidationPartitioner partitioner = new CrossValidationPartitioner<>(samples, nFolds); while (partitioner.hasNext()) { CrossValidationPartitioner.TrainingSampleStream trainingSampleStream = partitioner.next(); LanguageDetectorModel model = LanguageDetectorME.train( trainingSampleStream, params, factory); LanguageDetectorEvaluator evaluator = new LanguageDetectorEvaluator( new LanguageDetectorME(model), listeners); evaluator.evaluate(trainingSampleStream.getTestSampleStream()); documentAccuracy.add(evaluator.getAccuracy(), evaluator.getDocumentCount()); } } /** * @return Retrieves the word accuracy for all iterations. */ public double getDocumentAccuracy() { return documentAccuracy.mean(); } /** * @return Retrieves the number of words which where validated over all iterations. * The result is the amount of folds multiplied by the total number of words. */ public long getDocumentCount() { return documentAccuracy.count(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_langdetect_Langua0100644 0000000 0000000 00000000176 14523004075 032554 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorEvaluationMonitor.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorEvalua0100644 0000000 0000000 00000002064 14523004075 034227 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import opennlp.tools.util.eval.EvaluationMonitor; /** * A marker interface for evaluating {@link LanguageDetector language detectors}. */ public interface LanguageDetectorEvaluationMonitor extends EvaluationMonitor { } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_langdetect_Langua0100644 0000000 0000000 00000000166 14523004075 032553 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorEvaluator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorEvalua0100644 0000000 0000000 00000006033 14523004075 034227 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import opennlp.tools.doccat.DocumentCategorizer; import opennlp.tools.util.eval.Evaluator; import opennlp.tools.util.eval.Mean; /** * The {@link LanguageDetectorEvaluator} measures the performance of * the given {@link LanguageDetector} with the provided reference * {@link LanguageSample}s. * * @see LanguageDetector * @see LanguageSample */ public class LanguageDetectorEvaluator extends Evaluator { private final LanguageDetector languageDetector; private final Mean accuracy = new Mean(); /** * Initializes an instance to evaluate a {@link LanguageDetector}. * * @param langDetect the {@link LanguageDetector} to evaluate. * @param listeners the {@link LanguageDetectorEvaluationMonitor evaluation listeners}. */ public LanguageDetectorEvaluator(LanguageDetector langDetect, LanguageDetectorEvaluationMonitor ... listeners) { super(listeners); this.languageDetector = langDetect; } /** * Evaluates the given reference {@link LanguageSample} object. * This is achieved by categorizing the document of the provided * {@link LanguageSample}. The detected language is then used * to calculate and update the score. * * @param sample the reference {@link LanguageSample}. * @return The processed {@link LanguageSample}. */ public LanguageSample processSample(LanguageSample sample) { CharSequence document = sample.context(); Language predicted = languageDetector.predictLanguage(document); if (sample.language().getLang().equals(predicted.getLang())) { accuracy.add(1); } else { accuracy.add(0); } return new LanguageSample(predicted, sample.context()); } /** * @return Retrieves the accuracy of provided {@link DocumentCategorizer}. * Here: {@code accuracy = correctly categorized documents / total documents}. */ public double getAccuracy() { return accuracy.mean(); } public long getDocumentCount() { return accuracy.count(); } /** * Represents this object as human-readable {@link String}. */ @Override public String toString() { return "Accuracy: " + accuracy.mean() + "\n" + "Number of documents: " + accuracy.count(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_langdetect_Langua0100644 0000000 0000000 00000000170 14523004075 032546 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorEventStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorEventS0100644 0000000 0000000 00000004322 14523004075 034215 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import java.util.Iterator; import opennlp.tools.ml.model.Event; import opennlp.tools.util.AbstractEventStream; import opennlp.tools.util.ObjectStream; /** * Iterator-like class for modeling an event stream of {@link LanguageSample samples}. */ public class LanguageDetectorEventStream extends AbstractEventStream { private final LanguageDetectorContextGenerator mContextGenerator; /** * Initializes an instance via samples and feature generators. * * @param data An {@link ObjectStream} of {@link LanguageSample samples} as input data. * @param cg A {@link LanguageDetectorContextGenerator} used for the event stream {@code data}. */ public LanguageDetectorEventStream(ObjectStream data, LanguageDetectorContextGenerator cg) { super(data); mContextGenerator = cg; } @Override protected Iterator createEvents(final LanguageSample sample) { return new Iterator<>() { private boolean isVirgin = true; @Override public boolean hasNext() { return isVirgin; } @Override public Event next() { isVirgin = false; return new Event(sample.language().getLang(), mContextGenerator.getContext(sample.context().toString())); } public void remove() { throw new UnsupportedOperationException(); } }; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_langdetect_Langua0100644 0000000 0000000 00000000164 14523004075 032551 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorFactor0100644 0000000 0000000 00000007514 14523004075 034235 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import opennlp.tools.util.BaseToolFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.ext.ExtensionLoader; import opennlp.tools.util.normalizer.EmojiCharSequenceNormalizer; import opennlp.tools.util.normalizer.NumberCharSequenceNormalizer; import opennlp.tools.util.normalizer.ShrinkCharSequenceNormalizer; import opennlp.tools.util.normalizer.TwitterCharSequenceNormalizer; import opennlp.tools.util.normalizer.UrlCharSequenceNormalizer; /** * Default factory used by {@link LanguageDetector}. *

* Extend this class to change the Language Detector behaviour, * such as the {@link LanguageDetectorContextGenerator}. * The default {@link DefaultLanguageDetectorContextGenerator} will use char n-grams of * size 1 to 3 and the following normalizers: *

    *
  • {@link EmojiCharSequenceNormalizer} *
  • {@link UrlCharSequenceNormalizer} *
  • {@link TwitterCharSequenceNormalizer} *
  • {@link NumberCharSequenceNormalizer} *
  • {@link ShrinkCharSequenceNormalizer} *
*/ public class LanguageDetectorFactory extends BaseToolFactory { /** * @return Retrieves a {@link LanguageDetectorContextGenerator}. */ public LanguageDetectorContextGenerator getContextGenerator() { return new DefaultLanguageDetectorContextGenerator(1, 3, EmojiCharSequenceNormalizer.getInstance(), UrlCharSequenceNormalizer.getInstance(), TwitterCharSequenceNormalizer.getInstance(), NumberCharSequenceNormalizer.getInstance(), ShrinkCharSequenceNormalizer.getInstance()); } /** * Instantiates a {@link LanguageDetectorFactory} via a given {@code subclassName}. * * @param subclassName The class name used for instantiation. If {@code null}, an * instance of {@link LanguageDetectorFactory} will be returned * per default. Otherwise, the {@link ExtensionLoader} mechanism * is applied to load the requested {@code subclassName}. * * @return A valid {@link LanguageDetectorFactory} instance. * @throws InvalidFormatException Thrown if the {@link ExtensionLoader} mechanism failed to * create the factory associated with {@code subclassName}. */ public static LanguageDetectorFactory create(String subclassName) throws InvalidFormatException { if (subclassName == null) { // will create the default factory return new LanguageDetectorFactory(); } try { LanguageDetectorFactory theFactory = ExtensionLoader.instantiateExtension( LanguageDetectorFactory.class, subclassName); theFactory.init(); return theFactory; } catch (Exception e) { String msg = "Could not instantiate the " + subclassName + ". The initialization threw an exception."; throw new InvalidFormatException(msg, e); } } public void init() { // nothing to do } @Override public void validateArtifactMap() throws InvalidFormatException { // nothing to validate } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_langdetect_Langua0100644 0000000 0000000 00000000157 14523004075 032553 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorME.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorME.jav0100644 0000000 0000000 00000025435 14523004075 034101 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import opennlp.tools.ml.AbstractEventTrainer; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.util.MutableInt; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; /** * Implements a learnable {@link LanguageDetector}. * *

* This will process the entire string when called with * {@link #predictLanguage(CharSequence)} or * {@link #predictLanguages(CharSequence)}. *

*

* If you want this to stop early, use {@link #probingPredictLanguages(CharSequence)} * or {@link #probingPredictLanguages(CharSequence, LanguageDetectorConfig)}. * When run in probing mode, this starts at the beginning of the char sequence * and runs language detection on chunks of text. If the end of the * string is reached or there are {@link LanguageDetectorConfig#getMinConsecImprovements()} * consecutive predictions for the best language and the confidence * increases over those last predictions and if the difference * in confidence between the highest confidence language * and the second highest confidence language is greater than * {@link LanguageDetectorConfig#getMinDiff()}, the language detector will * stop and report the results. *

*

* The authors wish to thank Ken Krugler and * Yalder} * for the inspiration for many of the design * components of this detector. * */ public class LanguageDetectorME implements LanguageDetector { protected final LanguageDetectorModel model; private final LanguageDetectorContextGenerator mContextGenerator; /** * Initializes an instance with a specific {@link LanguageDetectorModel}. * Default feature generation is used. * * @param model the {@link LanguageDetectorModel} to be used. */ public LanguageDetectorME(LanguageDetectorModel model) { this.model = model; this.mContextGenerator = model.getFactory().getContextGenerator(); } @Override public Language[] predictLanguages(CharSequence content) { return predict(arrayToCounts(mContextGenerator.getContext(content))); } @Override public Language predictLanguage(CharSequence content) { return predictLanguages(content)[0]; } @Override public String[] getSupportedLanguages() { int numberLanguages = model.getMaxentModel().getNumOutcomes(); String[] languages = new String[numberLanguages]; for (int i = 0; i < numberLanguages; i++) { languages[i] = model.getMaxentModel().getOutcome(i); } return languages; } /** * This will stop processing early if the stopping criteria * specified in {@link LanguageDetectorConfig#DEFAULT_LANGUAGE_DETECTOR_CONFIG} * are met. * * @param content content to be processed * @return A computed {@link ProbingLanguageDetectionResult}. */ public ProbingLanguageDetectionResult probingPredictLanguages(CharSequence content) { return probingPredictLanguages(content, LanguageDetectorConfig.DEFAULT_LANGUAGE_DETECTOR_CONFIG); } /** * This will stop processing early if the stopping criteria * specified in {@link LanguageDetectorConfig#DEFAULT_LANGUAGE_DETECTOR_CONFIG} * are met. * * @param content The textual content to process. * @param config The {@link LanguageDetectorConfig} to customize detection. * * @return A computed {@link ProbingLanguageDetectionResult}. */ public ProbingLanguageDetectionResult probingPredictLanguages(CharSequence content, LanguageDetectorConfig config) { //list of the languages that received the highest //confidence over the last n chunk detections List predictions = new LinkedList<>(); int start = 0;//where to start the next chunk in codepoints Language[] currPredictions = null; //cache ngram counts across chunks Map ngramCounts = new HashMap<>(); while (true) { int actualChunkSize = (start + config.getChunkSize() > config.getMaxLength()) ? config.getMaxLength() - start : config.getChunkSize(); StringCPLengthPair chunk = chunk(content, start, actualChunkSize); if (chunk.length() == 0) { if (currPredictions == null) { return new ProbingLanguageDetectionResult(predict(ngramCounts), start); } else { return new ProbingLanguageDetectionResult(currPredictions, start); } } start += chunk.length(); updateCounts(mContextGenerator.getContext(chunk.s), ngramCounts); currPredictions = predict(ngramCounts); if (seenEnough(predictions, currPredictions, ngramCounts, config)) { return new ProbingLanguageDetectionResult(currPredictions, start); } } } private void updateCounts(CharSequence[] context, Map ngrams) { for (CharSequence ngram : context) { MutableInt i = ngrams.get(ngram); if (i == null) { i = new MutableInt(1); ngrams.put(ngram, i); } else { i.increment(); } } } private Map arrayToCounts(CharSequence[] context) { Map ngrams = new HashMap<>(); updateCounts(context, ngrams); return ngrams; } private Language[] predict(Map ngramCounts) { String[] allGrams = new String[ngramCounts.size()]; float[] counts = new float[ngramCounts.size()]; int i = 0; for (Map.Entry e : ngramCounts.entrySet()) { allGrams[i] = e.getKey().toString(); // TODO -- once OPENNLP-1261 is fixed, // change this to e.getValue().getValue(). counts[i] = 1; i++; } double[] eval = model.getMaxentModel().eval(allGrams, counts); Language[] arr = new Language[eval.length]; for (int j = 0; j < eval.length; j++) { arr[j] = new Language(model.getMaxentModel().getOutcome(j), eval[j]); } Arrays.sort(arr, (o1, o2) -> Double.compare(o2.getConfidence(), o1.getConfidence())); return arr; } /** * Overriding this for different behavior to determine if there is enough * confidence in the predictions to stop. * * @param predictionsQueue queue of earlier predictions * @param newPredictions most recent predictions * @param ngramCounts -- not currently used, but might be useful * @return {@code true} if enough text has been processed to make a determination, * else {@code false}. */ boolean seenEnough(List predictionsQueue, Language[] newPredictions, Map ngramCounts, LanguageDetectorConfig config) { if (predictionsQueue.size() < config.getMinConsecImprovements()) { predictionsQueue.add(newPredictions); return false; } else if (predictionsQueue.size() > config.getMinConsecImprovements() && predictionsQueue.size() > 0) { predictionsQueue.remove(0); } predictionsQueue.add(newPredictions); if (config.getMinDiff() > 0.0 && newPredictions[0].getConfidence() - newPredictions[1].getConfidence() < config.getMinDiff()) { return false; } String lastLang = null; double lastConf = -1.0; //iterate through the last predictions //and check that the lang with the highest confidence //hasn't changed, and that the confidence in it //hasn't decreased for (Language[] predictions : predictionsQueue) { if (lastLang == null) { lastLang = predictions[0].getLang(); lastConf = predictions[0].getConfidence(); continue; } else { if (!lastLang.equals(predictions[0].getLang())) { return false; } if (lastConf > predictions[0].getConfidence()) { return false; } } lastLang = predictions[0].getLang(); lastConf = predictions[0].getConfidence(); } return true; } private StringCPLengthPair chunk(CharSequence content, int start, int chunkSize) { if (start == 0 && chunkSize > content.length()) { String s = content.toString(); int codePointLength = s.codePointCount(0, s.length()); return new StringCPLengthPair(s, codePointLength); } int[] codepoints = content.codePoints().skip(start).limit(chunkSize).toArray(); return new StringCPLengthPair( new String(codepoints, 0, codepoints.length), codepoints.length); } /** * Starts a training of a {@link LanguageDetectorModel} with the given parameters. * * @param samples The {@link ObjectStream} of {@link LanguageSample} used as input for training. * @param mlParams The {@link TrainingParameters} for the context of the training. * @param factory The {@link LanguageDetectorFactory} for creating related objects defined * via {@code mlParams}. * * @return A valid, trained {@link LanguageDetectorModel} instance. * @throws IOException Thrown if IO errors occurred. */ public static LanguageDetectorModel train(ObjectStream samples, TrainingParameters mlParams, LanguageDetectorFactory factory) throws IOException { Map manifestInfoEntries = new HashMap<>(); mlParams.putIfAbsent(AbstractEventTrainer.DATA_INDEXER_PARAM, AbstractEventTrainer.DATA_INDEXER_ONE_PASS_VALUE); EventTrainer trainer = TrainerFactory.getEventTrainer(mlParams, manifestInfoEntries); MaxentModel model = trainer.train( new LanguageDetectorEventStream(samples, factory.getContextGenerator())); return new LanguageDetectorModel(model, manifestInfoEntries, factory); } private record StringCPLengthPair(String s, int length) { String getString() { return s; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_langdetect_Langua0100644 0000000 0000000 00000000162 14523004075 032547 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorModel.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorModel.0100644 0000000 0000000 00000007732 14523004075 034137 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.Map; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.util.BaseToolFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.model.BaseModel; /** * The {@link LanguageDetectorModel} is the model used by a learnable {@link LanguageDetector}. * * @see LanguageDetectorME */ public class LanguageDetectorModel extends BaseModel { private static final String COMPONENT_NAME = "LanguageDetectorME"; private static final String LANGDETECT_MODEL_ENTRY_NAME = "langdetect.model"; /** * Initializes a {@link LanguageDetectorModel} instance via given parameters. * * @param langdetectModel A valid {@link MaxentModel}. * @param manifestInfoEntries Additional information kept in the manifest. * @param factory The {@link LanguageDetectorFactory} for creating related objects. */ public LanguageDetectorModel(MaxentModel langdetectModel, Map manifestInfoEntries, LanguageDetectorFactory factory) { super(COMPONENT_NAME, "und", manifestInfoEntries, factory); artifactMap.put(LANGDETECT_MODEL_ENTRY_NAME, langdetectModel); checkArtifactMap(); } /** * Initializes a {@link LanguageDetectorModel} instance via a valid {@link InputStream}. * * @param in The {@link InputStream} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public LanguageDetectorModel(InputStream in) throws IOException { super(COMPONENT_NAME, in); } /** * Initializes a {@link LanguageDetectorModel} instance via a valid {@link File}. * * @param modelFile The {@link File} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public LanguageDetectorModel(File modelFile) throws IOException { super(COMPONENT_NAME, modelFile); } /** * Initializes a {@link LanguageDetectorModel} instance via a valid {@link URL}. * * @param modelURL The {@link URL} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public LanguageDetectorModel(URL modelURL) throws IOException { super(COMPONENT_NAME, modelURL); } @Override protected void validateArtifactMap() throws InvalidFormatException { super.validateArtifactMap(); if (!(artifactMap.get(LANGDETECT_MODEL_ENTRY_NAME) instanceof AbstractModel)) { throw new InvalidFormatException("Language detector model is incomplete!"); } } /** * @return Retrieves the active {@link LanguageDetectorFactory}. */ public LanguageDetectorFactory getFactory() { return (LanguageDetectorFactory) this.toolFactory; } @Override protected Class getDefaultFactory() { return LanguageDetectorFactory.class; } /** * @return Retrieves a {@link MaxentModel}. */ public MaxentModel getMaxentModel() { return (MaxentModel) artifactMap.get(LANGDETECT_MODEL_ENTRY_NAME); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_langdetect_Langua0100644 0000000 0000000 00000000171 14523004075 032547 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageDetectorSample0100644 0000000 0000000 00000004113 14523004075 034230 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import java.io.IOException; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; /** * This class reads in string encoded {@link ObjectStream training samples}, parses them * and outputs {@link LanguageSample} objects. *

* Format:
* Each line contains one sample document.
* The language is the first string in the line followed by a tab and the document content.
* Sample line: category-string tab-char document line-break-char(s)
*/ public class LanguageDetectorSampleStream extends FilterObjectStream { /** * Initializes a {@link LanguageDetectorSampleStream instance}. * * @param samples A plain text {@link ObjectStream line stream}. */ public LanguageDetectorSampleStream(ObjectStream samples) { super(samples); } @Override public LanguageSample read() throws IOException { String sampleString; while ((sampleString = samples.read()) != null) { int tabIndex = sampleString.indexOf("\t"); if (tabIndex > 0) { String lang = sampleString.substring(0, tabIndex); String context = sampleString.substring(tabIndex + 1); return new LanguageSample(new Language(lang), context); } } return null; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/LanguageSample.java0100644 0000000 0000000 00000003155 14523004075 033463 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import java.io.Serializable; import java.util.Objects; /** * Holds a classified document and its {@link Language}. */ public record LanguageSample(Language language, CharSequence context) implements Serializable { private static final long serialVersionUID = -2222893493240468729L; public LanguageSample(Language language, CharSequence context) { this.language = Objects.requireNonNull(language, "language must not be null"); this.context = Objects.requireNonNull(context, "context must not be null"); } @Deprecated(forRemoval = true) public Language getLanguage() { return language; } @Deprecated(forRemoval = true) public CharSequence getContext() { return context; } @Override public String toString() { return language.getLang() + '\t' + context; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_langdetect_Probin0100644 0000000 0000000 00000000173 14523004075 032573 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/ProbingLanguageDetectionResult.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/ProbingLanguageDetecti0100644 0000000 0000000 00000002423 14523004075 034221 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; /** * A data container encapsulating language detection results. * * @param languages The {@link Language languages} detected. * @param length The length in codepoints of text processed. */ public record ProbingLanguageDetectionResult(Language[] languages, int length) { @Deprecated(forRemoval = true) public Language[] getLanguages() { return languages; } @Deprecated(forRemoval = true) public int getLength() { return length; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/langdetect/package-info.java0100644 0000000 0000000 00000001615 14523004075 033121 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package related to predicting languages from samples of text. */ package opennlp.tools.langdetect; apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/languagemodel/LanguageModel.java0100644 0000000 0000000 00000003155 14523004075 033774 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.languagemodel; /** * A language model can calculate the probability p (between 0 and 1) of a * certain {@link opennlp.tools.util.StringList sequence of tokens}, given its underlying vocabulary. */ public interface LanguageModel { /** * Calculate the probability of a series of tokens (e.g. a sentence), given a vocabulary. * * @param tokens the text tokens to calculate the {@code probability} for. * * @return the probability of the given text tokens in the vocabulary */ double calculateProbability(String... tokens); /** * Predict the most probable output sequence of tokens, given an input sequence of {@code tokens}. * * @param tokens a sequence of tokens * @return the most probable subsequent token sequence */ String[] predictNextTokens(String... tokens); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_languagemodel_NGr0100644 0000000 0000000 00000000162 14523004075 032520 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/languagemodel/NGramLanguageModel.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/languagemodel/NGramLanguageModel.0100644 0000000 0000000 00000012370 14523004075 034056 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.languagemodel; import java.io.IOException; import java.io.InputStream; import opennlp.tools.ngram.NGramModel; import opennlp.tools.ngram.NGramUtils; import opennlp.tools.util.StringList; /** * A {@link LanguageModel} based on a {@link NGramModel} using Stupid Backoff to get * the probabilities of the ngrams. */ public class NGramLanguageModel extends NGramModel implements LanguageModel { private static final int DEFAULT_N = 3; private final int n; /** * Initializes an {@link NGramLanguageModel} with {@link #DEFAULT_N}. */ public NGramLanguageModel() { this(DEFAULT_N); } /** * Initializes an {@link NGramLanguageModel} with the given {@code n} for the ngram size. * * @param n The size of the ngrams to be used. Must be greater than {@code 0}. * * @throws IllegalArgumentException Thrown if one of the arguments was invalid. */ public NGramLanguageModel(int n) { if (n <= 0) { throw new IllegalArgumentException("Parameter 'n' must be greater than 0."); } this.n = n; } /** * Initializes a {@link NGramLanguageModel} instance via a valid {@link InputStream}. * * @param in The {@link InputStream} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. * @throws IllegalArgumentException Thrown if one of the arguments was invalid. */ public NGramLanguageModel(InputStream in) throws IOException { this(in, DEFAULT_N); } /** * Initializes a {@link NGramLanguageModel} instance via a valid {@link InputStream}. * * @param in The {@link InputStream} used for loading the model. * @param n The size of the ngrams to be used. Must be greater than {@code 0}. * * @throws IOException Thrown if IO errors occurred during initialization. * @throws IllegalArgumentException Thrown if one of the arguments was invalid. */ public NGramLanguageModel(InputStream in, int n) throws IOException { super(in); if (n <= 0) { throw new IllegalArgumentException("Parameter 'n' must be greater than 0."); } this.n = n; } /** * Adds further tokens. * * @param tokens Text elements to add to the {@link NGramLanguageModel}. */ public void add(String... tokens) { add(new StringList(tokens), 1, n); } @Override public double calculateProbability(String... tokens) { double probability = 0d; if (size() > 0) { for (String[] ngram : NGramUtils.getNGrams(tokens, n)) { double score = stupidBackoff(new StringList(ngram)); probability += StrictMath.log(score); if (Double.isNaN(probability)) { probability = 0d; break; } } probability = StrictMath.exp(probability); } return probability; } private double calculateProbability(StringList tokens) { double probability = 0d; if (size() > 0) { for (StringList ngram : NGramUtils.getNGrams(tokens, n)) { double score = stupidBackoff(ngram); probability += StrictMath.log(score); if (Double.isNaN(probability)) { probability = 0d; break; } } probability = StrictMath.exp(probability); } return probability; } @Override public String[] predictNextTokens(String... tokens) { double maxProb = Double.NEGATIVE_INFINITY; String[] token = null; for (StringList ngram : this) { String[] sequence = new String[ngram.size() + tokens.length]; System.arraycopy(tokens, 0, sequence, 0, tokens.length); for (int i = 0; i < ngram.size(); i++) { sequence[i + tokens.length] = ngram.getToken(i); } double v = calculateProbability(sequence); if (v > maxProb) { maxProb = v; token = new String[ngram.size()]; for (int i = 0; i < ngram.size(); i++) { token[i] = ngram.getToken(i); } } } return token; } private double stupidBackoff(StringList ngram) { int count = getCount(ngram); StringList nMinusOneToken = NGramUtils.getNMinusOneTokenFirst(ngram); if (nMinusOneToken == null || nMinusOneToken.size() == 0) { return (double) count / (double) size(); } else if (count > 0) { double countM1 = getCount(nMinusOneToken); if (countM1 == 0d) { countM1 = size(); // to avoid Infinite if n-1grams do not exist } return (double) count / countM1; } else { return 0.4 * stupidBackoff(NGramUtils.getNMinusOneTokenLast(ngram)); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/languagemodel/package-info.java0100644 0000000 0000000 00000001565 14523004075 033617 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package related to language models */ package opennlp.tools.languagemodel; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_lemmatizer_Defaul0100644 0000000 0000000 00000000176 14523004075 032604 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/DefaultLemmatizerContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/DefaultLemmatizerConte0100644 0000000 0000000 00000006676 14523004075 034337 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; /** * Simple feature generator for learning statistical lemmatizers. *

* Features based on Grzegorz Chrupała. 2008. * * Towards a Machine-Learning Architecture for Lexical Functional Grammar Parsing. * PhD dissertation, Dublin City University */ public class DefaultLemmatizerContextGenerator implements LemmatizerContextGenerator { private static final int PREFIX_LENGTH = 5; private static final int SUFFIX_LENGTH = 7; private static final Pattern PATTERN_HAS_CAP = Pattern.compile("[A-Z]"); private static final Pattern PATTERN_HAS_NUM = Pattern.compile("[0-9]"); public DefaultLemmatizerContextGenerator() { } protected static String[] getPrefixes(String lex) { String[] prefs = new String[PREFIX_LENGTH]; for (int li = 1; li < PREFIX_LENGTH; li++) { prefs[li] = lex.substring(0, StrictMath.min(li + 1, lex.length())); } return prefs; } protected static String[] getSuffixes(String lex) { String[] suffs = new String[SUFFIX_LENGTH]; for (int li = 1; li < SUFFIX_LENGTH; li++) { suffs[li] = lex.substring(StrictMath.max(lex.length() - li - 1, 0)); } return suffs; } @Override public String[] getContext(int index, String[] sequence, String[] priorDecisions, Object[] additionalContext) { return getContext(index, sequence, (String[]) additionalContext[0], priorDecisions); } @Override public String[] getContext(int index, String[] toks, String[] tags, String[] preds) { // Word String w0; // Tag String t0; // Previous prediction String p_1; String lex = toks[index]; if (index < 1) { p_1 = "p_1=bos"; } else { p_1 = "p_1=" + preds[index - 1]; } w0 = "w0=" + toks[index]; t0 = "t0=" + tags[index]; List features = new ArrayList<>(); features.add(w0); features.add(t0); features.add(p_1); features.add(p_1 + t0); features.add(p_1 + w0); // do some basic suffix analysis String[] suffs = getSuffixes(lex); for (String suff : suffs) { features.add("suf=" + suff); } String[] prefs = getPrefixes(lex); for (String pref : prefs) { features.add("pre=" + pref); } // see if the word has any special characters if (lex.indexOf('-') != -1) { features.add("h"); } if (PATTERN_HAS_CAP.matcher(lex).find()) { features.add("c"); } if (PATTERN_HAS_NUM.matcher(lex).find()) { features.add("d"); } return features.toArray(new String[0]); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_lemmatizer_Defaul0100644 0000000 0000000 00000000177 14523004075 032605 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/DefaultLemmatizerSequenceValidator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/DefaultLemmatizerSeque0100644 0000000 0000000 00000002252 14523004075 034333 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import opennlp.tools.util.SequenceValidator; /** * The default lemmatizer {@link SequenceValidator} implementation. */ public class DefaultLemmatizerSequenceValidator implements SequenceValidator { //TODO implement this @Override public boolean validSequence(int i, String[] sequence, String[] s, String outcome) { return true; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_lemmatizer_Dictio0100644 0000000 0000000 00000000161 14523004075 032611 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/DictionaryLemmatizer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/DictionaryLemmatizer.j0100644 0000000 0000000 00000020771 14523004075 034307 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; /** * A {@link Lemmatizer} implementation that works by simple dictionary lookup into * a {@link Map} built from a file containing, for each line: *

* {@code word\tabpostag\tablemma}. */ public class DictionaryLemmatizer implements Lemmatizer { /* * The hashmap containing the dictionary. */ private final Map, List> dictMap = new HashMap<>(); /** * Initializes a {@link DictionaryLemmatizer} and related {@link HashMap} * from the input tab separated dictionary. *

* The input file should have, for each line, {@code word\tabpostag\tablemma}. * Alternatively, if multiple lemmas are possible for each word-postag pair, * then the format should be {@code word\tab\postag\tablemma01#lemma02#lemma03}. * * @param dictionaryStream The dictionary referenced by an open {@link InputStream}. * @param charset The {@link Charset character encoding} of the dictionary. * * @throws IOException Thrown if IO errors occurred while reading in from * {@code dictionaryStream}. */ public DictionaryLemmatizer(final InputStream dictionaryStream, Charset charset) throws IOException { init(dictionaryStream, charset); } /** * Initializes a {@link DictionaryLemmatizer} and related {@link HashMap} * from the input tab separated dictionary. *

* The input file should have, for each line, {@code word\tabpostag\tablemma}. * Alternatively, if multiple lemmas are possible for each word-postag pair, * then the format should be {@code word\tab\postag\tablemma01#lemma02#lemma03}. * * @param dictionaryStream The dictionary referenced by an open {@link InputStream}. * * @throws IOException Thrown if IO errors occurred while reading in from * {@code dictionaryStream}. */ public DictionaryLemmatizer(final InputStream dictionaryStream) throws IOException { this(dictionaryStream, StandardCharsets.UTF_8); } /** * Initializes a {@link DictionaryLemmatizer} and related {@link HashMap} * from the input tab separated dictionary. *

* The input file should have, for each line, {@code word\tabpostag\tablemma}. * Alternatively, if multiple lemmas are possible for each word-postag pair, * then the format should be {@code word\tab\postag\tablemma01#lemma02#lemma03}. * * @param dictionaryFile The dictionary referenced by a valid, readable {@link File}. * * @throws IOException Thrown if IO errors occurred while reading in from * {@code dictionaryFile}. */ public DictionaryLemmatizer(File dictionaryFile) throws IOException { this(dictionaryFile, StandardCharsets.UTF_8); } /** * Initializes a {@link DictionaryLemmatizer} and related {@link HashMap} * from the input tab separated dictionary. *

* The input file should have, for each line, {@code word\tabpostag\tablemma}. * Alternatively, if multiple lemmas are possible for each word-postag pair, * then the format should be {@code word\tab\postag\tablemma01#lemma02#lemma03}. * * @param dictionaryFile The dictionary referenced by a valid, readable {@link File}. * @param charset The {@link Charset character encoding} of the dictionary. * * @throws IOException Thrown if IO errors occurred while reading in from * {@code dictionaryFile}. */ public DictionaryLemmatizer(File dictionaryFile, Charset charset) throws IOException { try (InputStream in = new BufferedInputStream(new FileInputStream(dictionaryFile))) { init(in, charset); } } /** * Initializes a {@link DictionaryLemmatizer} and related {@link HashMap} * from the input tab separated dictionary. *

* The input file should have, for each line, {@code word\tabpostag\tablemma}. * Alternatively, if multiple lemmas are possible for each word-postag pair, * then the format should be {@code word\tab\postag\tablemma01#lemma02#lemma03}. * * @param dictionaryPath The dictionary referenced via a valid, readable {@link Path}. * * @throws IOException Thrown if IO errors occurred while reading in from * {@code dictionaryPath}. */ public DictionaryLemmatizer(Path dictionaryPath) throws IOException { init(Files.newInputStream(dictionaryPath), StandardCharsets.UTF_8); } private void init(InputStream dictionary, Charset charset) throws IOException { final BufferedReader breader = new BufferedReader( new InputStreamReader(dictionary, charset)); String line; while ((line = breader.readLine()) != null) { final String[] elems = line.split("\t"); final String[] lemmas = elems[2].split("#"); this.dictMap.put(Arrays.asList(elems[0], elems[1]), Arrays.asList(lemmas)); } } /** * @return Retrieves the {@link Map} containing the dictionary. */ public Map, List> getDictMap() { return this.dictMap; } /** * @param word The surface form word. * @param postag The assigned postag. * * @return Retrieves the dictionary keys (word and postag). */ private List getDictKeys(final String word, final String postag) { return new ArrayList<>(Arrays.asList(word.toLowerCase(), postag)); } @Override public String[] lemmatize(final String[] tokens, final String[] postags) { List lemmas = new ArrayList<>(); for (int i = 0; i < tokens.length; i++) { lemmas.add(this.lemmatize(tokens[i], postags[i])); } return lemmas.toArray(new String[0]); } @Override public List> lemmatize(final List tokens, final List posTags) { List> allLemmas = new ArrayList<>(); for (int i = 0; i < tokens.size(); i++) { allLemmas.add(this.getAllLemmas(tokens.get(i), posTags.get(i))); } return allLemmas; } /** * Lookup lemma in a dictionary. Outputs {@code "0"} if no lemma could be found * for the specified {@code word}. * * @param word The token to look up the lemma for. * @param postag The postag. * * @return The corresponding lemma, or {@code "0"} if no lemma for {@code word} * could be found. */ private String lemmatize(final String word, final String postag) { String lemma; final List keys = this.getDictKeys(word, postag); // lookup lemma as value of the map final List keyValues = this.dictMap.get(keys); if ( keyValues != null && !keyValues.isEmpty()) { lemma = keyValues.get(0); } else { lemma = "O"; } return lemma; } /** * Lookup every lemma for a word,pos tag in a dictionary. Outputs {@code "0"} if no * lemmas could be found for the specified {@code word}. * * @param word The token to look up the lemma for. * @param postag The postag. * * @return A list of relevant lemmas. */ private List getAllLemmas(final String word, final String postag) { List lemmasList = new ArrayList<>(); final List keys = this.getDictKeys(word, postag); // lookup lemma as value of the map final List keyValues = this.dictMap.get(keys); if (keyValues != null && !keyValues.isEmpty()) { lemmasList.addAll(keyValues); } else { lemmasList.add("O"); } return lemmasList; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmaSample.java0100644 0000000 0000000 00000007476 14523004075 033044 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Objects; import opennlp.tools.commons.Sample; /** * Represents a lemmatized sentence. */ public class LemmaSample implements Sample { private static final long serialVersionUID = -7956607496164605337L; private final List tokens; private final List tags; private final List lemmas; /** * Initializes a {@link LemmaSample} instance with the given parameters. * * @param tokens The tokens. * @param tags The postags. * @param lemmas The lemmas for {@code tokens}. */ public LemmaSample(String[] tokens, String[] tags, String[] lemmas) { this(Arrays.asList(tokens), Arrays.asList(tags), Arrays.asList(lemmas)); } /** * Initializes a {@link LemmaSample} instance with the given parameters. * * @param tokens The tokens. * @param tags The postags. * @param lemmas The lemmas for {@code tokens}. */ public LemmaSample(List tokens, List tags, List lemmas) { validateArguments(tokens.size(), tags.size(), lemmas.size()); this.tokens = Collections.unmodifiableList(new ArrayList<>(tokens)); this.tags = Collections.unmodifiableList(new ArrayList<>(tags)); this.lemmas = Collections.unmodifiableList(new ArrayList<>(lemmas)); } /** * @return Retrieves the tokens of a {@link LemmaSample}. */ public String[] getTokens() { return tokens.toArray(new String[0]); } /** * @return Retrieves the postags of a {@link LemmaSample}. */ public String[] getTags() { return tags.toArray(new String[0]); } /** * @return Retrieves the lemmas of a {@link LemmaSample}. */ public String[] getLemmas() { return lemmas.toArray(new String[0]); } private void validateArguments(int tokensSize, int tagsSize, int lemmasSize) throws IllegalArgumentException { if (tokensSize != tagsSize || tagsSize != lemmasSize) { throw new IllegalArgumentException( "All arrays must have the same length: " + "sentenceSize: " + tokensSize + ", tagsSize: " + tagsSize + ", predsSize: " + lemmasSize + "!"); } } @Override public String toString() { StringBuilder lemmaString = new StringBuilder(); for (int ci = 0; ci < lemmas.size(); ci++) { lemmaString.append(tokens.get(ci)).append("\t").append(tags.get(ci)) .append("\t").append(lemmas.get(ci)).append("\n"); } return lemmaString.toString(); } @Override public int hashCode() { return Objects.hash(Arrays.hashCode(getTokens()), Arrays.hashCode(getTags()), Arrays.hashCode(getLemmas())); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof LemmaSample a) { return Arrays.equals(getTokens(), a.getTokens()) && Arrays.equals(getTags(), a.getTags()) && Arrays.equals(getLemmas(), a.getLemmas()); } return false; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_lemmatizer_LemmaS0100644 0000000 0000000 00000000163 14523004075 032556 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmaSampleEventStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmaSampleEventStream0100644 0000000 0000000 00000004615 14523004075 034272 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import opennlp.tools.ml.model.Event; import opennlp.tools.util.AbstractEventStream; import opennlp.tools.util.ObjectStream; /** * Class for creating an event stream out of data files for training a probabilistic {@link Lemmatizer}. */ public class LemmaSampleEventStream extends AbstractEventStream { private final LemmatizerContextGenerator contextGenerator; /** * Creates a new event stream based on the specified data stream using a * {@link LemmatizerContextGenerator}. * * @param d The data stream for this event stream. * @param cg The {@link LemmatizerContextGenerator} which should be used in the * creation of events for this event stream {@code d}. */ public LemmaSampleEventStream(ObjectStream d, LemmatizerContextGenerator cg) { super(d); this.contextGenerator = cg; } @Override protected Iterator createEvents(LemmaSample sample) { if (sample != null) { List events = new ArrayList<>(); String[] toksArray = sample.getTokens(); String[] tagsArray = sample.getTags(); String[] lemmasArray = LemmatizerME.encodeLemmas(toksArray,sample.getLemmas()); for (int ei = 0, el = sample.getTokens().length; ei < el; ei++) { events.add(new Event(lemmasArray[ei], contextGenerator.getContext(ei,toksArray,tagsArray,lemmasArray))); } return events.iterator(); } else { return Collections.emptyListIterator(); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_lemmatizer_LemmaS0100644 0000000 0000000 00000000166 14523004075 032561 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmaSampleSequenceStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmaSampleSequenceStr0100644 0000000 0000000 00000005154 14523004075 034275 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import java.io.IOException; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.Sequence; import opennlp.tools.ml.model.SequenceStream; import opennlp.tools.util.ObjectStream; /** * A {@link SequenceStream} implementation encapsulating {@link LemmaSample samples}. */ public class LemmaSampleSequenceStream implements SequenceStream { private final ObjectStream samples; private final LemmatizerContextGenerator contextGenerator; public LemmaSampleSequenceStream(ObjectStream samples, LemmatizerContextGenerator contextGenerator) { this.samples = samples; this.contextGenerator = contextGenerator; } @Override public Sequence read() throws IOException { LemmaSample sample = samples.read(); if (sample != null) { String[] sentence = sample.getTokens(); String[] tags = sample.getTags(); String[] preds = sample.getLemmas(); Event[] events = new Event[sentence.length]; for (int i = 0; i < sentence.length; i++) { // it is safe to pass the tags as previous tags because // the context generator does not look for non predicted tags String[] context = contextGenerator.getContext(i, sentence, tags, preds); events[i] = new Event(tags[i], context); } return new Sequence<>(events,sample); } return null; } @Override public Event[] updateContext(Sequence sequence, AbstractModel model) { // TODO: Should be implemented for Perceptron sequence learning ... return null; } @Override public void reset() throws IOException, UnsupportedOperationException { samples.reset(); } @Override public void close() throws IOException { samples.close(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_lemmatizer_LemmaS0100644 0000000 0000000 00000000156 14523004075 032560 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmaSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmaSampleStream.java0100644 0000000 0000000 00000004440 14523004075 034204 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; /** * Reads data for training and testing the {@link Lemmatizer}. *

* The format consists of: * {@code word\tpostag\tlemma}. */ public class LemmaSampleStream extends FilterObjectStream { private static final Logger logger = LoggerFactory.getLogger(LemmaSampleStream.class); /** * Initializes a {@link LemmaSampleStream instance}. * * @param samples A plain text {@link ObjectStream line stream}. */ public LemmaSampleStream(ObjectStream samples) { super(samples); } @Override public LemmaSample read() throws IOException { List toks = new ArrayList<>(); List tags = new ArrayList<>(); List preds = new ArrayList<>(); for (String line = samples.read(); line != null && !line.equals(""); line = samples.read()) { String[] parts = line.split("\t"); if (parts.length != 3) { logger.warn("Skipping corrupt line: {}", line); } else { toks.add(parts[0]); tags.add(parts[1]); preds.add(parts[2]); } } if (toks.size() > 0) { return new LemmaSample(toks.toArray(new String[0]), tags.toArray(new String[0]), preds.toArray(new String[0])); } else { return null; } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/Lemmatizer.java0100644 0000000 0000000 00000003007 14523004075 032742 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import java.util.List; /** * The common interface for lemmatizers. */ public interface Lemmatizer { /** * Generates lemmas for the word and postag. * * @param toks An array of the tokens * @param tags an array of the pos tags * * @return An array of possible lemmas for each token in the {@code toks} sequence. */ String[] lemmatize(String[] toks, String[] tags); /** * Generates lemma tags for the word and postag. * * @param toks An array of the tokens * @param tags An array of the pos tags * @return A list of every possible lemma for each token in the {@code toks} sequence. */ List> lemmatize(List toks, List tags); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_lemmatizer_Lemmat0100644 0000000 0000000 00000000167 14523004075 032623 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmatizerContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmatizerContextGener0100644 0000000 0000000 00000003413 14523004075 034351 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import opennlp.tools.util.BeamSearchContextGenerator; /** * Interface for the context generator used for probabilistic {@link Lemmatizer}. */ public interface LemmatizerContextGenerator extends BeamSearchContextGenerator { /** * Returns the contexts for lemmatizing of the specified index. * * @param i The index of the token in the specified {@code toks} array for which * the context should be constructed. * @param toks The tokens of the sentence. The {@code toString()} methods of * these objects should return the token text. * @param tags The POS tags for the specified {@code toks}. * @param lemmas The previous decisions made in the tagging of this sequence. * Only indices less than {@code i} will be examined. * @return An array of predictive contexts on which a model basis its decisions. */ String[] getContext(int i, String[] toks, String[] tags, String[] lemmas); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_lemmatizer_Lemmat0100644 0000000 0000000 00000000170 14523004075 032615 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmatizerEvaluationMonitor.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmatizerEvaluationMo0100644 0000000 0000000 00000002036 14523004075 034347 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import opennlp.tools.util.eval.EvaluationMonitor; /** * A marker interface for evaluating {@link Lemmatizer lemmatizers}. */ public interface LemmatizerEvaluationMonitor extends EvaluationMonitor { } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_lemmatizer_Lemmat0100644 0000000 0000000 00000000160 14523004075 032614 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmatizerEvaluator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmatizerEvaluator.ja0100644 0000000 0000000 00000006150 14523004075 034300 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import opennlp.tools.util.eval.Evaluator; import opennlp.tools.util.eval.Mean; /** * The {@link LemmatizerEvaluator} measures the performance of * the given {@link Lemmatizer} with the provided reference * {@link LemmaSample samples}. */ public class LemmatizerEvaluator extends Evaluator { private final Lemmatizer lemmatizer; private final Mean wordAccuracy = new Mean(); /** * Initializes a {@link LemmatizerEvaluator} instance with the given {@link Lemmatizer}. * * @param aLemmatizer The {@link Lemmatizer} to evaluate. * @param listeners The {@link LemmatizerEvaluationMonitor evaluation listeners}. */ public LemmatizerEvaluator(Lemmatizer aLemmatizer, LemmatizerEvaluationMonitor ... listeners) { super(listeners); this.lemmatizer = aLemmatizer; } /** * Evaluates the given reference {@link LemmaSample} object. *

* This is done by tagging the sentence from the reference * {@link LemmaSample} with the {@link Lemmatizer}. The * tags are then used to update the word accuracy score. * * @param reference the reference {@link LemmaSample}. * * @return The predicted {@link LemmaSample}. */ @Override protected LemmaSample processSample(LemmaSample reference) { String[] predictedLemmas = lemmatizer.lemmatize(reference.getTokens(), reference.getTags()); String[] referenceLemmas = reference.getLemmas(); for (int i = 0; i < referenceLemmas.length; i++) { if (referenceLemmas[i].equals(predictedLemmas[i])) { wordAccuracy.add(1); } else { wordAccuracy.add(0); } } return new LemmaSample(reference.getTokens(), reference.getTags(), predictedLemmas); } /** * Accuracy is defined as: * {@code word accuracy = correctly detected tags / total words} * * @return Retrieves the word accuracy. */ public double getWordAccuracy() { return wordAccuracy.mean(); } /** * @return Retrieves the total number of words considered in the evaluation. */ public long getWordCount() { return wordAccuracy.count(); } /** * Returns this object's human-readable {@link String} representation. */ @Override public String toString() { return "Accuracy:" + wordAccuracy.mean() + " Number of Samples: " + wordAccuracy.count(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_lemmatizer_Lemmat0100644 0000000 0000000 00000000156 14523004075 032621 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmatizerFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmatizerFactory.java0100644 0000000 0000000 00000005460 14523004075 034277 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import opennlp.tools.util.BaseToolFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.SequenceValidator; import opennlp.tools.util.ext.ExtensionLoader; /** * The factory that provides {@link Lemmatizer} default implementation and * resources. */ public class LemmatizerFactory extends BaseToolFactory { /** * Instantiates a {@link LemmatizerFactory} that provides the default implementation * of the resources. */ public LemmatizerFactory() { } /** * Instantiates a {@link LemmatizerFactory} via a given {@code subclassName}. * * @param subclassName The class name used for instantiation. If {@code null}, an * instance of {@link LemmatizerFactory} will be returned * per default. Otherwise, the {@link ExtensionLoader} mechanism * is applied to load the requested {@code subclassName}. * * @return A valid {@link LemmatizerFactory} instance. */ public static LemmatizerFactory create(String subclassName) throws InvalidFormatException { if (subclassName == null) { // will create the default factory return new LemmatizerFactory(); } try { return ExtensionLoader.instantiateExtension(LemmatizerFactory.class, subclassName); } catch (Exception e) { String msg = "Could not instantiate the " + subclassName + ". The initialization threw an exception."; throw new InvalidFormatException(msg, e); } } @Override public void validateArtifactMap() throws InvalidFormatException { // no additional artifacts } /** * @return Retrieves a new {@link SequenceValidator} instance. */ public SequenceValidator getSequenceValidator() { return new DefaultLemmatizerSequenceValidator(); } /** * @return Retrieves a new {@link LemmatizerContextGenerator} instance. */ public LemmatizerContextGenerator getContextGenerator() { return new DefaultLemmatizerContextGenerator(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmatizerME.java0100644 0000000 0000000 00000027200 14523004075 033165 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import opennlp.tools.ml.BeamSearch; import opennlp.tools.ml.EventModelSequenceTrainer; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.SequenceTrainer; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.TrainerFactory.TrainerType; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.ml.model.SequenceClassificationModel; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Sequence; import opennlp.tools.util.SequenceValidator; import opennlp.tools.util.StringUtil; import opennlp.tools.util.TrainingParameters; /** * A probabilistic {@link Lemmatizer} implementation. *

* Tries to predict the induced permutation class for each word depending on * its surrounding context. *

* Based on Grzegorz Chrupała. 2008. * * Towards a Machine-Learning Architecture for Lexical Functional Grammar Parsing. * PhD dissertation, Dublin City University * */ public class LemmatizerME implements Lemmatizer { public static final int LEMMA_NUMBER = 29; public static final int DEFAULT_BEAM_SIZE = 3; protected final int beamSize; private Sequence bestSequence; private final SequenceClassificationModel model; private final LemmatizerContextGenerator contextGenerator; private final SequenceValidator sequenceValidator; /** * Initializes a {@link LemmatizerME} with the provided * {@link LemmatizerModel model} and a default * {@code beam size} of {@code 3}. * * @param model The {@link LemmatizerModel} to be used. */ public LemmatizerME(LemmatizerModel model) { LemmatizerFactory factory = model.getFactory(); int defaultBeamSize = LemmatizerME.DEFAULT_BEAM_SIZE; String beamSizeString = model.getManifestProperty(BeamSearch.BEAM_SIZE_PARAMETER); if (beamSizeString != null) { defaultBeamSize = Integer.parseInt(beamSizeString); } contextGenerator = factory.getContextGenerator(); beamSize = defaultBeamSize; sequenceValidator = factory.getSequenceValidator(); if (model.getLemmatizerSequenceModel() != null) { this.model = model.getLemmatizerSequenceModel(); } else { this.model = new opennlp.tools.ml.BeamSearch<>(beamSize, (MaxentModel) model.getLemmatizerSequenceModel(), 0); } } @Override public String[] lemmatize(String[] toks, String[] tags) { String[] ses = predictSES(toks, tags); return decodeLemmas(toks, ses); } @Override public List> lemmatize(List toks, List tags) { String[] tokens = toks.toArray(new String[0]); String[] posTags = tags.toArray(new String[0]); String[][] allLemmas = predictLemmas(LEMMA_NUMBER, tokens, posTags); List> predictedLemmas = new ArrayList<>(); for (String[] allLemma : allLemmas) { predictedLemmas.add(Arrays.asList(allLemma)); } return predictedLemmas; } /** * Predict Short Edit Script (automatically induced lemma class). * * @param toks An array of tokens. * @param tags An array of postags. * * @return An array of possible lemma classes for each token in {@code toks}. */ public String[] predictSES(String[] toks, String[] tags) { bestSequence = model.bestSequence(toks, new Object[] {tags}, contextGenerator, sequenceValidator); List ses = bestSequence.getOutcomes(); return ses.toArray(new String[0]); } /** * Predict all possible lemmas (using a default upper bound). * * @param numLemmas The default number of lemmas * @param toks An array of tokens. * @param tags An array of postags. * * @return A 2-dimensional array containing all possible lemmas for each token and postag pair. */ public String[][] predictLemmas(int numLemmas, String[] toks, String[] tags) { Sequence[] bestSequences = model.bestSequences(numLemmas, toks, new Object[] {tags}, contextGenerator, sequenceValidator); String[][] allLemmas = new String[bestSequences.length][]; for (int i = 0; i < allLemmas.length; i++) { List ses = bestSequences[i].getOutcomes(); String[] sesArray = ses.toArray(new String[0]); allLemmas[i] = decodeLemmas(toks,sesArray); } return allLemmas; } /** * Decodes the lemma from the word and the induced lemma class. * * @param toks An array of tokens. * @param preds An array of predicted lemma classes. * * @return The array of decoded lemmas. */ public static String[] decodeLemmas(String[] toks, String[] preds) { List lemmas = new ArrayList<>(); for (int i = 0; i < toks.length; i++) { String lemma = StringUtil.decodeShortestEditScript(toks[i].toLowerCase(), preds[i]); if (lemma.length() == 0) { lemma = "_"; } lemmas.add(lemma); } return lemmas.toArray(new String[0]); } /** * Encodes the word given its lemmas. * * @param toks An array of tokens. * @param lemmas An array of lemmas. * * @return The array of lemma classes. */ public static String[] encodeLemmas(String[] toks, String[] lemmas) { List sesList = new ArrayList<>(); for (int i = 0; i < toks.length; i++) { String ses = StringUtil.getShortestEditScript(toks[i], lemmas[i]); if (ses.length() == 0) { ses = "_"; } sesList.add(ses); } return sesList.toArray(new String[0]); } /** * @param sentence An array of tokens. * @param tags An array of postags. * * @return Retrieves the top-k {@link Sequence sequences}. */ public Sequence[] topKSequences(String[] sentence, String[] tags) { return model.bestSequences(DEFAULT_BEAM_SIZE, sentence, new Object[] { tags }, contextGenerator, sequenceValidator); } /** * @param sentence An array of tokens. * @param tags An array of postags. * @param minSequenceScore The minimum score to be achieved. * * @return Retrieves the top-k {@link Sequence sequences}. */ public Sequence[] topKSequences(String[] sentence, String[] tags, double minSequenceScore) { return model.bestSequences(DEFAULT_BEAM_SIZE, sentence, new Object[] { tags }, minSequenceScore, contextGenerator, sequenceValidator); } /** * Populates the specified array with the probabilities of the last decoded sequence. * The sequence was determined based on the previous call to * {@link #lemmatize(String[], String[])}. *

* The specified array should be at least as large as the number of tokens in the * previous call to {@link #lemmatize(String[], String[])}. * * @param probs An array used to hold the probabilities of the last decoded sequence. */ public void probs(double[] probs) { bestSequence.getProbs(probs); } /** * Returns an array with the probabilities of the last decoded sequence. * The sequence was determined based on the previous call to * {@link #lemmatize(String[], String[])}. * * @return An array with the same number of probabilities as tokens were sent to * {@link #lemmatize(String[], String[])} when it was last called. */ public double[] probs() { return bestSequence.getProbs(); } /** * Starts a training of a {@link LemmatizerModel} with the given parameters. * * @param languageCode The ISO conform language code. * @param samples The {@link ObjectStream} of {@link LemmaSample} used as input for training. * @param params The {@link TrainingParameters} for the context of the training. * @param factory The {@link LemmatizerFactory} for creating related objects defined * via {@code params}. * * @return A valid, trained {@link LemmatizerModel} instance. * @throws IOException Thrown if IO errors occurred. */ public static LemmatizerModel train(String languageCode, ObjectStream samples, TrainingParameters params, LemmatizerFactory factory) throws IOException { LemmatizerContextGenerator contextGenerator = factory.getContextGenerator(); Map manifestInfoEntries = new HashMap<>(); TrainerType trainerType = TrainerFactory.getTrainerType(params); MaxentModel lemmatizerModel = null; SequenceClassificationModel seqLemmatizerModel = null; if (TrainerType.EVENT_MODEL_TRAINER.equals(trainerType)) { ObjectStream es = new LemmaSampleEventStream(samples, contextGenerator); EventTrainer trainer = TrainerFactory.getEventTrainer(params, manifestInfoEntries); lemmatizerModel = trainer.train(es); } else if (TrainerType.EVENT_MODEL_SEQUENCE_TRAINER.equals(trainerType)) { LemmaSampleSequenceStream ss = new LemmaSampleSequenceStream(samples, contextGenerator); EventModelSequenceTrainer trainer = TrainerFactory.getEventModelSequenceTrainer(params, manifestInfoEntries); lemmatizerModel = trainer.train(ss); } else if (TrainerType.SEQUENCE_TRAINER.equals(trainerType)) { SequenceTrainer trainer = TrainerFactory.getSequenceModelTrainer( params, manifestInfoEntries); // TODO: This will probably cause issue, since the feature generator uses the outcomes array LemmaSampleSequenceStream ss = new LemmaSampleSequenceStream(samples, contextGenerator); seqLemmatizerModel = trainer.train(ss); } else { throw new IllegalArgumentException("Trainer type is not supported: " + trainerType); } int beamSize = params.getIntParameter(BeamSearch.BEAM_SIZE_PARAMETER, LemmatizerME.DEFAULT_BEAM_SIZE); if (lemmatizerModel != null) { return new LemmatizerModel(languageCode, lemmatizerModel, beamSize, manifestInfoEntries, factory); } else { return new LemmatizerModel(languageCode, seqLemmatizerModel, manifestInfoEntries, factory); } } /** * @param sentence An array of tokens. * @param tags An array of postags. * * @return Retrieves the top-k {@link Sequence lemma classes}. */ public Sequence[] topKLemmaClasses(String[] sentence, String[] tags) { return model.bestSequences(DEFAULT_BEAM_SIZE, sentence, new Object[] { tags }, contextGenerator, sequenceValidator); } /** * @param sentence An array of tokens. * @param tags An array of postags. * @param minSequenceScore The minimum score to be achieved. * * @return Retrieves the top-k {@link Sequence lemma classes}. */ public Sequence[] topKLemmaClasses(String[] sentence, String[] tags, double minSequenceScore) { return model.bestSequences(DEFAULT_BEAM_SIZE, sentence, new Object[] { tags }, minSequenceScore, contextGenerator, sequenceValidator); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/LemmatizerModel.java0100644 0000000 0000000 00000016272 14523004075 033733 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.util.Map; import java.util.Properties; import opennlp.tools.ml.BeamSearch; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.ml.model.SequenceClassificationModel; import opennlp.tools.util.BaseToolFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.model.BaseModel; /** * The {@link LemmatizerModel} is the model used by a learnable {@link Lemmatizer}. * * @see LemmatizerME */ public class LemmatizerModel extends BaseModel { private static final long serialVersionUID = -3362902631186156673L; private static final String COMPONENT_NAME = "StatisticalLemmatizer"; private static final String LEMMATIZER_MODEL_ENTRY_NAME = "lemmatizer.model"; /** * Initializes a {@link LemmatizerModel} instance via given parameters. * * @param languageCode An ISO conform language code. * @param lemmatizerModel A valid {@link SequenceClassificationModel}. * @param manifestInfoEntries Additional information kept in the manifest. * @param factory The {@link LemmatizerFactory} for creating related objects. */ public LemmatizerModel(String languageCode, SequenceClassificationModel lemmatizerModel, Map manifestInfoEntries, LemmatizerFactory factory) { super(COMPONENT_NAME, languageCode, manifestInfoEntries, factory); artifactMap.put(LEMMATIZER_MODEL_ENTRY_NAME, lemmatizerModel); checkArtifactMap(); } /** * Initializes a {@link LemmatizerModel} instance via given parameters. * * @param languageCode An ISO conform language code. * @param lemmatizerModel A valid {@link MaxentModel}. * @param manifestInfoEntries Additional information kept in the manifest. * @param factory The {@link LemmatizerFactory} for creating related objects. */ public LemmatizerModel(String languageCode, MaxentModel lemmatizerModel, Map manifestInfoEntries, LemmatizerFactory factory) { this(languageCode, lemmatizerModel, LemmatizerME.DEFAULT_BEAM_SIZE, manifestInfoEntries, factory); } /** * Initializes a {@link LemmatizerModel} instance via given parameters. * * @param languageCode An ISO conform language code. * @param lemmatizerModel A valid {@link MaxentModel}. * @param beamSize The size of the beam that should be used when decoding sequences. * @param manifestInfoEntries Additional information kept in the manifest. * @param factory The {@link LemmatizerFactory} for creating related objects. */ public LemmatizerModel(String languageCode, MaxentModel lemmatizerModel, int beamSize, Map manifestInfoEntries, LemmatizerFactory factory) { super(COMPONENT_NAME, languageCode, manifestInfoEntries, factory); artifactMap.put(LEMMATIZER_MODEL_ENTRY_NAME, lemmatizerModel); Properties manifest = (Properties) artifactMap.get(MANIFEST_ENTRY); manifest.put(BeamSearch.BEAM_SIZE_PARAMETER, Integer.toString(beamSize)); checkArtifactMap(); } /** * Initializes a {@link LemmatizerModel} instance via given parameters. * * @param languageCode An ISO conform language code. * @param lemmatizerModel A valid {@link MaxentModel}. * @param factory The {@link LemmatizerFactory} for creating related objects. */ public LemmatizerModel(String languageCode, MaxentModel lemmatizerModel, LemmatizerFactory factory) { this(languageCode, lemmatizerModel, null, factory); } /** * Initializes a {@link LemmatizerModel} instance via a valid {@link InputStream}. * * @param in The {@link InputStream} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public LemmatizerModel(InputStream in) throws IOException { super(COMPONENT_NAME, in); } /** * Initializes a {@link LemmatizerModel} instance via a valid {@link File}. * * @param modelFile The {@link File} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public LemmatizerModel(File modelFile) throws IOException { super(COMPONENT_NAME, modelFile); } /** * Initializes a {@link LemmatizerModel} instance via a valid {@link Path}. * * @param modelPath The {@link Path} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public LemmatizerModel(Path modelPath) throws IOException { super(COMPONENT_NAME, Files.newInputStream(modelPath)); } /** * Initializes a {@link LemmatizerModel} instance via a valid {@link URL}. * * @param modelURL The {@link URL} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public LemmatizerModel(URL modelURL) throws IOException { super(COMPONENT_NAME, modelURL); } @Override protected void validateArtifactMap() throws InvalidFormatException { super.validateArtifactMap(); if (!(artifactMap.get(LEMMATIZER_MODEL_ENTRY_NAME) instanceof AbstractModel)) { throw new InvalidFormatException("Lemmatizer model is incomplete!"); } } /** * @return Retrieves a {@link SequenceClassificationModel} instance. */ public SequenceClassificationModel getLemmatizerSequenceModel() { Properties manifest = (Properties) artifactMap.get(MANIFEST_ENTRY); if (artifactMap.get(LEMMATIZER_MODEL_ENTRY_NAME) instanceof MaxentModel) { String beamSizeString = manifest.getProperty(BeamSearch.BEAM_SIZE_PARAMETER); int beamSize = LemmatizerME.DEFAULT_BEAM_SIZE; if (beamSizeString != null) { beamSize = Integer.parseInt(beamSizeString); } return new BeamSearch<>(beamSize, (MaxentModel) artifactMap.get(LEMMATIZER_MODEL_ENTRY_NAME)); } else if (artifactMap.get(LEMMATIZER_MODEL_ENTRY_NAME) instanceof SequenceClassificationModel) { return (SequenceClassificationModel) artifactMap.get(LEMMATIZER_MODEL_ENTRY_NAME); } else { return null; } } @Override protected Class getDefaultFactory() { return LemmatizerFactory.class; } /** * @return Retrieves the active {@link LemmatizerFactory}. */ public LemmatizerFactory getFactory() { return (LemmatizerFactory) this.toolFactory; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/lemmatizer/package-info.java0100644 0000000 0000000 00000001600 14523004075 033152 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package related to the lemmatizer functionality. */ package opennlp.tools.lemmatizer; apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/log/LogPrintStream.java0100644 0000000 0000000 00000004643 14523004075 032162 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.log; import java.io.PrintStream; import java.util.Objects; import org.slf4j.Logger; import org.slf4j.event.Level; import opennlp.tools.commons.Internal; /** * This class serves as an adapter for a {@link Logger} used within a {@link PrintStream}. */ @Internal public class LogPrintStream extends PrintStream { private final Logger logger; private final Level level; /** * Creates a {@link LogPrintStream} for the given {@link Logger}. * * @param logger must not be {@code null} */ public LogPrintStream(Logger logger) { this(logger, Level.INFO); } /** * Creates a {@link LogPrintStream} for the given {@link Logger}, which logs at the specified * {@link Level level}. * * @param logger must not be {@code null} * @param level must not be {@code null} */ public LogPrintStream(Logger logger, Level level) { super(nullOutputStream()); Objects.requireNonNull(logger, "logger must not be NULL."); Objects.requireNonNull(level, "log level must not be NULL."); this.logger = logger; this.level = level; } @Override public PrintStream printf(String format, Object... args) { log(String.format(format, args)); return this; } @Override public void println(String msg) { log(msg); } private void log(String msg) { switch (level) { case TRACE: logger.trace(msg); break; case DEBUG: logger.debug(msg); break; case INFO: logger.info(msg); break; case WARN: logger.warn(msg); break; case ERROR: logger.error(msg); break; } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/log/package-info.java0100644 0000000 0000000 00000001626 14523004075 031572 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package contains a {@link java.io.PrintStream} adapter for internal use only. */ package opennlp.tools.log; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_AbstractEventM0100644 0000000 0000000 00000000166 14523004075 032524 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/AbstractEventModelSequenceTrainer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/AbstractEventModelSequenceTrai0100644 0000000 0000000 00000003154 14523004075 034212 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml; import java.io.IOException; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.ml.model.SequenceStream; /** * A basic {@link EventModelSequenceTrainer} implementation that processes {@link Event events}. */ public abstract class AbstractEventModelSequenceTrainer extends AbstractTrainer implements EventModelSequenceTrainer { public AbstractEventModelSequenceTrainer() { } public abstract MaxentModel doTrain(SequenceStream events) throws IOException; @Override public final MaxentModel train(SequenceStream events) throws IOException { validate(); MaxentModel model = doTrain(events); addToReport(AbstractTrainer.TRAINER_TYPE_PARAM, EventModelSequenceTrainer.SEQUENCE_VALUE); return model; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/AbstractEventTrainer.java0100644 0000000 0000000 00000006312 14523004075 033164 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml; import java.io.IOException; import opennlp.tools.ml.model.AbstractDataIndexer; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.DataIndexerFactory; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.HashSumEventStream; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.util.InsufficientTrainingDataException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; /** * A basic {@link EventTrainer} implementation. */ public abstract class AbstractEventTrainer extends AbstractTrainer implements EventTrainer { public static final String DATA_INDEXER_PARAM = "DataIndexer"; public static final String DATA_INDEXER_ONE_PASS_VALUE = "OnePass"; public static final String DATA_INDEXER_TWO_PASS_VALUE = "TwoPass"; public static final String DATA_INDEXER_ONE_PASS_REAL_VALUE = "OnePassRealValue"; public AbstractEventTrainer() { } public AbstractEventTrainer(TrainingParameters parameters) { super(parameters); } @Override public void validate() { super.validate(); } public abstract boolean isSortAndMerge(); public DataIndexer getDataIndexer(ObjectStream events) throws IOException { trainingParameters.put(AbstractDataIndexer.SORT_PARAM, isSortAndMerge()); // If the cutoff was set, don't overwrite the value. if (trainingParameters.getIntParameter(CUTOFF_PARAM, -1) == -1) { trainingParameters.put(CUTOFF_PARAM, 5); } DataIndexer indexer = DataIndexerFactory.getDataIndexer(trainingParameters, reportMap); indexer.index(events); return indexer; } public abstract MaxentModel doTrain(DataIndexer indexer) throws IOException; @Override public final MaxentModel train(DataIndexer indexer) throws IOException { validate(); if (indexer.getOutcomeLabels().length <= 1) { throw new InsufficientTrainingDataException("Training data must contain more than one outcome"); } MaxentModel model = doTrain(indexer); addToReport(AbstractTrainer.TRAINER_TYPE_PARAM, EventTrainer.EVENT_VALUE); return model; } @Override public final MaxentModel train(ObjectStream events) throws IOException { validate(); HashSumEventStream hses = new HashSumEventStream(events); DataIndexer indexer = getDataIndexer(hses); addToReport("Training-Eventhash", hses.calculateHashSum().toString(16)); return train(indexer); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/AbstractMLModelWriter.java0100644 0000000 0000000 00000010731 14523004075 033244 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.ml.model.AbstractModelWriter; import opennlp.tools.ml.model.ComparablePredicate; import opennlp.tools.ml.model.Context; public abstract class AbstractMLModelWriter extends AbstractModelWriter { private static final Logger logger = LoggerFactory.getLogger(AbstractMLModelWriter.class); protected Context[] PARAMS; protected String[] OUTCOME_LABELS; protected String[] PRED_LABELS; protected int numOutcomes; /** * Sorts and optimizes the model parameters. Thereby, parameters with * {@code 0} weight and predicates with no parameters are removed. * * @return A {@link ComparablePredicate[]}. */ protected abstract ComparablePredicate[] sortValues(); /** * Computes outcome patterns via {@link ComparablePredicate[] predicates}. * * @return A {@link List} of {@link List} that represent * the outcomes patterns. */ protected List> computeOutcomePatterns(ComparablePredicate[] sorted) { ComparablePredicate cp = sorted[0]; List> outcomePatterns = new ArrayList<>(); List newGroup = new ArrayList<>(); for (ComparablePredicate predicate : sorted) { if (cp.compareTo(predicate) == 0) { newGroup.add(predicate); } else { cp = predicate; outcomePatterns.add(newGroup); newGroup = new ArrayList<>(); newGroup.add(predicate); } } outcomePatterns.add(newGroup); logger.info("{} outcome patterns", outcomePatterns.size()); return outcomePatterns; } /** * Compresses outcome patterns. * * @return A {@link List} of {@link List} that represent * the remaining outcomes patterns. */ protected List> compressOutcomes(ComparablePredicate[] sorted) { List> outcomePatterns = new ArrayList<>(); if (sorted.length > 0) { ComparablePredicate cp = sorted[0]; List newGroup = new ArrayList<>(); for (ComparablePredicate comparablePredicate : sorted) { if (cp.compareTo(comparablePredicate) == 0) { newGroup.add(comparablePredicate); } else { cp = comparablePredicate; outcomePatterns.add(newGroup); newGroup = new ArrayList<>(); newGroup.add(comparablePredicate); } } outcomePatterns.add(newGroup); } return outcomePatterns; } @Override public void persist() throws IOException { // the mapping from outcomes to their integer indexes writeInt(OUTCOME_LABELS.length); for (String label : OUTCOME_LABELS) { writeUTF(label); } // the mapping from predicates to the outcomes they contributed to. // The sorting is done so that we actually can write this out more // compactly than as the entire list. ComparablePredicate[] sorted = sortValues(); List> compressed = computeOutcomePatterns(sorted); writeInt(compressed.size()); for (List a : compressed) { writeUTF(a.size() + a.get(0).toString()); } // the mapping from predicate names to their integer indexes writeInt(sorted.length); for (ComparablePredicate s : sorted) { writeUTF(s.name); } // write out the parameters for (ComparablePredicate comparablePredicate : sorted) for (int j = 0; j < comparablePredicate.params.length; j++) writeDouble(comparablePredicate.params[j]); close(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/AbstractTrainer.java0100644 0000000 0000000 00000007434 14523004075 032170 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml; import java.util.HashMap; import java.util.Map; import opennlp.tools.commons.Trainer; import opennlp.tools.ml.maxent.GISTrainer; import opennlp.tools.util.TrainingParameters; public abstract class AbstractTrainer implements Trainer { public static final String ALGORITHM_PARAM = "Algorithm"; public static final String TRAINER_TYPE_PARAM = "TrainerType"; public static final String CUTOFF_PARAM = "Cutoff"; public static final int CUTOFF_DEFAULT = 5; public static final String ITERATIONS_PARAM = "Iterations"; public static final int ITERATIONS_DEFAULT = 100; protected TrainingParameters trainingParameters; protected Map reportMap; public AbstractTrainer() { } /** * Initializes a {@link AbstractTrainer} via {@link TrainingParameters}. * * @param trainParams The {@link TrainingParameters} to use. */ public AbstractTrainer(TrainingParameters trainParams) { init(trainParams,new HashMap<>()); } /** * Initializes a {@link AbstractTrainer} via {@link TrainingParameters} and * a {@link Map report map}. * * @param trainParams The {@link TrainingParameters} to use. * @param reportMap The {@link Map} instance used as report map. */ @Override public void init(TrainingParameters trainParams, Map reportMap) { this.trainingParameters = trainParams; if (reportMap == null) reportMap = new HashMap<>(); this.reportMap = reportMap; } /** * @return Retrieves the configured {@link #ALGORITHM_PARAM} value. */ public String getAlgorithm() { return trainingParameters.getStringParameter(ALGORITHM_PARAM, GISTrainer.MAXENT_VALUE); } /** * @return Retrieves the configured {@link #CUTOFF_PARAM} value. */ public int getCutoff() { return trainingParameters.getIntParameter(CUTOFF_PARAM, CUTOFF_DEFAULT); } /** * @return Retrieves the configured {@link #ITERATIONS_PARAM} value. */ public int getIterations() { return trainingParameters.getIntParameter(ITERATIONS_PARAM, ITERATIONS_DEFAULT); } /** * Checks the configured {@link TrainingParameters parameters}. * If a subclass overrides this, it should call {@code super.validate();}. * * @throws IllegalArgumentException Thrown if default training parameters are invalid. */ public void validate() { // TODO: Need to validate all parameters correctly ... error prone?! // should validate if algorithm is set? What about the Parser? try { trainingParameters.getIntParameter(CUTOFF_PARAM, CUTOFF_DEFAULT); trainingParameters.getIntParameter(ITERATIONS_PARAM, ITERATIONS_DEFAULT); } catch (NumberFormatException e) { throw new IllegalArgumentException(e); } } /** * Adds the key-value pair to the report map. * @param key The identifying string associated with a certain training parameter. * @param value The parameter value associated with {@code key}. */ protected void addToReport(String key, String value) { reportMap.put(key, value); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/ArrayMath.java0100644 0000000 0000000 00000011322 14523004075 030757 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml; import java.util.List; import opennlp.tools.ml.model.Context; /** * Utility class for simple vector arithmetic. */ public class ArrayMath { public static double innerProduct(double[] vecA, double[] vecB) { if (vecA == null || vecB == null || vecA.length != vecB.length) return Double.NaN; double product = 0.0; for (int i = 0; i < vecA.length; i++) { product += vecA[i] * vecB[i]; } return product; } /** * Computes the L1-norm for a vector {@code v}. * * @param v The vector of {@code double} values. * @return The computed L1-norm. */ public static double l1norm(double[] v) { double norm = 0; for (double value : v) norm += StrictMath.abs(value); return norm; } /** * Computes the L2-norm for a vector {@code v}. * * @param v The vector of {@code double} values. * @return The computed L2-norm. */ public static double l2norm(double[] v) { return StrictMath.sqrt(innerProduct(v, v)); } /** * Computes the Inverse L2-norm for a vector {@code v}. * * @param v The vector of {@code double} values. * @return The computed Inverse L2-norm. */ public static double invL2norm(double[] v) { return 1 / l2norm(v); } /** * Computes {@code \log(\sum_{i=1}^n e^{x_i})} using a maximum-element trick * to avoid arithmetic overflow. * * @param x The vector of {@code double} values. * @return The log-sum of exponentials of vector elements. */ public static double logSumOfExps(double[] x) { double max = max(x); double sum = 0.0; for (double v : x) { if (v != Double.NEGATIVE_INFINITY) sum += StrictMath.exp(v - max); } return max + StrictMath.log(sum); } /** * Finds the maximum element in a vector {@code x}. * @param x The vector of {@code double} values. * @return The maximum element in {@code x}. */ public static double max(double[] x) { int maxIdx = argmax(x); return x[maxIdx]; } /** * Finds the index of the maximum element in a vector {@code x} * @param x The vector of {@code double} values. * @return The index of the maximum element. Index of the first * maximum element is returned if multiple maximums are found. */ public static int argmax(double[] x) { if (x == null || x.length == 0) { throw new IllegalArgumentException("Vector x is null or empty"); } int maxIdx = 0; for (int i = 1; i < x.length; i++) { if (x[maxIdx] < x[i]) maxIdx = i; } return maxIdx; } public static void sumFeatures(Context[] context, float[] values, double[] prior) { for (int ci = 0; ci < context.length; ci++) { if (context[ci] != null) { Context predParams = context[ci]; int[] activeOutcomes = predParams.getOutcomes(); double[] activeParameters = predParams.getParameters(); double value = 1; if (values != null) { value = values[ci]; } for (int ai = 0; ai < activeOutcomes.length; ai++) { int oid = activeOutcomes[ai]; prior[oid] += activeParameters[ai] * value; } } } } // === Not really related to math === /** * Convert a list of {@link Double} objects into an array of primitive doubles. * * @param list The input vector of {@link Double values}. * @return The {@code double[]}. */ public static double[] toDoubleArray(List list) { double[] arr = new double[list.size()]; for (int i = 0; i < arr.length; i++) { arr[i] = list.get(i); } return arr; } /** * Convert a list of {@link Integer} objects into an array of primitive integers. * * @param list The input vector of {@link Integer values}. * @return The {@code int[]}. */ public static int[] toIntArray(List list) { int[] arr = new int[list.size()]; for (int i = 0; i < arr.length; i++) { arr[i] = list.get(i); } return arr; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/BeamSearch.java0100644 0000000 0000000 00000017711 14523004075 031071 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml; import java.util.Arrays; import java.util.List; import java.util.PriorityQueue; import java.util.Queue; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.ml.model.SequenceClassificationModel; import opennlp.tools.util.BeamSearchContextGenerator; import opennlp.tools.util.Cache; import opennlp.tools.util.Sequence; import opennlp.tools.util.SequenceValidator; /** * Performs k-best search over a sequence. *

* This is based on the description in Ratnaparkhi (1998), * PhD diss, Univ. of Pennsylvania. * * @see Sequence * @see SequenceValidator * @see BeamSearchContextGenerator */ public class BeamSearch implements SequenceClassificationModel { public static final String BEAM_SIZE_PARAMETER = "BeamSize"; private static final Object[] EMPTY_ADDITIONAL_CONTEXT = new Object[0]; protected final int size; protected final MaxentModel model; private final double[] probs; private Cache contextsCache; private static final int zeroLog = -100000; /** * Initializes a {@link BeamSearch} instance. * * @param size The size of the beam (k). * @param model The {@link MaxentModel} for assigning probabilities to the sequence outcomes. */ public BeamSearch(int size, MaxentModel model) { this(size, model, 0); } /** * Initializes a {@link BeamSearch} instance. * * @param size The size of the beam (k). * @param model The {@link MaxentModel} for assigning probabilities to the sequence outcomes. * @param cacheSize The capacity of the {@link Cache} to use. */ public BeamSearch(int size, MaxentModel model, int cacheSize) { this.size = size; this.model = model; if (cacheSize > 0) { contextsCache = new Cache<>(cacheSize); } this.probs = new double[model.getNumOutcomes()]; } /** * Computes the best sequence of outcomes based on the {@link MaxentModel}. * * @param numSequences The number of sequences. * @param sequence The input {@link T} sequence. * @param additionalContext An {@link Object[]} of additional context. * This is passed to the context generator blindly with the * assumption that the context are appropriate. * @param minSequenceScore The minimum sequence score to use. * @param cg The {@link BeamSearchContextGenerator context generator} to use. * @param validator The {@link SequenceValidator} to validate sequences. * * @return The top ranked {@link Sequence} of outcomes or {@code null} * if no sequence could be found. */ @Override public Sequence[] bestSequences(int numSequences, T[] sequence, Object[] additionalContext, double minSequenceScore, BeamSearchContextGenerator cg, SequenceValidator validator) { Queue prev = new PriorityQueue<>(size); Queue next = new PriorityQueue<>(size); Queue tmp; prev.add(new Sequence()); if (additionalContext == null) { additionalContext = EMPTY_ADDITIONAL_CONTEXT; } for (int i = 0; i < sequence.length; i++) { int sz = StrictMath.min(size, prev.size()); for (int sc = 0; prev.size() > 0 && sc < sz; sc++) { Sequence top = prev.remove(); List tmpOutcomes = top.getOutcomes(); String[] outcomes = tmpOutcomes.toArray(new String[0]); String[] contexts = cg.getContext(i, sequence, outcomes, additionalContext); double[] scores; if (contextsCache != null) { scores = contextsCache.computeIfAbsent(contexts, c -> model.eval(c, probs)); } else { scores = model.eval(contexts, probs); } double[] temp_scores = new double[scores.length]; System.arraycopy(scores, 0, temp_scores, 0, scores.length); Arrays.sort(temp_scores); double min = temp_scores[StrictMath.max(0,scores.length - size)]; for (int p = 0; p < scores.length; p++) { if (scores[p] >= min) { String out = model.getOutcome(p); if (validator.validSequence(i, sequence, outcomes, out)) { Sequence ns = new Sequence(top, out, scores[p]); if (ns.getScore() > minSequenceScore) { next.add(ns); } } } } if (next.size() == 0) { //if no advanced sequences, advance all valid for (int p = 0; p < scores.length; p++) { String out = model.getOutcome(p); if (validator.validSequence(i, sequence, outcomes, out)) { Sequence ns = new Sequence(top, out, scores[p]); if (ns.getScore() > minSequenceScore) { next.add(ns); } } } } } // make prev = next; and re-init next (we reuse existing prev set once we clear it) prev.clear(); tmp = prev; prev = next; next = tmp; } int numSeq = StrictMath.min(numSequences, prev.size()); Sequence[] topSequences = new Sequence[numSeq]; for (int seqIndex = 0; seqIndex < numSeq; seqIndex++) { topSequences[seqIndex] = prev.remove(); } return topSequences; } /** * Computes the best sequence of outcomes based on the {@link MaxentModel}. * * @param numSequences The number of sequences. * @param sequence The input {@link T} sequence. * @param additionalContext An {@link Object[]} of additional context. * This is passed to the context generator blindly with the * assumption that the context are appropriate. * @param cg The {@link BeamSearchContextGenerator context generator} to use. * @param validator The {@link SequenceValidator} to validate sequences. * * @return The top ranked {@link Sequence} of outcomes or {@code null} * if no sequence could be found. */ @Override public Sequence[] bestSequences(int numSequences, T[] sequence, Object[] additionalContext, BeamSearchContextGenerator cg, SequenceValidator validator) { return bestSequences(numSequences, sequence, additionalContext, zeroLog, cg, validator); } /** * Computes the best sequence of outcomes based on the {@link MaxentModel}. * * @param sequence The input {@link T} sequence. * @param additionalContext An {@link Object[]} of additional context. * This is passed to the context generator blindly with the * assumption that the context are appropriate. * @param cg The {@link BeamSearchContextGenerator context generator} to use. * @param validator The {@link SequenceValidator} to validate sequences. * * @return The top ranked {@link Sequence} of outcomes or {@code null} * if no sequence could be found. */ @Override public Sequence bestSequence(T[] sequence, Object[] additionalContext, BeamSearchContextGenerator cg, SequenceValidator validator) { Sequence[] sequences = bestSequences(1, sequence, additionalContext, cg, validator); if (sequences.length > 0) return sequences[0]; else return null; } @Override public String[] getOutcomes() { String[] outcomes = new String[model.getNumOutcomes()]; for (int i = 0; i < model.getNumOutcomes(); i++) { outcomes[i] = model.getOutcome(i); } return outcomes; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_EventModelSequ0100644 0000000 0000000 00000000156 14523004075 032541 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/EventModelSequenceTrainer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/EventModelSequenceTrainer.java0100644 0000000 0000000 00000003130 14523004075 034145 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml; import java.io.IOException; import opennlp.tools.commons.Trainer; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.ml.model.SequenceStream; /** * A specialized {@link Trainer} that is based on a 'EventModelSequence' approach. * @param The generic type of elements to process via a {@link SequenceStream}. */ public interface EventModelSequenceTrainer extends Trainer { String SEQUENCE_VALUE = "EventModelSequence"; /** * Trains a {@link MaxentModel} for given {@link SequenceStream events}. * * @param events The input {@link SequenceStream events}. * * @return The trained {@link MaxentModel}. * @throws IOException Thrown if IO errors occurred. */ MaxentModel train(SequenceStream events) throws IOException; } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/EventTrainer.java0100644 0000000 0000000 00000003550 14523004075 031501 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml; import java.io.IOException; import opennlp.tools.commons.Trainer; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.util.ObjectStream; /** * A specialized {@link Trainer} that is based on an {@link Event} approach. */ public interface EventTrainer extends Trainer { String EVENT_VALUE = "Event"; /** * Trains a {@link MaxentModel} for given {@link ObjectStream events}. * * @param events The input {@link ObjectStream events}. * * @return The trained {@link MaxentModel}. * @throws IOException Thrown if IO errors occurred. */ MaxentModel train(ObjectStream events) throws IOException; /** * Trains a {@link MaxentModel} for given {@link ObjectStream events}. * * @param indexer The input {@link DataIndexer indexer} to use. * * @return The trained {@link MaxentModel}. * @throws IOException Thrown if IO errors occurred. */ MaxentModel train(DataIndexer indexer) throws IOException; } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/SequenceTrainer.java0100644 0000000 0000000 00000003045 14523004075 032167 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml; import java.io.IOException; import opennlp.tools.commons.Trainer; import opennlp.tools.ml.model.SequenceClassificationModel; import opennlp.tools.ml.model.SequenceStream; public interface SequenceTrainer extends Trainer { String SEQUENCE_VALUE = "Sequence"; /** * Trains a {@link SequenceClassificationModel} for given {@link SequenceStream events}. * * @param events The input {@link SequenceStream events}. * @param The generic type of elements to process via the {@link SequenceStream}. * * @return The trained {@link SequenceClassificationModel}. * @throws IOException Thrown if IO errors occurred. */ SequenceClassificationModel train(SequenceStream events) throws IOException; } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/TrainerFactory.java0100644 0000000 0000000 00000023474 14523004075 032036 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml; import java.lang.reflect.Constructor; import java.util.Map; import opennlp.tools.commons.Trainer; import opennlp.tools.ml.maxent.GISTrainer; import opennlp.tools.ml.maxent.quasinewton.QNTrainer; import opennlp.tools.ml.naivebayes.NaiveBayesTrainer; import opennlp.tools.ml.perceptron.PerceptronTrainer; import opennlp.tools.ml.perceptron.SimplePerceptronSequenceTrainer; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.ext.ExtensionLoader; import opennlp.tools.util.ext.ExtensionNotLoadedException; /** * A factory to initialize {@link Trainer} instances depending on a trainer type * configured via {@link TrainingParameters}. */ public class TrainerFactory { public enum TrainerType { EVENT_MODEL_TRAINER, EVENT_MODEL_SEQUENCE_TRAINER, SEQUENCE_TRAINER } // built-in trainers private static final Map> BUILTIN_TRAINERS; /* * Initialize the built-in trainers */ static { BUILTIN_TRAINERS = Map.of( GISTrainer.MAXENT_VALUE, GISTrainer.class, QNTrainer.MAXENT_QN_VALUE, QNTrainer.class, PerceptronTrainer.PERCEPTRON_VALUE, PerceptronTrainer.class, SimplePerceptronSequenceTrainer.PERCEPTRON_SEQUENCE_VALUE, SimplePerceptronSequenceTrainer.class, NaiveBayesTrainer.NAIVE_BAYES_VALUE, NaiveBayesTrainer.class); } /** * Determines the {@link TrainerType} based on the * {@link AbstractTrainer#ALGORITHM_PARAM} value. * * @param trainParams - A mapping of {@link TrainingParameters training parameters}. * * @return The {@link TrainerType} or {@code null} if the type couldn't be determined. */ public static TrainerType getTrainerType(TrainingParameters trainParams) { String algorithmValue = trainParams.getStringParameter(AbstractTrainer.ALGORITHM_PARAM,null); // Check if it is defaulting to the MAXENT trainer if (algorithmValue == null) { return TrainerType.EVENT_MODEL_TRAINER; } Class trainerClass = BUILTIN_TRAINERS.get(algorithmValue); if (trainerClass != null) { if (EventTrainer.class.isAssignableFrom(trainerClass)) { return TrainerType.EVENT_MODEL_TRAINER; } else if (EventModelSequenceTrainer.class.isAssignableFrom(trainerClass)) { return TrainerType.EVENT_MODEL_SEQUENCE_TRAINER; } else if (SequenceTrainer.class.isAssignableFrom(trainerClass)) { return TrainerType.SEQUENCE_TRAINER; } } // Try to load the different trainers, and return the type on success try { ExtensionLoader.instantiateExtension(EventTrainer.class, algorithmValue); return TrainerType.EVENT_MODEL_TRAINER; } catch (ExtensionNotLoadedException ignored) { // this is ignored } try { ExtensionLoader.instantiateExtension(EventModelSequenceTrainer.class, algorithmValue); return TrainerType.EVENT_MODEL_SEQUENCE_TRAINER; } catch (ExtensionNotLoadedException ignored) { // this is ignored } try { ExtensionLoader.instantiateExtension(SequenceTrainer.class, algorithmValue); return TrainerType.SEQUENCE_TRAINER; } catch (ExtensionNotLoadedException ignored) { // this is ignored } return null; } /** * Retrieves a {@link SequenceTrainer} that fits the given parameters. * * @param trainParams The {@link TrainingParameters} to check for the trainer type. * Note: The entry {@link AbstractTrainer#ALGORITHM_PARAM} is used * to determine the type. * @param reportMap A {@link Map} that shall be used during initialization of * the {@link SequenceTrainer}. * * @return A valid {@link SequenceTrainer} for the configured {@code trainParams}. * @throws IllegalArgumentException Thrown if the trainer type could not be determined. */ public static SequenceTrainer getSequenceModelTrainer( TrainingParameters trainParams, Map reportMap) { String trainerType = trainParams.getStringParameter(AbstractTrainer.ALGORITHM_PARAM,null); if (trainerType != null) { final SequenceTrainer trainer; if (BUILTIN_TRAINERS.containsKey(trainerType)) { trainer = TrainerFactory.createBuiltinTrainer(BUILTIN_TRAINERS.get(trainerType)); } else { trainer = ExtensionLoader.instantiateExtension(SequenceTrainer.class, trainerType); } trainer.init(trainParams, reportMap); return trainer; } else { throw new IllegalArgumentException("Trainer type couldn't be determined!"); } } /** * Retrieves an {@link EventModelSequenceTrainer} that fits the given parameters. * * @param trainParams The {@link TrainingParameters} to check for the trainer type. * Note: The entry {@link AbstractTrainer#ALGORITHM_PARAM} is used * to determine the type. * @param reportMap A {@link Map} that shall be used during initialization of * the {@link EventModelSequenceTrainer}. * * @return A valid {@link EventModelSequenceTrainer} for the configured {@code trainParams}. * @throws IllegalArgumentException Thrown if the trainer type could not be determined. */ public static EventModelSequenceTrainer getEventModelSequenceTrainer( TrainingParameters trainParams, Map reportMap) { String trainerType = trainParams.getStringParameter(AbstractTrainer.ALGORITHM_PARAM,null); if (trainerType != null) { final EventModelSequenceTrainer trainer; if (BUILTIN_TRAINERS.containsKey(trainerType)) { trainer = TrainerFactory.createBuiltinTrainer(BUILTIN_TRAINERS.get(trainerType)); } else { trainer = ExtensionLoader.instantiateExtension(EventModelSequenceTrainer.class, trainerType); } trainer.init(trainParams, reportMap); return trainer; } else { throw new IllegalArgumentException("Trainer type couldn't be determined!"); } } /** * Retrieves an {@link EventTrainer} that fits the given parameters. * * @param trainParams The {@link TrainingParameters} to check for the trainer type. * Note: The entry {@link AbstractTrainer#ALGORITHM_PARAM} is used * to determine the type. If the type is not defined, the * {@link GISTrainer#MAXENT_VALUE} will be used. * @param reportMap A {@link Map} that shall be used during initialization of * the {@link EventTrainer}. * * @return A valid {@link EventTrainer} for the configured {@code trainParams}. */ public static EventTrainer getEventTrainer( TrainingParameters trainParams, Map reportMap) { // if the trainerType is not defined -- use the GISTrainer. String trainerType = trainParams.getStringParameter( AbstractTrainer.ALGORITHM_PARAM, GISTrainer.MAXENT_VALUE); final EventTrainer trainer; if (BUILTIN_TRAINERS.containsKey(trainerType)) { trainer = TrainerFactory.createBuiltinTrainer(BUILTIN_TRAINERS.get(trainerType)); } else { trainer = ExtensionLoader.instantiateExtension(EventTrainer.class, trainerType); } trainer.init(trainParams, reportMap); return trainer; } /** * @param trainParams The {@link TrainingParameters} to validate. Must not be {@code null}. * @return {@code true} if the {@code trainParams} could be validated, {@code false} otherwise. */ public static boolean isValid(TrainingParameters trainParams) { // TODO: Need to validate all parameters correctly ... error prone?! String algorithmName = trainParams.getStringParameter(AbstractTrainer.ALGORITHM_PARAM,null); // If a trainer type can be determined, then the trainer is valid! if (algorithmName != null && !(BUILTIN_TRAINERS.containsKey(algorithmName) || getTrainerType(trainParams) != null)) { return false; } try { // require that the Cutoff and the number of iterations be an integer. // if they are not set, the default values will be ok. trainParams.getIntParameter(AbstractTrainer.CUTOFF_PARAM, 0); trainParams.getIntParameter(AbstractTrainer.ITERATIONS_PARAM, 0); } catch (NumberFormatException e) { return false; } // no reason to require that the dataIndexer be a 1-pass or 2-pass data indexer. trainParams.getStringParameter(AbstractEventTrainer.DATA_INDEXER_PARAM, null); // TODO: Check data indexing ... return true; } @SuppressWarnings("unchecked") private static T createBuiltinTrainer(Class trainerClass) { Trainer theTrainer = null; if (trainerClass != null) { try { Constructor c = trainerClass.getConstructor(); theTrainer = c.newInstance(); } catch (Exception e) { String msg = "Could not instantiate the " + trainerClass.getCanonicalName() + ". The initialization threw an exception."; throw new IllegalArgumentException(msg, e); } } return (T) theTrainer; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/AllEnglishAffixes.txt0100644 0000000 0000000 00000004352 14523004075 033616 0ustar00rootroot0000000 0000000 -'s -able -acea -aceae -aceous -ad -ade -aemia -age -agogue -al -ales -algia -amine -an -ana -ance -ancy -and -androus -andry -ane -ant -ar -arch -archy -ard -arian -arium -art -ary -ase -asis -aster -ate -atic -ation -ative -ator -atory -bashing -biosis -blast -bodied -branch -cade -carp -carpic -carpous -cele -cene -centric -cephalic -cephalus -chore -chrome -chroous -cide -clase -cle -cline -colous -cracy -crat -cule -cy -cyst -cyte -decker -derm -diene -dom -drome -dromous -ean -ectomy -ed -ee -eer -eme -emia -en -ence -enchyma -ency -ene -ent -eous -er -ery -es -escent -ese -esque -ess -est -et -eth -ette -ey -facient -favoured -featured -fer -ferous -fic -fid -florous -fold -footed -form -free -fuge -ful -fy -gaited -gamy -gen -gene -genesis -genic -genous -geny -gerous -gnathous -gnosis -gon -gonium -gony -grade -gram -graph -grapher -graphy -gynous -haemia -haired -handed -hearted -hedron -hemia -hood -i -i- -ia -ial -ian -iana -iasis -iatrics -iatry -ible -ic -ical -ician -ics -id -idae -ide -ie -ier -ify -ile -in -inae -ine -ing -ion -ious -ise -ish -ism -ist -istic -ite -itis -itol -ity -ium -ive -ize -ji -kin -lalia -lashed -latry -lepsy -less -let -like -ling -lipped -lite -lith -lithic -lived -log -logue -logy -ly -lysis -lyte -lytic -mancy -mania -mantic -mas -masted -ment -mer -mere -merous -meter -metry -mo -morph -most -motored -mycete -n't -nasty -naut -ness -nik -nomy -o -o- -ock -ode -odont -oid -oidea -ol -ole -oma -ome -on -one -onym -opia -opsis -or -ory -ose -osis -otic -our -ous -parous -path -pathy -ped -pede -person -petal -phage -phagy -phane -phany -phasia -phile -philia -philous -phobe -phobia -phone -phony -phore -phoresis -phyll -phyllous -phyte -plasia -plasm -plast -plastic -plasty -plegia -ploid -pod -podium -podous -poiesis -pounder -prone -proof -pterous -rhoea -rigged -rrhagia -rrhoea -ry -s -s' -saur -scape -scope -scopy -sect -sepalous -shaped -ship -sided -some -sophy -sperm -sphere -sporous -st -stat -ster -stichous -stome -stomous -stomy -stress -tactic -taxis -taxy -termer -th -thermy -thymia -tion -to-be -tome -tomy -trix -tron -trope -trophy -tropic -tropism -tropous -tude -ty -type -ule -ulent -ure -uret -urgy -uria -ville -visaged -vorous -ward -wards -ways -wise -witted -y -yl -yne -zoa -zoon ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_maxent_BasicCo0100644 0000000 0000000 00000000161 14523004075 032514 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/BasicContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/BasicContextGenerator.j0100644 0000000 0000000 00000003151 14523004075 034131 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent; /** * A {@link ContextGenerator} implementation for maxent decisions, assuming that the input * given to the {@link #getContext(String)} method is a String containing contextual * predicates separated by spaces, for instance: *

* {@code cp_1 cp_2 ... cp_n} *

*/ public class BasicContextGenerator implements ContextGenerator { private String separator = " "; public BasicContextGenerator() {} /** * Initializes a {@link BasicContextGenerator} with a different separator char. * This overwrites the default whitespace separator. * * @param sep The {@link String separator character} to use. */ public BasicContextGenerator(String sep) { separator = sep; } @Override public String[] getContext(String o) { return o.split(separator); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/ContextGenerator.java0100644 0000000 0000000 00000002136 14523004075 033661 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent; /** * Represents a generator of contexts for maxent decisions. */ public interface ContextGenerator { /** * Builds up the list of contextual predicates given an {@link T object}. * * @param o The {@link T object} used as input. */ String[] getContext(T o); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/DataStream.java0100644 0000000 0000000 00000003050 14523004075 032407 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent; /** * An interface for objects which can deliver a stream of training data to be * supplied to an EventStream. It is not necessary to use a {@link DataStream} in a * Maxent application, but it can be used to support a wider variety of formats * in which your training data can be held. */ public interface DataStream { /** * Returns the next slice of data held in this {@link DataStream}. * * @return The Object representing the data which is next in this {@link DataStream}. */ Object nextToken(); /** * Test whether there are any events remaining in this {@link DataStream}. * * @return {@code true} if this {@link DataStream} has more data tokens, {@code false} otherwise. */ boolean hasNext(); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/GISFormat0100644 0000000 0000000 00000002351 14523004075 031240 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Format for the GIS maxent info (.mei) files. GIS (model type identifier) 1. # of parameters (int) 2. the correction constant (int) 3. the correction constant parameter (double) 4. # of outcomes (int) * list of outcome names (String) 5. # of different types of outcome patterns (int) * list of (int int[]) [# of predicates for which outcome pattern is true] [outcome pattern] 6. # of predicates (int) * list of predicate names (String) apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/GISModel.java0100644 0000000 0000000 00000017734 14523004075 032003 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent; import java.util.Arrays; import java.util.Objects; import opennlp.tools.ml.ArrayMath; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.Context; import opennlp.tools.ml.model.EvalParameters; import opennlp.tools.ml.model.Prior; import opennlp.tools.ml.model.UniformPrior; /** * A maximum entropy model which has been trained using the Generalized * Iterative Scaling (GIS) procedure. * * @see AbstractModel */ public final class GISModel extends AbstractModel { /** * Initializes a {@link GISModel} with the specified parameters, outcome names, and * predicate/feature labels. * * @param params The {@link Context parameters} of the model. * @param predLabels The names of the predicates used in this model. * @param outcomeNames The names of the outcomes this model predicts. */ public GISModel(Context[] params, String[] predLabels, String[] outcomeNames) { this(params, predLabels, outcomeNames, new UniformPrior()); } /** * Initializes a {@link GISModel} with the specified parameters, outcome names, and * predicate/feature labels. * * @param params The {@link Context parameters} of the model. * @param predLabels The names of the predicates used in this model. * @param outcomeNames The names of the outcomes this model predicts. * @param prior The {@link Prior} to be used with this model. */ public GISModel(Context[] params, String[] predLabels, String[] outcomeNames, Prior prior) { super(params, predLabels, outcomeNames); this.prior = prior; prior.setLabels(outcomeNames, predLabels); modelType = ModelType.Maxent; } /** * Evaluates a context and return an array of the likelihood * of each outcome given that context. * * @param context * The names of the predicates which have been observed at the * present decision point. * @return The normalized probabilities for the outcomes given the context. * The indexes of the double[] are the outcome ids, and the actual * string representation of the outcomes can be obtained from the * method {@link #getOutcome(int)}. */ @Override public double[] eval(String[] context) { return (eval(context, new double[evalParams.getNumOutcomes()])); } /** * {@inheritDoc} */ @Override public double[] eval(String[] context, float[] values) { return (eval(context, values, new double[evalParams.getNumOutcomes()])); } /** * {@inheritDoc} */ @Override public double[] eval(String[] context, double[] outsums) { return eval(context, null, outsums); } /** * Evaluates a context and return an array of the likelihood * of each outcome given that context. * * @param context * The names of the predicates which have been observed at the * present decision point. * @param outsums * This is where the distribution is stored. * @return The normalized probabilities for the outcomes given the context. * The indexes of the double[] are the outcome ids, and the actual * string representation of the outcomes can be obtained from the * method {@link #getOutcome(int)}. */ public double[] eval(String[] context, float[] values, double[] outsums) { Context[] scontexts = new Context[context.length]; for (int i = 0; i < context.length; i++) { scontexts[i] = pmap.get(context[i]); } prior.logPrior(outsums, scontexts, values); return GISModel.eval(scontexts, values, outsums, evalParams); } /** * Evaluates a context and return an array of the likelihood * of each outcome given the specified context and the specified parameters. * * @param context * The integer values of the predicates which have been observed at * the present decision point. * @param prior * The prior distribution for the specified context. * @param model * The set of parameters used in this computation. * @return The normalized probabilities for the outcomes given the context. * The indexes of the double[] are the outcome ids, and the actual * string representation of the outcomes can be obtained from the * method {@link #getOutcome(int)}. */ public static double[] eval(int[] context, double[] prior, EvalParameters model) { return eval(context, null, prior, model); } /** * Evaluates a context and return an array of the likelihood * of each outcome given the specified context and the specified parameters. * * @param context * The integer values of the predicates which have been observed at * the present decision point. * @param values * The values for each of the parameters. * @param prior * The prior distribution for the specified context. * @param model * The set of parameters used in this computation. * @return The normalized probabilities for the outcomes given the context. * The indexes of the double[] are the outcome ids, and the actual * string representation of the outcomes can be obtained from the * method {@link #getOutcome(int)}. */ static double[] eval(int[] context, float[] values, double[] prior, EvalParameters model) { Context[] scontexts = new Context[context.length]; for (int i = 0; i < context.length; i++) { scontexts[i] = model.getParams()[context[i]]; } return GISModel.eval(scontexts, values, prior, model); } /** * Evaluates a context and return an array of the likelihood * of each outcome given the specified context and the specified parameters. * * @param context * The integer values of the predicates which have been observed at * the present decision point. * @param values * The values for each of the parameters. * @param prior * The prior distribution for the specified context. * @param model * The set of parameters used in this computation. * @return The normalized probabilities for the outcomes given the context. * The indexes of the double[] are the outcome ids, and the actual * string representation of the outcomes can be obtained from the * method {@link #getOutcome(int)}. */ static double[] eval(Context[] context, float[] values, double[] prior, EvalParameters model) { ArrayMath.sumFeatures(context, values, prior); double normal = 0.0; for (int oid = 0; oid < model.getNumOutcomes(); oid++) { prior[oid] = StrictMath.exp(prior[oid]); normal += prior[oid]; } for (int oid = 0; oid < model.getNumOutcomes(); oid++) { prior[oid] /= normal; } return prior; } @Override public int hashCode() { return Objects.hash(pmap, Arrays.hashCode(outcomeNames), evalParams, prior); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof GISModel model) { return pmap.equals(model.pmap) && Objects.deepEquals(outcomeNames, model.outcomeNames) && Objects.equals(prior, model.prior); } return false; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/GISTrainer.java0100644 0000000 0000000 00000064430 14523004075 032342 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.CompletionService; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.ml.AbstractEventTrainer; import opennlp.tools.ml.ArrayMath; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.EvalParameters; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.ml.model.MutableContext; import opennlp.tools.ml.model.OnePassDataIndexer; import opennlp.tools.ml.model.Prior; import opennlp.tools.ml.model.UniformPrior; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; /** * An implementation of Generalized Iterative Scaling (GIS). *

* The reference paper for this implementation was Adwait Ratnaparkhi's tech report at the * University of Pennsylvania's Institute for Research in Cognitive Science, * and is available at * ftp://ftp.cis.upenn.edu/pub/ircs/tr/97-08.ps.Z. *

* The slack parameter used in the above implementation has been removed by default * from the computation and a method for updating with Gaussian smoothing has been * added per Investigating GIS and Smoothing for Maximum Entropy Taggers, Clark and Curran (2002). * http://acl.ldc.upenn.edu/E/E03/E03-1071.pdf. *

* The slack parameter can be used by setting {@code useSlackParameter} to {@code true}. * Gaussian smoothing can be used by setting {@code useGaussianSmoothing} to {@code true}. *

* A {@link Prior} can be used to train models which converge to the distribution which minimizes the * relative entropy between the distribution specified by the empirical constraints of the training * data and the specified prior. By default, the uniform distribution is used as the prior. */ public class GISTrainer extends AbstractEventTrainer { private static final Logger logger = LoggerFactory.getLogger(GISTrainer.class); public static final String LOG_LIKELIHOOD_THRESHOLD_PARAM = "LLThreshold"; public static final double LOG_LIKELIHOOD_THRESHOLD_DEFAULT = 0.0001; private double llThreshold = 0.0001; /** * Specifies whether unseen context/outcome pairs should be estimated as occur very infrequently. */ private boolean useSimpleSmoothing = false; /** * Specified whether parameter updates should prefer a distribution of parameters which * is gaussian. */ private boolean useGaussianSmoothing = false; private double sigma = 2.0; // If we are using smoothing, this is used as the "number" of // times we want the trainer to imagine that it saw a feature that it // actually didn't see. Defaulted to 0.1. private double _smoothingObservation = 0.1; /** * Number of unique events which occurred in the event set. */ private int numUniqueEvents; /** * Number of predicates. */ private int numPreds; /** * Number of outcomes. */ private int numOutcomes; /** * Records the array of predicates seen in each event. */ private int[][] contexts; /** * The value associated with each context. If null then context values are assumes to be 1. */ private float[][] values; /** * List of outcomes for each event i, in context[i]. */ private int[] outcomeList; /** * Records the num of times an event has been seen for each event i, in context[i]. */ private int[] numTimesEventsSeen; /** * Stores the String names of the outcomes. The GIS only tracks outcomes as * ints, and so this array is needed to save the model to disk and thereby * allow users to know what the outcome was in human understandable terms. */ private String[] outcomeLabels; /** * Stores the String names of the predicates. The GIS only tracks predicates * as ints, and so this array is needed to save the model to disk and thereby * allow users to know what the outcome was in human understandable terms. */ private String[] predLabels; /** * Stores the observed expected values of the features based on training data. */ private MutableContext[] observedExpects; /** * Stores the estimated parameter value of each predicate during iteration */ private MutableContext[] params; /** * Stores the expected values of the features based on the current models */ private MutableContext[][] modelExpects; /** * This is the prior distribution that the model uses for training. */ private Prior prior; /** * Initial probability for all outcomes. */ private EvalParameters evalParams; public static final String MAXENT_VALUE = "MAXENT"; /** * If we are using smoothing, this is used as the "number" of times we want * the trainer to imagine that it saw a feature that it actually didn't see. * Defaulted to 0.1. */ private static final String SMOOTHING_PARAM = "Smoothing"; private static final boolean SMOOTHING_DEFAULT = false; private static final String SMOOTHING_OBSERVATION_PARAM = "SmoothingObservation"; private static final double SMOOTHING_OBSERVATION = 0.1; private static final String GAUSSIAN_SMOOTHING_PARAM = "GaussianSmoothing"; private static final boolean GAUSSIAN_SMOOTHING_DEFAULT = false; private static final String GAUSSIAN_SMOOTHING_SIGMA_PARAM = "GaussianSmoothingSigma"; private static final double GAUSSIAN_SMOOTHING_SIGMA_DEFAULT = 2.0; /** * Initializes a {@link GISTrainer}. *

* Note:
* The resulting instance does not print progress messages about training to STDOUT. */ public GISTrainer() { } /** * {@inheritDoc} */ @Override public boolean isSortAndMerge() { return true; } /** * {@inheritDoc} */ @Override public void init(TrainingParameters trainingParameters, Map reportMap) { super.init(trainingParameters, reportMap); llThreshold = trainingParameters.getDoubleParameter(LOG_LIKELIHOOD_THRESHOLD_PARAM, LOG_LIKELIHOOD_THRESHOLD_DEFAULT); useSimpleSmoothing = trainingParameters.getBooleanParameter(SMOOTHING_PARAM, SMOOTHING_DEFAULT); if (useSimpleSmoothing) { _smoothingObservation = trainingParameters.getDoubleParameter(SMOOTHING_OBSERVATION_PARAM, SMOOTHING_OBSERVATION); } useGaussianSmoothing = trainingParameters.getBooleanParameter(GAUSSIAN_SMOOTHING_PARAM, GAUSSIAN_SMOOTHING_DEFAULT); if (useGaussianSmoothing) { sigma = trainingParameters.getDoubleParameter( GAUSSIAN_SMOOTHING_SIGMA_PARAM, GAUSSIAN_SMOOTHING_SIGMA_DEFAULT); } if (useSimpleSmoothing && useGaussianSmoothing) throw new RuntimeException("Cannot set both Gaussian smoothing and Simple smoothing"); } /** * {@inheritDoc} */ @Override public MaxentModel doTrain(DataIndexer indexer) throws IOException { int iterations = getIterations(); int threads = trainingParameters.getIntParameter(TrainingParameters.THREADS_PARAM, 1); return trainModel(iterations, indexer, threads); } /** * Sets whether this trainer will use smoothing while training the model. *

* Note:
* This can improve model accuracy, though training will potentially take * longer and use more memory. Model size will also be larger. * * @param smooth {@code true} if smoothing is desired, {@code false} if not. */ public void setSmoothing(boolean smooth) { useSimpleSmoothing = smooth; } /** * Sets whether this trainer will use smoothing while training the model. *

* Note:
* This can improve model accuracy, though training will potentially take * longer and use more memory. Model size will also be larger. * * @param timesSeen The "number" of times we want the trainer to imagine * it saw a feature that it actually didn't see */ public void setSmoothingObservation(double timesSeen) { _smoothingObservation = timesSeen; } /** * Sets whether this trainer will use smoothing while training the model. *

* Note:
* This can improve model accuracy, though training will potentially take * longer and use more memory. Model size will also be larger. * * @param sigmaValue The Gaussian sigma value used for smoothing. */ public void setGaussianSigma(double sigmaValue) { useGaussianSmoothing = true; sigma = sigmaValue; } /** * Trains a model using the GIS algorithm, assuming 100 iterations and no * cutoff. * * @param eventStream The {@link ObjectStream eventStream} holding the data * on which this model will be trained. * * @return A trained {@link GISModel} which can be used immediately or saved to * disk using an {@link opennlp.tools.ml.maxent.io.GISModelWriter}. */ public GISModel trainModel(ObjectStream eventStream) throws IOException { return trainModel(eventStream, 100, 0); } /** * Trains a GIS model on the event in the specified event stream, using the specified number * of iterations and the specified count cutoff. * * @param eventStream A {@link ObjectStream stream} of all events. * @param iterations The number of iterations to use for GIS. * @param cutoff The number of times a feature must occur to be included. * * @return A trained {@link GISModel} which can be used immediately or saved to * disk using an {@link opennlp.tools.ml.maxent.io.GISModelWriter}. */ public GISModel trainModel(ObjectStream eventStream, int iterations, int cutoff) throws IOException { DataIndexer indexer = new OnePassDataIndexer(); TrainingParameters indexingParameters = new TrainingParameters(); indexingParameters.put(GISTrainer.CUTOFF_PARAM, cutoff); indexingParameters.put(GISTrainer.ITERATIONS_PARAM, iterations); Map reportMap = new HashMap<>(); indexer.init(indexingParameters, reportMap); indexer.index(eventStream); return trainModel(iterations, indexer); } /** * Trains a model using the GIS algorithm. * * @param iterations The number of GIS iterations to perform. * @param di The {@link DataIndexer} used to compress events in memory. * * @return A trained {@link GISModel} which can be used immediately or saved to * disk using an {@link opennlp.tools.ml.maxent.io.GISModelWriter}. * @throws IllegalArgumentException Thrown if parameters were invalid. */ public GISModel trainModel(int iterations, DataIndexer di) { return trainModel(iterations, di, new UniformPrior(), 1); } /** * Trains a model using the GIS algorithm. * * @param iterations The number of GIS iterations to perform. * @param di The {@link DataIndexer} used to compress events in memory. * @param threads The number of thread to train with. Must be greater than {@code 0}. * * @return A trained {@link GISModel} which can be used immediately or saved to * disk using an {@link opennlp.tools.ml.maxent.io.GISModelWriter}. * @throws IllegalArgumentException Thrown if parameters were invalid. */ public GISModel trainModel(int iterations, DataIndexer di, int threads) { return trainModel(iterations, di, new UniformPrior(), threads); } /** * Trains a model using the GIS algorithm. * * @param iterations The number of GIS iterations to perform. * @param di The {@link DataIndexer} used to compress events in memory. * @param modelPrior The {@link Prior} distribution used to train this model. * * @return A trained {@link GISModel} which can be used immediately or saved to * disk using an {@link opennlp.tools.ml.maxent.io.GISModelWriter}. * @throws IllegalArgumentException Thrown if parameters were invalid. */ public GISModel trainModel(int iterations, DataIndexer di, Prior modelPrior, int threads) { if (threads <= 0) { throw new IllegalArgumentException("threads must be at least one or greater but is " + threads + "!"); } modelExpects = new MutableContext[threads][]; /* Incorporate all of the needed info *****/ logger.info("Incorporating indexed data for training..."); contexts = di.getContexts(); values = di.getValues(); /* The number of times a predicate occurred in the training data. */ int[] predicateCounts = di.getPredCounts(); numTimesEventsSeen = di.getNumTimesEventsSeen(); numUniqueEvents = contexts.length; this.prior = modelPrior; //printTable(contexts); // determine the correction constant and its inverse double correctionConstant = 0; for (int ci = 0; ci < contexts.length; ci++) { if (values == null || values[ci] == null) { if (contexts[ci].length > correctionConstant) { correctionConstant = contexts[ci].length; } } else { float cl = values[ci][0]; for (int vi = 1; vi < values[ci].length; vi++) { cl += values[ci][vi]; } if (cl > correctionConstant) { correctionConstant = cl; } } } logger.info("done."); outcomeLabels = di.getOutcomeLabels(); outcomeList = di.getOutcomeList(); numOutcomes = outcomeLabels.length; predLabels = di.getPredLabels(); prior.setLabels(outcomeLabels, predLabels); numPreds = predLabels.length; logger.info("\tNumber of Event Tokens: {} " + "\n\t Number of Outcomes: {} " + "\n\t Number of Predicates: {}", numUniqueEvents, numOutcomes, numPreds); // set up feature arrays float[][] predCount = new float[numPreds][numOutcomes]; for (int ti = 0; ti < numUniqueEvents; ti++) { for (int j = 0; j < contexts[ti].length; j++) { if (values != null && values[ti] != null) { predCount[contexts[ti][j]][outcomeList[ti]] += numTimesEventsSeen[ti] * values[ti][j]; } else { predCount[contexts[ti][j]][outcomeList[ti]] += numTimesEventsSeen[ti]; } } } // A fake "observation" to cover features which are not detected in // the data. The default is to assume that we observed "1/10th" of a // feature during training. final double smoothingObservation = _smoothingObservation; // Get the observed expectations of the features. Strictly speaking, // we should divide the counts by the number of Tokens, but because of // the way the model's expectations are approximated in the // implementation, this is cancelled out when we compute the next // iteration of a parameter, making the extra divisions wasteful. params = new MutableContext[numPreds]; for (int i = 0; i < modelExpects.length; i++) { modelExpects[i] = new MutableContext[numPreds]; } observedExpects = new MutableContext[numPreds]; // The model does need the correction constant and the correction feature. The correction constant // is only needed during training, and the correction feature is not necessary. // For compatibility reasons the model contains form now on a correction constant of 1, // and a correction param 0. evalParams = new EvalParameters(params, numOutcomes); int[] activeOutcomes = new int[numOutcomes]; int[] outcomePattern; int[] allOutcomesPattern = new int[numOutcomes]; for (int oi = 0; oi < numOutcomes; oi++) { allOutcomesPattern[oi] = oi; } int numActiveOutcomes; for (int pi = 0; pi < numPreds; pi++) { numActiveOutcomes = 0; if (useSimpleSmoothing) { numActiveOutcomes = numOutcomes; outcomePattern = allOutcomesPattern; } else { //determine active outcomes for (int oi = 0; oi < numOutcomes; oi++) { if (predCount[pi][oi] > 0) { activeOutcomes[numActiveOutcomes] = oi; numActiveOutcomes++; } } if (numActiveOutcomes == numOutcomes) { outcomePattern = allOutcomesPattern; } else { outcomePattern = new int[numActiveOutcomes]; System.arraycopy(activeOutcomes, 0, outcomePattern, 0, numActiveOutcomes); } } params[pi] = new MutableContext(outcomePattern, new double[numActiveOutcomes]); for (int i = 0; i < modelExpects.length; i++) { modelExpects[i][pi] = new MutableContext(outcomePattern, new double[numActiveOutcomes]); } observedExpects[pi] = new MutableContext(outcomePattern, new double[numActiveOutcomes]); for (int aoi = 0; aoi < numActiveOutcomes; aoi++) { int oi = outcomePattern[aoi]; params[pi].setParameter(aoi, 0.0); for (MutableContext[] modelExpect : modelExpects) { modelExpect[pi].setParameter(aoi, 0.0); } if (predCount[pi][oi] > 0) { observedExpects[pi].setParameter(aoi, predCount[pi][oi]); } else if (useSimpleSmoothing) { observedExpects[pi].setParameter(aoi, smoothingObservation); } } } logger.info("...done."); /* Find the parameters *****/ if (threads == 1) { logger.info("Computing model parameters ..."); } else { logger.info("Computing model parameters in {} threads...", threads); } findParameters(iterations, correctionConstant); // Create and return the model return new GISModel(params, predLabels, outcomeLabels); } /* Estimate and return the model parameters. */ private void findParameters(int iterations, double correctionConstant) { int threads = modelExpects.length; ExecutorService executor = Executors.newFixedThreadPool(threads, runnable -> { Thread thread = new Thread(runnable); thread.setName("opennlp.tools.ml.maxent.ModelExpectationComputeTask.nextIteration()"); thread.setDaemon(true); return thread; }); CompletionService completionService = new ExecutorCompletionService<>(executor); double prevLL = 0.0; double currLL; logger.info("Performing {} iterations.", iterations); for (int i = 1; i <= iterations; i++) { currLL = nextIteration(correctionConstant, completionService, i); if (i > 1) { if (prevLL > currLL) { logger.warn("Model Diverging: loglikelihood decreased"); break; } if (currLL - prevLL < llThreshold) { break; } } prevLL = currLL; } // kill a bunch of these big objects now that we don't need them observedExpects = null; modelExpects = null; numTimesEventsSeen = null; contexts = null; executor.shutdown(); } //modeled on implementation in Zhang Le's maxent kit private double gaussianUpdate(int predicate, int oid, double correctionConstant) { double param = params[predicate].getParameters()[oid]; double x0 = 0.0; double modelValue = modelExpects[0][predicate].getParameters()[oid]; double observedValue = observedExpects[predicate].getParameters()[oid]; for (int i = 0; i < 50; i++) { double tmp = modelValue * StrictMath.exp(correctionConstant * x0); double f = tmp + (param + x0) / sigma - observedValue; double fp = tmp * correctionConstant + 1 / sigma; if (fp == 0) { break; } double x = x0 - f / fp; if (StrictMath.abs(x - x0) < 0.000001) { x0 = x; break; } x0 = x; } return x0; } /* Compute one iteration of GIS and return log-likelihood.*/ private double nextIteration(double correctionConstant, CompletionService completionService, int iteration) { // compute contribution of p(a|b_i) for each feature and the new // correction parameter double loglikelihood = 0.0; int numEvents = 0; int numCorrect = 0; // Each thread gets equal number of tasks, if the number of tasks // is not divisible by the number of threads, the first "leftOver" // threads have one extra task. int numberOfThreads = modelExpects.length; int taskSize = numUniqueEvents / numberOfThreads; int leftOver = numUniqueEvents % numberOfThreads; // submit all tasks to the completion service. for (int i = 0; i < numberOfThreads; i++) { if (i < leftOver) { completionService.submit(new ModelExpectationComputeTask(i, i * taskSize + i, taskSize + 1)); } else { completionService.submit(new ModelExpectationComputeTask(i, i * taskSize + leftOver, taskSize)); } } for (int i = 0; i < numberOfThreads; i++) { ModelExpectationComputeTask finishedTask; try { finishedTask = completionService.take().get(); } catch (InterruptedException e) { // TODO: We got interrupted, but that is currently not really supported! // For now we fail hard. We hopefully soon // handle this case properly! throw new IllegalStateException("Interruption is not supported!", e); } catch (ExecutionException e) { // Only runtime exception can be thrown during training, if one was thrown // it should be re-thrown. That could for example be a NullPointerException // which is caused through a bug in our implementation. throw new RuntimeException("Exception during training: " + e.getMessage(), e); } // When they are done, retrieve the results ... numEvents += finishedTask.getNumEvents(); numCorrect += finishedTask.getNumCorrect(); loglikelihood += finishedTask.getLoglikelihood(); } // merge the results of the two computations for (int pi = 0; pi < numPreds; pi++) { int[] activeOutcomes = params[pi].getOutcomes(); for (int aoi = 0; aoi < activeOutcomes.length; aoi++) { for (int i = 1; i < modelExpects.length; i++) { modelExpects[0][pi].updateParameter(aoi, modelExpects[i][pi].getParameters()[aoi]); } } } // compute the new parameter values for (int pi = 0; pi < numPreds; pi++) { double[] observed = observedExpects[pi].getParameters(); double[] model = modelExpects[0][pi].getParameters(); int[] activeOutcomes = params[pi].getOutcomes(); for (int aoi = 0; aoi < activeOutcomes.length; aoi++) { if (useGaussianSmoothing) { params[pi].updateParameter(aoi, gaussianUpdate(pi, aoi, correctionConstant)); } else { if (model[aoi] == 0) { logger.warn("Model expects == 0 for {} {}", predLabels[pi], outcomeLabels[aoi]); } //params[pi].updateParameter(aoi,(StrictMath.log(observed[aoi]) - StrictMath.log(model[aoi]))); params[pi].updateParameter(aoi, ((StrictMath.log(observed[aoi]) - StrictMath.log(model[aoi])) / correctionConstant)); } for (MutableContext[] modelExpect : modelExpects) { modelExpect[pi].setParameter(aoi, 0.0); // re-initialize to 0.0's } } } logger.info("{} - loglikelihood={}\t{}", iteration, loglikelihood, ((double) numCorrect / numEvents)); return loglikelihood; } private class ModelExpectationComputeTask implements Callable { private final int startIndex; private final int length; final private int threadIndex; private double loglikelihood = 0; private int numEvents = 0; private int numCorrect = 0; // startIndex to compute, number of events to compute ModelExpectationComputeTask(int threadIndex, int startIndex, int length) { this.startIndex = startIndex; this.length = length; this.threadIndex = threadIndex; } public ModelExpectationComputeTask call() { final double[] modelDistribution = new double[numOutcomes]; for (int ei = startIndex; ei < startIndex + length; ei++) { // TODO: check interruption status here, if interrupted set a poisoned flag and return if (values != null) { prior.logPrior(modelDistribution, contexts[ei], values[ei]); GISModel.eval(contexts[ei], values[ei], modelDistribution, evalParams); } else { prior.logPrior(modelDistribution, contexts[ei]); GISModel.eval(contexts[ei], modelDistribution, evalParams); } for (int j = 0; j < contexts[ei].length; j++) { int pi = contexts[ei][j]; int[] activeOutcomes = modelExpects[threadIndex][pi].getOutcomes(); for (int aoi = 0; aoi < activeOutcomes.length; aoi++) { int oi = activeOutcomes[aoi]; // numTimesEventsSeen must also be thread safe if (values != null && values[ei] != null) { modelExpects[threadIndex][pi].updateParameter(aoi, modelDistribution[oi] * values[ei][j] * numTimesEventsSeen[ei]); } else { modelExpects[threadIndex][pi].updateParameter(aoi, modelDistribution[oi] * numTimesEventsSeen[ei]); } } } loglikelihood += StrictMath.log(modelDistribution[outcomeList[ei]]) * numTimesEventsSeen[ei]; numEvents += numTimesEventsSeen[ei]; int max = ArrayMath.argmax(modelDistribution); if (max == outcomeList[ei]) { numCorrect += numTimesEventsSeen[ei]; } } return this; } synchronized int getNumEvents() { return numEvents; } synchronized int getNumCorrect() { return numCorrect; } synchronized double getLoglikelihood() { return loglikelihood; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_maxent_RealBas0100644 0000000 0000000 00000000160 14523004075 032521 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/RealBasicEventStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/RealBasicEventStream.ja0100644 0000000 0000000 00000004326 14523004075 034045 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent; import java.io.IOException; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.RealValueFileEventStream; import opennlp.tools.util.ObjectStream; /** * Class for real-valued {@link Event events} as an * {@link ObjectStream event stream}. * . * @see Event * @see ObjectStream */ public class RealBasicEventStream implements ObjectStream { private final ObjectStream ds; public RealBasicEventStream(ObjectStream ds) { this.ds = ds; } /** * {@inheritDoc} * * @throws IOException Thrown if there is an error during reading. * @throws RuntimeException Thrown if negative real values are detected in the input data. */ @Override public Event read() throws IOException { String eventString = ds.read(); if (eventString != null) { return createEvent(eventString); } return null; } private Event createEvent(String obs) { int si = obs.indexOf(' '); if (si == -1) return null; else { String outcome = obs.substring(0, si); String[] contexts = obs.substring(si + 1).split("\\s+"); float[] values = RealValueFileEventStream.parseContexts(contexts); return new Event(outcome,contexts,values); } } @Override public void reset() throws IOException, UnsupportedOperationException { ds.reset(); } @Override public void close() throws IOException { ds.close(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_maxent_io_Bina0100644 0000000 0000000 00000000163 14523004075 032553 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/BinaryGISModelReader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/BinaryGISModelReader0100644 0000000 0000000 00000002626 14523004075 033754 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.io; import java.io.DataInputStream; import opennlp.tools.ml.model.BinaryFileDataReader; /** * A {@link GISModelReader} that reads models from a binary format. */ public class BinaryGISModelReader extends GISModelReader { /** * Instantiates {@link BinaryGISModelReader} via a {@link DataInputStream} * containing the model contents. * * @param dis The {@link DataInputStream} containing the model information. * It must be open and have bytes available. */ public BinaryGISModelReader(DataInputStream dis) { super(new BinaryFileDataReader(dis)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_maxent_io_Bina0100644 0000000 0000000 00000000163 14523004075 032553 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/BinaryGISModelWriter.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/BinaryGISModelWriter0100644 0000000 0000000 00000006204 14523004075 034022 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.io; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.GZIPOutputStream; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.ModelParameterChunker; /** * A {@link GISModelWriter} that writes models in a binary format. * * @see opennlp.tools.ml.maxent.GISModel */ public class BinaryGISModelWriter extends GISModelWriter { private final DataOutputStream output; /** * Instantiates {@link BinaryGISModelWriter} via an * {@link AbstractModel GIS model} and a {@link File}. *

* Prepares writing of a {@code model} to the file. * Based on whether the file's suffix contains {@code .gz}, it detects whether * the file is gzipped or not. * * @param model The {@link AbstractModel GIS model} which is to be persisted. * @param f The {@link File} in which the model is to be persisted. * * @throws IOException Thrown if IO errors occurred. * @see opennlp.tools.ml.maxent.GISModel */ public BinaryGISModelWriter(AbstractModel model, File f) throws IOException { super(model); if (f.getName().endsWith(".gz")) { output = new DataOutputStream(new GZIPOutputStream( new FileOutputStream(f))); } else { output = new DataOutputStream(new FileOutputStream(f)); } } /** * Instantiates {@link BinaryGISModelWriter} via * an {@link AbstractModel GIS model} and a {@link DataOutputStream}. * * @param model The {@link AbstractModel GIS model} which is to be persisted. * @param dos The {@link DataOutputStream} which is used to persist the {@code model}. * The {@code dos} must be opened. */ public BinaryGISModelWriter(AbstractModel model, DataOutputStream dos) { super(model); output = dos; } /** * {@inheritDoc} */ @Override public void writeUTF(String s) throws java.io.IOException { ModelParameterChunker.writeUTF(output, s); } /** * {@inheritDoc} */ @Override public void writeInt(int i) throws java.io.IOException { output.writeInt(i); } /** * {@inheritDoc} */ @Override public void writeDouble(double d) throws java.io.IOException { output.writeDouble(d); } @Override public void close() throws java.io.IOException { output.flush(); output.close(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_maxent_io_Bina0100644 0000000 0000000 00000000162 14523004075 032552 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/BinaryQNModelReader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/BinaryQNModelReader.0100644 0000000 0000000 00000002617 14523004075 033726 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.io; import java.io.DataInputStream; import opennlp.tools.ml.model.BinaryFileDataReader; /** * A {@link QNModelReader} that reads models from a binary format. */ public class BinaryQNModelReader extends QNModelReader { /** * Instantiates {@link BinaryQNModelReader} via a {@link DataInputStream} * containing the model contents. * * @param dis The {@link DataInputStream} containing the model information. * It must be open and have bytes available. */ public BinaryQNModelReader(DataInputStream dis) { super(new BinaryFileDataReader(dis)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_maxent_io_Bina0100644 0000000 0000000 00000000162 14523004075 032552 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/BinaryQNModelWriter.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/BinaryQNModelWriter.0100644 0000000 0000000 00000006263 14523004075 034001 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.io; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.GZIPOutputStream; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.ModelParameterChunker; /** * A {@link QNModelWriter} that writes models in a binary format. * * @see opennlp.tools.ml.maxent.quasinewton.QNModel */ public class BinaryQNModelWriter extends QNModelWriter { protected DataOutputStream output; /** * Instantiates {@link BinaryQNModelWriter} via an * {@link AbstractModel QN model} and a {@link File}. *

* Prepares writing of a {@code model} to the file. * Based on whether the file's suffix contains {@code .gz}, it detects whether * the file is gzipped or not. * * @param model The {@link AbstractModel QN model} which is to be persisted. * @param f The {@link File} in which the model is to be persisted. * * @throws IOException Thrown if IO errors occurred. * @see opennlp.tools.ml.maxent.quasinewton.QNModel */ public BinaryQNModelWriter(AbstractModel model, File f) throws IOException { super(model); if (f.getName().endsWith(".gz")) { output = new DataOutputStream(new GZIPOutputStream(new FileOutputStream(f))); } else { output = new DataOutputStream(new FileOutputStream(f)); } } /** * Instantiates {@link BinaryQNModelWriter} via * an {@link AbstractModel QN model} and a {@link DataOutputStream}. * * @param model The {@link AbstractModel QN model} which is to be persisted. * @param dos The {@link DataOutputStream} which is used to persist the {@code model}. * The {@code dos} must be opened. * @see opennlp.tools.ml.maxent.quasinewton.QNModel */ public BinaryQNModelWriter(AbstractModel model, DataOutputStream dos) { super(model); output = dos; } /** * {@inheritDoc} */ @Override public void writeUTF(String s) throws IOException { ModelParameterChunker.writeUTF(output, s); } /** * {@inheritDoc} */ @Override public void writeInt(int i) throws IOException { output.writeInt(i); } /** * {@inheritDoc} */ @Override public void writeDouble(double d) throws IOException { output.writeDouble(d); } /** * {@inheritDoc} */ @Override public void close() throws IOException { output.flush(); output.close(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/GISModelReader.java0100644 0000000 0000000 00000007237 14523004075 033532 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.io; import java.io.File; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.ml.maxent.GISModel; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.AbstractModelReader; import opennlp.tools.ml.model.Context; import opennlp.tools.ml.model.DataReader; /** * The base class for readers of {@link GISModel GIS models}. *

* Format for the GIS maxent info (.mei) files: *

*
GIS (model type identifier) *
1. # of parameters ({@code int}) *
2. the correction constant ({@code int}) *
3. the correction constant parameter ({@code double}) *
4. # of outcomes ({@code int}) *
* list of outcome names ({@code String}) *
5. # of different types of outcome patterns ({@code int}) *
* list of ({@code int} {@code int[]}) *
[# of predicates for which outcome pattern is true] [outcome pattern] *
6. # of predicates ({@code int}) *
* list of predicate names ({@code String}) * * @see GISModel * @see AbstractModelReader */ public class GISModelReader extends AbstractModelReader { private static final Logger logger = LoggerFactory.getLogger(GISModelReader.class); /** * Initializes a {@link GISModelReader} via a {@link File}. * * @param file The {@link File} that references the model to be read. * * @throws IOException Thrown if IO errors occurred. */ public GISModelReader(File file) throws IOException { super(file); } /** * Initializes a {@link GISModelReader} via a {@link DataReader}. * * @param dataReader The {@link DataReader} that references the model to be read. */ public GISModelReader(DataReader dataReader) { super(dataReader); } /** * Retrieves a model from disk. * *

* If you are creating a reader for a format which won't work with this * (perhaps a database or xml file), override this method and ignore the other * methods provided in this abstract class. * * @return The {@link GISModel} stored in the format and location specified to this * {@link GISModelReader} (usually via its constructor). */ @Override public AbstractModel constructModel() throws IOException { // read correction constant (not used anymore) readInt(); // read correction params (not used anymore) readDouble(); String[] outcomeLabels = getOutcomes(); int[][] outcomePatterns = getOutcomePatterns(); String[] predLabels = getPredicates(); Context[] params = getParameters(outcomePatterns); return new GISModel(params, predLabels, outcomeLabels); } @Override public void checkModelType() throws java.io.IOException { String modelType = readUTF(); if (!modelType.equals("GIS")) logger.error("Attempting to load a {}" + " model as a GIS model. You should expect problems.", modelType); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/GISModelWriter.java0100644 0000000 0000000 00000011632 14523004075 033576 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.io; import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.Map; import opennlp.tools.ml.AbstractMLModelWriter; import opennlp.tools.ml.maxent.GISModel; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.AbstractModelWriter; import opennlp.tools.ml.model.ComparablePredicate; import opennlp.tools.ml.model.Context; /** * The base class for writers of {@link GISModel GIS models}. *

* It provides the {@link #persist()} method which takes care of the structure of a * stored document, and requires an extending class to define precisely how * the data should be stored. * * @see GISModel * @see AbstractModelWriter * @see AbstractMLModelWriter */ public abstract class GISModelWriter extends AbstractMLModelWriter { /** * Initializes a {@link GISModelWriter} for a {@link AbstractModel GIS model}. * * @param model The {@link AbstractModel GIS model} to be written. */ public GISModelWriter(AbstractModel model) { Object[] data = model.getDataStructures(); @SuppressWarnings("unchecked") Map pmap = (Map) data[1]; OUTCOME_LABELS = (String[]) data[2]; PARAMS = new Context[pmap.size()]; PRED_LABELS = new String[pmap.size()]; int i = 0; for (Map.Entry pred : pmap.entrySet()) { PRED_LABELS[i] = pred.getKey(); PARAMS[i] = pred.getValue(); i++; } } /** * {@inheritDoc} */ @Override protected ComparablePredicate[] sortValues() { ComparablePredicate[] sortPreds = new ComparablePredicate[PARAMS.length]; int numParams = 0; for (int pid = 0; pid < PARAMS.length; pid++) { int[] predkeys = PARAMS[pid].getOutcomes(); // Arrays.sort(predkeys); int numActive = predkeys.length; double[] activeParams = PARAMS[pid].getParameters(); numParams += numActive; /* * double[] activeParams = new double[numActive]; * * int id = 0; for (int i=0; i < predkeys.length; i++) { int oid = * predkeys[i]; activeOutcomes[id] = oid; activeParams[id] = * PARAMS[pid].getParams(oid); id++; } */ sortPreds[pid] = new ComparablePredicate(PRED_LABELS[pid], predkeys, activeParams); } Arrays.sort(sortPreds); return sortPreds; } /** * Writes the {@link AbstractModel GIS model}, using the * {@link #writeUTF(String)}, {@link #writeDouble(double)}, or {@link #writeInt(int)}} * methods implemented by extending classes. * *

If you wish to create a {@link GISModelWriter} which uses a different * structure, it will be necessary to override the {@link #persist()} method in * addition to implementing the {@code writeX(..)} methods. * * @throws IOException Thrown if IO errors occurred. */ @Override public void persist() throws IOException { // the type of model (GIS) writeUTF("GIS"); // the value of the correction constant (not used anymore) writeInt(1); // the value of the correction params (not used anymore) writeDouble(1); // the mapping from outcomes to their integer indexes writeInt(OUTCOME_LABELS.length); for (String OUTCOME_LABEL : OUTCOME_LABELS) { writeUTF(OUTCOME_LABEL); } // the mapping from predicates to the outcomes they contributed to. // The sorting is done so that we actually can write this out more // compactly than as the entire list. ComparablePredicate[] sorted = sortValues(); List> compressed = compressOutcomes(sorted); writeInt(compressed.size()); for (List aCompressed : compressed) { writeUTF(aCompressed.size() + ((List) aCompressed).get(0).toString()); } // the mapping from predicate names to their integer indexes writeInt(PARAMS.length); for (ComparablePredicate aSorted : sorted) { writeUTF(aSorted.name); } // write out the parameters for (ComparablePredicate aSorted : sorted) { for (int j = 0; j < aSorted.params.length; j++) { writeDouble(aSorted.params[j]); } } close(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/QNModelReader.java0100644 0000000 0000000 00000005472 14523004075 033425 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.io; import java.io.File; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.ml.maxent.quasinewton.QNModel; import opennlp.tools.ml.model.Context; import opennlp.tools.ml.model.DataReader; /** * The base class for readers of {@link QNModel QN models}. * * @see QNModel * @see GISModelReader */ public class QNModelReader extends GISModelReader { private static final Logger logger = LoggerFactory.getLogger(QNModelReader.class); /** * Initializes a {@link QNModelReader} via a {@link DataReader}. * * @param dataReader The {@link DataReader} that references the model to be read. */ public QNModelReader(DataReader dataReader) { super(dataReader); } /** * Initializes a {@link QNModelReader} via a {@link File}. * * @param file The {@link File} that references the model to be read. * * @throws IOException Thrown if IO errors occurred. */ public QNModelReader(File file) throws IOException { super(file); } @Override public void checkModelType() throws IOException { String modelType = readUTF(); if (!modelType.equals("QN")) logger.error("Attempting to load a {}" + " model as a MAXENT_QN model. You should expect problems.", modelType); } /** * Retrieves a model from disk. * *

* If you are creating a reader for a format which won't work with this * (perhaps a database or xml file), override this method and ignore the other * methods provided in this abstract class. * * @return The {@link QNModel} stored in the format and location specified to this * {@link QNModelReader} (usually via its constructor). */ @Override public QNModel constructModel() throws IOException { String[] outcomeLabels = getOutcomes(); int[][] outcomePatterns = getOutcomePatterns(); String[] predLabels = getPredicates(); Context[] params = getParameters(outcomePatterns); return new QNModel(params, predLabels, outcomeLabels); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/QNModelWriter.java0100644 0000000 0000000 00000005756 14523004075 033504 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.io; import java.io.IOException; import java.util.List; import opennlp.tools.ml.maxent.quasinewton.QNModel; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.ComparablePredicate; /** * The base class for writers of {@link QNModel models}. *

* It provides the {@link #persist()} method which takes care of the structure of a * stored document, and requires an extending class to define precisely how * the data should be stored. */ public abstract class QNModelWriter extends GISModelWriter { public QNModelWriter(AbstractModel model) { super(model); } /** * Writes the {@link AbstractModel QN model}, using the * {@link #writeUTF(String)}, {@link #writeDouble(double)}, or {@link #writeInt(int)}} * methods implemented by extending classes. * *

If you wish to create a {@link QNModelWriter} which uses a different * structure, it will be necessary to override the {@code #persist()} method in * addition to implementing the {@code writeX(..)} methods. * * @throws IOException Thrown if IO errors occurred. */ @Override public void persist() throws IOException { // the type of model (QN) writeUTF("QN"); // the mapping from outcomes to their integer indexes writeInt(OUTCOME_LABELS.length); for (String outcomeLabel : OUTCOME_LABELS) writeUTF(outcomeLabel); // the mapping from predicates to the outcomes they contributed to. // The sorting is done so that we actually can write this out more // compactly than as the entire list. ComparablePredicate[] sorted = sortValues(); List> compressed = compressOutcomes(sorted); writeInt(compressed.size()); for (List a : compressed) { writeUTF(a.size() + a.get(0).toString()); } // the mapping from predicate names to their integer indexes writeInt(PARAMS.length); for (ComparablePredicate predicate : sorted) writeUTF(predicate.name); // write out the parameters for (ComparablePredicate comparablePredicate : sorted) for (int j = 0; j < comparablePredicate.params.length; j++) writeDouble(comparablePredicate.params[j]); close(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/package-info.java0100644 0000000 0000000 00000001714 14523004075 033322 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package related to the I/O functionality of the maxent package including reading * and writing models in several formats. */ package opennlp.tools.ml.maxent.io; apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/package.html0100644 0000000 0000000 00000002032 14523004075 032406 0ustar00rootroot0000000 0000000 Provides the I/O functionality of the maxent package including reading and writing models in several formats. apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/package-info.java0100644 0000000 0000000 00000001624 14523004075 032713 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package related to ML by means of the Maximum Entropy (ME) algorithm. */ package opennlp.tools.ml.maxent; apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/package.html0100644 0000000 0000000 00000002041 14523004075 031777 0ustar00rootroot0000000 0000000 Provides main functionality of the maxent package including data structures and algorithms for parameter estimation. ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_maxent_quasine0100644 0000000 0000000 00000000160 14523004075 032655 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/Function.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/Function.ja0100644 0000000 0000000 00000001755 14523004075 034207 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.quasinewton; /** * Interface for a function. */ public interface Function { int getDimension(); double valueAt(double[] x); double[] gradientAt(double[] x); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_maxent_quasine0100644 0000000 0000000 00000000162 14523004075 032657 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/LineSearch.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/LineSearch.0100644 0000000 0000000 00000024207 14523004075 034121 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.quasinewton; import opennlp.tools.ml.ArrayMath; /** * Class that performs line search to find minimum. */ public class LineSearch { private static final double C = 0.0001; private static final double RHO = 0.5; // decrease of step size (must be from 0 to 1) /** * Conducts a backtracking line search (see Nocedal & Wright 2006, Numerical Optimization, p. 37). */ public static void doLineSearch(Function function, double[] direction, LineSearchResult lsr, double initialStepSize) { double stepSize = initialStepSize; int currFctEvalCount = lsr.getFctEvalCount(); double[] x = lsr.getNextPoint(); double[] gradAtX = lsr.getGradAtNext(); double valueAtX = lsr.getValueAtNext(); int dimension = x.length; // Retrieve current points and gradient for array reuse purpose double[] nextPoint = lsr.getCurrPoint(); double[] gradAtNextPoint = lsr.getGradAtCurr(); double valueAtNextPoint; double dirGradientAtX = ArrayMath.innerProduct(direction, gradAtX); // To avoid recomputing in the loop double cachedProd = C * dirGradientAtX; while (true) { // Get next point for (int i = 0; i < dimension; i++) { nextPoint[i] = x[i] + direction[i] * stepSize; } // New value valueAtNextPoint = function.valueAt(nextPoint); currFctEvalCount++; // Check Armijo condition if (valueAtNextPoint <= valueAtX + cachedProd * stepSize) break; // Shrink step size stepSize *= RHO; } // Compute and save gradient at the new point System.arraycopy(function.gradientAt(nextPoint), 0, gradAtNextPoint, 0, gradAtNextPoint.length); // Update line search result lsr.setAll(stepSize, valueAtX, valueAtNextPoint, gradAtX, gradAtNextPoint, x, nextPoint, currFctEvalCount); } /** * Conducts a constrained line search (see section 3.2 in the paper "Scalable Training * of L1-Regularized Log-Linear Models", Andrew et al. 2007) */ public static void doConstrainedLineSearch(Function function, double[] direction, LineSearchResult lsr, double l1Cost, double initialStepSize) { double stepSize = initialStepSize; int currFctEvalCount = lsr.getFctEvalCount(); double[] x = lsr.getNextPoint(); double[] signX = lsr.getSignVector(); // existing sign vector double[] gradAtX = lsr.getGradAtNext(); double[] pseudoGradAtX = lsr.getPseudoGradAtNext(); double valueAtX = lsr.getValueAtNext(); int dimension = x.length; // Retrieve current points and gradient for array reuse purpose double[] nextPoint = lsr.getCurrPoint(); double[] gradAtNextPoint = lsr.getGradAtCurr(); double valueAtNextPoint; double dirGradientAtX; // New sign vector for (int i = 0; i < dimension; i++) { signX[i] = x[i] == 0 ? -pseudoGradAtX[i] : x[i]; } while (true) { // Get next point for (int i = 0; i < dimension; i++) { nextPoint[i] = x[i] + direction[i] * stepSize; } // Projection for (int i = 0; i < dimension; i++) { if (nextPoint[i] * signX[i] <= 0) nextPoint[i] = 0; } // New value valueAtNextPoint = function.valueAt(nextPoint) + l1Cost * ArrayMath.l1norm(nextPoint); currFctEvalCount++; dirGradientAtX = 0; for (int i = 0; i < dimension; i++) { dirGradientAtX += (nextPoint[i] - x[i]) * pseudoGradAtX[i]; } // Check the sufficient decrease condition if (valueAtNextPoint <= valueAtX + C * dirGradientAtX) break; // Shrink step size stepSize *= RHO; } // Compute and save gradient at the new point System.arraycopy(function.gradientAt(nextPoint), 0, gradAtNextPoint, 0, gradAtNextPoint.length); // Update line search result lsr.setAll(stepSize, valueAtX, valueAtNextPoint, gradAtX, gradAtNextPoint, pseudoGradAtX, x, nextPoint, signX, currFctEvalCount); } // ------------------------------------------------------------------------------------- // /** * Represents a LineSearch result. */ public static class LineSearchResult { private int fctEvalCount; private double stepSize; private double valueAtCurr; private double valueAtNext; private double[] gradAtCurr; private double[] gradAtNext; private double[] pseudoGradAtNext; private double[] currPoint; private double[] nextPoint; private double[] signVector; /** * Constructor */ public LineSearchResult( double stepSize, double valueAtCurr, double valueAtNext, double[] gradAtCurr, double[] gradAtNext, double[] currPoint, double[] nextPoint, int fctEvalCount) { setAll(stepSize, valueAtCurr, valueAtNext, gradAtCurr, gradAtNext, currPoint, nextPoint, fctEvalCount); } /** * Constructor with sign vector */ public LineSearchResult( double stepSize, double valueAtCurr, double valueAtNext, double[] gradAtCurr, double[] gradAtNext, double[] pseudoGradAtNext, double[] currPoint, double[] nextPoint, double[] signVector, int fctEvalCount) { setAll(stepSize, valueAtCurr, valueAtNext, gradAtCurr, gradAtNext, pseudoGradAtNext, currPoint, nextPoint, signVector, fctEvalCount); } /** * Update line search elements */ public void setAll( double stepSize, double valueAtCurr, double valueAtNext, double[] gradAtCurr, double[] gradAtNext, double[] currPoint, double[] nextPoint, int fctEvalCount) { setAll(stepSize, valueAtCurr, valueAtNext, gradAtCurr, gradAtNext, null, currPoint, nextPoint, null, fctEvalCount); } /** * Update line search elements */ public void setAll( double stepSize, double valueAtCurr, double valueAtNext, double[] gradAtCurr, double[] gradAtNext, double[] pseudoGradAtNext, double[] currPoint, double[] nextPoint, double[] signVector, int fctEvalCount) { this.stepSize = stepSize; this.valueAtCurr = valueAtCurr; this.valueAtNext = valueAtNext; this.gradAtCurr = gradAtCurr; this.gradAtNext = gradAtNext; this.pseudoGradAtNext = pseudoGradAtNext; this.currPoint = currPoint; this.nextPoint = nextPoint; this.signVector = signVector; this.fctEvalCount = fctEvalCount; } public double getFuncChangeRate() { return (valueAtCurr - valueAtNext) / valueAtCurr; } public double getStepSize() { return stepSize; } public void setStepSize(double stepSize) { this.stepSize = stepSize; } public double getValueAtCurr() { return valueAtCurr; } public void setValueAtCurr(double valueAtCurr) { this.valueAtCurr = valueAtCurr; } public double getValueAtNext() { return valueAtNext; } public void setValueAtNext(double valueAtNext) { this.valueAtNext = valueAtNext; } public double[] getGradAtCurr() { return gradAtCurr; } public void setGradAtCurr(double[] gradAtCurr) { this.gradAtCurr = gradAtCurr; } public double[] getGradAtNext() { return gradAtNext; } public void setGradAtNext(double[] gradAtNext) { this.gradAtNext = gradAtNext; } public double[] getPseudoGradAtNext() { return pseudoGradAtNext; } public void setPseudoGradAtNext(double[] pseudoGradAtNext) { this.pseudoGradAtNext = pseudoGradAtNext; } public double[] getCurrPoint() { return currPoint; } public void setCurrPoint(double[] currPoint) { this.currPoint = currPoint; } public double[] getNextPoint() { return nextPoint; } public void setNextPoint(double[] nextPoint) { this.nextPoint = nextPoint; } public double[] getSignVector() { return signVector; } public void setSignVector(double[] signVector) { this.signVector = signVector; } public int getFctEvalCount() { return fctEvalCount; } public void setFctEvalCount(int fctEvalCount) { this.fctEvalCount = fctEvalCount; } /** * Initial linear search object. */ public static LineSearchResult getInitialObject( double valueAtX, double[] gradAtX, double[] x) { return getInitialObject(valueAtX, gradAtX, null, x, null, 0); } /** * Initial linear search object for L1-regularization. */ public static LineSearchResult getInitialObjectForL1( double valueAtX, double[] gradAtX, double[] pseudoGradAtX, double[] x) { return getInitialObject(valueAtX, gradAtX, pseudoGradAtX, x, new double[x.length], 0); } public static LineSearchResult getInitialObject( double valueAtX, double[] gradAtX, double[] pseudoGradAtX, double[] x, double[] signX, int fctEvalCount) { return new LineSearchResult(0.0, 0.0, valueAtX, new double[x.length], gradAtX, pseudoGradAtX, new double[x.length], x, signX, fctEvalCount); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_maxent_quasine0100644 0000000 0000000 00000000170 14523004075 032656 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/NegLogLikelihood.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/NegLogLikel0100644 0000000 0000000 00000012554 14523004075 034164 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.quasinewton; import java.util.Arrays; import opennlp.tools.ml.ArrayMath; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.OnePassRealValueDataIndexer; /** * Evaluate negative log-likelihood and its gradient from {@link DataIndexer}. */ public class NegLogLikelihood implements Function { protected final int dimension; protected final int numOutcomes; protected final int numFeatures; protected final int numContexts; // Information from data index protected final float[][] values; protected final int[][] contexts; protected final int[] outcomeList; protected final int[] numTimesEventsSeen; // For calculating negLogLikelihood and gradient protected final double[] tempSums; protected final double[] expectation; protected final double[] gradient; /** * @param indexer The {@link DataIndexer} to use as input provider. */ public NegLogLikelihood(DataIndexer indexer) { // Get data from indexer. if (indexer instanceof OnePassRealValueDataIndexer) { this.values = indexer.getValues(); } else { this.values = null; } this.contexts = indexer.getContexts(); this.outcomeList = indexer.getOutcomeList(); this.numTimesEventsSeen = indexer.getNumTimesEventsSeen(); this.numOutcomes = indexer.getOutcomeLabels().length; this.numFeatures = indexer.getPredLabels().length; this.numContexts = this.contexts.length; this.dimension = numOutcomes * numFeatures; this.expectation = new double[numOutcomes]; this.tempSums = new double[numOutcomes]; this.gradient = new double[dimension]; } /** * @return Retrieves the dimension value. */ @Override public int getDimension() { return this.dimension; } /** * @return Retrieves the initial point as {@code double} array. */ public double[] getInitialPoint() { return new double[dimension]; } /** * Computes the negative log-likelihood. * * @param x The input. * @return Returns the computed negative log-likelihood. * @throws IllegalArgumentException Thrown if parameters were invalid. */ @Override public double valueAt(double[] x) { if (x.length != dimension) throw new IllegalArgumentException( "x is invalid, its dimension is not equal to domain dimension."); int ci, oi, ai, vectorIndex, outcome; double predValue, logSumOfExps; double negLogLikelihood = 0; for (ci = 0; ci < numContexts; ci++) { for (oi = 0; oi < numOutcomes; oi++) { tempSums[oi] = 0; for (ai = 0; ai < contexts[ci].length; ai++) { vectorIndex = indexOf(oi, contexts[ci][ai]); predValue = values != null ? values[ci][ai] : 1.0; tempSums[oi] += predValue * x[vectorIndex]; } } logSumOfExps = ArrayMath.logSumOfExps(tempSums); outcome = outcomeList[ci]; negLogLikelihood -= (tempSums[outcome] - logSumOfExps) * numTimesEventsSeen[ci]; } return negLogLikelihood; } /** * Computes the gradient. * * @param x The input. * @return Returns the computed gradient. * @throws IllegalArgumentException Thrown if parameters were invalid. */ @Override public double[] gradientAt(double[] x) { if (x.length != dimension) throw new IllegalArgumentException( "x is invalid, its dimension is not equal to the function."); int ci, oi, ai, vectorIndex; double predValue, logSumOfExps; int empirical; // Reset gradient Arrays.fill(gradient, 0); for (ci = 0; ci < numContexts; ci++) { for (oi = 0; oi < numOutcomes; oi++) { expectation[oi] = 0; for (ai = 0; ai < contexts[ci].length; ai++) { vectorIndex = indexOf(oi, contexts[ci][ai]); predValue = values != null ? values[ci][ai] : 1.0; expectation[oi] += predValue * x[vectorIndex]; } } logSumOfExps = ArrayMath.logSumOfExps(expectation); for (oi = 0; oi < numOutcomes; oi++) { expectation[oi] = StrictMath.exp(expectation[oi] - logSumOfExps); } for (oi = 0; oi < numOutcomes; oi++) { empirical = outcomeList[ci] == oi ? 1 : 0; for (ai = 0; ai < contexts[ci].length; ai++) { vectorIndex = indexOf(oi, contexts[ci][ai]); predValue = values != null ? values[ci][ai] : 1.0; gradient[vectorIndex] += predValue * (expectation[oi] - empirical) * numTimesEventsSeen[ci]; } } } return gradient; } protected int indexOf(int outcomeId, int featureId) { return outcomeId * numFeatures + featureId; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_maxent_quasine0100644 0000000 0000000 00000000200 14523004075 032650 xustar000000000 0000000 128 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/ParallelNegLogLikelihood.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/ParallelNeg0100644 0000000 0000000 00000020430 14523004075 034206 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.quasinewton; import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.ml.ArrayMath; import opennlp.tools.ml.model.DataIndexer; /** * Evaluate negative log-likelihood and its gradient in parallel */ public class ParallelNegLogLikelihood extends NegLogLikelihood { private static final Logger logger = LoggerFactory.getLogger(ParallelNegLogLikelihood.class); // Number of threads private final int threads; // Partial value of negative log-likelihood to be computed by each thread private final double[] negLogLikelihoodThread; // Partial gradient private final double[][] gradientThread; /** * @param indexer The {@link DataIndexer} to use as input provider. * @param threads The number of thread to compute with in parallel. * Must be greater than {@code 0}. * @throws IllegalArgumentException Thrown if parameters were invalid. */ public ParallelNegLogLikelihood(DataIndexer indexer, int threads) { super(indexer); if (threads <= 0) throw new IllegalArgumentException( "Number of threads must 1 or larger"); this.threads = threads; this.negLogLikelihoodThread = new double[threads]; this.gradientThread = new double[threads][dimension]; } /** * Computes the negative log-likelihood. * * @param x The input. * @return Returns the computed negative log-likelihood. * @throws IllegalArgumentException Thrown if parameters were invalid. */ @Override public double valueAt(double[] x) { if (x.length != dimension) throw new IllegalArgumentException( "x is invalid, its dimension is not equal to domain dimension."); // Compute partial value of negative log-likelihood in each thread computeInParallel(x, NegLLComputeTask.class); double negLogLikelihood = 0; for (int t = 0; t < threads; t++) { negLogLikelihood += negLogLikelihoodThread[t]; } return negLogLikelihood; } /** * Computes the gradient. * * @param x The input. * @return Returns the computed gradient. * @throws IllegalArgumentException Thrown if parameters were invalid. */ @Override public double[] gradientAt(double[] x) { if (x.length != dimension) throw new IllegalArgumentException( "x is invalid, its dimension is not equal to the function."); // Compute partial gradient in each thread computeInParallel(x, GradientComputeTask.class); // Accumulate gradient for (int i = 0; i < dimension; i++) { gradient[i] = 0; for (int t = 0; t < threads; t++) { gradient[i] += gradientThread[t][i]; } } return gradient; } /** * Computes the specified tasks in parallel. */ private void computeInParallel(double[] x, Class taskClass) { ExecutorService executor = Executors.newFixedThreadPool(threads, runnable -> { Thread thread = new Thread(runnable); thread.setName( "opennlp.tools.ml.maxent.quasinewton.ParallelNegLogLikelihood.computeInParallel()"); thread.setDaemon(true); return thread; }); int taskSize = numContexts / threads; int leftOver = numContexts % threads; try { Constructor cons = taskClass.getConstructor( ParallelNegLogLikelihood.class, int.class, int.class, int.class, double[].class); List> futures = new ArrayList<>(); for (int i = 0; i < threads; i++) { if (i != threads - 1) futures.add(executor.submit( cons.newInstance(this, i, i * taskSize, taskSize, x))); else futures.add(executor.submit( cons.newInstance(this, i, i * taskSize, taskSize + leftOver, x))); } for (Future future: futures) future.get(); } catch (Exception e) { logger.error(e.getLocalizedMessage(), e); } executor.shutdown(); } /** * A {@link ComputeTask} that is computed in parallel. */ static abstract class ComputeTask implements Callable { final int threadIndex; // Start index of contexts to compute final int startIndex; // Number of contexts to compute final int length; final double[] x; public ComputeTask(int threadIndex, int startIndex, int length, double[] x) { this.threadIndex = threadIndex; this.startIndex = startIndex; this.length = length; this.x = x; } } /** * A {@link ComputeTask} for computing partial value of negative log-likelihood. */ class NegLLComputeTask extends ComputeTask { final double[] tempSums; public NegLLComputeTask(int threadIndex, int startIndex, int length, double[] x) { super(threadIndex, startIndex, length, x); this.tempSums = new double[numOutcomes]; } @Override public NegLLComputeTask call() { int ci, oi, ai, vectorIndex, outcome; double predValue, logSumOfExps; negLogLikelihoodThread[threadIndex] = 0; for (ci = startIndex; ci < startIndex + length; ci++) { for (oi = 0; oi < numOutcomes; oi++) { tempSums[oi] = 0; for (ai = 0; ai < contexts[ci].length; ai++) { vectorIndex = indexOf(oi, contexts[ci][ai]); predValue = values != null ? values[ci][ai] : 1.0; tempSums[oi] += predValue * x[vectorIndex]; } } logSumOfExps = ArrayMath.logSumOfExps(tempSums); outcome = outcomeList[ci]; negLogLikelihoodThread[threadIndex] -= (tempSums[outcome] - logSumOfExps) * numTimesEventsSeen[ci]; } return this; } } /** * A {@link ComputeTask} for computing partial gradient. */ class GradientComputeTask extends ComputeTask { final double[] expectation; public GradientComputeTask(int threadIndex, int startIndex, int length, double[] x) { super(threadIndex, startIndex, length, x); this.expectation = new double[numOutcomes]; } @Override public GradientComputeTask call() { int ci, oi, ai, vectorIndex; double predValue, logSumOfExps; int empirical; // Reset gradientThread Arrays.fill(gradientThread[threadIndex], 0); for (ci = startIndex; ci < startIndex + length; ci++) { for (oi = 0; oi < numOutcomes; oi++) { expectation[oi] = 0; for (ai = 0; ai < contexts[ci].length; ai++) { vectorIndex = indexOf(oi, contexts[ci][ai]); predValue = values != null ? values[ci][ai] : 1.0; expectation[oi] += predValue * x[vectorIndex]; } } logSumOfExps = ArrayMath.logSumOfExps(expectation); for (oi = 0; oi < numOutcomes; oi++) { expectation[oi] = StrictMath.exp(expectation[oi] - logSumOfExps); } for (oi = 0; oi < numOutcomes; oi++) { empirical = outcomeList[ci] == oi ? 1 : 0; for (ai = 0; ai < contexts[ci].length; ai++) { vectorIndex = indexOf(oi, contexts[ci][ai]); predValue = values != null ? values[ci][ai] : 1.0; gradientThread[threadIndex][vectorIndex] += predValue * (expectation[oi] - empirical) * numTimesEventsSeen[ci]; } } } return this; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_maxent_quasine0100644 0000000 0000000 00000000163 14523004075 032660 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/QNMinimizer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/QNMinimizer0100644 0000000 0000000 00000037251 14523004075 034233 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.quasinewton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.ml.ArrayMath; import opennlp.tools.ml.maxent.quasinewton.LineSearch.LineSearchResult; /** * Implementation of L-BFGS which supports L1-, L2-regularization * and Elastic Net for solving convex optimization problems. * *

* Usage example: *

 *  // Quadratic function f(x) = (x-1)^2 + 10
 *  // f obtains its minimum value 10 at x = 1
 *  Function f = new Function() {
 *
 *    {@literal @}Override
 *    public int getDimension() {
 *      return 1;
 *    }
 *
 *    {@literal @}Override
 *    public double valueAt(double[] x) {
 *      return StrictMath.pow(x[0]-1, 2) + 10;
 *    }
 *
 *    {@literal @}Override
 *    public double[] gradientAt(double[] x) {
 *      return new double[] { 2*(x[0]-1) };
 *    }
 *
 *  };
 *
 *  QNMinimizer minimizer = new QNMinimizer();
 *  double[] x = minimizer.minimize(f);
 *  double min = f.valueAt(x);
 * 
*/ public class QNMinimizer { private static final Logger logger = LoggerFactory.getLogger(QNMinimizer.class); // Function change rate tolerance public static final double CONVERGE_TOLERANCE = 1e-4; // Relative gradient norm tolerance public static final double REL_GRAD_NORM_TOL = 1e-4; // Initial step size public static final double INITIAL_STEP_SIZE = 1.0; // Minimum step size public static final double MIN_STEP_SIZE = 1e-10; // Default L1-cost public static final double L1COST_DEFAULT = 0; // Default L2-cost public static final double L2COST_DEFAULT = 0; // Default number of iterations public static final int NUM_ITERATIONS_DEFAULT = 100; // Default number of Hessian updates to store public static final int M_DEFAULT = 15; // Default maximum number of function evaluations public static final int MAX_FCT_EVAL_DEFAULT = 30000; // L1-regularization cost private final double l1Cost; // L2-regularization cost private final double l2Cost; // Maximum number of iterations private final int iterations; // Number of Hessian updates to store private final int m; // Maximum number of function evaluations private final int maxFctEval; // Objective function's dimension private int dimension; // Hessian updates private UpdateInfo updateInfo; // For evaluating quality of training parameters. // This is optional and can be omitted. private Evaluator evaluator; /** * Initializes a {@link QNMinimizer} with default parameters. */ public QNMinimizer() { this(L1COST_DEFAULT, L2COST_DEFAULT); } /** * Initializes a {@link QNMinimizer}. * * @param l1Cost The L1-regularization cost. * @param l2Cost The L2-regularization cost. */ public QNMinimizer(double l1Cost, double l2Cost) { this(l1Cost, l2Cost, NUM_ITERATIONS_DEFAULT); } /** * Initializes a {@link QNMinimizer}. * * @param l1Cost The L1-regularization cost. * @param l2Cost The L2-regularization cost. * @param iterations The maximum number of iterations. */ public QNMinimizer(double l1Cost, double l2Cost, int iterations) { this(l1Cost, l2Cost, iterations, M_DEFAULT, MAX_FCT_EVAL_DEFAULT); } /** * Initializes a {@link QNMinimizer}. * * @param l1Cost The L1-regularization cost. * @param l2Cost The L2-regularization cost. * @param iterations The maximum number of iterations. * @param m The number of Hessian updates to store. * @param maxFctEval The maximum number of function evaluations. */ public QNMinimizer(double l1Cost, double l2Cost, int iterations, int m, int maxFctEval) { // Check arguments if (l1Cost < 0 || l2Cost < 0) throw new IllegalArgumentException( "L1-cost and L2-cost must not be less than zero"); if (iterations <= 0) throw new IllegalArgumentException( "Number of iterations must be larger than zero"); if (m <= 0) throw new IllegalArgumentException( "Number of Hessian updates must be larger than zero"); if (maxFctEval <= 0) throw new IllegalArgumentException( "Maximum number of function evaluations must be larger than zero"); this.l1Cost = l1Cost; this.l2Cost = l2Cost; this.iterations = iterations; this.m = m; this.maxFctEval = maxFctEval; } public Evaluator getEvaluator() { return evaluator; } public void setEvaluator(Evaluator evaluator) { this.evaluator = evaluator; } /** * Finds the parameters that minimize the objective function. * * @param function The objective {@link Function}. * @return The minimizing parameters. */ public double[] minimize(Function function) { Function l2RegFunction = new L2RegFunction(function, l2Cost); this.dimension = l2RegFunction.getDimension(); this.updateInfo = new UpdateInfo(this.m, this.dimension); // Current point is at the origin double[] currPoint = new double[dimension]; double currValue = l2RegFunction.valueAt(currPoint); // Gradient at the current point double[] currGrad = new double[dimension]; System.arraycopy(l2RegFunction.gradientAt(currPoint), 0, currGrad, 0, dimension); // Pseudo-gradient - only use when L1-regularization is enabled double[] pseudoGrad = null; if (l1Cost > 0) { currValue += l1Cost * ArrayMath.l1norm(currPoint); pseudoGrad = new double[dimension]; computePseudoGrad(currPoint, currGrad, pseudoGrad); } LineSearchResult lsr; if (l1Cost > 0) { lsr = LineSearchResult.getInitialObjectForL1( currValue, currGrad, pseudoGrad, currPoint); } else { lsr = LineSearchResult.getInitialObject( currValue, currGrad, currPoint); } if (logger.isDebugEnabled()) { logger.debug("Solving convex optimization problem."); logger.debug("Objective function has {} variable(s).", dimension); logger.debug("Performing {} iterations with L1Cost={} and L2Cost={}", iterations, l1Cost, l2Cost); } double[] direction = new double[dimension]; long startTime = System.currentTimeMillis(); // Initial step size for the 1st iteration double initialStepSize = l1Cost > 0 ? ArrayMath.invL2norm(lsr.getPseudoGradAtNext()) : ArrayMath.invL2norm(lsr.getGradAtNext()); for (int iter = 1; iter <= iterations; iter++) { // Find direction if (l1Cost > 0) { System.arraycopy(lsr.getPseudoGradAtNext(), 0, direction, 0, direction.length); } else { System.arraycopy(lsr.getGradAtNext(), 0, direction, 0, direction.length); } computeDirection(direction); // Line search if (l1Cost > 0) { // Constrain the search direction pseudoGrad = lsr.getPseudoGradAtNext(); for (int i = 0; i < dimension; i++) { if (direction[i] * pseudoGrad[i] >= 0) { direction[i] = 0; } } LineSearch.doConstrainedLineSearch(l2RegFunction, direction, lsr, l1Cost, initialStepSize); computePseudoGrad(lsr.getNextPoint(), lsr.getGradAtNext(), pseudoGrad); lsr.setPseudoGradAtNext(pseudoGrad); } else { LineSearch.doLineSearch(l2RegFunction, direction, lsr, initialStepSize); } // Save Hessian updates updateInfo.update(lsr); if (logger.isDebugEnabled()) { if (evaluator != null) { logger.debug("{}: \t{}\t{}\t{}", iter, lsr.getValueAtNext(), lsr.getFuncChangeRate(),evaluator.evaluate(lsr.getNextPoint())); } else { logger.debug("{}: \t {}\t{}\n", iter, lsr.getValueAtNext(), lsr.getFuncChangeRate()); } } if (isConverged(lsr)) break; initialStepSize = INITIAL_STEP_SIZE; } // Undo L2-shrinkage if Elastic Net is used (since // in that case, the shrinkage is done twice) if (l1Cost > 0 && l2Cost > 0) { double[] x = lsr.getNextPoint(); for (int i = 0; i < dimension; i++) { x[i] = StrictMath.sqrt(1 + l2Cost) * x[i]; } } long endTime = System.currentTimeMillis(); long duration = endTime - startTime; logger.info("Running time: {}s\n", (duration / 1000.)); // Release memory this.updateInfo = null; System.gc(); // Avoid returning the reference to LineSearchResult's member so that GC can // collect memory occupied by lsr after this function completes (is it necessary?) double[] parameters = new double[dimension]; System.arraycopy(lsr.getNextPoint(), 0, parameters, 0, dimension); return parameters; } /** * Pseudo-gradient for L1-regularization (see equation 4 in the paper * "Scalable Training of L1-Regularized Log-Linear Models", Andrew et al. 2007) * * @param x current point * @param g gradient at x * @param pg pseudo-gradient at x which is to be computed */ private void computePseudoGrad(double[] x, double[] g, double[] pg) { for (int i = 0; i < dimension; i++) { if (x[i] < 0) { pg[i] = g[i] - l1Cost; } else if (x[i] > 0) { pg[i] = g[i] + l1Cost; } else { if (g[i] < -l1Cost) { // right partial derivative pg[i] = g[i] + l1Cost; } else if (g[i] > l1Cost) { // left partial derivative pg[i] = g[i] - l1Cost; } else { pg[i] = 0; } } } } /** * L-BFGS two-loop recursion (see Nocedal & Wright 2006, Numerical Optimization, p. 178) */ private void computeDirection(double[] direction) { // Implemented two-loop Hessian update method. int k = updateInfo.kCounter; double[] rho = updateInfo.rho; double[] alpha = updateInfo.alpha; // just to avoid recreating alpha double[][] S = updateInfo.S; double[][] Y = updateInfo.Y; // First loop for (int i = k - 1; i >= 0; i--) { alpha[i] = rho[i] * ArrayMath.innerProduct(S[i], direction); for (int j = 0; j < dimension; j++) { direction[j] = direction[j] - alpha[i] * Y[i][j]; } } // Second loop for (int i = 0; i < k; i++) { double beta = rho[i] * ArrayMath.innerProduct(Y[i], direction); for (int j = 0; j < dimension; j++) { direction[j] = direction[j] + S[i][j] * (alpha[i] - beta); } } for (int i = 0; i < dimension; i++) { direction[i] = -direction[i]; } } private boolean isConverged(LineSearchResult lsr) { // Check function's change rate if (lsr.getFuncChangeRate() < CONVERGE_TOLERANCE) { if (logger.isDebugEnabled()) logger.debug("Function change rate is smaller than the threshold {}. " + "Training will stop.", CONVERGE_TOLERANCE); return true; } // Check gradient's norm using the criteria: ||g(x)|| / max(1, ||x||) < threshold double xNorm = StrictMath.max(1, ArrayMath.l2norm(lsr.getNextPoint())); double gradNorm = l1Cost > 0 ? ArrayMath.l2norm(lsr.getPseudoGradAtNext()) : ArrayMath.l2norm(lsr.getGradAtNext()); if (gradNorm / xNorm < REL_GRAD_NORM_TOL) { if (logger.isDebugEnabled()) logger.debug("Relative L2-norm of the gradient is smaller than the threshold {}. " + "Training will stop.", REL_GRAD_NORM_TOL); return true; } // Check step size if (lsr.getStepSize() < MIN_STEP_SIZE) { if (logger.isDebugEnabled()) logger.debug("Step size is smaller than the minimum step size {}. " + "Training will stop.", MIN_STEP_SIZE); return true; } // Check number of function evaluations if (lsr.getFctEvalCount() > this.maxFctEval) { if (logger.isDebugEnabled()) logger.debug("Maximum number of function evaluations has exceeded the threshold {}. " + "Training will stop.", this.maxFctEval); return true; } return false; } /** * Class to store vectors for Hessian approximation update. */ private class UpdateInfo { private final double[][] S; private final double[][] Y; private final double[] rho; private final double[] alpha; private final int m; private int kCounter; // Constructor UpdateInfo(int numCorrection, int dimension) { this.m = numCorrection; this.kCounter = 0; S = new double[this.m][dimension]; Y = new double[this.m][dimension]; rho = new double[this.m]; alpha = new double[this.m]; } public void update(LineSearchResult lsr) { double[] currPoint = lsr.getCurrPoint(); double[] gradAtCurr = lsr.getGradAtCurr(); double[] nextPoint = lsr.getNextPoint(); double[] gradAtNext = lsr.getGradAtNext(); // Inner product of S_k and Y_k double SYk = 0.0; // Add new ones. if (kCounter < m) { for (int j = 0; j < dimension; j++) { S[kCounter][j] = nextPoint[j] - currPoint[j]; Y[kCounter][j] = gradAtNext[j] - gradAtCurr[j]; SYk += S[kCounter][j] * Y[kCounter][j]; } rho[kCounter] = 1.0 / SYk; } else { // Discard oldest vectors and add new ones. for (int i = 0; i < m - 1; i++) { S[i] = S[i + 1]; Y[i] = Y[i + 1]; rho[i] = rho[i + 1]; } for (int j = 0; j < dimension; j++) { S[m - 1][j] = nextPoint[j] - currPoint[j]; Y[m - 1][j] = gradAtNext[j] - gradAtCurr[j]; SYk += S[m - 1][j] * Y[m - 1][j]; } rho[m - 1] = 1.0 / SYk; } if (kCounter < m) kCounter++; } } /** * L2-regularized objective {@link Function}. */ public static class L2RegFunction implements Function { private final Function f; private final double l2Cost; public L2RegFunction(Function f, double l2Cost) { this.f = f; this.l2Cost = l2Cost; } @Override public int getDimension() { return f.getDimension(); } @Override public double valueAt(double[] x) { checkDimension(x); double value = f.valueAt(x); if (l2Cost > 0) { value += l2Cost * ArrayMath.innerProduct(x, x); } return value; } @Override public double[] gradientAt(double[] x) { checkDimension(x); double[] gradient = f.gradientAt(x); if (l2Cost > 0) { for (int i = 0; i < x.length; i++) { gradient[i] += 2 * l2Cost * x[i]; } } return gradient; } private void checkDimension(double[] x) { if (x.length != getDimension()) throw new IllegalArgumentException( "x's dimension is not the same as function's dimension"); } } /** * Evaluate quality of training parameters. For example, * it can be used to report model's training accuracy when * we train a Maximum Entropy classifier. */ public interface Evaluator { /** * Measure quality of the training parameters. * * @param parameters The parameters used for training. * @return The evaluated result. */ double evaluate(double[] parameters); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_maxent_quasine0100644 0000000 0000000 00000000157 14523004075 032663 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/QNModel.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/QNModel.jav0100644 0000000 0000000 00000011145 14523004075 034101 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.quasinewton; import opennlp.tools.ml.ArrayMath; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.Context; /** * A maximum entropy model which has been trained using the Quasi Newton (QN) algorithm. * * @see AbstractModel */ public class QNModel extends AbstractModel { /** * Initializes a {@link QNModel} with the specified parameters, outcome names, and * predicate/feature labels. * * @param params The {@link Context parameters} of the model. * @param predLabels The names of the predicates used in this model. * @param outcomeNames The names of the outcomes this model predicts. */ public QNModel(Context[] params, String[] predLabels, String[] outcomeNames) { super(params, predLabels, outcomeNames); this.modelType = ModelType.MaxentQn; } /** * {@inheritDoc} */ @Override public int getNumOutcomes() { return this.outcomeNames.length; } private Context getPredIndex(String predicate) { return pmap.get(predicate); } /** * {@inheritDoc} */ @Override public double[] eval(String[] context) { return eval(context, new double[evalParams.getNumOutcomes()]); } /** * {@inheritDoc} */ @Override public double[] eval(String[] context, double[] probs) { return eval(context, null, probs); } /** * {@inheritDoc} */ @Override public double[] eval(String[] context, float[] values) { return eval(context, values, new double[evalParams.getNumOutcomes()]); } /** * Evaluates which should be used during inference. * * @param context The predicates which have been observed at the present * decision point. * @param values The weights of the predicates which have been observed at * the present decision point. * @param probs The probability for outcomes. * @return Normalized probabilities for the outcomes given the context. */ private double[] eval(String[] context, float[] values, double[] probs) { for (int ci = 0; ci < context.length; ci++) { Context pred = getPredIndex(context[ci]); if (pred != null) { double predValue = 1.0; if (values != null) predValue = values[ci]; double[] parameters = pred.getParameters(); int[] outcomes = pred.getOutcomes(); for (int i = 0; i < outcomes.length; i++) { int oi = outcomes[i]; probs[oi] += predValue * parameters[i]; } } } double logSumExp = ArrayMath.logSumOfExps(probs); for (int oi = 0; oi < outcomeNames.length; oi++) { probs[oi] = StrictMath.exp(probs[oi] - logSumExp); } return probs; } /** * Evaluates which should be used during training to report model accuracy. * @param context The indices of the predicates which have been observed at the present * decision point. * @param values The weights of the predicates which have been observed at * the present decision point. * @param probs The probability for outcomes. * @param nOutcomes The number of outcomes. * @param nPredLabels The number of unique predicates. * @param parameters The model parameters. * @return Normalized probabilities for the outcomes given the context. */ static double[] eval(int[] context, float[] values, double[] probs, int nOutcomes, int nPredLabels, double[] parameters) { for (int i = 0; i < context.length; i++) { int predIdx = context[i]; double predValue = values != null ? values[i] : 1.0; for (int oi = 0; oi < nOutcomes; oi++) { probs[oi] += predValue * parameters[oi * nPredLabels + predIdx]; } } double logSumExp = ArrayMath.logSumOfExps(probs); for (int oi = 0; oi < nOutcomes; oi++) { probs[oi] = StrictMath.exp(probs[oi] - logSumExp); } return probs; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_maxent_quasine0100644 0000000 0000000 00000000161 14523004075 032656 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/QNTrainer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/QNTrainer.j0100644 0000000 0000000 00000020525 14523004075 034120 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.quasinewton; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.ml.AbstractEventTrainer; import opennlp.tools.ml.ArrayMath; import opennlp.tools.ml.maxent.quasinewton.QNMinimizer.Evaluator; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.Context; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.util.TrainingParameters; /** * A Maxent model {@link opennlp.tools.commons.Trainer} using L-BFGS algorithm. * * @see QNModel * @see AbstractEventTrainer */ public class QNTrainer extends AbstractEventTrainer { private static final Logger logger = LoggerFactory.getLogger(QNTrainer.class); public static final String MAXENT_QN_VALUE = "MAXENT_QN"; public static final String THREADS_PARAM = "Threads"; public static final int THREADS_DEFAULT = 1; public static final String L1COST_PARAM = "L1Cost"; public static final double L1COST_DEFAULT = 0.1; public static final String L2COST_PARAM = "L2Cost"; public static final double L2COST_DEFAULT = 0.1; // Number of Hessian updates to store public static final String M_PARAM = "NumOfUpdates"; public static final int M_DEFAULT = 15; // Maximum number of function evaluations public static final String MAX_FCT_EVAL_PARAM = "MaxFctEval"; public static final int MAX_FCT_EVAL_DEFAULT = 30000; // Number of threads private int threads; // L1-regularization cost private double l1Cost; // L2-regularization cost private double l2Cost; // Settings for QNMinimizer private int m; private int maxFctEval; /** * Initializes a {@link QNTrainer}. *

* Note:
* The resulting instance does not print progress messages about training to STDOUT. */ public QNTrainer() { this(M_DEFAULT); } /** * Initializes a {@link QNTrainer}. * * @param parameters The {@link TrainingParameters} to use. */ public QNTrainer(TrainingParameters parameters) { super(parameters); } /** * Initializes a {@link QNTrainer}. * * @param m The number of hessian updates to store. */ public QNTrainer(int m ) { this(m, MAX_FCT_EVAL_DEFAULT); } /** * Initializes a {@link QNTrainer}. * * @param m The number of hessian updates to store. */ public QNTrainer(int m, int maxFctEval) { this.m = m < 0 ? M_DEFAULT : m; this.maxFctEval = maxFctEval < 0 ? MAX_FCT_EVAL_DEFAULT : maxFctEval; this.threads = THREADS_DEFAULT; this.l1Cost = L1COST_DEFAULT; this.l2Cost = L2COST_DEFAULT; } // >> Members related to AbstractEventTrainer @Override public void init(TrainingParameters trainingParameters, Map reportMap) { super.init(trainingParameters,reportMap); this.m = trainingParameters.getIntParameter(M_PARAM, M_DEFAULT); this.maxFctEval = trainingParameters.getIntParameter(MAX_FCT_EVAL_PARAM, MAX_FCT_EVAL_DEFAULT); this.threads = trainingParameters.getIntParameter(THREADS_PARAM, THREADS_DEFAULT); this.l1Cost = trainingParameters.getDoubleParameter(L1COST_PARAM, L1COST_DEFAULT); this.l2Cost = trainingParameters.getDoubleParameter(L2COST_PARAM, L2COST_DEFAULT); } @Override public void validate() { super.validate(); String algorithmName = getAlgorithm(); if (algorithmName != null && !(MAXENT_QN_VALUE.equals(algorithmName))) { throw new IllegalArgumentException("algorithmName must be MAXENT_QN"); } // Number of Hessian updates to remember if (m < 0) { throw new IllegalArgumentException( "Number of Hessian updates to remember must be >= 0"); } // Maximum number of function evaluations if (maxFctEval < 0) { throw new IllegalArgumentException( "Maximum number of function evaluations must be >= 0"); } // Number of threads must be >= 1 if (threads < 1) { throw new IllegalArgumentException("Number of threads must be >= 1"); } // Regularization costs must be >= 0 if (l1Cost < 0) { throw new IllegalArgumentException("Regularization costs must be >= 0"); } if (l2Cost < 0) { throw new IllegalArgumentException("Regularization costs must be >= 0"); } } @Override public boolean isSortAndMerge() { return true; } @Override public AbstractModel doTrain(DataIndexer indexer) throws IOException { int iterations = getIterations(); return trainModel(iterations, indexer); } /** * Trains a model using the QN algorithm. * * @param iterations The number of QN iterations to perform. * @param indexer The {@link DataIndexer} used to compress events in memory. * * @return A trained {@link QNModel} which can be used immediately or saved to * disk using an {@link opennlp.tools.ml.maxent.io.QNModelWriter}. * @throws IllegalArgumentException Thrown if parameters were invalid. */ public QNModel trainModel(int iterations, DataIndexer indexer) { // Train model's parameters Function objectiveFunction; if (threads == 1) { logger.info("Computing model parameters ..."); objectiveFunction = new NegLogLikelihood(indexer); } else { logger.info("Computing model parameters with {} threads...", threads); objectiveFunction = new ParallelNegLogLikelihood(indexer, threads); } QNMinimizer minimizer = new QNMinimizer( l1Cost, l2Cost, iterations, m, maxFctEval); minimizer.setEvaluator(new ModelEvaluator(indexer)); double[] parameters = minimizer.minimize(objectiveFunction); // Construct model with trained parameters String[] predLabels = indexer.getPredLabels(); int nPredLabels = predLabels.length; String[] outcomeNames = indexer.getOutcomeLabels(); int nOutcomes = outcomeNames.length; Context[] params = new Context[nPredLabels]; for (int ci = 0; ci < params.length; ci++) { List outcomePattern = new ArrayList<>(nOutcomes); List alpha = new ArrayList<>(nOutcomes); for (int oi = 0; oi < nOutcomes; oi++) { double val = parameters[oi * nPredLabels + ci]; outcomePattern.add(oi); alpha.add(val); } params[ci] = new Context(ArrayMath.toIntArray(outcomePattern), ArrayMath.toDoubleArray(alpha)); } return new QNModel(params, predLabels, outcomeNames); } /** * For measuring model's training accuracy. */ private record ModelEvaluator(DataIndexer indexer) implements Evaluator { /** * Evaluate the current model on training data set * * @return model's training accuracy */ @Override public double evaluate(double[] parameters) { int[][] contexts = indexer.getContexts(); float[][] values = indexer.getValues(); int[] nEventsSeen = indexer.getNumTimesEventsSeen(); int[] outcomeList = indexer.getOutcomeList(); int nOutcomes = indexer.getOutcomeLabels().length; int nPredLabels = indexer.getPredLabels().length; int nCorrect = 0; int nTotalEvents = 0; for (int ei = 0; ei < contexts.length; ei++) { int[] context = contexts[ei]; float[] value = values == null ? null : values[ei]; double[] probs = new double[nOutcomes]; QNModel.eval(context, value, probs, nOutcomes, nPredLabels, parameters); int outcome = ArrayMath.argmax(probs); if (outcome == outcomeList[ei]) { nCorrect += nEventsSeen[ei]; } nTotalEvents += nEventsSeen[ei]; } return (double) nCorrect / nTotalEvents; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_maxent_quasine0100644 0000000 0000000 00000000164 14523004075 032661 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/package-info.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/package-inf0100644 0000000 0000000 00000001635 14523004075 034173 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package related to ML by means of the Quasi Newton (QN) algorithm. */ package opennlp.tools.ml.maxent.quasinewton; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_model_Abstract0100644 0000000 0000000 00000000156 14523004075 032564 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/AbstractDataIndexer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/AbstractDataIndexer.java0100644 0000000 0000000 00000017763 14523004075 034062 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.ml.AbstractTrainer; import opennlp.tools.util.InsufficientTrainingDataException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; /** * Abstract {@link DataIndexer} implementation for collecting * event and context counts used in training. * * @see DataIndexer */ public abstract class AbstractDataIndexer implements DataIndexer { private static final Logger logger = LoggerFactory.getLogger(AbstractDataIndexer.class); public static final String CUTOFF_PARAM = AbstractTrainer.CUTOFF_PARAM; public static final int CUTOFF_DEFAULT = AbstractTrainer.CUTOFF_DEFAULT; public static final String SORT_PARAM = "sort"; public static final boolean SORT_DEFAULT = true; protected TrainingParameters trainingParameters; protected Map reportMap; /** * {@inheritDoc} */ @Override public void init(TrainingParameters indexingParameters, Map reportMap) { this.reportMap = reportMap; if (this.reportMap == null) reportMap = new HashMap<>(); trainingParameters = indexingParameters; } private int numEvents; /** The integer contexts associated with each unique event. */ protected int[][] contexts; /** The integer outcome associated with each unique event. */ protected int[] outcomeList; /** The number of times an event occurred in the training data. */ protected int[] numTimesEventsSeen; /** The predicate/context names. */ protected String[] predLabels; /** The names of the outcomes. */ protected String[] outcomeLabels; /** The number of times each predicate occurred. */ protected int[] predCounts; /** * {@inheritDoc} */ @Override public int[][] getContexts() { return contexts; } /** * {@inheritDoc} */ @Override public int[] getNumTimesEventsSeen() { return numTimesEventsSeen; } /** * {@inheritDoc} */ @Override public int[] getOutcomeList() { return outcomeList; } /** * {@inheritDoc} */ @Override public String[] getPredLabels() { return predLabels; } /** * {@inheritDoc} */ @Override public String[] getOutcomeLabels() { return outcomeLabels; } /** * {@inheritDoc} */ @Override public int[] getPredCounts() { return predCounts; } /** * {@inheritDoc} */ @Override public int getNumEvents() { return numEvents; } /** * Sorts and uniques the array of comparable events and return the number of unique events. * This method will alter the {@code eventsToCompare} list. *

* It does an in place sort, followed by an in place edit to remove duplicates. * * @param eventsToCompare The {@link List} events used as input. * @param sort Whether to use sorting, or not. * * @return The number of unique events in the specified list. * @throws InsufficientTrainingDataException Thrown if not enough events are provided * @since maxent 1.2.6 */ protected int sortAndMerge(List eventsToCompare, boolean sort) throws InsufficientTrainingDataException { int numUniqueEvents = 1; numEvents = eventsToCompare.size(); if (sort && eventsToCompare.size() > 0) { Collections.sort(eventsToCompare); ComparableEvent ce = eventsToCompare.get(0); for (int i = 1; i < numEvents; i++) { ComparableEvent ce2 = eventsToCompare.get(i); if (ce.compareTo(ce2) == 0) { ce.seen++; // increment the seen count eventsToCompare.set(i, null); // kill the duplicate } else { ce = ce2; // a new champion emerges... numUniqueEvents++; // increment the # of unique events } } } else { numUniqueEvents = eventsToCompare.size(); } if (numUniqueEvents == 0) { throw new InsufficientTrainingDataException("Insufficient training data to create model."); } if (sort) logger.info("done. Reduced {} events to {}.", numEvents, numUniqueEvents); contexts = new int[numUniqueEvents][]; outcomeList = new int[numUniqueEvents]; numTimesEventsSeen = new int[numUniqueEvents]; for (int i = 0, j = 0; i < numEvents; i++) { ComparableEvent evt = eventsToCompare.get(i); if (null == evt) { continue; // this was a dupe, skip over it. } numTimesEventsSeen[j] = evt.seen; outcomeList[j] = evt.outcome; contexts[j] = evt.predIndexes; ++j; } return numUniqueEvents; } /** * Performs the data indexing. *

* Note: * Make sure the {@link #init(TrainingParameters, Map)} method is called first. * * @param events A {@link ObjectStream} of events used as input. * @param predicateIndex A {@link Map} providing the data of a predicate index. * * @throws IOException Thrown if IO errors occurred during indexing. */ protected List index(ObjectStream events, Map predicateIndex) throws IOException { Map omap = new HashMap<>(); List eventsToCompare = new ArrayList<>(); Event ev; while ((ev = events.read()) != null) { omap.putIfAbsent(ev.getOutcome(), omap.size()); int[] cons = Arrays.stream(ev.getContext()) .map(predicateIndex::get) .filter(Objects::nonNull) .mapToInt(i -> i).toArray(); // drop events with no active features if (cons.length > 0) { int ocID = omap.get(ev.getOutcome()); eventsToCompare.add(new ComparableEvent(ocID, cons, ev.getValues())); } else { logger.info("Dropped event {}:{}", ev.getOutcome(), Arrays.asList(ev.getContext())); } } outcomeLabels = toIndexedStringArray(omap); predLabels = toIndexedStringArray(predicateIndex); return eventsToCompare; } /** * Updates the {@link Map} of predicates and counter with the specified event contexts. * * @param ec The contexts/features which occur in an event. * @param counter The predicate counters in form of a {@link Map}. */ protected static void update(String[] ec, Map counter) { for (String s : ec) { counter.merge(s, 1, (value, one) -> value + one); } } /** * Utility method for creating a {@code String[]} from a map whose * keys are labels (Strings) to be stored in the array and whose * values are the indices (Integers) at which the corresponding * labels should be inserted. * * @param labelToIndexMap A {@link Map} that holds labels to index positions. * @return The resulting {@code String[]}. */ protected static String[] toIndexedStringArray(Map labelToIndexMap) { return labelToIndexMap.entrySet().stream() .sorted(Comparator.comparingInt(Map.Entry::getValue)) .map(Map.Entry::getKey).toArray(String[]::new); } @Override public float[][] getValues() { return null; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/AbstractModel.java0100644 0000000 0000000 00000014727 14523004075 032727 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.text.DecimalFormat; import java.util.Arrays; import java.util.LinkedHashMap; import java.util.Map; import java.util.Objects; import opennlp.tools.ml.ArrayMath; /** * A basic {@link MaxentModel} implementation. */ public abstract class AbstractModel implements MaxentModel { /** Mapping between predicates/contexts and an integer representing them. */ protected Map pmap; /** The names of the outcomes. */ protected String[] outcomeNames; /** Parameters for the model. */ protected EvalParameters evalParams; /** Prior distribution for this model. */ protected Prior prior; public enum ModelType { Maxent,Perceptron,MaxentQn,NaiveBayes } /** The type of the model. */ protected ModelType modelType; /** * Initializes an {@link AbstractModel}. * * @param params The {@link Context[] parameters} to set. * @param predLabels The predicted labels. * @param pmap A {@link Map} that provides a mapping between predicates and contexts. * @param outcomeNames The names of the outcomes. */ protected AbstractModel(Context[] params, String[] predLabels, Map pmap, String[] outcomeNames) { this.pmap = pmap; this.outcomeNames = outcomeNames; this.evalParams = new EvalParameters(params,outcomeNames.length); } /** * Initializes an {@link AbstractModel}. * * @param params The {@link Context parameters} to set. * @param predLabels The predicted labels. * @param outcomeNames The names of the outcomes. */ public AbstractModel(Context[] params, String[] predLabels, String[] outcomeNames) { init(predLabels, params, outcomeNames); this.evalParams = new EvalParameters(params, outcomeNames.length); } private void init(String[] predLabels, Context[] params, String[] outcomeNames) { this.pmap = new LinkedHashMap<>(predLabels.length); for (int i = 0; i < predLabels.length; i++) { pmap.put(predLabels[i], params[i]); } this.outcomeNames = outcomeNames; } /** * Return the name of the outcome corresponding to the highest likelihood * in the parameter ocs. * * @param ocs A double[] as returned by the eval(String[] context) * method. * @return The name of the most likely outcome. */ @Override public final String getBestOutcome(double[] ocs) { return outcomeNames[ArrayMath.argmax(ocs)]; } /** * @return Retrieves the {@link ModelType}. */ public ModelType getModelType() { return modelType; } /** * Retrieves a string matching all the outcome names with all the * probabilities produced by the {@link #eval(String[])} method. * * @param ocs A {@code double[]} as returned by the * {@link #eval(String[])} method. * @return String containing outcome names paired with the normalized * probability (contained in the {@code double[] ocs}) * for each one. */ @Override public final String getAllOutcomes(double[] ocs) { if (ocs.length != outcomeNames.length) { return "The double array sent as a parameter to AbstractModel.getAllOutcomes() " + "must not have been produced by this model."; } else { DecimalFormat df = new DecimalFormat("0.0000"); StringBuilder sb = new StringBuilder(ocs.length * 2); sb.append(outcomeNames[0]).append("[").append(df.format(ocs[0])).append("]"); for (int i = 1; i < ocs.length; i++) { sb.append(" ").append(outcomeNames[i]).append("[").append(df.format(ocs[i])).append("]"); } return sb.toString(); } } /** * @param i An outcome id. * @return Retrieves the name of the outcome associated with that id. */ @Override public final String getOutcome(int i) { return outcomeNames[i]; } /** * @param outcome The String name of the outcome for which the index is desired. * * @return Retrieves the index if the given {@code outcome} label exists for this * model, {@code -1} if it does not. **/ @Override public int getIndex(String outcome) { for (int i = 0; i < outcomeNames.length; i++) { if (outcomeNames[i].equals(outcome)) return i; } return -1; } @Override public int getNumOutcomes() { return evalParams.getNumOutcomes(); } /** * Provides the fundamental data structures which encode the maxent model * information. Note: This method will usually only be needed by * {@link opennlp.tools.ml.maxent.io.GISModelWriter GIS model writers}. *

* The following values are held in the Object array which is returned by this method: *

    *
  • index 0: {@link Context} array containing the model parameters.
  • *
  • index 1: {@link Map} containing the mapping of model predicates * to unique integers.
  • *
  • index 2: {@link String} array containing the names of the outcomes, * stored in the index of the array which represents their * unique ids in the model.
  • *
* * @return An {@link Object} array with the values as described above. */ public final Object[] getDataStructures() { Object[] data = new Object[3]; data[0] = evalParams.getParams(); data[1] = pmap; data[2] = outcomeNames; return data; } @Override public int hashCode() { return Objects.hash(pmap, Arrays.hashCode(outcomeNames), evalParams, prior); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof AbstractModel model) { return pmap.equals(model.pmap) && Objects.deepEquals(outcomeNames, model.outcomeNames) && Objects.equals(prior, model.prior); } return false; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_model_Abstract0100644 0000000 0000000 00000000156 14523004075 032564 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/AbstractModelReader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/AbstractModelReader.java0100644 0000000 0000000 00000015204 14523004075 034041 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.StringTokenizer; import java.util.zip.GZIPInputStream; /** * An abstract, basic implementation of a model reader. */ public abstract class AbstractModelReader { /** * The number of predicates contained in a model. */ protected int NUM_PREDS; protected DataReader dataReader; /** * Initializes a {@link AbstractModelReader} via a {@link File}. * * @param f The {@link File} that references the model to be read. * * @throws IOException Thrown if IO errors occurred. */ public AbstractModelReader(File f) throws IOException { String filename = f.getName(); InputStream input; // handle the zipped/not zipped distinction if (filename.endsWith(".gz")) { input = new GZIPInputStream(new FileInputStream(f)); filename = filename.substring(0,filename.length() - 3); } else { input = new FileInputStream(f); } // handle the different formats if (filename.endsWith(".bin")) { this.dataReader = new BinaryFileDataReader(input); } else { // filename ends with ".txt" this.dataReader = new PlainTextFileDataReader(input); } } /** * Initializes a {@link AbstractModelReader} via a {@link DataReader}. * * @param dataReader The {@link DataReader} that references the model to be read. */ public AbstractModelReader(DataReader dataReader) { super(); this.dataReader = dataReader; } /** * Implement as needed for the format the model is stored in. * * @return Reads in an {@code int} value from the underlying {@link DataReader}. */ public int readInt() throws IOException { return dataReader.readInt(); } /** * Implement as needed for the format the model is stored in. * * @return Reads in a {@code double} value from the underlying {@link DataReader}. */ public double readDouble() throws IOException { return dataReader.readDouble(); } /** * Implement as needed for the format the model is stored in. * * @return Reads in an {@code UTF-encoded String} * value from the underlying {@link DataReader}. */ public String readUTF() throws IOException { return dataReader.readUTF(); } /** * @return Retrieves the read {@link AbstractModel} instance. * @throws IOException Thrown if IO errors occurred constructing the model. */ public AbstractModel getModel() throws IOException { checkModelType(); return constructModel(); } /** * Checks the model type via the the underlying {@link DataReader}. * * @throws IOException Thrown if IO errors occurred checking the model type. */ public abstract void checkModelType() throws IOException; /** * Constructs a {@link AbstractModel model}. * * @return A {@link AbstractModel} reconstructed from a model's (read) attributes. * @throws IOException Thrown if IO errors occurred during (re-)construction. */ public abstract AbstractModel constructModel() throws IOException; /** * @return Reads and retrieves the {@code outcome labels} from the model. * @throws IOException Thrown if IO errors occurred. */ protected String[] getOutcomes() throws IOException { int numOutcomes = readInt(); String[] outcomeLabels = new String[numOutcomes]; for (int i = 0; i < numOutcomes; i++) outcomeLabels[i] = readUTF(); return outcomeLabels; } /** * @return Reads and retrieves the {@code outcome patterns} from the model. * @throws IOException Thrown if IO errors occurred. */ protected int[][] getOutcomePatterns() throws IOException { int numOCTypes = readInt(); int[][] outcomePatterns = new int[numOCTypes][]; for (int i = 0; i < numOCTypes; i++) { StringTokenizer tok = new StringTokenizer(readUTF(), " "); int[] infoInts = new int[tok.countTokens()]; for (int j = 0; tok.hasMoreTokens(); j++) { infoInts[j] = Integer.parseInt(tok.nextToken()); } outcomePatterns[i] = infoInts; } return outcomePatterns; } /** * @return Reads and retrieves the {@code predicates} from the model. * @throws IOException Thrown if IO errors occurred. */ protected String[] getPredicates() throws IOException { NUM_PREDS = readInt(); String[] predLabels = new String[NUM_PREDS]; for (int i = 0; i < NUM_PREDS; i++) predLabels[i] = readUTF(); return predLabels; } /** * Reads the parameters from a file and populates an array of {@link Context} objects. * * @param outcomePatterns The outcome patterns for the model. The first index refers to which * outcome pattern (a set of outcomes that occurs with a context) is being specified. The * second index specifies the number of contexts which use this pattern at index {@code 0}, * and the index of each outcome which make up this pattern in indices {@code 1-n}. * @return An array of {@link Context} objects. * @throws IOException Thrown when the model file does not match the outcome patterns or can not be read. */ protected Context[] getParameters(int[][] outcomePatterns) throws IOException { Context[] params = new Context[NUM_PREDS]; int pid = 0; for (int[] pattern : outcomePatterns) { //construct outcome pattern int[] outcomePattern = new int[pattern.length - 1]; System.arraycopy(pattern, 1, outcomePattern, 0, pattern.length - 1); //populate parameters for each context which uses this outcome pattern. for (int j = 0; j < pattern[0]; j++) { double[] contextParameters = new double[pattern.length - 1]; for (int k = 1; k < pattern.length; k++) { contextParameters[k - 1] = readDouble(); } params[pid] = new Context(outcomePattern, contextParameters); pid++; } } return params; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_model_Abstract0100644 0000000 0000000 00000000156 14523004075 032564 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/AbstractModelWriter.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/AbstractModelWriter.java0100644 0000000 0000000 00000004432 14523004075 034114 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.DataOutputStream; import java.io.IOException; /** * An abstract, basic implementation of a model writer. */ public abstract class AbstractModelWriter { public AbstractModelWriter() { super(); } /** * Writes a {@link String} to the underlying {@link DataOutputStream}. * * @param s The {@link String UTF encoded} characters. * @throws IOException Thrown if IO errors occurred. */ public abstract void writeUTF(String s) throws IOException; /** * Writes a single {@code int} to the underlying {@link DataOutputStream}. * * @param i The {@code int} value. * @throws IOException Thrown if IO errors occurred. */ public abstract void writeInt(int i) throws IOException; /** * Writes a single {@code double} to the underlying {@link DataOutputStream}. * * @param d The {@code double} value. * @throws IOException Thrown if IO errors occurred. */ public abstract void writeDouble(double d) throws IOException; /** * Closes the underlying {@link DataOutputStream}. * * @throws IOException Thrown if IO errors occurred. */ public abstract void close() throws IOException; /** * Serializes the {@link AbstractModel model} using the * {@link #writeUTF(String)}, {@link #writeDouble(double)}, * or {@link #writeInt(int)}} methods implemented by * extending classes. * * @throws IOException Thrown if IO errors occurred. */ public abstract void persist() throws IOException; } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_model_BinaryFi0100644 0000000 0000000 00000000157 14523004075 032525 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/BinaryFileDataReader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/BinaryFileDataReader.jav0100644 0000000 0000000 00000005431 14523004075 033773 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.zip.GZIPInputStream; /** * A {@link DataReader} that reads files from a binary format. */ public class BinaryFileDataReader implements DataReader { private final DataInputStream input; /** * Instantiates {@link BinaryFileDataReader} via a {@link File} and creates * a {@link DataInputStream} for it. * Based on whether the file's suffix contains {@code .gz}, * it detects whether the file is gzipped or not. * * @param f The {@link File} that references the model to be read. */ public BinaryFileDataReader(File f) throws IOException { if (f.getName().endsWith(".gz")) { input = new DataInputStream(new BufferedInputStream( new GZIPInputStream(new BufferedInputStream(new FileInputStream(f))))); } else { input = new DataInputStream(new BufferedInputStream(new FileInputStream(f))); } } /** * Instantiates {@link BinaryFileDataReader} via an {@link InputStream} and creates * a {@link DataInputStream} for it. * * @param in The {@link InputStream} that references the model to be read. */ public BinaryFileDataReader(InputStream in) { this(new DataInputStream(in)); } /** * Instantiates {@link BinaryFileDataReader} via an {@link DataInputStream}. * * @param in The {@link DataInputStream} that references the model to be read. */ public BinaryFileDataReader(DataInputStream in) { input = in; } /** * {@inheritDoc} */ @Override public double readDouble() throws IOException { return input.readDouble(); } /** * {@inheritDoc} */ @Override public int readInt() throws IOException { return input.readInt(); } /** * {@inheritDoc} */ @Override public String readUTF() throws IOException { return ModelParameterChunker.readUTF(input); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/ComparableEvent.java0100644 0000000 0000000 00000006633 14523004075 033247 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.util.Arrays; import java.util.Objects; /** * A maxent event representation which we can use to sort based on the * predicates indexes contained in the events. */ public class ComparableEvent implements Comparable { public final int outcome; public final int[] predIndexes; public int seen = 1; // the number of times this event has been seen. public final float[] values; public ComparableEvent(int oc, int[] pids, float[] values) { outcome = oc; this.values = values; predIndexes = pids; } public ComparableEvent(int oc, int[] pids) { this(oc, pids, null); } @Override public int compareTo(ComparableEvent ce) { int compareOutcome = Integer.compare(outcome, ce.outcome); if (compareOutcome != 0) { return compareOutcome; } int smallerLength = StrictMath.min(predIndexes.length, ce.predIndexes.length); for (int i = 0; i < smallerLength; i++) { int comparePredIndexes = Integer.compare(predIndexes[i], ce.predIndexes[i]); if (comparePredIndexes != 0) { return comparePredIndexes; } if (values != null && ce.values != null) { float compareValues = Float.compare(values[i], ce.values[i]); if (!Float.valueOf(compareValues).equals(0.0f)) { return (int) compareValues; } } else if (values != null) { float compareValues = Float.compare(values[i], 1.0f); if (!Float.valueOf(compareValues).equals(0.0f)) { return (int) compareValues; } } else if (ce.values != null) { float compareValues = Float.compare(1.0f, ce.values[i]); if (!Float.valueOf(compareValues).equals(0.0f)) { return (int) compareValues; } } } return Integer.compare(predIndexes.length, ce.predIndexes.length); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj instanceof ComparableEvent other) { return outcome == other.outcome && Arrays.equals(predIndexes, other.predIndexes) && seen == other.seen && Arrays.equals(values, other.values); } return false; } @Override public int hashCode() { return Objects.hash(outcome, Arrays.hashCode(predIndexes), seen, Arrays.hashCode(values)); } @Override public String toString() { StringBuilder s = new StringBuilder().append(outcome).append(":"); for (int i = 0; i < predIndexes.length; i++) { s.append(" ").append(predIndexes[i]); if (values != null) { s.append("=").append(values[i]); } } return s.toString(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_model_Comparab0100644 0000000 0000000 00000000156 14523004075 032545 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/ComparablePredicate.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/ComparablePredicate.java0100644 0000000 0000000 00000004561 14523004075 034064 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.util.Arrays; import java.util.Objects; /** * A maxent predicate representation which we can use to sort based on the * outcomes. This allows us to make the mapping of features to their parameters * much more compact. */ public class ComparablePredicate implements Comparable { public final String name; public final int[] outcomes; public final double[] params; public ComparablePredicate(String n, int[] ocs, double[] ps) { name = n; outcomes = ocs; params = ps; } @Override public int compareTo(ComparablePredicate cp) { int smallerLength = StrictMath.min(outcomes.length, cp.outcomes.length); for (int i = 0; i < smallerLength; i++) { int compareOutcomes = Integer.compare(outcomes[i], cp.outcomes[i]); if (compareOutcomes != 0) { return compareOutcomes; } } return Integer.compare(outcomes.length, cp.outcomes.length); } @Override public int hashCode() { return Objects.hash(name, Arrays.hashCode(outcomes), Arrays.hashCode(params)); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj instanceof ComparablePredicate other) { return Objects.equals(name, other.name) && Arrays.equals(outcomes, other.outcomes) && Arrays.equals(params, other.params); } return false; } @Override public String toString() { StringBuilder s = new StringBuilder(); for (int outcome : outcomes) { s.append(" ").append(outcome); } return s.toString(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/Context.java0100644 0000000 0000000 00000004671 14523004075 031624 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.util.Arrays; import java.util.Objects; /** * Class which associates a real valued parameter or expected value with a particular contextual * predicate or feature. This is used to store maxent model parameters as well as model and empirical * expected values. */ public class Context { /** The real valued parameters or expected values for this context. */ protected final double[] parameters; /** The outcomes which occur with this context. */ protected final int[] outcomes; /** * Creates a new parameters object with the specified parameters associated with the specified * outcome pattern. * @param outcomePattern Array of outcomes for which parameters exists for this context. * @param parameters Parameters for the outcomes specified. */ public Context(int[] outcomePattern, double[] parameters) { this.outcomes = outcomePattern; this.parameters = parameters; } /** * @return Retrieves the array of outcomes for which parameters exists for this context. */ public int[] getOutcomes() { return outcomes; } /** * @return Retrieves the array of parameters for the outcomes of this context. */ public double[] getParameters() { return parameters; } @Override public int hashCode() { return Objects.hash(Arrays.hashCode(parameters), Arrays.hashCode(outcomes)); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof Context context) { return Arrays.equals(parameters, context.parameters) && Arrays.equals(outcomes, context.outcomes); } return false; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/DataIndexer.java0100644 0000000 0000000 00000005732 14523004075 032367 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.IOException; import java.util.Map; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; /** * Represents an indexer which compresses events in memory and performs feature selection. * * @see ObjectStream * @see TrainingParameters */ public interface DataIndexer { /** * @return Retrieves a 2-dimensional array whose first dimension is the event * index and array this refers to contains the contexts for that event. */ int[][] getContexts(); /** * @return Retrieves an array indexed by the event index indicating * the number of times a particular event was seen. */ int[] getNumTimesEventsSeen(); /** * @return Retrieves an array indicating the outcome index for each event. */ int[] getOutcomeList(); /** * @return Retrieves an array of predicate/context names indexed by context index. * These indices are the value of the array returned by {@link #getContexts()}. */ String[] getPredLabels(); /** * @return Retrieves an array of the count of each predicate in the events. */ int[] getPredCounts(); /** * @return Retrieves an array of outcome names indexed by outcome index. */ String[] getOutcomeLabels(); /** * @return Retrieves the values associated with each event context or * {@code null} if integer values are to be used. */ float[][] getValues(); /** * @return Retrieves the number of total events indexed. */ int getNumEvents(); /** * Sets parameters used during the data indexing. * * @param trainParams The {@link TrainingParameters} to be used. * @param reportMap The {@link Map} used for reporting. */ void init(TrainingParameters trainParams, Map reportMap); /** * Performs the data indexing. *

* Note: * Make sure the {@link #init(TrainingParameters, Map)} method is called first. * * @param eventStream A {@link ObjectStream} of events used as input. * * @throws IOException Thrown if IO errors occurred during indexing. */ void index(ObjectStream eventStream) throws IOException; } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/DataIndexerFactory.java0100644 0000000 0000000 00000005526 14523004075 033720 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.util.HashMap; import java.util.Map; import opennlp.tools.ml.AbstractEventTrainer; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.ext.ExtensionLoader; import opennlp.tools.util.ext.ExtensionNotLoadedException; /** * A factory that produces {@link DataIndexer} instances. * * @see DataIndexer */ public class DataIndexerFactory { /** * Instantiates a {@link DataIndexer} configured via {@link TrainingParameters}. * * @param parameters The {@link TrainingParameters} used for configuration. * @param reportMap The {@link Map} used for reporting. * @return A ready to use {@link DataIndexer} instance. * * @throws ExtensionNotLoadedException Thrown if a class name was configured for the indexer, yet * the extension could not be loaded. * @see ExtensionLoader */ public static DataIndexer getDataIndexer(TrainingParameters parameters, Map reportMap) { // The default is currently a 2-Pass data index. Is this what we really want? String indexerParam = parameters.getStringParameter(AbstractEventTrainer.DATA_INDEXER_PARAM, AbstractEventTrainer.DATA_INDEXER_TWO_PASS_VALUE); // allow the user to pass in a report map. If the don't, create one. if (reportMap == null) { reportMap = new HashMap<>(); } DataIndexer indexer; switch (indexerParam) { case AbstractEventTrainer.DATA_INDEXER_ONE_PASS_VALUE: indexer = new OnePassDataIndexer(); break; case AbstractEventTrainer.DATA_INDEXER_TWO_PASS_VALUE: indexer = new TwoPassDataIndexer(); break; case AbstractEventTrainer.DATA_INDEXER_ONE_PASS_REAL_VALUE: indexer = new OnePassRealValueDataIndexer(); break; default: // if the user passes in a class name for the indexer, try to instantiate the class. indexer = ExtensionLoader.instantiateExtension(DataIndexer.class, indexerParam); } indexer.init(parameters, reportMap); return indexer; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/DataReader.java0100644 0000000 0000000 00000003044 14523004075 032165 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.DataInputStream; import java.io.IOException; /** * Describes generic ways to read data from a {@link DataInputStream}. */ public interface DataReader { /** * @return Reads and returns a {@code double} value. * @throws IOException Thrown if IO errors occurred during read operation. */ double readDouble() throws IOException; /** * @return Reads and returns an {@code int} value. * @throws IOException Thrown if IO errors occurred during read operation. */ int readInt() throws IOException; /** * @return Reads and returns {@link String UTF-encoded characters}. * @throws IOException Thrown if IO errors occurred during read operation. */ String readUTF() throws IOException; } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_model_DynamicE0100644 0000000 0000000 00000000160 14523004075 032505 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/DynamicEvalParameters.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/DynamicEvalParameters.ja0100644 0000000 0000000 00000003207 14523004075 034063 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.util.List; public class DynamicEvalParameters { /** Mapping between outcomes and parameter values for each context. * The integer representation of the context can be found using pmap.*/ private final List params; /** The number of outcomes being predicted. */ private final int numOutcomes; /** * Creates a set of parameters which can be evaluated with the eval method. * * @param params The parameters of the model. * @param numOutcomes The number of outcomes. */ public DynamicEvalParameters(List params, int numOutcomes) { this.params = params; this.numOutcomes = numOutcomes; } public Context[] getParams() { return params.toArray(new Context[0]); } public int getNumOutcomes() { return numOutcomes; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/EvalParameters.java0100644 0000000 0000000 00000004412 14523004075 033104 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.util.Arrays; import java.util.Objects; /** * This class encapsulates the variables used in producing probabilities from a model * and facilitates passing these variables to the eval method. */ public class EvalParameters { /** * Mapping between outcomes and parameter values for each context. * The integer representation of the context can be found using pmap. */ private final Context[] params; /** * The number of outcomes being predicted. */ private final int numOutcomes; /** * The maximum number of features fired in an event. Usually referred to as C. * This is used to normalize the number of features which occur in an event. */ private double correctionConstant; public EvalParameters(Context[] params, int numOutcomes) { this.params = params; this.numOutcomes = numOutcomes; } public Context[] getParams() { return params; } public int getNumOutcomes() { return numOutcomes; } @Override public int hashCode() { return Objects.hash(Arrays.hashCode(params), numOutcomes, correctionConstant); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof EvalParameters evalParameters) { return Arrays.equals(params, evalParameters.params) && numOutcomes == evalParameters.numOutcomes && correctionConstant == evalParameters.correctionConstant; } return false; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/Event.java0100644 0000000 0000000 00000006503 14523004075 031255 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.util.Objects; /** * The context of a decision point during training. * This includes contextual predicates and an outcome. */ public class Event { private final String outcome; private final String[] context; private final float[] values; /** * Instantiates an {@link Event}. * * @param outcome The outcome to use. Must not be {@code null}. * @param context The {@link String array} of context elements. Must not be {@code null}. */ public Event(String outcome, CharSequence[] context) { this(outcome,context,null); } /** * Instantiates an {@link Event}. * * @param outcome The outcome to use. Must not be {@code null}. * @param context The {@link String array} of context elements. Must not be {@code null}. * @param values The {@code float} array to use. */ public Event(String outcome, String[] context, float[] values) { this.outcome = Objects.requireNonNull(outcome, "outcome must not be null"); this.context = Objects.requireNonNull(context, "context must not be null"); this.values = values; } /** * Instantiates an {@link Event}. * * @param outcome The outcome to use. Must not be {@code null}. * @param context The {@link CharSequence array} of context elements. Must not be {@code null}. * @param values The {@code float} array to use. */ public Event(String outcome, CharSequence[] context, float[] values) { this.outcome = Objects.requireNonNull(outcome, "outcome must not be null"); final String[] ctx = new String[context.length]; for (int i = 0; i < context.length; i++) { ctx[i] = context[i].toString(); } this.context = ctx; this.values = values; } /** * @return Retrieves the outcome. */ public String getOutcome() { return outcome; } /** * @return Retrieves the {@link String array} of context elements. */ public String[] getContext() { return context; } /** * @return Retrieves the {@code float} array. */ public float[] getValues() { return values; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(outcome).append(" ["); if (context.length > 0) { sb.append(context[0]); if (values != null) { sb.append("=").append(values[0]); } } for (int ci = 1; ci < context.length; ci++) { sb.append(" ").append(context[ci]); if (values != null) { sb.append("=").append(values[ci]); } } sb.append("]"); return sb.toString(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/FileEventStream.java0100644 0000000 0000000 00000011162 14523004075 033226 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.nio.charset.StandardCharsets; import java.util.StringTokenizer; import opennlp.tools.util.ObjectStream; /** * Class for using a file of {@link Event events} as an {@link ObjectStream event stream}. * The format of the file is one event per line with * each line consisting of outcome followed by contexts (space delimited). * * @see Event * @see ObjectStream */ public class FileEventStream implements ObjectStream { private static final String LINE_SEPARATOR = System.lineSeparator(); protected final BufferedReader reader; /** * Instantiates a {@link FileEventStream} from the specified file name. * * @param fileName The name fo the file containing the events. * @param encoding The name of the {@link java.nio.charset.Charset character encoding}. * * @throws IOException Thrown if the specified file can not be read. */ public FileEventStream(String fileName, String encoding) throws IOException { this(encoding == null ? new FileReader(fileName) : new InputStreamReader(new FileInputStream(fileName), encoding)); } /** * Instantiates a {@link FileEventStream} from the specified file name. * * @param fileName The name fo the file containing the events. * * @throws IOException Thrown if the specified file can not be read. */ public FileEventStream(String fileName) throws IOException { this(fileName,null); } /** * Instantiates a {@link FileEventStream} via a {@link Reader}. * * @param reader The {@link Reader} that holds events. * * @throws IOException Thrown if the specified file can not be read. */ public FileEventStream(Reader reader) throws IOException { this.reader = new BufferedReader(reader); } /** * Instantiates a {@link FileEventStream} via a {@link File}. * * @param file The {@link File} that holds events. * * @throws IOException Thrown if the specified file can not be read. */ public FileEventStream(File file) throws IOException { reader = new BufferedReader(new InputStreamReader( new FileInputStream(file), StandardCharsets.UTF_8)); } /** * Returns the next {@link Event} object. Calling this method repeatedly until it returns * {@code null} will return each object from the underlying source exactly once. * * @return The next object or {@code null} to signal that the stream is exhausted. * * @throws IOException Thrown if there is an error during reading. */ @Override public Event read() throws IOException { String line; if ((line = reader.readLine()) != null) { StringTokenizer st = new StringTokenizer(line); String outcome = st.nextToken(); int count = st.countTokens(); String[] context = new String[count]; for (int ci = 0; ci < count; ci++) { context[ci] = st.nextToken(); } return new Event(outcome, context); } else { return null; } } @Override public void close() throws IOException { reader.close(); } /** * Generates a string representing the specified event. * * @param event The {@link Event} for which a string representation is needed. * @return A string representing the specified event. */ public static String toLine(Event event) { StringBuilder sb = new StringBuilder(); sb.append(event.getOutcome()); String[] context = event.getContext(); for (String s : context) { sb.append(" ").append(s); } sb.append(LINE_SEPARATOR); return sb.toString(); } @Override public void reset() throws IOException, UnsupportedOperationException { throw new UnsupportedOperationException(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/GenericModelReader.java0100644 0000000 0000000 00000005103 14523004075 033647 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.File; import java.io.IOException; import opennlp.tools.ml.maxent.io.GISModelReader; import opennlp.tools.ml.maxent.io.QNModelReader; import opennlp.tools.ml.naivebayes.NaiveBayesModelReader; import opennlp.tools.ml.perceptron.PerceptronModelReader; /** * An generic {@link AbstractModelReader} implementation. * * @see AbstractModelReader */ public class GenericModelReader extends AbstractModelReader { private AbstractModelReader delegateModelReader; /** * Initializes a {@link GenericModelReader} via a {@link File}. * * @param f The {@link File} that references the model to be read. * * @throws IOException Thrown if IO errors occurred. */ public GenericModelReader(File f) throws IOException { super(f); } /** * Initializes a {@link GenericModelReader} via a {@link DataReader}. * * @param dataReader The {@link DataReader} that references the model to be read. */ public GenericModelReader(DataReader dataReader) { super(dataReader); } @Override public void checkModelType() throws IOException { String modelType = readUTF(); switch (modelType) { case "Perceptron": delegateModelReader = new PerceptronModelReader(this.dataReader); break; case "GIS": delegateModelReader = new GISModelReader(this.dataReader); break; case "QN": delegateModelReader = new QNModelReader(this.dataReader); break; case "NaiveBayes": delegateModelReader = new NaiveBayesModelReader(this.dataReader); break; default: throw new IOException("Unknown model format: " + modelType); } } @Override public AbstractModel constructModel() throws IOException { return delegateModelReader.constructModel(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/GenericModelWriter.java0100644 0000000 0000000 00000007323 14523004075 033727 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.zip.GZIPOutputStream; import opennlp.tools.ml.maxent.io.BinaryGISModelWriter; import opennlp.tools.ml.maxent.io.BinaryQNModelWriter; import opennlp.tools.ml.model.AbstractModel.ModelType; import opennlp.tools.ml.naivebayes.BinaryNaiveBayesModelWriter; import opennlp.tools.ml.perceptron.BinaryPerceptronModelWriter; /** * An generic {@link AbstractModelWriter} implementation. * * @see AbstractModelWriter */ public class GenericModelWriter extends AbstractModelWriter { private AbstractModelWriter delegateWriter; /** * Initializes a {@link GenericModelWriter} for an {@link AbstractModel} * with an associated {@link File} the model shall be written to. * * @param model The {@link AbstractModel model} to write out. * @param file The {@link File} that used to be written to. * * @throws IOException Thrown if IO errors occurred. */ public GenericModelWriter(AbstractModel model, File file) throws IOException { String filename = file.getName(); OutputStream os; // handle the zipped/not zipped distinction if (filename.endsWith(".gz")) { os = new GZIPOutputStream(new FileOutputStream(file)); filename = filename.substring(0, filename.length() - 3); } else { os = new FileOutputStream(file); } init(model, new DataOutputStream(os)); } /** * Initializes a {@link GenericModelWriter} for an {@link AbstractModel} * with an associated {@link DataOutputStream} the model shall be written to. * * @param model The {@link AbstractModel model} to write out. * @param dos The {@link DataOutputStream} that used to be written to. */ public GenericModelWriter(AbstractModel model, DataOutputStream dos) { init(model, dos); } private void init(AbstractModel model, DataOutputStream dos) { if (model.getModelType() == ModelType.Perceptron) { delegateWriter = new BinaryPerceptronModelWriter(model, dos); } else if (model.getModelType() == ModelType.Maxent) { delegateWriter = new BinaryGISModelWriter(model, dos); } else if (model.getModelType() == ModelType.MaxentQn) { delegateWriter = new BinaryQNModelWriter(model, dos); } if (model.getModelType() == ModelType.NaiveBayes) { delegateWriter = new BinaryNaiveBayesModelWriter(model, dos); } } @Override public void close() throws IOException { delegateWriter.close(); } @Override public void persist() throws IOException { delegateWriter.persist(); } @Override public void writeDouble(double d) throws IOException { delegateWriter.writeDouble(d); } @Override public void writeInt(int i) throws IOException { delegateWriter.writeInt(i); } @Override public void writeUTF(String s) throws IOException { delegateWriter.writeUTF(s); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/HashSumEventStream.java0100644 0000000 0000000 00000004470 14523004075 033723 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.IOException; import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import opennlp.tools.util.AbstractObjectStream; import opennlp.tools.util.ObjectStream; /** * A hash sum based {@link AbstractObjectStream} implementation. * * @see Event * @see MessageDigest * @see AbstractObjectStream */ public class HashSumEventStream extends AbstractObjectStream { private final MessageDigest digest; public HashSumEventStream(ObjectStream eventStream) { super(eventStream); try { digest = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { // should never happen: do all java runtimes have md5 ?! throw new IllegalStateException(e); } } @Override public Event read() throws IOException { Event event = super.read(); if (event != null) { digest.update(event.toString().getBytes(StandardCharsets.UTF_8)); } return event; } /** * Calculates the hash sum of the stream and wraps it into a {@link BigInteger}. * Note: The method must be called after the stream is completely consumed. * * @return The calculated hash sum as {@link BigInteger}. * @throws IllegalStateException Thrown if the stream is not consumed completely, * completely means that hasNext() returns {@code false}. */ public BigInteger calculateHashSum() { return new BigInteger(1, digest.digest()); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/MaxentModel.java0100644 0000000 0000000 00000007405 14523004075 032413 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; /** * Interface for maximum entropy models. **/ public interface MaxentModel { /** * Evaluates a {@code context}. * * @param context An array of String names of the contextual predicates * which are to be evaluated together. * @return An array of the probabilities for each of the different * outcomes, all of which sum to {@code 1}. * **/ double[] eval(String[] context); /** * Evaluates a {@code context}. * * @param context An array of String names of the contextual predicates * which are to be evaluated together. * @param probs An array which is populated with the probabilities for each of the different * outcomes, all of which sum to 1. * @return An array of the probabilities for each of the different * outcomes, all of which sum to {@code 1}. **/ double[] eval(String[] context, double[] probs); /** * Evaluates a {@code context} with the specified context {@code values}. * * @param context An array of String names of the contextual predicates * which are to be evaluated together. * @param values The values associated with each context. * @return An array of the probabilities for each of the different * outcomes, all of which sum to {@code 1}. */ double[] eval(String[] context, float[] values); /** * Retrieves the outcome associated with the index * containing the highest probability in the double[]. * * @param outcomes A {@code double[]} as returned by the * {@link #eval(String[])} method. * @return The String name of the best outcome. **/ String getBestOutcome(double[] outcomes); /** * Retrieves a string matching all the outcome names with all the * probabilities produced by the {@link #eval(String[])} method. * * @param outcomes A {@code double[]} as returned by the * {@link #eval(String[])} method. * @return String containing outcome names paired with the normalized * probability (contained in the {@code double[] ocs}) * for each one. **/ // TODO: This should be removed, can't be used anyway without format spec String getAllOutcomes(double[] outcomes); /** * Retrieves the String name of the outcome associated with the index {@code i}. * * @param i The index for which the name of the associated outcome is * desired. * @return The String name of the outcome **/ String getOutcome(int i); /** * Retrieves the index associated with the String name of the given * outcome. * * @param outcome The String name of the outcome for which the * index is desired, * @return The index if the given outcome label exists for this * model, {@code -1} if it does not. **/ int getIndex(String outcome); /** * @return Retrieves the number of outcomes for this model. **/ int getNumOutcomes(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_model_ModelPar0100644 0000000 0000000 00000000160 14523004075 032517 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/ModelParameterChunker.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/ModelParameterChunker.ja0100644 0000000 0000000 00000014170 14523004075 034065 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.UTFDataFormatException; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.CharsetEncoder; import java.nio.charset.CoderResult; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; /** * A helper class that handles Strings with more than 64k (65535 bytes) in length. * This is achieved via the signature {@link #SIGNATURE_CHUNKED_PARAMS} at the beginning of * the String instance to be written to a {@link DataOutputStream}. *

* Background: In OpenNLP, for large(r) corpora, we train models whose (UTF String) parameters will exceed * the {@link #MAX_CHUNK_SIZE_BYTES} bytes limit set in {@link DataOutputStream}. * For writing and reading those models, we have to chunk up those string instances in 64kB blocks and * recombine them correctly upon reading a (binary) model file. *

* The problem was raised in ticket OPENNLP-1366. *

* Solution strategy: *

    *
  • If writing parameters to a {@link DataOutputStream} blows up with a {@link UTFDataFormatException} a * large String instance is chunked up and written as appropriate blocks.
  • *
  • To indicate that chunking was conducted, we start with the {@link #SIGNATURE_CHUNKED_PARAMS} indicator, * directly followed by the number of chunks used. This way, when reading in chunked model parameters, * recombination is achieved transparently.
  • *
*

* Note: Both, existing (binary) model files and newly trained models which don't require the chunking * technique, will be supported like in previous OpenNLP versions. * * @author Martin Wiesner * @author Mark Struberg */ public final class ModelParameterChunker { /* * A signature that denotes the start of a String that required chunking. * * Semantics: * If a model parameter (String) carries the below signature at the very beginning, this indicates * that 'n > 1' chunks must be processed to obtain the whole model parameters. Otherwise, those would not be * written to the binary model files (as reported in OPENNLP-1366) if the training occurs on large corpora * as used, for instance, in the context of (very large) German NLP models. */ public static final String SIGNATURE_CHUNKED_PARAMS = "CHUNKED-MODEL-PARAMS:"; // followed by no of chunks! private static final int MAX_CHUNK_SIZE_BYTES = 65535; // the maximum 'utflen' DataOutputStream can handle private ModelParameterChunker() { // private utility class ct s } /** * Reads model parameters from {@code dis}. In case the stream start with {@link #SIGNATURE_CHUNKED_PARAMS}, * the number of chunks is detected and the original large parameter string is reconstructed from several * chunks. * * @param dis The stream which will be used to read the model parameter from. */ public static String readUTF(DataInputStream dis) throws IOException { String data = dis.readUTF(); if (data.startsWith(SIGNATURE_CHUNKED_PARAMS)) { String chunkElements = data.replace(SIGNATURE_CHUNKED_PARAMS, ""); int chunkSize = Integer.parseInt(chunkElements); StringBuilder sb = new StringBuilder(); for (int i = 0; i < chunkSize; i++) { sb.append(dis.readUTF()); } return sb.toString(); // the reconstructed model parameter string } else { // default case: no chunked data -> just return the read data / parameter information return data; } } /** * Writes the model parameter {@code s} to {@code dos}. In case {@code s} does exceed * {@link #MAX_CHUNK_SIZE_BYTES} in length, the chunking mechanism is used; otherwise the parameter is * written 'as is'. * * @param dos The {@link DataOutputStream} stream which will be used to persist the model. * @param s The input string that is checked for length and chunked if {@link #MAX_CHUNK_SIZE_BYTES} is * exceeded. */ public static void writeUTF(DataOutputStream dos, String s) throws IOException { try { dos.writeUTF(s); } catch (UTFDataFormatException dfe) { // we definitely have to chunk the given model parameter 's' as it exceeds the bytes allowed for 1 chunk final String[] chunks = splitByByteLength(s); // write the signature string with the amount of chunks for reading the model file correctly dos.writeUTF(SIGNATURE_CHUNKED_PARAMS + chunks.length); // add number of required chunks for (String c: chunks) { dos.writeUTF(c); } } } private static String[] splitByByteLength(String input) { CharBuffer in = CharBuffer.wrap(input); ByteBuffer out = ByteBuffer.allocate(MAX_CHUNK_SIZE_BYTES); // output buffer of required size CharsetEncoder coder = StandardCharsets.UTF_8.newEncoder(); List chunks = new ArrayList<>(); int pos = 0; while (true) { CoderResult cr = coder.encode(in, out, true); int nPos = input.length() - in.length(); String s = input.substring(pos, nPos); chunks.add(s); pos = nPos; out.rewind(); if (! cr.isOverflow()) { break; } } return chunks.toArray(new String[0]); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/MutableContext.java0100644 0000000 0000000 00000004411 14523004075 033126 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.util.Arrays; /** * An extension of {@link Context} used to store parameters or expected values * associated with this context which can be updated or assigned. * * @see Context */ public class MutableContext extends Context { /** * Creates a new parameters object with the specified parameters associated with the specified * outcome pattern. * * @param outcomePattern Array of outcomes for which parameters exists for this context. * @param parameters Parameters for the outcomes specified. */ public MutableContext(int[] outcomePattern, double[] parameters) { super(outcomePattern, parameters); } /** * Assigns the parameter or expected value at the specified outcomeIndex the specified value. * * @param outcomeIndex The index of the parameter or expected value to be updated. * @param value The value to be assigned. */ public void setParameter(int outcomeIndex, double value) { parameters[outcomeIndex] = value; } /** * Updated the parameter or expected value at the specified outcomeIndex by * adding the specified value to its current value. * * @param outcomeIndex The index of the parameter or expected value to be updated. * @param value The value to be added. */ public void updateParameter(int outcomeIndex, double value) { parameters[outcomeIndex] += value; } public boolean contains(int outcome) { return Arrays.binarySearch(outcomes,outcome) >= 0; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/ObjectDataReader.java0100644 0000000 0000000 00000003154 14523004075 033316 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.IOException; import java.io.ObjectInputStream; /** * A {@link DataReader} implementation based on {@link ObjectInputStream}. */ public class ObjectDataReader implements DataReader { protected final ObjectInputStream ois; /** * Instantiates an {@link ObjectDataReader}. * * @param ois The open {@link ObjectInputStream} to use. */ public ObjectDataReader(ObjectInputStream ois) { this.ois = ois; } /** * {@inheritDoc} */ @Override public double readDouble() throws IOException { return ois.readDouble(); } /** * {@inheritDoc} */ @Override public int readInt() throws IOException { return ois.readInt(); } /** * {@inheritDoc} */ @Override public String readUTF() throws IOException { return ois.readUTF(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/OnePassDataIndexer.java0100644 0000000 0000000 00000007471 14523004075 033662 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.IOException; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; /** * A {@link DataIndexer} for maxent model data which handles cutoffs for uncommon * contextual predicates and provides a unique integer index for each of the * predicates. * * @see DataIndexer * @see AbstractDataIndexer */ public class OnePassDataIndexer extends AbstractDataIndexer { private static final Logger logger = LoggerFactory.getLogger(OnePassDataIndexer.class); public OnePassDataIndexer() {} /** * {@inheritDoc} */ @Override public void index(ObjectStream eventStream) throws IOException { int cutoff = trainingParameters.getIntParameter(CUTOFF_PARAM, CUTOFF_DEFAULT); boolean sort = trainingParameters.getBooleanParameter(SORT_PARAM, SORT_DEFAULT); long start = System.currentTimeMillis(); logger.info("Indexing events with OnePass using cutoff of {}", cutoff); logger.info("Computing event counts..."); Map predicateIndex = new HashMap<>(); List events = computeEventCounts(eventStream, predicateIndex, cutoff); logger.info("done. {} events", events.size()); logger.info("Indexing... "); List eventsToCompare = index(ObjectStreamUtils.createObjectStream(events), predicateIndex); logger.info("done."); logger.info("Sorting and merging events... "); sortAndMerge(eventsToCompare, sort); logger.info(String.format("Done indexing in %.2f s.", (System.currentTimeMillis() - start) / 1000d)); } /** * Reads events from eventStream into a linked list. The predicates * associated with each event are counted and any which occur at least * cutoff times are added to the predicatesInOut map along * with a unique integer index. * * @param eventStream * an EventStream value * @param predicatesInOut * a TObjectIntHashMap value * @param cutoff * an int value * @return a TLinkedList value */ private List computeEventCounts(ObjectStream eventStream, Map predicatesInOut, int cutoff) throws IOException { Map counter = new HashMap<>(); List events = new LinkedList<>(); Event ev; while ((ev = eventStream.read()) != null) { events.add(ev); update(ev.getContext(), counter); } String[] predicateSet = counter.entrySet().stream() .filter(entry -> entry.getValue() >= cutoff) .map(Map.Entry::getKey).sorted() .toArray(String[]::new); predCounts = new int[predicateSet.length]; for (int i = 0; i < predicateSet.length; i++) { predCounts[i] = counter.get(predicateSet[i]); predicatesInOut.put(predicateSet[i], i); } return events; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_model_OnePassR0100644 0000000 0000000 00000000166 14523004075 032514 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/OnePassRealValueDataIndexer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/OnePassRealValueDataInde0100644 0000000 0000000 00000003640 14523004075 034016 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.util.List; import opennlp.tools.util.InsufficientTrainingDataException; /** * A {@link DataIndexer} for maxent model data which handles cutoffs for uncommon * contextual predicates and provides a unique integer index for each of the * predicates and maintains event values. * * @see DataIndexer * @see AbstractDataIndexer */ public class OnePassRealValueDataIndexer extends OnePassDataIndexer { private float[][] values; public OnePassRealValueDataIndexer() { } @Override public float[][] getValues() { return values; } @Override protected int sortAndMerge(List eventsToCompare, boolean sort) throws InsufficientTrainingDataException { int numUniqueEvents = super.sortAndMerge(eventsToCompare,sort); values = new float[numUniqueEvents][]; int numEvents = eventsToCompare.size(); for (int i = 0, j = 0; i < numEvents; i++) { ComparableEvent evt = eventsToCompare.get(i); if (null == evt) { continue; // this was a dupe, skip over it. } values[j++] = evt.values; } return numUniqueEvents; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_model_PlainTex0100644 0000000 0000000 00000000162 14523004075 032542 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/PlainTextFileDataReader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/PlainTextFileDataReader.0100644 0000000 0000000 00000005441 14523004075 033757 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.zip.GZIPInputStream; /** * A generic {@link DataReader} implementation for plain text files. * * @see DataReader */ public class PlainTextFileDataReader implements DataReader { private final BufferedReader input; /** * Initializes a {@link PlainTextFileDataReader} via a {@link File}. * * @param f The {@link File} that references the model to be read. * * @throws IOException Thrown if IO errors occurred. */ public PlainTextFileDataReader(File f) throws IOException { if (f.getName().endsWith(".gz")) { input = new BufferedReader(new InputStreamReader(new BufferedInputStream( new GZIPInputStream(new BufferedInputStream(new FileInputStream(f)))))); } else { input = new BufferedReader(new InputStreamReader(new BufferedInputStream(new FileInputStream(f)))); } } /** * Initializes a {@link PlainTextFileDataReader} via a {@link InputStream}. * * @param in The {@link InputStream} that references the file to be read. */ public PlainTextFileDataReader(InputStream in) { input = new BufferedReader(new InputStreamReader(in)); } /** * Initializes a {@link PlainTextFileDataReader} via a {@link BufferedReader}. * * @param in The {@link BufferedReader} that references the file to be read. */ public PlainTextFileDataReader(BufferedReader in) { input = in; } /** * {@inheritDoc} */ @Override public double readDouble() throws IOException { return Double.parseDouble(input.readLine()); } /** * {@inheritDoc} */ @Override public int readInt() throws IOException { return Integer.parseInt(input.readLine()); } /** * {@inheritDoc} */ @Override public String readUTF() throws IOException { return input.readLine(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/Prior.java0100644 0000000 0000000 00000005353 14523004075 031271 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; /** * This interface allows one to implement a prior distribution for use in * maximum entropy model training. */ public interface Prior { /** * Populates the specified array with the log of the distribution for the specified context. * The returned array will be overwritten and needs to be re-initialized with every call to this method. * @param dist An array to be populated with the log of the prior distribution. * @param context The indices of the contextual predicates for an event. */ void logPrior(double[] dist, int[] context); /** * Populates the specified array with the log of the distribution for the specified context. * The returned array will be overwritten and needs to be re-initialized with every call to this method. * @param dist An array to be populated with the log of the prior distribution. * @param context The indices of the contextual predicates for an event. * @param values The values associated with the context. */ void logPrior(double[] dist, int[] context, float[] values); /** * Populates the specified array with the log of the distribution for the specified context. * The returned array will be overwritten and needs to be re-initialized with every call to this method. * @param dist An array to be populated with the log of the prior distribution. * @param context The indices of the contextual predicates for an event. * @param values The values associated with the context. */ void logPrior(double[] dist, Context[] context, float[] values); /** * Method to specify the label for the outcomes and contexts. This is used to map * integer outcomes and contexts to their string values. This method is called prior * to any call to {@link #logPrior}. * @param outcomeLabels An array of each outcome label. * @param contextLabels An array of each context label. */ void setLabels(String[] outcomeLabels, String[] contextLabels); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_model_RealValu0100644 0000000 0000000 00000000163 14523004075 032532 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/RealValueFileEventStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/RealValueFileEventStream0100644 0000000 0000000 00000011463 14523004075 034113 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.File; import java.io.IOException; import java.io.Reader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.util.ObjectStream; /** * Class for using a file of real-valued {@link Event events} as an * {@link ObjectStream event stream}. * The format of the file is one event per line with * each line consisting of outcome followed by contexts (space delimited). * * @see Event * @see FileEventStream */ public class RealValueFileEventStream extends FileEventStream { private static final Logger logger = LoggerFactory.getLogger(RealValueFileEventStream.class); /** * Instantiates a {@link RealValueFileEventStream} from the specified file name. * * @param fileName The name fo the file containing the events. * * @throws IOException Thrown if the specified file can not be read. */ public RealValueFileEventStream(String fileName) throws IOException { super(fileName); } /** * Instantiates a {@link RealValueFileEventStream} from the specified file name. * * @param fileName The name fo the file containing the events. * @param encoding The name of the {@link java.nio.charset.Charset character encoding}. * * @throws IOException Thrown if the specified file can not be read. */ public RealValueFileEventStream(String fileName, String encoding) throws IOException { super(fileName, encoding); } /** * Instantiates a {@link RealValueFileEventStream} via a {@link File}. * * @param file The {@link File} that holds events. * * @throws IOException Thrown if the specified file can not be read. */ public RealValueFileEventStream(File file) throws IOException { super(file); } /** * Instantiates a {@link RealValueFileEventStream} via a {@link Reader}. * * @param reader The {@link Reader} that holds events. * * @throws IOException Thrown if the specified file can not be read. */ public RealValueFileEventStream(Reader reader) throws IOException { super(reader); } /** * Parses the specified {@code contexts} and re-populates context array with features * and returns the values for these features. If all values are unspecified, * then {@code null} is returned. * * @param contexts The contexts with real values specified. * @return The value for each context or {@code null} if all values are unspecified. * * @throws RuntimeException Thrown if negative real values are detected in the input data. */ public static float[] parseContexts(String[] contexts) { boolean hasRealValue = false; float[] values = new float[contexts.length]; for (int ci = 0; ci < contexts.length; ci++) { int ei = contexts[ci].lastIndexOf("="); if (ei > 0 && ei + 1 < contexts[ci].length()) { boolean gotReal = true; try { values[ci] = Float.parseFloat(contexts[ci].substring(ei + 1)); } catch (NumberFormatException e) { gotReal = false; logger.error("Unable to determine value in context: {}", contexts[ci]); values[ci] = 1; } if (gotReal) { if (values[ci] < 0) { throw new RuntimeException("Negative values are not allowed: " + contexts[ci]); } contexts[ci] = contexts[ci].substring(0, ei); hasRealValue = true; } } else { values[ci] = 1; } } if (!hasRealValue) { values = null; } return values; } /** * {@inheritDoc} * * @throws IOException Thrown if there is an error during reading. * @throws RuntimeException Thrown if negative real values are detected in the input data. */ @Override public Event read() throws IOException { String line; if ((line = reader.readLine()) != null) { int si = line.indexOf(' '); String outcome = line.substring(0, si); String[] contexts = line.substring(si + 1).split("\\s+"); float[] values = parseContexts(contexts); return new Event(outcome, contexts, values); } return null; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/Sequence.java0100644 0000000 0000000 00000003455 14523004075 031747 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; /** * Class which models a sequence. * @param The type of the object which is the source of this sequence. */ public class Sequence { private final Event[] events; private final T source; /** * Initializes {@link Sequence} made up of the specified events and derived from the * specified source. * * @param events The {@link Event events} of the sequence. * @param source The {@link T source object} for this sequence. */ public Sequence(Event[] events, T source) { this.events = events; this.source = source; } /** * @return Retrieves the events which make up this sequence. */ public Event[] getEvents() { return events; } /** * This object is used when the events for this sequence need to be re-derived such * as in a call to {@link SequenceStream#updateContext(Sequence, AbstractModel)}. * * @return Retrieves an object from which this sequence can be derived. */ public T getSource() { return source; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_model_Sequence0100644 0000000 0000000 00000000166 14523004075 032572 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/SequenceClassificationModel.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/SequenceClassificationMo0100644 0000000 0000000 00000006277 14523004075 034204 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import opennlp.tools.util.BeamSearchContextGenerator; import opennlp.tools.util.Sequence; import opennlp.tools.util.SequenceValidator; /** * A classification model that can label an input {@link Sequence}. * * @param The type of the object which is the source. */ public interface SequenceClassificationModel { /** * Finds the {@link Sequence} with the highest probability. * * @param sequence The {@link T sequence} used as input. * @param additionalContext An array that provides additional information (context). * @param cg The {@link BeamSearchContextGenerator} to use. * @param validator The {@link SequenceValidator} to validate with. * * @return The {@link Sequence} with the highest probability. */ Sequence bestSequence(T[] sequence, Object[] additionalContext, BeamSearchContextGenerator cg, SequenceValidator validator); /** * Finds the n most probable {@link Sequence sequences} with the highest probability. * * @param numSequences The number of sequences to compute. * @param sequence The {@link T sequence} used as input. * @param additionalContext An array that provides additional information (context). * @param minSequenceScore The minimum score to achieve. * @param cg The {@link BeamSearchContextGenerator} to use. * @param validator The {@link SequenceValidator} to validate with. * * @return The {@link Sequence sequences} with the highest probability. */ Sequence[] bestSequences(int numSequences, T[] sequence, Object[] additionalContext, double minSequenceScore, BeamSearchContextGenerator cg, SequenceValidator validator); /** * Finds the n most probable {@link Sequence sequences} with the highest probability. * * @param numSequences The number of sequences to compute. * @param sequence The {@link T sequence} used as input. * @param additionalContext An array that provides additional information (context). * @param cg The {@link BeamSearchContextGenerator} to use. * @param validator The {@link SequenceValidator} to validate with. * * @return The {@link Sequence sequences} with the highest probability. */ Sequence[] bestSequences(int numSequences, T[] sequence, Object[] additionalContext, BeamSearchContextGenerator cg, SequenceValidator validator); /** * @return Retrieves all possible outcomes. */ String[] getOutcomes(); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/SequenceStream.java0100644 0000000 0000000 00000002714 14523004075 033120 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import opennlp.tools.util.ObjectStream; /** * Interface for streams of {@link Sequence sequences} used to train sequence models. * * @see Event * @see ObjectStream */ public interface SequenceStream extends ObjectStream> { /** * Creates a new event array based on the outcomes predicted by the specified parameters * for the specified {@link Sequence}. * * @param sequence The {@link Sequence} to be evaluated. * @param model The {@link AbstractModel model} to use. * * @return The resulting {@link Event} array. */ Event[] updateContext(Sequence sequence, AbstractModel model); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_model_Sequence0100644 0000000 0000000 00000000164 14523004075 032570 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/SequenceStreamEventStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/SequenceStreamEventStrea0100644 0000000 0000000 00000003750 14523004075 034202 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import opennlp.tools.util.ObjectStream; /** * Class which turns a {@link SequenceStream} into an event stream. * * @see Event * @see ObjectStream */ public class SequenceStreamEventStream implements ObjectStream { private final SequenceStream sequenceStream; private Iterator eventIt = Collections.emptyListIterator(); public SequenceStreamEventStream(SequenceStream sequenceStream) { this.sequenceStream = sequenceStream; } @Override public Event read() throws IOException { while (!eventIt.hasNext()) { Sequence sequence = sequenceStream.read(); if (sequence == null) { return null; } eventIt = Arrays.asList(sequence.getEvents()).iterator(); } return eventIt.next(); } @Override public void reset() throws IOException, UnsupportedOperationException { eventIt = Collections.emptyListIterator(); sequenceStream.reset(); } @Override public void close() throws IOException { eventIt = Collections.emptyListIterator(); sequenceStream.close(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/TwoPassDataIndexer.java0100644 0000000 0000000 00000015613 14523004075 033707 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.math.BigInteger; import java.nio.file.Files; import java.util.HashMap; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.util.ObjectStream; /** * Collecting event and context counts by making two passes over the events. *

* The first pass determines which contexts will be used by the model, and the * second pass creates the events in memory containing only the contexts which * will be used. This greatly reduces the amount of memory required for storing * the events. During the first pass a temporary event file is created which * is read during the second pass. * * @see DataIndexer * @see AbstractDataIndexer */ public class TwoPassDataIndexer extends AbstractDataIndexer { private static final Logger logger = LoggerFactory.getLogger(TwoPassDataIndexer.class); public TwoPassDataIndexer() {} /** * {@inheritDoc} */ @Override public void index(ObjectStream eventStream) throws IOException { int cutoff = trainingParameters.getIntParameter(CUTOFF_PARAM, CUTOFF_DEFAULT); boolean sort = trainingParameters.getBooleanParameter(SORT_PARAM, SORT_DEFAULT); long start = System.currentTimeMillis(); logger.info("Indexing events with TwoPass using cutoff of {}", cutoff); logger.info("Computing event counts..."); Map predicateIndex = new HashMap<>(); File tmp = Files.createTempFile("events", null).toFile(); tmp.deleteOnExit(); int numEvents; BigInteger writeHash; HashSumEventStream writeEventStream = new HashSumEventStream(eventStream); // do not close. try (DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(tmp)))) { numEvents = computeEventCounts(writeEventStream, dos, predicateIndex, cutoff); } writeHash = writeEventStream.calculateHashSum(); logger.info("done. {} events", numEvents); logger.info("Indexing..."); List eventsToCompare; BigInteger readHash = null; try (HashSumEventStream readStream = new HashSumEventStream(new EventStream(tmp))) { eventsToCompare = index(readStream, predicateIndex); readHash = readStream.calculateHashSum(); } tmp.delete(); if (readHash.compareTo(writeHash) != 0) throw new IOException("Event hash for writing and reading events did not match."); logger.info("done."); if (sort) { logger.info("Sorting and merging events... "); } else { logger.info("Collecting events... "); } sortAndMerge(eventsToCompare,sort); logger.info(String.format("Done indexing in %.2f s.", (System.currentTimeMillis() - start) / 1000d)); } /** * Reads events from eventStream into a linked list. The * predicates associated with each event are counted and any which * occur at least cutoff times are added to the * predicatesInOut map along with a unique integer index. *

* Protocol: * 1 - (utf string) - Event outcome * 2 - (int) - Event context array length * 3+ - (utf string) - Event context string * 4 - (int) - Event values array length * 5+ - (float) - Event value * * @param eventStream an EventStream value * @param eventStore a writer to which the events are written to for later processing. * @param predicatesInOut a TObjectIntHashMap value * @param cutoff an int value */ private int computeEventCounts(ObjectStream eventStream, DataOutputStream eventStore, Map predicatesInOut, int cutoff) throws IOException { Map counter = new HashMap<>(); int eventCount = 0; Event ev; while ((ev = eventStream.read()) != null) { eventCount++; eventStore.writeUTF(ev.getOutcome()); eventStore.writeInt(ev.getContext().length); String[] ec = ev.getContext(); update(ec, counter); for (String ctxString : ec) eventStore.writeUTF(ctxString); if (ev.getValues() == null) { eventStore.writeInt(0); } else { eventStore.writeInt(ev.getValues().length); for (float value : ev.getValues()) eventStore.writeFloat(value); } } String[] predicateSet = counter.entrySet().stream() .filter(entry -> entry.getValue() >= cutoff) .map(Map.Entry::getKey).sorted() .toArray(String[]::new); predCounts = new int[predicateSet.length]; for (int i = 0; i < predicateSet.length; i++) { predCounts[i] = counter.get(predicateSet[i]); predicatesInOut.put(predicateSet[i], i); } return eventCount; } private static class EventStream implements ObjectStream { private final DataInputStream inputStream; public EventStream(File file) throws IOException { inputStream = new DataInputStream(new BufferedInputStream(new FileInputStream(file))); } @Override public Event read() throws IOException { if (inputStream.available() != 0) { String outcome = inputStream.readUTF(); int contextLength = inputStream.readInt(); String[] context = new String[contextLength]; for (int i = 0; i < contextLength; i++) context[i] = inputStream.readUTF(); int valuesLength = inputStream.readInt(); float[] values = null; if (valuesLength > 0) { values = new float[valuesLength]; for (int i = 0; i < valuesLength; i++) values[i] = inputStream.readFloat(); } return new Event(outcome, context, values); } else { return null; } } @Override public void reset() throws IOException, UnsupportedOperationException { throw new UnsupportedOperationException(); } @Override public void close() throws IOException { inputStream.close(); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/UniformPrior.java0100644 0000000 0000000 00000003613 14523004075 032626 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.util.Objects; /** * Provide a maximum entropy model with a uniform {@link Prior}. */ public class UniformPrior implements Prior { private int numOutcomes; private double r; @Override public void logPrior(double[] dist, int[] context, float[] values) { for (int oi = 0; oi < numOutcomes; oi++) { dist[oi] = r; } } @Override public void logPrior(double[] dist, Context[] context, float[] values) { logPrior(dist, (int[]) null, values); } @Override public void logPrior(double[] dist, int[] context) { logPrior(dist,context,null); } @Override public void setLabels(String[] outcomeLabels, String[] contextLabels) { this.numOutcomes = outcomeLabels.length; r = StrictMath.log(1.0 / numOutcomes); } @Override public int hashCode() { return Objects.hash(numOutcomes, r); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof UniformPrior prior) { return numOutcomes == prior.numOutcomes && r == prior.r; } return false; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/model/package-info.java0100644 0000000 0000000 00000001614 14523004075 032516 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package related to ML models and feature selection techniques. */ package opennlp.tools.ml.model; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_naivebayes_Bin0100644 0000000 0000000 00000000173 14523004075 032556 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/BinaryNaiveBayesModelReader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/BinaryNaiveBayesMod0100644 0000000 0000000 00000003555 14523004075 034141 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.naivebayes; import java.io.DataInputStream; import java.io.File; import java.io.IOException; import opennlp.tools.ml.model.BinaryFileDataReader; /** * A {@link NaiveBayesModelReader} that reads models from a binary format. */ public class BinaryNaiveBayesModelReader extends NaiveBayesModelReader { /** * Instantiates {@link BinaryNaiveBayesModelReader} via a {@link DataInputStream} * containing the model contents. * * @param dis The {@link DataInputStream} containing the model information. * It must be open and have bytes available. */ public BinaryNaiveBayesModelReader(DataInputStream dis) { super(new BinaryFileDataReader(dis)); } /** * Instantiates {@link BinaryNaiveBayesModelReader} via a {@link File} and creates * a reader for it. Based on whether the file's suffix contains {@code .gz}, * it detects whether the file is gzipped or not. * * @param f The {@link File} that references the model to be read. */ public BinaryNaiveBayesModelReader(File f) throws IOException { super(f); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_naivebayes_Bin0100644 0000000 0000000 00000000173 14523004075 032556 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/BinaryNaiveBayesModelWriter.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/BinaryNaiveBayesMod0100644 0000000 0000000 00000006021 14523004075 034130 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.naivebayes; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.GZIPOutputStream; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.ModelParameterChunker; /** * A {@link NaiveBayesModelWriter} that writes models in a binary format. */ public class BinaryNaiveBayesModelWriter extends NaiveBayesModelWriter { private final DataOutputStream output; /** * Instantiates {@link BinaryNaiveBayesModelWriter} via an * {@link AbstractModel naive bayes model} and a {@link File}. * Prepares writing of a {@code model} to the file. * Based on whether the file's suffix contains {@code .gz}, it detects whether * the file is gzipped or not. * * @param model The {@link AbstractModel naive bayes model} which is to be persisted. * @param f The {@link File} in which the model is to be persisted. * * @throws IOException Thrown if IO errors occurred. * @see NaiveBayesModel */ public BinaryNaiveBayesModelWriter(AbstractModel model, File f) throws IOException { super(model); if (f.getName().endsWith(".gz")) { output = new DataOutputStream( new GZIPOutputStream(new FileOutputStream(f))); } else { output = new DataOutputStream(new FileOutputStream(f)); } } /** * Instantiates {@link BinaryNaiveBayesModelWriter} via * an {@link AbstractModel naive bayes model} and a {@link DataOutputStream}. * * @param model The {@link AbstractModel naive bayes model} which is to be persisted. * @param dos The {@link DataOutputStream} which is used to persist the {@code model}. * The {@code dos} must be opened. */ public BinaryNaiveBayesModelWriter(AbstractModel model, DataOutputStream dos) { super(model); output = dos; } @Override public void writeUTF(String s) throws IOException { ModelParameterChunker.writeUTF(output, s); } @Override public void writeInt(int i) throws IOException { output.writeInt(i); } @Override public void writeDouble(double d) throws IOException { output.writeDouble(d); } @Override public void close() throws IOException { output.flush(); output.close(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_naivebayes_Log0100644 0000000 0000000 00000000160 14523004075 032563 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/LogProbabilities.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/LogProbabilities.ja0100644 0000000 0000000 00000014437 14523004075 034132 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.naivebayes; import java.util.ArrayList; import java.util.Map; import java.util.Map.Entry; /** * Class implementing the probability distribution over labels returned by * a classifier as a log of probabilities. *

* This is necessary because floating point precision in Java does not allow for high-accuracy * representation of very low probabilities such as would occur in a text categorizer. * * @param the label (category) class * * @see Probabilities */ public class LogProbabilities extends Probabilities { /** * Assigns a {@code probability} to a label {@code t}, * discarding any previously assigned probability. * * @param t The label to which the probability is being assigned. * @param probability The probability to assign. */ @Override public void set(T t, double probability) { isNormalised = false; map.put(t, log(probability)); } /** * Assigns a {@code probability} to a label {@code t}, * discarding any previously assigned probability. * * @param t The label to which the probability is being assigned. * @param probability The {@link Probability} to assign. */ @Override public void set(T t, Probability probability) { isNormalised = false; map.put(t, probability.getLog()); } /** * Assigns a {@code probability} to a label {@code t}, * discarding any previously assigned probability, * if the new probability is greater than the old one. * * @param t The label to which the probability is being assigned. * @param probability The probability to assign. */ @Override public void setIfLarger(T t, double probability) { double logProbability = log(probability); Double p = map.get(t); if (p == null || logProbability > p) { isNormalised = false; map.put(t, logProbability); } } /** * Assigns a log {@code probability} to a label {@code t}, * discarding any previously assigned probability. * * @param t The label to which the log probability is being assigned. * @param probability The log {@code probability} to assign. */ @Override public void setLog(T t, double probability) { isNormalised = false; map.put(t, probability); } /** * Compounds the existing {@code probability} mass on the label {@code t} * with the new probability passed in to the method. * * @param t The label whose {@code probability} mass is being updated. * @param probability The probability weight to add. * @param count The amplifying factor for the {@code probability} compounding. */ @Override public void addIn(T t, double probability, int count) { isNormalised = false; Double p = map.get(t); if (p == null) p = 0.0; probability = log(probability) * count; map.put(t, p + probability); } private Map normalize() { if (isNormalised) return normalised; Map temp = createMapDataStructure(); double highestLogProbability = Double.NEGATIVE_INFINITY; for (Entry entry : map.entrySet()) { final Double p = entry.getValue(); if (p != null && p > highestLogProbability) { highestLogProbability = p; } } double sum = 0; for (Entry entry : map.entrySet()) { T t = entry.getKey(); Double p = entry.getValue(); if (p != null) { double temp_p = StrictMath.exp(p - highestLogProbability); if (!Double.isNaN(temp_p)) { sum += temp_p; temp.put(t, temp_p); } } } for (Entry entry : temp.entrySet()) { final T t = entry.getKey(); final Double p = entry.getValue(); if (p != null && sum > Double.MIN_VALUE) { temp.put(t, p / sum); } } normalised = temp; isNormalised = true; return temp; } private double log(double prob) { return StrictMath.log(prob); } /** * @param t The label whose probability shall be returned. * @return Retrieves the probability associated with the label {@code t}. */ @Override public Double get(T t) { Double d = normalize().get(t); if (d == null) return 0.0; return d; } /** * @param t The label whose log probability shall be returned. * @return Retrieves the log probability associated with the label {@code t}. */ @Override public Double getLog(T t) { Double d = map.get(t); if (d == null) return Double.NEGATIVE_INFINITY; return d; } @Override public void discardCountsBelow(double i) { i = StrictMath.log(i); ArrayList labelsToRemove = new ArrayList<>(); for (Entry entry : map.entrySet()) { final T label = entry.getKey(); Double sum = entry.getValue(); if (sum == null) sum = Double.NEGATIVE_INFINITY; if (sum < i) labelsToRemove.add(label); } for (T label : labelsToRemove) { map.remove(label); } } /** * @return Retrieves a {@link Map} of all labels and their probabilities. */ @Override public Map getAll() { return normalize(); } /** * @return Retrieves the label that has the highest associated probability */ @Override public T getMax() { double max = Double.NEGATIVE_INFINITY; T maxT = null; for (Entry entry : map.entrySet()) { final T t = entry.getKey(); final Double temp = entry.getValue(); if (temp >= max) { max = temp; maxT = t; } } return maxT; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_naivebayes_Log0100644 0000000 0000000 00000000156 14523004075 032570 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/LogProbability.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/LogProbability.java0100644 0000000 0000000 00000007414 14523004075 034146 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.naivebayes; /** * A class implementing the logarithmic {@link Probability} for a label. * * @param The label (category) class. * */ public class LogProbability extends Probability { public LogProbability(T label) { super(label); set(1.0); } /** * Assigns a {@code probability} to a label, discarding any previously assigned probability. * * @param probability The probability to assign. */ @Override public void set(double probability) { this.probability = StrictMath.log(probability); } /** * Assigns a {@code probability} to a label, discarding any previously assigned probability. * * @param probability The {@link Probability} to assign. */ @Override public void set(Probability probability) { this.probability = probability.getLog(); } /** * Assigns a {@code probability} to a label, discarding any previously assigned probability, * if the new probability is greater than the old one. * * @param probability The probability to assign. */ @Override public void setIfLarger(double probability) { double logP = StrictMath.log(probability); if (this.probability < logP) { this.probability = logP; } } /** * Assigns a {@code probability} to a label, discarding any previously assigned probability, * if the new probability is greater than the old one. * * @param probability The {@link Probability} to assign. */ @Override public void setIfLarger(Probability probability) { if (this.probability < probability.getLog()) { this.probability = probability.getLog(); } } /** * @param probability the probability to check * @return {@code true} if a probability is greater than the old one, {@code false} otherwise. */ @Override public boolean isLarger(Probability probability) { return this.probability < probability.getLog(); } /** * Assigns a log {@code probability} to a label, discarding any previously assigned probability. * * @param probability The log probability to assign. */ @Override public void setLog(double probability) { this.probability = probability; } /** * Compounds the existing {@code probability} mass on the label with the new * probability passed in to the method. * * @param probability The probability weight to add. */ @Override public void addIn(double probability) { setLog(this.probability + StrictMath.log(probability)); } /** * @return Retrieves the probability associated with a label. */ @Override public Double get() { return StrictMath.exp(probability); } /** * @return Retrieves the log probability associated with a label. */ @Override public Double getLog() { return probability; } /** * @return Retrieves the probabilities associated with all labels, */ @Override public T getLabel() { return label; } @Override public String toString() { return label + ":" + probability; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_naivebayes_Nai0100644 0000000 0000000 00000000170 14523004075 032552 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/NaiveBayesEvalParameters.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/NaiveBayesEvalParam0100644 0000000 0000000 00000003063 14523004075 034117 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.naivebayes; import opennlp.tools.ml.model.Context; import opennlp.tools.ml.model.EvalParameters; /** * Specialized {@link EvalParameters parameters} for the evaluation of a naive bayes classifier * * @see EvalParameters */ public class NaiveBayesEvalParameters extends EvalParameters { protected final double[] outcomeTotals; protected final long vocabulary; public NaiveBayesEvalParameters(Context[] params, int numOutcomes, double[] outcomeTotals, long vocabulary) { super(params, numOutcomes); this.outcomeTotals = outcomeTotals; this.vocabulary = vocabulary; } public double[] getOutcomeTotals() { return outcomeTotals; } public long getVocabulary() { return vocabulary; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_naivebayes_Nai0100644 0000000 0000000 00000000157 14523004075 032557 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/NaiveBayesModel.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/NaiveBayesModel.jav0100644 0000000 0000000 00000017224 14523004075 034072 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.naivebayes; import java.util.Map; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.Context; import opennlp.tools.ml.model.EvalParameters; import opennlp.tools.ml.model.MaxentModel; /** * A {@link MaxentModel} implementation of the multinomial Naive Bayes classifier model. * * @see AbstractModel * @see MaxentModel */ public class NaiveBayesModel extends AbstractModel { protected final double[] outcomeTotals; protected long vocabulary; /** * Initializes a {@link NaiveBayesModel}. * * @param params The {@link Context parameters} to set. * @param predLabels The predicted labels. * @param pmap A {@link Map} that provides a mapping between predicates and contexts. * @param outcomeNames The names of the outcomes. */ NaiveBayesModel(Context[] params, String[] predLabels, Map pmap, String[] outcomeNames) { super(params, predLabels, pmap, outcomeNames); outcomeTotals = initOutcomeTotals(outcomeNames, params); this.evalParams = new NaiveBayesEvalParameters(params, outcomeNames.length, outcomeTotals, predLabels.length); modelType = ModelType.NaiveBayes; } /** * Initializes a {@link NaiveBayesModel}. * * @param params The {@link Context parameters} to set. * @param predLabels The predicted labels. * @param outcomeNames The names of the outcomes. */ public NaiveBayesModel(Context[] params, String[] predLabels, String[] outcomeNames) { super(params, predLabels, outcomeNames); outcomeTotals = initOutcomeTotals(outcomeNames, params); this.evalParams = new NaiveBayesEvalParameters(params, outcomeNames.length, outcomeTotals, predLabels.length); modelType = ModelType.NaiveBayes; } protected double[] initOutcomeTotals(String[] outcomeNames, Context[] params) { double[] outcomeTotals = new double[outcomeNames.length]; for (Context context : params) { for (int j = 0; j < context.getOutcomes().length; ++j) { int outcome = context.getOutcomes()[j]; double count = context.getParameters()[j]; outcomeTotals[outcome] += count; } } return outcomeTotals; } /** * {@inheritDoc} */ @Override public double[] eval(String[] context) { return eval(context, new double[evalParams.getNumOutcomes()]); } /** * {@inheritDoc} */ @Override public double[] eval(String[] context, float[] values) { return eval(context, values, new double[evalParams.getNumOutcomes()]); } /** * {@inheritDoc} */ @Override public double[] eval(String[] context, double[] probs) { return eval(context, null, probs); } public double[] eval(String[] context, float[] values, double[] outsums) { Context[] scontexts = new Context[context.length]; java.util.Arrays.fill(outsums, 0); for (int i = 0; i < context.length; i++) { scontexts[i] = pmap.get(context[i]); } return eval(scontexts, values, outsums, evalParams, true); } /** * Evaluates a {@link NaiveBayesModel}. * * @param context The context parameters as {@code int[]}. * @param prior The data prior to the evaluation as {@code double[]}. * @param model The {@link EvalParameters} used for evaluation. * * @return The resulting evaluation data as {@code double[]}. */ public static double[] eval(int[] context, double[] prior, EvalParameters model) { return eval(context, null, prior, model, true); } /** * Evaluates a {@link NaiveBayesModel}. * * @param context The {@link Context[] parameters} to set.. * @param values The {@code float[]} values to be used. * @param prior The data prior to the evaluation as {@code double[]}. * @param model The {@link EvalParameters} used for evaluation. * @param normalize Whether to normalize, or not. * * @return The resulting evaluation data as {@code double[]}. */ static double[] eval(Context[] context, float[] values, double[] prior, EvalParameters model, boolean normalize) { Probabilities probabilities = new LogProbabilities<>(); double[] outcomeTotals = model instanceof NaiveBayesEvalParameters ? ((NaiveBayesEvalParameters) model).getOutcomeTotals() : new double[prior.length]; long vocabulary = model instanceof NaiveBayesEvalParameters ? ((NaiveBayesEvalParameters) model).getVocabulary() : 0; double[] activeParameters; int[] activeOutcomes; double value = 1; for (int ci = 0; ci < context.length; ci++) { if (context[ci] != null) { Context predParams = context[ci]; activeOutcomes = predParams.getOutcomes(); activeParameters = predParams.getParameters(); if (values != null) { value = values[ci]; } int ai = 0; for (int i = 0; i < outcomeTotals.length && ai < activeOutcomes.length; ++i) { int oid = activeOutcomes[ai]; double numerator = oid == i ? activeParameters[ai++] * value : 0; double denominator = outcomeTotals[i]; probabilities.addIn(i, getProbability(numerator, denominator, vocabulary, true), 1); } } } double total = 0; for (double outcomeTotal : outcomeTotals) { total += outcomeTotal; } for (int i = 0; i < outcomeTotals.length; ++i) { double numerator = outcomeTotals[i]; probabilities.addIn(i, numerator / total, 1); } for (int i = 0; i < outcomeTotals.length; ++i) { prior[i] = probabilities.get(i); } return prior; } /** * Evaluates a {@link NaiveBayesModel}. * * @param context The context parameters as {@code int[]}. * @param values The {@code float[]} values to be used. * @param prior The data prior to the evaluation as {@code double[]}. * @param model The {@link EvalParameters} used for evaluation. * @param normalize Whether to normalize, or not. * * @return The resulting evaluation data as {@code double[]}. */ static double[] eval(int[] context, float[] values, double[] prior, EvalParameters model, boolean normalize) { Context[] scontexts = new Context[context.length]; for (int i = 0; i < context.length; i++) { scontexts[i] = model.getParams()[context[i]]; } return eval(scontexts, values, prior, model, normalize); } private static double getProbability(double numerator, double denominator, double vocabulary, boolean isSmoothed) { if (isSmoothed) return getSmoothedProbability(numerator, denominator, vocabulary); else if (denominator == 0 || denominator <= Double.MIN_VALUE) return 0; else return numerator / denominator; } private static double getSmoothedProbability(double numerator, double denominator, double vocabulary) { final double delta = 0.05; // Lidstone smoothing return (numerator + delta) / (denominator + delta * vocabulary); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_naivebayes_Nai0100644 0000000 0000000 00000000165 14523004075 032556 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/NaiveBayesModelReader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/NaiveBayesModelRead0100644 0000000 0000000 00000007256 14523004075 034113 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.naivebayes; import java.io.File; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.AbstractModelReader; import opennlp.tools.ml.model.Context; import opennlp.tools.ml.model.DataReader; /** * The base class for readers of {@link NaiveBayesModel models}. * It assumes that models are saved in the following sequence: * *
NaiveBayes (model type identifier) *
1. # of parameters ({@code int}) *
2. # of outcomes ({@code int}) *
* list of outcome names ({@code String}) *
3. # of different types of outcome patterns ({@code int}) *
* list of ({@code int} {@code int[]}) *
[# of predicates for which outcome pattern is true] [outcome pattern] *
4. # of predicates ({@code int}) *
* list of predicate names ({@code String}) * * @see NaiveBayesModel * @see AbstractModelReader */ public class NaiveBayesModelReader extends AbstractModelReader { private static final Logger logger = LoggerFactory.getLogger(NaiveBayesModelReader.class); /** * Initializes a {@link NaiveBayesModelReader} via a {@link File}. * * @param file The {@link File} that references the model to be read. * * @throws IOException Thrown if IO errors occurred. */ public NaiveBayesModelReader(File file) throws IOException { super(file); } /** * Initializes a {@link NaiveBayesModelReader} via a {@link DataReader}. * * @param dataReader The {@link DataReader} that references the model to be read. */ public NaiveBayesModelReader(DataReader dataReader) { super(dataReader); } /** * Constructs a {@link AbstractModel model}. *

* If you are creating a reader for a format which won't work with this * (perhaps a database or {@code xml} file), override this method and ignore the * other methods provided in this abstract class. * * @return A {@link NaiveBayesModel} reconstructed from a model's (read) attributes. * @throws IOException Thrown if IO errors occurred during (re-)construction. */ @Override public AbstractModel constructModel() throws IOException { String[] outcomeLabels = getOutcomes(); int[][] outcomePatterns = getOutcomePatterns(); String[] predLabels = getPredicates(); Context[] params = getParameters(outcomePatterns); return new NaiveBayesModel(params, predLabels, outcomeLabels); } /** * Reads the mode type from the underlying reader and informs if it not a * {@code Naive Bayes} model. * * @throws IOException Thrown if IO errors occurred. */ @Override public void checkModelType() throws IOException { String modelType = readUTF(); if (!modelType.equals("NaiveBayes")) logger.error("Attempting to load a {}" + " model as a NaiveBayes model." + " You should expect problems.", modelType); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_naivebayes_Nai0100644 0000000 0000000 00000000165 14523004075 032556 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/NaiveBayesModelWriter.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/NaiveBayesModelWrit0100644 0000000 0000000 00000007500 14523004075 034155 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.naivebayes; import java.io.IOException; import java.util.Arrays; import java.util.Map; import opennlp.tools.ml.AbstractMLModelWriter; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.AbstractModelWriter; import opennlp.tools.ml.model.ComparablePredicate; import opennlp.tools.ml.model.Context; /** * The base class for {@link NaiveBayesModel} writers. *

* It provides the {@link #persist()} method which takes care of the structure * of a stored document, and requires an extending class to define precisely * how the data should be stored. * * @see NaiveBayesModel * @see AbstractModelWriter * @see AbstractMLModelWriter */ public abstract class NaiveBayesModelWriter extends AbstractMLModelWriter { /** * Initializes a {@link NaiveBayesModelWriter} for a * {@link AbstractModel NaiveBayes model}. * * @param model The {@link AbstractModel NaiveBayes model} to be written. */ public NaiveBayesModelWriter(AbstractModel model) { super(); Object[] data = model.getDataStructures(); this.numOutcomes = model.getNumOutcomes(); PARAMS = (Context[]) data[0]; @SuppressWarnings("unchecked") Map pmap = (Map) data[1]; OUTCOME_LABELS = (String[]) data[2]; PARAMS = new Context[pmap.size()]; PRED_LABELS = new String[pmap.size()]; int i = 0; for (Map.Entry pred : pmap.entrySet()) { PRED_LABELS[i] = pred.getKey(); PARAMS[i] = pred.getValue(); i++; } } /** * {@inheritDoc} */ @Override protected ComparablePredicate[] sortValues() { ComparablePredicate[] sortPreds = new ComparablePredicate[PARAMS.length]; int numParams = 0; for (int pid = 0; pid < PARAMS.length; pid++) { int[] predkeys = PARAMS[pid].getOutcomes(); // Arrays.sort(predkeys); int numActive = predkeys.length; double[] activeParams = PARAMS[pid].getParameters(); numParams += numActive; /* * double[] activeParams = new double[numActive]; * * int id = 0; for (int i=0; i < predkeys.length; i++) { int oid = * predkeys[i]; activeOutcomes[id] = oid; activeParams[id] = * PARAMS[pid].getParams(oid); id++; } */ sortPreds[pid] = new ComparablePredicate(PRED_LABELS[pid], predkeys, activeParams); } Arrays.sort(sortPreds); return sortPreds; } /** * Writes the {@link AbstractModel perceptron model}, using the * {@link #writeUTF(String)}, {@link #writeDouble(double)}, or {@link #writeInt(int)}} * methods implemented by extending classes. * *

If you wish to create a {@link NaiveBayesModelWriter} which uses a different * structure, it will be necessary to override the {@link #persist()} method in * addition to implementing the {@code writeX(..)} methods. * * @throws IOException Thrown if IO errors occurred. */ @Override public void persist() throws IOException { // the type of model (NaiveBayes) writeUTF("NaiveBayes"); super.persist(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_naivebayes_Nai0100644 0000000 0000000 00000000161 14523004075 032552 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/NaiveBayesTrainer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/NaiveBayesTrainer.j0100644 0000000 0000000 00000016353 14523004075 034111 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.naivebayes; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.ml.AbstractEventTrainer; import opennlp.tools.ml.ArrayMath; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.Context; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.EvalParameters; import opennlp.tools.ml.model.MutableContext; import opennlp.tools.util.TrainingParameters; /** * Trains {@link NaiveBayesModel models} using the combination of EM algorithm * and Naive Bayes classifier which is described in: *

* Text Classification from Labeled and Unlabeled Documents using EM * Nigam, McCallum, et al. paper of 2000 * * @see NaiveBayesModel * @see AbstractEventTrainer */ public class NaiveBayesTrainer extends AbstractEventTrainer { private static final Logger logger = LoggerFactory.getLogger(NaiveBayesTrainer.class); public static final String NAIVE_BAYES_VALUE = "NAIVEBAYES"; /** * Number of unique events which occurred in the event set. */ private int numUniqueEvents; /** * Number of events in the event set. */ private int numEvents; /** * Number of predicates. */ private int numPreds; /** * Number of outcomes. */ private int numOutcomes; /** * Records the array of predicates seen in each event. */ private int[][] contexts; /** * The value associates with each context. If null then context values are assumes to be 1. */ private float[][] values; /** * List of outcomes for each event i, in context[i]. */ private int[] outcomeList; /** * Records the num of times an event has been seen for each event i, in context[i]. */ private int[] numTimesEventsSeen; /** * Stores the String names of the outcomes. The NaiveBayes only tracks outcomes * as ints, and so this array is needed to save the model to disk and * thereby allow users to know what the outcome was in human * understandable terms. */ private String[] outcomeLabels; /** * Stores the String names of the predicates.The NaiveBayes only tracks * predicates as ints, and so this array is needed to save the model to * disk and thereby allow users to know what the outcome was in human * understandable terms. */ private String[] predLabels; /** * Instantiates a {@link NaiveBayesTrainer} with default training parameters. */ public NaiveBayesTrainer() { } /** * Instantiates a {@link NaiveBayesTrainer} with specific * {@link TrainingParameters}. * * @param parameters The {@link TrainingParameters parameter} to use. */ public NaiveBayesTrainer(TrainingParameters parameters) { super(parameters); } @Override public boolean isSortAndMerge() { return false; } @Override public AbstractModel doTrain(DataIndexer indexer) throws IOException { return this.trainModel(indexer); } // << members related to AbstractEventTrainer /** * Trains a {@link NaiveBayesModel} with given parameters. * * @param di The {@link DataIndexer} used as data input. * * @return A valid, trained {@link AbstractModel Naive Bayes model}. */ public AbstractModel trainModel(DataIndexer di) { logger.info("Incorporating indexed data for training..."); contexts = di.getContexts(); values = di.getValues(); numTimesEventsSeen = di.getNumTimesEventsSeen(); numEvents = di.getNumEvents(); numUniqueEvents = contexts.length; outcomeLabels = di.getOutcomeLabels(); outcomeList = di.getOutcomeList(); predLabels = di.getPredLabels(); numPreds = predLabels.length; numOutcomes = outcomeLabels.length; logger.info("done."); logger.info("\tNumber of Event Tokens: {} " + "\n\t Number of Outcomes: {} " + "\n\t Number of Predicates: {}", numUniqueEvents, numOutcomes, numPreds); logger.info("Computing model parameters..."); MutableContext[] finalParameters = findParameters(); logger.info("...done."); /* Create and return the model ****/ return new NaiveBayesModel(finalParameters, predLabels, outcomeLabels); } private MutableContext[] findParameters() { int[] allOutcomesPattern = new int[numOutcomes]; for (int oi = 0; oi < numOutcomes; oi++) allOutcomesPattern[oi] = oi; /* Stores the estimated parameter value of each predicate during iteration. */ MutableContext[] params = new MutableContext[numPreds]; for (int pi = 0; pi < numPreds; pi++) { params[pi] = new MutableContext(allOutcomesPattern, new double[numOutcomes]); for (int aoi = 0; aoi < numOutcomes; aoi++) params[pi].setParameter(aoi, 0.0); } double[] outcomeTotals = new double[outcomeLabels.length]; for (Context context : params) { for (int j = 0; j < context.getOutcomes().length; ++j) { int outcome = context.getOutcomes()[j]; double count = context.getParameters()[j]; outcomeTotals[outcome] += count; } } EvalParameters evalParams = new NaiveBayesEvalParameters( params, outcomeLabels.length, outcomeTotals, predLabels.length); double stepSize = 1; for (int ei = 0; ei < numUniqueEvents; ei++) { int targetOutcome = outcomeList[ei]; for (int ni = 0; ni < this.numTimesEventsSeen[ei]; ni++) { for (int ci = 0; ci < contexts[ei].length; ci++) { int pi = contexts[ei][ci]; if (values == null) { params[pi].updateParameter(targetOutcome, stepSize); } else { params[pi].updateParameter(targetOutcome, stepSize * values[ei][ci]); } } } } // Output the final training stats. trainingStats(evalParams); return params; } private double trainingStats(EvalParameters evalParams) { int numCorrect = 0; for (int ei = 0; ei < numUniqueEvents; ei++) { for (int ni = 0; ni < this.numTimesEventsSeen[ei]; ni++) { double[] modelDistribution = new double[numOutcomes]; if (values != null) NaiveBayesModel.eval(contexts[ei], values[ei], modelDistribution, evalParams, false); else NaiveBayesModel.eval(contexts[ei], null, modelDistribution, evalParams, false); int max = ArrayMath.argmax(modelDistribution); if (max == outcomeList[ei]) numCorrect++; } } double trainingAccuracy = (double) numCorrect / numEvents; logger.info("Stats: ({}/{}) {}", numCorrect, numEvents, trainingAccuracy); return trainingAccuracy; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_naivebayes_Pla0100644 0000000 0000000 00000000176 14523004075 032565 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/PlainTextNaiveBayesModelReader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/PlainTextNaiveBayes0100644 0000000 0000000 00000003641 14523004075 034161 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.naivebayes; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import opennlp.tools.ml.model.PlainTextFileDataReader; /** * A {@link NaiveBayesModelReader} that reads models from a plain text format. * * @see NaiveBayesModelReader */ public class PlainTextNaiveBayesModelReader extends NaiveBayesModelReader { /** * Instantiates {@link PlainTextNaiveBayesModelReader} via a {@link BufferedReader} * containing the model contents. * * @param br The {@link BufferedReader} containing the model information. * It must be open and have bytes available. */ public PlainTextNaiveBayesModelReader(BufferedReader br) { super(new PlainTextFileDataReader(br)); } /** * Instantiates {@link PlainTextNaiveBayesModelReader} via a {@link File} and creates * a reader for it. Based on whether the file's suffix contains {@code .gz}, * it detects whether the file is gzipped or not. * * @param f The {@link File} that references the model to be read. */ public PlainTextNaiveBayesModelReader(File f) throws IOException { super(f); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_naivebayes_Pla0100644 0000000 0000000 00000000176 14523004075 032565 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/PlainTextNaiveBayesModelWriter.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/PlainTextNaiveBayes0100644 0000000 0000000 00000006423 14523004075 034162 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.naivebayes; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.zip.GZIPOutputStream; import opennlp.tools.ml.model.AbstractModel; /** * A {@link NaiveBayesModelWriter} that writes models in a plain text format. */ public class PlainTextNaiveBayesModelWriter extends NaiveBayesModelWriter { private final BufferedWriter output; /** * Instantiates {@link PlainTextNaiveBayesModelWriter} via an * {@link AbstractModel naive bayes model} and a {@link File}. * Prepares writing of a {@code model} to the file. * Based on whether the file's suffix contains {@code .gz}, it detects whether * the file is gzipped or not. * * @param model The {@link AbstractModel naive bayes model} which is to be persisted. * @param f The {@link File} in which the model is to be persisted. * * @throws IOException Thrown if IO errors occurred. * @see NaiveBayesModel */ public PlainTextNaiveBayesModelWriter(AbstractModel model, File f) throws IOException { super(model); if (f.getName().endsWith(".gz")) { output = new BufferedWriter(new OutputStreamWriter( new GZIPOutputStream(new FileOutputStream(f)))); } else { output = new BufferedWriter(new FileWriter(f)); } } /** * Instantiates {@link PlainTextNaiveBayesModelWriter} via * an {@link AbstractModel naive bayes model} and a {@link BufferedWriter}. * Prepares writing a {@code model} to the file. * Based on whether the file's suffix contains {@code .gz}, it detects whether * the file is gzipped or not. * * @param model The {@link AbstractModel naive bayes model} which is to be persisted. * @param bw The {@link BufferedWriter} which is used to persist the {@code model}. * The {@code bw} must be opened. */ public PlainTextNaiveBayesModelWriter(AbstractModel model, BufferedWriter bw) { super(model); output = bw; } @Override public void writeUTF(String s) throws IOException { output.write(s); output.newLine(); } @Override public void writeInt(int i) throws IOException { output.write(Integer.toString(i)); output.newLine(); } @Override public void writeDouble(double d) throws IOException { output.write(Double.toString(d)); output.newLine(); } @Override public void close() throws IOException { output.flush(); output.close(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/Probabilities.java0100644 0000000 0000000 00000014774 14523004075 034023 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.naivebayes; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; /** * Class implementing the probability distribution over labels returned by a classifier. * * @param The label (category) class. * */ public abstract class Probabilities { protected final Map map = new HashMap<>(); protected transient boolean isNormalised = false; protected Map normalised; protected double confidence = 0.0; /** * Assigns a probability to a label {@code t}, * discarding any previously assigned probability. * * @param t The label to which the probability is being assigned. * @param probability The probability to assign. */ public void set(T t, double probability) { isNormalised = false; map.put(t, probability); } /** * Assigns a probability to a label {@code t}, * discarding any previously assigned probability. * * @param t The label to which the probability is being assigned. * @param probability The probability to assign. */ public void set(T t, Probability probability) { isNormalised = false; map.put(t, probability.get()); } /** * Assigns a probability to a label {@code t}, * discarding any previously assigned probability, * if the new probability is greater than the old one. * * @param t The label to which the probability is being assigned. * @param probability The probability to assign. */ public void setIfLarger(T t, double probability) { Double p = map.get(t); if (p == null || probability > p) { isNormalised = false; map.put(t, probability); } } /** * Assigns a log probability to a label {@code t}, * discarding any previously assigned probability. * * @param t The label to which the log probability is being assigned. * @param probability The log probability to assign. */ public void setLog(T t, double probability) { set(t, StrictMath.exp(probability)); } /** * Compounds the existing probability mass on the label {@code t} * with the new probability passed in to the method. * * @param t The label whose probability mass is being updated. * @param probability The probability weight to add. * @param count The amplifying factor for the probability compounding. */ public void addIn(T t, double probability, int count) { isNormalised = false; Double p = map.get(t); if (p == null) p = 1.0; probability = StrictMath.pow(probability, count); map.put(t, p * probability); } /** * @param t The label whose probability needs to be returned. * @return Retrieves the probability associated with the label. */ public Double get(T t) { Double d = normalize().get(t); if (d == null) return 0.0; return d; } /** * @param t The label whose log probability should be returned. * @return Retrieves the log probability associated with the label */ public Double getLog(T t) { return StrictMath.log(get(t)); } /** * @return Retrieves the probabilities associated with all labels */ public Set getKeys() { return map.keySet(); } /** * @return Retrieves a {@link Map} of labels and their probabilities */ public Map getAll() { return normalize(); } private Map normalize() { if (isNormalised) return normalised; Map temp = createMapDataStructure(); double sum = 0; for (Entry entry : map.entrySet()) { Double p = entry.getValue(); if (p != null) { sum += p; } } for (Entry entry : temp.entrySet()) { T t = entry.getKey(); Double p = entry.getValue(); if (p != null) { temp.put(t, p / sum); } } normalised = temp; isNormalised = true; return temp; } protected Map createMapDataStructure() { return new HashMap<>(); } /** * @return Retrieves the label that has the highest associated probability. */ public T getMax() { double max = 0; T maxT = null; for (Entry entry : map.entrySet()) { final T t = entry.getKey(); final Double temp = entry.getValue(); if (temp >= max) { max = temp; maxT = t; } } return maxT; } /** * @return Retrieves the probability of the most likely label */ public double getMaxValue() { return get(getMax()); } public void discardCountsBelow(double i) { List labelsToRemove = new ArrayList<>(); for (Entry entry : map.entrySet()) { T label = entry.getKey(); Double sum = entry.getValue(); if (sum == null) sum = 0.0; if (sum < i) labelsToRemove.add(label); } for (T label : labelsToRemove) { map.remove(label); } } /** * @return Retrieves the best confidence with which this set of probabilities has been calculated. * This is a function of the amount of data that supports the assertion. * It is also a measure of the accuracy of the estimator of the probability. */ public double getConfidence() { return confidence; } /** * Sets the best confidence with which this set of probabilities has been calculated. * This is a function of the amount of data that supports the assertion. * It is also a measure of the accuracy of the estimator of the probability. * * @param confidence The confidence in the probabilities. */ public void setConfidence(double confidence) { this.confidence = confidence; } @Override public String toString() { return getAll().toString(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/Probability.java0100644 0000000 0000000 00000007361 14523004075 033505 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.naivebayes; /** * Class implementing the probability for a label. * * @param The label (category) class. * */ public class Probability { protected final T label; protected double probability = 1.0; /** * Instantiates a {@link Probability} with a given {@code label}. * * @param label The {@link T label} to assign probabilities to. */ public Probability(T label) { this.label = label; } /** * Assigns a probability to a label, discarding any previously assigned probability. * * @param probability The probability to assign. */ public void set(double probability) { this.probability = probability; } /** * Assigns a probability to a label, discarding any previously assigned probability. * * @param probability The probability to assign. */ public void set(Probability probability) { this.probability = probability.get(); } /** * Assigns a probability to a label, discarding any previously assigned probability, * if the new probability is greater than the old one. * * @param probability The probability to assign. */ public void setIfLarger(double probability) { if (this.probability < probability) { this.probability = probability; } } /** * Assigns a probability to a label, discarding any previously assigned probability, * if the new probability is greater than the old one. * * @param probability The probability to assign. */ public void setIfLarger(Probability probability) { if (this.probability < probability.get()) { this.probability = probability.get(); } } /** * Checks if a probability is greater than the old one. * * @param probability The probability to assign. * @return {@code true} if a probability is greater than the old one, {@code false} otherwise. */ public boolean isLarger(Probability probability) { return this.probability < probability.get(); } /** * Assigns a log probability to a label, discarding any previously assigned probability. * * @param probability The log probability to assign. */ public void setLog(double probability) { set(StrictMath.exp(probability)); } /** * Compounds the existing probability mass on the label with the new probability passed in to the method. * * @param probability The probability weight to add. */ public void addIn(double probability) { set(this.probability * probability); } /** * @return Retrieves the probability associated with a label. */ public Double get() { return probability; } /** * @return Retrieves the log probability associated with a label. */ public Double getLog() { return StrictMath.log(get()); } /** * @return Retrieves the probabilities associated with all labels. */ public T getLabel() { return label; } public String toString() { return label == null ? "" + probability : label + ":" + probability; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/package-info.java0100644 0000000 0000000 00000001617 14523004075 033547 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package related to ML by means of the Naive Bayes algorithm. */ package opennlp.tools.ml.naivebayes; apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/package-info.java0100644 0000000 0000000 00000001652 14523004075 031420 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package related to Machine Learning (ML) features of OpenNLP, the related ML models, and trainers. */ package opennlp.tools.ml; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_perceptron_Bin0100644 0000000 0000000 00000000173 14523004075 032611 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/BinaryPerceptronModelReader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/BinaryPerceptronMod0100644 0000000 0000000 00000003555 14523004075 034267 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.perceptron; import java.io.DataInputStream; import java.io.File; import java.io.IOException; import opennlp.tools.ml.model.BinaryFileDataReader; /** * A {@link PerceptronModelReader} that reads models from a binary format. */ public class BinaryPerceptronModelReader extends PerceptronModelReader { /** * Instantiates {@link BinaryPerceptronModelReader} via a {@link DataInputStream} * containing the model contents. * * @param dis The {@link DataInputStream} containing the model information. * It must be open and have bytes available. */ public BinaryPerceptronModelReader(DataInputStream dis) { super(new BinaryFileDataReader(dis)); } /** * Instantiates {@link BinaryPerceptronModelReader} via a {@link File} and creates * a reader for it. Based on whether the file's suffix contains {@code .gz}, * it detects whether the file is gzipped or not. * * @param f The {@link File} that references the model to be read. */ public BinaryPerceptronModelReader(File f) throws IOException { super(f); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_perceptron_Bin0100644 0000000 0000000 00000000173 14523004075 032611 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/BinaryPerceptronModelWriter.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/BinaryPerceptronMod0100644 0000000 0000000 00000006167 14523004075 034271 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.perceptron; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.GZIPOutputStream; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.ModelParameterChunker; /** * A {@link PerceptronModelWriter} that writes models in a binary format. */ public class BinaryPerceptronModelWriter extends PerceptronModelWriter { private final DataOutputStream output; /** * Instantiates {@link BinaryPerceptronModelWriter} via an {@link AbstractModel perceptron model} * and a {@link File}. Prepares writing of the {@code model} to the file. * Based on whether the file's suffix contains {@code .gz}, it detects whether * the file is gzipped or not. * * @param model The {@link AbstractModel perceptron model} which is to be persisted. * @param f The {@link File} in which the model is to be persisted. * * @see PerceptronModel */ public BinaryPerceptronModelWriter(AbstractModel model, File f) throws IOException { super(model); if (f.getName().endsWith(".gz")) { output = new DataOutputStream( new GZIPOutputStream(new FileOutputStream(f))); } else { output = new DataOutputStream(new FileOutputStream(f)); } } /** * Instantiates {@link BinaryPerceptronModelWriter} via an {@link AbstractModel perceptron model} * and a {@link DataOutputStream}. Prepares writing a {@code model} to the file. * Based on whether the file's suffix contains {@code .gz}, it detects whether * the file is gzipped or not. * * @param model The {@link AbstractModel perceptron model} which is to be persisted. * @param dos The {@link DataOutputStream} which is used to persist the {@code model}. * The {@code dos} must be opened. */ public BinaryPerceptronModelWriter(AbstractModel model, DataOutputStream dos) { super(model); output = dos; } @Override public void writeUTF(String s) throws IOException { ModelParameterChunker.writeUTF(output, s); } @Override public void writeInt(int i) throws IOException { output.writeInt(i); } @Override public void writeDouble(double d) throws IOException { output.writeDouble(d); } @Override public void close() throws IOException { output.flush(); output.close(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_perceptron_Per0100644 0000000 0000000 00000000157 14523004075 032631 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/PerceptronModel.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/PerceptronModel.jav0100644 0000000 0000000 00000014415 14523004075 034217 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.perceptron; import java.util.Arrays; import java.util.Objects; import opennlp.tools.ml.ArrayMath; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.Context; import opennlp.tools.ml.model.EvalParameters; import opennlp.tools.ml.model.MaxentModel; /** * A {@link MaxentModel model} implementation based one the perceptron algorithm. *

* Each outcome is represented as a binary perceptron classifier. * This supports standard (integer) weighting as well average weighting as described in: * Discriminative Training Methods for Hidden Markov Models: Theory and Experiments * with the Perceptron Algorithm. Michael Collins, EMNLP 2002. */ public class PerceptronModel extends AbstractModel { /** * Initializes a {@link PerceptronModel}. * * @param params The {@link Context parameters} to set. * @param predLabels The predicted labels. * @param outcomeNames The names of the outcomes. */ public PerceptronModel(Context[] params, String[] predLabels, String[] outcomeNames) { super(params,predLabels,outcomeNames); modelType = ModelType.Perceptron; } /** * {@inheritDoc} */ @Override public double[] eval(String[] context) { return eval(context,new double[evalParams.getNumOutcomes()]); } /** * {@inheritDoc} */ @Override public double[] eval(String[] context, float[] values) { return eval(context,values,new double[evalParams.getNumOutcomes()]); } /** * {@inheritDoc} */ @Override public double[] eval(String[] context, double[] probs) { return eval(context,null,probs); } public double[] eval(String[] context, float[] values, double[] outsums) { Context[] scontexts = new Context[context.length]; java.util.Arrays.fill(outsums, 0); for (int i = 0; i < context.length; i++) { scontexts[i] = pmap.get(context[i]); } return eval(scontexts,values,outsums,evalParams,true); } /** * Evaluates a {@link PerceptronModel}. * * @param context The context parameters as {@code int[]}. * @param prior The data prior to the evaluation as {@code double[]}. * @param model The {@link EvalParameters} used for evaluation. * * @return The resulting evaluation data as {@code double[]}. */ public static double[] eval(int[] context, double[] prior, EvalParameters model) { return eval(context,null,prior,model,true); } /** * Evaluates a {@link PerceptronModel}. * * @param context The context parameters as {@code int[]}. * @param values The {@code float[]} values to be used. * @param prior The data prior to the evaluation as {@code double[]}. * @param model The {@link EvalParameters} used for evaluation. * @param normalize Whether to normalize, or not. * * @return The resulting evaluation data as {@code double[]}. */ static double[] eval(int[] context, float[] values, double[] prior, EvalParameters model, boolean normalize) { Context[] scontexts = new Context[context.length]; for (int i = 0; i < context.length; i++) { scontexts[i] = model.getParams()[context[i]]; } return eval(scontexts, values, prior, model, normalize); } /** * Evaluates a {@link PerceptronModel}. * * @param context The {@link Context[] parameters} to set.. * @param values The {@code float[]} values to be used. * @param prior The data prior to the evaluation as {@code double[]}. * @param model The {@link EvalParameters} used for evaluation. * @param normalize Whether to normalize, or not. * * @return The resulting evaluation data as {@code double[]}. */ static double[] eval(Context[] context, float[] values, double[] prior, EvalParameters model, boolean normalize) { ArrayMath.sumFeatures(context, values, prior); if (normalize) { int numOutcomes = model.getNumOutcomes(); double maxPrior = 1; for (int oid = 0; oid < numOutcomes; oid++) { if (maxPrior < StrictMath.abs(prior[oid])) maxPrior = StrictMath.abs(prior[oid]); } double normal = 0.0; for (int oid = 0; oid < numOutcomes; oid++) { prior[oid] = StrictMath.exp(prior[oid] / maxPrior); normal += prior[oid]; } for (int oid = 0; oid < numOutcomes; oid++) { prior[oid] /= normal; } } return prior; } @Override public int hashCode() { /* * Note: * The hashcode for 'pmap' can not be used here, as PerceptronModelWriter * uses compressions during sortValues() operation, quote: * "remove parameters with 0 weight and predicates with no parameters" * * This leads to fewer entries in 'pmap' for serialized PerceptronModel instances * that were trained from scratch. */ return Objects.hash(Arrays.hashCode(outcomeNames), evalParams, prior); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof PerceptronModel model) { /* * Note: * The comparison 'pmap.equals(model.pmap)' can not be made here, as PerceptronModelWriter * uses compressions during sortValues() operation, quote: * "remove parameters with 0 weight and predicates with no parameters" * * This leads to fewer entries in 'pmap' for serialized PerceptronModel instances * that were trained from scratch. */ return Objects.deepEquals(outcomeNames, model.outcomeNames) && Objects.equals(prior, model.prior); } return false; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_perceptron_Per0100644 0000000 0000000 00000000165 14523004075 032630 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/PerceptronModelReader.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/PerceptronModelRead0100644 0000000 0000000 00000007270 14523004075 034235 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.perceptron; import java.io.File; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.AbstractModelReader; import opennlp.tools.ml.model.Context; import opennlp.tools.ml.model.DataReader; /** * The base class for readers of {@link PerceptronModel models}. * It assumes that models are saved in the following sequence: * *
Perceptron (model type identifier) *
1. # of parameters ({@code int}) *
2. # of outcomes ({@code int}) *
* list of outcome names ({@code String}) *
3. # of different types of outcome patterns ({@code int}) *
* list of ({@code int} {@code int[]}) *
[# of predicates for which outcome pattern is true] [outcome pattern] *
4. # of predicates ({@code int}) *
* list of predicate names ({@code String}) * * @see PerceptronModel * @see AbstractModelReader */ public class PerceptronModelReader extends AbstractModelReader { private static final Logger logger = LoggerFactory.getLogger(PerceptronModelReader.class); /** * Initializes a {@link PerceptronModelReader} via a {@link File}. * * @param file The {@link File} that references the model to be read. * * @throws IOException Thrown if IO errors occurred. */ public PerceptronModelReader(File file) throws IOException { super(file); } /** * Initializes a {@link PerceptronModelReader} via a {@link DataReader}. * * @param dataReader The {@link DataReader} that references the model to be read. */ public PerceptronModelReader(DataReader dataReader) { super(dataReader); } /** * Constructs a {@link AbstractModel model}. *

* If you are creating a reader for a format which won't work with this * (perhaps a database or {@code xml} file), override this method and ignore the * other methods provided in this abstract class. * * @return A {@link PerceptronModel} reconstructed from a model's (read) attributes. * @throws IOException Thrown if IO errors occurred during (re-)construction. */ @Override public AbstractModel constructModel() throws IOException { String[] outcomeLabels = getOutcomes(); int[][] outcomePatterns = getOutcomePatterns(); String[] predLabels = getPredicates(); Context[] params = getParameters(outcomePatterns); return new PerceptronModel(params, predLabels, outcomeLabels); } /** * Reads the mode type from the underlying reader and informs if it not a * {@code Perceptron} model. * * @throws IOException Thrown if IO errors occurred. */ @Override public void checkModelType() throws IOException { String modelType = readUTF(); if (!modelType.equals("Perceptron")) logger.error("Attempting to load a {} " + " model as a Perceptron model." + " You should expect problems.", modelType); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_perceptron_Per0100644 0000000 0000000 00000000165 14523004075 032630 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/PerceptronModelWriter.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/PerceptronModelWrit0100644 0000000 0000000 00000011034 14523004075 034300 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.perceptron; import java.io.IOException; import java.util.Arrays; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.ml.AbstractMLModelWriter; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.AbstractModelWriter; import opennlp.tools.ml.model.ComparablePredicate; import opennlp.tools.ml.model.Context; /** * The base class for {@link PerceptronModel} writers. *

* It provides the {@link #persist()} method which takes care of the structure * of a stored document, and requires an extending class to define precisely * how the data should be stored. * * @see PerceptronModel * @see AbstractModelWriter * @see AbstractMLModelWriter */ public abstract class PerceptronModelWriter extends AbstractMLModelWriter { private static final Logger logger = LoggerFactory.getLogger(PerceptronModelWriter.class); /** * Initializes a {@link PerceptronModelWriter} for a * {@link AbstractModel perceptron model}. * * @param model The {@link AbstractModel perceptron model} to be written. */ public PerceptronModelWriter(AbstractModel model) { super(); Object[] data = model.getDataStructures(); numOutcomes = model.getNumOutcomes(); PARAMS = (Context[]) data[0]; @SuppressWarnings("unchecked") Map pmap = (Map) data[1]; OUTCOME_LABELS = (String[]) data[2]; PARAMS = new Context[pmap.size()]; PRED_LABELS = new String[pmap.size()]; int i = 0; for (Map.Entry pred : pmap.entrySet()) { PRED_LABELS[i] = pred.getKey(); PARAMS[i] = pred.getValue(); i++; } } /** * {@inheritDoc} */ @Override protected ComparablePredicate[] sortValues() { ComparablePredicate[] sortPreds; ComparablePredicate[] tmpPreds = new ComparablePredicate[PARAMS.length]; int[] tmpOutcomes = new int[numOutcomes]; double[] tmpParams = new double[numOutcomes]; int numPreds = 0; // remove parameters with 0 weight and predicates with no parameters for (int pid = 0; pid < PARAMS.length; pid++) { int numParams = 0; double[] predParams = PARAMS[pid].getParameters(); int[] outcomePattern = PARAMS[pid].getOutcomes(); for (int pi = 0; pi < predParams.length; pi++) { if (predParams[pi] != 0d) { tmpOutcomes[numParams] = outcomePattern[pi]; tmpParams[numParams] = predParams[pi]; numParams++; } } int[] activeOutcomes = new int[numParams]; double[] activeParams = new double[numParams]; for (int pi = 0; pi < numParams; pi++) { activeOutcomes[pi] = tmpOutcomes[pi]; activeParams[pi] = tmpParams[pi]; } if (numParams != 0) { tmpPreds[numPreds] = new ComparablePredicate(PRED_LABELS[pid],activeOutcomes,activeParams); numPreds++; } } logger.info("Compressed {} parameters to {}", PARAMS.length , numPreds); sortPreds = new ComparablePredicate[numPreds]; System.arraycopy(tmpPreds, 0, sortPreds, 0, numPreds); Arrays.sort(sortPreds); return sortPreds; } /** * Writes the {@link AbstractModel perceptron model}, using the * {@link #writeUTF(String)}, {@link #writeDouble(double)}, or {@link #writeInt(int)}} * methods implemented by extending classes. * *

If you wish to create a {@link PerceptronModelWriter} which uses a different * structure, it will be necessary to override the {@link #persist()} method in * addition to implementing the {@code writeX(..)} methods. * * @throws IOException Thrown if IO errors occurred. */ @Override public void persist() throws IOException { // the type of model (Perceptron) writeUTF("Perceptron"); super.persist(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_perceptron_Per0100644 0000000 0000000 00000000161 14523004075 032624 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/PerceptronTrainer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/PerceptronTrainer.j0100644 0000000 0000000 00000035464 14523004075 034243 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.perceptron; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.ml.AbstractEventTrainer; import opennlp.tools.ml.ArrayMath; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.EvalParameters; import opennlp.tools.ml.model.MutableContext; import opennlp.tools.util.TrainingParameters; /** * Trains {@link PerceptronModel models} using the perceptron algorithm. *

* Each outcome is represented as a binary perceptron classifier. * This supports standard (integer) weighting as well average weighting as described in: *

* Discriminative Training Methods for Hidden Markov Models: Theory and Experiments * with the Perceptron Algorithm. Michael Collins, EMNLP 2002. * * @see PerceptronModel * @see AbstractEventTrainer */ public class PerceptronTrainer extends AbstractEventTrainer { private static final Logger logger = LoggerFactory.getLogger(PerceptronTrainer.class); public static final String PERCEPTRON_VALUE = "PERCEPTRON"; public static final double TOLERANCE_DEFAULT = .00001; /** Number of unique events which occurred in the event set. */ private int numUniqueEvents; /** Number of events in the event set. */ private int numEvents; /** Number of predicates. */ private int numPreds; /** Number of outcomes. */ private int numOutcomes; /** Records the array of predicates seen in each event. */ private int[][] contexts; /** The value associates with each context. If null then context values are assumes to be 1. */ private float[][] values; /** List of outcomes for each event i, in context[i]. */ private int[] outcomeList; /** Records the num of times an event has been seen for each event i, in context[i]. */ private int[] numTimesEventsSeen; /** Stores the String names of the outcomes. The GIS only tracks outcomes as ints, and so this array is needed to save the model to disk and thereby allow users to know what the outcome was in human understandable terms. */ private String[] outcomeLabels; /** Stores the String names of the predicates. The GIS only tracks predicates as ints, and so this array is needed to save the model to disk and thereby allow users to know what the outcome was in human understandable terms. */ private String[] predLabels; private double tolerance = TOLERANCE_DEFAULT; private Double stepSizeDecrease; private boolean useSkippedlAveraging; /** * Instantiates a {@link PerceptronTrainer} with default training parameters. */ public PerceptronTrainer() { } /** * Instantiates a {@link PerceptronTrainer} with specific * {@link TrainingParameters}. * * @param parameters The {@link TrainingParameters parameter} to use. */ public PerceptronTrainer(TrainingParameters parameters) { super(parameters); } /** * {@inheritDoc} * * @throws IllegalArgumentException Thrown if the algorithm name is not equal to * {{@link #PERCEPTRON_VALUE}}. */ @Override public void validate() { super.validate(); String algorithmName = getAlgorithm(); if (algorithmName != null) { if (!PERCEPTRON_VALUE.equals(algorithmName)) { throw new IllegalArgumentException("algorithmName must be PERCEPTRON"); } } } @Override public boolean isSortAndMerge() { return false; } @Override public AbstractModel doTrain(DataIndexer indexer) throws IOException { int iterations = getIterations(); int cutoff = getCutoff(); boolean useAverage = trainingParameters.getBooleanParameter("UseAverage", true); boolean useSkippedAveraging = trainingParameters.getBooleanParameter("UseSkippedAveraging", false); // overwrite otherwise it might not work if (useSkippedAveraging) useAverage = true; double stepSizeDecrease = trainingParameters.getDoubleParameter("StepSizeDecrease", 0); double tolerance = trainingParameters.getDoubleParameter("Tolerance", PerceptronTrainer.TOLERANCE_DEFAULT); this.setSkippedAveraging(useSkippedAveraging); if (stepSizeDecrease > 0) this.setStepSizeDecrease(stepSizeDecrease); this.setTolerance(tolerance); return this.trainModel(iterations, indexer, cutoff, useAverage); } // << members related to AbstractEventTrainer /** * Specifies the tolerance. If the change in training set accuracy * is less than this, stop iterating. * * @param tolerance The level of tolerance. * Must not be negative. * @throws IllegalArgumentException Thrown if parameters are invalid. */ public void setTolerance(double tolerance) { if (tolerance < 0) { throw new IllegalArgumentException("tolerance must be a positive number but is " + tolerance + "!"); } this.tolerance = tolerance; } /** * Enables and sets step size decrease. The step size is * decreased every iteration by the specified value. * * @param decrease The step size decrease in percent. * Must not be negative. * @throws IllegalArgumentException Thrown if parameters are invalid. */ public void setStepSizeDecrease(double decrease) { if (decrease < 0 || decrease > 100) { throw new IllegalArgumentException("decrease must be between 0 and 100 but is " + decrease + "!"); } stepSizeDecrease = decrease; } /** * Enables skipped averaging, this flag changes the standard * averaging to special averaging instead. *

* If we are doing averaging, and the current iteration is one * of the first 20, or if it is a perfect square, then updated the * summed parameters. *

* The reason we don't take all of them is that the parameters change * less toward the end of training, so they drown out the contributions * of the more volatile early iterations. The use of perfect * squares allows us to sample from successively farther apart iterations. * * @param averaging Whether to skip 'averaging', or not. */ public void setSkippedAveraging(boolean averaging) { useSkippedlAveraging = averaging; } /** * Trains a {@link PerceptronModel} with given parameters. * * @param iterations The number of iterations to use for training. * @param di The {@link DataIndexer} used as data input. * @param cutoff The {{@link #CUTOFF_PARAM}} value to use for training. * * @return A valid, trained {@link AbstractModel perceptron model}. */ public AbstractModel trainModel(int iterations, DataIndexer di, int cutoff) { return trainModel(iterations,di,cutoff,true); } /** * Trains a {@link PerceptronModel} with given parameters. * * @param iterations The number of iterations to use for training. * @param di The {@link DataIndexer} used as data input. * @param cutoff The {{@link #CUTOFF_PARAM}} value to use for training. * @param useAverage Whether to use 'averaging', or not. * See {{@link #setSkippedAveraging(boolean)}} for details. * * @return A valid, trained {@link AbstractModel perceptron model}. */ public AbstractModel trainModel(int iterations, DataIndexer di, int cutoff, boolean useAverage) { logger.info("Incorporating indexed data for training... "); contexts = di.getContexts(); values = di.getValues(); numTimesEventsSeen = di.getNumTimesEventsSeen(); numEvents = di.getNumEvents(); numUniqueEvents = contexts.length; outcomeLabels = di.getOutcomeLabels(); outcomeList = di.getOutcomeList(); predLabels = di.getPredLabels(); numPreds = predLabels.length; numOutcomes = outcomeLabels.length; logger.info("done."); logger.info("\tNumber of Event Tokens: {} " + "\n\t Number of Outcomes: {} " + "\n\t Number of Predicates: {}", numUniqueEvents, numOutcomes, numPreds); logger.info("Computing model parameters..."); MutableContext[] finalParameters = findParameters(iterations, useAverage); logger.info("...done."); /* Create and return the model *************/ return new PerceptronModel(finalParameters, predLabels, outcomeLabels); } private MutableContext[] findParameters(int iterations, boolean useAverage) { logger.info("Performing {} iterations.", iterations); int[] allOutcomesPattern = new int[numOutcomes]; for (int oi = 0; oi < numOutcomes; oi++) allOutcomesPattern[oi] = oi; /* Stores the estimated parameter value of each predicate during iteration. */ MutableContext[] params = new MutableContext[numPreds]; for (int pi = 0; pi < numPreds; pi++) { params[pi] = new MutableContext(allOutcomesPattern,new double[numOutcomes]); for (int aoi = 0; aoi < numOutcomes; aoi++) params[pi].setParameter(aoi, 0.0); } EvalParameters evalParams = new EvalParameters(params, numOutcomes); /* Stores the sum of parameter values of each predicate over many iterations. */ MutableContext[] summedParams = new MutableContext[numPreds]; if (useAverage) { for (int pi = 0; pi < numPreds; pi++) { summedParams[pi] = new MutableContext(allOutcomesPattern,new double[numOutcomes]); for (int aoi = 0; aoi < numOutcomes; aoi++) summedParams[pi].setParameter(aoi, 0.0); } } // Keep track of the previous three accuracies. The difference of // the mean of these and the current training set accuracy is used // with tolerance to decide whether to stop. double prevAccuracy1 = 0.0; double prevAccuracy2 = 0.0; double prevAccuracy3 = 0.0; // A counter for the denominator for averaging. int numTimesSummed = 0; double stepsize = 1; for (int i = 1; i <= iterations; i++) { // Decrease the stepsize by a small amount. if (stepSizeDecrease != null) stepsize *= 1 - stepSizeDecrease; int numCorrect = 0; for (int ei = 0; ei < numUniqueEvents; ei++) { int targetOutcome = outcomeList[ei]; for (int ni = 0; ni < this.numTimesEventsSeen[ei]; ni++) { // Compute the model's prediction according to the current parameters. double[] modelDistribution = new double[numOutcomes]; if (values != null) PerceptronModel.eval(contexts[ei], values[ei], modelDistribution, evalParams, false); else PerceptronModel.eval(contexts[ei], null, modelDistribution, evalParams, false); int maxOutcome = ArrayMath.argmax(modelDistribution); // If the predicted outcome is different from the target // outcome, do the standard update: boost the parameters // associated with the target and reduce those associated // with the incorrect predicted outcome. if (maxOutcome != targetOutcome) { for (int ci = 0; ci < contexts[ei].length; ci++) { int pi = contexts[ei][ci]; if (values == null) { params[pi].updateParameter(targetOutcome, stepsize); params[pi].updateParameter(maxOutcome, -stepsize); } else { params[pi].updateParameter(targetOutcome, stepsize * values[ei][ci]); params[pi].updateParameter(maxOutcome, -stepsize * values[ei][ci]); } } } // Update the counts for accuracy. if (maxOutcome == targetOutcome) numCorrect++; } } // Calculate the training accuracy and display. double trainingAccuracy = (double) numCorrect / numEvents; if (i < 10 || (i % 10) == 0) logger.info("{}: ({}/{}) {}", i, numCorrect, numEvents, trainingAccuracy); // TODO: Make averaging configurable !!! boolean doAveraging; doAveraging = useAverage && useSkippedlAveraging && (i < 20 || isPerfectSquare(i)) || useAverage; if (doAveraging) { numTimesSummed++; for (int pi = 0; pi < numPreds; pi++) for (int aoi = 0; aoi < numOutcomes; aoi++) summedParams[pi].updateParameter(aoi, params[pi].getParameters()[aoi]); } // If the tolerance is greater than the difference between the // current training accuracy and all of the previous three // training accuracies, stop training. if (StrictMath.abs(prevAccuracy1 - trainingAccuracy) < tolerance && StrictMath.abs(prevAccuracy2 - trainingAccuracy) < tolerance && StrictMath.abs(prevAccuracy3 - trainingAccuracy) < tolerance) { logger.warn("Stopping: change in training set accuracy less than {}", tolerance); break; } // Update the previous training accuracies. prevAccuracy1 = prevAccuracy2; prevAccuracy2 = prevAccuracy3; prevAccuracy3 = trainingAccuracy; } // Output the final training stats. trainingStats(evalParams); // Create averaged parameters if (useAverage) { for (int pi = 0; pi < numPreds; pi++) for (int aoi = 0; aoi < numOutcomes; aoi++) summedParams[pi].setParameter(aoi, summedParams[pi].getParameters()[aoi] / numTimesSummed); return summedParams; } else { return params; } } private double trainingStats(EvalParameters evalParams) { int numCorrect = 0; for (int ei = 0; ei < numUniqueEvents; ei++) { for (int ni = 0; ni < this.numTimesEventsSeen[ei]; ni++) { double[] modelDistribution = new double[numOutcomes]; if (values != null) PerceptronModel.eval(contexts[ei], values[ei], modelDistribution, evalParams,false); else PerceptronModel.eval(contexts[ei], null, modelDistribution, evalParams, false); int max = ArrayMath.argmax(modelDistribution); if (max == outcomeList[ei]) numCorrect++; } } double trainingAccuracy = (double) numCorrect / numEvents; logger.info("Stats: ({}/{}) {}", numCorrect, numEvents, trainingAccuracy); return trainingAccuracy; } // See whether a number is a perfect square. // Inefficient, but fine for our purposes. private static boolean isPerfectSquare(int n) { int root = (int) StrictMath.sqrt(n); return root * root == n; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_ml_perceptron_Sim0100644 0000000 0000000 00000000177 14523004075 032635 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/SimplePerceptronSequenceTrainer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/SimplePerceptronSeq0100644 0000000 0000000 00000034374 14523004075 034310 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.perceptron; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.ml.AbstractEventModelSequenceTrainer; import opennlp.tools.ml.model.AbstractDataIndexer; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MutableContext; import opennlp.tools.ml.model.OnePassDataIndexer; import opennlp.tools.ml.model.Sequence; import opennlp.tools.ml.model.SequenceStream; import opennlp.tools.ml.model.SequenceStreamEventStream; /** * Trains {@link PerceptronModel models} with sequences using the perceptron algorithm. *

* Each outcome is represented as a binary perceptron classifier. * This supports standard (integer) weighting as well average weighting. *

* Sequence information is used in a simplified was to that described in: * Discriminative Training Methods for Hidden Markov Models: Theory and Experiments * with the Perceptron Algorithm. Michael Collins, EMNLP 2002. *

* Specifically only updates are applied to tokens which were incorrectly tagged by a sequence tagger * rather than to all feature across the sequence which differ from the training sequence. * * @see PerceptronModel * @see AbstractEventModelSequenceTrainer */ public class SimplePerceptronSequenceTrainer extends AbstractEventModelSequenceTrainer { private static final Logger logger = LoggerFactory.getLogger(SimplePerceptronSequenceTrainer.class); public static final String PERCEPTRON_SEQUENCE_VALUE = "PERCEPTRON_SEQUENCE"; private int iterations; private SequenceStream sequenceStream; /** * Number of events in the event set. */ private int numEvents; /** * Number of predicates. */ private int numPreds; private int numOutcomes; /** * List of outcomes for each event i, in context[i]. */ private int[] outcomeList; private String[] outcomeLabels; /** * Stores the average parameter values of each predicate during iteration. */ private MutableContext[] averageParams; /** * Mapping between context and an integer */ private Map pmap; private Map omap; /** * Stores the estimated parameter value of each predicate during iteration. */ private MutableContext[] params; private boolean useAverage; private int[][][] updates; private static final int VALUE = 0; private static final int ITER = 1; private static final int EVENT = 2; private String[] predLabels; private int numSequences; /** * Instantiates a {@link SimplePerceptronSequenceTrainer} with a default * configuration of training parameters. */ public SimplePerceptronSequenceTrainer() { } /** * {@inheritDoc} * * @throws IllegalArgumentException Thrown if the algorithm name is not equal to * {{@link #PERCEPTRON_SEQUENCE_VALUE}}. */ @Override public void validate() { super.validate(); String algorithmName = getAlgorithm(); if (algorithmName != null) { if (!PERCEPTRON_SEQUENCE_VALUE.equals(algorithmName)) { throw new IllegalArgumentException("algorithmName must be PERCEPTRON_SEQUENCE"); } } } @Override public AbstractModel doTrain(SequenceStream events) throws IOException { int iterations = getIterations(); int cutoff = getCutoff(); boolean useAverage = trainingParameters.getBooleanParameter("UseAverage", true); return trainModel(iterations, events, cutoff, useAverage); } // << members related to AbstractSequenceTrainer /** * Trains a {@link PerceptronModel} with given parameters. * * @param iterations The number of iterations to use for training. * @param sequenceStream The {@link SequenceStream} used as data input. * @param cutoff The {{@link #CUTOFF_PARAM}} value to use for training. * @param useAverage Whether to use 'averaging', or not. * @return A valid, trained {@link AbstractModel perceptron model}. */ public AbstractModel trainModel(int iterations, SequenceStream sequenceStream, int cutoff, boolean useAverage) throws IOException { this.iterations = iterations; this.sequenceStream = sequenceStream; trainingParameters.put(AbstractDataIndexer.CUTOFF_PARAM, cutoff); trainingParameters.put(AbstractDataIndexer.SORT_PARAM, false); DataIndexer di = new OnePassDataIndexer(); di.init(trainingParameters, reportMap); di.index(new SequenceStreamEventStream(sequenceStream)); numSequences = 0; sequenceStream.reset(); while (sequenceStream.read() != null) { numSequences++; } outcomeList = di.getOutcomeList(); predLabels = di.getPredLabels(); pmap = new HashMap<>(); for (int i = 0; i < predLabels.length; i++) { pmap.put(predLabels[i], i); } logger.info("Incorporating indexed data for training... "); this.useAverage = useAverage; numEvents = di.getNumEvents(); this.iterations = iterations; outcomeLabels = di.getOutcomeLabels(); omap = new HashMap<>(); for (int oli = 0; oli < outcomeLabels.length; oli++) { omap.put(outcomeLabels[oli], oli); } outcomeList = di.getOutcomeList(); numPreds = predLabels.length; numOutcomes = outcomeLabels.length; if (useAverage) { updates = new int[numPreds][numOutcomes][3]; } logger.info("done."); logger.info("\tNumber of Event Tokens: {} " + "\n\t Number of Outcomes: {} " + "\n\t Number of Predicates: {}", numEvents, numOutcomes, numPreds); params = new MutableContext[numPreds]; if (useAverage) { averageParams = new MutableContext[numPreds]; } int[] allOutcomesPattern = new int[numOutcomes]; for (int oi = 0; oi < numOutcomes; oi++) { allOutcomesPattern[oi] = oi; } for (int pi = 0; pi < numPreds; pi++) { params[pi] = new MutableContext(allOutcomesPattern, new double[numOutcomes]); if (useAverage) { averageParams[pi] = new MutableContext(allOutcomesPattern, new double[numOutcomes]); } for (int aoi = 0; aoi < numOutcomes; aoi++) { params[pi].setParameter(aoi, 0.0); if (useAverage) { averageParams[pi].setParameter(aoi, 0.0); } } } logger.info("Computing model parameters..."); findParameters(iterations); logger.info("...done."); /* Create and return the model ****/ String[] updatedPredLabels = predLabels; if (useAverage) { return new PerceptronModel(averageParams, updatedPredLabels, outcomeLabels); } else { return new PerceptronModel(params, updatedPredLabels, outcomeLabels); } } private void findParameters(int iterations) throws IOException { logger.info("Performing {} iterations.\n", iterations); for (int i = 1; i <= iterations; i++) { nextIteration(i); } if (useAverage) { trainingStats(averageParams); } else { trainingStats(params); } } public void nextIteration(int iteration) throws IOException { iteration--; //move to 0-based index int numCorrect = 0; int oei = 0; int si = 0; List> featureCounts = new ArrayList<>(numOutcomes); for (int oi = 0; oi < numOutcomes; oi++) { featureCounts.add(new HashMap<>()); } PerceptronModel model = new PerceptronModel(params, predLabels, outcomeLabels); sequenceStream.reset(); Sequence sequence; while ((sequence = sequenceStream.read()) != null) { Event[] taggerEvents = sequenceStream.updateContext(sequence, model); Event[] events = sequence.getEvents(); boolean update = false; for (int ei = 0; ei < events.length; ei++, oei++) { if (!taggerEvents[ei].getOutcome().equals(events[ei].getOutcome())) { update = true; //break; } else { numCorrect++; } } if (update) { for (int oi = 0; oi < numOutcomes; oi++) { featureCounts.get(oi).clear(); } if (logger.isTraceEnabled()) { final StringBuilder sb = new StringBuilder(); for (Event event : events) { sb.append(" ").append(event.getOutcome()); } logger.trace("train: {}", sb); } //training feature count computation for (int ei = 0; ei < events.length; ei++, oei++) { String[] contextStrings = events[ei].getContext(); float[] values = events[ei].getValues(); int oi = omap.get(events[ei].getOutcome()); for (int ci = 0; ci < contextStrings.length; ci++) { float value = 1; if (values != null) { value = values[ci]; } Float c = featureCounts.get(oi).get(contextStrings[ci]); if (c == null) { c = value; } else { c += value; } featureCounts.get(oi).put(contextStrings[ci], c); } } //evaluation feature count computation if (logger.isTraceEnabled()) { final StringBuilder sb = new StringBuilder(); for (Event taggerEvent : taggerEvents) { sb.append(" ").append(taggerEvent.getOutcome()); } logger.trace("test: {}", sb); } for (Event taggerEvent : taggerEvents) { String[] contextStrings = taggerEvent.getContext(); float[] values = taggerEvent.getValues(); int oi = omap.get(taggerEvent.getOutcome()); for (int ci = 0; ci < contextStrings.length; ci++) { float value = 1; if (values != null) { value = values[ci]; } Float c = featureCounts.get(oi).get(contextStrings[ci]); if (c == null) { c = -1 * value; } else { c -= value; } if (c == 0f) { featureCounts.get(oi).remove(contextStrings[ci]); } else { featureCounts.get(oi).put(contextStrings[ci], c); } } } for (int oi = 0; oi < numOutcomes; oi++) { for (String feature : featureCounts.get(oi).keySet()) { int pi = pmap.getOrDefault(feature, -1); if (pi != -1) { if (logger.isTraceEnabled()) { logger.trace("{} {} {} {}", si, outcomeLabels[oi], feature, featureCounts.get(oi).get(feature)); } params[pi].updateParameter(oi, featureCounts.get(oi).get(feature)); if (useAverage) { if (updates[pi][oi][VALUE] != 0) { averageParams[pi].updateParameter(oi, updates[pi][oi][VALUE] * (numSequences * (iteration - updates[pi][oi][ITER]) + (si - updates[pi][oi][EVENT]))); if (logger.isTraceEnabled()) { logger.trace("p avp[{}].{}={}", pi, oi, averageParams[pi].getParameters()[oi]); } } if (logger.isTraceEnabled()) { logger.trace("p updates[{}]{{}]=({},{},{})({},{},{}) -> {}", pi, oi, updates[pi][oi][ITER], updates[pi][oi][EVENT], updates[pi][oi][VALUE], iteration, oei, params[pi].getParameters()[oi], averageParams[pi].getParameters()[oi]); } updates[pi][oi][VALUE] = (int) params[pi].getParameters()[oi]; updates[pi][oi][ITER] = iteration; updates[pi][oi][EVENT] = si; } } } } model = new PerceptronModel(params, predLabels, outcomeLabels); } si++; } //finish average computation double totIterations = (double) iterations * si; if (useAverage && iteration == iterations - 1) { for (int pi = 0; pi < numPreds; pi++) { double[] predParams = averageParams[pi].getParameters(); for (int oi = 0; oi < numOutcomes; oi++) { if (updates[pi][oi][VALUE] != 0) { predParams[oi] += updates[pi][oi][VALUE] * (numSequences * (iterations - updates[pi][oi][ITER]) - updates[pi][oi][EVENT]); } if (predParams[oi] != 0) { predParams[oi] /= totIterations; averageParams[pi].setParameter(oi, predParams[oi]); if (logger.isTraceEnabled()) { logger.trace("updates[{}][{}]=({},{},{})({},{},{}) -> {}", pi, oi, updates[pi][oi][ITER], updates[pi][oi][EVENT], updates[pi][oi][VALUE], iterations, 0, params[pi].getParameters()[oi], averageParams[pi].getParameters()[oi]); } } } } } logger.info("{}. ({}/{}) {}", iteration, numCorrect, numEvents, ((double) numCorrect / numEvents)); } private void trainingStats(MutableContext[] params) throws IOException { int numCorrect = 0; int oei = 0; sequenceStream.reset(); Sequence sequence; while ((sequence = sequenceStream.read()) != null) { Event[] taggerEvents = sequenceStream.updateContext(sequence, new PerceptronModel(params, predLabels, outcomeLabels)); for (int ei = 0; ei < taggerEvents.length; ei++, oei++) { int max = omap.get(taggerEvents[ei].getOutcome()); if (max == outcomeList[oei]) { numCorrect++; } } } logger.info(". ({}/{}) {}", numCorrect, numEvents, ((double) numCorrect / numEvents)); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/package-info.java0100644 0000000 0000000 00000001616 14523004075 033601 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package related to ML by means of the perceptron algorithm. */ package opennlp.tools.ml.perceptron; apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/BilouCodec.java0100644 0000000 0000000 00000014056 14523004075 032257 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import opennlp.tools.util.SequenceCodec; import opennlp.tools.util.SequenceValidator; import opennlp.tools.util.Span; /** * The default {@link SequenceCodec} implementation according to the {@code BILOU} scheme. *

    *
  • B: 'beginning' of a NE
  • *
  • I: 'inside', the word is inside a NE
  • *
  • L: 'last', the last (I) word inside a NE
  • *
  • O: 'outside', the word is a regular word outside a NE
  • *
  • U: 'unit', any standalone token following words outside of NE
  • *
* * See paper by Roth D. and Ratinov L. (2009): * * Design Challenges and Misconceptions in Named Entity Recognition. * * @see SequenceCodec * @see BioCodec */ public class BilouCodec implements SequenceCodec { public static final String START = "start"; public static final String CONTINUE = "cont"; public static final String LAST = "last"; public static final String UNIT = "unit"; public static final String OTHER = "other"; @Override public Span[] decode(List c) { int start = -1; int end = -1; List spans = new ArrayList<>(c.size()); for (int li = 0; li < c.size(); li++) { String chunkTag = c.get(li); if (chunkTag.endsWith(BilouCodec.START)) { start = li; end = li + 1; } else if (chunkTag.endsWith(BilouCodec.CONTINUE)) { end = li + 1; } else if (chunkTag.endsWith(LAST)) { if (start != -1) { spans.add(new Span(start, end + 1, BioCodec.extractNameType(c.get(li - 1)))); start = -1; end = -1; } } else if (chunkTag.endsWith(UNIT)) { spans.add(new Span(li, li + 1, BioCodec.extractNameType(c.get(li)))); } } return spans.toArray(new Span[0]); } @Override public String[] encode(Span[] names, int length) { String[] outcomes = new String[length]; Arrays.fill(outcomes, BilouCodec.OTHER); for (Span name : names) { if (name.length() > 1) { if (name.getType() == null) { outcomes[name.getStart()] = "default" + "-" + BilouCodec.START; } else { outcomes[name.getStart()] = name.getType() + "-" + BilouCodec.START; } // now iterate from begin + 1 till end for (int i = name.getStart() + 1; i < name.getEnd() - 1; i++) { if (name.getType() == null) { outcomes[i] = "default" + "-" + BilouCodec.CONTINUE; } else { outcomes[i] = name.getType() + "-" + BilouCodec.CONTINUE; } } if (name.getType() == null) { outcomes[name.getEnd() - 1] = "default" + "-" + BilouCodec.LAST; } else { outcomes[name.getEnd() - 1] = name.getType() + "-" + BilouCodec.LAST; } } else { if (name.getType() == null) { outcomes[name.getEnd() - 1] = "default" + "-" + BilouCodec.UNIT; } else { outcomes[name.getEnd() - 1] = name.getType() + "-" + BilouCodec.UNIT; } } } return outcomes; } @Override public SequenceValidator createSequenceValidator() { return new BilouNameFinderSequenceValidator(); } /** * {@code * B requires CL or L, * C requires BL, * L requires B, * O requires any valid combo/unit, * U requires none. * } * * @param outcomes All potential model outcomes check. * * @return {@code true}, if model outcomes are compatible, {@code false} otherwise. */ @Override public boolean areOutcomesCompatible(String[] outcomes) { Set start = new HashSet<>(); Set cont = new HashSet<>(); Set last = new HashSet<>(); Set unit = new HashSet<>(); for (String outcome : outcomes) { if (outcome.endsWith(BilouCodec.START)) { start.add(outcome.substring(0, outcome.length() - BilouCodec.START.length())); } else if (outcome.endsWith(BilouCodec.CONTINUE)) { cont.add(outcome.substring(0, outcome.length() - BilouCodec.CONTINUE.length())); } else if (outcome.endsWith(BilouCodec.LAST)) { last.add(outcome.substring(0, outcome.length() - BilouCodec.LAST.length())); } else if (outcome.endsWith(BilouCodec.UNIT)) { unit.add(outcome.substring(0, outcome.length() - BilouCodec.UNIT.length())); } else if (!outcome.equals(BilouCodec.OTHER)) { return false; } } if (start.size() == 0 && unit.size() == 0) { return false; } else { // Start, must have matching Last for (String startPrefix : start) { if (!last.contains(startPrefix)) { return false; } } // Cont, must have matching Start and Last for (String contPrefix : cont) { if (!start.contains(contPrefix) && !last.contains(contPrefix)) { return false; } } // Last, must have matching Start for (String lastPrefix : last) { if (!start.contains(lastPrefix)) { return false; } } } return true; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_namefind_BilouNam0100644 0000000 0000000 00000000173 14523004075 032517 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/BilouNameFinderSequenceValidator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/BilouNameFinderSequenceV0100644 0000000 0000000 00000005267 14523004075 034155 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import opennlp.tools.util.SequenceValidator; /** * A {@link SequenceValidator} implementation for the {@link BilouCodec}. * * @see BilouCodec */ public class BilouNameFinderSequenceValidator implements SequenceValidator { @Override public boolean validSequence(int i, String[] inputSequence, String[] outcomesSequence, String outcome) { if (outcome.endsWith(BilouCodec.CONTINUE) || outcome.endsWith(BilouCodec.LAST)) { int li = outcomesSequence.length - 1; if (li == -1) { return false; } else if (outcomesSequence[li].endsWith(BilouCodec.OTHER) || outcomesSequence[li].endsWith(BilouCodec.UNIT)) { return false; } else if (outcomesSequence[li].endsWith(BilouCodec.LAST) && (outcome.endsWith(BilouCodec.CONTINUE) || outcome.endsWith(BilouCodec.LAST))) { return false; } else if (outcomesSequence[li].endsWith(BilouCodec.CONTINUE) || outcomesSequence[li].endsWith(BilouCodec.START)) { // if it is continue, we have to check if previous match was of the same type String previousNameType = NameFinderME.extractNameType(outcomesSequence[li]); String nameType = NameFinderME.extractNameType(outcome); if (previousNameType != null || nameType != null) { if (nameType != null) { return nameType.equals(previousNameType); } return false; // outcomes types are not equal } } } if (outcomesSequence.length > 0) { if (outcome.endsWith(BilouCodec.START) || outcome.endsWith(BilouCodec.OTHER) || outcome.endsWith(BilouCodec.UNIT)) { return !outcomesSequence[outcomesSequence.length - 1].endsWith(BilouCodec.START) && !outcomesSequence[outcomesSequence.length - 1].endsWith(BilouCodec.CONTINUE); } } return true; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/BioCodec.java0100644 0000000 0000000 00000011664 14523004075 031720 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import opennlp.tools.util.SequenceCodec; import opennlp.tools.util.Span; /** * The default {@link SequenceCodec} implementation according to the {@code BIO} scheme: *
    *
  • B: 'beginning' of a NE
  • *
  • I: 'inside', the word is inside a NE
  • *
  • O: 'outside', the word is a regular word outside a NE
  • *
* * See also the paper by Roth D. and Ratinov L.: * * Design Challenges and Misconceptions in Named Entity Recognition. * * @see SequenceCodec * @see BilouCodec */ public class BioCodec implements SequenceCodec { public static final String START = "start"; public static final String CONTINUE = "cont"; public static final String OTHER = "other"; private static final Pattern TYPED_OUTCOME_PATTERN = Pattern.compile("(.+)-\\w+"); static String extractNameType(String outcome) { Matcher matcher = TYPED_OUTCOME_PATTERN.matcher(outcome); if (matcher.matches()) { return matcher.group(1); } return null; } @Override public Span[] decode(List c) { int start = -1; int end = -1; List spans = new ArrayList<>(c.size()); for (int li = 0; li < c.size(); li++) { String chunkTag = c.get(li); if (chunkTag.endsWith(BioCodec.START)) { if (start != -1) { spans.add(new Span(start, end, extractNameType(c.get(li - 1)))); } start = li; end = li + 1; } else if (chunkTag.endsWith(BioCodec.CONTINUE)) { end = li + 1; } else if (chunkTag.endsWith(BioCodec.OTHER)) { if (start != -1) { spans.add(new Span(start, end, extractNameType(c.get(li - 1)))); start = -1; end = -1; } } } if (start != -1) { spans.add(new Span(start, end, extractNameType(c.get(c.size() - 1)))); } return spans.toArray(new Span[0]); } @Override public String[] encode(Span[] names, int length) { String[] outcomes = new String[length]; Arrays.fill(outcomes, BioCodec.OTHER); for (Span name : names) { if (name.getType() == null) { outcomes[name.getStart()] = "default" + "-" + BioCodec.START; } else { outcomes[name.getStart()] = name.getType() + "-" + BioCodec.START; } // now iterate from begin + 1 till end for (int i = name.getStart() + 1; i < name.getEnd(); i++) { if (name.getType() == null) { outcomes[i] = "default" + "-" + BioCodec.CONTINUE; } else { outcomes[i] = name.getType() + "-" + BioCodec.CONTINUE; } } } return outcomes; } @Override public NameFinderSequenceValidator createSequenceValidator() { return new NameFinderSequenceValidator(); } @Override public boolean areOutcomesCompatible(String[] outcomes) { // We should have *optionally* one outcome named "other", some named xyz-start and sometimes // they have a pair xyz-cont. We should not have any other outcome // To validate the model we check if we have one outcome named "other", at least // one outcome with suffix start. After that we check if all outcomes that ends with // "cont" have a pair that ends with "start". List start = new ArrayList<>(); List cont = new ArrayList<>(); for (String outcome : outcomes) { if (outcome.endsWith(BioCodec.START)) { start.add(outcome.substring(0, outcome.length() - BioCodec.START.length())); } else if (outcome.endsWith(BioCodec.CONTINUE)) { cont.add(outcome.substring(0, outcome.length() - BioCodec.CONTINUE.length())); } else if (!outcome.equals(BioCodec.OTHER)) { // got unexpected outcome return false; } } if (start.size() == 0) { return false; } else { for (String contPreffix : cont) { if (!start.contains(contPreffix)) { return false; } } } return true; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_namefind_DefaultN0100644 0000000 0000000 00000000166 14523004075 032515 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/DefaultNameContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/DefaultNameContextGenera0100644 0000000 0000000 00000012467 14523004075 034207 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.util.ArrayList; import java.util.List; import opennlp.tools.util.featuregen.AdaptiveFeatureGenerator; import opennlp.tools.util.featuregen.BigramNameFeatureGenerator; import opennlp.tools.util.featuregen.CachedFeatureGenerator; import opennlp.tools.util.featuregen.FeatureGeneratorUtil; import opennlp.tools.util.featuregen.OutcomePriorFeatureGenerator; import opennlp.tools.util.featuregen.PreviousMapFeatureGenerator; import opennlp.tools.util.featuregen.TokenClassFeatureGenerator; import opennlp.tools.util.featuregen.TokenFeatureGenerator; import opennlp.tools.util.featuregen.WindowFeatureGenerator; /** * A {@link NameContextGenerator} implementation for determining contextual features * for a {@code tag-chunk} style named-entity recognizer. */ public class DefaultNameContextGenerator implements NameContextGenerator { protected AdaptiveFeatureGenerator[] featureGenerators; @Deprecated private static final AdaptiveFeatureGenerator WINDOW_FEATURES = new CachedFeatureGenerator( new WindowFeatureGenerator(new TokenFeatureGenerator(), 2, 2), new WindowFeatureGenerator(new TokenClassFeatureGenerator(true), 2, 2), new OutcomePriorFeatureGenerator(), new PreviousMapFeatureGenerator(), new BigramNameFeatureGenerator()); /** * Creates a name context generator with the specified * {@link AdaptiveFeatureGenerator feature generators}. * * @param featureGenerators One or more {@link AdaptiveFeatureGenerator feature generators}. * If none are provided, a default config ({@link #WINDOW_FEATURES}) * will be used. */ public DefaultNameContextGenerator(AdaptiveFeatureGenerator... featureGenerators) { if (featureGenerators != null) { this.featureGenerators = featureGenerators; } else { // use defaults this.featureGenerators = new AdaptiveFeatureGenerator[]{WINDOW_FEATURES, new PreviousMapFeatureGenerator()}; } } @Override public void addFeatureGenerator(AdaptiveFeatureGenerator generator) { AdaptiveFeatureGenerator[] generators = featureGenerators; featureGenerators = new AdaptiveFeatureGenerator[featureGenerators.length + 1]; System.arraycopy(generators, 0, featureGenerators, 0, generators.length); featureGenerators[featureGenerators.length - 1] = generator; } @Override public void updateAdaptiveData(String[] tokens, String[] outcomes) { if (tokens != null && outcomes != null && tokens.length != outcomes.length) { throw new IllegalArgumentException( "The tokens and outcome arrays MUST have the same size!"); } for (AdaptiveFeatureGenerator featureGenerator : featureGenerators) { featureGenerator.updateAdaptiveData(tokens, outcomes); } } @Override public void clearAdaptiveData() { for (AdaptiveFeatureGenerator featureGenerator : featureGenerators) { featureGenerator.clearAdaptiveData(); } } /** * Finds the context for finding names at the specified index. * * @param index The index of the token in the specified {@code tokens} for which the * context should be constructed. * @param tokens The tokens of the sentence. The {@code toString()} methods * of these objects should return the token text. * @param preds The previous decisions made in the tagging of this sequence. * Only indices less than {@code index} will be examined. * @param additionalContext Addition features which may be based on a context outside the sentence. * * @return The context for finding names at the specified {@code index}. */ @Override public String[] getContext(int index, String[] tokens, String[] preds, Object[] additionalContext) { List features = new ArrayList<>(); for (AdaptiveFeatureGenerator featureGenerator : featureGenerators) { featureGenerator.createFeatures(features, tokens, index, preds); } //previous outcome features String po = NameFinderME.OTHER; String ppo = NameFinderME.OTHER; // TODO: These should be moved out here in its own feature generator! if (preds != null) { if (index > 1) { ppo = preds[index - 2]; } if (index > 0) { po = preds[index - 1]; } features.add("po=" + po); features.add("pow=" + po + "," + tokens[index]); features.add("powf=" + po + "," + FeatureGeneratorUtil.tokenFeature(tokens[index])); features.add("ppo=" + ppo); } return features.toArray(new String[0]); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_namefind_Dictiona0100644 0000000 0000000 00000000157 14523004075 032545 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/DictionaryNameFinder.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/DictionaryNameFinder.jav0100644 0000000 0000000 00000006666 14523004075 034154 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.util.LinkedList; import java.util.List; import java.util.Objects; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.util.Span; import opennlp.tools.util.StringList; /** * This is a {@link Dictionary} based {@link TokenNameFinder name finder}. * It scans text for names inside a provided dictionary. */ public class DictionaryNameFinder implements TokenNameFinder { private static final String DEFAULT_TYPE = "default"; private final Dictionary mDictionary; private final String type; /** * Initializes a {@link DictionaryNameFinder} with the provided {@link Dictionary} * and a {@code type}. * * @param dictionary The {@link Dictionary} to use. Must not be {@code null}. * @param type the name type used for the produced spans. Must not be {@code null}. */ public DictionaryNameFinder(Dictionary dictionary, String type) { this.mDictionary = Objects.requireNonNull(dictionary, "dictionary must not be null"); this.type = Objects.requireNonNull(type, "type must not be null"); } /** * Initializes a {@link DictionaryNameFinder} with the provided {@link Dictionary} * and {@link #DEFAULT_TYPE}. * * @param dictionary The {@link Dictionary} to use. Must not be {@code null}. */ public DictionaryNameFinder(Dictionary dictionary) { this(dictionary, DEFAULT_TYPE); } @Override public Span[] find(String[] textTokenized) { List namesFound = new LinkedList<>(); final boolean caseSensitive = mDictionary.isCaseSensitive(); final int maxTokenCount = mDictionary.getMaxTokenCount(); for (int offsetFrom = 0; offsetFrom < textTokenized.length; offsetFrom++) { Span nameFound = null; String[] tokensSearching; for (int offsetTo = offsetFrom; offsetTo < textTokenized.length; offsetTo++) { int lengthSearching = offsetTo - offsetFrom + 1; if (lengthSearching > maxTokenCount) { break; } else { tokensSearching = new String[lengthSearching]; System.arraycopy(textTokenized, offsetFrom, tokensSearching, 0, lengthSearching); StringList entryForSearch = new StringList(caseSensitive, tokensSearching); if (mDictionary.contains(entryForSearch)) { nameFound = new Span(offsetFrom, offsetTo + 1, type); } } } if (nameFound != null) { namesFound.add(nameFound); // skip over the found tokens for the next search offsetFrom += nameFound.length() - 1; } } return namesFound.toArray(new Span[0]); } @Override public void clearAdaptiveData() { // nothing to clear } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/DocumentNameFinder.java0100644 0000000 0000000 00000003343 14523004075 033753 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import opennlp.tools.util.Span; /** * Interface for processing an entire document allowing a {@link TokenNameFinder} to use context * from the entire document. *

* EXPERIMENTAL: * This interface has been added as part of a work in progress and might change without notice. */ public interface DocumentNameFinder { /** * Finds tokens {@link Span spans} for the specified document of sentences and their tokens. *

* Span start and end indices are relative to the sentence they are in. * For example, a span identifying a name consisting of the first and second word * of the second sentence would be {@code 0..2} and be referenced as {@code spans[1][0]}. * * @param document A 2-dimensional array of tokens for each sentence of a document. * @return The {@link Span token spans} for each sentence of the specified document. */ Span[][] find(String[][] document); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_namefind_NameCont0100644 0000000 0000000 00000000157 14523004075 032517 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/NameContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/NameContextGenerator.jav0100644 0000000 0000000 00000003771 14523004075 034204 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import opennlp.tools.util.BeamSearchContextGenerator; import opennlp.tools.util.featuregen.AdaptiveFeatureGenerator; /** * Interface for generating the context for a {@link TokenNameFinder name finder} by * specifying a set of feature generators. * * @see BeamSearchContextGenerator * @see AdaptiveFeatureGenerator */ public interface NameContextGenerator extends BeamSearchContextGenerator { /** * Adds a feature generator. * * @param generator The {@link AdaptiveFeatureGenerator feature generator} to add. */ void addFeatureGenerator(AdaptiveFeatureGenerator generator); /** * Informs all the feature generators that the specified {@code tokens} * have been classified with the corresponds set of specified {@code outcomes}. * * @param tokens The tokens of a sentence or another text unit which has been processed. * @param outcomes The outcomes associated with the specified {@code tokens}. */ void updateAdaptiveData(String[] tokens, String[] outcomes); /** * Informs all the feature generators that the context of the adaptive * data (typically a document) is no longer valid and should be cleared. */ void clearAdaptiveData(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_namefind_NameFind0100644 0000000 0000000 00000000160 14523004075 032466 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/NameFinderEventStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/NameFinderEventStream.ja0100644 0000000 0000000 00000015035 14523004075 034104 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; import opennlp.tools.ml.model.Event; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.SequenceCodec; import opennlp.tools.util.Span; import opennlp.tools.util.featuregen.AdditionalContextFeatureGenerator; import opennlp.tools.util.featuregen.WindowFeatureGenerator; /** * Class for creating an event stream out of data files for training an {@link TokenNameFinder}. */ public class NameFinderEventStream extends opennlp.tools.util.AbstractEventStream { private final NameContextGenerator contextGenerator; private final AdditionalContextFeatureGenerator additionalContextFeatureGenerator = new AdditionalContextFeatureGenerator(); private final SequenceCodec codec; private final String defaultType; /** * Initializes a {@link NameFinderEventStream} using the specified {@code dataStream} and * {@link NameContextGenerator}. * * @param dataStream The {@link ObjectStream data stream} of events. * @param type {@code null} or overrides the type parameter in the provided samples. * @param contextGenerator The {@link NameContextGenerator} used to generate features for the event stream. * @param codec The {@link SequenceCodec} to use. */ public NameFinderEventStream(ObjectStream dataStream, String type, NameContextGenerator contextGenerator, SequenceCodec codec) { super(dataStream); if (codec == null) { this.codec = new BioCodec(); } else { this.codec = codec; } this.contextGenerator = contextGenerator; this.contextGenerator.addFeatureGenerator( new WindowFeatureGenerator(additionalContextFeatureGenerator, 8, 8)); this.defaultType = type; } /** * Generates the name tag outcomes ({@code start}, {@code continue}, {@code other}) for each * token in a sentence with the specified {@code length} using the specified {@link Span names}. * * @param names Token {@link Span spans} for each of the names. * @param type {@code null} or overrides the type parameter in the provided samples * @param length The length of the sentence. * * @return An array of {@code start}, {@code continue}, {@code other} outcomes based on the * specified names and sentence {@code length}. * * @deprecated use the {@link BioCodec} implementation of the SequenceValidator instead! */ @Deprecated public static String[] generateOutcomes(Span[] names, String type, int length) { String[] outcomes = new String[length]; Arrays.fill(outcomes, NameFinderME.OTHER); for (Span name : names) { if (name.getType() == null) { outcomes[name.getStart()] = type + "-" + NameFinderME.START; } else { outcomes[name.getStart()] = name.getType() + "-" + NameFinderME.START; } // now iterate from begin + 1 till end for (int i = name.getStart() + 1; i < name.getEnd(); i++) { if (name.getType() == null) { outcomes[i] = type + "-" + NameFinderME.CONTINUE; } else { outcomes[i] = name.getType() + "-" + NameFinderME.CONTINUE; } } } return outcomes; } /** * Generates {@link Event events} for each token in a {@code sentence} * with the specified {@code outcomes} using the specified {@link NameContextGenerator}. * * @param sentence Token representing a sentence. * @param outcomes An array of outcomes. * @param cg The {@link NameContextGenerator} to use. * * @return A list of {@link Event events} generated. */ public static List generateEvents(String[] sentence, String[] outcomes, NameContextGenerator cg) { List events = new ArrayList<>(outcomes.length); for (int i = 0; i < outcomes.length; i++) { events.add(new Event(outcomes[i], cg.getContext(i, sentence, outcomes,null))); } cg.updateAdaptiveData(sentence, outcomes); return events; } @Override protected Iterator createEvents(NameSample sample) { if (sample.isClearAdaptiveDataSet()) { contextGenerator.clearAdaptiveData(); } Span[] names = sample.getNames(); if (!Objects.isNull(this.defaultType)) { overrideType(names); } String[] outcomes = codec.encode(names, sample.getSentence().length); // String outcomes[] = generateOutcomes(sample.getNames(), type, sample.getSentence().length); additionalContextFeatureGenerator.setCurrentContext(sample.getAdditionalContext()); String[] tokens = new String[sample.getSentence().length]; for (int i = 0; i < sample.getSentence().length; i++) { tokens[i] = sample.getSentence()[i]; } return generateEvents(tokens, outcomes, contextGenerator).iterator(); } private void overrideType(Span[] names) { for (int i = 0; i < names.length; i++) { Span n = names[i]; names[i] = new Span(n.getStart(), n.getEnd(), this.defaultType, n.getProb()); } } /** * Generated previous decision features for each token based on contents of the * specified {@code prevMap}. * * @param tokens The token for which the context is generated. * @param prevMap A mapping of tokens to their previous decisions. * @return A 2-dimensional array with additional context with features for each token. */ public static String[][] additionalContext(String[] tokens, Map prevMap) { String[][] ac = new String[tokens.length][1]; for (int ti = 0; ti < tokens.length; ti++) { String pt = prevMap.get(tokens[ti]); ac[ti][0] = "pd=" + pt; } return ac; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/NameFinderME.java0100644 0000000 0000000 00000027555 14523004075 032511 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import opennlp.tools.ml.BeamSearch; import opennlp.tools.ml.EventModelSequenceTrainer; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.SequenceTrainer; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.TrainerFactory.TrainerType; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.ml.model.SequenceClassificationModel; import opennlp.tools.ml.perceptron.PerceptronTrainer; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Sequence; import opennlp.tools.util.SequenceCodec; import opennlp.tools.util.SequenceValidator; import opennlp.tools.util.Span; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.featuregen.AdaptiveFeatureGenerator; import opennlp.tools.util.featuregen.AdditionalContextFeatureGenerator; import opennlp.tools.util.featuregen.GeneratorFactory; import opennlp.tools.util.featuregen.WindowFeatureGenerator; /** * A maximum-entropy-based {@link TokenNameFinder name finder} implementation. */ public class NameFinderME implements TokenNameFinder { private static final String[][] EMPTY = new String[0][0]; public static final int DEFAULT_BEAM_SIZE = 3; private static final Pattern typedOutcomePattern = Pattern.compile("(.+)-\\w+"); public static final String START = "start"; public static final String CONTINUE = "cont"; public static final String OTHER = "other"; private final SequenceCodec seqCodec; protected final SequenceClassificationModel model; protected final NameContextGenerator contextGenerator; private Sequence bestSequence; private final AdditionalContextFeatureGenerator additionalContextFeatureGenerator = new AdditionalContextFeatureGenerator(); private final SequenceValidator sequenceValidator; /** * Initializes a {@link NameFinderME} with a {@link TokenNameFinderModel}. * * @param model The {@link TokenNameFinderModel} to initialize with. */ public NameFinderME(TokenNameFinderModel model) { TokenNameFinderFactory factory = model.getFactory(); seqCodec = factory.createSequenceCodec(); sequenceValidator = seqCodec.createSequenceValidator(); this.model = model.getNameFinderSequenceModel(); contextGenerator = factory.createContextGenerator(); // TODO: We should deprecate this. And come up with a better solution! contextGenerator.addFeatureGenerator( new WindowFeatureGenerator(additionalContextFeatureGenerator, 8, 8)); } private static AdaptiveFeatureGenerator createFeatureGenerator( byte[] generatorDescriptor, final Map resources) throws IOException { AdaptiveFeatureGenerator featureGenerator; if (generatorDescriptor != null) { featureGenerator = GeneratorFactory.create(new ByteArrayInputStream( generatorDescriptor), key -> { if (resources != null) { return resources.get(key); } return null; }); } else { featureGenerator = null; } return featureGenerator; } @Override public Span[] find(String[] tokens) { return find(tokens, EMPTY); } /** * Generates name tags for the given sequence, typically a sentence, returning * {@link Span token spans} for any identified names. * * @param tokens An array of the tokens or words of a sequence, typically a sentence. * @param additionalContext Features which are based on context outside of the * sentence but which should also be used. * * @return An array of {@link Span token spans} for each of the names identified. */ public Span[] find(String[] tokens, String[][] additionalContext) { additionalContextFeatureGenerator.setCurrentContext(additionalContext); bestSequence = model.bestSequence(tokens, additionalContext, contextGenerator, sequenceValidator); List c = bestSequence.getOutcomes(); contextGenerator.updateAdaptiveData(tokens, c.toArray(new String[0])); Span[] spans = seqCodec.decode(c); spans = setProbs(spans); return spans; } @Override public void clearAdaptiveData() { contextGenerator.clearAdaptiveData(); } /** * Populates the specified array with the probabilities of the last decoded * sequence. The sequence was determined based on the previous call to * {@link #find(String[])}. The specified array should be at least as large as the * number of tokens in the previous call to {@link #find(String[])}. * * @param probs An array with the probabilities of the last decoded sequence. */ public void probs(double[] probs) { bestSequence.getProbs(probs); } /** * Retrieves the probabilities of the last decoded sequence. The * sequence was determined based on the previous call to {@link #find(String[])}. * * @return An array with the same number of probabilities as tokens were sent * to {@link #find(String[])} when it was last called. */ public double[] probs() { return bestSequence.getProbs(); } /** * Sets probabilities for the spans. * * @param spans The {@link Span spans} to set probabilities. * * @return The {@link Span spans} with populated values. */ private Span[] setProbs(Span[] spans) { double[] probs = probs(spans); if (probs != null) { for (int i = 0; i < probs.length; i++) { double prob = probs[i]; spans[i] = new Span(spans[i], prob); } } return spans; } /** * Retrieves an array of probabilities for each of the specified spans which is * the arithmetic mean of the probabilities for each of the outcomes which * make up the span. * * @param spans The {@link Span spans} of the names for which probabilities * are requested. * * @return An array of probabilities for each of the specified spans. */ public double[] probs(Span[] spans) { double[] sprobs = new double[spans.length]; double[] probs = bestSequence.getProbs(); for (int si = 0; si < spans.length; si++) { double p = 0; for (int oi = spans[si].getStart(); oi < spans[si].getEnd(); oi++) { p += probs[oi]; } p /= spans[si].length(); sprobs[si] = p; } return sprobs; } /** * Starts a training of a {@link TokenNameFinderModel} with the given parameters. * * @param languageCode The ISO conform language code. * @param type The type to use. * @param samples The {@link ObjectStream} of {@link NameSample} used as input for training. * @param params The {@link TrainingParameters} for the context of the training. * @param factory The {@link TokenNameFinderFactory} for creating related objects defined * via {@code params}. * * @return A valid, trained {@link TokenNameFinderModel} instance. * @throws IOException Thrown if IO errors occurred during training. */ public static TokenNameFinderModel train(String languageCode, String type, ObjectStream samples, TrainingParameters params, TokenNameFinderFactory factory) throws IOException { params.putIfAbsent(TrainingParameters.ALGORITHM_PARAM, PerceptronTrainer.PERCEPTRON_VALUE); params.putIfAbsent(TrainingParameters.CUTOFF_PARAM, 0); params.putIfAbsent(TrainingParameters.ITERATIONS_PARAM, 300); int beamSize = params.getIntParameter(BeamSearch.BEAM_SIZE_PARAMETER, NameFinderME.DEFAULT_BEAM_SIZE); Map manifestInfoEntries = new HashMap<>(); MaxentModel nameFinderModel = null; SequenceClassificationModel seqModel = null; TrainerType trainerType = TrainerFactory.getTrainerType(params); if (TrainerType.EVENT_MODEL_TRAINER.equals(trainerType)) { ObjectStream eventStream = new NameFinderEventStream(samples, type, factory.createContextGenerator(), factory.createSequenceCodec()); EventTrainer trainer = TrainerFactory.getEventTrainer(params, manifestInfoEntries); nameFinderModel = trainer.train(eventStream); } // TODO: Maybe it is not a good idea, that these two don't use the context generator ?! // These also don't use the sequence codec ?! else if (TrainerType.EVENT_MODEL_SEQUENCE_TRAINER.equals(trainerType)) { NameSampleSequenceStream ss = new NameSampleSequenceStream(samples, factory.createContextGenerator()); EventModelSequenceTrainer trainer = TrainerFactory.getEventModelSequenceTrainer( params, manifestInfoEntries); nameFinderModel = trainer.train(ss); } else if (TrainerType.SEQUENCE_TRAINER.equals(trainerType)) { SequenceTrainer trainer = TrainerFactory.getSequenceModelTrainer( params, manifestInfoEntries); NameSampleSequenceStream ss = new NameSampleSequenceStream(samples, factory.createContextGenerator(), false); seqModel = trainer.train(ss); } else { throw new IllegalStateException("Unexpected trainer type!"); } if (seqModel != null) { return new TokenNameFinderModel(languageCode, seqModel, factory.getFeatureGenerator(), factory.getResources(), manifestInfoEntries, factory.getSequenceCodec(), factory); } else { return new TokenNameFinderModel(languageCode, nameFinderModel, beamSize, factory.getFeatureGenerator(), factory.getResources(), manifestInfoEntries, factory.getSequenceCodec(), factory); } } /** * Extracts the name type from the {@code outcome}. * * @param outcome The outcome * @return The name type, or {@code null} if not set. */ static String extractNameType(String outcome) { Matcher matcher = typedOutcomePattern.matcher(outcome); if (matcher.matches()) { return matcher.group(1); } return null; } /** * Removes {@link Span spans} with are intersecting or crossing in any way. * *

* The following rules are used to remove the spans:
* Identical spans: The first span in the array after sorting it remains.
* Intersecting spans: The first span after sorting remains.
* Contained spans: All spans which are contained by another are removed.
* * @param spans The input {@link Span spans}. * * @return The resulting non-overlapping {@link Span spans}. */ public static Span[] dropOverlappingSpans(Span[] spans) { List sortedSpans = new ArrayList<>(spans.length); Collections.addAll(sortedSpans, spans); Collections.sort(sortedSpans); Iterator it = sortedSpans.iterator(); Span lastSpan = null; while (it.hasNext()) { Span span = it.next(); if (lastSpan != null) { if (lastSpan.intersects(span)) { it.remove(); span = lastSpan; } } lastSpan = span; } return sortedSpans.toArray(new Span[0]); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_namefind_NameFind0100644 0000000 0000000 00000000166 14523004075 032474 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/NameFinderSequenceValidator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/NameFinderSequenceValida0100644 0000000 0000000 00000004250 14523004075 034144 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import opennlp.tools.util.SequenceValidator; /** * The default name finder {@link SequenceValidator} implementation. * Created by the {@link BioCodec}. * * @see TokenNameFinder * @see BioCodec */ public class NameFinderSequenceValidator implements SequenceValidator { @Override public boolean validSequence(int i, String[] inputSequence, String[] outcomesSequence, String outcome) { // outcome is formatted like "cont" or "sometype-cont", so we // can check if it ends with "cont". if (outcome.endsWith(BioCodec.CONTINUE)) { int li = outcomesSequence.length - 1; if (li == -1) { return false; } else if (outcomesSequence[li].endsWith(BioCodec.OTHER)) { return false; } else if (outcomesSequence[li].endsWith(BioCodec.CONTINUE) || outcomesSequence[li].endsWith(BioCodec.START)) { // if it is continue or start, we have to check if previous match was of the same type String previousNameType = NameFinderME.extractNameType(outcomesSequence[li]); String nameType = NameFinderME.extractNameType(outcome); if (previousNameType != null || nameType != null ) { if (nameType != null ) { return nameType.equals(previousNameType); } return false; // outcomes types are not equal } } } return true; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/NameSample.java0100644 0000000 0000000 00000026225 14523004075 032272 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; import opennlp.tools.commons.Sample; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.Span; /** * Encapsulates names for a single unit of text. */ public class NameSample implements Sample { private static final long serialVersionUID = 1655333056555270688L; private final String id; private final List sentence; private final List names; private final String[][] additionalContext; private final boolean isClearAdaptiveData; /** The default type value when there is no type in training data. */ public static final String DEFAULT_TYPE = "default"; /** * Initializes a {@link NameSample} instance with given parameters. * * @param id The identifier to use. * @param sentence The tokens representing a training sentence. Must not be {@code null}. * @param names The {@link Span names} to use. * @param additionalContext Additional context in a 2-dimensional array. * @param clearAdaptiveData If {@code true} the adaptive data of the feature generators is cleared. * * @throws RuntimeException Thrown if name spans are overlapping. */ public NameSample(String id, String[] sentence, Span[] names, String[][] additionalContext, boolean clearAdaptiveData) { this.id = id; Objects.requireNonNull(sentence, "sentence must not be null"); if (names == null) { names = new Span[0]; } this.sentence = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(sentence))); List namesList = Arrays.asList(names); Collections.sort(namesList); this.names = Collections.unmodifiableList(namesList); if (additionalContext != null) { this.additionalContext = new String[additionalContext.length][]; for (int i = 0; i < additionalContext.length; i++) { this.additionalContext[i] = new String[additionalContext[i].length]; System.arraycopy(additionalContext[i], 0, this.additionalContext[i], 0, additionalContext[i].length); } } else { this.additionalContext = null; } isClearAdaptiveData = clearAdaptiveData; // Check that name spans are not overlapping, otherwise throw exception if (this.names.size() > 1) { for (int i = 1; i < this.names.size(); i++) { if (this.names.get(i).getStart() < this.names.get(i - 1).getEnd()) { throw new RuntimeException(String.format("name spans %s and %s are overlapped in file: %s," + " sentence: %s", this.names.get(i - 1), this.names.get(i), id, this.sentence.toString())); } } } } /** * Initializes a {@link NameSample} instance with given parameters. * * @param sentence The tokens representing a sentence. Must not be {@code null}. * @param names The {@link Span names} to use. * @param additionalContext Additional context in a 2-dimensional array. * @param clearAdaptiveData If {@code true} the adaptive data of the feature generators is cleared. * * @throws RuntimeException Thrown if name spans are overlapping. */ public NameSample(String[] sentence, Span[] names, String[][] additionalContext, boolean clearAdaptiveData) { this(null, sentence, names, additionalContext, clearAdaptiveData); } /** * Initializes a {@link NameSample} instance with given parameters. * * @param sentence The tokens representing a sentence. Must not be {@code null}. * @param names The {@link Span names} to use. * @param clearAdaptiveData If {@code true} the adaptive data of the feature generators is cleared. * * @throws RuntimeException Thrown if name spans are overlapping. */ public NameSample(String[] sentence, Span[] names, boolean clearAdaptiveData) { this(sentence, names, null, clearAdaptiveData); } /** * @return Retrieves the current identifier. May be {@code null}. */ public String getId() { return id; } /** * @return Retrieves the sentence in tokenized form. */ public String[] getSentence() { return sentence.toArray(new String[0]); } /** * @return Retrieves the {@link Span names}. */ public Span[] getNames() { return names.toArray(new Span[0]); } /** * @return Retrieves additional context. May be {@code null}. */ public String[][] getAdditionalContext() { return additionalContext; } /** * @return {@code true} if the adaptive data of the feature generators are cleared, * {@code false} otherwise. */ public boolean isClearAdaptiveDataSet() { return isClearAdaptiveData; } @Override public int hashCode() { return Objects.hash(Arrays.hashCode(getSentence()), Arrays.hashCode(getNames()), Arrays.hashCode(getAdditionalContext()), isClearAdaptiveDataSet()); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof NameSample a) { return Arrays.equals(getSentence(), a.getSentence()) && Arrays.equals(getNames(), a.getNames()) && Arrays.equals(getAdditionalContext(), a.getAdditionalContext()) && isClearAdaptiveDataSet() == a.isClearAdaptiveDataSet(); } return false; } @Override public String toString() { StringBuilder result = new StringBuilder(); // If adaptive data must be cleared insert an empty line // before the sample sentence line if (isClearAdaptiveDataSet()) result.append("\n"); for (int tokenIndex = 0; tokenIndex < sentence.size(); tokenIndex++) { // token for (Span name : names) { if (name.getStart() == tokenIndex) { // check if nameTypes is null, or if the nameType for this specific // entity is empty. If it is, we leave the nameType blank. if (name.getType() == null) { result.append(NameSampleDataStream.START_TAG).append(' '); } else { result.append(NameSampleDataStream.START_TAG_PREFIX).append(name.getType()).append("> "); } } if (name.getEnd() == tokenIndex) { result.append(NameSampleDataStream.END_TAG).append(' '); } } result.append(sentence.get(tokenIndex)).append(' '); } if (sentence.size() > 1) result.setLength(result.length() - 1); for (Span name : names) { if (name.getEnd() == sentence.size()) { result.append(' ').append(NameSampleDataStream.END_TAG); } } return result.toString(); } private static String errorTokenWithContext(String[] sentence, int index) { StringBuilder errorString = new StringBuilder(); // two token before if (index > 1) errorString.append(sentence[index - 2]).append(" "); if (index > 0) errorString.append(sentence[index - 1]).append(" "); // token itself errorString.append("###"); errorString.append(sentence[index]); errorString.append("###").append(" "); // two token after if (index + 1 < sentence.length) errorString.append(sentence[index + 1]).append(" "); if (index + 2 < sentence.length) errorString.append(sentence[index + 2]); return errorString.toString(); } private static final Pattern START_TAG_PATTERN = Pattern.compile("\\s]*))?>"); /** * Parses given input into a {@link NameSample}. * * @param taggedTokens The input data to parse. * @param clearAdaptiveData {@code true} if the adaptive data of the feature generators should be cleared, * {@code false} otherwise. * @return A {@link NameSample} instance resulting from the parsing. * @throws IOException Thrown if IO errors occurred during parsing. */ public static NameSample parse(String taggedTokens, boolean clearAdaptiveData) throws IOException { return parse(taggedTokens, DEFAULT_TYPE, clearAdaptiveData); } /** * Parses given input into a {@link NameSample}. * * @param taggedTokens The input data to parse. * @param defaultType The type to set by default. * @param clearAdaptiveData {@code true} if the adaptive data of the feature generators should be cleared, * {@code false} otherwise. * @return A {@link NameSample} instance resulting from the parsing. * @throws IOException Thrown if IO errors occurred during parsing. */ // TODO: Should throw another exception, and then convert it into an IOException in the stream public static NameSample parse(String taggedTokens, String defaultType, boolean clearAdaptiveData) throws IOException { String[] parts = WhitespaceTokenizer.INSTANCE.tokenize(taggedTokens); List tokenList = new ArrayList<>(parts.length); List nameList = new ArrayList<>(); String nameType = defaultType; int startIndex = -1; int wordIndex = 0; // we check if at least one name has the a type. If no one has, we will // leave the NameType property of NameSample null. boolean catchingName = false; for (int pi = 0; pi < parts.length; pi++) { Matcher startMatcher = START_TAG_PATTERN.matcher(parts[pi]); if (startMatcher.matches()) { if (catchingName) { throw new IOException("Found unexpected annotation" + " while handling a name sequence: " + errorTokenWithContext(parts, pi)); } catchingName = true; startIndex = wordIndex; String nameTypeFromSample = startMatcher.group(2); if (nameTypeFromSample != null) { if (nameTypeFromSample.length() == 0) { throw new IOException("Missing a name type: " + errorTokenWithContext(parts, pi)); } nameType = nameTypeFromSample; } } else if (parts[pi].equals(NameSampleDataStream.END_TAG)) { if (!catchingName) { throw new IOException("Found unexpected annotation: " + errorTokenWithContext(parts, pi)); } catchingName = false; // create name nameList.add(new Span(startIndex, wordIndex, nameType)); } else { tokenList.add(parts[pi]); wordIndex++; } } String[] sentence = tokenList.toArray(new String[0]); Span[] names = nameList.toArray(new Span[0]); return new NameSample(sentence, names, clearAdaptiveData); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_namefind_NameSamp0100644 0000000 0000000 00000000157 14523004075 032514 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/NameSampleDataStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/NameSampleDataStream.jav0100644 0000000 0000000 00000004424 14523004075 034074 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.io.IOException; import opennlp.tools.ml.maxent.DataStream; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; /** * The {@link NameSampleDataStream} class converts tagged {@link String strings} * provided by a {@link DataStream} to {@link NameSample} objects. * It uses text that is one-sentence per line and tokenized * with names identified by: *

* {@code <START>} and {@code <END>} tags. */ public class NameSampleDataStream extends FilterObjectStream { public static final String START_TAG_PREFIX = " in) { super(in); } @Override public NameSample read() throws IOException { String token = samples.read(); boolean isClearAdaptiveData = false; // An empty line indicates the start of a new article // for which the adaptive data in the feature generators // must be cleared while (token != null && token.trim().length() == 0) { isClearAdaptiveData = true; token = samples.read(); } if (token != null) { return NameSample.parse(token, isClearAdaptiveData); } else { return null; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_namefind_NameSamp0100644 0000000 0000000 00000000163 14523004075 032511 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/NameSampleSequenceStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/NameSampleSequenceStream0100644 0000000 0000000 00000014016 14523004075 034212 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.io.IOException; import java.util.Collections; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.Sequence; import opennlp.tools.ml.model.SequenceStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.SequenceCodec; import opennlp.tools.util.featuregen.AdaptiveFeatureGenerator; /** * A {@link SequenceStream} implementation encapsulating {@link NameSample samples}. */ public class NameSampleSequenceStream implements SequenceStream { private final NameContextGenerator pcg; private final boolean useOutcomes; private final ObjectStream psi; private final SequenceCodec seqCodec; /** * Initializes a {@link NameSampleSequenceStream} with given {@code psi} samples. * * @param psi The data stream of {@link NameSample samples}. */ public NameSampleSequenceStream(ObjectStream psi) { this(psi, new DefaultNameContextGenerator((AdaptiveFeatureGenerator) null), true); } /** * Initializes a {@link NameSampleSequenceStream} with given {@code psi} samples * and an {@link AdaptiveFeatureGenerator feature generator}. * * @param psi The data stream of {@link NameSample samples}. * @param featureGen The {@link AdaptiveFeatureGenerator feature generator} to use. */ public NameSampleSequenceStream(ObjectStream psi, AdaptiveFeatureGenerator featureGen) { this(psi, new DefaultNameContextGenerator(featureGen), true); } /** * Initializes a {@link NameSampleSequenceStream} with given {@code psi} samples * and an {@link AdaptiveFeatureGenerator feature generator}. * * @param psi The data stream of {@link NameSample samples}. * @param featureGen The {@link AdaptiveFeatureGenerator feature generator} to use. * @param useOutcomes Whether to use outcomes or not. */ public NameSampleSequenceStream(ObjectStream psi, AdaptiveFeatureGenerator featureGen, boolean useOutcomes) { this(psi, new DefaultNameContextGenerator(featureGen), useOutcomes); } /** * Initializes a {@link NameSampleSequenceStream} with given {@code psi} samples * and an {@link AdaptiveFeatureGenerator feature generator}. * * @param psi The data stream of {@link NameSample samples}. * @param pcg The {@link NameContextGenerator context generator} to use. */ public NameSampleSequenceStream(ObjectStream psi, NameContextGenerator pcg) { this(psi, pcg, true); } /** * Initializes a {@link NameSampleSequenceStream} with given {@code psi} samples * and an {@link AdaptiveFeatureGenerator feature generator}. * * @param psi The data stream of {@link NameSample samples}. * @param pcg The {@link NameContextGenerator context generator} to use. * @param useOutcomes Whether to use outcomes or not. */ public NameSampleSequenceStream(ObjectStream psi, NameContextGenerator pcg, boolean useOutcomes) { this(psi, pcg, useOutcomes, new BioCodec()); } /** * Initializes a {@link NameSampleSequenceStream} with given {@code psi} samples * and an {@link AdaptiveFeatureGenerator feature generator}. * * @param psi The data stream of {@link NameSample samples}. * @param pcg The {@link NameContextGenerator context generator} to use. * @param useOutcomes Whether to use outcomes or not. * @param seqCodec The {@link SequenceCodec} to use. */ public NameSampleSequenceStream(ObjectStream psi, NameContextGenerator pcg, boolean useOutcomes, SequenceCodec seqCodec) { this.psi = psi; this.useOutcomes = useOutcomes; this.pcg = pcg; this.seqCodec = seqCodec; } @Override public Event[] updateContext(Sequence sequence, AbstractModel model) { TokenNameFinder tagger = new NameFinderME(new TokenNameFinderModel( "x-unspecified", model, Collections.emptyMap(), null)); String[] sentence = sequence.getSource().getSentence(); String[] tags = seqCodec.encode(tagger.find(sentence), sentence.length); Event[] events = new Event[sentence.length]; NameFinderEventStream.generateEvents(sentence,tags,pcg).toArray(events); return events; } @Override public Sequence read() throws IOException { NameSample sample = psi.read(); if (sample != null) { String[] sentence = sample.getSentence(); String[] tags = seqCodec.encode(sample.getNames(), sentence.length); Event[] events = new Event[sentence.length]; for (int i = 0; i < sentence.length; i++) { // it is safe to pass the tags as previous tags because // the context generator does not look for non predicted tags String[] context; if (useOutcomes) { context = pcg.getContext(i, sentence, tags, null); } else { context = pcg.getContext(i, sentence, null, null); } events[i] = new Event(tags[i], context); } return new Sequence<>(events,sample); } else { return null; } } @Override public void reset() throws IOException, UnsupportedOperationException { psi.reset(); } @Override public void close() throws IOException { psi.close(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_namefind_NameSamp0100644 0000000 0000000 00000000157 14523004075 032514 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/NameSampleTypeFilter.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/NameSampleTypeFilter.jav0100644 0000000 0000000 00000005170 14523004075 034135 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; /** * A {@link FilterObjectStream stream} which removes {@link NameSample name samples} * which do not have a certain type. */ public class NameSampleTypeFilter extends FilterObjectStream { private final Set types; /** * Initializes a {@link NameSampleTypeFilter}. * * @param types An array with types to use. * @param samples An {@link ObjectStream} with the samples to filter. */ public NameSampleTypeFilter(String[] types, ObjectStream samples) { super(samples); this.types = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(types))); } /** * Initializes a {@link NameSampleTypeFilter}. * * @param types A {@link Set} with types to use. * @param samples An {@link ObjectStream} with the samples to filter. */ public NameSampleTypeFilter(Set types, ObjectStream samples) { super(samples); this.types = Collections.unmodifiableSet(new HashSet<>(types)); } @Override public NameSample read() throws IOException { NameSample sample = samples.read(); if (sample != null) { List filteredNames = new ArrayList<>(); for (Span name : sample.getNames()) { if (types.contains(name.getType())) { filteredNames.add(name); } } return new NameSample(sample.getId(), sample.getSentence(), filteredNames.toArray(new Span[0]), null, sample.isClearAdaptiveDataSet()); } else { return null; } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/RegexNameFinder.java0100644 0000000 0000000 00000013423 14523004075 033247 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.util.Collection; import java.util.HashMap; import java.util.LinkedList; import java.util.Map; import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; import opennlp.tools.util.Span; /** * A {@link TokenNameFinder} implementation based on a series of regular expressions. */ public final class RegexNameFinder implements TokenNameFinder { private Pattern[] mPatterns; private String sType; private Map regexMap; /** * Initializes a {@link RegexNameFinder} instance. * * @param regexMap A {@link Map} where the key is a type, and the value is a * {@link Pattern[]}. Must not be {@code null}. */ public RegexNameFinder(Map regexMap) { this.regexMap = Objects.requireNonNull(regexMap, "regexMap must not be null"); } /** * Initializes a {@link RegexNameFinder} instance. * * @param patterns The {@link Pattern[] patterns} to use. * Must not be {@code null} and not be empty. * @param type The type to use. * * @throws IllegalArgumentException Thrown if {@code patterns} were {@code null} or empty. */ public RegexNameFinder(Pattern[] patterns, String type) { if (patterns == null || patterns.length == 0) { throw new IllegalArgumentException("patterns must not be null or empty!"); } mPatterns = patterns; sType = type; } @Override public Span[] find(String[] tokens) { Map sentencePosTokenMap = new HashMap<>(); StringBuilder sentenceString = new StringBuilder(tokens.length * 10); for (int i = 0; i < tokens.length; i++) { int startIndex = sentenceString.length(); sentencePosTokenMap.put(startIndex, i); sentenceString.append(tokens[i]); int endIndex = sentenceString.length(); sentencePosTokenMap.put(endIndex, i + 1); if (i < tokens.length - 1) { sentenceString.append(' '); } } Collection annotations = new LinkedList<>(); if (regexMap != null) { for (Map.Entry entry : regexMap.entrySet()) { for (Pattern mPattern : entry.getValue()) { Matcher matcher = mPattern.matcher(sentenceString); while (matcher.find()) { Integer tokenStartIndex = sentencePosTokenMap.get(matcher.start()); Integer tokenEndIndex = sentencePosTokenMap.get(matcher.end()); if (tokenStartIndex != null && tokenEndIndex != null) { Span annotation = new Span(tokenStartIndex, tokenEndIndex, entry.getKey()); annotations.add(annotation); } } } } } else { for (Pattern mPattern : mPatterns) { Matcher matcher = mPattern.matcher(sentenceString); while (matcher.find()) { Integer tokenStartIndex = sentencePosTokenMap.get(matcher.start()); Integer tokenEndIndex = sentencePosTokenMap.get(matcher.end()); if (tokenStartIndex != null && tokenEndIndex != null) { Span annotation = new Span(tokenStartIndex, tokenEndIndex, sType); annotations.add(annotation); } } } } return annotations.toArray(new Span[0]); } /** * Finds {@link Span spans} with character indices, rather than word. * * @param text The text to use. * @return A {@link Span[]} representing the annotations. */ public Span[] find(String text) { return getAnnotations(text); } private Span[] getAnnotations(String text) { Collection annotations = new LinkedList<>(); if (regexMap != null) { for (Map.Entry entry : regexMap.entrySet()) { for (Pattern mPattern : entry.getValue()) { Matcher matcher = mPattern.matcher(text); while (matcher.find()) { Span annotation = new Span(matcher.start(), matcher.end(), entry.getKey()); annotations.add(annotation); } } } } else { for (Pattern mPattern : mPatterns) { Matcher matcher = mPattern.matcher(text); while (matcher.find()) { Span annotation = new Span(matcher.start(), matcher.end(), sType); annotations.add(annotation); } } } return annotations.toArray(new Span[0]); } @Override public void clearAdaptiveData() { // nothing to clear } /** * @return Retrieves the {@link Pattern matching patterns} used. */ public Pattern[] getMatchingPatterns() { return mPatterns; } /** * @param mPatterns The {@link Pattern matching patterns} to be set. */ public void setMatchingPatterns(Pattern[] mPatterns) { this.mPatterns = mPatterns; } /** * @return Retrieves the {@link Span} type used. */ public String getSpanType() { return sType; } /** * @param sType Sets a (different) {@link Span} type. */ public void setSpanType(String sType) { this.sType = sType; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_namefind_RegexNam0100644 0000000 0000000 00000000161 14523004075 032514 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/RegexNameFinderFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/RegexNameFinderFactory.j0100644 0000000 0000000 00000015324 14523004075 034111 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.util.HashMap; import java.util.Map; import java.util.Objects; import java.util.regex.Pattern; /** * * Returns a {@link RegexNameFinder} based on a selection of * defaults or a configuration and a selection of defaults. */ public class RegexNameFinderFactory { /** * Allows for use of selected Defaults as well as regexes from external * configuration. * * @param config A {@link Map} where the key is a type, and the value is a * {@link Pattern[]}. If a key clashes with one of the default keys, * the config map entry will be taken. * @param defaults One or more of the default {@link DEFAULT_REGEX_NAME_FINDER} enum values. * @return A {@link RegexNameFinder} instance. */ public static synchronized RegexNameFinder getDefaultRegexNameFinders( Map config, DEFAULT_REGEX_NAME_FINDER... defaults) { Objects.requireNonNull(config, "config must not be null"); Map defaultsToMap = new HashMap<>(); if (defaults != null) { defaultsToMap = defaultsToMap(defaults); } defaultsToMap.putAll(config); return new RegexNameFinder(defaultsToMap); } /** * Retrieves a {@link RegexNameFinder} that will utilize specified default regexes. * * @param defaults One or more of the default {@link DEFAULT_REGEX_NAME_FINDER} enum values. * @return A {@link RegexNameFinder} instance. */ public static synchronized RegexNameFinder getDefaultRegexNameFinders( DEFAULT_REGEX_NAME_FINDER... defaults) { Objects.requireNonNull(defaults, "defaults must not be null"); return new RegexNameFinder(defaultsToMap(defaults)); } private synchronized static Map defaultsToMap( DEFAULT_REGEX_NAME_FINDER... defaults) { Map regexMap = new HashMap<>(); for (DEFAULT_REGEX_NAME_FINDER def : defaults) { regexMap.putAll(def.getRegexMap()); } return regexMap; } public interface RegexAble { Map getRegexMap(); String getType(); } /** * Enumeration of typical regex expressions available in OpenNLP. */ public enum DEFAULT_REGEX_NAME_FINDER implements RegexAble { USA_PHONE_NUM { @Override public Map getRegexMap() { Pattern[] p = new Pattern[1]; // p[0] = Pattern.compile("([\\+(]?(\\d){2,}[)]?[- \\.]?(\\d){2,}[- \\.]?(\\d){2,}[- \\.]? // (\\d){2,}[- \\.]?(\\d){2,})|([\\+(]?(\\d){2,}[)]?[- \\.]?(\\d){2,}[- \\.]?(\\d){2,}[- // \\.]?(\\d){2,})|([\\+(]?(\\d){2,}[)]?[- \\.]?(\\d){2,}[- \\.]?(\\d){2,})", // Pattern.CASE_INSENSITIVE); p[0] = Pattern.compile("((\\(\\d{3}\\) ?)|(\\d{3}-))?\\d{3}-\\d{4}"); Map regexMap = new HashMap<>(); regexMap.put(getType(), p); return regexMap; } @Override public String getType() { return "PHONE_NUM"; } }, EMAIL { @Override public Map getRegexMap() { Pattern[] p = new Pattern[1]; p[0] = Pattern.compile("([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*" + "|\"([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09" + "\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9]([a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]" + "*[a-z0-9])?|\\[((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]" + "?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]" + "|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])", Pattern.CASE_INSENSITIVE); Map regexMap = new HashMap<>(); regexMap.put(getType(), p); return regexMap; } @Override public String getType() { return "EMAIL"; } }, URL { @Override public Map getRegexMap() { Pattern[] p = new Pattern[1]; p[0] = Pattern.compile("\\b(((ht|f)tp(s?)\\:\\/\\/|~\\/|\\/)|www.)" + "(\\w+:\\w+@)?(([-\\w]+\\.)+(com|org|net|gov" + "|mil|biz|info|mobi|name|aero|jobs|museum" + "|travel|[a-z]{2}))(:[\\d]{1,5})?" + "(((\\/([-\\w~!$+|.,=]|%[a-f\\d]{2})+)+|\\/)+|\\?|#)?" + "((\\?([-\\w~!$+|.,*:]|%[a-f\\d{2}])+=?" + "([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)" + "(&(?:[-\\w~!$+|.,*:]|%[a-f\\d{2}])+=?" + "([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)*)*" + "(#([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)?\\b", Pattern.CASE_INSENSITIVE); Map regexMap = new HashMap<>(); regexMap.put(getType(), p); return regexMap; } @Override public String getType() { return "URL"; } }, MGRS { @Override public Map getRegexMap() { Pattern[] p = new Pattern[1]; p[0] = Pattern.compile("\\d{1,2}[A-Za-z]\\s*[A-Za-z]{2}\\s*\\d{1,5}\\s*\\d{1,5}", Pattern.CASE_INSENSITIVE); Map regexMap = new HashMap<>(); regexMap.put(getType(), p); return regexMap; } @Override public String getType() { return "MGRS"; } }, DEGREES_MIN_SEC_LAT_LON { @Override public Map getRegexMap() { Pattern[] p = new Pattern[1]; p[0] = Pattern.compile("([-|\\+]?\\d{1,3}[d|D|\\u00B0|\\s](\\s*\\d{1,2}['|\\u2019|\\s])" + "?(\\s*\\d{1,2}[\\\"|\\u201d])?\\s*[N|n|S|s]?)(\\s*|,|,\\s*)([-|\\+]?\\d{1,3}[d|D|\\u00B0|" + "\\s](\\s*\\d{1,2}['|\\u2019|\\s])?(\\s*\\d{1,2}[\\\"|\\u201d])?\\s*[E|e|W|w]?)", Pattern.CASE_INSENSITIVE); Map regexMap = new HashMap<>(); regexMap.put(getType(), p); return regexMap; } @Override public String getType() { return "DEGREES_MIN_SEC_LAT_LON"; } } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/TokenNameFinder.java0100644 0000000 0000000 00000003110 14523004075 033245 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import opennlp.tools.util.Span; /** * The interface for name finders which provide name tags for a sequence of tokens. */ public interface TokenNameFinder { /** * Generates name tags for the given sequence, typically a sentence, * returning {@link Span token spans} for any identified names. * * @param tokens An array of the tokens or words of the sequence, typically a sentence. * @return An array of {@link Span spans} for each of the names identified. */ Span[] find(String[] tokens); /** * Forgets all adaptive data which was collected during previous * calls to one of the find methods. *

* Note: * This method should typically be called at the end of the processing of a document. */ void clearAdaptiveData(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_namefind_TokenNam0100644 0000000 0000000 00000000170 14523004075 032522 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/TokenNameFinderCrossValidator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/TokenNameFinderCrossVali0100644 0000000 0000000 00000020703 14523004075 034162 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import opennlp.tools.commons.Sample; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.SequenceCodec; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.eval.CrossValidationPartitioner; import opennlp.tools.util.eval.FMeasure; /** * Cross validator for {@link TokenNameFinder}. */ public class TokenNameFinderCrossValidator { private record DocumentSample(NameSample[] samples) implements Sample { private static final long serialVersionUID = -4199121634493414749L; } /** * Reads {@link NameSample samples} to group them as a document based on the clear adaptive data flag. */ private static class NameToDocumentSampleStream extends FilterObjectStream { private NameSample beginSample; protected NameToDocumentSampleStream(ObjectStream samples) { super(samples); } @Override public DocumentSample read() throws IOException { List document = new ArrayList<>(); if (beginSample == null) { // Assume that the clear flag is set beginSample = samples.read(); } // Underlying stream is exhausted! if (beginSample == null) { return null; } document.add(beginSample); NameSample sample; while ((sample = samples.read()) != null) { if (sample.isClearAdaptiveDataSet()) { beginSample = sample; break; } document.add(sample); } // Underlying stream is exhausted, // next call must return null if (sample == null) { beginSample = null; } return new DocumentSample(document.toArray(new NameSample[0])); } @Override public void reset() throws IOException, UnsupportedOperationException { super.reset(); beginSample = null; } } /** * Splits {@link DocumentSample document samples} into {@link NameSample name samples}. */ private static class DocumentToNameSampleStream extends FilterObjectStream { protected DocumentToNameSampleStream(ObjectStream samples) { super(samples); } private Iterator documentSamples = Collections.emptyIterator(); @Override public NameSample read() throws IOException { // Note: Empty document samples should be skipped if (documentSamples.hasNext()) { return documentSamples.next(); } else { DocumentSample docSample = samples.read(); if (docSample != null) { documentSamples = Arrays.asList(docSample.samples()).iterator(); return read(); } else { return null; } } } } private final String languageCode; private final TrainingParameters params; private final String type; private final byte[] featureGeneratorBytes; private final Map resources; private final TokenNameFinderEvaluationMonitor[] listeners; private final FMeasure fmeasure = new FMeasure(); private TokenNameFinderFactory factory; /** * Initializes a {@link TokenNameFinderCrossValidator} with the given parameters. * * @param languageCode The ISO conform language code. * @param type {@code null} or an override type for all types in the training data. * @param featureGeneratorBytes The {@code byte[]} representing the feature generator descriptor. * @param resources Additional resources in a mapping. * @param codec The {@link SequenceCodec} to use. * @param params The {@link TrainingParameters} for the context of cross validation. * @param listeners the {@link TokenNameFinderEvaluationMonitor evaluation listeners}. */ public TokenNameFinderCrossValidator(String languageCode, String type, TrainingParameters params, byte[] featureGeneratorBytes, Map resources, SequenceCodec codec, TokenNameFinderEvaluationMonitor... listeners) { this.languageCode = languageCode; this.type = type; this.featureGeneratorBytes = featureGeneratorBytes; this.resources = resources; this.params = params; this.listeners = listeners; } /** * Initializes a {@link TokenNameFinderCrossValidator} with the given parameters. * * @param languageCode The ISO conform language code. * @param type {@code null} or an override type for all types in the training data. * @param featureGeneratorBytes The {@code byte[]} representing the feature generator descriptor. * @param resources Additional resources in a mapping. * @param listeners the {@link TokenNameFinderEvaluationMonitor evaluation listeners}. */ public TokenNameFinderCrossValidator(String languageCode, String type, TrainingParameters trainParams, byte[] featureGeneratorBytes, Map resources, TokenNameFinderEvaluationMonitor... listeners) { this(languageCode, type, trainParams, featureGeneratorBytes, resources, new BioCodec(), listeners); } /** * Initializes a {@link TokenNameFinderCrossValidator} with the given parameters. * * @param languageCode The ISO conform language code. * @param type {@code null} or an override type for all types in the training data. * @param params The {@link TrainingParameters} for the context of cross validation. * @param factory The {@link TokenNameFinderFactory} for creating related objects. * @param listeners the {@link TokenNameFinderEvaluationMonitor evaluation listeners}. */ public TokenNameFinderCrossValidator(String languageCode, String type, TrainingParameters params, TokenNameFinderFactory factory, TokenNameFinderEvaluationMonitor... listeners) { this(languageCode, type, params, null, null, new BioCodec(), listeners); this.factory = factory; } /** * Starts the evaluation. *

* Note: * The name samples need to be grouped on a document basis. * * @param samples The {@link ObjectStream} of {@link NameSample samples} to train and test with. * @param nFolds Number of folds. It must be greater than zero. * * @throws IOException Thrown if IO errors occurred. */ public void evaluate(ObjectStream samples, int nFolds) throws IOException { CrossValidationPartitioner partitioner = new CrossValidationPartitioner<>( new NameToDocumentSampleStream(samples), nFolds); while (partitioner.hasNext()) { CrossValidationPartitioner.TrainingSampleStream trainingSampleStream = partitioner.next(); TokenNameFinderModel model; if (factory != null) { model = NameFinderME.train(languageCode, type, new DocumentToNameSampleStream(trainingSampleStream), params, factory); } else { model = NameFinderME.train(languageCode, type, new DocumentToNameSampleStream(trainingSampleStream), params, TokenNameFinderFactory.create(null, featureGeneratorBytes, resources, new BioCodec())); } // do testing TokenNameFinderEvaluator evaluator = new TokenNameFinderEvaluator( new NameFinderME(model), listeners); evaluator.evaluate(new DocumentToNameSampleStream(trainingSampleStream.getTestSampleStream())); fmeasure.mergeInto(evaluator.getFMeasure()); } } public FMeasure getFMeasure() { return fmeasure; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_namefind_TokenNam0100644 0000000 0000000 00000000173 14523004075 032525 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/TokenNameFinderEvaluationMonitor.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/TokenNameFinderEvaluatio0100644 0000000 0000000 00000002046 14523004075 034206 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import opennlp.tools.util.eval.EvaluationMonitor; /** * A marker interface for evaluating {@link TokenNameFinder name finders}. */ public interface TokenNameFinderEvaluationMonitor extends EvaluationMonitor { } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_namefind_TokenNam0100644 0000000 0000000 00000000163 14523004075 032524 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/TokenNameFinderEvaluator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/TokenNameFinderEvaluator0100644 0000000 0000000 00000006166 14523004075 034226 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import opennlp.tools.util.Span; import opennlp.tools.util.eval.Evaluator; import opennlp.tools.util.eval.FMeasure; /** * The {@link TokenNameFinderEvaluator} measures the performance * of the given {@link TokenNameFinder} with the provided * reference {@link NameSample samples}. * * @see Evaluator * @see TokenNameFinder * @see NameSample */ public class TokenNameFinderEvaluator extends Evaluator { private final FMeasure fmeasure = new FMeasure(); /** * The {@link TokenNameFinder} used to create the predicted {@link NameSample} objects. */ private final TokenNameFinder nameFinder; /** * Initializes a {@link TokenNameFinderEvaluator} for a given {@link TokenNameFinder}. * * @param nameFinder The {@link TokenNameFinder} to evaluate. * @param listeners The {@link TokenNameFinderEvaluationMonitor evaluation listeners}. */ public TokenNameFinderEvaluator(TokenNameFinder nameFinder, TokenNameFinderEvaluationMonitor ... listeners) { super(listeners); this.nameFinder = nameFinder; } /** * Evaluates the given reference {@link NameSample} object. *

* This is done by finding the names with the * {@link TokenNameFinder} in the sentence from the reference * {@link NameSample}. The found names are then used to * calculate and update the scores. * * @param reference The reference {@link NameSample}. * * @return The predicted {@link NameSample}. */ @Override protected NameSample processSample(NameSample reference) { if (reference.isClearAdaptiveDataSet()) { nameFinder.clearAdaptiveData(); } Span[] predictedNames = nameFinder.find(reference.getSentence()); Span[] references = reference.getNames(); // OPENNLP-396 When evaluating with a file in the old format // the type of the span is null, but must be set to default to match // the output of the name finder. for (int i = 0; i < references.length; i++) { if (references[i].getType() == null) { references[i] = new Span(references[i].getStart(), references[i].getEnd(), "default"); } } fmeasure.updateScores(references, predictedNames); return new NameSample(reference.getSentence(), predictedNames, reference.isClearAdaptiveDataSet()); } public FMeasure getFMeasure() { return fmeasure; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_namefind_TokenNam0100644 0000000 0000000 00000000161 14523004075 032522 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/TokenNameFinderFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/TokenNameFinderFactory.j0100644 0000000 0000000 00000027521 14523004075 034121 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Map; import opennlp.tools.namefind.TokenNameFinderModel.FeatureGeneratorCreationError; import opennlp.tools.util.BaseToolFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.SequenceCodec; import opennlp.tools.util.ext.ExtensionLoader; import opennlp.tools.util.featuregen.AdaptiveFeatureGenerator; import opennlp.tools.util.featuregen.AggregatedFeatureGenerator; import opennlp.tools.util.featuregen.BigramNameFeatureGenerator; import opennlp.tools.util.featuregen.CachedFeatureGenerator; import opennlp.tools.util.featuregen.GeneratorFactory; import opennlp.tools.util.featuregen.OutcomePriorFeatureGenerator; import opennlp.tools.util.featuregen.PreviousMapFeatureGenerator; import opennlp.tools.util.featuregen.SentenceFeatureGenerator; import opennlp.tools.util.featuregen.TokenClassFeatureGenerator; import opennlp.tools.util.featuregen.TokenFeatureGenerator; import opennlp.tools.util.featuregen.WindowFeatureGenerator; /** * The factory that provides {@link TokenNameFinder} default implementations and * resources. That only works if that's the central class used for training/runtime. */ public class TokenNameFinderFactory extends BaseToolFactory { private byte[] featureGeneratorBytes; private Map resources; private SequenceCodec seqCodec; /** * Initializes a {@link TokenNameFinderFactory} that provides the default implementation * of the resources. {@link BioCodec} will be used as default {@link SequenceCodec}. */ public TokenNameFinderFactory() { this.seqCodec = new BioCodec(); } /** * Initializes a {@link TokenNameFinderFactory} instance via given parameters. * * @param featureGeneratorBytes The {@code byte[]} representing the feature generator descriptor. * @param resources Additional resources in a mapping. * @param seqCodec The {@link SequenceCodec} to use. */ public TokenNameFinderFactory(byte[] featureGeneratorBytes, final Map resources, SequenceCodec seqCodec) { init(featureGeneratorBytes, resources, seqCodec); } /** * Initializes via given parameters. * * @param featureGeneratorBytes The {@code byte[]} representing the feature generator descriptor. * @param resources Additional resources in a mapping. * @param seqCodec The {@link SequenceCodec} to use. */ void init(byte[] featureGeneratorBytes, final Map resources, SequenceCodec seqCodec) { this.featureGeneratorBytes = featureGeneratorBytes; this.resources = resources; this.seqCodec = seqCodec; } /* * Loads the default feature generator bytes via classpath resources. */ private static byte[] loadDefaultFeatureGeneratorBytes() { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); InputStream resource = TokenNameFinderFactory.class.getResourceAsStream( "/opennlp/tools/namefind/ner-default-features.xml"); if (resource == null) { throw new IllegalStateException("Classpath must contain 'ner-default-features.xml' file!"); } try (InputStream in = new BufferedInputStream(resource)) { byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { bytes.write(buf, 0, len); } } catch (IOException e) { throw new IllegalStateException("Failed reading from 'ner-default-features.xml' file on classpath!"); } return bytes.toByteArray(); } /** * @return Retrieves the {@link SequenceCodec} in use. */ protected SequenceCodec getSequenceCodec() { return seqCodec; } /** * @return Retrieves the additional {@code resources} in use. */ protected Map getResources() { return resources; } /** * @return Retrieves {@code byte[]} in use representing the feature generator descriptor. */ protected byte[] getFeatureGenerator() { return featureGeneratorBytes; } /** * Initializes a {@link TokenNameFinderFactory} instance via given parameters. * * @param subclassName The class name used for instantiation. If {@code null}, an * instance of {@link TokenNameFinderFactory} will be returned * per default. Otherwise, the {@link ExtensionLoader} mechanism * is applied to load the requested {@code subclassName}. * @param featureGeneratorBytes The {@code byte[]} representing the feature generator descriptor. * @param resources Additional resources in a mapping. * @param seqCodec The {@link SequenceCodec} to use. * * @return A valid {@link TokenNameFinderFactory} instance. * @throws InvalidFormatException Thrown if the {@link ExtensionLoader} mechanism failed to * create the factory associated with {@code subclassName}. */ public static TokenNameFinderFactory create(String subclassName, byte[] featureGeneratorBytes, final Map resources, SequenceCodec seqCodec) throws InvalidFormatException { TokenNameFinderFactory theFactory; if (subclassName == null) { // will create the default factory theFactory = new TokenNameFinderFactory(); } else { try { theFactory = ExtensionLoader.instantiateExtension( TokenNameFinderFactory.class, subclassName); } catch (Exception e) { String msg = "Could not instantiate the " + subclassName + ". The initialization threw an exception."; throw new InvalidFormatException(msg, e); } } theFactory.init(featureGeneratorBytes, resources, seqCodec); return theFactory; } @Override public void validateArtifactMap() throws InvalidFormatException { // no additional artifacts } /** * @return Initializes and returns a {@link SequenceCodec} via its class name configured in a manifest. * If that initialization fails (e.g., if no matching class could be loaded for the configured * class name at runtime), the currently loaded (default) {@link SequenceCodec} is returned. * * @see BioCodec * @see BilouCodec */ public SequenceCodec createSequenceCodec() { if (artifactProvider != null) { String sequenceCodecImplName = artifactProvider.getManifestProperty( TokenNameFinderModel.SEQUENCE_CODEC_CLASS_NAME_PARAMETER); try { return instantiateSequenceCodec(sequenceCodecImplName); } catch (InvalidFormatException e) { // Uses the (already) available SequenceCodec instance. Default: BioCodec, see no-arg constructor return seqCodec; } } else { return seqCodec; } } /** * Creates and configures a new {@link NameContextGenerator} in a default combination. * * @return A {@link NameContextGenerator} instance. * * @see DefaultNameContextGenerator * @see AdaptiveFeatureGenerator */ public NameContextGenerator createContextGenerator() { AdaptiveFeatureGenerator featureGenerator = createFeatureGenerators(); if (featureGenerator == null) { featureGenerator = new CachedFeatureGenerator( new WindowFeatureGenerator(new TokenFeatureGenerator(), 2, 2), new WindowFeatureGenerator(new TokenClassFeatureGenerator(true), 2, 2), new OutcomePriorFeatureGenerator(), new PreviousMapFeatureGenerator(), new BigramNameFeatureGenerator(), new SentenceFeatureGenerator(true, false)); } return new DefaultNameContextGenerator(featureGenerator); } /** * Creates the {@link AdaptiveFeatureGenerator}. Usually this * is a set of generators contained in {@link AggregatedFeatureGenerator}. *

* Note: * The generators are created on every call to this method. * * @return The {@link AdaptiveFeatureGenerator} or {@code null} if there * is no descriptor in the model. * * @throws FeatureGeneratorCreationError Thrown if configuration errors occurred. * @throws IllegalStateException Thrown if inconsistencies occurred during creation. */ public AdaptiveFeatureGenerator createFeatureGenerators() { if (featureGeneratorBytes == null && artifactProvider != null) { featureGeneratorBytes = artifactProvider.getArtifact( TokenNameFinderModel.GENERATOR_DESCRIPTOR_ENTRY_NAME); } if (featureGeneratorBytes == null) { featureGeneratorBytes = loadDefaultFeatureGeneratorBytes(); } InputStream descriptorIn = new ByteArrayInputStream(featureGeneratorBytes); AdaptiveFeatureGenerator generator; try { generator = GeneratorFactory.create(descriptorIn, key -> { if (artifactProvider != null) { return artifactProvider.getArtifact(key); } else { return resources.get(key); } }); } catch (InvalidFormatException e) { // It is assumed that the creation of the feature generation does not // fail after it succeeded once during model loading. // But it might still be possible that such an exception is thrown, // in this case the caller should not be forced to handle the exception // and a Runtime Exception is thrown instead. // If the re-creation of the feature generation fails it is assumed // that this can only be caused by a programming mistake and therefore // throwing a Runtime Exception is reasonable throw new FeatureGeneratorCreationError(e); } catch (IOException e) { throw new IllegalStateException("Reading from mem cannot result in an I/O error", e); } return generator; } /** * Initializes a {@link SequenceCodec} instance via given parameters. * * @param sequenceCodecImplName The class name used for instantiation. If {@code null}, * an instance of {@link BioCodec} will be returned * per default. Otherwise, the {@link ExtensionLoader} * mechanism is applied to load the requested {@code subclassName}. * * @return A valid {@link SequenceCodec} instance. * @throws InvalidFormatException Thrown if the {@link ExtensionLoader} mechanism failed to * create the codec associated with {@code sequenceCodecImplName}. * @see SequenceCodec * @see BioCodec * @see BilouCodec */ public static SequenceCodec instantiateSequenceCodec(String sequenceCodecImplName) throws InvalidFormatException { if (sequenceCodecImplName != null) { try { return ExtensionLoader.instantiateExtension(SequenceCodec.class, sequenceCodecImplName); } catch (Exception e) { String msg = "Could not instantiate the " + sequenceCodecImplName + ". The initialization threw an exception."; throw new InvalidFormatException(msg, e); } } else { // If nothing is specified return default codec! return new BioCodec(); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_namefind_TokenNam0100644 0000000 0000000 00000000157 14523004075 032527 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/TokenNameFinderModel.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/TokenNameFinderModel.jav0100644 0000000 0000000 00000034477 14523004075 034111 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.file.Path; import java.util.Map; import java.util.Properties; import opennlp.tools.ml.BeamSearch; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.ml.model.SequenceClassificationModel; import opennlp.tools.util.BaseToolFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.SequenceCodec; import opennlp.tools.util.featuregen.BrownCluster; import opennlp.tools.util.featuregen.WordClusterDictionary; import opennlp.tools.util.featuregen.WordClusterFeatureGenerator; import opennlp.tools.util.model.ArtifactSerializer; import opennlp.tools.util.model.BaseModel; import opennlp.tools.util.model.ByteArraySerializer; /** * The {@link TokenNameFinderModel} is the model used by a learnable {@link TokenNameFinder}. * * @see NameFinderME */ // TODO: Fix the model validation, on loading via constructors and input streams public class TokenNameFinderModel extends BaseModel { public static class FeatureGeneratorCreationError extends RuntimeException { FeatureGeneratorCreationError(Throwable t) { super(t); } } private static final String COMPONENT_NAME = "NameFinderME"; private static final String MAXENT_MODEL_ENTRY_NAME = "nameFinder.model"; static final String GENERATOR_DESCRIPTOR_ENTRY_NAME = "generator.featuregen"; static final String SEQUENCE_CODEC_CLASS_NAME_PARAMETER = "sequenceCodecImplName"; /** * Initializes a {@link TokenNameFinderModel} instance via given parameters. * * @param languageCode The ISO conform language code. * @param nameFinderModel A valid {@link MaxentModel}. * @param generatorDescriptor The {@code byte[]} representing the feature generator descriptor. * @param resources Additional resources in a mapping. * @param manifestInfoEntries Additional information kept in the manifest. * @param seqCodec The {@link SequenceCodec} to use. * @param factory The {@link TokenNameFinderFactory} for creating related objects. * * @throws IllegalArgumentException Thrown if the {@code namFinderModel} incompatible * with {@code seqCodec}. */ public TokenNameFinderModel(String languageCode, SequenceClassificationModel nameFinderModel, byte[] generatorDescriptor, Map resources, Map manifestInfoEntries, SequenceCodec seqCodec, TokenNameFinderFactory factory) { super(COMPONENT_NAME, languageCode, manifestInfoEntries, factory); init(nameFinderModel, generatorDescriptor, resources, manifestInfoEntries, seqCodec); if (!seqCodec.areOutcomesCompatible(nameFinderModel.getOutcomes())) { throw new IllegalArgumentException("Model not compatible with name finder!"); } } /** * Initializes a {@link TokenNameFinderModel} instance via given parameters. * * @param languageCode The ISO conform language code. * @param nameFinderModel A valid {@link MaxentModel}. * @param beamSize The beam size. Must be greater than {@code 0}. * @param generatorDescriptor The {@code byte[]} representing the feature generator descriptor. * @param resources Additional resources in a mapping. * @param manifestInfoEntries Additional information kept in the manifest. * @param seqCodec The {@link SequenceCodec} to use. * @param factory The {@link TokenNameFinderFactory} for creating related objects. * * @throws IllegalArgumentException Thrown if the {@code namFinderModel} incompatible * with {@code seqCodec}. */ public TokenNameFinderModel(String languageCode, MaxentModel nameFinderModel, int beamSize, byte[] generatorDescriptor, Map resources, Map manifestInfoEntries, SequenceCodec seqCodec, TokenNameFinderFactory factory) { super(COMPONENT_NAME, languageCode, manifestInfoEntries, factory); Properties manifest = (Properties) artifactMap.get(MANIFEST_ENTRY); manifest.put(BeamSearch.BEAM_SIZE_PARAMETER, Integer.toString(beamSize)); init(nameFinderModel, generatorDescriptor, resources, manifestInfoEntries, seqCodec); if (!isModelValid(nameFinderModel)) { throw new IllegalArgumentException("Model not compatible with name finder!"); } } /** * Initializes a {@link TokenNameFinderModel} instance via given parameters. * * @param languageCode The ISO conform language code. * @param nameFinderModel A valid {@link MaxentModel}. * @param generatorDescriptor The {@code byte[]} representing the feature generator descriptor. * @param resources Additional resources in a mapping. * @param manifestInfoEntries Additional information kept in the manifest. * * @throws IllegalArgumentException Thrown if the {@code namFinderModel} incompatible * with {@code seqCodec}. */ public TokenNameFinderModel(String languageCode, MaxentModel nameFinderModel, byte[] generatorDescriptor, Map resources, Map manifestInfoEntries) { this(languageCode, nameFinderModel, NameFinderME.DEFAULT_BEAM_SIZE, generatorDescriptor, resources, manifestInfoEntries, new BioCodec(), new TokenNameFinderFactory()); } /** * Initializes a {@link TokenNameFinderModel} instance via given parameters. * * @param languageCode The ISO conform language code. * @param nameFinderModel A valid {@link MaxentModel}. * @param beamSize The beam size. Must be greater than {@code 0}. * @param generatorDescriptor The {@code byte[]} representing the feature generator descriptor. * @param resources Additional resources in a mapping. * @param manifestInfoEntries Additional information kept in the manifest. * * @throws IllegalArgumentException Thrown if the {@code namFinderModel} incompatible * with {@code seqCodec}. */ public TokenNameFinderModel(String languageCode, MaxentModel nameFinderModel, int beamSize, byte[] generatorDescriptor, Map resources, Map manifestInfoEntries) { this(languageCode, nameFinderModel, beamSize, generatorDescriptor, resources, manifestInfoEntries, new BioCodec(), new TokenNameFinderFactory()); } /** * Initializes a {@link TokenNameFinderModel} instance via given parameters. * * @param languageCode The ISO conform language code. * @param nameFinderModel A valid {@link MaxentModel}. * @param resources Additional resources in a mapping. * @param manifestInfoEntries Additional information kept in the manifest. * * @throws IllegalArgumentException Thrown if the {@code nameFinderModel} is incompatible * with {@code seqCodec}. */ public TokenNameFinderModel(String languageCode, MaxentModel nameFinderModel, Map resources, Map manifestInfoEntries) { this(languageCode, nameFinderModel, null, resources, manifestInfoEntries); } /** * Initializes a {@link TokenNameFinderModel} instance via a valid {@link InputStream}. * * @param in The {@link InputStream} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public TokenNameFinderModel(InputStream in) throws IOException { super(COMPONENT_NAME, in); } /** * Initializes a {@link TokenNameFinderModel} instance via a valid {@link File}. * * @param modelFile The {@link File} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public TokenNameFinderModel(File modelFile) throws IOException { super(COMPONENT_NAME, modelFile); } /** * Initializes a {@link TokenNameFinderModel} instance via a valid {@link Path}. * * @param modelPath The {@link Path} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public TokenNameFinderModel(Path modelPath) throws IOException { super(COMPONENT_NAME, modelPath); } /** * Initializes a {@link TokenNameFinderModel} instance via a valid {@link URL}. * * @param modelURL The {@link URL} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public TokenNameFinderModel(URL modelURL) throws IOException { super(COMPONENT_NAME, modelURL); } private void init(Object nameFinderModel, byte[] generatorDescriptor, Map resources, Map manifestInfoEntries, SequenceCodec seqCodec) { Properties manifest = (Properties) artifactMap.get(MANIFEST_ENTRY); manifest.put(SEQUENCE_CODEC_CLASS_NAME_PARAMETER, seqCodec.getClass().getName()); artifactMap.put(MAXENT_MODEL_ENTRY_NAME, nameFinderModel); if (generatorDescriptor != null && generatorDescriptor.length > 0) artifactMap.put(GENERATOR_DESCRIPTOR_ENTRY_NAME, generatorDescriptor); if (resources != null) { // The resource map must not contain key which are already taken // like the name finder maxent model name if (resources.containsKey(MAXENT_MODEL_ENTRY_NAME) || resources.containsKey(GENERATOR_DESCRIPTOR_ENTRY_NAME)) { throw new IllegalArgumentException(); } // TODO: Add checks to not put resources where no serializer exists, // make that case fail here, should be done in the BaseModel artifactMap.putAll(resources); } checkArtifactMap(); } /** * @return Retrieves a valid {@link SequenceClassificationModel} or {@code null} * if no matching one could be found. */ public SequenceClassificationModel getNameFinderSequenceModel() { Properties manifest = (Properties) artifactMap.get(MANIFEST_ENTRY); if (artifactMap.get(MAXENT_MODEL_ENTRY_NAME) instanceof MaxentModel) { String beamSizeString = manifest.getProperty(BeamSearch.BEAM_SIZE_PARAMETER); int beamSize = NameFinderME.DEFAULT_BEAM_SIZE; if (beamSizeString != null) { beamSize = Integer.parseInt(beamSizeString); } return new BeamSearch<>(beamSize, (MaxentModel) artifactMap.get(MAXENT_MODEL_ENTRY_NAME)); } else if (artifactMap.get(MAXENT_MODEL_ENTRY_NAME) instanceof SequenceClassificationModel) { return (SequenceClassificationModel) artifactMap.get(MAXENT_MODEL_ENTRY_NAME); } else { return null; } } @Override protected Class getDefaultFactory() { return TokenNameFinderFactory.class; } /** * @return Retrieves the {@link SequenceCodec} in use. */ public SequenceCodec getSequenceCodec() { return this.getFactory().getSequenceCodec(); } /** * @return Retrieves the {@link TokenNameFinderFactory} in use. */ public TokenNameFinderFactory getFactory() { return (TokenNameFinderFactory) this.toolFactory; } @Override protected void createArtifactSerializers(Map serializers) { super.createArtifactSerializers(serializers); serializers.put("featuregen", new ByteArraySerializer()); } /** * Create the {@link ArtifactSerializer serializers}. Currently, for serializers related to * features that require external resources, such as {@code W2VClassesDictionary} * objects, the convention is to add its element tag name as key of the serializer map. *

* For example, the element tag name for the {@link WordClusterFeatureGenerator} which * uses {@code W2VClassesDictionary} objects serialized by the {@code W2VClassesDictionarySerializer} * is 'wordcluster', which is the key used to add the serializer to the map. * * @return A {@link Map} containing the added {@link ArtifactSerializer serializers}. */ public static Map> createArtifactSerializers() { // TODO: Not so nice, because code cannot really be reused by the other create serializer method // Has to be redesigned, we need static access to default serializers // and these should be able to extend during runtime ?! // // The XML feature generator factory should provide these mappings. // Usually the feature generators should know what type of resource they expect. Map> serializers = BaseModel.createArtifactSerializers(); serializers.put("featuregen", new ByteArraySerializer()); serializers.put("wordcluster", new WordClusterDictionary.WordClusterDictionarySerializer()); serializers.put("brownclustertoken", new BrownCluster.BrownClusterSerializer()); serializers.put("brownclustertokenclass", new BrownCluster.BrownClusterSerializer()); serializers.put("brownclusterbigram", new BrownCluster.BrownClusterSerializer()); return serializers; } private boolean isModelValid(MaxentModel model) { String[] outcomes = new String[model.getNumOutcomes()]; for (int i = 0; i < model.getNumOutcomes(); i++) { outcomes[i] = model.getOutcome(i); } return getFactory().createSequenceCodec().areOutcomesCompatible(outcomes); } @Override protected void validateArtifactMap() throws InvalidFormatException { super.validateArtifactMap(); if (!(artifactMap.get(MAXENT_MODEL_ENTRY_NAME) instanceof MaxentModel) && !(artifactMap.get(MAXENT_MODEL_ENTRY_NAME) instanceof SequenceClassificationModel)) { throw new InvalidFormatException("Token Name Finder model is incomplete!"); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/namefind/package-info.java0100644 0000000 0000000 00000001612 14523004075 032565 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package related to finding proper names and numeric amounts. */ package opennlp.tools.namefind; apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ngram/NGramCharModel.java0100644 0000000 0000000 00000014137 14523004075 032355 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ngram; import java.nio.CharBuffer; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.NoSuchElementException; import opennlp.tools.util.StringUtil; /** * The {@link NGramCharModel} can be used to create character ngrams. * * @see NGramModel */ public class NGramCharModel implements Iterable { protected static final String COUNT = "count"; private final Map mNGrams = new HashMap<>(); /** * Initializes an empty instance. */ public NGramCharModel() { } /** * Retrieves the count of the given {@link CharSequence ngram}. * * @param ngram The {@code ngram} to get the count for. * @return Count of the {@code ngram} or {@code 0} if it is not contained at all. */ public int getCount(CharSequence ngram) { Integer count; if (ngram instanceof CharBuffer) { count = mNGrams.get(ngram); } else { count = mNGrams.get(CharBuffer.wrap(ngram)); } if (count == null) { return 0; } return count; } /** * Sets the count of an existing {@link CharSequence ngram}. * * @param ngram The {@code ngram} to get the count for. * @param count The count of the {@code ngram} to set. */ public void setCount(CharSequence ngram, int count) { Integer oldCount = mNGrams.put(ngram, count); if (oldCount == null) { mNGrams.remove(ngram); throw new NoSuchElementException(); } } /** * Adds an {@code ngram}. If it already exists the count increase by one. * * @param ngram The {@link CharSequence} to be added. */ public void add(CharSequence ngram) { if (contains(ngram)) { setCount(ngram, getCount(ngram) + 1); } else { mNGrams.put(CharBuffer.wrap(ngram), 1); } } /** * Adds a {@link CharSequence} that will be ngrammed into chars. * * @param chars The {@link CharSequence} to be ngrammed. * @param minLength The minimal length for {@code 'n'} to populate ngrams with. * @param maxLength The maximum length for {@code 'n'} to populate ngrams with. */ public void add(CharSequence chars, int minLength, int maxLength) { CharBuffer cb = StringUtil.toLowerCaseCharBuffer(chars); for (int lengthIndex = minLength; lengthIndex < maxLength + 1; lengthIndex++) { for (int textIndex = 0; textIndex + lengthIndex - 1 < cb.length(); textIndex++) { CharSequence gram = cb.subSequence(textIndex, textIndex + lengthIndex); add(gram); } } } /** * Removes the specified {@code ngram} is from a {@link NGramCharModel}. * * @param ngram The {@code ngram} to remove. If {@code null}, the model keeps its state. */ public void remove(CharSequence ngram) { if (ngram instanceof CharBuffer) { mNGrams.remove(ngram); } else { if (ngram != null) { mNGrams.remove(CharBuffer.wrap(ngram)); } } } /** * Checks if the given {@code ngram} is contained in a {@link NGramCharModel}. * * @param ngram The {@code ngram} to check. If {@code null}, the model keeps its state. * * @return {@code true} if the ngram is contained, {@code false} otherwise. */ public boolean contains(CharSequence ngram) { if (ngram instanceof CharBuffer) { return mNGrams.containsKey(ngram); } else { if (ngram != null) { return mNGrams.containsKey(CharBuffer.wrap(ngram)); } return false; } } /** * Retrieves the number of {@link CharSequence entries} in a {@link NGramCharModel}. * * @return Number of different grams or {@code 0} if the model is empty. */ public int size() { return mNGrams.size(); } /** * Retrieves an {@link Iterator} over all {@link CharSequence entries}. * * @return iterator over all ngrams */ @Override public Iterator iterator() { return mNGrams.keySet().iterator(); } /** * Retrieves the total count of all Ngrams. * * @return total count of all ngrams */ public int numberOfGrams() { int counter = 0; for (CharSequence ngram : this) { counter += getCount(ngram); } return counter; } /** * Deletes all ngram which do appear less than the {@code cutoffUnder} value * and more often than the {@code cutoffOver} value. * * @param cutoffUnder The lower boundary to use for deletions. * Must be greater than {@code 0}. * @param cutoffOver The upper boundary to use for deletions. * Must be greater than {@code 0} */ public void cutoff(int cutoffUnder, int cutoffOver) { if (cutoffUnder > 0 || cutoffOver < Integer.MAX_VALUE) { for (Iterator it = iterator(); it.hasNext(); ) { CharSequence ngram = it.next(); int count = getCount(ngram); if (count < cutoffUnder || count > cutoffOver) { it.remove(); } } } } @Override public boolean equals(Object obj) { boolean result; if (obj == this) { result = true; } else if (obj instanceof NGramCharModel model) { result = mNGrams.equals(model.mNGrams); } else { result = false; } return result; } @Override public String toString() { return "Size: " + size(); } @Override public int hashCode() { return mNGrams.hashCode(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ngram/NGramGenerator.java0100644 0000000 0000000 00000005700 14523004075 032441 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ngram; import java.util.ArrayList; import java.util.List; /** * Generates an nGram, via an optional separator, and returns the grams as a list * of strings */ public class NGramGenerator { /** * Creates nGrams separated * by the separator param value i.e. {@code a,b,c,d} with {@code n = 3} and a * separator as {@code "-"} would return {@code a-b-c,b-c-d}. * * @param input the input tokens the output ngrams will be derived from * @param n the number of tokens as the sliding window * @param separator each string in each gram will be separated by this value if desired. * Pass in empty string if no separator is desired * @return The generated list of resulting nGrams. */ public static List generate(List input, int n, String separator) { List outGrams = new ArrayList<>(); for (int i = 0; i < input.size() - (n - 1); i++) { final StringBuilder sb = new StringBuilder(); for (int x = i; x < (n + i); x++) { sb.append(input.get(x)); sb.append(separator); } String gram = sb.toString(); gram = gram.substring(0, gram.lastIndexOf(separator)); outGrams.add(gram); } return outGrams; } /** * Generates nGrams based on a {@code char[]} input. * @param input the array of chars to convert to nGram * @param n The number of grams (chars) that each output gram will consist of * @param separator each char in each gram will be separated by this value if desired. * Pass in empty string if no separator is desired * @return The generated list of resulting nGrams. */ public static List generate(char[] input, int n, String separator) { List outGrams = new ArrayList<>(); for (int i = 0; i < input.length - (n - 1); i++) { final StringBuilder sb = new StringBuilder(); for (int x = i; x < (n + i); x++) { sb.append(input[x]); sb.append(separator); } String gram = sb.toString(); gram = gram.substring(0, gram.lastIndexOf(separator)); outGrams.add(gram); } return outGrams; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ngram/NGramModel.java0100644 0000000 0000000 00000022032 14523004075 031550 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ngram; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.CharBuffer; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.NoSuchElementException; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.dictionary.serializer.Attributes; import opennlp.tools.dictionary.serializer.DictionaryEntryPersistor; import opennlp.tools.dictionary.serializer.Entry; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.StringList; import opennlp.tools.util.StringUtil; /** * The {@link NGramModel} can be used to crate ngrams and character ngrams. * * @see StringList */ public class NGramModel implements Iterable { protected static final String COUNT = "count"; private final Map mNGrams = new LinkedHashMap<>(); /** * Initializes an empty instance. */ public NGramModel() { } /** * Initializes the current instance. * * @param in the serialized model stream * @throws IOException */ public NGramModel(InputStream in) throws IOException { DictionaryEntryPersistor.create(in, entry -> { int count; String countValueString = null; try { countValueString = entry.attributes().getValue(COUNT); if (countValueString == null) { throw new InvalidFormatException( "The count attribute must be set!"); } count = Integer.parseInt(countValueString); } catch (NumberFormatException e) { throw new InvalidFormatException("The count attribute '" + countValueString + "' must be a number!", e); } add(entry.tokens()); setCount(entry.tokens(), count); }); } /** * Retrieves the count of the given ngram. * * @param ngram an ngram * @return count of the ngram or 0 if it is not contained * */ public int getCount(StringList ngram) { Integer count = mNGrams.get(ngram); if (count == null) { return 0; } return count; } /** * Sets the count of an existing ngram. * * @param ngram * @param count */ public void setCount(StringList ngram, int count) { Integer oldCount = mNGrams.put(ngram, count); if (oldCount == null) { mNGrams.remove(ngram); throw new NoSuchElementException(); } } /** * Adds one NGram, if it already exists the count increase by one. * * @param ngram */ public void add(StringList ngram) { if (contains(ngram)) { setCount(ngram, getCount(ngram) + 1); } else { mNGrams.put(ngram, 1); } } /** * Adds NGrams up to the specified length to the current instance. * * @param ngram the tokens to build the uni-grams, bi-grams, tri-grams, .. * from. * @param minLength - minimal length * @param maxLength - maximal length */ public void add(StringList ngram, int minLength, int maxLength) { if (minLength < 1 || maxLength < 1) throw new IllegalArgumentException("minLength and maxLength param must be at least 1. " + "minLength=" + minLength + ", maxLength= " + maxLength); if (minLength > maxLength) throw new IllegalArgumentException("minLength param must not be larger than " + "maxLength param. minLength=" + minLength + ", maxLength= " + maxLength); for (int lengthIndex = minLength; lengthIndex < maxLength + 1; lengthIndex++) { for (int textIndex = 0; textIndex + lengthIndex - 1 < ngram.size(); textIndex++) { String[] grams = new String[lengthIndex]; for (int i = textIndex; i < textIndex + lengthIndex; i++) { grams[i - textIndex] = ngram.getToken(i); } add(new StringList(grams)); } } } /** * Adds character NGrams to the current instance. * * @param chars * @param minLength * @param maxLength */ public void add(CharSequence chars, int minLength, int maxLength) { CharBuffer cb = StringUtil.toLowerCaseCharBuffer(chars); for (int lengthIndex = minLength; lengthIndex < maxLength + 1; lengthIndex++) { for (int textIndex = 0; textIndex + lengthIndex - 1 < chars.length(); textIndex++) { CharSequence gram = cb.subSequence(textIndex, textIndex + lengthIndex); add(new StringList(new String[]{gram.toString()})); } } } /** * Removes the specified tokens form the NGram model, they are just dropped. * * @param tokens */ public void remove(StringList tokens) { mNGrams.remove(tokens); } /** * Checks fit he given tokens are contained by the current instance. * * @param tokens * * @return true if the ngram is contained */ public boolean contains(StringList tokens) { return mNGrams.containsKey(tokens); } /** * Retrieves the number of {@link StringList} entries in the current instance. * * @return number of different grams */ public int size() { return mNGrams.size(); } /** * Retrieves an {@link Iterator} over all {@link StringList} entries. * * @return iterator over all grams */ @Override public Iterator iterator() { return mNGrams.keySet().iterator(); } /** * Retrieves the total count of all Ngrams. * * @return total count of all ngrams */ public int numberOfGrams() { int counter = 0; for (StringList ngram : this) { counter += getCount(ngram); } return counter; } /** * Deletes all ngram which do appear less than the cutoffUnder value * and more often than the cutoffOver value. * * @param cutoffUnder * @param cutoffOver */ public void cutoff(int cutoffUnder, int cutoffOver) { if (cutoffUnder > 0 || cutoffOver < Integer.MAX_VALUE) { for (Iterator it = iterator(); it.hasNext(); ) { StringList ngram = it.next(); int count = getCount(ngram); if (count < cutoffUnder || count > cutoffOver) { it.remove(); } } } } /** * Creates a dictionary which contain all {@link StringList} which * are in the current {@link NGramModel}. *

* Entries which are only different in the case are merged into one. *

* Calling this method is the same as calling {@link #toDictionary(boolean)} with true. * * @return a dictionary of the ngrams */ public Dictionary toDictionary() { return toDictionary(false); } /** * Creates a dictionary which contains all {@link StringList}s which * are in the current {@link NGramModel}. * * @param caseSensitive Specifies whether case distinctions should be kept * in the creation of the dictionary. * * @return a dictionary of the ngrams */ public Dictionary toDictionary(boolean caseSensitive) { Dictionary dict = new Dictionary(caseSensitive); for (StringList stringList : this) { dict.put(stringList); } return dict; } /** * Writes the ngram instance to the given {@link OutputStream}. * * @param out * * @throws IOException if an I/O Error during writing occurs */ public void serialize(OutputStream out) throws IOException { Iterator entryIterator = new Iterator<>() { private final Iterator mDictionaryIterator = NGramModel.this.iterator(); @Override public boolean hasNext() { return mDictionaryIterator.hasNext(); } @Override public Entry next() { StringList tokens = mDictionaryIterator.next(); Attributes attributes = new Attributes(); attributes.setValue(COUNT, Integer.toString(getCount(tokens))); return new Entry(tokens, attributes); } @Override public void remove() { throw new UnsupportedOperationException(); } }; DictionaryEntryPersistor.serialize(out, entryIterator, false); } @Override public boolean equals(Object obj) { boolean result; if (obj == this) { result = true; } else if (obj instanceof NGramModel model) { result = mNGrams.equals(model.mNGrams); } else { result = false; } return result; } @Override public String toString() { return "Size: " + size(); } @Override public int hashCode() { return mNGrams.hashCode(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ngram/NGramUtils.java0100644 0000000 0000000 00000023434 14523004075 031617 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ngram; import java.util.Collection; import java.util.HashSet; import java.util.LinkedList; import opennlp.tools.util.StringList; /** * Utility class for ngrams. * Some methods apply specifically to certain 'n' values, for e.g. tri/bi/uni-grams. */ public class NGramUtils { /** * calculate the probability of a ngram in a vocabulary using Laplace smoothing algorithm * * @param ngram the ngram to get the probability for * @param set the vocabulary * @param k the smoothing factor * @return the Laplace smoothing probability * @see Additive Smoothing */ public static double calculateLaplaceSmoothingProbability(StringList ngram, Iterable set, Double k) { return (count(ngram, set) + k) / (count(getNMinusOneTokenFirst(ngram), set) + k * 1); } /** * calculate the probability of a unigram in a vocabulary using maximum likelihood estimation * * @param word the only word in the unigram * @param set the vocabulary * @return the maximum likelihood probability */ public static double calculateUnigramMLProbability(String word, Collection set) { double vocSize = 0d; for (StringList s : set) { vocSize += s.size(); } return count(new StringList(word), set) / vocSize; } /** * calculate the probability of a bigram in a vocabulary using maximum likelihood estimation * * @param x0 first word in the bigram * @param x1 second word in the bigram * @param set the vocabulary * @return the maximum likelihood probability */ public static double calculateBigramMLProbability(String x0, String x1, Collection set) { return calculateNgramMLProbability(new StringList(x0, x1), set); } /** * calculate the probability of a trigram in a vocabulary using maximum likelihood estimation * * @param x0 first word in the trigram * @param x1 second word in the trigram * @param x2 third word in the trigram * @param set the vocabulary * @return the maximum likelihood probability */ public static double calculateTrigramMLProbability(String x0, String x1, String x2, Iterable set) { return calculateNgramMLProbability(new StringList(x0, x1, x2), set); } /** * calculate the probability of a ngram in a vocabulary using maximum likelihood estimation * * @param ngram a ngram * @param set the vocabulary * @return the maximum likelihood probability */ public static double calculateNgramMLProbability(StringList ngram, Iterable set) { StringList ngramMinusOne = getNMinusOneTokenFirst(ngram); return count(ngram, set) / count(ngramMinusOne, set); } /** * calculate the probability of a bigram in a vocabulary using prior Laplace smoothing algorithm * * @param x0 the first word in the bigram * @param x1 the second word in the bigram * @param set the vocabulary * @param k the smoothing factor * @return the prior Laplace smoothing probability */ public static double calculateBigramPriorSmoothingProbability(String x0, String x1, Collection set, Double k) { return (count(new StringList(x0, x1), set) + k * calculateUnigramMLProbability(x1, set)) / (count(new StringList(x0), set) + k * set.size()); } /** * calculate the probability of a trigram in a vocabulary using a linear interpolation algorithm * * @param x0 the first word in the trigram * @param x1 the second word in the trigram * @param x2 the third word in the trigram * @param set the vocabulary * @param lambda1 trigram interpolation factor * @param lambda2 bigram interpolation factor * @param lambda3 unigram interpolation factor * @return the linear interpolation probability */ public static double calculateTrigramLinearInterpolationProbability(String x0, String x1, String x2, Collection set, Double lambda1, Double lambda2, Double lambda3) { assert lambda1 + lambda2 + lambda3 == 1 : "lambdas sum should be equals to 1"; assert lambda1 > 0 && lambda2 > 0 && lambda3 > 0 : "lambdas should all be greater than 0"; return lambda1 * calculateTrigramMLProbability(x0, x1, x2, set) + lambda2 * calculateBigramMLProbability(x1, x2, set) + lambda3 * calculateUnigramMLProbability(x2, set); } /** * calculate the probability of a ngram in a vocabulary using the missing probability mass algorithm * * @param ngram the ngram * @param discount discount factor * @param set the vocabulary * @return the probability */ public static double calculateMissingNgramProbabilityMass(StringList ngram, double discount, Iterable set) { double missingMass = 0d; double countWord = count(ngram, set); for (String word : flatSet(set)) { missingMass += (count(getNPlusOneNgram(ngram, word), set) - discount) / countWord; } return 1 - missingMass; } /** * get the (n-1)th ngram of a given ngram, that is the same ngram except the last word in the ngram * * @param ngram a ngram * @return a ngram */ public static StringList getNMinusOneTokenFirst(StringList ngram) { String[] tokens = new String[ngram.size() - 1]; for (int i = 0; i < ngram.size() - 1; i++) { tokens[i] = ngram.getToken(i); } return tokens.length > 0 ? new StringList(tokens) : null; } /** * get the (n-1)th ngram of a given ngram, that is the same ngram except the first word in the ngram * * @param ngram a ngram * @return a ngram */ public static StringList getNMinusOneTokenLast(StringList ngram) { String[] tokens = new String[ngram.size() - 1]; for (int i = 1; i < ngram.size(); i++) { tokens[i - 1] = ngram.getToken(i); } return tokens.length > 0 ? new StringList(tokens) : null; } private static StringList getNPlusOneNgram(StringList ngram, String word) { String[] tokens = new String[ngram.size() + 1]; for (int i = 0; i < ngram.size(); i++) { tokens[i] = ngram.getToken(i); } tokens[tokens.length - 1] = word; return new StringList(tokens); } private static Double count(StringList ngram, Iterable sentences) { Double count = 0d; for (StringList sentence : sentences) { int idx0 = indexOf(sentence, ngram.getToken(0)); if (idx0 >= 0 && sentence.size() >= idx0 + ngram.size()) { boolean match = true; for (int i = 1; i < ngram.size(); i++) { String sentenceToken = sentence.getToken(idx0 + i); String ngramToken = ngram.getToken(i); match &= sentenceToken.equals(ngramToken); } if (match) { count++; } } } return count; } private static int indexOf(StringList sentence, String token) { for (int i = 0; i < sentence.size(); i++) { if (token.equals(sentence.getToken(i))) { return i; } } return -1; } private static Collection flatSet(Iterable set) { Collection flatSet = new HashSet<>(); for (StringList sentence : set) { for (String word : sentence) { flatSet.add(word); } } return flatSet; } /** * Get the ngrams of dimension n of a certain input sequence of tokens. * * @param sequence a sequence of tokens * @param size the size of the resulting ngrmams * @return all the possible ngrams of the given size derivable from the input sequence */ public static Collection getNGrams(StringList sequence, int size) { Collection ngrams = new LinkedList<>(); if (size == -1 || size >= sequence.size()) { ngrams.add(sequence); } else { String[] ngram = new String[size]; for (int i = 0; i < sequence.size() - size + 1; i++) { ngram[0] = sequence.getToken(i); for (int j = 1; j < size; j++) { ngram[j] = sequence.getToken(i + j); } ngrams.add(new StringList(ngram)); } } return ngrams; } /** * Get the ngrams of dimension n of a certain input sequence of tokens. * * @param sequence a sequence of tokens * @param size the size of the resulting ngrmams * @return all the possible ngrams of the given size derivable from the input sequence */ public static Collection getNGrams(String[] sequence, int size) { Collection ngrams = new LinkedList<>(); if (size == -1 || size >= sequence.length) { ngrams.add(sequence); } else { for (int i = 0; i < sequence.length - size + 1; i++) { String[] ngram = new String[size]; ngram[0] = sequence[i]; for (int j = 1; j < size; j++) { ngram[j] = sequence[i + j]; } ngrams.add(ngram); } } return ngrams; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/ngram/package-info.java0100644 0000000 0000000 00000001607 14523004075 032114 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package related to computing and storing n-gram frequencies. */ package opennlp.tools.ngram; apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/package-info.java0100644 0000000 0000000 00000001564 14523004075 031012 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Contains packages which solve common NLP tasks. */ package opennlp.tools; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_parser_AbstractBo0100644 0000000 0000000 00000000157 14523004075 032552 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/AbstractBottomUpParser.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/AbstractBottomUpParser.jav0100644 0000000 0000000 00000050513 14523004075 034231 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.chunker.Chunker; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.ngram.NGramModel; import opennlp.tools.parser.chunking.ParserEventStream; import opennlp.tools.postag.POSTagger; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Sequence; import opennlp.tools.util.Span; import opennlp.tools.util.StringList; import opennlp.tools.util.TrainingParameters; /** * Abstract class which contains code to tag and chunk parses for bottom up parsing and * leaves implementation of advancing parses and completing parses to extend class. *

* Note:
The nodes within the returned parses are shared with other parses * and therefore their parent node references will not be consistent with their child * node reference. {@link #setParents setParents} can be used to make the parents consistent * with a particular parse, but subsequent calls to setParents can invalidate * the results of earlier calls.
*/ public abstract class AbstractBottomUpParser implements Parser { private static final Logger logger = LoggerFactory.getLogger(AbstractBottomUpParser.class); /** * The maximum number of parses advanced from all preceding * parses at each derivation step. */ protected int M; /** * The maximum number of parses to advance from a single preceding parse. */ protected int K; /** * The minimum total probability mass of advanced outcomes. */ protected double Q; /** * The default beam size used if no beam size is given. */ public static final int defaultBeamSize = 20; /** * The default amount of probability mass required of advanced outcomes. */ public static final double defaultAdvancePercentage = 0.95; /* * Completed parses. */ private final SortedSet completeParses; /* * Incomplete parses which will be advanced. */ private SortedSet odh; /* * Incomplete parses which have been advanced. */ private SortedSet ndh; /** * The head rules for the parser. */ protected HeadRules headRules; /** * The set strings which are considered punctuation for the parser. * Punctuation is not attached, but floats to the top of the parse as attachment * decisions are made about its non-punctuation sister nodes. */ protected Set punctSet; /** * The label for the top node. */ public static final String TOP_NODE = "TOP"; /** * The label for the top if an incomplete node. */ public static final String INC_NODE = "INC"; /** * The label for a token node. */ public static final String TOK_NODE = "TK"; /** * Prefix for outcomes starting a constituent. */ public static final String START = "S-"; /** * Prefix for outcomes continuing a constituent. */ public static final String CONT = "C-"; /** * Outcome for token which is not contained in a basal constituent. */ public static final String OTHER = "O"; /** * Outcome used when a constituent is complete. */ public static final String COMPLETE = "c"; /** * Outcome used when a constituent is incomplete. */ public static final String INCOMPLETE = "i"; /** * The pos-tagger that the parser uses. */ protected POSTagger tagger; /** * The chunker that the parser uses to chunk non-recursive structures. */ protected Chunker chunker; /** * Specifies whether failed parses should be reported to standard error. */ protected boolean reportFailedParse; /** * Specifies whether a derivation string should be created during parsing. * This is useful for debugging. */ protected boolean createDerivationString = false; public AbstractBottomUpParser(POSTagger tagger, Chunker chunker, HeadRules headRules, int beamSize, double advancePercentage) { this.tagger = tagger; this.chunker = chunker; this.M = beamSize; this.K = beamSize; this.Q = advancePercentage; reportFailedParse = true; this.headRules = headRules; this.punctSet = headRules.getPunctuationTags(); odh = new TreeSet<>(); ndh = new TreeSet<>(); completeParses = new TreeSet<>(); } /** * Specifies whether the parser should report when it was unable to find a parse for * a particular sentence. * * @param errorReporting {@code true} if un-parsed sentences should be reported, * {@code false} otherwise. */ public void setErrorReporting(boolean errorReporting) { this.reportFailedParse = errorReporting; } /** * Assigns parent references for the specified parse so that they * are consistent with the children references. * * @param p The {@link Parse} whose parent references need to be assigned. */ public static void setParents(Parse p) { Parse[] children = p.getChildren(); for (Parse child : children) { child.setParent(p); setParents(child); } } /** * Removes the punctuation from the specified set of {@code chunks}, adds it to the * parses adjacent to the punctuation is specified, and returns a new array of parses * with the punctuation removed. * * @param chunks A set of {@link Parse parses}. * @param punctSet The set of punctuation to be removed. * @return Array of {@link Parse parses} which is a subset of chunks with punctuation removed. */ public static Parse[] collapsePunctuation(Parse[] chunks, Set punctSet) { List collapsedParses = new ArrayList<>(chunks.length); int lastNonPunct = -1; int nextNonPunct; for (int ci = 0, cn = chunks.length; ci < cn; ci++) { if (punctSet.contains(chunks[ci].getType())) { if (lastNonPunct >= 0) { chunks[lastNonPunct].addNextPunctuation(chunks[ci]); } for (nextNonPunct = ci + 1; nextNonPunct < cn; nextNonPunct++) { if (!punctSet.contains(chunks[nextNonPunct].getType())) { break; } } if (nextNonPunct < cn) { chunks[nextNonPunct].addPreviousPunctuation(chunks[ci]); } } else { collapsedParses.add(chunks[ci]); lastNonPunct = ci; } } if (collapsedParses.size() == chunks.length) { return chunks; } return collapsedParses.toArray(new Parse[0]); } /** * Advances the specified {@link Parse} and returns the an array advanced parses whose * probability accounts for more than the specified amount of probability mass. * * @param p The {@link Parse} to advance. * @param probMass The amount of probability mass that should be accounted for * by the advanced parses. */ protected abstract Parse[] advanceParses(final Parse p, double probMass); /** * Adds the {@link #TOP_NODE} to the specified parse. * * @param p The complete {@link Parse}. */ protected abstract void advanceTop(Parse p); @Override public Parse[] parse(Parse tokens, int numParses) { if (createDerivationString) tokens.setDerivation(new StringBuffer(100)); odh.clear(); ndh.clear(); completeParses.clear(); int derivationStage = 0; //derivation length int maxDerivationLength = 2 * tokens.getChildCount() + 3; odh.add(tokens); Parse guess = null; double minComplete = 2; double bestComplete = -100000; //approximating -infinity/0 in ln domain while (odh.size() > 0 && (completeParses.size() < M || (odh.first()).getProb() < minComplete) && derivationStage < maxDerivationLength) { ndh = new TreeSet<>(); int derivationRank = 0; for (Iterator pi = odh.iterator(); pi.hasNext() && derivationRank < K; derivationRank++) { // foreach derivation Parse tp = pi.next(); //TODO: Need to look at this for K-best parsing cases /* //this parse and the ones which follow will never win, stop advancing. if (tp.getProb() < bestComplete) { break; } */ if (guess == null && derivationStage == 2) { guess = tp; } if (logger.isDebugEnabled()) { logger.debug("{} {} {}", derivationStage, derivationRank, tp.getProb()); tp.show(); } Parse[] nd; if (0 == derivationStage) { nd = advanceTags(tp); } else if (1 == derivationStage) { if (ndh.size() < K) { nd = advanceChunks(tp,bestComplete); } else { nd = advanceChunks(tp,(ndh.last()).getProb()); } } else { // i > 1 nd = advanceParses(tp, Q); } if (nd != null) { for (Parse parse : nd) { if (parse.complete()) { advanceTop(parse); if (parse.getProb() > bestComplete) { bestComplete = parse.getProb(); } if (parse.getProb() < minComplete) { minComplete = parse.getProb(); } completeParses.add(parse); } else { ndh.add(parse); } } } else { advanceTop(tp); completeParses.add(tp); } } derivationStage++; odh = ndh; } if (completeParses.size() == 0) { if (guess != null) { setParents(guess); for (Parse childGuess: guess.getChildren()) { setParents(childGuess); } } return new Parse[] {guess}; } else if (numParses == 1) { Parse best = completeParses.first(); setParents(best); for (Parse childBest: best.getChildren()) { setParents(childBest); } return new Parse[] {best}; } else { List topParses = new ArrayList<>(numParses); while (!completeParses.isEmpty() && topParses.size() < numParses) { Parse tp = completeParses.first(); setParents(tp); for (Parse childTp: tp.getChildren()) { setParents(childTp); } completeParses.remove(tp); topParses.add(tp); //parses.remove(tp); } return topParses.toArray(new Parse[0]); } } @Override public Parse parse(Parse tokens) { if (tokens.getChildCount() > 0) { Parse p = parse(tokens,1)[0]; setParents(p); return p; } else { return tokens; } } /** * Returns the top chunk sequences for the specified {@link Parse}. * * @param p A pos-tag assigned {@link Parse}. * @param minChunkScore A minimum score below which chunks should not be advanced. * @return The top chunk assignments to the specified {@link Parse}. */ protected Parse[] advanceChunks(final Parse p, double minChunkScore) { // chunk Parse[] children = p.getChildren(); String[] words = new String[children.length]; String[] ptags = new String[words.length]; double[] probs = new double[words.length]; for (int i = 0, il = children.length; i < il; i++) { Parse sp = children[i]; words[i] = sp.getHead().getCoveredText(); ptags[i] = sp.getType(); } Sequence[] cs = chunker.topKSequences(words, ptags,minChunkScore - p.getProb()); Parse[] newParses = new Parse[cs.length]; for (int si = 0, sl = cs.length; si < sl; si++) { newParses[si] = (Parse) p.clone(); //copies top level if (createDerivationString) newParses[si].getDerivation().append(si).append("."); String[] tags = cs[si].getOutcomes().toArray(new String[words.length]); cs[si].getProbs(probs); int start = -1; int end = 0; String type = null; for (int j = 0; j <= tags.length; j++) { if (j != tags.length) { newParses[si].addProb(StrictMath.log(probs[j])); } // if continue just update end chunking tag don't use contTypeMap if (j != tags.length && tags[j].startsWith(CONT)) { end = j; } else { //make previous constituent if it exists if (type != null) { Parse p1 = p.getChildren()[start]; Parse p2 = p.getChildren()[end]; Parse[] cons = new Parse[end - start + 1]; cons[0] = p1; //cons[0].label="Start-"+type; if (end - start != 0) { cons[end - start] = p2; //cons[end-start].label="Cont-"+type; for (int ci = 1; ci < end - start; ci++) { cons[ci] = p.getChildren()[ci + start]; //cons[ci].label="Cont-"+type; } } Parse chunk = new Parse(p1.getText(), new Span(p1.getSpan().getStart(), p2.getSpan().getEnd()), type, 1, headRules.getHead(cons, type)); chunk.isChunk(true); newParses[si].insert(chunk); } if (j != tags.length) { //update for new constituent if (tags[j].startsWith(START)) { // don't use startTypeMap these are chunk tags type = tags[j].substring(START.length()); start = j; end = j; } else { // other type = null; } } } } } return newParses; } /** * Advances the {@link Parse} by assigning it POS tags and returns multiple tag sequences. * * @param p The {@link Parse} to be tagged. * @return Parses with different POS-tag sequence assignments. */ protected Parse[] advanceTags(final Parse p) { Parse[] children = p.getChildren(); String[] words = new String[children.length]; double[] probs = new double[words.length]; for (int i = 0,il = children.length; i < il; i++) { words[i] = children[i].getCoveredText(); } Sequence[] ts = tagger.topKSequences(words); Parse[] newParses = new Parse[ts.length]; for (int i = 0; i < ts.length; i++) { String[] tags = ts[i].getOutcomes().toArray(new String[words.length]); ts[i].getProbs(probs); newParses[i] = (Parse) p.clone(); //copies top level if (createDerivationString) newParses[i].getDerivation().append(i).append("."); for (int j = 0; j < words.length; j++) { Parse word = children[j]; double prob = probs[j]; newParses[i].insert(new Parse(word.getText(), word.getSpan(), tags[j], prob,j)); newParses[i].addProb(StrictMath.log(prob)); } } return newParses; } /** * Determines the mapping between the specified {@code index} into the specified {@link Parse parses} * without punctuation to the corresponding index into the specified {@link Parse parses}. * * @param index An index into the {@link Parse parses} without punctuation. * @param nonPunctParses The {@link Parse parses} without punctuation. * @param parses The {@link Parse parses} with punctuation. * @return An index into the specified parses which corresponds to the same node the specified index * into the parses with punctuation. */ protected int mapParseIndex(int index, Parse[] nonPunctParses, Parse[] parses) { int parseIndex = index; while (parses[parseIndex] != nonPunctParses[index]) { parseIndex++; } return parseIndex; } private static boolean lastChild(Parse child, Parse parent, Set punctSet) { if (parent == null) { return false; } Parse[] kids = collapsePunctuation(parent.getChildren(), punctSet); return (kids[kids.length - 1] == child); } /** * Creates a n-gram {@link Dictionary} from the specified data stream using the specified * head rule and specified cut-off. * * @param data The data stream of {@link Parse parses}. * @param rules The {@link HeadRules} for the parses. * @param params The {@link TrainingParameters} which can contain a {@code cutoff}, * the minimum number of entries required for the n-gram to be saved as * part of the {@link Dictionary}. * @return A {@link Dictionary} instance. */ public static Dictionary buildDictionary(ObjectStream data, HeadRules rules, TrainingParameters params) throws IOException { int cutoff = params.getIntParameter("dict", TrainingParameters.CUTOFF_PARAM, 5); NGramModel mdict = new NGramModel(); Parse p; while ((p = data.read()) != null) { p.updateHeads(rules); Parse[] pwords = p.getTagNodes(); String[] words = new String[pwords.length]; //add all uni-grams for (int wi = 0;wi < words.length; wi++) { words[wi] = pwords[wi].getCoveredText(); } mdict.add(new StringList(words), 1, 1); //add tri-grams and bi-grams for initial sequence Parse[] chunks = collapsePunctuation(ParserEventStream.getInitialChunks(p), rules.getPunctuationTags()); String[] cwords = new String[chunks.length]; for (int wi = 0; wi < cwords.length; wi++) { cwords[wi] = chunks[wi].getHead().getCoveredText(); } mdict.add(new StringList(cwords), 2, 3); //emulate reductions to produce additional n-grams int ci = 0; while (ci < chunks.length) { // System.err.println("chunks["+ci+"]="+chunks[ci].getHead().getCoveredText() // +" chunks.length="+chunks.length + " " + chunks[ci].getParent()); if (chunks[ci].getParent() == null) { chunks[ci].show(); } if (lastChild(chunks[ci], chunks[ci].getParent(),rules.getPunctuationTags())) { //perform reduce int reduceStart = ci; while (reduceStart >= 0 && chunks[reduceStart].getParent() == chunks[ci].getParent()) { reduceStart--; } reduceStart++; chunks = ParserEventStream.reduceChunks(chunks,ci,chunks[ci].getParent()); ci = reduceStart; if (chunks.length != 0) { String[] window = new String[5]; int wi = 0; if (ci - 2 >= 0) window[wi++] = chunks[ci - 2].getHead().getCoveredText(); if (ci - 1 >= 0) window[wi++] = chunks[ci - 1].getHead().getCoveredText(); window[wi++] = chunks[ci].getHead().getCoveredText(); if (ci + 1 < chunks.length) window[wi++] = chunks[ci + 1].getHead().getCoveredText(); if (ci + 2 < chunks.length) window[wi++] = chunks[ci + 2].getHead().getCoveredText(); if (wi < 5) { String[] subWindow = new String[wi]; System.arraycopy(window, 0, subWindow, 0, wi); window = subWindow; } if (window.length >= 3) { mdict.add(new StringList(window), 2, 3); } else if (window.length == 2) { mdict.add(new StringList(window), 2, 2); } } ci = reduceStart - 1; //ci will be incremented at end of loop } ci++; } } mdict.cutoff(cutoff, Integer.MAX_VALUE); return mdict.toDictionary(true); } /** * Creates a n-gram {@link Dictionary} from the specified data stream using {@link HeadRules} * and specified cut-off. * * @param data The data stream of {@link Parse parses}. * @param rules The {@link HeadRules} for the {@link Parse parses}. * @param cutoff The minimum number of entries required for the n-gram to be * saved as part of the dictionary. * @return A {@link Dictionary} instance. */ public static Dictionary buildDictionary(ObjectStream data, HeadRules rules, int cutoff) throws IOException { TrainingParameters params = new TrainingParameters(); params.put("dict", TrainingParameters.CUTOFF_PARAM, cutoff); return buildDictionary(data, rules, params); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_parser_AbstractCo0100644 0000000 0000000 00000000161 14523004075 032546 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/AbstractContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/AbstractContextGenerator.j0100644 0000000 0000000 00000042166 14523004075 034254 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.util.Collection; import java.util.List; import java.util.Set; /** * Abstract class containing many of the methods used to generate contexts for parsing. */ public abstract class AbstractContextGenerator { protected static final String EOS = "eos"; protected boolean zeroBackOff; /** Set of punctuation to be used in generating features. */ protected Set punctSet; protected boolean useLabel; /** * Creates punctuation feature for the specified punctuation at the specified index * {@code i} based on the {@code punctuation} mark. * * @param punct The punctuation which is in context. * @param i The index of the {@code punctuation} with relative to the parse. * @return Punctuation feature for the parse and the punctuation at the specified index. */ protected String punct(Parse punct, int i) { return i + "=" + punct.getCoveredText(); } /** * Creates punctuation feature for the specified punctuation at the specified index * {@code i} based on the {@code punctuation}'s tag. * * @param punct The punctuation which is in context. * @param i The index of the {@code punctuation} relative to the parse. * @return Punctuation feature for the parse and the punctuation at the specified index. */ protected String punctbo(Parse punct, int i) { return i + "=" + punct.getType(); } protected String cons(Parse p, int i) { StringBuilder feat = new StringBuilder(20); feat.append(i).append("="); if (p != null) { if (useLabel && i < 0) { feat.append(p.getLabel()).append("|"); } feat.append(p.getType()).append("|").append(p.getHead().getCoveredText()); } else { feat.append(EOS); } return feat.toString(); } protected String consbo(Parse p, int i) { //cons back-off StringBuilder feat = new StringBuilder(20); feat.append(i).append("*="); if (p != null) { if (useLabel && i < 0) { feat.append(p.getLabel()).append("|"); } feat.append(p.getType()); } else { feat.append(EOS); } return feat.toString(); } /** * Generates a string representing the grammar rule production that the specified parse * is starting. *

* The rule is of the form {@code p.type -> c.children[0..n].type}. * * @param p The {@link Parse} which stats the production. * @param includePunctuation Whether punctuation should be included in the production. * @return A string representing the grammar rule production that the specified parse * is starting. */ protected String production(Parse p, boolean includePunctuation) { StringBuilder production = new StringBuilder(20); production.append(p.getType()).append("->"); Parse[] children = AbstractBottomUpParser.collapsePunctuation(p.getChildren(),punctSet); for (int ci = 0; ci < children.length; ci++) { production.append(children[ci].getType()); if (ci + 1 != children.length) { production.append(","); Collection nextPunct = children[ci].getNextPunctuationSet(); if (includePunctuation && nextPunct != null) { //TODO: make sure multiple punctuation comes out the same for (Parse punct : nextPunct) { production.append(punct.getType()).append(","); } } } } return production.toString(); } protected void cons2(List features, Cons c0, Cons c1, Collection punct1s, boolean bigram) { if (punct1s != null) { for (Parse p : punct1s) { String punctbo = punctbo(p, c1.index <= 0 ? c1.index - 1 : c1.index); //punctbo(1); features.add(punctbo); if (c0.index == 0) { //TODO look at removing case //cons(0)punctbo(1) if (c0.unigram) features.add(c0.cons + "," + punctbo); features.add(c0.consbo + "," + punctbo); } if (c1.index == 0) { //TODO look at removing case //punctbo(1)cons(1) if (c1.unigram) features.add(punctbo + "," + c1.cons); features.add(punctbo + "," + c1.consbo); } //cons(0)punctbo(1)cons(1) if (bigram) features.add(c0.cons + "," + punctbo + "," + c1.cons); if (c1.unigram) features.add(c0.consbo + "," + punctbo + "," + c1.cons); if (c0.unigram) features.add(c0.cons + "," + punctbo + "," + c1.consbo); features.add(c0.consbo + "," + punctbo + "," + c1.consbo); } } else { //cons(0),cons(1) if (bigram) features.add(c0.cons + "," + c1.cons); if (c1.unigram) features.add(c0.consbo + "," + c1.cons); if (c0.unigram) features.add(c0.cons + "," + c1.consbo); features.add(c0.consbo + "," + c1.consbo); } } /** * Creates cons features involving the 3 specified nodes and adds them to the specified feature list. * * @param features The list of features. * @param c0 The first {@link Cons node}. * @param c1 The second {@link Cons node}. * @param c2 The third {@link Cons node}. * @param punct1s The punctuation between {@code c0} and {@code c1}. * @param punct2s The punctuation between {@code c1} and {@code c2}. * @param trigram Specifies whether lexical tri-gram features between these nodes * should be generated. * @param bigram1 Specifies whether lexical bi-gram features between {@code c0} and {@code c1} * should be generated. * @param bigram2 Specifies whether lexical bi-gram features between {@code c1} and {@code c2} * should be generated. */ protected void cons3(List features, Cons c0, Cons c1, Cons c2, Collection punct1s, Collection punct2s, boolean trigram, boolean bigram1, boolean bigram2) { // features.add("stage=cons(0),cons(1),cons(2)"); if (punct1s != null) { if (c0.index == -2) { for (Parse p : punct1s) { // String punct = punct(p,c1.index); String punctbo = punctbo(p, c1.index <= 0 ? c1.index - 1 : c1.index); //punct(-2) //TODO consider changing //features.add(punct); //punctbo(-2) features.add(punctbo); } } } if (punct2s != null) { if (c2.index == 2) { for (Parse p : punct2s) { // String punct = punct(p,c2.index); String punctbo = punctbo(p, c2.index); //punct(2) //TODO consider changing //features.add(punct); //punctbo(2) features.add(punctbo); } } if (punct1s != null) { //cons(0),punctbo(1),cons(1),punctbo(2),cons(2) for (Parse punct2 : punct2s) { String punctbo2 = punctbo(punct2, c2.index <= 0 ? c2.index - 1 : c2.index); for (Parse punct1 : punct1s) { String punctbo1 = punctbo(punct1, c1.index <= 0 ? c1.index - 1 : c1.index); if (trigram) features.add(c0.cons + "," + punctbo1 + "," + c1.cons + "," + punctbo2 + "," + c2.cons); if (bigram2) features.add(c0.consbo + "," + punctbo1 + "," + c1.cons + "," + punctbo2 + "," + c2.cons); if (c0.unigram && c2.unigram) features.add(c0.cons + "," + punctbo1 + "," + c1.consbo + "," + punctbo2 + "," + c2.cons); if (bigram1) features.add(c0.cons + "," + punctbo1 + "," + c1.cons + "," + punctbo2 + "," + c2.consbo); if (c2.unigram) features.add(c0.consbo + "," + punctbo1 + "," + c1.consbo + "," + punctbo2 + "," + c2.cons); if (c1.unigram) features.add(c0.consbo + "," + punctbo1 + "," + c1.cons + "," + punctbo2 + "," + c2.consbo); if (c0.unigram) features.add(c0.cons + "," + punctbo1 + "," + c1.consbo + "," + punctbo2 + "," + c2.consbo); features.add(c0.consbo + "," + punctbo1 + "," + c1.consbo + "," + punctbo2 + "," + c2.consbo); if (zeroBackOff) { if (bigram1) features.add(c0.cons + "," + punctbo1 + "," + c1.cons + "," + punctbo2); if (c1.unigram) features.add(c0.consbo + "," + punctbo1 + "," + c1.cons + "," + punctbo2); if (c0.unigram) features.add(c0.cons + "," + punctbo1 + "," + c1.consbo + "," + punctbo2); features.add(c0.consbo + "," + punctbo1 + "," + c1.consbo + "," + punctbo2); } } } } else { //punct1s == null //cons(0),cons(1),punctbo(2),cons(2) for (Parse punct2 : punct2s) { String punctbo2 = punctbo(punct2, c2.index <= 0 ? c2.index - 1 : c2.index); if (trigram) features.add(c0.cons + "," + c1.cons + "," + punctbo2 + "," + c2.cons); if (bigram2) features.add(c0.consbo + "," + c1.cons + "," + punctbo2 + "," + c2.cons); if (c0.unigram && c2.unigram) features.add(c0.cons + "," + c1.consbo + "," + punctbo2 + "," + c2.cons); if (bigram1) features.add(c0.cons + "," + c1.cons + "," + punctbo2 + "," + c2.consbo); if (c2.unigram) features.add(c0.consbo + "," + c1.consbo + "," + punctbo2 + "," + c2.cons); if (c1.unigram) features.add(c0.consbo + "," + c1.cons + "," + punctbo2 + "," + c2.consbo); if (c0.unigram) features.add(c0.cons + "," + c1.consbo + "," + punctbo2 + "," + c2.consbo); features.add(c0.consbo + "," + c1.consbo + "," + punctbo2 + "," + c2.consbo); if (zeroBackOff) { if (bigram1) features.add(c0.cons + "," + c1.cons + "," + punctbo2); if (c1.unigram) features.add(c0.consbo + "," + c1.cons + "," + punctbo2); if (c0.unigram) features.add(c0.cons + "," + c1.consbo + "," + punctbo2); features.add(c0.consbo + "," + c1.consbo + "," + punctbo2); } } } } else { if (punct1s != null) { //cons(0),punctbo(1),cons(1),cons(2) for (Parse punct1 : punct1s) { String punctbo1 = punctbo(punct1, c1.index <= 0 ? c1.index - 1 : c1.index); if (trigram) features.add(c0.cons + "," + punctbo1 + "," + c1.cons + "," + c2.cons); if (bigram2) features.add(c0.consbo + "," + punctbo1 + "," + c1.cons + "," + c2.cons); if (c0.unigram && c2.unigram) features.add(c0.cons + "," + punctbo1 + "," + c1.consbo + "," + c2.cons); if (bigram1) features.add(c0.cons + "," + punctbo1 + "," + c1.cons + "," + c2.consbo); if (c2.unigram) features.add(c0.consbo + "," + punctbo1 + "," + c1.consbo + "," + c2.cons); if (c1.unigram) features.add(c0.consbo + "," + punctbo1 + "," + c1.cons + "," + c2.consbo); if (c0.unigram) features.add(c0.cons + "," + punctbo1 + "," + c1.consbo + "," + c2.consbo); features.add(c0.consbo + "," + punctbo1 + "," + c1.consbo + "," + c2.consbo); //zero backoff case covered by cons(0)cons(1) } } else { //cons(0),cons(1),cons(2) if (trigram) features.add(c0.cons + "," + c1.cons + "," + c2.cons); if (bigram2) features.add(c0.consbo + "," + c1.cons + "," + c2.cons); if (c0.unigram && c2.unigram) features.add(c0.cons + "," + c1.consbo + "," + c2.cons); if (bigram1) features.add(c0.cons + "," + c1.cons + "," + c2.consbo); if (c2.unigram) features.add(c0.consbo + "," + c1.consbo + "," + c2.cons); if (c1.unigram) features.add(c0.consbo + "," + c1.cons + "," + c2.consbo); if (c0.unigram) features.add(c0.cons + "," + c1.consbo + "," + c2.consbo); features.add(c0.consbo + "," + c1.consbo + "," + c2.consbo); } } } /** * Generates features for nodes surrounding a completed node of the specified {@code type}. * * @param node A surrounding {@link Parse node}. * @param i The index of the surrounding {@code node} with respect to the completed node. * @param type The type of the completed node. * @param punctuation The punctuation adjacent and between the specified surrounding node. * @param features A list to which features are added. */ protected void surround(Parse node, int i, String type, Collection punctuation, List features) { StringBuilder feat = new StringBuilder(20); feat.append("s").append(i).append("="); if (punctuation != null) { for (Parse punct : punctuation) { if (node != null) { feat.append(node.getHead().getCoveredText()).append("|").append(type) .append("|").append(node.getType()).append("|").append(punct.getType()); } else { feat.append(type).append("|").append(EOS).append("|").append(punct.getType()); } features.add(feat.toString()); feat.setLength(0); feat.append("s").append(i).append("*="); if (node != null) { feat.append(type).append("|").append(node.getType()).append("|").append(punct.getType()); } else { feat.append(type).append("|").append(EOS).append("|").append(punct.getType()); } features.add(feat.toString()); feat.setLength(0); feat.append("s").append(i).append("*="); feat.append(type).append("|").append(punct.getType()); features.add(feat.toString()); } } else { if (node != null) { feat.append(node.getHead().getCoveredText()).append("|").append(type) .append("|").append(node.getType()); } else { feat.append(type).append("|").append(EOS); } features.add(feat.toString()); feat.setLength(0); feat.append("s").append(i).append("*="); if (node != null) { feat.append(type).append("|").append(node.getType()); } else { feat.append(type).append("|").append(EOS); } features.add(feat.toString()); } } /** * Produces features to determine whether the specified child node is part of * a complete constituent of the specified type and adds those features to the * specified list. * * @param child The {@link Parse node} to consider. * @param i A string indicating the position of the child node. * @param type The type of constituent being built. * @param features List to add features to. */ protected void checkcons(Parse child, String i, String type, List features) { StringBuilder feat = new StringBuilder(20); feat.append("c").append(i).append("=").append(child.getType()).append("|") .append(child.getHead().getCoveredText()).append("|").append(type); features.add(feat.toString()); feat.setLength(0); feat.append("c").append(i).append("*=").append(child.getType()).append("|").append(type); features.add(feat.toString()); } protected void checkcons(Parse p1, Parse p2, String type, List features) { StringBuilder feat = new StringBuilder(20); feat.append("cil=").append(type).append(",").append(p1.getType()).append("|") .append(p1.getHead().getCoveredText()).append(",").append(p2.getType()) .append("|").append(p2.getHead().getCoveredText()); features.add(feat.toString()); feat.setLength(0); feat.append("ci*l=").append(type).append(",").append(p1.getType()).append(",") .append(p2.getType()).append("|").append(p2.getHead().getCoveredText()); features.add(feat.toString()); feat.setLength(0); feat.append("cil*=").append(type).append(",").append(p1.getType()).append("|") .append(p1.getHead().getCoveredText()).append(",").append(p2.getType()); features.add(feat.toString()); feat.setLength(0); feat.append("ci*l*=").append(type).append(",").append(p1.getType()) .append(",").append(p2.getType()); features.add(feat.toString()); } /** * Populates specified nodes array with left-most right frontier * node with a unique head. If the right frontier doesn't contain * enough nodes, then {@code nulls} are placed in the array elements. * * @param rf The current right frontier. * @param nodes The array to be populated. */ protected void getFrontierNodes(List rf, Parse[] nodes) { int leftIndex = 0; int prevHeadIndex = -1; for (Parse fn : rf) { int headIndex = fn.getHeadIndex(); if (headIndex != prevHeadIndex) { nodes[leftIndex] = fn; leftIndex++; prevHeadIndex = headIndex; if (leftIndex == nodes.length) { break; } } } for (int ni = leftIndex; ni < nodes.length; ni++) { nodes[ni] = null; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_parser_AbstractPa0100644 0000000 0000000 00000000162 14523004075 032546 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/AbstractParserEventStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/AbstractParserEventStream.0100644 0000000 0000000 00000014570 14523004075 034217 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import opennlp.tools.chunker.ChunkerContextGenerator; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.ml.model.Event; import opennlp.tools.parser.chunking.Parser; import opennlp.tools.postag.DefaultPOSContextGenerator; import opennlp.tools.postag.POSContextGenerator; import opennlp.tools.util.ObjectStream; /** * Abstract class extended by parser event streams which perform tagging and chunking. */ public abstract class AbstractParserEventStream extends opennlp.tools.util.AbstractEventStream { private ChunkerContextGenerator chunkerContextGenerator; private POSContextGenerator tagContextGenerator; protected final HeadRules rules; protected final Set punctSet; /** * The type of events being generated by this event stream. */ protected final ParserEventTypeEnum etype; protected boolean fixPossesives; protected final Dictionary dict; public AbstractParserEventStream(ObjectStream d, HeadRules rules, ParserEventTypeEnum etype, Dictionary dict) { super(d); this.dict = dict; if (etype == ParserEventTypeEnum.CHUNK) { this.chunkerContextGenerator = new ChunkContextGenerator(); } else if (etype == ParserEventTypeEnum.TAG) { this.tagContextGenerator = new DefaultPOSContextGenerator(null); } this.rules = rules; punctSet = rules.getPunctuationTags(); this.etype = etype; init(); } @Override protected Iterator createEvents(Parse sample) { List newEvents = new ArrayList<>(); Parse.pruneParse(sample); if (fixPossesives) { Parse.fixPossesives(sample); } sample.updateHeads(rules); Parse[] chunks = getInitialChunks(sample); if (etype == ParserEventTypeEnum.TAG) { addTagEvents(newEvents, chunks); } else if (etype == ParserEventTypeEnum.CHUNK) { addChunkEvents(newEvents, chunks); } else { addParseEvents(newEvents, Parser.collapsePunctuation(chunks,punctSet)); } return newEvents.iterator(); } protected void init() { fixPossesives = false; } public AbstractParserEventStream(ObjectStream d, HeadRules rules, ParserEventTypeEnum etype) { this(d,rules,etype,null); } public static Parse[] getInitialChunks(Parse p) { List chunks = new ArrayList<>(); getInitialChunks(p, chunks); return chunks.toArray(new Parse[0]); } private static void getInitialChunks(Parse p, List ichunks) { if (p.isPosTag()) { ichunks.add(p); } else { Parse[] kids = p.getChildren(); boolean allKidsAreTags = true; for (Parse kid : kids) { if (!kid.isPosTag()) { allKidsAreTags = false; break; } } if (allKidsAreTags) { ichunks.add(p); } else { for (Parse kid : kids) { getInitialChunks(kid, ichunks); } } } } /** * Produces all events for the specified sentence {@code chunks} * and adds them to the specified {@code newEvents} list. * * @param newEvents A list of {@link Event events} to be added to. * @param chunks Pre-chunked {@link Parse constituents} of a sentence. */ protected abstract void addParseEvents(List newEvents, Parse[] chunks); private void addChunkEvents(List chunkEvents, Parse[] chunks) { List toks = new ArrayList<>(); List tags = new ArrayList<>(); List preds = new ArrayList<>(); for (Parse c : chunks) { if (c.isPosTag()) { toks.add(c.getCoveredText()); tags.add(c.getType()); preds.add(Parser.OTHER); } else { boolean start = true; String ctype = c.getType(); Parse[] kids = c.getChildren(); for (Parse tok : kids) { toks.add(tok.getCoveredText()); tags.add(tok.getType()); if (start) { preds.add(Parser.START + ctype); start = false; } else { preds.add(Parser.CONT + ctype); } } } } for (int ti = 0, tl = toks.size(); ti < tl; ti++) { chunkEvents.add(new Event(preds.get(ti), chunkerContextGenerator.getContext(ti, toks.toArray(new String[0]), tags.toArray(new String[0]), preds.toArray(new String[0])))); } } private void addTagEvents(List tagEvents, Parse[] chunks) { List toks = new ArrayList<>(); List preds = new ArrayList<>(); for (Parse c : chunks) { if (c.isPosTag()) { toks.add(c.getCoveredText()); preds.add(c.getType()); } else { Parse[] kids = c.getChildren(); for (Parse tok : kids) { toks.add(tok.getCoveredText()); preds.add(tok.getType()); } } } for (int ti = 0, tl = toks.size(); ti < tl; ti++) { tagEvents.add(new Event(preds.get(ti), tagContextGenerator.getContext(ti, toks.toArray(new String[0]), preds.toArray(new String[0]), null))); } } /** * Returns {@code true} if the {@link Parse child} is the last child of the specified * {@link Parse parent}. * * @param child The child {@link Parse}. * @param parent The parent {@link Parse}. * @return {@code true} if the specified child is the last child of the specified parent, * {@code false} otherwise. */ protected boolean lastChild(Parse child, Parse parent) { Parse[] kids = AbstractBottomUpParser.collapsePunctuation(parent.getChildren(),punctSet); return kids[kids.length - 1] == child; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_parser_ChunkConte0100644 0000000 0000000 00000000156 14523004075 032566 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/ChunkContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/ChunkContextGenerator.java0100644 0000000 0000000 00000012320 14523004075 034236 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.util.ArrayList; import java.util.List; import opennlp.tools.chunker.ChunkerContextGenerator; import opennlp.tools.util.Cache; import opennlp.tools.util.TokenTag; /** * Creates predictive context for the pre-chunking phases of parsing. */ public class ChunkContextGenerator implements ChunkerContextGenerator { private static final String EOS = "eos"; private Cache contextsCache; private Object wordsKey; /** * Initializes a {@link ChunkContextGenerator} instance. */ public ChunkContextGenerator() { this(0); } /** * Initializes a {@link ChunkContextGenerator} instance with a custom {@code cacheSize}. * * @param cacheSize The cache size. Must be greater than {@code 0} to have an effect. */ public ChunkContextGenerator(int cacheSize) { super(); if (cacheSize > 0) { contextsCache = new Cache<>(cacheSize); } } @Override public String[] getContext(int i, String[] words, String[] tags, String[] preds) { List features = new ArrayList<>(19); int x_2 = i - 2; int x_1 = i - 1; int x2 = i + 2; int x1 = i + 1; String w_2,w_1,w0,w1,w2; String t_2,t_1,t0,t1,t2; String p_2,p_1; // chunkandpostag(-2) if (x_2 >= 0) { t_2 = tags[x_2]; p_2 = preds[x_2]; w_2 = words[x_2]; } else { t_2 = EOS; p_2 = EOS; w_2 = EOS; } // chunkandpostag(-1) if (x_1 >= 0) { t_1 = tags[x_1]; p_1 = preds[x_1]; w_1 = words[x_1]; } else { t_1 = EOS; p_1 = EOS; w_1 = EOS; } // chunkandpostag(0) t0 = tags[i]; w0 = words[i]; // chunkandpostag(1) if (x1 < tags.length) { t1 = tags[x1]; w1 = words[x1]; } else { t1 = EOS; w1 = EOS; } // chunkandpostag(2) if (x2 < tags.length) { t2 = tags[x2]; w2 = words[x2]; } else { t2 = EOS; w2 = EOS; } String cacheKey = i + t_2 + t1 + t0 + t1 + t2 + p_2 + p_1; if (contextsCache != null) { if (wordsKey == words) { String[] contexts = contextsCache.get(cacheKey); if (contexts != null) { return contexts; } } else { contextsCache.clear(); wordsKey = words; } } String ct_2 = chunkandpostag(-2, w_2, t_2, p_2); String ctbo_2 = chunkandpostagbo(-2, t_2, p_2); String ct_1 = chunkandpostag(-1, w_1, t_1, p_1); String ctbo_1 = chunkandpostagbo(-1, t_1, p_1); String ct0 = chunkandpostag(0, w0, t0, null); String ctbo0 = chunkandpostagbo(0, t0, null); String ct1 = chunkandpostag(1, w1, t1, null); String ctbo1 = chunkandpostagbo(1, t1, null); String ct2 = chunkandpostag(2, w2, t2, null); String ctbo2 = chunkandpostagbo(2, t2, null); features.add("default"); features.add(ct_2); features.add(ctbo_2); features.add(ct_1); features.add(ctbo_1); features.add(ct0); features.add(ctbo0); features.add(ct1); features.add(ctbo1); features.add(ct2); features.add(ctbo2); //chunkandpostag(-1,0) features.add(ct_1 + "," + ct0); features.add(ctbo_1 + "," + ct0); features.add(ct_1 + "," + ctbo0); features.add(ctbo_1 + "," + ctbo0); //chunkandpostag(0,1) features.add(ct0 + "," + ct1); features.add(ctbo0 + "," + ct1); features.add(ct0 + "," + ctbo1); features.add(ctbo0 + "," + ctbo1); String[] contexts = features.toArray(new String[0]); if (contextsCache != null) { contextsCache.put(cacheKey,contexts); } return contexts; } private String chunkandpostag(int i, String tok, String tag, String chunk) { StringBuilder feat = new StringBuilder(20); feat.append(i).append("=").append(tok).append("|").append(tag); if (i < 0) { feat.append("|").append(chunk); } return feat.toString(); } private String chunkandpostagbo(int i, String tag, String chunk) { StringBuilder feat = new StringBuilder(20); feat.append(i).append("*=").append(tag); if (i < 0) { feat.append("|").append(chunk); } return feat.toString(); } @Override public String[] getContext(int index, TokenTag[] sequence, String[] priorDecisions, Object[] additionalContext) { String[] token = TokenTag.extractTokens(sequence); String[] tags = TokenTag.extractTags(sequence); return getContext(index, token, tags, priorDecisions); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/ChunkSampleStream.java0100644 0000000 0000000 00000006155 14523004075 033351 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.io.IOException; import java.util.ArrayList; import java.util.List; import opennlp.tools.chunker.ChunkSample; import opennlp.tools.parser.chunking.Parser; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; public class ChunkSampleStream extends FilterObjectStream { /** * Initializes a {@link ChunkSampleStream instance}. * * @param in A {@link ObjectStream stream} used as input. */ public ChunkSampleStream(ObjectStream in) { super(in); } private static void getInitialChunks(Parse p, List ichunks) { if (p.isPosTag()) { ichunks.add(p); } else { Parse[] kids = p.getChildren(); boolean allKidsAreTags = true; for (Parse kid : kids) { if (!kid.isPosTag()) { allKidsAreTags = false; break; } } if (allKidsAreTags) { ichunks.add(p); } else { for (Parse kid : kids) { getInitialChunks(kid, ichunks); } } } } public static Parse[] getInitialChunks(Parse p) { List chunks = new ArrayList<>(); getInitialChunks(p, chunks); return chunks.toArray(new Parse[0]); } @Override public ChunkSample read() throws IOException { Parse parse = samples.read(); if (parse != null) { Parse[] chunks = getInitialChunks(parse); List toks = new ArrayList<>(); List tags = new ArrayList<>(); List preds = new ArrayList<>(); for (Parse c : chunks) { if (c.isPosTag()) { toks.add(c.getCoveredText()); tags.add(c.getType()); preds.add(Parser.OTHER); } else { boolean start = true; String ctype = c.getType(); Parse[] kids = c.getChildren(); for (Parse tok : kids) { toks.add(tok.getCoveredText()); tags.add(tok.getType()); if (start) { preds.add(Parser.START + ctype); start = false; } else { preds.add(Parser.CONT + ctype); } } } } return new ChunkSample(toks.toArray(new String[0]), tags.toArray(new String[0]), preds.toArray(new String[0])); } else { return null; } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/Cons.java0100644 0000000 0000000 00000002274 14523004075 030663 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; /** * Holds feature information about a specific {@link Parse} node. * * @see Parse */ public class Cons { final String cons; final String consbo; final int index; final boolean unigram; public Cons(String cons, String consbo, int index, boolean unigram) { this.cons = cons; this.consbo = consbo; this.index = index; this.unigram = unigram; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/Constituent.java0100644 0000000 0000000 00000003060 14523004075 032272 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import opennlp.tools.util.Span; /** * Holds constituents when reading {@link Parse parses}. * * @see Parse */ public class Constituent { private String label; private final Span span; public Constituent(String label, Span span) { this.label = label; this.span = span; } /** * Returns the label of the constituent. * @return the label of the constituent. */ public String getLabel() { return label; } /** * Assigns the label to the constituent. * @param label The label to set. */ public void setLabel(String label) { this.label = label; } /** * Returns the span of the constituent. * @return the span of the constituent. */ public Span getSpan() { return span; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/GapLabeler.java0100644 0000000 0000000 00000002415 14523004075 031754 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.util.Stack; /** * Represents a labeler for nodes which contain traces so that these traces can be predicted * by a {@link Parser}. * * @see Parser */ public interface GapLabeler { /** * Labels {@link Constituent constituents} found in the {@code stack} with gap labels * if appropriate. * * @param stack The {@link Stack} of un-completed {@link Constituent constituents}. */ void labelGaps(Stack stack); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/HeadRules.java0100644 0000000 0000000 00000003067 14523004075 031636 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.util.Set; /** * Encoder for head rules associated with parsing. */ public interface HeadRules { /** * Retrieves the head {@link Parse constituent} for the specified constituents of given {@code type}. * * @param constituents The {@link Parse constituents} which make up a constituent of the * specified {@code type}. * @param type The type of a constituent which is made up of the {@code constituents}. * @return The {@link Parse constituent} which represents the head. */ Parse getHead(Parse[] constituents, String type); /** * @return Retrieves the set of punctuation tags. * Attachment decisions for these tags will not be modeled. */ Set getPunctuationTags(); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/Parse.java0100644 0000000 0000000 00000101041 14523004075 031023 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Objects; import java.util.Set; import java.util.Stack; import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.util.Span; /** * Data structure for holding parse constituents. */ public class Parse implements Cloneable, Comparable { private static final Logger logger = LoggerFactory.getLogger(Parse.class); public static final String BRACKET_LRB = "("; public static final String BRACKET_RRB = ")"; public static final String BRACKET_LCB = "{"; public static final String BRACKET_RCB = "}"; public static final String BRACKET_LSB = "["; public static final String BRACKET_RSB = "]"; /** * The text string on which this parse is based. * This object is shared among all parses for the same sentence. */ private final String text; /** * The character offsets into the text for this constituent. */ private Span span; /** * The syntactic type of this parse. */ private String type; /** * The sub-constituents of this parse. */ private List parts; /** * The head parse of this parse. A parse can be its own head. */ private Parse head; /** * A string used during parse construction to specify which * stage of parsing has been performed on this node. */ private String label; /** * Index in the sentence of the head of this constituent. */ private int headIndex; /** * The parent parse of this parse. */ private Parse parent; /** * The probability associated with the syntactic type * assigned to this parse. */ private double prob; /** * The string buffer used to track the derivation of this parse. */ private StringBuffer derivation; /** * Specifies whether this constituent was built during the chunking phase. */ private boolean isChunk; /** * The pattern used to find the base constituent label of a * Penn Treebank labeled constituent. */ private static final Pattern typePattern = Pattern.compile("^([^ =-]+)"); /** * The pattern used to find the function tags. */ private static final Pattern funTypePattern = Pattern.compile("^[^ =-]+-([^ =-]+)"); /** * The patter used to identify tokens in Penn Treebank labeled constituents. */ private static final Pattern tokenPattern = Pattern.compile("^[^ ()]+ ([^ ()]+)\\s*\\)"); /** * The set of punctuation parses which are between this parse and the previous parse. */ private Collection prevPunctSet; /** * The set of punctuation parses which are between this parse and * the subsequent parse. */ private Collection nextPunctSet; /** * Specifies whether constituent labels should include parts specified * after minus character. */ private static boolean useFunctionTags; /** * Initializes a {@link Parse node} for this specified {@code text} and {@code span} of the * specified {@code type} with probability {@code p} and the head {@code index}. * * @param text The text of the sentence for which this node is a part of. * @param span The {@link Span character offsets} for this node within the specified {@code text}. * @param type The constituent label of this node. * @param p The probability of this {@link Parse}. * @param index The token index of the head of this parse. */ public Parse(String text, Span span, String type, double p, int index) { this.text = text; this.span = span; this.type = type; this.prob = p; this.head = this; this.headIndex = index; this.parts = new LinkedList<>(); this.label = null; this.parent = null; } /** * Initializes a {@link Parse node} for this specified {@code text} and {@code span} of the * specified {@code type} with probability {@code p} and the head {@code index}. * * @param text The text of the sentence for which this node is a part of. * @param span The {@link Span character offsets} for this node within the specified {@code text}. * @param type The constituent label of this node. * @param p The probability of this parse. * @param h The head token of this parse. */ public Parse(String text, Span span, String type, double p, Parse h) { this(text, span, type, p, 0); if (h != null) { this.head = h; this.headIndex = h.headIndex; } } @Override public Object clone() { Parse p = new Parse(this.text, this.span, this.type, this.prob, this.head); p.parts = new LinkedList<>(); p.parts.addAll(this.parts); if (derivation != null) { p.derivation = new StringBuffer(100); p.derivation.append(this.derivation); } p.label = this.label; return (p); } /** * Clones the right frontier of {@link Parse} up to the specified {@code node}. * * @param node The last {@code node} in the right frontier of the parse tree to be cloned. * @return A clone of this parse and its right frontier up to and including the specified node. */ public Parse clone(Parse node) { if (this == node) { return (Parse) this.clone(); } else { Parse c = (Parse) this.clone(); Parse lc = c.parts.get(parts.size() - 1); c.parts.set(parts.size() - 1, lc.clone(node)); return c; } } /** * Clones the right frontier of this root {@link Parse} up to and including the specified node. * * @param node The last {@code node} in the right frontier of the parse tree to be cloned. * @param parseIndex The child index of the parse for this root {@code node}. * @return A clone of this root parse and its right frontier up to and including the specified node. */ public Parse cloneRoot(Parse node, int parseIndex) { Parse c = (Parse) this.clone(); Parse fc = c.parts.get(parseIndex); c.parts.set(parseIndex, fc.clone(node)); return c; } /** * Specifies whether function tags should be included as part of the constituent type. * * @param uft {@code true} is they should be included, {@code false} otherwise. */ public static void useFunctionTags(boolean uft) { useFunctionTags = uft; } /** * Set the type of this constituent to the specified type. * * @param type The type of this constituent. */ public void setType(String type) { this.type = type; } /** * @return Retrieves the constituent label for this node of the parse. */ public String getType() { return type; } /** * @return Retrieves the set of punctuation {@link Parse parses} that occur * immediately before this parse. */ public Collection getPreviousPunctuationSet() { return prevPunctSet; } /** * Designates that the specified punctuation should is prior to this parse. * * @param punct The {@link Parse punctuation} to be added. */ public void addPreviousPunctuation(Parse punct) { if (this.prevPunctSet == null) { this.prevPunctSet = new TreeSet<>(); } prevPunctSet.add(punct); } /** * @return Retrieves the set of punctuation {@link Parse parses} that occur * immediately after this parse. */ public Collection getNextPunctuationSet() { return nextPunctSet; } /** * Designates that the specified punctuation follows this parse. * * @param punct The {@link Parse punctuation} set. */ public void addNextPunctuation(Parse punct) { if (this.nextPunctSet == null) { this.nextPunctSet = new TreeSet<>(); } nextPunctSet.add(punct); } /** * Sets the {@link Parse punctuation tags} which follow this parse. * * @param punctSet The punctuation tags which follow this parse. */ public void setNextPunctuation(Collection punctSet) { this.nextPunctSet = punctSet; } /** * Sets the {@link Parse punctuation tags} which precede this parse. * * @param punctSet The punctuation tags which precede this parse. */ public void setPrevPunctuation(Collection punctSet) { this.prevPunctSet = punctSet; } /** * Inserts the specified constituent into this parse based on its text span. * This method assumes that the specified constituent can be inserted into this parse. * * @param constituent The {@link Parse constituent} to be inserted. */ public void insert(final Parse constituent) { Span ic = constituent.span; if (span.contains(ic)) { //double oprob=c.prob; int pi = 0; int pn = parts.size(); for (; pi < pn; pi++) { Parse subPart = parts.get(pi); if (logger.isTraceEnabled()) { logger.trace("Parse.insert:con={} sp[{}] {} {}", constituent, pi, subPart, subPart.getType()); } Span sp = subPart.span; if (sp.getStart() >= ic.getEnd()) { break; } // constituent contains subPart else if (ic.contains(sp)) { if (logger.isTraceEnabled()) { logger.trace("Parse.insert:con contains subPart"); } parts.remove(pi); pi--; constituent.parts.add(subPart); subPart.setParent(constituent); if (logger.isTraceEnabled()) { logger.trace("Parse.insert: {} -> {}", subPart.hashCode(), subPart.getParent().hashCode()); } pn = parts.size(); } else if (sp.contains(ic)) { if (logger.isTraceEnabled()) { logger.trace("Parse.insert:subPart contains con"); } subPart.insert(constituent); return; } } if (logger.isTraceEnabled()) { logger.trace("Parse.insert:adding con={} to {}", constituent, this); } parts.add(pi, constituent); constituent.setParent(this); // System.err.println("Parse.insert: "+constituent.hashCode()+" -> " // +constituent.getParent().hashCode()); } else { throw new IllegalArgumentException("Inserting constituent not contained in the sentence!"); } } /** * Fills the specified {@link StringBuffer} with a string representation of this parse. * * @param sb A {@link StringBuffer} into which the parse string can be appended. */ public void show(StringBuffer sb) { int start; start = span.getStart(); if (!type.equals(AbstractBottomUpParser.TOK_NODE)) { sb.append("("); sb.append(type).append(" "); if (logger.isTraceEnabled()) { logger.trace("{} ", label); } if (logger.isTraceEnabled()) { logger.trace("{} ", head); } if (logger.isTraceEnabled()) { logger.trace("{} ", prob); } } for (Parse c : parts) { Span s = c.span; if (start < s.getStart()) { if (logger.isTraceEnabled()) { logger.trace("pre {} {}", start, s.getStart()); } sb.append(encodeToken(text.substring(start, s.getStart()))); } c.show(sb); start = s.getEnd(); } if (start < span.getEnd()) { sb.append(encodeToken(text.substring(start, span.getEnd()))); } if (!type.equals(AbstractBottomUpParser.TOK_NODE)) { sb.append(")"); } } /** * Prints this parse using Penn Treebank-style formatting. */ public void show() { StringBuffer sb = new StringBuffer(text.length() * 4); show(sb); logger.debug(sb.toString()); } /** * @return Retrieves the probability associated with the pos-tag sequence assigned * to this parse. */ public double getTagSequenceProb() { if (logger.isTraceEnabled()) { logger.trace("Parse.getTagSequenceProb: {} {}",type, this); } if (parts.size() == 1 && (parts.get(0)).type.equals(AbstractBottomUpParser.TOK_NODE)) { if (logger.isTraceEnabled()) { logger.trace("{} {}", this, prob); } return (StrictMath.log(prob)); } else if (parts.size() == 0) { logger.warn("Parse.getTagSequenceProb: Wrong base case!"); return (0.0); } else { double sum = 0.0; for (Parse part : parts) { sum += part.getTagSequenceProb(); } return sum; } } /** * @return {@code true} if the parse contains a single top-most node (=complete), * {@code false} otherwise. */ public boolean complete() { return (parts.size() == 1); } public String getCoveredText() { return text.substring(span.getStart(), span.getEnd()); } /** * @return Retrieves a String representation using Penn Treebank-style formatting. */ public String toStringPennTreebank() { StringBuffer buffer = new StringBuffer(); show(buffer); return buffer.toString(); } /** * Represents this {@link Parse} in a human-readable way. */ @Override public String toString() { // TODO: Use the commented code in next bigger release, // change probably breaks backward compatibility in some // applications //StringBuffer buffer = new StringBuffer(); //show(buffer); //return buffer.toString(); return getCoveredText(); } /** * @return Retrieves the text of the sentence over which this parse was formed. */ public String getText() { return text; } /** * @return Retrieves the {@link Span character offsets} for this constituent. */ public Span getSpan() { return span; } /** * @return Retrieves the {@code log} of the product of the probability associated with all the * decisions which formed this constituent. */ public double getProb() { return prob; } /** * Adds the specified {@code logProb} to this current log for this parse. * * @param logProb The probability of an action performed on this parse. */ public void addProb(double logProb) { this.prob += logProb; } /** * @return Retrieves the {@link Parse child constituents} of this constituent. */ public Parse[] getChildren() { return parts.toArray(new Parse[0]); } /** * Replaces the child at the specified index with a new child with the specified label. * * @param index The index of the child to be replaced. * @param label The label to be assigned to the new child. */ public void setChild(int index, String label) { Parse newChild = (Parse) (parts.get(index)).clone(); newChild.setLabel(label); parts.set(index, newChild); } public void add(Parse daughter, HeadRules rules) { if (daughter.prevPunctSet != null) { parts.addAll(daughter.prevPunctSet); } parts.add(daughter); this.span = new Span(span.getStart(), daughter.getSpan().getEnd()); this.head = rules.getHead(getChildren(), type); this.headIndex = head.headIndex; } public void remove(int index) { parts.remove(index); if (!parts.isEmpty()) { if (index == 0 || index == parts.size()) { //size is orig last element span = new Span((parts.get(0)).span.getStart(), (parts.get(parts.size() - 1)).span.getEnd()); } } } public Parse adjoinRoot(Parse node, HeadRules rules, int parseIndex) { Parse lastChild = parts.get(parseIndex); Parse adjNode = new Parse(this.text, new Span(lastChild.getSpan().getStart(), node.getSpan().getEnd()), lastChild.getType(), 1, rules.getHead(new Parse[] {lastChild, node}, lastChild.getType())); adjNode.parts.add(lastChild); if (node.prevPunctSet != null) { adjNode.parts.addAll(node.prevPunctSet); } adjNode.parts.add(node); parts.set(parseIndex, adjNode); return adjNode; } /** * Sister adjoins this node's last child and the specified sister node and returns their * new parent node. The new parent node replace this node's last child. * * @param sister The {@link Parse node} to be adjoined. * @param rules The {@link HeadRules} for the parser. * @return The new {@link Parse parent node} of this node and the specified sister node. */ public Parse adjoin(Parse sister, HeadRules rules) { Parse lastChild = parts.get(parts.size() - 1); Parse adjNode = new Parse(this.text, new Span(lastChild.getSpan().getStart(), sister.getSpan().getEnd()), lastChild.getType(), 1, rules.getHead(new Parse[] {lastChild, sister}, lastChild.getType())); adjNode.parts.add(lastChild); if (sister.prevPunctSet != null) { adjNode.parts.addAll(sister.prevPunctSet); } adjNode.parts.add(sister); parts.set(parts.size() - 1, adjNode); this.span = new Span(span.getStart(), sister.getSpan().getEnd()); this.head = rules.getHead(getChildren(), type); this.headIndex = head.headIndex; return adjNode; } public void expandTopNode(Parse root) { boolean beforeRoot = true; if (logger.isTraceEnabled()) { logger.trace("expandTopNode: parts={}", parts); } for (int pi = 0, ai = 0; pi < parts.size(); pi++, ai++) { Parse node = parts.get(pi); if (node == root) { beforeRoot = false; } else if (beforeRoot) { root.parts.add(ai, node); parts.remove(pi); pi--; } else { root.parts.add(node); parts.remove(pi); pi--; } } root.updateSpan(); } /** * @return Retrieves the number of children for this parse node. */ public int getChildCount() { return parts.size(); } /** * @param child A child of this parse. * @return Retrieves the index of this specified child or {@code -1} * if the specified child is not a child of this parse. */ public int indexOf(Parse child) { return parts.indexOf(child); } /** * @return Retrieves the head constituent associated with this constituent. */ public Parse getHead() { return head; } /** * @return Retrieves the index within a sentence of the head token for this parse. */ public int getHeadIndex() { return headIndex; } /** * Retrieves the label assigned to this parse node during parsing * which specifies how this node will be formed into a constituent. * * @return The outcome label assigned to this node during parsing. */ public String getLabel() { return label; } /** * Assigns this parse the specified label. This is used by parsing schemes to * tag parsing nodes while building. * * @param label A label indicating something about the stage of building for this parse node. */ public void setLabel(String label) { this.label = label; } private static String getType(String rest) { if (rest.startsWith("-LCB-")) { return "-LCB-"; } else if (rest.startsWith("-RCB-")) { return "-RCB-"; } else if (rest.startsWith("-LRB-")) { return "-LRB-"; } else if (rest.startsWith("-RRB-")) { return "-RRB-"; } else if (rest.startsWith("-RSB-")) { return "-RSB-"; } else if (rest.startsWith("-LSB-")) { return "-LSB-"; } else if (rest.startsWith("-NONE-")) { return "-NONE-"; } else { Matcher typeMatcher = typePattern.matcher(rest); if (typeMatcher.find()) { String type = typeMatcher.group(1); if (useFunctionTags) { Matcher funMatcher = funTypePattern.matcher(rest); if (funMatcher.find()) { String ftag = funMatcher.group(1); type = type + "-" + ftag; } } return type; } } return null; } private static String encodeToken(String token) { if (BRACKET_LRB.equals(token)) { return "-LRB-"; } else if (BRACKET_RRB.equals(token)) { return "-RRB-"; } else if (BRACKET_LCB.equals(token)) { return "-LCB-"; } else if (BRACKET_RCB.equals(token)) { return "-RCB-"; } else if (BRACKET_LSB.equals(token)) { return "-LSB-"; } else if (BRACKET_RSB.equals(token)) { return "-RSB-"; } return token; } private static String decodeToken(String token) { if ("-LRB-".equals(token)) { return BRACKET_LRB; } else if ("-RRB-".equals(token)) { return BRACKET_RRB; } else if ("-LCB-".equals(token)) { return BRACKET_LCB; } else if ("-RCB-".equals(token)) { return BRACKET_RCB; } else if ("-LSB-".equals(token)) { return BRACKET_LSB; } else if ("-RSB-".equals(token)) { return BRACKET_RSB; } return token; } /** * @param rest The portion of the parse string remaining to be processed. * @return Retrieves the string containing the token for the specified portion of the parse * string or {@code null} if the portion of the parse string does not represent a token. */ private static String getToken(String rest) { Matcher tokenMatcher = tokenPattern.matcher(rest); if (tokenMatcher.find()) { return decodeToken(tokenMatcher.group(1)); } return null; } /** * Computes the head parses for this parse and its sub-parses and stores this information * in the parse data structure. * * @param rules The {@link HeadRules} which determine how the head of the parse is computed. */ public void updateHeads(HeadRules rules) { if (parts != null && parts.size() != 0) { for (Parse c : parts) { c.updateHeads(rules); } this.head = rules.getHead(parts.toArray(new Parse[0]), type); if (head == null) { head = this; } else { this.headIndex = head.headIndex; } } else { this.head = this; } } public void updateSpan() { span = new Span((parts.get(0)).span.getStart(), (parts.get(parts.size() - 1)).span.getEnd()); } /** * Prune the specified sentence parse of vacuous productions. * * @param parse The sentence {@link Parse}. */ public static void pruneParse(Parse parse) { List nodes = new LinkedList<>(); nodes.add(parse); while (nodes.size() != 0) { Parse node = nodes.remove(0); Parse[] children = node.getChildren(); if (children.length == 1 && node.getType().equals(children[0].getType())) { int index = node.getParent().parts.indexOf(node); children[0].setParent(node.getParent()); node.getParent().parts.set(index, children[0]); node.parent = null; node.parts = null; } nodes.addAll(Arrays.asList(children)); } } public static void fixPossesives(Parse parse) { Parse[] tags = parse.getTagNodes(); for (int ti = 0; ti < tags.length; ti++) { if (tags[ti].getType().equals("POS")) { if (ti + 1 < tags.length && tags[ti + 1].getParent() == tags[ti].getParent().getParent()) { int start = tags[ti + 1].getSpan().getStart(); int end = tags[ti + 1].getSpan().getEnd(); for (int npi = ti + 2; npi < tags.length; npi++) { if (tags[npi].getParent() == tags[npi - 1].getParent()) { end = tags[npi].getSpan().getEnd(); } else { break; } } Parse npPos = new Parse(parse.getText(), new Span(start, end), "NP", 1, tags[ti + 1]); parse.insert(npPos); } } } } /** * Parses the specified tree-bank style parse string and return a {@link Parse} structure * for that string. * * @param parse A tree-bank style {@link Parse} string. * @return A {@link Parse} structure for the specified tree-bank style parse string. */ public static Parse parseParse(String parse) { return parseParse(parse, null); } /** * Parses the specified tree-bank style {@link Parse} string and return a {@link Parse} structure * for that string. * * @param parse A tree-bank style {@link Parse} string. * @param gl The {@link GapLabeler} to be used. * @return A {@link Parse} structure for the specified tree-bank style parse string. */ public static Parse parseParse(String parse, GapLabeler gl) { StringBuilder text = new StringBuilder(); int offset = 0; Stack stack = new Stack<>(); List cons = new LinkedList<>(); for (int ci = 0, cl = parse.length(); ci < cl; ci++) { char c = parse.charAt(ci); if (c == '(') { String rest = parse.substring(ci + 1); String type = getType(rest); if (type == null) { logger.warn("null type for: {}", rest); } String token = getToken(rest); stack.push(new Constituent(type, new Span(offset, offset))); if (token != null) { if (Objects.equals(type, "-NONE-") && gl != null) { if (logger.isTraceEnabled()) { logger.trace("stack.size={}", stack.size()); } gl.labelGaps(stack); } else { cons.add(new Constituent(AbstractBottomUpParser.TOK_NODE, new Span(offset, offset + token.length()))); text.append(token).append(" "); offset += token.length() + 1; } } } else if (c == ')') { Constituent con = stack.pop(); int start = con.getSpan().getStart(); if (start < offset) { cons.add(new Constituent(con.getLabel(), new Span(start, offset - 1))); } } } String txt = text.toString(); int tokenIndex = -1; Parse p = new Parse(txt, new Span(0, txt.length()), AbstractBottomUpParser.TOP_NODE, 1, 0); for (Constituent con : cons) { String type = con.getLabel(); if (!type.equals(AbstractBottomUpParser.TOP_NODE)) { if (AbstractBottomUpParser.TOK_NODE.equals(type)) { tokenIndex++; } Parse c = new Parse(txt, con.getSpan(), type, 1, tokenIndex); if (logger.isTraceEnabled()) { logger.trace("insert[{}] {} {} {}", tokenIndex, type, c, c.hashCode()); } p.insert(c); //codeTree(p); } } return p; } /** * @return Retrieves the parent parse node of this constituent. */ public Parse getParent() { return parent; } /** * Specifies the parent parse node for this constituent. * * @param parent The parent parse node for this constituent. */ public void setParent(Parse parent) { this.parent = parent; } /** * Indicates whether this parse node is a pos-tag. * * @return {@code true} if this node is a pos-tag, {@code false} otherwise. */ public boolean isPosTag() { return (parts.size() == 1 && (parts.get(0)).getType().equals(AbstractBottomUpParser.TOK_NODE)); } /** * Indicates whether this parse node contains no sub-constituents. * * @return {@code true} if this constituent contains no sub-constituents; {@code false} otherwise. */ public boolean isFlat() { boolean flat = true; for (Parse part : parts) { flat &= part.isPosTag(); } return flat; } public void isChunk(boolean ic) { this.isChunk = ic; } public boolean isChunk() { return isChunk; } /** * @return Retrieves the parse nodes which are children of this node and which are pos tags. */ public Parse[] getTagNodes() { List tags = new LinkedList<>(); List nodes = new LinkedList<>(this.parts); while (nodes.size() != 0) { Parse p = nodes.remove(0); if (p.isPosTag()) { tags.add(p); } else { nodes.addAll(0, p.parts); } } return tags.toArray(new Parse[0]); } public Parse[] getTokenNodes() { List tokens = new LinkedList<>(); List nodes = new LinkedList<>(this.parts); while (nodes.size() != 0) { Parse p = nodes.remove(0); if (p.getType().equals(AbstractBottomUpParser.TOK_NODE)) { tokens.add(p); } else { nodes.addAll(0, p.parts); } } return tokens.toArray(new Parse[0]); } /** * Returns the deepest shared parent of this node and the specified node. * If the nodes are identical then their parent is returned. * If one node is the parent of the other than the parent node is returned. * * @param node The node from which parents are compared to this node's parents. * @return the deepest shared parent of this node and the specified node. */ public Parse getCommonParent(Parse node) { if (this == node) { return parent; } Set parents = new HashSet<>(); Parse cparent = this; while (cparent != null) { parents.add(cparent); cparent = cparent.getParent(); } while (node != null) { if (parents.contains(node)) { return node; } node = node.getParent(); } return null; } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof Parse p) { return Objects.equals(label, p.label) && span.equals(p.span) && text.equals(p.text) && parts.equals(p.parts); } return false; } @Override public int hashCode() { // Note: label is missing here! return Objects.hash(span, text); } public int compareTo(Parse p) { return Double.compare(p.getProb(), this.getProb()); } /** * @return Retrieves the derivation string for this parse or {@code null} * if no derivation string has been created. */ public StringBuffer getDerivation() { return derivation; } /** * Specifies the derivation string to be associated with this parse. * * @param derivation The derivation string to be associated with this parse. */ public void setDerivation(StringBuffer derivation) { this.derivation = derivation; } private void codeTree(Parse p, int[] levels) { Parse[] kids = p.getChildren(); StringBuilder levelsBuff = new StringBuilder(); levelsBuff.append("["); int[] nlevels = new int[levels.length + 1]; for (int li = 0; li < levels.length; li++) { nlevels[li] = levels[li]; levelsBuff.append(levels[li]).append("."); } for (int ki = 0; ki < kids.length; ki++) { nlevels[levels.length] = ki; logger.info(levelsBuff.toString() + ki + "] " + kids[ki].getType() + " " + kids[ki].hashCode() + " -> " + kids[ki].getParent().hashCode() + " " + kids[ki].getParent().getType() + " " + kids[ki].getCoveredText()); codeTree(kids[ki], nlevels); } } /** * Prints to standard out a representation of the specified parse which * contains hash codes so that parent/child relationships can be explicitly seen. */ public void showCodeTree() { codeTree(this, new int[0]); } /** * Utility method to insert named entities. * * @param tag A token representing a tag. * @param names An array of {@link Span names}. * @param tokens An array of {@link Parse tokens}. */ public static void addNames(String tag, Span[] names, Parse[] tokens) { for (Span nameTokenSpan : names) { Parse startToken = tokens[nameTokenSpan.getStart()]; Parse endToken = tokens[nameTokenSpan.getEnd() - 1]; Parse commonParent = startToken.getCommonParent(endToken); if (logger.isTraceEnabled()) { logger.trace("addNames: {} .. {} commonParent = {}", startToken, endToken, commonParent); } if (commonParent != null) { Span nameSpan = new Span(startToken.getSpan().getStart(), endToken.getSpan().getEnd()); if (nameSpan.equals(commonParent.getSpan())) { commonParent.insert(new Parse(commonParent.getText(), nameSpan, tag, 1.0, endToken.getHeadIndex())); } else { Parse[] kids = commonParent.getChildren(); boolean crossingKids = false; for (Parse kid : kids) { if (nameSpan.crosses(kid.getSpan())) { crossingKids = true; } } if (!crossingKids) { commonParent.insert(new Parse(commonParent.getText(), nameSpan, tag, 1.0, endToken.getHeadIndex())); } else { if (commonParent.getType().equals("NP")) { Parse[] grandKids = kids[0].getChildren(); if (grandKids.length > 1 && nameSpan.contains(grandKids[grandKids.length - 1].getSpan())) { commonParent.insert(new Parse(commonParent.getText(), commonParent.getSpan(), tag, 1.0, commonParent.getHeadIndex())); } } } } } } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/ParseSampleStream.java0100644 0000000 0000000 00000003000 14523004075 033335 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.io.IOException; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; public class ParseSampleStream extends FilterObjectStream { /** * Initializes a {@link ParseSampleStream instance}. * * @param in A plain text {@link ObjectStream stream} used as input. */ public ParseSampleStream(ObjectStream in) { super(in); } @Override public Parse read() throws IOException { String parse = samples.read(); if (parse != null) { if (!parse.trim().isEmpty()) { return Parse.parseParse(parse); } else { return read(); } } else { return null; } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/Parser.java0100644 0000000 0000000 00000004012 14523004075 031205 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; /** * Defines common methods for full-syntactic parsers. */ public interface Parser { /** * Returns the specified number of parses or fewer for the specified tokens. *

* * Note: The nodes within * the returned parses are shared with other parses and therefore their parent node references * will not be consistent with their child node reference. *

* * {@link Parse#setParent(Parse)} can be used to make the parents consistent with a * particular parse, but subsequent calls to setParents can invalidate the * results of earlier calls.
* * @param tokens A {@link Parse} containing the tokens with a single parent node. * @param numParses The number of parses desired. * @return the specified number of {@link Parse parses} for the specified {@code tokens}. */ Parse[] parse(Parse tokens, int numParses); /** * Returns a {@link Parse} for the specified {@link Parse} of {@code tokens}. * * @param tokens The root node of a flat parse containing only tokens. * @return A full parse of the specified tokens or the flat chunks of the tokens if a * full parse could not be found. */ Parse parse(Parse tokens); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/ParserChunkerFactory.java0100644 0000000 0000000 00000003201 14523004075 034054 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import opennlp.tools.chunker.ChunkerContextGenerator; import opennlp.tools.chunker.ChunkerFactory; import opennlp.tools.chunker.ChunkerME; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.util.SequenceValidator; import opennlp.tools.util.TokenTag; public class ParserChunkerFactory extends ChunkerFactory { @Override public ChunkerContextGenerator getContextGenerator() { return new ChunkContextGenerator(ChunkerME.DEFAULT_BEAM_SIZE); } @Override public SequenceValidator getSequenceValidator() { MaxentModel model = artifactProvider.getArtifact("chunker.model"); String[] outcomes = new String[model.getNumOutcomes()]; for (int i = 0; i < outcomes.length; i++) { outcomes[i] = model.getOutcome(i); } return new ParserChunkerSequenceValidator(outcomes); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_parser_ParserChun0100644 0000000 0000000 00000000167 14523004075 032601 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/ParserChunkerSequenceValidator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/ParserChunkerSequenceValid0100644 0000000 0000000 00000004557 14523004075 034274 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.util.HashMap; import java.util.Map; import opennlp.tools.parser.chunking.Parser; import opennlp.tools.util.SequenceValidator; import opennlp.tools.util.TokenTag; /** * The parser chunker {@link SequenceValidator} implementation. */ public class ParserChunkerSequenceValidator implements SequenceValidator { private final Map continueStartMap; public ParserChunkerSequenceValidator(String[] outcomes) { continueStartMap = new HashMap<>(outcomes.length); for (String outcome : outcomes) { if (outcome.startsWith(Parser.CONT)) { continueStartMap.put(outcome, Parser.START + outcome.substring( Parser.CONT.length())); } } } public boolean validSequence(int i, String[] inputSequence, String[] tagList, String outcome) { if (continueStartMap.containsKey(outcome)) { int lti = tagList.length - 1; if (lti == -1) { return false; } else { String lastTag = tagList[lti]; if (lastTag.equals(outcome)) { return true; } if (lastTag.equals(continueStartMap.get(outcome))) { return true; } if (lastTag.equals(Parser.OTHER)) { return false; } return false; } } return true; } @Override public boolean validSequence(int i, TokenTag[] inputTuples, String[] outcomesSequence, String outcome) { String[] inputSequence = TokenTag.extractTokens(inputTuples); return validSequence(i, inputSequence, outcomesSequence, outcome); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/ParserCrossValidator.java0100644 0000000 0000000 00000007133 14523004075 034074 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.io.IOException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.eval.CrossValidationPartitioner; import opennlp.tools.util.eval.FMeasure; /** * Cross validator for a {@link Parser}. */ public class ParserCrossValidator { private final String languageCode; private final TrainingParameters params; private final HeadRules rules; private final FMeasure fmeasure = new FMeasure(); private final ParserType parserType; private final ParserEvaluationMonitor[] monitors; /** * Initializes a {@link ParserCrossValidator} instance via given parameters. * * @param languageCode An ISO conform language code. * @param params The {@link TrainingParameters} for the context of cross validation. * @param rules The {@link HeadRules} for the context of cross validation. * @param parserType The {@link ParserType} for the context of cross validation. * @param monitors the {@link ParserEvaluationMonitor evaluation listeners}. */ public ParserCrossValidator(String languageCode, TrainingParameters params, HeadRules rules, ParserType parserType, ParserEvaluationMonitor... monitors) { this.languageCode = languageCode; this.params = params; this.rules = rules; this.parserType = parserType; this.monitors = monitors; } /** * Starts the evaluation. * * @param samples The {@link ObjectStream} of {@link Parse samples} to train and test with. * @param nFolds Number of folds. It must be greater than zero. * * @throws IOException Thrown if IO errors occurred. * @throws IllegalStateException Thrown if the currently active {@link ParserType} is not supported. */ public void evaluate(ObjectStream samples, int nFolds) throws IOException { CrossValidationPartitioner partitioner = new CrossValidationPartitioner<>(samples, nFolds); while (partitioner.hasNext()) { try (CrossValidationPartitioner.TrainingSampleStream trainingSampleStream = partitioner.next()) { ParserModel model; if (ParserType.CHUNKING.equals(parserType)) { model = opennlp.tools.parser.chunking.Parser.train(languageCode, samples, rules, params); } else if (ParserType.TREEINSERT.equals(parserType)) { model = opennlp.tools.parser.treeinsert.Parser.train(languageCode, samples, rules, params); } else { throw new IllegalStateException("Unexpected parser type: " + parserType); } ParserEvaluator evaluator = new ParserEvaluator(ParserFactory.create(model), monitors); evaluator.evaluate(trainingSampleStream.getTestSampleStream()); fmeasure.mergeInto(evaluator.getFMeasure()); } } } public FMeasure getFMeasure() { return fmeasure; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_parser_ParserEval0100644 0000000 0000000 00000000160 14523004075 032564 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/ParserEvaluationMonitor.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/ParserEvaluationMonitor.ja0100644 0000000 0000000 00000002007 14523004075 034260 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import opennlp.tools.util.eval.EvaluationMonitor; /** * A marker interface for evaluating {@link Parser parsers}. */ public interface ParserEvaluationMonitor extends EvaluationMonitor { } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/ParserEvaluator.java0100644 0000000 0000000 00000007315 14523004075 033101 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.util.ArrayList; import java.util.List; import java.util.Stack; import opennlp.tools.cmdline.parser.ParserTool; import opennlp.tools.util.Span; import opennlp.tools.util.eval.Evaluator; import opennlp.tools.util.eval.FMeasure; /** * This implementation of {@link Evaluator} behaves like {@code EVALB} with no exceptions, * e.g, without removing punctuation tags, or equality between {@code ADVP} and {@code PRT}, as * in * COLLINS convention. *

* To follow parsing evaluation conventions (Bikel, Collins, Charniak, etc.) as in {@code EVALB}, * options are to be added to the {@code ParserEvaluatorTool}. * * @see Parser * @see Evaluator * @see Parse */ public class ParserEvaluator extends Evaluator { /* * Holds the evaluation results for the last run of {@link #processSample}. */ private final FMeasure fmeasure = new FMeasure(); /* * The parser to evaluate. */ private final Parser parser; /** * Initializes a {@link ParserEvaluator} instance with the given {@link Parser}. * * @param aParser The {@link Parser} to evaluate. * @param monitors The {@link ParserEvaluationMonitor evaluation listeners}. */ public ParserEvaluator(final Parser aParser, final ParserEvaluationMonitor... monitors) { super(monitors); this.parser = aParser; } /** * Obtains {@link Span spans} for every parse in a sentence. * * @param parse The parse from which to obtain {@link Span spans}. * * @return An array of {@link Span spans} for the parse */ private static Span[] getConstituencySpans(final Parse parse) { Stack stack = new Stack<>(); if (parse.getChildCount() > 0) { for (Parse child : parse.getChildren()) { stack.push(child); } } List consts = new ArrayList<>(); while (!stack.isEmpty()) { Parse constSpan = stack.pop(); if (!constSpan.isPosTag()) { Span span = constSpan.getSpan(); consts.add(new Span(span.getStart(), span.getEnd(), constSpan.getType())); for (Parse child : constSpan.getChildren()) { stack.push(child); } } } return consts.toArray(new Span[0]); } @Override protected final Parse processSample(final Parse reference) { List tokens = new ArrayList<>(); for (Parse token : reference.getTokenNodes()) { tokens.add(token.getSpan().getCoveredText(reference.getText()).toString()); } Parse[] predictions = ParserTool.parseLine(String.join(" ", tokens), parser, 1); Parse prediction = null; if (predictions.length > 0) { prediction = predictions[0]; fmeasure.updateScores(getConstituencySpans(reference), getConstituencySpans(prediction)); } return prediction; } public final FMeasure getFMeasure() { return fmeasure; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/ParserEventTypeEnum.java0100644 0000000 0000000 00000002046 14523004075 033703 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; /** * Enumeration of event types for a {@link Parser}. */ public enum ParserEventTypeEnum { BUILD, CHECK, // TODO Add reason why those enum values are deprecated @Deprecated CHUNK, @Deprecated TAG, ATTACH } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/ParserFactory.java0100644 0000000 0000000 00000005215 14523004075 032543 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; public class ParserFactory { private ParserFactory() { } /** * Instantiates a {@link Parser} via a given {@code model} and * other configuration parameters. * * @param model The {@link ParserModel} to use. * @param beamSize The number of different parses kept during parsing. * @param advancePercentage The minimal amount of probability mass which advanced outcomes * must represent. Only outcomes which contribute to the top * {@code advancePercentage} will be explored. * * @return A valid {@link Parser} instance. * @throws IllegalStateException Thrown if the {@link ParserType} is not supported. * * @see Parser * @see ParserModel */ public static Parser create(ParserModel model, int beamSize, double advancePercentage) { if (ParserType.CHUNKING.equals(model.getParserType())) { return new opennlp.tools.parser.chunking.Parser(model, beamSize, advancePercentage); } else if (ParserType.TREEINSERT.equals(model.getParserType())) { return new opennlp.tools.parser.treeinsert.Parser(model, beamSize, advancePercentage); } else { throw new IllegalStateException("Unexpected ParserType: " + model.getParserType().name()); } } /** * Instantiates a {@link Parser} via a given {@code model} and * default configuration parameters (see: {@link AbstractBottomUpParser}). * * @param model The {@link ParserModel} to use. * * @return A valid {@link Parser} instance. * @throws IllegalStateException Thrown if the {@link ParserType} is not supported. * * @see Parser * @see AbstractBottomUpParser */ public static Parser create(ParserModel model) { return create(model, AbstractBottomUpParser.defaultBeamSize, AbstractBottomUpParser.defaultAdvancePercentage); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/ParserModel.java0100644 0000000 0000000 00000034435 14523004075 032202 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.URL; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.util.Map; import java.util.Objects; import opennlp.tools.chunker.ChunkerModel; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.postag.POSModel; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.model.ArtifactSerializer; import opennlp.tools.util.model.BaseModel; import opennlp.tools.util.model.ChunkerModelSerializer; import opennlp.tools.util.model.POSModelSerializer; /** * This is the default {@link ParserModel} implementation. */ public class ParserModel extends BaseModel { private static class HeadRulesSerializer implements ArtifactSerializer { public opennlp.tools.parser.lang.en.HeadRules create(InputStream in) throws IOException { return new opennlp.tools.parser.lang.en.HeadRules(new BufferedReader( new InputStreamReader(in, StandardCharsets.UTF_8))); } public void serialize(opennlp.tools.parser.lang.en.HeadRules artifact, OutputStream out) throws IOException { artifact.serialize(new OutputStreamWriter(out, StandardCharsets.UTF_8)); } } private static final String COMPONENT_NAME = "Parser"; private static final String BUILD_MODEL_ENTRY_NAME = "build.model"; private static final String CHECK_MODEL_ENTRY_NAME = "check.model"; private static final String ATTACH_MODEL_ENTRY_NAME = "attach.model"; private static final String PARSER_TAGGER_MODEL_ENTRY_NAME = "parsertager.postagger"; private static final String CHUNKER_TAGGER_MODEL_ENTRY_NAME = "parserchunker.chunker"; private static final String HEAD_RULES_MODEL_ENTRY_NAME = "head-rules.headrules"; private static final String PARSER_TYPE = "parser-type"; /** * Initializes a {@link ParserModel} instance via given parameters. * * @param languageCode An ISO conform language code. * @param buildModel A valid {@link MaxentModel} used to build. * @param checkModel A valid {@link MaxentModel} used to check. * @param attachModel A valid {@link MaxentModel} used to attach. * @param parserTagger A valid {@link POSModel} to parse. * @param chunkerTagger A valid {@link ChunkerModel} to chunk. * @param headRules The {@link HeadRules} to to use for parsing. * @param modelType The {@link ParserType} to use. * @param manifestInfoEntries Additional information kept in the manifest. */ public ParserModel(String languageCode, MaxentModel buildModel, MaxentModel checkModel, MaxentModel attachModel, POSModel parserTagger, ChunkerModel chunkerTagger, HeadRules headRules, ParserType modelType, Map manifestInfoEntries) { super(COMPONENT_NAME, languageCode, manifestInfoEntries); setManifestProperty(PARSER_TYPE, modelType.name()); artifactMap.put(BUILD_MODEL_ENTRY_NAME, buildModel); artifactMap.put(CHECK_MODEL_ENTRY_NAME, checkModel); if (ParserType.CHUNKING.equals(modelType)) { if (attachModel != null) throw new IllegalArgumentException("attachModel must be null for chunking parser!"); } else if (ParserType.TREEINSERT.equals(modelType)) { Objects.requireNonNull(attachModel, "attachModel must not be null"); artifactMap.put(ATTACH_MODEL_ENTRY_NAME, attachModel); } else { throw new IllegalStateException("Unknown ParserType '" + modelType + "'!"); } artifactMap.put(PARSER_TAGGER_MODEL_ENTRY_NAME, parserTagger); artifactMap.put(CHUNKER_TAGGER_MODEL_ENTRY_NAME, chunkerTagger); artifactMap.put(HEAD_RULES_MODEL_ENTRY_NAME, headRules); checkArtifactMap(); } /** * Initializes a {@link ParserModel} instance via given parameters. * * @param languageCode An ISO conform language code. * @param buildModel A valid {@link MaxentModel} used to build. * @param checkModel A valid {@link MaxentModel} used to check. * @param parserTagger A valid {@link POSModel} to parse. * @param chunkerTagger A valid {@link ChunkerModel} to chunk. * @param headRules The {@link HeadRules} to to use for parsing. * @param modelType The {@link ParserType} to use. */ public ParserModel(String languageCode, MaxentModel buildModel, MaxentModel checkModel, MaxentModel attachModel, POSModel parserTagger, ChunkerModel chunkerTagger, HeadRules headRules, ParserType modelType) { this (languageCode, buildModel, checkModel, attachModel, parserTagger, chunkerTagger, headRules, modelType, null); } /** * Initializes a {@link ParserModel} instance via given parameters. * * @param languageCode An ISO conform language code. * @param buildModel A valid {@link MaxentModel} used to build. * @param checkModel A valid {@link MaxentModel} used to check. * @param parserTagger A valid {@link POSModel} to parse. * @param chunkerTagger A valid {@link ChunkerModel} to chunk. * @param headRules The {@link HeadRules} to to use for parsing. * @param type The {@link ParserType} to use. * @param manifestInfoEntries Additional information kept in the manifest. */ public ParserModel(String languageCode, MaxentModel buildModel, MaxentModel checkModel, POSModel parserTagger, ChunkerModel chunkerTagger, HeadRules headRules, ParserType type, Map manifestInfoEntries) { this (languageCode, buildModel, checkModel, null, parserTagger, chunkerTagger, headRules, type, manifestInfoEntries); } /** * Initializes a {@link ParserModel} instance via a valid {@link InputStream}. * * @param in The {@link InputStream} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public ParserModel(InputStream in) throws IOException { super(COMPONENT_NAME, in); } /** * Initializes a {@link ParserModel} instance via a valid {@link File}. * * @param modelFile The {@link File} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public ParserModel(File modelFile) throws IOException { super(COMPONENT_NAME, modelFile); } /** * Initializes a {@link ParserModel} instance via a valid {@link Path}. * * @param modelPath The {@link Path} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public ParserModel(Path modelPath) throws IOException { this(modelPath.toFile()); } /** * Initializes a {@link ParserModel} instance via a valid {@link URL}. * * @param modelURL The {@link URL} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public ParserModel(URL modelURL) throws IOException { super(COMPONENT_NAME, modelURL); } @Override protected void createArtifactSerializers(Map serializers) { super.createArtifactSerializers(serializers); // In 1.6.x the head rules artifact is serialized with the new API // which uses the Serializable interface // This change is not backward compatible with the 1.5.x models. // In order to load 1.5.x model the English head rules serializer must be // put on the serializer map. if (getVersion().getMajor() == 1 && getVersion().getMinor() == 5) { serializers.put("headrules", new HeadRulesSerializer()); } serializers.put("postagger", new POSModelSerializer()); serializers.put("chunker", new ChunkerModelSerializer()); } /** * @return Retrieves the {@link ParserType} as configured in the manifest. */ public ParserType getParserType() { return ParserType.parse(getManifestProperty(PARSER_TYPE)); } /** * @return Retrieves the {@link MaxentModel build model} as configured in the manifest. */ public MaxentModel getBuildModel() { return (MaxentModel) artifactMap.get(BUILD_MODEL_ENTRY_NAME); } /** * @return Retrieves the {@link MaxentModel check model} as configured in the manifest. */ public MaxentModel getCheckModel() { return (MaxentModel) artifactMap.get(CHECK_MODEL_ENTRY_NAME); } /** * @return Retrieves the {@link MaxentModel attach model} as configured in the manifest. */ public MaxentModel getAttachModel() { return (MaxentModel) artifactMap.get(ATTACH_MODEL_ENTRY_NAME); } /** * @return Retrieves the {@link POSModel} as configured in the manifest. */ public POSModel getParserTaggerModel() { return (POSModel) artifactMap.get(PARSER_TAGGER_MODEL_ENTRY_NAME); } /** * @return Retrieves the {@link ChunkerModel} as configured in the manifest. */ public ChunkerModel getParserChunkerModel() { return (ChunkerModel) artifactMap.get(CHUNKER_TAGGER_MODEL_ENTRY_NAME); } /** * @return Retrieves the {@link HeadRules} as configured in the manifest. */ public HeadRules getHeadRules() { return (opennlp.tools.parser.HeadRules) artifactMap.get(HEAD_RULES_MODEL_ENTRY_NAME); } // TODO: (All!) Update model methods should make sure properties are copied correctly ... /** * Instantiates a new {@link ParserModel} instance from the existing configuration * with the specified {@code buildModel} for exchange. * * @param buildModel A valid {@link MaxentModel} used to build. * @return A valid {@link ParserModel}. */ public ParserModel updateBuildModel(MaxentModel buildModel) { return new ParserModel(getLanguage(), buildModel, getCheckModel(), getAttachModel(), getParserTaggerModel(), getParserChunkerModel(), getHeadRules(), getParserType()); } /** * Instantiates a new {@link ParserModel} instance from the existing configuration * with the specified {@code checkModel} for exchange. * * @param checkModel A valid {@link MaxentModel} used to check. * @return A valid {@link ParserModel}. */ public ParserModel updateCheckModel(MaxentModel checkModel) { return new ParserModel(getLanguage(), getBuildModel(), checkModel, getAttachModel(), getParserTaggerModel(), getParserChunkerModel(), getHeadRules(), getParserType()); } /** * Instantiates a new {@link ParserModel} instance from the existing configuration * with the specified {@code taggerModel} for exchange. * * @param taggerModel A valid {@link POSModel} used to tag. * @return A valid {@link ParserModel}. */ public ParserModel updateTaggerModel(POSModel taggerModel) { return new ParserModel(getLanguage(), getBuildModel(), getCheckModel(), getAttachModel(), taggerModel, getParserChunkerModel(), getHeadRules(), getParserType()); } /** * Instantiates a new {@link ParserModel} instance from the existing configuration * with the specified {@code chunkModel} for exchange. * * @param chunkModel A valid {@link ChunkerModel} used to tag. * @return A valid {@link ParserModel}. */ public ParserModel updateChunkerModel(ChunkerModel chunkModel) { return new ParserModel(getLanguage(), getBuildModel(), getCheckModel(), getAttachModel(), getParserTaggerModel(), chunkModel, getHeadRules(), getParserType()); } @Override protected void validateArtifactMap() throws InvalidFormatException { super.validateArtifactMap(); if (!(artifactMap.get(BUILD_MODEL_ENTRY_NAME) instanceof AbstractModel)) { throw new InvalidFormatException("Missing the build model!"); } ParserType modelType = getParserType(); if (modelType != null) { if (ParserType.CHUNKING.equals(modelType)) { if (artifactMap.get(ATTACH_MODEL_ENTRY_NAME) != null) throw new InvalidFormatException("attachModel must be null for chunking parser!"); } else if (ParserType.TREEINSERT.equals(modelType)) { if (!(artifactMap.get(ATTACH_MODEL_ENTRY_NAME) instanceof AbstractModel)) throw new InvalidFormatException("attachModel must not be null!"); } else { throw new InvalidFormatException("Unknown ParserType '" + modelType + "'!"); } } else { throw new InvalidFormatException("Missing the parser type property!"); } if (!(artifactMap.get(CHECK_MODEL_ENTRY_NAME) instanceof AbstractModel)) { throw new InvalidFormatException("Missing the check model!"); } if (!(artifactMap.get(PARSER_TAGGER_MODEL_ENTRY_NAME) instanceof POSModel)) { throw new InvalidFormatException("Missing the tagger model!"); } if (!(artifactMap.get(CHUNKER_TAGGER_MODEL_ENTRY_NAME) instanceof ChunkerModel)) { throw new InvalidFormatException("Missing the chunker model!"); } if (!(artifactMap.get(HEAD_RULES_MODEL_ENTRY_NAME) instanceof HeadRules)) { throw new InvalidFormatException("Missing the head rules!"); } } @Override public int hashCode() { return Objects.hash(artifactMap.get(MANIFEST_ENTRY), artifactMap.get(PARSER_TAGGER_MODEL_ENTRY_NAME)); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof ParserModel model) { Map artifactMapToCheck = model.artifactMap; AbstractModel abstractModel = (AbstractModel) artifactMapToCheck.get(BUILD_MODEL_ENTRY_NAME); return artifactMap.get(MANIFEST_ENTRY).equals(artifactMapToCheck.get(MANIFEST_ENTRY)) && artifactMap.get(BUILD_MODEL_ENTRY_NAME).equals(abstractModel); } return false; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/ParserType.java0100644 0000000 0000000 00000002567 14523004075 032064 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; /** * Enumeration of supported {@link Parser} types. */ public enum ParserType { CHUNKING, TREEINSERT; /** * @param type The string representation of the requested {@link ParserType}. * @return The {@link ParserType} matching {@code type}, {@code null} otherwise. */ public static ParserType parse(String type) { if (ParserType.CHUNKING.name().equals(type)) { return ParserType.CHUNKING; } else if (ParserType.TREEINSERT.name().equals(type)) { return ParserType.TREEINSERT; } else { return null; } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/PosSampleStream.java0100644 0000000 0000000 00000003375 14523004075 033043 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.io.IOException; import opennlp.tools.postag.POSSample; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; public class PosSampleStream extends FilterObjectStream { /** * Initializes a {@link PosSampleStream instance}. * * @param in A {@link ObjectStream stream} used as input. */ public PosSampleStream(ObjectStream in) { super(in); } @Override public POSSample read() throws IOException { Parse parse = samples.read(); if (parse != null) { Parse[] nodes = parse.getTagNodes(); String[] toks = new String[nodes.length]; String[] preds = new String[nodes.length]; for (int ti = 0; ti < nodes.length; ti++) { Parse tok = nodes[ti]; toks[ti] = tok.getCoveredText(); preds[ti] = tok.getType(); } return new POSSample(toks, preds); } else { return null; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_parser_chunking_B0100644 0000000 0000000 00000000167 14523004075 032576 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/chunking/BuildContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/chunking/BuildContextGener0100644 0000000 0000000 00000023122 14523004075 034227 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser.chunking; import java.util.ArrayList; import java.util.Collection; import java.util.List; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.parser.AbstractContextGenerator; import opennlp.tools.parser.Cons; import opennlp.tools.parser.Parse; import opennlp.tools.util.StringList; /** * Generates predictive contexts for deciding how constituents should be combined. * * @see AbstractContextGenerator */ public class BuildContextGenerator extends AbstractContextGenerator { private Dictionary dict; private String[] unigram; private String[] bigram; private String[] trigram; /** * Instantiates a {@link BuildContextGenerator} for making decisions about combining constituents. */ public BuildContextGenerator() { super(); zeroBackOff = false; useLabel = true; } /** * Instantiates a {@link BuildContextGenerator} for making decisions about combining constituents * using a {@link Dictionary}. * * @param dict A {@link Dictionary} to be used during context generation. */ public BuildContextGenerator(Dictionary dict) { this(); this.dict = dict; unigram = new String[1]; bigram = new String[2]; trigram = new String[3]; } public String[] getContext(Object o) { Object[] params = (Object[]) o; return getContext((Parse[]) params[0], (Integer) params[1]); } /** * Finds the predictive context used to determine how constituent at the specified {@code index} * should be combined with other constituents. * * @param constituents The {@link Parse constituents} which have yet to be combined into new constituents. * @param index The index of the constituent which is being considered. * @return The context for building constituents at the specified {@code index}. */ public String[] getContext(Parse[] constituents, int index) { List features = new ArrayList<>(100); int ps = constituents.length; // cons(-2), cons(-1), cons(0), cons(1), cons(2) // cons(-2) Collection punct2s = null; Collection punct_2s = null; Parse p_2 = null; if (index - 2 >= 0) { p_2 = constituents[index - 2]; } Parse p_1 = null; if (index - 1 >= 0) { p_1 = constituents[index - 1]; punct_2s = p_1.getPreviousPunctuationSet(); } Parse p0 = constituents[index]; Collection punct_1s = p0.getPreviousPunctuationSet(); Collection punct1s = p0.getNextPunctuationSet(); Parse p1 = null; if (index + 1 < ps) { p1 = constituents[index + 1]; punct2s = p1.getNextPunctuationSet(); } Parse p2 = null; if (index + 2 < ps) { p2 = constituents[index + 2]; } boolean u_2 = true; boolean u_1 = true; boolean u0 = true; boolean u1 = true; boolean u2 = true; boolean b_2_1 = true; boolean b_10 = true; boolean b01 = true; boolean b12 = true; boolean t_2_10 = true; boolean t_101 = true; boolean t012 = true; if (dict != null) { if (p_2 != null) { unigram[0] = p_2.getHead().getCoveredText(); u_2 = dict.contains(new StringList(unigram)); } if (p2 != null) { unigram[0] = p2.getHead().getCoveredText(); u2 = dict.contains(new StringList(unigram)); } unigram[0] = p0.getHead().getCoveredText(); u0 = dict.contains(new StringList(unigram)); if (p_2 != null && p_1 != null) { bigram[0] = p_2.getHead().getCoveredText(); bigram[1] = p_1.getHead().getCoveredText(); b_2_1 = dict.contains(new StringList(bigram)); trigram[0] = p_2.getHead().getCoveredText(); trigram[1] = p_1.getHead().getCoveredText(); trigram[2] = p0.getHead().getCoveredText(); t_2_10 = dict.contains(new StringList(trigram)); } if (p_1 != null && p1 != null) { trigram[0] = p_1.getHead().getCoveredText(); trigram[1] = p0.getHead().getCoveredText(); trigram[2] = p1.getHead().getCoveredText(); t_101 = dict.contains(new StringList(trigram)); } if (p_1 != null) { unigram[0] = p_1.getHead().getCoveredText(); u_1 = dict.contains(new StringList(unigram)); //extra check for 2==null case b_2_1 = b_2_1 && u_1 & u_2; t_2_10 = t_2_10 && u_1 & u_2 & u0; t_101 = t_101 && u_1 & u0 && u1; bigram[0] = p_1.getHead().getCoveredText(); bigram[1] = p0.getHead().getCoveredText(); b_10 = dict.contains(new StringList(bigram)) && u_1 && u0; } if (p1 != null && p2 != null) { bigram[0] = p1.getHead().getCoveredText(); bigram[1] = p2.getHead().getCoveredText(); b12 = dict.contains(new StringList(bigram)); trigram[0] = p0.getHead().getCoveredText(); trigram[1] = p1.getHead().getCoveredText(); trigram[2] = p2.getHead().getCoveredText(); t012 = dict.contains(new StringList(trigram)); } if (p1 != null) { unigram[0] = p1.getHead().getCoveredText(); u1 = dict.contains(new StringList(unigram)); //extra check for 2==null case b12 = b12 && u1 && u2; t012 = t012 && u1 && u2 && u0; t_101 = t_101 && u0 && u_1 && u1; bigram[0] = p0.getHead().getCoveredText(); bigram[1] = p1.getHead().getCoveredText(); b01 = dict.contains(new StringList(bigram)); b01 = b01 && u0 && u1; } } String consp_2 = cons(p_2, -2); String consp_1 = cons(p_1, -1); String consp0 = cons(p0, 0); String consp1 = cons(p1, 1); String consp2 = cons(p2, 2); String consbop_2 = consbo(p_2, -2); String consbop_1 = consbo(p_1, -1); String consbop0 = consbo(p0, 0); String consbop1 = consbo(p1, 1); String consbop2 = consbo(p2, 2); Cons c_2 = new Cons(consp_2,consbop_2,-2,u_2); Cons c_1 = new Cons(consp_1,consbop_1,-1,u_1); Cons c0 = new Cons(consp0,consbop0,0,u0); Cons c1 = new Cons(consp1,consbop1,1,u1); Cons c2 = new Cons(consp2,consbop2,2,u2); //default features.add("default"); //first constituent label //features.add("fl="+constituents[0].getLabel()); // features.add("stage=cons(i)"); // cons(-2), cons(-1), cons(0), cons(1), cons(2) if (u0) features.add(consp0); features.add(consbop0); if (u_2) features.add(consp_2); features.add(consbop_2); if (u_1) features.add(consp_1); features.add(consbop_1); if (u1) features.add(consp1); features.add(consbop1); if (u2) features.add(consp2); features.add(consbop2); //cons(0),cons(1) cons2(features,c0,c1,punct1s,b01); //cons(-1),cons(0) cons2(features,c_1,c0,punct_1s,b_10); //features.add("stage=cons(0),cons(1),cons(2)"); cons3(features,c0,c1,c2,punct1s,punct2s,t012,b01,b12); cons3(features,c_2,c_1,c0,punct_2s,punct_1s,t_2_10,b_2_1,b_10); cons3(features,c_1,c0,c1,punct_1s,punct1s,t_101,b_10,b01); //features.add("stage=other"); String p0Tag = p0.getType(); if (p0Tag.equals("-RRB-")) { for (int pi = index - 1; pi >= 0; pi--) { Parse p = constituents[pi]; if (p.getType().equals("-LRB-")) { features.add("bracketsmatch"); break; } if (p.getLabel().startsWith(Parser.START)) { break; } } } if (p0Tag.equals("-RCB-")) { for (int pi = index - 1; pi >= 0; pi--) { Parse p = constituents[pi]; if (p.getType().equals("-LCB-")) { features.add("bracketsmatch"); break; } if (p.getLabel().startsWith(Parser.START)) { break; } } } if (p0Tag.equals("''")) { for (int pi = index - 1; pi >= 0; pi--) { Parse p = constituents[pi]; if (p.getType().equals("``")) { features.add("quotesmatch"); break; } if (p.getLabel().startsWith(Parser.START)) { break; } } } if (p0Tag.equals("'")) { for (int pi = index - 1; pi >= 0; pi--) { Parse p = constituents[pi]; if (p.getType().equals("`")) { features.add("quotesmatch"); break; } if (p.getLabel().startsWith(Parser.START)) { break; } } } if (p0Tag.equals(",")) { for (int pi = index - 1; pi >= 0; pi--) { Parse p = constituents[pi]; if (p.getType().equals(",")) { features.add("iscomma"); break; } if (p.getLabel().startsWith(Parser.START)) { break; } } } if (p0Tag.equals(".") && index == ps - 1) { for (int pi = index - 1; pi >= 0; pi--) { Parse p = constituents[pi]; if (p.getLabel().startsWith(Parser.START)) { if (pi == 0) { features.add("endofsentence"); } break; } } } return features.toArray(new String[0]); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_parser_chunking_C0100644 0000000 0000000 00000000167 14523004075 032577 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/chunking/CheckContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/chunking/CheckContextGener0100644 0000000 0000000 00000010501 14523004075 034202 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser.chunking; import java.util.ArrayList; import java.util.Collection; import java.util.List; import opennlp.tools.parser.AbstractContextGenerator; import opennlp.tools.parser.Parse; /** * Generates predictive context for deciding when a constituent is complete. * * @see AbstractContextGenerator */ public class CheckContextGenerator extends AbstractContextGenerator { /** * Instantiates a {@link CheckContextGenerator} for generating predictive context for deciding * when a constituent is complete. */ public CheckContextGenerator() { super(); } public String[] getContext(Object o) { Object[] params = (Object[]) o; return getContext((Parse[]) params[0], (String) params[1], (Integer) params[2], (Integer) params[3]); } /** * Finds predictive context for deciding whether the specified constituents between the * specified {@code start} and {@code end} index can be combined to form a * new constituent of the specified {@code type}. * * @param constituents The {@link Parse constituents} which have yet to be combined into new constituents. * @param type The type of the new constituent proposed. * @param start The first constituent of the proposed constituent. * @param end The last constituent of the proposed constituent. * @return The predictive context for deciding whether a new constituent should be created. */ public String[] getContext(Parse[] constituents, String type, int start, int end) { int ps = constituents.length; List features = new ArrayList<>(100); //default features.add("default"); //first constituent label features.add("fl=" + constituents[0].getLabel()); Parse pstart = constituents[start]; Parse pend = constituents[end]; checkcons(pstart, "begin", type, features); checkcons(pend, "last", type, features); StringBuilder production = new StringBuilder(20); StringBuilder punctProduction = new StringBuilder(20); production.append("p=").append(type).append("->"); punctProduction.append("pp=").append(type).append("->"); for (int pi = start; pi < end; pi++) { Parse p = constituents[pi]; checkcons(p, pend, type, features); production.append(p.getType()).append(","); punctProduction.append(p.getType()).append(","); Collection nextPunct = p.getNextPunctuationSet(); if (nextPunct != null) { for (Parse punct : nextPunct) { punctProduction.append(punct.getType()).append(","); } } } production.append(pend.getType()); punctProduction.append(pend.getType()); features.add(production.toString()); features.add(punctProduction.toString()); Parse p_2 = null; Parse p_1 = null; Parse p1 = null; Parse p2 = null; Collection p1s = constituents[end].getNextPunctuationSet(); Collection p2s = null; Collection p_1s = constituents[start].getPreviousPunctuationSet(); Collection p_2s = null; if (start - 2 >= 0) { p_2 = constituents[start - 2]; } if (start - 1 >= 0) { p_1 = constituents[start - 1]; p_2s = p_1.getPreviousPunctuationSet(); } if (end + 1 < ps) { p1 = constituents[end + 1]; p2s = p1.getNextPunctuationSet(); } if (end + 2 < ps) { p2 = constituents[end + 2]; } surround(p_1, -1, type, p_1s, features); surround(p_2, -2, type, p_2s, features); surround(p1, 1, type, p1s, features); surround(p2, 2, type, p2s, features); return features.toArray(new String[0]); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/chunking/Parser.java0100644 0000000 0000000 00000037716 14523004075 033034 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser.chunking; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.chunker.Chunker; import opennlp.tools.chunker.ChunkerME; import opennlp.tools.chunker.ChunkerModel; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.ml.BeamSearch; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.parser.AbstractBottomUpParser; import opennlp.tools.parser.ChunkSampleStream; import opennlp.tools.parser.HeadRules; import opennlp.tools.parser.Parse; import opennlp.tools.parser.ParserChunkerFactory; import opennlp.tools.parser.ParserEventTypeEnum; import opennlp.tools.parser.ParserModel; import opennlp.tools.parser.ParserType; import opennlp.tools.parser.PosSampleStream; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSTagger; import opennlp.tools.postag.POSTaggerFactory; import opennlp.tools.postag.POSTaggerME; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; import opennlp.tools.util.TrainingParameters; /** * A shift reduce style {@link opennlp.tools.parser.Parser} implementation * based on Adwait Ratnaparkhi's 1998 thesis. * * @see AbstractBottomUpParser * @see opennlp.tools.parser.Parser */ public class Parser extends AbstractBottomUpParser { private static final Logger logger = LoggerFactory.getLogger(Parser.class); private final MaxentModel buildModel; private final MaxentModel checkModel; private final BuildContextGenerator buildContextGenerator; private final CheckContextGenerator checkContextGenerator; private final double[] bprobs; private final double[] cprobs; private static final String TOP_START = START + TOP_NODE; private final int topStartIndex; private final Map startTypeMap; private final Map contTypeMap; private final int completeIndex; private final int incompleteIndex; /** * Instantiates a {@link Parser} via a given {@code model} and * other configuration parameters. Uses the default implementations of * {@link POSTaggerME} and {@link ChunkerME}. * * @param model The {@link ParserModel} to use. * @param beamSize The number of different parses kept during parsing. * @param advancePercentage The minimal amount of probability mass which advanced outcomes * must represent. Only outcomes which contribute to the top * {@code advancePercentage} will be explored. * @throws IllegalStateException Thrown if the {@link ParserType} is not supported. * @see ParserModel * @see POSTaggerME * @see ChunkerME */ public Parser(ParserModel model, int beamSize, double advancePercentage) { this(model.getBuildModel(), model.getCheckModel(), new POSTaggerME(model.getParserTaggerModel()), new ChunkerME(model.getParserChunkerModel()), model.getHeadRules(), beamSize, advancePercentage); } /** * Instantiates a {@link Parser} via a given {@code model}. * Uses the default implementations of {@link POSTaggerME} and {@link ChunkerME} * and default values for {@code beamSize} and {@code advancePercentage}. * * @param model The {@link ParserModel} to use. * @throws IllegalStateException Thrown if the {@link ParserType} is not supported. * @see ParserModel * @see POSTaggerME * @see ChunkerME */ public Parser(ParserModel model) { this(model, defaultBeamSize, defaultAdvancePercentage); } /** * Instantiates a {@link Parser} via a given {@code model} and other configuration parameters. * * @param buildModel A valid {@link MaxentModel} used to build. * @param checkModel A valid {@link MaxentModel} used to check. * @param tagger A valid {@link POSModel} used to tag. * @param chunker A valid {@link ChunkerModel} used to chunk. * @param headRules The {@link HeadRules} for head word percolation. * @param beamSize The number of different parses kept during parsing. * @param advancePercentage The minimal amount of probability mass which advanced outcomes * must represent. Only outcomes which contribute to the top * {@code advancePercentage} will be explored. * @see POSTagger * @see Chunker */ private Parser(MaxentModel buildModel, MaxentModel checkModel, POSTagger tagger, Chunker chunker, HeadRules headRules, int beamSize, double advancePercentage) { super(tagger, chunker, headRules, beamSize, advancePercentage); this.buildModel = buildModel; this.checkModel = checkModel; bprobs = new double[buildModel.getNumOutcomes()]; cprobs = new double[checkModel.getNumOutcomes()]; this.buildContextGenerator = new BuildContextGenerator(); this.checkContextGenerator = new CheckContextGenerator(); startTypeMap = new HashMap<>(); contTypeMap = new HashMap<>(); for (int boi = 0, bon = buildModel.getNumOutcomes(); boi < bon; boi++) { String outcome = buildModel.getOutcome(boi); if (outcome.startsWith(START)) { if (logger.isTraceEnabled()) { logger.trace("startMap {} -> {} ", outcome, outcome.substring(START.length())); } startTypeMap.put(outcome, outcome.substring(START.length())); } else if (outcome.startsWith(CONT)) { if (logger.isTraceEnabled()) { logger.trace("contMap {} -> {}", outcome, outcome.substring(CONT.length())); } contTypeMap.put(outcome, outcome.substring(CONT.length())); } } topStartIndex = buildModel.getIndex(TOP_START); completeIndex = checkModel.getIndex(COMPLETE); incompleteIndex = checkModel.getIndex(INCOMPLETE); } @Override protected void advanceTop(Parse p) { buildModel.eval(buildContextGenerator.getContext(p.getChildren(), 0), bprobs); p.addProb(StrictMath.log(bprobs[topStartIndex])); checkModel.eval(checkContextGenerator.getContext(p.getChildren(), TOP_NODE, 0, 0), cprobs); p.addProb(StrictMath.log(cprobs[completeIndex])); p.setType(TOP_NODE); } @Override protected Parse[] advanceParses(final Parse p, double probMass) { double q = 1 - probMass; /* The closest previous node which has been labeled as a start node. */ Parse lastStartNode = null; /* The index of the closest previous node which has been labeled as a start node. */ int lastStartIndex = -1; /* The type of the closest previous node which has been labeled as a start node. */ String lastStartType = null; /* The index of the node which will be labeled in this iteration of advancing the parse. */ int advanceNodeIndex; /* The node which will be labeled in this iteration of advancing the parse. */ Parse advanceNode = null; Parse[] originalChildren = p.getChildren(); Parse[] children = collapsePunctuation(originalChildren, punctSet); int numNodes = children.length; if (numNodes == 0) { return null; } //determines which node needs to be labeled and prior labels. for (advanceNodeIndex = 0; advanceNodeIndex < numNodes; advanceNodeIndex++) { advanceNode = children[advanceNodeIndex]; if (advanceNode.getLabel() == null) { break; } else if (startTypeMap.containsKey(advanceNode.getLabel())) { lastStartType = startTypeMap.get(advanceNode.getLabel()); lastStartNode = advanceNode; lastStartIndex = advanceNodeIndex; if (logger.isTraceEnabled()) { logger.trace("lastStart {} {} {}", lastStartIndex, lastStartNode.getLabel(), lastStartNode.getProb()); } } } int originalAdvanceIndex = mapParseIndex(advanceNodeIndex, children, originalChildren); List newParsesList = new ArrayList<>(buildModel.getNumOutcomes()); //call build buildModel.eval(buildContextGenerator.getContext(children, advanceNodeIndex), bprobs); double bprobSum = 0; while (bprobSum < probMass) { // The largest unadvanced labeling. int max = 0; for (int pi = 1; pi < bprobs.length; pi++) { //for each build outcome if (bprobs[pi] > bprobs[max]) { max = pi; } } if (bprobs[max] == 0) { break; } double bprob = bprobs[max]; bprobs[max] = 0; //zero out so new max can be found bprobSum += bprob; String tag = buildModel.getOutcome(max); if (logger.isTraceEnabled()) { logger.trace("trying {} {} list={}", tag, bprobSum, tag); } if (max == topStartIndex) { // can't have top until complete continue; } if (logger.isTraceEnabled()) { logger.trace("{} {}", tag, bprob); } if (startTypeMap.containsKey(tag)) { //update last start lastStartIndex = advanceNodeIndex; lastStartNode = advanceNode; lastStartType = startTypeMap.get(tag); } else if (contTypeMap.containsKey(tag)) { if (lastStartNode == null || !lastStartType.equals(contTypeMap.get(tag))) { continue; //Cont must match previous start or continue } } Parse newParse1 = (Parse) p.clone(); //clone parse if (createDerivationString) { newParse1.getDerivation().append(max).append("-"); } //replace constituent being labeled to create new derivation newParse1.setChild(originalAdvanceIndex, tag); newParse1.addProb(StrictMath.log(bprob)); //check checkModel.eval(checkContextGenerator.getContext( collapsePunctuation(newParse1.getChildren(), punctSet), lastStartType, lastStartIndex, advanceNodeIndex), cprobs); if (logger.isTraceEnabled()) { String[] context = checkContextGenerator.getContext(newParse1.getChildren(), lastStartType, lastStartIndex, advanceNodeIndex); logger.trace("check {} {} {} {} {}", lastStartType, cprobs[completeIndex], cprobs[incompleteIndex], tag, java.util.Arrays.asList(context)); } Parse newParse2; if (cprobs[completeIndex] > q) { //make sure a reduce is likely newParse2 = (Parse) newParse1.clone(); if (createDerivationString) { newParse2.getDerivation().append(1).append("."); } newParse2.addProb(StrictMath.log(cprobs[completeIndex])); Parse[] cons = new Parse[advanceNodeIndex - lastStartIndex + 1]; boolean flat = true; //first cons[0] = lastStartNode; flat &= cons[0].isPosTag(); //last cons[advanceNodeIndex - lastStartIndex] = advanceNode; flat &= cons[advanceNodeIndex - lastStartIndex].isPosTag(); //middle for (int ci = 1; ci < advanceNodeIndex - lastStartIndex; ci++) { cons[ci] = children[ci + lastStartIndex]; flat &= cons[ci].isPosTag(); } if (!flat) { //flat chunks are done by chunker //check for top node to include end and begining punctuation if (lastStartIndex == 0 && advanceNodeIndex == numNodes - 1) { if (logger.isTraceEnabled()) { logger.trace("ParserME.advanceParses: reducing entire span: {} {} {}", new Span(lastStartNode.getSpan().getStart(), advanceNode.getSpan().getEnd()), lastStartType, java.util.Arrays.asList(children)); } newParse2.insert(new Parse(p.getText(), p.getSpan(), lastStartType, cprobs[1], headRules.getHead(cons, lastStartType))); } else { newParse2.insert(new Parse(p.getText(), new Span(lastStartNode.getSpan().getStart(), advanceNode.getSpan().getEnd()), lastStartType, cprobs[1], headRules.getHead(cons, lastStartType))); } newParsesList.add(newParse2); } } if (cprobs[incompleteIndex] > q) { //make sure a shift is likely if (createDerivationString) { newParse1.getDerivation().append(0).append("."); } if (advanceNodeIndex != numNodes - 1) { //can't shift last element newParse1.addProb(StrictMath.log(cprobs[incompleteIndex])); newParsesList.add(newParse1); } } } Parse[] newParses = new Parse[newParsesList.size()]; newParsesList.toArray(newParses); return newParses; } public static void mergeReportIntoManifest(Map manifest, Map report, String namespace) { for (Map.Entry entry : report.entrySet()) { manifest.put(namespace + "." + entry.getKey(), entry.getValue()); } } /** * Starts a training of a {@link ParserModel}. * * @param languageCode An ISO conform language code. * @param parseSamples The {@link ObjectStream samples} as input. * @param rules The {@link HeadRules} to use. * @param mlParams The {@link TrainingParameters parameters} for training. * @return A valid {@link ParserModel}. * @throws IOException Thrown if IO errors occurred during training. */ public static ParserModel train(String languageCode, ObjectStream parseSamples, HeadRules rules, TrainingParameters mlParams) throws IOException { logger.info("Building dictionary"); Dictionary mdict = buildDictionary(parseSamples, rules, mlParams); parseSamples.reset(); Map manifestInfoEntries = new HashMap<>(); // build logger.info("Training builder"); ObjectStream bes = new ParserEventStream(parseSamples, rules, ParserEventTypeEnum.BUILD, mdict); Map buildReportMap = new HashMap<>(); EventTrainer buildTrainer = TrainerFactory.getEventTrainer(mlParams.getParameters("build"), buildReportMap); MaxentModel buildModel = buildTrainer.train(bes); mergeReportIntoManifest(manifestInfoEntries, buildReportMap, "build"); parseSamples.reset(); // tag TrainingParameters posTaggerParams = mlParams.getParameters("tagger"); if (!posTaggerParams.getObjectSettings().containsKey(BeamSearch.BEAM_SIZE_PARAMETER)) { mlParams.put("tagger", BeamSearch.BEAM_SIZE_PARAMETER, 10); } POSModel posModel = POSTaggerME.train(languageCode, new PosSampleStream(parseSamples), mlParams.getParameters("tagger"), new POSTaggerFactory()); parseSamples.reset(); // chunk ChunkerModel chunkModel = ChunkerME.train(languageCode, new ChunkSampleStream(parseSamples), mlParams.getParameters("chunker"), new ParserChunkerFactory()); parseSamples.reset(); // check logger.info("Training checker"); ObjectStream kes = new ParserEventStream(parseSamples, rules, ParserEventTypeEnum.CHECK); Map checkReportMap = new HashMap<>(); EventTrainer checkTrainer = TrainerFactory.getEventTrainer(mlParams.getParameters("check"), checkReportMap); MaxentModel checkModel = checkTrainer.train(kes); mergeReportIntoManifest(manifestInfoEntries, checkReportMap, "check"); return new ParserModel(languageCode, buildModel, checkModel, posModel, chunkModel, rules, ParserType.CHUNKING, manifestInfoEntries); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_parser_chunking_P0100644 0000000 0000000 00000000163 14523004075 032610 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/chunking/ParserEventStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/chunking/ParserEventStream0100644 0000000 0000000 00000015476 14523004075 034271 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser.chunking; import java.util.Arrays; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.ml.model.Event; import opennlp.tools.parser.AbstractBottomUpParser; import opennlp.tools.parser.AbstractParserEventStream; import opennlp.tools.parser.HeadRules; import opennlp.tools.parser.Parse; import opennlp.tools.parser.ParserEventTypeEnum; import opennlp.tools.util.ObjectStream; /** * Wrapper class for one of four {@link Parser shift-reduce parser} event streams. * The particular {@link ParserEventTypeEnum event type} is specified at construction. */ public class ParserEventStream extends AbstractParserEventStream { private static final Logger logger = LoggerFactory.getLogger(ParserEventStream.class); protected BuildContextGenerator bcg; protected CheckContextGenerator kcg; /** * Instantiates a {@link ParserEventStream} based on the specified data stream * of the {@link ParserEventTypeEnum type} using {@link HeadRules head rules}. * * @param d A 1-parse-per-line Penn Treebank Style parse. * @param rules The {@link HeadRules head rules} to use. * @param etype The {@link ParserEventTypeEnum type} of events desired. * @param dict A tri-gram {@link Dictionary} to reduce feature generation. * * @see ParserEventTypeEnum */ public ParserEventStream(ObjectStream d, HeadRules rules, ParserEventTypeEnum etype, Dictionary dict) { super(d,rules,etype,dict); } /** * Instantiates a {@link ParserEventStream} based on the specified data stream * of the {@link ParserEventTypeEnum type} using {@link HeadRules head rules}. * * @param d A 1-parse-per-line Penn Treebank Style parse. * @param rules The {@link HeadRules head rules} to use. * @param etype The {@link ParserEventTypeEnum type} of events desired. * * @see ParserEventTypeEnum */ public ParserEventStream(ObjectStream d, HeadRules rules, ParserEventTypeEnum etype) { this (d,rules,etype,null); } @Override protected void init() { if (etype == ParserEventTypeEnum.BUILD) { this.bcg = new BuildContextGenerator(dict); } else if (etype == ParserEventTypeEnum.CHECK) { this.kcg = new CheckContextGenerator(); } } /** * @param child The child {@link Parse}. * @param parent The parent {@link Parse}. * * @return {@code true} if the specified {@code child} is the first child of the * specified {@code parent}, {@code false} otherwise. */ protected boolean firstChild(Parse child, Parse parent) { return AbstractBottomUpParser.collapsePunctuation(parent.getChildren(), punctSet)[0] == child; } public static Parse[] reduceChunks(Parse[] chunks, int ci, Parse parent) { String type = parent.getType(); // perform reduce int reduceStart = ci; int reduceEnd = ci; while (reduceStart >= 0 && chunks[reduceStart].getParent() == parent) { reduceStart--; } reduceStart++; Parse[] reducedChunks; if (!type.equals(AbstractBottomUpParser.TOP_NODE)) { //total - num_removed + 1 (for new node) reducedChunks = new Parse[chunks.length - (reduceEnd - reduceStart + 1) + 1]; //insert nodes before reduction System.arraycopy(chunks, 0, reducedChunks, 0, reduceStart); //insert reduced node reducedChunks[reduceStart] = parent; //propagate punctuation sets parent.setPrevPunctuation(chunks[reduceStart].getPreviousPunctuationSet()); parent.setNextPunctuation(chunks[reduceEnd].getNextPunctuationSet()); //insert nodes after reduction int ri = reduceStart + 1; for (int rci = reduceEnd + 1; rci < chunks.length; rci++) { reducedChunks[ri] = chunks[rci]; ri++; } ci = reduceStart - 1; //ci will be incremented at end of loop } else { reducedChunks = new Parse[0]; } return reducedChunks; } /** * Adds {@link Event events} for parsing (post tagging and chunking) * to the specified list of events for the specified parse chunks. * * @param parseEvents The {@link Event events} for the specified chunks. * @param chunks The incomplete {@link Parse parses} to be parsed. */ @Override protected void addParseEvents(List parseEvents, Parse[] chunks) { int ci = 0; while (ci < chunks.length) { if (logger.isTraceEnabled()) { logger.trace("parserEventStream.addParseEvents: chunks={}", Arrays.asList(chunks)); } Parse c = chunks[ci]; Parse parent = c.getParent(); if (parent != null) { String type = parent.getType(); String outcome; if (firstChild(c, parent)) { outcome = AbstractBottomUpParser.START + type; } else { outcome = AbstractBottomUpParser.CONT + type; } if (logger.isTraceEnabled()) { logger.trace("parserEventStream.addParseEvents: chunks[{}]={} label={} bcg={}", ci, c, outcome, bcg); } c.setLabel(outcome); if (etype == ParserEventTypeEnum.BUILD) { parseEvents.add(new Event(outcome, bcg.getContext(chunks, ci))); } int start = ci - 1; while (start >= 0 && chunks[start].getParent() == parent) { start--; } if (lastChild(c, parent)) { if (etype == ParserEventTypeEnum.CHECK) { parseEvents.add(new Event(Parser.COMPLETE, kcg.getContext( chunks, type, start + 1, ci))); } //perform reduce int reduceStart = ci; while (reduceStart >= 0 && chunks[reduceStart].getParent() == parent) { reduceStart--; } reduceStart++; chunks = reduceChunks(chunks,ci,parent); ci = reduceStart - 1; //ci will be incremented at end of loop } else { if (etype == ParserEventTypeEnum.CHECK) { parseEvents.add(new Event(Parser.INCOMPLETE, kcg.getContext(chunks, type, start + 1, ci))); } } } ci++; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_parser_chunking_p0100644 0000000 0000000 00000000156 14523004075 032652 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/chunking/package-info.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/chunking/package-info.java0100644 0000000 0000000 00000001666 14523004075 034117 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package containing code for performing full syntactic parsing using shift/reduce-style decisions. */ package opennlp.tools.parser.chunking; apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/lang/en/HeadRules.java0100644 0000000 0000000 00000022215 14523004075 033155 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser.lang.en; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; import java.util.Set; import java.util.Stack; import java.util.StringTokenizer; import opennlp.tools.parser.Constituent; import opennlp.tools.parser.GapLabeler; import opennlp.tools.parser.Parse; import opennlp.tools.parser.chunking.Parser; import opennlp.tools.util.model.ArtifactSerializer; import opennlp.tools.util.model.SerializableArtifact; /** * Class for storing the English {@link opennlp.tools.parser.HeadRules} associated with parsing. */ public class HeadRules implements opennlp.tools.parser.HeadRules, GapLabeler, SerializableArtifact { public static class HeadRulesSerializer implements ArtifactSerializer { public HeadRules create(InputStream in) throws IOException { return new HeadRules(new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8))); } public void serialize(opennlp.tools.parser.lang.en.HeadRules artifact, OutputStream out) throws IOException { artifact.serialize(new OutputStreamWriter(out, StandardCharsets.UTF_8)); } } private static class HeadRule { public final boolean leftToRight; public final String[] tags; public HeadRule(boolean l2r, String[] tags) { leftToRight = l2r; for (String tag : tags) { Objects.requireNonNull(tag, "tags must not contain null values"); } this.tags = tags; } @Override public int hashCode() { return Objects.hash(leftToRight, Arrays.hashCode(tags)); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof HeadRule rule) { return rule.leftToRight == leftToRight && Arrays.equals(rule.tags, tags); } return false; } } private Map headRules; private final Set punctSet; /** * Creates a new set of head rules based on the specified reader. * * @param rulesReader A {@link Reader} for a head rules file. * * @throws IOException Thrown f the head rules reader can not be read. */ public HeadRules(Reader rulesReader) throws IOException { BufferedReader in = new BufferedReader(rulesReader); readHeadRules(in); punctSet = new HashSet<>(); punctSet.add("."); punctSet.add(","); punctSet.add("``"); punctSet.add("''"); //punctSet.add(":"); } @Override public Set getPunctuationTags() { return punctSet; } @Override public Parse getHead(Parse[] constituents, String type) { if (Parser.TOK_NODE.equals(constituents[0].getType())) { return null; } HeadRule hr; if (type.equals("NP") || type.equals("NX")) { String[] tags1 = { "NN", "NNP", "NNPS", "NNS", "NX", "JJR", "POS" }; for (int ci = constituents.length - 1; ci >= 0; ci--) { for (int ti = tags1.length - 1; ti >= 0; ti--) { if (constituents[ci].getType().equals(tags1[ti])) { return constituents[ci].getHead(); } } } for (Parse constituent : constituents) { if (constituent.getType().equals("NP")) { return constituent.getHead(); } } String[] tags2 = { "$", "ADJP", "PRN" }; for (int ci = constituents.length - 1; ci >= 0; ci--) { for (int ti = tags2.length - 1; ti >= 0; ti--) { if (constituents[ci].getType().equals(tags2[ti])) { return constituents[ci].getHead(); } } } String[] tags3 = { "JJ", "JJS", "RB", "QP" }; for (int ci = constituents.length - 1; ci >= 0; ci--) { for (int ti = tags3.length - 1; ti >= 0; ti--) { if (constituents[ci].getType().equals(tags3[ti])) { return constituents[ci].getHead(); } } } return constituents[constituents.length - 1].getHead(); } else if ((hr = headRules.get(type)) != null) { String[] tags = hr.tags; int cl = constituents.length; int tl = tags.length; if (hr.leftToRight) { for (String tag : tags) { for (Parse constituent : constituents) { if (constituent.getType().equals(tag)) { return constituent.getHead(); } } } return constituents[0].getHead(); } else { for (String tag : tags) { for (int ci = cl - 1; ci >= 0; ci--) { if (constituents[ci].getType().equals(tag)) { return constituents[ci].getHead(); } } } return constituents[cl - 1].getHead(); } } return constituents[constituents.length - 1].getHead(); } private void readHeadRules(BufferedReader str) throws IOException { String line; headRules = new HashMap<>(30); while ((line = str.readLine()) != null) { StringTokenizer st = new StringTokenizer(line); String num = st.nextToken(); String type = st.nextToken(); String dir = st.nextToken(); String[] tags = new String[Integer.parseInt(num) - 2]; int ti = 0; while (st.hasMoreTokens()) { tags[ti] = st.nextToken(); ti++; } headRules.put(type, new HeadRule(dir.equals("1"), tags)); } } @Override public void labelGaps(Stack stack) { if (stack.size() > 4) { //Constituent con0 = (Constituent) stack.get(stack.size()-1); Constituent con1 = stack.get(stack.size() - 2); Constituent con2 = stack.get(stack.size() - 3); Constituent con3 = stack.get(stack.size() - 4); Constituent con4 = stack.get(stack.size() - 5); // System.err.println("con0="+con0.label+" con1="+con1.label+" con2=" // +con2.label+" con3="+con3.label+" con4="+con4.label); //subject extraction if (con1.getLabel().equals("NP") && con2.getLabel().equals("S") && con3.getLabel().equals("SBAR")) { con1.setLabel(con1.getLabel() + "-G"); con2.setLabel(con2.getLabel() + "-G"); con3.setLabel(con3.getLabel() + "-G"); } //object extraction else if (con1.getLabel().equals("NP") && con2.getLabel().equals("VP") && con3.getLabel().equals("S") && con4.getLabel().equals("SBAR")) { con1.setLabel(con1.getLabel() + "-G"); con2.setLabel(con2.getLabel() + "-G"); con3.setLabel(con3.getLabel() + "-G"); con4.setLabel(con4.getLabel() + "-G"); } } } /** * Serializes the head rules via a {@link Writer} in a format suitable for loading * the head rules again. The encoding must be taken into account while * working with the writer and reader. *

* Once the entries have been written, the {@code writer} is flushed. *

* Note: * The {@code writer} remains open after this method returns. * * @param writer The {@link Writer} to write the head rules to. * @throws IOException Thrown if IO errors occurred during write operation. */ public void serialize(Writer writer) throws IOException { for (Entry entry : headRules.entrySet()) { String type = entry.getKey(); HeadRule headRule = entry.getValue(); // write num of tags writer.write(Integer.toString(headRule.tags.length + 2)); writer.write(' '); // write type writer.write(type); writer.write(' '); // write l2r true == 1 if (headRule.leftToRight) writer.write("1"); else writer.write("0"); // write tags for (String tag : headRule.tags) { writer.write(' '); writer.write(tag); } writer.write('\n'); } writer.flush(); } @Override public int hashCode() { return Objects.hash(headRules, punctSet); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof HeadRules rules) { return rules.headRules.equals(headRules) && rules.punctSet.equals(punctSet); } return false; } @Override public Class getArtifactSerializerClass() { return HeadRulesSerializer.class; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_parser_lang_es_An0100644 0000000 0000000 00000000167 14523004075 032555 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/lang/es/AncoraSpanishHeadRules.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/lang/es/AncoraSpanishHeadR0100644 0000000 0000000 00000023314 14523004075 034024 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser.lang.es; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; import java.util.Set; import java.util.Stack; import java.util.StringTokenizer; import opennlp.tools.parser.Constituent; import opennlp.tools.parser.GapLabeler; import opennlp.tools.parser.HeadRules; import opennlp.tools.parser.Parse; import opennlp.tools.parser.chunking.Parser; import opennlp.tools.util.model.ArtifactSerializer; import opennlp.tools.util.model.SerializableArtifact; /** * Class for storing the Ancora Spanish head rules associated with parsing. In this class * headrules for noun phrases are specified. The rest of the rules are * in opennlp-tools/lang/es/parser/es-head-rules *

* NOTE: This class has been adapted from opennlp.tools.parser.lang.en.HeadRules *

* The main change is the constituents search direction in the first for loop. *

* Note also the change in the return of the getHead() method: * In the lang.en.HeadRules class: return constituents[ci].getHead(); * Now: return constituents[ci]; *

* Other changes include removal of deprecated methods. * */ public class AncoraSpanishHeadRules implements HeadRules, GapLabeler, SerializableArtifact { public static class HeadRulesSerializer implements ArtifactSerializer { public AncoraSpanishHeadRules create(InputStream in) throws IOException { return new AncoraSpanishHeadRules(new BufferedReader( new InputStreamReader(in, StandardCharsets.UTF_8))); } public void serialize(opennlp.tools.parser.lang.es.AncoraSpanishHeadRules artifact, OutputStream out) throws IOException { artifact.serialize(new OutputStreamWriter(out, StandardCharsets.UTF_8)); } } private static class HeadRule { public final boolean leftToRight; public final String[] tags; public HeadRule(boolean l2r, String[] tags) { leftToRight = l2r; for (String tag : tags) { Objects.requireNonNull(tag, "tags must not contain null values!"); } this.tags = tags; } @Override public int hashCode() { return Objects.hash(leftToRight, Arrays.hashCode(tags)); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof HeadRule rule) { return (rule.leftToRight == leftToRight) && Arrays.equals(rule.tags, tags); } return false; } } private Map headRules; private final Set punctSet; /** * Creates a new set of head rules based on the specified reader. * * @param rulesReader A {@link Reader} for a head rules file. * * @throws IOException Thrown f the head rules reader can not be read. */ public AncoraSpanishHeadRules(Reader rulesReader) throws IOException { BufferedReader in = new BufferedReader(rulesReader); readHeadRules(in); punctSet = new HashSet<>(); punctSet.add("."); punctSet.add(","); punctSet.add("``"); punctSet.add("''"); //punctSet.add(":"); } @Override public Set getPunctuationTags() { return punctSet; } @Override public Parse getHead(Parse[] constituents, String type) { if (Parser.TOK_NODE.equals(constituents[0].getType())) { return null; } HeadRule hr; if (type.equals("SN") || type.equals("GRUP.NOM")) { String[] tags1 = {"AQA.*","AQC.*","GRUP\\.A","S\\.A","NC.*S.*", "NP.*","NC.*P.*", "GRUP\\.NOM"}; for (Parse constituent : constituents) { for (int t = tags1.length - 1; t >= 0; t--) { if (constituent.getType().matches(tags1[t])) { return constituent; } } } for (Parse constituent : constituents) { if (constituent.getType().equals("SN") || constituent.getType().equals("GRUP.NOM")) { return constituent; } } String[] tags2 = {"\\$","GRUP\\.A","SA"}; for (int ci = constituents.length - 1; ci >= 0; ci--) { for (int ti = tags2.length - 1; ti >= 0; ti--) { if (constituents[ci].getType().matches(tags2[ti])) { return constituents[ci]; } } } String[] tags3 = {"AQ0.*", "AQ[AC].*","AO.*","GRUP\\.A","S\\.A","RG","RN","GRUP\\.NOM"}; for (int ci = constituents.length - 1; ci >= 0; ci--) { for (int ti = tags3.length - 1; ti >= 0; ti--) { if (constituents[ci].getType().matches(tags3[ti])) { return constituents[ci]; } } } return constituents[constituents.length - 1].getHead(); } else if ((hr = headRules.get(type)) != null) { String[] tags = hr.tags; int cl = constituents.length; int tl = tags.length; if (hr.leftToRight) { for (String tag : tags) { for (Parse constituent : constituents) { if (constituent.getType().matches(tag)) { return constituent; } } } return constituents[0].getHead(); } else { for (String tag : tags) { for (int ci = cl - 1; ci >= 0; ci--) { if (constituents[ci].getType().matches(tag)) { return constituents[ci]; } } } return constituents[cl - 1].getHead(); } } return constituents[constituents.length - 1].getHead(); } private void readHeadRules(BufferedReader str) throws IOException { String line; headRules = new HashMap<>(60); while ((line = str.readLine()) != null) { StringTokenizer st = new StringTokenizer(line); String num = st.nextToken(); String type = st.nextToken(); String dir = st.nextToken(); String[] tags = new String[Integer.parseInt(num) - 2]; int ti = 0; while (st.hasMoreTokens()) { tags[ti] = st.nextToken(); ti++; } headRules.put(type, new HeadRule(dir.equals("1"), tags)); } } @Override public void labelGaps(Stack stack) { if (stack.size() > 4) { //Constituent con0 = (Constituent) stack.get(stack.size()-1); Constituent con1 = stack.get(stack.size() - 2); Constituent con2 = stack.get(stack.size() - 3); Constituent con3 = stack.get(stack.size() - 4); Constituent con4 = stack.get(stack.size() - 5); //subject extraction if (con1.getLabel().equals("SN") && con2.getLabel().equals("S") && con3.getLabel().equals("GRUP.NOM")) { con1.setLabel(con1.getLabel() + "-G"); con2.setLabel(con2.getLabel() + "-G"); con3.setLabel(con3.getLabel() + "-G"); } //object extraction else if (con1.getLabel().equals("SN") && con2.getLabel().equals("GRUP.VERB") && con3.getLabel().equals("S") && con4.getLabel().equals("GRUP.NOM")) { con1.setLabel(con1.getLabel() + "-G"); con2.setLabel(con2.getLabel() + "-G"); con3.setLabel(con3.getLabel() + "-G"); con4.setLabel(con4.getLabel() + "-G"); } } } /** * Serializes the head rules via a {@link Writer} in a format suitable for loading * the head rules again. The encoding must be taken into account while * working with the writer and reader. *

* Once the entries have been written, the {@code writer} is flushed. *

* Note: * The {@code writer} remains open after this method returns. * * @param writer The {@link Writer} to write the head rules to. * @throws IOException Thrown if IO errors occurred during write operation. */ public void serialize(Writer writer) throws IOException { for (Entry entry : headRules.entrySet()) { String type = entry.getKey(); HeadRule headRule = entry.getValue(); // write num of tags writer.write(Integer.toString(headRule.tags.length + 2)); writer.write(' '); // write type writer.write(type); writer.write(' '); // write l2r true == 1 if (headRule.leftToRight) writer.write("1"); else writer.write("0"); // write tags for (String tag : headRule.tags) { writer.write(' '); writer.write(tag); } writer.write('\n'); } writer.flush(); } @Override public int hashCode() { return Objects.hash(headRules, punctSet); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof AncoraSpanishHeadRules rules) { return rules.headRules.equals(headRules) && rules.punctSet.equals(punctSet); } return false; } @Override public Class getArtifactSerializerClass() { return HeadRulesSerializer.class; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/package-info.java0100644 0000000 0000000 00000001621 14523004075 032300 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package containing common code for performing full syntactic parsing. */ package opennlp.tools.parser; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_parser_treeinsert0100644 0000000 0000000 00000000172 14523004075 032707 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/treeinsert/AttachContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/treeinsert/AttachContextGe0100644 0000000 0000000 00000013034 14523004075 034246 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser.treeinsert; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Set; import opennlp.tools.parser.AbstractContextGenerator; import opennlp.tools.parser.Cons; import opennlp.tools.parser.Parse; /** * Generates predictive contexts for deciding how constituents should be attached. * * @see AbstractContextGenerator */ public class AttachContextGenerator extends AbstractContextGenerator { /** * Instantiates an {@link AttachContextGenerator} for making decisions about attachments. */ public AttachContextGenerator(Set punctSet) { this.punctSet = punctSet; } public String[] getContext(Object o) { Object[] parts = (Object[]) o; return getContext((Parse[]) parts[0], (Integer) parts[1],(List) parts[2], (Integer) parts[3]); } private boolean containsPunct(Collection puncts, String punct) { if (puncts != null) { for (Parse p : puncts) { if (p.getType().equals(punct)) { return true; } } } return false; } /** * Finds the predictive contextual features about an attachment. * * @param constituents The {@link Parse constituents} as they have been constructed so far. * @param index The constituent index of the node being attached. * @param rightFrontier The nodes which have been not attach to so far. * @return A set of contextual features about this attachment. */ public String[] getContext(Parse[] constituents, int index, List rightFrontier, int rfi) { List features = new ArrayList<>(100); Parse fn = rightFrontier.get(rfi); Parse fp = null; if (rfi + 1 < rightFrontier.size()) { fp = rightFrontier.get(rfi + 1); } Parse p_1 = null; if (rightFrontier.size() > 0) { p_1 = rightFrontier.get(0); } Parse p0 = constituents[index]; Parse p1 = null; if (index + 1 < constituents.length) { p1 = constituents[index + 1]; } Collection punct_1fs = fn.getPreviousPunctuationSet(); Collection punct_1s = p0.getPreviousPunctuationSet(); Collection punct1s = p0.getNextPunctuationSet(); String consfp = cons(fp, -3); String consf = cons(fn, -2); String consp_1 = cons(p_1, -1); String consp0 = cons(p0, 0); String consp1 = cons(p1, 1); String consbofp = consbo(fp, -3); String consbof = consbo(fn, -2); String consbop_1 = consbo(p_1, -1); String consbop0 = consbo(p0, 0); String consbop1 = consbo(p1, 1); Cons cfp = new Cons(consfp,consbofp,-3,true); Cons cf = new Cons(consf,consbof,-2,true); Cons c_1 = new Cons(consp_1,consbop_1,-1,true); Cons c0 = new Cons(consp0,consbop0,0,true); Cons c1 = new Cons(consp1,consbop1,1,true); //default features.add("default"); //unigrams features.add(consfp); features.add(consbofp); features.add(consf); features.add(consbof); features.add(consp_1); features.add(consbop_1); features.add(consp0); features.add(consbop0); features.add(consp1); features.add(consbop1); //productions String prod = production(fn,false); //String punctProd = production(fn,true,punctSet); features.add("pn=" + prod); features.add("pd=" + prod + "," + p0.getType()); features.add("ps=" + fn.getType() + "->" + fn.getType() + "," + p0.getType()); if (punct_1s != null) { StringBuilder punctBuf = new StringBuilder(5); for (Parse punct : punct_1s) { punctBuf.append(punct.getType()).append(","); } //features.add("ppd="+punctProd+","+punctBuf.toString()+p0.getType()); //features.add("pps="+fn.getType()+"->"+fn.getType()+","+punctBuf.toString()+p0.getType()); } //bi-grams //cons(fn),cons(0) cons2(features,cfp,c0,punct_1s,true); cons2(features,cf,c0,punct_1s,true); cons2(features,c_1,c0,punct_1s,true); cons2(features,c0,c1,punct1s,true); cons3(features,cf,c_1,c0,null,punct_1s,true,true,true); cons3(features,cf,c0,c1,punct_1s,punct1s,true,true,true); cons3(features,cfp,cf,c0,null,punct_1s,true,true,true); /* for (int ri=0;ri punct_1s = p0.getPreviousPunctuationSet(); Collection punct1s = p0.getNextPunctuationSet(); Collection punct2s = null; if (p1 != null) { punct2s = p1.getNextPunctuationSet(); } List rf; if (index == 0) { rf = Collections.emptyList(); } else { //this isn't a root node so, punctSet won't be used and can be passed as empty. Set emptyPunctSet = Collections.emptySet(); rf = Parser.getRightFrontier(constituents[0], emptyPunctSet); } getFrontierNodes(rf,leftNodes); Parse p_1 = leftNodes[0]; Parse p_2 = leftNodes[1]; Collection punct_2s = null; if (p_1 != null) { punct_2s = p_1.getPreviousPunctuationSet(); } String consp_2 = cons(p_2, -2); String consp_1 = cons(p_1, -1); String consp0 = cons(p0, 0); String consp1 = cons(p1, 1); String consp2 = cons(p2, 2); String consbop_2 = consbo(p_2, -2); String consbop_1 = consbo(p_1, -1); String consbop0 = consbo(p0, 0); String consbop1 = consbo(p1, 1); String consbop2 = consbo(p2, 2); Cons c_2 = new Cons(consp_2,consbop_2,-2,true); Cons c_1 = new Cons(consp_1,consbop_1,-1,true); Cons c0 = new Cons(consp0,consbop0,0,true); Cons c1 = new Cons(consp1,consbop1,1,true); Cons c2 = new Cons(consp2,consbop2,2,true); List features = new ArrayList<>(); features.add("default"); //unigrams features.add(consp_2); features.add(consbop_2); features.add(consp_1); features.add(consbop_1); features.add(consp0); features.add(consbop0); features.add(consp1); features.add(consbop1); features.add(consp2); features.add(consbop2); //cons(0),cons(1) cons2(features,c0,c1,punct1s,true); //cons(-1),cons(0) cons2(features,c_1,c0,punct_1s,true); //features.add("stage=cons(0),cons(1),cons(2)"); cons3(features,c0,c1,c2,punct1s,punct2s,true,true,true); cons3(features,c_2,c_1,c0,punct_2s,punct_1s,true,true,true); cons3(features,c_1,c0,c1,punct_1s,punct_1s,true,true,true); if (rf.isEmpty()) { features.add(EOS + "," + consp0); features.add(EOS + "," + consbop0); } return features.toArray(new String[0]); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_parser_treeinsert0100644 0000000 0000000 00000000171 14523004075 032706 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/treeinsert/CheckContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/treeinsert/CheckContextGen0100644 0000000 0000000 00000010453 14523004075 034237 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser.treeinsert; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Set; import opennlp.tools.parser.AbstractContextGenerator; import opennlp.tools.parser.Parse; /** * Generates predictive context for deciding when a constituent is complete. * * @see AbstractContextGenerator */ public class CheckContextGenerator extends AbstractContextGenerator { private final Parse[] leftNodes; /** * Instantiates a {@link CheckContextGenerator} for making decisions using a {@code punctSet}. * * @param punctSet A set of punctuation symbols to be used during context generation. */ public CheckContextGenerator(Set punctSet) { this.punctSet = punctSet; leftNodes = new Parse[2]; } public String[] getContext(Object o) { Object[] params = (Object[]) o; return getContext((Parse) params[0], (Parse[]) params[1], (Integer) params[2], (Boolean) params[3]); } /** * Finds the predictive context used to determine how constituent at the specified {@code index} * should be combined with a {@code parent} constituent. * * @param parent The {@link Parse parent} element. * @param constituents The {@link Parse constituents} which have yet to be combined into new constituents. * @param index The index of the constituent which is being considered. * @param trimFrontier Whether the frontier should be trimmed, or not. * * @return The context for deciding whether a new constituent should be created. */ public String[] getContext(Parse parent, Parse[] constituents, int index, boolean trimFrontier) { List features = new ArrayList<>(100); //default features.add("default"); Parse[] children = Parser.collapsePunctuation(parent.getChildren(),punctSet); Parse pstart = children[0]; Parse pend = children[children.length - 1]; String type = parent.getType(); checkcons(pstart, "begin", type, features); checkcons(pend, "last", type, features); String production = "p=" + production(parent,false); String punctProduction = "pp=" + production(parent,true); features.add(production); features.add(punctProduction); Parse p1 = null; Parse p2 = null; Collection p1s = constituents[index].getNextPunctuationSet(); Collection p2s = null; Collection p_1s = constituents[index].getPreviousPunctuationSet(); Collection p_2s = null; List rf; if (index == 0) { rf = Collections.emptyList(); } else { rf = Parser.getRightFrontier(constituents[0], punctSet); if (trimFrontier) { int pi = rf.indexOf(parent); if (pi == -1) { throw new RuntimeException("Parent not found in right frontier:" + parent + " rf=" + rf); } else { for (int ri = 0; ri <= pi; ri++) { rf.remove(0); } } } } getFrontierNodes(rf,leftNodes); Parse p_1 = leftNodes[0]; Parse p_2 = leftNodes[1]; int ps = constituents.length; if (p_1 != null) { p_2s = p_1.getPreviousPunctuationSet(); } if (index + 1 < ps) { p1 = constituents[index + 1]; p2s = p1.getNextPunctuationSet(); } if (index + 2 < ps) { p2 = constituents[index + 2]; } surround(p_1, -1, type, p_1s, features); surround(p_2, -2, type, p_2s, features); surround(p1, 1, type, p1s, features); surround(p2, 2, type, p2s, features); return features.toArray(new String[0]); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/treeinsert/Parser.java0100644 0000000 0000000 00000060436 14523004075 033405 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser.treeinsert; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.chunker.Chunker; import opennlp.tools.chunker.ChunkerME; import opennlp.tools.chunker.ChunkerModel; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.parser.AbstractBottomUpParser; import opennlp.tools.parser.ChunkSampleStream; import opennlp.tools.parser.HeadRules; import opennlp.tools.parser.Parse; import opennlp.tools.parser.ParserChunkerFactory; import opennlp.tools.parser.ParserEventTypeEnum; import opennlp.tools.parser.ParserModel; import opennlp.tools.parser.ParserType; import opennlp.tools.parser.PosSampleStream; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSTagger; import opennlp.tools.postag.POSTaggerFactory; import opennlp.tools.postag.POSTaggerME; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; /** * A built-attach {@link opennlp.tools.parser.Parser} implementation. *

* Nodes are built when their left-most child is encountered. * Subsequent children are attached as daughters. * Attachment is based on node in the right-frontier * of the tree. After each attachment or building, nodes are * assessed as either complete or incomplete. Complete nodes * are no longer eligible for daughter attachment. *

* Complex modifiers which produce additional node * levels of the same type are attached with sister-adjunction. * Attachment can not take place higher in the right-frontier * than an incomplete node. * * @see AbstractBottomUpParser * @see opennlp.tools.parser.Parser */ public class Parser extends AbstractBottomUpParser { private static final Logger logger = LoggerFactory.getLogger(Parser.class); /** Outcome used when a constituent needs an no additional parent node/building. */ public static final String DONE = "d"; /** Outcome used when a node should be attached as a sister to another node. */ public static final String ATTACH_SISTER = "s"; /** Outcome used when a node should be attached as a daughter to another node. */ public static final String ATTACH_DAUGHTER = "d"; /** Outcome used when a node should not be attached to another node. */ public static final String NON_ATTACH = "n"; /** Label used to distinguish build nodes from non-built nodes. */ public static final String BUILT = "built"; private final MaxentModel buildModel; private final MaxentModel attachModel; private final MaxentModel checkModel; static boolean checkComplete = false; private final BuildContextGenerator buildContextGenerator; private final AttachContextGenerator attachContextGenerator; private final CheckContextGenerator checkContextGenerator; private final double[] bprobs; private final double[] aprobs; private double[] cprobs; private final int doneIndex; private final int sisterAttachIndex; private final int daughterAttachIndex; private final int nonAttachIndex; private final int completeIndex; private final int[] attachments; /** * Instantiates a {@link Parser} via a given {@code model} and * other configuration parameters. Uses the default implementations of * {@link POSTaggerME} and {@link ChunkerME}. * * @param model The {@link ParserModel} to use. * @param beamSize The number of different parses kept during parsing. * @param advancePercentage The minimal amount of probability mass which advanced outcomes * must represent. Only outcomes which contribute to the top * {@code advancePercentage} will be explored. * * @throws IllegalStateException Thrown if the {@link ParserType} is not supported. * * @see ParserModel * @see POSTaggerME * @see ChunkerME */ public Parser(ParserModel model, int beamSize, double advancePercentage) { this(model.getBuildModel(), model.getAttachModel(), model.getCheckModel(), new POSTaggerME(model.getParserTaggerModel()), new ChunkerME(model.getParserChunkerModel()), model.getHeadRules(), beamSize, advancePercentage); } /** * Instantiates a {@link Parser} via a given {@code model}. * Uses the default implementations of {@link POSTaggerME} and {@link ChunkerME} * and default values for {@code beamSize} and {@code advancePercentage}. * * @param model The {@link ParserModel} to use. * * @throws IllegalStateException Thrown if the {@link ParserType} is not supported. * * @see ParserModel * @see POSTaggerME * @see ChunkerME */ public Parser(ParserModel model) { this(model, defaultBeamSize, defaultAdvancePercentage); } /** * Instantiates a {@link Parser} via a given {@code model} and other configuration parameters. * * @param buildModel A valid {@link MaxentModel} used to build. * @param checkModel A valid {@link MaxentModel} used to check. * @param tagger A valid {@link POSModel} used to tag. * @param chunker A valid {@link ChunkerModel} used to chunk. * @param headRules The {@link HeadRules} for head word percolation. * @param beamSize The number of different parses kept during parsing. * @param advancePercentage The minimal amount of probability mass which advanced outcomes * must represent. Only outcomes which contribute to the top * {@code advancePercentage} will be explored. * @see POSTagger * @see Chunker */ private Parser(MaxentModel buildModel, MaxentModel attachModel, MaxentModel checkModel, POSTagger tagger, Chunker chunker, HeadRules headRules, int beamSize, double advancePercentage) { super(tagger,chunker,headRules,beamSize,advancePercentage); this.buildModel = buildModel; this.attachModel = attachModel; this.checkModel = checkModel; this.buildContextGenerator = new BuildContextGenerator(); this.attachContextGenerator = new AttachContextGenerator(punctSet); this.checkContextGenerator = new CheckContextGenerator(punctSet); this.bprobs = new double[buildModel.getNumOutcomes()]; this.aprobs = new double[attachModel.getNumOutcomes()]; this.cprobs = new double[checkModel.getNumOutcomes()]; this.doneIndex = buildModel.getIndex(DONE); this.sisterAttachIndex = attachModel.getIndex(ATTACH_SISTER); this.daughterAttachIndex = attachModel.getIndex(ATTACH_DAUGHTER); this.nonAttachIndex = attachModel.getIndex(NON_ATTACH); attachments = new int[] {daughterAttachIndex,sisterAttachIndex}; this.completeIndex = checkModel.getIndex(Parser.COMPLETE); } /** * Returns the right frontier of the specified {@link Parse tree} with nodes ordered from deepest * to shallowest. * * @param root The {@link Parse root} of the parse tree. * @param punctSet A set of punctuation symbols to be used. * @return The right frontier of the specified parse tree. */ public static List getRightFrontier(Parse root, Set punctSet) { List rf = new LinkedList<>(); Parse top; if (AbstractBottomUpParser.TOP_NODE.equals(root.getType()) || AbstractBottomUpParser.INC_NODE.equals(root.getType())) { top = collapsePunctuation(root.getChildren(),punctSet)[0]; } else { top = root; } while (!top.isPosTag()) { rf.add(0,top); Parse[] kids = top.getChildren(); top = kids[kids.length - 1]; } return new ArrayList<>(rf); } private void setBuilt(Parse p) { String l = p.getLabel(); if (l == null) { p.setLabel(Parser.BUILT); } else { if (isComplete(p)) { p.setLabel(Parser.BUILT + "." + Parser.COMPLETE); } else { p.setLabel(Parser.BUILT + "." + Parser.INCOMPLETE); } } } private void setComplete(Parse p) { String l = p.getLabel(); if (!isBuilt(p)) { p.setLabel(Parser.COMPLETE); } else { p.setLabel(Parser.BUILT + "." + Parser.COMPLETE); } } private void setIncomplete(Parse p) { if (!isBuilt(p)) { p.setLabel(Parser.INCOMPLETE); } else { p.setLabel(Parser.BUILT + "." + Parser.INCOMPLETE); } } private boolean isBuilt(Parse p) { String l = p.getLabel(); return l != null && l.startsWith(Parser.BUILT); } private boolean isComplete(Parse p) { String l = p.getLabel(); return l != null && l.endsWith(Parser.COMPLETE); } @Override protected Parse[] advanceChunks(Parse p, double minChunkScore) { Parse[] parses = super.advanceChunks(p, minChunkScore); for (Parse parse : parses) { Parse[] chunks = parse.getChildren(); for (Parse chunk : chunks) { setComplete(chunk); } } return parses; } @Override protected Parse[] advanceParses(Parse p, double probMass) { double q = 1 - probMass; /* The index of the node which will be labeled in this iteration of advancing the parse. */ int advanceNodeIndex; /* The node which will be labeled in this iteration of advancing the parse. */ Parse advanceNode = null; Parse[] originalChildren = p.getChildren(); Parse[] children = collapsePunctuation(originalChildren,punctSet); int numNodes = children.length; if (numNodes == 0) { return null; } else if (numNodes == 1) { //put sentence initial and final punct in top node if (children[0].isPosTag()) { return null; } else { p.expandTopNode(children[0]); return new Parse[] { p }; } } //determines which node needs to adanced. for (advanceNodeIndex = 0; advanceNodeIndex < numNodes; advanceNodeIndex++) { advanceNode = children[advanceNodeIndex]; if (!isBuilt(advanceNode)) { break; } } int originalZeroIndex = mapParseIndex(0,children,originalChildren); int originalAdvanceIndex = mapParseIndex(advanceNodeIndex,children,originalChildren); List newParsesList = new ArrayList<>(); //call build model buildModel.eval(buildContextGenerator.getContext(children, advanceNodeIndex), bprobs); double doneProb = bprobs[doneIndex]; if (logger.isDebugEnabled()) logger.debug("adi={} {}.{} {} choose build={} attach={}", advanceNodeIndex, advanceNode.getType(), advanceNode.getLabel(), advanceNode, (1 - doneProb), doneProb); if (1 - doneProb > q) { double bprobSum = 0; while (bprobSum < probMass) { /* The largest unadvanced labeling. */ int max = 0; for (int pi = 1; pi < bprobs.length; pi++) { //for each build outcome if (bprobs[pi] > bprobs[max]) { max = pi; } } if (bprobs[max] == 0) { break; } double bprob = bprobs[max]; bprobs[max] = 0; //zero out so new max can be found bprobSum += bprob; String tag = buildModel.getOutcome(max); if (!tag.equals(DONE)) { Parse newParse1 = (Parse) p.clone(); Parse newNode = new Parse(p.getText(),advanceNode.getSpan(),tag,bprob,advanceNode.getHead()); newParse1.insert(newNode); newParse1.addProb(StrictMath.log(bprob)); newParsesList.add(newParse1); if (checkComplete) { cprobs = checkModel.eval(checkContextGenerator.getContext(newNode, children, advanceNodeIndex,false)); if (logger.isDebugEnabled()) logger.debug("building {} {} c={}", tag, bprob, cprobs[completeIndex]); if (cprobs[completeIndex] > probMass) { //just complete advances setComplete(newNode); newParse1.addProb(StrictMath.log(cprobs[completeIndex])); if (logger.isDebugEnabled()) logger.debug("Only advancing complete node"); } else if (1 - cprobs[completeIndex] > probMass) { //just incomplete advances setIncomplete(newNode); newParse1.addProb(StrictMath.log(1 - cprobs[completeIndex])); if (logger.isDebugEnabled()) logger.debug("Only advancing incomplete node"); } else { //both complete and incomplete advance if (logger.isDebugEnabled()) logger.debug("Advancing both complete and incomplete nodes"); setComplete(newNode); newParse1.addProb(StrictMath.log(cprobs[completeIndex])); Parse newParse2 = (Parse) p.clone(); Parse newNode2 = new Parse(p.getText(),advanceNode.getSpan(),tag,bprob,advanceNode.getHead()); newParse2.insert(newNode2); newParse2.addProb(StrictMath.log(bprob)); newParsesList.add(newParse2); newParse2.addProb(StrictMath.log(1 - cprobs[completeIndex])); setIncomplete(newNode2); //set incomplete for non-clone } } else { if (logger.isDebugEnabled()) logger.debug("building {} {}", tag, bprob); } } } } //advance attaches if (doneProb > q) { Parse newParse1 = (Parse) p.clone(); //clone parse //mark nodes as built if (checkComplete) { if (isComplete(advanceNode)) { //replace constituent being labeled to create new derivation newParse1.setChild(originalAdvanceIndex,Parser.BUILT + "." + Parser.COMPLETE); } else { //replace constituent being labeled to create new derivation newParse1.setChild(originalAdvanceIndex,Parser.BUILT + "." + Parser.INCOMPLETE); } } else { //replace constituent being labeled to create new derivation newParse1.setChild(originalAdvanceIndex,Parser.BUILT); } newParse1.addProb(StrictMath.log(doneProb)); if (advanceNodeIndex == 0) { //no attach if first node. newParsesList.add(newParse1); } else { List rf = getRightFrontier(p,punctSet); for (int fi = 0,fs = rf.size(); fi < fs; fi++) { Parse fn = rf.get(fi); attachModel.eval(attachContextGenerator.getContext(children, advanceNodeIndex, rf, fi), aprobs); if (logger.isDebugEnabled()) { // List cs = java.util.Arrays.asList(attachContextGenerator.getContext(children, // advanceNodeIndex,rf,fi,punctSet)); logger.debug("Frontier node({}): {}.{} {} <- {} {} d={} s={} ", fi, fn.getType(), fn.getLabel(), fn, advanceNode.getType(), advanceNode, aprobs[daughterAttachIndex], aprobs[sisterAttachIndex]); } for (int attachment : attachments) { double prob = aprobs[attachment]; //should we try an attach if p > threshold and // if !checkComplete then prevent daughter attaching to chunk // if checkComplete then prevent daughter attacing to complete node or // sister attaching to an incomplete node if (prob > q && ( (!checkComplete && (attachment != daughterAttachIndex || !isComplete(fn))) || (checkComplete && ((attachment == daughterAttachIndex && !isComplete(fn)) || (attachment == sisterAttachIndex && isComplete(fn)))))) { Parse newParse2 = newParse1.cloneRoot(fn, originalZeroIndex); Parse[] newKids = Parser.collapsePunctuation(newParse2.getChildren(), punctSet); //remove node from top level since were going to attach it (including punct) for (int ri = originalZeroIndex + 1; ri <= originalAdvanceIndex; ri++) { if (logger.isTraceEnabled()) { logger.trace("{}-removing {} {}", ri, (originalZeroIndex + 1), newParse2.getChildren()[originalZeroIndex + 1]); } newParse2.remove(originalZeroIndex + 1); } List crf = getRightFrontier(newParse2, punctSet); Parse updatedNode; if (attachment == daughterAttachIndex) { //attach daughter updatedNode = crf.get(fi); updatedNode.add(advanceNode, headRules); } else { //attach sister Parse psite; if (fi + 1 < crf.size()) { psite = crf.get(fi + 1); updatedNode = psite.adjoin(advanceNode, headRules); } else { psite = newParse2; updatedNode = psite.adjoinRoot(advanceNode, headRules, originalZeroIndex); newKids[0] = updatedNode; } } //update spans affected by attachment for (int ni = fi + 1; ni < crf.size(); ni++) { Parse node = crf.get(ni); node.updateSpan(); } //if (debugOn) {System.out.print(ai+"-result: ");newParse2.show();System.out.println();} newParse2.addProb(StrictMath.log(prob)); newParsesList.add(newParse2); if (checkComplete) { cprobs = checkModel.eval( checkContextGenerator.getContext(updatedNode, newKids, advanceNodeIndex, true)); if (cprobs[completeIndex] > probMass) { setComplete(updatedNode); newParse2.addProb(StrictMath.log(cprobs[completeIndex])); if (logger.isDebugEnabled()) logger.debug("Only advancing complete node"); } else if (1 - cprobs[completeIndex] > probMass) { setIncomplete(updatedNode); newParse2.addProb(StrictMath.log(1 - cprobs[completeIndex])); if (logger.isDebugEnabled()) logger.debug("Only advancing incomplete node"); } else { setComplete(updatedNode); Parse newParse3 = newParse2.cloneRoot(updatedNode, originalZeroIndex); newParse3.addProb(StrictMath.log(cprobs[completeIndex])); newParsesList.add(newParse3); setIncomplete(updatedNode); newParse2.addProb(StrictMath.log(1 - cprobs[completeIndex])); if (logger.isDebugEnabled()) logger.debug("Advancing both complete and incomplete nodes; c={}", cprobs[completeIndex]); } } } else { if (logger.isDebugEnabled()) logger.debug("Skipping {}.{} {} daughter={} complete={} prob={}", fn.getType(), fn.getLabel(), fn, (attachment == daughterAttachIndex), isComplete(fn), prob); } } if (checkComplete && !isComplete(fn)) { if (logger.isDebugEnabled()) logger.debug("Stopping at incomplete node({}): {} . {} {}", fi, fn.getType(), fn.getLabel(), fn); break; } } } } Parse[] newParses = new Parse[newParsesList.size()]; newParsesList.toArray(newParses); return newParses; } @Override protected void advanceTop(Parse p) { p.setType(TOP_NODE); } /** * Starts a training of a {@link ParserModel}. * * @param languageCode An ISO conform language code. * @param parseSamples The {@link ObjectStream samples} as input. * @param rules The {@link HeadRules} to use. * @param mlParams The {@link TrainingParameters parameters} for training. * @return A valid {@link ParserModel}. * @throws IOException Thrown if IO errors occurred during training. */ public static ParserModel train(String languageCode, ObjectStream parseSamples, HeadRules rules, TrainingParameters mlParams) throws IOException { Map manifestInfoEntries = new HashMap<>(); logger.info("Building dictionary"); Dictionary mdict = buildDictionary(parseSamples, rules, mlParams); parseSamples.reset(); // tag POSModel posModel = POSTaggerME.train(languageCode, new PosSampleStream( parseSamples), mlParams.getParameters("tagger"), new POSTaggerFactory()); parseSamples.reset(); // chunk ChunkerModel chunkModel = ChunkerME.train(languageCode, new ChunkSampleStream( parseSamples), mlParams.getParameters("chunker"), new ParserChunkerFactory()); parseSamples.reset(); // build logger.info("Training builder"); ObjectStream bes = new ParserEventStream(parseSamples, rules, ParserEventTypeEnum.BUILD, mdict); Map buildReportMap = new HashMap<>(); EventTrainer buildTrainer = TrainerFactory.getEventTrainer( mlParams.getParameters("build"), buildReportMap); MaxentModel buildModel = buildTrainer.train(bes); opennlp.tools.parser.chunking.Parser.mergeReportIntoManifest( manifestInfoEntries, buildReportMap, "build"); parseSamples.reset(); // check logger.info("Training checker"); ObjectStream kes = new ParserEventStream(parseSamples, rules, ParserEventTypeEnum.CHECK); Map checkReportMap = new HashMap<>(); EventTrainer checkTrainer = TrainerFactory.getEventTrainer( mlParams.getParameters("check"), checkReportMap); MaxentModel checkModel = checkTrainer.train(kes); opennlp.tools.parser.chunking.Parser.mergeReportIntoManifest( manifestInfoEntries, checkReportMap, "check"); parseSamples.reset(); // attach logger.info("Training attacher"); ObjectStream attachEvents = new ParserEventStream(parseSamples, rules, ParserEventTypeEnum.ATTACH); Map attachReportMap = new HashMap<>(); EventTrainer attachTrainer = TrainerFactory.getEventTrainer( mlParams.getParameters("attach"), attachReportMap); MaxentModel attachModel = attachTrainer.train(attachEvents); opennlp.tools.parser.chunking.Parser.mergeReportIntoManifest( manifestInfoEntries, attachReportMap, "attach"); return new ParserModel(languageCode, buildModel, checkModel, attachModel, posModel, chunkModel, rules, ParserType.TREEINSERT, manifestInfoEntries); } /** * Starts a training of a {@link ParserModel}. * * @param languageCode An ISO conform language code. * @param parseSamples The {@link ObjectStream samples} as input. * @param rules The {@link HeadRules} to use. * @param iterations The number of iterations to be conducted. * @param cutoff The cut-off parameter to be used. * @return A valid {@link ParserModel}. * @throws IOException Thrown if IO errors occurred during training. */ public static ParserModel train(String languageCode, ObjectStream parseSamples, HeadRules rules, int iterations, int cutoff) throws IOException { TrainingParameters params = new TrainingParameters(); params.put("dict", TrainingParameters.CUTOFF_PARAM, cutoff); params.put("tagger", TrainingParameters.CUTOFF_PARAM, cutoff); params.put("tagger", TrainingParameters.ITERATIONS_PARAM, iterations); params.put("chunker", TrainingParameters.CUTOFF_PARAM, cutoff); params.put("chunker", TrainingParameters.ITERATIONS_PARAM, iterations); params.put("check", TrainingParameters.CUTOFF_PARAM, cutoff); params.put("check", TrainingParameters.ITERATIONS_PARAM, iterations); params.put("build", TrainingParameters.CUTOFF_PARAM, cutoff); params.put("build", TrainingParameters.ITERATIONS_PARAM, iterations); return train(languageCode, parseSamples, rules, params); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_parser_treeinsert0100644 0000000 0000000 00000000165 14523004075 032711 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/treeinsert/ParserEventStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/treeinsert/ParserEventStre0100644 0000000 0000000 00000036167 14523004075 034331 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser.treeinsert; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.ml.model.Event; import opennlp.tools.parser.AbstractBottomUpParser; import opennlp.tools.parser.AbstractParserEventStream; import opennlp.tools.parser.HeadRules; import opennlp.tools.parser.Parse; import opennlp.tools.parser.ParserEventTypeEnum; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; /** * Wrapper class for one of four {@link Parser built-attach parser} event streams. * The particular {@link ParserEventTypeEnum event type} is specified at construction. */ public class ParserEventStream extends AbstractParserEventStream { private static final Logger logger = LoggerFactory.getLogger(ParserEventStream.class); protected AttachContextGenerator attachContextGenerator; protected BuildContextGenerator buildContextGenerator; protected CheckContextGenerator checkContextGenerator; /** * Instantiates a {@link ParserEventStream} based on the specified data stream * of the {@link ParserEventTypeEnum type} using {@link HeadRules head rules}. * * @param d A 1-parse-per-line Penn Treebank Style parse. * @param rules The {@link HeadRules head rules} to use. * @param etype The {@link ParserEventTypeEnum type} of events desired. * @param dict A tri-gram {@link Dictionary} to reduce feature generation. * * @see ParserEventTypeEnum */ public ParserEventStream(ObjectStream d, HeadRules rules, ParserEventTypeEnum etype, Dictionary dict) { super(d, rules, etype, dict); } /** * Instantiates a {@link ParserEventStream} based on the specified data stream * of the {@link ParserEventTypeEnum type} using {@link HeadRules head rules}. * * @param d A 1-parse-per-line Penn Treebank Style parse. * @param rules The {@link HeadRules head rules} to use. * @param etype The {@link ParserEventTypeEnum type} of events desired. * * @see ParserEventTypeEnum */ public ParserEventStream(ObjectStream d, HeadRules rules, ParserEventTypeEnum etype) { super(d, rules, etype); } @Override public void init() { buildContextGenerator = new BuildContextGenerator(); attachContextGenerator = new AttachContextGenerator(punctSet); checkContextGenerator = new CheckContextGenerator(punctSet); } /** * Returns a map of parent nodes which consist of the immediate * parent of the specified {@link Parse node} and any of its parent which * share the same syntactic type. * * @param node The {@link Parse node} whose parents are to be returned. * @return A {@link Map} of parent {@link Parse nodes}. */ private Map getNonAdjoinedParent(Parse node) { Map parents = new HashMap<>(); Parse parent = node.getParent(); int index = indexOf(node,parent); parents.put(parent, index); while (parent.getType().equals(node.getType())) { node = parent; parent = parent.getParent(); index = indexOf(node,parent); parents.put(parent, index); } return parents; } private int indexOf(Parse child, Parse parent) { Parse[] kids = Parser.collapsePunctuation(parent.getChildren(),punctSet); for (int ki = 0; ki < kids.length; ki++) { if (child == kids[ki]) { return ki; } } return -1; } private int nonPunctChildCount(Parse node) { return Parser.collapsePunctuation(node.getChildren(),punctSet).length; } @Override protected boolean lastChild(Parse child, Parse parent) { boolean lc = super.lastChild(child, parent); while (!lc) { Parse cp = child.getParent(); if (cp != parent && cp.getType().equals(child.getType())) { lc = super.lastChild(cp,parent); child = cp; } else { break; } } return lc; } @Override protected void addParseEvents(List parseEvents, Parse[] chunks) { /* Frontier nodes built from node in a completed parse. Specifically, * they have all their children regardless of the stage of parsing.*/ List rightFrontier = new ArrayList<>(); List builtNodes = new ArrayList<>(); /* Nodes which characterize what the parse looks like to the parser as its being built. * Specifically, these nodes don't have all their children attached like the parents of * the chunk nodes do.*/ Parse[] currentChunks = new Parse[chunks.length]; for (int ci = 0; ci < chunks.length; ci++) { currentChunks[ci] = (Parse) chunks[ci].clone(); currentChunks[ci].setPrevPunctuation(chunks[ci].getPreviousPunctuationSet()); currentChunks[ci].setNextPunctuation(chunks[ci].getNextPunctuationSet()); currentChunks[ci].setLabel(Parser.COMPLETE); chunks[ci].setLabel(Parser.COMPLETE); } for (int ci = 0; ci < chunks.length; ci++) { Parse parent = chunks[ci].getParent(); Parse prevParent = chunks[ci]; int off = 0; //build un-built parents if (!chunks[ci].isPosTag()) { builtNodes.add(off++,chunks[ci]); } //perform build stages while (!parent.getType().equals(AbstractBottomUpParser.TOP_NODE) && parent.getLabel() == null) { if (!prevParent.getType().equals(parent.getType())) { //build level if (logger.isDebugEnabled()) { logger.debug("Build: {} for: {}", parent.getType(), currentChunks[ci]); } if (etype == ParserEventTypeEnum.BUILD) { parseEvents.add(new Event(parent.getType(), buildContextGenerator.getContext(currentChunks, ci))); } builtNodes.add(off++,parent); Parse newParent = new Parse(currentChunks[ci].getText(), currentChunks[ci].getSpan(),parent.getType(),1,0); newParent.add(currentChunks[ci],rules); newParent.setPrevPunctuation(currentChunks[ci].getPreviousPunctuationSet()); newParent.setNextPunctuation(currentChunks[ci].getNextPunctuationSet()); currentChunks[ci].setParent(newParent); currentChunks[ci] = newParent; newParent.setLabel(Parser.BUILT); //see if chunk is complete if (lastChild(chunks[ci], parent)) { if (etype == ParserEventTypeEnum.CHECK) { parseEvents.add(new Event(Parser.COMPLETE, checkContextGenerator.getContext(currentChunks[ci],currentChunks, ci,false))); } currentChunks[ci].setLabel(Parser.COMPLETE); parent.setLabel(Parser.COMPLETE); } else { if (etype == ParserEventTypeEnum.CHECK) { parseEvents.add(new Event(Parser.INCOMPLETE, checkContextGenerator.getContext(currentChunks[ci],currentChunks,ci,false))); } currentChunks[ci].setLabel(Parser.INCOMPLETE); parent.setLabel(Parser.COMPLETE); } chunks[ci] = parent; } //TODO: Consider whether we need to set this label or train parses at all. parent.setLabel(Parser.BUILT); prevParent = parent; parent = parent.getParent(); } //decide to attach if (etype == ParserEventTypeEnum.BUILD) { parseEvents.add(new Event(Parser.DONE, buildContextGenerator.getContext(currentChunks, ci))); } //attach node String attachType = null; /* Node selected for attachment. */ Parse attachNode = null; int attachNodeIndex = -1; if (ci == 0) { Parse top = new Parse(currentChunks[ci].getText(), new Span(0,currentChunks[ci].getText().length()),AbstractBottomUpParser.TOP_NODE,1,0); top.insert(currentChunks[ci]); } else { /* Right frontier consisting of partially-built nodes based on current state of the parse.*/ List currentRightFrontier = Parser.getRightFrontier(currentChunks[0],punctSet); if (currentRightFrontier.size() != rightFrontier.size()) { logger.error("Frontiers mis-aligned: {} != {} {} {}", currentRightFrontier.size(), rightFrontier.size(), currentRightFrontier, rightFrontier); System.exit(1); } Map parents = getNonAdjoinedParent(chunks[ci]); //try daughters first. for (int cfi = 0; cfi < currentRightFrontier.size(); cfi++) { Parse frontierNode = rightFrontier.get(cfi); Parse cfn = currentRightFrontier.get(cfi); if (!Parser.checkComplete || !Parser.COMPLETE.equals(cfn.getLabel())) { Integer i = parents.get(frontierNode); if (logger.isDebugEnabled()) logger.debug("Looking at attachment site ({}): {} ci={} cs={}, {} :for {} {} -> {}", cfi, cfn.getType(), i, nonPunctChildCount(cfn), cfn, currentChunks[ci].getType(), currentChunks[ci], parents ); if (attachNode == null && i != null && i == nonPunctChildCount(cfn)) { attachType = Parser.ATTACH_DAUGHTER; attachNodeIndex = cfi; attachNode = cfn; if (etype == ParserEventTypeEnum.ATTACH) { parseEvents.add(new Event(attachType, attachContextGenerator.getContext(currentChunks, ci, currentRightFrontier, attachNodeIndex))); } } } else { if (logger.isDebugEnabled()) logger.debug("Skipping ({}): {},{} {} :for {} {} -> {}", cfi, cfn.getType(), cfn.getPreviousPunctuationSet(), cfn, currentChunks[ci].getType(), currentChunks[ci], parents); } // Can't attach past first incomplete node. if (Parser.checkComplete && cfn.getLabel().equals(Parser.INCOMPLETE)) { if (logger.isDebugEnabled()) logger.debug("breaking on incomplete: {} {}", cfn.getType(), cfn); break; } } //try sisters, and generate non-attach events. for (int cfi = 0; cfi < currentRightFrontier.size(); cfi++) { Parse frontierNode = rightFrontier.get(cfi); Parse cfn = currentRightFrontier.get(cfi); if (attachNode == null && parents.containsKey(frontierNode.getParent()) && frontierNode.getType().equals(frontierNode.getParent().getType()) ) { //&& frontierNode.getParent().getLabel() == null) { attachType = Parser.ATTACH_SISTER; attachNode = cfn; attachNodeIndex = cfi; if (etype == ParserEventTypeEnum.ATTACH) { parseEvents.add(new Event(Parser.ATTACH_SISTER, attachContextGenerator.getContext(currentChunks, ci, currentRightFrontier, cfi))); } chunks[ci].getParent().setLabel(Parser.BUILT); } else if (cfi == attachNodeIndex) { //skip over previously attached daughter. } else { if (etype == ParserEventTypeEnum.ATTACH) { parseEvents.add(new Event(Parser.NON_ATTACH, attachContextGenerator.getContext(currentChunks, ci, currentRightFrontier, cfi))); } } //Can't attach past first incomplete node. if (Parser.checkComplete && cfn.getLabel().equals(Parser.INCOMPLETE)) { if (logger.isDebugEnabled()) logger.debug("breaking on incomplete: {} {}", cfn.getType(), cfn); break; } } //attach Node if (attachNode != null) { if (Parser.ATTACH_DAUGHTER.equals(attachType)) { Parse daughter = currentChunks[ci]; if (logger.isDebugEnabled()) logger.debug("daughter attach a={}:{} d={} com={}", attachNode.getType(), attachNode, daughter, lastChild(chunks[ci], rightFrontier.get(attachNodeIndex))); attachNode.add(daughter,rules); daughter.setParent(attachNode); if (lastChild(chunks[ci], rightFrontier.get(attachNodeIndex))) { if (etype == ParserEventTypeEnum.CHECK) { parseEvents.add(new Event(Parser.COMPLETE, checkContextGenerator.getContext(attachNode,currentChunks,ci,true))); } attachNode.setLabel(Parser.COMPLETE); } else { if (etype == ParserEventTypeEnum.CHECK) { parseEvents.add(new Event(Parser.INCOMPLETE, checkContextGenerator.getContext(attachNode,currentChunks,ci,true))); } } } else if (Parser.ATTACH_SISTER.equals(attachType)) { Parse frontierNode = rightFrontier.get(attachNodeIndex); rightFrontier.set(attachNodeIndex,frontierNode.getParent()); Parse sister = currentChunks[ci]; if (logger.isDebugEnabled()) logger.debug("sister attach a={}:{} s={} ap={} com={}", attachNode.getType(), attachNode, sister, attachNode.getParent(), lastChild(chunks[ci], rightFrontier.get(attachNodeIndex))); Parse newParent = attachNode.getParent().adjoin(sister,rules); newParent.setParent(attachNode.getParent()); attachNode.setParent(newParent); sister.setParent(newParent); if (attachNode == currentChunks[0]) { currentChunks[0] = newParent; } if (lastChild(chunks[ci], rightFrontier.get(attachNodeIndex))) { if (etype == ParserEventTypeEnum.CHECK) { parseEvents.add(new Event(Parser.COMPLETE, checkContextGenerator.getContext(newParent,currentChunks,ci,true))); } newParent.setLabel(Parser.COMPLETE); } else { if (etype == ParserEventTypeEnum.CHECK) { parseEvents.add(new Event(Parser.INCOMPLETE, checkContextGenerator.getContext(newParent,currentChunks,ci,true))); } newParent.setLabel(Parser.INCOMPLETE); } } //update right frontier for (int ni = 0; ni < attachNodeIndex; ni++) { rightFrontier.remove(0); } } else { throw new RuntimeException("No Attachment: " + chunks[ci]); } } rightFrontier.addAll(0,builtNodes); builtNodes.clear(); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_parser_treeinsert0100644 0000000 0000000 00000000160 14523004075 032704 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/treeinsert/package-info.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/parser/treeinsert/package-info.ja0100644 0000000 0000000 00000001700 14523004075 034133 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package containing experimental code for performing full syntactic * parsing using attachment decisions. */ package opennlp.tools.parser.treeinsert; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_postag_Configurab0100644 0000000 0000000 00000000170 14523004075 032601 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/ConfigurablePOSContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/ConfigurablePOSContextGene0100644 0000000 0000000 00000007564 14523004075 034177 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.util.ArrayList; import java.util.List; import java.util.Objects; import opennlp.tools.util.Cache; import opennlp.tools.util.featuregen.AdaptiveFeatureGenerator; /** * A configurable {@link POSContextGenerator context generator} for a {@link POSTagger}. * This implementation makes use of {@link AdaptiveFeatureGenerator}. * * @see POSTagger * @see POSTaggerME * @see DefaultPOSContextGenerator */ public class ConfigurablePOSContextGenerator implements POSContextGenerator { private Cache contextsCache; private Object wordsKey; private final AdaptiveFeatureGenerator featureGenerator; /** * Initializes a {@link ConfigurablePOSContextGenerator} instance. * A cache size of {@code 0} will be used as default. * * @param featureGenerator The {@link AdaptiveFeatureGenerator} to be used. */ public ConfigurablePOSContextGenerator(AdaptiveFeatureGenerator featureGenerator) { this(0, featureGenerator); } /** * Initializes a {@link ConfigurablePOSContextGenerator} instance. * * @param cacheSize The size of the {@link Cache} to set. * Must be greater than {@code 0} to have an effect. * @param featureGenerator The {@link AdaptiveFeatureGenerator} to be used. */ public ConfigurablePOSContextGenerator(int cacheSize, AdaptiveFeatureGenerator featureGenerator) { this.featureGenerator = Objects.requireNonNull(featureGenerator, "featureGenerator must not be null"); if (cacheSize > 0) { contextsCache = new Cache<>(cacheSize); } } /** * Returns the context for making a postag decision at the specified token {@code index} * given the specified {@code tokens} and previous {@code tags}. * * @param index The index of the token for which the context is provided. * @param tokens The tokens representing a sentence. * @param tags The tags assigned to the previous words in the sentence. * @param additionalContext The context for additional information. * * @return The context for making a postag decision at the specified token {@code index} * given the specified {@code tokens} and previous {@code tags}. */ @Override public String[] getContext(int index, String[] tokens, String[] tags, Object[] additionalContext) { String tagprev = null; String tagprevprev = null; if (index - 1 >= 0) { tagprev = tags[index - 1]; if (index - 2 >= 0) { tagprevprev = tags[index - 2]; } } String cacheKey = index + tagprev + tagprevprev; if (contextsCache != null) { if (wordsKey == tokens) { String[] cachedContexts = contextsCache.get(cacheKey); if (cachedContexts != null) { return cachedContexts; } } else { contextsCache.clear(); wordsKey = tokens; } } List e = new ArrayList<>(); featureGenerator.createFeatures(e, tokens, index, tags); String[] contexts = e.toArray(new String[0]); if (contextsCache != null) { contextsCache.put(cacheKey, contexts); } return contexts; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_postag_DefaultPOS0100644 0000000 0000000 00000000163 14523004075 032472 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/DefaultPOSContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/DefaultPOSContextGenerator0100644 0000000 0000000 00000015305 14523004075 034223 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.util.Cache; import opennlp.tools.util.StringList; /** * A default {@link POSContextGenerator context generator} for a {@link POSTagger}. * * @see POSTagger * @see POSTaggerME */ public class DefaultPOSContextGenerator implements POSContextGenerator { protected final String SE = "*SE*"; protected final String SB = "*SB*"; private static final int PREFIX_LENGTH = 4; private static final int SUFFIX_LENGTH = 4; private static final Pattern hasCap = Pattern.compile("[A-Z]"); private static final Pattern hasNum = Pattern.compile("[0-9]"); private Cache contextsCache; private Object wordsKey; private final Dictionary dict; /** * Initializes a {@link DefaultPOSContextGenerator} instance. * A cache size of {@code 0} will be used as default. * * @param dict The {@link Dictionary} to be used. */ public DefaultPOSContextGenerator(Dictionary dict) { this(0,dict); } /** * Initializes a {@link DefaultPOSContextGenerator} instance. * * @param cacheSize The size of the {@link Cache} to set. * Must be greater than {@code 0} to have an effect. * @param dict The {@link Dictionary} to be used. */ public DefaultPOSContextGenerator(int cacheSize, Dictionary dict) { this.dict = dict; if (cacheSize > 0) { contextsCache = new Cache<>(cacheSize); } } protected static String[] getPrefixes(String lex) { String[] prefs = new String[PREFIX_LENGTH]; for (int li = 0; li < PREFIX_LENGTH; li++) { prefs[li] = lex.substring(0, StrictMath.min(li + 1, lex.length())); } return prefs; } protected static String[] getSuffixes(String lex) { String[] suffs = new String[SUFFIX_LENGTH]; for (int li = 0; li < SUFFIX_LENGTH; li++) { suffs[li] = lex.substring(StrictMath.max(lex.length() - li - 1, 0)); } return suffs; } /** * Returns the context for making a postag decision at the specified token {@code index} * given the specified {@code tokens} and previous {@code tags}. * * @param index The index of the token for which the context is provided. * @param sequence The token sequence representing a sentence. * @param priorDecisions The tags assigned to the previous words in the sentence. * @param additionalContext The context for additional information. * * @return The context for making a postag decision at the specified token {@code index} * given the specified {@code tokens} and previous {@code tags}. */ @Override public String[] getContext(int index, String[] sequence, String[] priorDecisions, Object[] additionalContext) { return getContext(index,sequence,priorDecisions); } /** * Returns the context for making a postag decision at the specified token {@code index} * given the specified {@code tokens} and previous {@code tags}. * * @param index The index of the token for which the context is provided. * @param tokens The tokens representing a sentence. * @param tags The tags assigned to the previous words in the sentence. * * @return The context for making a postag decision at the specified token {@code index} * given the specified {@code tokens} and previous {@code tags}. */ public String[] getContext(int index, Object[] tokens, String[] tags) { String next, nextnext = null, lex, prev, prevprev = null; String tagprev, tagprevprev; tagprev = tagprevprev = null; lex = tokens[index].toString(); if (tokens.length > index + 1) { next = tokens[index + 1].toString(); if (tokens.length > index + 2) nextnext = tokens[index + 2].toString(); else nextnext = SE; // Sentence End } else { next = SE; // Sentence End } if (index - 1 >= 0) { prev = tokens[index - 1].toString(); tagprev = tags[index - 1]; if (index - 2 >= 0) { prevprev = tokens[index - 2].toString(); tagprevprev = tags[index - 2]; } else { prevprev = SB; // Sentence Beginning } } else { prev = SB; // Sentence Beginning } String cacheKey = index + tagprev + tagprevprev; if (contextsCache != null) { if (wordsKey == tokens) { String[] cachedContexts = contextsCache.get(cacheKey); if (cachedContexts != null) { return cachedContexts; } } else { contextsCache.clear(); wordsKey = tokens; } } List e = new ArrayList<>(); e.add("default"); // add the word itself e.add("w=" + lex); if (dict == null || !dict.contains(new StringList(lex))) { // do some basic suffix analysis String[] suffs = getSuffixes(lex); for (String suff : suffs) { e.add("suf=" + suff); } String[] prefs = getPrefixes(lex); for (String pref : prefs) { e.add("pre=" + pref); } // see if the word has any special characters if (lex.indexOf('-') != -1) { e.add("h"); } if (hasCap.matcher(lex).find()) { e.add("c"); } if (hasNum.matcher(lex).find()) { e.add("d"); } } // add the words and pos's of the surrounding context if (prev != null) { e.add("p=" + prev); if (tagprev != null) { e.add("t=" + tagprev); } if (prevprev != null) { e.add("pp=" + prevprev); if (tagprevprev != null) { e.add("t2=" + tagprevprev + "," + tagprev); } } } if (next != null) { e.add("n=" + next); if (nextnext != null) { e.add("nn=" + nextnext); } } String[] contexts = e.toArray(new String[0]); if (contextsCache != null) { contextsCache.put(cacheKey,contexts); } return contexts; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_postag_DefaultPOS0100644 0000000 0000000 00000000164 14523004075 032473 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/DefaultPOSSequenceValidator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/DefaultPOSSequenceValidato0100644 0000000 0000000 00000003174 14523004075 034165 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.util.Arrays; import opennlp.tools.util.SequenceValidator; /** * The default POS tagger {@link SequenceValidator} implementation. */ public class DefaultPOSSequenceValidator implements SequenceValidator { private final TagDictionary tagDictionary; /** * @param tagDictionary A {@link TagDictionary} used for the new {@link SequenceValidator}. */ public DefaultPOSSequenceValidator(TagDictionary tagDictionary) { this.tagDictionary = tagDictionary; } @Override public boolean validSequence(int i, String[] inputSequence, String[] outcomesSequence, String outcome) { if (tagDictionary == null) { return true; } else { String[] tags = tagDictionary.getTags(inputSequence[i]); return tags == null || Arrays.asList(tags).contains(outcome); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/MutableTagDictionary.java0100644 0000000 0000000 00000003043 14523004075 034030 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; /** * Interface that allows {@link TagDictionary} entries to be added and removed. * This can be used to induce the dictionary from training data. */ public interface MutableTagDictionary extends TagDictionary { /** * Associates the specified tags with the specified word. If the dictionary * previously contained keys for the word, the old tags are replaced by the * specified tags. * * @param word * word with which the specified tags is to be associated * @param tags * tags to be associated with the specified word * * @return the previous tags associated with the word, or null if there was no * mapping for word. */ String[] put(String word, String... tags); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/POSContextGenerator.java0100644 0000000 0000000 00000003371 14523004075 033636 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import opennlp.tools.util.BeamSearchContextGenerator; /** * Interface for a {@link BeamSearchContextGenerator} used in POS tagging. */ public interface POSContextGenerator extends BeamSearchContextGenerator { /** * Returns the context for making a postag decision at the specified token {@code index} * given the specified {@code tokens} and previous {@code tags}. * * @param index The index of the token for which the context is provided. * @param tokens The token sequence representing a sentence. * @param prevTags The tags assigned to the previous words in the sentence. * @param additionalContext The context for additional information. * * @return The context for making a postag decision at the specified token {@code index} * given the specified {@code tokens} and previous {@code tags}. */ String[] getContext(int index, String[] tokens, String[] prevTags, Object[] additionalContext); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/POSDictionary.java0100644 0000000 0000000 00000016453 14523004075 032455 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Objects; import opennlp.tools.dictionary.serializer.Attributes; import opennlp.tools.dictionary.serializer.DictionaryEntryPersistor; import opennlp.tools.dictionary.serializer.Entry; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.StringList; import opennlp.tools.util.StringUtil; import opennlp.tools.util.model.SerializableArtifact; /** * Provides a means of determining which tags are valid for a particular word * based on a {@link TagDictionary} read from a file. */ public class POSDictionary implements Iterable, MutableTagDictionary, SerializableArtifact { private Map dictionary; private boolean caseSensitive = true; /** * Initializes an empty case sensitive {@link POSDictionary}. */ public POSDictionary() { this(true); } /** * Initializes an empty {@link POSDictionary}. * * @param caseSensitive {@code true} if the {@link POSDictionary} is case sensitive, * {@code false} otherwise. */ public POSDictionary(boolean caseSensitive) { dictionary = new HashMap<>(); this.caseSensitive = caseSensitive; } /** * Returns a list of valid tags for the specified {@code word}. * * @param word The word. * * @return An array of valid tags for the specified word or * {@code null} if no information is available for that word. */ public String[] getTags(String word) { if (caseSensitive) { return dictionary.get(word); } else { return dictionary.get(StringUtil.toLowerCase(word)); } } /** * Retrieves an {@link Iterator} over all words in the dictionary. */ public Iterator iterator() { return dictionary.keySet().iterator(); } private static String tagsToString(String[] tags) { StringBuilder tagString = new StringBuilder(); for (String tag : tags) { tagString.append(tag); tagString.append(' '); } // remove last space if (tagString.length() > 0) { tagString.setLength(tagString.length() - 1); } return tagString.toString(); } /** * Writes the {@link POSDictionary} to the given {@link OutputStream}; *

* After the serialization is finished the provided * {@link OutputStream} remains open. * * @param out * the {@link OutputStream} to write the dictionary into. * * @throws IOException * Throw if writing to the {@link OutputStream} fails */ public void serialize(OutputStream out) throws IOException { Iterator entries = new Iterator<>() { final Iterator iterator = dictionary.keySet().iterator(); public boolean hasNext() { return iterator.hasNext(); } public Entry next() { String word = iterator.next(); Attributes tagAttribute = new Attributes(); tagAttribute.setValue("tags", tagsToString(getTags(word))); return new Entry(new StringList(word), tagAttribute); } public void remove() { throw new UnsupportedOperationException(); } }; DictionaryEntryPersistor.serialize(out, entries, caseSensitive); } @Override public int hashCode() { int[] keyHashes = new int[dictionary.size()]; int[] valueHashes = new int[dictionary.size()]; int i = 0; for (String word : this) { keyHashes[i] = word.hashCode(); valueHashes[i] = Arrays.hashCode(getTags(word)); i++; } Arrays.sort(keyHashes); Arrays.sort(valueHashes); return Objects.hash(Arrays.hashCode(keyHashes), Arrays.hashCode(valueHashes)); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof POSDictionary posDictionary) { if (this.dictionary.size() == posDictionary.dictionary.size()) { for (String word : this) { if (!Arrays.equals(getTags(word), posDictionary.getTags(word))) { return false; } } return true; } } return false; } @Override public String toString() { // it is time-consuming to output the dictionary entries. // will output something meaningful for debugging, like // POSDictionary{size=100, caseSensitive=true} return "POSDictionary{size=" + dictionary.size() + ", caseSensitive=" + this.caseSensitive + "}"; } /** * Creates a new {@link POSDictionary} from an {@link InputStream}. *

* After creation is finished the provided {@link InputStream} is closed. * * @param in The {@link InputStream} used for creating the {@link POSDictionary}. * The stream must be open and have bytes available to read from. * * @return A valid {@link POSDictionary} instance. * * @throws IOException Thrown if IO errors occurred during creation. * @throws InvalidFormatException Thrown if the entries don't have exactly one token. */ public static POSDictionary create(InputStream in) throws IOException { final POSDictionary newPosDict = new POSDictionary(); boolean isCaseSensitive = DictionaryEntryPersistor.create(in, entry -> { String tagString = entry.attributes().getValue("tags"); String[] tags = tagString.split(" "); StringList word = entry.tokens(); if (word.size() != 1) throw new InvalidFormatException("Each entry must have exactly one token! " + word); newPosDict.dictionary.put(word.getToken(0), tags); }); newPosDict.caseSensitive = isCaseSensitive; // TODO: The dictionary API needs to be improved to do this better! if (!isCaseSensitive) { Map lowerCasedDictionary = new HashMap<>(); for (Map.Entry entry : newPosDict.dictionary.entrySet()) { lowerCasedDictionary.put(StringUtil.toLowerCase(entry.getKey()), entry.getValue()); } newPosDict.dictionary = lowerCasedDictionary; } return newPosDict; } @Override public String[] put(String word, String... tags) { if (this.caseSensitive) { return dictionary.put(word, tags); } else { return dictionary.put(StringUtil.toLowerCase(word), tags); } } @Override public boolean isCaseSensitive() { return this.caseSensitive; } @Override public Class getArtifactSerializerClass() { return POSTaggerFactory.POSDictionarySerializer.class; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/POSEvaluator.java0100644 0000000 0000000 00000005676 14523004075 032317 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import opennlp.tools.util.eval.Evaluator; import opennlp.tools.util.eval.Mean; /** * The {@link POSEvaluator} measures the performance of the given {@link POSTagger} * with the provided reference {@link POSSample samples}. */ public class POSEvaluator extends Evaluator { private final POSTagger tagger; private final Mean wordAccuracy = new Mean(); /** * Initializes the current instance. * * @param tagger The {@link POSTagger} to evaluate. * @param listeners the {@link POSTaggerEvaluationMonitor evaluation listeners}. */ public POSEvaluator(POSTagger tagger, POSTaggerEvaluationMonitor ... listeners) { super(listeners); this.tagger = tagger; } /** * Evaluates the given reference {@link POSSample} object. * This is done by tagging the sentence from the reference * {@link POSSample} with the {@link POSTagger}. The * tags are then used to update the word accuracy score. * * @param reference The {@link POSSample} to process. * * @return The predicted {@link POSSample}. */ @Override protected POSSample processSample(POSSample reference) { String[] predictedTags = tagger.tag(reference.getSentence(), reference.getAdditionalContext()); String[] referenceTags = reference.getTags(); for (int i = 0; i < referenceTags.length; i++) { if (referenceTags[i].equals(predictedTags[i])) { wordAccuracy.add(1); } else { wordAccuracy.add(0); } } return new POSSample(reference.getSentence(), predictedTags); } /** * Accuracy defined as: * {@code word accuracy = correctly detected tags / total words} * * @return Retrieves the mean word accuracy. */ public double getWordAccuracy() { return wordAccuracy.mean(); } /** * @return Retrieves the total number of words considered in the evaluation. */ public long getWordCount() { return wordAccuracy.count(); } /** * Represents this object as human-readable {@link String}. */ @Override public String toString() { return "Accuracy:" + wordAccuracy.mean() + " Number of Samples: " + wordAccuracy.count(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/POSModel.java0100644 0000000 0000000 00000022323 14523004075 031401 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.file.Path; import java.util.Arrays; import java.util.Map; import java.util.Objects; import java.util.Properties; import opennlp.tools.ml.BeamSearch; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.ml.model.SequenceClassificationModel; import opennlp.tools.util.BaseToolFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.model.ArtifactSerializer; import opennlp.tools.util.model.BaseModel; import opennlp.tools.util.model.ByteArraySerializer; import opennlp.tools.util.model.POSModelSerializer; import opennlp.tools.util.model.SerializableArtifact; /** * The {@link POSModel} is the model used by a learnable {@link POSTagger}. * * @see POSTaggerME */ public final class POSModel extends BaseModel implements SerializableArtifact { private static final long serialVersionUID = -6014331858195322339L; private static final String COMPONENT_NAME = "POSTaggerME"; static final String POS_MODEL_ENTRY_NAME = "pos.model"; static final String GENERATOR_DESCRIPTOR_ENTRY_NAME = "generator.featuregen"; /** * Initializes a {@link POSModel} instance via given parameters. * * @param languageCode An ISO conform language code. * @param posModel A valid {@link SequenceClassificationModel}. * @param manifestInfoEntries Additional information kept in the manifest. * @param posFactory The {@link POSTaggerFactory} for creating related objects. */ public POSModel(String languageCode, SequenceClassificationModel posModel, Map manifestInfoEntries, POSTaggerFactory posFactory) { super(COMPONENT_NAME, languageCode, manifestInfoEntries, posFactory); artifactMap.put(POS_MODEL_ENTRY_NAME, Objects.requireNonNull(posModel, "posModel must not be null")); artifactMap.put(GENERATOR_DESCRIPTOR_ENTRY_NAME, posFactory.getFeatureGenerator()); artifactMap.putAll(posFactory.getResources()); // TODO: This fails probably for the sequence model ... ?! // checkArtifactMap(); } /** * Initializes a {@link POSModel} instance via given parameters. * * @param languageCode An ISO conform language code. * @param posModel A valid {@link MaxentModel}. * @param manifestInfoEntries Additional information kept in the manifest. * @param posFactory The {@link POSTaggerFactory} for creating related objects. */ public POSModel(String languageCode, MaxentModel posModel, Map manifestInfoEntries, POSTaggerFactory posFactory) { this(languageCode, posModel, POSTaggerME.DEFAULT_BEAM_SIZE, manifestInfoEntries, posFactory); } /** * Initializes a {@link POSModel} instance via given parameters. * * @param languageCode An ISO conform language code. * @param posModel A valid {@link MaxentModel}. * @param beamSize The size of the beam that should be used when decoding sequences. * @param manifestInfoEntries Additional information kept in the manifest. * @param posFactory The {@link POSTaggerFactory} for creating related objects. */ public POSModel(String languageCode, MaxentModel posModel, int beamSize, Map manifestInfoEntries, POSTaggerFactory posFactory) { super(COMPONENT_NAME, languageCode, manifestInfoEntries, posFactory); Objects.requireNonNull(posModel, "posModel must not be null"); Properties manifest = (Properties) artifactMap.get(MANIFEST_ENTRY); manifest.setProperty(BeamSearch.BEAM_SIZE_PARAMETER, Integer.toString(beamSize)); artifactMap.put(POS_MODEL_ENTRY_NAME, posModel); artifactMap.put(GENERATOR_DESCRIPTOR_ENTRY_NAME, posFactory.getFeatureGenerator()); artifactMap.putAll(posFactory.getResources()); checkArtifactMap(); } /** * Initializes a {@link POSModel} instance via a valid {@link InputStream}. * * @param in The {@link InputStream} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public POSModel(InputStream in) throws IOException { super(COMPONENT_NAME, in); } /** * Initializes a {@link POSModel} instance via a valid {@link File}. * * @param modelFile The {@link File} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public POSModel(File modelFile) throws IOException { super(COMPONENT_NAME, modelFile); } /** * Initializes a {@link POSModel} instance via a valid {@link Path}. * * @param modelPath The {@link Path} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public POSModel(Path modelPath) throws IOException { this(modelPath.toFile()); } /** * Initializes a {@link POSModel} instance via a valid {@link URL}. * * @param modelURL The {@link URL} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public POSModel(URL modelURL) throws IOException { super(COMPONENT_NAME, modelURL); } @Override protected Class getDefaultFactory() { return POSTaggerFactory.class; } @Override protected void validateArtifactMap() throws InvalidFormatException { super.validateArtifactMap(); if (!(artifactMap.get(POS_MODEL_ENTRY_NAME) instanceof MaxentModel)) { throw new InvalidFormatException("POS model is incomplete!"); } } @Override protected boolean skipEntryForSerialization(Map.Entry entry) { // An old model format was detected, skipping the process for this entry, see: OPENNLP-1369 return GENERATOR_DESCRIPTOR_ENTRY_NAME.equals(entry.getKey()) && entry.getValue() == null; } /** * @deprecated use {@link POSModel#getPosSequenceModel} instead. This method will be removed soon. * Only required for Parser 1.5.x backward compatibility. Newer models don't need this anymore. */ @Deprecated public MaxentModel getPosModel() { if (artifactMap.get(POS_MODEL_ENTRY_NAME) instanceof MaxentModel) { return (MaxentModel) artifactMap.get(POS_MODEL_ENTRY_NAME); } else { return null; } } /** * @return Retrieves a {@link SequenceClassificationModel}. */ public SequenceClassificationModel getPosSequenceModel() { Properties manifest = (Properties) artifactMap.get(MANIFEST_ENTRY); if (artifactMap.get(POS_MODEL_ENTRY_NAME) instanceof MaxentModel) { String beamSizeString = manifest.getProperty(BeamSearch.BEAM_SIZE_PARAMETER); int beamSize = POSTaggerME.DEFAULT_BEAM_SIZE; if (beamSizeString != null) { beamSize = Integer.parseInt(beamSizeString); } return new BeamSearch<>(beamSize, (MaxentModel) artifactMap.get(POS_MODEL_ENTRY_NAME)); } else if (artifactMap.get(POS_MODEL_ENTRY_NAME) instanceof SequenceClassificationModel) { return (SequenceClassificationModel) artifactMap.get(POS_MODEL_ENTRY_NAME); } else { return null; } } /** * @return Retrieves the active {@link POSTaggerFactory}. */ public POSTaggerFactory getFactory() { return (POSTaggerFactory) this.toolFactory; } @Override protected void createArtifactSerializers(Map serializers) { super.createArtifactSerializers(serializers); serializers.put("featuregen", new ByteArraySerializer()); } @Override public Class getArtifactSerializerClass() { return POSModelSerializer.class; } @Override public int hashCode() { return Objects.hash(artifactMap.get("manifest.properties"), artifactMap.get("pos.model"), Arrays.hashCode((byte[]) artifactMap.get(GENERATOR_DESCRIPTOR_ENTRY_NAME)) ); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof POSModel model) { Map artifactMapToCheck = model.artifactMap; AbstractModel abstractModel = (AbstractModel) artifactMapToCheck.get("pos.model"); return artifactMap.get("manifest.properties").equals(artifactMapToCheck.get("manifest.properties")) && artifactMap.get("pos.model").equals(abstractModel) && Arrays.equals((byte[]) artifactMap.get(GENERATOR_DESCRIPTOR_ENTRY_NAME), (byte[]) artifactMapToCheck.get(GENERATOR_DESCRIPTOR_ENTRY_NAME)); } return false; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/POSSample.java0100644 0000000 0000000 00000013634 14523004075 031567 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Objects; import opennlp.tools.commons.Sample; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.InvalidFormatException; /** * Represents an pos-tagged {@link Sample sentence}. */ public class POSSample implements Sample { private static final long serialVersionUID = -5782784526335651421L; private final List sentence; private final List tags; private final String[][] additionalContext; /** * Initializes a {@link POSSample} instance. * * @param sentence The sentence of tokens to be tagged. * @param tags An array of pos tags for each token provided in {@code sentence}. */ public POSSample(String[] sentence, String[] tags) { this(sentence, tags, null); } /** * Initializes a {@link POSSample} instance. * * @param sentence The sentence to be tagged. * @param tags A {@link List} of pos tags for each token provided in {@code sentence}. */ public POSSample(List sentence, List tags) { this(sentence, tags, null); } /** * Initializes a {@link POSSample} instance. * * @param sentence The sentence to be tagged. * @param tags A {@link List} of pos tags for each token provided in {@code sentence}. * @param additionalContext A 2D array which holds additional information for the context. */ public POSSample(List sentence, List tags, String[][] additionalContext) { this.sentence = Collections.unmodifiableList(sentence); this.tags = Collections.unmodifiableList(tags); checkArguments(); String[][] ac; if (additionalContext != null) { ac = new String[additionalContext.length][]; for (int i = 0; i < additionalContext.length; i++) { ac[i] = new String[additionalContext[i].length]; System.arraycopy(additionalContext[i], 0, ac[i], 0, additionalContext[i].length); } } else { ac = null; } this.additionalContext = ac; } /** * Initializes a {@link POSSample} instance. * * @param sentence The sentence to be tagged. * @param tags An array of pos tags for each token provided in {@code sentence}. * @param additionalContext A 2D array which holds additional information for the context. */ public POSSample(String[] sentence, String[] tags, String[][] additionalContext) { this(Arrays.asList(sentence), Arrays.asList(tags), additionalContext); } private void checkArguments() { if (sentence.size() != tags.size()) { throw new IllegalArgumentException( "There must be exactly one tag for each token. tokens: " + sentence.size() + ", tags: " + tags.size()); } if (sentence.contains(null)) { throw new IllegalArgumentException("null elements are not allowed in sentence tokens!"); } if (tags.contains(null)) { throw new IllegalArgumentException("null elements are not allowed in tags!"); } } /** * @return Retrieves the sentence as array. */ public String[] getSentence() { return sentence.toArray(new String[0]); } /** * @return Retrieves the tags as array. */ public String[] getTags() { return tags.toArray(new String[0]); } /** * @return Retrieves additional information for the context. */ public String[][] getAdditionalContext() { return this.additionalContext; } @Override public String toString() { StringBuilder result = new StringBuilder(); for (int i = 0; i < getSentence().length; i++) { result.append(getSentence()[i]); result.append('_'); result.append(getTags()[i]); result.append(' '); } if (result.length() > 0) { // get rid of last space result.setLength(result.length() - 1); } return result.toString(); } /** * Parses a {@code sentenceString}. * * @param sentenceString The sentence to be parsed. * @return A valid {@link POSSample} result. * * @throws InvalidFormatException Thrown if errors occurred during parsing. */ public static POSSample parse(String sentenceString) throws InvalidFormatException { String[] tokenTags = WhitespaceTokenizer.INSTANCE.tokenize(sentenceString); String[] sentence = new String[tokenTags.length]; String[] tags = new String[tokenTags.length]; for (int i = 0; i < tokenTags.length; i++) { int split = tokenTags[i].lastIndexOf("_"); if (split == -1) { throw new InvalidFormatException("Cannot find \"_\" inside token '" + tokenTags[i] + "'!"); } sentence[i] = tokenTags[i].substring(0, split); tags[i] = tokenTags[i].substring(split + 1); } return new POSSample(sentence, tags); } @Override public int hashCode() { return Objects.hash(Arrays.hashCode(getSentence()), Arrays.hashCode(getTags())); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof POSSample a) { return Arrays.equals(getSentence(), a.getSentence()) && Arrays.equals(getTags(), a.getTags()); } return false; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/POSSampleEventStream.java0100644 0000000 0000000 00000006112 14523004075 033736 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import opennlp.tools.ml.model.Event; import opennlp.tools.util.AbstractEventStream; import opennlp.tools.util.ObjectStream; /** * Reads the {@link POSSample samples} from an {@link Iterator} * and converts those samples into {@link Event events} which * can be used by the maxent library for training. */ public class POSSampleEventStream extends AbstractEventStream { /** * The {@link POSContextGenerator} used to create the training {@link Event events}. */ private final POSContextGenerator cg; /** * Initializes the current instance with the given samples and a {@link POSContextGenerator}. * * @param samples The data stream for this event stream. * @param cg A {@link POSContextGenerator} to process the event stream {@code samples}. */ public POSSampleEventStream(ObjectStream samples, POSContextGenerator cg) { super(samples); this.cg = cg; } /** * Initializes the current instance with given samples * and a {@link DefaultPOSContextGenerator}. * * @param samples The data stream for this event stream. */ public POSSampleEventStream(ObjectStream samples) { this(samples, new DefaultPOSContextGenerator(null)); } @Override protected Iterator createEvents(POSSample sample) { String[] sentence = sample.getSentence(); String[] tags = sample.getTags(); Object[] ac = sample.getAdditionalContext(); List events = generateEvents(sentence, tags, ac, cg); return events.iterator(); } public static List generateEvents(String[] sentence, String[] tags, Object[] additionalContext, POSContextGenerator cg) { List events = new ArrayList<>(sentence.length); for (int i = 0; i < sentence.length; i++) { // it is safe to pass the tags as previous tags because // the context generator does not look for non predicted tags String[] context = cg.getContext(i, sentence, tags, additionalContext); events.add(new Event(tags[i], context)); } return events; } public static List generateEvents(String[] sentence, String[] tags, POSContextGenerator cg) { return generateEvents(sentence, tags, null, cg); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_postag_POSSampleS0100644 0000000 0000000 00000000160 14523004075 032447 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/POSSampleSequenceStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/POSSampleSequenceStream.ja0100644 0000000 0000000 00000006534 14523004075 034106 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.io.IOException; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.Sequence; import opennlp.tools.ml.model.SequenceStream; import opennlp.tools.util.ObjectStream; /** * A {@link SequenceStream} implementation encapsulating {@link POSSample samples}. */ public class POSSampleSequenceStream implements SequenceStream { private final POSContextGenerator pcg; private final ObjectStream psi; /** * Creates a {@link POSSampleSequenceStream} with given {@code samples} using * a {@link DefaultPOSContextGenerator}. * * @param psi The data stream of {@link POSSample samples}. */ public POSSampleSequenceStream(ObjectStream psi) { this(psi, new DefaultPOSContextGenerator(null)); } /** * Creates a {@link POSSampleSequenceStream} with given {@code samples} using * a {@link POSContextGenerator}. * * @param psi The data stream of {@link POSSample samples}. * @param pcg A {@link POSContextGenerator} which shall be used. */ public POSSampleSequenceStream(ObjectStream psi, POSContextGenerator pcg) { this.psi = psi; this.pcg = pcg; } @Override public Event[] updateContext(Sequence pss, AbstractModel model) { POSTagger tagger = new POSTaggerME(new POSModel("x-unspecified", model, null, new POSTaggerFactory())); String[] sentence = pss.getSource().getSentence(); Object[] ac = pss.getSource().getAdditionalContext(); String[] tags = tagger.tag(pss.getSource().getSentence()); Event[] events = new Event[sentence.length]; POSSampleEventStream.generateEvents(sentence, tags, ac, pcg).toArray(events); return events; } @Override public Sequence read() throws IOException { POSSample sample = psi.read(); if (sample != null) { String[] sentence = sample.getSentence(); String[] tags = sample.getTags(); Event[] events = new Event[sentence.length]; for (int i = 0; i < sentence.length; i++) { // it is safe to pass the tags as previous tags because // the context generator does not look for non predicted tags String[] context = pcg.getContext(i, sentence, tags, null); events[i] = new Event(tags[i], context); } return new Sequence<>(events,sample); } return null; } @Override public void reset() throws IOException, UnsupportedOperationException { psi.reset(); } @Override public void close() throws IOException { psi.close(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/POSTagger.java0100644 0000000 0000000 00000004265 14523004075 031557 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import opennlp.tools.util.Sequence; /** * The interface for part of speech taggers. */ public interface POSTagger { /** * Assigns the sentence of tokens pos tags. * * @param sentence The sentence of tokens to be tagged. * @return An array of pos tags for each token provided in {@code sentence}. */ String[] tag(String[] sentence); /** * Assigns the sentence of tokens pos tags. * * @param sentence The sentence of tokens to be tagged. * @param additionalContext The context to provide additional information with. * * @return An array of pos tags for each token provided in {@code sentence}. */ String[] tag(String[] sentence, Object[] additionalContext); /** * Assigns the sentence the top-k {@link Sequence sequences}. * * @param sentence The sentence of tokens to be tagged. * * @return An array of {@link Sequence sequences} for each token provided in {@code sentence}. */ Sequence[] topKSequences(String[] sentence); /** * Assigns the sentence the top-k {@link Sequence sequences}. * * @param sentence The sentence of tokens to be tagged. * @param additionalContext The context to provide additional information with. * * @return An array of {@link Sequence sequences} for each token provided in {@code sentence}. */ Sequence[] topKSequences(String[] sentence, Object[] additionalContext); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_postag_POSTaggerC0100644 0000000 0000000 00000000160 14523004075 032417 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/POSTaggerCrossValidator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/POSTaggerCrossValidator.ja0100644 0000000 0000000 00000014311 14523004075 034101 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.io.File; import java.io.IOException; import java.util.Map; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.eval.CrossValidationPartitioner; import opennlp.tools.util.eval.Mean; public class POSTaggerCrossValidator { private final String languageCode; private final TrainingParameters params; private byte[] featureGeneratorBytes; private Map resources; private final Mean wordAccuracy = new Mean(); private final POSTaggerEvaluationMonitor[] listeners; /* this will be used to load the factory after the ngram dictionary was created */ private String factoryClassName; /* user can also send a ready to use factory */ private POSTaggerFactory factory; private final Integer tagdicCutoff; private File tagDictionaryFile; /** * Initializes a {@link POSTaggerCrossValidator} that builds a ngram dictionary * dynamically. It instantiates a subclass of {@link POSTaggerFactory} using * the tag and the ngram dictionaries. * * @param languageCode An ISO conform language code. * @param trainParam The {@link TrainingParameters} for the context of cross validation. * @param tagDictionary The {@link File} that references the a {@link TagDictionary}. * @param featureGeneratorBytes The bytes for feature generation. * @param resources Additional resources as key-value map. * @param factoryClass The class name used for factory instantiation. * @param listeners The {@link POSTaggerEvaluationMonitor evaluation listeners}. */ public POSTaggerCrossValidator(String languageCode, TrainingParameters trainParam, File tagDictionary, byte[] featureGeneratorBytes, Map resources, Integer tagdicCutoff, String factoryClass, POSTaggerEvaluationMonitor... listeners) { this.languageCode = languageCode; this.params = trainParam; this.featureGeneratorBytes = featureGeneratorBytes; this.resources = resources; this.listeners = listeners; this.factoryClassName = factoryClass; this.tagdicCutoff = tagdicCutoff; this.tagDictionaryFile = tagDictionary; } /** * Creates a {@link POSTaggerCrossValidator} using the given {@link POSTaggerFactory}. * * @param languageCode An ISO conform language code. * @param trainParam The {@link TrainingParameters} for the context of cross validation. * @param factory The {@link POSTaggerFactory} to be used. * @param listeners The {@link POSTaggerEvaluationMonitor evaluation listeners}. */ public POSTaggerCrossValidator(String languageCode, TrainingParameters trainParam, POSTaggerFactory factory, POSTaggerEvaluationMonitor... listeners) { this.languageCode = languageCode; this.params = trainParam; this.listeners = listeners; this.factory = factory; this.tagdicCutoff = null; } /** * Starts the evaluation. * * @param samples The {@link ObjectStream} of {@link POSSample samples} to train and test with. * @param nFolds Number of folds. It must be greater than zero. * * @throws IOException Thrown if IO errors occurred. */ public void evaluate(ObjectStream samples, int nFolds) throws IOException { CrossValidationPartitioner partitioner = new CrossValidationPartitioner<>( samples, nFolds); while (partitioner.hasNext()) { CrossValidationPartitioner.TrainingSampleStream trainingSampleStream = partitioner .next(); if (this.tagDictionaryFile != null && this.factory.getTagDictionary() == null) { this.factory.setTagDictionary(this.factory .createTagDictionary(tagDictionaryFile)); } TagDictionary dict = null; if (this.tagdicCutoff != null) { dict = this.factory.getTagDictionary(); if (dict == null) { dict = this.factory.createEmptyTagDictionary(); } if (dict instanceof MutableTagDictionary) { POSTaggerME.populatePOSDictionary(trainingSampleStream, (MutableTagDictionary)dict, this.tagdicCutoff); } else { throw new IllegalArgumentException( "Can't extend a TagDictionary that does not implement MutableTagDictionary."); } trainingSampleStream.reset(); } if (this.factory == null) { this.factory = POSTaggerFactory.create(this.factoryClassName, null, null); } factory.init(featureGeneratorBytes, resources, dict); POSModel model = POSTaggerME.train(languageCode, trainingSampleStream, params, this.factory); POSEvaluator evaluator = new POSEvaluator(new POSTaggerME(model), listeners); evaluator.evaluate(trainingSampleStream.getTestSampleStream()); wordAccuracy.add(evaluator.getWordAccuracy(), evaluator.getWordCount()); if (this.tagdicCutoff != null) { this.factory.setTagDictionary(null); } } } /** * @return Retrieves the accuracy for all iterations. */ public double getWordAccuracy() { return wordAccuracy.mean(); } /** * @return Retrieves the number of words which where validated * over all iterations. The result is the amount of folds * multiplied by the total number of words. */ public long getWordCount() { return wordAccuracy.count(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_postag_POSTaggerE0100644 0000000 0000000 00000000163 14523004075 032424 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/POSTaggerEvaluationMonitor.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/POSTaggerEvaluationMonitor0100644 0000000 0000000 00000002026 14523004075 034230 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import opennlp.tools.util.eval.EvaluationMonitor; /** * A marker interface for evaluating {@link POSTagger pos taggers}. */ public interface POSTaggerEvaluationMonitor extends EvaluationMonitor { } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/POSTaggerFactory.java0100644 0000000 0000000 00000037770 14523004075 033116 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Collections; import java.util.HashSet; import java.util.Map; import java.util.Properties; import java.util.Set; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.util.BaseToolFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.SequenceValidator; import opennlp.tools.util.Version; import opennlp.tools.util.ext.ExtensionLoader; import opennlp.tools.util.featuregen.AdaptiveFeatureGenerator; import opennlp.tools.util.featuregen.AggregatedFeatureGenerator; import opennlp.tools.util.featuregen.GeneratorFactory; import opennlp.tools.util.model.ArtifactSerializer; import opennlp.tools.util.model.UncloseableInputStream; /** * The factory that provides {@link POSTagger} default implementations and resources. */ public class POSTaggerFactory extends BaseToolFactory { private static final String TAG_DICTIONARY_ENTRY_NAME = "tags.tagdict"; private static final String NGRAM_DICTIONARY_ENTRY_NAME = "ngram.dictionary"; protected Dictionary ngramDictionary; private byte[] featureGeneratorBytes; private Map resources; protected TagDictionary posDictionary; /** * Initializes a {@link POSTaggerFactory} that provides the default implementation * of the resources. */ public POSTaggerFactory() { } /** * Initializes a {@link POSTaggerFactory} from a given set of the resources. * * @param featureGeneratorBytes The bytes for feature generation. * @param resources Additional resources as key-value map. * @param posDictionary A {@link TagDictionary} used for the new instance. */ public POSTaggerFactory(byte[] featureGeneratorBytes, final Map resources, TagDictionary posDictionary) { this.featureGeneratorBytes = featureGeneratorBytes; if (this.featureGeneratorBytes == null) { this.featureGeneratorBytes = loadDefaultFeatureGeneratorBytes(); } this.resources = resources; this.posDictionary = posDictionary; } // reduced visibility to ensure deprecation is respected in future versions @Deprecated(forRemoval = true) POSTaggerFactory(Dictionary ngramDictionary, TagDictionary posDictionary) { this.init(ngramDictionary, posDictionary); // TODO: This could be made functional by creating some default feature generation // which uses the dictionary ... } // reduced visibility to ensure deprecation is respected in future versions // will be removed when only 8 series models are supported @Deprecated(forRemoval = true) void init(Dictionary ngramDictionary, TagDictionary posDictionary) { this.ngramDictionary = ngramDictionary; this.posDictionary = posDictionary; } protected void init(byte[] featureGeneratorBytes, final Map resources, TagDictionary posDictionary) { this.featureGeneratorBytes = featureGeneratorBytes; this.resources = resources; this.posDictionary = posDictionary; } /* * Loads the default feature generator bytes via classpath resources. */ private static byte[] loadDefaultFeatureGeneratorBytes() { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); InputStream resource = POSTaggerFactory.class.getResourceAsStream( "/opennlp/tools/postag/pos-default-features.xml"); if (resource == null) { throw new IllegalStateException("Classpath must contain 'pos-default-features.xml' file!"); } try (InputStream in = new BufferedInputStream(resource)) { byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { bytes.write(buf, 0, len); } } catch (IOException e) { throw new IllegalStateException("Failed reading from 'pos-default-features.xml' file on classpath!"); } return bytes.toByteArray(); } /** * Creates the {@link AdaptiveFeatureGenerator}. Usually this * is a set of generators contained in the {@link AggregatedFeatureGenerator}. *

* Note: * The generators are created on every call to this method. * * @return the feature generator or {@code null} if there is no descriptor in the model * @throws IllegalStateException Thrown if inconsistencies occurred during creation. */ public AdaptiveFeatureGenerator createFeatureGenerators() { if (featureGeneratorBytes == null && artifactProvider != null) { featureGeneratorBytes = artifactProvider.getArtifact( POSModel.GENERATOR_DESCRIPTOR_ENTRY_NAME); } if (featureGeneratorBytes == null) { featureGeneratorBytes = loadDefaultFeatureGeneratorBytes(); } AdaptiveFeatureGenerator generator; try (InputStream descriptorIn = new ByteArrayInputStream(featureGeneratorBytes)) { generator = GeneratorFactory.create(descriptorIn, key -> { if (artifactProvider != null) { return artifactProvider.getArtifact(key); } else { return resources.get(key); } }); } catch (InvalidFormatException e) { // It is assumed that the creation of the feature generation does not // fail after it succeeded once during model loading. // But it might still be possible that such an exception is thrown, // in this case the caller should not be forced to handle the exception // and a Runtime Exception is thrown instead. // If the re-creation of the feature generation fails it is assumed // that this can only be caused by a programming mistake and therefore // throwing a Runtime Exception is reasonable throw new IllegalStateException(e); // FeatureGeneratorCreationError(e); } catch (IOException e) { throw new IllegalStateException("Reading from mem cannot result in an I/O error", e); } return generator; } @Override @SuppressWarnings("rawtypes") public Map createArtifactSerializersMap() { Map serializers = super.createArtifactSerializersMap(); // NOTE: This is only needed for old models and this if can be removed if support is dropped POSDictionarySerializer.register(serializers); return serializers; } @Override public Map createArtifactMap() { Map artifactMap = super.createArtifactMap(); if (posDictionary != null) { artifactMap.put(TAG_DICTIONARY_ENTRY_NAME, posDictionary); } if (ngramDictionary != null) { artifactMap.put(NGRAM_DICTIONARY_ENTRY_NAME, ngramDictionary); } return artifactMap; } /** * Initializes a {@link TagDictionary} from a {@link File dictionary file}. * * @param dictionary The {@link File} used for creating the dictionary. * @return A valid {@link TagDictionary} ready for use. * @throws IOException Thrown if IO errors occurred during creation. */ public TagDictionary createTagDictionary(File dictionary) throws IOException { return createTagDictionary(new BufferedInputStream(new FileInputStream(dictionary))); } /** * Initializes a {@link TagDictionary} from a {@link InputStream dictionary stream}. * * @param in The {@link InputStream} used for creating the dictionary. * @return A valid {@link TagDictionary} ready for use. * @throws IOException Thrown if IO errors occurred during creation. */ public TagDictionary createTagDictionary(InputStream in) throws IOException { return POSDictionary.create(in); } public void setTagDictionary(TagDictionary dictionary) { if (artifactProvider != null) { throw new IllegalStateException( "Can not set tag dictionary while using artifact provider."); } this.posDictionary = dictionary; } /** * @return The key-value based resources map, or an empty map. */ protected Map getResources() { if (resources != null) { return resources; } return Collections.emptyMap(); } /** * @return The feature generator bytes used. */ protected byte[] getFeatureGenerator() { return featureGeneratorBytes; } /** * @return The {@link TagDictionary} used. */ public TagDictionary getTagDictionary() { if (this.posDictionary == null && artifactProvider != null) { this.posDictionary = artifactProvider.getArtifact(TAG_DICTIONARY_ENTRY_NAME); } return this.posDictionary; } @Deprecated(forRemoval = true) // will be removed when only 8 series models are supported private Dictionary getDictionary() { if (this.ngramDictionary == null && artifactProvider != null) { this.ngramDictionary = artifactProvider.getArtifact(NGRAM_DICTIONARY_ENTRY_NAME); } return this.ngramDictionary; } /** * @return The {@link POSContextGenerator} with a default cache size of {@code 0}. */ public POSContextGenerator getPOSContextGenerator() { return getPOSContextGenerator(0); } /** * @param cacheSize Must be greater than or equal to {@code 0}. * @return The {@link POSContextGenerator} configured with the given {@code cacheSize}. */ public POSContextGenerator getPOSContextGenerator(int cacheSize) { if (artifactProvider != null) { Properties manifest = artifactProvider.getArtifact("manifest.properties"); String version = manifest.getProperty("OpenNLP-Version"); Version v = Version.parse(version); if (v.getMajor() == 1 && v.getMinor() < 8) { return new DefaultPOSContextGenerator(cacheSize, getDictionary()); } } return new ConfigurablePOSContextGenerator(cacheSize, createFeatureGenerators()); } /** * @return The {@link SequenceValidator} used. */ public SequenceValidator getSequenceValidator() { return new DefaultPOSSequenceValidator(getTagDictionary()); } // TODO: This should not be done anymore for 8 models, they can just // use the SerializableArtifact interface public static class POSDictionarySerializer implements ArtifactSerializer { @Override public POSDictionary create(InputStream in) throws IOException { return POSDictionary.create(new UncloseableInputStream(in)); } @Override public void serialize(POSDictionary artifact, OutputStream out) throws IOException { artifact.serialize(out); } @SuppressWarnings("rawtypes") static void register(Map factories) { factories.put("tagdict", new POSDictionarySerializer()); } } protected void validatePOSDictionary(POSDictionary posDict, AbstractModel posModel) throws InvalidFormatException { Set dictTags = new HashSet<>(); for (String word : posDict) { Collections.addAll(dictTags, posDict.getTags(word)); } Set modelTags = new HashSet<>(); for (int i = 0; i < posModel.getNumOutcomes(); i++) { modelTags.add(posModel.getOutcome(i)); } if (!modelTags.containsAll(dictTags)) { StringBuilder unknownTag = new StringBuilder(); for (String d : dictTags) { if (!modelTags.contains(d)) { unknownTag.append(d).append(" "); } } throw new InvalidFormatException("Tag dictionary contains tags " + "which are unknown by the model! The unknown tags are: " + unknownTag); } } @Override public void validateArtifactMap() throws InvalidFormatException { // Ensure that the tag dictionary is compatible with the model Object tagdictEntry = this.artifactProvider .getArtifact(TAG_DICTIONARY_ENTRY_NAME); if (tagdictEntry != null) { if (tagdictEntry instanceof POSDictionary) { if (!this.artifactProvider.isLoadedFromSerialized()) { AbstractModel posModel = this.artifactProvider .getArtifact(POSModel.POS_MODEL_ENTRY_NAME); POSDictionary posDict = (POSDictionary) tagdictEntry; validatePOSDictionary(posDict, posModel); } } else { throw new InvalidFormatException( "POSTag dictionary has wrong type!"); } } Object ngramDictEntry = this.artifactProvider .getArtifact(NGRAM_DICTIONARY_ENTRY_NAME); if (ngramDictEntry != null && !(ngramDictEntry instanceof Dictionary)) { throw new InvalidFormatException("NGram dictionary has wrong type!"); } } // reduced visibility to ensure deprecation is respected in future versions @Deprecated static POSTaggerFactory create(String subclassName, Dictionary ngramDictionary, TagDictionary posDictionary) throws InvalidFormatException { if (subclassName == null) { // will create the default factory return new POSTaggerFactory(ngramDictionary, posDictionary); } try { POSTaggerFactory theFactory = ExtensionLoader.instantiateExtension( POSTaggerFactory.class, subclassName); theFactory.init(ngramDictionary, posDictionary); return theFactory; } catch (Exception e) { String msg = "Could not instantiate the " + subclassName + ". The initialization throw an exception."; throw new InvalidFormatException(msg, e); } } /** * Instantiates a {@link POSTaggerFactory} via a given {@code subclassName}. * * @param subclassName The class name used for instantiation. If {@code null}, an * instance of {@link POSTaggerFactory} will be returned * per default. Otherwise, the {@link ExtensionLoader} mechanism * is applied to load the requested {@code subclassName}. * @param featureGeneratorBytes The bytes for feature generation. * @param resources Additional resources as key-value map. * @param posDictionary A {@link TagDictionary} used for the new instance. * @return @return A valid {@link POSTaggerFactory} instance. * @throws InvalidFormatException Thrown if the {@link ExtensionLoader} mechanism failed to * load the factory via the {@code subclassName}. */ public static POSTaggerFactory create(String subclassName, byte[] featureGeneratorBytes, Map resources, TagDictionary posDictionary) throws InvalidFormatException { POSTaggerFactory theFactory; if (subclassName == null) { // will create the default factory theFactory = new POSTaggerFactory(); theFactory.init(featureGeneratorBytes, resources, posDictionary); } else { try { theFactory = ExtensionLoader.instantiateExtension(POSTaggerFactory.class, subclassName); } catch (Exception e) { String msg = "Could not instantiate the " + subclassName + ". The initialization throw an exception."; throw new InvalidFormatException(msg, e); } } theFactory.init(featureGeneratorBytes, resources, posDictionary); return theFactory; } /** * @return An empty, case-sensitive {@link TagDictionary}. */ public TagDictionary createEmptyTagDictionary() { this.posDictionary = new POSDictionary(true); return this.posDictionary; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/POSTaggerME.java0100644 0000000 0000000 00000031176 14523004075 032002 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.atomic.AtomicInteger; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.ml.BeamSearch; import opennlp.tools.ml.EventModelSequenceTrainer; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.SequenceTrainer; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.TrainerFactory.TrainerType; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.ml.model.SequenceClassificationModel; import opennlp.tools.ngram.NGramModel; import opennlp.tools.util.DownloadUtil; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Sequence; import opennlp.tools.util.SequenceValidator; import opennlp.tools.util.StringList; import opennlp.tools.util.StringUtil; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.featuregen.StringPattern; /** * A {@link POSTagger part-of-speech tagger} that uses maximum entropy. *

* Tries to predict whether words are nouns, verbs, or any of 70 other POS tags * depending on their surrounding context. */ public class POSTaggerME implements POSTagger { private static final Logger logger = LoggerFactory.getLogger(POSTaggerME.class); public static final int DEFAULT_BEAM_SIZE = 3; private final POSModel modelPackage; /** * The {@link POSContextGenerator feature context generator}. */ protected final POSContextGenerator contextGen; /** * {@link TagDictionary} used for restricting words to a fixed set of tags. */ protected final TagDictionary tagDictionary; /** * The size of the beam to be used in determining the best sequence of pos tags. */ protected final int size; private Sequence bestSequence; private final SequenceClassificationModel model; private final SequenceValidator sequenceValidator; /** * Initializes a {@link POSTaggerME} by downloading a default model for a given * {@code language}. * * @param language An ISO conform language code. * * @throws IOException Thrown if the model could not be downloaded or saved. */ public POSTaggerME(String language) throws IOException { this(DownloadUtil.downloadModel(language, DownloadUtil.ModelType.POS, POSModel.class)); } /** * Initializes a {@link POSTaggerME} with the provided {@link POSModel model}. * * @param model A valid {@link POSModel}. */ public POSTaggerME(POSModel model) { POSTaggerFactory factory = model.getFactory(); int beamSize = POSTaggerME.DEFAULT_BEAM_SIZE; String beamSizeString = model.getManifestProperty(BeamSearch.BEAM_SIZE_PARAMETER); if (beamSizeString != null) { beamSize = Integer.parseInt(beamSizeString); } modelPackage = model; contextGen = factory.getPOSContextGenerator(beamSize); tagDictionary = factory.getTagDictionary(); size = beamSize; sequenceValidator = factory.getSequenceValidator(); if (model.getPosSequenceModel() != null) { this.model = model.getPosSequenceModel(); } else { this.model = new opennlp.tools.ml.BeamSearch<>(beamSize, model.getPosModel(), 0); } } /** * @return Retrieves an array of all possible part-of-speech tags from the tagger. */ public String[] getAllPosTags() { return model.getOutcomes(); } @Override public String[] tag(String[] sentence) { return this.tag(sentence, null); } @Override public String[] tag(String[] sentence, Object[] additionalContext) { bestSequence = model.bestSequence(sentence, additionalContext, contextGen, sequenceValidator); List t = bestSequence.getOutcomes(); return t.toArray(new String[0]); } /** * Returns at most the specified {@code numTaggings} for the specified {@code sentence}. * * @param numTaggings The number of tagging to be returned. * @param sentence An array of tokens which make up a sentence. * * @return At most the specified number of taggings for the specified {@code sentence}. */ public String[][] tag(int numTaggings, String[] sentence) { Sequence[] bestSequences = model.bestSequences(numTaggings, sentence, null, contextGen, sequenceValidator); String[][] tags = new String[bestSequences.length][]; for (int si = 0; si < tags.length; si++) { List t = bestSequences[si].getOutcomes(); tags[si] = t.toArray(new String[0]); } return tags; } @Override public Sequence[] topKSequences(String[] sentence) { return this.topKSequences(sentence, null); } @Override public Sequence[] topKSequences(String[] sentence, Object[] additionalContext) { return model.bestSequences(size, sentence, additionalContext, contextGen, sequenceValidator); } /** * Populates the specified array with the probabilities for each tag of the last tagged sentence. * * @param probs An array to put the probabilities into. */ public void probs(double[] probs) { bestSequence.getProbs(probs); } /** * @return An array with the probabilities for each tag of the last tagged sentence. */ public double[] probs() { return bestSequence.getProbs(); } public String[] getOrderedTags(List words, List tags, int index) { return getOrderedTags(words,tags,index,null); } public String[] getOrderedTags(List words, List tags, int index,double[] tprobs) { if (modelPackage.getPosModel() != null) { MaxentModel posModel = modelPackage.getPosModel(); double[] probs = posModel.eval(contextGen.getContext(index, words.toArray(new String[0]), tags.toArray(new String[0]),null)); String[] orderedTags = new String[probs.length]; for (int i = 0; i < probs.length; i++) { int max = 0; for (int ti = 1; ti < probs.length; ti++) { if (probs[ti] > probs[max]) { max = ti; } } orderedTags[i] = posModel.getOutcome(max); if (tprobs != null) { tprobs[i] = probs[max]; } probs[max] = 0; } return orderedTags; } else { throw new UnsupportedOperationException("This method can only be called if the " + "classification model is an event model!"); } } public static POSModel train(String languageCode, ObjectStream samples, TrainingParameters trainParams, POSTaggerFactory posFactory) throws IOException { int beamSize = trainParams.getIntParameter(BeamSearch.BEAM_SIZE_PARAMETER, POSTaggerME.DEFAULT_BEAM_SIZE); POSContextGenerator contextGenerator = posFactory.getPOSContextGenerator(); Map manifestInfoEntries = new HashMap<>(); TrainerType trainerType = TrainerFactory.getTrainerType(trainParams); MaxentModel posModel = null; SequenceClassificationModel seqPosModel = null; if (TrainerType.EVENT_MODEL_TRAINER.equals(trainerType)) { ObjectStream es = new POSSampleEventStream(samples, contextGenerator); EventTrainer trainer = TrainerFactory.getEventTrainer(trainParams, manifestInfoEntries); posModel = trainer.train(es); } else if (TrainerType.EVENT_MODEL_SEQUENCE_TRAINER.equals(trainerType)) { POSSampleSequenceStream ss = new POSSampleSequenceStream(samples, contextGenerator); EventModelSequenceTrainer trainer = TrainerFactory.getEventModelSequenceTrainer(trainParams, manifestInfoEntries); posModel = trainer.train(ss); } else if (TrainerType.SEQUENCE_TRAINER.equals(trainerType)) { SequenceTrainer trainer = TrainerFactory.getSequenceModelTrainer( trainParams, manifestInfoEntries); // TODO: This will probably cause issue, since the feature generator uses the outcomes array POSSampleSequenceStream ss = new POSSampleSequenceStream(samples, contextGenerator); seqPosModel = trainer.train(ss); } else { throw new IllegalArgumentException("Trainer type is not supported: " + trainerType); } if (posModel != null) { return new POSModel(languageCode, posModel, beamSize, manifestInfoEntries, posFactory); } else { return new POSModel(languageCode, seqPosModel, manifestInfoEntries, posFactory); } } /** * Constructs a {@link Dictionary nGram dictionary} from an {@link ObjectStream} of samples. * * @param samples The {@link ObjectStream} to process. * @param cutoff A non-negative cut-off value. * * @return A valid {@link Dictionary} instance holding nGrams. * * @throws IOException Thrown if IO errors occurred during dictionary construction. */ public static Dictionary buildNGramDictionary(ObjectStream samples, int cutoff) throws IOException { NGramModel ngramModel = new NGramModel(); POSSample sample; while ((sample = samples.read()) != null) { String[] words = sample.getSentence(); if (words.length > 0) ngramModel.add(new StringList(words), 1, 1); } ngramModel.cutoff(cutoff, Integer.MAX_VALUE); return ngramModel.toDictionary(true); } /** * Populates a {@link POSDictionary} from an {@link ObjectStream} of samples. * * @param samples The {@link ObjectStream} to process. * @param dict The {@link MutableTagDictionary} to use during population. * @param cutoff A non-negative cut-off value. * * @throws IOException Thrown if IO errors occurred during dictionary construction. */ public static void populatePOSDictionary(ObjectStream samples, MutableTagDictionary dict, int cutoff) throws IOException { logger.info("Expanding POS Dictionary ..."); long start = System.nanoTime(); // the data structure will store the word, the tag, and the number of // occurrences Map> newEntries = new HashMap<>(); POSSample sample; while ((sample = samples.read()) != null) { String[] words = sample.getSentence(); String[] tags = sample.getTags(); for (int i = 0; i < words.length; i++) { // only store words if (!StringPattern.recognize(words[i]).containsDigit()) { String word; if (dict.isCaseSensitive()) { word = words[i]; } else { word = StringUtil.toLowerCase(words[i]); } if (!newEntries.containsKey(word)) { newEntries.put(word, new HashMap<>()); } String[] dictTags = dict.getTags(word); if (dictTags != null) { for (String tag : dictTags) { // for this tags we start with the cutoff Map value = newEntries.get(word); if (!value.containsKey(tag)) { value.put(tag, new AtomicInteger(cutoff)); } } } if (!newEntries.get(word).containsKey(tags[i])) { newEntries.get(word).put(tags[i], new AtomicInteger(1)); } else { newEntries.get(word).get(tags[i]).incrementAndGet(); } } } } // now we check if the word + tag pairs have enough occurrences, if yes we // add it to the dictionary for (Entry> wordEntry : newEntries .entrySet()) { List tagsForWord = new ArrayList<>(); for (Entry entry : wordEntry.getValue().entrySet()) { if (entry.getValue().get() >= cutoff) { tagsForWord.add(entry.getKey()); } } if (tagsForWord.size() > 0) { dict.put(wordEntry.getKey(), tagsForWord.toArray(new String[0])); } } logger.info("... finished expanding POS Dictionary. [ {} ms]", (System.nanoTime() - start) / 1000000 ); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/TagDictionary.java0100644 0000000 0000000 00000002650 14523004075 032521 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; /** * Interface to determine which tags are valid for a particular word * based on a tag dictionary. */ public interface TagDictionary { /** * Retrieves a list of valid tags for the specified {@code word}. * * @param word The word. * @return An array of valid tags for the specified {@code word} or {@code null} if * no information is available for that word. */ String[] getTags(String word); /** * Whether the dictionary is case-sensitive or not. * * @return {@code true} if the dictionary is case-sensitive, else {@code false}. */ boolean isCaseSensitive(); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/WordTagSampleStream.java0100644 0000000 0000000 00000005151 14523004075 033644 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.ObjectStream; /** * A stream filter which reads a sentence per line which contains * words and tags in {@code word_tag} format and outputs a {@link POSSample} objects. */ public class WordTagSampleStream extends FilterObjectStream { private static final Logger logger = LoggerFactory.getLogger(WordTagSampleStream.class); /** * Initializes a {@link POSSample} instance. * * @param sentences The {@link ObjectStream sentences} to wrap. */ public WordTagSampleStream(ObjectStream sentences) { super(sentences); } /** * Parses the next sentence and return the next {@link POSSample} object. *

* If an error occurs an empty {@link POSSample} object is returned * and a warning message is logged. Usually it does not matter if one * or many sentences are ignored. * * @return A valid {@link POSSample} or {@code null} if the * {@link ObjectStream sentence stream} is exhausted. * * @throws IOException Thrown if IO errors occurred during read. */ @Override public POSSample read() throws IOException { String sentence = samples.read(); if (sentence != null) { POSSample sample; try { sample = POSSample.parse(sentence); } catch (InvalidFormatException e) { // TODO: An exception in error case should be thrown. logger.warn("Error during parsing, ignoring sentence: {}", sentence, e); sample = new POSSample(new String[]{}, new String[]{}); } return sample; } else { // sentences stream is exhausted return null; } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/postag/package-info.java0100644 0000000 0000000 00000001566 14523004075 032311 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package related to part-of-speech tagging. */ package opennlp.tools.postag; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_sentdetect_Defaul0100644 0000000 0000000 00000000170 14523004075 032567 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/DefaultEndOfSentenceScanner.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/DefaultEndOfSentenceSc0100644 0000000 0000000 00000004373 14523004075 034164 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; /** * Default implementation of the {@link EndOfSentenceScanner}. * It uses a character array with possible end of sentence chars * to identify potential sentence endings. */ public class DefaultEndOfSentenceScanner implements EndOfSentenceScanner { private final Set eosCharacters; /** * Initializes the current instance. * * @param eosCharacters The characters to be used to detect sentence endings. */ public DefaultEndOfSentenceScanner(char[] eosCharacters) { this.eosCharacters = new HashSet<>(); for (char eosChar: eosCharacters) { this.eosCharacters.add(eosChar); } } @Override public List getPositions(CharSequence s) { List l = new ArrayList<>(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (eosCharacters.contains(c)) { l.add(i); } } return l; } @Override public List getPositions(StringBuffer buf) { return getPositions(buf.toString().toCharArray()); } @Override public List getPositions(char[] cbuf) { List l = new ArrayList<>(); for (int i = 0; i < cbuf.length; i++) { if (eosCharacters.contains(cbuf[i])) { l.add(i); } } return l; } @Override public Set getEOSCharacters() { return eosCharacters; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_sentdetect_Defaul0100644 0000000 0000000 00000000166 14523004075 032574 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/DefaultSDContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/DefaultSDContextGenera0100644 0000000 0000000 00000020206 14523004075 034204 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import opennlp.tools.util.StringUtil; /** * Generate event contexts for maxent decisions for sentence detection. * */ public class DefaultSDContextGenerator implements SDContextGenerator { /** * String buffer for generating features. */ protected final StringBuffer buf; /** * List for holding features as they are generated. */ protected final List collectFeats; private final Set inducedAbbreviations; private final Set eosCharacters; /** * Creates a new instance with no induced abbreviations. * * @param eosCharacters The characters to be used to detect sentence endings. */ public DefaultSDContextGenerator(char[] eosCharacters) { this(Collections.emptySet(), eosCharacters); } /** * Creates a new SDContextGenerator instance which uses * the set of induced abbreviations. * * @param inducedAbbreviations a Set of Strings * representing induced abbreviations in the training data. * Example: "Mr." * * @param eosCharacters The characters to be used to detect sentence endings. */ public DefaultSDContextGenerator(Set inducedAbbreviations, char[] eosCharacters) { this.inducedAbbreviations = inducedAbbreviations; this.eosCharacters = new HashSet<>(); for (char eosChar: eosCharacters) { this.eosCharacters.add(eosChar); } buf = new StringBuffer(); collectFeats = new ArrayList<>(); } private static String escapeChar(Character c) { if (c == '\n') { return ""; } if (c == '\r') { return ""; } return new String(new char[]{c}); } @Override public String[] getContext(CharSequence sb, int position) { /* * String preceding the eos character in the eos token. */ String prefix; /* * Space delimited token preceding token containing eos character. */ String previous; /* * String following the eos character in the eos token. */ String suffix; /* * Space delimited token following token containing eos character. */ String next; int lastIndex = sb.length() - 1; { // compute space previous and space next features. if (position > 0 && StringUtil.isWhitespace(sb.charAt(position - 1))) collectFeats.add("sp"); if (position < lastIndex && StringUtil.isWhitespace(sb.charAt(position + 1))) collectFeats.add("sn"); collectFeats.add("eos=" + escapeChar(sb.charAt(position))); } int prefixStart = previousSpaceIndex(sb, position); int c = position; { ///assign prefix, stop if you run into a period though otherwise stop at space while (--c > prefixStart) { if (eosCharacters.contains(sb.charAt(c))) { prefixStart = c; c++; // this gets us out of while loop. } } prefix = String.valueOf(sb.subSequence(prefixStart, position)).trim(); } int prevStart = previousSpaceIndex(sb, prefixStart); previous = String.valueOf(sb.subSequence(prevStart, prefixStart)).trim(); int suffixEnd = nextSpaceIndex(sb, position, lastIndex); { c = position; while (++c < suffixEnd) { if (eosCharacters.contains(sb.charAt(c))) { suffixEnd = c; c--; // this gets us out of while loop. } } } int nextEnd = nextSpaceIndex(sb, suffixEnd + 1, lastIndex + 1); if (position == lastIndex) { suffix = ""; next = ""; } else { suffix = String.valueOf(sb.subSequence(position + 1, suffixEnd)).trim(); next = String.valueOf(sb.subSequence(suffixEnd + 1, nextEnd)).trim(); } collectFeatures(prefix,suffix,previous,next, sb.charAt(position)); String[] context = new String[collectFeats.size()]; context = collectFeats.toArray(context); collectFeats.clear(); return context; } /** * Determines some features for the sentence detector and adds them to list features. * * @param prefix String preceding the {@code eosChar} in the eos token. * @param suffix String following the {@code eosChar} in the eos token. * @param previous Space delimited token preceding token containing {@code eosChar}. * @param next Space delimited token following token containing {@code eosChar}. * @param eosChar the EOS character been analyzed. */ protected void collectFeatures(String prefix, String suffix, String previous, String next, Character eosChar) { buf.append("x="); buf.append(prefix); collectFeats.add(buf.toString()); buf.setLength(0); if (!prefix.equals("")) { collectFeats.add(Integer.toString(prefix.length())); if (isFirstUpper(prefix)) { collectFeats.add("xcap"); } if (eosChar != null && inducedAbbreviations.contains(prefix + eosChar)) { collectFeats.add("xabbrev"); } } buf.append("v="); buf.append(previous); collectFeats.add(buf.toString()); buf.setLength(0); if (!previous.equals("")) { if (isFirstUpper(previous)) { collectFeats.add("vcap"); } if (inducedAbbreviations.contains(previous)) { collectFeats.add("vabbrev"); } } buf.append("s="); buf.append(suffix); collectFeats.add(buf.toString()); buf.setLength(0); if (!suffix.equals("")) { if (isFirstUpper(suffix)) { collectFeats.add("scap"); } if (inducedAbbreviations.contains(suffix)) { collectFeats.add("sabbrev"); } } buf.append("n="); buf.append(next); collectFeats.add(buf.toString()); buf.setLength(0); if (!next.equals("")) { if (isFirstUpper(next)) { collectFeats.add("ncap"); } if (inducedAbbreviations.contains(next)) { collectFeats.add("nabbrev"); } } } private static boolean isFirstUpper(String s) { return Character.isUpperCase(s.charAt(0)); } /** * Finds the index of the nearest space before a specified index which is not itself preceded by a space. * * @param sb The string buffer which contains the text being examined. * @param seek The index to begin searching from. * @return The index which contains the nearest space. */ private static int previousSpaceIndex(CharSequence sb, int seek) { seek--; while (seek > 0 && !StringUtil.isWhitespace(sb.charAt(seek))) { seek--; } if (seek > 0 && StringUtil.isWhitespace(sb.charAt(seek))) { while (seek > 0 && StringUtil.isWhitespace(sb.charAt(seek - 1))) seek--; return seek; } return 0; } /** * Finds the index of the nearest space after a specified index. * * @param sb The string buffer which contains the text being examined. * @param seek The index to begin searching from. * @param lastIndex The highest index of the StringBuffer sb. * @return The index which contains the nearest space. */ private static int nextSpaceIndex(CharSequence sb, int seek, int lastIndex) { seek++; char c; while (seek < lastIndex) { c = sb.charAt(seek); if (StringUtil.isWhitespace(c)) { while (sb.length() > seek + 1 && StringUtil.isWhitespace(sb.charAt(seek + 1))) seek++; return seek; } seek++; } return lastIndex; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_sentdetect_EmptyL0100644 0000000 0000000 00000000170 14523004075 032601 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/EmptyLinePreprocessorStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/EmptyLinePreprocessorS0100644 0000000 0000000 00000004314 14523004075 034344 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.IOException; import opennlp.tools.commons.Internal; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; /** * {@link ObjectStream} to clean up empty lines for empty line separated document streams.
* * - Skips empty line at training data start
* - Transforms multiple empty lines in a row into one
* - Replaces white space lines with empty lines
* - TODO: Terminates last document with empty line if it is missing
*
* This stream should be used by the components that mark empty lines to mark document boundaries. *

* Note: This class is not thread safe. *

* Note: Do not use this class, internal use only! */ @Internal public class EmptyLinePreprocessorStream extends FilterObjectStream { private boolean lastLineWasEmpty = true; public EmptyLinePreprocessorStream(ObjectStream in) { super(in); } private static boolean isLineEmpty(String line) { return line.trim().length() == 0; } @Override public String read() throws IOException { String line = samples.read(); if (lastLineWasEmpty) { lastLineWasEmpty = false; while (line != null && isLineEmpty(line)) { line = samples.read(); } } if (line != null && isLineEmpty(line)) { lastLineWasEmpty = true; line = ""; } return line; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_sentdetect_EndOfS0100644 0000000 0000000 00000000161 14523004075 032505 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/EndOfSentenceScanner.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/EndOfSentenceScanner.j0100644 0000000 0000000 00000004160 14523004075 034125 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.util.List; import java.util.Set; /** * Scans {@link CharSequence}, {@link StringBuffer}, and {@code char[]} for the offsets of * sentence ending characters. * *

Implementations of this interface can use regular expressions, * hand-coded DFAs, and other scanning techniques to locate end of * sentence offsets.

*/ public interface EndOfSentenceScanner { /** * @return a set of {@link Character characters} which can indicate the end of a sentence. */ Set getEOSCharacters(); /** * The receiver scans the specified string for sentence ending characters and * returns their offsets. * * @param s A {@link CharSequence} to be scanned. * @return A {@link List} of Integer objects. */ List getPositions(CharSequence s); /** * The receiver scans {@code buf} for sentence ending characters and * returns their offsets. * * @param buf A {@link StringBuffer} to be scanned. * @return A {@link List} of Integer objects. */ List getPositions(StringBuffer buf); /** * The receiver scans {@code cbuf} for sentence ending characters and * returns their offsets. * * @param cbuf A {@code char[]} to be scanned. * @return A {@link List} of Integer objects. */ List getPositions(char[] cbuf); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_sentdetect_Newlin0100644 0000000 0000000 00000000164 14523004075 032626 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/NewlineSentenceDetector.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/NewlineSentenceDetecto0100644 0000000 0000000 00000003563 14523004075 034307 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.util.ArrayList; import java.util.List; import opennlp.tools.util.Span; /** * The Newline {@link SentenceDetector} assumes that sentences are line delimited and * recognizes one sentence per non-empty line. */ public class NewlineSentenceDetector implements SentenceDetector { @Override public String[] sentDetect(CharSequence s) { return Span.spansToStrings(sentPosDetect(s), s); } @Override public Span[] sentPosDetect(CharSequence s) { List sentences = new ArrayList<>(); int start = 0; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c == '\n' || c == '\r') { if (i - start > 0) { Span span = new Span(start, i).trim(s); if (span.length() > 0) { sentences.add(span); } start = i + 1; } } } if (s.length() - start > 0) { Span span = new Span(start, s.length()).trim(s); if (span.length() > 0) { sentences.add(span); } } return sentences.toArray(new Span[0]); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_sentdetect_SDCont0100644 0000000 0000000 00000000157 14523004075 032526 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/SDContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/SDContextGenerator.jav0100644 0000000 0000000 00000002740 14523004075 034206 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; /** * Interface for {@link SentenceDetectorME} context generators. */ public interface SDContextGenerator { /** * Returns an array of contextual features for the potential sentence boundary at the * specified position within the specified string buffer. * * @param s The {@link String} for which sentences are being determined. * @param position An index into the specified string buffer when a sentence boundary may occur. * * @return an array of contextual features for the potential sentence boundary at the * specified {@code position} within the specified string buffer. */ String[] getContext(CharSequence s, int position); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/SDCrossValidator.java0100644 0000000 0000000 00000005362 14523004075 034016 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.IOException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.eval.CrossValidationPartitioner; import opennlp.tools.util.eval.FMeasure; /** * A cross validator for {@link SentenceDetector sentence detectors}. */ public class SDCrossValidator { private final String languageCode; private final TrainingParameters params; private final FMeasure fmeasure = new FMeasure(); private final SentenceDetectorEvaluationMonitor[] listeners; private final SentenceDetectorFactory sdFactory; public SDCrossValidator(String languageCode, TrainingParameters params, SentenceDetectorFactory sdFactory, SentenceDetectorEvaluationMonitor... listeners) { this.languageCode = languageCode; this.params = params; this.listeners = listeners; this.sdFactory = sdFactory; } /** * Starts the evaluation. * * @param samples * the data to train and test * @param nFolds * number of folds * * @throws IOException Thrown if IO errors occurred during processing. */ public void evaluate(ObjectStream samples, int nFolds) throws IOException { CrossValidationPartitioner partitioner = new CrossValidationPartitioner<>(samples, nFolds); while (partitioner.hasNext()) { CrossValidationPartitioner.TrainingSampleStream trainingSampleStream = partitioner.next(); SentenceModel model; model = SentenceDetectorME.train(languageCode, trainingSampleStream, sdFactory, params); // do testing SentenceDetectorEvaluator evaluator = new SentenceDetectorEvaluator( new SentenceDetectorME(model), listeners); evaluator.evaluate(trainingSampleStream.getTestSampleStream()); fmeasure.mergeInto(evaluator.getFMeasure()); } } public FMeasure getFMeasure() { return fmeasure; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/SDEventStream.java0100644 0000000 0000000 00000004607 14523004075 033315 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import opennlp.tools.ml.model.Event; import opennlp.tools.util.AbstractEventStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; public class SDEventStream extends AbstractEventStream { private final SDContextGenerator cg; private final EndOfSentenceScanner scanner; /** * Initializes the current instance. * * @param samples An {@link ObjectStream stream} of {@link SentenceSample samples}. * @param cg The {@link SDContextGenerator} to be used. * @param scanner The {@link EndOfSentenceScanner scanner} to be used. */ public SDEventStream(ObjectStream samples, SDContextGenerator cg, EndOfSentenceScanner scanner) { super(samples); this.cg = cg; this.scanner = scanner; } @Override protected Iterator createEvents(SentenceSample sample) { Collection events = new ArrayList<>(); for (Span sentenceSpan : sample.getSentences()) { String sentenceString = sentenceSpan.getCoveredText(sample.getDocument()).toString(); for (Iterator it = scanner.getPositions( sentenceString).iterator(); it.hasNext();) { int candidate = it.next(); String type = SentenceDetectorME.NO_SPLIT; if (!it.hasNext()) { type = SentenceDetectorME.SPLIT; } events.add(new Event(type, cg.getContext(sample.getDocument(), sentenceSpan.getStart() + candidate))); } } return events.iterator(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/SentenceDetector.java0100644 0000000 0000000 00000003115 14523004075 034060 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import opennlp.tools.util.Span; /** * The interface for sentence detectors, which find the sentence boundaries in * a text. */ public interface SentenceDetector { /** * Detects sentences in a character sequence. * * @param s The {@link CharSequence} for which sentences shall to be detected. * @return The String[] with the individual sentences as the array * elements. */ String[] sentDetect(CharSequence s); /** * Detects sentences in a character sequence. * * @param s The {@link CharSequence} for which sentences shall be detected. * * @return The array of {@link Span spans} (offsets into {@code s}) for each * detected sentence as the individuals array elements. */ Span[] sentPosDetect(CharSequence s); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_sentdetect_Senten0100644 0000000 0000000 00000000176 14523004075 032631 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/SentenceDetectorEvaluationMonitor.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/SentenceDetectorEvalua0100644 0000000 0000000 00000001736 14523004075 034305 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import opennlp.tools.util.eval.EvaluationMonitor; public interface SentenceDetectorEvaluationMonitor extends EvaluationMonitor { } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_sentdetect_Senten0100644 0000000 0000000 00000000166 14523004075 032630 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/SentenceDetectorEvaluator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/SentenceDetectorEvalua0100644 0000000 0000000 00000005102 14523004075 034274 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import opennlp.tools.util.Span; import opennlp.tools.util.eval.Evaluator; import opennlp.tools.util.eval.FMeasure; /** * The {@link SentenceDetectorEvaluator} measures the performance of * the given {@link SentenceDetector} with the provided reference * {@link SentenceSample}s. * * @see Evaluator * @see SentenceDetector * @see SentenceSample */ public class SentenceDetectorEvaluator extends Evaluator { private final FMeasure fmeasure = new FMeasure(); /** * The {@link SentenceDetector} used to predict sentences. */ private final SentenceDetector sentenceDetector; /** * Initializes the current instance. * * @param sentenceDetector The {@link SentenceDetector} to be used for predicting sentences. * @param listeners The {@link SentenceDetectorEvaluationMonitor evaluation sample listeners}. */ public SentenceDetectorEvaluator(SentenceDetector sentenceDetector, SentenceDetectorEvaluationMonitor... listeners) { super(listeners); this.sentenceDetector = sentenceDetector; } private Span[] trimSpans(String document, Span[] spans) { Span[] trimedSpans = new Span[spans.length]; for (int i = 0; i < spans.length; i++) { trimedSpans[i] = spans[i].trim(document); } return trimedSpans; } @Override protected SentenceSample processSample(SentenceSample sample) { Span[] predictions = trimSpans(sample.getDocument(), sentenceDetector.sentPosDetect(sample.getDocument())); Span[] references = trimSpans(sample.getDocument(), sample.getSentences()); fmeasure.updateScores(references, predictions); return new SentenceSample(sample.getDocument(), predictions); } public FMeasure getFMeasure() { return fmeasure; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_sentdetect_Senten0100644 0000000 0000000 00000000164 14523004075 032626 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/SentenceDetectorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/SentenceDetectorFactor0100644 0000000 0000000 00000021301 14523004075 034274 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.util.Collections; import java.util.Map; import java.util.Set; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.sentdetect.lang.Factory; import opennlp.tools.util.BaseToolFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.ext.ExtensionLoader; /** * The factory that provides {@link SentenceDetector} default implementations and * resources */ public class SentenceDetectorFactory extends BaseToolFactory { private String languageCode; private char[] eosCharacters; private Dictionary abbreviationDictionary; private Boolean useTokenEnd = null; private static final String ABBREVIATIONS_ENTRY_NAME = "abbreviations.dictionary"; private static final String EOS_CHARACTERS_PROPERTY = "eosCharacters"; private static final String TOKEN_END_PROPERTY = "useTokenEnd"; /** * Creates a {@link SentenceDetectorFactory} that provides the default * implementation of the resources. */ public SentenceDetectorFactory() { } /** * Creates a {@link SentenceDetectorFactory}. Use this constructor to * programmatically create a factory. * * @param languageCode The ISO language code to be used for this factory. * @param useTokenEnd {@code true} if {@link #TOKEN_END_PROPERTY} shall be used, {@code false} otherwise. * @param abbreviationDictionary The {@link Dictionary} which holds abbreviations. * @param eosCharacters The characters to be used to detect sentence endings. */ public SentenceDetectorFactory(String languageCode, boolean useTokenEnd, Dictionary abbreviationDictionary, char[] eosCharacters) { this.init(languageCode, useTokenEnd, abbreviationDictionary, eosCharacters); } protected void init(String languageCode, boolean useTokenEnd, Dictionary abbreviationDictionary, char[] eosCharacters) { this.languageCode = languageCode; this.useTokenEnd = useTokenEnd; this.eosCharacters = eosCharacters; this.abbreviationDictionary = abbreviationDictionary; } @Override public void validateArtifactMap() throws InvalidFormatException { if (this.artifactProvider.getManifestProperty(TOKEN_END_PROPERTY) == null) throw new InvalidFormatException(TOKEN_END_PROPERTY + " is a mandatory property!"); Object abbreviationsEntry = this.artifactProvider.getArtifact(ABBREVIATIONS_ENTRY_NAME); if (abbreviationsEntry != null && !(abbreviationsEntry instanceof Dictionary)) { throw new InvalidFormatException( "Abbreviations dictionary '" + abbreviationsEntry + "' has wrong type, needs to be of type Dictionary!"); } } @Override public Map createArtifactMap() { Map artifactMap = super.createArtifactMap(); // Abbreviations are optional if (abbreviationDictionary != null) artifactMap.put(ABBREVIATIONS_ENTRY_NAME, abbreviationDictionary); return artifactMap; } @Override public Map createManifestEntries() { Map manifestEntries = super.createManifestEntries(); manifestEntries.put(TOKEN_END_PROPERTY, Boolean.toString(isUseTokenEnd())); // EOS characters are optional if (getEOSCharacters() != null) manifestEntries.put(EOS_CHARACTERS_PROPERTY, eosCharArrayToString(getEOSCharacters())); return manifestEntries; } /** * Instantiates a {@link SentenceDetectorFactory} via a given {@code subclassName}. * * @param subclassName The class name used for instantiation. If {@code null}, an * instance of {@link SentenceDetectorFactory} will be returned * per default. Otherwise, the {@link ExtensionLoader} mechanism * is applied to load the requested {@code subclassName}. * @param languageCode The ISO language code to be used. Must not be {@code null}. * @param useTokenEnd {@code true} if {@link #TOKEN_END_PROPERTY} shall be set, * {@code false} otherwise. * @param abbrDictionary The {@link Dictionary} of abbreviations if available; * may be {@code null}. * @param eosChars An array of characters representing end of sentence * symbols / characters. * * @return A valid {@link SentenceDetectorFactory} instance. * @throws InvalidFormatException Thrown if the {@link ExtensionLoader} mechanism failed to * create the factory associated with {@code subclassName}. */ public static SentenceDetectorFactory create(String subclassName, String languageCode, boolean useTokenEnd, Dictionary abbrDictionary, char[] eosChars) throws InvalidFormatException { if (subclassName == null) { // will create the default factory return new SentenceDetectorFactory(languageCode, useTokenEnd, abbrDictionary, eosChars); } try { SentenceDetectorFactory theFactory = ExtensionLoader.instantiateExtension( SentenceDetectorFactory.class, subclassName); theFactory.init(languageCode, useTokenEnd, abbrDictionary, eosChars); return theFactory; } catch (Exception e) { String msg = "Could not instantiate the " + subclassName + ". The initialization throw an exception."; throw new InvalidFormatException(msg, e); } } public char[] getEOSCharacters() { if (this.eosCharacters == null) { if (artifactProvider != null) { String prop = this.artifactProvider .getManifestProperty(EOS_CHARACTERS_PROPERTY); if (prop != null) { this.eosCharacters = eosStringToCharArray(prop); } } else { // get from language dependent factory Factory f = new Factory(); this.eosCharacters = f.getEOSCharacters(languageCode); } } return this.eosCharacters; } public boolean isUseTokenEnd() { if (this.useTokenEnd == null && artifactProvider != null) { this.useTokenEnd = Boolean.valueOf(artifactProvider .getManifestProperty(TOKEN_END_PROPERTY)); } return this.useTokenEnd; } /** * @return An abbreviation {@link Dictionary} or {@code null} if unset. */ public Dictionary getAbbreviationDictionary() { if (this.abbreviationDictionary == null && artifactProvider != null) { this.abbreviationDictionary = artifactProvider .getArtifact(ABBREVIATIONS_ENTRY_NAME); } return this.abbreviationDictionary; } public String getLanguageCode() { if (this.languageCode == null && artifactProvider != null) { this.languageCode = this.artifactProvider.getLanguage(); } return this.languageCode; } /** * @return An {@link EndOfSentenceScanner} instance, guaranteed to be not {@code null}. */ public EndOfSentenceScanner getEndOfSentenceScanner() { Factory f = new Factory(); char[] eosChars = getEOSCharacters(); if (eosChars != null && eosChars.length > 0) { return f.createEndOfSentenceScanner(eosChars); } else { return f.createEndOfSentenceScanner(this.languageCode); } } /** * @return A {@link SDContextGenerator} instance, guaranteed to be not {@code null}. */ public SDContextGenerator getSDContextGenerator() { Factory f = new Factory(); char[] eosChars = getEOSCharacters(); Set abbs; Dictionary abbDict = getAbbreviationDictionary(); if (abbDict != null) { abbs = abbDict.asStringSet(); } else { abbs = Collections.emptySet(); } if (eosChars != null && eosChars.length > 0) { return f.createSentenceContextGenerator(abbs, eosChars); } else { return f.createSentenceContextGenerator(this.languageCode, abbs); } } private String eosCharArrayToString(char[] eosCharacters) { return String.valueOf(eosCharacters); } private char[] eosStringToCharArray(String eosCharacters) { return eosCharacters.toCharArray(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_sentdetect_Senten0100644 0000000 0000000 00000000157 14523004075 032630 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/SentenceDetectorME.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/SentenceDetectorME.jav0100644 0000000 0000000 00000027063 14523004075 034151 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.sentdetect.lang.Factory; import opennlp.tools.util.DownloadUtil; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; import opennlp.tools.util.StringList; import opennlp.tools.util.StringUtil; import opennlp.tools.util.TrainingParameters; /** * A sentence detector for splitting up raw text into sentences. *

* A maximum entropy model is used to evaluate end-of-sentence characters in a * string to determine if they signify the end of a sentence. */ public class SentenceDetectorME implements SentenceDetector { /** * Constant indicates a sentence split. */ public static final String SPLIT = "s"; /** * Constant indicates no sentence split. */ public static final String NO_SPLIT = "n"; /** * The maximum entropy model to use to evaluate contexts. */ private final MaxentModel model; /** * The feature context generator. */ private final SDContextGenerator cgen; /** * The {@link EndOfSentenceScanner} to use when scanning for end of sentence offsets. */ private final EndOfSentenceScanner scanner; /** * The list of probabilities associated with each decision. */ private final List sentProbs = new ArrayList<>(); /** * The {@link Dictionary abbreviation dictionary} if available (may be {@code null}). */ private final Dictionary abbDict; protected final boolean useTokenEnd; /** * Initializes the sentence detector by downloading a default model. * @param language The language of the sentence detector. * @throws IOException Thrown if the model cannot be downloaded or saved. */ public SentenceDetectorME(String language) throws IOException { this(DownloadUtil.downloadModel(language, DownloadUtil.ModelType.SENTENCE_DETECTOR, SentenceModel.class)); } /** * Initializes the current instance. * * @param model the {@link SentenceModel} */ public SentenceDetectorME(SentenceModel model) { SentenceDetectorFactory sdFactory = model.getFactory(); this.model = model.getMaxentModel(); cgen = sdFactory.getSDContextGenerator(); scanner = sdFactory.getEndOfSentenceScanner(); abbDict = model.getAbbreviations(); useTokenEnd = sdFactory.isUseTokenEnd(); } /** * @deprecated Use a {@link SentenceDetectorFactory} to extend * SentenceDetector functionality. */ public SentenceDetectorME(SentenceModel model, Factory factory) { this.model = model.getMaxentModel(); // if the model has custom EOS characters set, use this to get the context // generator and the EOS scanner; otherwise use language-specific defaults char[] customEOSCharacters = model.getEosCharacters(); if (customEOSCharacters == null) { cgen = factory.createSentenceContextGenerator(model.getLanguage(), getAbbreviations(model.getAbbreviations())); scanner = factory.createEndOfSentenceScanner(model.getLanguage()); } else { cgen = factory.createSentenceContextGenerator( getAbbreviations(model.getAbbreviations()), customEOSCharacters); scanner = factory.createEndOfSentenceScanner(customEOSCharacters); } abbDict = model.getAbbreviations(); useTokenEnd = model.useTokenEnd(); } private static Set getAbbreviations(Dictionary abbreviations) { if (abbreviations == null) { return Collections.emptySet(); } return abbreviations.asStringSet(); } /** * Detects sentences in given input {@link CharSequence}.. * * @param s The {@link CharSequence}. to be processed. * * @return A string array containing individual sentences as elements. */ @Override public String[] sentDetect(CharSequence s) { Span[] spans = sentPosDetect(s); String[] sentences; if (spans.length != 0) { sentences = new String[spans.length]; for (int si = 0; si < spans.length; si++) { sentences[si] = spans[si].getCoveredText(s).toString(); } } else { sentences = new String[] {}; } return sentences; } private int getFirstWS(CharSequence s, int pos) { while (pos < s.length() && !StringUtil.isWhitespace(s.charAt(pos))) pos++; return pos; } private int getFirstNonWS(CharSequence s, int pos) { while (pos < s.length() && StringUtil.isWhitespace(s.charAt(pos))) pos++; return pos; } /** * Detects the position of the first words of sentences in a {@link CharSequence}. * * @param s The {@link CharSequence} to be processed. * @return An {@link Span span array} containing the positions of the end index of * every sentence. * */ @Override public Span[] sentPosDetect(CharSequence s) { sentProbs.clear(); List enders = scanner.getPositions(s); List positions = new ArrayList<>(enders.size()); for (int i = 0, end = enders.size(), index = 0; i < end; i++) { int cint = enders.get(i); // skip over the leading parts of non-token final delimiters int fws = getFirstWS(s,cint + 1); if (i + 1 < end && enders.get(i + 1) < fws) { continue; } if (positions.size() > 0 && cint < positions.get(positions.size() - 1)) continue; double[] probs = model.eval(cgen.getContext(s, cint)); String bestOutcome = model.getBestOutcome(probs); if (bestOutcome.equals(SPLIT) && isAcceptableBreak(s, index, cint)) { if (index != cint) { if (useTokenEnd) { positions.add(getFirstNonWS(s, getFirstWS(s,cint + 1))); } else { positions.add(getFirstNonWS(s, cint + 1)); } sentProbs.add(probs[model.getIndex(bestOutcome)]); } index = cint + 1; } } int[] starts = new int[positions.size()]; for (int i = 0; i < starts.length; i++) { starts[i] = positions.get(i); } // string does not contain sentence end positions if (starts.length == 0) { // remove leading and trailing whitespace int start = 0; int end = s.length(); while (start < s.length() && StringUtil.isWhitespace(s.charAt(start))) start++; while (end > 0 && StringUtil.isWhitespace(s.charAt(end - 1))) end--; if (end - start > 0) { sentProbs.add(1d); return new Span[] {new Span(start, end)}; } else return new Span[0]; } // Convert the sentence end indexes to spans boolean leftover = starts[starts.length - 1] != s.length(); Span[] spans = new Span[leftover ? starts.length + 1 : starts.length]; for (int si = 0; si < starts.length; si++) { int start; if (si == 0) { start = 0; } else { start = starts[si - 1]; } // A span might contain only white spaces, in this case the length of // the span will be zero after trimming and should be ignored. Span span = new Span(start, starts[si]).trim(s); if (span.length() > 0) { spans[si] = span; } else { sentProbs.remove(si); } } if (leftover) { Span span = new Span(starts[starts.length - 1], s.length()).trim(s); if (span.length() > 0) { spans[spans.length - 1] = span; sentProbs.add(1d); } } /* * set the prob for each span */ for (int i = 0; i < spans.length; i++) { double prob = sentProbs.get(i); spans[i] = new Span(spans[i], prob); } return spans; } /** * Returns the probabilities associated with the most recent * calls to {@link SentenceDetectorME#sentDetect(CharSequence)}. * * @return The probability for each sentence returned for the most recent * call to {@link SentenceDetectorME#sentDetect(CharSequence)}. * If not applicable, an empty array is returned. */ public double[] getSentenceProbabilities() { double[] sentProbArray = new double[sentProbs.size()]; for (int i = 0; i < sentProbArray.length; i++) { sentProbArray[i] = sentProbs.get(i); } return sentProbArray; } /** * Allows subclasses to check an overzealous (read: poorly * trained) model from flagging obvious non-breaks as breaks based * on some boolean determination of a break's acceptability. * *

Note: The implementation always returns {@code true} if no * abbreviation dictionary is available for the underlying model.

* * @param s the {@link CharSequence} in which the break occurred. * @param fromIndex the start of the segment currently being evaluated. * @param candidateIndex the index of the candidate sentence ending. * @return {@code true} if the break is acceptable, {@code false} otherwise. */ protected boolean isAcceptableBreak(CharSequence s, int fromIndex, int candidateIndex) { if (abbDict == null) return true; for (StringList abb : abbDict) { String token = abb.getToken(0); int tokenLength = token.length(); int tokenPosition = s.toString().indexOf(token, fromIndex); if (tokenPosition + tokenLength < candidateIndex || tokenPosition > candidateIndex) continue; return false; } return true; } /** * Starts a training of a {@link SentenceModel} with the given parameters. * * @param languageCode The ISO language code to train the model. Must not be {@code null}. * @param samples The {@link ObjectStream} of {@link SentenceSample} used as input for training. * @param sdFactory The {@link SentenceDetectorFactory} for creating related objects as defined * via {@code mlParams}. * @param mlParams The {@link TrainingParameters} for the context of the training process. * * @return A valid, trained {@link SentenceModel} instance. * @throws IOException Thrown if IO errors occurred. */ public static SentenceModel train(String languageCode, ObjectStream samples, SentenceDetectorFactory sdFactory, TrainingParameters mlParams) throws IOException { Map manifestInfoEntries = new HashMap<>(); // TODO: Fix the EventStream to throw exceptions when training goes wrong ObjectStream eventStream = new SDEventStream(samples, sdFactory.getSDContextGenerator(), sdFactory.getEndOfSentenceScanner()); EventTrainer trainer = TrainerFactory.getEventTrainer(mlParams, manifestInfoEntries); MaxentModel sentModel = trainer.train(eventStream); return new SentenceModel(languageCode, sentModel, manifestInfoEntries, sdFactory); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/SentenceModel.java0100644 0000000 0000000 00000011642 14523004075 033353 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.file.Path; import java.util.Map; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.util.BaseToolFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.model.BaseModel; import opennlp.tools.util.model.ModelUtil; /** * The {@link SentenceModel} is the model used by a learnable * {@link SentenceDetector}. * * @see SentenceDetectorME */ public class SentenceModel extends BaseModel { private static final long serialVersionUID = -8374532795287293730L; private static final String COMPONENT_NAME = "SentenceDetectorME"; private static final String MAXENT_MODEL_ENTRY_NAME = "sent.model"; /** * Initializes a {@link SentenceModel} instance via given parameters. * * @param languageCode The ISO language code for this model. Must not be {@code null}. * @param sentModel A valid {@link MaxentModel}. * @param manifestInfoEntries Additional information kept in the manifest. * @param sdFactory The {@link SentenceDetectorFactory} for creating related objects. */ public SentenceModel(String languageCode, MaxentModel sentModel, Map manifestInfoEntries, SentenceDetectorFactory sdFactory) { super(COMPONENT_NAME, languageCode, manifestInfoEntries, sdFactory); artifactMap.put(MAXENT_MODEL_ENTRY_NAME, sentModel); checkArtifactMap(); } /** * Initializes a {@link SentenceModel} instance via a valid {@link InputStream}. * * @param in The {@link InputStream} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public SentenceModel(InputStream in) throws IOException { super(COMPONENT_NAME, in); } /** * Initializes a {@link SentenceModel} instance via a valid {@link File}. * * @param modelFile The {@link File} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public SentenceModel(File modelFile) throws IOException { super(COMPONENT_NAME, modelFile); } /** * Initializes a {@link SentenceModel} instance via a valid {@link Path}. * * @param modelPath The {@link Path} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public SentenceModel(Path modelPath) throws IOException { this(modelPath.toFile()); } /** * Initializes a {@link SentenceModel} instance via a valid {@link URL}. * * @param modelURL The {@link URL} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public SentenceModel(URL modelURL) throws IOException { super(COMPONENT_NAME, modelURL); } @Override protected void validateArtifactMap() throws InvalidFormatException { super.validateArtifactMap(); if (!(artifactMap.get(MAXENT_MODEL_ENTRY_NAME) instanceof MaxentModel)) { throw new InvalidFormatException("Unable to find " + MAXENT_MODEL_ENTRY_NAME + " maxent model!"); } if (!ModelUtil.validateOutcomes(getMaxentModel(), SentenceDetectorME.SPLIT, SentenceDetectorME.NO_SPLIT)) { throw new InvalidFormatException("The maxent model is not compatible " + "with the sentence detector!"); } } public SentenceDetectorFactory getFactory() { return (SentenceDetectorFactory) this.toolFactory; } @Override protected Class getDefaultFactory() { return SentenceDetectorFactory.class; } public MaxentModel getMaxentModel() { return (MaxentModel) artifactMap.get(MAXENT_MODEL_ENTRY_NAME); } public Dictionary getAbbreviations() { if (getFactory() != null) { return getFactory().getAbbreviationDictionary(); } return null; } public boolean useTokenEnd() { return getFactory() == null || getFactory().isUseTokenEnd(); } public char[] getEosCharacters() { if (getFactory() != null) { return getFactory().getEOSCharacters(); } return null; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/SentenceSample.java0100644 0000000 0000000 00000007346 14523004075 033542 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Objects; import opennlp.tools.commons.Sample; import opennlp.tools.tokenize.Detokenizer; import opennlp.tools.util.Span; /** * A {@link SentenceSample} contains a document with * begin indexes of the individual sentences. */ public class SentenceSample implements Sample { private static final long serialVersionUID = 1771522768104567531L; private final String document; private final List sentences; /** * Initializes the current instance. * * @param document The document represented as plain {@link CharSequence}. * @param sentences One or more {@link Span spans} that represent a sentence each. */ public SentenceSample(CharSequence document, Span... sentences) { this.document = document.toString(); this.sentences = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(sentences))); // validate that all spans are inside the document text for (Span sentence : sentences) { if (sentence.getEnd() > document.length()) { throw new IllegalArgumentException( String.format("Sentence span is outside of document text [len %d] and span %s", document.length(), sentence)); } } } public SentenceSample(Detokenizer detokenizer, String[][] sentences) { List spans = new ArrayList<>(sentences.length); StringBuilder documentBuilder = new StringBuilder(); for (String[] sentenceTokens : sentences) { String sampleSentence = detokenizer.detokenize(sentenceTokens, null); int beginIndex = documentBuilder.length(); documentBuilder.append(sampleSentence); spans.add(new Span(beginIndex, documentBuilder.length())); } document = documentBuilder.toString(); this.sentences = Collections.unmodifiableList(spans); } /** * @return the document as a plain string. */ public String getDocument() { return document; } /** * @return the {@link Span spans} of the sentences in a document. */ public Span[] getSentences() { return sentences.toArray(new Span[0]); } // TODO: This one must output the tags! @Override public String toString() { StringBuilder documentBuilder = new StringBuilder(); for (Span sentSpan : sentences) { documentBuilder.append(sentSpan.getCoveredText(document).toString() .replace("\r", "").replace("\n", "")); documentBuilder.append("\n"); } return documentBuilder.toString(); } @Override public int hashCode() { return Objects.hash(getDocument(), Arrays.hashCode(getSentences())); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof SentenceSample a) { return getDocument().equals(a.getDocument()) && Arrays.equals(getSentences(), a.getSentences()); } return false; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_sentdetect_Senten0100644 0000000 0000000 00000000161 14523004075 032623 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/SentenceSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/SentenceSampleStream.j0100644 0000000 0000000 00000004447 14523004075 034225 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.IOException; import java.util.LinkedList; import java.util.List; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; /** * This class is a stream filter which reads a sentence by line samples from * an {@link ObjectStream} and converts them into {@link SentenceSample} objects. * An empty line indicates the beginning of a new document. */ public class SentenceSampleStream extends FilterObjectStream { public SentenceSampleStream(ObjectStream sentences) { super(new EmptyLinePreprocessorStream(sentences)); } public static String replaceNewLineEscapeTags(String s) { return s.replace("", "\n").replace("", "\r"); } @Override public SentenceSample read() throws IOException { StringBuilder sentencesString = new StringBuilder(); List sentenceSpans = new LinkedList<>(); String sentence; while ((sentence = samples.read()) != null && !sentence.equals("")) { int begin = sentencesString.length(); sentence = sentence.trim(); sentence = replaceNewLineEscapeTags(sentence); sentencesString.append(sentence); int end = sentencesString.length(); sentenceSpans.add(new Span(begin, end)); sentencesString.append(' '); } if (sentenceSpans.size() > 0) { return new SentenceSample(sentencesString.toString(), sentenceSpans.toArray(new Span[0])); } return null; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/lang/Factory.java0100644 0000000 0000000 00000006060 14523004075 033154 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect.lang; import java.util.Collections; import java.util.Set; import opennlp.tools.sentdetect.DefaultEndOfSentenceScanner; import opennlp.tools.sentdetect.DefaultSDContextGenerator; import opennlp.tools.sentdetect.EndOfSentenceScanner; import opennlp.tools.sentdetect.SDContextGenerator; import opennlp.tools.sentdetect.lang.th.SentenceContextGenerator; public class Factory { public static final char[] ptEosCharacters = new char[] { '.', '?', '!', ';', ':', '(', ')', '«', '»', '\'', '"' }; public static final char[] defaultEosCharacters = new char[] { '.', '!', '?' }; public static final char[] thEosCharacters = new char[] { ' ','\n' }; public static final char[] jpnEosCharacters = new char[] {'。', 'ï¼', '?'}; public EndOfSentenceScanner createEndOfSentenceScanner(String languageCode) { return new DefaultEndOfSentenceScanner(getEOSCharacters(languageCode)); } public EndOfSentenceScanner createEndOfSentenceScanner( char[] customEOSCharacters) { return new DefaultEndOfSentenceScanner(customEOSCharacters); } public SDContextGenerator createSentenceContextGenerator(String languageCode, Set abbreviations) { if ("th".equals(languageCode) || "tha".equals(languageCode)) { return new SentenceContextGenerator(); } else if ("pt".equals(languageCode) || "por".equals(languageCode)) { return new DefaultSDContextGenerator(abbreviations, ptEosCharacters); } return new DefaultSDContextGenerator(abbreviations, defaultEosCharacters); } public SDContextGenerator createSentenceContextGenerator( Set abbreviations, char[] customEOSCharacters) { return new DefaultSDContextGenerator(abbreviations, customEOSCharacters); } public SDContextGenerator createSentenceContextGenerator(String languageCode) { return createSentenceContextGenerator(languageCode, Collections.emptySet()); } public char[] getEOSCharacters(String languageCode) { if ("th".equals(languageCode) || "tha".equals(languageCode)) { return thEosCharacters; } else if ("pt".equals(languageCode) || "por".equals(languageCode)) { return ptEosCharacters; } else if ("jpn".equals(languageCode)) { return jpnEosCharacters; } return defaultEosCharacters; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_sentdetect_lang_t0100644 0000000 0000000 00000000175 14523004075 032640 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/lang/th/SentenceContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/lang/th/SentenceContex0100644 0000000 0000000 00000005334 14523004075 034170 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect.lang.th; import opennlp.tools.sentdetect.DefaultSDContextGenerator; /** * Creates contexts/features for end-of-sentence detection in Thai text. */ public class SentenceContextGenerator extends DefaultSDContextGenerator { public static final char[] eosCharacters = {' ','\n'}; public SentenceContextGenerator() { super(eosCharacters); } @Override protected void collectFeatures(String prefix, String suffix, String previous, String next, Character eosChar) { buf.append("p="); buf.append(prefix); collectFeats.add(buf.toString()); buf.setLength(0); buf.append("s="); buf.append(suffix); collectFeats.add(buf.toString()); buf.setLength(0); collectFeats.add("p1=" + prefix.substring(StrictMath.max(prefix.length() - 1,0))); collectFeats.add("p2=" + prefix.substring(StrictMath.max(prefix.length() - 2,0))); collectFeats.add("p3=" + prefix.substring(StrictMath.max(prefix.length() - 3,0))); collectFeats.add("p4=" + prefix.substring(StrictMath.max(prefix.length() - 4,0))); collectFeats.add("p5=" + prefix.substring(StrictMath.max(prefix.length() - 5,0))); collectFeats.add("p6=" + prefix.substring(StrictMath.max(prefix.length() - 6,0))); collectFeats.add("p7=" + prefix.substring(StrictMath.max(prefix.length() - 7,0))); collectFeats.add("n1=" + suffix.substring(0,StrictMath.min(1, suffix.length()))); collectFeats.add("n2=" + suffix.substring(0,StrictMath.min(2, suffix.length()))); collectFeats.add("n3=" + suffix.substring(0,StrictMath.min(3, suffix.length()))); collectFeats.add("n4=" + suffix.substring(0,StrictMath.min(4, suffix.length()))); collectFeats.add("n5=" + suffix.substring(0,StrictMath.min(5, suffix.length()))); collectFeats.add("n6=" + suffix.substring(0,StrictMath.min(6, suffix.length()))); collectFeats.add("n7=" + suffix.substring(0,StrictMath.min(7, suffix.length()))); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/lang/th/package.html0100644 0000000 0000000 00000001666 14523004075 033605 0ustar00rootroot0000000 0000000 Package related to the processing of Thai data. apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/sentdetect/package-info.java0100644 0000000 0000000 00000001603 14523004075 033146 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package related to identifying sentence boundaries. */ package opennlp.tools.sentdetect; apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/PorterStemmer.java0100644 0000000 0000000 00000035102 14523004075 032745 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* Porter stemmer in Java. The original paper is in Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14, no. 3, pp 130-137, See also http://www.tartarus.org/~martin/PorterStemmer/index.html Bug 1 (reported by Gonzalo Parra 16/10/99) fixed as marked below. Tthe words 'aed', 'eed', 'oed' leave k at 'a' for step 3, and b[k-1] is then out outside the bounds of b. Similarly, Bug 2 (reported by Steve Dyrdahl 22/2/00) fixed as marked below. 'ion' by itself leaves j = -1 in the test for 'ion' in step 5, and b[j] is then outside the bounds of b. Release 3. [ This version is derived from Release 3, modified by Brian Goetz to optimize for fewer object creations. ] */ package opennlp.tools.stemmer; /** * A {@link Stemmer}, implementing the * Porter Stemming Algorithm *

* The Stemmer implementation transforms a word into its root form. The input * word can be provided a character at time (by calling {@link #add(char)}), * or at once by calling one of the various {@code stem(..)} methods. */ // CHECKSTYLE:OFF public class PorterStemmer implements Stemmer { private static final int INC = 50; private char[] b; private int i, /* offset into b */ j, k, k0; private boolean dirty = false; public PorterStemmer() { b = new char[INC]; i = 0; } /** * reset() resets the stemmer so it can stem another word. If you invoke * the stemmer by calling add(char) and then stem(), you must call reset() * before starting another word. */ public void reset() { i = 0; dirty = false; } /** * Add a character to the word being stemmed. When you are finished * adding characters, you can call stem(void) to process the word. */ public void add(char ch) { if (b.length == i) { char[] new_b = new char[i + INC]; System.arraycopy(b, 0, new_b, 0, i); { b = new_b; } } b[i++] = ch; } /** * After a word has been stemmed, it can be retrieved by toString(), * or a reference to the internal buffer can be retrieved by getResultBuffer * and getResultLength (which is generally more efficient.) */ @Override public String toString() { return new String(b, 0, i); } /** * Returns the length of the word resulting from the stemming process. */ public int getResultLength() { return i; } /** * Returns a reference to a character buffer containing the results of * the stemming process. You also need to consult getResultLength() * to determine the length of the result. */ public char[] getResultBuffer() { return b; } /* cons(i) is true <=> b[i] is a consonant. */ private boolean cons(int i) { switch (b[i]) { case 'a': case 'e': case 'i': case 'o': case 'u': return false; case 'y': return (i == k0) || !cons(i - 1); default: return true; } } /* m() measures the number of consonant sequences between k0 and j. if c is a consonant sequence and v a vowel sequence, and <..> indicates arbitrary presence, gives 0 vc gives 1 vcvc gives 2 vcvcvc gives 3 .... */ private int m() { int n = 0; int i = k0; while (true) { if (i > j) { return n; } if (!cons(i)) { break; } i++; } i++; while (true) { while (true) { if (i > j) { return n; } if (cons(i)) { break; } i++; } i++; n++; while (true) { if (i > j) { return n; } if (!cons(i)) { break; } i++; } i++; } } /* vowelinstem() is true <=> k0,...j contains a vowel */ private boolean vowelinstem() { int i; for (i = k0; i <= j; i++) { if (!cons(i)) { return true; } } return false; } /* doublec(j) is true <=> j,(j-1) contain a double consonant. */ private boolean doublec(int j) { return j >= k0 + 1 && b[j] == b[j - 1] && cons(j); } /* cvc(i) is true <=> i-2,i-1,i has the form consonant - vowel - consonant and also if the second c is not w,x or y. this is used when trying to restore an e at the end of a short word. e.g. cav(e), lov(e), hop(e), crim(e), but snow, box, tray. */ private boolean cvc(int i) { if (i < k0 + 2 || !cons(i) || cons(i - 1) || !cons(i - 2)) { return false; } else { int ch = b[i]; if (ch == 'w' || ch == 'x' || ch == 'y') { return false; } } return true; } private boolean ends(String s) { int l = s.length(); int o = k - l + 1; if (o < k0) { return false; } for (int i = 0; i < l; i++) { if (b[o + i] != s.charAt(i)) { return false; } } j = k - l; return true; } /* setto(s) sets (j+1),...k to the characters in the string s, readjusting k. */ void setto(String s) { int l = s.length(); int o = j + 1; for (int i = 0; i < l; i++) { b[o + i] = s.charAt(i); } k = j + l; dirty = true; } /* r(s) is used further down. */ void r(String s) { if (m() > 0) { setto(s); } } /* step1() gets rid of plurals and -ed or -ing. e.g. caresses -> caress ponies -> poni ties -> ti caress -> caress cats -> cat feed -> feed agreed -> agree disabled -> disable matting -> mat mating -> mate meeting -> meet milling -> mill messing -> mess meetings -> meet */ private void step1() { if (b[k] == 's') { if (ends("sses")) { k -= 2; } else if (ends("ies")) { setto("i"); } else if (b[k - 1] != 's') { k--; } } if (ends("eed")) { if (m() > 0) { k--; } } else if ((ends("ed") || ends("ing")) && vowelinstem()) { k = j; if (ends("at")) { setto("ate"); } else if (ends("bl")) { setto("ble"); } else if (ends("iz")) { setto("ize"); } else if (doublec(k)) { int ch = b[k--]; if (ch == 'l' || ch == 's' || ch == 'z') { k++; } } else if (m() == 1 && cvc(k)) { setto("e"); } } } /* step2() turns terminal y to i when there is another vowel in the stem. */ private void step2() { if (ends("y") && vowelinstem()) { b[k] = 'i'; dirty = true; } } /* step3() maps double suffices to single ones. so -ization ( = -ize plus -ation) maps to -ize etc. note that the string before the suffix must give m() > 0. */ private void step3() { if (k == k0) { return; /* For Bug 1 */ } switch (b[k - 1]) { case 'a': if (ends("ational")) { r("ate"); break; } if (ends("tional")) { r("tion"); break; } break; case 'c': if (ends("enci")) { r("ence"); break; } if (ends("anci")) { r("ance"); break; } break; case 'e': if (ends("izer")) { r("ize"); break; } break; case 'l': if (ends("bli")) { r("ble"); break; } if (ends("alli")) { r("al"); break; } if (ends("entli")) { r("ent"); break; } if (ends("eli")) { r("e"); break; } if (ends("ousli")) { r("ous"); break; } break; case 'o': if (ends("ization")) { r("ize"); break; } if (ends("ation")) { r("ate"); break; } if (ends("ator")) { r("ate"); break; } break; case 's': if (ends("alism")) { r("al"); break; } if (ends("iveness")) { r("ive"); break; } if (ends("fulness")) { r("ful"); break; } if (ends("ousness")) { r("ous"); break; } break; case 't': if (ends("aliti")) { r("al"); break; } if (ends("iviti")) { r("ive"); break; } if (ends("biliti")) { r("ble"); break; } break; case 'g': if (ends("logi")) { r("log"); break; } } } /* step4() deals with -ic-, -full, -ness etc. similar strategy to step3. */ private void step4() { switch (b[k]) { case 'e': if (ends("icate")) { r("ic"); break; } if (ends("ative")) { r(""); break; } if (ends("alize")) { r("al"); break; } break; case 'i': if (ends("iciti")) { r("ic"); break; } break; case 'l': if (ends("ical")) { r("ic"); break; } if (ends("ful")) { r(""); break; } break; case 's': if (ends("ness")) { r(""); break; } break; } } /* step5() takes off -ant, -ence etc., in context vcvc. */ private void step5() { if (k == k0) { return; /* for Bug 1 */ } switch (b[k - 1]) { case 'a': if (ends("al")) { break; } return; case 'c': if (ends("ance")) { break; } if (ends("ence")) { break; } return; case 'e': if (ends("er")) { break; } return; case 'i': if (ends("ic")) { break; } return; case 'l': if (ends("able")) { break; } if (ends("ible")) { break; } return; case 'n': if (ends("ant")) { break; } if (ends("ement")) { break; } if (ends("ment")) { break; } /* element etc. not stripped before the m */ if (ends("ent")) { break; } return; case 'o': if (ends("ion") && j >= 0 && (b[j] == 's' || b[j] == 't')) { break; } /* j >= 0 fixes Bug 2 */ if (ends("ou")) { break; } return; /* takes care of -ous */ case 's': if (ends("ism")) { break; } return; case 't': if (ends("ate")) { break; } if (ends("iti")) { break; } return; case 'u': if (ends("ous")) { break; } return; case 'v': if (ends("ive")) { break; } return; case 'z': if (ends("ize")) { break; } return; default: return; } if (m() > 1) { k = j; } } /* step6() removes a final -e if m() > 1. */ private void step6() { j = k; if (b[k] == 'e') { int a = m(); if (a > 1 || a == 1 && !cvc(k - 1)) { k--; } } if (b[k] == 'l' && doublec(k) && m() > 1) { k--; } } /** * Stem a word provided as a String. Returns the result as a String. */ public String stem(String s) { if (stem(s.toCharArray(), s.length())) { return toString(); } else { return s; } } /** * Stem a word provided as a CharSequence. * Returns the result as a CharSequence. */ public CharSequence stem(CharSequence word) { return stem(word.toString()); } /** * Stem a word contained in a char[]. Returns true if the stemming process * resulted in a word different from the input. You can retrieve the * result with getResultLength()/getResultBuffer() or toString(). */ public boolean stem(char[] word) { return stem(word, word.length); } /** * Stem a word contained in a portion of a char[] array. Returns * true if the stemming process resulted in a word different from * the input. You can retrieve the result with * getResultLength()/getResultBuffer() or toString(). */ public boolean stem(char[] wordBuffer, int offset, int wordLen) { reset(); if (b.length < wordLen) { b = new char[wordLen - offset]; } System.arraycopy(wordBuffer, offset, b, 0, wordLen); i = wordLen; return stem(0); } /** * Stem a word contained in a leading portion of a char[] array. * Returns true if the stemming process resulted in a word different * from the input. You can retrieve the result with * getResultLength()/getResultBuffer() or toString(). */ public boolean stem(char[] word, int wordLen) { return stem(word, 0, wordLen); } /** * Stem the word placed into the Stemmer buffer through calls to add(). * Returns true if the stemming process resulted in a word different * from the input. You can retrieve the result with * getResultLength()/getResultBuffer() or toString(). */ public boolean stem() { return stem(0); } public boolean stem(int i0) { k = i - 1; k0 = i0; if (k > k0 + 1) { step1(); step2(); step3(); step4(); step5(); step6(); } // Also, a word is considered dirty if we lopped off letters // Thanks to Ifigenia Vairelles for pointing this out. if (i != k + 1) { dirty = true; } i = k + 1; return dirty; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/Stemmer.java0100644 0000000 0000000 00000001677 14523004075 031563 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.stemmer; /** * The stemmer is reducing a word to its stem. */ public interface Stemmer { CharSequence stem(CharSequence word); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000172 14523004075 032663 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/AbstractSnowballStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/AbstractSnowball0100644 0000000 0000000 00000003302 14523004075 034300 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package opennlp.tools.stemmer.snowball; abstract class AbstractSnowballStemmer extends SnowballProgram { public abstract boolean stem(); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/Among.java0100644 0000000 0000000 00000005031 14523004075 033015 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; import java.lang.reflect.Method; public class Among { public final char[] s; /* search string */ public final int substring_i; /* index to longest matching substring */ public final int result; /* result of the lookup */ public final Method method; /* method to use if substring matches */ public Among(String s, int substring_i, int result) { this.s = s.toCharArray(); this.substring_i = substring_i; this.result = result; this.method = null; } public Among(String s, int substring_i, int result, String methodname, Class programclass) { this.s = s.toCharArray(); this.substring_i = substring_i; this.result = result; try { this.method = programclass.getDeclaredMethod(methodname); } catch (NoSuchMethodException e) { throw new RuntimeException(e); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000162 14523004075 032662 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/SnowballProgram.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/SnowballProgram.0100644 0000000 0000000 00000024352 14523004075 034232 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package opennlp.tools.stemmer.snowball; import java.lang.reflect.InvocationTargetException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; class SnowballProgram { private static final Logger logger = LoggerFactory.getLogger(SnowballProgram.class); // current string protected StringBuilder current; protected int cursor; protected int limit; protected int limit_backward; protected int bra; protected int ket; protected SnowballProgram() { current = new StringBuilder(); init(); } public SnowballProgram(SnowballProgram other) { current = other.current; cursor = other.cursor; limit = other.limit; limit_backward = other.limit_backward; bra = other.bra; ket = other.ket; } private void init() { cursor = 0; limit = current.length(); limit_backward = 0; bra = cursor; ket = limit; } /** * Get the current string. */ public String getCurrent() { return current.toString(); } /** * Set the current string. */ public void setCurrent(String value) { // Make a new StringBuilder. If we reuse the old one, and a user of // the library keeps a reference to the buffer returned (for example, // by converting it to a String in a way which doesn't force a copy), // the buffer size will not decrease, and we will risk wasting a large // amount of memory. // Thanks to Wolfram Esser for spotting this problem. current = new StringBuilder(value); init(); } protected void copy_from(SnowballProgram other) { current = other.current; cursor = other.cursor; limit = other.limit; limit_backward = other.limit_backward; bra = other.bra; ket = other.ket; } protected boolean in_grouping(char[] s, int min, int max) { if (cursor >= limit) { return false; } char ch = current.charAt(cursor); if (ch > max || ch < min) { return false; } ch -= min; if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) { return false; } cursor++; return true; } protected boolean in_grouping_b(char[] s, int min, int max) { if (cursor <= limit_backward) { return false; } char ch = current.charAt(cursor - 1); if (ch > max || ch < min) { return false; } ch -= min; if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) { return false; } cursor--; return true; } protected boolean out_grouping(char[] s, int min, int max) { if (cursor >= limit) { return false; } char ch = current.charAt(cursor); if (ch > max || ch < min) { cursor++; return true; } ch -= min; if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) { cursor++; return true; } return false; } protected boolean out_grouping_b(char[] s, int min, int max) { if (cursor <= limit_backward) { return false; } char ch = current.charAt(cursor - 1); if (ch > max || ch < min) { cursor--; return true; } ch -= min; if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) { cursor--; return true; } return false; } protected boolean eq_s(CharSequence s) { if (limit - cursor < s.length()) { return false; } int i; for (i = 0; i != s.length(); i++) { if (current.charAt(cursor + i) != s.charAt(i)) { return false; } } cursor += s.length(); return true; } protected boolean eq_s_b(CharSequence s) { if (cursor - limit_backward < s.length()) { return false; } int i; for (i = 0; i != s.length(); i++) { if (current.charAt(cursor - s.length() + i) != s.charAt(i)) { return false; } } cursor -= s.length(); return true; } protected int find_among(Among v[]) { int i = 0; int j = v.length; int c = cursor; int l = limit; int common_i = 0; int common_j = 0; boolean first_key_inspected = false; while (true) { int k = i + ((j - i) >> 1); int diff = 0; int common = common_i < common_j ? common_i : common_j; // smaller Among w = v[k]; int i2; for (i2 = common; i2 < w.s.length; i2++) { if (c + common == l) { diff = -1; break; } diff = current.charAt(c + common) - w.s[i2]; if (diff != 0) { break; } common++; } if (diff < 0) { j = k; common_j = common; } else { i = k; common_i = common; } if (j - i <= 1) { if (i > 0) { break; // v->s has been inspected } if (j == i) { break; // only one item in v } // - but now we need to go round once more to get // v->s inspected. This looks messy, but is actually // the optimal approach. if (first_key_inspected) { break; } first_key_inspected = true; } } while (true) { Among w = v[i]; if (common_i >= w.s.length) { cursor = c + w.s.length; if (w.method == null) { return w.result; } boolean res; try { Object resobj = w.method.invoke(this); res = resobj.toString().equals("true"); } catch (InvocationTargetException | IllegalAccessException e) { res = false; logger.warn(e.getLocalizedMessage(), e); } cursor = c + w.s.length; if (res) { return w.result; } } i = w.substring_i; if (i < 0) { return 0; } } } // find_among_b is for backwards processing. Same comments apply protected int find_among_b(Among v[]) { int i = 0; int j = v.length; int c = cursor; int lb = limit_backward; int common_i = 0; int common_j = 0; boolean first_key_inspected = false; while (true) { int k = i + ((j - i) >> 1); int diff = 0; int common = common_i < common_j ? common_i : common_j; Among w = v[k]; int i2; for (i2 = w.s.length - 1 - common; i2 >= 0; i2--) { if (c - common == lb) { diff = -1; break; } diff = current.charAt(c - 1 - common) - w.s[i2]; if (diff != 0) { break; } common++; } if (diff < 0) { j = k; common_j = common; } else { i = k; common_i = common; } if (j - i <= 1) { if (i > 0) { break; } if (j == i) { break; } if (first_key_inspected) { break; } first_key_inspected = true; } } while (true) { Among w = v[i]; if (common_i >= w.s.length) { cursor = c - w.s.length; if (w.method == null) { return w.result; } boolean res; try { Object resobj = w.method.invoke(this); res = resobj.toString().equals("true"); } catch (InvocationTargetException | IllegalAccessException e) { res = false; logger.warn("Triggered by {}. Exception: {}", current, e.getLocalizedMessage(), e); } cursor = c - w.s.length; if (res) { return w.result; } } i = w.substring_i; if (i < 0) { return 0; } } } /* to replace chars between c_bra and c_ket in current by the * chars in s. */ protected int replace_s(int c_bra, int c_ket, String s) { int adjustment = s.length() - (c_ket - c_bra); current.replace(c_bra, c_ket, s); limit += adjustment; if (cursor >= c_ket) { cursor += adjustment; } else if (cursor > c_bra) { cursor = c_bra; } return adjustment; } protected void slice_check() { if (bra < 0 || bra > ket || ket > limit || limit > current.length()) // this line could be removed { logger.error("faulty slice operation"); /* fprintf(stderr, "faulty slice operation:\n"); debug(z, -1, 0); exit(1); */ } } protected void slice_from(String s) { slice_check(); replace_s(bra, ket, s); } protected void slice_from(CharSequence s) { slice_from(s.toString()); } protected void slice_del() { slice_from(""); } protected void insert(int c_bra, int c_ket, String s) { int adjustment = replace_s(c_bra, c_ket, s); if (c_bra <= bra) { bra += adjustment; } if (c_bra <= ket) { ket += adjustment; } } protected void insert(int c_bra, int c_ket, CharSequence s) { insert(c_bra, c_ket, s.toString()); } /* Copy the slice into the supplied StringBuilder */ protected void slice_to(StringBuilder s) { slice_check(); s.replace(0, s.length(), current.substring(bra, ket)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000162 14523004075 032662 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/SnowballStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/SnowballStemmer.0100644 0000000 0000000 00000007176 14523004075 034244 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.stemmer.snowball; import opennlp.tools.stemmer.Stemmer; public class SnowballStemmer implements Stemmer { private final AbstractSnowballStemmer stemmer; private final int repeat; public SnowballStemmer(ALGORITHM algorithm, int repeat) { this.repeat = repeat; if (ALGORITHM.ARABIC.equals(algorithm)) { stemmer = new arabicStemmer(); } else if (ALGORITHM.DANISH.equals(algorithm)) { stemmer = new danishStemmer(); } else if (ALGORITHM.DUTCH.equals(algorithm)) { stemmer = new dutchStemmer(); } else if (ALGORITHM.CATALAN.equals(algorithm)) { stemmer = new catalanStemmer(); } else if (ALGORITHM.ENGLISH.equals(algorithm)) { stemmer = new englishStemmer(); } else if (ALGORITHM.FINNISH.equals(algorithm)) { stemmer = new finnishStemmer(); } else if (ALGORITHM.FRENCH.equals(algorithm)) { stemmer = new frenchStemmer(); } else if (ALGORITHM.GERMAN.equals(algorithm)) { stemmer = new germanStemmer(); } else if (ALGORITHM.GREEK.equals(algorithm)) { stemmer = new greekStemmer(); } else if (ALGORITHM.HUNGARIAN.equals(algorithm)) { stemmer = new hungarianStemmer(); } else if (ALGORITHM.INDONESIAN.equals(algorithm)) { stemmer = new indonesianStemmer(); } else if (ALGORITHM.IRISH.equals(algorithm)) { stemmer = new irishStemmer(); } else if (ALGORITHM.ITALIAN.equals(algorithm)) { stemmer = new italianStemmer(); } else if (ALGORITHM.NORWEGIAN.equals(algorithm)) { stemmer = new norwegianStemmer(); } else if (ALGORITHM.PORTER.equals(algorithm)) { stemmer = new porterStemmer(); } else if (ALGORITHM.PORTUGUESE.equals(algorithm)) { stemmer = new portugueseStemmer(); } else if (ALGORITHM.ROMANIAN.equals(algorithm)) { stemmer = new romanianStemmer(); } else if (ALGORITHM.RUSSIAN.equals(algorithm)) { stemmer = new russianStemmer(); } else if (ALGORITHM.SPANISH.equals(algorithm)) { stemmer = new spanishStemmer(); } else if (ALGORITHM.SWEDISH.equals(algorithm)) { stemmer = new swedishStemmer(); } else if (ALGORITHM.TURKISH.equals(algorithm)) { stemmer = new turkishStemmer(); } else { throw new IllegalStateException("Unexpected stemmer algorithm: " + algorithm); } } public SnowballStemmer(ALGORITHM algorithm) { this(algorithm, 1); } public CharSequence stem(CharSequence word) { stemmer.setCurrent(word.toString()); for (int i = 0; i < repeat; i++) { stemmer.stem(); } return stemmer.getCurrent(); } public enum ALGORITHM { ARABIC, DANISH, DUTCH, CATALAN, ENGLISH, FINNISH, FRENCH, GERMAN, GREEK, HUNGARIAN, INDONESIAN, IRISH, ITALIAN, NORWEGIAN, PORTER, PORTUGUESE, ROMANIAN, RUSSIAN, SPANISH, SWEDISH, TURKISH } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000160 14523004075 032660 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/arabicStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/arabicStemmer.ja0100644 0000000 0000000 00000100633 14523004075 034207 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class arabicStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("\u0640", -1, 1), new Among("\u064B", -1, 1), new Among("\u064C", -1, 1), new Among("\u064D", -1, 1), new Among("\u064E", -1, 1), new Among("\u064F", -1, 1), new Among("\u0650", -1, 1), new Among("\u0651", -1, 1), new Among("\u0652", -1, 1), new Among("\u0660", -1, 2), new Among("\u0661", -1, 3), new Among("\u0662", -1, 4), new Among("\u0663", -1, 5), new Among("\u0664", -1, 6), new Among("\u0665", -1, 7), new Among("\u0666", -1, 8), new Among("\u0667", -1, 9), new Among("\u0668", -1, 10), new Among("\u0669", -1, 11), new Among("\uFE80", -1, 12), new Among("\uFE81", -1, 16), new Among("\uFE82", -1, 16), new Among("\uFE83", -1, 13), new Among("\uFE84", -1, 13), new Among("\uFE85", -1, 17), new Among("\uFE86", -1, 17), new Among("\uFE87", -1, 14), new Among("\uFE88", -1, 14), new Among("\uFE89", -1, 15), new Among("\uFE8A", -1, 15), new Among("\uFE8B", -1, 15), new Among("\uFE8C", -1, 15), new Among("\uFE8D", -1, 18), new Among("\uFE8E", -1, 18), new Among("\uFE8F", -1, 19), new Among("\uFE90", -1, 19), new Among("\uFE91", -1, 19), new Among("\uFE92", -1, 19), new Among("\uFE93", -1, 20), new Among("\uFE94", -1, 20), new Among("\uFE95", -1, 21), new Among("\uFE96", -1, 21), new Among("\uFE97", -1, 21), new Among("\uFE98", -1, 21), new Among("\uFE99", -1, 22), new Among("\uFE9A", -1, 22), new Among("\uFE9B", -1, 22), new Among("\uFE9C", -1, 22), new Among("\uFE9D", -1, 23), new Among("\uFE9E", -1, 23), new Among("\uFE9F", -1, 23), new Among("\uFEA0", -1, 23), new Among("\uFEA1", -1, 24), new Among("\uFEA2", -1, 24), new Among("\uFEA3", -1, 24), new Among("\uFEA4", -1, 24), new Among("\uFEA5", -1, 25), new Among("\uFEA6", -1, 25), new Among("\uFEA7", -1, 25), new Among("\uFEA8", -1, 25), new Among("\uFEA9", -1, 26), new Among("\uFEAA", -1, 26), new Among("\uFEAB", -1, 27), new Among("\uFEAC", -1, 27), new Among("\uFEAD", -1, 28), new Among("\uFEAE", -1, 28), new Among("\uFEAF", -1, 29), new Among("\uFEB0", -1, 29), new Among("\uFEB1", -1, 30), new Among("\uFEB2", -1, 30), new Among("\uFEB3", -1, 30), new Among("\uFEB4", -1, 30), new Among("\uFEB5", -1, 31), new Among("\uFEB6", -1, 31), new Among("\uFEB7", -1, 31), new Among("\uFEB8", -1, 31), new Among("\uFEB9", -1, 32), new Among("\uFEBA", -1, 32), new Among("\uFEBB", -1, 32), new Among("\uFEBC", -1, 32), new Among("\uFEBD", -1, 33), new Among("\uFEBE", -1, 33), new Among("\uFEBF", -1, 33), new Among("\uFEC0", -1, 33), new Among("\uFEC1", -1, 34), new Among("\uFEC2", -1, 34), new Among("\uFEC3", -1, 34), new Among("\uFEC4", -1, 34), new Among("\uFEC5", -1, 35), new Among("\uFEC6", -1, 35), new Among("\uFEC7", -1, 35), new Among("\uFEC8", -1, 35), new Among("\uFEC9", -1, 36), new Among("\uFECA", -1, 36), new Among("\uFECB", -1, 36), new Among("\uFECC", -1, 36), new Among("\uFECD", -1, 37), new Among("\uFECE", -1, 37), new Among("\uFECF", -1, 37), new Among("\uFED0", -1, 37), new Among("\uFED1", -1, 38), new Among("\uFED2", -1, 38), new Among("\uFED3", -1, 38), new Among("\uFED4", -1, 38), new Among("\uFED5", -1, 39), new Among("\uFED6", -1, 39), new Among("\uFED7", -1, 39), new Among("\uFED8", -1, 39), new Among("\uFED9", -1, 40), new Among("\uFEDA", -1, 40), new Among("\uFEDB", -1, 40), new Among("\uFEDC", -1, 40), new Among("\uFEDD", -1, 41), new Among("\uFEDE", -1, 41), new Among("\uFEDF", -1, 41), new Among("\uFEE0", -1, 41), new Among("\uFEE1", -1, 42), new Among("\uFEE2", -1, 42), new Among("\uFEE3", -1, 42), new Among("\uFEE4", -1, 42), new Among("\uFEE5", -1, 43), new Among("\uFEE6", -1, 43), new Among("\uFEE7", -1, 43), new Among("\uFEE8", -1, 43), new Among("\uFEE9", -1, 44), new Among("\uFEEA", -1, 44), new Among("\uFEEB", -1, 44), new Among("\uFEEC", -1, 44), new Among("\uFEED", -1, 45), new Among("\uFEEE", -1, 45), new Among("\uFEEF", -1, 46), new Among("\uFEF0", -1, 46), new Among("\uFEF1", -1, 47), new Among("\uFEF2", -1, 47), new Among("\uFEF3", -1, 47), new Among("\uFEF4", -1, 47), new Among("\uFEF5", -1, 51), new Among("\uFEF6", -1, 51), new Among("\uFEF7", -1, 49), new Among("\uFEF8", -1, 49), new Among("\uFEF9", -1, 50), new Among("\uFEFA", -1, 50), new Among("\uFEFB", -1, 48), new Among("\uFEFC", -1, 48) }; private final static Among a_1[] = { new Among("\u0622", -1, 1), new Among("\u0623", -1, 1), new Among("\u0624", -1, 1), new Among("\u0625", -1, 1), new Among("\u0626", -1, 1) }; private final static Among a_2[] = { new Among("\u0622", -1, 1), new Among("\u0623", -1, 1), new Among("\u0624", -1, 2), new Among("\u0625", -1, 1), new Among("\u0626", -1, 3) }; private final static Among a_3[] = { new Among("\u0627\u0644", -1, 2), new Among("\u0628\u0627\u0644", -1, 1), new Among("\u0643\u0627\u0644", -1, 1), new Among("\u0644\u0644", -1, 2) }; private final static Among a_4[] = { new Among("\u0623\u0622", -1, 2), new Among("\u0623\u0623", -1, 1), new Among("\u0623\u0624", -1, 1), new Among("\u0623\u0625", -1, 4), new Among("\u0623\u0627", -1, 3) }; private final static Among a_5[] = { new Among("\u0641", -1, 1), new Among("\u0648", -1, 1) }; private final static Among a_6[] = { new Among("\u0627\u0644", -1, 2), new Among("\u0628\u0627\u0644", -1, 1), new Among("\u0643\u0627\u0644", -1, 1), new Among("\u0644\u0644", -1, 2) }; private final static Among a_7[] = { new Among("\u0628", -1, 1), new Among("\u0628\u0627", 0, -1), new Among("\u0628\u0628", 0, 2), new Among("\u0643\u0643", -1, 3) }; private final static Among a_8[] = { new Among("\u0633\u0623", -1, 4), new Among("\u0633\u062A", -1, 2), new Among("\u0633\u0646", -1, 3), new Among("\u0633\u064A", -1, 1) }; private final static Among a_9[] = { new Among("\u062A\u0633\u062A", -1, 1), new Among("\u0646\u0633\u062A", -1, 1), new Among("\u064A\u0633\u062A", -1, 1) }; private final static Among a_10[] = { new Among("\u0643\u0645\u0627", -1, 3), new Among("\u0647\u0645\u0627", -1, 3), new Among("\u0646\u0627", -1, 2), new Among("\u0647\u0627", -1, 2), new Among("\u0643", -1, 1), new Among("\u0643\u0645", -1, 2), new Among("\u0647\u0645", -1, 2), new Among("\u0647\u0646", -1, 2), new Among("\u0647", -1, 1), new Among("\u064A", -1, 1) }; private final static Among a_11[] = { new Among("\u0646", -1, 1) }; private final static Among a_12[] = { new Among("\u0627", -1, 1), new Among("\u0648", -1, 1), new Among("\u064A", -1, 1) }; private final static Among a_13[] = { new Among("\u0627\u062A", -1, 1) }; private final static Among a_14[] = { new Among("\u062A", -1, 1) }; private final static Among a_15[] = { new Among("\u0629", -1, 1) }; private final static Among a_16[] = { new Among("\u064A", -1, 1) }; private final static Among a_17[] = { new Among("\u0643\u0645\u0627", -1, 3), new Among("\u0647\u0645\u0627", -1, 3), new Among("\u0646\u0627", -1, 2), new Among("\u0647\u0627", -1, 2), new Among("\u0643", -1, 1), new Among("\u0643\u0645", -1, 2), new Among("\u0647\u0645", -1, 2), new Among("\u0643\u0646", -1, 2), new Among("\u0647\u0646", -1, 2), new Among("\u0647", -1, 1), new Among("\u0643\u0645\u0648", -1, 3), new Among("\u0646\u064A", -1, 2) }; private final static Among a_18[] = { new Among("\u0627", -1, 1), new Among("\u062A\u0627", 0, 2), new Among("\u062A\u0645\u0627", 0, 4), new Among("\u0646\u0627", 0, 2), new Among("\u062A", -1, 1), new Among("\u0646", -1, 1), new Among("\u0627\u0646", 5, 3), new Among("\u062A\u0646", 5, 2), new Among("\u0648\u0646", 5, 3), new Among("\u064A\u0646", 5, 3), new Among("\u064A", -1, 1) }; private final static Among a_19[] = { new Among("\u0648\u0627", -1, 1), new Among("\u062A\u0645", -1, 1) }; private final static Among a_20[] = { new Among("\u0648", -1, 1), new Among("\u062A\u0645\u0648", 0, 2) }; private final static Among a_21[] = { new Among("\u0649", -1, 1) }; private boolean B_is_defined; private boolean B_is_verb; private boolean B_is_noun; private boolean r_Normalize_pre() { int among_var; int v_1 = cursor; lab0: { while (true) { int v_2 = cursor; lab1: { lab2: { int v_3 = cursor; lab3: { bra = cursor; among_var = find_among(a_0); if (among_var == 0) { break lab3; } ket = cursor; switch (among_var) { case 1: slice_del(); break; case 2: slice_from("0"); break; case 3: slice_from("1"); break; case 4: slice_from("2"); break; case 5: slice_from("3"); break; case 6: slice_from("4"); break; case 7: slice_from("5"); break; case 8: slice_from("6"); break; case 9: slice_from("7"); break; case 10: slice_from("8"); break; case 11: slice_from("9"); break; case 12: slice_from("\u0621"); break; case 13: slice_from("\u0623"); break; case 14: slice_from("\u0625"); break; case 15: slice_from("\u0626"); break; case 16: slice_from("\u0622"); break; case 17: slice_from("\u0624"); break; case 18: slice_from("\u0627"); break; case 19: slice_from("\u0628"); break; case 20: slice_from("\u0629"); break; case 21: slice_from("\u062A"); break; case 22: slice_from("\u062B"); break; case 23: slice_from("\u062C"); break; case 24: slice_from("\u062D"); break; case 25: slice_from("\u062E"); break; case 26: slice_from("\u062F"); break; case 27: slice_from("\u0630"); break; case 28: slice_from("\u0631"); break; case 29: slice_from("\u0632"); break; case 30: slice_from("\u0633"); break; case 31: slice_from("\u0634"); break; case 32: slice_from("\u0635"); break; case 33: slice_from("\u0636"); break; case 34: slice_from("\u0637"); break; case 35: slice_from("\u0638"); break; case 36: slice_from("\u0639"); break; case 37: slice_from("\u063A"); break; case 38: slice_from("\u0641"); break; case 39: slice_from("\u0642"); break; case 40: slice_from("\u0643"); break; case 41: slice_from("\u0644"); break; case 42: slice_from("\u0645"); break; case 43: slice_from("\u0646"); break; case 44: slice_from("\u0647"); break; case 45: slice_from("\u0648"); break; case 46: slice_from("\u0649"); break; case 47: slice_from("\u064A"); break; case 48: slice_from("\u0644\u0627"); break; case 49: slice_from("\u0644\u0623"); break; case 50: slice_from("\u0644\u0625"); break; case 51: slice_from("\u0644\u0622"); break; } break lab2; } cursor = v_3; if (cursor >= limit) { break lab1; } cursor++; } continue; } cursor = v_2; break; } } cursor = v_1; return true; } private boolean r_Normalize_post() { int among_var; int v_1 = cursor; lab0: { limit_backward = cursor; cursor = limit; ket = cursor; if (find_among_b(a_1) == 0) { break lab0; } bra = cursor; slice_from("\u0621"); cursor = limit_backward; } cursor = v_1; int v_2 = cursor; lab1: { while (true) { int v_3 = cursor; lab2: { lab3: { int v_4 = cursor; lab4: { bra = cursor; among_var = find_among(a_2); if (among_var == 0) { break lab4; } ket = cursor; switch (among_var) { case 1: slice_from("\u0627"); break; case 2: slice_from("\u0648"); break; case 3: slice_from("\u064A"); break; } break lab3; } cursor = v_4; if (cursor >= limit) { break lab2; } cursor++; } continue; } cursor = v_3; break; } } cursor = v_2; return true; } private boolean r_Checks1() { int among_var; bra = cursor; among_var = find_among(a_3); if (among_var == 0) { return false; } ket = cursor; switch (among_var) { case 1: if (current.length() <= 4) { return false; } B_is_noun = true; B_is_verb = false; B_is_defined = true; break; case 2: if (current.length() <= 3) { return false; } B_is_noun = true; B_is_verb = false; B_is_defined = true; break; } return true; } private boolean r_Prefix_Step1() { int among_var; bra = cursor; among_var = find_among(a_4); if (among_var == 0) { return false; } ket = cursor; switch (among_var) { case 1: if (current.length() <= 3) { return false; } slice_from("\u0623"); break; case 2: if (current.length() <= 3) { return false; } slice_from("\u0622"); break; case 3: if (current.length() <= 3) { return false; } slice_from("\u0627"); break; case 4: if (current.length() <= 3) { return false; } slice_from("\u0625"); break; } return true; } private boolean r_Prefix_Step2() { bra = cursor; if (find_among(a_5) == 0) { return false; } ket = cursor; if (current.length() <= 3) { return false; } { int v_1 = cursor; lab0: { if (!(eq_s("\u0627"))) { break lab0; } return false; } cursor = v_1; } slice_del(); return true; } private boolean r_Prefix_Step3a_Noun() { int among_var; bra = cursor; among_var = find_among(a_6); if (among_var == 0) { return false; } ket = cursor; switch (among_var) { case 1: if (current.length() <= 5) { return false; } slice_del(); break; case 2: if (current.length() <= 4) { return false; } slice_del(); break; } return true; } private boolean r_Prefix_Step3b_Noun() { int among_var; bra = cursor; among_var = find_among(a_7); if (among_var == 0) { return false; } ket = cursor; switch (among_var) { case 1: if (current.length() <= 3) { return false; } slice_del(); break; case 2: if (current.length() <= 3) { return false; } slice_from("\u0628"); break; case 3: if (current.length() <= 3) { return false; } slice_from("\u0643"); break; } return true; } private boolean r_Prefix_Step3_Verb() { int among_var; bra = cursor; among_var = find_among(a_8); if (among_var == 0) { return false; } ket = cursor; switch (among_var) { case 1: if (current.length() <= 4) { return false; } slice_from("\u064A"); break; case 2: if (current.length() <= 4) { return false; } slice_from("\u062A"); break; case 3: if (current.length() <= 4) { return false; } slice_from("\u0646"); break; case 4: if (current.length() <= 4) { return false; } slice_from("\u0623"); break; } return true; } private boolean r_Prefix_Step4_Verb() { bra = cursor; if (find_among(a_9) == 0) { return false; } ket = cursor; if (current.length() <= 4) { return false; } B_is_verb = true; B_is_noun = false; slice_from("\u0627\u0633\u062A"); return true; } private boolean r_Suffix_Noun_Step1a() { int among_var; ket = cursor; among_var = find_among_b(a_10); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: if (current.length() < 4) { return false; } slice_del(); break; case 2: if (current.length() < 5) { return false; } slice_del(); break; case 3: if (current.length() < 6) { return false; } slice_del(); break; } return true; } private boolean r_Suffix_Noun_Step1b() { ket = cursor; if (find_among_b(a_11) == 0) { return false; } bra = cursor; if (current.length() <= 5) { return false; } slice_del(); return true; } private boolean r_Suffix_Noun_Step2a() { ket = cursor; if (find_among_b(a_12) == 0) { return false; } bra = cursor; if (current.length() <= 4) { return false; } slice_del(); return true; } private boolean r_Suffix_Noun_Step2b() { ket = cursor; if (find_among_b(a_13) == 0) { return false; } bra = cursor; if (current.length() < 5) { return false; } slice_del(); return true; } private boolean r_Suffix_Noun_Step2c1() { ket = cursor; if (find_among_b(a_14) == 0) { return false; } bra = cursor; if (current.length() < 4) { return false; } slice_del(); return true; } private boolean r_Suffix_Noun_Step2c2() { ket = cursor; if (find_among_b(a_15) == 0) { return false; } bra = cursor; if (current.length() < 4) { return false; } slice_del(); return true; } private boolean r_Suffix_Noun_Step3() { ket = cursor; if (find_among_b(a_16) == 0) { return false; } bra = cursor; if (current.length() < 3) { return false; } slice_del(); return true; } private boolean r_Suffix_Verb_Step1() { int among_var; ket = cursor; among_var = find_among_b(a_17); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: if (current.length() < 4) { return false; } slice_del(); break; case 2: if (current.length() < 5) { return false; } slice_del(); break; case 3: if (current.length() < 6) { return false; } slice_del(); break; } return true; } private boolean r_Suffix_Verb_Step2a() { int among_var; ket = cursor; among_var = find_among_b(a_18); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: if (current.length() < 4) { return false; } slice_del(); break; case 2: if (current.length() < 5) { return false; } slice_del(); break; case 3: if (current.length() <= 5) { return false; } slice_del(); break; case 4: if (current.length() < 6) { return false; } slice_del(); break; } return true; } private boolean r_Suffix_Verb_Step2b() { ket = cursor; if (find_among_b(a_19) == 0) { return false; } bra = cursor; if (current.length() < 5) { return false; } slice_del(); return true; } private boolean r_Suffix_Verb_Step2c() { int among_var; ket = cursor; among_var = find_among_b(a_20); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: if (current.length() < 4) { return false; } slice_del(); break; case 2: if (current.length() < 6) { return false; } slice_del(); break; } return true; } private boolean r_Suffix_All_alef_maqsura() { ket = cursor; if (find_among_b(a_21) == 0) { return false; } bra = cursor; slice_from("\u064A"); return true; } public boolean stem() { B_is_noun = true; B_is_verb = true; B_is_defined = false; int v_1 = cursor; r_Checks1(); cursor = v_1; r_Normalize_pre(); limit_backward = cursor; cursor = limit; int v_3 = limit - cursor; lab0: { lab1: { int v_4 = limit - cursor; lab2: { if (!(B_is_verb)) { break lab2; } lab3: { int v_5 = limit - cursor; lab4: { { int v_6 = 1; while (true) { int v_7 = limit - cursor; lab5: { if (!r_Suffix_Verb_Step1()) { break lab5; } v_6--; continue; } cursor = limit - v_7; break; } if (v_6 > 0) { break lab4; } } lab6: { int v_8 = limit - cursor; lab7: { if (!r_Suffix_Verb_Step2a()) { break lab7; } break lab6; } cursor = limit - v_8; lab8: { if (!r_Suffix_Verb_Step2c()) { break lab8; } break lab6; } cursor = limit - v_8; if (cursor <= limit_backward) { break lab4; } cursor--; } break lab3; } cursor = limit - v_5; lab9: { if (!r_Suffix_Verb_Step2b()) { break lab9; } break lab3; } cursor = limit - v_5; if (!r_Suffix_Verb_Step2a()) { break lab2; } } break lab1; } cursor = limit - v_4; lab10: { if (!(B_is_noun)) { break lab10; } int v_9 = limit - cursor; lab11: { lab12: { int v_10 = limit - cursor; lab13: { if (!r_Suffix_Noun_Step2c2()) { break lab13; } break lab12; } cursor = limit - v_10; lab14: { lab15: { if (!(B_is_defined)) { break lab15; } break lab14; } if (!r_Suffix_Noun_Step1a()) { break lab14; } lab16: { int v_12 = limit - cursor; lab17: { if (!r_Suffix_Noun_Step2a()) { break lab17; } break lab16; } cursor = limit - v_12; lab18: { if (!r_Suffix_Noun_Step2b()) { break lab18; } break lab16; } cursor = limit - v_12; lab19: { if (!r_Suffix_Noun_Step2c1()) { break lab19; } break lab16; } cursor = limit - v_12; if (cursor <= limit_backward) { break lab14; } cursor--; } break lab12; } cursor = limit - v_10; lab20: { if (!r_Suffix_Noun_Step1b()) { break lab20; } lab21: { int v_13 = limit - cursor; lab22: { if (!r_Suffix_Noun_Step2a()) { break lab22; } break lab21; } cursor = limit - v_13; lab23: { if (!r_Suffix_Noun_Step2b()) { break lab23; } break lab21; } cursor = limit - v_13; if (!r_Suffix_Noun_Step2c1()) { break lab20; } } break lab12; } cursor = limit - v_10; lab24: { lab25: { if (!(B_is_defined)) { break lab25; } break lab24; } if (!r_Suffix_Noun_Step2a()) { break lab24; } break lab12; } cursor = limit - v_10; if (!r_Suffix_Noun_Step2b()) { cursor = limit - v_9; break lab11; } } } if (!r_Suffix_Noun_Step3()) { break lab10; } break lab1; } cursor = limit - v_4; if (!r_Suffix_All_alef_maqsura()) { break lab0; } } } cursor = limit - v_3; cursor = limit_backward; int v_15 = cursor; lab26: { int v_16 = cursor; lab27: { if (!r_Prefix_Step1()) { cursor = v_16; break lab27; } } int v_17 = cursor; lab28: { if (!r_Prefix_Step2()) { cursor = v_17; break lab28; } } lab29: { int v_18 = cursor; lab30: { if (!r_Prefix_Step3a_Noun()) { break lab30; } break lab29; } cursor = v_18; lab31: { if (!(B_is_noun)) { break lab31; } if (!r_Prefix_Step3b_Noun()) { break lab31; } break lab29; } cursor = v_18; if (!(B_is_verb)) { break lab26; } int v_19 = cursor; lab32: { if (!r_Prefix_Step3_Verb()) { cursor = v_19; break lab32; } } if (!r_Prefix_Step4_Verb()) { break lab26; } } } cursor = v_15; r_Normalize_post(); return true; } @Override public boolean equals(Object o) { return o instanceof arabicStemmer; } @Override public int hashCode() { return arabicStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000161 14523004075 032661 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/catalanStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/catalanStemmer.j0100644 0000000 0000000 00000063247 14523004075 034241 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2010, Israel Olalla Copyright (c) 2010, ISOCO All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class catalanStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("", -1, 7), new Among("\u00B7", 0, 6), new Among("\u00E0", 0, 1), new Among("\u00E1", 0, 1), new Among("\u00E8", 0, 2), new Among("\u00E9", 0, 2), new Among("\u00EC", 0, 3), new Among("\u00ED", 0, 3), new Among("\u00EF", 0, 3), new Among("\u00F2", 0, 4), new Among("\u00F3", 0, 4), new Among("\u00FA", 0, 5), new Among("\u00FC", 0, 5) }; private final static Among a_1[] = { new Among("la", -1, 1), new Among("-la", 0, 1), new Among("sela", 0, 1), new Among("le", -1, 1), new Among("me", -1, 1), new Among("-me", 4, 1), new Among("se", -1, 1), new Among("-te", -1, 1), new Among("hi", -1, 1), new Among("'hi", 8, 1), new Among("li", -1, 1), new Among("-li", 10, 1), new Among("'l", -1, 1), new Among("'m", -1, 1), new Among("-m", -1, 1), new Among("'n", -1, 1), new Among("-n", -1, 1), new Among("ho", -1, 1), new Among("'ho", 17, 1), new Among("lo", -1, 1), new Among("selo", 19, 1), new Among("'s", -1, 1), new Among("las", -1, 1), new Among("selas", 22, 1), new Among("les", -1, 1), new Among("-les", 24, 1), new Among("'ls", -1, 1), new Among("-ls", -1, 1), new Among("'ns", -1, 1), new Among("-ns", -1, 1), new Among("ens", -1, 1), new Among("los", -1, 1), new Among("selos", 31, 1), new Among("nos", -1, 1), new Among("-nos", 33, 1), new Among("vos", -1, 1), new Among("us", -1, 1), new Among("-us", 36, 1), new Among("'t", -1, 1) }; private final static Among a_2[] = { new Among("ica", -1, 4), new Among("l\u00F3gica", 0, 3), new Among("enca", -1, 1), new Among("ada", -1, 2), new Among("ancia", -1, 1), new Among("encia", -1, 1), new Among("\u00E8ncia", -1, 1), new Among("\u00EDcia", -1, 1), new Among("logia", -1, 3), new Among("inia", -1, 1), new Among("\u00EDinia", 9, 1), new Among("eria", -1, 1), new Among("\u00E0ria", -1, 1), new Among("at\u00F2ria", -1, 1), new Among("alla", -1, 1), new Among("ella", -1, 1), new Among("\u00EDvola", -1, 1), new Among("ima", -1, 1), new Among("\u00EDssima", 17, 1), new Among("qu\u00EDssima", 18, 5), new Among("ana", -1, 1), new Among("ina", -1, 1), new Among("era", -1, 1), new Among("sfera", 22, 1), new Among("ora", -1, 1), new Among("dora", 24, 1), new Among("adora", 25, 1), new Among("adura", -1, 1), new Among("esa", -1, 1), new Among("osa", -1, 1), new Among("assa", -1, 1), new Among("essa", -1, 1), new Among("issa", -1, 1), new Among("eta", -1, 1), new Among("ita", -1, 1), new Among("ota", -1, 1), new Among("ista", -1, 1), new Among("ialista", 36, 1), new Among("ionista", 36, 1), new Among("iva", -1, 1), new Among("ativa", 39, 1), new Among("n\u00E7a", -1, 1), new Among("log\u00EDa", -1, 3), new Among("ic", -1, 4), new Among("\u00EDstic", 43, 1), new Among("enc", -1, 1), new Among("esc", -1, 1), new Among("ud", -1, 1), new Among("atge", -1, 1), new Among("ble", -1, 1), new Among("able", 49, 1), new Among("ible", 49, 1), new Among("isme", -1, 1), new Among("ialisme", 52, 1), new Among("ionisme", 52, 1), new Among("ivisme", 52, 1), new Among("aire", -1, 1), new Among("icte", -1, 1), new Among("iste", -1, 1), new Among("ici", -1, 1), new Among("\u00EDci", -1, 1), new Among("logi", -1, 3), new Among("ari", -1, 1), new Among("tori", -1, 1), new Among("al", -1, 1), new Among("il", -1, 1), new Among("all", -1, 1), new Among("ell", -1, 1), new Among("\u00EDvol", -1, 1), new Among("isam", -1, 1), new Among("issem", -1, 1), new Among("\u00ECssem", -1, 1), new Among("\u00EDssem", -1, 1), new Among("\u00EDssim", -1, 1), new Among("qu\u00EDssim", 73, 5), new Among("amen", -1, 1), new Among("\u00ECssin", -1, 1), new Among("ar", -1, 1), new Among("ificar", 77, 1), new Among("egar", 77, 1), new Among("ejar", 77, 1), new Among("itar", 77, 1), new Among("itzar", 77, 1), new Among("fer", -1, 1), new Among("or", -1, 1), new Among("dor", 84, 1), new Among("dur", -1, 1), new Among("doras", -1, 1), new Among("ics", -1, 4), new Among("l\u00F3gics", 88, 3), new Among("uds", -1, 1), new Among("nces", -1, 1), new Among("ades", -1, 2), new Among("ancies", -1, 1), new Among("encies", -1, 1), new Among("\u00E8ncies", -1, 1), new Among("\u00EDcies", -1, 1), new Among("logies", -1, 3), new Among("inies", -1, 1), new Among("\u00EDnies", -1, 1), new Among("eries", -1, 1), new Among("\u00E0ries", -1, 1), new Among("at\u00F2ries", -1, 1), new Among("bles", -1, 1), new Among("ables", 103, 1), new Among("ibles", 103, 1), new Among("imes", -1, 1), new Among("\u00EDssimes", 106, 1), new Among("qu\u00EDssimes", 107, 5), new Among("formes", -1, 1), new Among("ismes", -1, 1), new Among("ialismes", 110, 1), new Among("ines", -1, 1), new Among("eres", -1, 1), new Among("ores", -1, 1), new Among("dores", 114, 1), new Among("idores", 115, 1), new Among("dures", -1, 1), new Among("eses", -1, 1), new Among("oses", -1, 1), new Among("asses", -1, 1), new Among("ictes", -1, 1), new Among("ites", -1, 1), new Among("otes", -1, 1), new Among("istes", -1, 1), new Among("ialistes", 124, 1), new Among("ionistes", 124, 1), new Among("iques", -1, 4), new Among("l\u00F3giques", 127, 3), new Among("ives", -1, 1), new Among("atives", 129, 1), new Among("log\u00EDes", -1, 3), new Among("alleng\u00FCes", -1, 1), new Among("icis", -1, 1), new Among("\u00EDcis", -1, 1), new Among("logis", -1, 3), new Among("aris", -1, 1), new Among("toris", -1, 1), new Among("ls", -1, 1), new Among("als", 138, 1), new Among("ells", 138, 1), new Among("ims", -1, 1), new Among("\u00EDssims", 141, 1), new Among("qu\u00EDssims", 142, 5), new Among("ions", -1, 1), new Among("cions", 144, 1), new Among("acions", 145, 2), new Among("esos", -1, 1), new Among("osos", -1, 1), new Among("assos", -1, 1), new Among("issos", -1, 1), new Among("ers", -1, 1), new Among("ors", -1, 1), new Among("dors", 152, 1), new Among("adors", 153, 1), new Among("idors", 153, 1), new Among("ats", -1, 1), new Among("itats", 156, 1), new Among("bilitats", 157, 1), new Among("ivitats", 157, 1), new Among("ativitats", 159, 1), new Among("\u00EFtats", 156, 1), new Among("ets", -1, 1), new Among("ants", -1, 1), new Among("ents", -1, 1), new Among("ments", 164, 1), new Among("aments", 165, 1), new Among("ots", -1, 1), new Among("uts", -1, 1), new Among("ius", -1, 1), new Among("trius", 169, 1), new Among("atius", 169, 1), new Among("\u00E8s", -1, 1), new Among("\u00E9s", -1, 1), new Among("\u00EDs", -1, 1), new Among("d\u00EDs", 174, 1), new Among("\u00F3s", -1, 1), new Among("itat", -1, 1), new Among("bilitat", 177, 1), new Among("ivitat", 177, 1), new Among("ativitat", 179, 1), new Among("\u00EFtat", -1, 1), new Among("et", -1, 1), new Among("ant", -1, 1), new Among("ent", -1, 1), new Among("ient", 184, 1), new Among("ment", 184, 1), new Among("ament", 186, 1), new Among("isament", 187, 1), new Among("ot", -1, 1), new Among("isseu", -1, 1), new Among("\u00ECsseu", -1, 1), new Among("\u00EDsseu", -1, 1), new Among("triu", -1, 1), new Among("\u00EDssiu", -1, 1), new Among("atiu", -1, 1), new Among("\u00F3", -1, 1), new Among("i\u00F3", 196, 1), new Among("ci\u00F3", 197, 1), new Among("aci\u00F3", 198, 1) }; private final static Among a_3[] = { new Among("aba", -1, 1), new Among("esca", -1, 1), new Among("isca", -1, 1), new Among("\u00EFsca", -1, 1), new Among("ada", -1, 1), new Among("ida", -1, 1), new Among("uda", -1, 1), new Among("\u00EFda", -1, 1), new Among("ia", -1, 1), new Among("aria", 8, 1), new Among("iria", 8, 1), new Among("ara", -1, 1), new Among("iera", -1, 1), new Among("ira", -1, 1), new Among("adora", -1, 1), new Among("\u00EFra", -1, 1), new Among("ava", -1, 1), new Among("ixa", -1, 1), new Among("itza", -1, 1), new Among("\u00EDa", -1, 1), new Among("ar\u00EDa", 19, 1), new Among("er\u00EDa", 19, 1), new Among("ir\u00EDa", 19, 1), new Among("\u00EFa", -1, 1), new Among("isc", -1, 1), new Among("\u00EFsc", -1, 1), new Among("ad", -1, 1), new Among("ed", -1, 1), new Among("id", -1, 1), new Among("ie", -1, 1), new Among("re", -1, 1), new Among("dre", 30, 1), new Among("ase", -1, 1), new Among("iese", -1, 1), new Among("aste", -1, 1), new Among("iste", -1, 1), new Among("ii", -1, 1), new Among("ini", -1, 1), new Among("esqui", -1, 1), new Among("eixi", -1, 1), new Among("itzi", -1, 1), new Among("am", -1, 1), new Among("em", -1, 1), new Among("arem", 42, 1), new Among("irem", 42, 1), new Among("\u00E0rem", 42, 1), new Among("\u00EDrem", 42, 1), new Among("\u00E0ssem", 42, 1), new Among("\u00E9ssem", 42, 1), new Among("iguem", 42, 1), new Among("\u00EFguem", 42, 1), new Among("avem", 42, 1), new Among("\u00E0vem", 42, 1), new Among("\u00E1vem", 42, 1), new Among("ir\u00ECem", 42, 1), new Among("\u00EDem", 42, 1), new Among("ar\u00EDem", 55, 1), new Among("ir\u00EDem", 55, 1), new Among("assim", -1, 1), new Among("essim", -1, 1), new Among("issim", -1, 1), new Among("\u00E0ssim", -1, 1), new Among("\u00E8ssim", -1, 1), new Among("\u00E9ssim", -1, 1), new Among("\u00EDssim", -1, 1), new Among("\u00EFm", -1, 1), new Among("an", -1, 1), new Among("aban", 66, 1), new Among("arian", 66, 1), new Among("aran", 66, 1), new Among("ieran", 66, 1), new Among("iran", 66, 1), new Among("\u00EDan", 66, 1), new Among("ar\u00EDan", 72, 1), new Among("er\u00EDan", 72, 1), new Among("ir\u00EDan", 72, 1), new Among("en", -1, 1), new Among("ien", 76, 1), new Among("arien", 77, 1), new Among("irien", 77, 1), new Among("aren", 76, 1), new Among("eren", 76, 1), new Among("iren", 76, 1), new Among("\u00E0ren", 76, 1), new Among("\u00EFren", 76, 1), new Among("asen", 76, 1), new Among("iesen", 76, 1), new Among("assen", 76, 1), new Among("essen", 76, 1), new Among("issen", 76, 1), new Among("\u00E9ssen", 76, 1), new Among("\u00EFssen", 76, 1), new Among("esquen", 76, 1), new Among("isquen", 76, 1), new Among("\u00EFsquen", 76, 1), new Among("aven", 76, 1), new Among("ixen", 76, 1), new Among("eixen", 96, 1), new Among("\u00EFxen", 76, 1), new Among("\u00EFen", 76, 1), new Among("in", -1, 1), new Among("inin", 100, 1), new Among("sin", 100, 1), new Among("isin", 102, 1), new Among("assin", 102, 1), new Among("essin", 102, 1), new Among("issin", 102, 1), new Among("\u00EFssin", 102, 1), new Among("esquin", 100, 1), new Among("eixin", 100, 1), new Among("aron", -1, 1), new Among("ieron", -1, 1), new Among("ar\u00E1n", -1, 1), new Among("er\u00E1n", -1, 1), new Among("ir\u00E1n", -1, 1), new Among("i\u00EFn", -1, 1), new Among("ado", -1, 1), new Among("ido", -1, 1), new Among("ando", -1, 2), new Among("iendo", -1, 1), new Among("io", -1, 1), new Among("ixo", -1, 1), new Among("eixo", 121, 1), new Among("\u00EFxo", -1, 1), new Among("itzo", -1, 1), new Among("ar", -1, 1), new Among("tzar", 125, 1), new Among("er", -1, 1), new Among("eixer", 127, 1), new Among("ir", -1, 1), new Among("ador", -1, 1), new Among("as", -1, 1), new Among("abas", 131, 1), new Among("adas", 131, 1), new Among("idas", 131, 1), new Among("aras", 131, 1), new Among("ieras", 131, 1), new Among("\u00EDas", 131, 1), new Among("ar\u00EDas", 137, 1), new Among("er\u00EDas", 137, 1), new Among("ir\u00EDas", 137, 1), new Among("ids", -1, 1), new Among("es", -1, 1), new Among("ades", 142, 1), new Among("ides", 142, 1), new Among("udes", 142, 1), new Among("\u00EFdes", 142, 1), new Among("atges", 142, 1), new Among("ies", 142, 1), new Among("aries", 148, 1), new Among("iries", 148, 1), new Among("ares", 142, 1), new Among("ires", 142, 1), new Among("adores", 142, 1), new Among("\u00EFres", 142, 1), new Among("ases", 142, 1), new Among("ieses", 142, 1), new Among("asses", 142, 1), new Among("esses", 142, 1), new Among("isses", 142, 1), new Among("\u00EFsses", 142, 1), new Among("ques", 142, 1), new Among("esques", 161, 1), new Among("\u00EFsques", 161, 1), new Among("aves", 142, 1), new Among("ixes", 142, 1), new Among("eixes", 165, 1), new Among("\u00EFxes", 142, 1), new Among("\u00EFes", 142, 1), new Among("abais", -1, 1), new Among("arais", -1, 1), new Among("ierais", -1, 1), new Among("\u00EDais", -1, 1), new Among("ar\u00EDais", 172, 1), new Among("er\u00EDais", 172, 1), new Among("ir\u00EDais", 172, 1), new Among("aseis", -1, 1), new Among("ieseis", -1, 1), new Among("asteis", -1, 1), new Among("isteis", -1, 1), new Among("inis", -1, 1), new Among("sis", -1, 1), new Among("isis", 181, 1), new Among("assis", 181, 1), new Among("essis", 181, 1), new Among("issis", 181, 1), new Among("\u00EFssis", 181, 1), new Among("esquis", -1, 1), new Among("eixis", -1, 1), new Among("itzis", -1, 1), new Among("\u00E1is", -1, 1), new Among("ar\u00E9is", -1, 1), new Among("er\u00E9is", -1, 1), new Among("ir\u00E9is", -1, 1), new Among("ams", -1, 1), new Among("ados", -1, 1), new Among("idos", -1, 1), new Among("amos", -1, 1), new Among("\u00E1bamos", 197, 1), new Among("\u00E1ramos", 197, 1), new Among("i\u00E9ramos", 197, 1), new Among("\u00EDamos", 197, 1), new Among("ar\u00EDamos", 201, 1), new Among("er\u00EDamos", 201, 1), new Among("ir\u00EDamos", 201, 1), new Among("aremos", -1, 1), new Among("eremos", -1, 1), new Among("iremos", -1, 1), new Among("\u00E1semos", -1, 1), new Among("i\u00E9semos", -1, 1), new Among("imos", -1, 1), new Among("adors", -1, 1), new Among("ass", -1, 1), new Among("erass", 212, 1), new Among("ess", -1, 1), new Among("ats", -1, 1), new Among("its", -1, 1), new Among("ents", -1, 1), new Among("\u00E0s", -1, 1), new Among("ar\u00E0s", 218, 1), new Among("ir\u00E0s", 218, 1), new Among("ar\u00E1s", -1, 1), new Among("er\u00E1s", -1, 1), new Among("ir\u00E1s", -1, 1), new Among("\u00E9s", -1, 1), new Among("ar\u00E9s", 224, 1), new Among("\u00EDs", -1, 1), new Among("i\u00EFs", -1, 1), new Among("at", -1, 1), new Among("it", -1, 1), new Among("ant", -1, 1), new Among("ent", -1, 1), new Among("int", -1, 1), new Among("ut", -1, 1), new Among("\u00EFt", -1, 1), new Among("au", -1, 1), new Among("erau", 235, 1), new Among("ieu", -1, 1), new Among("ineu", -1, 1), new Among("areu", -1, 1), new Among("ireu", -1, 1), new Among("\u00E0reu", -1, 1), new Among("\u00EDreu", -1, 1), new Among("asseu", -1, 1), new Among("esseu", -1, 1), new Among("eresseu", 244, 1), new Among("\u00E0sseu", -1, 1), new Among("\u00E9sseu", -1, 1), new Among("igueu", -1, 1), new Among("\u00EFgueu", -1, 1), new Among("\u00E0veu", -1, 1), new Among("\u00E1veu", -1, 1), new Among("itzeu", -1, 1), new Among("\u00ECeu", -1, 1), new Among("ir\u00ECeu", 253, 1), new Among("\u00EDeu", -1, 1), new Among("ar\u00EDeu", 255, 1), new Among("ir\u00EDeu", 255, 1), new Among("assiu", -1, 1), new Among("issiu", -1, 1), new Among("\u00E0ssiu", -1, 1), new Among("\u00E8ssiu", -1, 1), new Among("\u00E9ssiu", -1, 1), new Among("\u00EDssiu", -1, 1), new Among("\u00EFu", -1, 1), new Among("ix", -1, 1), new Among("eix", 265, 1), new Among("\u00EFx", -1, 1), new Among("itz", -1, 1), new Among("i\u00E0", -1, 1), new Among("ar\u00E0", -1, 1), new Among("ir\u00E0", -1, 1), new Among("itz\u00E0", -1, 1), new Among("ar\u00E1", -1, 1), new Among("er\u00E1", -1, 1), new Among("ir\u00E1", -1, 1), new Among("ir\u00E8", -1, 1), new Among("ar\u00E9", -1, 1), new Among("er\u00E9", -1, 1), new Among("ir\u00E9", -1, 1), new Among("\u00ED", -1, 1), new Among("i\u00EF", -1, 1), new Among("i\u00F3", -1, 1) }; private final static Among a_4[] = { new Among("a", -1, 1), new Among("e", -1, 1), new Among("i", -1, 1), new Among("\u00EFn", -1, 1), new Among("o", -1, 1), new Among("ir", -1, 1), new Among("s", -1, 1), new Among("is", 6, 1), new Among("os", 6, 1), new Among("\u00EFs", 6, 1), new Among("it", -1, 1), new Among("eu", -1, 1), new Among("iu", -1, 1), new Among("iqu", -1, 2), new Among("itz", -1, 1), new Among("\u00E0", -1, 1), new Among("\u00E1", -1, 1), new Among("\u00E9", -1, 1), new Among("\u00EC", -1, 1), new Among("\u00ED", -1, 1), new Among("\u00EF", -1, 1), new Among("\u00F3", -1, 1) }; private static final char g_v[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 129, 81, 6, 10}; private int I_p2; private int I_p1; private boolean r_mark_regions() { I_p1 = limit; I_p2 = limit; int v_1 = cursor; lab0: { golab1: while (true) { lab2: { if (!(in_grouping(g_v, 97, 252))) { break lab2; } break golab1; } if (cursor >= limit) { break lab0; } cursor++; } golab3: while (true) { lab4: { if (!(out_grouping(g_v, 97, 252))) { break lab4; } break golab3; } if (cursor >= limit) { break lab0; } cursor++; } I_p1 = cursor; golab5: while (true) { lab6: { if (!(in_grouping(g_v, 97, 252))) { break lab6; } break golab5; } if (cursor >= limit) { break lab0; } cursor++; } golab7: while (true) { lab8: { if (!(out_grouping(g_v, 97, 252))) { break lab8; } break golab7; } if (cursor >= limit) { break lab0; } cursor++; } I_p2 = cursor; } cursor = v_1; return true; } private boolean r_cleaning() { int among_var; while (true) { int v_1 = cursor; lab0: { bra = cursor; among_var = find_among(a_0); ket = cursor; switch (among_var) { case 1: slice_from("a"); break; case 2: slice_from("e"); break; case 3: slice_from("i"); break; case 4: slice_from("o"); break; case 5: slice_from("u"); break; case 6: slice_from("."); break; case 7: if (cursor >= limit) { break lab0; } cursor++; break; } continue; } cursor = v_1; break; } return true; } private boolean r_R1() { return I_p1 <= cursor; } private boolean r_R2() { return I_p2 <= cursor; } private boolean r_attached_pronoun() { ket = cursor; if (find_among_b(a_1) == 0) { return false; } bra = cursor; if (!r_R1()) { return false; } slice_del(); return true; } private boolean r_standard_suffix() { int among_var; ket = cursor; among_var = find_among_b(a_2); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: if (!r_R1()) { return false; } slice_del(); break; case 2: if (!r_R2()) { return false; } slice_del(); break; case 3: if (!r_R2()) { return false; } slice_from("log"); break; case 4: if (!r_R2()) { return false; } slice_from("ic"); break; case 5: if (!r_R1()) { return false; } slice_from("c"); break; } return true; } private boolean r_verb_suffix() { int among_var; ket = cursor; among_var = find_among_b(a_3); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: if (!r_R1()) { return false; } slice_del(); break; case 2: if (!r_R2()) { return false; } slice_del(); break; } return true; } private boolean r_residual_suffix() { int among_var; ket = cursor; among_var = find_among_b(a_4); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: if (!r_R1()) { return false; } slice_del(); break; case 2: if (!r_R1()) { return false; } slice_from("ic"); break; } return true; } public boolean stem() { r_mark_regions(); limit_backward = cursor; cursor = limit; int v_2 = limit - cursor; r_attached_pronoun(); cursor = limit - v_2; int v_3 = limit - cursor; lab0: { lab1: { int v_4 = limit - cursor; lab2: { if (!r_standard_suffix()) { break lab2; } break lab1; } cursor = limit - v_4; if (!r_verb_suffix()) { break lab0; } } } cursor = limit - v_3; int v_5 = limit - cursor; r_residual_suffix(); cursor = limit - v_5; cursor = limit_backward; int v_6 = cursor; r_cleaning(); cursor = v_6; return true; } @Override public boolean equals(Object o) { return o instanceof catalanStemmer; } @Override public int hashCode() { return catalanStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000160 14523004075 032660 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/danishStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/danishStemmer.ja0100644 0000000 0000000 00000017161 14523004075 034237 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class danishStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("hed", -1, 1), new Among("ethed", 0, 1), new Among("ered", -1, 1), new Among("e", -1, 1), new Among("erede", 3, 1), new Among("ende", 3, 1), new Among("erende", 5, 1), new Among("ene", 3, 1), new Among("erne", 3, 1), new Among("ere", 3, 1), new Among("en", -1, 1), new Among("heden", 10, 1), new Among("eren", 10, 1), new Among("er", -1, 1), new Among("heder", 13, 1), new Among("erer", 13, 1), new Among("s", -1, 2), new Among("heds", 16, 1), new Among("es", 16, 1), new Among("endes", 18, 1), new Among("erendes", 19, 1), new Among("enes", 18, 1), new Among("ernes", 18, 1), new Among("eres", 18, 1), new Among("ens", 16, 1), new Among("hedens", 24, 1), new Among("erens", 24, 1), new Among("ers", 16, 1), new Among("ets", 16, 1), new Among("erets", 28, 1), new Among("et", -1, 1), new Among("eret", 30, 1) }; private final static Among a_1[] = { new Among("gd", -1, -1), new Among("dt", -1, -1), new Among("gt", -1, -1), new Among("kt", -1, -1) }; private final static Among a_2[] = { new Among("ig", -1, 1), new Among("lig", 0, 1), new Among("elig", 1, 1), new Among("els", -1, 1), new Among("l\u00F8st", -1, 2) }; private static final char g_c[] = {119, 223, 119, 1}; private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128}; private static final char g_s_ending[] = {239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16}; private int I_x; private int I_p1; private java.lang.StringBuilder S_ch = new java.lang.StringBuilder(); private boolean r_mark_regions() { I_p1 = limit; int v_1 = cursor; { int c = cursor + 3; if (c > limit) { return false; } cursor = c; } I_x = cursor; cursor = v_1; golab0: while (true) { int v_2 = cursor; lab1: { if (!(in_grouping(g_v, 97, 248))) { break lab1; } cursor = v_2; break golab0; } cursor = v_2; if (cursor >= limit) { return false; } cursor++; } golab2: while (true) { lab3: { if (!(out_grouping(g_v, 97, 248))) { break lab3; } break golab2; } if (cursor >= limit) { return false; } cursor++; } I_p1 = cursor; lab4: { if (I_p1 >= I_x) { break lab4; } I_p1 = I_x; } return true; } private boolean r_main_suffix() { int among_var; if (cursor < I_p1) { return false; } int v_2 = limit_backward; limit_backward = I_p1; ket = cursor; among_var = find_among_b(a_0); if (among_var == 0) { limit_backward = v_2; return false; } bra = cursor; limit_backward = v_2; switch (among_var) { case 1: slice_del(); break; case 2: if (!(in_grouping_b(g_s_ending, 97, 229))) { return false; } slice_del(); break; } return true; } private boolean r_consonant_pair() { int v_1 = limit - cursor; if (cursor < I_p1) { return false; } int v_3 = limit_backward; limit_backward = I_p1; ket = cursor; if (find_among_b(a_1) == 0) { limit_backward = v_3; return false; } bra = cursor; limit_backward = v_3; cursor = limit - v_1; if (cursor <= limit_backward) { return false; } cursor--; bra = cursor; slice_del(); return true; } private boolean r_other_suffix() { int among_var; int v_1 = limit - cursor; lab0: { ket = cursor; if (!(eq_s_b("st"))) { break lab0; } bra = cursor; if (!(eq_s_b("ig"))) { break lab0; } slice_del(); } cursor = limit - v_1; if (cursor < I_p1) { return false; } int v_3 = limit_backward; limit_backward = I_p1; ket = cursor; among_var = find_among_b(a_2); if (among_var == 0) { limit_backward = v_3; return false; } bra = cursor; limit_backward = v_3; switch (among_var) { case 1: slice_del(); int v_4 = limit - cursor; r_consonant_pair(); cursor = limit - v_4; break; case 2: slice_from("l\u00F8s"); break; } return true; } private boolean r_undouble() { if (cursor < I_p1) { return false; } int v_2 = limit_backward; limit_backward = I_p1; ket = cursor; if (!(in_grouping_b(g_c, 98, 122))) { limit_backward = v_2; return false; } bra = cursor; slice_to(S_ch); limit_backward = v_2; if (!(eq_s_b(S_ch))) { return false; } slice_del(); return true; } public boolean stem() { int v_1 = cursor; r_mark_regions(); cursor = v_1; limit_backward = cursor; cursor = limit; int v_2 = limit - cursor; r_main_suffix(); cursor = limit - v_2; int v_3 = limit - cursor; r_consonant_pair(); cursor = limit - v_3; int v_4 = limit - cursor; r_other_suffix(); cursor = limit - v_4; int v_5 = limit - cursor; r_undouble(); cursor = limit - v_5; cursor = limit_backward; return true; } @Override public boolean equals(Object o) { return o instanceof danishStemmer; } @Override public int hashCode() { return danishStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000157 14523004075 032666 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/dutchStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/dutchStemmer.jav0100644 0000000 0000000 00000032001 14523004075 034254 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class dutchStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("", -1, 6), new Among("\u00E1", 0, 1), new Among("\u00E4", 0, 1), new Among("\u00E9", 0, 2), new Among("\u00EB", 0, 2), new Among("\u00ED", 0, 3), new Among("\u00EF", 0, 3), new Among("\u00F3", 0, 4), new Among("\u00F6", 0, 4), new Among("\u00FA", 0, 5), new Among("\u00FC", 0, 5) }; private final static Among a_1[] = { new Among("", -1, 3), new Among("I", 0, 2), new Among("Y", 0, 1) }; private final static Among a_2[] = { new Among("dd", -1, -1), new Among("kk", -1, -1), new Among("tt", -1, -1) }; private final static Among a_3[] = { new Among("ene", -1, 2), new Among("se", -1, 3), new Among("en", -1, 2), new Among("heden", 2, 1), new Among("s", -1, 3) }; private final static Among a_4[] = { new Among("end", -1, 1), new Among("ig", -1, 2), new Among("ing", -1, 1), new Among("lijk", -1, 3), new Among("baar", -1, 4), new Among("bar", -1, 5) }; private final static Among a_5[] = { new Among("aa", -1, -1), new Among("ee", -1, -1), new Among("oo", -1, -1), new Among("uu", -1, -1) }; private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128}; private static final char g_v_I[] = {1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128}; private static final char g_v_j[] = {17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128}; private int I_p2; private int I_p1; private boolean B_e_found; private boolean r_prelude() { int among_var; int v_1 = cursor; while (true) { int v_2 = cursor; lab0: { bra = cursor; among_var = find_among(a_0); ket = cursor; switch (among_var) { case 1: slice_from("a"); break; case 2: slice_from("e"); break; case 3: slice_from("i"); break; case 4: slice_from("o"); break; case 5: slice_from("u"); break; case 6: if (cursor >= limit) { break lab0; } cursor++; break; } continue; } cursor = v_2; break; } cursor = v_1; int v_3 = cursor; lab1: { bra = cursor; if (!(eq_s("y"))) { cursor = v_3; break lab1; } ket = cursor; slice_from("Y"); } while (true) { int v_4 = cursor; lab2: { golab3: while (true) { int v_5 = cursor; lab4: { if (!(in_grouping(g_v, 97, 232))) { break lab4; } bra = cursor; lab5: { int v_6 = cursor; lab6: { if (!(eq_s("i"))) { break lab6; } ket = cursor; if (!(in_grouping(g_v, 97, 232))) { break lab6; } slice_from("I"); break lab5; } cursor = v_6; if (!(eq_s("y"))) { break lab4; } ket = cursor; slice_from("Y"); } cursor = v_5; break golab3; } cursor = v_5; if (cursor >= limit) { break lab2; } cursor++; } continue; } cursor = v_4; break; } return true; } private boolean r_mark_regions() { I_p1 = limit; I_p2 = limit; golab0: while (true) { lab1: { if (!(in_grouping(g_v, 97, 232))) { break lab1; } break golab0; } if (cursor >= limit) { return false; } cursor++; } golab2: while (true) { lab3: { if (!(out_grouping(g_v, 97, 232))) { break lab3; } break golab2; } if (cursor >= limit) { return false; } cursor++; } I_p1 = cursor; lab4: { if (I_p1 >= 3) { break lab4; } I_p1 = 3; } golab5: while (true) { lab6: { if (!(in_grouping(g_v, 97, 232))) { break lab6; } break golab5; } if (cursor >= limit) { return false; } cursor++; } golab7: while (true) { lab8: { if (!(out_grouping(g_v, 97, 232))) { break lab8; } break golab7; } if (cursor >= limit) { return false; } cursor++; } I_p2 = cursor; return true; } private boolean r_postlude() { int among_var; while (true) { int v_1 = cursor; lab0: { bra = cursor; among_var = find_among(a_1); ket = cursor; switch (among_var) { case 1: slice_from("y"); break; case 2: slice_from("i"); break; case 3: if (cursor >= limit) { break lab0; } cursor++; break; } continue; } cursor = v_1; break; } return true; } private boolean r_R1() { return I_p1 <= cursor; } private boolean r_R2() { return I_p2 <= cursor; } private boolean r_undouble() { int v_1 = limit - cursor; if (find_among_b(a_2) == 0) { return false; } cursor = limit - v_1; ket = cursor; if (cursor <= limit_backward) { return false; } cursor--; bra = cursor; slice_del(); return true; } private boolean r_e_ending() { B_e_found = false; ket = cursor; if (!(eq_s_b("e"))) { return false; } bra = cursor; if (!r_R1()) { return false; } int v_1 = limit - cursor; if (!(out_grouping_b(g_v, 97, 232))) { return false; } cursor = limit - v_1; slice_del(); B_e_found = true; if (!r_undouble()) { return false; } return true; } private boolean r_en_ending() { if (!r_R1()) { return false; } int v_1 = limit - cursor; if (!(out_grouping_b(g_v, 97, 232))) { return false; } cursor = limit - v_1; { int v_2 = limit - cursor; lab0: { if (!(eq_s_b("gem"))) { break lab0; } return false; } cursor = limit - v_2; } slice_del(); if (!r_undouble()) { return false; } return true; } private boolean r_standard_suffix() { int among_var; int v_1 = limit - cursor; lab0: { ket = cursor; among_var = find_among_b(a_3); if (among_var == 0) { break lab0; } bra = cursor; switch (among_var) { case 1: if (!r_R1()) { break lab0; } slice_from("heid"); break; case 2: if (!r_en_ending()) { break lab0; } break; case 3: if (!r_R1()) { break lab0; } if (!(out_grouping_b(g_v_j, 97, 232))) { break lab0; } slice_del(); break; } } cursor = limit - v_1; int v_2 = limit - cursor; r_e_ending(); cursor = limit - v_2; int v_3 = limit - cursor; lab1: { ket = cursor; if (!(eq_s_b("heid"))) { break lab1; } bra = cursor; if (!r_R2()) { break lab1; } { int v_4 = limit - cursor; lab2: { if (!(eq_s_b("c"))) { break lab2; } break lab1; } cursor = limit - v_4; } slice_del(); ket = cursor; if (!(eq_s_b("en"))) { break lab1; } bra = cursor; if (!r_en_ending()) { break lab1; } } cursor = limit - v_3; int v_5 = limit - cursor; lab3: { ket = cursor; among_var = find_among_b(a_4); if (among_var == 0) { break lab3; } bra = cursor; switch (among_var) { case 1: if (!r_R2()) { break lab3; } slice_del(); lab4: { int v_6 = limit - cursor; lab5: { ket = cursor; if (!(eq_s_b("ig"))) { break lab5; } bra = cursor; if (!r_R2()) { break lab5; } { int v_7 = limit - cursor; lab6: { if (!(eq_s_b("e"))) { break lab6; } break lab5; } cursor = limit - v_7; } slice_del(); break lab4; } cursor = limit - v_6; if (!r_undouble()) { break lab3; } } break; case 2: if (!r_R2()) { break lab3; } { int v_8 = limit - cursor; lab7: { if (!(eq_s_b("e"))) { break lab7; } break lab3; } cursor = limit - v_8; } slice_del(); break; case 3: if (!r_R2()) { break lab3; } slice_del(); if (!r_e_ending()) { break lab3; } break; case 4: if (!r_R2()) { break lab3; } slice_del(); break; case 5: if (!r_R2()) { break lab3; } if (!(B_e_found)) { break lab3; } slice_del(); break; } } cursor = limit - v_5; int v_9 = limit - cursor; lab8: { if (!(out_grouping_b(g_v_I, 73, 232))) { break lab8; } int v_10 = limit - cursor; if (find_among_b(a_5) == 0) { break lab8; } if (!(out_grouping_b(g_v, 97, 232))) { break lab8; } cursor = limit - v_10; ket = cursor; if (cursor <= limit_backward) { break lab8; } cursor--; bra = cursor; slice_del(); } cursor = limit - v_9; return true; } public boolean stem() { int v_1 = cursor; r_prelude(); cursor = v_1; int v_2 = cursor; r_mark_regions(); cursor = v_2; limit_backward = cursor; cursor = limit; r_standard_suffix(); cursor = limit_backward; int v_4 = cursor; r_postlude(); cursor = v_4; return true; } @Override public boolean equals(Object o) { return o instanceof dutchStemmer; } @Override public int hashCode() { return dutchStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000161 14523004075 032661 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/englishStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/englishStemmer.j0100644 0000000 0000000 00000050530 14523004075 034256 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class englishStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("arsen", -1, -1), new Among("commun", -1, -1), new Among("gener", -1, -1) }; private final static Among a_1[] = { new Among("'", -1, 1), new Among("'s'", 0, 1), new Among("'s", -1, 1) }; private final static Among a_2[] = { new Among("ied", -1, 2), new Among("s", -1, 3), new Among("ies", 1, 2), new Among("sses", 1, 1), new Among("ss", 1, -1), new Among("us", 1, -1) }; private final static Among a_3[] = { new Among("", -1, 3), new Among("bb", 0, 2), new Among("dd", 0, 2), new Among("ff", 0, 2), new Among("gg", 0, 2), new Among("bl", 0, 1), new Among("mm", 0, 2), new Among("nn", 0, 2), new Among("pp", 0, 2), new Among("rr", 0, 2), new Among("at", 0, 1), new Among("tt", 0, 2), new Among("iz", 0, 1) }; private final static Among a_4[] = { new Among("ed", -1, 2), new Among("eed", 0, 1), new Among("ing", -1, 2), new Among("edly", -1, 2), new Among("eedly", 3, 1), new Among("ingly", -1, 2) }; private final static Among a_5[] = { new Among("anci", -1, 3), new Among("enci", -1, 2), new Among("ogi", -1, 13), new Among("li", -1, 15), new Among("bli", 3, 12), new Among("abli", 4, 4), new Among("alli", 3, 8), new Among("fulli", 3, 9), new Among("lessli", 3, 14), new Among("ousli", 3, 10), new Among("entli", 3, 5), new Among("aliti", -1, 8), new Among("biliti", -1, 12), new Among("iviti", -1, 11), new Among("tional", -1, 1), new Among("ational", 14, 7), new Among("alism", -1, 8), new Among("ation", -1, 7), new Among("ization", 17, 6), new Among("izer", -1, 6), new Among("ator", -1, 7), new Among("iveness", -1, 11), new Among("fulness", -1, 9), new Among("ousness", -1, 10) }; private final static Among a_6[] = { new Among("icate", -1, 4), new Among("ative", -1, 6), new Among("alize", -1, 3), new Among("iciti", -1, 4), new Among("ical", -1, 4), new Among("tional", -1, 1), new Among("ational", 5, 2), new Among("ful", -1, 5), new Among("ness", -1, 5) }; private final static Among a_7[] = { new Among("ic", -1, 1), new Among("ance", -1, 1), new Among("ence", -1, 1), new Among("able", -1, 1), new Among("ible", -1, 1), new Among("ate", -1, 1), new Among("ive", -1, 1), new Among("ize", -1, 1), new Among("iti", -1, 1), new Among("al", -1, 1), new Among("ism", -1, 1), new Among("ion", -1, 2), new Among("er", -1, 1), new Among("ous", -1, 1), new Among("ant", -1, 1), new Among("ent", -1, 1), new Among("ment", 15, 1), new Among("ement", 16, 1) }; private final static Among a_8[] = { new Among("e", -1, 1), new Among("l", -1, 2) }; private final static Among a_9[] = { new Among("succeed", -1, -1), new Among("proceed", -1, -1), new Among("exceed", -1, -1), new Among("canning", -1, -1), new Among("inning", -1, -1), new Among("earring", -1, -1), new Among("herring", -1, -1), new Among("outing", -1, -1) }; private final static Among a_10[] = { new Among("andes", -1, -1), new Among("atlas", -1, -1), new Among("bias", -1, -1), new Among("cosmos", -1, -1), new Among("dying", -1, 3), new Among("early", -1, 9), new Among("gently", -1, 7), new Among("howe", -1, -1), new Among("idly", -1, 6), new Among("lying", -1, 4), new Among("news", -1, -1), new Among("only", -1, 10), new Among("singly", -1, 11), new Among("skies", -1, 2), new Among("skis", -1, 1), new Among("sky", -1, -1), new Among("tying", -1, 5), new Among("ugly", -1, 8) }; private static final char g_aeo[] = {17, 64}; private static final char g_v[] = {17, 65, 16, 1}; private static final char g_v_WXY[] = {1, 17, 65, 208, 1}; private static final char g_valid_LI[] = {55, 141, 2}; private boolean B_Y_found; private int I_p2; private int I_p1; private boolean r_prelude() { B_Y_found = false; int v_1 = cursor; lab0: { bra = cursor; if (!(eq_s("'"))) { break lab0; } ket = cursor; slice_del(); } cursor = v_1; int v_2 = cursor; lab1: { bra = cursor; if (!(eq_s("y"))) { break lab1; } ket = cursor; slice_from("Y"); B_Y_found = true; } cursor = v_2; int v_3 = cursor; lab2: { while (true) { int v_4 = cursor; lab3: { golab4: while (true) { int v_5 = cursor; lab5: { if (!(in_grouping(g_v, 97, 121))) { break lab5; } bra = cursor; if (!(eq_s("y"))) { break lab5; } ket = cursor; cursor = v_5; break golab4; } cursor = v_5; if (cursor >= limit) { break lab3; } cursor++; } slice_from("Y"); B_Y_found = true; continue; } cursor = v_4; break; } } cursor = v_3; return true; } private boolean r_mark_regions() { I_p1 = limit; I_p2 = limit; int v_1 = cursor; lab0: { lab1: { int v_2 = cursor; lab2: { if (find_among(a_0) == 0) { break lab2; } break lab1; } cursor = v_2; golab3: while (true) { lab4: { if (!(in_grouping(g_v, 97, 121))) { break lab4; } break golab3; } if (cursor >= limit) { break lab0; } cursor++; } golab5: while (true) { lab6: { if (!(out_grouping(g_v, 97, 121))) { break lab6; } break golab5; } if (cursor >= limit) { break lab0; } cursor++; } } I_p1 = cursor; golab7: while (true) { lab8: { if (!(in_grouping(g_v, 97, 121))) { break lab8; } break golab7; } if (cursor >= limit) { break lab0; } cursor++; } golab9: while (true) { lab10: { if (!(out_grouping(g_v, 97, 121))) { break lab10; } break golab9; } if (cursor >= limit) { break lab0; } cursor++; } I_p2 = cursor; } cursor = v_1; return true; } private boolean r_shortv() { lab0: { int v_1 = limit - cursor; lab1: { if (!(out_grouping_b(g_v_WXY, 89, 121))) { break lab1; } if (!(in_grouping_b(g_v, 97, 121))) { break lab1; } if (!(out_grouping_b(g_v, 97, 121))) { break lab1; } break lab0; } cursor = limit - v_1; if (!(out_grouping_b(g_v, 97, 121))) { return false; } if (!(in_grouping_b(g_v, 97, 121))) { return false; } if (cursor > limit_backward) { return false; } } return true; } private boolean r_R1() { return I_p1 <= cursor; } private boolean r_R2() { return I_p2 <= cursor; } private boolean r_Step_1a() { int among_var; int v_1 = limit - cursor; lab0: { ket = cursor; if (find_among_b(a_1) == 0) { cursor = limit - v_1; break lab0; } bra = cursor; slice_del(); } ket = cursor; among_var = find_among_b(a_2); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: slice_from("ss"); break; case 2: lab1: { int v_2 = limit - cursor; lab2: { { int c = cursor - 2; if (c < limit_backward) { break lab2; } cursor = c; } slice_from("i"); break lab1; } cursor = limit - v_2; slice_from("ie"); } break; case 3: if (cursor <= limit_backward) { return false; } cursor--; golab3: while (true) { lab4: { if (!(in_grouping_b(g_v, 97, 121))) { break lab4; } break golab3; } if (cursor <= limit_backward) { return false; } cursor--; } slice_del(); break; } return true; } private boolean r_Step_1b() { int among_var; ket = cursor; among_var = find_among_b(a_4); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: if (!r_R1()) { return false; } slice_from("ee"); break; case 2: int v_1 = limit - cursor; golab0: while (true) { lab1: { if (!(in_grouping_b(g_v, 97, 121))) { break lab1; } break golab0; } if (cursor <= limit_backward) { return false; } cursor--; } cursor = limit - v_1; slice_del(); ket = cursor; bra = cursor; int v_3 = limit - cursor; among_var = find_among_b(a_3); switch (among_var) { case 1: slice_from("e"); return false; case 2: { int v_4 = limit - cursor; lab2: { if (!(in_grouping_b(g_aeo, 97, 111))) { break lab2; } if (cursor > limit_backward) { break lab2; } return false; } cursor = limit - v_4; } break; case 3: if (cursor != I_p1) { return false; } int v_5 = limit - cursor; if (!r_shortv()) { return false; } cursor = limit - v_5; slice_from("e"); return false; } cursor = limit - v_3; ket = cursor; if (cursor <= limit_backward) { return false; } cursor--; bra = cursor; slice_del(); break; } return true; } private boolean r_Step_1c() { ket = cursor; lab0: { int v_1 = limit - cursor; lab1: { if (!(eq_s_b("y"))) { break lab1; } break lab0; } cursor = limit - v_1; if (!(eq_s_b("Y"))) { return false; } } bra = cursor; if (!(out_grouping_b(g_v, 97, 121))) { return false; } lab2: { if (cursor > limit_backward) { break lab2; } return false; } slice_from("i"); return true; } private boolean r_Step_2() { int among_var; ket = cursor; among_var = find_among_b(a_5); if (among_var == 0) { return false; } bra = cursor; if (!r_R1()) { return false; } switch (among_var) { case 1: slice_from("tion"); break; case 2: slice_from("ence"); break; case 3: slice_from("ance"); break; case 4: slice_from("able"); break; case 5: slice_from("ent"); break; case 6: slice_from("ize"); break; case 7: slice_from("ate"); break; case 8: slice_from("al"); break; case 9: slice_from("ful"); break; case 10: slice_from("ous"); break; case 11: slice_from("ive"); break; case 12: slice_from("ble"); break; case 13: if (!(eq_s_b("l"))) { return false; } slice_from("og"); break; case 14: slice_from("less"); break; case 15: if (!(in_grouping_b(g_valid_LI, 99, 116))) { return false; } slice_del(); break; } return true; } private boolean r_Step_3() { int among_var; ket = cursor; among_var = find_among_b(a_6); if (among_var == 0) { return false; } bra = cursor; if (!r_R1()) { return false; } switch (among_var) { case 1: slice_from("tion"); break; case 2: slice_from("ate"); break; case 3: slice_from("al"); break; case 4: slice_from("ic"); break; case 5: slice_del(); break; case 6: if (!r_R2()) { return false; } slice_del(); break; } return true; } private boolean r_Step_4() { int among_var; ket = cursor; among_var = find_among_b(a_7); if (among_var == 0) { return false; } bra = cursor; if (!r_R2()) { return false; } switch (among_var) { case 1: slice_del(); break; case 2: lab0: { int v_1 = limit - cursor; lab1: { if (!(eq_s_b("s"))) { break lab1; } break lab0; } cursor = limit - v_1; if (!(eq_s_b("t"))) { return false; } } slice_del(); break; } return true; } private boolean r_Step_5() { int among_var; ket = cursor; among_var = find_among_b(a_8); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: lab0: { int v_1 = limit - cursor; lab1: { if (!r_R2()) { break lab1; } break lab0; } cursor = limit - v_1; if (!r_R1()) { return false; } { int v_2 = limit - cursor; lab2: { if (!r_shortv()) { break lab2; } return false; } cursor = limit - v_2; } } slice_del(); break; case 2: if (!r_R2()) { return false; } if (!(eq_s_b("l"))) { return false; } slice_del(); break; } return true; } private boolean r_exception2() { ket = cursor; if (find_among_b(a_9) == 0) { return false; } bra = cursor; if (cursor > limit_backward) { return false; } return true; } private boolean r_exception1() { int among_var; bra = cursor; among_var = find_among(a_10); if (among_var == 0) { return false; } ket = cursor; if (cursor < limit) { return false; } switch (among_var) { case 1: slice_from("ski"); break; case 2: slice_from("sky"); break; case 3: slice_from("die"); break; case 4: slice_from("lie"); break; case 5: slice_from("tie"); break; case 6: slice_from("idl"); break; case 7: slice_from("gentl"); break; case 8: slice_from("ugli"); break; case 9: slice_from("earli"); break; case 10: slice_from("onli"); break; case 11: slice_from("singl"); break; } return true; } private boolean r_postlude() { if (!(B_Y_found)) { return false; } while (true) { int v_1 = cursor; lab0: { golab1: while (true) { int v_2 = cursor; lab2: { bra = cursor; if (!(eq_s("Y"))) { break lab2; } ket = cursor; cursor = v_2; break golab1; } cursor = v_2; if (cursor >= limit) { break lab0; } cursor++; } slice_from("y"); continue; } cursor = v_1; break; } return true; } public boolean stem() { lab0: { int v_1 = cursor; lab1: { if (!r_exception1()) { break lab1; } break lab0; } cursor = v_1; lab2: { { int v_2 = cursor; lab3: { { int c = cursor + 3; if (c > limit) { break lab3; } cursor = c; } break lab2; } cursor = v_2; } break lab0; } cursor = v_1; r_prelude(); r_mark_regions(); limit_backward = cursor; cursor = limit; int v_5 = limit - cursor; r_Step_1a(); cursor = limit - v_5; lab4: { int v_6 = limit - cursor; lab5: { if (!r_exception2()) { break lab5; } break lab4; } cursor = limit - v_6; int v_7 = limit - cursor; r_Step_1b(); cursor = limit - v_7; int v_8 = limit - cursor; r_Step_1c(); cursor = limit - v_8; int v_9 = limit - cursor; r_Step_2(); cursor = limit - v_9; int v_10 = limit - cursor; r_Step_3(); cursor = limit - v_10; int v_11 = limit - cursor; r_Step_4(); cursor = limit - v_11; int v_12 = limit - cursor; r_Step_5(); cursor = limit - v_12; } cursor = limit_backward; int v_13 = cursor; r_postlude(); cursor = v_13; } return true; } @Override public boolean equals(Object o) { return o instanceof englishStemmer; } @Override public int hashCode() { return englishStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000161 14523004075 032661 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/finnishStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/finnishStemmer.j0100644 0000000 0000000 00000040370 14523004075 034264 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class finnishStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("pa", -1, 1), new Among("sti", -1, 2), new Among("kaan", -1, 1), new Among("han", -1, 1), new Among("kin", -1, 1), new Among("h\u00E4n", -1, 1), new Among("k\u00E4\u00E4n", -1, 1), new Among("ko", -1, 1), new Among("p\u00E4", -1, 1), new Among("k\u00F6", -1, 1) }; private final static Among a_1[] = { new Among("lla", -1, -1), new Among("na", -1, -1), new Among("ssa", -1, -1), new Among("ta", -1, -1), new Among("lta", 3, -1), new Among("sta", 3, -1) }; private final static Among a_2[] = { new Among("ll\u00E4", -1, -1), new Among("n\u00E4", -1, -1), new Among("ss\u00E4", -1, -1), new Among("t\u00E4", -1, -1), new Among("lt\u00E4", 3, -1), new Among("st\u00E4", 3, -1) }; private final static Among a_3[] = { new Among("lle", -1, -1), new Among("ine", -1, -1) }; private final static Among a_4[] = { new Among("nsa", -1, 3), new Among("mme", -1, 3), new Among("nne", -1, 3), new Among("ni", -1, 2), new Among("si", -1, 1), new Among("an", -1, 4), new Among("en", -1, 6), new Among("\u00E4n", -1, 5), new Among("ns\u00E4", -1, 3) }; private final static Among a_5[] = { new Among("aa", -1, -1), new Among("ee", -1, -1), new Among("ii", -1, -1), new Among("oo", -1, -1), new Among("uu", -1, -1), new Among("\u00E4\u00E4", -1, -1), new Among("\u00F6\u00F6", -1, -1) }; private final static Among a_6[] = { new Among("a", -1, 8), new Among("lla", 0, -1), new Among("na", 0, -1), new Among("ssa", 0, -1), new Among("ta", 0, -1), new Among("lta", 4, -1), new Among("sta", 4, -1), new Among("tta", 4, 2), new Among("lle", -1, -1), new Among("ine", -1, -1), new Among("ksi", -1, -1), new Among("n", -1, 7), new Among("han", 11, 1), new Among("den", 11, -1, "r_VI", finnishStemmer.class), new Among("seen", 11, -1, "r_LONG", finnishStemmer.class), new Among("hen", 11, 2), new Among("tten", 11, -1, "r_VI", finnishStemmer.class), new Among("hin", 11, 3), new Among("siin", 11, -1, "r_VI", finnishStemmer.class), new Among("hon", 11, 4), new Among("h\u00E4n", 11, 5), new Among("h\u00F6n", 11, 6), new Among("\u00E4", -1, 8), new Among("ll\u00E4", 22, -1), new Among("n\u00E4", 22, -1), new Among("ss\u00E4", 22, -1), new Among("t\u00E4", 22, -1), new Among("lt\u00E4", 26, -1), new Among("st\u00E4", 26, -1), new Among("tt\u00E4", 26, 2) }; private final static Among a_7[] = { new Among("eja", -1, -1), new Among("mma", -1, 1), new Among("imma", 1, -1), new Among("mpa", -1, 1), new Among("impa", 3, -1), new Among("mmi", -1, 1), new Among("immi", 5, -1), new Among("mpi", -1, 1), new Among("impi", 7, -1), new Among("ej\u00E4", -1, -1), new Among("mm\u00E4", -1, 1), new Among("imm\u00E4", 10, -1), new Among("mp\u00E4", -1, 1), new Among("imp\u00E4", 12, -1) }; private final static Among a_8[] = { new Among("i", -1, -1), new Among("j", -1, -1) }; private final static Among a_9[] = { new Among("mma", -1, 1), new Among("imma", 0, -1) }; private static final char g_AEI[] = {17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8}; private static final char g_C[] = {119, 223, 119, 1}; private static final char g_V1[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32}; private static final char g_V2[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32}; private static final char g_particle_end[] = {17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32}; private boolean B_ending_removed; private java.lang.StringBuilder S_x = new java.lang.StringBuilder(); private int I_p2; private int I_p1; private boolean r_mark_regions() { I_p1 = limit; I_p2 = limit; golab0: while (true) { int v_1 = cursor; lab1: { if (!(in_grouping(g_V1, 97, 246))) { break lab1; } cursor = v_1; break golab0; } cursor = v_1; if (cursor >= limit) { return false; } cursor++; } golab2: while (true) { lab3: { if (!(out_grouping(g_V1, 97, 246))) { break lab3; } break golab2; } if (cursor >= limit) { return false; } cursor++; } I_p1 = cursor; golab4: while (true) { int v_3 = cursor; lab5: { if (!(in_grouping(g_V1, 97, 246))) { break lab5; } cursor = v_3; break golab4; } cursor = v_3; if (cursor >= limit) { return false; } cursor++; } golab6: while (true) { lab7: { if (!(out_grouping(g_V1, 97, 246))) { break lab7; } break golab6; } if (cursor >= limit) { return false; } cursor++; } I_p2 = cursor; return true; } private boolean r_R2() { return I_p2 <= cursor; } private boolean r_particle_etc() { int among_var; if (cursor < I_p1) { return false; } int v_2 = limit_backward; limit_backward = I_p1; ket = cursor; among_var = find_among_b(a_0); if (among_var == 0) { limit_backward = v_2; return false; } bra = cursor; limit_backward = v_2; switch (among_var) { case 1: if (!(in_grouping_b(g_particle_end, 97, 246))) { return false; } break; case 2: if (!r_R2()) { return false; } break; } slice_del(); return true; } private boolean r_possessive() { int among_var; if (cursor < I_p1) { return false; } int v_2 = limit_backward; limit_backward = I_p1; ket = cursor; among_var = find_among_b(a_4); if (among_var == 0) { limit_backward = v_2; return false; } bra = cursor; limit_backward = v_2; switch (among_var) { case 1: { int v_3 = limit - cursor; lab0: { if (!(eq_s_b("k"))) { break lab0; } return false; } cursor = limit - v_3; } slice_del(); break; case 2: slice_del(); ket = cursor; if (!(eq_s_b("kse"))) { return false; } bra = cursor; slice_from("ksi"); break; case 3: slice_del(); break; case 4: if (find_among_b(a_1) == 0) { return false; } slice_del(); break; case 5: if (find_among_b(a_2) == 0) { return false; } slice_del(); break; case 6: if (find_among_b(a_3) == 0) { return false; } slice_del(); break; } return true; } public boolean r_LONG() { if (find_among_b(a_5) == 0) { return false; } return true; } public boolean r_VI() { if (!(eq_s_b("i"))) { return false; } if (!(in_grouping_b(g_V2, 97, 246))) { return false; } return true; } private boolean r_case_ending() { int among_var; if (cursor < I_p1) { return false; } int v_2 = limit_backward; limit_backward = I_p1; ket = cursor; among_var = find_among_b(a_6); if (among_var == 0) { limit_backward = v_2; return false; } bra = cursor; limit_backward = v_2; switch (among_var) { case 1: if (!(eq_s_b("a"))) { return false; } break; case 2: if (!(eq_s_b("e"))) { return false; } break; case 3: if (!(eq_s_b("i"))) { return false; } break; case 4: if (!(eq_s_b("o"))) { return false; } break; case 5: if (!(eq_s_b("\u00E4"))) { return false; } break; case 6: if (!(eq_s_b("\u00F6"))) { return false; } break; case 7: int v_3 = limit - cursor; lab0: { int v_4 = limit - cursor; lab1: { int v_5 = limit - cursor; lab2: { if (!r_LONG()) { break lab2; } break lab1; } cursor = limit - v_5; if (!(eq_s_b("ie"))) { cursor = limit - v_3; break lab0; } } cursor = limit - v_4; if (cursor <= limit_backward) { cursor = limit - v_3; break lab0; } cursor--; bra = cursor; } break; case 8: if (!(in_grouping_b(g_V1, 97, 246))) { return false; } if (!(in_grouping_b(g_C, 98, 122))) { return false; } break; } slice_del(); B_ending_removed = true; return true; } private boolean r_other_endings() { int among_var; if (cursor < I_p2) { return false; } int v_2 = limit_backward; limit_backward = I_p2; ket = cursor; among_var = find_among_b(a_7); if (among_var == 0) { limit_backward = v_2; return false; } bra = cursor; limit_backward = v_2; switch (among_var) { case 1: { int v_3 = limit - cursor; lab0: { if (!(eq_s_b("po"))) { break lab0; } return false; } cursor = limit - v_3; } break; } slice_del(); return true; } private boolean r_i_plural() { if (cursor < I_p1) { return false; } int v_2 = limit_backward; limit_backward = I_p1; ket = cursor; if (find_among_b(a_8) == 0) { limit_backward = v_2; return false; } bra = cursor; limit_backward = v_2; slice_del(); return true; } private boolean r_t_plural() { int among_var; if (cursor < I_p1) { return false; } int v_2 = limit_backward; limit_backward = I_p1; ket = cursor; if (!(eq_s_b("t"))) { limit_backward = v_2; return false; } bra = cursor; int v_3 = limit - cursor; if (!(in_grouping_b(g_V1, 97, 246))) { limit_backward = v_2; return false; } cursor = limit - v_3; slice_del(); limit_backward = v_2; if (cursor < I_p2) { return false; } int v_5 = limit_backward; limit_backward = I_p2; ket = cursor; among_var = find_among_b(a_9); if (among_var == 0) { limit_backward = v_5; return false; } bra = cursor; limit_backward = v_5; switch (among_var) { case 1: { int v_6 = limit - cursor; lab0: { if (!(eq_s_b("po"))) { break lab0; } return false; } cursor = limit - v_6; } break; } slice_del(); return true; } private boolean r_tidy() { if (cursor < I_p1) { return false; } int v_2 = limit_backward; limit_backward = I_p1; int v_3 = limit - cursor; lab0: { int v_4 = limit - cursor; if (!r_LONG()) { break lab0; } cursor = limit - v_4; ket = cursor; if (cursor <= limit_backward) { break lab0; } cursor--; bra = cursor; slice_del(); } cursor = limit - v_3; int v_5 = limit - cursor; lab1: { ket = cursor; if (!(in_grouping_b(g_AEI, 97, 228))) { break lab1; } bra = cursor; if (!(in_grouping_b(g_C, 98, 122))) { break lab1; } slice_del(); } cursor = limit - v_5; int v_6 = limit - cursor; lab2: { ket = cursor; if (!(eq_s_b("j"))) { break lab2; } bra = cursor; lab3: { int v_7 = limit - cursor; lab4: { if (!(eq_s_b("o"))) { break lab4; } break lab3; } cursor = limit - v_7; if (!(eq_s_b("u"))) { break lab2; } } slice_del(); } cursor = limit - v_6; int v_8 = limit - cursor; lab5: { ket = cursor; if (!(eq_s_b("o"))) { break lab5; } bra = cursor; if (!(eq_s_b("j"))) { break lab5; } slice_del(); } cursor = limit - v_8; limit_backward = v_2; golab6: while (true) { int v_9 = limit - cursor; lab7: { if (!(out_grouping_b(g_V1, 97, 246))) { break lab7; } cursor = limit - v_9; break golab6; } cursor = limit - v_9; if (cursor <= limit_backward) { return false; } cursor--; } ket = cursor; if (!(in_grouping_b(g_C, 98, 122))) { return false; } bra = cursor; slice_to(S_x); if (!(eq_s_b(S_x))) { return false; } slice_del(); return true; } public boolean stem() { int v_1 = cursor; r_mark_regions(); cursor = v_1; B_ending_removed = false; limit_backward = cursor; cursor = limit; int v_2 = limit - cursor; r_particle_etc(); cursor = limit - v_2; int v_3 = limit - cursor; r_possessive(); cursor = limit - v_3; int v_4 = limit - cursor; r_case_ending(); cursor = limit - v_4; int v_5 = limit - cursor; r_other_endings(); cursor = limit - v_5; lab0: { lab1: { if (!(B_ending_removed)) { break lab1; } int v_7 = limit - cursor; r_i_plural(); cursor = limit - v_7; break lab0; } int v_8 = limit - cursor; r_t_plural(); cursor = limit - v_8; } int v_9 = limit - cursor; r_tidy(); cursor = limit - v_9; cursor = limit_backward; return true; } @Override public boolean equals(Object o) { return o instanceof finnishStemmer; } @Override public int hashCode() { return finnishStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000160 14523004075 032660 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/frenchStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/frenchStemmer.ja0100644 0000000 0000000 00000064241 14523004075 034237 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class frenchStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("col", -1, -1), new Among("par", -1, -1), new Among("tap", -1, -1) }; private final static Among a_1[] = { new Among("", -1, 7), new Among("H", 0, 6), new Among("He", 1, 4), new Among("Hi", 1, 5), new Among("I", 0, 1), new Among("U", 0, 2), new Among("Y", 0, 3) }; private final static Among a_2[] = { new Among("iqU", -1, 3), new Among("abl", -1, 3), new Among("I\u00E8r", -1, 4), new Among("i\u00E8r", -1, 4), new Among("eus", -1, 2), new Among("iv", -1, 1) }; private final static Among a_3[] = { new Among("ic", -1, 2), new Among("abil", -1, 1), new Among("iv", -1, 3) }; private final static Among a_4[] = { new Among("iqUe", -1, 1), new Among("atrice", -1, 2), new Among("ance", -1, 1), new Among("ence", -1, 5), new Among("logie", -1, 3), new Among("able", -1, 1), new Among("isme", -1, 1), new Among("euse", -1, 11), new Among("iste", -1, 1), new Among("ive", -1, 8), new Among("if", -1, 8), new Among("usion", -1, 4), new Among("ation", -1, 2), new Among("ution", -1, 4), new Among("ateur", -1, 2), new Among("iqUes", -1, 1), new Among("atrices", -1, 2), new Among("ances", -1, 1), new Among("ences", -1, 5), new Among("logies", -1, 3), new Among("ables", -1, 1), new Among("ismes", -1, 1), new Among("euses", -1, 11), new Among("istes", -1, 1), new Among("ives", -1, 8), new Among("ifs", -1, 8), new Among("usions", -1, 4), new Among("ations", -1, 2), new Among("utions", -1, 4), new Among("ateurs", -1, 2), new Among("ments", -1, 15), new Among("ements", 30, 6), new Among("issements", 31, 12), new Among("it\u00E9s", -1, 7), new Among("ment", -1, 15), new Among("ement", 34, 6), new Among("issement", 35, 12), new Among("amment", 34, 13), new Among("emment", 34, 14), new Among("aux", -1, 10), new Among("eaux", 39, 9), new Among("eux", -1, 1), new Among("it\u00E9", -1, 7) }; private final static Among a_5[] = { new Among("ira", -1, 1), new Among("ie", -1, 1), new Among("isse", -1, 1), new Among("issante", -1, 1), new Among("i", -1, 1), new Among("irai", 4, 1), new Among("ir", -1, 1), new Among("iras", -1, 1), new Among("ies", -1, 1), new Among("\u00EEmes", -1, 1), new Among("isses", -1, 1), new Among("issantes", -1, 1), new Among("\u00EEtes", -1, 1), new Among("is", -1, 1), new Among("irais", 13, 1), new Among("issais", 13, 1), new Among("irions", -1, 1), new Among("issions", -1, 1), new Among("irons", -1, 1), new Among("issons", -1, 1), new Among("issants", -1, 1), new Among("it", -1, 1), new Among("irait", 21, 1), new Among("issait", 21, 1), new Among("issant", -1, 1), new Among("iraIent", -1, 1), new Among("issaIent", -1, 1), new Among("irent", -1, 1), new Among("issent", -1, 1), new Among("iront", -1, 1), new Among("\u00EEt", -1, 1), new Among("iriez", -1, 1), new Among("issiez", -1, 1), new Among("irez", -1, 1), new Among("issez", -1, 1) }; private final static Among a_6[] = { new Among("a", -1, 3), new Among("era", 0, 2), new Among("asse", -1, 3), new Among("ante", -1, 3), new Among("\u00E9e", -1, 2), new Among("ai", -1, 3), new Among("erai", 5, 2), new Among("er", -1, 2), new Among("as", -1, 3), new Among("eras", 8, 2), new Among("\u00E2mes", -1, 3), new Among("asses", -1, 3), new Among("antes", -1, 3), new Among("\u00E2tes", -1, 3), new Among("\u00E9es", -1, 2), new Among("ais", -1, 3), new Among("erais", 15, 2), new Among("ions", -1, 1), new Among("erions", 17, 2), new Among("assions", 17, 3), new Among("erons", -1, 2), new Among("ants", -1, 3), new Among("\u00E9s", -1, 2), new Among("ait", -1, 3), new Among("erait", 23, 2), new Among("ant", -1, 3), new Among("aIent", -1, 3), new Among("eraIent", 26, 2), new Among("\u00E8rent", -1, 2), new Among("assent", -1, 3), new Among("eront", -1, 2), new Among("\u00E2t", -1, 3), new Among("ez", -1, 2), new Among("iez", 32, 2), new Among("eriez", 33, 2), new Among("assiez", 33, 3), new Among("erez", 32, 2), new Among("\u00E9", -1, 2) }; private final static Among a_7[] = { new Among("e", -1, 3), new Among("I\u00E8re", 0, 2), new Among("i\u00E8re", 0, 2), new Among("ion", -1, 1), new Among("Ier", -1, 2), new Among("ier", -1, 2) }; private final static Among a_8[] = { new Among("ell", -1, -1), new Among("eill", -1, -1), new Among("enn", -1, -1), new Among("onn", -1, -1), new Among("ett", -1, -1) }; private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 130, 103, 8, 5}; private static final char g_keep_with_s[] = {1, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128}; private int I_p2; private int I_p1; private int I_pV; private boolean r_prelude() { while (true) { int v_1 = cursor; lab0: { golab1: while (true) { int v_2 = cursor; lab2: { lab3: { int v_3 = cursor; lab4: { if (!(in_grouping(g_v, 97, 251))) { break lab4; } bra = cursor; lab5: { int v_4 = cursor; lab6: { if (!(eq_s("u"))) { break lab6; } ket = cursor; if (!(in_grouping(g_v, 97, 251))) { break lab6; } slice_from("U"); break lab5; } cursor = v_4; lab7: { if (!(eq_s("i"))) { break lab7; } ket = cursor; if (!(in_grouping(g_v, 97, 251))) { break lab7; } slice_from("I"); break lab5; } cursor = v_4; if (!(eq_s("y"))) { break lab4; } ket = cursor; slice_from("Y"); } break lab3; } cursor = v_3; lab8: { bra = cursor; if (!(eq_s("\u00EB"))) { break lab8; } ket = cursor; slice_from("He"); break lab3; } cursor = v_3; lab9: { bra = cursor; if (!(eq_s("\u00EF"))) { break lab9; } ket = cursor; slice_from("Hi"); break lab3; } cursor = v_3; lab10: { bra = cursor; if (!(eq_s("y"))) { break lab10; } ket = cursor; if (!(in_grouping(g_v, 97, 251))) { break lab10; } slice_from("Y"); break lab3; } cursor = v_3; if (!(eq_s("q"))) { break lab2; } bra = cursor; if (!(eq_s("u"))) { break lab2; } ket = cursor; slice_from("U"); } cursor = v_2; break golab1; } cursor = v_2; if (cursor >= limit) { break lab0; } cursor++; } continue; } cursor = v_1; break; } return true; } private boolean r_mark_regions() { I_pV = limit; I_p1 = limit; I_p2 = limit; int v_1 = cursor; lab0: { lab1: { int v_2 = cursor; lab2: { if (!(in_grouping(g_v, 97, 251))) { break lab2; } if (!(in_grouping(g_v, 97, 251))) { break lab2; } if (cursor >= limit) { break lab2; } cursor++; break lab1; } cursor = v_2; lab3: { if (find_among(a_0) == 0) { break lab3; } break lab1; } cursor = v_2; if (cursor >= limit) { break lab0; } cursor++; golab4: while (true) { lab5: { if (!(in_grouping(g_v, 97, 251))) { break lab5; } break golab4; } if (cursor >= limit) { break lab0; } cursor++; } } I_pV = cursor; } cursor = v_1; int v_4 = cursor; lab6: { golab7: while (true) { lab8: { if (!(in_grouping(g_v, 97, 251))) { break lab8; } break golab7; } if (cursor >= limit) { break lab6; } cursor++; } golab9: while (true) { lab10: { if (!(out_grouping(g_v, 97, 251))) { break lab10; } break golab9; } if (cursor >= limit) { break lab6; } cursor++; } I_p1 = cursor; golab11: while (true) { lab12: { if (!(in_grouping(g_v, 97, 251))) { break lab12; } break golab11; } if (cursor >= limit) { break lab6; } cursor++; } golab13: while (true) { lab14: { if (!(out_grouping(g_v, 97, 251))) { break lab14; } break golab13; } if (cursor >= limit) { break lab6; } cursor++; } I_p2 = cursor; } cursor = v_4; return true; } private boolean r_postlude() { int among_var; while (true) { int v_1 = cursor; lab0: { bra = cursor; among_var = find_among(a_1); ket = cursor; switch (among_var) { case 1: slice_from("i"); break; case 2: slice_from("u"); break; case 3: slice_from("y"); break; case 4: slice_from("\u00EB"); break; case 5: slice_from("\u00EF"); break; case 6: slice_del(); break; case 7: if (cursor >= limit) { break lab0; } cursor++; break; } continue; } cursor = v_1; break; } return true; } private boolean r_RV() { return I_pV <= cursor; } private boolean r_R1() { return I_p1 <= cursor; } private boolean r_R2() { return I_p2 <= cursor; } private boolean r_standard_suffix() { int among_var; ket = cursor; among_var = find_among_b(a_4); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: if (!r_R2()) { return false; } slice_del(); break; case 2: if (!r_R2()) { return false; } slice_del(); int v_1 = limit - cursor; lab0: { ket = cursor; if (!(eq_s_b("ic"))) { cursor = limit - v_1; break lab0; } bra = cursor; lab1: { int v_2 = limit - cursor; lab2: { if (!r_R2()) { break lab2; } slice_del(); break lab1; } cursor = limit - v_2; slice_from("iqU"); } } break; case 3: if (!r_R2()) { return false; } slice_from("log"); break; case 4: if (!r_R2()) { return false; } slice_from("u"); break; case 5: if (!r_R2()) { return false; } slice_from("ent"); break; case 6: if (!r_RV()) { return false; } slice_del(); int v_3 = limit - cursor; lab3: { ket = cursor; among_var = find_among_b(a_2); if (among_var == 0) { cursor = limit - v_3; break lab3; } bra = cursor; switch (among_var) { case 1: if (!r_R2()) { cursor = limit - v_3; break lab3; } slice_del(); ket = cursor; if (!(eq_s_b("at"))) { cursor = limit - v_3; break lab3; } bra = cursor; if (!r_R2()) { cursor = limit - v_3; break lab3; } slice_del(); break; case 2: lab4: { int v_4 = limit - cursor; lab5: { if (!r_R2()) { break lab5; } slice_del(); break lab4; } cursor = limit - v_4; if (!r_R1()) { cursor = limit - v_3; break lab3; } slice_from("eux"); } break; case 3: if (!r_R2()) { cursor = limit - v_3; break lab3; } slice_del(); break; case 4: if (!r_RV()) { cursor = limit - v_3; break lab3; } slice_from("i"); break; } } break; case 7: if (!r_R2()) { return false; } slice_del(); int v_5 = limit - cursor; lab6: { ket = cursor; among_var = find_among_b(a_3); if (among_var == 0) { cursor = limit - v_5; break lab6; } bra = cursor; switch (among_var) { case 1: lab7: { int v_6 = limit - cursor; lab8: { if (!r_R2()) { break lab8; } slice_del(); break lab7; } cursor = limit - v_6; slice_from("abl"); } break; case 2: lab9: { int v_7 = limit - cursor; lab10: { if (!r_R2()) { break lab10; } slice_del(); break lab9; } cursor = limit - v_7; slice_from("iqU"); } break; case 3: if (!r_R2()) { cursor = limit - v_5; break lab6; } slice_del(); break; } } break; case 8: if (!r_R2()) { return false; } slice_del(); int v_8 = limit - cursor; lab11: { ket = cursor; if (!(eq_s_b("at"))) { cursor = limit - v_8; break lab11; } bra = cursor; if (!r_R2()) { cursor = limit - v_8; break lab11; } slice_del(); ket = cursor; if (!(eq_s_b("ic"))) { cursor = limit - v_8; break lab11; } bra = cursor; lab12: { int v_9 = limit - cursor; lab13: { if (!r_R2()) { break lab13; } slice_del(); break lab12; } cursor = limit - v_9; slice_from("iqU"); } } break; case 9: slice_from("eau"); break; case 10: if (!r_R1()) { return false; } slice_from("al"); break; case 11: lab14: { int v_10 = limit - cursor; lab15: { if (!r_R2()) { break lab15; } slice_del(); break lab14; } cursor = limit - v_10; if (!r_R1()) { return false; } slice_from("eux"); } break; case 12: if (!r_R1()) { return false; } if (!(out_grouping_b(g_v, 97, 251))) { return false; } slice_del(); break; case 13: if (!r_RV()) { return false; } slice_from("ant"); return false; case 14: if (!r_RV()) { return false; } slice_from("ent"); return false; case 15: int v_11 = limit - cursor; if (!(in_grouping_b(g_v, 97, 251))) { return false; } if (!r_RV()) { return false; } cursor = limit - v_11; slice_del(); return false; } return true; } private boolean r_i_verb_suffix() { if (cursor < I_pV) { return false; } int v_2 = limit_backward; limit_backward = I_pV; ket = cursor; if (find_among_b(a_5) == 0) { limit_backward = v_2; return false; } bra = cursor; { int v_3 = limit - cursor; lab0: { if (!(eq_s_b("H"))) { break lab0; } limit_backward = v_2; return false; } cursor = limit - v_3; } if (!(out_grouping_b(g_v, 97, 251))) { limit_backward = v_2; return false; } slice_del(); limit_backward = v_2; return true; } private boolean r_verb_suffix() { int among_var; if (cursor < I_pV) { return false; } int v_2 = limit_backward; limit_backward = I_pV; ket = cursor; among_var = find_among_b(a_6); if (among_var == 0) { limit_backward = v_2; return false; } bra = cursor; switch (among_var) { case 1: if (!r_R2()) { limit_backward = v_2; return false; } slice_del(); break; case 2: slice_del(); break; case 3: slice_del(); int v_3 = limit - cursor; lab0: { ket = cursor; if (!(eq_s_b("e"))) { cursor = limit - v_3; break lab0; } bra = cursor; slice_del(); } break; } limit_backward = v_2; return true; } private boolean r_residual_suffix() { int among_var; int v_1 = limit - cursor; lab0: { ket = cursor; if (!(eq_s_b("s"))) { cursor = limit - v_1; break lab0; } bra = cursor; int v_2 = limit - cursor; lab1: { int v_3 = limit - cursor; lab2: { if (!(eq_s_b("Hi"))) { break lab2; } break lab1; } cursor = limit - v_3; if (!(out_grouping_b(g_keep_with_s, 97, 232))) { cursor = limit - v_1; break lab0; } } cursor = limit - v_2; slice_del(); } if (cursor < I_pV) { return false; } int v_5 = limit_backward; limit_backward = I_pV; ket = cursor; among_var = find_among_b(a_7); if (among_var == 0) { limit_backward = v_5; return false; } bra = cursor; switch (among_var) { case 1: if (!r_R2()) { limit_backward = v_5; return false; } lab3: { int v_6 = limit - cursor; lab4: { if (!(eq_s_b("s"))) { break lab4; } break lab3; } cursor = limit - v_6; if (!(eq_s_b("t"))) { limit_backward = v_5; return false; } } slice_del(); break; case 2: slice_from("i"); break; case 3: slice_del(); break; } limit_backward = v_5; return true; } private boolean r_un_double() { int v_1 = limit - cursor; if (find_among_b(a_8) == 0) { return false; } cursor = limit - v_1; ket = cursor; if (cursor <= limit_backward) { return false; } cursor--; bra = cursor; slice_del(); return true; } private boolean r_un_accent() { { int v_1 = 1; while (true) { lab0: { if (!(out_grouping_b(g_v, 97, 251))) { break lab0; } v_1--; continue; } break; } if (v_1 > 0) { return false; } } ket = cursor; lab1: { int v_3 = limit - cursor; lab2: { if (!(eq_s_b("\u00E9"))) { break lab2; } break lab1; } cursor = limit - v_3; if (!(eq_s_b("\u00E8"))) { return false; } } bra = cursor; slice_from("e"); return true; } public boolean stem() { int v_1 = cursor; r_prelude(); cursor = v_1; r_mark_regions(); limit_backward = cursor; cursor = limit; int v_3 = limit - cursor; lab0: { lab1: { int v_4 = limit - cursor; lab2: { int v_5 = limit - cursor; lab3: { int v_6 = limit - cursor; lab4: { if (!r_standard_suffix()) { break lab4; } break lab3; } cursor = limit - v_6; lab5: { if (!r_i_verb_suffix()) { break lab5; } break lab3; } cursor = limit - v_6; if (!r_verb_suffix()) { break lab2; } } cursor = limit - v_5; int v_7 = limit - cursor; lab6: { ket = cursor; lab7: { int v_8 = limit - cursor; lab8: { if (!(eq_s_b("Y"))) { break lab8; } bra = cursor; slice_from("i"); break lab7; } cursor = limit - v_8; if (!(eq_s_b("\u00E7"))) { cursor = limit - v_7; break lab6; } bra = cursor; slice_from("c"); } } break lab1; } cursor = limit - v_4; if (!r_residual_suffix()) { break lab0; } } } cursor = limit - v_3; int v_9 = limit - cursor; r_un_double(); cursor = limit - v_9; int v_10 = limit - cursor; r_un_accent(); cursor = limit - v_10; cursor = limit_backward; int v_11 = cursor; r_postlude(); cursor = v_11; return true; } @Override public boolean equals(Object o) { return o instanceof frenchStemmer; } @Override public int hashCode() { return frenchStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000160 14523004075 032660 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/germanStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/germanStemmer.ja0100644 0000000 0000000 00000030576 14523004075 034247 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class germanStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("", -1, 5), new Among("ae", 0, 2), new Among("oe", 0, 3), new Among("qu", 0, -1), new Among("ue", 0, 4), new Among("\u00DF", 0, 1) }; private final static Among a_1[] = { new Among("", -1, 5), new Among("U", 0, 2), new Among("Y", 0, 1), new Among("\u00E4", 0, 3), new Among("\u00F6", 0, 4), new Among("\u00FC", 0, 2) }; private final static Among a_2[] = { new Among("e", -1, 3), new Among("em", -1, 1), new Among("en", -1, 3), new Among("ern", -1, 2), new Among("er", -1, 2), new Among("s", -1, 4), new Among("es", 5, 3) }; private final static Among a_3[] = { new Among("en", -1, 1), new Among("er", -1, 1), new Among("st", -1, 2), new Among("est", 2, 1) }; private final static Among a_4[] = { new Among("ig", -1, 1), new Among("lich", -1, 1) }; private final static Among a_5[] = { new Among("end", -1, 1), new Among("ig", -1, 2), new Among("ung", -1, 1), new Among("lich", -1, 3), new Among("isch", -1, 2), new Among("ik", -1, 2), new Among("heit", -1, 3), new Among("keit", -1, 4) }; private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8}; private static final char g_s_ending[] = {117, 30, 5}; private static final char g_st_ending[] = {117, 30, 4}; private int I_x; private int I_p2; private int I_p1; private boolean r_prelude() { int among_var; int v_1 = cursor; while (true) { int v_2 = cursor; lab0: { golab1: while (true) { int v_3 = cursor; lab2: { if (!(in_grouping(g_v, 97, 252))) { break lab2; } bra = cursor; lab3: { int v_4 = cursor; lab4: { if (!(eq_s("u"))) { break lab4; } ket = cursor; if (!(in_grouping(g_v, 97, 252))) { break lab4; } slice_from("U"); break lab3; } cursor = v_4; if (!(eq_s("y"))) { break lab2; } ket = cursor; if (!(in_grouping(g_v, 97, 252))) { break lab2; } slice_from("Y"); } cursor = v_3; break golab1; } cursor = v_3; if (cursor >= limit) { break lab0; } cursor++; } continue; } cursor = v_2; break; } cursor = v_1; while (true) { int v_5 = cursor; lab5: { bra = cursor; among_var = find_among(a_0); ket = cursor; switch (among_var) { case 1: slice_from("ss"); break; case 2: slice_from("\u00E4"); break; case 3: slice_from("\u00F6"); break; case 4: slice_from("\u00FC"); break; case 5: if (cursor >= limit) { break lab5; } cursor++; break; } continue; } cursor = v_5; break; } return true; } private boolean r_mark_regions() { I_p1 = limit; I_p2 = limit; int v_1 = cursor; { int c = cursor + 3; if (c > limit) { return false; } cursor = c; } I_x = cursor; cursor = v_1; golab0: while (true) { lab1: { if (!(in_grouping(g_v, 97, 252))) { break lab1; } break golab0; } if (cursor >= limit) { return false; } cursor++; } golab2: while (true) { lab3: { if (!(out_grouping(g_v, 97, 252))) { break lab3; } break golab2; } if (cursor >= limit) { return false; } cursor++; } I_p1 = cursor; lab4: { if (I_p1 >= I_x) { break lab4; } I_p1 = I_x; } golab5: while (true) { lab6: { if (!(in_grouping(g_v, 97, 252))) { break lab6; } break golab5; } if (cursor >= limit) { return false; } cursor++; } golab7: while (true) { lab8: { if (!(out_grouping(g_v, 97, 252))) { break lab8; } break golab7; } if (cursor >= limit) { return false; } cursor++; } I_p2 = cursor; return true; } private boolean r_postlude() { int among_var; while (true) { int v_1 = cursor; lab0: { bra = cursor; among_var = find_among(a_1); ket = cursor; switch (among_var) { case 1: slice_from("y"); break; case 2: slice_from("u"); break; case 3: slice_from("a"); break; case 4: slice_from("o"); break; case 5: if (cursor >= limit) { break lab0; } cursor++; break; } continue; } cursor = v_1; break; } return true; } private boolean r_R1() { return I_p1 <= cursor; } private boolean r_R2() { return I_p2 <= cursor; } private boolean r_standard_suffix() { int among_var; int v_1 = limit - cursor; lab0: { ket = cursor; among_var = find_among_b(a_2); if (among_var == 0) { break lab0; } bra = cursor; if (!r_R1()) { break lab0; } switch (among_var) { case 1: { int v_2 = limit - cursor; lab1: { if (!(eq_s_b("syst"))) { break lab1; } break lab0; } cursor = limit - v_2; } slice_del(); break; case 2: slice_del(); break; case 3: slice_del(); int v_3 = limit - cursor; lab2: { ket = cursor; if (!(eq_s_b("s"))) { cursor = limit - v_3; break lab2; } bra = cursor; if (!(eq_s_b("nis"))) { cursor = limit - v_3; break lab2; } slice_del(); } break; case 4: if (!(in_grouping_b(g_s_ending, 98, 116))) { break lab0; } slice_del(); break; } } cursor = limit - v_1; int v_4 = limit - cursor; lab3: { ket = cursor; among_var = find_among_b(a_3); if (among_var == 0) { break lab3; } bra = cursor; if (!r_R1()) { break lab3; } switch (among_var) { case 1: slice_del(); break; case 2: if (!(in_grouping_b(g_st_ending, 98, 116))) { break lab3; } { int c = cursor - 3; if (c < limit_backward) { break lab3; } cursor = c; } slice_del(); break; } } cursor = limit - v_4; int v_5 = limit - cursor; lab4: { ket = cursor; among_var = find_among_b(a_5); if (among_var == 0) { break lab4; } bra = cursor; if (!r_R2()) { break lab4; } switch (among_var) { case 1: slice_del(); int v_6 = limit - cursor; lab5: { ket = cursor; if (!(eq_s_b("ig"))) { cursor = limit - v_6; break lab5; } bra = cursor; { int v_7 = limit - cursor; lab6: { if (!(eq_s_b("e"))) { break lab6; } cursor = limit - v_6; break lab5; } cursor = limit - v_7; } if (!r_R2()) { cursor = limit - v_6; break lab5; } slice_del(); } break; case 2: { int v_8 = limit - cursor; lab7: { if (!(eq_s_b("e"))) { break lab7; } break lab4; } cursor = limit - v_8; } slice_del(); break; case 3: slice_del(); int v_9 = limit - cursor; lab8: { ket = cursor; lab9: { int v_10 = limit - cursor; lab10: { if (!(eq_s_b("er"))) { break lab10; } break lab9; } cursor = limit - v_10; if (!(eq_s_b("en"))) { cursor = limit - v_9; break lab8; } } bra = cursor; if (!r_R1()) { cursor = limit - v_9; break lab8; } slice_del(); } break; case 4: slice_del(); int v_11 = limit - cursor; lab11: { ket = cursor; if (find_among_b(a_4) == 0) { cursor = limit - v_11; break lab11; } bra = cursor; if (!r_R2()) { cursor = limit - v_11; break lab11; } slice_del(); } break; } } cursor = limit - v_5; return true; } public boolean stem() { int v_1 = cursor; r_prelude(); cursor = v_1; int v_2 = cursor; r_mark_regions(); cursor = v_2; limit_backward = cursor; cursor = limit; r_standard_suffix(); cursor = limit_backward; int v_4 = cursor; r_postlude(); cursor = v_4; return true; } @Override public boolean equals(Object o) { return o instanceof germanStemmer; } @Override public int hashCode() { return germanStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000157 14523004075 032666 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/greekStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/greekStemmer.jav0100644 0000000 0000000 00000230337 14523004075 034256 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class greekStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("", -1, 25), new Among("\u0386", 0, 1), new Among("\u0388", 0, 5), new Among("\u0389", 0, 7), new Among("\u038A", 0, 9), new Among("\u038C", 0, 15), new Among("\u038E", 0, 20), new Among("\u038F", 0, 24), new Among("\u0390", 0, 7), new Among("\u0391", 0, 1), new Among("\u0392", 0, 2), new Among("\u0393", 0, 3), new Among("\u0394", 0, 4), new Among("\u0395", 0, 5), new Among("\u0396", 0, 6), new Among("\u0397", 0, 7), new Among("\u0398", 0, 8), new Among("\u0399", 0, 9), new Among("\u039A", 0, 10), new Among("\u039B", 0, 11), new Among("\u039C", 0, 12), new Among("\u039D", 0, 13), new Among("\u039E", 0, 14), new Among("\u039F", 0, 15), new Among("\u03A0", 0, 16), new Among("\u03A1", 0, 17), new Among("\u03A3", 0, 18), new Among("\u03A4", 0, 19), new Among("\u03A5", 0, 20), new Among("\u03A6", 0, 21), new Among("\u03A7", 0, 22), new Among("\u03A8", 0, 23), new Among("\u03A9", 0, 24), new Among("\u03AA", 0, 9), new Among("\u03AB", 0, 20), new Among("\u03AC", 0, 1), new Among("\u03AD", 0, 5), new Among("\u03AE", 0, 7), new Among("\u03AF", 0, 9), new Among("\u03B0", 0, 20), new Among("\u03C2", 0, 18), new Among("\u03CA", 0, 7), new Among("\u03CB", 0, 20), new Among("\u03CC", 0, 15), new Among("\u03CD", 0, 20), new Among("\u03CE", 0, 24) }; private final static Among a_1[] = { new Among("\u03C3\u03BA\u03B1\u03B3\u03B9\u03B1", -1, 2), new Among("\u03C6\u03B1\u03B3\u03B9\u03B1", -1, 1), new Among("\u03BF\u03BB\u03BF\u03B3\u03B9\u03B1", -1, 3), new Among("\u03C3\u03BF\u03B3\u03B9\u03B1", -1, 4), new Among("\u03C4\u03B1\u03C4\u03BF\u03B3\u03B9\u03B1", -1, 5), new Among("\u03BA\u03C1\u03B5\u03B1\u03C4\u03B1", -1, 6), new Among("\u03C0\u03B5\u03C1\u03B1\u03C4\u03B1", -1, 7), new Among("\u03C4\u03B5\u03C1\u03B1\u03C4\u03B1", -1, 8), new Among("\u03B3\u03B5\u03B3\u03BF\u03BD\u03BF\u03C4\u03B1", -1, 11), new Among("\u03BA\u03B1\u03B8\u03B5\u03C3\u03C4\u03C9\u03C4\u03B1", -1, 10), new Among("\u03C6\u03C9\u03C4\u03B1", -1, 9), new Among("\u03C0\u03B5\u03C1\u03B1\u03C4\u03B7", -1, 7), new Among("\u03C3\u03BA\u03B1\u03B3\u03B9\u03C9\u03BD", -1, 2), new Among("\u03C6\u03B1\u03B3\u03B9\u03C9\u03BD", -1, 1), new Among("\u03BF\u03BB\u03BF\u03B3\u03B9\u03C9\u03BD", -1, 3), new Among("\u03C3\u03BF\u03B3\u03B9\u03C9\u03BD", -1, 4), new Among("\u03C4\u03B1\u03C4\u03BF\u03B3\u03B9\u03C9\u03BD", -1, 5), new Among("\u03BA\u03C1\u03B5\u03B1\u03C4\u03C9\u03BD", -1, 6), new Among("\u03C0\u03B5\u03C1\u03B1\u03C4\u03C9\u03BD", -1, 7), new Among("\u03C4\u03B5\u03C1\u03B1\u03C4\u03C9\u03BD", -1, 8), new Among("\u03B3\u03B5\u03B3\u03BF\u03BD\u03BF\u03C4\u03C9\u03BD", -1, 11), new Among("\u03BA\u03B1\u03B8\u03B5\u03C3\u03C4\u03C9\u03C4\u03C9\u03BD", -1, 10), new Among("\u03C6\u03C9\u03C4\u03C9\u03BD", -1, 9), new Among("\u03BA\u03C1\u03B5\u03B1\u03C3", -1, 6), new Among("\u03C0\u03B5\u03C1\u03B1\u03C3", -1, 7), new Among("\u03C4\u03B5\u03C1\u03B1\u03C3", -1, 8), new Among("\u03B3\u03B5\u03B3\u03BF\u03BD\u03BF\u03C3", -1, 11), new Among("\u03BA\u03C1\u03B5\u03B1\u03C4\u03BF\u03C3", -1, 6), new Among("\u03C0\u03B5\u03C1\u03B1\u03C4\u03BF\u03C3", -1, 7), new Among("\u03C4\u03B5\u03C1\u03B1\u03C4\u03BF\u03C3", -1, 8), new Among("\u03B3\u03B5\u03B3\u03BF\u03BD\u03BF\u03C4\u03BF\u03C3", -1, 11), new Among("\u03BA\u03B1\u03B8\u03B5\u03C3\u03C4\u03C9\u03C4\u03BF\u03C3", -1, 10), new Among("\u03C6\u03C9\u03C4\u03BF\u03C3", -1, 9), new Among("\u03BA\u03B1\u03B8\u03B5\u03C3\u03C4\u03C9\u03C3", -1, 10), new Among("\u03C6\u03C9\u03C3", -1, 9), new Among("\u03C3\u03BA\u03B1\u03B3\u03B9\u03BF\u03C5", -1, 2), new Among("\u03C6\u03B1\u03B3\u03B9\u03BF\u03C5", -1, 1), new Among("\u03BF\u03BB\u03BF\u03B3\u03B9\u03BF\u03C5", -1, 3), new Among("\u03C3\u03BF\u03B3\u03B9\u03BF\u03C5", -1, 4), new Among("\u03C4\u03B1\u03C4\u03BF\u03B3\u03B9\u03BF\u03C5", -1, 5) }; private final static Among a_2[] = { new Among("\u03C0\u03B1", -1, 1), new Among("\u03BE\u03B1\u03BD\u03B1\u03C0\u03B1", 0, 1), new Among("\u03B5\u03C0\u03B1", 0, 1), new Among("\u03C0\u03B5\u03C1\u03B9\u03C0\u03B1", 0, 1), new Among("\u03B1\u03BD\u03B1\u03BC\u03C0\u03B1", 0, 1), new Among("\u03B5\u03BC\u03C0\u03B1", 0, 1), new Among("\u03B2", -1, 2), new Among("\u03B4\u03B1\u03BD\u03B5", -1, 1), new Among("\u03B2\u03B1\u03B8\u03C5\u03C1\u03B9", -1, 2), new Among("\u03B2\u03B1\u03C1\u03BA", -1, 2), new Among("\u03BC\u03B1\u03C1\u03BA", -1, 2), new Among("\u03BB", -1, 2), new Among("\u03BC", -1, 2), new Among("\u03BA\u03BF\u03C1\u03BD", -1, 2), new Among("\u03B1\u03B8\u03C1\u03BF", -1, 1), new Among("\u03C3\u03C5\u03BD\u03B1\u03B8\u03C1\u03BF", 14, 1), new Among("\u03C0", -1, 2), new Among("\u03B9\u03BC\u03C0", 16, 2), new Among("\u03C1", -1, 2), new Among("\u03BC\u03B1\u03C1", 18, 2), new Among("\u03B1\u03BC\u03C0\u03B1\u03C1", 18, 2), new Among("\u03B3\u03BA\u03C1", 18, 2), new Among("\u03B2\u03BF\u03BB\u03B2\u03BF\u03C1", 18, 2), new Among("\u03B3\u03BB\u03C5\u03BA\u03BF\u03C1", 18, 2), new Among("\u03C0\u03B9\u03C0\u03B5\u03C1\u03BF\u03C1", 18, 2), new Among("\u03C0\u03C1", 18, 2), new Among("\u03BC\u03C0\u03C1", 25, 2), new Among("\u03B1\u03C1\u03C1", 18, 2), new Among("\u03B3\u03BB\u03C5\u03BA\u03C5\u03C1", 18, 2), new Among("\u03C0\u03BF\u03BB\u03C5\u03C1", 18, 2), new Among("\u03BB\u03BF\u03C5", -1, 2) }; private final static Among a_3[] = { new Among("\u03B9\u03B6\u03B1", -1, 1), new Among("\u03B9\u03B6\u03B5", -1, 1), new Among("\u03B9\u03B6\u03B1\u03BC\u03B5", -1, 1), new Among("\u03B9\u03B6\u03BF\u03C5\u03BC\u03B5", -1, 1), new Among("\u03B9\u03B6\u03B1\u03BD\u03B5", -1, 1), new Among("\u03B9\u03B6\u03BF\u03C5\u03BD\u03B5", -1, 1), new Among("\u03B9\u03B6\u03B1\u03C4\u03B5", -1, 1), new Among("\u03B9\u03B6\u03B5\u03C4\u03B5", -1, 1), new Among("\u03B9\u03B6\u03B5\u03B9", -1, 1), new Among("\u03B9\u03B6\u03B1\u03BD", -1, 1), new Among("\u03B9\u03B6\u03BF\u03C5\u03BD", -1, 1), new Among("\u03B9\u03B6\u03B5\u03C3", -1, 1), new Among("\u03B9\u03B6\u03B5\u03B9\u03C3", -1, 1), new Among("\u03B9\u03B6\u03C9", -1, 1) }; private final static Among a_4[] = { new Among("\u03B2\u03B9", -1, 1), new Among("\u03BB\u03B9", -1, 1), new Among("\u03B1\u03BB", -1, 1), new Among("\u03B5\u03BD", -1, 1), new Among("\u03C3", -1, 1), new Among("\u03C7", -1, 1), new Among("\u03C5\u03C8", -1, 1), new Among("\u03B6\u03C9", -1, 1) }; private final static Among a_5[] = { new Among("\u03C9\u03B8\u03B7\u03BA\u03B1", -1, 1), new Among("\u03C9\u03B8\u03B7\u03BA\u03B5", -1, 1), new Among("\u03C9\u03B8\u03B7\u03BA\u03B1\u03BC\u03B5", -1, 1), new Among("\u03C9\u03B8\u03B7\u03BA\u03B1\u03BD\u03B5", -1, 1), new Among("\u03C9\u03B8\u03B7\u03BA\u03B1\u03C4\u03B5", -1, 1), new Among("\u03C9\u03B8\u03B7\u03BA\u03B1\u03BD", -1, 1), new Among("\u03C9\u03B8\u03B7\u03BA\u03B5\u03C3", -1, 1) }; private final static Among a_6[] = { new Among("\u03BE\u03B1\u03BD\u03B1\u03C0\u03B1", -1, 1), new Among("\u03B5\u03C0\u03B1", -1, 1), new Among("\u03C0\u03B5\u03C1\u03B9\u03C0\u03B1", -1, 1), new Among("\u03B1\u03BD\u03B1\u03BC\u03C0\u03B1", -1, 1), new Among("\u03B5\u03BC\u03C0\u03B1", -1, 1), new Among("\u03C7\u03B1\u03C1\u03C4\u03BF\u03C0\u03B1", -1, 1), new Among("\u03B5\u03BE\u03B1\u03C1\u03C7\u03B1", -1, 1), new Among("\u03B3\u03B5", -1, 2), new Among("\u03B3\u03BA\u03B5", -1, 2), new Among("\u03BA\u03BB\u03B5", -1, 1), new Among("\u03B5\u03BA\u03BB\u03B5", 9, 1), new Among("\u03B1\u03C0\u03B5\u03BA\u03BB\u03B5", 10, 1), new Among("\u03B1\u03C0\u03BF\u03BA\u03BB\u03B5", 9, 1), new Among("\u03B5\u03C3\u03C9\u03BA\u03BB\u03B5", 9, 1), new Among("\u03B4\u03B1\u03BD\u03B5", -1, 1), new Among("\u03C0\u03B5", -1, 1), new Among("\u03B5\u03C0\u03B5", 15, 1), new Among("\u03BC\u03B5\u03C4\u03B5\u03C0\u03B5", 16, 1), new Among("\u03B5\u03C3\u03B5", -1, 1), new Among("\u03B3\u03BA", -1, 2), new Among("\u03BC", -1, 2), new Among("\u03C0\u03BF\u03C5\u03BA\u03B1\u03BC", 20, 2), new Among("\u03BA\u03BF\u03BC", 20, 2), new Among("\u03B1\u03BD", -1, 2), new Among("\u03BF\u03BB\u03BF", -1, 2), new Among("\u03B1\u03B8\u03C1\u03BF", -1, 1), new Among("\u03C3\u03C5\u03BD\u03B1\u03B8\u03C1\u03BF", 25, 1), new Among("\u03C0", -1, 2), new Among("\u03BB\u03B1\u03C1", -1, 2), new Among("\u03B4\u03B7\u03BC\u03BF\u03BA\u03C1\u03B1\u03C4", -1, 2), new Among("\u03B1\u03C6", -1, 2), new Among("\u03B3\u03B9\u03B3\u03B1\u03BD\u03C4\u03BF\u03B1\u03C6", 30, 2) }; private final static Among a_7[] = { new Among("\u03B9\u03C3\u03B1", -1, 1), new Among("\u03B9\u03C3\u03B1\u03BC\u03B5", -1, 1), new Among("\u03B9\u03C3\u03B1\u03BD\u03B5", -1, 1), new Among("\u03B9\u03C3\u03B5", -1, 1), new Among("\u03B9\u03C3\u03B1\u03C4\u03B5", -1, 1), new Among("\u03B9\u03C3\u03B1\u03BD", -1, 1), new Among("\u03B9\u03C3\u03B5\u03C3", -1, 1) }; private final static Among a_8[] = { new Among("\u03BE\u03B1\u03BD\u03B1\u03C0\u03B1", -1, 1), new Among("\u03B5\u03C0\u03B1", -1, 1), new Among("\u03C0\u03B5\u03C1\u03B9\u03C0\u03B1", -1, 1), new Among("\u03B1\u03BD\u03B1\u03BC\u03C0\u03B1", -1, 1), new Among("\u03B5\u03BC\u03C0\u03B1", -1, 1), new Among("\u03C7\u03B1\u03C1\u03C4\u03BF\u03C0\u03B1", -1, 1), new Among("\u03B5\u03BE\u03B1\u03C1\u03C7\u03B1", -1, 1), new Among("\u03BA\u03BB\u03B5", -1, 1), new Among("\u03B5\u03BA\u03BB\u03B5", 7, 1), new Among("\u03B1\u03C0\u03B5\u03BA\u03BB\u03B5", 8, 1), new Among("\u03B1\u03C0\u03BF\u03BA\u03BB\u03B5", 7, 1), new Among("\u03B5\u03C3\u03C9\u03BA\u03BB\u03B5", 7, 1), new Among("\u03B4\u03B1\u03BD\u03B5", -1, 1), new Among("\u03C0\u03B5", -1, 1), new Among("\u03B5\u03C0\u03B5", 13, 1), new Among("\u03BC\u03B5\u03C4\u03B5\u03C0\u03B5", 14, 1), new Among("\u03B5\u03C3\u03B5", -1, 1), new Among("\u03B1\u03B8\u03C1\u03BF", -1, 1), new Among("\u03C3\u03C5\u03BD\u03B1\u03B8\u03C1\u03BF", 17, 1) }; private final static Among a_9[] = { new Among("\u03B9\u03C3\u03BF\u03C5\u03BC\u03B5", -1, 1), new Among("\u03B9\u03C3\u03BF\u03C5\u03BD\u03B5", -1, 1), new Among("\u03B9\u03C3\u03B5\u03C4\u03B5", -1, 1), new Among("\u03B9\u03C3\u03B5\u03B9", -1, 1), new Among("\u03B9\u03C3\u03BF\u03C5\u03BD", -1, 1), new Among("\u03B9\u03C3\u03B5\u03B9\u03C3", -1, 1), new Among("\u03B9\u03C3\u03C9", -1, 1) }; private final static Among a_10[] = { new Among("\u03B1\u03C4\u03B1", -1, 2), new Among("\u03C6\u03B1", -1, 2), new Among("\u03B7\u03C6\u03B1", 1, 2), new Among("\u03BC\u03B5\u03B3", -1, 2), new Among("\u03BB\u03C5\u03B3", -1, 2), new Among("\u03B7\u03B4", -1, 2), new Among("\u03BA\u03BB\u03B5", -1, 1), new Among("\u03B5\u03C3\u03C9\u03BA\u03BB\u03B5", 6, 1), new Among("\u03C0\u03BB\u03B5", -1, 1), new Among("\u03B4\u03B1\u03BD\u03B5", -1, 1), new Among("\u03C3\u03B5", -1, 1), new Among("\u03B1\u03C3\u03B5", 10, 1), new Among("\u03BA\u03B1\u03B8", -1, 2), new Among("\u03B5\u03C7\u03B8", -1, 2), new Among("\u03BA\u03B1\u03BA", -1, 2), new Among("\u03BC\u03B1\u03BA", -1, 2), new Among("\u03C3\u03BA", -1, 2), new Among("\u03C6\u03B9\u03BB", -1, 2), new Among("\u03BA\u03C5\u03BB", -1, 2), new Among("\u03BC", -1, 2), new Among("\u03B3\u03B5\u03BC", 19, 2), new Among("\u03B1\u03C7\u03BD", -1, 2), new Among("\u03C3\u03C5\u03BD\u03B1\u03B8\u03C1\u03BF", -1, 1), new Among("\u03C0", -1, 2), new Among("\u03B1\u03C0", 23, 2), new Among("\u03B5\u03BC\u03C0", 23, 2), new Among("\u03B5\u03C5\u03C0", 23, 2), new Among("\u03B1\u03C1", -1, 2), new Among("\u03B1\u03BF\u03C1", -1, 2), new Among("\u03B3\u03C5\u03C1", -1, 2), new Among("\u03C7\u03C1", -1, 2), new Among("\u03C7\u03C9\u03C1", -1, 2), new Among("\u03BA\u03C4", -1, 2), new Among("\u03B1\u03BA\u03C4", 32, 2), new Among("\u03C7\u03C4", -1, 2), new Among("\u03B1\u03C7\u03C4", 34, 2), new Among("\u03C4\u03B1\u03C7", -1, 2), new Among("\u03C3\u03C7", -1, 2), new Among("\u03B1\u03C3\u03C7", 37, 2), new Among("\u03C5\u03C8", -1, 2) }; private final static Among a_11[] = { new Among("\u03B9\u03C3\u03C4\u03B1", -1, 1), new Among("\u03B9\u03C3\u03C4\u03B5", -1, 1), new Among("\u03B9\u03C3\u03C4\u03B7", -1, 1), new Among("\u03B9\u03C3\u03C4\u03BF\u03B9", -1, 1), new Among("\u03B9\u03C3\u03C4\u03C9\u03BD", -1, 1), new Among("\u03B9\u03C3\u03C4\u03BF", -1, 1), new Among("\u03B9\u03C3\u03C4\u03B5\u03C3", -1, 1), new Among("\u03B9\u03C3\u03C4\u03B7\u03C3", -1, 1), new Among("\u03B9\u03C3\u03C4\u03BF\u03C3", -1, 1), new Among("\u03B9\u03C3\u03C4\u03BF\u03C5\u03C3", -1, 1), new Among("\u03B9\u03C3\u03C4\u03BF\u03C5", -1, 1) }; private final static Among a_12[] = { new Among("\u03B5\u03B3\u03BA\u03BB\u03B5", -1, 1), new Among("\u03B1\u03C0\u03BF\u03BA\u03BB\u03B5", -1, 1), new Among("\u03B4\u03B1\u03BD\u03B5", -1, 2), new Among("\u03B1\u03BD\u03C4\u03B9\u03B4\u03B1\u03BD\u03B5", 2, 2), new Among("\u03C3\u03B5", -1, 1), new Among("\u03BC\u03B5\u03C4\u03B1\u03C3\u03B5", 4, 1), new Among("\u03BC\u03B9\u03BA\u03C1\u03BF\u03C3\u03B5", 4, 1) }; private final static Among a_13[] = { new Among("\u03B1\u03C4\u03BF\u03BC\u03B9\u03BA", -1, 2), new Among("\u03B5\u03B8\u03BD\u03B9\u03BA", -1, 4), new Among("\u03C4\u03BF\u03C0\u03B9\u03BA", -1, 7), new Among("\u03B5\u03BA\u03BB\u03B5\u03BA\u03C4\u03B9\u03BA", -1, 5), new Among("\u03C3\u03BA\u03B5\u03C0\u03C4\u03B9\u03BA", -1, 6), new Among("\u03B3\u03BD\u03C9\u03C3\u03C4\u03B9\u03BA", -1, 3), new Among("\u03B1\u03B3\u03BD\u03C9\u03C3\u03C4\u03B9\u03BA", 5, 1), new Among("\u03B1\u03BB\u03B5\u03BE\u03B1\u03BD\u03B4\u03C1\u03B9\u03BD", -1, 8), new Among("\u03B8\u03B5\u03B1\u03C4\u03C1\u03B9\u03BD", -1, 10), new Among("\u03B2\u03C5\u03B6\u03B1\u03BD\u03C4\u03B9\u03BD", -1, 9) }; private final static Among a_14[] = { new Among("\u03B9\u03C3\u03BC\u03BF\u03B9", -1, 1), new Among("\u03B9\u03C3\u03BC\u03C9\u03BD", -1, 1), new Among("\u03B9\u03C3\u03BC\u03BF", -1, 1), new Among("\u03B9\u03C3\u03BC\u03BF\u03C3", -1, 1), new Among("\u03B9\u03C3\u03BC\u03BF\u03C5\u03C3", -1, 1), new Among("\u03B9\u03C3\u03BC\u03BF\u03C5", -1, 1) }; private final static Among a_15[] = { new Among("\u03C3", -1, 1), new Among("\u03C7", -1, 1) }; private final static Among a_16[] = { new Among("\u03BF\u03C5\u03B4\u03B1\u03BA\u03B9\u03B1", -1, 1), new Among("\u03B1\u03C1\u03B1\u03BA\u03B9\u03B1", -1, 1), new Among("\u03BF\u03C5\u03B4\u03B1\u03BA\u03B9", -1, 1), new Among("\u03B1\u03C1\u03B1\u03BA\u03B9", -1, 1) }; private final static Among a_17[] = { new Among("\u03B2", -1, 2), new Among("\u03B2\u03B1\u03BC\u03B2", 0, 1), new Among("\u03C3\u03BB\u03BF\u03B2", 0, 1), new Among("\u03C4\u03C3\u03B5\u03C7\u03BF\u03C3\u03BB\u03BF\u03B2", 2, 1), new Among("\u03BA\u03B1\u03C1\u03B4", -1, 2), new Among("\u03B6", -1, 2), new Among("\u03C4\u03B6", 5, 1), new Among("\u03BA", -1, 1), new Among("\u03BA\u03B1\u03C0\u03B1\u03BA", 7, 1), new Among("\u03C3\u03BF\u03BA", 7, 1), new Among("\u03C3\u03BA", 7, 1), new Among("\u03B2\u03B1\u03BB", -1, 2), new Among("\u03BC\u03B1\u03BB", -1, 1), new Among("\u03B3\u03BB", -1, 2), new Among("\u03C4\u03C1\u03B9\u03C0\u03BF\u03BB", -1, 2), new Among("\u03C0\u03BB", -1, 1), new Among("\u03BB\u03BF\u03C5\u03BB", -1, 1), new Among("\u03C6\u03C5\u03BB", -1, 1), new Among("\u03BA\u03B1\u03B9\u03BC", -1, 1), new Among("\u03BA\u03BB\u03B9\u03BC", -1, 1), new Among("\u03C6\u03B1\u03C1\u03BC", -1, 1), new Among("\u03B3\u03B9\u03B1\u03BD", -1, 2), new Among("\u03C3\u03C0\u03B1\u03BD", -1, 1), new Among("\u03B7\u03B3\u03BF\u03C5\u03BC\u03B5\u03BD", -1, 2), new Among("\u03BA\u03BF\u03BD", -1, 1), new Among("\u03BC\u03B1\u03BA\u03C1\u03C5\u03BD", -1, 2), new Among("\u03C0", -1, 2), new Among("\u03BA\u03B1\u03C4\u03C1\u03B1\u03C0", 26, 1), new Among("\u03C1", -1, 1), new Among("\u03B2\u03C1", 28, 1), new Among("\u03BB\u03B1\u03B2\u03C1", 29, 1), new Among("\u03B1\u03BC\u03B2\u03C1", 29, 1), new Among("\u03BC\u03B5\u03C1", 28, 1), new Among("\u03C0\u03B1\u03C4\u03B5\u03C1", 28, 2), new Among("\u03B1\u03BD\u03B8\u03C1", 28, 1), new Among("\u03BA\u03BF\u03C1", 28, 1), new Among("\u03C3", -1, 1), new Among("\u03BD\u03B1\u03B3\u03BA\u03B1\u03C3", 36, 1), new Among("\u03C4\u03BF\u03C3", 36, 2), new Among("\u03BC\u03BF\u03C5\u03C3\u03C4", -1, 1), new Among("\u03C1\u03C5", -1, 1), new Among("\u03C6", -1, 1), new Among("\u03C3\u03C6", 41, 1), new Among("\u03B1\u03BB\u03B9\u03C3\u03C6", 42, 1), new Among("\u03BD\u03C5\u03C6", 41, 2), new Among("\u03C7", -1, 1) }; private final static Among a_18[] = { new Among("\u03B1\u03BA\u03B9\u03B1", -1, 1), new Among("\u03B1\u03C1\u03B1\u03BA\u03B9\u03B1", 0, 1), new Among("\u03B9\u03C4\u03C3\u03B1", -1, 1), new Among("\u03B1\u03BA\u03B9", -1, 1), new Among("\u03B1\u03C1\u03B1\u03BA\u03B9", 3, 1), new Among("\u03B9\u03C4\u03C3\u03C9\u03BD", -1, 1), new Among("\u03B9\u03C4\u03C3\u03B1\u03C3", -1, 1), new Among("\u03B9\u03C4\u03C3\u03B5\u03C3", -1, 1) }; private final static Among a_19[] = { new Among("\u03C8\u03B1\u03BB", -1, 1), new Among("\u03B1\u03B9\u03C6\u03BD", -1, 1), new Among("\u03BF\u03BB\u03BF", -1, 1), new Among("\u03B9\u03C1", -1, 1) }; private final static Among a_20[] = { new Among("\u03B5", -1, 1), new Among("\u03C0\u03B1\u03B9\u03C7\u03BD", -1, 1) }; private final static Among a_21[] = { new Among("\u03B9\u03B4\u03B9\u03B1", -1, 1), new Among("\u03B9\u03B4\u03B9\u03C9\u03BD", -1, 1), new Among("\u03B9\u03B4\u03B9\u03BF", -1, 1) }; private final static Among a_22[] = { new Among("\u03B9\u03B2", -1, 1), new Among("\u03B4", -1, 1), new Among("\u03C6\u03C1\u03B1\u03B3\u03BA", -1, 1), new Among("\u03BB\u03C5\u03BA", -1, 1), new Among("\u03BF\u03B2\u03B5\u03BB", -1, 1), new Among("\u03BC\u03B7\u03BD", -1, 1), new Among("\u03C1", -1, 1) }; private final static Among a_23[] = { new Among("\u03B9\u03C3\u03BA\u03B5", -1, 1), new Among("\u03B9\u03C3\u03BA\u03BF", -1, 1), new Among("\u03B9\u03C3\u03BA\u03BF\u03C3", -1, 1), new Among("\u03B9\u03C3\u03BA\u03BF\u03C5", -1, 1) }; private final static Among a_24[] = { new Among("\u03B1\u03B4\u03C9\u03BD", -1, 1), new Among("\u03B1\u03B4\u03B5\u03C3", -1, 1) }; private final static Among a_25[] = { new Among("\u03B3\u03B9\u03B1\u03B3\u03B9", -1, -1), new Among("\u03B8\u03B5\u03B9", -1, -1), new Among("\u03BF\u03BA", -1, -1), new Among("\u03BC\u03B1\u03BC", -1, -1), new Among("\u03BC\u03B1\u03BD", -1, -1), new Among("\u03BC\u03C0\u03B1\u03BC\u03C0", -1, -1), new Among("\u03C0\u03B5\u03B8\u03B5\u03C1", -1, -1), new Among("\u03C0\u03B1\u03C4\u03B5\u03C1", -1, -1), new Among("\u03BA\u03C5\u03C1", -1, -1), new Among("\u03BD\u03C4\u03B1\u03BD\u03C4", -1, -1) }; private final static Among a_26[] = { new Among("\u03B5\u03B4\u03C9\u03BD", -1, 1), new Among("\u03B5\u03B4\u03B5\u03C3", -1, 1) }; private final static Among a_27[] = { new Among("\u03BC\u03B9\u03BB", -1, 1), new Among("\u03B4\u03B1\u03C0", -1, 1), new Among("\u03B3\u03B7\u03C0", -1, 1), new Among("\u03B9\u03C0", -1, 1), new Among("\u03B5\u03BC\u03C0", -1, 1), new Among("\u03BF\u03C0", -1, 1), new Among("\u03BA\u03C1\u03B1\u03C3\u03C0", -1, 1), new Among("\u03C5\u03C0", -1, 1) }; private final static Among a_28[] = { new Among("\u03BF\u03C5\u03B4\u03C9\u03BD", -1, 1), new Among("\u03BF\u03C5\u03B4\u03B5\u03C3", -1, 1) }; private final static Among a_29[] = { new Among("\u03C4\u03C1\u03B1\u03B3", -1, 1), new Among("\u03C6\u03B5", -1, 1), new Among("\u03BA\u03B1\u03BB\u03B9\u03B1\u03BA", -1, 1), new Among("\u03B1\u03C1\u03BA", -1, 1), new Among("\u03C3\u03BA", -1, 1), new Among("\u03C0\u03B5\u03C4\u03B1\u03BB", -1, 1), new Among("\u03B2\u03B5\u03BB", -1, 1), new Among("\u03BB\u03BF\u03C5\u03BB", -1, 1), new Among("\u03C6\u03BB", -1, 1), new Among("\u03C7\u03BD", -1, 1), new Among("\u03C0\u03BB\u03B5\u03BE", -1, 1), new Among("\u03C3\u03C0", -1, 1), new Among("\u03C6\u03C1", -1, 1), new Among("\u03C3", -1, 1), new Among("\u03BB\u03B9\u03C7", -1, 1) }; private final static Among a_30[] = { new Among("\u03B5\u03C9\u03BD", -1, 1), new Among("\u03B5\u03C9\u03C3", -1, 1) }; private final static Among a_31[] = { new Among("\u03B4", -1, 1), new Among("\u03B9\u03B4", 0, 1), new Among("\u03B8", -1, 1), new Among("\u03B3\u03B1\u03BB", -1, 1), new Among("\u03B5\u03BB", -1, 1), new Among("\u03BD", -1, 1), new Among("\u03C0", -1, 1), new Among("\u03C0\u03B1\u03C1", -1, 1) }; private final static Among a_32[] = { new Among("\u03B9\u03B1", -1, 1), new Among("\u03B9\u03C9\u03BD", -1, 1), new Among("\u03B9\u03BF\u03C5", -1, 1) }; private final static Among a_33[] = { new Among("\u03B9\u03BA\u03B1", -1, 1), new Among("\u03B9\u03BA\u03C9\u03BD", -1, 1), new Among("\u03B9\u03BA\u03BF", -1, 1), new Among("\u03B9\u03BA\u03BF\u03C5", -1, 1) }; private final static Among a_34[] = { new Among("\u03B1\u03B4", -1, 1), new Among("\u03C3\u03C5\u03BD\u03B1\u03B4", 0, 1), new Among("\u03BA\u03B1\u03C4\u03B1\u03B4", 0, 1), new Among("\u03B1\u03BD\u03C4\u03B9\u03B4", -1, 1), new Among("\u03B5\u03BD\u03B4", -1, 1), new Among("\u03C6\u03C5\u03BB\u03BF\u03B4", -1, 1), new Among("\u03C5\u03C0\u03BF\u03B4", -1, 1), new Among("\u03C0\u03C1\u03C9\u03C4\u03BF\u03B4", -1, 1), new Among("\u03B5\u03BE\u03C9\u03B4", -1, 1), new Among("\u03B7\u03B8", -1, 1), new Among("\u03B1\u03BD\u03B7\u03B8", 9, 1), new Among("\u03BE\u03B9\u03BA", -1, 1), new Among("\u03B1\u03BB", -1, 1), new Among("\u03B1\u03BC\u03BC\u03BF\u03C7\u03B1\u03BB", 12, 1), new Among("\u03C3\u03C5\u03BD\u03BF\u03BC\u03B7\u03BB", -1, 1), new Among("\u03BC\u03C0\u03BF\u03BB", -1, 1), new Among("\u03BC\u03BF\u03C5\u03BB", -1, 1), new Among("\u03C4\u03C3\u03B1\u03BC", -1, 1), new Among("\u03B2\u03C1\u03C9\u03BC", -1, 1), new Among("\u03B1\u03BC\u03B1\u03BD", -1, 1), new Among("\u03BC\u03C0\u03B1\u03BD", -1, 1), new Among("\u03BA\u03B1\u03BB\u03BB\u03B9\u03BD", -1, 1), new Among("\u03C0\u03BF\u03C3\u03C4\u03B5\u03BB\u03BD", -1, 1), new Among("\u03C6\u03B9\u03BB\u03BF\u03BD", -1, 1), new Among("\u03BA\u03B1\u03BB\u03C0", -1, 1), new Among("\u03B3\u03B5\u03C1", -1, 1), new Among("\u03C7\u03B1\u03C3", -1, 1), new Among("\u03BC\u03C0\u03BF\u03C3", -1, 1), new Among("\u03C0\u03BB\u03B9\u03B1\u03C4\u03C3", -1, 1), new Among("\u03C0\u03B5\u03C4\u03C3", -1, 1), new Among("\u03C0\u03B9\u03C4\u03C3", -1, 1), new Among("\u03C6\u03C5\u03C3", -1, 1), new Among("\u03BC\u03C0\u03B1\u03B3\u03B9\u03B1\u03C4", -1, 1), new Among("\u03BD\u03B9\u03C4", -1, 1), new Among("\u03C0\u03B9\u03BA\u03B1\u03BD\u03C4", -1, 1), new Among("\u03C3\u03B5\u03C1\u03C4", -1, 1) }; private final static Among a_35[] = { new Among("\u03B1\u03B3\u03B1\u03BC\u03B5", -1, 1), new Among("\u03B7\u03BA\u03B1\u03BC\u03B5", -1, 1), new Among("\u03B7\u03B8\u03B7\u03BA\u03B1\u03BC\u03B5", 1, 1), new Among("\u03B7\u03C3\u03B1\u03BC\u03B5", -1, 1), new Among("\u03BF\u03C5\u03C3\u03B1\u03BC\u03B5", -1, 1) }; private final static Among a_36[] = { new Among("\u03B2\u03BF\u03C5\u03B2", -1, 1), new Among("\u03BE\u03B5\u03B8", -1, 1), new Among("\u03C0\u03B5\u03B8", -1, 1), new Among("\u03B1\u03C0\u03BF\u03B8", -1, 1), new Among("\u03B1\u03C0\u03BF\u03BA", -1, 1), new Among("\u03BF\u03C5\u03BB", -1, 1), new Among("\u03B1\u03BD\u03B1\u03C0", -1, 1), new Among("\u03C0\u03B9\u03BA\u03C1", -1, 1), new Among("\u03C0\u03BF\u03C4", -1, 1), new Among("\u03B1\u03C0\u03BF\u03C3\u03C4", -1, 1), new Among("\u03C7", -1, 1), new Among("\u03C3\u03B9\u03C7", 10, 1) }; private final static Among a_37[] = { new Among("\u03C4\u03C1", -1, 1), new Among("\u03C4\u03C3", -1, 1) }; private final static Among a_38[] = { new Among("\u03B1\u03B3\u03B1\u03BD\u03B5", -1, 1), new Among("\u03B7\u03BA\u03B1\u03BD\u03B5", -1, 1), new Among("\u03B7\u03B8\u03B7\u03BA\u03B1\u03BD\u03B5", 1, 1), new Among("\u03B7\u03C3\u03B1\u03BD\u03B5", -1, 1), new Among("\u03BF\u03C5\u03C3\u03B1\u03BD\u03B5", -1, 1), new Among("\u03BF\u03BD\u03C4\u03B1\u03BD\u03B5", -1, 1), new Among("\u03B9\u03BF\u03BD\u03C4\u03B1\u03BD\u03B5", 5, 1), new Among("\u03BF\u03C5\u03BD\u03C4\u03B1\u03BD\u03B5", -1, 1), new Among("\u03B9\u03BF\u03C5\u03BD\u03C4\u03B1\u03BD\u03B5", 7, 1), new Among("\u03BF\u03C4\u03B1\u03BD\u03B5", -1, 1), new Among("\u03B9\u03BF\u03C4\u03B1\u03BD\u03B5", 9, 1) }; private final static Among a_39[] = { new Among("\u03C4\u03B1\u03B2", -1, 1), new Among("\u03BD\u03C4\u03B1\u03B2", 0, 1), new Among("\u03C8\u03B7\u03BB\u03BF\u03C4\u03B1\u03B2", 0, 1), new Among("\u03BB\u03B9\u03B2", -1, 1), new Among("\u03BA\u03BB\u03B9\u03B2", 3, 1), new Among("\u03BE\u03B7\u03C1\u03BF\u03BA\u03BB\u03B9\u03B2", 4, 1), new Among("\u03B3", -1, 1), new Among("\u03B1\u03B3", 6, 1), new Among("\u03C4\u03C1\u03B1\u03B3", 7, 1), new Among("\u03C4\u03C3\u03B1\u03B3", 7, 1), new Among("\u03B1\u03B8\u03B9\u03B3\u03B3", 6, 1), new Among("\u03C4\u03C3\u03B9\u03B3\u03B3", 6, 1), new Among("\u03B1\u03C4\u03C3\u03B9\u03B3\u03B3", 11, 1), new Among("\u03C3\u03C4\u03B5\u03B3", 6, 1), new Among("\u03B1\u03C0\u03B7\u03B3", 6, 1), new Among("\u03C3\u03B9\u03B3", 6, 1), new Among("\u03B1\u03BD\u03BF\u03C1\u03B3", 6, 1), new Among("\u03B5\u03BD\u03BF\u03C1\u03B3", 6, 1), new Among("\u03BA\u03B1\u03BB\u03C0\u03BF\u03C5\u03B6", -1, 1), new Among("\u03B8", -1, 1), new Among("\u03BC\u03C9\u03B1\u03BC\u03B5\u03B8", 19, 1), new Among("\u03C0\u03B9\u03B8", 19, 1), new Among("\u03B1\u03C0\u03B9\u03B8", 21, 1), new Among("\u03B4\u03B5\u03BA", -1, 1), new Among("\u03C0\u03B5\u03BB\u03B5\u03BA", -1, 1), new Among("\u03B9\u03BA", -1, 1), new Among("\u03B1\u03BD\u03B9\u03BA", 25, 1), new Among("\u03B2\u03BF\u03C5\u03BB\u03BA", -1, 1), new Among("\u03B2\u03B1\u03C3\u03BA", -1, 1), new Among("\u03B2\u03C1\u03B1\u03C7\u03C5\u03BA", -1, 1), new Among("\u03B3\u03B1\u03BB", -1, 1), new Among("\u03BA\u03B1\u03C4\u03B1\u03B3\u03B1\u03BB", 30, 1), new Among("\u03BF\u03BB\u03BF\u03B3\u03B1\u03BB", 30, 1), new Among("\u03B2\u03B1\u03B8\u03C5\u03B3\u03B1\u03BB", 30, 1), new Among("\u03BC\u03B5\u03BB", -1, 1), new Among("\u03BA\u03B1\u03C3\u03C4\u03B5\u03BB", -1, 1), new Among("\u03C0\u03BF\u03C1\u03C4\u03BF\u03BB", -1, 1), new Among("\u03C0\u03BB", -1, 1), new Among("\u03B4\u03B9\u03C0\u03BB", 37, 1), new Among("\u03BB\u03B1\u03BF\u03C0\u03BB", 37, 1), new Among("\u03C8\u03C5\u03C7\u03BF\u03C0\u03BB", 37, 1), new Among("\u03BF\u03C5\u03BB", -1, 1), new Among("\u03BC", -1, 1), new Among("\u03BF\u03BB\u03B9\u03B3\u03BF\u03B4\u03B1\u03BC", 42, 1), new Among("\u03BC\u03BF\u03C5\u03C3\u03BF\u03C5\u03BB\u03BC", 42, 1), new Among("\u03B4\u03C1\u03B1\u03B4\u03BF\u03C5\u03BC", 42, 1), new Among("\u03B2\u03C1\u03B1\u03C7\u03BC", 42, 1), new Among("\u03BD", -1, 1), new Among("\u03B1\u03BC\u03B5\u03C1\u03B9\u03BA\u03B1\u03BD", 47, 1), new Among("\u03C0", -1, 1), new Among("\u03B1\u03B4\u03B1\u03C0", 49, 1), new Among("\u03C7\u03B1\u03BC\u03B7\u03BB\u03BF\u03B4\u03B1\u03C0", 49, 1), new Among("\u03C0\u03BF\u03BB\u03C5\u03B4\u03B1\u03C0", 49, 1), new Among("\u03BA\u03BF\u03C0", 49, 1), new Among("\u03C5\u03C0\u03BF\u03BA\u03BF\u03C0", 53, 1), new Among("\u03C4\u03C3\u03BF\u03C0", 49, 1), new Among("\u03C3\u03C0", 49, 1), new Among("\u03B5\u03C1", -1, 1), new Among("\u03B3\u03B5\u03C1", 57, 1), new Among("\u03B2\u03B5\u03C4\u03B5\u03C1", 57, 1), new Among("\u03BB\u03BF\u03C5\u03B8\u03B7\u03C1", -1, 1), new Among("\u03BA\u03BF\u03C1\u03BC\u03BF\u03C1", -1, 1), new Among("\u03C0\u03B5\u03C1\u03B9\u03C4\u03C1", -1, 1), new Among("\u03BF\u03C5\u03C1", -1, 1), new Among("\u03C3", -1, 1), new Among("\u03B2\u03B1\u03C3", 64, 1), new Among("\u03C0\u03BF\u03BB\u03B9\u03C3", 64, 1), new Among("\u03C3\u03B1\u03C1\u03B1\u03BA\u03B1\u03C4\u03C3", 64, 1), new Among("\u03B8\u03C5\u03C3", 64, 1), new Among("\u03B4\u03B9\u03B1\u03C4", -1, 1), new Among("\u03C0\u03BB\u03B1\u03C4", -1, 1), new Among("\u03C4\u03C3\u03B1\u03C1\u03BB\u03B1\u03C4", -1, 1), new Among("\u03C4\u03B5\u03C4", -1, 1), new Among("\u03C0\u03BF\u03C5\u03C1\u03B9\u03C4", -1, 1), new Among("\u03C3\u03BF\u03C5\u03BB\u03C4", -1, 1), new Among("\u03BC\u03B1\u03B9\u03BD\u03C4", -1, 1), new Among("\u03B6\u03C9\u03BD\u03C4", -1, 1), new Among("\u03BA\u03B1\u03C3\u03C4", -1, 1), new Among("\u03C6", -1, 1), new Among("\u03B4\u03B9\u03B1\u03C6", 78, 1), new Among("\u03C3\u03C4\u03B5\u03C6", 78, 1), new Among("\u03C6\u03C9\u03C4\u03BF\u03C3\u03C4\u03B5\u03C6", 80, 1), new Among("\u03C0\u03B5\u03C1\u03B7\u03C6", 78, 1), new Among("\u03C5\u03C0\u03B5\u03C1\u03B7\u03C6", 82, 1), new Among("\u03BA\u03BF\u03B9\u03BB\u03B1\u03C1\u03C6", 78, 1), new Among("\u03C0\u03B5\u03BD\u03C4\u03B1\u03C1\u03C6", 78, 1), new Among("\u03BF\u03C1\u03C6", 78, 1), new Among("\u03C7", -1, 1), new Among("\u03B1\u03BC\u03B7\u03C7", 87, 1), new Among("\u03B2\u03B9\u03BF\u03BC\u03B7\u03C7", 87, 1), new Among("\u03BC\u03B5\u03B3\u03BB\u03BF\u03B2\u03B9\u03BF\u03BC\u03B7\u03C7", 89, 1), new Among("\u03BA\u03B1\u03C0\u03BD\u03BF\u03B2\u03B9\u03BF\u03BC\u03B7\u03C7", 89, 1), new Among("\u03BC\u03B9\u03BA\u03C1\u03BF\u03B2\u03B9\u03BF\u03BC\u03B7\u03C7", 89, 1), new Among("\u03C0\u03BF\u03BB\u03C5\u03BC\u03B7\u03C7", 87, 1), new Among("\u03BB\u03B9\u03C7", 87, 1) }; private final static Among a_40[] = { new Among("\u03B7\u03C3\u03B5\u03C4\u03B5", -1, 1) }; private final static Among a_41[] = { new Among("\u03B5\u03BD\u03B4", -1, 1), new Among("\u03C3\u03C5\u03BD\u03B4", -1, 1), new Among("\u03BF\u03B4", -1, 1), new Among("\u03B4\u03B9\u03B1\u03B8", -1, 1), new Among("\u03BA\u03B1\u03B8", -1, 1), new Among("\u03C1\u03B1\u03B8", -1, 1), new Among("\u03C4\u03B1\u03B8", -1, 1), new Among("\u03C4\u03B9\u03B8", -1, 1), new Among("\u03B5\u03BA\u03B8", -1, 1), new Among("\u03B5\u03BD\u03B8", -1, 1), new Among("\u03C3\u03C5\u03BD\u03B8", -1, 1), new Among("\u03C1\u03BF\u03B8", -1, 1), new Among("\u03C5\u03C0\u03B5\u03C1\u03B8", -1, 1), new Among("\u03C3\u03B8", -1, 1), new Among("\u03B5\u03C5\u03B8", -1, 1), new Among("\u03B1\u03C1\u03BA", -1, 1), new Among("\u03C9\u03C6\u03B5\u03BB", -1, 1), new Among("\u03B2\u03BF\u03BB", -1, 1), new Among("\u03B1\u03B9\u03BD", -1, 1), new Among("\u03C0\u03BF\u03BD", -1, 1), new Among("\u03C1\u03BF\u03BD", -1, 1), new Among("\u03C3\u03C5\u03BD", -1, 1), new Among("\u03B2\u03B1\u03C1", -1, 1), new Among("\u03B2\u03C1", -1, 1), new Among("\u03B1\u03B9\u03C1", -1, 1), new Among("\u03C6\u03BF\u03C1", -1, 1), new Among("\u03B5\u03C5\u03C1", -1, 1), new Among("\u03C0\u03C5\u03C1", -1, 1), new Among("\u03C7\u03C9\u03C1", -1, 1), new Among("\u03BD\u03B5\u03C4", -1, 1), new Among("\u03C3\u03C7", -1, 1) }; private final static Among a_42[] = { new Among("\u03C0\u03B1\u03B3", -1, 1), new Among("\u03B4", -1, 1), new Among("\u03B1\u03B4", 1, 1), new Among("\u03B8", -1, 1), new Among("\u03B1\u03B8", 3, 1), new Among("\u03C4\u03BF\u03BA", -1, 1), new Among("\u03C3\u03BA", -1, 1), new Among("\u03C0\u03B1\u03C1\u03B1\u03BA\u03B1\u03BB", -1, 1), new Among("\u03C3\u03BA\u03B5\u03BB", -1, 1), new Among("\u03B1\u03C0\u03BB", -1, 1), new Among("\u03B5\u03BC", -1, 1), new Among("\u03B1\u03BD", -1, 1), new Among("\u03B2\u03B5\u03BD", -1, 1), new Among("\u03B2\u03B1\u03C1\u03BF\u03BD", -1, 1), new Among("\u03BA\u03BF\u03C0", -1, 1), new Among("\u03C3\u03B5\u03C1\u03C0", -1, 1), new Among("\u03B1\u03B2\u03B1\u03C1", -1, 1), new Among("\u03B5\u03BD\u03B1\u03C1", -1, 1), new Among("\u03B1\u03B2\u03C1", -1, 1), new Among("\u03BC\u03C0\u03BF\u03C1", -1, 1), new Among("\u03B8\u03B1\u03C1\u03C1", -1, 1), new Among("\u03BD\u03C4\u03C1", -1, 1), new Among("\u03C5", -1, 1), new Among("\u03BD\u03B9\u03C6", -1, 1), new Among("\u03C3\u03C5\u03C1\u03C6", -1, 1) }; private final static Among a_43[] = { new Among("\u03BF\u03BD\u03C4\u03B1\u03C3", -1, 1), new Among("\u03C9\u03BD\u03C4\u03B1\u03C3", -1, 1) }; private final static Among a_44[] = { new Among("\u03BF\u03BC\u03B1\u03C3\u03C4\u03B5", -1, 1), new Among("\u03B9\u03BF\u03BC\u03B1\u03C3\u03C4\u03B5", 0, 1) }; private final static Among a_45[] = { new Among("\u03C0", -1, 1), new Among("\u03B1\u03C0", 0, 1), new Among("\u03B1\u03BA\u03B1\u03C4\u03B1\u03C0", 1, 1), new Among("\u03C3\u03C5\u03BC\u03C0", 0, 1), new Among("\u03B1\u03C3\u03C5\u03BC\u03C0", 3, 1), new Among("\u03B1\u03BC\u03B5\u03C4\u03B1\u03BC\u03C6", -1, 1) }; private final static Among a_46[] = { new Among("\u03B6", -1, 1), new Among("\u03B1\u03BB", -1, 1), new Among("\u03C0\u03B1\u03C1\u03B1\u03BA\u03B1\u03BB", 1, 1), new Among("\u03B5\u03BA\u03C4\u03B5\u03BB", -1, 1), new Among("\u03BC", -1, 1), new Among("\u03BE", -1, 1), new Among("\u03C0\u03C1\u03BF", -1, 1), new Among("\u03B1\u03C1", -1, 1), new Among("\u03BD\u03B9\u03C3", -1, 1) }; private final static Among a_47[] = { new Among("\u03B7\u03B8\u03B7\u03BA\u03B1", -1, 1), new Among("\u03B7\u03B8\u03B7\u03BA\u03B5", -1, 1), new Among("\u03B7\u03B8\u03B7\u03BA\u03B5\u03C3", -1, 1) }; private final static Among a_48[] = { new Among("\u03C0\u03B9\u03B8", -1, 1), new Among("\u03BF\u03B8", -1, 1), new Among("\u03BD\u03B1\u03C1\u03B8", -1, 1), new Among("\u03C3\u03BA\u03BF\u03C5\u03BB", -1, 1), new Among("\u03C3\u03BA\u03C9\u03BB", -1, 1), new Among("\u03C3\u03C6", -1, 1) }; private final static Among a_49[] = { new Among("\u03B8", -1, 1), new Among("\u03B4\u03B9\u03B1\u03B8", 0, 1), new Among("\u03C0\u03B1\u03C1\u03B1\u03BA\u03B1\u03C4\u03B1\u03B8", 0, 1), new Among("\u03C3\u03C5\u03BD\u03B8", 0, 1), new Among("\u03C0\u03C1\u03BF\u03C3\u03B8", 0, 1) }; private final static Among a_50[] = { new Among("\u03B7\u03BA\u03B1", -1, 1), new Among("\u03B7\u03BA\u03B5", -1, 1), new Among("\u03B7\u03BA\u03B5\u03C3", -1, 1) }; private final static Among a_51[] = { new Among("\u03C6\u03B1\u03B3", -1, 1), new Among("\u03BB\u03B7\u03B3", -1, 1), new Among("\u03C6\u03C1\u03C5\u03B4", -1, 1), new Among("\u03BC\u03B1\u03BD\u03C4\u03B9\u03BB", -1, 1), new Among("\u03BC\u03B1\u03BB\u03BB", -1, 1), new Among("\u03BF\u03BC", -1, 1), new Among("\u03B2\u03BB\u03B5\u03C0", -1, 1), new Among("\u03C0\u03BF\u03B4\u03B1\u03C1", -1, 1), new Among("\u03BA\u03C5\u03BC\u03B1\u03C4", -1, 1), new Among("\u03C0\u03C1\u03C9\u03C4", -1, 1), new Among("\u03BB\u03B1\u03C7", -1, 1), new Among("\u03C0\u03B1\u03BD\u03C4\u03B1\u03C7", -1, 1) }; private final static Among a_52[] = { new Among("\u03C4\u03C3\u03B1", -1, 1), new Among("\u03C7\u03B1\u03B4", -1, 1), new Among("\u03BC\u03B5\u03B4", -1, 1), new Among("\u03BB\u03B1\u03BC\u03C0\u03B9\u03B4", -1, 1), new Among("\u03B4\u03B5", -1, 1), new Among("\u03C0\u03BB\u03B5", -1, 1), new Among("\u03BC\u03B5\u03C3\u03B1\u03B6", -1, 1), new Among("\u03B4\u03B5\u03C3\u03C0\u03BF\u03B6", -1, 1), new Among("\u03B1\u03B9\u03B8", -1, 1), new Among("\u03C6\u03B1\u03C1\u03BC\u03B1\u03BA", -1, 1), new Among("\u03B1\u03B3\u03BA", -1, 1), new Among("\u03B1\u03BD\u03B7\u03BA", -1, 1), new Among("\u03BB", -1, 1), new Among("\u03BC", -1, 1), new Among("\u03B1\u03BC", 13, 1), new Among("\u03B2\u03C1\u03BF\u03BC", 13, 1), new Among("\u03C5\u03C0\u03BF\u03C4\u03B5\u03B9\u03BD", -1, 1), new Among("\u03B5\u03BA\u03BB\u03B9\u03C0", -1, 1), new Among("\u03C1", -1, 1), new Among("\u03B5\u03BD\u03B4\u03B9\u03B1\u03C6\u03B5\u03C1", 18, 1), new Among("\u03B1\u03BD\u03B1\u03C1\u03C1", 18, 1), new Among("\u03C0\u03B1\u03C4", -1, 1), new Among("\u03BA\u03B1\u03B8\u03B1\u03C1\u03B5\u03C5", -1, 1), new Among("\u03B4\u03B5\u03C5\u03C4\u03B5\u03C1\u03B5\u03C5", -1, 1), new Among("\u03BB\u03B5\u03C7", -1, 1) }; private final static Among a_53[] = { new Among("\u03BF\u03C5\u03C3\u03B1", -1, 1), new Among("\u03BF\u03C5\u03C3\u03B5", -1, 1), new Among("\u03BF\u03C5\u03C3\u03B5\u03C3", -1, 1) }; private final static Among a_54[] = { new Among("\u03C0\u03B5\u03BB", -1, 1), new Among("\u03BB\u03BB", -1, 1), new Among("\u03C3\u03BC\u03B7\u03BD", -1, 1), new Among("\u03C1\u03C0", -1, 1), new Among("\u03C0\u03C1", -1, 1), new Among("\u03C6\u03C1", -1, 1), new Among("\u03C7\u03BF\u03C1\u03C4", -1, 1), new Among("\u03BF\u03C6", -1, 1), new Among("\u03C8\u03BF\u03C6", 7, -1), new Among("\u03C3\u03C6", -1, 1), new Among("\u03BB\u03BF\u03C7", -1, 1), new Among("\u03BD\u03B1\u03C5\u03BB\u03BF\u03C7", 10, -1) }; private final static Among a_55[] = { new Among("\u03B1\u03BC\u03B1\u03BB\u03BB\u03B9", -1, 1), new Among("\u03BB", -1, 1), new Among("\u03B1\u03BC\u03B1\u03BB", 1, 1), new Among("\u03BC", -1, 1), new Among("\u03BF\u03C5\u03BB\u03B1\u03BC", 3, 1), new Among("\u03B5\u03BD", -1, 1), new Among("\u03B4\u03B5\u03C1\u03B2\u03B5\u03BD", 5, 1), new Among("\u03C0", -1, 1), new Among("\u03B1\u03B5\u03B9\u03C0", 7, 1), new Among("\u03B1\u03C1\u03C4\u03B9\u03C0", 7, 1), new Among("\u03C3\u03C5\u03BC\u03C0", 7, 1), new Among("\u03BD\u03B5\u03BF\u03C0", 7, 1), new Among("\u03BA\u03C1\u03BF\u03BA\u03B1\u03BB\u03BF\u03C0", 7, 1), new Among("\u03BF\u03BB\u03BF\u03C0", 7, 1), new Among("\u03C0\u03C1\u03BF\u03C3\u03C9\u03C0\u03BF\u03C0", 7, 1), new Among("\u03C3\u03B9\u03B4\u03B7\u03C1\u03BF\u03C0", 7, 1), new Among("\u03B4\u03C1\u03BF\u03C3\u03BF\u03C0", 7, 1), new Among("\u03B1\u03C3\u03C0", 7, 1), new Among("\u03B1\u03BD\u03C5\u03C0", 7, 1), new Among("\u03C1", -1, 1), new Among("\u03B1\u03C3\u03C0\u03B1\u03C1", 19, 1), new Among("\u03C7\u03B1\u03C1", 19, 1), new Among("\u03B1\u03C7\u03B1\u03C1", 21, 1), new Among("\u03B1\u03C0\u03B5\u03C1", 19, 1), new Among("\u03C4\u03C1", 19, 1), new Among("\u03BF\u03C5\u03C1", 19, 1), new Among("\u03C4", -1, 1), new Among("\u03B4\u03B9\u03B1\u03C4", 26, 1), new Among("\u03B5\u03C0\u03B9\u03C4", 26, 1), new Among("\u03C3\u03C5\u03BD\u03C4", 26, 1), new Among("\u03BF\u03BC\u03BF\u03C4", 26, 1), new Among("\u03BD\u03BF\u03BC\u03BF\u03C4", 30, 1), new Among("\u03B1\u03C0\u03BF\u03C4", 26, 1), new Among("\u03C5\u03C0\u03BF\u03C4", 26, 1), new Among("\u03B1\u03B2\u03B1\u03C3\u03C4", 26, 1), new Among("\u03B1\u03B9\u03BC\u03BF\u03C3\u03C4", 26, 1), new Among("\u03C0\u03C1\u03BF\u03C3\u03C4", 26, 1), new Among("\u03B1\u03BD\u03C5\u03C3\u03C4", 26, 1), new Among("\u03BD\u03B1\u03C5", -1, 1), new Among("\u03B1\u03C6", -1, 1), new Among("\u03BE\u03B5\u03C6", -1, 1), new Among("\u03B1\u03B4\u03B7\u03C6", -1, 1), new Among("\u03C0\u03B1\u03BC\u03C6", -1, 1), new Among("\u03C0\u03BF\u03BB\u03C5\u03C6", -1, 1) }; private final static Among a_56[] = { new Among("\u03B1\u03B3\u03B1", -1, 1), new Among("\u03B1\u03B3\u03B5", -1, 1), new Among("\u03B1\u03B3\u03B5\u03C3", -1, 1) }; private final static Among a_57[] = { new Among("\u03B7\u03C3\u03B1", -1, 1), new Among("\u03B7\u03C3\u03B5", -1, 1), new Among("\u03B7\u03C3\u03BF\u03C5", -1, 1) }; private final static Among a_58[] = { new Among("\u03BD", -1, 1), new Among("\u03B4\u03C9\u03B4\u03B5\u03BA\u03B1\u03BD", 0, 1), new Among("\u03B5\u03C0\u03C4\u03B1\u03BD", 0, 1), new Among("\u03BC\u03B5\u03B3\u03B1\u03BB\u03BF\u03BD", 0, 1), new Among("\u03B5\u03C1\u03B7\u03BC\u03BF\u03BD", 0, 1), new Among("\u03C7\u03B5\u03C1\u03C3\u03BF\u03BD", 0, 1) }; private final static Among a_59[] = { new Among("\u03B7\u03C3\u03C4\u03B5", -1, 1) }; private final static Among a_60[] = { new Among("\u03C3\u03B2", -1, 1), new Among("\u03B1\u03C3\u03B2", 0, 1), new Among("\u03B1\u03C0\u03BB", -1, 1), new Among("\u03B1\u03B5\u03B9\u03BC\u03BD", -1, 1), new Among("\u03C7\u03C1", -1, 1), new Among("\u03B1\u03C7\u03C1", 4, 1), new Among("\u03BA\u03BF\u03B9\u03BD\u03BF\u03C7\u03C1", 4, 1), new Among("\u03B4\u03C5\u03C3\u03C7\u03C1", 4, 1), new Among("\u03B5\u03C5\u03C7\u03C1", 4, 1), new Among("\u03C0\u03B1\u03BB\u03B9\u03BC\u03C8", -1, 1) }; private final static Among a_61[] = { new Among("\u03BF\u03C5\u03BD\u03B5", -1, 1), new Among("\u03B7\u03B8\u03BF\u03C5\u03BD\u03B5", 0, 1), new Among("\u03B7\u03C3\u03BF\u03C5\u03BD\u03B5", 0, 1) }; private final static Among a_62[] = { new Among("\u03C3\u03C0\u03B9", -1, 1), new Among("\u03BD", -1, 1), new Among("\u03B5\u03BE\u03C9\u03BD", 1, 1), new Among("\u03C1", -1, 1), new Among("\u03C3\u03C4\u03C1\u03B1\u03B2\u03BF\u03BC\u03BF\u03C5\u03C4\u03C3", -1, 1), new Among("\u03BA\u03B1\u03BA\u03BF\u03BC\u03BF\u03C5\u03C4\u03C3", -1, 1) }; private final static Among a_63[] = { new Among("\u03BF\u03C5\u03BC\u03B5", -1, 1), new Among("\u03B7\u03B8\u03BF\u03C5\u03BC\u03B5", 0, 1), new Among("\u03B7\u03C3\u03BF\u03C5\u03BC\u03B5", 0, 1) }; private final static Among a_64[] = { new Among("\u03B1\u03B6", -1, 1), new Among("\u03C9\u03C1\u03B9\u03BF\u03C0\u03BB", -1, 1), new Among("\u03B1\u03C3\u03BF\u03C5\u03C3", -1, 1), new Among("\u03C0\u03B1\u03C1\u03B1\u03C3\u03BF\u03C5\u03C3", 2, 1), new Among("\u03B1\u03BB\u03BB\u03BF\u03C3\u03BF\u03C5\u03C3", -1, 1), new Among("\u03C6", -1, 1), new Among("\u03C7", -1, 1) }; private final static Among a_65[] = { new Among("\u03BC\u03B1\u03C4\u03B1", -1, 1), new Among("\u03BC\u03B1\u03C4\u03C9\u03BD", -1, 1), new Among("\u03BC\u03B1\u03C4\u03BF\u03C3", -1, 1) }; private final static Among a_66[] = { new Among("\u03B1", -1, 1), new Among("\u03B9\u03BF\u03C5\u03BC\u03B1", 0, 1), new Among("\u03BF\u03BC\u03BF\u03C5\u03BD\u03B1", 0, 1), new Among("\u03B9\u03BF\u03BC\u03BF\u03C5\u03BD\u03B1", 2, 1), new Among("\u03BF\u03C3\u03BF\u03C5\u03BD\u03B1", 0, 1), new Among("\u03B9\u03BF\u03C3\u03BF\u03C5\u03BD\u03B1", 4, 1), new Among("\u03B5", -1, 1), new Among("\u03B1\u03B3\u03B1\u03C4\u03B5", 6, 1), new Among("\u03B7\u03BA\u03B1\u03C4\u03B5", 6, 1), new Among("\u03B7\u03B8\u03B7\u03BA\u03B1\u03C4\u03B5", 8, 1), new Among("\u03B7\u03C3\u03B1\u03C4\u03B5", 6, 1), new Among("\u03BF\u03C5\u03C3\u03B1\u03C4\u03B5", 6, 1), new Among("\u03B5\u03B9\u03C4\u03B5", 6, 1), new Among("\u03B7\u03B8\u03B5\u03B9\u03C4\u03B5", 12, 1), new Among("\u03B9\u03B5\u03BC\u03B1\u03C3\u03C4\u03B5", 6, 1), new Among("\u03BF\u03C5\u03BC\u03B1\u03C3\u03C4\u03B5", 6, 1), new Among("\u03B9\u03BF\u03C5\u03BC\u03B1\u03C3\u03C4\u03B5", 15, 1), new Among("\u03B9\u03B5\u03C3\u03B1\u03C3\u03C4\u03B5", 6, 1), new Among("\u03BF\u03C3\u03B1\u03C3\u03C4\u03B5", 6, 1), new Among("\u03B9\u03BF\u03C3\u03B1\u03C3\u03C4\u03B5", 18, 1), new Among("\u03B7", -1, 1), new Among("\u03B9", -1, 1), new Among("\u03B1\u03BC\u03B1\u03B9", 21, 1), new Among("\u03B9\u03B5\u03BC\u03B1\u03B9", 21, 1), new Among("\u03BF\u03BC\u03B1\u03B9", 21, 1), new Among("\u03BF\u03C5\u03BC\u03B1\u03B9", 21, 1), new Among("\u03B1\u03C3\u03B1\u03B9", 21, 1), new Among("\u03B5\u03C3\u03B1\u03B9", 21, 1), new Among("\u03B9\u03B5\u03C3\u03B1\u03B9", 27, 1), new Among("\u03B1\u03C4\u03B1\u03B9", 21, 1), new Among("\u03B5\u03C4\u03B1\u03B9", 21, 1), new Among("\u03B9\u03B5\u03C4\u03B1\u03B9", 30, 1), new Among("\u03BF\u03BD\u03C4\u03B1\u03B9", 21, 1), new Among("\u03BF\u03C5\u03BD\u03C4\u03B1\u03B9", 21, 1), new Among("\u03B9\u03BF\u03C5\u03BD\u03C4\u03B1\u03B9", 33, 1), new Among("\u03B5\u03B9", 21, 1), new Among("\u03B1\u03B5\u03B9", 35, 1), new Among("\u03B7\u03B8\u03B5\u03B9", 35, 1), new Among("\u03B7\u03C3\u03B5\u03B9", 35, 1), new Among("\u03BF\u03B9", 21, 1), new Among("\u03B1\u03BD", -1, 1), new Among("\u03B1\u03B3\u03B1\u03BD", 40, 1), new Among("\u03B7\u03BA\u03B1\u03BD", 40, 1), new Among("\u03B7\u03B8\u03B7\u03BA\u03B1\u03BD", 42, 1), new Among("\u03B7\u03C3\u03B1\u03BD", 40, 1), new Among("\u03BF\u03C5\u03C3\u03B1\u03BD", 40, 1), new Among("\u03BF\u03BD\u03C4\u03BF\u03C5\u03C3\u03B1\u03BD", 45, 1), new Among("\u03B9\u03BF\u03BD\u03C4\u03BF\u03C5\u03C3\u03B1\u03BD", 46, 1), new Among("\u03BF\u03BD\u03C4\u03B1\u03BD", 40, 1), new Among("\u03B9\u03BF\u03BD\u03C4\u03B1\u03BD", 48, 1), new Among("\u03BF\u03C5\u03BD\u03C4\u03B1\u03BD", 40, 1), new Among("\u03B9\u03BF\u03C5\u03BD\u03C4\u03B1\u03BD", 50, 1), new Among("\u03BF\u03C4\u03B1\u03BD", 40, 1), new Among("\u03B9\u03BF\u03C4\u03B1\u03BD", 52, 1), new Among("\u03BF\u03BC\u03B1\u03C3\u03C4\u03B1\u03BD", 40, 1), new Among("\u03B9\u03BF\u03BC\u03B1\u03C3\u03C4\u03B1\u03BD", 54, 1), new Among("\u03BF\u03C3\u03B1\u03C3\u03C4\u03B1\u03BD", 40, 1), new Among("\u03B9\u03BF\u03C3\u03B1\u03C3\u03C4\u03B1\u03BD", 56, 1), new Among("\u03BF\u03C5\u03BD", -1, 1), new Among("\u03B7\u03B8\u03BF\u03C5\u03BD", 58, 1), new Among("\u03BF\u03BC\u03BF\u03C5\u03BD", 58, 1), new Among("\u03B9\u03BF\u03BC\u03BF\u03C5\u03BD", 60, 1), new Among("\u03B7\u03C3\u03BF\u03C5\u03BD", 58, 1), new Among("\u03BF\u03C3\u03BF\u03C5\u03BD", 58, 1), new Among("\u03B9\u03BF\u03C3\u03BF\u03C5\u03BD", 63, 1), new Among("\u03C9\u03BD", -1, 1), new Among("\u03B7\u03B4\u03C9\u03BD", 65, 1), new Among("\u03BF", -1, 1), new Among("\u03B1\u03C3", -1, 1), new Among("\u03B5\u03C3", -1, 1), new Among("\u03B7\u03B4\u03B5\u03C3", 69, 1), new Among("\u03B7\u03C3\u03B5\u03C3", 69, 1), new Among("\u03B7\u03C3", -1, 1), new Among("\u03B5\u03B9\u03C3", -1, 1), new Among("\u03B7\u03B8\u03B5\u03B9\u03C3", 73, 1), new Among("\u03BF\u03C3", -1, 1), new Among("\u03C5\u03C3", -1, 1), new Among("\u03BF\u03C5\u03C3", 76, 1), new Among("\u03C5", -1, 1), new Among("\u03BF\u03C5", 78, 1), new Among("\u03C9", -1, 1), new Among("\u03B1\u03C9", 80, 1), new Among("\u03B7\u03B8\u03C9", 80, 1), new Among("\u03B7\u03C3\u03C9", 80, 1) }; private final static Among a_67[] = { new Among("\u03BF\u03C4\u03B5\u03C1", -1, 1), new Among("\u03B5\u03C3\u03C4\u03B5\u03C1", -1, 1), new Among("\u03C5\u03C4\u03B5\u03C1", -1, 1), new Among("\u03C9\u03C4\u03B5\u03C1", -1, 1), new Among("\u03BF\u03C4\u03B1\u03C4", -1, 1), new Among("\u03B5\u03C3\u03C4\u03B1\u03C4", -1, 1), new Among("\u03C5\u03C4\u03B1\u03C4", -1, 1), new Among("\u03C9\u03C4\u03B1\u03C4", -1, 1) }; private static final char g_v[] = {81, 65, 16, 1}; private static final char g_v2[] = {81, 65, 0, 1}; private boolean B_test1; private boolean r_has_min_length() { return current.length() >= 3; } private boolean r_tolower() { int among_var; while (true) { int v_1 = limit - cursor; lab0: { ket = cursor; among_var = find_among_b(a_0); bra = cursor; switch (among_var) { case 1: slice_from("\u03B1"); break; case 2: slice_from("\u03B2"); break; case 3: slice_from("\u03B3"); break; case 4: slice_from("\u03B4"); break; case 5: slice_from("\u03B5"); break; case 6: slice_from("\u03B6"); break; case 7: slice_from("\u03B7"); break; case 8: slice_from("\u03B8"); break; case 9: slice_from("\u03B9"); break; case 10: slice_from("\u03BA"); break; case 11: slice_from("\u03BB"); break; case 12: slice_from("\u03BC"); break; case 13: slice_from("\u03BD"); break; case 14: slice_from("\u03BE"); break; case 15: slice_from("\u03BF"); break; case 16: slice_from("\u03C0"); break; case 17: slice_from("\u03C1"); break; case 18: slice_from("\u03C3"); break; case 19: slice_from("\u03C4"); break; case 20: slice_from("\u03C5"); break; case 21: slice_from("\u03C6"); break; case 22: slice_from("\u03C7"); break; case 23: slice_from("\u03C8"); break; case 24: slice_from("\u03C9"); break; case 25: if (cursor <= limit_backward) { break lab0; } cursor--; break; } continue; } cursor = limit - v_1; break; } return true; } private boolean r_step1() { int among_var; ket = cursor; among_var = find_among_b(a_1); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: slice_from("\u03C6\u03B1"); break; case 2: slice_from("\u03C3\u03BA\u03B1"); break; case 3: slice_from("\u03BF\u03BB\u03BF"); break; case 4: slice_from("\u03C3\u03BF"); break; case 5: slice_from("\u03C4\u03B1\u03C4\u03BF"); break; case 6: slice_from("\u03BA\u03C1\u03B5"); break; case 7: slice_from("\u03C0\u03B5\u03C1"); break; case 8: slice_from("\u03C4\u03B5\u03C1"); break; case 9: slice_from("\u03C6\u03C9"); break; case 10: slice_from("\u03BA\u03B1\u03B8\u03B5\u03C3\u03C4"); break; case 11: slice_from("\u03B3\u03B5\u03B3\u03BF\u03BD"); break; } B_test1 = false; return true; } private boolean r_steps1() { int among_var; ket = cursor; if (find_among_b(a_3) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; ket = cursor; bra = cursor; among_var = find_among_b(a_2); if (among_var == 0) { return false; } if (cursor > limit_backward) { return false; } switch (among_var) { case 1: slice_from("\u03B9"); break; case 2: slice_from("\u03B9\u03B6"); break; } return true; } private boolean r_steps2() { ket = cursor; if (find_among_b(a_5) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; ket = cursor; bra = cursor; if (find_among_b(a_4) == 0) { return false; } if (cursor > limit_backward) { return false; } slice_from("\u03C9\u03BD"); return true; } private boolean r_steps3() { int among_var; ket = cursor; if (find_among_b(a_7) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; lab0: { int v_1 = limit - cursor; lab1: { if (!(eq_s_b("\u03B9\u03C3\u03B1"))) { break lab1; } if (cursor > limit_backward) { break lab1; } slice_from("\u03B9\u03C3"); break lab0; } cursor = limit - v_1; ket = cursor; bra = cursor; among_var = find_among_b(a_6); if (among_var == 0) { return false; } if (cursor > limit_backward) { return false; } switch (among_var) { case 1: slice_from("\u03B9"); break; case 2: slice_from("\u03B9\u03C3"); break; } } return true; } private boolean r_steps4() { ket = cursor; if (find_among_b(a_9) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; ket = cursor; bra = cursor; if (find_among_b(a_8) == 0) { return false; } if (cursor > limit_backward) { return false; } slice_from("\u03B9"); return true; } private boolean r_steps5() { int among_var; ket = cursor; if (find_among_b(a_11) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; ket = cursor; bra = cursor; among_var = find_among_b(a_10); if (among_var == 0) { return false; } if (cursor > limit_backward) { return false; } switch (among_var) { case 1: slice_from("\u03B9"); break; case 2: slice_from("\u03B9\u03C3\u03C4"); break; } return true; } private boolean r_steps6() { int among_var; ket = cursor; if (find_among_b(a_14) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; lab0: { int v_1 = limit - cursor; lab1: { ket = cursor; bra = cursor; among_var = find_among_b(a_12); if (among_var == 0) { break lab1; } if (cursor > limit_backward) { break lab1; } switch (among_var) { case 1: slice_from("\u03B9\u03C3\u03BC"); break; case 2: slice_from("\u03B9"); break; } break lab0; } cursor = limit - v_1; ket = cursor; among_var = find_among_b(a_13); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: slice_from("\u03B1\u03B3\u03BD\u03C9\u03C3\u03C4"); break; case 2: slice_from("\u03B1\u03C4\u03BF\u03BC"); break; case 3: slice_from("\u03B3\u03BD\u03C9\u03C3\u03C4"); break; case 4: slice_from("\u03B5\u03B8\u03BD"); break; case 5: slice_from("\u03B5\u03BA\u03BB\u03B5\u03BA\u03C4"); break; case 6: slice_from("\u03C3\u03BA\u03B5\u03C0\u03C4"); break; case 7: slice_from("\u03C4\u03BF\u03C0"); break; case 8: slice_from("\u03B1\u03BB\u03B5\u03BE\u03B1\u03BD\u03B4\u03C1"); break; case 9: slice_from("\u03B2\u03C5\u03B6\u03B1\u03BD\u03C4"); break; case 10: slice_from("\u03B8\u03B5\u03B1\u03C4\u03C1"); break; } } return true; } private boolean r_steps7() { ket = cursor; if (find_among_b(a_16) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; ket = cursor; bra = cursor; if (find_among_b(a_15) == 0) { return false; } if (cursor > limit_backward) { return false; } slice_from("\u03B1\u03C1\u03B1\u03BA"); return true; } private boolean r_steps8() { int among_var; ket = cursor; if (find_among_b(a_18) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; lab0: { int v_1 = limit - cursor; lab1: { ket = cursor; bra = cursor; among_var = find_among_b(a_17); if (among_var == 0) { break lab1; } if (cursor > limit_backward) { break lab1; } switch (among_var) { case 1: slice_from("\u03B1\u03BA"); break; case 2: slice_from("\u03B9\u03C4\u03C3"); break; } break lab0; } cursor = limit - v_1; ket = cursor; bra = cursor; if (!(eq_s_b("\u03BA\u03BF\u03C1"))) { return false; } slice_from("\u03B9\u03C4\u03C3"); } return true; } private boolean r_steps9() { ket = cursor; if (find_among_b(a_21) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; lab0: { int v_1 = limit - cursor; lab1: { ket = cursor; bra = cursor; if (find_among_b(a_19) == 0) { break lab1; } if (cursor > limit_backward) { break lab1; } slice_from("\u03B9\u03B4"); break lab0; } cursor = limit - v_1; ket = cursor; bra = cursor; if (find_among_b(a_20) == 0) { return false; } slice_from("\u03B9\u03B4"); } return true; } private boolean r_steps10() { ket = cursor; if (find_among_b(a_23) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; ket = cursor; bra = cursor; if (find_among_b(a_22) == 0) { return false; } if (cursor > limit_backward) { return false; } slice_from("\u03B9\u03C3\u03BA"); return true; } private boolean r_step2a() { ket = cursor; if (find_among_b(a_24) == 0) { return false; } bra = cursor; slice_del(); { int v_1 = limit - cursor; lab0: { if (find_among_b(a_25) == 0) { break lab0; } return false; } cursor = limit - v_1; } { int c = cursor; insert(cursor, cursor, "\u03B1\u03B4"); cursor = c; } return true; } private boolean r_step2b() { ket = cursor; if (find_among_b(a_26) == 0) { return false; } bra = cursor; slice_del(); ket = cursor; bra = cursor; if (find_among_b(a_27) == 0) { return false; } slice_from("\u03B5\u03B4"); return true; } private boolean r_step2c() { ket = cursor; if (find_among_b(a_28) == 0) { return false; } bra = cursor; slice_del(); ket = cursor; bra = cursor; if (find_among_b(a_29) == 0) { return false; } slice_from("\u03BF\u03C5\u03B4"); return true; } private boolean r_step2d() { ket = cursor; if (find_among_b(a_30) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; ket = cursor; bra = cursor; if (find_among_b(a_31) == 0) { return false; } if (cursor > limit_backward) { return false; } slice_from("\u03B5"); return true; } private boolean r_step3() { ket = cursor; if (find_among_b(a_32) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; ket = cursor; bra = cursor; if (!(in_grouping_b(g_v, 945, 969))) { return false; } slice_from("\u03B9"); return true; } private boolean r_step4() { ket = cursor; if (find_among_b(a_33) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; lab0: { int v_1 = limit - cursor; lab1: { ket = cursor; bra = cursor; if (!(in_grouping_b(g_v, 945, 969))) { break lab1; } slice_from("\u03B9\u03BA"); break lab0; } cursor = limit - v_1; ket = cursor; } bra = cursor; if (find_among_b(a_34) == 0) { return false; } if (cursor > limit_backward) { return false; } slice_from("\u03B9\u03BA"); return true; } private boolean r_step5a() { int v_1 = limit - cursor; lab0: { if (!(eq_s_b("\u03B1\u03B3\u03B1\u03BC\u03B5"))) { break lab0; } if (cursor > limit_backward) { break lab0; } slice_from("\u03B1\u03B3\u03B1\u03BC"); } cursor = limit - v_1; int v_2 = limit - cursor; lab1: { ket = cursor; if (find_among_b(a_35) == 0) { break lab1; } bra = cursor; slice_del(); B_test1 = false; } cursor = limit - v_2; ket = cursor; if (!(eq_s_b("\u03B1\u03BC\u03B5"))) { return false; } bra = cursor; slice_del(); B_test1 = false; ket = cursor; bra = cursor; if (find_among_b(a_36) == 0) { return false; } if (cursor > limit_backward) { return false; } slice_from("\u03B1\u03BC"); return true; } private boolean r_step5b() { int v_1 = limit - cursor; lab0: { ket = cursor; if (find_among_b(a_38) == 0) { break lab0; } bra = cursor; slice_del(); B_test1 = false; ket = cursor; bra = cursor; if (find_among_b(a_37) == 0) { break lab0; } if (cursor > limit_backward) { break lab0; } slice_from("\u03B1\u03B3\u03B1\u03BD"); } cursor = limit - v_1; ket = cursor; if (!(eq_s_b("\u03B1\u03BD\u03B5"))) { return false; } bra = cursor; slice_del(); B_test1 = false; lab1: { int v_2 = limit - cursor; lab2: { ket = cursor; bra = cursor; if (!(in_grouping_b(g_v2, 945, 969))) { break lab2; } slice_from("\u03B1\u03BD"); break lab1; } cursor = limit - v_2; ket = cursor; } bra = cursor; if (find_among_b(a_39) == 0) { return false; } if (cursor > limit_backward) { return false; } slice_from("\u03B1\u03BD"); return true; } private boolean r_step5c() { int v_1 = limit - cursor; lab0: { ket = cursor; if (find_among_b(a_40) == 0) { break lab0; } bra = cursor; slice_del(); B_test1 = false; } cursor = limit - v_1; ket = cursor; if (!(eq_s_b("\u03B5\u03C4\u03B5"))) { return false; } bra = cursor; slice_del(); B_test1 = false; lab1: { int v_2 = limit - cursor; lab2: { ket = cursor; bra = cursor; if (!(in_grouping_b(g_v2, 945, 969))) { break lab2; } slice_from("\u03B5\u03C4"); break lab1; } cursor = limit - v_2; lab3: { ket = cursor; bra = cursor; if (find_among_b(a_41) == 0) { break lab3; } slice_from("\u03B5\u03C4"); break lab1; } cursor = limit - v_2; ket = cursor; } bra = cursor; if (find_among_b(a_42) == 0) { return false; } if (cursor > limit_backward) { return false; } slice_from("\u03B5\u03C4"); return true; } private boolean r_step5d() { ket = cursor; if (find_among_b(a_43) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; lab0: { int v_1 = limit - cursor; lab1: { ket = cursor; bra = cursor; if (!(eq_s_b("\u03B1\u03C1\u03C7"))) { break lab1; } if (cursor > limit_backward) { break lab1; } slice_from("\u03BF\u03BD\u03C4"); break lab0; } cursor = limit - v_1; ket = cursor; bra = cursor; if (!(eq_s_b("\u03BA\u03C1\u03B5"))) { return false; } slice_from("\u03C9\u03BD\u03C4"); } return true; } private boolean r_step5e() { ket = cursor; if (find_among_b(a_44) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; ket = cursor; bra = cursor; if (!(eq_s_b("\u03BF\u03BD"))) { return false; } if (cursor > limit_backward) { return false; } slice_from("\u03BF\u03BC\u03B1\u03C3\u03C4"); return true; } private boolean r_step5f() { int v_1 = limit - cursor; lab0: { ket = cursor; if (!(eq_s_b("\u03B9\u03B5\u03C3\u03C4\u03B5"))) { break lab0; } bra = cursor; slice_del(); B_test1 = false; ket = cursor; bra = cursor; if (find_among_b(a_45) == 0) { break lab0; } if (cursor > limit_backward) { break lab0; } slice_from("\u03B9\u03B5\u03C3\u03C4"); } cursor = limit - v_1; ket = cursor; if (!(eq_s_b("\u03B5\u03C3\u03C4\u03B5"))) { return false; } bra = cursor; slice_del(); B_test1 = false; ket = cursor; bra = cursor; if (find_among_b(a_46) == 0) { return false; } if (cursor > limit_backward) { return false; } slice_from("\u03B9\u03B5\u03C3\u03C4"); return true; } private boolean r_step5g() { int v_1 = limit - cursor; lab0: { ket = cursor; if (find_among_b(a_47) == 0) { break lab0; } bra = cursor; slice_del(); B_test1 = false; } cursor = limit - v_1; ket = cursor; if (find_among_b(a_50) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; lab1: { int v_2 = limit - cursor; lab2: { ket = cursor; bra = cursor; if (find_among_b(a_48) == 0) { break lab2; } slice_from("\u03B7\u03BA"); break lab1; } cursor = limit - v_2; ket = cursor; bra = cursor; if (find_among_b(a_49) == 0) { return false; } if (cursor > limit_backward) { return false; } slice_from("\u03B7\u03BA"); } return true; } private boolean r_step5h() { ket = cursor; if (find_among_b(a_53) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; lab0: { int v_1 = limit - cursor; lab1: { ket = cursor; bra = cursor; if (find_among_b(a_51) == 0) { break lab1; } slice_from("\u03BF\u03C5\u03C3"); break lab0; } cursor = limit - v_1; ket = cursor; bra = cursor; if (find_among_b(a_52) == 0) { return false; } if (cursor > limit_backward) { return false; } slice_from("\u03BF\u03C5\u03C3"); } return true; } private boolean r_step5i() { int among_var; ket = cursor; if (find_among_b(a_56) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; lab0: { int v_1 = limit - cursor; lab1: { ket = cursor; bra = cursor; if (!(eq_s_b("\u03BA\u03BF\u03BB\u03BB"))) { break lab1; } slice_from("\u03B1\u03B3"); break lab0; } cursor = limit - v_1; lab2: { int v_2 = limit - cursor; lab3: { ket = cursor; bra = cursor; among_var = find_among_b(a_54); if (among_var == 0) { break lab3; } switch (among_var) { case 1: slice_from("\u03B1\u03B3"); break; } break lab2; } cursor = limit - v_2; ket = cursor; bra = cursor; if (find_among_b(a_55) == 0) { return false; } if (cursor > limit_backward) { return false; } slice_from("\u03B1\u03B3"); } } return true; } private boolean r_step5j() { ket = cursor; if (find_among_b(a_57) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; ket = cursor; bra = cursor; if (find_among_b(a_58) == 0) { return false; } if (cursor > limit_backward) { return false; } slice_from("\u03B7\u03C3"); return true; } private boolean r_step5k() { ket = cursor; if (find_among_b(a_59) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; ket = cursor; bra = cursor; if (find_among_b(a_60) == 0) { return false; } if (cursor > limit_backward) { return false; } slice_from("\u03B7\u03C3\u03C4"); return true; } private boolean r_step5l() { ket = cursor; if (find_among_b(a_61) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; ket = cursor; bra = cursor; if (find_among_b(a_62) == 0) { return false; } if (cursor > limit_backward) { return false; } slice_from("\u03BF\u03C5\u03BD"); return true; } private boolean r_step5m() { ket = cursor; if (find_among_b(a_63) == 0) { return false; } bra = cursor; slice_del(); B_test1 = false; ket = cursor; bra = cursor; if (find_among_b(a_64) == 0) { return false; } if (cursor > limit_backward) { return false; } slice_from("\u03BF\u03C5\u03BC"); return true; } private boolean r_step6() { int v_1 = limit - cursor; lab0: { ket = cursor; if (find_among_b(a_65) == 0) { break lab0; } bra = cursor; slice_from("\u03BC\u03B1"); } cursor = limit - v_1; if (!(B_test1)) { return false; } ket = cursor; if (find_among_b(a_66) == 0) { return false; } bra = cursor; slice_del(); return true; } private boolean r_step7() { ket = cursor; if (find_among_b(a_67) == 0) { return false; } bra = cursor; slice_del(); return true; } public boolean stem() { limit_backward = cursor; cursor = limit; int v_1 = limit - cursor; r_tolower(); cursor = limit - v_1; if (!r_has_min_length()) { return false; } B_test1 = true; int v_2 = limit - cursor; r_step1(); cursor = limit - v_2; int v_3 = limit - cursor; r_steps1(); cursor = limit - v_3; int v_4 = limit - cursor; r_steps2(); cursor = limit - v_4; int v_5 = limit - cursor; r_steps3(); cursor = limit - v_5; int v_6 = limit - cursor; r_steps4(); cursor = limit - v_6; int v_7 = limit - cursor; r_steps5(); cursor = limit - v_7; int v_8 = limit - cursor; r_steps6(); cursor = limit - v_8; int v_9 = limit - cursor; r_steps7(); cursor = limit - v_9; int v_10 = limit - cursor; r_steps8(); cursor = limit - v_10; int v_11 = limit - cursor; r_steps9(); cursor = limit - v_11; int v_12 = limit - cursor; r_steps10(); cursor = limit - v_12; int v_13 = limit - cursor; r_step2a(); cursor = limit - v_13; int v_14 = limit - cursor; r_step2b(); cursor = limit - v_14; int v_15 = limit - cursor; r_step2c(); cursor = limit - v_15; int v_16 = limit - cursor; r_step2d(); cursor = limit - v_16; int v_17 = limit - cursor; r_step3(); cursor = limit - v_17; int v_18 = limit - cursor; r_step4(); cursor = limit - v_18; int v_19 = limit - cursor; r_step5a(); cursor = limit - v_19; int v_20 = limit - cursor; r_step5b(); cursor = limit - v_20; int v_21 = limit - cursor; r_step5c(); cursor = limit - v_21; int v_22 = limit - cursor; r_step5d(); cursor = limit - v_22; int v_23 = limit - cursor; r_step5e(); cursor = limit - v_23; int v_24 = limit - cursor; r_step5f(); cursor = limit - v_24; int v_25 = limit - cursor; r_step5g(); cursor = limit - v_25; int v_26 = limit - cursor; r_step5h(); cursor = limit - v_26; int v_27 = limit - cursor; r_step5j(); cursor = limit - v_27; int v_28 = limit - cursor; r_step5i(); cursor = limit - v_28; int v_29 = limit - cursor; r_step5k(); cursor = limit - v_29; int v_30 = limit - cursor; r_step5l(); cursor = limit - v_30; int v_31 = limit - cursor; r_step5m(); cursor = limit - v_31; int v_32 = limit - cursor; r_step6(); cursor = limit - v_32; int v_33 = limit - cursor; r_step7(); cursor = limit - v_33; cursor = limit_backward; return true; } @Override public boolean equals(Object o) { return o instanceof greekStemmer; } @Override public int hashCode() { return greekStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000163 14523004075 032663 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/hungarianStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/hungarianStemmer0100644 0000000 0000000 00000036300 14523004075 034350 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class hungarianStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("cs", -1, -1), new Among("dzs", -1, -1), new Among("gy", -1, -1), new Among("ly", -1, -1), new Among("ny", -1, -1), new Among("sz", -1, -1), new Among("ty", -1, -1), new Among("zs", -1, -1) }; private final static Among a_1[] = { new Among("\u00E1", -1, 1), new Among("\u00E9", -1, 2) }; private final static Among a_2[] = { new Among("bb", -1, -1), new Among("cc", -1, -1), new Among("dd", -1, -1), new Among("ff", -1, -1), new Among("gg", -1, -1), new Among("jj", -1, -1), new Among("kk", -1, -1), new Among("ll", -1, -1), new Among("mm", -1, -1), new Among("nn", -1, -1), new Among("pp", -1, -1), new Among("rr", -1, -1), new Among("ccs", -1, -1), new Among("ss", -1, -1), new Among("zzs", -1, -1), new Among("tt", -1, -1), new Among("vv", -1, -1), new Among("ggy", -1, -1), new Among("lly", -1, -1), new Among("nny", -1, -1), new Among("tty", -1, -1), new Among("ssz", -1, -1), new Among("zz", -1, -1) }; private final static Among a_3[] = { new Among("al", -1, 1), new Among("el", -1, 1) }; private final static Among a_4[] = { new Among("ba", -1, -1), new Among("ra", -1, -1), new Among("be", -1, -1), new Among("re", -1, -1), new Among("ig", -1, -1), new Among("nak", -1, -1), new Among("nek", -1, -1), new Among("val", -1, -1), new Among("vel", -1, -1), new Among("ul", -1, -1), new Among("n\u00E1l", -1, -1), new Among("n\u00E9l", -1, -1), new Among("b\u00F3l", -1, -1), new Among("r\u00F3l", -1, -1), new Among("t\u00F3l", -1, -1), new Among("\u00FCl", -1, -1), new Among("b\u0151l", -1, -1), new Among("r\u0151l", -1, -1), new Among("t\u0151l", -1, -1), new Among("n", -1, -1), new Among("an", 19, -1), new Among("ban", 20, -1), new Among("en", 19, -1), new Among("ben", 22, -1), new Among("k\u00E9ppen", 22, -1), new Among("on", 19, -1), new Among("\u00F6n", 19, -1), new Among("k\u00E9pp", -1, -1), new Among("kor", -1, -1), new Among("t", -1, -1), new Among("at", 29, -1), new Among("et", 29, -1), new Among("k\u00E9nt", 29, -1), new Among("ank\u00E9nt", 32, -1), new Among("enk\u00E9nt", 32, -1), new Among("onk\u00E9nt", 32, -1), new Among("ot", 29, -1), new Among("\u00E9rt", 29, -1), new Among("\u00F6t", 29, -1), new Among("hez", -1, -1), new Among("hoz", -1, -1), new Among("h\u00F6z", -1, -1), new Among("v\u00E1", -1, -1), new Among("v\u00E9", -1, -1) }; private final static Among a_5[] = { new Among("\u00E1n", -1, 2), new Among("\u00E9n", -1, 1), new Among("\u00E1nk\u00E9nt", -1, 2) }; private final static Among a_6[] = { new Among("stul", -1, 1), new Among("astul", 0, 1), new Among("\u00E1stul", 0, 2), new Among("st\u00FCl", -1, 1), new Among("est\u00FCl", 3, 1), new Among("\u00E9st\u00FCl", 3, 3) }; private final static Among a_7[] = { new Among("\u00E1", -1, 1), new Among("\u00E9", -1, 1) }; private final static Among a_8[] = { new Among("k", -1, 3), new Among("ak", 0, 3), new Among("ek", 0, 3), new Among("ok", 0, 3), new Among("\u00E1k", 0, 1), new Among("\u00E9k", 0, 2), new Among("\u00F6k", 0, 3) }; private final static Among a_9[] = { new Among("\u00E9i", -1, 1), new Among("\u00E1\u00E9i", 0, 3), new Among("\u00E9\u00E9i", 0, 2), new Among("\u00E9", -1, 1), new Among("k\u00E9", 3, 1), new Among("ak\u00E9", 4, 1), new Among("ek\u00E9", 4, 1), new Among("ok\u00E9", 4, 1), new Among("\u00E1k\u00E9", 4, 3), new Among("\u00E9k\u00E9", 4, 2), new Among("\u00F6k\u00E9", 4, 1), new Among("\u00E9\u00E9", 3, 2) }; private final static Among a_10[] = { new Among("a", -1, 1), new Among("ja", 0, 1), new Among("d", -1, 1), new Among("ad", 2, 1), new Among("ed", 2, 1), new Among("od", 2, 1), new Among("\u00E1d", 2, 2), new Among("\u00E9d", 2, 3), new Among("\u00F6d", 2, 1), new Among("e", -1, 1), new Among("je", 9, 1), new Among("nk", -1, 1), new Among("unk", 11, 1), new Among("\u00E1nk", 11, 2), new Among("\u00E9nk", 11, 3), new Among("\u00FCnk", 11, 1), new Among("uk", -1, 1), new Among("juk", 16, 1), new Among("\u00E1juk", 17, 2), new Among("\u00FCk", -1, 1), new Among("j\u00FCk", 19, 1), new Among("\u00E9j\u00FCk", 20, 3), new Among("m", -1, 1), new Among("am", 22, 1), new Among("em", 22, 1), new Among("om", 22, 1), new Among("\u00E1m", 22, 2), new Among("\u00E9m", 22, 3), new Among("o", -1, 1), new Among("\u00E1", -1, 2), new Among("\u00E9", -1, 3) }; private final static Among a_11[] = { new Among("id", -1, 1), new Among("aid", 0, 1), new Among("jaid", 1, 1), new Among("eid", 0, 1), new Among("jeid", 3, 1), new Among("\u00E1id", 0, 2), new Among("\u00E9id", 0, 3), new Among("i", -1, 1), new Among("ai", 7, 1), new Among("jai", 8, 1), new Among("ei", 7, 1), new Among("jei", 10, 1), new Among("\u00E1i", 7, 2), new Among("\u00E9i", 7, 3), new Among("itek", -1, 1), new Among("eitek", 14, 1), new Among("jeitek", 15, 1), new Among("\u00E9itek", 14, 3), new Among("ik", -1, 1), new Among("aik", 18, 1), new Among("jaik", 19, 1), new Among("eik", 18, 1), new Among("jeik", 21, 1), new Among("\u00E1ik", 18, 2), new Among("\u00E9ik", 18, 3), new Among("ink", -1, 1), new Among("aink", 25, 1), new Among("jaink", 26, 1), new Among("eink", 25, 1), new Among("jeink", 28, 1), new Among("\u00E1ink", 25, 2), new Among("\u00E9ink", 25, 3), new Among("aitok", -1, 1), new Among("jaitok", 32, 1), new Among("\u00E1itok", -1, 2), new Among("im", -1, 1), new Among("aim", 35, 1), new Among("jaim", 36, 1), new Among("eim", 35, 1), new Among("jeim", 38, 1), new Among("\u00E1im", 35, 2), new Among("\u00E9im", 35, 3) }; private static final char g_v[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 36, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1}; private int I_p1; private boolean r_mark_regions() { I_p1 = limit; lab0: { int v_1 = cursor; lab1: { if (!(in_grouping(g_v, 97, 369))) { break lab1; } golab2: while (true) { int v_2 = cursor; lab3: { if (!(out_grouping(g_v, 97, 369))) { break lab3; } cursor = v_2; break golab2; } cursor = v_2; if (cursor >= limit) { break lab1; } cursor++; } lab4: { int v_3 = cursor; lab5: { if (find_among(a_0) == 0) { break lab5; } break lab4; } cursor = v_3; if (cursor >= limit) { break lab1; } cursor++; } I_p1 = cursor; break lab0; } cursor = v_1; if (!(out_grouping(g_v, 97, 369))) { return false; } golab6: while (true) { lab7: { if (!(in_grouping(g_v, 97, 369))) { break lab7; } break golab6; } if (cursor >= limit) { return false; } cursor++; } I_p1 = cursor; } return true; } private boolean r_R1() { return I_p1 <= cursor; } private boolean r_v_ending() { int among_var; ket = cursor; among_var = find_among_b(a_1); if (among_var == 0) { return false; } bra = cursor; if (!r_R1()) { return false; } switch (among_var) { case 1: slice_from("a"); break; case 2: slice_from("e"); break; } return true; } private boolean r_double() { int v_1 = limit - cursor; if (find_among_b(a_2) == 0) { return false; } cursor = limit - v_1; return true; } private boolean r_undouble() { if (cursor <= limit_backward) { return false; } cursor--; ket = cursor; { int c = cursor - 1; if (c < limit_backward) { return false; } cursor = c; } bra = cursor; slice_del(); return true; } private boolean r_instrum() { ket = cursor; if (find_among_b(a_3) == 0) { return false; } bra = cursor; if (!r_R1()) { return false; } if (!r_double()) { return false; } slice_del(); if (!r_undouble()) { return false; } return true; } private boolean r_case() { ket = cursor; if (find_among_b(a_4) == 0) { return false; } bra = cursor; if (!r_R1()) { return false; } slice_del(); if (!r_v_ending()) { return false; } return true; } private boolean r_case_special() { int among_var; ket = cursor; among_var = find_among_b(a_5); if (among_var == 0) { return false; } bra = cursor; if (!r_R1()) { return false; } switch (among_var) { case 1: slice_from("e"); break; case 2: slice_from("a"); break; } return true; } private boolean r_case_other() { int among_var; ket = cursor; among_var = find_among_b(a_6); if (among_var == 0) { return false; } bra = cursor; if (!r_R1()) { return false; } switch (among_var) { case 1: slice_del(); break; case 2: slice_from("a"); break; case 3: slice_from("e"); break; } return true; } private boolean r_factive() { ket = cursor; if (find_among_b(a_7) == 0) { return false; } bra = cursor; if (!r_R1()) { return false; } if (!r_double()) { return false; } slice_del(); if (!r_undouble()) { return false; } return true; } private boolean r_plural() { int among_var; ket = cursor; among_var = find_among_b(a_8); if (among_var == 0) { return false; } bra = cursor; if (!r_R1()) { return false; } switch (among_var) { case 1: slice_from("a"); break; case 2: slice_from("e"); break; case 3: slice_del(); break; } return true; } private boolean r_owned() { int among_var; ket = cursor; among_var = find_among_b(a_9); if (among_var == 0) { return false; } bra = cursor; if (!r_R1()) { return false; } switch (among_var) { case 1: slice_del(); break; case 2: slice_from("e"); break; case 3: slice_from("a"); break; } return true; } private boolean r_sing_owner() { int among_var; ket = cursor; among_var = find_among_b(a_10); if (among_var == 0) { return false; } bra = cursor; if (!r_R1()) { return false; } switch (among_var) { case 1: slice_del(); break; case 2: slice_from("a"); break; case 3: slice_from("e"); break; } return true; } private boolean r_plur_owner() { int among_var; ket = cursor; among_var = find_among_b(a_11); if (among_var == 0) { return false; } bra = cursor; if (!r_R1()) { return false; } switch (among_var) { case 1: slice_del(); break; case 2: slice_from("a"); break; case 3: slice_from("e"); break; } return true; } public boolean stem() { int v_1 = cursor; r_mark_regions(); cursor = v_1; limit_backward = cursor; cursor = limit; int v_2 = limit - cursor; r_instrum(); cursor = limit - v_2; int v_3 = limit - cursor; r_case(); cursor = limit - v_3; int v_4 = limit - cursor; r_case_special(); cursor = limit - v_4; int v_5 = limit - cursor; r_case_other(); cursor = limit - v_5; int v_6 = limit - cursor; r_factive(); cursor = limit - v_6; int v_7 = limit - cursor; r_owned(); cursor = limit - v_7; int v_8 = limit - cursor; r_sing_owner(); cursor = limit - v_8; int v_9 = limit - cursor; r_plur_owner(); cursor = limit - v_9; int v_10 = limit - cursor; r_plural(); cursor = limit - v_10; cursor = limit_backward; return true; } @Override public boolean equals(Object o) { return o instanceof hungarianStemmer; } @Override public int hashCode() { return hungarianStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000164 14523004075 032664 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/indonesianStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/indonesianStemme0100644 0000000 0000000 00000022213 14523004075 034337 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2010, Israel Olalla Copyright (c) 2010, ISOCO All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class indonesianStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("kah", -1, 1), new Among("lah", -1, 1), new Among("pun", -1, 1) }; private final static Among a_1[] = { new Among("nya", -1, 1), new Among("ku", -1, 1), new Among("mu", -1, 1) }; private final static Among a_2[] = { new Among("i", -1, 1, "r_SUFFIX_I_OK", indonesianStemmer.class), new Among("an", -1, 1, "r_SUFFIX_AN_OK", indonesianStemmer.class), new Among("kan", 1, 1, "r_SUFFIX_KAN_OK", indonesianStemmer.class) }; private final static Among a_3[] = { new Among("di", -1, 1), new Among("ke", -1, 2), new Among("me", -1, 1), new Among("mem", 2, 5), new Among("men", 2, 1), new Among("meng", 4, 1), new Among("meny", 4, 3, "r_VOWEL", indonesianStemmer.class), new Among("pem", -1, 6), new Among("pen", -1, 2), new Among("peng", 8, 2), new Among("peny", 8, 4, "r_VOWEL", indonesianStemmer.class), new Among("ter", -1, 1) }; private final static Among a_4[] = { new Among("be", -1, 3, "r_KER", indonesianStemmer.class), new Among("belajar", 0, 4), new Among("ber", 0, 3), new Among("pe", -1, 1), new Among("pelajar", 3, 2), new Among("per", 3, 1) }; private static final char g_vowel[] = {17, 65, 16}; private int I_prefix; private int I_measure; private boolean r_remove_particle() { ket = cursor; if (find_among_b(a_0) == 0) { return false; } bra = cursor; slice_del(); I_measure -= 1; return true; } private boolean r_remove_possessive_pronoun() { ket = cursor; if (find_among_b(a_1) == 0) { return false; } bra = cursor; slice_del(); I_measure -= 1; return true; } public boolean r_SUFFIX_KAN_OK() { if (I_prefix == 3) { return false; } if (I_prefix == 2) { return false; } return true; } public boolean r_SUFFIX_AN_OK() { return I_prefix != 1; } public boolean r_SUFFIX_I_OK() { if (I_prefix > 2) { return false; } { int v_1 = limit - cursor; lab0: { if (!(eq_s_b("s"))) { break lab0; } return false; } cursor = limit - v_1; } return true; } private boolean r_remove_suffix() { ket = cursor; if (find_among_b(a_2) == 0) { return false; } bra = cursor; slice_del(); I_measure -= 1; return true; } public boolean r_VOWEL() { if (!(in_grouping(g_vowel, 97, 117))) { return false; } return true; } public boolean r_KER() { if (!(out_grouping(g_vowel, 97, 117))) { return false; } if (!(eq_s("er"))) { return false; } return true; } private boolean r_remove_first_order_prefix() { int among_var; bra = cursor; among_var = find_among(a_3); if (among_var == 0) { return false; } ket = cursor; switch (among_var) { case 1: slice_del(); I_prefix = 1; I_measure -= 1; break; case 2: slice_del(); I_prefix = 3; I_measure -= 1; break; case 3: I_prefix = 1; slice_from("s"); I_measure -= 1; break; case 4: I_prefix = 3; slice_from("s"); I_measure -= 1; break; case 5: I_prefix = 1; I_measure -= 1; lab0: { int v_1 = cursor; lab1: { int v_2 = cursor; if (!(in_grouping(g_vowel, 97, 117))) { break lab1; } cursor = v_2; slice_from("p"); break lab0; } cursor = v_1; slice_del(); } break; case 6: I_prefix = 3; I_measure -= 1; lab2: { int v_3 = cursor; lab3: { int v_4 = cursor; if (!(in_grouping(g_vowel, 97, 117))) { break lab3; } cursor = v_4; slice_from("p"); break lab2; } cursor = v_3; slice_del(); } break; } return true; } private boolean r_remove_second_order_prefix() { int among_var; bra = cursor; among_var = find_among(a_4); if (among_var == 0) { return false; } ket = cursor; switch (among_var) { case 1: slice_del(); I_prefix = 2; I_measure -= 1; break; case 2: slice_from("ajar"); I_measure -= 1; break; case 3: slice_del(); I_prefix = 4; I_measure -= 1; break; case 4: slice_from("ajar"); I_prefix = 4; I_measure -= 1; break; } return true; } public boolean stem() { I_measure = 0; int v_1 = cursor; lab0: { while (true) { int v_2 = cursor; lab1: { golab2: while (true) { lab3: { if (!(in_grouping(g_vowel, 97, 117))) { break lab3; } break golab2; } if (cursor >= limit) { break lab1; } cursor++; } I_measure += 1; continue; } cursor = v_2; break; } } cursor = v_1; if (I_measure <= 2) { return false; } I_prefix = 0; limit_backward = cursor; cursor = limit; int v_4 = limit - cursor; r_remove_particle(); cursor = limit - v_4; if (I_measure <= 2) { return false; } int v_5 = limit - cursor; r_remove_possessive_pronoun(); cursor = limit - v_5; cursor = limit_backward; if (I_measure <= 2) { return false; } lab4: { int v_6 = cursor; lab5: { int v_7 = cursor; if (!r_remove_first_order_prefix()) { break lab5; } int v_8 = cursor; lab6: { int v_9 = cursor; if (I_measure <= 2) { break lab6; } limit_backward = cursor; cursor = limit; if (!r_remove_suffix()) { break lab6; } cursor = limit_backward; cursor = v_9; if (I_measure <= 2) { break lab6; } if (!r_remove_second_order_prefix()) { break lab6; } } cursor = v_8; cursor = v_7; break lab4; } cursor = v_6; int v_10 = cursor; r_remove_second_order_prefix(); cursor = v_10; int v_11 = cursor; lab7: { if (I_measure <= 2) { break lab7; } limit_backward = cursor; cursor = limit; if (!r_remove_suffix()) { break lab7; } cursor = limit_backward; } cursor = v_11; } return true; } @Override public boolean equals(Object o) { return o instanceof indonesianStemmer; } @Override public int hashCode() { return indonesianStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000157 14523004075 032666 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/irishStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/irishStemmer.jav0100644 0000000 0000000 00000022220 14523004075 034265 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class irishStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("b'", -1, 1), new Among("bh", -1, 4), new Among("bhf", 1, 2), new Among("bp", -1, 8), new Among("ch", -1, 5), new Among("d'", -1, 1), new Among("d'fh", 5, 2), new Among("dh", -1, 6), new Among("dt", -1, 9), new Among("fh", -1, 2), new Among("gc", -1, 5), new Among("gh", -1, 7), new Among("h-", -1, 1), new Among("m'", -1, 1), new Among("mb", -1, 4), new Among("mh", -1, 10), new Among("n-", -1, 1), new Among("nd", -1, 6), new Among("ng", -1, 7), new Among("ph", -1, 8), new Among("sh", -1, 3), new Among("t-", -1, 1), new Among("th", -1, 9), new Among("ts", -1, 3) }; private final static Among a_1[] = { new Among("\u00EDochta", -1, 1), new Among("a\u00EDochta", 0, 1), new Among("ire", -1, 2), new Among("aire", 2, 2), new Among("abh", -1, 1), new Among("eabh", 4, 1), new Among("ibh", -1, 1), new Among("aibh", 6, 1), new Among("amh", -1, 1), new Among("eamh", 8, 1), new Among("imh", -1, 1), new Among("aimh", 10, 1), new Among("\u00EDocht", -1, 1), new Among("a\u00EDocht", 12, 1), new Among("ir\u00ED", -1, 2), new Among("air\u00ED", 14, 2) }; private final static Among a_2[] = { new Among("\u00F3ideacha", -1, 6), new Among("patacha", -1, 5), new Among("achta", -1, 1), new Among("arcachta", 2, 2), new Among("eachta", 2, 1), new Among("grafa\u00EDochta", -1, 4), new Among("paite", -1, 5), new Among("ach", -1, 1), new Among("each", 7, 1), new Among("\u00F3ideach", 8, 6), new Among("gineach", 8, 3), new Among("patach", 7, 5), new Among("grafa\u00EDoch", -1, 4), new Among("pataigh", -1, 5), new Among("\u00F3idigh", -1, 6), new Among("acht\u00FAil", -1, 1), new Among("eacht\u00FAil", 15, 1), new Among("gineas", -1, 3), new Among("ginis", -1, 3), new Among("acht", -1, 1), new Among("arcacht", 19, 2), new Among("eacht", 19, 1), new Among("grafa\u00EDocht", -1, 4), new Among("arcachta\u00ED", -1, 2), new Among("grafa\u00EDochta\u00ED", -1, 4) }; private final static Among a_3[] = { new Among("imid", -1, 1), new Among("aimid", 0, 1), new Among("\u00EDmid", -1, 1), new Among("a\u00EDmid", 2, 1), new Among("adh", -1, 2), new Among("eadh", 4, 2), new Among("faidh", -1, 1), new Among("fidh", -1, 1), new Among("\u00E1il", -1, 2), new Among("ain", -1, 2), new Among("tear", -1, 2), new Among("tar", -1, 2) }; private static final char g_v[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 2}; private int I_p2; private int I_p1; private int I_pV; private boolean r_mark_regions() { I_pV = limit; I_p1 = limit; I_p2 = limit; int v_1 = cursor; lab0: { golab1: while (true) { lab2: { if (!(in_grouping(g_v, 97, 250))) { break lab2; } break golab1; } if (cursor >= limit) { break lab0; } cursor++; } I_pV = cursor; golab3: while (true) { lab4: { if (!(out_grouping(g_v, 97, 250))) { break lab4; } break golab3; } if (cursor >= limit) { break lab0; } cursor++; } I_p1 = cursor; golab5: while (true) { lab6: { if (!(in_grouping(g_v, 97, 250))) { break lab6; } break golab5; } if (cursor >= limit) { break lab0; } cursor++; } golab7: while (true) { lab8: { if (!(out_grouping(g_v, 97, 250))) { break lab8; } break golab7; } if (cursor >= limit) { break lab0; } cursor++; } I_p2 = cursor; } cursor = v_1; return true; } private boolean r_initial_morph() { int among_var; bra = cursor; among_var = find_among(a_0); if (among_var == 0) { return false; } ket = cursor; switch (among_var) { case 1: slice_del(); break; case 2: slice_from("f"); break; case 3: slice_from("s"); break; case 4: slice_from("b"); break; case 5: slice_from("c"); break; case 6: slice_from("d"); break; case 7: slice_from("g"); break; case 8: slice_from("p"); break; case 9: slice_from("t"); break; case 10: slice_from("m"); break; } return true; } private boolean r_RV() { return I_pV <= cursor; } private boolean r_R1() { return I_p1 <= cursor; } private boolean r_R2() { return I_p2 <= cursor; } private boolean r_noun_sfx() { int among_var; ket = cursor; among_var = find_among_b(a_1); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: if (!r_R1()) { return false; } slice_del(); break; case 2: if (!r_R2()) { return false; } slice_del(); break; } return true; } private boolean r_deriv() { int among_var; ket = cursor; among_var = find_among_b(a_2); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: if (!r_R2()) { return false; } slice_del(); break; case 2: slice_from("arc"); break; case 3: slice_from("gin"); break; case 4: slice_from("graf"); break; case 5: slice_from("paite"); break; case 6: slice_from("\u00F3id"); break; } return true; } private boolean r_verb_sfx() { int among_var; ket = cursor; among_var = find_among_b(a_3); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: if (!r_RV()) { return false; } slice_del(); break; case 2: if (!r_R1()) { return false; } slice_del(); break; } return true; } public boolean stem() { int v_1 = cursor; r_initial_morph(); cursor = v_1; r_mark_regions(); limit_backward = cursor; cursor = limit; int v_3 = limit - cursor; r_noun_sfx(); cursor = limit - v_3; int v_4 = limit - cursor; r_deriv(); cursor = limit - v_4; int v_5 = limit - cursor; r_verb_sfx(); cursor = limit - v_5; cursor = limit_backward; return true; } @Override public boolean equals(Object o) { return o instanceof irishStemmer; } @Override public int hashCode() { return irishStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000161 14523004075 032661 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/italianStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/italianStemmer.j0100644 0000000 0000000 00000052722 14523004075 034253 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class italianStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("", -1, 7), new Among("qu", 0, 6), new Among("\u00E1", 0, 1), new Among("\u00E9", 0, 2), new Among("\u00ED", 0, 3), new Among("\u00F3", 0, 4), new Among("\u00FA", 0, 5) }; private final static Among a_1[] = { new Among("", -1, 3), new Among("I", 0, 1), new Among("U", 0, 2) }; private final static Among a_2[] = { new Among("la", -1, -1), new Among("cela", 0, -1), new Among("gliela", 0, -1), new Among("mela", 0, -1), new Among("tela", 0, -1), new Among("vela", 0, -1), new Among("le", -1, -1), new Among("cele", 6, -1), new Among("gliele", 6, -1), new Among("mele", 6, -1), new Among("tele", 6, -1), new Among("vele", 6, -1), new Among("ne", -1, -1), new Among("cene", 12, -1), new Among("gliene", 12, -1), new Among("mene", 12, -1), new Among("sene", 12, -1), new Among("tene", 12, -1), new Among("vene", 12, -1), new Among("ci", -1, -1), new Among("li", -1, -1), new Among("celi", 20, -1), new Among("glieli", 20, -1), new Among("meli", 20, -1), new Among("teli", 20, -1), new Among("veli", 20, -1), new Among("gli", 20, -1), new Among("mi", -1, -1), new Among("si", -1, -1), new Among("ti", -1, -1), new Among("vi", -1, -1), new Among("lo", -1, -1), new Among("celo", 31, -1), new Among("glielo", 31, -1), new Among("melo", 31, -1), new Among("telo", 31, -1), new Among("velo", 31, -1) }; private final static Among a_3[] = { new Among("ando", -1, 1), new Among("endo", -1, 1), new Among("ar", -1, 2), new Among("er", -1, 2), new Among("ir", -1, 2) }; private final static Among a_4[] = { new Among("ic", -1, -1), new Among("abil", -1, -1), new Among("os", -1, -1), new Among("iv", -1, 1) }; private final static Among a_5[] = { new Among("ic", -1, 1), new Among("abil", -1, 1), new Among("iv", -1, 1) }; private final static Among a_6[] = { new Among("ica", -1, 1), new Among("logia", -1, 3), new Among("osa", -1, 1), new Among("ista", -1, 1), new Among("iva", -1, 9), new Among("anza", -1, 1), new Among("enza", -1, 5), new Among("ice", -1, 1), new Among("atrice", 7, 1), new Among("iche", -1, 1), new Among("logie", -1, 3), new Among("abile", -1, 1), new Among("ibile", -1, 1), new Among("usione", -1, 4), new Among("azione", -1, 2), new Among("uzione", -1, 4), new Among("atore", -1, 2), new Among("ose", -1, 1), new Among("ante", -1, 1), new Among("mente", -1, 1), new Among("amente", 19, 7), new Among("iste", -1, 1), new Among("ive", -1, 9), new Among("anze", -1, 1), new Among("enze", -1, 5), new Among("ici", -1, 1), new Among("atrici", 25, 1), new Among("ichi", -1, 1), new Among("abili", -1, 1), new Among("ibili", -1, 1), new Among("ismi", -1, 1), new Among("usioni", -1, 4), new Among("azioni", -1, 2), new Among("uzioni", -1, 4), new Among("atori", -1, 2), new Among("osi", -1, 1), new Among("anti", -1, 1), new Among("amenti", -1, 6), new Among("imenti", -1, 6), new Among("isti", -1, 1), new Among("ivi", -1, 9), new Among("ico", -1, 1), new Among("ismo", -1, 1), new Among("oso", -1, 1), new Among("amento", -1, 6), new Among("imento", -1, 6), new Among("ivo", -1, 9), new Among("it\u00E0", -1, 8), new Among("ist\u00E0", -1, 1), new Among("ist\u00E8", -1, 1), new Among("ist\u00EC", -1, 1) }; private final static Among a_7[] = { new Among("isca", -1, 1), new Among("enda", -1, 1), new Among("ata", -1, 1), new Among("ita", -1, 1), new Among("uta", -1, 1), new Among("ava", -1, 1), new Among("eva", -1, 1), new Among("iva", -1, 1), new Among("erebbe", -1, 1), new Among("irebbe", -1, 1), new Among("isce", -1, 1), new Among("ende", -1, 1), new Among("are", -1, 1), new Among("ere", -1, 1), new Among("ire", -1, 1), new Among("asse", -1, 1), new Among("ate", -1, 1), new Among("avate", 16, 1), new Among("evate", 16, 1), new Among("ivate", 16, 1), new Among("ete", -1, 1), new Among("erete", 20, 1), new Among("irete", 20, 1), new Among("ite", -1, 1), new Among("ereste", -1, 1), new Among("ireste", -1, 1), new Among("ute", -1, 1), new Among("erai", -1, 1), new Among("irai", -1, 1), new Among("isci", -1, 1), new Among("endi", -1, 1), new Among("erei", -1, 1), new Among("irei", -1, 1), new Among("assi", -1, 1), new Among("ati", -1, 1), new Among("iti", -1, 1), new Among("eresti", -1, 1), new Among("iresti", -1, 1), new Among("uti", -1, 1), new Among("avi", -1, 1), new Among("evi", -1, 1), new Among("ivi", -1, 1), new Among("isco", -1, 1), new Among("ando", -1, 1), new Among("endo", -1, 1), new Among("Yamo", -1, 1), new Among("iamo", -1, 1), new Among("avamo", -1, 1), new Among("evamo", -1, 1), new Among("ivamo", -1, 1), new Among("eremo", -1, 1), new Among("iremo", -1, 1), new Among("assimo", -1, 1), new Among("ammo", -1, 1), new Among("emmo", -1, 1), new Among("eremmo", 54, 1), new Among("iremmo", 54, 1), new Among("immo", -1, 1), new Among("ano", -1, 1), new Among("iscano", 58, 1), new Among("avano", 58, 1), new Among("evano", 58, 1), new Among("ivano", 58, 1), new Among("eranno", -1, 1), new Among("iranno", -1, 1), new Among("ono", -1, 1), new Among("iscono", 65, 1), new Among("arono", 65, 1), new Among("erono", 65, 1), new Among("irono", 65, 1), new Among("erebbero", -1, 1), new Among("irebbero", -1, 1), new Among("assero", -1, 1), new Among("essero", -1, 1), new Among("issero", -1, 1), new Among("ato", -1, 1), new Among("ito", -1, 1), new Among("uto", -1, 1), new Among("avo", -1, 1), new Among("evo", -1, 1), new Among("ivo", -1, 1), new Among("ar", -1, 1), new Among("ir", -1, 1), new Among("er\u00E0", -1, 1), new Among("ir\u00E0", -1, 1), new Among("er\u00F2", -1, 1), new Among("ir\u00F2", -1, 1) }; private static final char g_v[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1}; private static final char g_AEIO[] = {17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2}; private static final char g_CG[] = {17}; private int I_p2; private int I_p1; private int I_pV; private boolean r_prelude() { int among_var; int v_1 = cursor; while (true) { int v_2 = cursor; lab0: { bra = cursor; among_var = find_among(a_0); ket = cursor; switch (among_var) { case 1: slice_from("\u00E0"); break; case 2: slice_from("\u00E8"); break; case 3: slice_from("\u00EC"); break; case 4: slice_from("\u00F2"); break; case 5: slice_from("\u00F9"); break; case 6: slice_from("qU"); break; case 7: if (cursor >= limit) { break lab0; } cursor++; break; } continue; } cursor = v_2; break; } cursor = v_1; while (true) { int v_3 = cursor; lab1: { golab2: while (true) { int v_4 = cursor; lab3: { if (!(in_grouping(g_v, 97, 249))) { break lab3; } bra = cursor; lab4: { int v_5 = cursor; lab5: { if (!(eq_s("u"))) { break lab5; } ket = cursor; if (!(in_grouping(g_v, 97, 249))) { break lab5; } slice_from("U"); break lab4; } cursor = v_5; if (!(eq_s("i"))) { break lab3; } ket = cursor; if (!(in_grouping(g_v, 97, 249))) { break lab3; } slice_from("I"); } cursor = v_4; break golab2; } cursor = v_4; if (cursor >= limit) { break lab1; } cursor++; } continue; } cursor = v_3; break; } return true; } private boolean r_mark_regions() { I_pV = limit; I_p1 = limit; I_p2 = limit; int v_1 = cursor; lab0: { lab1: { int v_2 = cursor; lab2: { if (!(in_grouping(g_v, 97, 249))) { break lab2; } lab3: { int v_3 = cursor; lab4: { if (!(out_grouping(g_v, 97, 249))) { break lab4; } golab5: while (true) { lab6: { if (!(in_grouping(g_v, 97, 249))) { break lab6; } break golab5; } if (cursor >= limit) { break lab4; } cursor++; } break lab3; } cursor = v_3; if (!(in_grouping(g_v, 97, 249))) { break lab2; } golab7: while (true) { lab8: { if (!(out_grouping(g_v, 97, 249))) { break lab8; } break golab7; } if (cursor >= limit) { break lab2; } cursor++; } } break lab1; } cursor = v_2; if (!(out_grouping(g_v, 97, 249))) { break lab0; } lab9: { int v_6 = cursor; lab10: { if (!(out_grouping(g_v, 97, 249))) { break lab10; } golab11: while (true) { lab12: { if (!(in_grouping(g_v, 97, 249))) { break lab12; } break golab11; } if (cursor >= limit) { break lab10; } cursor++; } break lab9; } cursor = v_6; if (!(in_grouping(g_v, 97, 249))) { break lab0; } if (cursor >= limit) { break lab0; } cursor++; } } I_pV = cursor; } cursor = v_1; int v_8 = cursor; lab13: { golab14: while (true) { lab15: { if (!(in_grouping(g_v, 97, 249))) { break lab15; } break golab14; } if (cursor >= limit) { break lab13; } cursor++; } golab16: while (true) { lab17: { if (!(out_grouping(g_v, 97, 249))) { break lab17; } break golab16; } if (cursor >= limit) { break lab13; } cursor++; } I_p1 = cursor; golab18: while (true) { lab19: { if (!(in_grouping(g_v, 97, 249))) { break lab19; } break golab18; } if (cursor >= limit) { break lab13; } cursor++; } golab20: while (true) { lab21: { if (!(out_grouping(g_v, 97, 249))) { break lab21; } break golab20; } if (cursor >= limit) { break lab13; } cursor++; } I_p2 = cursor; } cursor = v_8; return true; } private boolean r_postlude() { int among_var; while (true) { int v_1 = cursor; lab0: { bra = cursor; among_var = find_among(a_1); ket = cursor; switch (among_var) { case 1: slice_from("i"); break; case 2: slice_from("u"); break; case 3: if (cursor >= limit) { break lab0; } cursor++; break; } continue; } cursor = v_1; break; } return true; } private boolean r_RV() { return I_pV <= cursor; } private boolean r_R1() { return I_p1 <= cursor; } private boolean r_R2() { return I_p2 <= cursor; } private boolean r_attached_pronoun() { int among_var; ket = cursor; if (find_among_b(a_2) == 0) { return false; } bra = cursor; among_var = find_among_b(a_3); if (among_var == 0) { return false; } if (!r_RV()) { return false; } switch (among_var) { case 1: slice_del(); break; case 2: slice_from("e"); break; } return true; } private boolean r_standard_suffix() { int among_var; ket = cursor; among_var = find_among_b(a_6); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: if (!r_R2()) { return false; } slice_del(); break; case 2: if (!r_R2()) { return false; } slice_del(); int v_1 = limit - cursor; lab0: { ket = cursor; if (!(eq_s_b("ic"))) { cursor = limit - v_1; break lab0; } bra = cursor; if (!r_R2()) { cursor = limit - v_1; break lab0; } slice_del(); } break; case 3: if (!r_R2()) { return false; } slice_from("log"); break; case 4: if (!r_R2()) { return false; } slice_from("u"); break; case 5: if (!r_R2()) { return false; } slice_from("ente"); break; case 6: if (!r_RV()) { return false; } slice_del(); break; case 7: if (!r_R1()) { return false; } slice_del(); int v_2 = limit - cursor; lab1: { ket = cursor; among_var = find_among_b(a_4); if (among_var == 0) { cursor = limit - v_2; break lab1; } bra = cursor; if (!r_R2()) { cursor = limit - v_2; break lab1; } slice_del(); switch (among_var) { case 1: ket = cursor; if (!(eq_s_b("at"))) { cursor = limit - v_2; break lab1; } bra = cursor; if (!r_R2()) { cursor = limit - v_2; break lab1; } slice_del(); break; } } break; case 8: if (!r_R2()) { return false; } slice_del(); int v_3 = limit - cursor; lab2: { ket = cursor; if (find_among_b(a_5) == 0) { cursor = limit - v_3; break lab2; } bra = cursor; if (!r_R2()) { cursor = limit - v_3; break lab2; } slice_del(); } break; case 9: if (!r_R2()) { return false; } slice_del(); int v_4 = limit - cursor; lab3: { ket = cursor; if (!(eq_s_b("at"))) { cursor = limit - v_4; break lab3; } bra = cursor; if (!r_R2()) { cursor = limit - v_4; break lab3; } slice_del(); ket = cursor; if (!(eq_s_b("ic"))) { cursor = limit - v_4; break lab3; } bra = cursor; if (!r_R2()) { cursor = limit - v_4; break lab3; } slice_del(); } break; } return true; } private boolean r_verb_suffix() { if (cursor < I_pV) { return false; } int v_2 = limit_backward; limit_backward = I_pV; ket = cursor; if (find_among_b(a_7) == 0) { limit_backward = v_2; return false; } bra = cursor; slice_del(); limit_backward = v_2; return true; } private boolean r_vowel_suffix() { int v_1 = limit - cursor; lab0: { ket = cursor; if (!(in_grouping_b(g_AEIO, 97, 242))) { cursor = limit - v_1; break lab0; } bra = cursor; if (!r_RV()) { cursor = limit - v_1; break lab0; } slice_del(); ket = cursor; if (!(eq_s_b("i"))) { cursor = limit - v_1; break lab0; } bra = cursor; if (!r_RV()) { cursor = limit - v_1; break lab0; } slice_del(); } int v_2 = limit - cursor; lab1: { ket = cursor; if (!(eq_s_b("h"))) { cursor = limit - v_2; break lab1; } bra = cursor; if (!(in_grouping_b(g_CG, 99, 103))) { cursor = limit - v_2; break lab1; } if (!r_RV()) { cursor = limit - v_2; break lab1; } slice_del(); } return true; } private boolean r_exceptions() { bra = cursor; if (!(eq_s("divano"))) { return false; } if (cursor < limit) { return false; } ket = cursor; slice_from("divan"); return true; } public boolean stem() { lab0: { int v_1 = cursor; lab1: { if (!r_exceptions()) { break lab1; } break lab0; } cursor = v_1; int v_2 = cursor; r_prelude(); cursor = v_2; r_mark_regions(); limit_backward = cursor; cursor = limit; int v_4 = limit - cursor; r_attached_pronoun(); cursor = limit - v_4; int v_5 = limit - cursor; lab2: { lab3: { int v_6 = limit - cursor; lab4: { if (!r_standard_suffix()) { break lab4; } break lab3; } cursor = limit - v_6; if (!r_verb_suffix()) { break lab2; } } } cursor = limit - v_5; int v_7 = limit - cursor; r_vowel_suffix(); cursor = limit - v_7; cursor = limit_backward; int v_8 = cursor; r_postlude(); cursor = v_8; } return true; } @Override public boolean equals(Object o) { return o instanceof italianStemmer; } @Override public int hashCode() { return italianStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000163 14523004075 032663 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/norwegianStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/norwegianStemmer0100644 0000000 0000000 00000015567 14523004075 034401 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class norwegianStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("a", -1, 1), new Among("e", -1, 1), new Among("ede", 1, 1), new Among("ande", 1, 1), new Among("ende", 1, 1), new Among("ane", 1, 1), new Among("ene", 1, 1), new Among("hetene", 6, 1), new Among("erte", 1, 3), new Among("en", -1, 1), new Among("heten", 9, 1), new Among("ar", -1, 1), new Among("er", -1, 1), new Among("heter", 12, 1), new Among("s", -1, 2), new Among("as", 14, 1), new Among("es", 14, 1), new Among("edes", 16, 1), new Among("endes", 16, 1), new Among("enes", 16, 1), new Among("hetenes", 19, 1), new Among("ens", 14, 1), new Among("hetens", 21, 1), new Among("ers", 14, 1), new Among("ets", 14, 1), new Among("et", -1, 1), new Among("het", 25, 1), new Among("ert", -1, 3), new Among("ast", -1, 1) }; private final static Among a_1[] = { new Among("dt", -1, -1), new Among("vt", -1, -1) }; private final static Among a_2[] = { new Among("leg", -1, 1), new Among("eleg", 0, 1), new Among("ig", -1, 1), new Among("eig", 2, 1), new Among("lig", 2, 1), new Among("elig", 4, 1), new Among("els", -1, 1), new Among("lov", -1, 1), new Among("elov", 7, 1), new Among("slov", 7, 1), new Among("hetslov", 9, 1) }; private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128}; private static final char g_s_ending[] = {119, 125, 149, 1}; private int I_x; private int I_p1; private boolean r_mark_regions() { I_p1 = limit; int v_1 = cursor; { int c = cursor + 3; if (c > limit) { return false; } cursor = c; } I_x = cursor; cursor = v_1; golab0: while (true) { int v_2 = cursor; lab1: { if (!(in_grouping(g_v, 97, 248))) { break lab1; } cursor = v_2; break golab0; } cursor = v_2; if (cursor >= limit) { return false; } cursor++; } golab2: while (true) { lab3: { if (!(out_grouping(g_v, 97, 248))) { break lab3; } break golab2; } if (cursor >= limit) { return false; } cursor++; } I_p1 = cursor; lab4: { if (I_p1 >= I_x) { break lab4; } I_p1 = I_x; } return true; } private boolean r_main_suffix() { int among_var; if (cursor < I_p1) { return false; } int v_2 = limit_backward; limit_backward = I_p1; ket = cursor; among_var = find_among_b(a_0); if (among_var == 0) { limit_backward = v_2; return false; } bra = cursor; limit_backward = v_2; switch (among_var) { case 1: slice_del(); break; case 2: lab0: { int v_3 = limit - cursor; lab1: { if (!(in_grouping_b(g_s_ending, 98, 122))) { break lab1; } break lab0; } cursor = limit - v_3; if (!(eq_s_b("k"))) { return false; } if (!(out_grouping_b(g_v, 97, 248))) { return false; } } slice_del(); break; case 3: slice_from("er"); break; } return true; } private boolean r_consonant_pair() { int v_1 = limit - cursor; if (cursor < I_p1) { return false; } int v_3 = limit_backward; limit_backward = I_p1; ket = cursor; if (find_among_b(a_1) == 0) { limit_backward = v_3; return false; } bra = cursor; limit_backward = v_3; cursor = limit - v_1; if (cursor <= limit_backward) { return false; } cursor--; bra = cursor; slice_del(); return true; } private boolean r_other_suffix() { if (cursor < I_p1) { return false; } int v_2 = limit_backward; limit_backward = I_p1; ket = cursor; if (find_among_b(a_2) == 0) { limit_backward = v_2; return false; } bra = cursor; limit_backward = v_2; slice_del(); return true; } public boolean stem() { int v_1 = cursor; r_mark_regions(); cursor = v_1; limit_backward = cursor; cursor = limit; int v_2 = limit - cursor; r_main_suffix(); cursor = limit - v_2; int v_3 = limit - cursor; r_consonant_pair(); cursor = limit - v_3; int v_4 = limit - cursor; r_other_suffix(); cursor = limit - v_4; cursor = limit_backward; return true; } @Override public boolean equals(Object o) { return o instanceof norwegianStemmer; } @Override public int hashCode() { return norwegianStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000160 14523004075 032660 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/porterStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/porterStemmer.ja0100644 0000000 0000000 00000034225 14523004075 034304 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class porterStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("s", -1, 3), new Among("ies", 0, 2), new Among("sses", 0, 1), new Among("ss", 0, -1) }; private final static Among a_1[] = { new Among("", -1, 3), new Among("bb", 0, 2), new Among("dd", 0, 2), new Among("ff", 0, 2), new Among("gg", 0, 2), new Among("bl", 0, 1), new Among("mm", 0, 2), new Among("nn", 0, 2), new Among("pp", 0, 2), new Among("rr", 0, 2), new Among("at", 0, 1), new Among("tt", 0, 2), new Among("iz", 0, 1) }; private final static Among a_2[] = { new Among("ed", -1, 2), new Among("eed", 0, 1), new Among("ing", -1, 2) }; private final static Among a_3[] = { new Among("anci", -1, 3), new Among("enci", -1, 2), new Among("abli", -1, 4), new Among("eli", -1, 6), new Among("alli", -1, 9), new Among("ousli", -1, 11), new Among("entli", -1, 5), new Among("aliti", -1, 9), new Among("biliti", -1, 13), new Among("iviti", -1, 12), new Among("tional", -1, 1), new Among("ational", 10, 8), new Among("alism", -1, 9), new Among("ation", -1, 8), new Among("ization", 13, 7), new Among("izer", -1, 7), new Among("ator", -1, 8), new Among("iveness", -1, 12), new Among("fulness", -1, 10), new Among("ousness", -1, 11) }; private final static Among a_4[] = { new Among("icate", -1, 2), new Among("ative", -1, 3), new Among("alize", -1, 1), new Among("iciti", -1, 2), new Among("ical", -1, 2), new Among("ful", -1, 3), new Among("ness", -1, 3) }; private final static Among a_5[] = { new Among("ic", -1, 1), new Among("ance", -1, 1), new Among("ence", -1, 1), new Among("able", -1, 1), new Among("ible", -1, 1), new Among("ate", -1, 1), new Among("ive", -1, 1), new Among("ize", -1, 1), new Among("iti", -1, 1), new Among("al", -1, 1), new Among("ism", -1, 1), new Among("ion", -1, 2), new Among("er", -1, 1), new Among("ous", -1, 1), new Among("ant", -1, 1), new Among("ent", -1, 1), new Among("ment", 15, 1), new Among("ement", 16, 1), new Among("ou", -1, 1) }; private static final char g_v[] = {17, 65, 16, 1}; private static final char g_v_WXY[] = {1, 17, 65, 208, 1}; private boolean B_Y_found; private int I_p2; private int I_p1; private boolean r_shortv() { if (!(out_grouping_b(g_v_WXY, 89, 121))) { return false; } if (!(in_grouping_b(g_v, 97, 121))) { return false; } if (!(out_grouping_b(g_v, 97, 121))) { return false; } return true; } private boolean r_R1() { return I_p1 <= cursor; } private boolean r_R2() { return I_p2 <= cursor; } private boolean r_Step_1a() { int among_var; ket = cursor; among_var = find_among_b(a_0); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: slice_from("ss"); break; case 2: slice_from("i"); break; case 3: slice_del(); break; } return true; } private boolean r_Step_1b() { int among_var; ket = cursor; among_var = find_among_b(a_2); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: if (!r_R1()) { return false; } slice_from("ee"); break; case 2: int v_1 = limit - cursor; golab0: while (true) { lab1: { if (!(in_grouping_b(g_v, 97, 121))) { break lab1; } break golab0; } if (cursor <= limit_backward) { return false; } cursor--; } cursor = limit - v_1; slice_del(); int v_3 = limit - cursor; among_var = find_among_b(a_1); cursor = limit - v_3; switch (among_var) { case 1: { int c = cursor; insert(cursor, cursor, "e"); cursor = c; } break; case 2: ket = cursor; if (cursor <= limit_backward) { return false; } cursor--; bra = cursor; slice_del(); break; case 3: if (cursor != I_p1) { return false; } int v_4 = limit - cursor; if (!r_shortv()) { return false; } cursor = limit - v_4; { int c = cursor; insert(cursor, cursor, "e"); cursor = c; } break; } break; } return true; } private boolean r_Step_1c() { ket = cursor; lab0: { int v_1 = limit - cursor; lab1: { if (!(eq_s_b("y"))) { break lab1; } break lab0; } cursor = limit - v_1; if (!(eq_s_b("Y"))) { return false; } } bra = cursor; golab2: while (true) { lab3: { if (!(in_grouping_b(g_v, 97, 121))) { break lab3; } break golab2; } if (cursor <= limit_backward) { return false; } cursor--; } slice_from("i"); return true; } private boolean r_Step_2() { int among_var; ket = cursor; among_var = find_among_b(a_3); if (among_var == 0) { return false; } bra = cursor; if (!r_R1()) { return false; } switch (among_var) { case 1: slice_from("tion"); break; case 2: slice_from("ence"); break; case 3: slice_from("ance"); break; case 4: slice_from("able"); break; case 5: slice_from("ent"); break; case 6: slice_from("e"); break; case 7: slice_from("ize"); break; case 8: slice_from("ate"); break; case 9: slice_from("al"); break; case 10: slice_from("ful"); break; case 11: slice_from("ous"); break; case 12: slice_from("ive"); break; case 13: slice_from("ble"); break; } return true; } private boolean r_Step_3() { int among_var; ket = cursor; among_var = find_among_b(a_4); if (among_var == 0) { return false; } bra = cursor; if (!r_R1()) { return false; } switch (among_var) { case 1: slice_from("al"); break; case 2: slice_from("ic"); break; case 3: slice_del(); break; } return true; } private boolean r_Step_4() { int among_var; ket = cursor; among_var = find_among_b(a_5); if (among_var == 0) { return false; } bra = cursor; if (!r_R2()) { return false; } switch (among_var) { case 1: slice_del(); break; case 2: lab0: { int v_1 = limit - cursor; lab1: { if (!(eq_s_b("s"))) { break lab1; } break lab0; } cursor = limit - v_1; if (!(eq_s_b("t"))) { return false; } } slice_del(); break; } return true; } private boolean r_Step_5a() { ket = cursor; if (!(eq_s_b("e"))) { return false; } bra = cursor; lab0: { int v_1 = limit - cursor; lab1: { if (!r_R2()) { break lab1; } break lab0; } cursor = limit - v_1; if (!r_R1()) { return false; } { int v_2 = limit - cursor; lab2: { if (!r_shortv()) { break lab2; } return false; } cursor = limit - v_2; } } slice_del(); return true; } private boolean r_Step_5b() { ket = cursor; if (!(eq_s_b("l"))) { return false; } bra = cursor; if (!r_R2()) { return false; } if (!(eq_s_b("l"))) { return false; } slice_del(); return true; } public boolean stem() { B_Y_found = false; int v_1 = cursor; lab0: { bra = cursor; if (!(eq_s("y"))) { break lab0; } ket = cursor; slice_from("Y"); B_Y_found = true; } cursor = v_1; int v_2 = cursor; lab1: { while (true) { int v_3 = cursor; lab2: { golab3: while (true) { int v_4 = cursor; lab4: { if (!(in_grouping(g_v, 97, 121))) { break lab4; } bra = cursor; if (!(eq_s("y"))) { break lab4; } ket = cursor; cursor = v_4; break golab3; } cursor = v_4; if (cursor >= limit) { break lab2; } cursor++; } slice_from("Y"); B_Y_found = true; continue; } cursor = v_3; break; } } cursor = v_2; I_p1 = limit; I_p2 = limit; int v_5 = cursor; lab5: { golab6: while (true) { lab7: { if (!(in_grouping(g_v, 97, 121))) { break lab7; } break golab6; } if (cursor >= limit) { break lab5; } cursor++; } golab8: while (true) { lab9: { if (!(out_grouping(g_v, 97, 121))) { break lab9; } break golab8; } if (cursor >= limit) { break lab5; } cursor++; } I_p1 = cursor; golab10: while (true) { lab11: { if (!(in_grouping(g_v, 97, 121))) { break lab11; } break golab10; } if (cursor >= limit) { break lab5; } cursor++; } golab12: while (true) { lab13: { if (!(out_grouping(g_v, 97, 121))) { break lab13; } break golab12; } if (cursor >= limit) { break lab5; } cursor++; } I_p2 = cursor; } cursor = v_5; limit_backward = cursor; cursor = limit; int v_10 = limit - cursor; r_Step_1a(); cursor = limit - v_10; int v_11 = limit - cursor; r_Step_1b(); cursor = limit - v_11; int v_12 = limit - cursor; r_Step_1c(); cursor = limit - v_12; int v_13 = limit - cursor; r_Step_2(); cursor = limit - v_13; int v_14 = limit - cursor; r_Step_3(); cursor = limit - v_14; int v_15 = limit - cursor; r_Step_4(); cursor = limit - v_15; int v_16 = limit - cursor; r_Step_5a(); cursor = limit - v_16; int v_17 = limit - cursor; r_Step_5b(); cursor = limit - v_17; cursor = limit_backward; int v_18 = cursor; lab14: { if (!(B_Y_found)) { break lab14; } while (true) { int v_19 = cursor; lab15: { golab16: while (true) { int v_20 = cursor; lab17: { bra = cursor; if (!(eq_s("Y"))) { break lab17; } ket = cursor; cursor = v_20; break golab16; } cursor = v_20; if (cursor >= limit) { break lab15; } cursor++; } slice_from("y"); continue; } cursor = v_19; break; } } cursor = v_18; return true; } @Override public boolean equals(Object o) { return o instanceof porterStemmer; } @Override public int hashCode() { return porterStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000164 14523004075 032664 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/portugueseStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/portugueseStemme0100644 0000000 0000000 00000047652 14523004075 034430 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class portugueseStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("", -1, 3), new Among("\u00E3", 0, 1), new Among("\u00F5", 0, 2) }; private final static Among a_1[] = { new Among("", -1, 3), new Among("a~", 0, 1), new Among("o~", 0, 2) }; private final static Among a_2[] = { new Among("ic", -1, -1), new Among("ad", -1, -1), new Among("os", -1, -1), new Among("iv", -1, 1) }; private final static Among a_3[] = { new Among("ante", -1, 1), new Among("avel", -1, 1), new Among("\u00EDvel", -1, 1) }; private final static Among a_4[] = { new Among("ic", -1, 1), new Among("abil", -1, 1), new Among("iv", -1, 1) }; private final static Among a_5[] = { new Among("ica", -1, 1), new Among("\u00E2ncia", -1, 1), new Among("\u00EAncia", -1, 4), new Among("logia", -1, 2), new Among("ira", -1, 9), new Among("adora", -1, 1), new Among("osa", -1, 1), new Among("ista", -1, 1), new Among("iva", -1, 8), new Among("eza", -1, 1), new Among("idade", -1, 7), new Among("ante", -1, 1), new Among("mente", -1, 6), new Among("amente", 12, 5), new Among("\u00E1vel", -1, 1), new Among("\u00EDvel", -1, 1), new Among("ico", -1, 1), new Among("ismo", -1, 1), new Among("oso", -1, 1), new Among("amento", -1, 1), new Among("imento", -1, 1), new Among("ivo", -1, 8), new Among("a\u00E7a~o", -1, 1), new Among("u\u00E7a~o", -1, 3), new Among("ador", -1, 1), new Among("icas", -1, 1), new Among("\u00EAncias", -1, 4), new Among("logias", -1, 2), new Among("iras", -1, 9), new Among("adoras", -1, 1), new Among("osas", -1, 1), new Among("istas", -1, 1), new Among("ivas", -1, 8), new Among("ezas", -1, 1), new Among("idades", -1, 7), new Among("adores", -1, 1), new Among("antes", -1, 1), new Among("a\u00E7o~es", -1, 1), new Among("u\u00E7o~es", -1, 3), new Among("icos", -1, 1), new Among("ismos", -1, 1), new Among("osos", -1, 1), new Among("amentos", -1, 1), new Among("imentos", -1, 1), new Among("ivos", -1, 8) }; private final static Among a_6[] = { new Among("ada", -1, 1), new Among("ida", -1, 1), new Among("ia", -1, 1), new Among("aria", 2, 1), new Among("eria", 2, 1), new Among("iria", 2, 1), new Among("ara", -1, 1), new Among("era", -1, 1), new Among("ira", -1, 1), new Among("ava", -1, 1), new Among("asse", -1, 1), new Among("esse", -1, 1), new Among("isse", -1, 1), new Among("aste", -1, 1), new Among("este", -1, 1), new Among("iste", -1, 1), new Among("ei", -1, 1), new Among("arei", 16, 1), new Among("erei", 16, 1), new Among("irei", 16, 1), new Among("am", -1, 1), new Among("iam", 20, 1), new Among("ariam", 21, 1), new Among("eriam", 21, 1), new Among("iriam", 21, 1), new Among("aram", 20, 1), new Among("eram", 20, 1), new Among("iram", 20, 1), new Among("avam", 20, 1), new Among("em", -1, 1), new Among("arem", 29, 1), new Among("erem", 29, 1), new Among("irem", 29, 1), new Among("assem", 29, 1), new Among("essem", 29, 1), new Among("issem", 29, 1), new Among("ado", -1, 1), new Among("ido", -1, 1), new Among("ando", -1, 1), new Among("endo", -1, 1), new Among("indo", -1, 1), new Among("ara~o", -1, 1), new Among("era~o", -1, 1), new Among("ira~o", -1, 1), new Among("ar", -1, 1), new Among("er", -1, 1), new Among("ir", -1, 1), new Among("as", -1, 1), new Among("adas", 47, 1), new Among("idas", 47, 1), new Among("ias", 47, 1), new Among("arias", 50, 1), new Among("erias", 50, 1), new Among("irias", 50, 1), new Among("aras", 47, 1), new Among("eras", 47, 1), new Among("iras", 47, 1), new Among("avas", 47, 1), new Among("es", -1, 1), new Among("ardes", 58, 1), new Among("erdes", 58, 1), new Among("irdes", 58, 1), new Among("ares", 58, 1), new Among("eres", 58, 1), new Among("ires", 58, 1), new Among("asses", 58, 1), new Among("esses", 58, 1), new Among("isses", 58, 1), new Among("astes", 58, 1), new Among("estes", 58, 1), new Among("istes", 58, 1), new Among("is", -1, 1), new Among("ais", 71, 1), new Among("eis", 71, 1), new Among("areis", 73, 1), new Among("ereis", 73, 1), new Among("ireis", 73, 1), new Among("\u00E1reis", 73, 1), new Among("\u00E9reis", 73, 1), new Among("\u00EDreis", 73, 1), new Among("\u00E1sseis", 73, 1), new Among("\u00E9sseis", 73, 1), new Among("\u00EDsseis", 73, 1), new Among("\u00E1veis", 73, 1), new Among("\u00EDeis", 73, 1), new Among("ar\u00EDeis", 84, 1), new Among("er\u00EDeis", 84, 1), new Among("ir\u00EDeis", 84, 1), new Among("ados", -1, 1), new Among("idos", -1, 1), new Among("amos", -1, 1), new Among("\u00E1ramos", 90, 1), new Among("\u00E9ramos", 90, 1), new Among("\u00EDramos", 90, 1), new Among("\u00E1vamos", 90, 1), new Among("\u00EDamos", 90, 1), new Among("ar\u00EDamos", 95, 1), new Among("er\u00EDamos", 95, 1), new Among("ir\u00EDamos", 95, 1), new Among("emos", -1, 1), new Among("aremos", 99, 1), new Among("eremos", 99, 1), new Among("iremos", 99, 1), new Among("\u00E1ssemos", 99, 1), new Among("\u00EAssemos", 99, 1), new Among("\u00EDssemos", 99, 1), new Among("imos", -1, 1), new Among("armos", -1, 1), new Among("ermos", -1, 1), new Among("irmos", -1, 1), new Among("\u00E1mos", -1, 1), new Among("ar\u00E1s", -1, 1), new Among("er\u00E1s", -1, 1), new Among("ir\u00E1s", -1, 1), new Among("eu", -1, 1), new Among("iu", -1, 1), new Among("ou", -1, 1), new Among("ar\u00E1", -1, 1), new Among("er\u00E1", -1, 1), new Among("ir\u00E1", -1, 1) }; private final static Among a_7[] = { new Among("a", -1, 1), new Among("i", -1, 1), new Among("o", -1, 1), new Among("os", -1, 1), new Among("\u00E1", -1, 1), new Among("\u00ED", -1, 1), new Among("\u00F3", -1, 1) }; private final static Among a_8[] = { new Among("e", -1, 1), new Among("\u00E7", -1, 2), new Among("\u00E9", -1, 1), new Among("\u00EA", -1, 1) }; private static final char g_v[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 12, 2}; private int I_p2; private int I_p1; private int I_pV; private boolean r_prelude() { int among_var; while (true) { int v_1 = cursor; lab0: { bra = cursor; among_var = find_among(a_0); ket = cursor; switch (among_var) { case 1: slice_from("a~"); break; case 2: slice_from("o~"); break; case 3: if (cursor >= limit) { break lab0; } cursor++; break; } continue; } cursor = v_1; break; } return true; } private boolean r_mark_regions() { I_pV = limit; I_p1 = limit; I_p2 = limit; int v_1 = cursor; lab0: { lab1: { int v_2 = cursor; lab2: { if (!(in_grouping(g_v, 97, 250))) { break lab2; } lab3: { int v_3 = cursor; lab4: { if (!(out_grouping(g_v, 97, 250))) { break lab4; } golab5: while (true) { lab6: { if (!(in_grouping(g_v, 97, 250))) { break lab6; } break golab5; } if (cursor >= limit) { break lab4; } cursor++; } break lab3; } cursor = v_3; if (!(in_grouping(g_v, 97, 250))) { break lab2; } golab7: while (true) { lab8: { if (!(out_grouping(g_v, 97, 250))) { break lab8; } break golab7; } if (cursor >= limit) { break lab2; } cursor++; } } break lab1; } cursor = v_2; if (!(out_grouping(g_v, 97, 250))) { break lab0; } lab9: { int v_6 = cursor; lab10: { if (!(out_grouping(g_v, 97, 250))) { break lab10; } golab11: while (true) { lab12: { if (!(in_grouping(g_v, 97, 250))) { break lab12; } break golab11; } if (cursor >= limit) { break lab10; } cursor++; } break lab9; } cursor = v_6; if (!(in_grouping(g_v, 97, 250))) { break lab0; } if (cursor >= limit) { break lab0; } cursor++; } } I_pV = cursor; } cursor = v_1; int v_8 = cursor; lab13: { golab14: while (true) { lab15: { if (!(in_grouping(g_v, 97, 250))) { break lab15; } break golab14; } if (cursor >= limit) { break lab13; } cursor++; } golab16: while (true) { lab17: { if (!(out_grouping(g_v, 97, 250))) { break lab17; } break golab16; } if (cursor >= limit) { break lab13; } cursor++; } I_p1 = cursor; golab18: while (true) { lab19: { if (!(in_grouping(g_v, 97, 250))) { break lab19; } break golab18; } if (cursor >= limit) { break lab13; } cursor++; } golab20: while (true) { lab21: { if (!(out_grouping(g_v, 97, 250))) { break lab21; } break golab20; } if (cursor >= limit) { break lab13; } cursor++; } I_p2 = cursor; } cursor = v_8; return true; } private boolean r_postlude() { int among_var; while (true) { int v_1 = cursor; lab0: { bra = cursor; among_var = find_among(a_1); ket = cursor; switch (among_var) { case 1: slice_from("\u00E3"); break; case 2: slice_from("\u00F5"); break; case 3: if (cursor >= limit) { break lab0; } cursor++; break; } continue; } cursor = v_1; break; } return true; } private boolean r_RV() { return I_pV <= cursor; } private boolean r_R1() { return I_p1 <= cursor; } private boolean r_R2() { return I_p2 <= cursor; } private boolean r_standard_suffix() { int among_var; ket = cursor; among_var = find_among_b(a_5); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: if (!r_R2()) { return false; } slice_del(); break; case 2: if (!r_R2()) { return false; } slice_from("log"); break; case 3: if (!r_R2()) { return false; } slice_from("u"); break; case 4: if (!r_R2()) { return false; } slice_from("ente"); break; case 5: if (!r_R1()) { return false; } slice_del(); int v_1 = limit - cursor; lab0: { ket = cursor; among_var = find_among_b(a_2); if (among_var == 0) { cursor = limit - v_1; break lab0; } bra = cursor; if (!r_R2()) { cursor = limit - v_1; break lab0; } slice_del(); switch (among_var) { case 1: ket = cursor; if (!(eq_s_b("at"))) { cursor = limit - v_1; break lab0; } bra = cursor; if (!r_R2()) { cursor = limit - v_1; break lab0; } slice_del(); break; } } break; case 6: if (!r_R2()) { return false; } slice_del(); int v_2 = limit - cursor; lab1: { ket = cursor; if (find_among_b(a_3) == 0) { cursor = limit - v_2; break lab1; } bra = cursor; if (!r_R2()) { cursor = limit - v_2; break lab1; } slice_del(); } break; case 7: if (!r_R2()) { return false; } slice_del(); int v_3 = limit - cursor; lab2: { ket = cursor; if (find_among_b(a_4) == 0) { cursor = limit - v_3; break lab2; } bra = cursor; if (!r_R2()) { cursor = limit - v_3; break lab2; } slice_del(); } break; case 8: if (!r_R2()) { return false; } slice_del(); int v_4 = limit - cursor; lab3: { ket = cursor; if (!(eq_s_b("at"))) { cursor = limit - v_4; break lab3; } bra = cursor; if (!r_R2()) { cursor = limit - v_4; break lab3; } slice_del(); } break; case 9: if (!r_RV()) { return false; } if (!(eq_s_b("e"))) { return false; } slice_from("ir"); break; } return true; } private boolean r_verb_suffix() { if (cursor < I_pV) { return false; } int v_2 = limit_backward; limit_backward = I_pV; ket = cursor; if (find_among_b(a_6) == 0) { limit_backward = v_2; return false; } bra = cursor; slice_del(); limit_backward = v_2; return true; } private boolean r_residual_suffix() { ket = cursor; if (find_among_b(a_7) == 0) { return false; } bra = cursor; if (!r_RV()) { return false; } slice_del(); return true; } private boolean r_residual_form() { int among_var; ket = cursor; among_var = find_among_b(a_8); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: if (!r_RV()) { return false; } slice_del(); ket = cursor; lab0: { int v_1 = limit - cursor; lab1: { if (!(eq_s_b("u"))) { break lab1; } bra = cursor; int v_2 = limit - cursor; if (!(eq_s_b("g"))) { break lab1; } cursor = limit - v_2; break lab0; } cursor = limit - v_1; if (!(eq_s_b("i"))) { return false; } bra = cursor; int v_3 = limit - cursor; if (!(eq_s_b("c"))) { return false; } cursor = limit - v_3; } if (!r_RV()) { return false; } slice_del(); break; case 2: slice_from("c"); break; } return true; } public boolean stem() { int v_1 = cursor; r_prelude(); cursor = v_1; r_mark_regions(); limit_backward = cursor; cursor = limit; int v_3 = limit - cursor; lab0: { lab1: { int v_4 = limit - cursor; lab2: { int v_5 = limit - cursor; lab3: { int v_6 = limit - cursor; lab4: { if (!r_standard_suffix()) { break lab4; } break lab3; } cursor = limit - v_6; if (!r_verb_suffix()) { break lab2; } } cursor = limit - v_5; int v_7 = limit - cursor; lab5: { ket = cursor; if (!(eq_s_b("i"))) { break lab5; } bra = cursor; int v_8 = limit - cursor; if (!(eq_s_b("c"))) { break lab5; } cursor = limit - v_8; if (!r_RV()) { break lab5; } slice_del(); } cursor = limit - v_7; break lab1; } cursor = limit - v_4; if (!r_residual_suffix()) { break lab0; } } } cursor = limit - v_3; int v_9 = limit - cursor; r_residual_form(); cursor = limit - v_9; cursor = limit_backward; int v_10 = cursor; r_postlude(); cursor = v_10; return true; } @Override public boolean equals(Object o) { return o instanceof portugueseStemmer; } @Override public int hashCode() { return portugueseStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000162 14523004075 032662 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/romanianStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/romanianStemmer.0100644 0000000 0000000 00000052032 14523004075 034256 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class romanianStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("\u015F", -1, 1), new Among("\u0163", -1, 2) }; private final static Among a_1[] = { new Among("", -1, 3), new Among("I", 0, 1), new Among("U", 0, 2) }; private final static Among a_2[] = { new Among("ea", -1, 3), new Among("a\u021Bia", -1, 7), new Among("aua", -1, 2), new Among("iua", -1, 4), new Among("a\u021Bie", -1, 7), new Among("ele", -1, 3), new Among("ile", -1, 5), new Among("iile", 6, 4), new Among("iei", -1, 4), new Among("atei", -1, 6), new Among("ii", -1, 4), new Among("ului", -1, 1), new Among("ul", -1, 1), new Among("elor", -1, 3), new Among("ilor", -1, 4), new Among("iilor", 14, 4) }; private final static Among a_3[] = { new Among("icala", -1, 4), new Among("iciva", -1, 4), new Among("ativa", -1, 5), new Among("itiva", -1, 6), new Among("icale", -1, 4), new Among("a\u021Biune", -1, 5), new Among("i\u021Biune", -1, 6), new Among("atoare", -1, 5), new Among("itoare", -1, 6), new Among("\u0103toare", -1, 5), new Among("icitate", -1, 4), new Among("abilitate", -1, 1), new Among("ibilitate", -1, 2), new Among("ivitate", -1, 3), new Among("icive", -1, 4), new Among("ative", -1, 5), new Among("itive", -1, 6), new Among("icali", -1, 4), new Among("atori", -1, 5), new Among("icatori", 18, 4), new Among("itori", -1, 6), new Among("\u0103tori", -1, 5), new Among("icitati", -1, 4), new Among("abilitati", -1, 1), new Among("ivitati", -1, 3), new Among("icivi", -1, 4), new Among("ativi", -1, 5), new Among("itivi", -1, 6), new Among("icit\u0103i", -1, 4), new Among("abilit\u0103i", -1, 1), new Among("ivit\u0103i", -1, 3), new Among("icit\u0103\u021Bi", -1, 4), new Among("abilit\u0103\u021Bi", -1, 1), new Among("ivit\u0103\u021Bi", -1, 3), new Among("ical", -1, 4), new Among("ator", -1, 5), new Among("icator", 35, 4), new Among("itor", -1, 6), new Among("\u0103tor", -1, 5), new Among("iciv", -1, 4), new Among("ativ", -1, 5), new Among("itiv", -1, 6), new Among("ical\u0103", -1, 4), new Among("iciv\u0103", -1, 4), new Among("ativ\u0103", -1, 5), new Among("itiv\u0103", -1, 6) }; private final static Among a_4[] = { new Among("ica", -1, 1), new Among("abila", -1, 1), new Among("ibila", -1, 1), new Among("oasa", -1, 1), new Among("ata", -1, 1), new Among("ita", -1, 1), new Among("anta", -1, 1), new Among("ista", -1, 3), new Among("uta", -1, 1), new Among("iva", -1, 1), new Among("ic", -1, 1), new Among("ice", -1, 1), new Among("abile", -1, 1), new Among("ibile", -1, 1), new Among("isme", -1, 3), new Among("iune", -1, 2), new Among("oase", -1, 1), new Among("ate", -1, 1), new Among("itate", 17, 1), new Among("ite", -1, 1), new Among("ante", -1, 1), new Among("iste", -1, 3), new Among("ute", -1, 1), new Among("ive", -1, 1), new Among("ici", -1, 1), new Among("abili", -1, 1), new Among("ibili", -1, 1), new Among("iuni", -1, 2), new Among("atori", -1, 1), new Among("osi", -1, 1), new Among("ati", -1, 1), new Among("itati", 30, 1), new Among("iti", -1, 1), new Among("anti", -1, 1), new Among("isti", -1, 3), new Among("uti", -1, 1), new Among("i\u0219ti", -1, 3), new Among("ivi", -1, 1), new Among("it\u0103i", -1, 1), new Among("o\u0219i", -1, 1), new Among("it\u0103\u021Bi", -1, 1), new Among("abil", -1, 1), new Among("ibil", -1, 1), new Among("ism", -1, 3), new Among("ator", -1, 1), new Among("os", -1, 1), new Among("at", -1, 1), new Among("it", -1, 1), new Among("ant", -1, 1), new Among("ist", -1, 3), new Among("ut", -1, 1), new Among("iv", -1, 1), new Among("ic\u0103", -1, 1), new Among("abil\u0103", -1, 1), new Among("ibil\u0103", -1, 1), new Among("oas\u0103", -1, 1), new Among("at\u0103", -1, 1), new Among("it\u0103", -1, 1), new Among("ant\u0103", -1, 1), new Among("ist\u0103", -1, 3), new Among("ut\u0103", -1, 1), new Among("iv\u0103", -1, 1) }; private final static Among a_5[] = { new Among("ea", -1, 1), new Among("ia", -1, 1), new Among("esc", -1, 1), new Among("\u0103sc", -1, 1), new Among("ind", -1, 1), new Among("\u00E2nd", -1, 1), new Among("are", -1, 1), new Among("ere", -1, 1), new Among("ire", -1, 1), new Among("\u00E2re", -1, 1), new Among("se", -1, 2), new Among("ase", 10, 1), new Among("sese", 10, 2), new Among("ise", 10, 1), new Among("use", 10, 1), new Among("\u00E2se", 10, 1), new Among("e\u0219te", -1, 1), new Among("\u0103\u0219te", -1, 1), new Among("eze", -1, 1), new Among("ai", -1, 1), new Among("eai", 19, 1), new Among("iai", 19, 1), new Among("sei", -1, 2), new Among("e\u0219ti", -1, 1), new Among("\u0103\u0219ti", -1, 1), new Among("ui", -1, 1), new Among("ezi", -1, 1), new Among("\u00E2i", -1, 1), new Among("a\u0219i", -1, 1), new Among("se\u0219i", -1, 2), new Among("ase\u0219i", 29, 1), new Among("sese\u0219i", 29, 2), new Among("ise\u0219i", 29, 1), new Among("use\u0219i", 29, 1), new Among("\u00E2se\u0219i", 29, 1), new Among("i\u0219i", -1, 1), new Among("u\u0219i", -1, 1), new Among("\u00E2\u0219i", -1, 1), new Among("a\u021Bi", -1, 2), new Among("ea\u021Bi", 38, 1), new Among("ia\u021Bi", 38, 1), new Among("e\u021Bi", -1, 2), new Among("i\u021Bi", -1, 2), new Among("\u00E2\u021Bi", -1, 2), new Among("ar\u0103\u021Bi", -1, 1), new Among("ser\u0103\u021Bi", -1, 2), new Among("aser\u0103\u021Bi", 45, 1), new Among("seser\u0103\u021Bi", 45, 2), new Among("iser\u0103\u021Bi", 45, 1), new Among("user\u0103\u021Bi", 45, 1), new Among("\u00E2ser\u0103\u021Bi", 45, 1), new Among("ir\u0103\u021Bi", -1, 1), new Among("ur\u0103\u021Bi", -1, 1), new Among("\u00E2r\u0103\u021Bi", -1, 1), new Among("am", -1, 1), new Among("eam", 54, 1), new Among("iam", 54, 1), new Among("em", -1, 2), new Among("asem", 57, 1), new Among("sesem", 57, 2), new Among("isem", 57, 1), new Among("usem", 57, 1), new Among("\u00E2sem", 57, 1), new Among("im", -1, 2), new Among("\u00E2m", -1, 2), new Among("\u0103m", -1, 2), new Among("ar\u0103m", 65, 1), new Among("ser\u0103m", 65, 2), new Among("aser\u0103m", 67, 1), new Among("seser\u0103m", 67, 2), new Among("iser\u0103m", 67, 1), new Among("user\u0103m", 67, 1), new Among("\u00E2ser\u0103m", 67, 1), new Among("ir\u0103m", 65, 1), new Among("ur\u0103m", 65, 1), new Among("\u00E2r\u0103m", 65, 1), new Among("au", -1, 1), new Among("eau", 76, 1), new Among("iau", 76, 1), new Among("indu", -1, 1), new Among("\u00E2ndu", -1, 1), new Among("ez", -1, 1), new Among("easc\u0103", -1, 1), new Among("ar\u0103", -1, 1), new Among("ser\u0103", -1, 2), new Among("aser\u0103", 84, 1), new Among("seser\u0103", 84, 2), new Among("iser\u0103", 84, 1), new Among("user\u0103", 84, 1), new Among("\u00E2ser\u0103", 84, 1), new Among("ir\u0103", -1, 1), new Among("ur\u0103", -1, 1), new Among("\u00E2r\u0103", -1, 1), new Among("eaz\u0103", -1, 1) }; private final static Among a_6[] = { new Among("a", -1, 1), new Among("e", -1, 1), new Among("ie", 1, 1), new Among("i", -1, 1), new Among("\u0103", -1, 1) }; private static final char g_v[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 32, 0, 0, 4}; private boolean B_standard_suffix_removed; private int I_p2; private int I_p1; private int I_pV; private boolean r_norm() { int among_var; int v_1 = cursor; lab0: { while (true) { int v_2 = cursor; lab1: { golab2: while (true) { int v_3 = cursor; lab3: { bra = cursor; among_var = find_among(a_0); if (among_var == 0) { break lab3; } ket = cursor; switch (among_var) { case 1: slice_from("\u0219"); break; case 2: slice_from("\u021B"); break; } cursor = v_3; break golab2; } cursor = v_3; if (cursor >= limit) { break lab1; } cursor++; } continue; } cursor = v_2; break; } } cursor = v_1; return true; } private boolean r_prelude() { while (true) { int v_1 = cursor; lab0: { golab1: while (true) { int v_2 = cursor; lab2: { if (!(in_grouping(g_v, 97, 259))) { break lab2; } bra = cursor; lab3: { int v_3 = cursor; lab4: { if (!(eq_s("u"))) { break lab4; } ket = cursor; if (!(in_grouping(g_v, 97, 259))) { break lab4; } slice_from("U"); break lab3; } cursor = v_3; if (!(eq_s("i"))) { break lab2; } ket = cursor; if (!(in_grouping(g_v, 97, 259))) { break lab2; } slice_from("I"); } cursor = v_2; break golab1; } cursor = v_2; if (cursor >= limit) { break lab0; } cursor++; } continue; } cursor = v_1; break; } return true; } private boolean r_mark_regions() { I_pV = limit; I_p1 = limit; I_p2 = limit; int v_1 = cursor; lab0: { lab1: { int v_2 = cursor; lab2: { if (!(in_grouping(g_v, 97, 259))) { break lab2; } lab3: { int v_3 = cursor; lab4: { if (!(out_grouping(g_v, 97, 259))) { break lab4; } golab5: while (true) { lab6: { if (!(in_grouping(g_v, 97, 259))) { break lab6; } break golab5; } if (cursor >= limit) { break lab4; } cursor++; } break lab3; } cursor = v_3; if (!(in_grouping(g_v, 97, 259))) { break lab2; } golab7: while (true) { lab8: { if (!(out_grouping(g_v, 97, 259))) { break lab8; } break golab7; } if (cursor >= limit) { break lab2; } cursor++; } } break lab1; } cursor = v_2; if (!(out_grouping(g_v, 97, 259))) { break lab0; } lab9: { int v_6 = cursor; lab10: { if (!(out_grouping(g_v, 97, 259))) { break lab10; } golab11: while (true) { lab12: { if (!(in_grouping(g_v, 97, 259))) { break lab12; } break golab11; } if (cursor >= limit) { break lab10; } cursor++; } break lab9; } cursor = v_6; if (!(in_grouping(g_v, 97, 259))) { break lab0; } if (cursor >= limit) { break lab0; } cursor++; } } I_pV = cursor; } cursor = v_1; int v_8 = cursor; lab13: { golab14: while (true) { lab15: { if (!(in_grouping(g_v, 97, 259))) { break lab15; } break golab14; } if (cursor >= limit) { break lab13; } cursor++; } golab16: while (true) { lab17: { if (!(out_grouping(g_v, 97, 259))) { break lab17; } break golab16; } if (cursor >= limit) { break lab13; } cursor++; } I_p1 = cursor; golab18: while (true) { lab19: { if (!(in_grouping(g_v, 97, 259))) { break lab19; } break golab18; } if (cursor >= limit) { break lab13; } cursor++; } golab20: while (true) { lab21: { if (!(out_grouping(g_v, 97, 259))) { break lab21; } break golab20; } if (cursor >= limit) { break lab13; } cursor++; } I_p2 = cursor; } cursor = v_8; return true; } private boolean r_postlude() { int among_var; while (true) { int v_1 = cursor; lab0: { bra = cursor; among_var = find_among(a_1); ket = cursor; switch (among_var) { case 1: slice_from("i"); break; case 2: slice_from("u"); break; case 3: if (cursor >= limit) { break lab0; } cursor++; break; } continue; } cursor = v_1; break; } return true; } private boolean r_RV() { return I_pV <= cursor; } private boolean r_R1() { return I_p1 <= cursor; } private boolean r_R2() { return I_p2 <= cursor; } private boolean r_step_0() { int among_var; ket = cursor; among_var = find_among_b(a_2); if (among_var == 0) { return false; } bra = cursor; if (!r_R1()) { return false; } switch (among_var) { case 1: slice_del(); break; case 2: slice_from("a"); break; case 3: slice_from("e"); break; case 4: slice_from("i"); break; case 5: { int v_1 = limit - cursor; lab0: { if (!(eq_s_b("ab"))) { break lab0; } return false; } cursor = limit - v_1; } slice_from("i"); break; case 6: slice_from("at"); break; case 7: slice_from("a\u021Bi"); break; } return true; } private boolean r_combo_suffix() { int among_var; int v_1 = limit - cursor; ket = cursor; among_var = find_among_b(a_3); if (among_var == 0) { return false; } bra = cursor; if (!r_R1()) { return false; } switch (among_var) { case 1: slice_from("abil"); break; case 2: slice_from("ibil"); break; case 3: slice_from("iv"); break; case 4: slice_from("ic"); break; case 5: slice_from("at"); break; case 6: slice_from("it"); break; } B_standard_suffix_removed = true; cursor = limit - v_1; return true; } private boolean r_standard_suffix() { int among_var; B_standard_suffix_removed = false; while (true) { int v_1 = limit - cursor; lab0: { if (!r_combo_suffix()) { break lab0; } continue; } cursor = limit - v_1; break; } ket = cursor; among_var = find_among_b(a_4); if (among_var == 0) { return false; } bra = cursor; if (!r_R2()) { return false; } switch (among_var) { case 1: slice_del(); break; case 2: if (!(eq_s_b("\u021B"))) { return false; } bra = cursor; slice_from("t"); break; case 3: slice_from("ist"); break; } B_standard_suffix_removed = true; return true; } private boolean r_verb_suffix() { int among_var; if (cursor < I_pV) { return false; } int v_2 = limit_backward; limit_backward = I_pV; ket = cursor; among_var = find_among_b(a_5); if (among_var == 0) { limit_backward = v_2; return false; } bra = cursor; switch (among_var) { case 1: lab0: { int v_3 = limit - cursor; lab1: { if (!(out_grouping_b(g_v, 97, 259))) { break lab1; } break lab0; } cursor = limit - v_3; if (!(eq_s_b("u"))) { limit_backward = v_2; return false; } } slice_del(); break; case 2: slice_del(); break; } limit_backward = v_2; return true; } private boolean r_vowel_suffix() { ket = cursor; if (find_among_b(a_6) == 0) { return false; } bra = cursor; if (!r_RV()) { return false; } slice_del(); return true; } public boolean stem() { r_norm(); int v_2 = cursor; r_prelude(); cursor = v_2; r_mark_regions(); limit_backward = cursor; cursor = limit; int v_4 = limit - cursor; r_step_0(); cursor = limit - v_4; int v_5 = limit - cursor; r_standard_suffix(); cursor = limit - v_5; int v_6 = limit - cursor; lab0: { lab1: { int v_7 = limit - cursor; lab2: { if (!(B_standard_suffix_removed)) { break lab2; } break lab1; } cursor = limit - v_7; if (!r_verb_suffix()) { break lab0; } } } cursor = limit - v_6; int v_8 = limit - cursor; r_vowel_suffix(); cursor = limit - v_8; cursor = limit_backward; int v_9 = cursor; r_postlude(); cursor = v_9; return true; } @Override public boolean equals(Object o) { return o instanceof romanianStemmer; } @Override public int hashCode() { return romanianStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000161 14523004075 032661 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/russianStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/russianStemmer.j0100644 0000000 0000000 00000036112 14523004075 034311 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class russianStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("\u0432", -1, 1), new Among("\u0438\u0432", 0, 2), new Among("\u044B\u0432", 0, 2), new Among("\u0432\u0448\u0438", -1, 1), new Among("\u0438\u0432\u0448\u0438", 3, 2), new Among("\u044B\u0432\u0448\u0438", 3, 2), new Among("\u0432\u0448\u0438\u0441\u044C", -1, 1), new Among("\u0438\u0432\u0448\u0438\u0441\u044C", 6, 2), new Among("\u044B\u0432\u0448\u0438\u0441\u044C", 6, 2) }; private final static Among a_1[] = { new Among("\u0435\u0435", -1, 1), new Among("\u0438\u0435", -1, 1), new Among("\u043E\u0435", -1, 1), new Among("\u044B\u0435", -1, 1), new Among("\u0438\u043C\u0438", -1, 1), new Among("\u044B\u043C\u0438", -1, 1), new Among("\u0435\u0439", -1, 1), new Among("\u0438\u0439", -1, 1), new Among("\u043E\u0439", -1, 1), new Among("\u044B\u0439", -1, 1), new Among("\u0435\u043C", -1, 1), new Among("\u0438\u043C", -1, 1), new Among("\u043E\u043C", -1, 1), new Among("\u044B\u043C", -1, 1), new Among("\u0435\u0433\u043E", -1, 1), new Among("\u043E\u0433\u043E", -1, 1), new Among("\u0435\u043C\u0443", -1, 1), new Among("\u043E\u043C\u0443", -1, 1), new Among("\u0438\u0445", -1, 1), new Among("\u044B\u0445", -1, 1), new Among("\u0435\u044E", -1, 1), new Among("\u043E\u044E", -1, 1), new Among("\u0443\u044E", -1, 1), new Among("\u044E\u044E", -1, 1), new Among("\u0430\u044F", -1, 1), new Among("\u044F\u044F", -1, 1) }; private final static Among a_2[] = { new Among("\u0435\u043C", -1, 1), new Among("\u043D\u043D", -1, 1), new Among("\u0432\u0448", -1, 1), new Among("\u0438\u0432\u0448", 2, 2), new Among("\u044B\u0432\u0448", 2, 2), new Among("\u0449", -1, 1), new Among("\u044E\u0449", 5, 1), new Among("\u0443\u044E\u0449", 6, 2) }; private final static Among a_3[] = { new Among("\u0441\u044C", -1, 1), new Among("\u0441\u044F", -1, 1) }; private final static Among a_4[] = { new Among("\u043B\u0430", -1, 1), new Among("\u0438\u043B\u0430", 0, 2), new Among("\u044B\u043B\u0430", 0, 2), new Among("\u043D\u0430", -1, 1), new Among("\u0435\u043D\u0430", 3, 2), new Among("\u0435\u0442\u0435", -1, 1), new Among("\u0438\u0442\u0435", -1, 2), new Among("\u0439\u0442\u0435", -1, 1), new Among("\u0435\u0439\u0442\u0435", 7, 2), new Among("\u0443\u0439\u0442\u0435", 7, 2), new Among("\u043B\u0438", -1, 1), new Among("\u0438\u043B\u0438", 10, 2), new Among("\u044B\u043B\u0438", 10, 2), new Among("\u0439", -1, 1), new Among("\u0435\u0439", 13, 2), new Among("\u0443\u0439", 13, 2), new Among("\u043B", -1, 1), new Among("\u0438\u043B", 16, 2), new Among("\u044B\u043B", 16, 2), new Among("\u0435\u043C", -1, 1), new Among("\u0438\u043C", -1, 2), new Among("\u044B\u043C", -1, 2), new Among("\u043D", -1, 1), new Among("\u0435\u043D", 22, 2), new Among("\u043B\u043E", -1, 1), new Among("\u0438\u043B\u043E", 24, 2), new Among("\u044B\u043B\u043E", 24, 2), new Among("\u043D\u043E", -1, 1), new Among("\u0435\u043D\u043E", 27, 2), new Among("\u043D\u043D\u043E", 27, 1), new Among("\u0435\u0442", -1, 1), new Among("\u0443\u0435\u0442", 30, 2), new Among("\u0438\u0442", -1, 2), new Among("\u044B\u0442", -1, 2), new Among("\u044E\u0442", -1, 1), new Among("\u0443\u044E\u0442", 34, 2), new Among("\u044F\u0442", -1, 2), new Among("\u043D\u044B", -1, 1), new Among("\u0435\u043D\u044B", 37, 2), new Among("\u0442\u044C", -1, 1), new Among("\u0438\u0442\u044C", 39, 2), new Among("\u044B\u0442\u044C", 39, 2), new Among("\u0435\u0448\u044C", -1, 1), new Among("\u0438\u0448\u044C", -1, 2), new Among("\u044E", -1, 2), new Among("\u0443\u044E", 44, 2) }; private final static Among a_5[] = { new Among("\u0430", -1, 1), new Among("\u0435\u0432", -1, 1), new Among("\u043E\u0432", -1, 1), new Among("\u0435", -1, 1), new Among("\u0438\u0435", 3, 1), new Among("\u044C\u0435", 3, 1), new Among("\u0438", -1, 1), new Among("\u0435\u0438", 6, 1), new Among("\u0438\u0438", 6, 1), new Among("\u0430\u043C\u0438", 6, 1), new Among("\u044F\u043C\u0438", 6, 1), new Among("\u0438\u044F\u043C\u0438", 10, 1), new Among("\u0439", -1, 1), new Among("\u0435\u0439", 12, 1), new Among("\u0438\u0435\u0439", 13, 1), new Among("\u0438\u0439", 12, 1), new Among("\u043E\u0439", 12, 1), new Among("\u0430\u043C", -1, 1), new Among("\u0435\u043C", -1, 1), new Among("\u0438\u0435\u043C", 18, 1), new Among("\u043E\u043C", -1, 1), new Among("\u044F\u043C", -1, 1), new Among("\u0438\u044F\u043C", 21, 1), new Among("\u043E", -1, 1), new Among("\u0443", -1, 1), new Among("\u0430\u0445", -1, 1), new Among("\u044F\u0445", -1, 1), new Among("\u0438\u044F\u0445", 26, 1), new Among("\u044B", -1, 1), new Among("\u044C", -1, 1), new Among("\u044E", -1, 1), new Among("\u0438\u044E", 30, 1), new Among("\u044C\u044E", 30, 1), new Among("\u044F", -1, 1), new Among("\u0438\u044F", 33, 1), new Among("\u044C\u044F", 33, 1) }; private final static Among a_6[] = { new Among("\u043E\u0441\u0442", -1, 1), new Among("\u043E\u0441\u0442\u044C", -1, 1) }; private final static Among a_7[] = { new Among("\u0435\u0439\u0448\u0435", -1, 1), new Among("\u043D", -1, 2), new Among("\u0435\u0439\u0448", -1, 1), new Among("\u044C", -1, 3) }; private static final char g_v[] = {33, 65, 8, 232}; private int I_p2; private int I_pV; private boolean r_mark_regions() { I_pV = limit; I_p2 = limit; int v_1 = cursor; lab0: { golab1: while (true) { lab2: { if (!(in_grouping(g_v, 1072, 1103))) { break lab2; } break golab1; } if (cursor >= limit) { break lab0; } cursor++; } I_pV = cursor; golab3: while (true) { lab4: { if (!(out_grouping(g_v, 1072, 1103))) { break lab4; } break golab3; } if (cursor >= limit) { break lab0; } cursor++; } golab5: while (true) { lab6: { if (!(in_grouping(g_v, 1072, 1103))) { break lab6; } break golab5; } if (cursor >= limit) { break lab0; } cursor++; } golab7: while (true) { lab8: { if (!(out_grouping(g_v, 1072, 1103))) { break lab8; } break golab7; } if (cursor >= limit) { break lab0; } cursor++; } I_p2 = cursor; } cursor = v_1; return true; } private boolean r_R2() { return I_p2 <= cursor; } private boolean r_perfective_gerund() { int among_var; ket = cursor; among_var = find_among_b(a_0); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: lab0: { int v_1 = limit - cursor; lab1: { if (!(eq_s_b("\u0430"))) { break lab1; } break lab0; } cursor = limit - v_1; if (!(eq_s_b("\u044F"))) { return false; } } slice_del(); break; case 2: slice_del(); break; } return true; } private boolean r_adjective() { ket = cursor; if (find_among_b(a_1) == 0) { return false; } bra = cursor; slice_del(); return true; } private boolean r_adjectival() { int among_var; if (!r_adjective()) { return false; } int v_1 = limit - cursor; lab0: { ket = cursor; among_var = find_among_b(a_2); if (among_var == 0) { cursor = limit - v_1; break lab0; } bra = cursor; switch (among_var) { case 1: lab1: { int v_2 = limit - cursor; lab2: { if (!(eq_s_b("\u0430"))) { break lab2; } break lab1; } cursor = limit - v_2; if (!(eq_s_b("\u044F"))) { cursor = limit - v_1; break lab0; } } slice_del(); break; case 2: slice_del(); break; } } return true; } private boolean r_reflexive() { ket = cursor; if (find_among_b(a_3) == 0) { return false; } bra = cursor; slice_del(); return true; } private boolean r_verb() { int among_var; ket = cursor; among_var = find_among_b(a_4); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: lab0: { int v_1 = limit - cursor; lab1: { if (!(eq_s_b("\u0430"))) { break lab1; } break lab0; } cursor = limit - v_1; if (!(eq_s_b("\u044F"))) { return false; } } slice_del(); break; case 2: slice_del(); break; } return true; } private boolean r_noun() { ket = cursor; if (find_among_b(a_5) == 0) { return false; } bra = cursor; slice_del(); return true; } private boolean r_derivational() { ket = cursor; if (find_among_b(a_6) == 0) { return false; } bra = cursor; if (!r_R2()) { return false; } slice_del(); return true; } private boolean r_tidy_up() { int among_var; ket = cursor; among_var = find_among_b(a_7); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: slice_del(); ket = cursor; if (!(eq_s_b("\u043D"))) { return false; } bra = cursor; if (!(eq_s_b("\u043D"))) { return false; } slice_del(); break; case 2: if (!(eq_s_b("\u043D"))) { return false; } slice_del(); break; case 3: slice_del(); break; } return true; } public boolean stem() { int v_1 = cursor; lab0: { while (true) { int v_2 = cursor; lab1: { golab2: while (true) { int v_3 = cursor; lab3: { bra = cursor; if (!(eq_s("\u0451"))) { break lab3; } ket = cursor; cursor = v_3; break golab2; } cursor = v_3; if (cursor >= limit) { break lab1; } cursor++; } slice_from("\u0435"); continue; } cursor = v_2; break; } } cursor = v_1; r_mark_regions(); limit_backward = cursor; cursor = limit; if (cursor < I_pV) { return false; } int v_6 = limit_backward; limit_backward = I_pV; int v_7 = limit - cursor; lab4: { lab5: { int v_8 = limit - cursor; lab6: { if (!r_perfective_gerund()) { break lab6; } break lab5; } cursor = limit - v_8; int v_9 = limit - cursor; lab7: { if (!r_reflexive()) { cursor = limit - v_9; break lab7; } } lab8: { int v_10 = limit - cursor; lab9: { if (!r_adjectival()) { break lab9; } break lab8; } cursor = limit - v_10; lab10: { if (!r_verb()) { break lab10; } break lab8; } cursor = limit - v_10; if (!r_noun()) { break lab4; } } } } cursor = limit - v_7; int v_11 = limit - cursor; lab11: { ket = cursor; if (!(eq_s_b("\u0438"))) { cursor = limit - v_11; break lab11; } bra = cursor; slice_del(); } int v_12 = limit - cursor; r_derivational(); cursor = limit - v_12; int v_13 = limit - cursor; r_tidy_up(); cursor = limit - v_13; limit_backward = v_6; cursor = limit_backward; return true; } @Override public boolean equals(Object o) { return o instanceof russianStemmer; } @Override public int hashCode() { return russianStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000161 14523004075 032661 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/spanishStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/spanishStemmer.j0100644 0000000 0000000 00000051705 14523004075 034277 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class spanishStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("", -1, 6), new Among("\u00E1", 0, 1), new Among("\u00E9", 0, 2), new Among("\u00ED", 0, 3), new Among("\u00F3", 0, 4), new Among("\u00FA", 0, 5) }; private final static Among a_1[] = { new Among("la", -1, -1), new Among("sela", 0, -1), new Among("le", -1, -1), new Among("me", -1, -1), new Among("se", -1, -1), new Among("lo", -1, -1), new Among("selo", 5, -1), new Among("las", -1, -1), new Among("selas", 7, -1), new Among("les", -1, -1), new Among("los", -1, -1), new Among("selos", 10, -1), new Among("nos", -1, -1) }; private final static Among a_2[] = { new Among("ando", -1, 6), new Among("iendo", -1, 6), new Among("yendo", -1, 7), new Among("\u00E1ndo", -1, 2), new Among("i\u00E9ndo", -1, 1), new Among("ar", -1, 6), new Among("er", -1, 6), new Among("ir", -1, 6), new Among("\u00E1r", -1, 3), new Among("\u00E9r", -1, 4), new Among("\u00EDr", -1, 5) }; private final static Among a_3[] = { new Among("ic", -1, -1), new Among("ad", -1, -1), new Among("os", -1, -1), new Among("iv", -1, 1) }; private final static Among a_4[] = { new Among("able", -1, 1), new Among("ible", -1, 1), new Among("ante", -1, 1) }; private final static Among a_5[] = { new Among("ic", -1, 1), new Among("abil", -1, 1), new Among("iv", -1, 1) }; private final static Among a_6[] = { new Among("ica", -1, 1), new Among("ancia", -1, 2), new Among("encia", -1, 5), new Among("adora", -1, 2), new Among("osa", -1, 1), new Among("ista", -1, 1), new Among("iva", -1, 9), new Among("anza", -1, 1), new Among("log\u00EDa", -1, 3), new Among("idad", -1, 8), new Among("able", -1, 1), new Among("ible", -1, 1), new Among("ante", -1, 2), new Among("mente", -1, 7), new Among("amente", 13, 6), new Among("aci\u00F3n", -1, 2), new Among("uci\u00F3n", -1, 4), new Among("ico", -1, 1), new Among("ismo", -1, 1), new Among("oso", -1, 1), new Among("amiento", -1, 1), new Among("imiento", -1, 1), new Among("ivo", -1, 9), new Among("ador", -1, 2), new Among("icas", -1, 1), new Among("ancias", -1, 2), new Among("encias", -1, 5), new Among("adoras", -1, 2), new Among("osas", -1, 1), new Among("istas", -1, 1), new Among("ivas", -1, 9), new Among("anzas", -1, 1), new Among("log\u00EDas", -1, 3), new Among("idades", -1, 8), new Among("ables", -1, 1), new Among("ibles", -1, 1), new Among("aciones", -1, 2), new Among("uciones", -1, 4), new Among("adores", -1, 2), new Among("antes", -1, 2), new Among("icos", -1, 1), new Among("ismos", -1, 1), new Among("osos", -1, 1), new Among("amientos", -1, 1), new Among("imientos", -1, 1), new Among("ivos", -1, 9) }; private final static Among a_7[] = { new Among("ya", -1, 1), new Among("ye", -1, 1), new Among("yan", -1, 1), new Among("yen", -1, 1), new Among("yeron", -1, 1), new Among("yendo", -1, 1), new Among("yo", -1, 1), new Among("yas", -1, 1), new Among("yes", -1, 1), new Among("yais", -1, 1), new Among("yamos", -1, 1), new Among("y\u00F3", -1, 1) }; private final static Among a_8[] = { new Among("aba", -1, 2), new Among("ada", -1, 2), new Among("ida", -1, 2), new Among("ara", -1, 2), new Among("iera", -1, 2), new Among("\u00EDa", -1, 2), new Among("ar\u00EDa", 5, 2), new Among("er\u00EDa", 5, 2), new Among("ir\u00EDa", 5, 2), new Among("ad", -1, 2), new Among("ed", -1, 2), new Among("id", -1, 2), new Among("ase", -1, 2), new Among("iese", -1, 2), new Among("aste", -1, 2), new Among("iste", -1, 2), new Among("an", -1, 2), new Among("aban", 16, 2), new Among("aran", 16, 2), new Among("ieran", 16, 2), new Among("\u00EDan", 16, 2), new Among("ar\u00EDan", 20, 2), new Among("er\u00EDan", 20, 2), new Among("ir\u00EDan", 20, 2), new Among("en", -1, 1), new Among("asen", 24, 2), new Among("iesen", 24, 2), new Among("aron", -1, 2), new Among("ieron", -1, 2), new Among("ar\u00E1n", -1, 2), new Among("er\u00E1n", -1, 2), new Among("ir\u00E1n", -1, 2), new Among("ado", -1, 2), new Among("ido", -1, 2), new Among("ando", -1, 2), new Among("iendo", -1, 2), new Among("ar", -1, 2), new Among("er", -1, 2), new Among("ir", -1, 2), new Among("as", -1, 2), new Among("abas", 39, 2), new Among("adas", 39, 2), new Among("idas", 39, 2), new Among("aras", 39, 2), new Among("ieras", 39, 2), new Among("\u00EDas", 39, 2), new Among("ar\u00EDas", 45, 2), new Among("er\u00EDas", 45, 2), new Among("ir\u00EDas", 45, 2), new Among("es", -1, 1), new Among("ases", 49, 2), new Among("ieses", 49, 2), new Among("abais", -1, 2), new Among("arais", -1, 2), new Among("ierais", -1, 2), new Among("\u00EDais", -1, 2), new Among("ar\u00EDais", 55, 2), new Among("er\u00EDais", 55, 2), new Among("ir\u00EDais", 55, 2), new Among("aseis", -1, 2), new Among("ieseis", -1, 2), new Among("asteis", -1, 2), new Among("isteis", -1, 2), new Among("\u00E1is", -1, 2), new Among("\u00E9is", -1, 1), new Among("ar\u00E9is", 64, 2), new Among("er\u00E9is", 64, 2), new Among("ir\u00E9is", 64, 2), new Among("ados", -1, 2), new Among("idos", -1, 2), new Among("amos", -1, 2), new Among("\u00E1bamos", 70, 2), new Among("\u00E1ramos", 70, 2), new Among("i\u00E9ramos", 70, 2), new Among("\u00EDamos", 70, 2), new Among("ar\u00EDamos", 74, 2), new Among("er\u00EDamos", 74, 2), new Among("ir\u00EDamos", 74, 2), new Among("emos", -1, 1), new Among("aremos", 78, 2), new Among("eremos", 78, 2), new Among("iremos", 78, 2), new Among("\u00E1semos", 78, 2), new Among("i\u00E9semos", 78, 2), new Among("imos", -1, 2), new Among("ar\u00E1s", -1, 2), new Among("er\u00E1s", -1, 2), new Among("ir\u00E1s", -1, 2), new Among("\u00EDs", -1, 2), new Among("ar\u00E1", -1, 2), new Among("er\u00E1", -1, 2), new Among("ir\u00E1", -1, 2), new Among("ar\u00E9", -1, 2), new Among("er\u00E9", -1, 2), new Among("ir\u00E9", -1, 2), new Among("i\u00F3", -1, 2) }; private final static Among a_9[] = { new Among("a", -1, 1), new Among("e", -1, 2), new Among("o", -1, 1), new Among("os", -1, 1), new Among("\u00E1", -1, 1), new Among("\u00E9", -1, 2), new Among("\u00ED", -1, 1), new Among("\u00F3", -1, 1) }; private static final char g_v[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 10}; private int I_p2; private int I_p1; private int I_pV; private boolean r_mark_regions() { I_pV = limit; I_p1 = limit; I_p2 = limit; int v_1 = cursor; lab0: { lab1: { int v_2 = cursor; lab2: { if (!(in_grouping(g_v, 97, 252))) { break lab2; } lab3: { int v_3 = cursor; lab4: { if (!(out_grouping(g_v, 97, 252))) { break lab4; } golab5: while (true) { lab6: { if (!(in_grouping(g_v, 97, 252))) { break lab6; } break golab5; } if (cursor >= limit) { break lab4; } cursor++; } break lab3; } cursor = v_3; if (!(in_grouping(g_v, 97, 252))) { break lab2; } golab7: while (true) { lab8: { if (!(out_grouping(g_v, 97, 252))) { break lab8; } break golab7; } if (cursor >= limit) { break lab2; } cursor++; } } break lab1; } cursor = v_2; if (!(out_grouping(g_v, 97, 252))) { break lab0; } lab9: { int v_6 = cursor; lab10: { if (!(out_grouping(g_v, 97, 252))) { break lab10; } golab11: while (true) { lab12: { if (!(in_grouping(g_v, 97, 252))) { break lab12; } break golab11; } if (cursor >= limit) { break lab10; } cursor++; } break lab9; } cursor = v_6; if (!(in_grouping(g_v, 97, 252))) { break lab0; } if (cursor >= limit) { break lab0; } cursor++; } } I_pV = cursor; } cursor = v_1; int v_8 = cursor; lab13: { golab14: while (true) { lab15: { if (!(in_grouping(g_v, 97, 252))) { break lab15; } break golab14; } if (cursor >= limit) { break lab13; } cursor++; } golab16: while (true) { lab17: { if (!(out_grouping(g_v, 97, 252))) { break lab17; } break golab16; } if (cursor >= limit) { break lab13; } cursor++; } I_p1 = cursor; golab18: while (true) { lab19: { if (!(in_grouping(g_v, 97, 252))) { break lab19; } break golab18; } if (cursor >= limit) { break lab13; } cursor++; } golab20: while (true) { lab21: { if (!(out_grouping(g_v, 97, 252))) { break lab21; } break golab20; } if (cursor >= limit) { break lab13; } cursor++; } I_p2 = cursor; } cursor = v_8; return true; } private boolean r_postlude() { int among_var; while (true) { int v_1 = cursor; lab0: { bra = cursor; among_var = find_among(a_0); ket = cursor; switch (among_var) { case 1: slice_from("a"); break; case 2: slice_from("e"); break; case 3: slice_from("i"); break; case 4: slice_from("o"); break; case 5: slice_from("u"); break; case 6: if (cursor >= limit) { break lab0; } cursor++; break; } continue; } cursor = v_1; break; } return true; } private boolean r_RV() { return I_pV <= cursor; } private boolean r_R1() { return I_p1 <= cursor; } private boolean r_R2() { return I_p2 <= cursor; } private boolean r_attached_pronoun() { int among_var; ket = cursor; if (find_among_b(a_1) == 0) { return false; } bra = cursor; among_var = find_among_b(a_2); if (among_var == 0) { return false; } if (!r_RV()) { return false; } switch (among_var) { case 1: bra = cursor; slice_from("iendo"); break; case 2: bra = cursor; slice_from("ando"); break; case 3: bra = cursor; slice_from("ar"); break; case 4: bra = cursor; slice_from("er"); break; case 5: bra = cursor; slice_from("ir"); break; case 6: slice_del(); break; case 7: if (!(eq_s_b("u"))) { return false; } slice_del(); break; } return true; } private boolean r_standard_suffix() { int among_var; ket = cursor; among_var = find_among_b(a_6); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: if (!r_R2()) { return false; } slice_del(); break; case 2: if (!r_R2()) { return false; } slice_del(); int v_1 = limit - cursor; lab0: { ket = cursor; if (!(eq_s_b("ic"))) { cursor = limit - v_1; break lab0; } bra = cursor; if (!r_R2()) { cursor = limit - v_1; break lab0; } slice_del(); } break; case 3: if (!r_R2()) { return false; } slice_from("log"); break; case 4: if (!r_R2()) { return false; } slice_from("u"); break; case 5: if (!r_R2()) { return false; } slice_from("ente"); break; case 6: if (!r_R1()) { return false; } slice_del(); int v_2 = limit - cursor; lab1: { ket = cursor; among_var = find_among_b(a_3); if (among_var == 0) { cursor = limit - v_2; break lab1; } bra = cursor; if (!r_R2()) { cursor = limit - v_2; break lab1; } slice_del(); switch (among_var) { case 1: ket = cursor; if (!(eq_s_b("at"))) { cursor = limit - v_2; break lab1; } bra = cursor; if (!r_R2()) { cursor = limit - v_2; break lab1; } slice_del(); break; } } break; case 7: if (!r_R2()) { return false; } slice_del(); int v_3 = limit - cursor; lab2: { ket = cursor; if (find_among_b(a_4) == 0) { cursor = limit - v_3; break lab2; } bra = cursor; if (!r_R2()) { cursor = limit - v_3; break lab2; } slice_del(); } break; case 8: if (!r_R2()) { return false; } slice_del(); int v_4 = limit - cursor; lab3: { ket = cursor; if (find_among_b(a_5) == 0) { cursor = limit - v_4; break lab3; } bra = cursor; if (!r_R2()) { cursor = limit - v_4; break lab3; } slice_del(); } break; case 9: if (!r_R2()) { return false; } slice_del(); int v_5 = limit - cursor; lab4: { ket = cursor; if (!(eq_s_b("at"))) { cursor = limit - v_5; break lab4; } bra = cursor; if (!r_R2()) { cursor = limit - v_5; break lab4; } slice_del(); } break; } return true; } private boolean r_y_verb_suffix() { if (cursor < I_pV) { return false; } int v_2 = limit_backward; limit_backward = I_pV; ket = cursor; if (find_among_b(a_7) == 0) { limit_backward = v_2; return false; } bra = cursor; limit_backward = v_2; if (!(eq_s_b("u"))) { return false; } slice_del(); return true; } private boolean r_verb_suffix() { int among_var; if (cursor < I_pV) { return false; } int v_2 = limit_backward; limit_backward = I_pV; ket = cursor; among_var = find_among_b(a_8); if (among_var == 0) { limit_backward = v_2; return false; } bra = cursor; limit_backward = v_2; switch (among_var) { case 1: int v_3 = limit - cursor; lab0: { if (!(eq_s_b("u"))) { cursor = limit - v_3; break lab0; } int v_4 = limit - cursor; if (!(eq_s_b("g"))) { cursor = limit - v_3; break lab0; } cursor = limit - v_4; } bra = cursor; slice_del(); break; case 2: slice_del(); break; } return true; } private boolean r_residual_suffix() { int among_var; ket = cursor; among_var = find_among_b(a_9); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: if (!r_RV()) { return false; } slice_del(); break; case 2: if (!r_RV()) { return false; } slice_del(); int v_1 = limit - cursor; lab0: { ket = cursor; if (!(eq_s_b("u"))) { cursor = limit - v_1; break lab0; } bra = cursor; int v_2 = limit - cursor; if (!(eq_s_b("g"))) { cursor = limit - v_1; break lab0; } cursor = limit - v_2; if (!r_RV()) { cursor = limit - v_1; break lab0; } slice_del(); } break; } return true; } public boolean stem() { r_mark_regions(); limit_backward = cursor; cursor = limit; int v_2 = limit - cursor; r_attached_pronoun(); cursor = limit - v_2; int v_3 = limit - cursor; lab0: { lab1: { int v_4 = limit - cursor; lab2: { if (!r_standard_suffix()) { break lab2; } break lab1; } cursor = limit - v_4; lab3: { if (!r_y_verb_suffix()) { break lab3; } break lab1; } cursor = limit - v_4; if (!r_verb_suffix()) { break lab0; } } } cursor = limit - v_3; int v_5 = limit - cursor; r_residual_suffix(); cursor = limit - v_5; cursor = limit_backward; int v_6 = cursor; r_postlude(); cursor = v_6; return true; } @Override public boolean equals(Object o) { return o instanceof spanishStemmer; } @Override public int hashCode() { return spanishStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000161 14523004075 032661 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/swedishStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/swedishStemmer.j0100644 0000000 0000000 00000016121 14523004075 034271 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class swedishStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("a", -1, 1), new Among("arna", 0, 1), new Among("erna", 0, 1), new Among("heterna", 2, 1), new Among("orna", 0, 1), new Among("ad", -1, 1), new Among("e", -1, 1), new Among("ade", 6, 1), new Among("ande", 6, 1), new Among("arne", 6, 1), new Among("are", 6, 1), new Among("aste", 6, 1), new Among("en", -1, 1), new Among("anden", 12, 1), new Among("aren", 12, 1), new Among("heten", 12, 1), new Among("ern", -1, 1), new Among("ar", -1, 1), new Among("er", -1, 1), new Among("heter", 18, 1), new Among("or", -1, 1), new Among("s", -1, 2), new Among("as", 21, 1), new Among("arnas", 22, 1), new Among("ernas", 22, 1), new Among("ornas", 22, 1), new Among("es", 21, 1), new Among("ades", 26, 1), new Among("andes", 26, 1), new Among("ens", 21, 1), new Among("arens", 29, 1), new Among("hetens", 29, 1), new Among("erns", 21, 1), new Among("at", -1, 1), new Among("andet", -1, 1), new Among("het", -1, 1), new Among("ast", -1, 1) }; private final static Among a_1[] = { new Among("dd", -1, -1), new Among("gd", -1, -1), new Among("nn", -1, -1), new Among("dt", -1, -1), new Among("gt", -1, -1), new Among("kt", -1, -1), new Among("tt", -1, -1) }; private final static Among a_2[] = { new Among("ig", -1, 1), new Among("lig", 0, 1), new Among("els", -1, 1), new Among("fullt", -1, 3), new Among("\u00F6st", -1, 2) }; private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 32}; private static final char g_s_ending[] = {119, 127, 149}; private static final char g_ost_ending[] = {173, 58}; private int I_x; private int I_p1; private boolean r_mark_regions() { I_p1 = limit; int v_1 = cursor; { int c = cursor + 3; if (c > limit) { return false; } cursor = c; } I_x = cursor; cursor = v_1; golab0: while (true) { int v_2 = cursor; lab1: { if (!(in_grouping(g_v, 97, 246))) { break lab1; } cursor = v_2; break golab0; } cursor = v_2; if (cursor >= limit) { return false; } cursor++; } golab2: while (true) { lab3: { if (!(out_grouping(g_v, 97, 246))) { break lab3; } break golab2; } if (cursor >= limit) { return false; } cursor++; } I_p1 = cursor; lab4: { if (I_p1 >= I_x) { break lab4; } I_p1 = I_x; } return true; } private boolean r_main_suffix() { int among_var; if (cursor < I_p1) { return false; } int v_2 = limit_backward; limit_backward = I_p1; ket = cursor; among_var = find_among_b(a_0); if (among_var == 0) { limit_backward = v_2; return false; } bra = cursor; limit_backward = v_2; switch (among_var) { case 1: slice_del(); break; case 2: if (!(in_grouping_b(g_s_ending, 98, 121))) { return false; } slice_del(); break; } return true; } private boolean r_consonant_pair() { if (cursor < I_p1) { return false; } int v_2 = limit_backward; limit_backward = I_p1; int v_3 = limit - cursor; if (find_among_b(a_1) == 0) { limit_backward = v_2; return false; } cursor = limit - v_3; ket = cursor; if (cursor <= limit_backward) { limit_backward = v_2; return false; } cursor--; bra = cursor; slice_del(); limit_backward = v_2; return true; } private boolean r_other_suffix() { int among_var; if (cursor < I_p1) { return false; } int v_2 = limit_backward; limit_backward = I_p1; ket = cursor; among_var = find_among_b(a_2); if (among_var == 0) { limit_backward = v_2; return false; } bra = cursor; limit_backward = v_2; switch (among_var) { case 1: slice_del(); break; case 2: if (!(in_grouping_b(g_ost_ending, 105, 118))) { return false; } slice_from("\u00F6s"); break; case 3: slice_from("full"); break; } return true; } public boolean stem() { int v_1 = cursor; r_mark_regions(); cursor = v_1; limit_backward = cursor; cursor = limit; int v_2 = limit - cursor; r_main_suffix(); cursor = limit - v_2; int v_3 = limit - cursor; r_consonant_pair(); cursor = limit - v_3; int v_4 = limit - cursor; r_other_suffix(); cursor = limit - v_4; cursor = limit_backward; return true; } @Override public boolean equals(Object o) { return o instanceof swedishStemmer; } @Override public int hashCode() { return swedishStemmer.class.getName().hashCode(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_stemmer_snowball_0100644 0000000 0000000 00000000161 14523004075 032661 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/turkishStemmer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/stemmer/snowball/turkishStemmer.j0100644 0000000 0000000 00000136646 14523004075 034333 0ustar00rootroot0000000 0000000 // CHECKSTYLE:OFF /* Copyright (c) 2001, Dr Martin Porter Copyright (c) 2002, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) package opennlp.tools.stemmer.snowball; /** * This class implements the stemming algorithm defined by a snowball script. *

* Generated by Snowball (build from 867c4ec70debd4daa7fb4d5a9f7759b47887d0b9) - https://github.com/snowballstem/snowball *

*/ @SuppressWarnings("unused") public class turkishStemmer extends AbstractSnowballStemmer { private final static Among a_0[] = { new Among("m", -1, -1), new Among("n", -1, -1), new Among("miz", -1, -1), new Among("niz", -1, -1), new Among("muz", -1, -1), new Among("nuz", -1, -1), new Among("m\u00FCz", -1, -1), new Among("n\u00FCz", -1, -1), new Among("m\u0131z", -1, -1), new Among("n\u0131z", -1, -1) }; private final static Among a_1[] = { new Among("leri", -1, -1), new Among("lar\u0131", -1, -1) }; private final static Among a_2[] = { new Among("ni", -1, -1), new Among("nu", -1, -1), new Among("n\u00FC", -1, -1), new Among("n\u0131", -1, -1) }; private final static Among a_3[] = { new Among("in", -1, -1), new Among("un", -1, -1), new Among("\u00FCn", -1, -1), new Among("\u0131n", -1, -1) }; private final static Among a_4[] = { new Among("a", -1, -1), new Among("e", -1, -1) }; private final static Among a_5[] = { new Among("na", -1, -1), new Among("ne", -1, -1) }; private final static Among a_6[] = { new Among("da", -1, -1), new Among("ta", -1, -1), new Among("de", -1, -1), new Among("te", -1, -1) }; private final static Among a_7[] = { new Among("nda", -1, -1), new Among("nde", -1, -1) }; private final static Among a_8[] = { new Among("dan", -1, -1), new Among("tan", -1, -1), new Among("den", -1, -1), new Among("ten", -1, -1) }; private final static Among a_9[] = { new Among("ndan", -1, -1), new Among("nden", -1, -1) }; private final static Among a_10[] = { new Among("la", -1, -1), new Among("le", -1, -1) }; private final static Among a_11[] = { new Among("ca", -1, -1), new Among("ce", -1, -1) }; private final static Among a_12[] = { new Among("im", -1, -1), new Among("um", -1, -1), new Among("\u00FCm", -1, -1), new Among("\u0131m", -1, -1) }; private final static Among a_13[] = { new Among("sin", -1, -1), new Among("sun", -1, -1), new Among("s\u00FCn", -1, -1), new Among("s\u0131n", -1, -1) }; private final static Among a_14[] = { new Among("iz", -1, -1), new Among("uz", -1, -1), new Among("\u00FCz", -1, -1), new Among("\u0131z", -1, -1) }; private final static Among a_15[] = { new Among("siniz", -1, -1), new Among("sunuz", -1, -1), new Among("s\u00FCn\u00FCz", -1, -1), new Among("s\u0131n\u0131z", -1, -1) }; private final static Among a_16[] = { new Among("lar", -1, -1), new Among("ler", -1, -1) }; private final static Among a_17[] = { new Among("niz", -1, -1), new Among("nuz", -1, -1), new Among("n\u00FCz", -1, -1), new Among("n\u0131z", -1, -1) }; private final static Among a_18[] = { new Among("dir", -1, -1), new Among("tir", -1, -1), new Among("dur", -1, -1), new Among("tur", -1, -1), new Among("d\u00FCr", -1, -1), new Among("t\u00FCr", -1, -1), new Among("d\u0131r", -1, -1), new Among("t\u0131r", -1, -1) }; private final static Among a_19[] = { new Among("cas\u0131na", -1, -1), new Among("cesine", -1, -1) }; private final static Among a_20[] = { new Among("di", -1, -1), new Among("ti", -1, -1), new Among("dik", -1, -1), new Among("tik", -1, -1), new Among("duk", -1, -1), new Among("tuk", -1, -1), new Among("d\u00FCk", -1, -1), new Among("t\u00FCk", -1, -1), new Among("d\u0131k", -1, -1), new Among("t\u0131k", -1, -1), new Among("dim", -1, -1), new Among("tim", -1, -1), new Among("dum", -1, -1), new Among("tum", -1, -1), new Among("d\u00FCm", -1, -1), new Among("t\u00FCm", -1, -1), new Among("d\u0131m", -1, -1), new Among("t\u0131m", -1, -1), new Among("din", -1, -1), new Among("tin", -1, -1), new Among("dun", -1, -1), new Among("tun", -1, -1), new Among("d\u00FCn", -1, -1), new Among("t\u00FCn", -1, -1), new Among("d\u0131n", -1, -1), new Among("t\u0131n", -1, -1), new Among("du", -1, -1), new Among("tu", -1, -1), new Among("d\u00FC", -1, -1), new Among("t\u00FC", -1, -1), new Among("d\u0131", -1, -1), new Among("t\u0131", -1, -1) }; private final static Among a_21[] = { new Among("sa", -1, -1), new Among("se", -1, -1), new Among("sak", -1, -1), new Among("sek", -1, -1), new Among("sam", -1, -1), new Among("sem", -1, -1), new Among("san", -1, -1), new Among("sen", -1, -1) }; private final static Among a_22[] = { new Among("mi\u015F", -1, -1), new Among("mu\u015F", -1, -1), new Among("m\u00FC\u015F", -1, -1), new Among("m\u0131\u015F", -1, -1) }; private final static Among a_23[] = { new Among("b", -1, 1), new Among("c", -1, 2), new Among("d", -1, 3), new Among("\u011F", -1, 4) }; private static final char g_vowel[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 8, 0, 0, 0, 0, 0, 0, 1}; private static final char g_U[] = {1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1}; private static final char g_vowel1[] = {1, 64, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; private static final char g_vowel2[] = {17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130}; private static final char g_vowel3[] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; private static final char g_vowel4[] = {17}; private static final char g_vowel5[] = {65}; private static final char g_vowel6[] = {65}; private boolean B_continue_stemming_noun_suffixes; private boolean r_check_vowel_harmony() { int v_1 = limit - cursor; golab0: while (true) { int v_2 = limit - cursor; lab1: { if (!(in_grouping_b(g_vowel, 97, 305))) { break lab1; } cursor = limit - v_2; break golab0; } cursor = limit - v_2; if (cursor <= limit_backward) { return false; } cursor--; } lab2: { int v_3 = limit - cursor; lab3: { if (!(eq_s_b("a"))) { break lab3; } golab4: while (true) { int v_4 = limit - cursor; lab5: { if (!(in_grouping_b(g_vowel1, 97, 305))) { break lab5; } cursor = limit - v_4; break golab4; } cursor = limit - v_4; if (cursor <= limit_backward) { break lab3; } cursor--; } break lab2; } cursor = limit - v_3; lab6: { if (!(eq_s_b("e"))) { break lab6; } golab7: while (true) { int v_5 = limit - cursor; lab8: { if (!(in_grouping_b(g_vowel2, 101, 252))) { break lab8; } cursor = limit - v_5; break golab7; } cursor = limit - v_5; if (cursor <= limit_backward) { break lab6; } cursor--; } break lab2; } cursor = limit - v_3; lab9: { if (!(eq_s_b("\u0131"))) { break lab9; } golab10: while (true) { int v_6 = limit - cursor; lab11: { if (!(in_grouping_b(g_vowel3, 97, 305))) { break lab11; } cursor = limit - v_6; break golab10; } cursor = limit - v_6; if (cursor <= limit_backward) { break lab9; } cursor--; } break lab2; } cursor = limit - v_3; lab12: { if (!(eq_s_b("i"))) { break lab12; } golab13: while (true) { int v_7 = limit - cursor; lab14: { if (!(in_grouping_b(g_vowel4, 101, 105))) { break lab14; } cursor = limit - v_7; break golab13; } cursor = limit - v_7; if (cursor <= limit_backward) { break lab12; } cursor--; } break lab2; } cursor = limit - v_3; lab15: { if (!(eq_s_b("o"))) { break lab15; } golab16: while (true) { int v_8 = limit - cursor; lab17: { if (!(in_grouping_b(g_vowel5, 111, 117))) { break lab17; } cursor = limit - v_8; break golab16; } cursor = limit - v_8; if (cursor <= limit_backward) { break lab15; } cursor--; } break lab2; } cursor = limit - v_3; lab18: { if (!(eq_s_b("\u00F6"))) { break lab18; } golab19: while (true) { int v_9 = limit - cursor; lab20: { if (!(in_grouping_b(g_vowel6, 246, 252))) { break lab20; } cursor = limit - v_9; break golab19; } cursor = limit - v_9; if (cursor <= limit_backward) { break lab18; } cursor--; } break lab2; } cursor = limit - v_3; lab21: { if (!(eq_s_b("u"))) { break lab21; } golab22: while (true) { int v_10 = limit - cursor; lab23: { if (!(in_grouping_b(g_vowel5, 111, 117))) { break lab23; } cursor = limit - v_10; break golab22; } cursor = limit - v_10; if (cursor <= limit_backward) { break lab21; } cursor--; } break lab2; } cursor = limit - v_3; if (!(eq_s_b("\u00FC"))) { return false; } golab24: while (true) { int v_11 = limit - cursor; lab25: { if (!(in_grouping_b(g_vowel6, 246, 252))) { break lab25; } cursor = limit - v_11; break golab24; } cursor = limit - v_11; if (cursor <= limit_backward) { return false; } cursor--; } } cursor = limit - v_1; return true; } private boolean r_mark_suffix_with_optional_n_consonant() { lab0: { int v_1 = limit - cursor; lab1: { if (!(eq_s_b("n"))) { break lab1; } int v_2 = limit - cursor; if (!(in_grouping_b(g_vowel, 97, 305))) { break lab1; } cursor = limit - v_2; break lab0; } cursor = limit - v_1; { int v_3 = limit - cursor; lab2: { int v_4 = limit - cursor; if (!(eq_s_b("n"))) { break lab2; } cursor = limit - v_4; return false; } cursor = limit - v_3; } int v_5 = limit - cursor; if (cursor <= limit_backward) { return false; } cursor--; if (!(in_grouping_b(g_vowel, 97, 305))) { return false; } cursor = limit - v_5; } return true; } private boolean r_mark_suffix_with_optional_s_consonant() { lab0: { int v_1 = limit - cursor; lab1: { if (!(eq_s_b("s"))) { break lab1; } int v_2 = limit - cursor; if (!(in_grouping_b(g_vowel, 97, 305))) { break lab1; } cursor = limit - v_2; break lab0; } cursor = limit - v_1; { int v_3 = limit - cursor; lab2: { int v_4 = limit - cursor; if (!(eq_s_b("s"))) { break lab2; } cursor = limit - v_4; return false; } cursor = limit - v_3; } int v_5 = limit - cursor; if (cursor <= limit_backward) { return false; } cursor--; if (!(in_grouping_b(g_vowel, 97, 305))) { return false; } cursor = limit - v_5; } return true; } private boolean r_mark_suffix_with_optional_y_consonant() { lab0: { int v_1 = limit - cursor; lab1: { if (!(eq_s_b("y"))) { break lab1; } int v_2 = limit - cursor; if (!(in_grouping_b(g_vowel, 97, 305))) { break lab1; } cursor = limit - v_2; break lab0; } cursor = limit - v_1; { int v_3 = limit - cursor; lab2: { int v_4 = limit - cursor; if (!(eq_s_b("y"))) { break lab2; } cursor = limit - v_4; return false; } cursor = limit - v_3; } int v_5 = limit - cursor; if (cursor <= limit_backward) { return false; } cursor--; if (!(in_grouping_b(g_vowel, 97, 305))) { return false; } cursor = limit - v_5; } return true; } private boolean r_mark_suffix_with_optional_U_vowel() { lab0: { int v_1 = limit - cursor; lab1: { if (!(in_grouping_b(g_U, 105, 305))) { break lab1; } int v_2 = limit - cursor; if (!(out_grouping_b(g_vowel, 97, 305))) { break lab1; } cursor = limit - v_2; break lab0; } cursor = limit - v_1; { int v_3 = limit - cursor; lab2: { int v_4 = limit - cursor; if (!(in_grouping_b(g_U, 105, 305))) { break lab2; } cursor = limit - v_4; return false; } cursor = limit - v_3; } int v_5 = limit - cursor; if (cursor <= limit_backward) { return false; } cursor--; if (!(out_grouping_b(g_vowel, 97, 305))) { return false; } cursor = limit - v_5; } return true; } private boolean r_mark_possessives() { if (find_among_b(a_0) == 0) { return false; } if (!r_mark_suffix_with_optional_U_vowel()) { return false; } return true; } private boolean r_mark_sU() { if (!r_check_vowel_harmony()) { return false; } if (!(in_grouping_b(g_U, 105, 305))) { return false; } if (!r_mark_suffix_with_optional_s_consonant()) { return false; } return true; } private boolean r_mark_lArI() { if (find_among_b(a_1) == 0) { return false; } return true; } private boolean r_mark_yU() { if (!r_check_vowel_harmony()) { return false; } if (!(in_grouping_b(g_U, 105, 305))) { return false; } if (!r_mark_suffix_with_optional_y_consonant()) { return false; } return true; } private boolean r_mark_nU() { if (!r_check_vowel_harmony()) { return false; } if (find_among_b(a_2) == 0) { return false; } return true; } private boolean r_mark_nUn() { if (!r_check_vowel_harmony()) { return false; } if (find_among_b(a_3) == 0) { return false; } if (!r_mark_suffix_with_optional_n_consonant()) { return false; } return true; } private boolean r_mark_yA() { if (!r_check_vowel_harmony()) { return false; } if (find_among_b(a_4) == 0) { return false; } if (!r_mark_suffix_with_optional_y_consonant()) { return false; } return true; } private boolean r_mark_nA() { if (!r_check_vowel_harmony()) { return false; } if (find_among_b(a_5) == 0) { return false; } return true; } private boolean r_mark_DA() { if (!r_check_vowel_harmony()) { return false; } if (find_among_b(a_6) == 0) { return false; } return true; } private boolean r_mark_ndA() { if (!r_check_vowel_harmony()) { return false; } if (find_among_b(a_7) == 0) { return false; } return true; } private boolean r_mark_DAn() { if (!r_check_vowel_harmony()) { return false; } if (find_among_b(a_8) == 0) { return false; } return true; } private boolean r_mark_ndAn() { if (!r_check_vowel_harmony()) { return false; } if (find_among_b(a_9) == 0) { return false; } return true; } private boolean r_mark_ylA() { if (!r_check_vowel_harmony()) { return false; } if (find_among_b(a_10) == 0) { return false; } if (!r_mark_suffix_with_optional_y_consonant()) { return false; } return true; } private boolean r_mark_ki() { if (!(eq_s_b("ki"))) { return false; } return true; } private boolean r_mark_ncA() { if (!r_check_vowel_harmony()) { return false; } if (find_among_b(a_11) == 0) { return false; } if (!r_mark_suffix_with_optional_n_consonant()) { return false; } return true; } private boolean r_mark_yUm() { if (!r_check_vowel_harmony()) { return false; } if (find_among_b(a_12) == 0) { return false; } if (!r_mark_suffix_with_optional_y_consonant()) { return false; } return true; } private boolean r_mark_sUn() { if (!r_check_vowel_harmony()) { return false; } if (find_among_b(a_13) == 0) { return false; } return true; } private boolean r_mark_yUz() { if (!r_check_vowel_harmony()) { return false; } if (find_among_b(a_14) == 0) { return false; } if (!r_mark_suffix_with_optional_y_consonant()) { return false; } return true; } private boolean r_mark_sUnUz() { if (find_among_b(a_15) == 0) { return false; } return true; } private boolean r_mark_lAr() { if (!r_check_vowel_harmony()) { return false; } if (find_among_b(a_16) == 0) { return false; } return true; } private boolean r_mark_nUz() { if (!r_check_vowel_harmony()) { return false; } if (find_among_b(a_17) == 0) { return false; } return true; } private boolean r_mark_DUr() { if (!r_check_vowel_harmony()) { return false; } if (find_among_b(a_18) == 0) { return false; } return true; } private boolean r_mark_cAsInA() { if (find_among_b(a_19) == 0) { return false; } return true; } private boolean r_mark_yDU() { if (!r_check_vowel_harmony()) { return false; } if (find_among_b(a_20) == 0) { return false; } if (!r_mark_suffix_with_optional_y_consonant()) { return false; } return true; } private boolean r_mark_ysA() { if (find_among_b(a_21) == 0) { return false; } if (!r_mark_suffix_with_optional_y_consonant()) { return false; } return true; } private boolean r_mark_ymUs_() { if (!r_check_vowel_harmony()) { return false; } if (find_among_b(a_22) == 0) { return false; } if (!r_mark_suffix_with_optional_y_consonant()) { return false; } return true; } private boolean r_mark_yken() { if (!(eq_s_b("ken"))) { return false; } if (!r_mark_suffix_with_optional_y_consonant()) { return false; } return true; } private boolean r_stem_nominal_verb_suffixes() { ket = cursor; B_continue_stemming_noun_suffixes = true; lab0: { int v_1 = limit - cursor; lab1: { lab2: { int v_2 = limit - cursor; lab3: { if (!r_mark_ymUs_()) { break lab3; } break lab2; } cursor = limit - v_2; lab4: { if (!r_mark_yDU()) { break lab4; } break lab2; } cursor = limit - v_2; lab5: { if (!r_mark_ysA()) { break lab5; } break lab2; } cursor = limit - v_2; if (!r_mark_yken()) { break lab1; } } break lab0; } cursor = limit - v_1; lab6: { if (!r_mark_cAsInA()) { break lab6; } lab7: { int v_3 = limit - cursor; lab8: { if (!r_mark_sUnUz()) { break lab8; } break lab7; } cursor = limit - v_3; lab9: { if (!r_mark_lAr()) { break lab9; } break lab7; } cursor = limit - v_3; lab10: { if (!r_mark_yUm()) { break lab10; } break lab7; } cursor = limit - v_3; lab11: { if (!r_mark_sUn()) { break lab11; } break lab7; } cursor = limit - v_3; lab12: { if (!r_mark_yUz()) { break lab12; } break lab7; } cursor = limit - v_3; } if (!r_mark_ymUs_()) { break lab6; } break lab0; } cursor = limit - v_1; lab13: { if (!r_mark_lAr()) { break lab13; } bra = cursor; slice_del(); int v_4 = limit - cursor; lab14: { ket = cursor; lab15: { int v_5 = limit - cursor; lab16: { if (!r_mark_DUr()) { break lab16; } break lab15; } cursor = limit - v_5; lab17: { if (!r_mark_yDU()) { break lab17; } break lab15; } cursor = limit - v_5; lab18: { if (!r_mark_ysA()) { break lab18; } break lab15; } cursor = limit - v_5; if (!r_mark_ymUs_()) { cursor = limit - v_4; break lab14; } } } B_continue_stemming_noun_suffixes = false; break lab0; } cursor = limit - v_1; lab19: { if (!r_mark_nUz()) { break lab19; } lab20: { int v_6 = limit - cursor; lab21: { if (!r_mark_yDU()) { break lab21; } break lab20; } cursor = limit - v_6; if (!r_mark_ysA()) { break lab19; } } break lab0; } cursor = limit - v_1; lab22: { lab23: { int v_7 = limit - cursor; lab24: { if (!r_mark_sUnUz()) { break lab24; } break lab23; } cursor = limit - v_7; lab25: { if (!r_mark_yUz()) { break lab25; } break lab23; } cursor = limit - v_7; lab26: { if (!r_mark_sUn()) { break lab26; } break lab23; } cursor = limit - v_7; if (!r_mark_yUm()) { break lab22; } } bra = cursor; slice_del(); int v_8 = limit - cursor; lab27: { ket = cursor; if (!r_mark_ymUs_()) { cursor = limit - v_8; break lab27; } } break lab0; } cursor = limit - v_1; if (!r_mark_DUr()) { return false; } bra = cursor; slice_del(); int v_9 = limit - cursor; lab28: { ket = cursor; lab29: { int v_10 = limit - cursor; lab30: { if (!r_mark_sUnUz()) { break lab30; } break lab29; } cursor = limit - v_10; lab31: { if (!r_mark_lAr()) { break lab31; } break lab29; } cursor = limit - v_10; lab32: { if (!r_mark_yUm()) { break lab32; } break lab29; } cursor = limit - v_10; lab33: { if (!r_mark_sUn()) { break lab33; } break lab29; } cursor = limit - v_10; lab34: { if (!r_mark_yUz()) { break lab34; } break lab29; } cursor = limit - v_10; } if (!r_mark_ymUs_()) { cursor = limit - v_9; break lab28; } } } bra = cursor; slice_del(); return true; } private boolean r_stem_suffix_chain_before_ki() { ket = cursor; if (!r_mark_ki()) { return false; } lab0: { int v_1 = limit - cursor; lab1: { if (!r_mark_DA()) { break lab1; } bra = cursor; slice_del(); int v_2 = limit - cursor; lab2: { ket = cursor; lab3: { int v_3 = limit - cursor; lab4: { if (!r_mark_lAr()) { break lab4; } bra = cursor; slice_del(); int v_4 = limit - cursor; lab5: { if (!r_stem_suffix_chain_before_ki()) { cursor = limit - v_4; break lab5; } } break lab3; } cursor = limit - v_3; if (!r_mark_possessives()) { cursor = limit - v_2; break lab2; } bra = cursor; slice_del(); int v_5 = limit - cursor; lab6: { ket = cursor; if (!r_mark_lAr()) { cursor = limit - v_5; break lab6; } bra = cursor; slice_del(); if (!r_stem_suffix_chain_before_ki()) { cursor = limit - v_5; break lab6; } } } } break lab0; } cursor = limit - v_1; lab7: { if (!r_mark_nUn()) { break lab7; } bra = cursor; slice_del(); int v_6 = limit - cursor; lab8: { ket = cursor; lab9: { int v_7 = limit - cursor; lab10: { if (!r_mark_lArI()) { break lab10; } bra = cursor; slice_del(); break lab9; } cursor = limit - v_7; lab11: { ket = cursor; lab12: { int v_8 = limit - cursor; lab13: { if (!r_mark_possessives()) { break lab13; } break lab12; } cursor = limit - v_8; if (!r_mark_sU()) { break lab11; } } bra = cursor; slice_del(); int v_9 = limit - cursor; lab14: { ket = cursor; if (!r_mark_lAr()) { cursor = limit - v_9; break lab14; } bra = cursor; slice_del(); if (!r_stem_suffix_chain_before_ki()) { cursor = limit - v_9; break lab14; } } break lab9; } cursor = limit - v_7; if (!r_stem_suffix_chain_before_ki()) { cursor = limit - v_6; break lab8; } } } break lab0; } cursor = limit - v_1; if (!r_mark_ndA()) { return false; } lab15: { int v_10 = limit - cursor; lab16: { if (!r_mark_lArI()) { break lab16; } bra = cursor; slice_del(); break lab15; } cursor = limit - v_10; lab17: { if (!r_mark_sU()) { break lab17; } bra = cursor; slice_del(); int v_11 = limit - cursor; lab18: { ket = cursor; if (!r_mark_lAr()) { cursor = limit - v_11; break lab18; } bra = cursor; slice_del(); if (!r_stem_suffix_chain_before_ki()) { cursor = limit - v_11; break lab18; } } break lab15; } cursor = limit - v_10; if (!r_stem_suffix_chain_before_ki()) { return false; } } } return true; } private boolean r_stem_noun_suffixes() { lab0: { int v_1 = limit - cursor; lab1: { ket = cursor; if (!r_mark_lAr()) { break lab1; } bra = cursor; slice_del(); int v_2 = limit - cursor; lab2: { if (!r_stem_suffix_chain_before_ki()) { cursor = limit - v_2; break lab2; } } break lab0; } cursor = limit - v_1; lab3: { ket = cursor; if (!r_mark_ncA()) { break lab3; } bra = cursor; slice_del(); int v_3 = limit - cursor; lab4: { lab5: { int v_4 = limit - cursor; lab6: { ket = cursor; if (!r_mark_lArI()) { break lab6; } bra = cursor; slice_del(); break lab5; } cursor = limit - v_4; lab7: { ket = cursor; lab8: { int v_5 = limit - cursor; lab9: { if (!r_mark_possessives()) { break lab9; } break lab8; } cursor = limit - v_5; if (!r_mark_sU()) { break lab7; } } bra = cursor; slice_del(); int v_6 = limit - cursor; lab10: { ket = cursor; if (!r_mark_lAr()) { cursor = limit - v_6; break lab10; } bra = cursor; slice_del(); if (!r_stem_suffix_chain_before_ki()) { cursor = limit - v_6; break lab10; } } break lab5; } cursor = limit - v_4; ket = cursor; if (!r_mark_lAr()) { cursor = limit - v_3; break lab4; } bra = cursor; slice_del(); if (!r_stem_suffix_chain_before_ki()) { cursor = limit - v_3; break lab4; } } } break lab0; } cursor = limit - v_1; lab11: { ket = cursor; lab12: { int v_7 = limit - cursor; lab13: { if (!r_mark_ndA()) { break lab13; } break lab12; } cursor = limit - v_7; if (!r_mark_nA()) { break lab11; } } lab14: { int v_8 = limit - cursor; lab15: { if (!r_mark_lArI()) { break lab15; } bra = cursor; slice_del(); break lab14; } cursor = limit - v_8; lab16: { if (!r_mark_sU()) { break lab16; } bra = cursor; slice_del(); int v_9 = limit - cursor; lab17: { ket = cursor; if (!r_mark_lAr()) { cursor = limit - v_9; break lab17; } bra = cursor; slice_del(); if (!r_stem_suffix_chain_before_ki()) { cursor = limit - v_9; break lab17; } } break lab14; } cursor = limit - v_8; if (!r_stem_suffix_chain_before_ki()) { break lab11; } } break lab0; } cursor = limit - v_1; lab18: { ket = cursor; lab19: { int v_10 = limit - cursor; lab20: { if (!r_mark_ndAn()) { break lab20; } break lab19; } cursor = limit - v_10; if (!r_mark_nU()) { break lab18; } } lab21: { int v_11 = limit - cursor; lab22: { if (!r_mark_sU()) { break lab22; } bra = cursor; slice_del(); int v_12 = limit - cursor; lab23: { ket = cursor; if (!r_mark_lAr()) { cursor = limit - v_12; break lab23; } bra = cursor; slice_del(); if (!r_stem_suffix_chain_before_ki()) { cursor = limit - v_12; break lab23; } } break lab21; } cursor = limit - v_11; if (!r_mark_lArI()) { break lab18; } } break lab0; } cursor = limit - v_1; lab24: { ket = cursor; if (!r_mark_DAn()) { break lab24; } bra = cursor; slice_del(); int v_13 = limit - cursor; lab25: { ket = cursor; lab26: { int v_14 = limit - cursor; lab27: { if (!r_mark_possessives()) { break lab27; } bra = cursor; slice_del(); int v_15 = limit - cursor; lab28: { ket = cursor; if (!r_mark_lAr()) { cursor = limit - v_15; break lab28; } bra = cursor; slice_del(); if (!r_stem_suffix_chain_before_ki()) { cursor = limit - v_15; break lab28; } } break lab26; } cursor = limit - v_14; lab29: { if (!r_mark_lAr()) { break lab29; } bra = cursor; slice_del(); int v_16 = limit - cursor; lab30: { if (!r_stem_suffix_chain_before_ki()) { cursor = limit - v_16; break lab30; } } break lab26; } cursor = limit - v_14; if (!r_stem_suffix_chain_before_ki()) { cursor = limit - v_13; break lab25; } } } break lab0; } cursor = limit - v_1; lab31: { ket = cursor; lab32: { int v_17 = limit - cursor; lab33: { if (!r_mark_nUn()) { break lab33; } break lab32; } cursor = limit - v_17; if (!r_mark_ylA()) { break lab31; } } bra = cursor; slice_del(); int v_18 = limit - cursor; lab34: { lab35: { int v_19 = limit - cursor; lab36: { ket = cursor; if (!r_mark_lAr()) { break lab36; } bra = cursor; slice_del(); if (!r_stem_suffix_chain_before_ki()) { break lab36; } break lab35; } cursor = limit - v_19; lab37: { ket = cursor; lab38: { int v_20 = limit - cursor; lab39: { if (!r_mark_possessives()) { break lab39; } break lab38; } cursor = limit - v_20; if (!r_mark_sU()) { break lab37; } } bra = cursor; slice_del(); int v_21 = limit - cursor; lab40: { ket = cursor; if (!r_mark_lAr()) { cursor = limit - v_21; break lab40; } bra = cursor; slice_del(); if (!r_stem_suffix_chain_before_ki()) { cursor = limit - v_21; break lab40; } } break lab35; } cursor = limit - v_19; if (!r_stem_suffix_chain_before_ki()) { cursor = limit - v_18; break lab34; } } } break lab0; } cursor = limit - v_1; lab41: { ket = cursor; if (!r_mark_lArI()) { break lab41; } bra = cursor; slice_del(); break lab0; } cursor = limit - v_1; lab42: { if (!r_stem_suffix_chain_before_ki()) { break lab42; } break lab0; } cursor = limit - v_1; lab43: { ket = cursor; lab44: { int v_22 = limit - cursor; lab45: { if (!r_mark_DA()) { break lab45; } break lab44; } cursor = limit - v_22; lab46: { if (!r_mark_yU()) { break lab46; } break lab44; } cursor = limit - v_22; if (!r_mark_yA()) { break lab43; } } bra = cursor; slice_del(); int v_23 = limit - cursor; lab47: { ket = cursor; lab48: { int v_24 = limit - cursor; lab49: { if (!r_mark_possessives()) { break lab49; } bra = cursor; slice_del(); int v_25 = limit - cursor; lab50: { ket = cursor; if (!r_mark_lAr()) { cursor = limit - v_25; break lab50; } } break lab48; } cursor = limit - v_24; if (!r_mark_lAr()) { cursor = limit - v_23; break lab47; } } bra = cursor; slice_del(); ket = cursor; if (!r_stem_suffix_chain_before_ki()) { cursor = limit - v_23; break lab47; } } break lab0; } cursor = limit - v_1; ket = cursor; lab51: { int v_26 = limit - cursor; lab52: { if (!r_mark_possessives()) { break lab52; } break lab51; } cursor = limit - v_26; if (!r_mark_sU()) { return false; } } bra = cursor; slice_del(); int v_27 = limit - cursor; lab53: { ket = cursor; if (!r_mark_lAr()) { cursor = limit - v_27; break lab53; } bra = cursor; slice_del(); if (!r_stem_suffix_chain_before_ki()) { cursor = limit - v_27; break lab53; } } } return true; } private boolean r_post_process_last_consonants() { int among_var; ket = cursor; among_var = find_among_b(a_23); if (among_var == 0) { return false; } bra = cursor; switch (among_var) { case 1: slice_from("p"); break; case 2: slice_from("\u00E7"); break; case 3: slice_from("t"); break; case 4: slice_from("k"); break; } return true; } private boolean r_append_U_to_stems_ending_with_d_or_g() { ket = cursor; bra = cursor; lab0: { int v_1 = limit - cursor; lab1: { if (!(eq_s_b("d"))) { break lab1; } break lab0; } cursor = limit - v_1; if (!(eq_s_b("g"))) { return false; } } golab2: while (true) { int v_2 = limit - cursor; lab3: { if (!(in_grouping_b(g_vowel, 97, 305))) { break lab3; } cursor = limit - v_2; break golab2; } cursor = limit - v_2; if (cursor <= limit_backward) { return false; } cursor--; } lab4: { int v_3 = limit - cursor; lab5: { lab6: { int v_4 = limit - cursor; lab7: { if (!(eq_s_b("a"))) { break lab7; } break lab6; } cursor = limit - v_4; if (!(eq_s_b("\u0131"))) { break lab5; } } slice_from("\u0131"); break lab4; } cursor = limit - v_3; lab8: { lab9: { int v_5 = limit - cursor; lab10: { if (!(eq_s_b("e"))) { break lab10; } break lab9; } cursor = limit - v_5; if (!(eq_s_b("i"))) { break lab8; } } slice_from("i"); break lab4; } cursor = limit - v_3; lab11: { lab12: { int v_6 = limit - cursor; lab13: { if (!(eq_s_b("o"))) { break lab13; } break lab12; } cursor = limit - v_6; if (!(eq_s_b("u"))) { break lab11; } } slice_from("u"); break lab4; } cursor = limit - v_3; lab14: { int v_7 = limit - cursor; lab15: { if (!(eq_s_b("\u00F6"))) { break lab15; } break lab14; } cursor = limit - v_7; if (!(eq_s_b("\u00FC"))) { return false; } } slice_from("\u00FC"); } return true; } private boolean r_is_reserved_word() { if (!(eq_s_b("ad"))) { return false; } int v_1 = limit - cursor; lab0: { if (!(eq_s_b("soy"))) { cursor = limit - v_1; break lab0; } } if (cursor > limit_backward) { return false; } return true; } private boolean r_more_than_one_syllable_word() { int v_1 = cursor; for (int v_2 = 2; v_2 > 0; v_2--) { golab0: while (true) { lab1: { if (!(in_grouping(g_vowel, 97, 305))) { break lab1; } break golab0; } if (cursor >= limit) { return false; } cursor++; } } cursor = v_1; return true; } private boolean r_postlude() { limit_backward = cursor; cursor = limit; { int v_1 = limit - cursor; lab0: { if (!r_is_reserved_word()) { break lab0; } return false; } cursor = limit - v_1; } int v_2 = limit - cursor; r_append_U_to_stems_ending_with_d_or_g(); cursor = limit - v_2; int v_3 = limit - cursor; r_post_process_last_consonants(); cursor = limit - v_3; cursor = limit_backward; return true; } public boolean stem() { if (!r_more_than_one_syllable_word()) { return false; } limit_backward = cursor; cursor = limit; int v_1 = limit - cursor; r_stem_nominal_verb_suffixes(); cursor = limit - v_1; if (!(B_continue_stemming_noun_suffixes)) { return false; } int v_2 = limit - cursor; r_stem_noun_suffixes(); cursor = limit - v_2; cursor = limit_backward; if (!r_postlude()) { return false; } return true; } @Override public boolean equals(Object o) { return o instanceof turkishStemmer; } @Override public int hashCode() { return turkishStemmer.class.getName().hashCode(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/AbstractTokenizer.java0100644 0000000 0000000 00000002455 14523004075 033754 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import opennlp.tools.util.Span; abstract class AbstractTokenizer implements Tokenizer { protected boolean keepNewLines = false; @Override public String[] tokenize(String s) { return Span.spansToStrings(tokenizePos(s), s); } /** * Switches whether to keep new lines or not. * * @param keepNewLines {@code True} if new lines are kept, {@code false} otherwise. */ public void setKeepNewLines(boolean keepNewLines) { this.keepNewLines = keepNewLines; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_tokenize_DefaultT0100644 0000000 0000000 00000000167 14523004075 032573 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/DefaultTokenContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/DefaultTokenContextGener0100644 0000000 0000000 00000011627 14523004075 034312 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; import opennlp.tools.util.StringUtil; /** * A default {@link TokenContextGenerator} which produces events for maxent decisions * for tokenization. */ public class DefaultTokenContextGenerator implements TokenContextGenerator { protected final Set inducedAbbreviations; /** * Initializes a plain {@link DefaultTokenContextGenerator} instance. */ public DefaultTokenContextGenerator() { this(Collections.emptySet()); } /** * Initializes a customized {@link DefaultTokenContextGenerator} instance via * a set of {@code inducedAbbreviations}. * * @param inducedAbbreviations The induced abbreviations to be used for this instance. */ public DefaultTokenContextGenerator(Set inducedAbbreviations) { this.inducedAbbreviations = inducedAbbreviations; } @Override public String[] getContext(String sentence, int index) { List preds = createContext(sentence, index); String[] context = new String[preds.size()]; preds.toArray(context); return context; } /** * Computes a {@link List} of features for the specified {@code sentence} * at the specified {@code index}. Extensions of {@link DefaultTokenContextGenerator} * can override this method to create a customized behaviour. * * @param sentence * The sentence to create features for. * @param index * The positional index. Must be a non-negative number or {@code 0}. * @return A {@link List} of features for the specified {@code sentence} string * at the specified index. */ protected List createContext(String sentence, int index) { List preds = new ArrayList<>(); String prefix = sentence.substring(0, index); String suffix = sentence.substring(index); preds.add("p=" + prefix); preds.add("s=" + suffix); if (index > 0) { addCharPreds("p1", sentence.charAt(index - 1), preds); if (index > 1) { addCharPreds("p2", sentence.charAt(index - 2), preds); preds.add("p21=" + sentence.charAt(index - 2) + sentence.charAt(index - 1)); } else { preds.add("p2=bok"); } preds.add("p1f1=" + sentence.charAt(index - 1) + sentence.charAt(index)); } else { preds.add("p1=bok"); } addCharPreds("f1", sentence.charAt(index), preds); if (index + 1 < sentence.length()) { addCharPreds("f2", sentence.charAt(index + 1), preds); preds.add("f12=" + sentence.charAt(index) + sentence.charAt(index + 1)); } else { preds.add("f2=bok"); } if (sentence.charAt(0) == '&' && sentence.charAt(sentence.length() - 1) == ';') { preds.add("cc");//character code } if (index == sentence.length() - 1 && inducedAbbreviations.contains(sentence)) { preds.add("pabb"); } return preds; } /** * Helper function for {@link #createContext} that appends to a given {@code key} * a fixed text sequence depending on {@code c}. The resulting combination is added * to the given list {@code preds}. * * @param key The input string to process. * @param c A character used to discriminate which fixed text shall be appended. * @param preds The list into which the resulting combinations will be added. */ protected void addCharPreds(String key, char c, List preds) { preds.add(key + "=" + c); if (Character.isLetter(c)) { preds.add(key + "_alpha"); if (Character.isUpperCase(c)) { preds.add(key + "_caps"); } } else if (Character.isDigit(c)) { preds.add(key + "_num"); } else if (StringUtil.isWhitespace(c)) { preds.add(key + "_ws"); } else { if (c == '.' || c == '?' || c == '!') { preds.add(key + "_eos"); } else if (c == '`' || c == '"' || c == '\'') { preds.add(key + "_quote"); } else if (c == '[' || c == '{' || c == '(') { preds.add(key + "_lp"); } else if (c == ']' || c == '}' || c == ')') { preds.add(key + "_rp"); } } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_tokenize_Detokeni0100644 0000000 0000000 00000000163 14523004075 032621 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/DetokenizationDictionary.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/DetokenizationDictionary0100644 0000000 0000000 00000015616 14523004075 034416 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.file.Path; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import opennlp.tools.dictionary.serializer.Attributes; import opennlp.tools.dictionary.serializer.DictionaryEntryPersistor; import opennlp.tools.dictionary.serializer.Entry; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.StringList; public class DetokenizationDictionary { public enum Operation { /** * Attaches the token to the token on the right side. */ MOVE_RIGHT, /** * Attaches the token to the token on the left side. */ MOVE_LEFT, /** * Attaches the token to the token on the left and right sides. */ MOVE_BOTH, /** * Attaches the token to the right token on first occurrence, and * to the token on the left side on the second occurrence. */ RIGHT_LEFT_MATCHING; /** * @param operation The string representation for which an {@link Operation} * instance is to be found. * @return The {@link Operation enum} instance that matches the given {@code operation}, * or {@code null} if the input has no equivalent. */ public static Operation parse(String operation) { if (operation == null) { return null; } else { if (MOVE_RIGHT.toString().equals(operation)) { return MOVE_RIGHT; } else if (MOVE_LEFT.toString().equals(operation)) { return MOVE_LEFT; } else if (MOVE_BOTH.toString().equals(operation)) { return MOVE_BOTH; } else if (RIGHT_LEFT_MATCHING.toString().equals(operation)) { return RIGHT_LEFT_MATCHING; } else { return null; } } } } private final Map operationTable = new HashMap<>(); /** * Initializes a {@link DetokenizationDictionary} instance. * * @param tokens An array of tokens that should be de-tokenized according to {@code operations}. * @param operations An array of operations which specifies which operation * should be used for the provided {@code tokens}. */ public DetokenizationDictionary(String[] tokens, DetokenizationDictionary.Operation[] operations) { if (tokens.length != operations.length) throw new IllegalArgumentException("tokens and ops must have the same length: tokens=" + tokens.length + ", operations=" + operations.length + "!"); for (int i = 0; i < tokens.length; i++) { String token = tokens[i]; DetokenizationDictionary.Operation operation = operations[i]; if (token == null) throw new IllegalArgumentException("token at index " + i + " must not be null!"); if (operation == null) throw new IllegalArgumentException("operation at index " + i + " must not be null!"); operationTable.put(token, operation); } } /** * Initializes a {@link DetokenizationDictionary} instance via a valid {@link InputStream}. * * @param in The {@link InputStream} used for loading the dictionary. * * @throws IOException Thrown if IO errors occurred during initialization. */ public DetokenizationDictionary(InputStream in) throws IOException { init(in); } /** * Initializes a {@link DetokenizationDictionary} instance via a valid {@link File}. * * @param file The {@link File} used for loading the dictionary. * * @throws IOException Thrown if IO errors occurred during initialization. */ public DetokenizationDictionary(File file) throws IOException { try (InputStream in = new BufferedInputStream(new FileInputStream(file))) { init(in); } } /** * Initializes a {@link DetokenizationDictionary} instance via a valid {@link Path}. * * @param path The {@link Path} used for loading the dictionary. * * @throws IOException Thrown if IO errors occurred during initialization. */ public DetokenizationDictionary(Path path) throws IOException { this(path.toFile()); } /* * Builds up the dictionary from an InputStream. */ private void init(InputStream in) throws IOException { DictionaryEntryPersistor.create(in, entry -> { String operationString = entry.attributes().getValue("operation"); StringList word = entry.tokens(); if (word.size() != 1) throw new InvalidFormatException("Each entry must have exactly one token! " + word); // parse operation Operation operation = Operation.parse(operationString); if (operation == null) throw new InvalidFormatException("Unknown operation type: " + operationString); operationTable.put(word.getToken(0), operation); }); } /** * @param token The input string for which a valid {@link Operation} is to be found. * @return The {@link Operation} that fits the given {@code token}. */ DetokenizationDictionary.Operation getOperation(String token) { return operationTable.get(token); } /** * Serializes the current state of a {@link DetokenizationDictionary} via an * {@link OutputStream output stream}. * * @param out A valid, open {@link OutputStream} ready to be used for serialization. * @throws IOException Thrown if IO errors occurred during serialization. */ public void serialize(OutputStream out) throws IOException { Iterator entries = new Iterator<>() { final Iterator iterator = operationTable.keySet().iterator(); public boolean hasNext() { return iterator.hasNext(); } public Entry next() { String token = iterator.next(); Attributes attributes = new Attributes(); attributes.setValue("operation", getOperation(token).toString()); return new Entry(new StringList(token), attributes); } public void remove() { throw new UnsupportedOperationException(); } }; DictionaryEntryPersistor.serialize(out, entries, false); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/Detokenizer.java0100644 0000000 0000000 00000004614 14523004075 032600 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; /** * A {@link Detokenizer} merges tokens back to their detokenized representation. */ public interface Detokenizer { /** * This enum contains an operation for every token to merge the * tokens together to their detokenized form. */ enum DetokenizationOperation { /** * The current token should be attached to the start token on the right side. */ MERGE_TO_RIGHT, /** * The current token should be attached to the string on the left side. */ MERGE_TO_LEFT, /** * The current token should be attached to the string on the left side, as * well as to the start token on the right side. */ MERGE_BOTH, /** * Do not perform a merge operation for this token, but is possible that another * token can be attached to the left or right side of this one. */ NO_OPERATION } /** * Detokenizes the collection of tokens. * * @param tokens The elements which should be detokenized. * @return The {@link DetokenizationOperation merge operations} to handle * given {@code tokens}. */ DetokenizationOperation[] detokenize(String[] tokens); /** * Detokenizes the input {@code tokens} into a String. Tokens which * are connected without a {@code whitespace} character in * between can be separated by a given {@code splitMarker}. * * @param tokens The elements which should be concatenated. * @param splitMarker The split marker or {@code null}. * * @return The concatenated tokens as a single string. */ String detokenize(String[] tokens, String splitMarker); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_tokenize_Detokeni0100644 0000000 0000000 00000000157 14523004075 032624 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/DetokenizerEvaluator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/DetokenizerEvaluator.jav0100644 0000000 0000000 00000005134 14523004075 034320 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.util.ArrayList; import opennlp.tools.cmdline.tokenizer.DetokenEvaluationErrorListener; import opennlp.tools.util.Span; import opennlp.tools.util.eval.Evaluator; import opennlp.tools.util.eval.FMeasure; /** * The {@link DetokenizerEvaluator} measures the performance of * the given {@link Detokenizer} with the provided reference * {@link TokenSample samples}. * * @see Detokenizer * @see TokenSample */ public class DetokenizerEvaluator extends Evaluator { private final FMeasure fmeasure = new FMeasure(); /** * The {@link Detokenizer} used to create the predicted tokens. */ private final Detokenizer detokenizer; /** * Initializes the current instance with the * given {@link Detokenizer}. * * @param detokenizer The {@link Detokenizer} to evaluate. * @param listeners The {@link DetokenEvaluationErrorListener evaluation sample listeners}. */ public DetokenizerEvaluator(Detokenizer detokenizer, DetokenEvaluationErrorListener... listeners) { super(listeners); this.detokenizer = detokenizer; } @Override protected TokenSample processSample(TokenSample reference) { String[] tokens = Span.spansToStrings(reference.getTokenSpans(), reference.getText()); String tokensstring = detokenizer.detokenize(tokens, null); ArrayList predictionsArray = new ArrayList<>(); ArrayList referencesArray = new ArrayList<>(); predictionsArray.add(tokensstring); referencesArray.add(reference.getText()); Object[] references = referencesArray.toArray(); Object[] predictions = predictionsArray.toArray(); fmeasure.updateScores(references, predictions); return new TokenSample(tokensstring, reference.getTokenSpans()); } public FMeasure getFMeasure() { return fmeasure; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_tokenize_Dictiona0100644 0000000 0000000 00000000160 14523004075 032606 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/DictionaryDetokenizer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/DictionaryDetokenizer.ja0100644 0000000 0000000 00000011475 14523004075 034302 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.util.HashSet; import java.util.Set; /** * A rule based detokenizer. Simple rules which indicate in which direction a token should be * moved are looked up in a {@link DetokenizationDictionary dictionary}. * * @see Detokenizer * @see DetokenizationDictionary */ public class DictionaryDetokenizer implements Detokenizer { private final DetokenizationDictionary dict; /** * Initializes a {@link DictionaryDetokenizer} instance. * * @param dict The {@link DetokenizationDictionary} to be used. */ public DictionaryDetokenizer(DetokenizationDictionary dict) { this.dict = dict; } @Override public DetokenizationOperation[] detokenize(String[] tokens) { DetokenizationOperation[] operations = new DetokenizationOperation[tokens.length]; Set matchingTokens = new HashSet<>(); for (int i = 0; i < tokens.length; i++) { DetokenizationDictionary.Operation dictOperation = dict.getOperation(tokens[i]); if (dictOperation == null) { operations[i] = Detokenizer.DetokenizationOperation.NO_OPERATION; } else if (DetokenizationDictionary.Operation.MOVE_LEFT.equals(dictOperation)) { operations[i] = Detokenizer.DetokenizationOperation.MERGE_TO_LEFT; } else if (DetokenizationDictionary.Operation.MOVE_RIGHT.equals(dictOperation)) { operations[i] = Detokenizer.DetokenizationOperation.MERGE_TO_RIGHT; } else if (DetokenizationDictionary.Operation.MOVE_BOTH.equals(dictOperation)) { operations[i] = Detokenizer.DetokenizationOperation.MERGE_BOTH; } else if (DetokenizationDictionary.Operation.RIGHT_LEFT_MATCHING.equals(dictOperation)) { if (matchingTokens.contains(tokens[i])) { // The token already occurred once, move it to the left // and clear the occurrence flag operations[i] = Detokenizer.DetokenizationOperation.MERGE_TO_LEFT; matchingTokens.remove(tokens[i]); } else { // First time this token is seen, move it to the right // and remember it operations[i] = Detokenizer.DetokenizationOperation.MERGE_TO_RIGHT; matchingTokens.add(tokens[i]); } } else { throw new IllegalStateException("Unknown operation: " + dictOperation); } } return operations; } @Override public String detokenize(String[] tokens, String splitMarker) { DetokenizationOperation[] operations = detokenize(tokens); if (tokens.length != operations.length) throw new IllegalArgumentException("tokens and operations array must have same length: tokens=" + tokens.length + ", operations=" + operations.length + "!"); StringBuilder untokenizedString = new StringBuilder(); for (int i = 0; i < tokens.length; i++) { // attach token to string buffer untokenizedString.append(tokens[i]); boolean isAppendSpace; boolean isAppendSplitMarker; // if this token is the last token do not attach a space if (i + 1 == operations.length) { isAppendSpace = false; isAppendSplitMarker = false; } // if next token move left, no space after this token, // its safe to access next token else if (operations[i + 1].equals(DetokenizationOperation.MERGE_TO_LEFT) || operations[i + 1].equals(DetokenizationOperation.MERGE_BOTH)) { isAppendSpace = false; isAppendSplitMarker = true; } // if this token is move right, no space else if (operations[i].equals(DetokenizationOperation.MERGE_TO_RIGHT) || operations[i].equals(DetokenizationOperation.MERGE_BOTH)) { isAppendSpace = false; isAppendSplitMarker = true; } else { isAppendSpace = true; isAppendSplitMarker = false; } if (isAppendSpace) { untokenizedString.append(' '); } if (isAppendSplitMarker && splitMarker != null) { untokenizedString.append(splitMarker); } } return untokenizedString.toString(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/SimpleTokenizer.java0100644 0000000 0000000 00000006446 14523004075 033446 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.util.ArrayList; import java.util.List; import opennlp.tools.util.Span; import opennlp.tools.util.StringUtil; /** * A basic {@link Tokenizer} implementation which performs tokenization * using character classes. *

* To obtain an instance of this tokenizer use the static final * {@link #INSTANCE} field. */ public class SimpleTokenizer extends AbstractTokenizer { static class CharacterEnum { static final CharacterEnum WHITESPACE = new CharacterEnum("whitespace"); static final CharacterEnum ALPHABETIC = new CharacterEnum("alphabetic"); static final CharacterEnum NUMERIC = new CharacterEnum("numeric"); static final CharacterEnum OTHER = new CharacterEnum("other"); private final String name; private CharacterEnum(String name) { this.name = name; } @Override public String toString() { return name; } } /** * Use this static reference to retrieve an instance of the * {@link SimpleTokenizer}. */ public static final SimpleTokenizer INSTANCE = new SimpleTokenizer(); private SimpleTokenizer() { } @Override public Span[] tokenizePos(String s) { CharacterEnum charType = CharacterEnum.WHITESPACE; CharacterEnum state = charType; List tokens = new ArrayList<>(); int sl = s.length(); int start = -1; char pc = 0; for (int ci = 0; ci < sl; ci++) { char c = s.charAt(ci); if (StringUtil.isWhitespace(c)) { charType = CharacterEnum.WHITESPACE; } else if (Character.isLetter(c)) { charType = CharacterEnum.ALPHABETIC; } else if (Character.isDigit(c)) { charType = CharacterEnum.NUMERIC; } else { charType = CharacterEnum.OTHER; } if (state == CharacterEnum.WHITESPACE) { if (charType != CharacterEnum.WHITESPACE) { start = ci; } } else { if (charType != state || charType == CharacterEnum.OTHER && c != pc) { tokens.add(new Span(start, ci)); start = ci; } } if (keepNewLines && isLineSeparator(c)) { tokens.add(new Span(start, start + 1)); start = start + 1; } state = charType; pc = c; } if (charType != CharacterEnum.WHITESPACE) { tokens.add(new Span(start, sl)); } return tokens.toArray(new Span[0]); } private boolean isLineSeparator(char character) { return character == Character.LINE_SEPARATOR || character == Character.LETTER_NUMBER; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/TokSpanEventStream.java0100644 0000000 0000000 00000014650 14523004075 034053 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.regex.Pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.ml.model.Event; import opennlp.tools.tokenize.lang.Factory; import opennlp.tools.util.AbstractEventStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; /** * This class reads the {@link TokenSample samples} via an {@link Iterator} * and converts the samples into {@link Event events} which * can be used by the maxent library for training. */ public class TokSpanEventStream extends AbstractEventStream { private static final Logger logger = LoggerFactory.getLogger(TokSpanEventStream.class); private final TokenContextGenerator cg; private final boolean skipAlphaNumerics; private final Pattern alphaNumeric; /** * Initializes a new event stream based on the data stream using a {@link TokenContextGenerator}. * * @param tokenSamples The {@link ObjectStream data stream} for this event stream. * @param skipAlphaNumerics Whether alphanumerics are skipped, or not. * @param alphaNumeric A custom alphanumeric {@link Pattern} or {@code null}. * Default is: {@code "^[A-Za-z0-9]+$"}, provided by * {@link Factory#DEFAULT_ALPHANUMERIC}. * @param cg A {@link TokenContextGenerator} which should be used for the event stream {@code d}. */ public TokSpanEventStream(ObjectStream tokenSamples, boolean skipAlphaNumerics, Pattern alphaNumeric, TokenContextGenerator cg) { super(tokenSamples); this.alphaNumeric = alphaNumeric; this.skipAlphaNumerics = skipAlphaNumerics; this.cg = cg; } /** * Initializes a new event stream based on the data stream using a {@link TokenContextGenerator}. * * @param tokenSamples The {@link ObjectStream data stream} for this event stream. * @param skipAlphaNumerics Whether alphanumerics are skipped, or not. * @param cg A {@link TokenContextGenerator} which should be used for the event stream {@code d}. */ public TokSpanEventStream(ObjectStream tokenSamples, boolean skipAlphaNumerics, TokenContextGenerator cg) { this(tokenSamples, skipAlphaNumerics, new Factory().getAlphanumeric(null), cg ); } /** * Initializes a new event stream based on the data stream using a {@link TokenContextGenerator} * that relies on a {@link DefaultTokenContextGenerator}. * * @param tokenSamples The {@link ObjectStream data stream} for this event stream. * @param skipAlphaNumerics Whether alphanumerics are skipped, or not. */ public TokSpanEventStream(ObjectStream tokenSamples, boolean skipAlphaNumerics) { this(tokenSamples, skipAlphaNumerics, new DefaultTokenContextGenerator()); } /** * Adds training events to the event stream for each of the specified {@link TokenSample sample}. * * @param tokenSample character offsets into the specified text. * @return An {@link Iterator} for text {@link Event events} representing the {@code tokenSample}. */ @Override protected Iterator createEvents(TokenSample tokenSample) { List events = new ArrayList<>(50); Span[] tokens = tokenSample.getTokenSpans(); String text = tokenSample.getText(); if (tokens.length > 0) { int start = tokens[0].getStart(); int end = tokens[tokens.length - 1].getEnd(); String sent = text.substring(start, end); Span[] candTokens = WhitespaceTokenizer.INSTANCE.tokenizePos(sent); int firstTrainingToken = -1; int lastTrainingToken = -1; for (Span candToken : candTokens) { Span cSpan = candToken; String ctok = sent.substring(cSpan.getStart(), cSpan.getEnd()); //adjust cSpan to text offsets cSpan = new Span(cSpan.getStart() + start, cSpan.getEnd() + start); //should we skip this token if (ctok.length() > 1 && (!skipAlphaNumerics || !alphaNumeric.matcher(ctok).matches())) { //find offsets of annotated tokens inside of candidate tokens boolean foundTrainingTokens = false; for (int ti = lastTrainingToken + 1; ti < tokens.length; ti++) { if (cSpan.contains(tokens[ti])) { if (!foundTrainingTokens) { firstTrainingToken = ti; foundTrainingTokens = true; } lastTrainingToken = ti; } else if (cSpan.getEnd() < tokens[ti].getEnd()) { break; } else if (tokens[ti].getEnd() < cSpan.getStart()) { //keep looking } else { logger.warn("Bad training token: {} cand: {} token={}", tokens[ti], cSpan, text.substring(tokens[ti].getStart(), tokens[ti].getEnd())); } } // create training data if (foundTrainingTokens) { for (int ti = firstTrainingToken; ti <= lastTrainingToken; ti++) { Span tSpan = tokens[ti]; int cStart = cSpan.getStart(); for (int i = tSpan.getStart() + 1; i < tSpan.getEnd(); i++) { String[] context = cg.getContext(ctok, i - cStart); events.add(new Event(TokenizerME.NO_SPLIT, context)); } if (tSpan.getEnd() != cSpan.getEnd()) { String[] context = cg.getContext(ctok, tSpan.getEnd() - cStart); events.add(new Event(TokenizerME.SPLIT, context)); } } } } } } return events.iterator(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_tokenize_TokenCon0100644 0000000 0000000 00000000160 14523004075 032574 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/TokenContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/TokenContextGenerator.ja0100644 0000000 0000000 00000002320 14523004075 034252 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; /** * Interface for context generators required for {@link TokenizerME}. */ public interface TokenContextGenerator { /** * @param sentence The string that represents a sentence. * @param index The index to consider splitting tokens. * * @return An array of features for a {@code sentence} at the specified {@code index}. */ String[] getContext(String sentence, int index); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/TokenSample.java0100644 0000000 0000000 00000017003 14523004075 032533 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Objects; import opennlp.tools.commons.Sample; import opennlp.tools.tokenize.Detokenizer.DetokenizationOperation; import opennlp.tools.util.Span; /** * A {@link TokenSample} is text with token spans. */ public class TokenSample implements Sample { private static final long serialVersionUID = 8520715903833887047L; public static final String DEFAULT_SEPARATOR_CHARS = ""; private static final String separatorChars = DEFAULT_SEPARATOR_CHARS; private final String text; private final List tokenSpans; /** * Initializes a {@link TokenSample instance}. * * @param text The text which contains the tokens. * Must not be {@code null}. * @param tokenSpans The spans which mark the start and end of the tokens. * Must not be {@code null}. */ public TokenSample(String text, Span[] tokenSpans) { Objects.requireNonNull(tokenSpans, "tokenSpans must not be null"); this.text = Objects.requireNonNull(text, "text must not be null"); this.tokenSpans = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(tokenSpans))); for (Span tokenSpan : tokenSpans) { if (tokenSpan.getStart() < 0 || tokenSpan.getStart() > text.length() || tokenSpan.getEnd() > text.length() || tokenSpan.getEnd() < 0) { throw new IllegalArgumentException("Span " + tokenSpan + " is out of bounds, text length: " + text.length() + "!"); } } } /** * Initializes a {@link TokenSample instance} via a {@link Detokenizer}. * * @param detokenizer The text which contains the tokens. Must not be {@code null}. * @param tokens The tokens to be processed. Must not be {@code null}. */ public TokenSample(Detokenizer detokenizer, String[] tokens) { Objects.requireNonNull(detokenizer, "detokenizer must not be null"); Objects.requireNonNull(tokens, "tokens must not be null"); DetokenizationOperation[] operations = detokenizer.detokenize(tokens); List mergedTokenSpans = new ArrayList<>(); StringBuilder sentence = new StringBuilder(); for (int i = 0; i < operations.length; i++) { boolean isSeparateFromPreviousToken = i > 0 && !isMergeToRight(operations[i - 1]) && !isMergeToLeft(operations[i]); if (isSeparateFromPreviousToken) { sentence.append(' '); } int beginIndex = sentence.length(); sentence.append(tokens[i]); mergedTokenSpans.add(new Span(beginIndex, sentence.length())); } text = sentence.toString(); tokenSpans = Collections.unmodifiableList(mergedTokenSpans); } private boolean isMergeToRight(DetokenizationOperation operation) { return DetokenizationOperation.MERGE_TO_RIGHT.equals(operation) || DetokenizationOperation.MERGE_BOTH.equals(operation); } private boolean isMergeToLeft(DetokenizationOperation operation) { return DetokenizationOperation.MERGE_TO_LEFT.equals(operation) || DetokenizationOperation.MERGE_BOTH.equals(operation); } /** * @return Retrieves the text. */ public String getText() { return text; } /** * @return Retrieves the token {@link Span spans}. */ public Span[] getTokenSpans() { return tokenSpans.toArray(new Span[0]); } @Override public String toString() { StringBuilder sentence = new StringBuilder(); int lastEndIndex = -1; for (Span token : tokenSpans) { if (lastEndIndex != -1) { // If there are no chars between last token // and this token insert the separator chars // otherwise insert a space String separator; if (lastEndIndex == token.getStart()) separator = separatorChars; else separator = " "; sentence.append(separator); } sentence.append(token.getCoveredText(text)); lastEndIndex = token.getEnd(); } return sentence.toString(); } private static void addToken(StringBuilder sample, List tokenSpans, String token, boolean isNextMerged) { int tokenSpanStart = sample.length(); sample.append(token); int tokenSpanEnd = sample.length(); tokenSpans.add(new Span(tokenSpanStart, tokenSpanEnd)); if (!isNextMerged) sample.append(" "); } /** * Parses a string sample. * * @param sampleString The sample to be parsed. Must not be {@code null}. * @param separatorChars The characters to be considered separators. * See {@link #DEFAULT_SEPARATOR_CHARS}. Must not be {@code null}. * @return A valid {@link TokenSample} instance. */ public static TokenSample parse(String sampleString, String separatorChars) { Objects.requireNonNull(sampleString, "sampleString must not be null"); Objects.requireNonNull(separatorChars, "separatorChars must not be null"); Span[] whitespaceTokenSpans = WhitespaceTokenizer.INSTANCE.tokenizePos(sampleString); // Pre-allocate 20% for newly created tokens List realTokenSpans = new ArrayList<>((int) (whitespaceTokenSpans.length * 1.2d)); StringBuilder untaggedSampleString = new StringBuilder(); for (Span whiteSpaceTokenSpan : whitespaceTokenSpans) { String whitespaceToken = whiteSpaceTokenSpan.getCoveredText(sampleString).toString(); boolean wasTokenReplaced = false; int tokStart = 0; int tokEnd; while ((tokEnd = whitespaceToken.indexOf(separatorChars, tokStart)) > -1) { String token = whitespaceToken.substring(tokStart, tokEnd); addToken(untaggedSampleString, realTokenSpans, token, true); tokStart = tokEnd + separatorChars.length(); wasTokenReplaced = true; } if (wasTokenReplaced) { // If the token contains the split chars at least once // a span for the last token must still be added String token = whitespaceToken.substring(tokStart); addToken(untaggedSampleString, realTokenSpans, token, false); } else { // If it does not contain the split chars at lest once // just copy the original token span addToken(untaggedSampleString, realTokenSpans, whitespaceToken, false); } } return new TokenSample(untaggedSampleString.toString(), realTokenSpans.toArray( new Span[0])); } @Override public int hashCode() { return Objects.hash(getText(), Arrays.hashCode(getTokenSpans())); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof TokenSample a) { return getText().equals(a.getText()) && Arrays.equals(getTokenSpans(), a.getTokenSpans()); } return false; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/TokenSampleStream.java0100644 0000000 0000000 00000005571 14523004075 033716 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.IOException; import java.util.Objects; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; /** * This class is a {@link FilterObjectStream stream filter} which reads in string encoded * samples and creates {@link TokenSample samples} out of them. * The input string sample is tokenized if a whitespace or the special separator chars occur. *

* Sample:
* "token1 token2 token3<SPLIT>token4"
* The tokens {@code token1} and {@code token2} are separated by a whitespace, * {@code token3} and {@code token4} are separated by the special character sequence. * In this case, the default split sequence applies. *

* Note: The sequence must be unique in the input string and is not escaped. */ public class TokenSampleStream extends FilterObjectStream { private final String separatorChars; /** * Initializes a {@link TokenSampleStream instance}. * * @param samples A plain text {@link ObjectStream line stream}. * Must not be {@code null}. * @param separatorChars The characters to be considered separators. * See {@link TokenSample#DEFAULT_SEPARATOR_CHARS}. * Must not be {@code null}. */ public TokenSampleStream(ObjectStream samples, String separatorChars) { super(Objects.requireNonNull(samples, "sampleStrings must not be null")); this.separatorChars = Objects.requireNonNull(separatorChars,"separatorChars must not be null"); } /** * Initializes a {@link TokenSampleStream instance}. * * @param sentences A plain text {@link ObjectStream line stream}. * Must not be {@code null}. */ public TokenSampleStream(ObjectStream sentences) { this(sentences, TokenSample.DEFAULT_SEPARATOR_CHARS); } @Override public TokenSample read() throws IOException { String sampleString = samples.read(); if (sampleString != null) { return TokenSample.parse(sampleString, separatorChars); } else { return null; } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/Tokenizer.java0100644 0000000 0000000 00000005117 14523004075 032266 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import opennlp.tools.util.Span; /** * The interface for tokenizers, which segment a string into its tokens. *

* Tokenization is a necessary step before more complex NLP tasks can be applied. * These usually process text on a token level. The quality of tokenization is * important because it influences the performance of high-level task applied to it. *

* In segmented languages like English most words are segmented by whitespaces * expect for punctuations, etc. which is directly attached to the word without a white space * in between, it is not possible to just split at all punctuations because in abbreviations dots * are a part of the token itself. A {@link Tokenizer} is now responsible to split those tokens * correctly. *

* In non-segmented languages like Chinese, tokenization is more difficult since words * are not segmented by a whitespace. *

* Tokenizers can also be used to segment already identified tokens further into more * atomic parts to get a deeper understanding. This approach helps more complex task * to gain insight into tokens which do not represent words like numbers, units or tokens * which are part of a special notation. *

* For most subsequent NLP tasks, it is desirable to over-tokenize rather than to under-tokenize. */ public interface Tokenizer { /** * Splits a string into its atomic parts. * * @param s The string to be tokenized. * @return The String[] with the individual tokens as the array elements. */ String[] tokenize(String s); /** * Finds the boundaries of atomic parts in a string. * * @param s The string to be tokenized. * @return The {@link Span spans (offsets into {@code s})} for each token as the individuals array elements. */ Span[] tokenizePos(String s); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_tokenize_Tokenize0100644 0000000 0000000 00000000162 14523004075 032646 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/TokenizerCrossValidator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/TokenizerCrossValidator.0100644 0000000 0000000 00000005717 14523004075 034312 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.IOException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.eval.CrossValidationPartitioner; import opennlp.tools.util.eval.FMeasure; /** * A cross validator for {@link Tokenizer tokenizers}. */ public class TokenizerCrossValidator { private final TrainingParameters params; private final FMeasure fmeasure = new FMeasure(); private final TokenizerEvaluationMonitor[] listeners; private final TokenizerFactory factory; /** * Creates a {@link TokenizerCrossValidator} using the given {@link TokenizerFactory}. * * @param params The {@link TrainingParameters} for the context of cross validation. * @param factory The {@link TokenizerFactory} to be used. * @param listeners The {@link TokenizerEvaluationMonitor evaluation listeners}. */ public TokenizerCrossValidator(TrainingParameters params, TokenizerFactory factory, TokenizerEvaluationMonitor... listeners) { this.params = params; this.listeners = listeners; this.factory = factory; } /** * Starts the evaluation. * * @param samples The {@link ObjectStream} of {@link TokenSample samples} to train and test with. * @param nFolds Number of folds. It must be greater than zero. * * @throws IOException Thrown if IO errors occurred during evaluation. */ public void evaluate(ObjectStream samples, int nFolds) throws IOException { CrossValidationPartitioner partitioner = new CrossValidationPartitioner<>(samples, nFolds); while (partitioner.hasNext()) { CrossValidationPartitioner.TrainingSampleStream trainingSampleStream = partitioner.next(); // Maybe throws IOException if temporary file handling fails ... TokenizerModel model = TokenizerME.train(trainingSampleStream, this.factory, params); TokenizerEvaluator evaluator = new TokenizerEvaluator(new TokenizerME(model), listeners); evaluator.evaluate(trainingSampleStream.getTestSampleStream()); fmeasure.mergeInto(evaluator.getFMeasure()); } } public FMeasure getFMeasure() { return fmeasure; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_tokenize_Tokenize0100644 0000000 0000000 00000000165 14523004075 032651 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/TokenizerEvaluationMonitor.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/TokenizerEvaluationMonit0100644 0000000 0000000 00000002031 14523004075 034375 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import opennlp.tools.util.eval.EvaluationMonitor; /** * A marker interface for evaluating {@link Tokenizer tokenizers}. */ public interface TokenizerEvaluationMonitor extends EvaluationMonitor { } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/TokenizerEvaluator.java0100644 0000000 0000000 00000004104 14523004075 034144 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import opennlp.tools.util.Span; import opennlp.tools.util.eval.Evaluator; import opennlp.tools.util.eval.FMeasure; /** * The {@link TokenizerEvaluator} measures the performance of * the given {@link Tokenizer} with the provided reference * {@link TokenSample samples}. * * @see Evaluator * @see Tokenizer * @see TokenSample */ public class TokenizerEvaluator extends Evaluator { private final FMeasure fmeasure = new FMeasure(); /** * The {@link Tokenizer} used to create the predicted tokens. */ private final Tokenizer tokenizer; /** * Initializes an instance to evaluate a {@link Tokenizer}. * * @param tokenizer The {@link Tokenizer} to evaluate. * @param listeners The {@link TokenizerEvaluationMonitor evaluation listeners}. */ public TokenizerEvaluator(Tokenizer tokenizer, TokenizerEvaluationMonitor ... listeners) { super(listeners); this.tokenizer = tokenizer; } @Override protected TokenSample processSample(TokenSample reference) { Span[] predictions = tokenizer.tokenizePos(reference.getText()); fmeasure.updateScores(reference.getTokenSpans(), predictions); return new TokenSample(reference.getText(), predictions); } public FMeasure getFMeasure() { return fmeasure; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/TokenizerFactory.java0100644 0000000 0000000 00000022107 14523004075 033614 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.util.Collections; import java.util.Map; import java.util.Set; import java.util.regex.Pattern; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.tokenize.lang.Factory; import opennlp.tools.util.BaseToolFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.ext.ExtensionLoader; /** * The factory that provides {@link Tokenizer} default implementation and * resources. Users can extend this class if their application requires * overriding the {@link TokenContextGenerator}, {@link Dictionary} etc. */ public class TokenizerFactory extends BaseToolFactory { private String languageCode; private Dictionary abbreviationDictionary; private Boolean useAlphaNumericOptimization = false; private Pattern alphaNumericPattern; private static final String ABBREVIATIONS_ENTRY_NAME = "abbreviations.dictionary"; private static final String USE_ALPHA_NUMERIC_OPTIMIZATION = "useAlphaNumericOptimization"; private static final String ALPHA_NUMERIC_PATTERN = "alphaNumericPattern"; /** * Instantiates a {@link TokenizerFactory} that provides the default implementation * of the resources. */ public TokenizerFactory() { } /** * Instantiates a {@link TokenizerFactory}. Use this constructor to * programmatically create a factory. * * @param languageCode The ISO language code to be used for this factory. * @param abbreviationDictionary The {@link Dictionary} which holds abbreviations. * @param useAlphaNumericOptimization Whether alphanumerics are skipped, or not. * @param alphaNumericPattern {@code null} or a custom alphanumeric {@link Pattern} * (default is: {@code "^[A-Za-z0-9]+$"}, provided by * {@link Factory#DEFAULT_ALPHANUMERIC}. */ public TokenizerFactory(String languageCode, Dictionary abbreviationDictionary, boolean useAlphaNumericOptimization, Pattern alphaNumericPattern) { this.init(languageCode, abbreviationDictionary, useAlphaNumericOptimization, alphaNumericPattern); } /** * @param languageCode The ISO language code to be used for this factory. * @param abbreviationDictionary The {@link Dictionary} which holds abbreviations. * @param useAlphaNumericOptimization Whether alphanumerics are skipped, or not. * @param alphaNumericPattern {@code null} or a custom alphanumeric {@link Pattern} * (default is: {@code "^[A-Za-z0-9]+$"}, provided by * {@link Factory#DEFAULT_ALPHANUMERIC}. */ protected void init(String languageCode, Dictionary abbreviationDictionary, boolean useAlphaNumericOptimization, Pattern alphaNumericPattern) { this.languageCode = languageCode; this.useAlphaNumericOptimization = useAlphaNumericOptimization; this.alphaNumericPattern = alphaNumericPattern; this.abbreviationDictionary = abbreviationDictionary; } @Override public void validateArtifactMap() throws InvalidFormatException { if (this.artifactProvider.getManifestProperty(USE_ALPHA_NUMERIC_OPTIMIZATION) == null) throw new InvalidFormatException(USE_ALPHA_NUMERIC_OPTIMIZATION + " is a mandatory property!"); Object abbreviationsEntry = this.artifactProvider.getArtifact(ABBREVIATIONS_ENTRY_NAME); if (abbreviationsEntry != null && !(abbreviationsEntry instanceof Dictionary)) { throw new InvalidFormatException("Abbreviations dictionary '" + abbreviationsEntry + "' has wrong type, needs to be of type Dictionary!"); } } @Override public Map createArtifactMap() { Map artifactMap = super.createArtifactMap(); // Abbreviations are optional if (abbreviationDictionary != null) { artifactMap.put(ABBREVIATIONS_ENTRY_NAME, abbreviationDictionary); } return artifactMap; } @Override public Map createManifestEntries() { Map manifestEntries = super.createManifestEntries(); manifestEntries.put(USE_ALPHA_NUMERIC_OPTIMIZATION, Boolean.toString(isUseAlphaNumericOptimization())); // alphanumeric pattern is optional if (getAlphaNumericPattern() != null) { manifestEntries.put(ALPHA_NUMERIC_PATTERN, getAlphaNumericPattern().pattern()); } return manifestEntries; } /** * Factory method the framework uses instantiate a new {@link TokenizerFactory}. * * @param subclassName The name of the class implementing the {@link TokenizerFactory}. * @param languageCode The ISO language code the {@link Tokenizer} should use. * @param abbreviationDictionary An optional {@link Dictionary} containing abbreviations, * or {@code null} if not present. * @param useAlphaNumericOptimization Whether the alphanumeric optimization is be enabled or not. * @param alphaNumericPattern The {@link Pattern} the alphanumeric optimization should use, * if enabled. * * @return A valid {@link TokenizerFactory} instance. * * @throws InvalidFormatException Thrown if one of the input parameters doesn't comply the expected format. */ public static TokenizerFactory create(String subclassName, String languageCode, Dictionary abbreviationDictionary, boolean useAlphaNumericOptimization, Pattern alphaNumericPattern) throws InvalidFormatException { if (subclassName == null) { // will create the default factory return new TokenizerFactory(languageCode, abbreviationDictionary, useAlphaNumericOptimization, alphaNumericPattern); } try { TokenizerFactory theFactory = ExtensionLoader.instantiateExtension( TokenizerFactory.class, subclassName); theFactory.init(languageCode, abbreviationDictionary, useAlphaNumericOptimization, alphaNumericPattern); return theFactory; } catch (Exception e) { String msg = "Could not instantiate the " + subclassName + ". The initialization throw an exception."; throw new InvalidFormatException(msg, e); } } /** * @return Retrieves the (user-)specified alphanumeric {@link Pattern} or a default. */ public Pattern getAlphaNumericPattern() { if (this.alphaNumericPattern == null) { if (this.artifactProvider != null) { String prop = this.artifactProvider.getManifestProperty(ALPHA_NUMERIC_PATTERN); if (prop != null) { this.alphaNumericPattern = Pattern.compile(prop); } } // could not load from manifest, will get from language dependent factory if (this.alphaNumericPattern == null) { Factory f = new Factory(); this.alphaNumericPattern = f.getAlphanumeric(languageCode); } } return this.alphaNumericPattern; } /** * @return {@code true} if the alphanumeric optimization is enabled, otherwise {@code false}. */ public boolean isUseAlphaNumericOptimization() { if (artifactProvider != null) { this.useAlphaNumericOptimization = Boolean.valueOf(this.artifactProvider .getManifestProperty(USE_ALPHA_NUMERIC_OPTIMIZATION)); } return this.useAlphaNumericOptimization; } /** * @return The abbreviation {@link Dictionary} or {@code null} if none is active. */ public Dictionary getAbbreviationDictionary() { if (this.abbreviationDictionary == null && artifactProvider != null) { this.abbreviationDictionary = this.artifactProvider.getArtifact(ABBREVIATIONS_ENTRY_NAME); } return this.abbreviationDictionary; } /** * @return Retrieves the ISO language code in use. */ public String getLanguageCode() { if (this.languageCode == null && this.artifactProvider != null) { this.languageCode = this.artifactProvider.getLanguage(); } return this.languageCode; } /** * @return Retrieves a {@link TokenContextGenerator} instance. */ public TokenContextGenerator getContextGenerator() { Factory f = new Factory(); Set abbs; Dictionary abbDict = getAbbreviationDictionary(); if (abbDict != null) { abbs = abbDict.asStringSet(); } else { abbs = Collections.emptySet(); } return f.createTokenContextGenerator(getLanguageCode(), abbs); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/TokenizerME.java0100644 0000000 0000000 00000023231 14523004075 032505 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Pattern; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.tokenize.lang.Factory; import opennlp.tools.util.DownloadUtil; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; import opennlp.tools.util.StringList; import opennlp.tools.util.TrainingParameters; /** * A {@link Tokenizer} for converting raw text into separated tokens. It uses * Maximum Entropy to make its decisions. The features are loosely * based off of Jeff Reynar's UPenn thesis "Topic Segmentation: * Algorithms and Applications.", which is available from his * homepage: http://www.cis.upenn.edu/~jcreynar. *

* This implementation needs a statistical model to tokenize a text which reproduces * the tokenization observed in the training data used to create the model. * The {@link TokenizerModel} class encapsulates that model and provides * methods to create it from the binary representation. *

* A tokenizer instance is not thread-safe. For each thread, one tokenizer * must be instantiated which can share one {@link TokenizerModel} instance * to safe memory. *

* To train a new model, the {@link #train(ObjectStream, TokenizerFactory, TrainingParameters)} method * can be used. *

* Sample usage: *

* * InputStream modelIn;
*
* ...
*
* TokenizerModel model = TokenizerModel(modelIn);
*
* Tokenizer tokenizer = new TokenizerME(model);
*
* String tokens[] = tokenizer.tokenize("A sentence to be tokenized."); *
* @see Tokenizer * @see TokenizerModel * @see TokenSample */ public class TokenizerME extends AbstractTokenizer { /** * Constant indicates a token split. */ public static final String SPLIT = "T"; /** * Constant indicates no token split. */ public static final String NO_SPLIT = "F"; private final Pattern alphanumeric; /* * The maximum entropy model to use to evaluate contexts. */ private final MaxentModel model; /* * The context generator. */ private final TokenContextGenerator cg; /* * Optimization flag to skip alphanumeric tokens for further tokenization */ private final boolean useAlphaNumericOptimization; /* * List of probabilities for each token returned from a call to * tokenize or tokenizePos. */ private final List tokProbs; private final List newTokens; /* * The {@link Dictionary abbreviation dictionary} if available (may be {@code null}). */ private final Dictionary abbDict; /** * Initializes a {@link TokenizerME} by downloading a default model. * @param language The language of the tokenizer. * @throws IOException Thrown if the model cannot be downloaded or saved. */ public TokenizerME(String language) throws IOException { this(DownloadUtil.downloadModel(language, DownloadUtil.ModelType.TOKENIZER, TokenizerModel.class)); } /** * Instantiates a {@link TokenizerME} with an existing {@link TokenizerModel}. * * @param model The {@link TokenizerModel} to be used. */ public TokenizerME(TokenizerModel model) { TokenizerFactory factory = model.getFactory(); this.alphanumeric = factory.getAlphaNumericPattern(); this.cg = factory.getContextGenerator(); this.model = model.getMaxentModel(); this.useAlphaNumericOptimization = factory.isUseAlphaNumericOptimization(); abbDict = model.getAbbreviations(); newTokens = new ArrayList<>(); tokProbs = new ArrayList<>(50); } /** * @deprecated use {@link TokenizerFactory} to extend the Tokenizer * functionality */ @Deprecated public TokenizerME(TokenizerModel model, Factory factory) { String languageCode = model.getLanguage(); this.alphanumeric = factory.getAlphanumeric(languageCode); this.cg = factory.createTokenContextGenerator(languageCode, getAbbreviations(model.getAbbreviations())); this.model = model.getMaxentModel(); useAlphaNumericOptimization = model.useAlphaNumericOptimization(); abbDict = model.getAbbreviations(); newTokens = new ArrayList<>(); tokProbs = new ArrayList<>(50); } private static Set getAbbreviations(Dictionary abbreviations) { if (abbreviations == null) { return Collections.emptySet(); } return abbreviations.asStringSet(); } /** * @return the probabilities associated with the most recent calls to * {@link TokenizerME#tokenize(String)} or {@link TokenizerME#tokenizePos(String)}. * If not applicable an empty array is returned. */ public double[] getTokenProbabilities() { double[] tokProbArray = new double[tokProbs.size()]; for (int i = 0; i < tokProbArray.length; i++) { tokProbArray[i] = tokProbs.get(i); } return tokProbArray; } /** * Tokenizes the string. * * @param d The string to be tokenized. * * @return A {@link Span} array containing individual tokens as elements. */ @Override public Span[] tokenizePos(String d) { WhitespaceTokenizer whitespaceTokenizer = WhitespaceTokenizer.INSTANCE; whitespaceTokenizer.setKeepNewLines(keepNewLines); Span[] tokens = whitespaceTokenizer.tokenizePos(d); newTokens.clear(); tokProbs.clear(); for (Span s : tokens) { String tok = d.substring(s.getStart(), s.getEnd()); // Can't tokenize single characters if (tok.length() < 2) { newTokens.add(s); tokProbs.add(1d); } else if (useAlphaNumericOptimization() && alphanumeric.matcher(tok).matches()) { newTokens.add(s); tokProbs.add(1d); } else { int start = s.getStart(); int end = s.getEnd(); final int origStart = s.getStart(); double tokenProb = 1.0; for (int j = origStart + 1; j < end; j++) { double[] probs = model.eval(cg.getContext(tok, j - origStart)); String best = model.getBestOutcome(probs); tokenProb *= probs[model.getIndex(best)]; if (best.equals(TokenizerME.SPLIT)) { if (isAcceptableAbbreviation(tok)) { newTokens.add(new Span(start, end)); tokProbs.add(tokenProb); start = j + 1; // To compensate for the abbreviation dot } else { newTokens.add(new Span(start, j)); tokProbs.add(tokenProb); start = j; } tokenProb = 1.0; } } if (start < end) { newTokens.add(new Span(start, end)); tokProbs.add(tokenProb); } } } Span[] spans = new Span[newTokens.size()]; newTokens.toArray(spans); return spans; } /** * Trains a model for the {@link TokenizerME}. * * @param samples The samples used for the training. * @param factory A {@link TokenizerFactory} to get resources from. * @param mlParams The machine learning {@link TrainingParameters train parameters}. * @return A trained {@link TokenizerModel}. * @throws IOException Thrown during IO operations on a temp file which is created * during training. Or if reading from the {@link ObjectStream} fails. */ public static TokenizerModel train(ObjectStream samples, TokenizerFactory factory, TrainingParameters mlParams) throws IOException { Map manifestInfoEntries = new HashMap<>(); ObjectStream eventStream = new TokSpanEventStream(samples, factory.isUseAlphaNumericOptimization(), factory.getAlphaNumericPattern(), factory.getContextGenerator()); EventTrainer trainer = TrainerFactory.getEventTrainer( mlParams, manifestInfoEntries); MaxentModel maxentModel = trainer.train(eventStream); return new TokenizerModel(maxentModel, manifestInfoEntries, factory); } /** * @return {@code true} if the tokenizer uses alphanumeric optimization, {@code false} otherwise. */ public boolean useAlphaNumericOptimization() { return useAlphaNumericOptimization; } /** * Allows checking a token abbreviation candidate for acceptability. * *

Note: The implementation always returns {@code false} if no * abbreviation dictionary is available for the underlying model.

* * @param s the {@link CharSequence token} to check for. * @return {@code true} if the candidate is acceptable, {@code false} otherwise. */ protected boolean isAcceptableAbbreviation(CharSequence s) { if (abbDict == null) return false; return abbDict.contains(new StringList(s.toString())); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/TokenizerModel.java0100644 0000000 0000000 00000014033 14523004075 033244 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.file.Path; import java.util.Map; import java.util.Objects; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.util.BaseToolFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.model.BaseModel; import opennlp.tools.util.model.ModelUtil; /** * The {@link TokenizerModel} is the model used * by a learnable {@link Tokenizer}. * * @see TokenizerME * @see TokenizerFactory */ public final class TokenizerModel extends BaseModel { private static final long serialVersionUID = 42334333400920419L; private static final String COMPONENT_NAME = "TokenizerME"; private static final String TOKENIZER_MODEL_ENTRY = "token.model"; /** * Initializes a {@link TokenizerModel} instance via a {@link MaxentModel} and related resources. * * @param tokenizerModel The {@link MaxentModel model} to be used. * @param manifestInfoEntries Additional information kept in the manifest. * @param tokenizerFactory The {@link TokenizerFactory} to be used internally. */ public TokenizerModel(MaxentModel tokenizerModel, Map manifestInfoEntries, TokenizerFactory tokenizerFactory) { super(COMPONENT_NAME, tokenizerFactory.getLanguageCode(), manifestInfoEntries, tokenizerFactory); artifactMap.put(TOKENIZER_MODEL_ENTRY, tokenizerModel); checkArtifactMap(); } /** * Initializes a {@link TokenizerModel} instance via a valid {@link InputStream}. * * @param in The {@link InputStream} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public TokenizerModel(InputStream in) throws IOException { super(COMPONENT_NAME, in); } /** * Initializes a {@link TokenizerModel} instance via a valid {@link File}. * * @param modelFile The {@link File} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public TokenizerModel(File modelFile) throws IOException { super(COMPONENT_NAME, modelFile); } /** * Initializes a {@link TokenizerModel} instance via a valid {@link Path}. * * @param modelPath The {@link Path} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public TokenizerModel(Path modelPath) throws IOException { this(modelPath.toFile()); } /** * Initializes a {@link TokenizerModel} instance via a valid {@link URL}. * * @param modelURL The {@link URL} used for loading the model. * * @throws IOException Thrown if IO errors occurred during initialization. */ public TokenizerModel(URL modelURL) throws IOException { super(COMPONENT_NAME, modelURL); } /** * Checks if the {@link TokenizerModel} has the right outcomes. * * @param model The {@link MaxentModel} to be checked. * @return {@code true} if the model could be validated, {@code false} otherwise. */ private static boolean isModelCompatible(MaxentModel model) { return ModelUtil.validateOutcomes(model, TokenizerME.SPLIT, TokenizerME.NO_SPLIT); } @Override protected void validateArtifactMap() throws InvalidFormatException { super.validateArtifactMap(); if (!(artifactMap.get(TOKENIZER_MODEL_ENTRY) instanceof AbstractModel)) { throw new InvalidFormatException("Token model is incomplete!"); } if (!isModelCompatible(getMaxentModel())) { throw new InvalidFormatException("The maxent model is not compatible with the tokenizer!"); } } /** * @return Retrieves the active {@link TokenizerFactory}. */ public TokenizerFactory getFactory() { return (TokenizerFactory) this.toolFactory; } @Override protected Class getDefaultFactory() { return TokenizerFactory.class; } /** * @return Retrieves the model as {@link MaxentModel} instance. */ public MaxentModel getMaxentModel() { return (MaxentModel) artifactMap.get(TOKENIZER_MODEL_ENTRY); } /** * @return Retrieves the active abbreviation {@link Dictionary}. */ public Dictionary getAbbreviations() { if (getFactory() != null) { return getFactory().getAbbreviationDictionary(); } return null; } /** * @return {@code true} if alphanumeric optimization is active, {@code false} otherwise. */ public boolean useAlphaNumericOptimization() { return getFactory() != null && getFactory().isUseAlphaNumericOptimization(); } @Override public int hashCode() { return Objects.hash(artifactMap.get(MANIFEST_ENTRY), artifactMap.get(TOKENIZER_MODEL_ENTRY)); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof TokenizerModel model) { Map artifactMapToCheck = model.artifactMap; AbstractModel abstractModel = (AbstractModel) artifactMapToCheck.get(TOKENIZER_MODEL_ENTRY); return artifactMap.get(MANIFEST_ENTRY).equals(artifactMapToCheck.get(MANIFEST_ENTRY)) && artifactMap.get(TOKENIZER_MODEL_ENTRY).equals(abstractModel); } return false; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/TokenizerStream.java0100644 0000000 0000000 00000003750 14523004075 033443 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.IOException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; /** * The {@link TokenizerStream} uses a {@link Tokenizer} to tokenize the * input string and output {@link TokenSample samples}. */ public class TokenizerStream implements ObjectStream { private final Tokenizer tokenizer; private final ObjectStream input; /** * Initializes a {@link TokenizerStream instance}. * * @param tokenizer A working {@link Tokenizer} instance. * @param input A plain text {@link ObjectStream line stream}. */ public TokenizerStream(Tokenizer tokenizer, ObjectStream input) { this.tokenizer = tokenizer; this.input = input; } @Override public TokenSample read() throws IOException { String inputString = input.read(); if (inputString != null) { Span[] tokens = tokenizer.tokenizePos(inputString); return new TokenSample(inputString, tokens); } return null; } @Override public void close() throws IOException { input.close(); } @Override public void reset() throws IOException, UnsupportedOperationException { input.reset(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_tokenize_Whitespa0100644 0000000 0000000 00000000160 14523004075 032640 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/WhitespaceTokenStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/WhitespaceTokenStream.ja0100644 0000000 0000000 00000004203 14523004075 034231 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.IOException; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; /** * This stream formats {@link ObjectStream} of {@link TokenSample samples} into whitespace * separated token strings. */ public class WhitespaceTokenStream extends FilterObjectStream { /** * Initializes a {@link WhitespaceTokenStream}. * * @param tokens The {@link ObjectStream stream} of tokens to be separated. */ public WhitespaceTokenStream(ObjectStream tokens) { super(tokens); } @Override public String read() throws IOException { TokenSample tokenSample = samples.read(); if (tokenSample != null) { StringBuilder whitespaceSeparatedTokenString = new StringBuilder(); for (Span token : tokenSample.getTokenSpans()) { whitespaceSeparatedTokenString.append( token.getCoveredText(tokenSample.getText())); whitespaceSeparatedTokenString.append(' '); } // Shorten string by one to get rid of last space if (whitespaceSeparatedTokenString.length() > 0) { whitespaceSeparatedTokenString.setLength( whitespaceSeparatedTokenString.length() - 1 ); } return whitespaceSeparatedTokenString.toString(); } return null; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_tokenize_Whitespa0100644 0000000 0000000 00000000156 14523004075 032645 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/WhitespaceTokenizer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/WhitespaceTokenizer.java0100644 0000000 0000000 00000004707 14523004075 034307 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.util.ArrayList; import java.util.List; import opennlp.tools.util.Span; import opennlp.tools.util.StringUtil; /** * A basic {@link Tokenizer} implementation which performs tokenization * using white spaces. *

* To obtain an instance of this tokenizer use the static final * {@link #INSTANCE} field. */ public class WhitespaceTokenizer extends AbstractTokenizer { /** * Use this static reference to retrieve an instance of the * {@link WhitespaceTokenizer}. */ public static final WhitespaceTokenizer INSTANCE = new WhitespaceTokenizer(); /* * Use the {@link WhitespaceTokenizer#INSTANCE} field to retrieve an instance. */ private WhitespaceTokenizer() { } @Override public Span[] tokenizePos(String d) { int tokStart = -1; List tokens = new ArrayList<>(); boolean inTok = false; // gather potential tokens int end = d.length(); for (int i = 0; i < end; i++) { if (StringUtil.isWhitespace(d.charAt(i))) { if (inTok) { tokens.add(new Span(tokStart, i)); inTok = false; tokStart = -1; } if (keepNewLines && isLineSeparator(d.charAt(i))) { tokStart = i; tokens.add(new Span(tokStart, tokStart + 1)); tokStart = -1; } } else { if (!inTok) { tokStart = i; inTok = true; } } } if (inTok) { tokens.add(new Span(tokStart, end)); } return tokens.toArray(new Span[0]); } private boolean isLineSeparator(char character) { return character == Character.LINE_SEPARATOR || character == Character.LETTER_NUMBER; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/WordpieceTokenizer.java0100644 0000000 0000000 00000012745 14523004075 034135 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.regex.Pattern; import opennlp.tools.util.Span; /** * A {@link Tokenizer} implementation which performs tokenization * using word pieces. *

* Adapted under MIT license from * https://github.com/robrua/easy-bert. *

* For reference see: *

*/ public class WordpieceTokenizer implements Tokenizer { private static final Pattern PUNCTUATION_PATTERN = Pattern.compile("\\p{Punct}+"); private static final String CLASSIFICATION_TOKEN = "[CLS]"; private static final String SEPARATOR_TOKEN = "[SEP]"; private static final String UNKNOWN_TOKEN = "[UNK]"; private final Set vocabulary; private int maxTokenLength = 50; /** * Initializes a {@link WordpieceTokenizer} with a {@code vocabulary} and a default * {@code maxTokenLength} of {@code 50}. * * @param vocabulary A set of tokens considered the vocabulary. */ public WordpieceTokenizer(Set vocabulary) { this.vocabulary = vocabulary; } /** * Initializes a {@link WordpieceTokenizer} with a {@code vocabulary} and a custom * {@code maxTokenLength}. * * @param vocabulary A set of tokens considered the vocabulary. * @param maxTokenLength A non-negative number that is used as maximum token length. */ public WordpieceTokenizer(Set vocabulary, int maxTokenLength) { this(vocabulary); this.maxTokenLength = maxTokenLength; } @Override public Span[] tokenizePos(final String text) { // TODO: Implement this. return null; } @Override public String[] tokenize(final String text) { final List tokens = new LinkedList<>(); tokens.add(CLASSIFICATION_TOKEN); // Put spaces around punctuation. final String spacedPunctuation = PUNCTUATION_PATTERN.matcher(text).replaceAll(" $0 "); // Split based on whitespace. final String[] split = WhitespaceTokenizer.INSTANCE.tokenize(spacedPunctuation); // For each resulting word, if the word is found in the WordPiece vocabulary, keep it as-is. // If not, starting from the beginning, pull off the biggest piece that is in the vocabulary, // and prefix "##" to the remaining piece. Repeat until the entire word is represented by // pieces from the vocabulary, if possible. for (final String token : split) { final char[] characters = token.toCharArray(); if (characters.length <= maxTokenLength) { // To start, the substring is the whole token. int start = 0; int end; // Look at the token from the start. while (start < characters.length) { end = characters.length; boolean found = false; // Look at the token from the end until the end is equal to the start. while (start < end) { // The substring is the part of the token we are looking at now. String substring = String.valueOf(characters, start, end - start); // This is a substring so prefix it with ##. if (start > 0) { substring = "##" + substring; } // See if the substring is in the vocabulary. if (vocabulary.contains(substring)) { // It is in the vocabulary so add it to the list of tokens. tokens.add(substring); // Next time we can pick up where we left off. start = end; found = true; break; } // Subtract 1 from the end to find the next longest piece in the vocabulary. end--; } // If the word can't be represented by vocabulary pieces replace // it with a specified "unknown" token. if (!found) { tokens.add(UNKNOWN_TOKEN); break; } // Start the next characters where we just left off. start = end; } } else { // If the token's length is greater than the max length just add [UNK] instead. tokens.add(UNKNOWN_TOKEN); } } tokens.add(SEPARATOR_TOKEN); return tokens.toArray(new String[0]); } /** * @return The maximum token length. */ public int getMaxTokenLength() { return maxTokenLength; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/lang/Factory.java0100644 0000000 0000000 00000010523 14523004075 032641 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize.lang; import java.util.Set; import java.util.regex.Pattern; import opennlp.tools.tokenize.DefaultTokenContextGenerator; import opennlp.tools.tokenize.TokenContextGenerator; public class Factory { public static final Pattern DEFAULT_ALPHANUMERIC = Pattern.compile("^[A-Za-z0-9]+$"); private static final Pattern PORTUGUESE = Pattern.compile("^[0-9a-záãâàéêíóõôúüçA-ZÃÃÂÀÉÊÃÓÕÔÚÜÇ]+$"); private static final Pattern FRENCH = Pattern.compile("^[a-zA-Z0-9àâäèéêëîïôœùûüÿçÀÂÄÈÉÊËÎÃÔŒÙÛÜŸÇ]+$"); // From: https://www.sttmedia.com/characterfrequency-dutch private static final Pattern DUTCH = Pattern.compile("^[A-Za-z0-9äöüëèéïijÄÖÜËÉÈÃIJ]+$"); // Note: The extra é and É are included to cover German "Lehnwörter" such as "Café" private static final Pattern GERMAN = Pattern.compile("^[A-Za-z0-9äéöüÄÉÖÜß]+$"); // From: https://en.wikipedia.org/wiki/Polish_alphabet // https://pl.wikipedia.org/wiki/Alfabet_polski private static final Pattern POLISH = Pattern.compile("^[A-Za-z0-9żźćńółęąśŻŹĆĄŚĘÅÓŃ]+$"); // From: https://it.wikipedia.org/wiki/Alfabeto_italiano private static final Pattern ITALIAN = Pattern.compile("^[0-9a-zàèéìîíòóùüA-ZÀÈÉÌÎÃÒÓÙÜ]+$"); // From: https://en.wikiversity.org/wiki/Alphabet/Spanish_alphabet & // https://en.wikipedia.org/wiki/Spanish_orthography#Alphabet_in_Spanish & // https://www.fundeu.es/consulta/tilde-en-la-y-y-griega-o-ye-24786/ private static final Pattern SPANISH = Pattern.compile("^[0-9a-záéíóúüýñA-ZÃÉÃÓÚÃÑ]+$"); // From: https://en.wikipedia.org/wiki/Catalan_orthography#Spelling_patterns private static final Pattern CATALAN = Pattern.compile("^[0-9a-zàèéíïòóúüçA-ZÀÈÉÃÃÒÓÚÜÇ]+$"); /** * Gets the alphanumeric pattern for a language. * * @param languageCode The ISO_639-1 code. If {@code null}, or unknown, the * {@link #DEFAULT_ALPHANUMERIC} pattern will be returned. * @return The alphanumeric {@link Pattern} for the language, or the default pattern. */ public Pattern getAlphanumeric(String languageCode) { // For reference: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes if ("es".equals(languageCode) || "spa".equals(languageCode)) { return SPANISH; } if ("it".equals(languageCode) || "ita".equals(languageCode)) { return ITALIAN; } if ("pt".equals(languageCode) || "por".equals(languageCode)) { return PORTUGUESE; } if ("ca".equals(languageCode) || "cat".equals(languageCode)) { return CATALAN; } if ("pl".equals(languageCode) || "pol".equals(languageCode)) { return POLISH; } if ("de".equals(languageCode) || "deu".equals(languageCode) || "ger".equals(languageCode)) { return GERMAN; } if ("fr".equals(languageCode) || "fre".equals(languageCode) || "fra".equals(languageCode)) { return FRENCH; } if ("nl".equals(languageCode) || "nld".equals(languageCode) || "dut".equals(languageCode)) { return DUTCH; } return DEFAULT_ALPHANUMERIC; } /** * Initializes a customized {@link TokenContextGenerator} via a set of {@code abbreviations}. * * @param languageCode The ISO_639-1 code to be used. * @param abbreviations The abbreviations to be used for new instance. */ public TokenContextGenerator createTokenContextGenerator(String languageCode, Set abbreviations) { return new DefaultTokenContextGenerator(abbreviations); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_tokenize_lang_en_0100644 0000000 0000000 00000000164 14523004075 032622 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/lang/en/TokenSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/lang/en/TokenSampleStrea0100644 0000000 0000000 00000010030 14523004075 034126 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize.lang.en; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.regex.Pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.Span; /** * Class which produces an Iterator<TokenSample> from a file of space delimited token. * This class uses a number of English-specific heuristics to un-separate tokens which * are typically found together in text. */ public class TokenSampleStream implements Iterator { private static final Logger logger = LoggerFactory.getLogger(TokenSampleStream.class); private final BufferedReader in; private String line; private final Pattern alphaNumeric = Pattern.compile("[A-Za-z0-9]"); private boolean evenq = true; public TokenSampleStream(InputStream is) throws IOException { this.in = new BufferedReader(new InputStreamReader(is)); line = in.readLine(); } public boolean hasNext() { return line != null; } public TokenSample next() { String[] tokens = line.split("\\s+"); if (tokens.length == 0) { evenq = true; } StringBuilder sb = new StringBuilder(line.length()); List spans = new ArrayList<>(); int length = 0; for (int ti = 0; ti < tokens.length; ti++) { String token = tokens[ti]; String lastToken = ti - 1 >= 0 ? tokens[ti - 1] : ""; switch (token) { case "-LRB-": token = "("; break; case "-LCB-": token = "{"; break; case "-RRB-": token = ")"; break; case "-RCB-": token = "}"; break; } if (sb.length() != 0) { if (!alphaNumeric.matcher(token).find() || token.startsWith("'") || token.equalsIgnoreCase("n't")) { if ((token.equals("``") || token.equals("--") || token.equals("$") || token.equals("(") || token.equals("&") || token.equals("#") || (token.equals("\"") && (evenq && ti != tokens.length - 1))) && (!lastToken.equals("(") || !lastToken.equals("{"))) { length++; } } else { if (!lastToken.equals("``") && (!lastToken.equals("\"") || evenq) && !lastToken.equals("(") && !lastToken.equals("{") && !lastToken.equals("$") && !lastToken.equals("#")) { length++; } } } if (token.equals("\"")) { evenq = ti == tokens.length - 1 || !evenq; } if (sb.length() < length) { sb.append(" "); } sb.append(token); spans.add(new Span(length, length + token.length())); length += token.length(); } try { line = in.readLine(); } catch (IOException e) { logger.error(e.getLocalizedMessage(), e); line = null; } return new TokenSample(sb.toString(),spans.toArray(new Span[0])); } public void remove() { throw new UnsupportedOperationException(); } private static void usage() { logger.info("TokenSampleStream [-spans] < in"); logger.info("Where in is a space delimited list of tokens."); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/tokenize/package-info.java0100644 0000000 0000000 00000002144 14523004075 032635 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Contains classes related to finding token or words in a string. All * tokenizer implement the Tokenizer interface. Currently, there is the * learnable {@code TokenizerME}, the {@code WhitespaceTokenizer} and * the {@code SimpleTokenizer} which is a character class tokenizer. */ package opennlp.tools.tokenize; apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/AbstractEventStream.java0100644 0000000 0000000 00000004603 14523004075 033361 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.IOException; import java.util.Collections; import java.util.Iterator; import opennlp.tools.ml.model.Event; /** * A base {@link ObjectStream} implementation for events. * * @param The generic type representing samples. */ public abstract class AbstractEventStream implements ObjectStream { private final ObjectStream samples; private Iterator events = Collections.emptyIterator(); /** * Initializes an {@link AbstractEventStream} with a sample {@link Iterator}. * * @param samples The {@link Iterator} that provides the {@link T} samples. */ public AbstractEventStream(ObjectStream samples) { this.samples = samples; } /** * Creates events for the provided {@code sample}. * * @param sample The {@link T sample} for which training {@link Event events} are created. * * @return An {@link Iterator} of training events or an empty {@link Iterator}. */ protected abstract Iterator createEvents(T sample); @Override public final Event read() throws IOException { if (events.hasNext()) { return events.next(); } else { T sample; while (!events.hasNext() && (sample = samples.read()) != null) { events = createEvents(sample); } if (events.hasNext()) { return read(); } } return null; } @Override public void reset() throws IOException, UnsupportedOperationException { events = Collections.emptyIterator(); samples.reset(); } @Override public void close() throws IOException { samples.close(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/AbstractObjectStream.java0100644 0000000 0000000 00000003131 14523004075 033501 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.IOException; /** * A base {@link ObjectStream} implementation. * * @param The generic type representing samples in the stream of samples. */ public abstract class AbstractObjectStream implements ObjectStream { private final ObjectStream stream; /** * Initializes an {@link AbstractObjectStream}. * * @param stream The {@link ObjectStream} that provides the {@link T} samples. */ protected AbstractObjectStream(ObjectStream stream) { this.stream = stream; } @Override public T read() throws IOException { return stream.read(); } @Override public void reset() throws IOException, UnsupportedOperationException { stream.reset(); } @Override public void close() throws IOException { stream.close(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/BaseToolFactory.java0100644 0000000 0000000 00000012705 14523004075 032502 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.util.HashMap; import java.util.Map; import opennlp.tools.util.ext.ExtensionLoader; import opennlp.tools.util.model.ArtifactProvider; import opennlp.tools.util.model.ArtifactSerializer; /** * Base class for all tool {@code factories}. *

* Extensions of this class should: *

    *
  • implement an empty constructor,
  • *
  • implement a constructor that takes the {@link ArtifactProvider}},
  • *
  • override {@link #createArtifactMap()} and * {@link #createArtifactSerializersMap()} methods if necessary.
  • *
*/ public abstract class BaseToolFactory { protected ArtifactProvider artifactProvider; /** * All subclasses should have an empty constructor */ public BaseToolFactory() { } /** * Initializes the ToolFactory with an artifact provider. */ protected void init(ArtifactProvider artifactProvider) { this.artifactProvider = artifactProvider; } /** * Creates a {@link Map} with pairs of keys and {@link ArtifactSerializer}. * The models implementation should call this method from * {@code BaseModel#createArtifactSerializersMap}. *

* The base implementation will return a {@link HashMap} that should be * populated by subclasses. */ @SuppressWarnings("rawtypes") public Map createArtifactSerializersMap() { return new HashMap<>(); } /** * A model's implementation should call this constructor that creates a model * programmatically. *

* The base implementation will return a {@link HashMap} that should be * populated by subclasses. * * @return Retrieves a {@link Map} with pairs of keys and objects. */ public Map createArtifactMap() { return new HashMap<>(); } /** * @return Retrieves the manifest entries to be added to the model manifest. */ public Map createManifestEntries() { return new HashMap<>(); } /** * Validates the parsed artifacts. *

* Note: * Subclasses should generally invoke {@code super.validateArtifactMap} at the beginning * of this method. * * @throws InvalidFormatException Thrown if validation found invalid states. */ public abstract void validateArtifactMap() throws InvalidFormatException; /** * Instantiates a {@link BaseToolFactory} via a given {@code subclassName}. * * @param subclassName The class name used for instantiation. The {@link ExtensionLoader} * mechanism is applied to load the requested {@code subclassName}. * @param artifactProvider The {@link ArtifactProvider} to be used. * * @return A valid {@link BaseToolFactory} instance. * @throws InvalidFormatException Thrown if the {@link ExtensionLoader} mechanism failed to * create the factory associated with {@code subclassName}. */ public static BaseToolFactory create(String subclassName, ArtifactProvider artifactProvider) throws InvalidFormatException { BaseToolFactory theFactory; try { // Init the ToolFactory using the ExtensionLoader theFactory = ExtensionLoader.instantiateExtension(BaseToolFactory.class, subclassName); if (theFactory != null) { theFactory.init(artifactProvider); } } catch (Exception e) { String msg = "Could not instantiate the " + subclassName + ". The initialization threw an exception."; throw new InvalidFormatException(msg, e); } return theFactory; } /** * Instantiates a {@link BaseToolFactory} via a given {@code subclassName}. * * @param factoryClass The class used for instantiation. The no-arg constructor * of that class will be used to create and init the resulting object. * @param artifactProvider The {@link ArtifactProvider} to be used. * * @return A valid {@link BaseToolFactory} instance. * @throws InvalidFormatException Thrown if the {@link ExtensionLoader} mechanism failed to * create the factory associated with {@code subclassName}. */ public static BaseToolFactory create(Class factoryClass, ArtifactProvider artifactProvider) throws InvalidFormatException { BaseToolFactory theFactory = null; if (factoryClass != null) { try { theFactory = factoryClass.getDeclaredConstructor().newInstance(); theFactory.init(artifactProvider); } catch (Exception e) { String msg = "Could not instantiate the " + factoryClass.getCanonicalName() + ". The initialization threw an exception."; throw new InvalidFormatException(msg, e); } } return theFactory; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_BeamSearchCo0100644 0000000 0000000 00000000161 14523004075 032456 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/BeamSearchContextGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/BeamSearchContextGenerator.j0100644 0000000 0000000 00000003200 14523004075 034146 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; /** * Interface for context generators used with a sequence beam search. */ public interface BeamSearchContextGenerator { /** * Returns the context for the specified position in the specified {@code sequence} (list). * * @param index The index of the {@code sequence}. * @param sequence The sequence of {@link T items} over which the beam search is performed. * @param priorDecisions The sequence of decisions made prior to the context for * which this decision is being made. * @param additionalContext Any additional context specific to a class implementing this interface. * * @return The context for the specified {@code index} in the specified {@code sequence}. */ String[] getContext(int index, T[] sequence, String[] priorDecisions, Object[] additionalContext); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/Cache.java0100644 0000000 0000000 00000002452 14523004075 030443 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.util.LinkedHashMap; import java.util.Map; /** * Provides fixed size, pre-allocated, least recently used replacement cache. */ public class Cache extends LinkedHashMap { private static final long serialVersionUID = 3037039043085908062L; private final int capacity; public Cache(final int capacity) { this.capacity = capacity; } @Override protected boolean removeEldestEntry(Map.Entry eldest) { return this.size() > this.capacity; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/CollectionObjectStream.java0100644 0000000 0000000 00000003003 14523004075 034027 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.util.Collection; import java.util.Iterator; /** * An {@link ObjectStream} implementation that works on a * {@link Collection} of {@link E} as source for elements. * * @param The generic type of the elements. */ public class CollectionObjectStream implements ObjectStream { private final Collection collection; private Iterator iterator; public CollectionObjectStream(Collection collection) { this.collection = collection; reset(); } @Override public E read() { return iterator.hasNext() ? iterator.next() : null; } @Override public void reset() { this.iterator = collection.iterator(); } @Override public void close() { } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/DownloadUtil.java0100644 0000000 0000000 00000016446 14523004075 032055 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.commons.Internal; import opennlp.tools.util.model.BaseModel; /** * This class facilitates the downloading of pretrained OpenNLP models. */ public class DownloadUtil { private static final Logger logger = LoggerFactory.getLogger(DownloadUtil.class); /** * The type of model. */ public enum ModelType { TOKENIZER("token"), SENTENCE_DETECTOR("sent"), POS("pos-perceptron"), NAME_FINDER("ner"), CHUNKER("chunker"), PARSER("parser-chunking"); private final String name; ModelType(String name) { this.name = name; } } private static final String BASE_URL = "https://dlcdn.apache.org/opennlp/"; private static final String MODELS_UD_MODELS_1_0 = "models/ud-models-1.0/"; public static final Map> available_models; static { try { available_models = new DownloadParser(new URL(BASE_URL + MODELS_UD_MODELS_1_0)).getAvailableModels(); } catch (MalformedURLException e) { throw new RuntimeException(e); } } /** * Triggers a download for the specified {@link DownloadUtil.ModelType}. * * @param language The ISO language code of the requested model. * @param modelType The {@link DownloadUtil.ModelType type} of model. * @param type The class of the resulting model. * @param The generic type which is a subclass of {@link BaseModel}. * * @return A model instance of type {@link T}. * * @throws IOException Thrown if IO errors occurred or the model is invalid. */ public static T downloadModel(String language, ModelType modelType, Class type) throws IOException { if (available_models.containsKey(language)) { final String url = (available_models.get(language).get(modelType)); if (url != null) { return downloadModel(new URL(url), type); } } throw new IOException("Invalid model."); } /** * Downloads a model from a {@link URL}. *

* The model is saved to an {@code .opennlp/} directory * located in the user's home directory. This directory will be created * if it does not already exist. If a model to be downloaded already * exists in that directory, the model will not be re-downloaded. * * @param url The model's {@link URL}. * @param type The class of the resulting model {@link T}. * @param The generic type which is a subclass of {@link BaseModel}. * * @return A model instance of type {@link T}. * * @throws IOException Thrown if the model cannot be downloaded. */ public static T downloadModel(URL url, Class type) throws IOException { final Path homeDirectory = Paths.get(System.getProperty("user.home") + "/.opennlp/"); if (!Files.isDirectory(homeDirectory)) { homeDirectory.toFile().mkdir(); } final String filename = url.toString().substring(url.toString().lastIndexOf("/") + 1); final Path localFile = Paths.get(homeDirectory.toString(), filename); if (!Files.exists(localFile)) { logger.debug("Downloading model from {} to {}.", url, localFile); try (final InputStream in = url.openStream()) { Files.copy(in, localFile, StandardCopyOption.REPLACE_EXISTING); } logger.debug("Download complete."); } try { return type.getConstructor(Path.class).newInstance(localFile); } catch (Exception e) { throw new IOException("Could not initialize Model of type " + type.getTypeName(), e); } } @Internal static class DownloadParser { private static final Pattern LINK_PATTERN = Pattern.compile("(.*?)", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); private final URL indexUrl; DownloadParser(URL indexUrl) { Objects.requireNonNull(indexUrl); this.indexUrl = indexUrl; } Map> getAvailableModels() { final Matcher matcher = LINK_PATTERN.matcher(fetchPageIndex()); final List links = new ArrayList<>(); while (matcher.find()) { links.add(matcher.group(1)); } return toMap(links); } private Map> toMap(List links) { final Map> result = new HashMap<>(); for (String link : links) { if (link.endsWith(".bin")) { if (link.contains("de-ud")) { addModel("de", link, result); } else if (link.contains("en-ud")) { addModel("en", link, result); } else if (link.contains("it-ud")) { addModel("it", link, result); } else if (link.contains("nl-ud")) { addModel("nl", link, result); } else if (link.contains("fr-ud")) { addModel("fr", link, result); } } } return result; } private void addModel(String locale, String link, Map> result) { final Map models = result.getOrDefault(locale, new HashMap<>()); final String url = (indexUrl.toString().endsWith("/") ? indexUrl : indexUrl + "/") + link; if (link.contains("sentence")) { models.put(ModelType.SENTENCE_DETECTOR, url); } else if (link.contains("tokens")) { models.put(ModelType.TOKENIZER, url); } else if (link.contains("pos")) { models.put(ModelType.POS, url); } result.putIfAbsent(locale, models); } private String fetchPageIndex() { final StringBuilder html = new StringBuilder(); try (BufferedReader br = new BufferedReader( new InputStreamReader(indexUrl.openStream(), StandardCharsets.UTF_8))) { String line; while ((line = br.readLine()) != null) { html.append(line); } } catch (IOException e) { logger.error("Could not read page index from {}", indexUrl, e); } return html.toString(); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/EventTraceStream.java0100644 0000000 0000000 00000003026 14523004075 032652 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.IOException; import java.io.Writer; import opennlp.tools.ml.model.Event; public class EventTraceStream extends FilterObjectStream { private final Writer writer; /** * Initializes an {@link EventTraceStream}. * * @param stream The {@link ObjectStream stream} of events. * @param writer A {@link Writer} used write {@code events} to. */ public EventTraceStream(ObjectStream stream, Writer writer) { super(stream); this.writer = writer; } @Override public Event read() throws IOException { Event event = samples.read(); if (event != null) { writer.write(event.toString()); writer.write("\n"); } return event; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/FilterObjectStream.java0100644 0000000 0000000 00000003426 14523004075 033172 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.IOException; import java.util.Objects; /** * Abstract base class for filtering {@link ObjectStream streams}. *

* Filtering streams take an existing stream and convert * its output to something else. * * @param The sample type of the source or input stream. * @param The sample type of this stream */ public abstract class FilterObjectStream implements ObjectStream { protected final ObjectStream samples; /** * Initializes an {@link FilterObjectStream}. * * @param samples The {@link ObjectStream stream} of samples to filter. * Must not be {@code null}. */ protected FilterObjectStream(ObjectStream samples) { this.samples = Objects.requireNonNull(samples, "samples must not be null!"); } @Override public void reset() throws IOException, UnsupportedOperationException { samples.reset(); } @Override public void close() throws IOException { samples.close(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/InputStreamFactory.java0100644 0000000 0000000 00000002247 14523004075 033245 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.IOException; import java.io.InputStream; /** * Allows repeated reads through a stream for certain model building types. */ public interface InputStreamFactory { /** * @return A valid, open {@link InputStream} instance. * @throws IOException Thrown if IO errors occurred. */ InputStream createInputStream() throws IOException; } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_Insufficient0100644 0000000 0000000 00000000170 14523004075 032630 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/InsufficientTrainingDataException.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/InsufficientTrainingDataExce0100644 0000000 0000000 00000002532 14523004075 034240 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.IOException; /** * This exception indicates that the provided training data is * insufficient to train a desired model. */ @SuppressWarnings("serial") public class InsufficientTrainingDataException extends IOException { public InsufficientTrainingDataException(String message) { super(message); } public InsufficientTrainingDataException(Throwable t) { super(); initCause(t); } public InsufficientTrainingDataException(String message, Throwable t) { super(message); initCause(t); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/InvalidFormatException.java0100644 0000000 0000000 00000002424 14523004075 034055 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.IOException; /** * This exception indicates that a resource violates the expected data format. */ @SuppressWarnings("serial") public class InvalidFormatException extends IOException { public InvalidFormatException(String message) { super(message); } public InvalidFormatException(Throwable t) { super(); initCause(t); } public InvalidFormatException(String message, Throwable t) { super(message); initCause(t); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_MarkableFile0100644 0000000 0000000 00000000156 14523004075 032524 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/MarkableFileInputStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/MarkableFileInputStream.java0100644 0000000 0000000 00000004676 14523004075 034164 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; /** * Implements a markable {@link FileInputStream}. */ class MarkableFileInputStream extends InputStream { private final FileInputStream in; private long markedPosition = -1; private IOException markException; /** * Initializes a {@link MarkableFileInputStream}. * * @param file The {@link File} used as input source. * * @throws FileNotFoundException Thrown if {@code file} could not be found. */ MarkableFileInputStream(File file) throws FileNotFoundException { in = new FileInputStream(file); } @Override public synchronized void mark(int readlimit) { try { markedPosition = in.getChannel().position(); } catch (IOException e) { markedPosition = -1; } } @Override public boolean markSupported() { return true; } private void throwMarkExceptionIfOccurred() throws IOException { if (markException != null) { throw markException; } } @Override public synchronized void reset() throws IOException { throwMarkExceptionIfOccurred(); if (markedPosition >= 0) { in.getChannel().position(markedPosition); } else { throw new IOException("Stream has to be marked before it can be reset!"); } } @Override public int read() throws IOException { return in.read(); } @Override public int read(byte[] b) throws IOException { return in.read(b); } @Override public int read(byte[] b, int off, int len) throws IOException { return in.read(b, off, len); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_MarkableFile0100644 0000000 0000000 00000000165 14523004075 032524 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/MarkableFileInputStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/MarkableFileInputStreamFacto0100644 0000000 0000000 00000003242 14523004075 034205 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; /** * A factory that creates {@link MarkableFileInputStream} from a {@link File} */ public class MarkableFileInputStreamFactory implements InputStreamFactory { private final File file; /** * Initializes a {@link MarkableFileInputStreamFactory}. * * @param file The {@link File} used as input source. * * @throws FileNotFoundException Thrown if {@code file} could not be found. */ public MarkableFileInputStreamFactory(File file) throws FileNotFoundException { if (!file.exists()) { throw new FileNotFoundException("File '" + file + "' cannot be found"); } this.file = file; } @Override public InputStream createInputStream() throws IOException { return new MarkableFileInputStream(file); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/MutableInt.java0100644 0000000 0000000 00000002365 14523004075 031507 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; /** * This is a non-thread safe mutable int. */ public class MutableInt { private int i; /** * @param i The initial {@code int} value to encapsulate. */ public MutableInt(int i) { this.i = i; } /** * Adds {@code 1} to the curren value. */ public void increment() { i++; } /** * @return Retrieves the current value of the {@link MutableInt}. */ public int getValue() { return i; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/ObjectStream.java0100644 0000000 0000000 00000006402 14523004075 032021 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.IOException; import java.io.ObjectStreamException; import java.util.Iterator; /** * Reads {@link T objects} from a stream. *

* Design Decision:
* This interface provides a means for iterating over the * objects in a stream, it does not implement {@link Iterator} or * {@link Iterable} because: *

    *
  • {@link Iterator#next()} and {@link Iterator#hasNext()} are declared as * throwing no checked exceptions. Thus the {@link IOException}s thrown by * {@link #read()} would have to be wrapped in {@link RuntimeException}s, * and the compiler would be unable to force users of this code to catch * such exceptions.
  • * *
  • Implementing {@link Iterable} would mean either silently calling * {@link #reset()} to guarantee that all items were always seen on each * iteration, or documenting that the Iterable only iterates over the remaining * elements of the ObjectStream. In either case, users not reading the * documentation carefully might run into unexpected behavior.
  • *
* * @see ObjectStreamException */ public interface ObjectStream extends AutoCloseable { /** * Returns the next {@link T} object. Calling this method repeatedly until it returns * {@code null} will return each object from the underlying source exactly once. * * @return The next object or {@code null} to signal that the stream is exhausted. * * @throws IOException Thrown if there is an error during reading. */ T read() throws IOException; /** * Repositions the stream at the beginning and the previously seen object sequence * will be repeated exactly. This method can be used to re-read * the stream if multiple passes over the objects are required. *

* The implementation of this method is optional. * * @throws IOException Thrown if there is an error during resetting the stream. * @throws UnsupportedOperationException Thrown if the {@code reset()} is not supported. * By default, this is the case. */ default void reset() throws IOException { throw new UnsupportedOperationException("reset is not supported on this stream"); } /** * Closes the {@link ObjectStream} and releases all allocated * resources. After close was called, it's not allowed to call * {@link #read()} or {@link #reset()}. * * @throws IOException Thrown if there is an error during closing the stream. */ default void close() throws IOException {} } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/ObjectStreamUtils.java0100644 0000000 0000000 00000013213 14523004075 033040 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.IOException; import java.util.Collection; import java.util.Iterator; public class ObjectStreamUtils { /** * Creates an {@link ObjectStream} form an array of {@link T}. * * @param array The elements to feed into the new {@link ObjectStream}. * @param The generic type of the elements in the {@code array}. * * @return The {@link ObjectStream} over the array elements. */ @SafeVarargs public static ObjectStream createObjectStream(final T... array) { return new ObjectStream<>() { private int index = 0; @Override public T read() { if (index < array.length) return array[index++]; else return null; } @Override public void reset() { index = 0; } @Override public void close() { } }; } /** * Creates an {@link ObjectStream} form a {@link Collection}. * * @param collection The elements to feed into the new {@link ObjectStream}. * @param The generic type of the elements in the {@code collection}. * * @return The {@link ObjectStream} over the collection elements */ public static ObjectStream createObjectStream(final Collection collection) { return new ObjectStream<>() { private Iterator iterator = collection.iterator(); @Override public T read() { if (iterator.hasNext()) return iterator.next(); else return null; } @Override public void reset() { iterator = collection.iterator(); } @Override public void close() { } }; } /** * Creates a single concatenated {@link ObjectStream} from multiple individual * {@link ObjectStream streams} with the same type {@link T}. * * @param streams The collection of streams to feed into the concatenated {@link ObjectStream}. * Every element of the collection must not be {@code null}. * @param The generic type of the elements in the {@code collection}. * * @return The concatenated {@link ObjectStream} aggregating all elements in {@code streams}. */ public static ObjectStream concatenateObjectStream(final Collection> streams) { // We may want to skip null streams instead of throwing a for (ObjectStream stream : streams) { if (stream == null) { throw new NullPointerException("stream cannot be null"); } } return new ObjectStream<>() { private Iterator> iterator = streams.iterator(); private ObjectStream currentStream = iterator.next(); @Override public T read() throws IOException { T object = null; while (currentStream != null && object == null) { object = currentStream.read(); if (object == null) { currentStream = (iterator.hasNext()) ? iterator.next() : null; } } return object; } @Override public void reset() throws IOException, UnsupportedOperationException { for (ObjectStream stream : streams) { stream.reset(); } iterator = streams.iterator(); } @Override public void close() throws IOException { for (ObjectStream stream : streams) { stream.close(); } } }; } /** * Creates a single concatenated {@link ObjectStream} from multiple individual * {@link ObjectStream streams} with the same type. * * @param streams One or more stream to feed into the concatenated {@link ObjectStream}. * Every element of the collection must not be {@code null}. * @param The generic type of the elements in the {@code streams}. * * @return The concatenated {@link ObjectStream} aggregating all elements in {@code streams}. */ @SafeVarargs public static ObjectStream concatenateObjectStream(final ObjectStream... streams) { for (ObjectStream stream : streams) { if (stream == null) { throw new NullPointerException("stream cannot be null"); } } return new ObjectStream<>() { private int streamIndex = 0; @Override public T read() throws IOException { T object = null; while (streamIndex < streams.length && object == null) { object = streams[streamIndex].read(); if (object == null) streamIndex++; } return object; } @Override public void reset() throws IOException, UnsupportedOperationException { streamIndex = 0; for (ObjectStream stream : streams) { stream.reset(); } } @Override public void close() throws IOException { for (ObjectStream stream : streams) { stream.close(); } } }; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/ParagraphStream.java0100644 0000000 0000000 00000003664 14523004075 032527 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.IOException; /** * A {@link FilterObjectStream} which merges text lines into paragraphs. *

* The boundary of paragraph is defined by an empty text line. * If the last paragraph in the stream is not terminated by an empty line * the left over is assumed to be a paragraph. */ public class ParagraphStream extends FilterObjectStream { /** * Initializes an {@link FilterObjectStream}. * * @param lineStream The {@link ObjectStream stream} of samples. */ public ParagraphStream(ObjectStream lineStream) { super(lineStream); } @Override public String read() throws IOException { StringBuilder paragraph = new StringBuilder(); while (true) { String line = samples.read(); // The last paragraph in the input might not // be terminated well with a new line at the end. if (line == null || line.equals("")) { if (paragraph.length() > 0) { return paragraph.toString(); } } else { paragraph.append(line).append('\n'); } if (line == null) return null; } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/PlainTextByLineStream.java0100644 0000000 0000000 00000005257 14523004075 033635 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.Charset; import java.util.Objects; /** * Reads a plain text file and returns each line as a {@link String} object. */ public class PlainTextByLineStream implements ObjectStream { private final Charset encoding; private final InputStreamFactory inputStreamFactory; private BufferedReader in; /** * Initializes a {@link PlainTextByLineStream}. * * @param inputStreamFactory The {@link InputStreamFactory} to use. Must not be {@code null}. * @param charsetName The name of the {@link Charset} that is used for interpreting characters. * * @throws IOException Thrown if IO errors occurred. */ public PlainTextByLineStream(InputStreamFactory inputStreamFactory, String charsetName) throws IOException { this(inputStreamFactory, Charset.forName(charsetName)); } /** * Initializes a {@link PlainTextByLineStream}. * * @param inputStreamFactory The {@link InputStreamFactory} to use. Must not be {@code null}. * @param charset The {@link Charset} that is used for interpreting characters. * * @throws IOException Thrown if IO errors occurred. */ public PlainTextByLineStream(InputStreamFactory inputStreamFactory, Charset charset) throws IOException { this.inputStreamFactory = Objects.requireNonNull( inputStreamFactory, "inputStreamFactory must not be null!"); this.encoding = charset; reset(); } @Override public String read() throws IOException { return in.readLine(); } @Override public void reset() throws IOException { in = new BufferedReader( new InputStreamReader(inputStreamFactory.createInputStream(), encoding)); } @Override public void close() throws IOException { if (in != null) { in.close(); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/ResetableIterator.java0100644 0000000 0000000 00000002175 14523004075 033062 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.util.Iterator; /** * This interface makes an {@link Iterator} resettable. */ public interface ResetableIterator extends Iterator { /** * Sets the {@link Iterator} back to the first retrieved element. * The already processed sequence of elements must be repeated. */ void reset(); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/ReverseListIterator.java0100644 0000000 0000000 00000002626 14523004075 033424 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.util.Iterator; import java.util.List; /** * An iterator for a list which returns values in the opposite order as the typical list iterator. */ public class ReverseListIterator implements Iterator { private int index; private final List list; public ReverseListIterator(List list) { index = list.size() - 1; this.list = list; } @Override public T next() { return list.get(index--); } @Override public boolean hasNext() { return index >= 0; } @Override public void remove() { throw new UnsupportedOperationException(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/Sequence.java0100644 0000000 0000000 00000012331 14523004075 031205 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; /** * Represents a weighted sequence of outcomes. */ public class Sequence implements Comparable { private double score; private final List outcomes; private final List probs; private static final Double ONE = 1.0d; /** * Initializes a new {@link Sequence} of outcomes. */ public Sequence() { outcomes = new ArrayList<>(1); probs = new ArrayList<>(1); score = 0d; } /** * Initializes a new {@link Sequence} of outcomes from an existing {@link Sequence}. * * @param s An existing {@link Sequence} used as input. */ public Sequence(Sequence s) { outcomes = new ArrayList<>(s.outcomes.size() + 1); outcomes.addAll(s.outcomes); probs = new ArrayList<>(s.probs.size() + 1); probs.addAll(s.probs); score = s.score; } /** * Initializes a new {@link Sequence} of outcomes from an existing {@link Sequence}. * * @param s An existing {@link Sequence} used as input. * @param outcome An extra outcome to add to {@code s}. * @param p A extra probability of the {@code outcome}. */ public Sequence(Sequence s, String outcome, double p) { outcomes = new ArrayList<>(s.outcomes.size() + 1); outcomes.addAll(s.outcomes); outcomes.add(outcome); probs = new ArrayList<>(s.probs.size() + 1); probs.addAll(s.probs); probs.add(p); score = s.score + StrictMath.log(p); } /** * Initializes a new {@link Sequence} of outcomes from a list of * {@code outcomes}. The probabilities for each outcome will be * equally initialized to {@link #ONE}. * * @param outcomes Several existing outcomes used as input. */ public Sequence(List outcomes) { this.outcomes = outcomes; this.probs = Collections.nCopies(outcomes.size(),ONE); } @Override public int compareTo(Sequence s) { return Double.compare(s.score, score); } @Override public int hashCode() { return Objects.hash(outcomes, probs, score); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj instanceof Sequence other) { double epsilon = 0.0000001; return Objects.equals(outcomes, other.outcomes) && Objects.equals(probs, other.probs) && StrictMath.abs(score - other.score) < epsilon; } return false; } /** Adds an outcome and probability to this sequence. * @param outcome the outcome to be added. * @param p the probability associated with this outcome. */ public void add(String outcome, double p) { outcomes.add(outcome); probs.add(p); score += StrictMath.log(p); } /** * @return Retrieves a list of outcomes for this {@link Sequence}. */ public List getOutcomes() { return List.copyOf(outcomes); } /** * @return Retrieves the size of the outcomes for this {@link Sequence}. */ public int getSize() { return outcomes.size(); } /** * @param index must be greater than or equal to zero and must be less than {@link Sequence#getSize()}. * @return the outcome at the specified index. * @throws IndexOutOfBoundsException thrown if the given index is out of range. */ public String getOutcome(int index) { return outcomes.get(index); } /** * @param index must be greater than or equal to zero and must be less than {@link Sequence#getSize()}. * @return the probability at the specified index. * @throws IndexOutOfBoundsException thrown if the given index is out of range. */ public double getProb(int index) { return probs.get(index); } /** * @return Retrieves an array of probabilities associated with the {@link Sequence} outcomes. */ public double[] getProbs() { double[] ps = new double[probs.size()]; getProbs(ps); return ps; } /** * @return Retrieves the score of this {@link Sequence}. */ public double getScore() { return score; } /** * Populates an array with the probabilities associated with the {@link Sequence} outcomes. * * @param ps A pre-allocated array to hold the values of the * probabilities of the outcomes for this {@link Sequence}. */ public void getProbs(double[] ps) { for (int pi = 0, pl = probs.size(); pi < pl; pi++) { ps[pi] = probs.get(pi); } } @Override public String toString() { return score + " " + outcomes; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/SequenceCodec.java0100644 0000000 0000000 00000004016 14523004075 032144 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.util.List; /** * A codec for sequences of type {@link T}. * Defines methods to en- or decode, and validate. * * @param The generic type for the elements to handle. */ public interface SequenceCodec { /** * Decodes a sequence of {@link T objects} into {@link Span} objects. * * @param c A list of {@link T} to decode. * * @return A {@link Span} array encapsulating the decoded elements in {@code c}. */ Span[] decode(List c); /** * Encodes {@link Span} objects into a sequence of {@link T objects}. * * @param names A list of {@link Span elements} to encode. * @param length The length to respect. * * @return An array of {@link T} to encode. */ T[] encode(Span[] names, int length); /** * @return A {@link SequenceValidator} which can validate a sequence of {@link T outcomes}. */ SequenceValidator createSequenceValidator(); /** * Checks if the {@code outcomes} of a model are compatible with this {@link SequenceCodec}. * * @param outcomes The possible model outcomes. * * @return {@code true} if {@code outcomes} are type compatible, {@code false} otherwise. */ boolean areOutcomesCompatible(String[] outcomes); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/SequenceValidator.java0100644 0000000 0000000 00000003304 14523004075 033053 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; /** * @param The generic type that is to be validated. */ public interface SequenceValidator { /** * Determines whether a particular continuation of a {@link T sequence} is valid. * This is used to restrict invalid sequences such as those used in start/continue tag-based chunking * or could be used to implement tag dictionary restrictions. * * @param i The index in the {@code inputSequence} for which the new outcome is being proposed. * @param inputSequence The input sequence of {@link T}. * @param outcomesSequence The outcomes so far in this sequence. * @param outcome The next proposed outcome for the outcomes sequence. * * @return {@code true} if the sequence would still be valid with the new outcome, * {@code false} otherwise. */ boolean validSequence(int i, T[] inputSequence, String[] outcomesSequence, String outcome); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/Span.java0100644 0000000 0000000 00000030062 14523004075 030337 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.Serializable; import java.util.Objects; /** * Class for storing start and end integer offsets. * */ public class Span implements Comparable, Serializable { private static final long serialVersionUID = -7648780019844573507L; private final int start; private final int end; private final double prob; //default is 0 private final String type; /** * Initializes a new {@link Span}. Sets the prob to {@code 0} as default. * * @param s The start position of a {@link Span}. * Must be equal to or greater than {@code 0}. * Must not be greater than {@code e}. * @param e The end position of a {@link Span}, which is {@code +1} * more than the last element in the span. * Must be equal to or greater than {@code 0}. * @param type the type of the span * * @throws IllegalArgumentException Thrown if given parameters are invalid. */ public Span(int s, int e, String type) { this(s, e, type, 0d); } /** * Initializes a new {@link Span}. * * @param s The start position of a {@link Span}. * Must be equal to or greater than {@code 0}. * Must not be greater than {@code e}. * @param e The end position of a {@link Span}, which is {@code +1} * more than the last element in the span. * Must be equal to or greater than {@code 0}. * @param type The type of the {@link Span} * @param prob The probability of the {@link Span}. * * @throws IllegalArgumentException Thrown if given parameters are invalid. */ public Span(int s, int e, String type, double prob) { if (s < 0) { throw new IllegalArgumentException("start index must be zero or greater: " + s); } if (e < 0) { throw new IllegalArgumentException("end index must be zero or greater: " + e); } if (s > e) { throw new IllegalArgumentException("start index must not be larger than end index: " + "start=" + s + ", end=" + e); } start = s; end = e; this.prob = prob; this.type = type; } /** * Initializes a new {@link Span}. Sets the prob to {@code 0} as default. * * @param s The start position of a {@link Span}. * Must be equal to or greater than {@code 0}. * Must not be greater than {@code e}. * @param e The end position of a {@link Span}, which is {@code +1} * more than the last element in the span. * Must be equal to or greater than {@code 0}. * * @throws IllegalArgumentException Thrown if given parameters are invalid. */ public Span(int s, int e) { this(s, e, null, 0d); } /** * Initializes a new {@link Span}. Sets the prob to {@code 0} as default. * * @param s The start position of a {@link Span}. * Must be equal to or greater than {@code 0}. * Must not be greater than {@code e}. * @param e The end position of a {@link Span}, which is {@code +1} * more than the last element in the span. * Must be equal to or greater than {@code 0}. * @param prob The probability of the {@link Span} * * @throws IllegalArgumentException Thrown if given parameters are invalid. */ public Span(int s, int e, double prob) { this(s, e, null, prob); } /** * Initializes a new {@link Span} with an existing {@link Span} which is shifted by an * offset. * * @param span The existing {@link Span}. * @param offset The positive or negative shift offset. * * @throws IllegalArgumentException Thrown if given parameters are invalid. */ public Span(Span span, int offset) { this(span.start + offset, span.end + offset, span.getType(), span.getProb()); } /** * Creates a new immutable {@link Span} based on an existing {@link Span}, * where the existing {@link Span} did not include the probability. * * @param span The {@link Span} that has no prob or the prob is incorrect and * a new {@link Span} must be generated. * @param prob The probability of the {@link Span}. * * @throws IllegalArgumentException Thrown if given parameters are invalid. */ public Span(Span span, double prob) { this(span.start, span.end, span.getType(), prob); } /** * @return Retrieves the start of a {@link Span}. Guaranteed to be greater than {@code 0}. */ public int getStart() { return start; } /** * Note: * that the returned index is one past the actual end of the span in the * text, or the first element past the end of the span. * * @return Retrieves the end of a {@link Span}. Guaranteed to be greater than {@code 0}. */ public int getEnd() { return end; } /** * @return Retrieves the type of a {@link Span} or {@code null} if not set. */ public String getType() { return type; } /** * @return Returns the length of a {@link Span}. Guaranteed to be greater than {@code 0}. */ public int length() { return end - start; } /** * Identical {@link Span spans} are considered to contain each other. * * @param s The {@link Span} to compare with this {@link Span}. * * @return {@code true} is the specified {{@link Span} s} is contained by this span, * {@code false} otherwise. */ public boolean contains(Span s) { return start <= s.getStart() && s.getEnd() <= end; } /** * An index with the value of end is considered outside the {@link Span}. * * @param index the index to test with this {@link Span}. * * @return {@code true} if the span contains this specified index, {@code false} otherwise. */ public boolean contains(int index) { return start <= index && index < end; } /** * @param s The {@link Span} to compare with this span. * * @return {@code true} if the specified span starts with this span and is contained * in this span, {@code false} otherwise */ public boolean startsWith(Span s) { return getStart() == s.getStart() && contains(s); } /** * Checks if the specified {@link Span} intersects with this span. * * @param s The {@link Span} to compare with this span. * * @return {@code true} is the spans overlap, {@code false} otherwise. */ public boolean intersects(Span s) { int sstart = s.getStart(); //either s's start is in this or this' start is in s return this.contains(s) || s.contains(this) || getStart() <= sstart && sstart < getEnd() || sstart <= getStart() && getStart() < s.getEnd(); } /** * Checks if the specified {@link Span} crosses this span. * * @param s The {@link Span} to compare with this span. * * @return {@code true} is the given {@link Span} overlaps this span and contains a * non-overlapping section, {@code false} otherwise. */ public boolean crosses(Span s) { int sstart = s.getStart(); //either s's start is in this or this' start is in s return !this.contains(s) && !s.contains(this) && (getStart() <= sstart && sstart < getEnd() || sstart <= getStart() && getStart() < s.getEnd()); } /** * @param text The {@link CharSequence text} to analyze. * * @return Retrieves the (sub)string covered by the current {@link Span} of the specified text. * * @throws IllegalArgumentException Thrown if parameters violated a constraint. */ public CharSequence getCoveredText(CharSequence text) { if (getEnd() > text.length()) { throw new IllegalArgumentException("The span " + this + " is outside the given text which has length " + text.length() + "!"); } return text.subSequence(getStart(), getEnd()); } /** * @param text The {@link CharSequence text} to analyze. * * @return A copy of this {@link Span} with leading and trailing white spaces removed, * or the same object if already trimmed. */ public Span trim(CharSequence text) { int newStartOffset = getStart(); for (int i = getStart(); i < getEnd() && StringUtil.isWhitespace(text.charAt(i)); i++) { newStartOffset++; } int newEndOffset = getEnd(); for (int i = getEnd(); i > getStart() && StringUtil.isWhitespace(text.charAt(i - 1)); i--) { newEndOffset--; } if (newStartOffset == getStart() && newEndOffset == getEnd()) { return this; } else if (newStartOffset > newEndOffset) { return new Span(getStart(), getStart(), getType()); } else { return new Span(newStartOffset, newEndOffset, getType()); } } /** * Compares the specified {@link Span} to the current span. * * @param s The {@link Span} instance to compare against. * * @see Comparable#compareTo(Object) */ @Override public int compareTo(Span s) { if (getStart() < s.getStart()) { return -1; } else if (getStart() == s.getStart()) { if (getEnd() > s.getEnd()) { return -1; } else if (getEnd() < s.getEnd()) { return 1; } else { // compare the type if (getType() == null && s.getType() == null) { return 0; } else if (getType() != null && s.getType() != null) { // use type lexicography order return getType().compareTo(s.getType()); } else if (getType() != null) { return -1; } return 1; } } else { return 1; } } @Override public int hashCode() { return Objects.hash(getStart(), getEnd(), getType()); } @Override public boolean equals(Object o) { if (o == this) { return true; } if (o instanceof Span s) { return getStart() == s.getStart() && getEnd() == s.getEnd() && Objects.equals(getType(), s.getType()); } return false; } /** * @return A human-readable representation of this {@link Span}. */ @Override public String toString() { StringBuilder toStringBuffer = new StringBuilder(15); toStringBuffer.append("["); toStringBuffer.append(getStart()); toStringBuffer.append(".."); toStringBuffer.append(getEnd()); toStringBuffer.append(")"); if (getType() != null) { toStringBuffer.append(" "); toStringBuffer.append(getType()); } return toStringBuffer.toString(); } /** * Converts an array of {@link Span spans} to an array of {@link String}. * * @param spans The array used as input. * @param s The {@link CharSequence} used to compute covered text. * @return The converted array of strings. */ public static String[] spansToStrings(Span[] spans, CharSequence s) { String[] tokens = new String[spans.length]; for (int si = 0, sl = spans.length; si < sl; si++) { tokens[si] = spans[si].getCoveredText(s).toString(); } return tokens; } public static String[] spansToStrings(Span[] spans, String[] tokens) { String[] chunks = new String[spans.length]; StringBuilder cb = new StringBuilder(); for (int si = 0, sl = spans.length; si < sl; si++) { cb.setLength(0); for (int ti = spans[si].getStart(); ti < spans[si].getEnd(); ti++) { cb.append(tokens[ti]).append(" "); } chunks[si] = cb.substring(0, cb.length() - 1); } return chunks; } /** * @return Retrieves the probability represented by a {@link Span}. */ public double getProb() { return prob; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/StringList.java0100644 0000000 0000000 00000013630 14523004075 031542 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.util.Arrays; import java.util.Iterator; import java.util.NoSuchElementException; import java.util.Objects; import opennlp.tools.util.jvm.StringInterners; /** * A {@link StringList} is an immutable list of {@link String}s. */ public class StringList implements Iterable { private final String[] tokens; private final boolean caseSensitive; /** * Initializes a {@link StringList} instance. By default, this instance is case-sensitive. *

* Note:
* Token String will be interned via {@link StringInterners}. * * @param singleToken One single token */ public StringList(String singleToken) { this(true, singleToken); } /** * Initializes a {@link StringList} instance. By default, this instance is case-sensitive. *

* Note:
* Token Strings will be interned via {@link StringInterners}. * * @param tokens The string parts of the new {@link StringList}. * Must not be an empty tokens array or {@code null}. * * @throws IllegalArgumentException Thrown if parameters were invalid. */ public StringList(String... tokens) { this(true, tokens); } /** * Initializes a {@link StringList} instance. *

* Note:
* Token Strings will be interned via {@link StringInterners}. * * @param isCaseSensitive Whether it will operate case-sensitive, or not. * @param tokens The string parts of the new {@link StringList}. * Must not be an empty tokens array or {@code null}. * * @throws IllegalArgumentException Thrown if parameters were invalid. */ public StringList(boolean isCaseSensitive, String... tokens) { Objects.requireNonNull(tokens, "tokens must not be null"); if (tokens.length == 0) { throw new IllegalArgumentException("tokens must not be empty"); } this.tokens = new String[tokens.length]; for (int i = 0; i < tokens.length; i++) { this.tokens[i] = StringInterners.intern(tokens[i]); } this.caseSensitive = isCaseSensitive; } /** * @param index The index to get a token from. * * @return Retrieves a token from the given {@code index}. */ public String getToken(int index) { return tokens[index]; } /** * @return Retrieves the number of tokens inside this list. */ public int size() { return tokens.length; } /** * @return Retrieves an {@link Iterator} over all tokens. */ @Override public Iterator iterator() { return new Iterator<>() { private int index; @Override public boolean hasNext() { return index < size(); } @Override public String next() { if (hasNext()) { return getToken(index++); } else { throw new NoSuchElementException(); } } @Override public void remove() { throw new UnsupportedOperationException(); } }; } /** * Compares to {@link StringList token list} and ignores the case of the tokens. * Note: This can cause problems with some locales. * * @param tokens The {@link StringList tokens} used for comparison. * * @return {@code true} if identically with ignore the case, {@code false} otherwise. */ public boolean compareToIgnoreCase(StringList tokens) { if (size() == tokens.size()) { for (int i = 0; i < size(); i++) { if (getToken(i).compareToIgnoreCase(tokens.getToken(i)) != 0) { return false; } } } else { return false; } return true; } @Override public int hashCode() { // if lookup is too slow optimize this return StringUtil.toLowerCase(toString()).hashCode(); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } else if (obj instanceof StringList tokenList) { if (caseSensitive) { return Arrays.equals(tokens, tokenList.tokens); } else { return compareToIgnoreCase(tokenList); } } return false; } /** * @return A human-readable representation of this {@link StringList}. */ @Override public String toString() { StringBuilder string = new StringBuilder(); string.append('['); for (int i = 0; i < size(); i++) { string.append(getToken(i)); if (i < size() - 1) { string.append(','); } } string.append(']'); return string.toString(); } /** * @return {@code true}, if this {@link StringList} is case-sensitive. */ public boolean isCaseSensitive() { return caseSensitive; } /** * @return If this {@link StringList} is case-insensitive, * the same instance is returned. Otherwise, a new object is returned. */ public StringList toCaseInsensitive() { if (isCaseSensitive()) { return new StringList(false, tokens); } return this; } /** * @return If this {@link StringList} is case-sensitive, * the same instance is returned. Otherwise, a new object is returned. */ public StringList toCaseSensitive() { if (!isCaseSensitive()) { return new StringList(true, tokens); } return this; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/StringUtil.java0100644 0000000 0000000 00000030556 14523004075 031552 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.nio.CharBuffer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class StringUtil { private static final Logger logger = LoggerFactory.getLogger(StringUtil.class); /** * Determines if the specified {@link Character} is a whitespace. * A character is considered a whitespace when one of the following conditions is met: *

    *
  • It's a {@link Character#isWhitespace(int)} whitespace.
  • *
  • It's a part of the Unicode Zs category ({@link Character#SPACE_SEPARATOR}).
  • *
* * {@link Character#isWhitespace(int)} does not include no-break spaces. * In OpenNLP no-break spaces are also considered as white spaces. * * @param charCode The character to check. * * @return {@code true} if {@code charCode} represents a white space, {@code false} otherwise. */ public static boolean isWhitespace(char charCode) { return Character.isWhitespace(charCode) || Character.getType(charCode) == Character.SPACE_SEPARATOR; } /** * Determines if the specified {@link Character} is a whitespace. * A character is considered a whitespace when one of the following conditions is met: * *
    *
  • Its a {@link Character#isWhitespace(int)} whitespace.
  • *
  • Its a part of the Unicode Zs category ({@link Character#SPACE_SEPARATOR}).
  • *
* * {@link Character#isWhitespace(int)} does not include no-break spaces. * In OpenNLP no-break spaces are also considered as white spaces. * * @param charCode An int representation of a character to check. * * @return {@code true} if {@code charCode} represents a white space, {@code false} otherwise. */ public static boolean isWhitespace(int charCode) { return Character.isWhitespace(charCode) || Character.getType(charCode) == Character.SPACE_SEPARATOR; } /** * Converts a {@link CharSequence} to lower case, independent of the current * {@link java.util.Locale} via {@link Character#toLowerCase(int)} which uses * mapping information from the UnicodeData file. * * @param string The {@link CharSequence} to transform. * @return The lower-cased String. */ public static String toLowerCase(CharSequence string) { int[] cp = string.codePoints().map(Character::toLowerCase).toArray(); return new String(cp, 0, cp.length); } public static CharBuffer toLowerCaseCharBuffer(CharSequence sequence) { CharBuffer result = CharBuffer.allocate(sequence.length()); for (int cp : sequence.codePoints().toArray()) { for (char c : Character.toChars(Character.toLowerCase(cp))) { result.append(c); } } result.clear(); return result; } /* public static CharBuffer toLowerCaseCharBuffer(CharSequence string) { int[] cp = string.codePoints().map(Character::toLowerCase).toArray(); CharBuffer result = CharBuffer.allocate(string.length()); for (int j : cp) { char[] chars = Character.toChars(j); result.put(chars, 0, chars.length); } result.clear(); return result; } */ /** * Converts a {@link CharSequence} to upper case, independent of the current * {@link java.util.Locale} via {@link Character#toUpperCase(char)} which uses * mapping information from the UnicodeData file. * * @param string The {@link CharSequence} to transform. * @return The upper-cased String */ public static String toUpperCase(CharSequence string) { char[] upperCaseChars = new char[string.length()]; for (int i = 0; i < string.length(); i++) { upperCaseChars[i] = Character.toUpperCase(string.charAt(i)); } return new String(upperCaseChars); } /** * @return {@code true} if {@link CharSequence#length()} is {@code 0} or {@code null}, otherwise * {@code false} * * @since 1.5.1 */ public static boolean isEmpty(CharSequence theString) { return theString.length() == 0; } /** * Get the minimum of three values. * * @param a number a * @param b number b * @param c number c * @return the minimum among the three parameters {@code a}, {@code b} or {@code c}. */ private static int minimum(int a, int b, int c) { int minValue; minValue = a; if (b < minValue) { minValue = b; } if (c < minValue) { minValue = c; } return minValue; } /** * Computes the Levenshtein distance of two strings in a matrix. *

* Based on this * * pseudo-code which in turn is based on the paper Wagner, Robert A.; Fischer, Michael J. (1974), * "The String-to-String Correction Problem", Journal of the ACM 21 (1): 168-173 * * @param wordForm The form as input. * @param lemma The target lemma. * @return A 2-dimensional Levenshtein distance matrix. */ public static int[][] levenshteinDistance(String wordForm, String lemma) { int wordLength = wordForm.length(); int lemmaLength = lemma.length(); int cost; int[][] distance = new int[wordLength + 1][lemmaLength + 1]; if (wordLength == 0) { return distance; } if (lemmaLength == 0) { return distance; } //fill in the rows of column 0 for (int i = 0; i <= wordLength; i++) { distance[i][0] = i; } //fill in the columns of row 0 for (int j = 0; j <= lemmaLength; j++) { distance[0][j] = j; } //fill in the rest of the matrix calculating the minimum distance for (int i = 1; i <= wordLength; i++) { int s_i = wordForm.charAt(i - 1); for (int j = 1; j <= lemmaLength; j++) { if (s_i == lemma.charAt(j - 1)) { cost = 0; } else { cost = 1; } //obtain minimum distance from calculating deletion, insertion, substitution distance[i][j] = minimum(distance[i - 1][j] + 1, distance[i][j - 1] + 1, distance[i - 1][j - 1] + cost); } } return distance; } /** * Computes the Shortest Edit Script (SES) to convert a word into its lemma. * This is based on Chrupala's PhD thesis (2008). * * @param wordForm The token. * @param lemma The target lemma. * @param distance A 2-dimensional Levenshtein distance matrix. * @param permutations The number of permutations. */ public static void computeShortestEditScript(String wordForm, String lemma, int[][] distance, StringBuffer permutations) { int n = distance.length; int m = distance[0].length; int wordFormLength = n - 1; int lemmaLength = m - 1; while (true) { if (distance[wordFormLength][lemmaLength] == 0) { break; } if ((lemmaLength > 0 && wordFormLength > 0) && (distance[wordFormLength - 1][lemmaLength - 1] < distance[wordFormLength][lemmaLength])) { permutations.append('R').append(wordFormLength - 1) .append(wordForm.charAt(wordFormLength - 1)).append(lemma.charAt(lemmaLength - 1)); lemmaLength--; wordFormLength--; continue; } if (lemmaLength > 0 && (distance[wordFormLength][lemmaLength - 1] < distance[wordFormLength][lemmaLength])) { permutations.append('I').append(wordFormLength) .append(lemma.charAt(lemmaLength - 1)); lemmaLength--; continue; } if (wordFormLength > 0 && (distance[wordFormLength - 1][lemmaLength] < distance[wordFormLength][lemmaLength])) { permutations.append('D').append(wordFormLength - 1) .append(wordForm.charAt(wordFormLength - 1)); wordFormLength--; continue; } if ((wordFormLength > 0 && lemmaLength > 0) && (distance[wordFormLength - 1][lemmaLength - 1] == distance[wordFormLength][lemmaLength])) { wordFormLength--; lemmaLength--; continue ; } if (wordFormLength > 0 && (distance[wordFormLength - 1][lemmaLength] == distance[wordFormLength][lemmaLength])) { wordFormLength--; continue; } if (lemmaLength > 0 && (distance[wordFormLength][lemmaLength - 1] == distance[wordFormLength][lemmaLength])) { lemmaLength--; } } } /** * Reads the predicted Shortest Edit Script (SES) by a lemmatizer model and applies the * permutations to obtain the lemma from the {@code wordForm}. * * @param wordForm The wordForm as input. * @param permutations The permutations predicted by the lemmatizer model. * @return The decoded lemma. */ public static String decodeShortestEditScript(String wordForm, String permutations) { StringBuffer lemma = new StringBuffer(wordForm).reverse(); int permIndex = 0; while (true) { if (permutations.length() <= permIndex) { break; } //read first letter of permutation string char nextOperation = permutations.charAt(permIndex); if (logger.isTraceEnabled()) { logger.trace("-> NextOP: {}", nextOperation); } //go to the next permutation letter permIndex++; if (nextOperation == 'R') { String charAtPerm = Character.toString(permutations.charAt(permIndex)); int charIndex = Integer.parseInt(charAtPerm); // go to the next character in the permutation buffer // which is the replacement character permIndex++; char replace = permutations.charAt(permIndex); //go to the next char in the permutation buffer // which is the candidate character permIndex++; char with = permutations.charAt(permIndex); if (lemma.length() <= charIndex) { return wordForm; } if (lemma.charAt(charIndex) == replace) { lemma.setCharAt(charIndex, with); } if (logger.isTraceEnabled()) { logger.trace("-> ROP: {}", lemma); } //go to next permutation permIndex++; } else if (nextOperation == 'I') { String charAtPerm = Character.toString(permutations.charAt(permIndex)); int charIndex = Integer.parseInt(charAtPerm); permIndex++; //character to be inserted char in = permutations.charAt(permIndex); if (lemma.length() < charIndex) { return wordForm; } lemma.insert(charIndex, in); if (logger.isTraceEnabled()) { logger.trace("-> IOP {}", lemma); } //go to next permutation permIndex++; } else if (nextOperation == 'D') { String charAtPerm = Character.toString(permutations.charAt(permIndex)); int charIndex = Integer.parseInt(charAtPerm); if (lemma.length() <= charIndex) { return wordForm; } lemma.deleteCharAt(charIndex); permIndex++; // go to next permutation permIndex++; } } return lemma.reverse().toString(); } /** * @param wordForm The word as input. * @param lemma The target lemma. * @return Retrieves the Shortest Edit Script (SES) required to go from a word to a lemma. */ public static String getShortestEditScript(String wordForm, String lemma) { String reversedWF = new StringBuffer(wordForm.toLowerCase()).reverse().toString(); String reversedLemma = new StringBuffer(lemma.toLowerCase()).reverse().toString(); StringBuffer permutations = new StringBuffer(); String ses; if (!reversedWF.equals(reversedLemma)) { int[][]levenDistance = StringUtil.levenshteinDistance(reversedWF, reversedLemma); StringUtil.computeShortestEditScript(reversedWF, reversedLemma, levenDistance, permutations); ses = permutations.toString(); } else { ses = "O"; } return ses; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/TokenTag.java0100644 0000000 0000000 00000004317 14523004075 031156 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.util.Arrays; public record TokenTag(String token, String tag, String[] additionalData) { public TokenTag(String token, String tag, String[] additionalData) { this.token = token; this.tag = tag; if (additionalData != null) { this.additionalData = Arrays.copyOf(additionalData, additionalData.length); } else { this.additionalData = null; } } @Deprecated(forRemoval = true) public String getToken() { return token; } @Deprecated(forRemoval = true) public String getTag() { return tag; } @Deprecated(forRemoval = true) public String[] getAdditionalData() { return additionalData; } public static String[] extractTokens(TokenTag[] tuples) { String[] tokens = new String[tuples.length]; for (int i = 0; i < tuples.length; i++) { tokens[i] = tuples[i].token(); } return tokens; } public static String[] extractTags(TokenTag[] tuples) { String[] tags = new String[tuples.length]; for (int i = 0; i < tuples.length; i++) { tags[i] = tuples[i].tag(); } return tags; } public static TokenTag[] create(String[] toks, String[] tags) { TokenTag[] tuples = new TokenTag[toks.length]; for (int i = 0; i < toks.length; i++) { tuples[i] = new TokenTag(toks[i], tags[i], null); } return tuples; } @Override public String toString() { return token + "_" + tag; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/TrainingParameters.java0100644 0000000 0000000 00000055214 14523004075 033243 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Properties; import java.util.TreeMap; import opennlp.tools.cmdline.CmdLineUtil; import opennlp.tools.ml.EventTrainer; /** * Declares and handles default parameters used for or during training models. */ public class TrainingParameters { // TODO: are them duplicated? public static final String ALGORITHM_PARAM = "Algorithm"; public static final String TRAINER_TYPE_PARAM = "TrainerType"; public static final String ITERATIONS_PARAM = "Iterations"; public static final String CUTOFF_PARAM = "Cutoff"; public static final String THREADS_PARAM = "Threads"; public static final int ITERATIONS_DEFAULT_VALUE = 100; public static final int CUTOFF_DEFAULT_VALUE = 5; private final Map parameters = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); /** * No-arg constructor to create a default {@link TrainingParameters} instance. */ public TrainingParameters() { } /** * Copy constructor to hand over the config of existing {@link TrainingParameters}. */ public TrainingParameters(TrainingParameters trainingParameters) { this.parameters.putAll(trainingParameters.parameters); } /** * Key-value based constructor to apply a {@link Map} based configuration initialization. */ public TrainingParameters(Map map) { parameters.putAll(map); } /** * {@link InputStream} based constructor that reads in {@link TrainingParameters}. * * @throws IOException Thrown if IO errors occurred. */ public TrainingParameters(InputStream in) throws IOException { Properties properties = new Properties(); properties.load(in); for (Map.Entry entry : properties.entrySet()) { parameters.put((String) entry.getKey(), entry.getValue()); } } /** * @return Retrieves the training algorithm name for a given name space, or {@code null} if unset. */ public String algorithm(String namespace) { return (String)parameters.get(getKey(namespace, ALGORITHM_PARAM)); } /** * @return Retrieves the training algorithm name. or @code null} if not set. */ public String algorithm() { return (String)parameters.get(ALGORITHM_PARAM); } private static String getStringValue(Object value) { if (value instanceof Integer) { return Integer.toString((Integer)value); } else if (value instanceof Double) { return Double.toString((Double)value); } else if (value instanceof Boolean) { return Boolean.toString((Boolean)value); } else { return (String)value; } } /** * @param namespace The name space to filter or narrow the search space. May be {@code null}. * * @return Retrieves a parameter {@link Map} which can be passed to the train and validate methods. */ public Map getObjectSettings(String namespace) { Map trainingParams = new HashMap<>(); String prefix = namespace + "."; for (Map.Entry entry : parameters.entrySet()) { String key = entry.getKey(); if (namespace != null) { if (key.startsWith(prefix)) { trainingParams.put(key.substring(prefix.length()), entry.getValue()); } } else { if (!key.contains(".")) { trainingParams.put(key, entry.getValue()); } } } return Collections.unmodifiableMap(trainingParams); } /** * @return Retrieves a parameter {@link Map} of all parameters without narrowing. */ public Map getObjectSettings() { return getObjectSettings(null); } /** * @param namespace The name space to filter or narrow the search space. May be {@code null}. * * @return Retrieves {@link TrainingParameters} which can be passed to the train and validate methods. */ public TrainingParameters getParameters(String namespace) { TrainingParameters params = new TrainingParameters(); Map settings = getObjectSettings(namespace); for (Entry entry: settings.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); if (value instanceof Integer) { params.put(key, (Integer)value); } else if (value instanceof Double) { params.put(key, (Double)value); } else if (value instanceof Boolean) { params.put(key, (Boolean)value); } else { params.put(key, (String)value); } } return params; } /** * Puts a {@code value} into the current {@link TrainingParameters} under a certain {@code key}, * if the value was not present before. * The {@code namespace} can be used to prefix the {@code key}. * * @param namespace A prefix to declare or use a name space under which {@code key} shall be put. * May be {@code null}. * @param key The identifying key to put or retrieve a {@code value} with. * @param value The {@link String} parameter to put into this {@link TrainingParameters} instance. */ public void putIfAbsent(String namespace, String key, String value) { parameters.putIfAbsent(getKey(namespace, key), value); } /** * Puts a {@code value} into the current {@link TrainingParameters} under a certain {@code key}, * if the value was not present before. * * @param key The identifying key to put or retrieve a {@code value} with. * @param value The {@link String} parameter to put into this {@link TrainingParameters} instance. */ public void putIfAbsent(String key, String value) { putIfAbsent(null, key, value); } /** * Puts a {@code value} into the current {@link TrainingParameters} under a certain {@code key}, * if the value was not present before. * The {@code namespace} can be used to prefix the {@code key}. * * @param namespace A prefix to declare or use a name space under which {@code key} shall be put. * May be {@code null}. * @param key The identifying key to put or retrieve a {@code value} with. * @param value The {@link Integer} parameter to put into this {@link TrainingParameters} instance. */ public void putIfAbsent(String namespace, String key, int value) { parameters.putIfAbsent(getKey(namespace, key), value); } /** * Puts a {@code value} into the current {@link TrainingParameters} under a certain {@code key}, * if the value was not present before. * * @param key The identifying key to put or retrieve a {@code value} with. * @param value The {@link Integer} parameter to put into this {@link TrainingParameters} instance. */ public void putIfAbsent(String key, int value) { putIfAbsent(null, key, value); } /** * Puts a {@code value} into the current {@link TrainingParameters} under a certain {@code key}, * if the value was not present before. * The {@code namespace} can be used to prefix the {@code key}. * * @param namespace A prefix to declare or use a name space under which {@code key} shall be put. * May be {@code null}. * @param key The identifying key to put or retrieve a {@code value} with. * @param value The {@link Double} parameter to put into this {@link TrainingParameters} instance. */ public void putIfAbsent(String namespace, String key, double value) { parameters.putIfAbsent(getKey(namespace, key), value); } /** * Puts a {@code value} into the current {@link TrainingParameters} under a certain {@code key}, * if the value was not present before. * The {@code namespace} can be used to prefix the {@code key}. * * @param key The identifying key to put or retrieve a {@code value} with. * @param value The {@link Double} parameter to put into this {@link TrainingParameters} instance. */ public void putIfAbsent(String key, double value) { putIfAbsent(null, key, value); } /** * Puts a {@code value} into the current {@link TrainingParameters} under a certain {@code key}, * if the value was not present before. * The {@code namespace} can be used to prefix the {@code key}. * * @param namespace A prefix to declare or use a name space under which {@code key} shall be put. * May be {@code null}. * @param key The identifying key to put or retrieve a {@code value} with. * @param value The {@link Boolean} parameter to put into this {@link TrainingParameters} instance. */ public void putIfAbsent(String namespace, String key, boolean value) { parameters.putIfAbsent(getKey(namespace, key), value); } /** * Puts a {@code value} into the current {@link TrainingParameters} under a certain {@code key}, * if the value was not present before. * * @param key The identifying key to put or retrieve a {@code value} with. * @param value The {@link Boolean} parameter to put into this {@link TrainingParameters} instance. */ public void putIfAbsent(String key, boolean value) { putIfAbsent(null, key, value); } /** * Puts a {@code value} into the current {@link TrainingParameters} under a certain {@code key}. * If the value was present before, the previous value will be overwritten with the specified one. * The {@code namespace} can be used to prefix the {@code key}. * * @param namespace A prefix to declare or use a name space under which {@code key} shall be put. * May be {@code null}. * @param key The identifying key to put or retrieve a {@code value} with. * @param value The {@link String} parameter to put into this {@link TrainingParameters} instance. */ public void put(String namespace, String key, String value) { parameters.put(getKey(namespace, key), value); } /** * Puts a {@code value} into the current {@link TrainingParameters} under a certain {@code key}. * If the value was present before, the previous value will be overwritten with the specified one. * * @param key The identifying key to put or retrieve a {@code value} with. * @param value The {@link String} parameter to put into this {@link TrainingParameters} instance. */ public void put(String key, String value) { put(null, key, value); } /** * Puts a {@code value} into the current {@link TrainingParameters} under a certain {@code key}. * If the value was present before, the previous value will be overwritten with the specified one. * The {@code namespace} can be used to prefix the {@code key}. * * @param namespace A prefix to declare or use a name space under which {@code key} shall be put. * May be {@code null}. * @param key The identifying key to put or retrieve a {@code value} with. * @param value The {@link Integer} parameter to put into this {@link TrainingParameters} instance. */ public void put(String namespace, String key, int value) { parameters.put(getKey(namespace, key), value); } /** * Puts a {@code value} into the current {@link TrainingParameters} under a certain {@code key}. * If the value was present before, the previous value will be overwritten with the specified one. * * @param key The identifying key to put or retrieve a {@code value} with. * @param value The {@link Integer} parameter to put into this {@link TrainingParameters} instance. */ public void put(String key, int value) { put(null, key, value); } /** * Puts a {@code value} into the current {@link TrainingParameters} under a certain {@code key}. * If the value was present before, the previous value will be overwritten with the specified one. * The {@code namespace} can be used to prefix the {@code key}. * * @param namespace A prefix to declare or use a name space under which {@code key} shall be put. * May be {@code null}. * @param key The identifying key to put or retrieve a {@code value} with. * @param value The {@link Double} parameter to put into this {@link TrainingParameters} instance. */ public void put(String namespace, String key, double value) { parameters.put(getKey(namespace, key), value); } /** * Puts a {@code value} into the current {@link TrainingParameters} under a certain {@code key}. * If the value was present before, the previous value will be overwritten with the specified one. * * @param key The identifying key to put or retrieve a {@code value} with. * @param value The {@link Double} parameter to put into this {@link TrainingParameters} instance. */ public void put(String key, double value) { put(null, key, value); } /** * Puts a {@code value} into the current {@link TrainingParameters} under a certain {@code key}. * If the value was present before, the previous value will be overwritten with the specified one. * The {@code namespace} can be used to prefix the {@code key}. * * @param namespace A prefix to declare or use a name space under which {@code key} shall be put. * May be {@code null}. * @param key The identifying key to put or retrieve a {@code value} with. * @param value The {@link Boolean} parameter to put into this {@link TrainingParameters} instance. */ public void put(String namespace, String key, boolean value) { parameters.put(getKey(namespace, key), value); } /** * Puts a {@code value} into the current {@link TrainingParameters} under a certain {@code key}. * If the value was present before, the previous value will be overwritten with the specified one. * * @param key The identifying key to put or retrieve a {@code value} with. * @param value The {@link Boolean} parameter to put into this {@link TrainingParameters} instance. */ public void put(String key, boolean value) { put(null, key, value); } /** * Serializes a {@link TrainingParameters} instance via a specified {@link OutputStream}. * * @param out A valid, open {@link OutputStream} to write to. * * @throws IOException Thrown if errors occurred. */ public void serialize(OutputStream out) throws IOException { Properties properties = new Properties(); properties.putAll(parameters); properties.store(out, null); } /** * Obtains a training parameter value. *

* Note: * {@link java.lang.ClassCastException} can be thrown if the value is not {@code String} * * @param key The identifying key to retrieve a {@code value} with. * @param defaultValue The alternative value to use, if {@code key} was not present. * @return The {@link String training value} associated with {@code key} if present, * or a {@code defaultValue} if not. */ public String getStringParameter(String key, String defaultValue) { return getStringParameter(null, key, defaultValue); } /** * Obtains a training parameter value in the specified namespace. *

* Note: * {@link java.lang.ClassCastException} can be thrown if the value is not {@link String} * @param namespace A prefix to declare or use a name space under which {@code key} shall be searched. * May be {@code null}. * @param key The identifying key to retrieve a {@code value} with. * @param defaultValue The alternative value to use, if {@code key} was not present. * * @return The {@link String training value} associated with {@code key} if present, * or a {@code defaultValue} if not. */ public String getStringParameter(String namespace, String key, String defaultValue) { Object value = parameters.get(getKey(namespace, key)); if (value == null) { return defaultValue; } else { return (String)value; } } /** * Obtains a training parameter value. *

* * @param key The identifying key to retrieve a {@code value} with. * @param defaultValue The alternative value to use, if {@code key} was not present. * @return The {@link Integer training value} associated with {@code key} if present, * or a {@code defaultValue} if not. */ public int getIntParameter(String key, int defaultValue) { return getIntParameter(null, key, defaultValue); } /** * Obtains a training parameter value in the specified namespace. *

* @param namespace A prefix to declare or use a name space under which {@code key} shall be searched. * May be {@code null}. * @param key The identifying key to retrieve a {@code value} with. * @param defaultValue The alternative value to use, if {@code key} was not present. * * @return The {@link Integer training value} associated with {@code key} if present, * or a {@code defaultValue} if not. */ public int getIntParameter(String namespace, String key, int defaultValue) { Object value = parameters.get(getKey(namespace, key)); if (value == null) { return defaultValue; } else { try { return (Integer) value; } catch (ClassCastException e) { return Integer.parseInt((String)value); } } } /** * Obtains a training parameter value. *

* * @param key The identifying key to retrieve a {@code value} with. * @param defaultValue The alternative value to use, if {@code key} was not present. * @return The {@link Double training value} associated with {@code key} if present, * or a {@code defaultValue} if not. */ public double getDoubleParameter(String key, double defaultValue) { return getDoubleParameter(null, key, defaultValue); } /** * Obtains a training parameter value in the specified namespace. *

* @param namespace A prefix to declare or use a name space under which {@code key} shall be searched. * May be {@code null}. * @param key The identifying key to retrieve a {@code value} with. * @param defaultValue The alternative value to use, if {@code key} was not present. * * @return The {@link Double training value} associated with {@code key} if present, * or a {@code defaultValue} if not. */ public double getDoubleParameter(String namespace, String key, double defaultValue) { Object value = parameters.get(getKey(namespace, key)); if (value == null) { return defaultValue; } else { try { return (Double) value; } catch (ClassCastException e) { return Double.parseDouble((String)value); } } } /** * Obtains a training parameter value. *

* * @param key The identifying key to retrieve a {@code value} with. * @param defaultValue The alternative value to use, if {@code key} was not present. * @return The {@link Boolean training value} associated with {@code key} if present, * or a {@code defaultValue} if not. */ public boolean getBooleanParameter(String key, boolean defaultValue) { return getBooleanParameter(null, key, defaultValue); } /** * Obtains a training parameter value in the specified namespace. *

* @param namespace A prefix to declare or use a name space under which {@code key} shall be searched. * May be {@code null}. * @param key The identifying key to retrieve a {@code value} with. * @param defaultValue The alternative value to use, if {@code key} was not present. * * @return The {@link Boolean training value} associated with {@code key} if present, * or a {@code defaultValue} if not. */ public boolean getBooleanParameter(String namespace, String key, boolean defaultValue) { Object value = parameters.get(getKey(namespace, key)); if (value == null) { return defaultValue; } else { try { return (Boolean) value; } catch (ClassCastException e) { return Boolean.parseBoolean((String)value); } } } /** * @return Retrieves a new {@link TrainingParameters instance} initialized with default values. */ public static TrainingParameters defaultParams() { TrainingParameters mlParams = new TrainingParameters(); mlParams.put(TrainingParameters.ALGORITHM_PARAM, "MAXENT"); mlParams.put(TrainingParameters.TRAINER_TYPE_PARAM, EventTrainer.EVENT_VALUE); mlParams.put(TrainingParameters.ITERATIONS_PARAM, ITERATIONS_DEFAULT_VALUE); mlParams.put(TrainingParameters.CUTOFF_PARAM, CUTOFF_DEFAULT_VALUE); return mlParams; } /** * @param params The parameters to additionally apply into the new {@link TrainingParameters instance}. * * @return Retrieves a new {@link TrainingParameters instance} initialized with given parameter values. */ public static TrainingParameters setParams(String[] params) { TrainingParameters mlParams = new TrainingParameters(); mlParams.put(TrainingParameters.ALGORITHM_PARAM , "MAXENT"); mlParams.put(TrainingParameters.TRAINER_TYPE_PARAM , EventTrainer.EVENT_VALUE); mlParams.put(TrainingParameters.ITERATIONS_PARAM , null != CmdLineUtil.getIntParameter("-" + TrainingParameters.ITERATIONS_PARAM.toLowerCase() , params) ? CmdLineUtil.getIntParameter("-" + TrainingParameters.ITERATIONS_PARAM.toLowerCase() , params) : ITERATIONS_DEFAULT_VALUE); mlParams.put(TrainingParameters.CUTOFF_PARAM , null != CmdLineUtil.getIntParameter("-" + TrainingParameters.CUTOFF_PARAM.toLowerCase() , params) ? CmdLineUtil.getIntParameter("-" + TrainingParameters.CUTOFF_PARAM.toLowerCase() , params) : CUTOFF_DEFAULT_VALUE); return mlParams; } /** * @param namespace The namespace used as prefix or {@code null}. * If {@code null} the {@code key} is left unchanged. * @param key The identifying key to process. * * @return Retrieves a prefixed key in the specified {@code namespace}. * If no {@code namespace} was specified the returned String is equal to {@code key}. */ static String getKey(String namespace, String key) { if (namespace == null) { return key; } else { return namespace + "." + key; } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/Version.java0100644 0000000 0000000 00000013555 14523004075 031073 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.IOException; import java.io.InputStream; import java.util.Objects; import java.util.Properties; /** * The {@link Version} class represents the OpenNLP Tools library version. *

* The version has three parts: *

    *
  • Major: OpenNLP Tools libraries with a different major version are not interchangeable.
  • *
  • Minor: OpenNLP Tools libraries with an identical major version, but different * minor version may be interchangeable. See release notes for further details.
  • *
  • Revision: OpenNLP Tools libraries with same major and minor version, but a different * revision, are fully interchangeable.
  • *
*/ public class Version { private static final String DEV_VERSION_STRING = "0.0.0-SNAPSHOT"; public static final Version DEV_VERSION = Version.parse(DEV_VERSION_STRING); private static final String SNAPSHOT_MARKER = "-SNAPSHOT"; private final int major; private final int minor; private final int revision; private final boolean snapshot; /** * Initializes a {@link Version} instance with the provided version elements. * * @param major Must not be negative. * @param minor Must not be negative. * @param revision Must not be negative. * @param snapshot {@code true} if the version represents a snapshot, {@code false} otherwise. */ public Version(int major, int minor, int revision, boolean snapshot) { this.major = major; this.minor = minor; this.revision = revision; this.snapshot = snapshot; } /** * Initializes a {@link Version} instance with the provided version elements. * The {@link Version} will not be a snapshot, yet a release version. * * @param major Must not be negative. * @param minor Must not be negative. * @param revision Must not be negative. */ public Version(int major, int minor, int revision) { this(major, minor, revision, false); } /** * @return Retrieves the major version, guaranteed to be non-negative. */ public int getMajor() { return major; } /** * @return Retrieves the minor version, guaranteed to be non-negative. */ public int getMinor() { return minor; } /** * @return Retrieves the revision version, guaranteed to be non-negative. */ public int getRevision() { return revision; } public boolean isSnapshot() { return snapshot; } /** * The {@link #parse(String)} method can create an instance * of {@link Version} with the returned version value string. * * @return Retrieves a human-readable version representation. */ @Override public String toString() { return getMajor() + "." + getMinor() + "." + getRevision() + (isSnapshot() ? SNAPSHOT_MARKER : ""); } @Override public int hashCode() { return Objects.hash(getMajor(), getMinor(), getRevision(), isSnapshot()); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof Version version) { return getMajor() == version.getMajor() && getMinor() == version.getMinor() && getRevision() == version.getRevision() && isSnapshot() == version.isSnapshot(); } return false; } /** * Return a new {@link Version} initialized to the value * represented by the specified {@link String} * * @param version The string to be parsed * * @return The version represented by the string value * * @throws NumberFormatException Thrown if {@code version} does not adhere to a valid form. */ public static Version parse(String version) { int indexFirstDot = version.indexOf('.'); int indexSecondDot = version.indexOf('.', indexFirstDot + 1); if (indexFirstDot == -1 || indexSecondDot == -1) { throw new NumberFormatException("Invalid version format '" + version + "', expected two dots!"); } int indexFirstDash = version.indexOf('-'); int versionEnd; if (indexFirstDash == -1) { versionEnd = version.length(); } else { versionEnd = indexFirstDash; } boolean snapshot = version.endsWith(SNAPSHOT_MARKER); return new Version(Integer.parseInt(version.substring(0, indexFirstDot)), Integer.parseInt(version.substring(indexFirstDot + 1, indexSecondDot)), Integer.parseInt(version.substring(indexSecondDot + 1, versionEnd)), snapshot); } /** * @return Retrieves the current version of the OpenNLP Tools library. */ public static Version currentVersion() { Properties manifest = new Properties(); // Try to read the version from the version file if it is available, // otherwise set the version to the development version try (InputStream versionIn = Version.class.getResourceAsStream("opennlp.version")) { if (versionIn != null) { manifest.load(versionIn); } } catch (IOException e) { // ignore error } String versionString = manifest.getProperty("OpenNLP-Version", DEV_VERSION_STRING); if (versionString.equals("${project.version}")) versionString = DEV_VERSION_STRING; return Version.parse(versionString); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/XmlUtil.java0100644 0000000 0000000 00000004436 14523004075 031042 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; public class XmlUtil { /** * Create a new {@link DocumentBuilder} which processes XML securely. * * @return A valid {@link DocumentBuilder} instance. * * @throws IllegalStateException Thrown if errors occurred creating the builder. */ public static DocumentBuilder createDocumentBuilder() { try { DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); documentBuilderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); return documentBuilderFactory.newDocumentBuilder(); } catch (ParserConfigurationException e) { throw new IllegalStateException(e); } } /** * Create a new {@link SAXParser} which processes XML securely. * * @return A valid {@link SAXParser} instance. * * @throws IllegalStateException Thrown if errors occurred creating the parser. */ public static SAXParser createSaxParser() { SAXParserFactory spf = SAXParserFactory.newInstance(); try { spf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); return spf.newSAXParser(); } catch (ParserConfigurationException | SAXException e) { throw new IllegalStateException(e); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_eval_CrossVa0100644 0000000 0000000 00000000166 14523004075 032576 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/eval/CrossValidationPartitioner.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/eval/CrossValidationPartitio0100644 0000000 0000000 00000020522 14523004075 034265 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.eval; import java.io.IOException; import java.util.Collection; import java.util.NoSuchElementException; import opennlp.tools.util.CollectionObjectStream; import opennlp.tools.util.ObjectStream; /** * Provides access to training and test partitions for n-fold cross validation. *

* Cross validation is used to evaluate the performance of a classifier when only * training data is available. The training set is split into n parts * and the training / evaluation is performed {@code n} times on these parts. * The training partition always consists of {@code n - 1} parts and one part is used for testing. *

* To use the {@link CrossValidationPartitioner} a client iterates over the n * {@link TrainingSampleStream stream}. Each {@link TrainingSampleStream} represents * one partition and is used first for training and afterwards for testing. * The {@link TestSampleStream} can be obtained via the * {@link TrainingSampleStream#getTestSampleStream()} method. */ public class CrossValidationPartitioner { /** * The {@link TestSampleStream} iterates over all test elements. * * @param The generic type of samples. */ private static class TestSampleStream implements ObjectStream { private final ObjectStream sampleStream; private final int numberOfPartitions; private final int testIndex; private int index; private boolean isPoisoned; private TestSampleStream(ObjectStream sampleStream, int numberOfPartitions, int testIndex) { this.numberOfPartitions = numberOfPartitions; this.sampleStream = sampleStream; this.testIndex = testIndex; } @Override public E read() throws IOException { if (isPoisoned) { throw new IllegalStateException(); } // skip training samples while (index % numberOfPartitions != testIndex) { sampleStream.read(); index++; } index++; return sampleStream.read(); } /** * @throws UnsupportedOperationException Thrown to signal no implementation is available. */ @Override public void reset() { throw new UnsupportedOperationException(); } @Override public void close() throws IOException { sampleStream.close(); isPoisoned = true; } void poison() { isPoisoned = true; } } /** * The {@link TrainingSampleStream} which iterates over * all training elements. *

* Note: * After the {@link TestSampleStream} was obtained * the {@link TrainingSampleStream} must not be used * anymore, otherwise a {@link IllegalStateException} * is thrown. *

* The {@link ObjectStream streams} must not be used anymore after the * {@link CrossValidationPartitioner} was moved to one of next partitions. * If they are called anyway an {@link IllegalStateException} is thrown. * * @param The generic type of samples. */ public static class TrainingSampleStream implements ObjectStream { private final ObjectStream sampleStream; private final int numberOfPartitions; private final int testIndex; private int index; private boolean isPoisoned; private TestSampleStream testSampleStream; TrainingSampleStream(ObjectStream sampleStream, int numberOfPartitions, int testIndex) { this.numberOfPartitions = numberOfPartitions; this.sampleStream = sampleStream; this.testIndex = testIndex; } @Override public E read() throws IOException { if (testSampleStream != null || isPoisoned) { throw new IllegalStateException(); } // If the test element is reached skip over it to not include it in // the training data if (index % numberOfPartitions == testIndex) { sampleStream.read(); index++; } index++; return sampleStream.read(); } /** * Resets the training sample. Use this if you need to collect things before * training, for example, to collect induced abbreviations or create a POS * Dictionary. * * @throws IOException Thrown if IO errors occurred. * @throws IllegalStateException Thrown if a non-consistent state occurred. */ @Override public void reset() throws IOException { if (testSampleStream != null || isPoisoned) { throw new IllegalStateException(); } this.index = 0; this.sampleStream.reset(); } @Override public void close() throws IOException { sampleStream.close(); poison(); } void poison() { isPoisoned = true; if (testSampleStream != null) testSampleStream.poison(); } /** * Retrieves the {@link ObjectStream} over the test/evaluations * elements and poisons this {@link TrainingSampleStream}. * From now on calls to the hasNext and next methods are forbidden * and will raise an {@link IllegalArgumentException}. * * @return The test sample {@link ObjectStream stream}. */ public ObjectStream getTestSampleStream() throws IOException { if (isPoisoned) { throw new IllegalStateException(); } if (testSampleStream == null) { sampleStream.reset(); testSampleStream = new TestSampleStream<>(sampleStream, numberOfPartitions, testIndex); } return testSampleStream; } } /** * An {@link ObjectStream stream} over the whole set of data samples which * are used for the cross validation. */ private final ObjectStream sampleStream; /** * The number of parts the data is divided into. */ private final int numberOfPartitions; /** * The index of test part. */ private int testIndex; /** * The last handed out {@link TrainingSampleStream}. The reference * is needed to poison the instance to fail fast if it is used * despite the fact that it is forbidden!. */ private TrainingSampleStream lastTrainingSampleStream; /** * Initializes {@link CrossValidationPartitioner} instance. * * @param inElements The {@link ObjectStream} that provides the elements. * @param numberOfPartitions The number of partitions. Must be greater than {@code 0}. */ public CrossValidationPartitioner(ObjectStream inElements, int numberOfPartitions) { this.sampleStream = inElements; this.numberOfPartitions = numberOfPartitions; } /** * Initializes {@link CrossValidationPartitioner} instance. * * @param elements A {@link Collection} that provides the elements. * @param numberOfPartitions The number of partitions. Must be greater than {@code 0}. */ public CrossValidationPartitioner(Collection elements, int numberOfPartitions) { this(new CollectionObjectStream<>(elements), numberOfPartitions); } /** * Checks if there are more partitions available. */ public boolean hasNext() { return testIndex < numberOfPartitions; } /** * Retrieves the next training and test partitions. */ public TrainingSampleStream next() throws IOException { if (hasNext()) { if (lastTrainingSampleStream != null) lastTrainingSampleStream.poison(); sampleStream.reset(); TrainingSampleStream trainingSampleStream = new TrainingSampleStream<>(sampleStream, numberOfPartitions, testIndex); testIndex++; lastTrainingSampleStream = trainingSampleStream; return trainingSampleStream; } else { throw new NoSuchElementException(); } } @Override public String toString() { return "At partition" + (testIndex + 1) + " of " + numberOfPartitions; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/eval/EvaluationMonitor.java0100644 0000000 0000000 00000001731 14523004075 034045 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.eval; public interface EvaluationMonitor { void correctlyClassified(T reference, T prediction); void misclassified(T reference, T prediction); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/eval/Evaluator.java0100644 0000000 0000000 00000006576 14523004075 032344 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.eval; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import opennlp.tools.util.ObjectStream; /** * An abstract base class for evaluators. * Evaluation results are the arithmetic mean of the * scores calculated for each reference sample. */ public abstract class Evaluator { private final List> listeners; @SafeVarargs public Evaluator(EvaluationMonitor... aListeners) { if (aListeners != null) { List> listenersList = new ArrayList<>(aListeners.length); for (EvaluationMonitor evaluationMonitor : aListeners) { if (evaluationMonitor != null) { listenersList.add(evaluationMonitor); } } listeners = Collections.unmodifiableList(listenersList); } else { listeners = Collections.emptyList(); } } /** * Evaluates the given reference {@link T} sample object. *

* The implementation has to update the score after every invocation. * * @param reference A {@link T reference sample}. * * @return The predicted {@link T sample}. */ protected abstract T processSample(T reference); /** * Evaluates the given reference object. The default implementation calls * {@link Evaluator#processSample(Object)} * *

* note: this method will be changed to private in the future. * Implementations should override {@link Evaluator#processSample(Object)} instead. * If this method is overridden, the implementation has to update the score * after every invocation. *

* * @param sample A {@link T sample} to be evaluated. */ public void evaluateSample(T sample) { T predicted = processSample(sample); if (!listeners.isEmpty()) { if (sample.equals(predicted)) { for (EvaluationMonitor listener : listeners) { listener.correctlyClassified(sample, predicted); } } else { for (EvaluationMonitor listener : listeners) { listener.misclassified(sample, predicted); } } } } /** * Reads all {@link ObjectStream sample objects} * and evaluates each instance via the * {@link #evaluateSample(Object)} method. * * @param samples The {@link ObjectStream stream} of reference * which shall be evaluated. * * @throws IOException Thrown if IO errors occurred. */ public void evaluate(ObjectStream samples) throws IOException { T sample; while ((sample = samples.read()) != null) { evaluateSample(sample); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/eval/FMeasure.java0100644 0000000 0000000 00000013133 14523004075 032074 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.eval; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * The {@link FMeasure} is a utility class for {@link Evaluator evaluators} * which measures precision, recall and the resulting f-measure. *

* Evaluation results are the arithmetic mean of the precision * scores calculated for each reference sample and * the arithmetic mean of the recall scores calculated for * each reference sample. */ public final class FMeasure { /** * |selected| = true positives + false positives
* the count of selected (or retrieved) items. */ private long selected; /** * |target| = true positives + false negatives
* the count of target (or correct) items. */ private long target; /** * Holds the number of true positives found. */ private long truePositive; /** * @return Retrieves the arithmetic mean of the precision scores calculated * for each evaluated sample. */ public double getPrecisionScore() { return selected > 0 ? (double) truePositive / (double) selected : 0; } /** * @return Retrieves the arithmetic mean of the recall score calculated * for each evaluated sample. */ public double getRecallScore() { return target > 0 ? (double) truePositive / (double) target : 0; } /** * {@code f-measure = 2 * precision * recall / (precision + recall)}. * * @return Retrieves the f-measure or {@code -1} if precision + recall {@code <= 0} */ public double getFMeasure() { if (getPrecisionScore() + getRecallScore() > 0) { return 2 * (getPrecisionScore() * getRecallScore()) / (getPrecisionScore() + getRecallScore()); } else { // cannot divide by zero, return error code return -1; } } /** * Updates the score based on the number of true positives and * the number of predictions and references. * * @param references the provided references * @param predictions the predicted spans */ public void updateScores(final Object[] references, final Object[] predictions) { truePositive += countTruePositives(references, predictions); selected += predictions.length; target += references.length; } /** * Merge results into {@link FMeasure metric}. * * @param measure The {@link FMeasure} to merge. */ public void mergeInto(final FMeasure measure) { this.selected += measure.selected; this.target += measure.target; this.truePositive += measure.truePositive; } /** * @return A human-readable {@link String} representation. */ @Override public String toString() { return "Precision: " + getPrecisionScore() + "\n" + "Recall: " + getRecallScore() + "\n" + "F-Measure: " + getFMeasure(); } /** * This method counts the number of objects which are equal and occur in the * references and predictions arrays. * Matched items are removed from the prediction list. * * @param references * The gold standard. * @param predictions * The predictions. * @return The number of true positives. */ static int countTruePositives(final Object[] references, final Object[] predictions) { List predListSpans = new ArrayList<>(predictions.length); Collections.addAll(predListSpans, predictions); int truePositives = 0; Object matchedItem = null; for (Object referenceName : references) { for (Object predListSpan : predListSpans) { if (referenceName.equals(predListSpan)) { matchedItem = predListSpan; truePositives++; } } if (matchedItem != null) { predListSpans.remove(matchedItem); } } return truePositives; } /** * Calculates the precision score for the given reference and predicted spans. * * @param references * The gold standard spans. * @param predictions * The predicted spans. * @return The precision score or {@code NaN} if there are no predicted spans. */ public static double precision(final Object[] references, final Object[] predictions) { if (predictions.length > 0) { return countTruePositives(references, predictions) / (double) predictions.length; } else { return Double.NaN; } } /** * Calculates the recall score for the given reference and predicted spans. * * @param references * The gold standard spans * @param predictions * The predicted spans * * @return The recall score or {@code NaN} if there are no reference spans. */ public static double recall(final Object[] references, final Object[] predictions) { if (references.length > 0) { return countTruePositives(references, predictions) / (double) references.length; } else { return Double.NaN; } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/eval/Mean.java0100644 0000000 0000000 00000004157 14523004075 031253 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.eval; /** * Calculates the arithmetic mean of values * added with the {@link #add(double)} method. */ public class Mean { /** * The sum of all added values. */ private double sum; /** * The number of times a value was added. */ private long count; /** * Adds a value to the arithmetic mean. * * @param value the value which should be added * to the arithmetic mean. */ public void add(double value) { add(value, 1); } /** * Adds a value {@code count} times to the arithmetic mean. * * @param value the value which should be added * to the arithmetic mean. * * @param count number of times the value should be added to * arithmetic mean. */ public void add(double value, long count) { sum += value * count; this.count += count; } /** * @return Retrieves the mean of all values added with {@link #add(double)} * or {@code 0} if there are zero add values. */ public double mean() { return count > 0 ? sum / count : 0; } /** * @return Retrieves the number of times a value was added to the mean. */ public long count() { return count; } /** * @return A human-readable {@link String} representation. */ @Override public String toString() { return Double.toString(mean()); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/ext/ExtensionLoader.java0100644 0000000 0000000 00000007265 14523004075 033352 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.ext; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import opennlp.tools.commons.Internal; /** * The {@link ExtensionLoader} is responsible to load extensions to the OpenNLP library. *

* Note: * Do not use this class, internal use only! */ @Internal public class ExtensionLoader { private ExtensionLoader() { } // Pass in the type (interface) of the class to load /** * Instantiates a user provided extension to OpenNLP. *

* The extension is loaded from the class path. *

* Initially, the load is conducted using the public no-arg constructor. * If no such constructor is not found, it is checked if the class follows the * {@code Singleton} pattern: a static field named {@code INSTANCE} that * returns an object of the type {@link T}. * * @param clazz A reference to {@link Class}. * @param extensionClassName The (fully-qualified) name of the class * by which the extension shall be loaded. * * @return the instance of the extension class * * @throws ExtensionNotLoadedException Thrown if the load operation failed. */ @SuppressWarnings("unchecked") public static T instantiateExtension(Class clazz, String extensionClassName) { // First try to load extension and instantiate extension from class path try { Class extClazz = Class.forName(extensionClassName); if (clazz.isAssignableFrom(extClazz)) { try { return (T) extClazz.getDeclaredConstructor().newInstance(); } catch (InstantiationException | NoSuchMethodException e) { throw new ExtensionNotLoadedException(e); } catch (IllegalAccessException e) { // constructor is private. Try to load using INSTANCE Field instanceField; try { instanceField = extClazz.getDeclaredField("INSTANCE"); } catch (NoSuchFieldException | SecurityException e1) { throw new ExtensionNotLoadedException(e1); } if (instanceField != null) { try { return (T) instanceField.get(null); } catch (IllegalArgumentException | IllegalAccessException e1) { throw new ExtensionNotLoadedException(e1); } } throw new ExtensionNotLoadedException(e); } catch (InvocationTargetException e) { throw new RuntimeException(e); } } else { throw new ExtensionNotLoadedException("Extension class '" + extClazz.getName() + "' needs to have type: " + clazz.getName()); } } catch (ClassNotFoundException e) { // Class is not on classpath } throw new ExtensionNotLoadedException("Unable to find implementation for " + clazz.getName() + ", the class or service " + extensionClassName + " could not be located!"); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_ext_Extensio0100644 0000000 0000000 00000000166 14523004075 032665 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/ext/ExtensionNotLoadedException.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/ext/ExtensionNotLoadedExcept0100644 0000000 0000000 00000002212 14523004075 034231 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.ext; /** * Exception indicates that an OpenNLP extension could not be loaded. */ @SuppressWarnings("serial") public class ExtensionNotLoadedException extends RuntimeException { public ExtensionNotLoadedException(String message) { super(message); } public ExtensionNotLoadedException(Throwable t) { super(t); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_ext_Extensio0100644 0000000 0000000 00000000157 14523004075 032665 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/ext/ExtensionServiceKeys.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/ext/ExtensionServiceKeys.jav0100644 0000000 0000000 00000002025 14523004075 034224 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.ext; public final class ExtensionServiceKeys { /** * Property key for the unique {@code id} which identifies an * OpenNLP extension service. */ public static final String ID = "OPENLP_EXTENSION_ID"; } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/ext/package-info.java0100644 0000000 0000000 00000001570 14523004075 032564 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * Package containing extension loading code. */ package opennlp.tools.util.ext; ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_A0100644 0000000 0000000 00000000172 14523004075 032571 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/AdaptiveFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/AdaptiveFeatureGe0100644 0000000 0000000 00000004737 14523004075 034202 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; /** * An interface for generating features for name entity identification and for * updating document level contexts. *

* * Note:
* Feature generation is not thread safe and a instance of a feature generator * must only be called from one thread. The resources used by a feature * generator are typically shared between many instances of features generators * which are called from many threads and have to be thread safe. */ public interface AdaptiveFeatureGenerator { /** * Adds the appropriate features for the token at the specified {@code index} with the * specified array of {@code previousOutcomes} to the specified list of features. * * @param features The list of features to be added to. * @param tokens The tokens of the sentence or other text unit being processed. * @param index The index of the token which is currently being processed. * @param previousOutcomes The outcomes for the tokens prior to the specified index. */ void createFeatures(List features, String[] tokens, int index, String[] previousOutcomes); /** * Informs a feature generator that the specified tokens have been classified with the * corresponding set of specified {@code outcomes}. * * @param tokens The tokens of the sentence or other text unit which has been processed. * @param outcomes The outcomes associated with the specified tokens. */ default void updateAdaptiveData(String[] tokens, String[] outcomes) {} /** * Informs a feature generator that the context of the adaptive data (typically a document) * is no longer valid. */ default void clearAdaptiveData() {} } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_A0100644 0000000 0000000 00000000203 14523004075 032564 xustar000000000 0000000 131 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/AdditionalContextFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/AdditionalContext0100644 0000000 0000000 00000002767 14523004075 034273 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; /** * The {@link AdditionalContextFeatureGenerator} generates the context from the passed * in additional context. */ public class AdditionalContextFeatureGenerator implements AdaptiveFeatureGenerator { private String[][] additionalContext; @Override public void createFeatures(List features, String[] tokens, int index, String[] preds) { if (additionalContext != null && additionalContext.length != 0) { String[] context = additionalContext[index]; for (String s : context) { features.add("ne=" + s); } } } public void setCurrentContext(String[][] context) { additionalContext = context; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_A0100644 0000000 0000000 00000000174 14523004075 032573 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/AggregatedFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/AggregatedFeature0100644 0000000 0000000 00000006402 14523004075 034212 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Objects; /** * The {@link AggregatedFeatureGenerator} aggregates a set of * {@link AdaptiveFeatureGenerator}s and calls them to generate the features. */ public class AggregatedFeatureGenerator implements AdaptiveFeatureGenerator { private Collection generators; /** * Initializes the current instance. * * @param generators array of generators, null values are not permitted */ public AggregatedFeatureGenerator(AdaptiveFeatureGenerator... generators) { for (AdaptiveFeatureGenerator generator : generators) { Objects.requireNonNull(generator, "null values in generators are not permitted"); } this.generators = new ArrayList<>(generators.length); Collections.addAll(this.generators, generators); this.generators = Collections.unmodifiableCollection(this.generators); } public AggregatedFeatureGenerator(Collection generators) { this(generators.toArray(new AdaptiveFeatureGenerator[0])); } /** * Calls the {@link AdaptiveFeatureGenerator#clearAdaptiveData()} method * on all aggregated {@link AdaptiveFeatureGenerator}s. */ @Override public void clearAdaptiveData() { for (AdaptiveFeatureGenerator generator : generators) { generator.clearAdaptiveData(); } } /** * Calls the {@link AdaptiveFeatureGenerator#createFeatures(List, String[], int, String[])} * method on all aggregated {@link AdaptiveFeatureGenerator}s. */ @Override public void createFeatures(List features, String[] tokens, int index, String[] previousOutcomes) { for (AdaptiveFeatureGenerator generator : generators) { generator.createFeatures(features, tokens, index, previousOutcomes); } } /** * Calls the {@link AdaptiveFeatureGenerator#updateAdaptiveData(String[], String[])} * method on all aggregated {@link AdaptiveFeatureGenerator}s. */ public void updateAdaptiveData(String[] tokens, String[] outcomes) { for (AdaptiveFeatureGenerator generator : generators) { generator.updateAdaptiveData(tokens, outcomes); } } /** * Retrieves a {@link Collections} of all aggregated * {@link AdaptiveFeatureGenerator}s. * * @return all aggregated generators */ public Collection getGenerators() { return generators; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_A0100644 0000000 0000000 00000000203 14523004075 032564 xustar000000000 0000000 131 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/AggregatedFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/AggregatedFeature0100644 0000000 0000000 00000003215 14523004075 034211 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; import java.util.Map; import opennlp.tools.util.InvalidFormatException; /** * @see AggregatedFeatureGenerator */ public class AggregatedFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public AggregatedFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { List aggregatedGenerators = new ArrayList<>(); for (Map.Entry arg : args.entrySet()) { if (arg.getKey().startsWith("generator#")) { aggregatedGenerators.add((AdaptiveFeatureGenerator) arg.getValue()); } } return new AggregatedFeatureGenerator(aggregatedGenerators.toArray( new AdaptiveFeatureGenerator[0])); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_B0100644 0000000 0000000 00000000174 14523004075 032574 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BigramNameFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BigramNameFeature0100644 0000000 0000000 00000003153 14523004075 034162 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; public class BigramNameFeatureGenerator implements AdaptiveFeatureGenerator { @Override public void createFeatures(List features, String[] tokens, int index, String[] previousOutcomes) { String wc = FeatureGeneratorUtil.tokenFeature(tokens[index]); //bi-gram features if (index > 0) { features.add("pw,w=" + tokens[index - 1] + "," + tokens[index]); String pwc = FeatureGeneratorUtil.tokenFeature(tokens[index - 1]); features.add("pwc,wc=" + pwc + "," + wc); } if (index + 1 < tokens.length) { features.add("w,nw=" + tokens[index] + "," + tokens[index + 1]); String nwc = FeatureGeneratorUtil.tokenFeature(tokens[index + 1]); features.add("wc,nc=" + wc + "," + nwc); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_B0100644 0000000 0000000 00000000203 14523004075 032565 xustar000000000 0000000 131 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BigramNameFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BigramNameFeature0100644 0000000 0000000 00000002272 14523004075 034163 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import opennlp.tools.util.InvalidFormatException; public class BigramNameFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public BigramNameFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { return new BigramNameFeatureGenerator(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_B0100644 0000000 0000000 00000000175 14523004075 032575 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownBigramFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownBigramFeatur0100644 0000000 0000000 00000004306 14523004075 034225 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; /** * Generates Brown cluster features for token bigrams. */ public class BrownBigramFeatureGenerator implements AdaptiveFeatureGenerator { private final BrownCluster brownCluster; /** * Creates a new Brown Cluster bigram feature generator. * @param brownCluster A {@link BrownCluster}. */ public BrownBigramFeatureGenerator(BrownCluster brownCluster) { this.brownCluster = brownCluster; } @Override public void createFeatures(List features, String[] tokens, int index, String[] previousOutcomes) { List wordClasses = BrownTokenClasses.getWordClasses(tokens[index], brownCluster); if (index > 0) { List prevWordClasses = BrownTokenClasses.getWordClasses(tokens[index - 1], brownCluster); for (int i = 0; i < wordClasses.size() && i < prevWordClasses.size(); i++) { features.add("p" + "browncluster" + "," + "browncluster" + "=" + prevWordClasses.get(i) + "," + wordClasses.get(i)); } } if (index + 1 < tokens.length) { List nextWordClasses = BrownTokenClasses.getWordClasses(tokens[index + 1], brownCluster); for (int i = 0; i < wordClasses.size() && i < nextWordClasses.size(); i++) { features.add("browncluster" + "," + "n" + "browncluster" + "=" + wordClasses.get(i) + "," + nextWordClasses.get(i)); } } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_B0100644 0000000 0000000 00000000156 14523004075 032574 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownCluster.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownCluster.java0100644 0000000 0000000 00000007604 14523004075 034222 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; import java.util.regex.Pattern; import opennlp.tools.util.model.ArtifactSerializer; import opennlp.tools.util.model.SerializableArtifact; /** * * Class to load a Brown cluster document: word\tword_class\tprob *

* Originally available at: * http://metaoptimize.com/projects/wordreprs/. * Further details can be found in the * related research paper. *

* The file containing the clustering lexicon has to be passed as the * value of the dict attribute of each {@link BrownCluster} feature generator. */ public class BrownCluster implements SerializableArtifact { private static final Pattern tabPattern = Pattern.compile("\t"); public static class BrownClusterSerializer implements ArtifactSerializer { @Override public BrownCluster create(InputStream in) throws IOException { return new BrownCluster(in); } @Override public void serialize(BrownCluster artifact, OutputStream out) throws IOException { artifact.serialize(out); } } private final Map tokenToClusterMap = new HashMap<>(); /** * Generates the token to cluster map from Brown cluster an {@link InputStream}. *

* Note: * we only add those tokens with frequency bigger than {@code 5}. * * @param in A valid, open {@link InputStream} to read from. * @throws IOException the io exception */ public BrownCluster(InputStream in) throws IOException { BufferedReader breader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8)); String line; while ((line = breader.readLine()) != null) { String[] lineArray = tabPattern.split(line); if (lineArray.length == 3) { int freq = Integer.parseInt(lineArray[2]); if (freq > 5 ) { tokenToClusterMap.put(lineArray[1], lineArray[0]); } } else if (lineArray.length == 2) { tokenToClusterMap.put(lineArray[0], lineArray[1]); } } } /** * Check if a token is in the Brown:paths, token map. * * @param string the token to look-up * @return the brown class if such token is in the brown cluster map */ public String lookupToken(String string) { return tokenToClusterMap.get(string); } public void serialize(OutputStream out) throws IOException { Writer writer = new BufferedWriter(new OutputStreamWriter(out)); for (Map.Entry entry : tokenToClusterMap.entrySet()) { writer.write(entry.getKey() + "\t" + entry.getValue() + "\n"); } writer.flush(); } @Override public Class getArtifactSerializerClass() { return BrownClusterSerializer.class; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_B0100644 0000000 0000000 00000000213 14523004075 032566 xustar000000000 0000000 139 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownClusterBigramFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownClusterBigra0100644 0000000 0000000 00000004062 14523004075 034242 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.HashMap; import java.util.Map; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.model.ArtifactSerializer; /** * Generates Brown clustering features for token bigrams. */ public class BrownClusterBigramFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public BrownClusterBigramFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { // if resourceManager is null, we don't instantiate if (resourceManager == null) { return null; } String dictResourceKey = getStr("dict"); Object dictResource = resourceManager.getResource(dictResourceKey); if (!(dictResource instanceof BrownCluster)) { throw new InvalidFormatException("Not a BrownLexicon resource for key: " + dictResourceKey); } return new BrownBigramFeatureGenerator((BrownCluster) dictResource); } @Override public Map> getArtifactSerializerMapping() throws InvalidFormatException { Map> mapping = new HashMap<>(); mapping.put(getStr("dict"), new BrownCluster.BrownClusterSerializer()); return mapping; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_B0100644 0000000 0000000 00000000217 14523004075 032572 xustar000000000 0000000 143 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownClusterTokenClassFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownClusterToken0100644 0000000 0000000 00000004076 14523004075 034303 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.HashMap; import java.util.Map; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.model.ArtifactSerializer; /** * Generates Brown clustering features for token classes. */ public class BrownClusterTokenClassFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public BrownClusterTokenClassFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { // if resourceManager is null, we don't instantiate if (resourceManager == null) { return null; } String dictResourceKey = getStr("dict"); Object dictResource = resourceManager.getResource(dictResourceKey); if (!(dictResource instanceof BrownCluster)) { throw new InvalidFormatException("Not a BrownLexicon resource for key: " + dictResourceKey); } return new BrownTokenClassFeatureGenerator((BrownCluster) dictResource); } @Override public Map> getArtifactSerializerMapping() throws InvalidFormatException { Map> mapping = new HashMap<>(); mapping.put(getStr("dict"), new BrownCluster.BrownClusterSerializer()); return mapping; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_B0100644 0000000 0000000 00000000212 14523004075 032565 xustar000000000 0000000 138 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownClusterTokenFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownClusterToken0100644 0000000 0000000 00000004057 14523004075 034302 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.HashMap; import java.util.Map; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.model.ArtifactSerializer; /** * Generates Brown clustering features for current token. */ public class BrownClusterTokenFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public BrownClusterTokenFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { // if resourceManager is null, we don't instantiate if (resourceManager == null) { return null; } String dictResourceKey = getStr("dict"); Object dictResource = resourceManager.getResource(dictResourceKey); if (!(dictResource instanceof BrownCluster)) { throw new InvalidFormatException("Not a BrownLexicon resource for key: " + dictResourceKey); } return new BrownTokenFeatureGenerator((BrownCluster) dictResource); } @Override public Map> getArtifactSerializerMapping() throws InvalidFormatException { Map> mapping = new HashMap<>(); mapping.put(getStr("dict"), new BrownCluster.BrownClusterSerializer()); return mapping; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_B0100644 0000000 0000000 00000000201 14523004075 032563 xustar000000000 0000000 129 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownTokenClassFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownTokenClassFe0100644 0000000 0000000 00000003111 14523004075 034167 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; /** * Generates {@link BrownCluster} features for current token and token class. */ public class BrownTokenClassFeatureGenerator implements AdaptiveFeatureGenerator { private final BrownCluster brownLexicon; public BrownTokenClassFeatureGenerator(BrownCluster dict) { this.brownLexicon = dict; } @Override public void createFeatures(List features, String[] tokens, int index, String[] previousOutcomes) { String wordShape = FeatureGeneratorUtil.tokenFeature(tokens[index]); List wordClasses = BrownTokenClasses.getWordClasses(tokens[index], brownLexicon); for (String wordClass : wordClasses) { features.add("c," + "browncluster" + "=" + wordShape + "," + wordClass); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_B0100644 0000000 0000000 00000000163 14523004075 032572 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownTokenClasses.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownTokenClasses0100644 0000000 0000000 00000004071 14523004075 034252 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; /** * Obtain the paths listed in the pathLengths array from the Brown class. * This class is not to be instantiated. * */ public class BrownTokenClasses { public static final int[] pathLengths = { 4, 6, 10, 20 }; /** * It provides a list containing the pathLengths for a token if found * in the Map:token,BrownClass. * * @param token the token to be looked up in the brown clustering map * @param brownLexicon the Brown clustering map * @return the list of the paths for a token */ public static List getWordClasses(String token, BrownCluster brownLexicon) { if (brownLexicon.lookupToken(token) == null) { return new ArrayList<>(0); } else { String brownClass = brownLexicon.lookupToken(token); List pathLengthsList = new ArrayList<>(); pathLengthsList.add(brownClass.substring(0, StrictMath.min(brownClass.length(), pathLengths[0]))); for (int i = 1; i < pathLengths.length; i++) { if (pathLengths[i - 1] < brownClass.length()) { pathLengthsList.add(brownClass.substring(0, StrictMath.min(brownClass.length(), pathLengths[i]))); } } return pathLengthsList; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_B0100644 0000000 0000000 00000000174 14523004075 032574 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownTokenFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/BrownTokenFeature0100644 0000000 0000000 00000002714 14523004075 034252 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; /** * Generates {@link BrownCluster} features for current token. */ public class BrownTokenFeatureGenerator implements AdaptiveFeatureGenerator { private final BrownCluster brownLexicon; public BrownTokenFeatureGenerator(BrownCluster dict) { this.brownLexicon = dict; } @Override public void createFeatures(List features, String[] tokens, int index, String[] previousOutcomes) { List wordClasses = BrownTokenClasses.getWordClasses(tokens[index], brownLexicon); for (String wordClass : wordClasses) { features.add("browncluster" + "=" + wordClass); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_C0100644 0000000 0000000 00000000170 14523004075 032571 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CachedFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CachedFeatureGene0100644 0000000 0000000 00000006236 14523004075 034133 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; import opennlp.tools.util.Cache; /** * Caches features of the aggregated {@link AdaptiveFeatureGenerator generators}. */ public class CachedFeatureGenerator implements AdaptiveFeatureGenerator { private final AdaptiveFeatureGenerator generator; private String[] prevTokens; private final Cache> contextsCache; private long numberOfCacheHits; private long numberOfCacheMisses; @Deprecated public CachedFeatureGenerator(AdaptiveFeatureGenerator... generators) { this.generator = new AggregatedFeatureGenerator(generators); contextsCache = new Cache<>(100); } public CachedFeatureGenerator(AdaptiveFeatureGenerator generator) { this.generator = generator; contextsCache = new Cache<>(100); } @Override public void createFeatures(List features, String[] tokens, int index, String[] previousOutcomes) { List cacheFeatures; if (tokens == prevTokens) { cacheFeatures = contextsCache.get(index); if (cacheFeatures != null) { numberOfCacheHits++; features.addAll(cacheFeatures); return; } } else { contextsCache.clear(); prevTokens = tokens; } cacheFeatures = new ArrayList<>(); numberOfCacheMisses++; generator.createFeatures(cacheFeatures, tokens, index, previousOutcomes); contextsCache.put(index, cacheFeatures); features.addAll(cacheFeatures); } @Override public void updateAdaptiveData(String[] tokens, String[] outcomes) { generator.updateAdaptiveData(tokens, outcomes); } @Override public void clearAdaptiveData() { generator.clearAdaptiveData(); } /** * @return Retrieves the number of times a cache hit occurred. */ public long getNumberOfCacheHits() { return numberOfCacheHits; } /** * @return Retrieves the number of times a cache miss occurred. */ public long getNumberOfCacheMisses() { return numberOfCacheMisses; } @Override public String toString() { return super.toString() + ": hits=" + numberOfCacheHits + " misses=" + numberOfCacheMisses + " hit%" + (numberOfCacheHits > 0 ? (double) numberOfCacheHits / (numberOfCacheMisses + numberOfCacheHits) : 0); } public AdaptiveFeatureGenerator getCachedFeatureGenerator() { return generator; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_C0100644 0000000 0000000 00000000177 14523004075 032600 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CachedFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CachedFeatureGene0100644 0000000 0000000 00000002667 14523004075 034137 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import opennlp.tools.util.InvalidFormatException; /** * @see CachedFeatureGenerator */ public class CachedFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public CachedFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { AdaptiveFeatureGenerator generator = (AdaptiveFeatureGenerator) args.get("generator#0"); if (generator == null) { throw new InvalidFormatException("Could not find containing generator element!"); } return new CachedFeatureGenerator(generator); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_C0100644 0000000 0000000 00000000200 14523004075 032563 xustar000000000 0000000 128 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CharacterNgramFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CharacterNgramFea0100644 0000000 0000000 00000004167 14523004075 034147 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; import opennlp.tools.ngram.NGramModel; import opennlp.tools.util.StringList; import opennlp.tools.util.StringUtil; /** * The {@link CharacterNgramFeatureGenerator} uses character ngrams to * generate features about each token. */ public class CharacterNgramFeatureGenerator implements AdaptiveFeatureGenerator { private final int minLength; private final int maxLength; /** * Initializes a {@link CharacterNgramFeatureGenerator}. * * @param minLength The minimum length to use. Must not be negative. * @param maxLength The maximum length to use. Must not be negative. */ public CharacterNgramFeatureGenerator(int minLength, int maxLength) { this.minLength = minLength; this.maxLength = maxLength; } /** * Initializes a {@link CharacterNgramFeatureGenerator} with * min 2 length and max 5 length of ngrams. */ public CharacterNgramFeatureGenerator() { this(2, 5); } @Override public void createFeatures(List features, String[] tokens, int index, String[] preds) { NGramModel model = new NGramModel(); model.add(tokens[index], minLength, maxLength); for (StringList tokenList : model) { if (tokenList.size() > 0) { features.add("ng=" + StringUtil.toLowerCase(tokenList.getToken(0))); } } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_C0100644 0000000 0000000 00000000207 14523004075 032572 xustar000000000 0000000 135 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CharacterNgramFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/CharacterNgramFea0100644 0000000 0000000 00000002421 14523004075 034136 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import opennlp.tools.util.InvalidFormatException; /** * @see CharacterNgramFeatureGenerator */ public class CharacterNgramFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public CharacterNgramFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { return new CharacterNgramFeatureGenerator(getInt("min"), getInt("max")); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_D0100644 0000000 0000000 00000000203 14523004075 032567 xustar000000000 0000000 131 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DefinitionFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DefinitionFeature0100644 0000000 0000000 00000002452 14523004075 034251 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import opennlp.tools.util.InvalidFormatException; /** * @see DefinitionFeatureGeneratorFactory */ public class DefinitionFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { private static final String ELEMENT_NAME = "definition"; public DefinitionFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { return new OutcomePriorFeatureGenerator(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_D0100644 0000000 0000000 00000000174 14523004075 032576 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DictionaryFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DictionaryFeature0100644 0000000 0000000 00000003573 14523004075 034273 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.namefind.DictionaryNameFinder; /** * The {@link DictionaryFeatureGenerator} uses the {@link DictionaryNameFinder} * to generated features for detected names based on the {@link InSpanGenerator}. * * @see Dictionary * @see DictionaryNameFinder * @see InSpanGenerator */ public class DictionaryFeatureGenerator implements AdaptiveFeatureGenerator { private InSpanGenerator isg; public DictionaryFeatureGenerator(Dictionary dict) { this("",dict); } public DictionaryFeatureGenerator(String prefix, Dictionary dict) { setDictionary(prefix,dict); } public void setDictionary(Dictionary dict) { setDictionary("",dict); } public void setDictionary(String name, Dictionary dict) { isg = new InSpanGenerator(name, new DictionaryNameFinder(dict)); } @Override public void createFeatures(List features, String[] tokens, int index, String[] previousOutcomes) { isg.createFeatures(features, tokens, index, previousOutcomes); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_D0100644 0000000 0000000 00000000203 14523004075 032567 xustar000000000 0000000 131 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DictionaryFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DictionaryFeature0100644 0000000 0000000 00000004146 14523004075 034270 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.HashMap; import java.util.Map; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.model.ArtifactSerializer; import opennlp.tools.util.model.DictionarySerializer; /** * @see DictionaryFeatureGenerator */ public class DictionaryFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public DictionaryFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { // if resourceManager is null, we don't instantiate if (resourceManager == null) { return null; } String dictResourceKey = getStr("dict"); Object dictResource = resourceManager.getResource(dictResourceKey); if (!(dictResource instanceof Dictionary)) { throw new InvalidFormatException("No dictionary resource for key: " + dictResourceKey); } return new DictionaryFeatureGenerator(getStr("prefix"), (Dictionary) dictResource); } @Override public Map> getArtifactSerializerMapping() throws InvalidFormatException { Map> mapping = new HashMap<>(); mapping.put(getStr("dict"), new DictionarySerializer()); return mapping; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_D0100644 0000000 0000000 00000000177 14523004075 032601 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DocumentBeginFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DocumentBeginFeat0100644 0000000 0000000 00000002510 14523004075 034163 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; public class DocumentBeginFeatureGenerator implements AdaptiveFeatureGenerator { private String[] firstSentence; @Override public void createFeatures(List features, String[] tokens, int index, String[] previousOutcomes) { if (firstSentence == null) { firstSentence = tokens; } if (firstSentence == tokens && index == 0) { features.add("D=begin"); } } @Override public void clearAdaptiveData() { firstSentence = null; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_D0100644 0000000 0000000 00000000206 14523004075 032572 xustar000000000 0000000 134 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DocumentBeginFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/DocumentBeginFeat0100644 0000000 0000000 00000002303 14523004075 034163 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import opennlp.tools.util.InvalidFormatException; public class DocumentBeginFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public DocumentBeginFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { return new DocumentBeginFeatureGenerator(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_F0100644 0000000 0000000 00000000202 14523004075 032570 xustar000000000 0000000 130 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/FeatureGeneratorResourceProvider.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/FeatureGeneratorR0100644 0000000 0000000 00000002627 14523004075 034235 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; /** * The {@link FeatureGeneratorResourceProvider} provides access to the resources * available in the model. Inside the model resources are identified by a name. *

* Note:
* This class is not be intended to be implemented by users.
* All implementing classes must be thread safe. */ public interface FeatureGeneratorResourceProvider { /** * @param resourceIdentifier The identifier which names the resource. * * @return Retrieves the resource object for the given {@code resourceIdentifier}. */ Object getResource(String resourceIdentifier); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_F0100644 0000000 0000000 00000000166 14523004075 032601 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/FeatureGeneratorUtil.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/FeatureGeneratorU0100644 0000000 0000000 00000006264 14523004075 034241 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.regex.Pattern; /** * This class provide common utilities for feature generation. */ public class FeatureGeneratorUtil { private static final String TOKEN_CLASS_PREFIX = "wc"; private static final String TOKEN_AND_CLASS_PREFIX = "w&c"; private static final Pattern capPeriod = Pattern.compile("^[A-Z]\\.$"); /** * Generates a class name for the specified token. * The classes are as follows where the first matching class is used: *

    *
  • jah - Japanese Hiragana
  • *
  • jak - Japanese Katakana
  • *
  • lc - lowercase alphabetic
  • *
  • 2d - two digits
  • *
  • 4d - four digits
  • *
  • an - alpha-numeric
  • *
  • dd - digits and dashes
  • *
  • ds - digits and slashes
  • *
  • dc - digits and commas
  • *
  • dp - digits and periods
  • *
  • num - digits
  • *
  • sc - single capital letter
  • *
  • ac - all capital letters
  • *
  • ic - initial capital letter
  • *
  • other - other
  • *
* @param token A token or word. * @return The class name that the specified token belongs in. */ public static String tokenFeature(String token) { StringPattern pattern = StringPattern.recognize(token); String feat; if (pattern.isAllHiragana()) { feat = "jah"; } else if (pattern.isAllKatakana()) { feat = "jak"; } else if (pattern.isAllLowerCaseLetter()) { feat = "lc"; } else if (pattern.digits() == 2) { feat = "2d"; } else if (pattern.digits() == 4) { feat = "4d"; } else if (pattern.containsDigit()) { if (pattern.containsLetters()) { feat = "an"; } else if (pattern.containsHyphen()) { feat = "dd"; } else if (pattern.containsSlash()) { feat = "ds"; } else if (pattern.containsComma()) { feat = "dc"; } else if (pattern.containsPeriod()) { feat = "dp"; } else { feat = "num"; } } else if (pattern.isAllCapitalLetter()) { if (token.length() == 1) { feat = "sc"; } else { feat = "ac"; } } else if (capPeriod.matcher(token).find()) { feat = "cp"; } else if (pattern.isInitialCapitalLetter()) { feat = "ic"; } else { feat = "other"; } return (feat); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_G0100644 0000000 0000000 00000000162 14523004075 032576 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/GeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/GeneratorFactory.0100644 0000000 0000000 00000051273 14523004075 034206 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.xml.parsers.DocumentBuilder; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Text; import org.xml.sax.SAXException; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.XmlUtil; import opennlp.tools.util.model.ArtifactSerializer; /** * Creates a set of feature generators based on a provided XML descriptor. *

* Example of an XML descriptor: *

* <featureGenerators name="namefind"> * <generator class="opennlp.tools.util.featuregen.CachedFeatureGeneratorFactory"> * <generator class="opennlp.tools.util.featuregen.WindowFeatureGeneratorFactory"> * <int name="prevLength">2</int> * <int name="nextLength">2</int> * <generator class="opennlp.tools.util.featuregen.TokenClassFeatureGeneratorFactory"/> * </generator> * <generator class="opennlp.tools.util.featuregen.WindowFeatureGeneratorFactory"> * <int name="prevLength">2</int> * <int name="nextLength">2</int> * <generator class="opennlp.tools.util.featuregen.TokenFeatureGeneratorFactory"/> * </generator> * <generator class="opennlp.tools.util.featuregen.DefinitionFeatureGeneratorFactory"/> * <generator class="opennlp.tools.util.featuregen.PreviousMapFeatureGeneratorFactory"/> * <generator class="opennlp.tools.util.featuregen.BigramNameFeatureGeneratorFactory"/> * <generator class="opennlp.tools.util.featuregen.SentenceFeatureGeneratorFactory"> * <bool name="begin">true</bool> * <bool name="end">false</bool> * </generator> * </generator> * </featureGenerators> *

* Each XML element is mapped to a {@link GeneratorFactory.AbstractXmlFeatureGeneratorFactory} which * is responsible to process the element and create the specified * {@link AdaptiveFeatureGenerator}. Elements can contain other * elements in this case it is the responsibility of the mapped factory to process * the child elements correctly. *

* In the example above the generators element is mapped to the * {@link AggregatedFeatureGeneratorFactory} which then * creates all the aggregated {@link AdaptiveFeatureGenerator}s to * accomplish this it evaluates the mapping with the same mechanism * and gives the child element to the corresponding factories. All * created generators are added to a new instance of the * {@link AggregatedFeatureGenerator} which is then returned. */ public class GeneratorFactory { /** * Creates an {@link AdaptiveFeatureGenerator} from an provided XML descriptor. *

* Usually this XML descriptor contains a set of nested feature generators * which are then used to generate the features by one of the opennlp * components. * * @param xmlDescriptorIn the {@link InputStream} from which the descriptor * is read, the stream remains open and must be closed by the caller. * @param resourceManager the resource manager which is used to resolve resources * referenced by a key in the descriptor * @return created feature generators * @throws IOException if an error occurs during reading from the descriptor * {@link InputStream} */ public static AdaptiveFeatureGenerator create(InputStream xmlDescriptorIn, FeatureGeneratorResourceProvider resourceManager) throws IOException { final org.w3c.dom.Document xmlDescriptorDOM = createDOM(xmlDescriptorIn); final Element generatorElement = xmlDescriptorDOM.getDocumentElement(); return createGenerator(generatorElement, resourceManager); } /** * Creates an {@link AdaptiveFeatureGenerator} for the provided element. * To accomplish this it looks up the corresponding factory by the * element tag name. The factory is then responsible for the creation * of the generator from the element. * * @param generatorElement must not be {@code null} * @param resourceManager may be {@code null} * @return an {@link AdaptiveFeatureGenerator} * @throws IllegalArgumentException if the given {@link Element generatorElement} is {@code null}. * @throws IllegalStateException if the given {@link Element generatorElement} has * no {@code class} attribute. */ private static AdaptiveFeatureGenerator buildGenerator(Element generatorElement, FeatureGeneratorResourceProvider resourceManager) throws InvalidFormatException { if (generatorElement == null) { throw new IllegalArgumentException("generatorElement must not be NULL"); } final String className = generatorElement.getAttribute("class"); if (className.isBlank()) { throw new InvalidFormatException("generator must have class attribute"); } else { try { final Class factoryClass = Class.forName(className); try { final Constructor constructor = factoryClass.getConstructor(); final AbstractXmlFeatureGeneratorFactory factory = (AbstractXmlFeatureGeneratorFactory) constructor.newInstance(); factory.init(generatorElement, resourceManager); return factory.create(); } catch (NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException e) { throw new RuntimeException(e); } } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } } /** * Creates an {@link AdaptiveFeatureGenerator} for the provided element. * To accomplish this it looks up the corresponding factory by the * element tag name. The factory is then responsible for the creation * of the generator from the element. * * @param generatorElement must not be {@code null} * @param resourceManager may be {@code null} * @return an {@link AdaptiveFeatureGenerator} * @throws IllegalArgumentException if the given {@link Element generatorElement} is {@code null} */ private static AdaptiveFeatureGenerator createGenerator(Element generatorElement, FeatureGeneratorResourceProvider resourceManager) throws InvalidFormatException { if (generatorElement == null) { throw new IllegalArgumentException("generatorElement must not be NULL"); } final String elementName = generatorElement.getTagName(); // check it is new format? if ("featureGenerators".equals(elementName)) { final List generators = new ArrayList<>(); final NodeList childNodes = generatorElement.getChildNodes(); for (int i = 0; i < childNodes.getLength(); i++) { final Node childNode = childNodes.item(i); if (childNode instanceof Element elem) { final String type = elem.getTagName(); if ("generator".equals(type)) { generators.add(buildGenerator(elem, resourceManager)); } else { throw new InvalidFormatException("Unexpected element: " + elementName); } } } AdaptiveFeatureGenerator featureGenerator; if (generators.size() == 1) { featureGenerator = generators.get(0); } else if (generators.size() > 1) { featureGenerator = new AggregatedFeatureGenerator(generators.toArray( new AdaptiveFeatureGenerator[0])); } else { throw new InvalidFormatException("featureGenerators must have one or more generators"); } // disallow manually specifying CachedFeatureGenerator if (featureGenerator instanceof CachedFeatureGenerator) { throw new InvalidFormatException("CachedFeatureGeneratorFactory cannot be specified manually." + "Use cache=\"true\" attribute in featureGenerators element instead."); } // check cache usage if (Boolean.parseBoolean(generatorElement.getAttribute("cache"))) { return new CachedFeatureGenerator(featureGenerator); } else { return featureGenerator; } } else { throw new IllegalArgumentException( "[OPENNLP-1174] - Classic configuration format is no longer supported!"); } } private static org.w3c.dom.Document createDOM(InputStream xmlDescriptorIn) throws IOException { final DocumentBuilder documentBuilder = XmlUtil.createDocumentBuilder(); org.w3c.dom.Document xmlDescriptorDOM; try { xmlDescriptorDOM = documentBuilder.parse(xmlDescriptorIn); } catch (SAXException e) { throw new InvalidFormatException("Descriptor is not valid XML!", e); } return xmlDescriptorDOM; } public static Map> extractArtifactSerializerMappings( InputStream xmlDescriptorIn) throws IOException { final org.w3c.dom.Document xmlDescriptorDOM = createDOM(xmlDescriptorIn); final Element element = xmlDescriptorDOM.getDocumentElement(); final String elementName = element.getTagName(); // check it is new format? if ("featureGenerators".equals(elementName)) { return addMappingsFromXmlChildren(element.getChildNodes(), new HashMap<>()); } else { throw new IllegalArgumentException( "[OPENNLP-1174] - Classic configuration format is no longer supported!"); } } private static void extractArtifactSerializerMappings( Map> mapping, Element element) { final String className = element.getAttribute("class"); if (!className.isBlank()) { try { final Class factoryClass = Class.forName(className); try { final Constructor constructor = factoryClass.getConstructor(); final AbstractXmlFeatureGeneratorFactory factory = (AbstractXmlFeatureGeneratorFactory) constructor.newInstance(); factory.init(element, null); final Map> map = factory.getArtifactSerializerMapping(); if (map != null) { mapping.putAll(map); } } catch (NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException e) { throw new RuntimeException(e); } catch (InvalidFormatException ignored) { } } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } addMappingsFromXmlChildren(element.getChildNodes(), mapping); } private static Map> addMappingsFromXmlChildren( final NodeList nodes, final Map> mapping) { for (int i = 0; i < nodes.getLength(); i++) { if (nodes.item(i) instanceof Element childElem) { if ("generator".equals(childElem.getTagName())) { extractArtifactSerializerMappings(mapping, childElem); } } } return mapping; } /** * Provides a list with all the elements in the xml feature descriptor. * * @param xmlDescriptorIn the xml feature descriptor * @return a list containing all elements * @throws IOException if the given {@link InputStream} cannot be open * @throws InvalidFormatException if xml is not well-formed */ public static List getDescriptorElements(InputStream xmlDescriptorIn) throws IOException { final List elements = new ArrayList<>(); final org.w3c.dom.Document xmlDescriptorDOM = createDOM(xmlDescriptorIn); final XPath xPath = XPathFactory.newInstance().newXPath(); NodeList allElements; try { final XPathExpression exp = xPath.compile("//*"); allElements = (NodeList) exp.evaluate(xmlDescriptorDOM.getDocumentElement(), XPathConstants.NODESET); } catch (XPathExpressionException e) { throw new InvalidFormatException("The hard coded XPath expression should always be valid!"); } for (int i = 0; i < allElements.getLength(); i++) { if (allElements.item(i) instanceof Element customElement) { elements.add(customElement); } } return elements; } public static abstract class AbstractXmlFeatureGeneratorFactory { protected Element generatorElement; protected FeatureGeneratorResourceProvider resourceManager; // to respect the order in AggregatedFeatureGenerator, let's use LinkedHashMap protected LinkedHashMap args; public AbstractXmlFeatureGeneratorFactory() { args = new LinkedHashMap<>(); } public Map> getArtifactSerializerMapping() throws InvalidFormatException { return null; } final void init(Element element, FeatureGeneratorResourceProvider resourceManager) throws InvalidFormatException { this.generatorElement = element; this.resourceManager = resourceManager; List generators = new ArrayList<>(); NodeList childNodes = generatorElement.getChildNodes(); for (int i = 0; i < childNodes.getLength(); i++) { Node childNode = childNodes.item(i); if (childNode instanceof Element elem) { String type = elem.getTagName(); if (type.equals("generator")) { String key = "generator#" + generators.size(); AdaptiveFeatureGenerator afg = buildGenerator(elem, resourceManager); generators.add(afg); if (afg != null) { args.put(key, afg); } } else { String name = elem.getAttribute("name"); Node cn = elem.getFirstChild(); Text text = (Text) cn; switch (type) { case "int" -> args.put(name, Integer.parseInt(text.getWholeText())); case "long" -> args.put(name, Long.parseLong(text.getWholeText())); case "float" -> args.put(name, Float.parseFloat(text.getWholeText())); case "double" -> args.put(name, Double.parseDouble(text.getWholeText())); case "str" -> args.put(name, text.getWholeText()); case "bool" -> args.put(name, Boolean.parseBoolean(text.getWholeText())); default -> throw new InvalidFormatException( "child element must be one of generator, int, long, float, double," + " str or bool"); } } } } if (generators.size() > 1) { AdaptiveFeatureGenerator aggregatedFeatureGenerator = new AggregatedFeatureGenerator(generators.toArray( new AdaptiveFeatureGenerator[0])); args.put("generator#0", aggregatedFeatureGenerator); } } public int getInt(String name) throws InvalidFormatException { final Object value = args.get(name); if (value == null) { throw new InvalidFormatException("parameter " + name + " must be set!"); } else if (value instanceof Integer) { return (Integer) value; } else { throw new InvalidFormatException("parameter " + name + " must be integer!"); } } public int getInt(String name, int defValue) throws InvalidFormatException { final Object value = args.get(name); if (value == null) { return defValue; } else if (value instanceof Integer) { return (Integer) value; } else { throw new InvalidFormatException("parameter " + name + " must be integer!"); } } public long getLong(String name) throws InvalidFormatException { final Object value = args.get(name); if (value == null) { throw new InvalidFormatException("parameter " + name + " must be set!"); } else if (value instanceof Long) { return (Long) value; } else { throw new InvalidFormatException("parameter " + name + " must be long!"); } } public long getLong(String name, long defValue) throws InvalidFormatException { final Object value = args.get(name); if (value == null) { return defValue; } else if (value instanceof Long) { return (Long) value; } else { throw new InvalidFormatException("parameter " + name + " must be long!"); } } public float getFloat(String name) throws InvalidFormatException { final Object value = args.get(name); if (value == null) { throw new InvalidFormatException("parameter " + name + " must be set!"); } else if (value instanceof Float) { return (Float) value; } else { throw new InvalidFormatException("parameter " + name + " must be float!"); } } public float getFloat(String name, float defValue) throws InvalidFormatException { final Object value = args.get(name); if (value == null) { return defValue; } else if (value instanceof Float) { return (Float) value; } else { throw new InvalidFormatException("parameter " + name + " must be float!"); } } public double getDouble(String name) throws InvalidFormatException { final Object value = args.get(name); if (value == null) { throw new InvalidFormatException("parameter " + name + " must be set!"); } else if (value instanceof Double) { return (Double) value; } else { throw new InvalidFormatException("parameter " + name + " must be double!"); } } public double getDouble(String name, double defValue) throws InvalidFormatException { final Object value = args.get(name); if (value == null) { return defValue; } else if (value instanceof Double) { return (Double) value; } else { throw new InvalidFormatException("parameter " + name + " must be double!"); } } public String getStr(String name) throws InvalidFormatException { final Object value = args.get(name); if (value == null) { throw new InvalidFormatException("parameter " + name + " must be set!"); } else if (value instanceof String) { return (String) value; } else { throw new InvalidFormatException("parameter " + name + " must be double!"); } } public String getStr(String name, String defValue) throws InvalidFormatException { final Object value = args.get(name); if (value == null) { return defValue; } else if (value instanceof String) { return (String) value; } else { throw new InvalidFormatException("parameter " + name + " must be String!"); } } public boolean getBool(String name) throws InvalidFormatException { Object value = args.get(name); if (value == null) { throw new InvalidFormatException("parameter " + name + " must be set!"); } else if (value instanceof Boolean) { return (Boolean) value; } else { throw new InvalidFormatException("parameter " + name + " must be boolean!"); } } public boolean getBool(String name, boolean defValue) throws InvalidFormatException { Object value = args.get(name); if (value == null) { return defValue; } else if (value instanceof Boolean) { return (Boolean) value; } else { throw new InvalidFormatException("parameter " + name + " must be boolean!"); } } /** * @return null if the subclass uses {@link #resourceManager} to instantiate * @throws InvalidFormatException */ public abstract AdaptiveFeatureGenerator create() throws InvalidFormatException; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_I0100644 0000000 0000000 00000000161 14523004075 032577 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/InSpanGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/InSpanGenerator.j0100644 0000000 0000000 00000005014 14523004075 034131 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; import java.util.Objects; import opennlp.tools.namefind.TokenNameFinder; import opennlp.tools.util.Span; /** * Generates features if the tokens are recognized by the provided * {@link TokenNameFinder}. */ public class InSpanGenerator implements AdaptiveFeatureGenerator { private final String prefix; private final TokenNameFinder finder; private String[] currentSentence; private Span[] currentNames; /** * Initializes a {@link InSpanGenerator} instance. * * @param prefix The prefix is used to distinguish the generated features * from features generated by other instances of {@link InSpanGenerator}. * Must not be {@code null}. * @param finder The {@link TokenNameFinder} used to detect the names. * Must not be {@code null}. */ public InSpanGenerator(String prefix, TokenNameFinder finder) { this.prefix = Objects.requireNonNull(prefix, "prefix must not be null"); this.finder = Objects.requireNonNull(finder, "finder must not be null"); } @Override public void createFeatures(List features, String[] tokens, int index, String[] preds) { // cache results for sentence if (currentSentence != tokens) { currentSentence = tokens; currentNames = finder.find(tokens); } // iterate over names and check if a span is contained for (Span currentName : currentNames) { if (currentName.contains(index)) { // found a span for the current token features.add(prefix + ":w=dic"); features.add(prefix + ":w=dic=" + tokens[index]); // TODO: consider generation start and continuation features break; } } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_O0100644 0000000 0000000 00000000176 14523004075 032613 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/OutcomePriorFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/OutcomePriorFeatu0100644 0000000 0000000 00000002406 14523004075 034260 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; /** * The definition feature maps the underlying distribution of outcomes. */ public class OutcomePriorFeatureGenerator implements AdaptiveFeatureGenerator { private static final String OUTCOME_PRIOR_FEATURE = "def"; @Override public void createFeatures(List features, String[] tokens, int index, String[] previousOutcomes) { features.add(OUTCOME_PRIOR_FEATURE); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_P0100644 0000000 0000000 00000000177 14523004075 032615 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/POSTaggerNameFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/POSTaggerNameFeat0100644 0000000 0000000 00000003657 14523004075 034051 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.Arrays; import java.util.List; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSTagger; import opennlp.tools.postag.POSTaggerME; /** * Adds the token POS Tag as feature. Requires a POS Tag model. */ public class POSTaggerNameFeatureGenerator implements AdaptiveFeatureGenerator { private final POSTagger posTagger; private String[] cachedTokens; private String[] cachedTags; /** * Initializes a new instance. * * @param aPosTagger a POSTagger implementation. */ public POSTaggerNameFeatureGenerator(POSTagger aPosTagger) { this.posTagger = aPosTagger; } /** * Initializes a new instance. * * @param aPosModel a POSTagger model. */ public POSTaggerNameFeatureGenerator(POSModel aPosModel) { this.posTagger = new POSTaggerME(aPosModel); } public void createFeatures(List feats, String[] toks, int index, String[] preds) { if (!Arrays.equals(this.cachedTokens, toks)) { this.cachedTokens = toks; this.cachedTags = this.posTagger.tag(toks); } feats.add("pos=" + this.cachedTags[index]); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_P0100644 0000000 0000000 00000000206 14523004075 032606 xustar000000000 0000000 134 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/POSTaggerNameFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/POSTaggerNameFeat0100644 0000000 0000000 00000003666 14523004075 034051 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.HashMap; import java.util.Map; import opennlp.tools.postag.POSModel; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.model.ArtifactSerializer; import opennlp.tools.util.model.POSModelSerializer; /** * @see POSTaggerNameFeatureGenerator */ public class POSTaggerNameFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public POSTaggerNameFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { // if resourceManager is null, we don't instantiate if (resourceManager == null) { return null; } String modelResourceKey = getStr("model"); POSModel model = (POSModel) resourceManager.getResource(modelResourceKey); return new POSTaggerNameFeatureGenerator(model); } @Override public Map> getArtifactSerializerMapping() throws InvalidFormatException { Map> mapping = new HashMap<>(); mapping.put(getStr("model"), new POSModelSerializer()); return mapping; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_P0100644 0000000 0000000 00000000173 14523004075 032611 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PosTaggerFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PosTaggerFeatureG0100644 0000000 0000000 00000003455 14523004075 034167 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; public class PosTaggerFeatureGenerator implements AdaptiveFeatureGenerator { private static final String SB = "S=begin"; @Override public void createFeatures(List features, String[] tokens, int index, String[] tags) { String prev, prevprev = null; String tagprev, tagprevprev; tagprev = tagprevprev = null; if (index - 1 >= 0) { prev = tokens[index - 1]; tagprev = tags[index - 1]; if (index - 2 >= 0) { prevprev = tokens[index - 2]; tagprevprev = tags[index - 2]; } else { prevprev = SB; } } else { prev = SB; } // add the words and pos's of the surrounding context if (prev != null) { if (tagprev != null) { features.add("t=" + tagprev); } if (prevprev != null) { if (tagprevprev != null) { features.add("t2=" + tagprevprev + "," + tagprev); } } } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_P0100644 0000000 0000000 00000000202 14523004075 032602 xustar000000000 0000000 130 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PosTaggerFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PosTaggerFeatureG0100644 0000000 0000000 00000002267 14523004075 034167 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import opennlp.tools.util.InvalidFormatException; public class PosTaggerFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public PosTaggerFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { return new PosTaggerFeatureGenerator(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_P0100644 0000000 0000000 00000000170 14523004075 032606 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PrefixFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PrefixFeatureGene0100644 0000000 0000000 00000003350 14523004075 034213 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; public class PrefixFeatureGenerator implements AdaptiveFeatureGenerator { static final int DEFAULT_MAX_LENGTH = 4; private final int prefixLength; public PrefixFeatureGenerator() { prefixLength = DEFAULT_MAX_LENGTH; } public PrefixFeatureGenerator(int prefixLength) { this.prefixLength = prefixLength; } @Override public void createFeatures(List features, String[] tokens, int index, String[] previousOutcomes) { String[] prefs = getPrefixes(tokens[index]); for (String pref : prefs) { features.add("pre=" + pref); } } private String[] getPrefixes(String lex) { int prefixes = StrictMath.min(prefixLength, lex.length()); String[] prefs = new String[prefixes]; for (int li = 0; li < prefixes; li++) { prefs[li] = lex.substring(0, StrictMath.min(li + 1, lex.length())); } return prefs; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_P0100644 0000000 0000000 00000000177 14523004075 032615 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PrefixFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PrefixFeatureGene0100644 0000000 0000000 00000002430 14523004075 034211 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import opennlp.tools.util.InvalidFormatException; /** * @see PrefixFeatureGenerator */ public class PrefixFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public PrefixFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { return new PrefixFeatureGenerator(getInt("length", PrefixFeatureGenerator.DEFAULT_MAX_LENGTH)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_P0100644 0000000 0000000 00000000175 14523004075 032613 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PreviousMapFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PreviousMapFeatur0100644 0000000 0000000 00000003326 14523004075 034267 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.HashMap; import java.util.List; import java.util.Map; /** * This {@link AdaptiveFeatureGenerator} generates features indicating the * outcome associated with a previously occurring word. */ public class PreviousMapFeatureGenerator implements AdaptiveFeatureGenerator { private final Map previousMap = new HashMap<>(); @Override public void createFeatures(List features, String[] tokens, int index, String[] preds) { features.add("pd=" + previousMap.get(tokens[index])); } /** * Generates previous decision features for the token based on contents of the previous map. */ @Override public void updateAdaptiveData(String[] tokens, String[] outcomes) { for (int i = 0; i < tokens.length; i++) { previousMap.put(tokens[i], outcomes[i]); } } @Override public void clearAdaptiveData() { previousMap.clear(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_P0100644 0000000 0000000 00000000204 14523004075 032604 xustar000000000 0000000 132 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PreviousMapFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PreviousMapFeatur0100644 0000000 0000000 00000002352 14523004075 034265 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import opennlp.tools.util.InvalidFormatException; /** * @see PreviousMapFeatureGenerator */ public class PreviousMapFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public PreviousMapFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { return new PreviousMapFeatureGenerator(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_P0100644 0000000 0000000 00000000200 14523004075 032600 xustar000000000 0000000 128 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PreviousTwoMapFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/PreviousTwoMapFea0100644 0000000 0000000 00000003456 14523004075 034232 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.HashMap; import java.util.List; import java.util.Map; /** * This {@link AdaptiveFeatureGenerator} generates features indicating the * outcome associated with two previously occurring words. */ public class PreviousTwoMapFeatureGenerator implements AdaptiveFeatureGenerator { private final Map previousMap = new HashMap<>(); /** * Generates previous decision features for the token based on contents of the previous map. */ @Override public void createFeatures(List features, String[] tokens, int index, String[] preds) { if (index > 0) { features.add("ppd=" + previousMap.get(tokens[index]) + "," + previousMap.get(tokens[index - 1])); } } @Override public void updateAdaptiveData(String[] tokens, String[] outcomes) { for (int i = 0; i < tokens.length; i++) { previousMap.put(tokens[i], outcomes[i]); } } @Override public void clearAdaptiveData() { previousMap.clear(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_S0100644 0000000 0000000 00000000172 14523004075 032613 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/SentenceFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/SentenceFeatureGe0100644 0000000 0000000 00000003241 14523004075 034176 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; /** * This feature generator creates sentence begin and end features. */ public class SentenceFeatureGenerator implements AdaptiveFeatureGenerator { private final boolean isGenerateFirstWordFeature; private final boolean isGenerateLastWordFeature; public SentenceFeatureGenerator(boolean isGenerateFirstWordFeature, boolean isGenerateLastWordFeature) { this.isGenerateFirstWordFeature = isGenerateFirstWordFeature; this.isGenerateLastWordFeature = isGenerateLastWordFeature; } @Override public void createFeatures(List features, String[] tokens, int index, String[] previousOutcomes) { if (isGenerateFirstWordFeature && index == 0) { features.add("S=begin"); } if (isGenerateLastWordFeature && tokens.length == index + 1) { features.add("S=end"); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_S0100644 0000000 0000000 00000000201 14523004075 032604 xustar000000000 0000000 129 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/SentenceFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/SentenceFeatureGe0100644 0000000 0000000 00000002521 14523004075 034176 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import opennlp.tools.util.InvalidFormatException; /** * @see SentenceFeatureGenerator */ public class SentenceFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public SentenceFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { String beginFeatureString = generatorElement.getAttribute("begin"); return new SentenceFeatureGenerator(getBool("begin", true), getBool("end", true)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_S0100644 0000000 0000000 00000000157 14523004075 032616 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/StringPattern.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/StringPattern.jav0100644 0000000 0000000 00000014154 14523004075 034232 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; /** * Recognizes predefined patterns in strings. */ public class StringPattern { private static final int INITAL_CAPITAL_LETTER = 0x1; private static final int ALL_CAPITAL_LETTER = 0x1 << 1; private static final int ALL_LOWERCASE_LETTER = 0x1 << 2; private static final int ALL_LETTERS = 0x1 << 3; private static final int ALL_DIGIT = 0x1 << 4; private static final int ALL_HIRAGANA = 0x1 << 5; private static final int ALL_KATAKANA = 0x1 << 6; private static final int CONTAINS_PERIOD = 0x1 << 7; private static final int CONTAINS_COMMA = 0x1 << 8; private static final int CONTAINS_SLASH = 0x1 << 9; private static final int CONTAINS_DIGIT = 0x1 << 10; private static final int CONTAINS_HYPHEN = 0x1 << 11; private static final int CONTAINS_LETTERS = 0x1 << 12; private static final int CONTAINS_UPPERCASE = 0x1 << 13; private final int pattern; private final int digits; private StringPattern(int pattern, int digits) { this.pattern = pattern; this.digits = digits; } public static StringPattern recognize(String token) { int pattern = ALL_CAPITAL_LETTER | ALL_LOWERCASE_LETTER | ALL_DIGIT | ALL_LETTERS | ALL_HIRAGANA | ALL_KATAKANA; int digits = 0; for (int i = 0; i < token.length(); i++) { final char ch = token.charAt(i); final int letterType = Character.getType(ch); boolean isLetter = letterType == Character.UPPERCASE_LETTER || letterType == Character.LOWERCASE_LETTER || letterType == Character.TITLECASE_LETTER || letterType == Character.MODIFIER_LETTER || letterType == Character.OTHER_LETTER; if (isLetter) { pattern |= CONTAINS_LETTERS; pattern &= ~ALL_DIGIT; if (letterType == Character.UPPERCASE_LETTER) { if (i == 0) { pattern |= INITAL_CAPITAL_LETTER; } pattern |= CONTAINS_UPPERCASE; pattern &= ~ALL_LOWERCASE_LETTER; } else { pattern &= ~ALL_CAPITAL_LETTER; } } else { // contains chars other than letter, this means // it can not be one of these: pattern &= ~ALL_LETTERS; pattern &= ~ALL_CAPITAL_LETTER; pattern &= ~ALL_LOWERCASE_LETTER; if (letterType == Character.DECIMAL_DIGIT_NUMBER) { pattern |= CONTAINS_DIGIT; pattern &= ~(ALL_HIRAGANA | ALL_KATAKANA); digits++; } else { pattern &= ~ALL_DIGIT; } switch (ch) { case ',': pattern |= CONTAINS_COMMA; break; case '.': pattern |= CONTAINS_PERIOD; break; case '/': pattern |= CONTAINS_SLASH; break; case '-': pattern |= CONTAINS_HYPHEN; break; default: break; } } // for Japanese... final int codePoint = token.codePointAt(i); final Character.UnicodeScript us = Character.UnicodeScript.of(codePoint); if (us != Character.UnicodeScript.COMMON) { if (us == Character.UnicodeScript.LATIN) { pattern &= ~(ALL_HIRAGANA | ALL_KATAKANA); } else if (us == Character.UnicodeScript.HAN) { pattern &= ~(ALL_HIRAGANA | ALL_KATAKANA | ALL_LOWERCASE_LETTER); } else if (us == Character.UnicodeScript.HIRAGANA) { pattern &= ~(ALL_KATAKANA | ALL_LOWERCASE_LETTER); } else if (us == Character.UnicodeScript.KATAKANA) { pattern &= ~(ALL_HIRAGANA | ALL_LOWERCASE_LETTER); } } else { if (ch != '・' && ch != 'ー' && ch != '〜') pattern &= ~(ALL_HIRAGANA | ALL_KATAKANA); } } return new StringPattern(pattern, digits); } /** * @return true if all characters are letters. */ public boolean isAllLetter() { return (pattern & ALL_LETTERS) > 0; } /** * @return true if first letter is capital. */ public boolean isInitialCapitalLetter() { return (pattern & INITAL_CAPITAL_LETTER) > 0; } /** * @return true if all letters are capital. */ public boolean isAllCapitalLetter() { return (pattern & ALL_CAPITAL_LETTER) > 0; } /** * @return true if all letters are lower case. */ public boolean isAllLowerCaseLetter() { return (pattern & ALL_LOWERCASE_LETTER) > 0; } /** * @return true if all chars are digits. */ public boolean isAllDigit() { return (pattern & ALL_DIGIT) > 0; } /** * @return true if all chars are hiragana. */ public boolean isAllHiragana() { return (pattern & ALL_HIRAGANA) > 0; } /** * @return true if all chars are katakana. */ public boolean isAllKatakana() { return (pattern & ALL_KATAKANA) > 0; } /** * Retrieves the number of digits. */ public int digits() { return digits; } public boolean containsPeriod() { return (pattern & CONTAINS_PERIOD) > 0; } public boolean containsComma() { return (pattern & CONTAINS_COMMA) > 0; } public boolean containsSlash() { return (pattern & CONTAINS_SLASH) > 0; } public boolean containsDigit() { return (pattern & CONTAINS_DIGIT) > 0; } public boolean containsHyphen() { return (pattern & CONTAINS_HYPHEN) > 0; } public boolean containsLetters() { return (pattern & CONTAINS_LETTERS) > 0; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_S0100644 0000000 0000000 00000000170 14523004075 032611 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/SuffixFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/SuffixFeatureGene0100644 0000000 0000000 00000003360 14523004075 034223 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; public class SuffixFeatureGenerator implements AdaptiveFeatureGenerator { static final int DEFAULT_MAX_LENGTH = 4; private final int suffixLength; public SuffixFeatureGenerator() { suffixLength = DEFAULT_MAX_LENGTH; } public SuffixFeatureGenerator(int suffixLength) { this.suffixLength = suffixLength; } @Override public void createFeatures(List features, String[] tokens, int index, String[] previousOutcomes) { String[] suffs = getSuffixes(tokens[index]); for (String suff : suffs) { features.add("suf=" + suff); } } private String[] getSuffixes(String lex) { int suffixes = StrictMath.min(suffixLength, lex.length()); String[] suffs = new String[suffixes]; for (int li = 0; li < suffixes; li++) { suffs[li] = lex.substring(StrictMath.max(lex.length() - li - 1, 0)); } return suffs; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_S0100644 0000000 0000000 00000000177 14523004075 032620 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/SuffixFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/SuffixFeatureGene0100644 0000000 0000000 00000002430 14523004075 034220 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import opennlp.tools.util.InvalidFormatException; /** * @see SuffixFeatureGenerator */ public class SuffixFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public SuffixFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { return new SuffixFeatureGenerator(getInt("length", SuffixFeatureGenerator.DEFAULT_MAX_LENGTH)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_T0100644 0000000 0000000 00000000174 14523004075 032616 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenClassFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenClassFeature0100644 0000000 0000000 00000003472 14523004075 034232 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; import opennlp.tools.util.StringUtil; /** * Generates features for different for the class of the token. */ public class TokenClassFeatureGenerator implements AdaptiveFeatureGenerator { private static final String TOKEN_CLASS_PREFIX = "wc"; private static final String TOKEN_AND_CLASS_PREFIX = "w&c"; private final boolean generateWordAndClassFeature; public TokenClassFeatureGenerator() { this(false); } public TokenClassFeatureGenerator(boolean generateWordAndClassFeature) { this.generateWordAndClassFeature = generateWordAndClassFeature; } @Override public void createFeatures(List features, String[] tokens, int index, String[] preds) { String wordClass = FeatureGeneratorUtil.tokenFeature(tokens[index]); features.add(TOKEN_CLASS_PREFIX + "=" + wordClass); if (generateWordAndClassFeature) { features.add(TOKEN_AND_CLASS_PREFIX + "=" + StringUtil.toLowerCase(tokens[index]) + "," + wordClass); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_T0100644 0000000 0000000 00000000203 14523004075 032607 xustar000000000 0000000 131 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenClassFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenClassFeature0100644 0000000 0000000 00000002402 14523004075 034222 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import opennlp.tools.util.InvalidFormatException; /** * @see TokenClassFeatureGenerator */ public class TokenClassFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public TokenClassFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { return new TokenClassFeatureGenerator(getBool("wordAndClass", true)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_T0100644 0000000 0000000 00000000167 14523004075 032620 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenFeatureGener0100644 0000000 0000000 00000003371 14523004075 034223 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; import opennlp.tools.util.StringUtil; /** * Generates a feature which contains the token itself. */ public class TokenFeatureGenerator implements AdaptiveFeatureGenerator { private static final String WORD_PREFIX = "w"; private final boolean lowercase; /** * Initializes a {@link TokenFeatureGenerator}. * * @param lowercase Whether to use lower-casing or not. */ public TokenFeatureGenerator(boolean lowercase) { this.lowercase = lowercase; } /** * Initializes a {@link TokenFeatureGenerator}. Lower-casing will be enabled. */ public TokenFeatureGenerator() { this(true); } @Override public void createFeatures(List features, String[] tokens, int index, String[] preds) { if (lowercase) { features.add(WORD_PREFIX + "=" + StringUtil.toLowerCase(tokens[index])); } else { features.add(WORD_PREFIX + "=" + tokens[index]); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_T0100644 0000000 0000000 00000000176 14523004075 032620 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenFeatureGener0100644 0000000 0000000 00000002305 14523004075 034217 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import opennlp.tools.util.InvalidFormatException; public class TokenFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public TokenFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { return new TokenFeatureGenerator(getBool("lowercase", true)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_T0100644 0000000 0000000 00000000176 14523004075 032620 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenPatternFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenPatternFeatu0100644 0000000 0000000 00000005616 14523004075 034255 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; import java.util.regex.Pattern; import opennlp.tools.tokenize.SimpleTokenizer; import opennlp.tools.tokenize.Tokenizer; import opennlp.tools.util.StringUtil; /** * Partitions tokens into sub-tokens based on character classes and generates * class features for each of the sub-tokens and combinations of those sub-tokens. */ public class TokenPatternFeatureGenerator implements AdaptiveFeatureGenerator { private final Pattern noLetters = Pattern.compile("[^a-zA-Z]"); private final Tokenizer tokenizer; /** * Initializes a {@link TokenPatternFeatureGenerator}. * For tokenization the {@link SimpleTokenizer} is used. */ public TokenPatternFeatureGenerator() { this(SimpleTokenizer.INSTANCE); } /** * Initializes a {@link TokenPatternFeatureGenerator} instance. * * @param supportTokenizer The {@link Tokenizer} to be used. */ public TokenPatternFeatureGenerator(Tokenizer supportTokenizer) { tokenizer = supportTokenizer; } @Override public void createFeatures(List feats, String[] toks, int index, String[] preds) { String[] tokenized = tokenizer.tokenize(toks[index]); if (tokenized.length == 1) { feats.add("st=" + StringUtil.toLowerCase(toks[index])); return; } feats.add("stn=" + tokenized.length); StringBuilder pattern = new StringBuilder(); for (int i = 0; i < tokenized.length; i++) { if (i < tokenized.length - 1) { feats.add("pt2=" + FeatureGeneratorUtil.tokenFeature(tokenized[i]) + FeatureGeneratorUtil.tokenFeature(tokenized[i + 1])); } if (i < tokenized.length - 2) { feats.add("pt3=" + FeatureGeneratorUtil.tokenFeature(tokenized[i]) + FeatureGeneratorUtil.tokenFeature(tokenized[i + 1]) + FeatureGeneratorUtil.tokenFeature(tokenized[i + 2])); } pattern.append(FeatureGeneratorUtil.tokenFeature(tokenized[i])); if (!noLetters.matcher(tokenized[i]).find()) { feats.add("st=" + StringUtil.toLowerCase(tokenized[i])); } } feats.add("pta=" + pattern); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_T0100644 0000000 0000000 00000000205 14523004075 032611 xustar000000000 0000000 133 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenPatternFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TokenPatternFeatu0100644 0000000 0000000 00000002355 14523004075 034252 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import opennlp.tools.util.InvalidFormatException; /** * @see TokenPatternFeatureGenerator */ public class TokenPatternFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public TokenPatternFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { return new TokenPatternFeatureGenerator(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_T0100644 0000000 0000000 00000000175 14523004075 032617 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TrigramNameFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TrigramNameFeatur0100644 0000000 0000000 00000003622 14523004075 034222 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; /** * Adds trigram features based on tokens and token classes. * */ public class TrigramNameFeatureGenerator implements AdaptiveFeatureGenerator { @Override public void createFeatures(List features, String[] tokens, int index, String[] previousOutcomes) { String wc = FeatureGeneratorUtil.tokenFeature(tokens[index]); // trigram features if (index > 1) { features.add("ppw,pw,w=" + tokens[index - 2] + "," + tokens[index - 1] + "," + tokens[index]); String pwc = FeatureGeneratorUtil.tokenFeature(tokens[index - 1]); String ppwc = FeatureGeneratorUtil.tokenFeature(tokens[index - 2]); features.add("ppwc,pwc,wc=" + ppwc + "," + pwc + "," + wc); } if (index + 2 < tokens.length) { features.add("w,nw,nnw=" + tokens[index] + "," + tokens[index + 1] + "," + tokens[index + 2]); String nwc = FeatureGeneratorUtil.tokenFeature(tokens[index + 1]); String nnwc = FeatureGeneratorUtil.tokenFeature(tokens[index + 2]); features.add("wc,nwc,nnwc=" + wc + "," + nwc + "," + nnwc); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_T0100644 0000000 0000000 00000000204 14523004075 032610 xustar000000000 0000000 132 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TrigramNameFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/TrigramNameFeatur0100644 0000000 0000000 00000002275 14523004075 034225 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import opennlp.tools.util.InvalidFormatException; public class TrigramNameFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public TrigramNameFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { return new TrigramNameFeatureGenerator(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_W0100644 0000000 0000000 00000000170 14523004075 032615 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/WindowFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/WindowFeatureGene0100644 0000000 0000000 00000010744 14523004075 034232 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; /** * Generates previous and next features for a given {@link AdaptiveFeatureGenerator}. * The window size can be specified. *

* Features: * Current token is always included unchanged * Previous tokens are prefixed with p distance * Next tokens are prefix with n distance */ public class WindowFeatureGenerator implements AdaptiveFeatureGenerator { public static final String PREV_PREFIX = "p"; public static final String NEXT_PREFIX = "n"; private final AdaptiveFeatureGenerator generator; private final int prevWindowSize; private final int nextWindowSize; /** * Initializes a {@link WindowFeatureGenerator} with the given parameters. * * @param generator The {@link AdaptiveFeatureGenerator} to apply to the window. * @param prevWindowSize Size of the window to the left of the current token. * @param nextWindowSize Size of the window to the right of the current token. */ public WindowFeatureGenerator(AdaptiveFeatureGenerator generator, int prevWindowSize, int nextWindowSize) { this.generator = generator; this.prevWindowSize = prevWindowSize; this.nextWindowSize = nextWindowSize; } /** * Initializes a {@link WindowFeatureGenerator} with the given parameters. * * @param generators One or more {@link AdaptiveFeatureGenerator} to apply to the window. * @param prevWindowSize Size of the window to the left of the current token. * @param nextWindowSize Size of the window to the right of the current token. */ public WindowFeatureGenerator(int prevWindowSize, int nextWindowSize, AdaptiveFeatureGenerator... generators) { this(new AggregatedFeatureGenerator(generators), prevWindowSize, nextWindowSize); } /** * Initializes a {@link WindowFeatureGenerator}. * The previous and next window size is 5. * * @param generator The {@link AdaptiveFeatureGenerator} to apply to the window. */ public WindowFeatureGenerator(AdaptiveFeatureGenerator generator) { this(generator, 5, 5); } /** * Initializes a {@link WindowFeatureGenerator}. * The previous and next window size is 5. * * @param generators One or more {@link AdaptiveFeatureGenerator} to apply to the window. */ public WindowFeatureGenerator(AdaptiveFeatureGenerator... generators) { this(new AggregatedFeatureGenerator(generators), 5, 5); } @Override public void createFeatures(List features, String[] tokens, int index, String[] preds) { // current features generator.createFeatures(features, tokens, index, preds); // previous features for (int i = 1; i < prevWindowSize + 1; i++) { if (index - i >= 0) { List prevFeatures = new ArrayList<>(); generator.createFeatures(prevFeatures, tokens, index - i, preds); for (String prevFeature : prevFeatures) { features.add(PREV_PREFIX + i + prevFeature); } } } // next features for (int i = 1; i < nextWindowSize + 1; i++) { if (i + index < tokens.length) { List nextFeatures = new ArrayList<>(); generator.createFeatures(nextFeatures, tokens, index + i, preds); for (String nextFeature : nextFeatures) { features.add(NEXT_PREFIX + i + nextFeature); } } } } @Override public void updateAdaptiveData(String[] tokens, String[] outcomes) { generator.updateAdaptiveData(tokens, outcomes); } @Override public void clearAdaptiveData() { generator.clearAdaptiveData(); } @Override public String toString() { return super.toString() + ": Prev window size: " + prevWindowSize + ", Next window size: " + nextWindowSize; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_W0100644 0000000 0000000 00000000177 14523004075 032624 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/WindowFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/WindowFeatureGene0100644 0000000 0000000 00000003010 14523004075 034216 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import opennlp.tools.util.InvalidFormatException; /** * @see WindowFeatureGenerator */ public class WindowFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public WindowFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { AdaptiveFeatureGenerator generator = (AdaptiveFeatureGenerator) args.get("generator#0"); if (generator == null) { throw new InvalidFormatException("window feature generator must contain" + " an aggregator element"); } return new WindowFeatureGenerator(generator, getInt("prevLength"), getInt("nextLength")); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_W0100644 0000000 0000000 00000000167 14523004075 032623 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/WordClusterDictionary.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/WordClusterDictio0100644 0000000 0000000 00000005721 14523004075 034260 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; import opennlp.tools.util.model.ArtifactSerializer; import opennlp.tools.util.model.SerializableArtifact; public class WordClusterDictionary implements SerializableArtifact { public static class WordClusterDictionarySerializer implements ArtifactSerializer { @Override public WordClusterDictionary create(InputStream in) throws IOException { return new WordClusterDictionary(in); } @Override public void serialize(WordClusterDictionary artifact, OutputStream out) throws IOException { artifact.serialize(out); } } private final Map tokenToClusterMap = new HashMap<>(); /** * Read word2vec and clark clustering style lexicons. * * @param in the {@link InputStream} to read from. * * @throws IOException Thrown if IO errors occurred during read. */ public WordClusterDictionary(InputStream in) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8)); String line; while ((line = reader.readLine()) != null) { String[] parts = line.split(" "); if (parts.length == 3) { tokenToClusterMap.put(parts[0], parts[1].intern()); } else if (parts.length == 2) { tokenToClusterMap.put(parts[0], parts[1].intern()); } } } public String lookupToken(String string) { return tokenToClusterMap.get(string); } public void serialize(OutputStream out) throws IOException { Writer writer = new BufferedWriter(new OutputStreamWriter(out)); for (Map.Entry entry : tokenToClusterMap.entrySet()) { writer.write(entry.getKey() + " " + entry.getValue() + "\n"); } writer.flush(); } @Override public Class getArtifactSerializerClass() { return WordClusterDictionarySerializer.class; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_W0100644 0000000 0000000 00000000175 14523004075 032622 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/WordClusterFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/WordClusterFeatur0100644 0000000 0000000 00000003415 14523004075 034271 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; import opennlp.tools.util.StringUtil; public class WordClusterFeatureGenerator implements AdaptiveFeatureGenerator { private final WordClusterDictionary tokenDictionary; private final String resourceName; private final boolean lowerCaseDictionary; public WordClusterFeatureGenerator(WordClusterDictionary dict, String dictResourceKey, boolean lowerCaseDictionary) { tokenDictionary = dict; resourceName = dictResourceKey; this.lowerCaseDictionary = lowerCaseDictionary; } @Override public void createFeatures(List features, String[] tokens, int index, String[] previousOutcomes) { String clusterId; if (lowerCaseDictionary) { clusterId = tokenDictionary.lookupToken(StringUtil.toLowerCase(tokens[index])); } else { clusterId = tokenDictionary.lookupToken(tokens[index]); } if (clusterId != null) { features.add(resourceName + clusterId); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_W0100644 0000000 0000000 00000000204 14523004075 032613 xustar000000000 0000000 132 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/WordClusterFeatureGeneratorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/WordClusterFeatur0100644 0000000 0000000 00000004513 14523004075 034271 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.HashMap; import java.util.Map; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.model.ArtifactSerializer; /** * Defines a word cluster generator factory; it reads an element containing * 'w2vwordcluster' as a tag name; these clusters are typically produced by * word2vec or clark pos induction systems. */ public class WordClusterFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public WordClusterFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { // if resourceManager is null, we don't instantiate if (resourceManager == null) { return null; } String dictResourceKey = getStr("dict"); boolean lowerCaseDictionary = getBool("lowerCase"); Object dictResource = resourceManager.getResource(dictResourceKey); if (!(dictResource instanceof WordClusterDictionary)) { throw new InvalidFormatException("Not a WordClusterDictionary resource for key: " + dictResourceKey); } return new WordClusterFeatureGenerator((WordClusterDictionary) dictResource, dictResourceKey, lowerCaseDictionary); } @Override public Map> getArtifactSerializerMapping() throws InvalidFormatException { Map> mapping = new HashMap<>(); mapping.put(getStr("dict"), new WordClusterDictionary.WordClusterDictionarySerializer()); return mapping; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_featuregen_p0100644 0000000 0000000 00000000156 14523004075 032652 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/package-info.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/featuregen/package-info.java0100644 0000000 0000000 00000001624 14523004075 034111 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * This package contains classes for generating sequence features. */ package opennlp.tools.util.featuregen; apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/java/Experimental.java0100644 0000000 0000000 00000002002 14523004075 033005 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.java; import java.lang.annotation.Documented; /** * Indicates that a certain API feature is not stable * and might change with a new release. */ @Documented public @interface Experimental { } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_jvm_CHMStrin0100644 0000000 0000000 00000000160 14523004075 032504 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/jvm/CHMStringDeduplicator.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/jvm/CHMStringDeduplicator.ja0100644 0000000 0000000 00000004366 14523004075 034051 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.jvm; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ThreadLocalRandom; import opennlp.tools.commons.Internal; import opennlp.tools.commons.ThreadSafe; /** * A {@link StringInterner} implementation by Aleksey Shipilëv with relaxed canonical requirements. * It is a probabilistic deduplication implementation with a default probability of {@code 0.5}. * Users may implement a custom class with a different probability value. *

* Origin: * * https://shipilev.net/talks/joker-Oct2014-string-catechism.pdf */ @Internal @ThreadSafe class CHMStringDeduplicator implements StringInterner { private final int prob; private final Map map; /** * Creates a {@link CHMStringDeduplicator} with a probability of {@code 0.5}. */ public CHMStringDeduplicator() { this(0.5); } /** * @param prob represents the probability, that a given String will be interned */ public CHMStringDeduplicator(double prob) { this.prob = (int) (Integer.MIN_VALUE + prob * (1L << 32)); this.map = new ConcurrentHashMap<>(); } /** * {@inheritDoc} */ @Override public String intern(String sample) { if (ThreadLocalRandom.current().nextInt() > prob) { return sample; } final String exist = map.putIfAbsent(sample, sample); return (exist == null) ? sample : exist; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/jvm/CHMStringInterner.java0100644 0000000 0000000 00000003135 14523004075 033540 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.jvm; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import opennlp.tools.commons.Internal; import opennlp.tools.commons.ThreadSafe; /** * A {@link StringInterner} implementation based on {@link ConcurrentHashMap} by Aleksey Shipilëv. *

* Origin: * * https://shipilev.net/jvm/anatomy-quarks/10-string-intern/ */ @Internal @ThreadSafe class CHMStringInterner implements StringInterner { private final Map map; public CHMStringInterner() { map = new ConcurrentHashMap<>(); } /** * {@inheritDoc} */ @Override public String intern(String sample) { final String exist = map.putIfAbsent(sample, sample); return (exist == null) ? sample : exist; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/jvm/HMStringInterner.java0100644 0000000 0000000 00000003060 14523004075 033432 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.jvm; import java.util.HashMap; import java.util.Map; import opennlp.tools.commons.Internal; /** * A {@link StringInterner} implementation based on {@link HashMap} by Aleksey Shipilëv. * This implementation is not thread-safe. *

* Origin: * * https://shipilev.net/jvm/anatomy-quarks/10-string-intern/ */ @Internal class HMStringInterner implements StringInterner { private final Map map; public HMStringInterner() { map = new HashMap<>(); } /** * {@inheritDoc} */ @Override public String intern(String sample) { final String exist = map.putIfAbsent(sample, sample); return (exist == null) ? sample : exist; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/jvm/JvmStringInterner.java0100644 0000000 0000000 00000003156 14523004075 033670 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.jvm; import opennlp.tools.commons.Internal; import opennlp.tools.commons.ThreadSafe; /** * A {@link StringInterner} implementation based on {@code String.intern()}. Strings interned via * this implementation are put into PermGen space. If needed, the PermGen memory can be increased by * the JVM argument {@code -XX:MaxPermSize}. *

* Using this {@link StringInterner} brings back the default behaviour of OpenNLP before version * {@code 2.3.2}. You can use it by setting the system property {@code opennlp.interner.class} to * the fully qualified classname of a {@link StringInterner} implementation. *

*/ @Internal @ThreadSafe class JvmStringInterner implements StringInterner { /** * {@inheritDoc} */ @Override public String intern(String sample) { return sample.intern(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/jvm/NoOpStringInterner.java0100644 0000000 0000000 00000002300 14523004075 033775 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.jvm; import opennlp.tools.commons.Internal; import opennlp.tools.commons.ThreadSafe; /** * A no-op {@link StringInterner} implementation, which does not intern. * It just returns the input as is. */ @Internal @ThreadSafe class NoOpStringInterner implements StringInterner { /** * {@inheritDoc} */ @Override public String intern(String sample) { return sample; } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/jvm/StringInterner.java0100644 0000000 0000000 00000002324 14523004075 033207 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.jvm; /** * A marker-interface for a String interner implementation. */ public interface StringInterner { /** * Interns and returns a reference to the representative instance * for any collection of string instances that are equal to each other. * * @param sample string instance to be interned * @return reference to the interned string instance */ String intern(String sample); } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/jvm/StringInterners.java0100644 0000000 0000000 00000004645 14523004075 033402 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.jvm; import java.lang.reflect.Constructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Provides string interning utility methods. Interning mechanism can be configured via the * system property {@code opennlp.interner.class} by specifying an implementation via its * fully qualified classname. It needs to implement {@link StringInterner}. *

* If not specified by the user, the default interner is {@link CHMStringInterner}. */ public class StringInterners { private static final Logger LOGGER = LoggerFactory.getLogger(StringInterners.class); private static final StringInterner INTERNER; static { final String clazzName = System.getProperty("opennlp.interner.class", CHMStringInterner.class.getCanonicalName()); try { final Class clazz = Class.forName(clazzName); final Constructor cons = clazz.getDeclaredConstructor(); INTERNER = (StringInterner) cons.newInstance(); LOGGER.debug("Using '{}' as String interner implementation.", clazzName); } catch (Exception e) { throw new RuntimeException("Could not load specified String interner implementation: '" + clazzName + "'. Reason: " + e.getLocalizedMessage(), e); } } /** * Interns and returns a reference to the representative instance * for any collection of string instances that are equal to each other. * * @param sample string instance to be interned * @return reference to the interned string instance */ public static String intern(String sample) { if (sample == null) { return null; } return INTERNER.intern(sample); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/ArtifactProvider.java0100644 0000000 0000000 00000003446 14523004075 034014 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.model; /** * Provides access to model persisted artifacts. */ public interface ArtifactProvider { /** * @return Gets an artifact by an identifying key or name. */ T getArtifact(String key); /** * @param key A string identifying an element. * * @return Retrieves the value for the given {@code key} from the {@code manifest.properties}. */ String getManifestProperty(String key); /** * @return Retrieves the language code of the material which was used to train a model * or {@code 'x-unspecified'} if non was set. */ String getLanguage(); /** * Indicates if this provider was loaded from a serialized form. *

* It is useful, for example, during the validation of artifacts: * Skip the time-consuming ones if those were already validated during the * serialization process. * * @return {@code true} if this model was loaded from a serialized form, {@code false} otherwise. */ boolean isLoadedFromSerialized(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_model_Artifa0100644 0000000 0000000 00000000157 14523004075 032575 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/ArtifactSerializer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/ArtifactSerializer.jav0100644 0000000 0000000 00000003472 14523004075 034171 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.model; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * Responsible to create an artifact from an {@link InputStream}. */ public interface ArtifactSerializer { /** * Creates an artifact from the provided {@link InputStream}. *

* Note: The {@link InputStream} remains open. * * @param in A valid, open {@link InputStream} ready to read from. * @return A valid {@link T artifact}. * * @throws IOException Thrown if IO errors occurred during creation. */ T create(InputStream in) throws IOException; /** * Serializes an artifact to the provided {@link OutputStream}. *

* Note: The {@link OutputStream} remains open. * * @param artifact A valid {@link T artifact}. * @param out A valid, open {@link OutputStream} ready to write to. * * @throws IOException Thrown if IO errors occurred during serialization. */ void serialize(T artifact, OutputStream out) throws IOException; } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/BaseModel.java0100644 0000000 0000000 00000060673 14523004075 032404 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.model; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.io.Serializable; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; import java.util.Properties; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; import opennlp.tools.util.BaseToolFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.Version; import opennlp.tools.util.ext.ExtensionLoader; /** * This is a common base model which can be used by the components' specific * model classes. */ // TODO: Provide subclasses access to serializers already in constructor public abstract class BaseModel implements ArtifactProvider, Serializable { protected static final String MANIFEST_ENTRY = "manifest.properties"; protected static final String FACTORY_NAME = "factory"; private static final String MANIFEST_VERSION_PROPERTY = "Manifest-Version"; private static final String COMPONENT_NAME_PROPERTY = "Component-Name"; private static final String VERSION_PROPERTY = "OpenNLP-Version"; private static final String TIMESTAMP_PROPERTY = "Timestamp"; private static final String LANGUAGE_PROPERTY = "Language"; public static final String TRAINING_CUTOFF_PROPERTY = "Training-Cutoff"; public static final String TRAINING_ITERATIONS_PROPERTY = "Training-Iterations"; public static final String TRAINING_EVENTHASH_PROPERTY = "Training-Eventhash"; private static final String SERIALIZER_CLASS_NAME_PREFIX = "serializer-class-"; private Map artifactSerializers = new HashMap<>(); protected Map artifactMap = new HashMap<>(); protected BaseToolFactory toolFactory; private String componentName; private boolean subclassSerializersInitiated = false; private boolean finishedLoadingArtifacts = false; private boolean isLoadedFromSerialized; private BaseModel(String componentName, boolean isLoadedFromSerialized) { this.isLoadedFromSerialized = isLoadedFromSerialized; this.componentName = Objects.requireNonNull(componentName, "componentName must not be null!"); } /** * Initializes a {@link BaseModel} instance. The subclass constructor should call the * method {@link #checkArtifactMap()} to check the artifact map is in a valid state. *

* Subclasses will have access to custom artifacts and serializers provided * by the specified {@code factory}. * * @param componentName The component name to create the model for. * @param languageCode The ISO language code to configure. Must not be {@code null}. * @param manifestInfoEntries Mapping for additional information in the manifest. * @param factory The {@link BaseToolFactory factory} to use. */ protected BaseModel(String componentName, String languageCode, Map manifestInfoEntries, BaseToolFactory factory) { this(componentName, false); Objects.requireNonNull(languageCode, "languageCode must not be null"); createBaseArtifactSerializers(artifactSerializers); Properties manifest = new Properties(); manifest.setProperty(MANIFEST_VERSION_PROPERTY, "1.0"); manifest.setProperty(LANGUAGE_PROPERTY, languageCode); manifest.setProperty(VERSION_PROPERTY, Version.currentVersion().toString()); manifest.setProperty(TIMESTAMP_PROPERTY, Long.toString(System.currentTimeMillis())); manifest.setProperty(COMPONENT_NAME_PROPERTY, componentName); if (manifestInfoEntries != null) { for (Map.Entry entry : manifestInfoEntries.entrySet()) { manifest.setProperty(entry.getKey(), entry.getValue()); } } artifactMap.put(MANIFEST_ENTRY, manifest); finishedLoadingArtifacts = true; if (factory != null) { setManifestProperty(FACTORY_NAME, factory.getClass().getCanonicalName()); artifactMap.putAll(factory.createArtifactMap()); // new manifest entries Map entries = factory.createManifestEntries(); for (Entry entry : entries.entrySet()) { setManifestProperty(entry.getKey(), entry.getValue()); } } try { initializeFactory(); } catch (InvalidFormatException e) { throw new IllegalArgumentException("Could not initialize tool factory. ", e); } loadArtifactSerializers(); } /** * Initializes a {@link BaseModel} instance. The subclass constructor should call the * method {@link #checkArtifactMap()} to check the artifact map is in a valid state. * * @param componentName The component name to create the model for. * @param languageCode The ISO language code to configure. Must not be {@code null}. * @param manifestInfoEntries Mapping for additional information in the manifest. */ protected BaseModel(String componentName, String languageCode, Map manifestInfoEntries) { this(componentName, languageCode, manifestInfoEntries, null); } /** * Initializes a {@link BaseModel} instance. The subclass constructor should call the * method {@link #checkArtifactMap()} to check the artifact map is in a valid state. * * @param componentName The component name to create the model for. * @param in A valid, open {@link InputStream} to read the model from. * * @throws IOException Thrown if IO errors occurred. */ protected BaseModel(String componentName, InputStream in) throws IOException { this(componentName, true); loadModel(in); } /** * Initializes a {@link BaseModel} instance. The subclass constructor should call the * method {@link #checkArtifactMap()} to check the artifact map is in a valid state. * * @param componentName The component name to create the model for. * @param modelFile A valid, accessible {@link File} to read the model from. * * @throws IOException Thrown if IO errors occurred. */ protected BaseModel(String componentName, File modelFile) throws IOException { this(componentName, true); try (InputStream in = new BufferedInputStream(new FileInputStream(modelFile))) { loadModel(in); } } /** * Initializes a {@link BaseModel} instance. The subclass constructor should call the * method {@link #checkArtifactMap()} to check the artifact map is in a valid state. * * @param componentName The component name to create the model for. * @param modelPath A valid, accessible {@link Path} to read the model from. * * @throws IOException Thrown if IO errors occurred. */ protected BaseModel(String componentName, Path modelPath) throws IOException { this(componentName, true); try (InputStream in = Files.newInputStream(modelPath)) { loadModel(in); } } /** * Initializes a {@link BaseModel} instance. The subclass constructor should call the * method {@link #checkArtifactMap()} to check the artifact map is in a valid state. * * @param componentName The component name to create the model for. * @param modelURL A valid, accessible {@link URL} to read the model from. * * @throws IOException Thrown if IO errors occurred. */ protected BaseModel(String componentName, URL modelURL) throws IOException { this(componentName, true); try (InputStream in = new BufferedInputStream(modelURL.openStream())) { loadModel(in); } } private void loadModel(InputStream in) throws IOException { Objects.requireNonNull(in, "in must not be null"); createBaseArtifactSerializers(artifactSerializers); if (!in.markSupported()) { in = new BufferedInputStream(in); } // TODO: Discuss this solution, the buffering should int MODEL_BUFFER_SIZE_LIMIT = Integer.MAX_VALUE; in.mark(MODEL_BUFFER_SIZE_LIMIT); final ZipInputStream zip = new ZipInputStream(in); // The model package can contain artifacts which are serialized with 3rd party // serializers which are configured in the manifest file. To be able to load // the model the manifest must be read first, and afterwards all the artifacts // can be de-serialized. // The ordering of artifacts in a zip package is not guaranteed. The stream is first // read until the manifest appears, reseted, and read again to load all artifacts. boolean isSearchingForManifest = true; ZipEntry entry; while ((entry = zip.getNextEntry()) != null && isSearchingForManifest) { if ("manifest.properties".equals(entry.getName())) { // TODO: Probably better to use the serializer here directly! ArtifactSerializer factory = artifactSerializers.get("properties"); artifactMap.put(entry.getName(), factory.create(zip)); isSearchingForManifest = false; } zip.closeEntry(); } initializeFactory(); loadArtifactSerializers(); // The Input Stream should always be reset-able because if markSupport returns // false it is wrapped before hand into an Buffered InputStream in.reset(); finishLoadingArtifacts(in); checkArtifactMap(); } private void initializeFactory() throws InvalidFormatException { String factoryName = getManifestProperty(FACTORY_NAME); if (factoryName == null) { // load the default factory Class factoryClass = getDefaultFactory(); if (factoryClass != null) { this.toolFactory = BaseToolFactory.create(factoryClass, this); } } else { try { this.toolFactory = BaseToolFactory.create(factoryName, this); } catch (InvalidFormatException e) { throw new IllegalArgumentException(e); } } } /** * Subclasses should override this method if their module has a default * {@link BaseToolFactory} subclass. * * @return The default {@link BaseToolFactory} for the component, or {@code null} if none. */ protected Class getDefaultFactory() { return null; } /** * Loads the {@link ArtifactSerializer artifact serializers}. */ private void loadArtifactSerializers() { if (!subclassSerializersInitiated) createArtifactSerializers(artifactSerializers); subclassSerializersInitiated = true; } /** * Finishes loading the artifacts now that it knows all serializers. */ private void finishLoadingArtifacts(InputStream in) throws IOException { try (final ZipInputStream zip = new ZipInputStream(in)) { Map artifactMap = new HashMap<>(); ZipEntry entry; while ((entry = zip.getNextEntry()) != null ) { // Note: The manifest.properties file will be read here again, // there should be no need to prevent that. String entryName = entry.getName(); String extension = getEntryExtension(entryName); ArtifactSerializer factory = artifactSerializers.get(extension); String artifactSerializerClazzName = getManifestProperty(SERIALIZER_CLASS_NAME_PREFIX + entryName); if (artifactSerializerClazzName != null) { factory = ExtensionLoader.instantiateExtension( ArtifactSerializer.class, artifactSerializerClazzName); } if (factory != null) { artifactMap.put(entryName, factory.create(zip)); } else { throw new InvalidFormatException("Unknown artifact format: " + extension); } zip.closeEntry(); } this.artifactMap.putAll(artifactMap); finishedLoadingArtifacts = true; } } /** * Extracts the "." extension from an entry name. * * @param entry The entry name which contains the extension * * @return The extension. * * @throws InvalidFormatException Thrown if no extension can be extracted */ private String getEntryExtension(String entry) throws InvalidFormatException { int extensionIndex = entry.lastIndexOf('.') + 1; if (extensionIndex >= entry.length()) throw new InvalidFormatException("Entry name must have type extension: " + entry); return entry.substring(extensionIndex); } /** * @param resourceName The identifying name of a resource to retrieve an * {link ArtifactSerializer} for. * @return Retrieves an {@link ArtifactSerializer artifact serialize}. */ protected ArtifactSerializer getArtifactSerializer(String resourceName) { try { return artifactSerializers.get(getEntryExtension(resourceName)); } catch (InvalidFormatException e) { throw new IllegalStateException(e); } } /** * Creates and registers default {@link ArtifactSerializer artifact serializes}. * * @return A {@link Map} with all registered {@link ArtifactSerializer artifact serializes}. */ protected static Map> createArtifactSerializers() { Map> serializers = new HashMap<>(); GenericModelSerializer.register(serializers); PropertiesSerializer.register(serializers); DictionarySerializer.register(serializers); serializers.put("txt", new ByteArraySerializer()); serializers.put("html", new ByteArraySerializer()); return serializers; } /** * Registers all {@link ArtifactSerializer} for their artifact file name extensions. * The registered {@link ArtifactSerializer serializers} are used to * create and serialize resources in the model package. *

* Override this method to register custom {@link ArtifactSerializer serializers}. *

* Note: * Subclasses should generally invoke {@code super.createArtifactSerializers} * at the beginning of this method. *

* This method is called during construction. * * @param serializers The key of the map is the file extension used to look up * an {@link ArtifactSerializer}. */ protected void createArtifactSerializers(Map serializers) { if (this.toolFactory != null) serializers.putAll(this.toolFactory.createArtifactSerializersMap()); } private void createBaseArtifactSerializers(Map serializers) { serializers.putAll(createArtifactSerializers()); } /** * Validates the parsed artifacts. If something is not * valid, subclasses should throw an {@link InvalidFormatException}. * *

* Note: * Subclasses should generally invoke {@code super.validateArtifactMap} * at the beginning of this method. * * @throws InvalidFormatException Thrown if artifacts were found to be inconsistent. */ protected void validateArtifactMap() throws InvalidFormatException { if (!(artifactMap.get(MANIFEST_ENTRY) instanceof Properties)) throw new InvalidFormatException("Missing the " + MANIFEST_ENTRY + "!"); // First check version, everything else might change in the future String versionString = getManifestProperty(VERSION_PROPERTY); if (versionString != null) { Version version; try { version = Version.parse(versionString); } catch (NumberFormatException e) { throw new InvalidFormatException("Unable to parse model version '" + versionString + "'!", e); } // Version check is only performed if current version is not the dev/debug version if (!Version.currentVersion().equals(Version.DEV_VERSION)) { // Support OpenNLP 1.x models. if (version.getMajor() != 1 && version.getMajor() != 2) { throw new InvalidFormatException("Model version " + version + " is not supported by this (" + Version.currentVersion() + ") version of OpenNLP!"); } // Reject loading a snapshot model with a non-snapshot version if (!Version.currentVersion().isSnapshot() && version.isSnapshot()) { throw new InvalidFormatException("Model version " + version + " is a snapshot - snapshot models are not supported by this non-snapshot version (" + Version.currentVersion() + ") of OpenNLP!"); } } } else { throw new InvalidFormatException("Missing " + VERSION_PROPERTY + " property in " + MANIFEST_ENTRY + "!"); } if (getManifestProperty(COMPONENT_NAME_PROPERTY) == null) throw new InvalidFormatException("Missing " + COMPONENT_NAME_PROPERTY + " property in " + MANIFEST_ENTRY + "!"); if (!getManifestProperty(COMPONENT_NAME_PROPERTY).equals(componentName)) throw new InvalidFormatException("The " + componentName + " cannot load a model for the " + getManifestProperty(COMPONENT_NAME_PROPERTY) + "!"); if (getManifestProperty(LANGUAGE_PROPERTY) == null) throw new InvalidFormatException("Missing " + LANGUAGE_PROPERTY + " property in " + MANIFEST_ENTRY + "!"); // Validate the factory. We try to load it using the ExtensionLoader. It // will return the factory, null or raise an exception String factoryName = getManifestProperty(FACTORY_NAME); if (factoryName != null) { try { if (ExtensionLoader.instantiateExtension(BaseToolFactory.class, factoryName) == null) { throw new InvalidFormatException( "Could not load an user extension specified by the model: " + factoryName); } } catch (Exception e) { throw new InvalidFormatException( "Could not load an user extension specified by the model: " + factoryName, e); } } // validate artifacts declared by the factory if (toolFactory != null) { toolFactory.validateArtifactMap(); } } /** * Checks the artifact map. *

* A subclass should call this method from a constructor which accepts the individual * artifact map items, to validate that these items form a valid model. *

* * @throws IllegalArgumentException Thrown if the artifacts are not valid. * @throws IllegalStateException Thrown if {@link BaseModel#finishLoadingArtifacts(InputStream)} was * not called by a subclass. */ protected void checkArtifactMap() { if (!finishedLoadingArtifacts) throw new IllegalStateException( "The method BaseModel.finishLoadingArtifacts(..) was not called by BaseModel subclass."); try { validateArtifactMap(); } catch (InvalidFormatException e) { throw new IllegalArgumentException(e); } } @Override public final String getManifestProperty(String key) { Properties manifest = (Properties) artifactMap.get(MANIFEST_ENTRY); return manifest.getProperty(key); } /** * Sets a given value for a given key to the {@code manifest.properties} mapping. * * @param key The identifying key. * @param value The value to set at {@code key}. */ protected final void setManifestProperty(String key, String value) { Properties manifest = (Properties) artifactMap.get(MANIFEST_ENTRY); manifest.setProperty(key, value); } @Override public final String getLanguage() { return getManifestProperty(LANGUAGE_PROPERTY); } /** * @return Retrieves the OpenNLP {@link Version} which was used to create the model. */ public final Version getVersion() { String version = getManifestProperty(VERSION_PROPERTY); return Version.parse(version); } /** * Serializes the model to the given {@link OutputStream}. * * @param out The {@link OutputStream} to write the model to. * * @throws IOException Thrown if IO errors occurred. * @throws IllegalStateException Thrown if {@link BaseModel#loadArtifactSerializers()} was * not called in a subclass constructor. */ @SuppressWarnings("unchecked") public final void serialize(OutputStream out) throws IOException { if (!subclassSerializersInitiated) { throw new IllegalStateException( "The method BaseModel.loadArtifactSerializers() was not called by BaseModel subclass constructor."); } for (Entry entry : artifactMap.entrySet()) { final String name = entry.getKey(); final Object artifact = entry.getValue(); if (artifact instanceof SerializableArtifact serializableArtifact) { String artifactSerializerName = serializableArtifact .getArtifactSerializerClass().getName(); setManifestProperty(SERIALIZER_CLASS_NAME_PREFIX + name, artifactSerializerName); } } ZipOutputStream zip = new ZipOutputStream(out); for (Entry entry : artifactMap.entrySet()) { String name = entry.getKey(); zip.putNextEntry(new ZipEntry(name)); Object artifact = entry.getValue(); if (skipEntryForSerialization(entry)) { continue; } ArtifactSerializer serializer = getArtifactSerializer(name); // If model is serialize-able always use the provided serializer if (artifact instanceof SerializableArtifact serializableArtifact) { String artifactSerializerName = serializableArtifact.getArtifactSerializerClass().getName(); serializer = ExtensionLoader.instantiateExtension(ArtifactSerializer.class, artifactSerializerName); } if (serializer == null) { throw new IllegalStateException("Missing serializer for " + name); } serializer.serialize(artifactMap.get(name), zip); zip.closeEntry(); } zip.finish(); zip.flush(); } /** * Serializes the model to the specified {@link File}. * * @param f The write-accessible {@link File} to write the model to. * * @throws IOException Thrown if IO errors occurred. * @throws IllegalStateException Thrown if {@link BaseModel#loadArtifactSerializers()} was * not called in a subclass constructor. */ public final void serialize(File f) throws IOException { try (OutputStream out = new BufferedOutputStream(new FileOutputStream(f))) { serialize(out); } } /** * Serializes the model to the specified {@link Path}. * * @param p The write-accessible {@link Path} to write the model to. * * @throws IOException Thrown if IO errors occurred. * @throws IllegalStateException Thrown if {@link BaseModel#loadArtifactSerializers()} was * not called in a subclass constructor. */ public final void serialize(Path p) throws IOException { serialize(p.toFile()); } @Override @SuppressWarnings("unchecked") public T getArtifact(String key) { Object artifact = artifactMap.get(key); if (artifact == null) return null; return (T) artifact; } @Override public boolean isLoadedFromSerialized() { return isLoadedFromSerialized; } // These methods are required to serialize/deserialize the model because // many of the included objects in this model are not Serializable. // An alternative to this solution is to make all included objects // Serializable and remove the writeObject and readObject methods. // This will allow the usage of final for fields that should not change. private void writeObject(ObjectOutputStream out) throws IOException { out.writeUTF(componentName); this.serialize(out); } private void readObject(final ObjectInputStream in) throws IOException { isLoadedFromSerialized = true; artifactSerializers = new HashMap<>(); artifactMap = new HashMap<>(); componentName = in.readUTF(); this.loadModel(in); } /** * @param entry the entry to check * @return {@code true}, if the given entry should be skipped for serialization. */ protected boolean skipEntryForSerialization(Entry entry) { return false; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_model_ByteAr0100644 0000000 0000000 00000000160 14523004075 032547 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/ByteArraySerializer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/ByteArraySerializer.ja0100644 0000000 0000000 00000002455 14523004075 034150 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.model; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * An {@link ArtifactSerializer} implementation for binary data, kept in {@code byte[]}. */ public class ByteArraySerializer implements ArtifactSerializer { @Override public byte[] create(InputStream in) throws IOException { return ModelUtil.read(in); } @Override public void serialize(byte[] artifact, OutputStream out) throws IOException { out.write(artifact); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_model_Chunke0100644 0000000 0000000 00000000163 14523004075 032601 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/ChunkerModelSerializer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/ChunkerModelSerializer0100644 0000000 0000000 00000003336 14523004075 034234 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.model; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import opennlp.tools.chunker.ChunkerModel; import opennlp.tools.parser.ParserChunkerFactory; import opennlp.tools.util.Version; /** * An {@link ArtifactSerializer} implementation for {@link ChunkerModel models}. */ public class ChunkerModelSerializer implements ArtifactSerializer { @Override public ChunkerModel create(InputStream in) throws IOException { ChunkerModel model = new ChunkerModel(new UncloseableInputStream(in)); Version version = model.getVersion(); if (version.getMajor() == 1 && version.getMinor() == 5) { model = new ChunkerModel(model.getLanguage(), model.getChunkerModel(), new ParserChunkerFactory()); } return model; } @Override public void serialize(ChunkerModel artifact, OutputStream out) throws IOException { artifact.serialize(out); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_model_Dictio0100644 0000000 0000000 00000000161 14523004075 032575 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/DictionarySerializer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/DictionarySerializer.j0100644 0000000 0000000 00000003311 14523004075 034202 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.model; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Map; import opennlp.tools.dictionary.Dictionary; /** * An {@link ArtifactSerializer} implementation for {@link Dictionary dictionaries}. */ public class DictionarySerializer implements ArtifactSerializer { @Override public Dictionary create(InputStream in) throws IOException { return new Dictionary(in); } @Override public void serialize(Dictionary dictionary, OutputStream out) throws IOException { dictionary.serialize(out); } /** * Registers a new {@link DictionarySerializer} in the given {@code factories} mapping. * * @param factories A {@link Map} holding {@link ArtifactSerializer} for re-use. */ static void register(Map> factories) { factories.put("dictionary", new DictionarySerializer()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_model_Generi0100644 0000000 0000000 00000000163 14523004075 032575 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/GenericModelSerializer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/GenericModelSerializer0100644 0000000 0000000 00000003562 14523004075 034212 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.model; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Map; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.BinaryFileDataReader; import opennlp.tools.ml.model.GenericModelReader; /** * An {@link ArtifactSerializer} implementation for {@link AbstractModel models}. */ public class GenericModelSerializer implements ArtifactSerializer { @Override public AbstractModel create(InputStream in) throws IOException { return new GenericModelReader(new BinaryFileDataReader(in)).getModel(); } @Override public void serialize(AbstractModel artifact, OutputStream out) throws IOException { ModelUtil.writeModel(artifact, out); } /** * Registers a new {@link GenericModelSerializer} in the given {@code factories} mapping. * * @param factories A {@link Map} holding {@link ArtifactSerializer} for re-use. */ public static void register(Map> factories) { factories.put("model", new GenericModelSerializer()); } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/ModelType.java0100644 0000000 0000000 00000001676 14523004075 032451 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.model; /** * Enumeration of supported model types. */ public enum ModelType { MAXENT, PERCEPTRON, PERCEPTRON_SEQUENCE } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/ModelUtil.java0100644 0000000 0000000 00000012413 14523004075 032434 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.model; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Arrays; import java.util.HashSet; import java.util.Map; import java.util.Objects; import java.util.Set; import opennlp.tools.commons.Internal; import opennlp.tools.ml.maxent.GISTrainer; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.GenericModelWriter; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.util.TrainingParameters; /** * Utility class for handling of {@link MaxentModel models}. */ public final class ModelUtil { private ModelUtil() { // not intended to be instantiated } /** * Writes the given {@link MaxentModel} to the specified {@link OutputStream}. *

* Note: * The provided stream is not closed. * * @param model The {@link MaxentModel model} to be written. * @param out the {@link OutputStream stream} to be used for writing. * * @throws IOException Thrown if IO errors occurred. * @throws IllegalArgumentException Thrown if one of the parameters is {@code null}. */ public static void writeModel(MaxentModel model, final OutputStream out) throws IOException, IllegalArgumentException { Objects.requireNonNull(model, "model parameter must not be null"); Objects.requireNonNull(out, "out parameter must not be null"); GenericModelWriter modelWriter = new GenericModelWriter((AbstractModel) model, new DataOutputStream(new OutputStream() { @Override public void write(int b) throws IOException { out.write(b); } })); modelWriter.persist(); } /** * Checks if the {@code expectedOutcomes} are all contained as outcomes in the * given {@link MaxentModel model}. * * @param model A valid {@link MaxentModel} instance. * @param expectedOutcomes The outcomes to be checked for. * * @return {@code true} if all expected outcomes are the only outcomes of the model * {@code false} otherwise. */ public static boolean validateOutcomes(MaxentModel model, String... expectedOutcomes) { boolean result = true; if (expectedOutcomes.length == model.getNumOutcomes()) { Set expectedOutcomesSet = new HashSet<>(Arrays.asList(expectedOutcomes)); for (int i = 0; i < model.getNumOutcomes(); i++) { if (!expectedOutcomesSet.contains(model.getOutcome(i))) { result = false; break; } } } else { result = false; } return result; } /** * Reads from the provided {@link InputStream} into a byte array. * * @param in A valid, open {@link InputStream} to read data from. * * @return A {@code byte[]} with the data read. * * @throws IOException Thrown if IO errors occurred. */ public static byte[] read(InputStream in) throws IOException { ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); int length; byte[] buffer = new byte[1024]; while ((length = in.read(buffer)) > 0) { byteArrayOut.write(buffer, 0, length); } byteArrayOut.close(); return byteArrayOut.toByteArray(); } /** * Adds {@code cutoff} and {@code iterations} to {@code manifestInfoEntries}. * * @param manifestInfoEntries A {@link Map} representing a {@code manifest.properties} config. * @param cutoff The cut-off value to set. Must be greater than {@code 0}. * @param iterations The number of iterations to set. Must be greater than {@code 0}. */ public static void addCutoffAndIterations(Map manifestInfoEntries, int cutoff, int iterations) { manifestInfoEntries.put(BaseModel.TRAINING_CUTOFF_PROPERTY, Integer.toString(cutoff)); manifestInfoEntries.put(BaseModel.TRAINING_ITERATIONS_PROPERTY, Integer.toString(iterations)); } /** * Creates the default {@link TrainingParameters} in case they are not provided. *

* Note: * Do not use this method, internal use only! * * @return The {@link TrainingParameters} instance with default configuration. */ @Internal public static TrainingParameters createDefaultTrainingParameters() { TrainingParameters mlParams = new TrainingParameters(); mlParams.put(TrainingParameters.ALGORITHM_PARAM, GISTrainer.MAXENT_VALUE); mlParams.put(TrainingParameters.ITERATIONS_PARAM, 100); mlParams.put(TrainingParameters.CUTOFF_PARAM, 5); return mlParams; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_model_POSMod0100644 0000000 0000000 00000000157 14523004075 032470 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/POSModelSerializer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/POSModelSerializer.jav0100644 0000000 0000000 00000004473 14523004075 034060 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.model; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; import opennlp.tools.ml.BeamSearch; import opennlp.tools.postag.POSModel; import opennlp.tools.util.Version; /** * An {@link ArtifactSerializer} implementation for {@link POSModel models}. */ public class POSModelSerializer implements ArtifactSerializer { @Override public POSModel create(InputStream in) throws IOException { POSModel posModel = new POSModel(new UncloseableInputStream(in)); // The 1.6.x models write the non-default beam size into the model itself. // In 1.5.x the parser configured the beam size when the model was loaded, // this is not possible anymore with the new APIs Version version = posModel.getVersion(); if (version.getMajor() == 1 && version.getMinor() == 5) { if (posModel.getManifestProperty(BeamSearch.BEAM_SIZE_PARAMETER) == null) { Map manifestInfoEntries = new HashMap<>(); // The version in the model must be correct or otherwise version // dependent code branches in other places fail manifestInfoEntries.put("OpenNLP-Version", "1.5.0"); posModel = new POSModel(posModel.getLanguage(), posModel.getPosModel(), 10, manifestInfoEntries, posModel.getFactory()); } } return posModel; } @Override public void serialize(POSModel artifact, OutputStream out) throws IOException { artifact.serialize(out); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_model_Proper0100644 0000000 0000000 00000000161 14523004075 032631 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/PropertiesSerializer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/PropertiesSerializer.j0100644 0000000 0000000 00000003357 14523004075 034243 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.model; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Map; import java.util.Properties; /** * An {@link ArtifactSerializer} implementation for {@link Properties properties}. */ class PropertiesSerializer implements ArtifactSerializer { @Override public Properties create(InputStream in) throws IOException { Properties properties = new Properties(); properties.load(in); return properties; } @Override public void serialize(Properties properties, OutputStream out) throws IOException { properties.store(out, ""); } /** * Registers a new {@link PropertiesSerializer} in the given {@code factories} mapping. * * @param factories A {@link Map} holding {@link ArtifactSerializer} for re-use. */ static void register(Map> factories) { factories.put("properties", new PropertiesSerializer()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_model_Serial0100644 0000000 0000000 00000000161 14523004075 032601 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/SerializableArtifact.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/SerializableArtifact.j0100644 0000000 0000000 00000002551 14523004075 034134 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.model; /** * A marker interface so that implementing classes can refer to * the corresponding {@link ArtifactSerializer} implementation. */ public interface SerializableArtifact { /** * Retrieves the class which can serialize and recreate this artifact. *

* Note: * The serializer class must have a {@code public zero argument constructor} * or an exception is thrown during model serialization/loading. * * @return The corresponding {@link ArtifactSerializer} class. */ Class getArtifactSerializerClass(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_model_Unclos0100644 0000000 0000000 00000000163 14523004075 032627 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/UncloseableInputStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/model/UncloseableInputStream0100644 0000000 0000000 00000002410 14523004075 034242 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.model; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; /** * An {@link InputStream} which cannot be closed. */ public class UncloseableInputStream extends FilterInputStream { public UncloseableInputStream(InputStream in) { super(in); } /** * This method does not have any effect, as the {@link InputStream} * cannot be closed. */ @Override public void close() throws IOException { } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_normalizer_A0100644 0000000 0000000 00000000201 14523004075 032617 xustar000000000 0000000 129 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/normalizer/AggregateCharSequenceNormalizer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/normalizer/AggregateCharSequ0100644 0000000 0000000 00000002724 14523004075 034226 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.normalizer; /** * A {@link CharSequenceNormalizer} implementation that aggregates the * functionality of other normalizers. */ public class AggregateCharSequenceNormalizer implements CharSequenceNormalizer { private static final long serialVersionUID = 5514902020184083235L; private final CharSequenceNormalizer[] normalizers; public AggregateCharSequenceNormalizer(CharSequenceNormalizer ... normalizers) { this.normalizers = normalizers; } @Override public CharSequence normalize (CharSequence text) { for (CharSequenceNormalizer normalizers : normalizers) { text = normalizers.normalize(text); } return text; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_normalizer_C0100644 0000000 0000000 00000000170 14523004075 032626 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/normalizer/CharSequenceNormalizer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/normalizer/CharSequenceNorma0100644 0000000 0000000 00000002541 14523004075 034244 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.normalizer; import java.io.Serializable; /** * A char sequence normalizer, used to adjusting (prune, substitute, add, etc.) * characters in order to remove noise from text * * @see Text normalization */ public interface CharSequenceNormalizer extends Serializable { /** * Normalizes a sequence of characters. * * @param text The {@link CharSequence} to normalize. * @return The normalized {@link CharSequence}. */ CharSequence normalize(CharSequence text); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_normalizer_E0100644 0000000 0000000 00000000175 14523004075 032635 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/normalizer/EmojiCharSequenceNormalizer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/normalizer/EmojiCharSequence0100644 0000000 0000000 00000003076 14523004075 034237 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.normalizer; import java.util.regex.Pattern; /** * A {@link EmojiCharSequenceNormalizer} implementation that normalizes text * in terms of emojis. Every encounter will be replaced by a whitespace. */ public class EmojiCharSequenceNormalizer implements CharSequenceNormalizer { private static final long serialVersionUID = 4553401197981667914L; private static final EmojiCharSequenceNormalizer INSTANCE = new EmojiCharSequenceNormalizer(); public static EmojiCharSequenceNormalizer getInstance() { return INSTANCE; } private static final Pattern EMOJI_REGEX = Pattern.compile("[\\uD83C-\\uDBFF\\uDC00-\\uDFFF]+"); @Override public CharSequence normalize (CharSequence text) { return EMOJI_REGEX.matcher(text).replaceAll(" "); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_normalizer_N0100644 0000000 0000000 00000000176 14523004075 032647 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/normalizer/NumberCharSequenceNormalizer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/normalizer/NumberCharSequenc0100644 0000000 0000000 00000003043 14523004075 034251 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.normalizer; import java.util.regex.Pattern; /** * A {@link NumberCharSequenceNormalizer} implementation that normalizes text * in terms of numbers. Every encounter will be replaced by a whitespace. */ public class NumberCharSequenceNormalizer implements CharSequenceNormalizer { private static final long serialVersionUID = -782056416383201122L; private static final Pattern NUMBER_REGEX = Pattern.compile("\\d+"); private static final NumberCharSequenceNormalizer INSTANCE = new NumberCharSequenceNormalizer(); public static NumberCharSequenceNormalizer getInstance() { return INSTANCE; } @Override public CharSequence normalize (CharSequence text) { return NUMBER_REGEX.matcher(text).replaceAll(" "); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_normalizer_S0100644 0000000 0000000 00000000176 14523004075 032654 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/normalizer/ShrinkCharSequenceNormalizer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/normalizer/ShrinkCharSequenc0100644 0000000 0000000 00000003302 14523004075 034255 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.normalizer; import java.util.regex.Pattern; /** * A {@link ShrinkCharSequenceNormalizer} implementation that shrinks repeated spaces / chars in text. */ public class ShrinkCharSequenceNormalizer implements CharSequenceNormalizer { private static final long serialVersionUID = -4511969661556543048L; private static final Pattern REPEATED_CHAR_REGEX = Pattern.compile("(.)\\1{2,}", Pattern.CASE_INSENSITIVE); private static final Pattern SPACE_REGEX = Pattern.compile("\\s{2,}", Pattern.CASE_INSENSITIVE); private static final ShrinkCharSequenceNormalizer INSTANCE = new ShrinkCharSequenceNormalizer(); public static ShrinkCharSequenceNormalizer getInstance() { return INSTANCE; } public CharSequence normalize (CharSequence text) { text = SPACE_REGEX.matcher(text).replaceAll(" "); return REPEATED_CHAR_REGEX.matcher(text).replaceAll("$1$1").trim(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_normalizer_T0100644 0000000 0000000 00000000177 14523004075 032656 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/normalizer/TwitterCharSequenceNormalizer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/normalizer/TwitterCharSequen0100644 0000000 0000000 00000004204 14523004075 034320 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.normalizer; import java.util.regex.Pattern; /** * A {@link TwitterCharSequenceNormalizer} implementation that normalizes text * in terms of Twitter character patterns. Every encounter will be replaced by a whitespace. */ public class TwitterCharSequenceNormalizer implements CharSequenceNormalizer { private static final long serialVersionUID = -8155452559337913929L; private static final Pattern HASH_USER_REGEX = Pattern.compile("[#@]\\S+"); private static final Pattern RT_REGEX = Pattern.compile("\\b(rt[ :])+", Pattern.CASE_INSENSITIVE); private static final Pattern FACE_REGEX = Pattern.compile("[:;x]-?[()dop]", Pattern.CASE_INSENSITIVE); private static final Pattern LAUGH_REGEX = Pattern.compile("([hj])+([aieou])+(\\1+\\2+)+", Pattern.CASE_INSENSITIVE); private static final TwitterCharSequenceNormalizer INSTANCE = new TwitterCharSequenceNormalizer(); public static TwitterCharSequenceNormalizer getInstance() { return INSTANCE; } @Override public CharSequence normalize (CharSequence text) { String modified = HASH_USER_REGEX.matcher(text).replaceAll(" "); modified = RT_REGEX.matcher(modified).replaceAll(" "); modified = FACE_REGEX.matcher(modified).replaceAll(" "); modified = LAUGH_REGEX.matcher(modified).replaceAll("$1$2$1$2"); return modified; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_normalizer_U0100644 0000000 0000000 00000000173 14523004075 032653 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/normalizer/UrlCharSequenceNormalizer.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/normalizer/UrlCharSequenceNo0100644 0000000 0000000 00000003411 14523004075 034224 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.normalizer; import java.util.regex.Pattern; /** * A {@link UrlCharSequenceNormalizer} implementation that normalizes text * in terms of URls and email addresses. Every encounter will be replaced by a whitespace. */ public class UrlCharSequenceNormalizer implements CharSequenceNormalizer { private static final long serialVersionUID = 2023145028634552389L; private static final Pattern URL_REGEX = Pattern.compile("https?://[-_.?&~;+=/#0-9A-Za-z]+"); private static final Pattern MAIL_REGEX = Pattern.compile("(? web site. *

* Warning: Experimental new feature, see OPENNLP-1144 for details, the API might be changed anytime. */ @Experimental public class Glove { private Glove() { } /** * Parses a glove vector plain text file. *

* @param in A valid, open {@link InputStream} to Glove vectors from. * @return A Glove based {@link WordVectorTable}, guaranteed to be non {@code null}. * @throws IOException if any error occurs during parsing */ @Experimental public static WordVectorTable parse(InputStream in) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8), 1024 * 1024); Map vectors = new HashMap<>(); int dimension = -1; String line; while ((line = reader.readLine()) != null) { String[] parts = line.split(" "); if (dimension == -1) { dimension = parts.length - 1; } else if (dimension != parts.length - 1) { throw new IOException("Vector dimension must be constant!"); } String token = parts[0]; float[] vector = new float[dimension]; for (int i = 0; i < vector.length; i++) { vector[i] = Float.parseFloat(parts[i + 1]); } vectors.put(token, new FloatArrayVector(vector)); } return new MapWordVectorTable(Collections.unmodifiableMap(vectors)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_wordvector_M0100644 0000000 0000000 00000000164 14523004075 032657 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/wordvector/MapWordVectorTable.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/wordvector/MapWordVectorTabl0100644 0000000 0000000 00000003222 14523004075 034251 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.wordvector; import java.util.Iterator; import java.util.Map; /** * A {@link WordVectorTable} implementation that maps tokens to * {@link WordVector word vectors} via a {@link Map}. * * @see WordVector * @see WordVectorTable */ class MapWordVectorTable implements WordVectorTable { private final Map vectors; MapWordVectorTable(Map vectors) { this.vectors = vectors; } @Override public WordVector get(String token) { return vectors.get(token); } @Override public Iterator tokens() { return vectors.keySet().iterator(); } @Override public int size() { return vectors.size(); } @Override public int dimension() { if (vectors.size() > 0) { return vectors.values().iterator().next().dimension(); } else { return -1; } } } apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/wordvector/WordVector.java0100644 0000000 0000000 00000002442 14523004075 033733 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.wordvector; import java.nio.DoubleBuffer; import java.nio.FloatBuffer; import opennlp.tools.util.java.Experimental; /** * A word vector. * *

* Warning: Experimental new feature, see OPENNLP-1144 for details, the API might be changed anytime. */ @Experimental public interface WordVector { WordVectorType getDataType(); float getAsFloat(int index); double getAsDouble(int index); FloatBuffer toFloatBuffer(); DoubleBuffer toDoubleBuffer(); int dimension(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_wordvector_W0100644 0000000 0000000 00000000161 14523004075 032666 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/wordvector/WordVectorTable.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/wordvector/WordVectorTable.j0100644 0000000 0000000 00000002316 14523004075 034213 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.wordvector; import java.util.Iterator; import opennlp.tools.util.java.Experimental; /** * A table that maps tokens to word vectors. * *

* Warning: Experimental new feature, see OPENNLP-1144 for details, the API might be changed anytime. */ @Experimental public interface WordVectorTable { WordVector get(String token); Iterator tokens(); int size(); int dimension(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_java_opennlp_tools_util_wordvector_W0100644 0000000 0000000 00000000160 14523004075 032665 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/wordvector/WordVectorType.java apache-opennlp-2.3.3-src/opennlp-tools/src/main/java/opennlp/tools/util/wordvector/WordVectorType.ja0100644 0000000 0000000 00000001667 14523004075 034256 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.wordvector; import opennlp.tools.util.java.Experimental; @Experimental public enum WordVectorType { FLOAT, DOUBLE } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_resources_opennlp_tools_namefind_ner0100644 0000000 0000000 00000000163 14523004075 032665 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/resources/opennlp/tools/namefind/ner-default-features.xml apache-opennlp-2.3.3-src/opennlp-tools/src/main/resources/opennlp/tools/namefind/ner-default-feature0100644 0000000 0000000 00000003562 14523004075 034257 0ustar00rootroot0000000 0000000 2 2 2 2 true true false ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_main_resources_opennlp_tools_postag_pos-d0100644 0000000 0000000 00000000161 14523004075 032635 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/main/resources/opennlp/tools/postag/pos-default-features.xml apache-opennlp-2.3.3-src/opennlp-tools/src/main/resources/opennlp/tools/postag/pos-default-features.0100644 0000000 0000000 00000003612 14523004075 034245 0ustar00rootroot0000000 0000000 2 2 2 2 true false apache-opennlp-2.3.3-src/opennlp-tools/src/main/resources/opennlp/tools/util/opennlp.version0100644 0000000 0000000 00000001576 14523004075 032756 0ustar00rootroot0000000 0000000 # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreemnets. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Version is injected by the maven build, fall back version is 0.0.0-SNAPSHOT OpenNLP-Version: ${project.version}apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/AbstractModelLoaderTest.java0100644 0000000 0000000 00000004737 14523004075 033241 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public abstract class AbstractModelLoaderTest { private static final Logger logger = LoggerFactory.getLogger(AbstractModelLoaderTest.class); private static final String BASE_URL_MODELS_V15 = "https://opennlp.sourceforge.net/models-1.5/"; private static final String BASE_URL_MODELS_V183 = "https://dlcdn.apache.org/opennlp/models/langdetect/1.8.3/"; protected static final Path OPENNLP_DIR = Paths.get(System.getProperty("user.home") + "/.opennlp/"); protected static void downloadVersion15Model(String modelName) throws IOException { downloadModel(new URL(BASE_URL_MODELS_V15 + modelName)); } protected static void downloadVersion183Model(String modelName) throws IOException { downloadModel(new URL(BASE_URL_MODELS_V183 + modelName)); } private static void downloadModel(URL url) throws IOException { if (!Files.isDirectory(OPENNLP_DIR)) { OPENNLP_DIR.toFile().mkdir(); } final String filename = url.toString().substring(url.toString().lastIndexOf("/") + 1); final Path localFile = Paths.get(OPENNLP_DIR.toString(), filename); if (!Files.exists(localFile)) { logger.debug("Downloading model from {} to {}.", url, localFile); try (final InputStream in = new BufferedInputStream(url.openStream())) { Files.copy(in, localFile, StandardCopyOption.REPLACE_EXISTING); } logger.debug("Download complete."); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/AbstractTempDirTest.java0100644 0000000 0000000 00000002564 14523004075 032412 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; // TODO: OPENNLP-1430 Remove workaround for @TempDir // after https://github.com/junit-team/junit5/issues/2811 is fixed. public abstract class AbstractTempDirTest { protected Path tempDir; @BeforeEach public void before() throws IOException { tempDir = Files.createTempDirectory(this.getClass().getSimpleName()); } @AfterEach void after() { tempDir.toFile().deleteOnExit(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/EnabledWhenCDNAvailable.java0100644 0000000 0000000 00000005075 14523004075 033024 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools; import java.io.IOException; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.net.InetSocketAddress; import java.net.Socket; import org.junit.jupiter.api.extension.ConditionEvaluationResult; import org.junit.jupiter.api.extension.ExecutionCondition; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtensionContext; import static org.junit.platform.commons.util.AnnotationUtils.findAnnotation; /** * A custom JUnit5 conditional annotation which can be used to enable/disable tests at runtime. */ @Retention(RetentionPolicy.RUNTIME) @ExtendWith(EnabledWhenCDNAvailable.CDNAvailableCondition.class) public @interface EnabledWhenCDNAvailable { String hostname(); int TIMEOUT_MS = 2000; // JUnit5 execution condition to decide whether tests can assume CDN downloads are possible (= online). class CDNAvailableCondition implements ExecutionCondition { @Override public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) { final var optional = findAnnotation(context.getElement(), EnabledWhenCDNAvailable.class); if (optional.isPresent()) { final EnabledWhenCDNAvailable annotation = optional.get(); final String host = annotation.hostname(); try (Socket socket = new Socket()) { socket.connect(new InetSocketAddress(host, 80), TIMEOUT_MS); return ConditionEvaluationResult.enabled("Resouce (CDN) reachable."); } catch (IOException e) { // Unreachable, unresolvable or timeout return ConditionEvaluationResult.disabled("Resouce (CDN) unreachable."); } } return ConditionEvaluationResult.enabled("Nothing annotated with DisabledWhenOffline."); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/HighMemoryUsage.java0100644 0000000 0000000 00000002345 14523004075 031554 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.junit.jupiter.api.Tag; /** * Marker class for tests with heap memory usage above 4 GB. */ @Target( {ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Tag("opennlp.tools.HighMemoryUsage") public @interface HighMemoryUsage { } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_chunker_ChunkSamp0100644 0000000 0000000 00000000157 14523004075 032615 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/chunker/ChunkSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/chunker/ChunkSampleStreamTest.jav0100644 0000000 0000000 00000006316 14523004075 034245 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.MockInputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; public class ChunkSampleStreamTest { @Test void testReadingEvents() throws IOException { String sample = "word11 tag11 pred11" + '\n' + "word12 tag12 pred12" + '\n' + "word13 tag13 pred13" + '\n' + '\n' + "word21 tag21 pred21" + '\n' + "word22 tag22 pred22" + '\n' + "word23 tag23 pred23" + '\n'; // First sample sentence // Start next sample sentence // Second sample sentence ObjectStream stringStream = new PlainTextByLineStream( new MockInputStreamFactory(sample), StandardCharsets.UTF_8); ObjectStream chunkStream = new ChunkSampleStream(stringStream); // read first sample ChunkSample firstSample = chunkStream.read(); Assertions.assertEquals("word11", firstSample.getSentence()[0]); Assertions.assertEquals("tag11", firstSample.getTags()[0]); Assertions.assertEquals("pred11", firstSample.getPreds()[0]); Assertions.assertEquals("word12", firstSample.getSentence()[1]); Assertions.assertEquals("tag12", firstSample.getTags()[1]); Assertions.assertEquals("pred12", firstSample.getPreds()[1]); Assertions.assertEquals("word13", firstSample.getSentence()[2]); Assertions.assertEquals("tag13", firstSample.getTags()[2]); Assertions.assertEquals("pred13", firstSample.getPreds()[2]); // read second sample ChunkSample secondSample = chunkStream.read(); Assertions.assertEquals("word21", secondSample.getSentence()[0]); Assertions.assertEquals("tag21", secondSample.getTags()[0]); Assertions.assertEquals("pred21", secondSample.getPreds()[0]); Assertions.assertEquals("word22", secondSample.getSentence()[1]); Assertions.assertEquals("tag22", secondSample.getTags()[1]); Assertions.assertEquals("pred22", secondSample.getPreds()[1]); Assertions.assertEquals("word23", secondSample.getSentence()[2]); Assertions.assertEquals("tag23", secondSample.getTags()[2]); Assertions.assertEquals("pred23", secondSample.getPreds()[2]); Assertions.assertNull(chunkStream.read()); chunkStream.close(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/chunker/ChunkSampleTest.java0100644 0000000 0000000 00000023731 14523004075 033232 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import java.io.StringReader; import java.nio.charset.StandardCharsets; import java.util.Arrays; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; public class ChunkSampleTest { private static String[] createSentence() { return new String[] { "Forecasts", "for", "the", "trade", "figures", "range", "widely", ",", "Forecasts", "for", "the", "trade", "figures", "range", "widely", "." }; } private static String[] createTags() { return new String[] { "NNS", "IN", "DT", "NN", "NNS", "VBP", "RB", ",", "NNS", "IN", "DT", "NN", "NNS", "VBP", "RB", "." }; } private static String[] createChunks() { return new String[] { "B-NP", "B-PP", "B-NP", "I-NP", "I-NP", "B-VP", "B-ADVP", "O", "B-NP", "B-PP", "B-NP", "I-NP", "I-NP", "B-VP", "B-ADVP", "O" }; } public static ChunkSample createGoldSample() { return new ChunkSample(createSentence(), createTags(), createChunks()); } public static ChunkSample createPredSample() { String[] chunks = createChunks(); chunks[5] = "B-NP"; return new ChunkSample(createSentence(), createTags(), chunks); } @Test void testChunkSampleSerDe() throws IOException { ChunkSample chunkSample = createGoldSample(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream(byteArrayOutputStream); out.writeObject(chunkSample); out.flush(); byte[] bytes = byteArrayOutputStream.toByteArray(); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); ObjectInput objectInput = new ObjectInputStream(byteArrayInputStream); ChunkSample deSerializedChunkSample = null; try { deSerializedChunkSample = (ChunkSample) objectInput.readObject(); } catch (ClassNotFoundException e) { // do nothing } Assertions.assertNotNull(deSerializedChunkSample); Assertions.assertArrayEquals(chunkSample.getPhrasesAsSpanList(), deSerializedChunkSample.getPhrasesAsSpanList()); Assertions.assertArrayEquals(chunkSample.getPreds(), deSerializedChunkSample.getPreds()); Assertions.assertArrayEquals(chunkSample.getTags(), deSerializedChunkSample.getTags()); Assertions.assertArrayEquals(chunkSample.getSentence(), deSerializedChunkSample.getSentence()); Assertions.assertEquals(chunkSample, deSerializedChunkSample); } @Test void testParameterValidation() { Assertions.assertThrows(IllegalArgumentException.class, () -> new ChunkSample(new String[] {""}, new String[] {""}, new String[] {"test", "one element to much"})); } @Test void testRetrievingContent() { ChunkSample sample = new ChunkSample(createSentence(), createTags(), createChunks()); Assertions.assertArrayEquals(createSentence(), sample.getSentence()); Assertions.assertArrayEquals(createTags(), sample.getTags()); Assertions.assertArrayEquals(createChunks(), sample.getPreds()); } @Test void testToString() throws IOException { ChunkSample sample = new ChunkSample(createSentence(), createTags(), createChunks()); String[] sentence = createSentence(); String[] tags = createTags(); String[] chunks = createChunks(); StringReader sr = new StringReader(sample.toString()); BufferedReader reader = new BufferedReader(sr); for (int i = 0; i < sentence.length; i++) { String line = reader.readLine(); String[] parts = line.split("\\s+"); Assertions.assertEquals(3, parts.length); Assertions.assertEquals(sentence[i], parts[0]); Assertions.assertEquals(tags[i], parts[1]); Assertions.assertEquals(chunks[i], parts[2]); } } @Test void testNicePrint() { ChunkSample sample = new ChunkSample(createSentence(), createTags(), createChunks()); Assertions.assertEquals(" [NP Forecasts_NNS ] [PP for_IN ] [NP the_DT trade_NN figures_NNS ] " + "[VP range_VBP ] [ADVP widely_RB ] ,_, [NP Forecasts_NNS ] [PP for_IN ] " + "[NP the_DT trade_NN figures_NNS ] " + "[VP range_VBP ] [ADVP widely_RB ] ._.", sample.nicePrint()); } @Test void testAsSpan() { ChunkSample sample = new ChunkSample(createSentence(), createTags(), createChunks()); Span[] spans = sample.getPhrasesAsSpanList(); Assertions.assertEquals(10, spans.length); Assertions.assertEquals(new Span(0, 1, "NP"), spans[0]); Assertions.assertEquals(new Span(1, 2, "PP"), spans[1]); Assertions.assertEquals(new Span(2, 5, "NP"), spans[2]); Assertions.assertEquals(new Span(5, 6, "VP"), spans[3]); Assertions.assertEquals(new Span(6, 7, "ADVP"), spans[4]); Assertions.assertEquals(new Span(8, 9, "NP"), spans[5]); Assertions.assertEquals(new Span(9, 10, "PP"), spans[6]); Assertions.assertEquals(new Span(10, 13, "NP"), spans[7]); Assertions.assertEquals(new Span(13, 14, "VP"), spans[8]); Assertions.assertEquals(new Span(14, 15, "ADVP"), spans[9]); } // following are some tests to check the argument validation. Since all uses // the same validateArguments method, we do a deeper test only once @Test void testPhraseAsSpan() { Span[] spans = ChunkSample.phrasesAsSpanList(createSentence(), createTags(), createChunks()); Assertions.assertEquals(10, spans.length); Assertions.assertEquals(new Span(0, 1, "NP"), spans[0]); Assertions.assertEquals(new Span(1, 2, "PP"), spans[1]); Assertions.assertEquals(new Span(2, 5, "NP"), spans[2]); Assertions.assertEquals(new Span(5, 6, "VP"), spans[3]); Assertions.assertEquals(new Span(6, 7, "ADVP"), spans[4]); Assertions.assertEquals(new Span(8, 9, "NP"), spans[5]); Assertions.assertEquals(new Span(9, 10, "PP"), spans[6]); Assertions.assertEquals(new Span(10, 13, "NP"), spans[7]); Assertions.assertEquals(new Span(13, 14, "VP"), spans[8]); Assertions.assertEquals(new Span(14, 15, "ADVP"), spans[9]); } @Test void testRegions() throws IOException { InputStreamFactory in = new ResourceAsStreamFactory(getClass(), "/opennlp/tools/chunker/output.txt"); DummyChunkSampleStream predictedSample = new DummyChunkSampleStream( new PlainTextByLineStream(in, StandardCharsets.UTF_8), false); ChunkSample cs1 = predictedSample.read(); String[] g1 = Span.spansToStrings(cs1.getPhrasesAsSpanList(), cs1.getSentence()); Assertions.assertEquals(15, g1.length); ChunkSample cs2 = predictedSample.read(); String[] g2 = Span.spansToStrings(cs2.getPhrasesAsSpanList(), cs2.getSentence()); Assertions.assertEquals(10, g2.length); ChunkSample cs3 = predictedSample.read(); String[] g3 = Span.spansToStrings(cs3.getPhrasesAsSpanList(), cs3.getSentence()); Assertions.assertEquals(7, g3.length); Assertions.assertEquals("United", g3[0]); Assertions.assertEquals("'s directors", g3[1]); Assertions.assertEquals("voted", g3[2]); Assertions.assertEquals("themselves", g3[3]); Assertions.assertEquals("their spouses", g3[4]); Assertions.assertEquals("lifetime access", g3[5]); Assertions.assertEquals("to", g3[6]); predictedSample.close(); } @Test void testInvalidPhraseAsSpan1() { Assertions.assertThrows(IllegalArgumentException.class, () -> ChunkSample.phrasesAsSpanList(new String[2], new String[1], new String[1])); } @Test void testInvalidPhraseAsSpan2() { Assertions.assertThrows(IllegalArgumentException.class, () -> ChunkSample.phrasesAsSpanList(new String[1], new String[2], new String[1])); } @Test void testInvalidPhraseAsSpan3() { Assertions.assertThrows(IllegalArgumentException.class, () -> ChunkSample.phrasesAsSpanList(new String[1], new String[1], new String[2])); } @Test void testInvalidChunkSampleArray() { Assertions.assertThrows(IllegalArgumentException.class, () -> new ChunkSample(new String[1], new String[1], new String[2])); } @Test void testInvalidChunkSampleList() { Assertions.assertThrows(IllegalArgumentException.class, () -> new ChunkSample(Arrays.asList(new String[1]), Arrays.asList(new String[1]), Arrays.asList(new String[2]))); } @Test void testEquals() { Assertions.assertNotSame(createGoldSample(), createGoldSample()); Assertions.assertEquals(createGoldSample(), createGoldSample()); Assertions.assertNotEquals(createPredSample(), createGoldSample()); Assertions.assertNotEquals(createPredSample(), new Object()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_chunker_ChunkerDe0100644 0000000 0000000 00000000175 14523004075 032574 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/chunker/ChunkerDetailedFMeasureListenerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/chunker/ChunkerDetailedFMeasureLi0100644 0000000 0000000 00000005354 14523004075 034211 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.Locale; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.cmdline.chunker.ChunkerDetailedFMeasureListener; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.util.PlainTextByLineStream; public class ChunkerDetailedFMeasureListenerTest { @Test void testEvaluator() throws IOException { ResourceAsStreamFactory inPredicted = new ResourceAsStreamFactory( getClass(), "/opennlp/tools/chunker/output.txt"); ResourceAsStreamFactory inExpected = new ResourceAsStreamFactory(getClass(), "/opennlp/tools/chunker/output.txt"); ResourceAsStreamFactory detailedOutputStream = new ResourceAsStreamFactory( getClass(), "/opennlp/tools/chunker/detailedOutput.txt"); DummyChunkSampleStream predictedSample = new DummyChunkSampleStream( new PlainTextByLineStream(inPredicted, StandardCharsets.UTF_8), true); DummyChunkSampleStream expectedSample = new DummyChunkSampleStream( new PlainTextByLineStream(inExpected, StandardCharsets.UTF_8), false); Chunker dummyChunker = new DummyChunker(predictedSample); ChunkerDetailedFMeasureListener listener = new ChunkerDetailedFMeasureListener(); ChunkerEvaluator evaluator = new ChunkerEvaluator(dummyChunker, listener); evaluator.evaluate(expectedSample); StringBuilder expected = new StringBuilder(); BufferedReader reader = new BufferedReader( new InputStreamReader(detailedOutputStream.createInputStream(), StandardCharsets.UTF_8)); String line = reader.readLine(); while (line != null) { expected.append(line); expected.append("\n"); line = reader.readLine(); } Assertions.assertEquals(expected.toString().trim(), listener.createReport(Locale.ENGLISH).trim()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_chunker_ChunkerEv0100644 0000000 0000000 00000000156 14523004075 032615 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/chunker/ChunkerEvaluatorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/chunker/ChunkerEvaluatorTest.java0100644 0000000 0000000 00000010112 14523004075 034267 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.cmdline.chunker.ChunkEvaluationErrorListener; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.eval.FMeasure; /** * Tests for {@link ChunkerEvaluator}. */ public class ChunkerEvaluatorTest { private static final double DELTA = 1.0E-9d; /** * Checks the evaluator results against the results got using the conlleval, * available at * https://www.cnts.ua.ac.be/conll2000/chunking/output.html. *

* The {@code output.txt} file has only 3 sentences, but can be replaced by the one * available at the conll2000 site to validate using a bigger sample. */ @Test void testEvaluator() throws IOException { ResourceAsStreamFactory inPredicted = new ResourceAsStreamFactory( getClass(), "/opennlp/tools/chunker/output.txt"); ResourceAsStreamFactory inExpected = new ResourceAsStreamFactory(getClass(), "/opennlp/tools/chunker/output.txt"); DummyChunkSampleStream predictedSample = new DummyChunkSampleStream( new PlainTextByLineStream(inPredicted, StandardCharsets.UTF_8), true); DummyChunkSampleStream expectedSample = new DummyChunkSampleStream( new PlainTextByLineStream(inExpected, StandardCharsets.UTF_8), false); Chunker dummyChunker = new DummyChunker(predictedSample); OutputStream stream = new ByteArrayOutputStream(); ChunkerEvaluationMonitor listener = new ChunkEvaluationErrorListener(stream); ChunkerEvaluator evaluator = new ChunkerEvaluator(dummyChunker, listener); evaluator.evaluate(expectedSample); FMeasure fm = evaluator.getFMeasure(); Assertions.assertEquals(0.8d, fm.getPrecisionScore(), DELTA); Assertions.assertEquals(0.875d, fm.getRecallScore(), DELTA); Assertions.assertNotSame(stream.toString().length(), 0); } @Test void testEvaluatorNoError() throws IOException { ResourceAsStreamFactory inPredicted = new ResourceAsStreamFactory( getClass(), "/opennlp/tools/chunker/output.txt"); ResourceAsStreamFactory inExpected = new ResourceAsStreamFactory(getClass(), "/opennlp/tools/chunker/output.txt"); DummyChunkSampleStream predictedSample = new DummyChunkSampleStream( new PlainTextByLineStream(inPredicted, StandardCharsets.UTF_8), true); DummyChunkSampleStream expectedSample = new DummyChunkSampleStream( new PlainTextByLineStream(inExpected, StandardCharsets.UTF_8), true); Chunker dummyChunker = new DummyChunker(predictedSample); OutputStream stream = new ByteArrayOutputStream(); ChunkerEvaluationMonitor listener = new ChunkEvaluationErrorListener( stream); ChunkerEvaluator evaluator = new ChunkerEvaluator(dummyChunker, listener); evaluator.evaluate(expectedSample); FMeasure fm = evaluator.getFMeasure(); Assertions.assertEquals(1d, fm.getPrecisionScore(), DELTA); Assertions.assertEquals(1d, fm.getRecallScore(), DELTA); Assertions.assertEquals(stream.toString().length(), 0); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/chunker/ChunkerFactoryTest.java0100644 0000000 0000000 00000010123 14523004075 033736 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.ModelType; /** * Tests for the {@link ChunkerFactory} class. */ public class ChunkerFactoryTest { private static ObjectStream createSampleStream() throws IOException { ResourceAsStreamFactory in = new ResourceAsStreamFactory( ChunkerFactoryTest.class, "/opennlp/tools/chunker/test.txt"); return new ChunkSampleStream( new PlainTextByLineStream(in, StandardCharsets.UTF_8)); } private static ChunkerModel trainModel(ModelType type, ChunkerFactory factory) throws IOException { return ChunkerME.train("eng", createSampleStream(), TrainingParameters.defaultParams(), factory); } @Test void testDefaultFactory() throws IOException { ChunkerModel model = trainModel(ModelType.MAXENT, new ChunkerFactory()); ChunkerFactory factory = model.getFactory(); Assertions.assertInstanceOf(DefaultChunkerContextGenerator.class, factory.getContextGenerator()); Assertions.assertInstanceOf(DefaultChunkerSequenceValidator.class, factory.getSequenceValidator()); ByteArrayOutputStream out = new ByteArrayOutputStream(); model.serialize(out); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); ChunkerModel fromSerialized = new ChunkerModel(in); factory = fromSerialized.getFactory(); Assertions.assertInstanceOf(DefaultChunkerContextGenerator.class, factory.getContextGenerator()); Assertions.assertInstanceOf(DefaultChunkerSequenceValidator.class, factory.getSequenceValidator()); } @Test void testDummyFactory() throws IOException { ChunkerModel model = trainModel(ModelType.MAXENT, new DummyChunkerFactory()); DummyChunkerFactory factory = (DummyChunkerFactory) model.getFactory(); Assertions.assertInstanceOf(DummyChunkerFactory.DummyContextGenerator.class, factory.getContextGenerator()); Assertions.assertInstanceOf(DummyChunkerFactory.DummySequenceValidator.class, factory.getSequenceValidator()); ByteArrayOutputStream out = new ByteArrayOutputStream(); model.serialize(out); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); ChunkerModel fromSerialized = new ChunkerModel(in); factory = (DummyChunkerFactory) fromSerialized.getFactory(); Assertions.assertInstanceOf(DefaultChunkerContextGenerator.class, factory.getContextGenerator()); Assertions.assertInstanceOf(DefaultChunkerSequenceValidator.class, factory.getSequenceValidator()); ChunkerME chunker = new ChunkerME(model); String[] toks1 = {"Rockwell", "said", "the", "agreement", "calls", "for", "it", "to", "supply", "200", "additional", "so-called", "shipsets", "for", "the", "planes", "."}; String[] tags1 = {"NNP", "VBD", "DT", "NN", "VBZ", "IN", "PRP", "TO", "VB", "CD", "JJ", "JJ", "NNS", "IN", "DT", "NNS", "."}; chunker.chunk(toks1, tags1); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/chunker/ChunkerMEIT.java0100644 0000000 0000000 00000004163 14523004075 032234 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import java.io.IOException; import java.nio.file.Path; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import opennlp.tools.AbstractModelLoaderTest; public class ChunkerMEIT extends AbstractModelLoaderTest { private static final String[] toks1 = {"Rockwell", "said", "the", "agreement", "calls", "for", "it", "to", "supply", "200", "additional", "so-called", "shipsets", "for", "the", "planes", "."}; private static final String[] tags1 = {"NNP", "VBD", "DT", "NN", "VBZ", "IN", "PRP", "TO", "VB", "CD", "JJ", "JJ", "NNS", "IN", "DT", "NNS", "."}; private static final String[] expect1 = {"B-NP", "B-VP", "B-NP", "I-NP", "B-VP", "B-SBAR", "B-NP", "B-VP", "I-VP", "B-NP", "I-NP", "I-NP", "I-NP", "B-PP", "B-NP", "I-NP", "O"}; private static final String modelName = "en-chunker.bin"; private static ChunkerME chunker; @BeforeAll public static void prepare() throws IOException { downloadVersion15Model(modelName); final Path modelPath = OPENNLP_DIR.resolve(modelName); ChunkerModel model = new ChunkerModel(modelPath); chunker = new ChunkerME(model); } @Test void testChunk() { String[] preds = chunker.chunk(toks1, tags1); Assertions.assertArrayEquals(expect1, preds); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/chunker/ChunkerMETest.java0100644 0000000 0000000 00000013451 14523004075 032637 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Arrays; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.namefind.NameFinderME; import opennlp.tools.util.InsufficientTrainingDataException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Sequence; import opennlp.tools.util.Span; import opennlp.tools.util.TrainingParameters; /** * This is the test class for {@link NameFinderME}. *

* A proper testing and evaluation of the name finder is only possible with a * large corpus which contains a huge amount of test sentences. *

* The scope of this test is to make sure that the name finder code can be * executed. This test can not detect mistakes which lead to incorrect feature * generation or other mistakes which decrease the tagging performance of the * name finder. *

* In this test the {@link NameFinderME} is trained with a small amount of * training sentences and then the computed model is used to predict sentences * from the training sentences. */ public class ChunkerMETest { private Chunker chunker; private static final String[] toks1 = {"Rockwell", "said", "the", "agreement", "calls", "for", "it", "to", "supply", "200", "additional", "so-called", "shipsets", "for", "the", "planes", "."}; private static final String[] tags1 = {"NNP", "VBD", "DT", "NN", "VBZ", "IN", "PRP", "TO", "VB", "CD", "JJ", "JJ", "NNS", "IN", "DT", "NNS", "."}; private static final String[] expect1 = {"B-NP", "B-VP", "B-NP", "I-NP", "B-VP", "B-SBAR", "B-NP", "B-VP", "I-VP", "B-NP", "I-NP", "I-NP", "I-NP", "B-PP", "B-NP", "I-NP", "O"}; @Test void downloadNonExistentModel() { Assertions.assertThrows(IOException.class, () -> { ChunkerME chunker = new ChunkerME("en"); String[] preds = chunker.chunk(toks1, tags1); Assertions.assertArrayEquals(expect1, preds); }); } @BeforeEach void startup() throws IOException { // train the chunker ResourceAsStreamFactory in = new ResourceAsStreamFactory(getClass(), "/opennlp/tools/chunker/test.txt"); ObjectStream sampleStream = new ChunkSampleStream( new PlainTextByLineStream(in, StandardCharsets.UTF_8)); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, 70); params.put(TrainingParameters.CUTOFF_PARAM, 1); ChunkerModel chunkerModel = ChunkerME.train("eng", sampleStream, params, new ChunkerFactory()); this.chunker = new ChunkerME(chunkerModel); } @Test void testChunkAsArray() { String[] preds = chunker.chunk(toks1, tags1); Assertions.assertArrayEquals(expect1, preds); } @Test void testChunkAsSpan() { Span[] preds = chunker.chunkAsSpans(toks1, tags1); Assertions.assertEquals(10, preds.length); Assertions.assertEquals(new Span(0, 1, "NP"), preds[0]); Assertions.assertEquals(new Span(1, 2, "VP"), preds[1]); Assertions.assertEquals(new Span(2, 4, "NP"), preds[2]); Assertions.assertEquals(new Span(4, 5, "VP"), preds[3]); Assertions.assertEquals(new Span(5, 6, "SBAR"), preds[4]); Assertions.assertEquals(new Span(6, 7, "NP"), preds[5]); Assertions.assertEquals(new Span(7, 9, "VP"), preds[6]); Assertions.assertEquals(new Span(9, 13, "NP"), preds[7]); Assertions.assertEquals(new Span(13, 14, "PP"), preds[8]); Assertions.assertEquals(new Span(14, 16, "NP"), preds[9]); } @Test void testTokenProbArray() { Sequence[] preds = chunker.topKSequences(toks1, tags1); Assertions.assertTrue(preds.length > 0); Assertions.assertEquals(expect1.length, preds[0].getProbs().length); Assertions.assertEquals(Arrays.asList(expect1), preds[0].getOutcomes()); Assertions.assertNotSame(Arrays.asList(expect1), preds[1].getOutcomes()); } @Test void testTokenProbMinScore() { Sequence[] preds = chunker.topKSequences(toks1, tags1, -5.55); Assertions.assertEquals(4, preds.length); Assertions.assertEquals(expect1.length, preds[0].getProbs().length); Assertions.assertEquals(Arrays.asList(expect1), preds[0].getOutcomes()); Assertions.assertNotSame(Arrays.asList(expect1), preds[1].getOutcomes()); } @Test void testInsufficientData() { Assertions.assertThrows(InsufficientTrainingDataException.class, () -> { ResourceAsStreamFactory in = new ResourceAsStreamFactory(getClass(), "/opennlp/tools/chunker/test-insufficient.txt"); ObjectStream sampleStream = new ChunkSampleStream( new PlainTextByLineStream(in, StandardCharsets.UTF_8)); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, 70); params.put(TrainingParameters.CUTOFF_PARAM, 1); ChunkerME.train("eng", sampleStream, params, new ChunkerFactory()); }); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/chunker/ChunkerModelTest.java0100644 0000000 0000000 00000004046 14523004075 033376 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * This is the test class for {@link ChunkerModel}. */ public class ChunkerModelTest { @Test void testInvalidFactorySignature() throws Exception { ChunkerModel model = null; try { model = new ChunkerModel(this.getClass().getResourceAsStream("chunker170custom.bin")); } catch (IllegalArgumentException e) { Assertions.assertTrue( e.getMessage().contains("ChunkerFactory"), "Exception must state ChunkerFactory"); Assertions.assertTrue( e.getMessage().contains("opennlp.tools.chunker.DummyChunkerFactory"), "Exception must mention DummyChunkerFactory"); } Assertions.assertNull(model); } @Test void test170DefaultFactory() throws Exception { // This is an OpenNLP 1.x model. It should load with OpenNLP 2.x. Assertions.assertNotNull( new ChunkerModel(this.getClass().getResourceAsStream("chunker170default.bin"))); } @Test void test180CustomFactory() throws Exception { // This is an OpenNLP 1.x model. It should load with OpenNLP 2.x. Assertions.assertNotNull( new ChunkerModel(this.getClass().getResourceAsStream("chunker180custom.bin"))); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_chunker_DummyChun0100644 0000000 0000000 00000000160 14523004075 032627 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/chunker/DummyChunkSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/chunker/DummyChunkSampleStream.ja0100644 0000000 0000000 00000006010 14523004075 034222 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; /** * This dummy chunk sample stream reads a file formatted as described at * ] and * can be used together with DummyChunker simulate a chunker. */ public class DummyChunkSampleStream extends FilterObjectStream { private static final Logger logger = LoggerFactory.getLogger(DummyChunkSampleStream.class); private final boolean mIsPredicted; private int count = 0; // the predicted flag sets if the stream will contain the expected or the // predicted tags. public DummyChunkSampleStream(ObjectStream samples, boolean isPredicted) { super(samples); mIsPredicted = isPredicted; } /** * Returns a pair representing the expected and the predicted at 0: the * chunk tag according to the corpus at 1: the chunk tag predicted * * @see opennlp.tools.util.ObjectStream#read() */ public ChunkSample read() throws IOException { List toks = new ArrayList<>(); List posTags = new ArrayList<>(); List chunkTags = new ArrayList<>(); List predictedChunkTags = new ArrayList<>(); for (String line = samples.read(); line != null && !line.equals(""); line = samples .read()) { String[] parts = line.split(" "); if (parts.length != 4) { logger.warn("Skipping corrupt line {}: {}", count, line); } else { toks.add(parts[0]); posTags.add(parts[1]); chunkTags.add(parts[2]); predictedChunkTags.add(parts[3]); } count++; } if (!toks.isEmpty()) { if (mIsPredicted) { return new ChunkSample(toks.toArray(new String[0]), posTags.toArray(new String[0]), predictedChunkTags .toArray(new String[0])); } else return new ChunkSample(toks.toArray(new String[0]), posTags.toArray(new String[0]), chunkTags.toArray(new String[0])); } else { return null; } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/chunker/DummyChunker.java0100644 0000000 0000000 00000005452 14523004075 032573 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import java.io.IOException; import java.util.Arrays; import java.util.List; import opennlp.tools.util.Sequence; import opennlp.tools.util.Span; /** * This dummy chunker implementation reads a file formatted as described at * ] to * simulate a Chunker. The file has samples of sentences, with target and * predicted values. */ public class DummyChunker implements Chunker { private final DummyChunkSampleStream mSampleStream; public DummyChunker(DummyChunkSampleStream aSampleStream) { mSampleStream = aSampleStream; } public List chunk(List toks, List tags) { return Arrays.asList(chunk(toks.toArray(new String[0]), tags.toArray(new String[0]))); } public String[] chunk(String[] toks, String[] tags) { try { ChunkSample predsSample = mSampleStream.read(); // checks if the streams are sync for (int i = 0; i < toks.length; i++) { if (!toks[i].equals(predsSample.getSentence()[i]) || !tags[i].equals(predsSample.getTags()[i])) { throw new RuntimeException("The streams are not sync!" + "\n expected sentence: " + Arrays.toString(toks) + "\n expected tags: " + Arrays.toString(tags) + "\n predicted sentence: " + Arrays.toString(predsSample.getSentence()) + "\n predicted tags: " + Arrays.toString(predsSample.getTags())); } } return predsSample.getPreds(); } catch (IOException e) { throw new RuntimeException(e); } } public Sequence[] topKSequences(List sentence, List tags) { return null; } public Sequence[] topKSequences(String[] sentence, String[] tags, double minSequenceScore) { return null; } public Span[] chunkAsSpans(String[] toks, String[] tags) { return null; } public Sequence[] topKSequences(String[] sentence, String[] tags) { return null; } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/chunker/DummyChunkerFactory.java0100644 0000000 0000000 00000003343 14523004075 034120 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.chunker; import opennlp.tools.util.SequenceValidator; import opennlp.tools.util.TokenTag; public class DummyChunkerFactory extends ChunkerFactory { public DummyChunkerFactory() { } @Override public ChunkerContextGenerator getContextGenerator() { return new DummyContextGenerator(); } @Override public SequenceValidator getSequenceValidator() { return new DummySequenceValidator(); } static class DummyContextGenerator extends DefaultChunkerContextGenerator { @Override public String[] getContext(int i, String[] toks, String[] tags, String[] preds) { return super.getContext(i, toks, tags, preds); } } static class DummySequenceValidator extends DefaultChunkerSequenceValidator { @Override public boolean validSequence(int i, TokenTag[] sequence, String[] s, String outcome) { return super.validSequence(i, sequence, s, outcome); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/ArgumentParserTest.java0100644 0000000 0000000 00000013563 14523004075 033735 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Collection; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.cmdline.ArgumentParser.OptionalParameter; import opennlp.tools.cmdline.ArgumentParser.ParameterDescription; import opennlp.tools.cmdline.params.EncodingParameter; public class ArgumentParserTest { interface ZeroMethods { } @Test void testZeroMethods() { Assertions.assertThrows(IllegalArgumentException.class, () -> ArgumentParser.createUsage(ZeroMethods.class)); } interface InvalidMethodName { String invalidMethodName(); } @Test void testInvalidMethodName() { Assertions.assertThrows(IllegalArgumentException.class, () -> ArgumentParser.createUsage(InvalidMethodName.class)); } interface InvalidReturnType { Exception getTest(); } @Test void testInvalidReturnType() { Assertions.assertThrows(IllegalArgumentException.class, () -> ArgumentParser.createUsage(InvalidReturnType.class)); } interface SimpleArguments extends AllOptionalArguments { @ParameterDescription(valueName = "charset", description = "a charset encoding") String getEncoding(); @OptionalParameter Integer getCutoff(); } interface AllOptionalArguments { @ParameterDescription(valueName = "num") @OptionalParameter(defaultValue = "100") Integer getIterations(); @ParameterDescription(valueName = "true|false") @OptionalParameter(defaultValue = "true") Boolean getAlphaNumOpt(); } @Test void testSimpleArguments() { String argsString = "-encoding UTF-8 -alphaNumOpt false"; SimpleArguments args = ArgumentParser.parse(argsString.split(" "), SimpleArguments.class); Assertions.assertEquals(StandardCharsets.UTF_8.name(), args.getEncoding()); Assertions.assertEquals(Integer.valueOf(100), args.getIterations()); Assertions.assertNull(args.getCutoff()); Assertions.assertEquals(false, args.getAlphaNumOpt()); } @Test void testSimpleArgumentsMissingEncoding() { Assertions.assertThrows(IllegalArgumentException.class, () -> { String argsString = "-alphaNumOpt false"; Assertions.assertFalse(ArgumentParser.validateArguments(argsString.split(" "), SimpleArguments.class)); ArgumentParser.parse(argsString.split(" "), SimpleArguments.class); }); } @Test void testAllOptionalArgumentsOneArgument() { String argsString = "-alphaNumOpt false"; Assertions.assertTrue(ArgumentParser.validateArguments(argsString.split(" "), AllOptionalArguments.class)); ArgumentParser.parse(argsString.split(" "), AllOptionalArguments.class); } @Test void testAllOptionalArgumentsZeroArguments() { String[] args = {}; Assertions.assertTrue(ArgumentParser.validateArguments(args, AllOptionalArguments.class)); ArgumentParser.parse(args, AllOptionalArguments.class); } @Test void testAllOptionalArgumentsExtraArgument() { Assertions.assertThrows(IllegalArgumentException.class, () -> { String argsString = "-encoding UTF-8"; Assertions.assertFalse(ArgumentParser.validateArguments(argsString.split(" "), AllOptionalArguments.class)); ArgumentParser.parse(argsString.split(" "), AllOptionalArguments.class); }); } @Test void testSimpleArgumentsUsage() { String[] arguments = new String[] {"-encoding charset", "[-iterations num]", "[-alphaNumOpt true|false]"}; String usage = ArgumentParser.createUsage(SimpleArguments.class); int expectedLength = 2; for (String arg : arguments) { Assertions.assertTrue(usage.contains(arg)); expectedLength += arg.length(); } Assertions.assertTrue(usage.contains("a charset encoding")); Assertions.assertTrue(expectedLength < usage.length()); } interface ExtendsEncodingParameter extends EncodingParameter { @ParameterDescription(valueName = "value") String getSomething(); } @Test void testDefaultEncodingParameter() { String[] args = "-something aValue".split(" "); Assertions.assertTrue(ArgumentParser.validateArguments(args, ExtendsEncodingParameter.class)); ExtendsEncodingParameter params = ArgumentParser.parse(args, ExtendsEncodingParameter.class); Assertions.assertEquals(Charset.defaultCharset(), params.getEncoding()); } @Test void testSetEncodingParameter() { Collection availableCharset = Charset.availableCharsets().values(); String notTheDefaultCharset = StandardCharsets.UTF_8.name(); for (Charset charset : availableCharset) { if (!charset.equals(Charset.defaultCharset())) { notTheDefaultCharset = charset.name(); break; } } String[] args = ("-something aValue -encoding " + notTheDefaultCharset).split(" "); Assertions.assertTrue(ArgumentParser.validateArguments(args, ExtendsEncodingParameter.class)); ExtendsEncodingParameter params = ArgumentParser.parse(args, ExtendsEncodingParameter.class); Assertions.assertEquals(Charset.forName(notTheDefaultCharset), params.getEncoding()); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/CLITest.java0100644 0000000 0000000 00000003730 14523004075 031400 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import com.ginsberg.junit.exit.ExpectSystemExitWithStatus; import org.junit.jupiter.api.Test; public class CLITest { /** * Ensure the main method does not fail to print help message. */ @Test @ExpectSystemExitWithStatus(0) void testMainHelpMessage() { CLI.main(new String[] {}); } /** * Ensure the main method prints error and returns 1. */ @Test @ExpectSystemExitWithStatus(1) void testUnknownToolMessage() { CLI.main(new String[] {"unknown name"}); } /** * Ensure the tool checks the parameter and returns 1. */ @Test @ExpectSystemExitWithStatus(1) void testToolParameterMessage() { CLI.main(new String[] {"DoccatTrainer", "-param", "value"}); } /** * Ensure the main method prints error and returns -1 */ @Test @ExpectSystemExitWithStatus(-1) void testUnknownFileMessage() { CLI.main(new String[] {"Doccat", "unknown.model"}); } /** * Ensure all tools do not fail printing help message; */ @Test @ExpectSystemExitWithStatus(0) void testHelpMessageOfTools() { for (String toolName : CLI.getToolNames()) { CLI.main(new String[] {toolName, "help"}); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_cmdline_Terminate0100644 0000000 0000000 00000000164 14523004075 032626 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/TerminateToolExceptionTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/TerminateToolExceptionTes0100644 0000000 0000000 00000002220 14523004075 034323 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * Tests for the {@link TerminateToolException} class. */ public class TerminateToolExceptionTest { @Test void testCreation() { TerminateToolException e = new TerminateToolException(-500); Assertions.assertEquals(-500, e.getCode()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_cmdline_TokenName0100644 0000000 0000000 00000000161 14523004075 032554 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/TokenNameFinderToolTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/TokenNameFinderToolTest.j0100644 0000000 0000000 00000011212 14523004075 034142 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintStream; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import opennlp.tools.cmdline.namefind.TokenNameFinderTool; import opennlp.tools.namefind.NameFinderME; import opennlp.tools.namefind.NameSample; import opennlp.tools.namefind.NameSampleDataStream; import opennlp.tools.namefind.TokenNameFinderFactory; import opennlp.tools.namefind.TokenNameFinderModel; import opennlp.tools.util.MockInputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; public class TokenNameFinderToolTest { @Test //TODO OPENNLP-1447 @Disabled(value = "OPENNLP-1447: These kind of tests won't work anymore. " + "We need to find a way to redirect log output (i.e. implement " + "a custom log adapter and plug it in, if we want to do such tests.") void run() throws IOException { File model1 = trainModel(); String[] args = new String[] {model1.getAbsolutePath()}; final String in = "It is Stefanie Schmidt.\n\nNothing in this sentence."; InputStream stream = new ByteArrayInputStream(in.getBytes(StandardCharsets.UTF_8)); System.setIn(stream); ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintStream ps = new PrintStream(baos); System.setOut(ps); TokenNameFinderTool tool = new TokenNameFinderTool(); tool.run(args); final String content = baos.toString(StandardCharsets.UTF_8); Assertions.assertTrue(content.contains("It is Stefanie Schmidt. ")); Assertions.assertTrue(model1.delete()); } @Test void invalidModel() { Assertions.assertThrows(TerminateToolException.class, () -> { String[] args = new String[] {"invalidmodel.bin"}; TokenNameFinderTool tool = new TokenNameFinderTool(); tool.run(args); }); } @Test //TODO OPENNLP-1447 @Disabled(value = "OPENNLP-1447: These kind of tests won't work anymore. " + "We need to find a way to redirect log output (i.e. implement " + "a custom log adapter and plug it in, if we want to do such tests.") void usage() { String[] args = new String[] {}; ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintStream ps = new PrintStream(baos); System.setOut(ps); TokenNameFinderTool tool = new TokenNameFinderTool(); tool.run(args); final String content = baos.toString(StandardCharsets.UTF_8); Assertions.assertEquals(tool.getHelp(), content.trim()); } private File trainModel() throws IOException { ObjectStream lineStream = new PlainTextByLineStream(new MockInputStreamFactory( new File("opennlp/tools/namefind/AnnotatedSentencesWithTypes.txt")), StandardCharsets.ISO_8859_1); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, 70); params.put(TrainingParameters.CUTOFF_PARAM, 1); TokenNameFinderModel model; TokenNameFinderFactory nameFinderFactory = new TokenNameFinderFactory(); try (ObjectStream sampleStream = new NameSampleDataStream(lineStream)) { model = NameFinderME.train("eng", null, sampleStream, params, nameFinderFactory); } File modelFile = Files.createTempFile("model", ".bin").toFile(); try (OutputStream modelOut = new BufferedOutputStream(new FileOutputStream(modelFile))) { model.serialize(modelOut); } return modelFile; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_cmdline_chunker_C0100644 0000000 0000000 00000000170 14523004075 032574 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/chunker/ChunkerModelLoaderTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/chunker/ChunkerModelLoade0100644 0000000 0000000 00000004255 14523004075 034200 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.chunker; import java.io.IOException; import java.nio.file.Files; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import opennlp.tools.AbstractModelLoaderTest; import opennlp.tools.EnabledWhenCDNAvailable; import opennlp.tools.chunker.ChunkerModel; @EnabledWhenCDNAvailable(hostname = "opennlp.sourceforge.net") public class ChunkerModelLoaderTest extends AbstractModelLoaderTest { // SUT private ChunkerModelLoader loader; @BeforeAll public static void initResources() { List resources = List.of("en"); resources.forEach(lang -> { try { downloadVersion15Model("en-chunker.bin"); } catch (IOException e) { throw new RuntimeException(e); } }); } @BeforeEach public void setup() { loader = new ChunkerModelLoader(); } @ParameterizedTest(name = "Verify \"{0}\" chunker model loading") @ValueSource(strings = {"en-chunker.bin"}) public void testLoadModelViaResource(String modelName) throws IOException { ChunkerModel model = loader.loadModel(Files.newInputStream(OPENNLP_DIR.resolve(modelName))); Assertions.assertNotNull(model); Assertions.assertTrue(model.isLoadedFromSerialized()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_cmdline_langdetec0100644 0000000 0000000 00000000204 14523004075 032617 xustar000000000 0000000 132 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/langdetect/LanguageDetectorModelLoaderTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/langdetect/LanguageDetect0100644 0000000 0000000 00000004354 14523004075 034202 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.langdetect; import java.io.IOException; import java.nio.file.Files; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import opennlp.tools.AbstractModelLoaderTest; import opennlp.tools.EnabledWhenCDNAvailable; import opennlp.tools.langdetect.LanguageDetectorModel; @EnabledWhenCDNAvailable(hostname = "dlcdn.apache.org") public class LanguageDetectorModelLoaderTest extends AbstractModelLoaderTest { // SUT private LanguageDetectorModelLoader loader; @BeforeAll public static void initResources() { List resources = List.of("en"); resources.forEach(lang -> { try { downloadVersion183Model("langdetect-183.bin"); } catch (IOException e) { throw new RuntimeException(e); } }); } @BeforeEach public void setup() { loader = new LanguageDetectorModelLoader(); } @ParameterizedTest(name = "Verify \"{0}\" language detector model loading") @ValueSource(strings = {"langdetect-183.bin"}) public void testLoadModelViaResource(String modelName) throws IOException { LanguageDetectorModel model = loader.loadModel(Files.newInputStream(OPENNLP_DIR.resolve(modelName))); Assertions.assertNotNull(model); Assertions.assertTrue(model.isLoadedFromSerialized()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_cmdline_namefind_0100644 0000000 0000000 00000000201 14523004075 032606 xustar000000000 0000000 129 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/namefind/TokenNameFinderModelLoaderTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/namefind/TokenNameFinderM0100644 0000000 0000000 00000004335 14523004075 034122 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.namefind; import java.io.IOException; import java.nio.file.Files; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import opennlp.tools.AbstractModelLoaderTest; import opennlp.tools.EnabledWhenCDNAvailable; import opennlp.tools.namefind.TokenNameFinderModel; @EnabledWhenCDNAvailable(hostname = "opennlp.sourceforge.net") public class TokenNameFinderModelLoaderTest extends AbstractModelLoaderTest { // SUT private TokenNameFinderModelLoader loader; @BeforeAll public static void initResources() { List resources = List.of("en"); resources.forEach(lang -> { try { downloadVersion15Model("en-ner-location.bin"); } catch (IOException e) { throw new RuntimeException(e); } }); } @BeforeEach public void setup() { loader = new TokenNameFinderModelLoader(); } @ParameterizedTest(name = "Verify \"{0}\" NER model loading") @ValueSource(strings = {"en-ner-location.bin"}) public void testLoadModelViaResource(String modelName) throws IOException { TokenNameFinderModel model = loader.loadModel(Files.newInputStream(OPENNLP_DIR.resolve(modelName))); Assertions.assertNotNull(model); Assertions.assertTrue(model.isLoadedFromSerialized()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_cmdline_postag_PO0100644 0000000 0000000 00000000163 14523004075 032570 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/postag/POSModelLoaderTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/postag/POSModelLoaderTest0100644 0000000 0000000 00000004473 14523004075 034124 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.postag; import java.io.IOException; import java.nio.file.Files; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import opennlp.tools.AbstractModelLoaderTest; import opennlp.tools.EnabledWhenCDNAvailable; import opennlp.tools.postag.POSModel; import opennlp.tools.util.DownloadUtil; @EnabledWhenCDNAvailable(hostname = "dlcdn.apache.org") public class POSModelLoaderTest extends AbstractModelLoaderTest { // SUT private POSModelLoader loader; @BeforeAll public static void initResources() { List resources = List.of("en", "de"); resources.forEach(lang -> { try { DownloadUtil.downloadModel(lang, DownloadUtil.ModelType.POS, POSModel.class); } catch (IOException e) { throw new RuntimeException(e); } }); } @BeforeEach public void setup() { loader = new POSModelLoader(); } @ParameterizedTest(name = "Verify \"{0}\" POS model loading") @ValueSource(strings = {"en-ud-ewt", "de-ud-gsd"}) public void testLoadModelByLanguage(String langModel) throws IOException { String modelName = "opennlp-" + langModel + "-pos-1.0-1.9.3.bin"; POSModel model = loader.loadModel(Files.newInputStream(OPENNLP_DIR.resolve(modelName))); Assertions.assertNotNull(model); Assertions.assertTrue(model.isLoadedFromSerialized()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_cmdline_sentdetec0100644 0000000 0000000 00000000174 14523004075 032655 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/sentdetect/SentenceModelLoaderTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/sentdetect/SentenceModelL0100644 0000000 0000000 00000004571 14523004075 034220 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.sentdetect; import java.io.IOException; import java.nio.file.Files; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import opennlp.tools.AbstractModelLoaderTest; import opennlp.tools.EnabledWhenCDNAvailable; import opennlp.tools.sentdetect.SentenceModel; import opennlp.tools.util.DownloadUtil; @EnabledWhenCDNAvailable(hostname = "dlcdn.apache.org") public class SentenceModelLoaderTest extends AbstractModelLoaderTest { // SUT private SentenceModelLoader loader; @BeforeAll public static void initResources() { List resources = List.of("en", "de"); resources.forEach(lang -> { try { DownloadUtil.downloadModel(lang, DownloadUtil.ModelType.SENTENCE_DETECTOR, SentenceModel.class); } catch (IOException e) { throw new RuntimeException(e); } }); } @BeforeEach public void setup() { loader = new SentenceModelLoader(); } @ParameterizedTest(name = "Verify \"{0}\" sentence model loading") @ValueSource(strings = {"en-ud-ewt", "de-ud-gsd"}) public void testLoadModelByLanguage(String langModel) throws IOException { String modelName = "opennlp-" + langModel + "-sentence-1.0-1.9.3.bin"; SentenceModel model = loader.loadModel(Files.newInputStream(OPENNLP_DIR.resolve(modelName))); Assertions.assertNotNull(model); Assertions.assertTrue(model.isLoadedFromSerialized()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_cmdline_tokenizer0100644 0000000 0000000 00000000174 14523004075 032711 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/tokenizer/TokenizerModelLoaderTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/tokenizer/TokenizerModelL0100644 0000000 0000000 00000004563 14523004075 034277 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.tokenizer; import java.io.IOException; import java.nio.file.Files; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import opennlp.tools.AbstractModelLoaderTest; import opennlp.tools.EnabledWhenCDNAvailable; import opennlp.tools.tokenize.TokenizerModel; import opennlp.tools.util.DownloadUtil; @EnabledWhenCDNAvailable(hostname = "dlcdn.apache.org") public class TokenizerModelLoaderTest extends AbstractModelLoaderTest { // SUT private TokenizerModelLoader loader; @BeforeAll public static void initResources() { List resources = List.of("en", "de"); resources.forEach(lang -> { try { DownloadUtil.downloadModel(lang, DownloadUtil.ModelType.TOKENIZER, TokenizerModel.class); } catch (IOException e) { throw new RuntimeException(e); } }); } @BeforeEach public void setup() { loader = new TokenizerModelLoader(); } @ParameterizedTest(name = "Verify \"{0}\" tokenizer model loading") @ValueSource(strings = {"en-ud-ewt", "de-ud-gsd"}) public void testLoadModelByLanguage(String langModel) throws IOException { String modelName = "opennlp-" + langModel + "-tokens-1.0-1.9.3.bin"; TokenizerModel model = loader.loadModel(Files.newInputStream(OPENNLP_DIR.resolve(modelName))); Assertions.assertNotNull(model); Assertions.assertTrue(model.isLoadedFromSerialized()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_cmdline_tokenizer0100644 0000000 0000000 00000000174 14523004075 032711 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/tokenizer/TokenizerTrainerToolTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/cmdline/tokenizer/TokenizerTraine0100644 0000000 0000000 00000012665 14523004075 034347 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.cmdline.tokenizer; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import opennlp.tools.AbstractTempDirTest; import opennlp.tools.cmdline.StreamFactoryRegistry; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.util.InvalidFormatException; /** * Tests for the {@link TokenizerTrainerTool} class. */ public class TokenizerTrainerToolTest extends AbstractTempDirTest { private TokenizerTrainerTool tokenizerTrainerTool; private final String sampleSuccessData = "Pierre Vinken, 61 years old, will join the board as a nonexecutive " + "director Nov. 29.\n" + "Mr. Vinken is chairman of Elsevier N.V., the Dutch publishing group.\n" + "Rudolph Agnew, 55 years old and former chairman of Consolidated Gold Fields PLC,\n" + " was named a nonexecutive director of this British industrial conglomerate.\n"; private final String sampleFailureData = "It is Fail Test Case.\n\nNothing in this sentence."; @Test public void testGetShortDescription() { tokenizerTrainerTool = new TokenizerTrainerTool(); Assertions.assertEquals(tokenizerTrainerTool.getShortDescription() , "Trainer for the learnable tokenizer"); } @Test public void testLoadDictHappyCase() throws IOException { File dictFile = new File("lang/ga/abb_GA.xml"); Dictionary dict = TokenizerTrainerTool.loadDict(dictFile); Assertions.assertNotNull(dict); } @Test public void testLoadDictFailCase() { Assertions.assertThrows(InvalidFormatException.class , () -> TokenizerTrainerTool.loadDict(prepareDataFile(""))); } //TODO OPENNLP-1447 @Disabled(value = "OPENNLP-1447: These kind of tests won't work anymore. " + "We need to find a way to redirect log output (i.e. implement " + "a custom log adapter and plug it in, if we want to do such tests.") public void testTestRunHappyCase() throws IOException { File model = tempDir.resolve("model-en.bin").toFile(); String[] args = new String[] { "-model" , model.getAbsolutePath() , "-alphaNumOpt" , "false" , "-lang" , "en" , "-data" , String.valueOf(prepareDataFile(sampleSuccessData)) , "-encoding" , "UTF-8" }; InputStream stream = new ByteArrayInputStream(sampleSuccessData.getBytes(StandardCharsets.UTF_8)); System.setIn(stream); ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintStream ps = new PrintStream(baos); System.setOut(ps); tokenizerTrainerTool = new TokenizerTrainerTool(); tokenizerTrainerTool.run(StreamFactoryRegistry.DEFAULT_FORMAT , args); final String content = baos.toString(StandardCharsets.UTF_8); Assertions.assertTrue(content.contains("Number of Event Tokens: 171")); Assertions.assertTrue(model.delete()); } //TODO OPENNLP-1447 @Disabled(value = "OPENNLP-1447: These kind of tests won't work anymore. " + "We need to find a way to redirect log output (i.e. implement " + "a custom log adapter and plug it in, if we want to do such tests.") public void testTestRunExceptionCase() throws IOException { File model = tempDir.resolve("model-en.bin").toFile(); model.deleteOnExit(); String[] args = new String[] { "-model" , model.getAbsolutePath() , "-alphaNumOpt" , "false" , "-lang" , "en" , "-data" , String.valueOf(prepareDataFile(sampleFailureData)) , "-encoding" , "UTF-8" }; InputStream stream = new ByteArrayInputStream(sampleFailureData.getBytes(StandardCharsets.UTF_8)); System.setIn(stream); ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintStream ps = new PrintStream(baos); System.setOut(ps); Assertions.assertThrows(TerminateToolException.class , () -> { tokenizerTrainerTool = new TokenizerTrainerTool(); tokenizerTrainerTool.run(StreamFactoryRegistry.DEFAULT_FORMAT , args); }); } // This is guaranteed to be deleted after the test finishes. private File prepareDataFile(String input) throws IOException { Path dataFile = tempDir.resolve("data-en.train"); Files.writeString(dataFile, input, StandardCharsets.UTF_8, StandardOpenOption.CREATE); File f = dataFile.toFile(); f.deleteOnExit(); return f; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_convert_FileToStr0100644 0000000 0000000 00000000166 14523004075 032620 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/convert/FileToStringSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/convert/FileToStringSampleStreamT0100644 0000000 0000000 00000004475 14523004075 034300 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.convert; import java.io.IOException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.AbstractTempDirTest; import opennlp.tools.formats.DirectorySampleStream; import opennlp.tools.formats.convert.FileToStringSampleStream; public class FileToStringSampleStreamTest extends AbstractTempDirTest { @Test public void readFileTest() throws IOException { final String sentence1 = "This is a sentence."; final String sentence2 = "This is another sentence."; List sentences = Arrays.asList(sentence1, sentence2); DirectorySampleStream directorySampleStream = new DirectorySampleStream(tempDir.toFile(), null, false); Path tempFile1 = tempDir.resolve("tempFile1"); Files.writeString(tempFile1, sentence1, StandardCharsets.UTF_8, StandardOpenOption.CREATE); Path tempFile2 = tempDir.resolve("tempFile2"); Files.writeString(tempFile2, sentence2, StandardCharsets.UTF_8, StandardOpenOption.CREATE); try (FileToStringSampleStream stream = new FileToStringSampleStream(directorySampleStream, Charset.defaultCharset())) { String read = stream.read(); Assertions.assertTrue(sentences.contains(read)); read = stream.read(); Assertions.assertTrue(sentences.contains(read)); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_dictionary_Dictio0100644 0000000 0000000 00000000177 14523004075 032647 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/dictionary/DictionaryAsSetCaseInsensitiveTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/dictionary/DictionaryAsSetCaseIns0100644 0000000 0000000 00000012423 14523004075 034255 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.dictionary; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.StringList; public class DictionaryAsSetCaseInsensitiveTest { private Dictionary getDict() { return new Dictionary(false); } private StringList asSL(String str) { return new StringList(str); } /** * Tests a basic lookup. */ @Test void testLookup() { String a = "a"; String b = "b"; Dictionary dict = getDict(); dict.put(asSL(a)); Set set = dict.asStringSet(); Assertions.assertTrue(set.contains(a)); Assertions.assertFalse(set.contains(b)); Assertions.assertTrue(set.contains(a.toUpperCase())); } /** * Tests set. */ @Test void testSet() { String a = "a"; String a1 = "a"; Dictionary dict = getDict(); dict.put(asSL(a)); dict.put(asSL(a1)); Set set = dict.asStringSet(); Assertions.assertTrue(set.contains(a)); Assertions.assertEquals(1, set.size()); } /** * Tests set. */ @Test void testSetDiffCase() { String a = "a"; String a1 = "A"; Dictionary dict = getDict(); dict.put(asSL(a)); dict.put(asSL(a1)); Set set = dict.asStringSet(); Assertions.assertTrue(set.contains(a)); Assertions.assertEquals(1, set.size()); } /** * Tests for the {@link Dictionary#equals(Object)} method. */ @Test void testEquals() { String entry1 = "1a"; String entry2 = "1b"; Dictionary dictA = getDict(); dictA.put(asSL(entry1)); dictA.put(asSL(entry2)); Set setA = dictA.asStringSet(); Dictionary dictB = getDict(); dictB.put(asSL(entry1)); dictB.put(asSL(entry2)); Set setB = dictB.asStringSet(); Assertions.assertEquals(setA.size(), setB.size()); Assertions.assertTrue(setA.containsAll(setB)); } /** * Tests for the {@link Dictionary#equals(Object)} method. */ @Test void testEqualsDifferentCase() { Dictionary dictA = getDict(); dictA.put(asSL("1a")); dictA.put(asSL("1b")); Set setA = dictA.asStringSet(); Dictionary dictB = getDict(); dictB.put(asSL("1A")); dictB.put(asSL("1B")); Set setB = dictB.asStringSet(); Assertions.assertEquals(setA.size(), setB.size()); Assertions.assertTrue(setA.containsAll(setB)); } /** * Tests the {@link Dictionary#asStringSet()#hashCode()} method without case changes. */ @Test void testHashCode() { String entry1 = "a1"; Dictionary dictA = getDict(); dictA.put(asSL(entry1)); Dictionary dictB = getDict(); dictB.put(asSL(entry1)); Assertions.assertEquals(dictA.hashCode(), dictB.hashCode()); Set setA = dictA.asStringSet(); Set setB = dictB.asStringSet(); Assertions.assertEquals(setA.hashCode(), setB.hashCode()); } /** * Tests the {@link Dictionary#asStringSet()#hashCode()}} method with case changes. */ @Test void testHashCodeDifferentCase() { String entry1 = "a1"; Dictionary dictA = getDict(); dictA.put(asSL(entry1)); Dictionary dictB = getDict(); dictB.put(asSL(entry1.toUpperCase())); // adjusting entry to differ case-wise. Assertions.assertEquals(dictA.hashCode(), dictB.hashCode()); Set setA = dictA.asStringSet(); Set setB = dictB.asStringSet(); Assertions.assertEquals(setA.hashCode(), setB.hashCode()); } /** * Tests the lookup of tokens of different case. */ @Test void testDifferentCaseLookup() { String entry1 = "1a"; String entry2 = "1A"; // create a case sensitive dictionary Dictionary dict = getDict(); dict.put(asSL(entry1)); Set set = dict.asStringSet(); Assertions.assertTrue(set.contains(entry2)); } /** * Tests the iterator implementation */ @Test void testIterator() { String entry1 = "1a"; String entry2 = "1b"; Dictionary dictA = getDict(); dictA.put(asSL(entry1)); dictA.put(asSL(entry2)); dictA.put(asSL(entry1.toUpperCase())); dictA.put(asSL(entry2.toUpperCase())); Iterator it = dictA.asStringSet().iterator(); List elements = new ArrayList<>(); while (it.hasNext()) { elements.add(it.next()); } Assertions.assertEquals(2, elements.size()); Assertions.assertTrue(elements.contains(entry1)); Assertions.assertTrue(elements.contains(entry2)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_dictionary_Dictio0100644 0000000 0000000 00000000175 14523004075 032645 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/dictionary/DictionaryAsSetCaseSensitiveTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/dictionary/DictionaryAsSetCaseSen0100644 0000000 0000000 00000012373 14523004075 034255 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.dictionary; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.StringList; public class DictionaryAsSetCaseSensitiveTest { private Dictionary getDict() { return new Dictionary(true); } private StringList asSL(String str) { return new StringList(str); } /** * Tests a basic lookup. */ @Test void testLookup() { String a = "a"; String b = "b"; Dictionary dict = getDict(); dict.put(asSL(a)); Set set = dict.asStringSet(); Assertions.assertTrue(set.contains(a)); Assertions.assertFalse(set.contains(b)); Assertions.assertFalse(set.contains(a.toUpperCase())); } /** * Tests set. */ @Test void testSet() { String a = "a"; String a1 = "a"; Dictionary dict = getDict(); dict.put(asSL(a)); dict.put(asSL(a1)); Set set = dict.asStringSet(); Assertions.assertTrue(set.contains(a)); Assertions.assertEquals(1, set.size()); } /** * Tests set. */ @Test void testSetDiffCase() { String a = "a"; String a1 = "A"; Dictionary dict = getDict(); dict.put(asSL(a)); dict.put(asSL(a1)); Set set = dict.asStringSet(); Assertions.assertTrue(set.contains(a)); Assertions.assertEquals(2, set.size()); } /** * Tests for the {@link Dictionary#equals(Object)} method. */ @Test void testEquals() { String entry1 = "1a"; String entry2 = "1b"; Dictionary dictA = getDict(); dictA.put(asSL(entry1)); dictA.put(asSL(entry2)); Set setA = dictA.asStringSet(); Dictionary dictB = getDict(); dictB.put(asSL(entry1)); dictB.put(asSL(entry2)); Set setB = dictB.asStringSet(); Assertions.assertEquals(setA.size(), setB.size()); Assertions.assertTrue(setA.containsAll(setB)); } /** * Tests for the {@link Dictionary#equals(Object)} method. */ @Test void testEqualsDifferentCase() { Dictionary dictA = getDict(); dictA.put(asSL("1a")); dictA.put(asSL("1b")); Set setA = dictA.asStringSet(); Dictionary dictB = getDict(); dictB.put(asSL("1A")); dictB.put(asSL("1B")); Set setB = dictB.asStringSet(); // should fail in case sensitive dict Assertions.assertNotEquals(setA, setB); } /** * Tests the {@link Dictionary#asStringSet()#hashCode()} method. */ @Test void testHashCode() { String entry1 = "a1"; Dictionary dictA = getDict(); dictA.put(asSL(entry1)); Set setA = dictA.asStringSet(); Dictionary dictB = getDict(); dictB.put(asSL(entry1)); Set setB = dictB.asStringSet(); Assertions.assertEquals(setA.hashCode(), setB.hashCode()); } /** * Tests the {@link Dictionary#asStringSet()#hashCode()} method. */ @Test void testHashCodeDifferentCase() { String entry1 = "a1"; Dictionary dictA = getDict(); dictA.put(asSL(entry1)); Set setA = dictA.asStringSet(); Dictionary dictB = getDict(); dictB.put(asSL(entry1.toUpperCase())); Set setB = dictB.asStringSet(); Assertions.assertEquals(setA.hashCode(), setB.hashCode()); } /** * Tests the lookup of tokens of different case. */ @Test void testDifferentCaseLookup() { String entry1 = "1a"; String entry2 = "1A"; // create a case sensitive dictionary Dictionary dict = getDict(); dict.put(asSL(entry1)); Set set = dict.asStringSet(); // should return false because 1a != 1A in a case sensitive lookup Assertions.assertFalse(set.contains(entry2)); } /** * Tests the iterator implementation */ @Test void testIterator() { String entry1 = "1a"; String entry2 = "1b"; Dictionary dictA = getDict(); dictA.put(asSL(entry1)); dictA.put(asSL(entry2)); dictA.put(asSL(entry1.toUpperCase())); dictA.put(asSL(entry2.toUpperCase())); Iterator it = dictA.asStringSet().iterator(); List elements = new ArrayList<>(); while (it.hasNext()) { elements.add(it.next()); } Assertions.assertEquals(4, elements.size()); Assertions.assertTrue(elements.contains(entry1)); Assertions.assertTrue(elements.contains(entry2)); Assertions.assertTrue(elements.contains(entry1.toUpperCase())); Assertions.assertTrue(elements.contains(entry2.toUpperCase())); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/dictionary/DictionaryTest.java0100644 0000000 0000000 00000013641 14523004075 033632 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.dictionary; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.StringReader; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.StringList; /** * Tests for the {@link Dictionary} class. */ public class DictionaryTest { /** * @return a case sensitive Dictionary */ private Dictionary getCaseSensitive() { return new Dictionary(true); } /** * @return a case insensitive Dictionary */ private Dictionary getCaseInsensitive() { return new Dictionary(false); } /** * Tests a basic lookup. */ @Test void testLookup() { StringList entry1 = new StringList("1a", "1b"); StringList entry1u = new StringList("1A", "1B"); StringList entry2 = new StringList("1A", "1C"); Dictionary dict = getCaseInsensitive(); dict.put(entry1); Assertions.assertTrue(dict.contains(entry1)); Assertions.assertTrue(dict.contains(entry1u)); Assertions.assertFalse(dict.contains(entry2)); } /** * Test lookup with case sensitive dictionary */ @Test void testLookupCaseSensitive() { StringList entry1 = new StringList("1a", "1b"); StringList entry1u = new StringList("1A", "1B"); StringList entry2 = new StringList("1A", "1C"); Dictionary dict = getCaseSensitive(); dict.put(entry1); Assertions.assertTrue(dict.contains(entry1)); Assertions.assertFalse(dict.contains(entry1u)); Assertions.assertFalse(dict.contains(entry2)); } /** * Tests serialization and deserailization of the {@link Dictionary}. * * @throws IOException Thrown if IO errors occurred. */ @Test void testSerialization() throws IOException { Dictionary reference = getCaseInsensitive(); String a1 = "a1"; String a2 = "a2"; String a3 = "a3"; String a5 = "a5"; reference.put(new StringList(a1, a2, a3, a5)); ByteArrayOutputStream out = new ByteArrayOutputStream(); reference.serialize(out); Dictionary recreated = new Dictionary( new ByteArrayInputStream(out.toByteArray())); Assertions.assertEquals(reference, recreated); } /** * Tests for the {@link Dictionary#parseOneEntryPerLine(java.io.Reader)} * method. * * @throws IOException Thrown if IO errors occurred. */ @Test void testParseOneEntryPerLine() throws IOException { String testDictionary = "1a 1b 1c 1d \n 2a 2b 2c \n 3a \n 4a 4b "; Dictionary dictionay = Dictionary.parseOneEntryPerLine(new StringReader(testDictionary)); Assertions.assertEquals(4, dictionay.size()); Assertions.assertTrue(dictionay.contains(new StringList("1a", "1b", "1c", "1d"))); Assertions.assertTrue(dictionay.contains(new StringList("2a", "2b", "2c"))); Assertions.assertTrue(dictionay.contains(new StringList(new String[] {"3a"}))); Assertions.assertTrue(dictionay.contains(new StringList("4a", "4b"))); } /** * Tests for the {@link Dictionary#equals(Object)} method. */ @Test void testEquals() { StringList entry1 = new StringList("1a", "1b"); StringList entry2 = new StringList("2a", "2b"); Dictionary dictA = getCaseInsensitive(); dictA.put(entry1); dictA.put(entry2); Dictionary dictB = getCaseInsensitive(); dictB.put(entry1); dictB.put(entry2); Dictionary dictC = getCaseSensitive(); dictC.put(entry1); dictC.put(entry2); Assertions.assertEquals(dictA, dictB); Assertions.assertEquals(dictC, dictA); Assertions.assertEquals(dictB, dictC); } /** * Tests the {@link Dictionary#hashCode()} method. */ @Test void testHashCode() { StringList entry1 = new StringList("1a", "1b"); StringList entry2 = new StringList("1A", "1B"); Dictionary dictA = getCaseInsensitive(); dictA.put(entry1); Dictionary dictB = getCaseInsensitive(); dictB.put(entry2); Dictionary dictC = getCaseSensitive(); dictC.put(entry1); Dictionary dictD = getCaseSensitive(); dictD.put(entry2); Assertions.assertEquals(dictA.hashCode(), dictB.hashCode()); Assertions.assertEquals(dictB.hashCode(), dictC.hashCode()); Assertions.assertEquals(dictC.hashCode(), dictD.hashCode()); } /** * Tests for the {@link Dictionary#toString()} method. */ @Test void testToString() { StringList entry1 = new StringList("1a", "1b"); Dictionary dictA = getCaseInsensitive(); dictA.toString(); dictA.put(entry1); dictA.toString(); } /** * Tests the lookup of tokens of different case. */ @Test void testDifferentCaseLookup() { StringList entry1 = new StringList("1a", "1b"); StringList entry2 = new StringList("1A", "1B"); Dictionary dict = getCaseInsensitive(); dict.put(entry1); Assertions.assertTrue(dict.contains(entry2)); } /** * Tests the lookup of tokens of different case. */ @Test void testDifferentCaseLookupCaseSensitive() { StringList entry1 = new StringList("1a", "1b"); StringList entry2 = new StringList("1A", "1B"); Dictionary dict = getCaseSensitive(); dict.put(entry1); Assertions.assertFalse(dict.contains(entry2)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_doccat_BagOfWords0100644 0000000 0000000 00000000167 14523004075 032520 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/doccat/BagOfWordsFeatureGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/doccat/BagOfWordsFeatureGenerator0100644 0000000 0000000 00000004253 14523004075 034214 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import java.util.Collections; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class BagOfWordsFeatureGeneratorTest { @Test void testNull() { BagOfWordsFeatureGenerator generator = new BagOfWordsFeatureGenerator(); try { generator.extractFeatures(null, Collections.emptyMap()); Assertions.fail("NullPointerException must be thrown"); } catch (NullPointerException expected) { } } @Test void testEmpty() { BagOfWordsFeatureGenerator generator = new BagOfWordsFeatureGenerator(); Assertions.assertEquals(0, generator.extractFeatures(new String[] {}, Collections.emptyMap()).size()); } @Test void testUseAllTokens() { BagOfWordsFeatureGenerator generator = new BagOfWordsFeatureGenerator(); Assertions.assertArrayEquals(new String[] {"bow=it", "bow=is", "bow=12.345", "bow=feet", "bow=long"}, generator.extractFeatures(new String[] {"it", "is", "12.345", "feet", "long"}, Collections.emptyMap()).toArray()); } @Test void testOnlyLetterTokens() { BagOfWordsFeatureGenerator generator = new BagOfWordsFeatureGenerator(true); Assertions.assertArrayEquals(new String[] {"bow=it", "bow=is", "bow=feet", "bow=long"}, generator.extractFeatures(new String[] {"it", "is", "12.345", "feet", "long"}, Collections.emptyMap()).toArray()); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/doccat/DoccatFactoryTest.java0100644 0000000 0000000 00000007355 14523004075 033347 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; /** * Tests for the {@link DoccatFactory} class. */ public class DoccatFactoryTest { private static ObjectStream createSampleStream() throws IOException { InputStreamFactory isf = new ResourceAsStreamFactory( DoccatFactoryTest.class, "/opennlp/tools/doccat/DoccatSample.txt"); return new DocumentSampleStream(new PlainTextByLineStream(isf, StandardCharsets.UTF_8)); } private static DoccatModel train() throws IOException { return DocumentCategorizerME.train("x-unspecified", createSampleStream(), TrainingParameters.defaultParams(), new DoccatFactory()); } private static DoccatModel train(DoccatFactory factory) throws IOException { return DocumentCategorizerME.train("x-unspecified", createSampleStream(), TrainingParameters.defaultParams(), factory); } @Test void testDefault() throws IOException { DoccatModel model = train(); Assertions.assertNotNull(model); ByteArrayOutputStream out = new ByteArrayOutputStream(); model.serialize(out); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); DoccatModel fromSerialized = new DoccatModel(in); DoccatFactory factory = fromSerialized.getFactory(); Assertions.assertNotNull(factory); Assertions.assertEquals(1, factory.getFeatureGenerators().length); Assertions.assertEquals(BagOfWordsFeatureGenerator.class, factory.getFeatureGenerators()[0].getClass()); } @Test void testCustom() throws IOException { FeatureGenerator[] featureGenerators = {new BagOfWordsFeatureGenerator(), new NGramFeatureGenerator(), new NGramFeatureGenerator(2, 3)}; DoccatFactory factory = new DoccatFactory(featureGenerators); DoccatModel model = train(factory); Assertions.assertNotNull(model); ByteArrayOutputStream out = new ByteArrayOutputStream(); model.serialize(out); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); DoccatModel fromSerialized = new DoccatModel(in); factory = fromSerialized.getFactory(); Assertions.assertNotNull(factory); Assertions.assertEquals(3, factory.getFeatureGenerators().length); Assertions.assertEquals(BagOfWordsFeatureGenerator.class, factory.getFeatureGenerators()[0].getClass()); Assertions.assertEquals(NGramFeatureGenerator.class, factory.getFeatureGenerators()[1].getClass()); Assertions.assertEquals(NGramFeatureGenerator.class, factory.getFeatureGenerators()[2].getClass()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_doccat_DocumentCa0100644 0000000 0000000 00000000162 14523004075 032540 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/doccat/DocumentCategorizerMETest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/doccat/DocumentCategorizerMETest.0100644 0000000 0000000 00000006270 14523004075 034152 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import java.io.IOException; import java.util.Set; import java.util.SortedMap; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.InsufficientTrainingDataException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; import opennlp.tools.util.TrainingParameters; public class DocumentCategorizerMETest { @Test void testSimpleTraining() throws IOException { ObjectStream samples = ObjectStreamUtils.createObjectStream( new DocumentSample("1", new String[] {"a", "b", "c"}), new DocumentSample("1", new String[] {"a", "b", "c", "1", "2"}), new DocumentSample("1", new String[] {"a", "b", "c", "3", "4"}), new DocumentSample("0", new String[] {"x", "y", "z"}), new DocumentSample("0", new String[] {"x", "y", "z", "5", "6"}), new DocumentSample("0", new String[] {"x", "y", "z", "7", "8"})); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, 100); params.put(TrainingParameters.CUTOFF_PARAM, 0); DoccatModel model = DocumentCategorizerME.train("x-unspecified", samples, params, new DoccatFactory()); DocumentCategorizer doccat = new DocumentCategorizerME(model); double[] aProbs = doccat.categorize(new String[] {"a"}); Assertions.assertEquals("1", doccat.getBestCategory(aProbs)); double[] bProbs = doccat.categorize(new String[] {"x"}); Assertions.assertEquals("0", doccat.getBestCategory(bProbs)); //test to make sure sorted map's last key is cat 1 because it has the highest score. SortedMap> sortedScoreMap = doccat.sortedScoreMap(new String[] {"a"}); Set cat = sortedScoreMap.get(sortedScoreMap.lastKey()); Assertions.assertEquals(1, cat.size()); } @Test void insufficientTestData() { Assertions.assertThrows(InsufficientTrainingDataException.class, () -> { ObjectStream samples = ObjectStreamUtils.createObjectStream( new DocumentSample("1", new String[] {"a", "b", "c"})); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, 100); params.put(TrainingParameters.CUTOFF_PARAM, 0); DocumentCategorizerME.train("x-unspecified", samples, params, new DoccatFactory()); }); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_doccat_DocumentCa0100644 0000000 0000000 00000000162 14523004075 032540 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/doccat/DocumentCategorizerNBTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/doccat/DocumentCategorizerNBTest.0100644 0000000 0000000 00000005400 14523004075 034142 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import java.io.IOException; import java.util.Set; import java.util.SortedMap; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.ml.AbstractTrainer; import opennlp.tools.ml.naivebayes.NaiveBayesTrainer; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; import opennlp.tools.util.TrainingParameters; public class DocumentCategorizerNBTest { @Test void testSimpleTraining() throws IOException { ObjectStream samples = ObjectStreamUtils.createObjectStream( new DocumentSample("1", new String[] {"a", "b", "c"}), new DocumentSample("1", new String[] {"a", "b", "c", "1", "2"}), new DocumentSample("1", new String[] {"a", "b", "c", "3", "4"}), new DocumentSample("0", new String[] {"x", "y", "z"}), new DocumentSample("0", new String[] {"x", "y", "z", "5", "6"}), new DocumentSample("0", new String[] {"x", "y", "z", "7", "8"})); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, 100); params.put(TrainingParameters.CUTOFF_PARAM, 0); params.put(AbstractTrainer.ALGORITHM_PARAM, NaiveBayesTrainer.NAIVE_BAYES_VALUE); DoccatModel model = DocumentCategorizerME.train("x-unspecified", samples, params, new DoccatFactory()); DocumentCategorizer doccat = new DocumentCategorizerME(model); double[] aProbs = doccat.categorize(new String[] {"a"}); Assertions.assertEquals("1", doccat.getBestCategory(aProbs)); double[] bProbs = doccat.categorize(new String[] {"x"}); Assertions.assertEquals("0", doccat.getBestCategory(bProbs)); //test to make sure sorted map's last key is cat 1 because it has the highest score. SortedMap> sortedScoreMap = doccat.sortedScoreMap(new String[] {"a"}); Set cat = sortedScoreMap.get(sortedScoreMap.lastKey()); Assertions.assertEquals(1, cat.size()); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/doccat/DocumentSampleTest.java0100644 0000000 0000000 00000005332 14523004075 033533 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class DocumentSampleTest { @Test void testEquals() { Assertions.assertNotSame(createGoldSample(), createGoldSample()); Assertions.assertEquals(createGoldSample(), createGoldSample()); Assertions.assertNotEquals(createPredSample(), createGoldSample()); Assertions.assertNotEquals(createPredSample(), new Object()); } @Test void testDocumentSampleSerDe() throws IOException { DocumentSample documentSample = createGoldSample(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream(byteArrayOutputStream); out.writeObject(documentSample); out.flush(); byte[] bytes = byteArrayOutputStream.toByteArray(); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); ObjectInput objectInput = new ObjectInputStream(byteArrayInputStream); DocumentSample deSerializedDocumentSample = null; try { deSerializedDocumentSample = (DocumentSample) objectInput.readObject(); } catch (ClassNotFoundException e) { // do nothing } Assertions.assertNotNull(deSerializedDocumentSample); Assertions.assertEquals(documentSample.getCategory(), deSerializedDocumentSample.getCategory()); Assertions.assertArrayEquals(documentSample.getText(), deSerializedDocumentSample.getText()); } public static DocumentSample createGoldSample() { return new DocumentSample("aCategory", new String[] {"a", "small", "text"}); } public static DocumentSample createPredSample() { return new DocumentSample("anotherCategory", new String[] {"a", "small", "text"}); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_doccat_NGramFeatu0100644 0000000 0000000 00000000162 14523004075 032507 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/doccat/NGramFeatureGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/doccat/NGramFeatureGeneratorTest.0100644 0000000 0000000 00000007753 14523004075 034151 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.doccat; import java.util.Collections; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.InvalidFormatException; public class NGramFeatureGeneratorTest { static final String[] TOKENS = new String[] {"a", "b", "c", "d", "e", "f", "g"}; @Test void testNull() throws Exception { NGramFeatureGenerator generator = new NGramFeatureGenerator(); try { generator.extractFeatures(null, Collections.emptyMap()); Assertions.fail("NullPointerException must be thrown"); } catch (NullPointerException expected) { } } @Test void testEmpty() throws Exception { NGramFeatureGenerator generator = new NGramFeatureGenerator(); Assertions.assertEquals(0, generator.extractFeatures(new String[] {}, Collections.emptyMap()).size()); } @Test void testInvalidGramSize1() { try { new NGramFeatureGenerator(0, 1); Assertions.fail("InvalidFormatException must be thrown"); } catch (InvalidFormatException expected) { } } @Test void testInvalidGramSize2() { try { new NGramFeatureGenerator(2, 1); Assertions.fail("InvalidFormatException must be thrown"); } catch (InvalidFormatException expected) { } } @Test void testUnigram() throws Exception { NGramFeatureGenerator generator = new NGramFeatureGenerator(1, 1); Assertions.assertArrayEquals( new String[] {"ng=:a", "ng=:b", "ng=:c", "ng=:d", "ng=:e", "ng=:f", "ng=:g"}, generator.extractFeatures(TOKENS, Collections.emptyMap()).toArray()); } @Test void testBigram() throws Exception { NGramFeatureGenerator generator = new NGramFeatureGenerator(2, 2); Assertions.assertArrayEquals( new String[] {"ng=:a:b", "ng=:b:c", "ng=:c:d", "ng=:d:e", "ng=:e:f", "ng=:f:g"}, generator.extractFeatures(TOKENS, Collections.emptyMap()).toArray()); } @Test void testTrigram() throws Exception { NGramFeatureGenerator generator = new NGramFeatureGenerator(3, 3); Assertions.assertArrayEquals( new String[] {"ng=:a:b:c", "ng=:b:c:d", "ng=:c:d:e", "ng=:d:e:f", "ng=:e:f:g"}, generator.extractFeatures(TOKENS, Collections.emptyMap()).toArray()); } @Test void test12gram() throws Exception { NGramFeatureGenerator generator = new NGramFeatureGenerator(1, 2); Assertions.assertArrayEquals( new String[] { "ng=:a", "ng=:a:b", "ng=:b", "ng=:b:c", "ng=:c", "ng=:c:d", "ng=:d", "ng=:d:e", "ng=:e", "ng=:e:f", "ng=:f", "ng=:f:g", "ng=:g" }, generator.extractFeatures(TOKENS, Collections.emptyMap()).toArray()); } @Test void test13gram() throws Exception { NGramFeatureGenerator generator = new NGramFeatureGenerator(1, 3); Assertions.assertArrayEquals( new String[] { "ng=:a", "ng=:a:b", "ng=:a:b:c", "ng=:b", "ng=:b:c", "ng=:b:c:d", "ng=:c", "ng=:c:d", "ng=:c:d:e", "ng=:d", "ng=:d:e", "ng=:d:e:f", "ng=:e", "ng=:e:f", "ng=:e:f:g", "ng=:f", "ng=:f:g", "ng=:g" }, generator.extractFeatures(TOKENS, Collections.emptyMap()).toArray()); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/eval/AbstractEvalTest.java0100644 0000000 0000000 00000011302 14523004075 032652 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.eval; import java.io.BufferedInputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.InputStream; import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.security.MessageDigest; import java.util.List; import java.util.stream.Collectors; import org.junit.jupiter.api.Assertions; import opennlp.tools.ml.maxent.quasinewton.QNTrainer; import opennlp.tools.ml.naivebayes.NaiveBayesTrainer; import opennlp.tools.ml.perceptron.PerceptronTrainer; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.ModelUtil; public abstract class AbstractEvalTest { public static final double ACCURACY_DELTA = 0.0001d; public static final String HASH_ALGORITHM = "MD5"; public static void verifyTrainingData(ObjectStream samples, BigInteger checksum) throws Exception { MessageDigest digest = MessageDigest.getInstance(HASH_ALGORITHM); Object sample; while ((sample = samples.read()) != null) { digest.update(sample.toString().getBytes(StandardCharsets.UTF_8)); } samples.close(); Assertions.assertEquals(checksum, new BigInteger(1, digest.digest())); } public static void verifyFileChecksum(Path file, BigInteger checksum) throws Exception { MessageDigest digest = MessageDigest.getInstance(HASH_ALGORITHM); try (InputStream in = new BufferedInputStream(Files.newInputStream(file))) { byte[] buf = new byte[65536]; int len; while ((len = in.read(buf)) > 0) { digest.update(buf, 0, len); } } Assertions.assertEquals(checksum, new BigInteger(1, digest.digest())); } public static void verifyDirectoryChecksum(Path path, String extension, BigInteger checksum) throws Exception { MessageDigest digest = MessageDigest.getInstance(HASH_ALGORITHM); final List paths = Files.walk(path) .filter(Files::isRegularFile) .filter(p -> p.toString().endsWith(extension)).sorted().collect(Collectors.toList()); // Ensure the paths are in a consistent order when // verifying the file checksums. for (Path p : paths) { try (InputStream in = new BufferedInputStream(Files.newInputStream(p))) { byte[] buf = new byte[65536]; int len; while ((len = in.read(buf)) > 0) { digest.update(buf, 0, len); } } } Assertions.assertEquals(checksum, new BigInteger(1, digest.digest())); } public static File getOpennlpDataDir() throws FileNotFoundException { final String dataDirectory = System.getProperty("OPENNLP_DATA_DIR"); if (dataDirectory == null || dataDirectory.isBlank()) { throw new IllegalArgumentException("The OPENNLP_DATA_DIR is not set."); } final File file = new File(System.getProperty("OPENNLP_DATA_DIR")); if (!file.exists()) { throw new FileNotFoundException("The OPENNLP_DATA_DIR path of " + dataDirectory + " was not found."); } return file; } public TrainingParameters createPerceptronParams() { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); params.put(TrainingParameters.ALGORITHM_PARAM, PerceptronTrainer.PERCEPTRON_VALUE); params.put(TrainingParameters.CUTOFF_PARAM, 0); return params; } public TrainingParameters createMaxentQnParams() { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); params.put(TrainingParameters.ALGORITHM_PARAM, QNTrainer.MAXENT_QN_VALUE); params.put(TrainingParameters.CUTOFF_PARAM, 0); return params; } public TrainingParameters createNaiveBayesParams() { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); params.put(TrainingParameters.ALGORITHM_PARAM, NaiveBayesTrainer.NAIVE_BAYES_VALUE); params.put(TrainingParameters.CUTOFF_PARAM, 5); return params; } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/eval/ArvoresDeitadasEval.java0100644 0000000 0000000 00000017504 14523004075 033341 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.eval; import java.io.File; import java.io.IOException; import java.math.BigInteger; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import opennlp.tools.chunker.ChunkerCrossValidator; import opennlp.tools.chunker.ChunkerFactory; import opennlp.tools.formats.ad.ADChunkSampleStream; import opennlp.tools.formats.ad.ADNameSampleStream; import opennlp.tools.formats.ad.ADSentenceSampleStream; import opennlp.tools.formats.convert.NameToTokenSampleStream; import opennlp.tools.namefind.NameSample; import opennlp.tools.sentdetect.SDCrossValidator; import opennlp.tools.sentdetect.SentenceDetectorFactory; import opennlp.tools.sentdetect.lang.Factory; import opennlp.tools.tokenize.DetokenizationDictionary; import opennlp.tools.tokenize.DictionaryDetokenizer; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.tokenize.TokenizerCrossValidator; import opennlp.tools.tokenize.TokenizerFactory; import opennlp.tools.util.MarkableFileInputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.ModelUtil; /** * Cross validation of Sentence Detector, Tokenizer and Chunker against the * Portugues corpus. *

* Download the gz files from the Floresta Sintactica project site and * decompress it into this directory: $OPENNLP_DATA_DIR/ad. *

*/ public class ArvoresDeitadasEval extends AbstractEvalTest { private static final String BOSQUE = "ad/Bosque_CF_8.0.ad.txt"; private static final String FLORESTA_VIRGEM = "ad/FlorestaVirgem_CF_3.0_ad.txt"; private static final String LANG = "por"; private static ObjectStream getLineSample(String corpus) throws IOException { return new PlainTextByLineStream(new MarkableFileInputStreamFactory( new File(getOpennlpDataDir(), corpus)), StandardCharsets.ISO_8859_1); } @BeforeAll static void verifyTrainingData() throws Exception { verifyTrainingData(new ADSentenceSampleStream(getLineSample(BOSQUE), false), new BigInteger("140568367548727787313497336739085858596")); verifyTrainingData(new ADSentenceSampleStream(getLineSample(FLORESTA_VIRGEM), false), new BigInteger("2614161133949079191933514776652602918")); } private void sentenceCrossEval(TrainingParameters params, double expectedScore) throws IOException { ADSentenceSampleStream samples = new ADSentenceSampleStream( getLineSample(FLORESTA_VIRGEM), false); SDCrossValidator cv = new SDCrossValidator(LANG, params, new SentenceDetectorFactory(LANG, true, null, new Factory().getEOSCharacters(LANG))); cv.evaluate(samples, 10); Assertions.assertEquals(expectedScore, cv.getFMeasure().getFMeasure(), 0.0001d); } private void tokenizerCrossEval(TrainingParameters params, double expectedScore) throws IOException { ObjectStream nameSamples = new ADNameSampleStream( getLineSample(FLORESTA_VIRGEM), true); DictionaryDetokenizer detokenizer = new DictionaryDetokenizer( new DetokenizationDictionary(new File("lang/pt/tokenizer/pt-detokenizer.xml"))); ObjectStream samples = new NameToTokenSampleStream( detokenizer, nameSamples); TokenizerCrossValidator validator; TokenizerFactory tokFactory = TokenizerFactory.create(null, LANG, null, true, null); validator = new opennlp.tools.tokenize.TokenizerCrossValidator(params, tokFactory); validator.evaluate(samples, 10); Assertions.assertEquals(expectedScore, validator.getFMeasure().getFMeasure(), 0.0001d); } private void chunkerCrossEval(TrainingParameters params, double expectedScore) throws IOException { ADChunkSampleStream samples = new ADChunkSampleStream(getLineSample(BOSQUE)); ChunkerCrossValidator cv = new ChunkerCrossValidator(LANG, params, new ChunkerFactory()); cv.evaluate(samples, 10); Assertions.assertEquals(expectedScore, cv.getFMeasure().getFMeasure(), 0.0001d); } @Test void evalPortugueseSentenceDetectorPerceptron() throws IOException { sentenceCrossEval(createPerceptronParams(), 0.9892778840089301d); } @Test void evalPortugueseSentenceDetectorGis() throws IOException { sentenceCrossEval(ModelUtil.createDefaultTrainingParameters(), 0.987270070655111d); } @Test void evalPortugueseSentenceDetectorMaxentQn() throws IOException { sentenceCrossEval(createMaxentQnParams(), 0.9924715809679968d); } @Test void evalPortugueseSentenceDetectorNaiveBayes() throws IOException { sentenceCrossEval(createNaiveBayesParams(), 0.9672196206048099d); } @Test void evalPortugueseTokenizerPerceptron() throws IOException { tokenizerCrossEval(createPerceptronParams(), 0.9994887308380267d); } @Test void evalPortugueseTokenizerGis() throws IOException { tokenizerCrossEval(ModelUtil.createDefaultTrainingParameters(), 0.9992539405481062d); } @Test void evalPortugueseTokenizerMaxentQn() throws IOException { tokenizerCrossEval(createMaxentQnParams(), 0.9996017148748251d); } @Test void evalPortugueseTokenizerNaiveBayes() throws IOException { tokenizerCrossEval(createNaiveBayesParams(), 0.9962358244502717d); } @Test void evalPortugueseTokenizerMaxentQnMultipleThreads() throws IOException { TrainingParameters params = createMaxentQnParams(); params.put("Threads", 4); tokenizerCrossEval(params, 0.9996017148748251d); } @Test void evalPortugueseChunkerPerceptron() throws IOException { chunkerCrossEval(createPerceptronParams(), 0.9631066789979492); } @Test void evalPortugueseChunkerGis() throws IOException { chunkerCrossEval(ModelUtil.createDefaultTrainingParameters(), 0.9571790438663504); } @Test void evalPortugueseChunkerGisMultipleThreads() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); params.put("Threads", 4); chunkerCrossEval(params, 0.9571790438663504); } @Test void evalPortugueseChunkerQn() throws IOException { chunkerCrossEval(createMaxentQnParams(), 0.9655574076677446); } @Test void evalPortugueseChunkerQnMultipleThreads() throws IOException { TrainingParameters params = createMaxentQnParams(); params.put("Threads", 4); // NOTE: Should be the same as without multiple threads!!! chunkerCrossEval(params, 0.9655858045209428); } @Test void evalPortugueseChunkerNaiveBayes() throws IOException { chunkerCrossEval(createNaiveBayesParams(), 0.9041507736043933d); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/eval/Conll00ChunkerEval.java0100644 0000000 0000000 00000010467 14523004075 033011 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.eval; import java.io.File; import java.io.IOException; import java.math.BigInteger; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import opennlp.tools.HighMemoryUsage; import opennlp.tools.chunker.ChunkSample; import opennlp.tools.chunker.ChunkSampleStream; import opennlp.tools.chunker.ChunkerEvaluator; import opennlp.tools.chunker.ChunkerFactory; import opennlp.tools.chunker.ChunkerME; import opennlp.tools.chunker.ChunkerModel; import opennlp.tools.util.MarkableFileInputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.ModelUtil; /** * Evaluates the chunker against the English CONLL2000 corpus. *

* Download the train and eval gz files from the CONLL2000 shared task * site * and decompress them into this directory: $OPENNLP_DATA_DIR/conll00. */ public class Conll00ChunkerEval extends AbstractEvalTest { private static File TEST_DATA_FILE; private static File TRAIN_DATA_FILE; private static ChunkerModel train(File trainFile, TrainingParameters params) throws IOException { ObjectStream samples = new ChunkSampleStream( new PlainTextByLineStream( new MarkableFileInputStreamFactory(trainFile), StandardCharsets.UTF_8)); return ChunkerME.train("eng", samples, params, new ChunkerFactory()); } private static void eval(ChunkerModel model, File testData, double expectedFMeasure) throws IOException { ObjectStream samples = new ChunkSampleStream( new PlainTextByLineStream(new MarkableFileInputStreamFactory(testData), StandardCharsets.UTF_8)); ChunkerEvaluator evaluator = new ChunkerEvaluator(new ChunkerME(model)); evaluator.evaluate(samples); Assertions.assertEquals(expectedFMeasure, evaluator.getFMeasure().getFMeasure(), 0.0001); } @BeforeAll static void verifyTrainingData() throws Exception { TEST_DATA_FILE = new File(getOpennlpDataDir(), "conll00/test.txt"); TRAIN_DATA_FILE = new File(getOpennlpDataDir(), "conll00/train.txt"); verifyTrainingData(new ChunkSampleStream( new PlainTextByLineStream(new MarkableFileInputStreamFactory(TEST_DATA_FILE), StandardCharsets.UTF_8)), new BigInteger("84610235226433393380477662908529306002")); verifyTrainingData(new ChunkSampleStream( new PlainTextByLineStream(new MarkableFileInputStreamFactory(TEST_DATA_FILE), StandardCharsets.UTF_8)), new BigInteger("84610235226433393380477662908529306002")); } @Test void evalEnglishPerceptron() throws IOException { ChunkerModel maxentModel = train(TRAIN_DATA_FILE, createPerceptronParams()); eval(maxentModel, TEST_DATA_FILE, 0.9295018353434714d); } @Test void evalEnglishMaxentGis() throws IOException { ChunkerModel maxentModel = train(TRAIN_DATA_FILE, ModelUtil.createDefaultTrainingParameters()); eval(maxentModel, TEST_DATA_FILE, 0.9239687473746113d); } // Note: Don't try to run this on your MacBook @Test @HighMemoryUsage void evalEnglishMaxentQn() throws IOException { TrainingParameters params = createMaxentQnParams(); params.put("Threads", 4); ChunkerModel maxentModel = train(TRAIN_DATA_FILE, params); eval(maxentModel, TEST_DATA_FILE, 0.9302599230947028d); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/eval/Conll02NameFinderEval.java0100644 0000000 0000000 00000054731 14523004075 033426 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.eval; import java.io.File; import java.io.IOException; import java.math.BigInteger; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import opennlp.tools.formats.Conll02NameSampleStream; import opennlp.tools.formats.Conll02NameSampleStream.LANGUAGE; import opennlp.tools.namefind.NameFinderME; import opennlp.tools.namefind.NameSample; import opennlp.tools.namefind.TokenNameFinderEvaluator; import opennlp.tools.namefind.TokenNameFinderFactory; import opennlp.tools.namefind.TokenNameFinderModel; import opennlp.tools.util.MarkableFileInputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.ModelUtil; /** * Evaluates the name finder against the Dutch and Spanish CONLL2002 corpus. *

* Download the tarball from the CONLL2002 shared task * site * and decompress it into this directory: $OPENNLP_DATA_DIR/conll2002. * Also decompress the training files. *

* TODO: * - Files are provided in gzipped. It would be better if they would not be unpacked by the user. * - Double check the encoding which is used to open the files. Currently that is UTF-8. * - Make the Conll02 reader compatible. Currently it doesn't work with spanish data without pos tags. */ public class Conll02NameFinderEval extends AbstractEvalTest { private static File dutchTrainingFile; private static File dutchTestAFile; private static File dutchTestBFile; private static File spanishTrainingFile; private static File spanishTestAFile; private static File spanishTestBFile; private TokenNameFinderModel train(File trainFile, LANGUAGE lang, TrainingParameters params, int types) throws IOException { ObjectStream samples = new Conll02NameSampleStream( lang, new MarkableFileInputStreamFactory(trainFile), types); return NameFinderME.train(lang.toString().toLowerCase(), null, samples, params, new TokenNameFinderFactory()); } private void eval(TokenNameFinderModel model, File testData, LANGUAGE lang, int types, double expectedFMeasure) throws IOException { ObjectStream samples = new Conll02NameSampleStream( lang, new MarkableFileInputStreamFactory(testData), types); TokenNameFinderEvaluator evaluator = new TokenNameFinderEvaluator(new NameFinderME(model)); evaluator.evaluate(samples); Assertions.assertEquals(expectedFMeasure, evaluator.getFMeasure().getFMeasure(), 0.0001); } @BeforeAll static void verifyTrainingData() throws Exception { dutchTrainingFile = new File(getOpennlpDataDir(), "conll02/ner/data/ned.train"); dutchTestAFile = new File(getOpennlpDataDir(), "conll02/ner/data/ned.testa"); dutchTestBFile = new File(getOpennlpDataDir(), "conll02/ner/data/ned.testb"); spanishTrainingFile = new File(getOpennlpDataDir(), "conll02/ner/data/esp.train"); spanishTestAFile = new File(getOpennlpDataDir(), "conll02/ner/data/esp.testa"); spanishTestBFile = new File(getOpennlpDataDir(), "conll02/ner/data/esp.testb"); verifyTrainingData(new Conll02NameSampleStream( LANGUAGE.NLD, new MarkableFileInputStreamFactory(dutchTrainingFile), Conll02NameSampleStream.GENERATE_PERSON_ENTITIES), new BigInteger("244586345524636491735310529744396558541")); verifyTrainingData(new Conll02NameSampleStream( LANGUAGE.NLD, new MarkableFileInputStreamFactory(dutchTestAFile), Conll02NameSampleStream.GENERATE_PERSON_ENTITIES), new BigInteger("246627484906192029575077493716150690762")); verifyTrainingData(new Conll02NameSampleStream( LANGUAGE.NLD, new MarkableFileInputStreamFactory(dutchTestBFile), Conll02NameSampleStream.GENERATE_PERSON_ENTITIES), new BigInteger("160341129860513958203421820548607024932")); verifyTrainingData(new Conll02NameSampleStream( LANGUAGE.SPA, new MarkableFileInputStreamFactory(spanishTrainingFile), Conll02NameSampleStream.GENERATE_PERSON_ENTITIES), new BigInteger("77622870982561669762102345960336466598")); verifyTrainingData(new Conll02NameSampleStream( LANGUAGE.SPA, new MarkableFileInputStreamFactory(spanishTestAFile), Conll02NameSampleStream.GENERATE_PERSON_ENTITIES), new BigInteger("143641744095673112729040601949871621359")); verifyTrainingData(new Conll02NameSampleStream( LANGUAGE.SPA, new MarkableFileInputStreamFactory(spanishTestBFile), Conll02NameSampleStream.GENERATE_PERSON_ENTITIES), new BigInteger("91310271319593094243555094042436157393")); } @Test void evalDutchPersonPerceptron() throws IOException { TrainingParameters params = createPerceptronParams(); TokenNameFinderModel maxentModel = train(dutchTrainingFile, LANGUAGE.NLD, params, Conll02NameSampleStream.GENERATE_PERSON_ENTITIES); eval(maxentModel, dutchTestAFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_PERSON_ENTITIES, 0.6590308370044053d); eval(maxentModel, dutchTestBFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_PERSON_ENTITIES, 0.7396672034353193d); } @Test void evalDutchPersonMaxentGis() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); TokenNameFinderModel maxentModel = train(dutchTrainingFile, LANGUAGE.NLD, params, Conll02NameSampleStream.GENERATE_PERSON_ENTITIES); eval(maxentModel, dutchTestAFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_PERSON_ENTITIES, 0.5691489361702128d); eval(maxentModel, dutchTestBFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_PERSON_ENTITIES, 0.7148891235480465d); } @Test void evalDutchPersonMaxentQn() throws IOException { TrainingParameters params = createMaxentQnParams(); TokenNameFinderModel maxentModel = train(dutchTrainingFile, LANGUAGE.NLD, params, Conll02NameSampleStream.GENERATE_PERSON_ENTITIES); eval(maxentModel, dutchTestAFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_PERSON_ENTITIES, 0.6356311548791406d); eval(maxentModel, dutchTestBFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_PERSON_ENTITIES, 0.7458533975387909d); } @Test void evalDutchOrganizationPerceptron() throws IOException { TrainingParameters params = createPerceptronParams(); TokenNameFinderModel maxentModel = train(dutchTrainingFile, LANGUAGE.NLD, params, Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES); eval(maxentModel, dutchTestAFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES, 0.6289549376797698d); eval(maxentModel, dutchTestBFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES, 0.6498245614035087d); } @Test void evalDutchOrganizationMaxentGis() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); TokenNameFinderModel maxentModel = train(dutchTrainingFile, LANGUAGE.NLD, params, Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES); eval(maxentModel, dutchTestAFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES, 0.5197969543147207d); eval(maxentModel, dutchTestBFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES, 0.5716342692584593d); } @Test void evalDutchOrganizationMaxentQn() throws IOException { TrainingParameters params = createMaxentQnParams(); TokenNameFinderModel maxentModel = train(dutchTrainingFile, LANGUAGE.NLD, params, Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES); eval(maxentModel, dutchTestAFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES, 0.5851703406813628d); eval(maxentModel, dutchTestBFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES, 0.6089466089466089d); } @Test void evalDutchLocationPerceptron() throws IOException { TrainingParameters params = createPerceptronParams(); TokenNameFinderModel maxentModel = train(dutchTrainingFile, LANGUAGE.NLD, params, Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES); eval(maxentModel, dutchTestAFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES, 0.7887005649717513d); eval(maxentModel, dutchTestBFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES, 0.7943859649122806d); } @Test void evalDutchLocationMaxentGis() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); TokenNameFinderModel maxentModel = train(dutchTrainingFile, LANGUAGE.NLD, params, Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES); eval(maxentModel, dutchTestAFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES, 0.564673157162726d); eval(maxentModel, dutchTestBFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES, 0.6835443037974683d); } @Test void evalDutchLocationMaxentQn() throws IOException { TrainingParameters params = createMaxentQnParams(); TokenNameFinderModel maxentModel = train(dutchTrainingFile, LANGUAGE.NLD, params, Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES); eval(maxentModel, dutchTestAFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES, 0.6711229946524064d); eval(maxentModel, dutchTestBFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES, 0.738993710691824d); } @Test void evalDutchMiscPerceptron() throws IOException { TrainingParameters params = createPerceptronParams(); TokenNameFinderModel maxentModel = train(dutchTrainingFile, LANGUAGE.NLD, params, Conll02NameSampleStream.GENERATE_MISC_ENTITIES); eval(maxentModel, dutchTestAFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_MISC_ENTITIES, 0.6676691729323307d); eval(maxentModel, dutchTestBFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_MISC_ENTITIES, 0.6711345141215893d); } @Test void evalDutchMiscMaxentGis() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); TokenNameFinderModel maxentModel = train(dutchTrainingFile, LANGUAGE.NLD, params, Conll02NameSampleStream.GENERATE_MISC_ENTITIES); eval(maxentModel, dutchTestAFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_MISC_ENTITIES, 0.5831157528285466d); eval(maxentModel, dutchTestBFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_MISC_ENTITIES, 0.5755079626578803d); } @Test void evalDutchMiscMaxentQn() throws IOException { TrainingParameters params = createMaxentQnParams(); TokenNameFinderModel maxentModel = train(dutchTrainingFile, LANGUAGE.NLD, params, Conll02NameSampleStream.GENERATE_MISC_ENTITIES); eval(maxentModel, dutchTestAFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_MISC_ENTITIES, 0.5965858041329739d); eval(maxentModel, dutchTestBFile, LANGUAGE.NLD, Conll02NameSampleStream.GENERATE_MISC_ENTITIES, 0.5876993166287016d); } @Test void evalDutchCombinedPerceptron() throws IOException { TrainingParameters params = createPerceptronParams(); int combinedType = Conll02NameSampleStream.GENERATE_PERSON_ENTITIES | Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES | Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES | Conll02NameSampleStream.GENERATE_MISC_ENTITIES; TokenNameFinderModel maxentModel = train(dutchTrainingFile, LANGUAGE.NLD, params, combinedType); eval(maxentModel, dutchTestAFile, LANGUAGE.NLD, combinedType, 0.7170923379174853d); eval(maxentModel, dutchTestBFile, LANGUAGE.NLD, combinedType, 0.7442767950052028d); } @Test void evalDutchCombinedMaxentGis() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); int combinedType = Conll02NameSampleStream.GENERATE_PERSON_ENTITIES | Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES | Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES | Conll02NameSampleStream.GENERATE_MISC_ENTITIES; TokenNameFinderModel maxentModel = train(dutchTrainingFile, LANGUAGE.NLD, params, combinedType); eval(maxentModel, dutchTestAFile, LANGUAGE.NLD, combinedType, 0.6687585801137477d); eval(maxentModel, dutchTestBFile, LANGUAGE.NLD, combinedType, 0.699353169469599d); } @Test void evalDutchCombinedMaxentQn() throws IOException { TrainingParameters params = createMaxentQnParams(); int combinedType = Conll02NameSampleStream.GENERATE_PERSON_ENTITIES | Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES | Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES | Conll02NameSampleStream.GENERATE_MISC_ENTITIES; TokenNameFinderModel maxentModel = train(dutchTrainingFile, LANGUAGE.NLD, params, combinedType); eval(maxentModel, dutchTestAFile, LANGUAGE.NLD, combinedType, 0.7084501401682018d); eval(maxentModel, dutchTestBFile, LANGUAGE.NLD, combinedType, 0.7370923015977816d); } @Test void evalSpanishPersonPerceptron() throws IOException { TrainingParameters params = createPerceptronParams(); TokenNameFinderModel maxentModel = train(spanishTrainingFile, LANGUAGE.SPA, params, Conll02NameSampleStream.GENERATE_PERSON_ENTITIES); eval(maxentModel, spanishTestAFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_PERSON_ENTITIES, 0.8177509694097371d); eval(maxentModel, spanishTestBFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_PERSON_ENTITIES, 0.8438928804702809d); } @Test void evalSpanishPersonMaxentGis() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); TokenNameFinderModel maxentModel = train(spanishTrainingFile, LANGUAGE.SPA, params, Conll02NameSampleStream.GENERATE_PERSON_ENTITIES); eval(maxentModel, spanishTestAFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_PERSON_ENTITIES, 0.684263959390863d); eval(maxentModel, spanishTestBFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_PERSON_ENTITIES, 0.8142532221379833d); } @Test void evalSpanishPersonMaxentQn() throws IOException { TrainingParameters params = createMaxentQnParams(); TokenNameFinderModel maxentModel = train(spanishTrainingFile, LANGUAGE.SPA, params, Conll02NameSampleStream.GENERATE_PERSON_ENTITIES); eval(maxentModel, spanishTestAFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_PERSON_ENTITIES, 0.7399014778325124d); eval(maxentModel, spanishTestBFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_PERSON_ENTITIES, 0.8282977155490052d); } @Test void evalSpanishOrganizationPerceptron() throws IOException { TrainingParameters params = createPerceptronParams(); TokenNameFinderModel maxentModel = train(spanishTrainingFile, LANGUAGE.SPA, params, Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES); eval(maxentModel, spanishTestAFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES, 0.7406759906759908d); eval(maxentModel, spanishTestBFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES, 0.7764471057884231d); } @Test void evalSpanishOrganizationMaxentGis() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); TokenNameFinderModel maxentModel = train(spanishTrainingFile, LANGUAGE.SPA, params, Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES); eval(maxentModel, spanishTestAFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES, 0.6988771691051379d); eval(maxentModel, spanishTestBFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES, 0.7638680659670164d); } @Test void evalSpanishOrganizationMaxentQn() throws IOException { TrainingParameters params = createMaxentQnParams(); TokenNameFinderModel maxentModel = train(spanishTrainingFile, LANGUAGE.SPA, params, Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES); eval(maxentModel, spanishTestAFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES, 0.6921985815602836d); eval(maxentModel, spanishTestBFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES, 0.7797548438117834d); } @Test void evalSpanishLocationPerceptron() throws IOException { TrainingParameters params = createPerceptronParams(); TokenNameFinderModel maxentModel = train(spanishTrainingFile, LANGUAGE.SPA, params, Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES); eval(maxentModel, spanishTestAFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES, 0.7156983930778738d); eval(maxentModel, spanishTestBFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES, 0.6361474435196195d); } @Test void evalSpanishLocationMaxentGis() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); TokenNameFinderModel maxentModel = train(spanishTrainingFile, LANGUAGE.SPA, params, Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES); eval(maxentModel, spanishTestAFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES, 0.7376263970196913d); eval(maxentModel, spanishTestBFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES, 0.6746987951807228d); } @Test void evalSpanishLocationMaxentQn() throws IOException { TrainingParameters params = createMaxentQnParams(); TokenNameFinderModel maxentModel = train(spanishTrainingFile, LANGUAGE.SPA, params, Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES); eval(maxentModel, spanishTestAFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES, 0.7463726059199071d); eval(maxentModel, spanishTestBFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES, 0.6772727272727272d); } @Test void evalSpanishMiscPerceptron() throws IOException { TrainingParameters params = createPerceptronParams(); TokenNameFinderModel maxentModel = train(spanishTrainingFile, LANGUAGE.SPA, params, Conll02NameSampleStream.GENERATE_MISC_ENTITIES); eval(maxentModel, spanishTestAFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_MISC_ENTITIES, 0.5020352781546812d); eval(maxentModel, spanishTestBFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_MISC_ENTITIES, 0.5703564727954972d); } @Test void evalSpanishMiscMaxentGis() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); TokenNameFinderModel maxentModel = train(spanishTrainingFile, LANGUAGE.SPA, params, Conll02NameSampleStream.GENERATE_MISC_ENTITIES); eval(maxentModel, spanishTestAFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_MISC_ENTITIES, 0.4176829268292683d); eval(maxentModel, spanishTestBFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_MISC_ENTITIES, 0.461839530332681d); } @Test void evalSpanishMiscMaxentQn() throws IOException { TrainingParameters params = createMaxentQnParams(); TokenNameFinderModel maxentModel = train(spanishTrainingFile, LANGUAGE.SPA, params, Conll02NameSampleStream.GENERATE_MISC_ENTITIES); eval(maxentModel, spanishTestAFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_MISC_ENTITIES, 0.478395061728395d); eval(maxentModel, spanishTestBFile, LANGUAGE.SPA, Conll02NameSampleStream.GENERATE_MISC_ENTITIES, 0.5153374233128835d); } @Test void evalSpanishCombinedPerceptron() throws IOException { TrainingParameters params = createPerceptronParams(); int combinedType = Conll02NameSampleStream.GENERATE_PERSON_ENTITIES | Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES | Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES | Conll02NameSampleStream.GENERATE_MISC_ENTITIES; TokenNameFinderModel maxentModel = train(spanishTrainingFile, LANGUAGE.SPA, params, combinedType); eval(maxentModel, spanishTestAFile, LANGUAGE.SPA, combinedType, 0.7383003492433061d); eval(maxentModel, spanishTestBFile, LANGUAGE.SPA, combinedType, 0.748207507380852d); } @Test void evalSpanishCombinedMaxentGis() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); int combinedType = Conll02NameSampleStream.GENERATE_PERSON_ENTITIES | Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES | Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES | Conll02NameSampleStream.GENERATE_MISC_ENTITIES; TokenNameFinderModel maxentModel = train(spanishTrainingFile, LANGUAGE.SPA, params, combinedType); eval(maxentModel, spanishTestAFile, LANGUAGE.SPA, combinedType, 0.7060201452330757d); eval(maxentModel, spanishTestBFile, LANGUAGE.SPA, combinedType, 0.7549668874172185d); } @Test void evalSpanishCombinedMaxentQn() throws IOException { TrainingParameters params = createMaxentQnParams(); int combinedType = Conll02NameSampleStream.GENERATE_PERSON_ENTITIES | Conll02NameSampleStream.GENERATE_ORGANIZATION_ENTITIES | Conll02NameSampleStream.GENERATE_LOCATION_ENTITIES | Conll02NameSampleStream.GENERATE_MISC_ENTITIES; TokenNameFinderModel maxentModel = train(spanishTrainingFile, LANGUAGE.SPA, params, combinedType); eval(maxentModel, spanishTestAFile, LANGUAGE.SPA, combinedType, 0.7204819277108434d); eval(maxentModel, spanishTestBFile, LANGUAGE.SPA, combinedType, 0.7514002585092633d); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/eval/ConllXPosTaggerEval.java0100644 0000000 0000000 00000021570 14523004075 033272 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.eval; import java.io.File; import java.io.IOException; import java.math.BigInteger; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import opennlp.tools.HighMemoryUsage; import opennlp.tools.formats.ConllXPOSSampleStream; import opennlp.tools.postag.POSEvaluator; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSSample; import opennlp.tools.postag.POSTaggerFactory; import opennlp.tools.postag.POSTaggerME; import opennlp.tools.util.MarkableFileInputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.ModelUtil; /** * Evaluates the POS Tagger on the CONLL-X data. The CONLL-X data includes training and evaluation data for * Danish, Dutch, Portuguese and Swedish. *

* The following files are needed in the data directory to run this test: * conllx/data/danish/ddt/train/danish_ddt_train.conll
* conllx/data/danish/ddt/test/danish_ddt_test.conll
* conllx/data/dutch/alpino/train/dutch_alpino_train.conll
* conllx/data/dutch/alpino/test/dutch_alpino_test.conll
* conllx/data/portuguese/bosque/treebank/portuguese_bosque_train.conll
* conllx/data/portuguese/bosque/test/portuguese_bosque_test.conll
* conllx/data/swedish/talbanken05/train/swedish_talbanken05_train.conll
* conllx/data/swedish/talbanken05/test/swedish_talbanken05_test.conll
*

* The structure follows the structure of the CONLL-X data distribution. There is * one package for each language, and an extra package containing the tests for all * languages. */ public class ConllXPosTaggerEval extends AbstractEvalTest { private POSModel train(File trainFile, String lang, TrainingParameters params) throws IOException { ObjectStream samples = new ConllXPOSSampleStream(new MarkableFileInputStreamFactory(trainFile), StandardCharsets.UTF_8); return POSTaggerME.train(lang, samples, params, new POSTaggerFactory()); } private void eval(POSModel model, File testData, double expectedAccuracy) throws IOException { ObjectStream samples = new ConllXPOSSampleStream( new MarkableFileInputStreamFactory(testData), StandardCharsets.UTF_8); POSEvaluator evaluator = new POSEvaluator(new POSTaggerME(model)); evaluator.evaluate(samples); Assertions.assertEquals(expectedAccuracy, evaluator.getWordAccuracy(), 0.0001); } @BeforeAll static void verifyTrainingData() throws Exception { verifyTrainingData(new ConllXPOSSampleStream( new MarkableFileInputStreamFactory(new File(getOpennlpDataDir(), "conllx/data/danish/ddt/train/danish_ddt_train.conll")), StandardCharsets.UTF_8), new BigInteger("30795670444498617202001550516753630016")); verifyTrainingData(new ConllXPOSSampleStream( new MarkableFileInputStreamFactory(new File(getOpennlpDataDir(), "conllx/data/danish/ddt/test/danish_ddt_test.conll")), StandardCharsets.UTF_8), new BigInteger("314104267846430512372780024568104131337")); verifyTrainingData(new ConllXPOSSampleStream( new MarkableFileInputStreamFactory(new File(getOpennlpDataDir(), "conllx/data/dutch/alpino/train/dutch_alpino_train.conll")), StandardCharsets.UTF_8), new BigInteger("109328245573060521952850454797286933887")); verifyTrainingData(new ConllXPOSSampleStream( new MarkableFileInputStreamFactory(new File(getOpennlpDataDir(), "conllx/data/dutch/alpino/test/dutch_alpino_test.conll")), StandardCharsets.UTF_8), new BigInteger("132343141132816640849897155456916243039")); verifyTrainingData(new ConllXPOSSampleStream( new MarkableFileInputStreamFactory(new File(getOpennlpDataDir(), "conllx/data/portuguese/bosque/treebank/portuguese_bosque_train.conll")), StandardCharsets.UTF_8), new BigInteger("9504382474772307801979515927230835901")); verifyTrainingData(new ConllXPOSSampleStream( new MarkableFileInputStreamFactory(new File(getOpennlpDataDir(), "conllx/data/swedish/talbanken05/train/swedish_talbanken05_train.conll")), StandardCharsets.UTF_8), new BigInteger("175256039869578311901318972681191182910")); verifyTrainingData(new ConllXPOSSampleStream( new MarkableFileInputStreamFactory(new File(getOpennlpDataDir(), "conllx/data/swedish/talbanken05/test/swedish_talbanken05_test.conll")), StandardCharsets.UTF_8), new BigInteger("128378790384268106811747599235147991544")); } @Test void evalDanishMaxentGis() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); POSModel maxentModel = train(new File(getOpennlpDataDir(), "conllx/data/danish/ddt/train/danish_ddt_train.conll"), "dan", params); eval(maxentModel, new File(getOpennlpDataDir(), "conllx/data/danish/ddt/test/danish_ddt_test.conll"), 0.9504442925495558d); } @Test void evalDanishMaxentQn() throws IOException { TrainingParameters params = createMaxentQnParams(); POSModel maxentModel = train(new File(getOpennlpDataDir(), "conllx/data/danish/ddt/train/danish_ddt_train.conll"), "dan", params); eval(maxentModel, new File(getOpennlpDataDir(), "conllx/data/danish/ddt/test/danish_ddt_test.conll"), 0.9564251537935748d); } @Test void evalDutchMaxentGis() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); POSModel maxentModel = train(new File(getOpennlpDataDir(), "conllx/data/dutch/alpino/train/dutch_alpino_train.conll"), "nld", params); eval(maxentModel, new File(getOpennlpDataDir(), "conllx/data/dutch/alpino/test/dutch_alpino_test.conll"), 0.9213965980304387d); } @Test @HighMemoryUsage void evalDutchMaxentQn() throws IOException { TrainingParameters params = createMaxentQnParams(); POSModel maxentModel = train(new File(getOpennlpDataDir(), "conllx/data/dutch/alpino/train/dutch_alpino_train.conll"), "nld", params); eval(maxentModel, new File(getOpennlpDataDir(), "conllx/data/dutch/alpino/test/dutch_alpino_test.conll"), 0.9282005371530886d); } @Test void evalPortugueseMaxentGis() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); POSModel maxentModel = train(new File(getOpennlpDataDir(), "conllx/data/portuguese/bosque/treebank/portuguese_bosque_train.conll"), "por", params); eval(maxentModel, new File(getOpennlpDataDir(), "conllx/data/portuguese/bosque/test/portuguese_bosque_test.conll"), 0.9671041418101244d); } @Test void evalPortugueseMaxentQn() throws IOException { TrainingParameters params = createMaxentQnParams(); POSModel maxentModel = train(new File(getOpennlpDataDir(), "conllx/data/portuguese/bosque/treebank/portuguese_bosque_train.conll"), "por", params); eval(maxentModel, new File(getOpennlpDataDir(), "conllx/data/portuguese/bosque/test/portuguese_bosque_test.conll"), 0.9662519175046872d); } @Test void evalSwedishMaxentGis() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); POSModel maxentModel = train(new File(getOpennlpDataDir(), "conllx/data/swedish/talbanken05/train/swedish_talbanken05_train.conll"), "swe", params); eval(maxentModel, new File(getOpennlpDataDir(), "conllx/data/swedish/talbanken05/test/swedish_talbanken05_test.conll"), 0.9248585572842999d); } @Test void evalSwedishMaxentQn() throws IOException { TrainingParameters params = createMaxentQnParams(); POSModel maxentModel = train(new File(getOpennlpDataDir(), "conllx/data/swedish/talbanken05/train/swedish_talbanken05_train.conll"), "swe", params); eval(maxentModel, new File(getOpennlpDataDir(), "conllx/data/swedish/talbanken05/test/swedish_talbanken05_test.conll"), 0.9377652050919377d); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_eval_OntoNotes4Na0100644 0000000 0000000 00000000157 14523004075 032507 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/eval/OntoNotes4NameFinderEval.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/eval/OntoNotes4NameFinderEval.jav0100644 0000000 0000000 00000013063 14523004075 034061 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.eval; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.math.BigInteger; import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.Map; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import opennlp.tools.cmdline.namefind.TokenNameFinderTrainerTool; import opennlp.tools.formats.DirectorySampleStream; import opennlp.tools.formats.convert.FileToStringSampleStream; import opennlp.tools.formats.ontonotes.OntoNotesNameSampleStream; import opennlp.tools.namefind.NameSample; import opennlp.tools.namefind.NameSampleTypeFilter; import opennlp.tools.namefind.TokenNameFinderCrossValidator; import opennlp.tools.namefind.TokenNameFinderFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.ModelUtil; public class OntoNotes4NameFinderEval extends AbstractEvalTest { private static ObjectStream createNameSampleStream() throws IOException { ObjectStream documentStream = new DirectorySampleStream(new File( getOpennlpDataDir(), "ontonotes4/data/files/data/english"), file -> { if (file.isFile()) { return file.getName().endsWith(".name"); } return file.isDirectory(); }, true); return new OntoNotesNameSampleStream(new FileToStringSampleStream( documentStream, StandardCharsets.UTF_8)); } private void crossEval(TrainingParameters params, String type, double expectedScore) throws IOException { try (ObjectStream samples = createNameSampleStream()) { TokenNameFinderCrossValidator cv = new TokenNameFinderCrossValidator("eng", null, params, new TokenNameFinderFactory()); ObjectStream filteredSamples; if (type != null) { filteredSamples = new NameSampleTypeFilter(new String[] {type}, samples); } else { filteredSamples = samples; } cv.evaluate(filteredSamples, 5); Assertions.assertEquals(expectedScore, cv.getFMeasure().getFMeasure(), 0.001d); } } @BeforeAll static void verifyTrainingData() throws Exception { verifyDirectoryChecksum(new File(getOpennlpDataDir(), "ontonotes4/data/files/data/english").toPath(), ".name", new BigInteger("74675117716526375898817028829433420680")); } @Test void evalEnglishPersonNameFinder() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); params.put("Threads", "4"); crossEval(params, "person", 0.822014580552418d); } @Test void evalEnglishDateNameFinder() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); params.put("Threads", "4"); crossEval(params, "date", 0.8043873255040994d); } @Test void evalAllTypesNameFinder() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); params.put("Threads", "4"); crossEval(params, null, 0.8014054850253551d); } @Test void evalAllTypesWithPOSNameFinder() throws IOException, URISyntaxException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); params.put("Threads", "4"); // load the feature generator ByteArrayOutputStream bytes = new ByteArrayOutputStream(); try (InputStream in = this.getClass().getResourceAsStream( "ner-en_pos-features.xml")) { byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { bytes.write(buf, 0, len); } } byte[] featureGen = bytes.toByteArray(); // create a temp resource folder and copy the pos model there Path resourcesPath = Files.createTempDirectory("opennlp_resources"); Files.copy(new File(getOpennlpDataDir(), "models-sf/en-pos-perceptron.bin").toPath(), new File(resourcesPath.toFile(), "en-pos-perceptron.bin").toPath(), StandardCopyOption.REPLACE_EXISTING); Map resources = TokenNameFinderTrainerTool.loadResources(resourcesPath.toFile(), Paths.get(this.getClass().getResource("ner-en_pos-features.xml").toURI()).toFile()); try (ObjectStream samples = createNameSampleStream()) { TokenNameFinderCrossValidator cv = new TokenNameFinderCrossValidator("eng", null, params, featureGen, resources); ObjectStream filteredSamples; filteredSamples = samples; cv.evaluate(filteredSamples, 5); Assertions.assertEquals(0.8070226153653437d, cv.getFMeasure().getFMeasure(), 0.001d); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/eval/OntoNotes4ParserEval.java0100644 0000000 0000000 00000007000 14523004075 033440 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.eval; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.math.BigInteger; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import opennlp.tools.formats.DirectorySampleStream; import opennlp.tools.formats.convert.FileToStringSampleStream; import opennlp.tools.formats.ontonotes.DocumentToLineStream; import opennlp.tools.formats.ontonotes.OntoNotesParseSampleStream; import opennlp.tools.parser.HeadRules; import opennlp.tools.parser.Parse; import opennlp.tools.parser.ParserCrossValidator; import opennlp.tools.parser.ParserType; import opennlp.tools.parser.lang.en.HeadRulesTest; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.ModelUtil; public class OntoNotes4ParserEval extends AbstractEvalTest { private static ObjectStream createParseSampleStream() throws IOException { ObjectStream documentStream = new DirectorySampleStream(new File( getOpennlpDataDir(), "ontonotes4/data/files/data/english"), file -> { if (file.isFile()) { return file.getName().endsWith(".parse"); } return file.isDirectory(); }, true); return new OntoNotesParseSampleStream( new DocumentToLineStream(new FileToStringSampleStream( documentStream, StandardCharsets.UTF_8))); } private void crossEval(TrainingParameters params, HeadRules rules, double expectedScore) throws IOException { try (ObjectStream samples = createParseSampleStream()) { ParserCrossValidator cv = new ParserCrossValidator("eng", params, rules, ParserType.CHUNKING); cv.evaluate(samples, 5); Assertions.assertEquals(expectedScore, cv.getFMeasure().getFMeasure(), 0.0001d); } } @BeforeAll static void verifyTrainingData() throws Exception { verifyTrainingData(createParseSampleStream(), new BigInteger("83833369887442127665956850482411800415")); } @Test void evalEnglishMaxent() throws IOException { HeadRules headRules; try (InputStream headRulesIn = HeadRulesTest.class.getResourceAsStream("/opennlp/tools/parser/en_head_rules")) { headRules = new opennlp.tools.parser.lang.en.HeadRules( new InputStreamReader(headRulesIn, StandardCharsets.UTF_8)); } TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); params.put("build.Threads", 4); params.put("tagger.Threads", 4); params.put("chunker.Threads", 4); params.put("check.Threads", 4); crossEval(params, headRules, 0.9373673649973432d); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_eval_OntoNotes4Po0100644 0000000 0000000 00000000156 14523004075 032526 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/eval/OntoNotes4PosTaggerEval.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/eval/OntoNotes4PosTaggerEval.java0100644 0000000 0000000 00000006031 14523004075 034102 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.eval; import java.io.File; import java.io.IOException; import java.math.BigInteger; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import opennlp.tools.formats.DirectorySampleStream; import opennlp.tools.formats.convert.FileToStringSampleStream; import opennlp.tools.formats.convert.ParseToPOSSampleStream; import opennlp.tools.formats.ontonotes.DocumentToLineStream; import opennlp.tools.formats.ontonotes.OntoNotesParseSampleStream; import opennlp.tools.postag.POSSample; import opennlp.tools.postag.POSTaggerCrossValidator; import opennlp.tools.postag.POSTaggerFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.ModelUtil; public class OntoNotes4PosTaggerEval extends AbstractEvalTest { private static ObjectStream createPOSSampleStream() throws IOException { ObjectStream documentStream = new DirectorySampleStream(new File( getOpennlpDataDir(), "ontonotes4/data/files/data/english"), file -> { if (file.isFile()) { return file.getName().endsWith(".parse"); } return file.isDirectory(); }, true); return new ParseToPOSSampleStream(new OntoNotesParseSampleStream( new DocumentToLineStream( new FileToStringSampleStream(documentStream, StandardCharsets.UTF_8)))); } private void crossEval(TrainingParameters params, double expectedScore) throws IOException { try (ObjectStream samples = createPOSSampleStream()) { POSTaggerCrossValidator cv = new POSTaggerCrossValidator("eng", params, new POSTaggerFactory()); cv.evaluate(samples, 5); Assertions.assertEquals(expectedScore, cv.getWordAccuracy(), 0.0001d); } } @BeforeAll static void verifyTrainingData() throws Exception { verifyTrainingData(createPOSSampleStream(), new BigInteger("300430765214895870888056958221353356972")); } @Test void evalEnglishMaxentTagger() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); params.put("Threads", "4"); crossEval(params, 0.969345319453096d); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/eval/SnowballTokenizerEval.java0100644 0000000 0000000 00000005215 14523004075 033731 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.eval; import java.io.FileNotFoundException; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; import java.util.Locale; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import opennlp.tools.stemmer.snowball.SnowballStemmer; import static org.junit.jupiter.api.Assertions.assertEquals; /** * Eval tests for the {@link SnowballStemmer} class. *

* Uses the data set provided by * to test all languages available in OpenNLP. *

*/ public class SnowballTokenizerEval extends AbstractEvalTest { @ParameterizedTest @EnumSource(SnowballStemmer.ALGORITHM.class) public void test(SnowballStemmer.ALGORITHM lang) throws IOException { final List vocabulary = getData(lang, "voc.txt"); final List expectedOutputs = getData(lang, "output.txt"); assertEquals(vocabulary.size(), expectedOutputs.size(), "Expected equally sized lists."); final SnowballStemmer stemmer = new SnowballStemmer(lang); for (int i = 0; i < vocabulary.size(); i++) { final String word = vocabulary.get(i); final String stem = expectedOutputs.get(i); assertEquals(stem, stemmer.stem(word)); } } private List getData(SnowballStemmer.ALGORITHM lang, String name) throws IOException { final Path expectedOutput = getSnowballDataLanguagePath( getSnowballDataPath(), lang).resolve(name); return Files.readAllLines(expectedOutput); } private Path getSnowballDataPath() throws FileNotFoundException { return getOpennlpDataDir().toPath().resolve("snowball-data"); } private Path getSnowballDataLanguagePath(Path root, SnowballStemmer.ALGORITHM lang) { return root.resolve(lang.toString().toLowerCase(Locale.ROOT)); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/eval/SourceForgeModelEval.java0100644 0000000 0000000 00000033537 14523004075 033471 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.eval; import java.io.File; import java.io.IOException; import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import opennlp.tools.chunker.Chunker; import opennlp.tools.chunker.ChunkerME; import opennlp.tools.chunker.ChunkerModel; import opennlp.tools.cmdline.parser.ParserTool; import opennlp.tools.namefind.NameFinderME; import opennlp.tools.namefind.TokenNameFinder; import opennlp.tools.namefind.TokenNameFinderModel; import opennlp.tools.parser.Parse; import opennlp.tools.parser.Parser; import opennlp.tools.parser.ParserFactory; import opennlp.tools.parser.ParserModel; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSSample; import opennlp.tools.postag.POSTagger; import opennlp.tools.postag.POSTaggerME; import opennlp.tools.sentdetect.SentenceDetector; import opennlp.tools.sentdetect.SentenceDetectorME; import opennlp.tools.sentdetect.SentenceModel; import opennlp.tools.tokenize.SimpleTokenizer; import opennlp.tools.tokenize.Tokenizer; import opennlp.tools.tokenize.TokenizerME; import opennlp.tools.tokenize.TokenizerModel; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.MarkableFileInputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; /** * This tests ensures that the existing SourceForge models perform * like they are expected to. *

* To run this tests external the leipzig sentences files is needed: * leipzig/eng_news_2010_300K-sentences.txt, this file can be * obtained from the leipzig corpus project.
*

* And all the SourceForge models:
* - models-sf/en-sent.bin
* - models-sf/en-token.bin
* - models-sf/en-ner-date.bin
* - models-sf/en-ner-location.binn
* - models-sf/en-ner-money.bin
* - models-sf/en-ner-organization.bin
* - models-sf/en-ner-percentage.bi
* - models-sf/en-ner-person.bin
* - models-sf/en-ner-time.bin
* - models-sf/en-chunker.bin
* - models-sf/en-pos-maxent.bin
* - models-sf/en-pos-perceptron.bin
* - models-sf/en-parser-chunking.bin.bin
*/ public class SourceForgeModelEval extends AbstractEvalTest { private static class LeipzigTestSample { private final List text; private LeipzigTestSample(String[] text) { Objects.requireNonNull(text, "text must not be null"); this.text = List.of(text); } public String[] getText() { return text.toArray(new String[0]); } @Override public String toString() { StringBuilder sampleString = new StringBuilder("eng"); sampleString.append('\t'); for (String s : text) { sampleString.append(s).append(' '); } if (!sampleString.isEmpty()) { // remove last space sampleString.setLength(sampleString.length() - 1); } return sampleString.toString(); } } private static class LeipzigTestSampleStream extends FilterObjectStream { private final int sentencePerDocument; private final Tokenizer tokenizer; private LeipzigTestSampleStream(int sentencePerDocument, Tokenizer tokenizer, InputStreamFactory in) throws IOException { super(new PlainTextByLineStream(in, StandardCharsets.UTF_8)); this.sentencePerDocument = sentencePerDocument; this.tokenizer = tokenizer; } @Override public LeipzigTestSample read() throws IOException { int count = 0; List tokensList = new ArrayList<>(); String line; while (count < sentencePerDocument && (line = samples.read()) != null) { String[] tokens = tokenizer.tokenize(line); if (tokens.length == 0) { throw new IOException("Empty lines are not allowed!"); } // Always skip first token, that is the sentence number! tokensList.addAll(Arrays.asList(tokens).subList(1, tokens.length)); count++; } if (!tokensList.isEmpty()) { return new LeipzigTestSample(tokensList.toArray(new String[0])); } return null; } } @BeforeAll static void verifyTrainingData() throws Exception { verifyTrainingData(new LeipzigTestSampleStream(25, SimpleTokenizer.INSTANCE, new MarkableFileInputStreamFactory(new File(getOpennlpDataDir(), "leipzig/eng_news_2010_300K-sentences.txt"))), new BigInteger("172812413483919324675263268750583851712")); } @Test void evalSentenceModel() throws Exception { SentenceModel model = new SentenceModel( new File(getOpennlpDataDir(), "models-sf/en-sent.bin")); MessageDigest digest = MessageDigest.getInstance(HASH_ALGORITHM); SentenceDetector sentenceDetector = new SentenceDetectorME(model); StringBuilder text = new StringBuilder(); try (ObjectStream lineBatches = new LeipzigTestSampleStream(25, SimpleTokenizer.INSTANCE, new MarkableFileInputStreamFactory(new File(getOpennlpDataDir(), "leipzig/eng_news_2010_300K-sentences.txt")))) { LeipzigTestSample lineBatch; while ((lineBatch = lineBatches.read()) != null) { text.append(String.join(" ", lineBatch.getText())).append(" "); } } String[] sentences = sentenceDetector.sentDetect(text.toString()); for (String sentence : sentences) { digest.update(sentence.getBytes(StandardCharsets.UTF_8)); } Assertions.assertEquals(new BigInteger("228544068397077998410949364710969159291"), new BigInteger(1, digest.digest())); } @Test void evalTokenModel() throws Exception { // the input stream is currently tokenized, we should detokenize it again, // (or extend to pass in tokenizer, then whitespace tokenizer can be passed) // and then tokenize it here TokenizerModel model = new TokenizerModel( new File(getOpennlpDataDir(), "models-sf/en-token.bin")); MessageDigest digest = MessageDigest.getInstance(HASH_ALGORITHM); Tokenizer tokenizer = new TokenizerME(model); try (ObjectStream lines = new LeipzigTestSampleStream(1, WhitespaceTokenizer.INSTANCE, new MarkableFileInputStreamFactory(new File(getOpennlpDataDir(), "leipzig/eng_news_2010_300K-sentences.txt")))) { LeipzigTestSample line; while ((line = lines.read()) != null) { String[] tokens = tokenizer.tokenize(String.join(" ", line.getText())); for (String token : tokens) { digest.update(token.getBytes(StandardCharsets.UTF_8)); } } } Assertions.assertEquals(new BigInteger("180602607571756839321060482558626151930"), new BigInteger(1, digest.digest())); } private ObjectStream createLineWiseStream() throws IOException { return new LeipzigTestSampleStream(1, SimpleTokenizer.INSTANCE, new MarkableFileInputStreamFactory(new File(getOpennlpDataDir(), "leipzig/eng_news_2010_300K-sentences.txt"))); } private void evalNameFinder(TokenNameFinderModel model, BigInteger expectedHash) throws Exception { MessageDigest digest = MessageDigest.getInstance(HASH_ALGORITHM); TokenNameFinder nameFinder = new NameFinderME(model); try (ObjectStream lines = createLineWiseStream()) { LeipzigTestSample line; while ((line = lines.read()) != null) { Span[] names = nameFinder.find(line.getText()); for (Span name : names) { digest.update((name.getType() + name.getStart() + name.getEnd()).getBytes(StandardCharsets.UTF_8)); } } } Assertions.assertEquals(expectedHash, new BigInteger(1, digest.digest())); } @Test void evalNerDateModel() throws Exception { TokenNameFinderModel personModel = new TokenNameFinderModel( new File(getOpennlpDataDir(), "models-sf/en-ner-date.bin")); evalNameFinder(personModel, new BigInteger("116570003910213570906062355532299200317")); } @Test void evalNerLocationModel() throws Exception { TokenNameFinderModel personModel = new TokenNameFinderModel( new File(getOpennlpDataDir(), "models-sf/en-ner-location.bin")); evalNameFinder(personModel, new BigInteger("44810593886021404716125849669208680993")); } @Test void evalNerMoneyModel() throws Exception { TokenNameFinderModel personModel = new TokenNameFinderModel( new File(getOpennlpDataDir(), "models-sf/en-ner-money.bin")); evalNameFinder(personModel, new BigInteger("65248897509365807977219790824670047287")); } @Test void evalNerOrganizationModel() throws Exception { TokenNameFinderModel personModel = new TokenNameFinderModel( new File(getOpennlpDataDir(), "models-sf/en-ner-organization.bin")); evalNameFinder(personModel, new BigInteger("50454559690338630659278005157657197233")); } @Test void evalNerPercentageModel() throws Exception { TokenNameFinderModel personModel = new TokenNameFinderModel( new File(getOpennlpDataDir(), "models-sf/en-ner-percentage.bin")); evalNameFinder(personModel, new BigInteger("320996882594215344113023719117249515343")); } @Test void evalNerPersonModel() throws Exception { TokenNameFinderModel personModel = new TokenNameFinderModel( new File(getOpennlpDataDir(), "models-sf/en-ner-person.bin")); evalNameFinder(personModel, new BigInteger("143619582249937129618340838626447763744")); } @Test void evalNerTimeModel() throws Exception { TokenNameFinderModel personModel = new TokenNameFinderModel( new File(getOpennlpDataDir(), "models-sf/en-ner-time.bin")); evalNameFinder(personModel, new BigInteger("282941772380683328816791801782579055940")); } @Test void evalChunkerModel() throws Exception { MessageDigest digest = MessageDigest.getInstance(HASH_ALGORITHM); POSTagger tagger = new POSTaggerME(new POSModel( new File(getOpennlpDataDir(), "models-sf/en-pos-perceptron.bin"))); Chunker chunker = new ChunkerME(new ChunkerModel( new File(getOpennlpDataDir(), "models-sf/en-chunker.bin"))); try (ObjectStream lines = createLineWiseStream()) { LeipzigTestSample line; while ((line = lines.read()) != null) { POSSample sentence = new POSSample(line.getText(), tagger.tag(line.getText())); String[] chunks = chunker.chunk(sentence.getSentence(), sentence.getTags()); for (String chunk : chunks) { digest.update(chunk.getBytes(StandardCharsets.UTF_8)); } } } Assertions.assertEquals(new BigInteger("304922886851384639120257052245406261332"), new BigInteger(1, digest.digest())); } private void evalPosModel(POSModel model, BigInteger expectedHash) throws Exception { // break the input stream into sentences // The input stream is tokenized and can be processed here directly MessageDigest digest = MessageDigest.getInstance(HASH_ALGORITHM); POSTagger tagger = new POSTaggerME(model); try (ObjectStream lines = createLineWiseStream()) { LeipzigTestSample line; while ((line = lines.read()) != null) { String[] tags = tagger.tag(line.getText()); for (String tag : tags) { digest.update(tag.getBytes(StandardCharsets.UTF_8)); } } } Assertions.assertEquals(expectedHash, new BigInteger(1, digest.digest())); } @Test void evalMaxentModel() throws Exception { POSModel maxentModel = new POSModel( new File(getOpennlpDataDir(), "models-sf/en-pos-maxent.bin")); evalPosModel(maxentModel, new BigInteger("231995214522232523777090597594904492687")); } @Test void evalPerceptronModel() throws Exception { POSModel perceptronModel = new POSModel( new File(getOpennlpDataDir(), "models-sf/en-pos-perceptron.bin")); evalPosModel(perceptronModel, new BigInteger("209440430718727101220960491543652921728")); } @Test void evalParserModel() throws Exception { ParserModel model = new ParserModel( new File(getOpennlpDataDir(), "models-sf/en-parser-chunking.bin")); MessageDigest digest = MessageDigest.getInstance(HASH_ALGORITHM); Parser parser = ParserFactory.create(model); try (ObjectStream lines = createLineWiseStream()) { LeipzigTestSample line; while ((line = lines.read()) != null) { Parse[] parse = ParserTool.parseLine(String.join(" ", line.getText()), parser, 1); if (parse.length > 0) { StringBuffer sb = new StringBuffer(); parse[0].show(sb); digest.update(sb.toString().getBytes(StandardCharsets.UTF_8)); } else { digest.update("empty".getBytes(StandardCharsets.UTF_8)); } } } Assertions.assertEquals(new BigInteger("68039262350771988792233880373220954061"), new BigInteger(1, digest.digest())); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_eval_UniversalDep0100644 0000000 0000000 00000000160 14523004075 032607 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/eval/UniversalDependency20Eval.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/eval/UniversalDependency20Eval.ja0100644 0000000 0000000 00000006440 14523004075 034040 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.eval; import java.io.File; import java.io.IOException; import java.math.BigInteger; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import opennlp.tools.formats.conllu.ConlluLemmaSampleStream; import opennlp.tools.formats.conllu.ConlluStream; import opennlp.tools.formats.conllu.ConlluTagset; import opennlp.tools.lemmatizer.LemmaSample; import opennlp.tools.lemmatizer.LemmatizerEvaluator; import opennlp.tools.lemmatizer.LemmatizerFactory; import opennlp.tools.lemmatizer.LemmatizerME; import opennlp.tools.lemmatizer.LemmatizerModel; import opennlp.tools.util.MarkableFileInputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.ModelUtil; public class UniversalDependency20Eval extends AbstractEvalTest { private static File SPA_ANCORA_TRAIN; private static File SPA_ANCORA_DEV; @BeforeAll static void verifyTrainingData() throws Exception { SPA_ANCORA_TRAIN = new File(getOpennlpDataDir(), "ud20/UD_Spanish-AnCora/es_ancora-ud-train.conllu"); SPA_ANCORA_DEV = new File(getOpennlpDataDir(), "ud20/UD_Spanish-AnCora/es_ancora-ud-dev.conllu"); verifyFileChecksum(SPA_ANCORA_TRAIN.toPath(), new BigInteger("224942804200733453179524127037951530195")); verifyFileChecksum(SPA_ANCORA_DEV.toPath(), new BigInteger("280996187464384493180190898172297941708")); } private double trainAndEval(String lang, File trainFile, TrainingParameters params, File evalFile) throws IOException { ConlluTagset tagset = ConlluTagset.X; ObjectStream trainSamples = new ConlluLemmaSampleStream(new ConlluStream( new MarkableFileInputStreamFactory(trainFile)), tagset); LemmatizerModel model = LemmatizerME.train(lang, trainSamples, params, new LemmatizerFactory()); LemmatizerEvaluator evaluator = new LemmatizerEvaluator(new LemmatizerME(model)); evaluator.evaluate(new ConlluLemmaSampleStream(new ConlluStream( new MarkableFileInputStreamFactory(evalFile)), tagset)); return evaluator.getWordAccuracy(); } @Test void trainAndEvalSpanishAncora() throws IOException { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); params.put("Threads", "4"); double wordAccuracy = trainAndEval("spa", SPA_ANCORA_TRAIN, params, SPA_ANCORA_DEV); Assertions.assertEquals(0.9057341692068787d, wordAccuracy, ACCURACY_DELTA); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/AbstractFormatTest.java0100644 0000000 0000000 00000002611 14523004075 033742 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.InputStream; import java.net.URL; public abstract class AbstractFormatTest { protected static final String FORMATS_BASE_DIR = "/opennlp/tools/formats/"; protected URL getResource(String resource) { return AbstractFormatTest.class.getResource(FORMATS_BASE_DIR + resource); } protected URL getResourceWithoutPrefix(String resource) { return getClass().getClassLoader().getResource(resource); } protected InputStream getResourceStream(String resource) { return AbstractFormatTest.class.getResourceAsStream(FORMATS_BASE_DIR + resource); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_AbstractS0100644 0000000 0000000 00000000162 14523004075 032622 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/AbstractSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/AbstractSampleStreamTest.0100644 0000000 0000000 00000002147 14523004075 034251 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import opennlp.tools.util.InputStreamFactory; public abstract class AbstractSampleStreamTest extends AbstractFormatTest { protected InputStreamFactory getFactory(String resource) { return new ResourceAsStreamFactory(AbstractSampleStreamTest.class, FORMATS_BASE_DIR + resource); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_Conll02Na0100644 0000000 0000000 00000000165 14523004075 032427 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/Conll02NameSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/Conll02NameSampleStreamTe0100644 0000000 0000000 00000006061 14523004075 034072 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.formats.Conll02NameSampleStream.LANGUAGE; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; /** * Note: * Sample training data must be UTF-8 encoded and uncompressed! */ public class Conll02NameSampleStreamTest extends AbstractSampleStreamTest { @Test void testParsingSpanishSample() throws IOException { try (ObjectStream sampleStream = openData(LANGUAGE.SPA, "conll2002-es.sample")) { NameSample personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals(5, personName.getSentence().length); Assertions.assertEquals(1, personName.getNames().length); Assertions.assertTrue(personName.isClearAdaptiveDataSet()); Span nameSpan = personName.getNames()[0]; Assertions.assertEquals(0, nameSpan.getStart()); Assertions.assertEquals(4, nameSpan.getEnd()); Assertions.assertTrue(personName.isClearAdaptiveDataSet()); Assertions.assertEquals(0, sampleStream.read().getNames().length); Assertions.assertNull(sampleStream.read()); } } @Test void testParsingDutchSample() throws IOException { try (ObjectStream sampleStream = openData(LANGUAGE.NLD, "conll2002-nl.sample")) { NameSample personName = sampleStream.read(); Assertions.assertEquals(0, personName.getNames().length); Assertions.assertTrue(personName.isClearAdaptiveDataSet()); personName = sampleStream.read(); Assertions.assertFalse(personName.isClearAdaptiveDataSet()); Assertions.assertNull(sampleStream.read()); } } @Test void testReset() throws IOException { try (ObjectStream sampleStream = openData(LANGUAGE.NLD, "conll2002-nl.sample")) { NameSample sample = sampleStream.read(); sampleStream.reset(); Assertions.assertEquals(sample, sampleStream.read()); } } private ObjectStream openData(LANGUAGE lang, String name) throws IOException { return new Conll02NameSampleStream( lang, getFactory(name), Conll02NameSampleStream.GENERATE_PERSON_ENTITIES); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_Conll03Na0100644 0000000 0000000 00000000165 14523004075 032430 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/Conll03NameSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/Conll03NameSampleStreamTe0100644 0000000 0000000 00000007332 14523004075 034075 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.formats.Conll03NameSampleStream.LANGUAGE; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; /** * Test for the {@link Conll03NameSampleStream} class. */ public class Conll03NameSampleStreamTest extends AbstractSampleStreamTest { private static final String ENGLISH_SAMPLE = "conll2003-en.sample"; private static final String GERMAN_SAMPLE = "conll2003-de.sample"; @Test void testParsingEnglishSample() throws IOException { try (ObjectStream sampleStream = openData(LANGUAGE.EN, ENGLISH_SAMPLE)) { NameSample personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals(9, personName.getSentence().length); Assertions.assertEquals(0, personName.getNames().length); Assertions.assertTrue(personName.isClearAdaptiveDataSet()); personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals(2, personName.getSentence().length); Assertions.assertEquals(1, personName.getNames().length); Assertions.assertFalse(personName.isClearAdaptiveDataSet()); Span nameSpan = personName.getNames()[0]; Assertions.assertEquals(0, nameSpan.getStart()); Assertions.assertEquals(2, nameSpan.getEnd()); Assertions.assertNull(sampleStream.read()); } } @Test void testParsingEnglishSampleWithGermanAsLanguage() { Assertions.assertThrows(IOException.class, () -> { ObjectStream sampleStream = openData(LANGUAGE.DE, ENGLISH_SAMPLE); sampleStream.read(); }); } @Test void testParsingGermanSampleWithEnglishAsLanguage() { Assertions.assertThrows(IOException.class, () -> { ObjectStream sampleStream = openData(LANGUAGE.EN, GERMAN_SAMPLE); sampleStream.read(); }); } @Test void testParsingGermanSample() throws IOException { try (ObjectStream sampleStream = openData(LANGUAGE.DE, GERMAN_SAMPLE)) { NameSample personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals(5, personName.getSentence().length); Assertions.assertEquals(0, personName.getNames().length); Assertions.assertTrue(personName.isClearAdaptiveDataSet()); } } @Test void testReset() throws IOException { try (ObjectStream sampleStream = openData(LANGUAGE.DE, GERMAN_SAMPLE)) { NameSample sample = sampleStream.read(); sampleStream.reset(); Assertions.assertEquals(sample, sampleStream.read()); } } private ObjectStream openData(LANGUAGE lang, String name) throws IOException { return new Conll03NameSampleStream( lang, getFactory(name), Conll02NameSampleStream.GENERATE_PERSON_ENTITIES); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_ConllXPOS0100644 0000000 0000000 00000000163 14523004075 032516 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ConllXPOSSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ConllXPOSSampleStreamTest0100644 0000000 0000000 00000012330 14523004075 034204 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.postag.POSSample; import opennlp.tools.util.ObjectStream; public class ConllXPOSSampleStreamTest extends AbstractSampleStreamTest { @Test void testParsingSample() throws IOException { try (ObjectStream sampleStream = new ConllXPOSSampleStream( getFactory("conllx.sample"), StandardCharsets.UTF_8)) { POSSample a = sampleStream.read(); String[] aSentence = a.getSentence(); String[] aTags = a.getTags(); Assertions.assertEquals(22, aSentence.length); Assertions.assertEquals(22, aTags.length); Assertions.assertEquals("To", aSentence[0]); Assertions.assertEquals("AC", aTags[0]); Assertions.assertEquals("kendte", aSentence[1]); Assertions.assertEquals("AN", aTags[1]); Assertions.assertEquals("russiske", aSentence[2]); Assertions.assertEquals("AN", aTags[2]); Assertions.assertEquals("historikere", aSentence[3]); Assertions.assertEquals("NC", aTags[3]); Assertions.assertEquals("Andronik", aSentence[4]); Assertions.assertEquals("NP", aTags[4]); Assertions.assertEquals("Andronik", aSentence[5]); Assertions.assertEquals("NP", aTags[5]); Assertions.assertEquals("og", aSentence[6]); Assertions.assertEquals("CC", aTags[6]); Assertions.assertEquals("Igor", aSentence[7]); Assertions.assertEquals("NP", aTags[7]); Assertions.assertEquals("Klamkin", aSentence[8]); Assertions.assertEquals("NP", aTags[8]); Assertions.assertEquals("tror", aSentence[9]); Assertions.assertEquals("VA", aTags[9]); Assertions.assertEquals("ikke", aSentence[10]); Assertions.assertEquals("RG", aTags[10]); Assertions.assertEquals(",", aSentence[11]); Assertions.assertEquals("XP", aTags[11]); Assertions.assertEquals("at", aSentence[12]); Assertions.assertEquals("CS", aTags[12]); Assertions.assertEquals("Rusland", aSentence[13]); Assertions.assertEquals("NP", aTags[13]); Assertions.assertEquals("kan", aSentence[14]); Assertions.assertEquals("VA", aTags[14]); Assertions.assertEquals("udvikles", aSentence[15]); Assertions.assertEquals("VA", aTags[15]); Assertions.assertEquals("uden", aSentence[16]); Assertions.assertEquals("SP", aTags[16]); Assertions.assertEquals("en", aSentence[17]); Assertions.assertEquals("PI", aTags[17]); Assertions.assertEquals("\"", aSentence[18]); Assertions.assertEquals("XP", aTags[18]); Assertions.assertEquals("jernnæve", aSentence[19]); Assertions.assertEquals("NC", aTags[19]); Assertions.assertEquals("\"", aSentence[20]); Assertions.assertEquals("XP", aTags[20]); Assertions.assertEquals(".", aSentence[21]); Assertions.assertEquals("XP", aTags[21]); POSSample b = sampleStream.read(); String[] bSentence = b.getSentence(); String[] bTags = b.getTags(); Assertions.assertEquals(12, bSentence.length); Assertions.assertEquals(12, bTags.length); Assertions.assertEquals("De", bSentence[0]); Assertions.assertEquals("PP", bTags[0]); Assertions.assertEquals("hævder", bSentence[1]); Assertions.assertEquals("VA", bTags[1]); Assertions.assertEquals(",", bSentence[2]); Assertions.assertEquals("XP", bTags[2]); Assertions.assertEquals("at", bSentence[3]); Assertions.assertEquals("CS", bTags[3]); Assertions.assertEquals("Ruslands", bSentence[4]); Assertions.assertEquals("NP", bTags[4]); Assertions.assertEquals("vej", bSentence[5]); Assertions.assertEquals("NC", bTags[5]); Assertions.assertEquals("til", bSentence[6]); Assertions.assertEquals("SP", bTags[6]); Assertions.assertEquals("demokrati", bSentence[7]); Assertions.assertEquals("NC", bTags[7]); Assertions.assertEquals("går", bSentence[8]); Assertions.assertEquals("VA", bTags[8]); Assertions.assertEquals("gennem", bSentence[9]); Assertions.assertEquals("SP", bTags[9]); Assertions.assertEquals("diktatur", bSentence[10]); Assertions.assertEquals("NC", bTags[10]); Assertions.assertEquals(".", bSentence[11]); Assertions.assertEquals("XP", bTags[11]); Assertions.assertNull(sampleStream.read()); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_Directory0100644 0000000 0000000 00000000163 14523004075 032701 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/DirectorySampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/DirectorySampleStreamTest0100644 0000000 0000000 00000012473 14523004075 034377 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import java.util.UUID; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.AbstractTempDirTest; public class DirectorySampleStreamTest extends AbstractTempDirTest { private FileFilter filter; @BeforeEach public void setup() { filter = new TempFileNameFilter(); } @Test public void directoryTest() throws IOException { List files = new ArrayList<>(); File temp1 = createTempFile(); files.add(temp1); File temp2 = createTempFile(); files.add(temp2); DirectorySampleStream stream = new DirectorySampleStream(tempDir.toFile(), filter, false); File file = stream.read(); Assertions.assertTrue(files.contains(file)); file = stream.read(); Assertions.assertTrue(files.contains(file)); file = stream.read(); Assertions.assertNull(file); stream.close(); } @Test public void directoryNullFilterTest() throws IOException { List files = new ArrayList<>(); File temp1 = createTempFile(); files.add(temp1); File temp2 = createTempFile(); files.add(temp2); DirectorySampleStream stream = new DirectorySampleStream(tempDir.toFile(), null, false); File file = stream.read(); Assertions.assertTrue(files.contains(file)); file = stream.read(); Assertions.assertTrue(files.contains(file)); file = stream.read(); Assertions.assertNull(file); stream.close(); } @Test public void recursiveDirectoryTest() throws IOException { List files = new ArrayList<>(); File temp1 = createTempFile(); files.add(temp1); File tempSubDirectory = createTempFolder("sub1"); File temp2 = Files.createTempFile(tempSubDirectory.toPath(), "sub1", ".tmp").toFile(); files.add(temp2); DirectorySampleStream stream = new DirectorySampleStream(tempDir.toFile(), filter, true); File file = stream.read(); Assertions.assertTrue(files.contains(file)); file = stream.read(); Assertions.assertTrue(files.contains(file)); file = stream.read(); Assertions.assertNull(file); stream.close(); } @Test public void resetDirectoryTest() throws IOException { List files = new ArrayList<>(); File temp1 = createTempFile(); files.add(temp1); File temp2 = createTempFile(); files.add(temp2); DirectorySampleStream stream = new DirectorySampleStream(tempDir.toFile(), filter, false); File file = stream.read(); Assertions.assertTrue(files.contains(file)); stream.reset(); file = stream.read(); Assertions.assertTrue(files.contains(file)); file = stream.read(); Assertions.assertTrue(files.contains(file)); file = stream.read(); Assertions.assertNull(file); stream.close(); } @Test public void emptyDirectoryTest() throws IOException { DirectorySampleStream stream = new DirectorySampleStream(tempDir.toFile(), filter, false); Assertions.assertNull(stream.read()); stream.close(); } @Test public void invalidDirectoryTest() { Assertions.assertThrows(IllegalArgumentException.class, () -> { FileFilter filter = new TempFileNameFilter(); DirectorySampleStream stream = new DirectorySampleStream(createTempFile(), filter, false); Assertions.assertNull(stream.read()); stream.close(); }); } private File createTempFolder(String name) { Path subDir = tempDir.resolve(name); try { Files.createDirectory(subDir); } catch (IOException e) { throw new IllegalStateException( "Could not create sub directory " + subDir.toFile().getAbsolutePath(), e); } return subDir.toFile(); } private File createTempFile() { Path tempFile = tempDir.resolve(UUID.randomUUID() + ".tmp"); try { Files.createFile(tempFile); } catch (IOException e) { throw new IllegalStateException( "Could not create file " + tempFile.toFile().getAbsolutePath(), e); } return tempFile.toFile(); } static class TempFileNameFilter implements FileFilter { @Override public boolean accept(File file) { return file.isDirectory() || file.getName().endsWith(".tmp"); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_EvalitaNa0100644 0000000 0000000 00000000165 14523004075 032603 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/EvalitaNameSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/EvalitaNameSampleStreamTe0100644 0000000 0000000 00000004753 14523004075 034254 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.formats.EvalitaNameSampleStream.LANGUAGE; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; /** * Note: * Sample training data must be UTF-8 encoded and uncompressed! */ public class EvalitaNameSampleStreamTest extends AbstractSampleStreamTest { @Test void testParsingItalianSample() throws IOException { try (ObjectStream sampleStream = openData()) { NameSample personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals(11, personName.getSentence().length); Assertions.assertEquals(1, personName.getNames().length); Assertions.assertTrue(personName.isClearAdaptiveDataSet()); Span nameSpan = personName.getNames()[0]; Assertions.assertEquals(8, nameSpan.getStart()); Assertions.assertEquals(10, nameSpan.getEnd()); Assertions.assertTrue(personName.isClearAdaptiveDataSet()); Assertions.assertEquals(0, sampleStream.read().getNames().length); Assertions.assertNull(sampleStream.read()); } } @Test void testReset() throws IOException { try (ObjectStream sampleStream = openData()) { NameSample sample = sampleStream.read(); sampleStream.reset(); Assertions.assertEquals(sample, sampleStream.read()); } } private ObjectStream openData() throws IOException { return new EvalitaNameSampleStream(LANGUAGE.IT, getFactory("evalita-ner-it.sample"), EvalitaNameSampleStream.GENERATE_PERSON_ENTITIES); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_NameFinde0100644 0000000 0000000 00000000172 14523004075 032563 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/NameFinderCensus90NameStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/NameFinderCensus90NameStr0100644 0000000 0000000 00000007625 14523004075 034114 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.StringList; public class NameFinderCensus90NameStreamTest extends AbstractSampleStreamTest { @Test void testParsingEnglishSample() throws IOException { try (ObjectStream sampleStream = openData()) { StringList personName = sampleStream.read(); // verify the first 5 taken from the Surname data Assertions.assertNotNull(personName); Assertions.assertEquals("Smith", personName.getToken(0)); personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals("Johnson", personName.getToken(0)); personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals("Williams", personName.getToken(0)); personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals("Jones", personName.getToken(0)); personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals("Brown", personName.getToken(0)); // verify the next 5 taken from the female names personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals("Mary", personName.getToken(0)); personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals("Patricia", personName.getToken(0)); personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals("Linda", personName.getToken(0)); personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals("Barbara", personName.getToken(0)); personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals("Elizabeth", personName.getToken(0)); // verify the last 5 taken from the male names personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals("James", personName.getToken(0)); personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals("John", personName.getToken(0)); personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals("Robert", personName.getToken(0)); personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals("Michael", personName.getToken(0)); personName = sampleStream.read(); Assertions.assertNotNull(personName); Assertions.assertEquals("William", personName.getToken(0)); // verify the end of the file. personName = sampleStream.read(); Assertions.assertNull(personName); } } private ObjectStream openData() throws IOException { return new NameFinderCensus90NameStream(getFactory("census90.sample"), StandardCharsets.UTF_8); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_ResourceA0100644 0000000 0000000 00000000161 14523004075 032623 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ResourceAsStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ResourceAsStreamFactory.j0100644 0000000 0000000 00000002553 14523004075 034262 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats; import java.io.InputStream; import java.util.Objects; import opennlp.tools.util.InputStreamFactory; public class ResourceAsStreamFactory implements InputStreamFactory { private final Class clazz; private final String name; public ResourceAsStreamFactory(Class clazz, String name) { this.clazz = Objects.requireNonNull(clazz, "clazz must not be null"); this.name = Objects.requireNonNull(name, "name must not be null"); } @Override public InputStream createInputStream() { return clazz.getResourceAsStream(name); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_ad_ADChun0100644 0000000 0000000 00000000164 14523004075 032504 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ad/ADChunkSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ad/ADChunkSampleStreamTes0100644 0000000 0000000 00000005260 14523004075 034104 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ad; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.chunker.ChunkSample; import opennlp.tools.util.PlainTextByLineStream; public class ADChunkSampleStreamTest extends AbstractADSampleStreamTest { @BeforeEach void setup() throws IOException { super.setup(); try (ADChunkSampleStream stream = new ADChunkSampleStream( new PlainTextByLineStream(in, StandardCharsets.UTF_8))) { ChunkSample sample; while ((sample = stream.read()) != null) { samples.add(sample); } Assertions.assertFalse(samples.isEmpty()); } } @Test void testSimpleCount() { Assertions.assertEquals(NUM_SENTENCES, samples.size()); } @Test void testChunks() { Assertions.assertEquals("Inicia", samples.get(0).getSentence()[0]); Assertions.assertEquals("v-fin", samples.get(0).getTags()[0]); Assertions.assertEquals("B-VP", samples.get(0).getPreds()[0]); Assertions.assertEquals("em", samples.get(0).getSentence()[1]); Assertions.assertEquals("prp", samples.get(0).getTags()[1]); Assertions.assertEquals("B-PP", samples.get(0).getPreds()[1]); Assertions.assertEquals("o", samples.get(0).getSentence()[2]); Assertions.assertEquals("art", samples.get(0).getTags()[2]); Assertions.assertEquals("B-NP", samples.get(0).getPreds()[2]); Assertions.assertEquals("próximo", samples.get(0).getSentence()[3]); Assertions.assertEquals("adj", samples.get(0).getTags()[3]); Assertions.assertEquals("I-NP", samples.get(0).getPreds()[3]); Assertions.assertEquals("Casas", samples.get(3).getSentence()[0]); Assertions.assertEquals("n", samples.get(3).getTags()[0]); Assertions.assertEquals("B-NP", samples.get(3).getPreds()[0]); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_ad_ADName0100644 0000000 0000000 00000000163 14523004075 032466 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ad/ADNameSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ad/ADNameSampleStreamTest0100644 0000000 0000000 00000012715 14523004075 034103 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ad; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; public class ADNameSampleStreamTest extends AbstractADSampleStreamTest { @BeforeEach void setup() throws IOException { super.setup(); try (ADNameSampleStream stream = new ADNameSampleStream( new PlainTextByLineStream(in, StandardCharsets.UTF_8), true)) { NameSample sample; while ((sample = stream.read()) != null) { samples.add(sample); } } } @Test void testSimpleCount() { Assertions.assertEquals(NUM_SENTENCES, samples.size()); } @Test void testCheckMergedContractions() { Assertions.assertEquals("no", samples.get(0).getSentence()[1]); Assertions.assertEquals("no", samples.get(0).getSentence()[11]); Assertions.assertEquals("Com", samples.get(1).getSentence()[0]); Assertions.assertEquals("relação", samples.get(1).getSentence()[1]); Assertions.assertEquals("à", samples.get(1).getSentence()[2]); Assertions.assertEquals("mais", samples.get(2).getSentence()[4]); Assertions.assertEquals("de", samples.get(2).getSentence()[5]); Assertions.assertEquals("da", samples.get(2).getSentence()[8]); Assertions.assertEquals("num", samples.get(3).getSentence()[26]); } @Test void testSize() { Assertions.assertEquals(25, samples.get(0).getSentence().length); Assertions.assertEquals(12, samples.get(1).getSentence().length); Assertions.assertEquals(59, samples.get(2).getSentence().length); Assertions.assertEquals(33, samples.get(3).getSentence().length); } @Test void testNames() { Assertions.assertEquals(new Span(4, 7, "time"), samples.get(0).getNames()[0]); Assertions.assertEquals(new Span(8, 10, "place"), samples.get(0).getNames()[1]); Assertions.assertEquals(new Span(12, 14, "place"), samples.get(0).getNames()[2]); Assertions.assertEquals(new Span(15, 17, "person"), samples.get(0).getNames()[3]); Assertions.assertEquals(new Span(18, 19, "numeric"), samples.get(0).getNames()[4]); Assertions.assertEquals(new Span(20, 22, "place"), samples.get(0).getNames()[5]); Assertions.assertEquals(new Span(23, 24, "place"), samples.get(0).getNames()[6]); Assertions.assertEquals(new Span(22, 24, "person"), samples.get(2).getNames()[0]);// 22..24 Assertions.assertEquals(new Span(25, 27, "person"), samples.get(2).getNames()[1]);// 25..27 Assertions.assertEquals(new Span(28, 30, "person"), samples.get(2).getNames()[2]);// 28..30 Assertions.assertEquals(new Span(31, 34, "person"), samples.get(2).getNames()[3]);// 31..34 Assertions.assertEquals(new Span(35, 37, "person"), samples.get(2).getNames()[4]);// 35..37 Assertions.assertEquals(new Span(38, 40, "person"), samples.get(2).getNames()[5]);// 38..40 Assertions.assertEquals(new Span(41, 43, "person"), samples.get(2).getNames()[6]);// 41..43 Assertions.assertEquals(new Span(44, 46, "person"), samples.get(2).getNames()[7]);// 44..46 Assertions.assertEquals(new Span(47, 49, "person"), samples.get(2).getNames()[8]);// 47..49 Assertions.assertEquals(new Span(50, 52, "person"), samples.get(2).getNames()[9]);// 50..52 Assertions.assertEquals(new Span(53, 55, "person"), samples.get(2).getNames()[10]);// 53..55 Assertions.assertEquals(new Span(0, 1, "place"), samples.get(3).getNames()[0]);// 0..1 Assertions.assertEquals(new Span(6, 7, "event"), samples.get(3).getNames()[1]);// 6..7 Assertions.assertEquals(new Span(15, 16, "organization"), samples.get(3).getNames()[2]);// 15..16 Assertions.assertEquals(new Span(18, 19, "event"), samples.get(3).getNames()[3]);// 18..19 Assertions.assertEquals(new Span(27, 28, "event"), samples.get(3).getNames()[4]);// 27..28 Assertions.assertEquals(new Span(29, 30, "event"), samples.get(3).getNames()[5]);// 29..30 Assertions.assertEquals(new Span(1, 6, "time"), samples.get(4).getNames()[0]);// 0..1 Assertions.assertEquals(new Span(0, 3, "person"), samples.get(5).getNames()[0]);// 0..1 } @Test void testSmallSentence() { Assertions.assertEquals(2, samples.get(6).getSentence().length); } @Test void testMissingRightContraction() { Assertions.assertEquals(new Span(0, 1, "person"), samples.get(7).getNames()[0]); Assertions.assertEquals(new Span(3, 4, "person"), samples.get(7).getNames()[1]); Assertions.assertEquals(new Span(5, 6, "person"), samples.get(7).getNames()[2]); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_ad_ADPOSS0100644 0000000 0000000 00000000162 14523004075 032371 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ad/ADPOSSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ad/ADPOSSampleStreamTest.0100644 0000000 0000000 00000007670 14523004075 033746 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ad; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.postag.POSSample; import opennlp.tools.util.PlainTextByLineStream; public class ADPOSSampleStreamTest extends AbstractADSampleStreamTest { @BeforeEach void setup() throws IOException { super.setup(); } @Test void testSimple() throws IOException { // add one sentence with expandME = includeFeats = false try (ADPOSSampleStream stream = new ADPOSSampleStream(new PlainTextByLineStream(in, StandardCharsets.UTF_8), false, false)) { POSSample sample = stream.read(); Assertions.assertEquals(23, sample.getSentence().length); Assertions.assertEquals("Inicia", sample.getSentence()[0]); Assertions.assertEquals("v-fin", sample.getTags()[0]); Assertions.assertEquals("em", sample.getSentence()[1]); Assertions.assertEquals("prp", sample.getTags()[1]); Assertions.assertEquals("o", sample.getSentence()[2]); Assertions.assertEquals("art", sample.getTags()[2]); Assertions.assertEquals("Porto_Poesia", sample.getSentence()[9]); Assertions.assertEquals("prop", sample.getTags()[9]); } } @Test void testExpandME() throws IOException { // add one sentence with expandME = true try (ADPOSSampleStream stream = new ADPOSSampleStream(new PlainTextByLineStream(in, StandardCharsets.UTF_8), true, false)) { POSSample sample = stream.read(); Assertions.assertEquals(27, sample.getSentence().length); Assertions.assertEquals("Inicia", sample.getSentence()[0]); Assertions.assertEquals("v-fin", sample.getTags()[0]); Assertions.assertEquals("em", sample.getSentence()[1]); Assertions.assertEquals("prp", sample.getTags()[1]); Assertions.assertEquals("o", sample.getSentence()[2]); Assertions.assertEquals("art", sample.getTags()[2]); Assertions.assertEquals("Porto", sample.getSentence()[9]); Assertions.assertEquals("B-prop", sample.getTags()[9]); Assertions.assertEquals("Poesia", sample.getSentence()[10]); Assertions.assertEquals("I-prop", sample.getTags()[10]); } } @Test void testIncludeFeats() throws IOException { // add one sentence with includeFeats = true try (ADPOSSampleStream stream = new ADPOSSampleStream(new PlainTextByLineStream(in, StandardCharsets.UTF_8), false, true)) { POSSample sample = stream.read(); Assertions.assertEquals(23, sample.getSentence().length); Assertions.assertEquals("Inicia", sample.getSentence()[0]); Assertions.assertEquals("v-fin=PR=3S=IND=VFIN", sample.getTags()[0]); Assertions.assertEquals("em", sample.getSentence()[1]); Assertions.assertEquals("prp", sample.getTags()[1]); Assertions.assertEquals("o", sample.getSentence()[2]); Assertions.assertEquals("art=DET=M=S", sample.getTags()[2]); Assertions.assertEquals("Porto_Poesia", sample.getSentence()[9]); Assertions.assertEquals("prop=M=S", sample.getTags()[9]); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_ad_ADPara0100644 0000000 0000000 00000000162 14523004075 032470 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ad/ADParagraphStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ad/ADParagraphStreamTest.0100644 0000000 0000000 00000004101 14523004075 034032 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ad; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.PlainTextByLineStream; public class ADParagraphStreamTest extends AbstractADSampleStreamTest { private ADSentenceStream stream; @BeforeEach void setup() throws IOException { super.setup(); stream = new ADSentenceStream(new PlainTextByLineStream(in, StandardCharsets.UTF_8)); Assertions.assertNotNull(stream); } @Test void testSimpleReading() throws IOException { int count = 0; ADSentenceStream.Sentence paragraph = stream.read(); paragraph.getRoot(); while (paragraph != null) { count++; paragraph = stream.read(); // paragraph.getRoot(); } Assertions.assertEquals(ADParagraphStreamTest.NUM_SENTENCES, count); } @Test void testLeadingWithContraction() throws IOException { int count = 0; ADSentenceStream.Sentence paragraph = stream.read(); while (paragraph != null) { count++; paragraph = stream.read(); } Assertions.assertEquals(ADParagraphStreamTest.NUM_SENTENCES, count); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_ad_ADSent0100644 0000000 0000000 00000000167 14523004075 032523 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ad/ADSentenceSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ad/ADSentenceSampleStream0100644 0000000 0000000 00000004020 14523004075 034115 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ad; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; public class ADSentenceSampleStreamTest extends AbstractADSampleStreamTest { @BeforeEach void setup() throws IOException { super.setup(); try (ADSentenceSampleStream stream = new ADSentenceSampleStream( new PlainTextByLineStream(in, StandardCharsets.UTF_8), true)) { SentenceSample sample; while ((sample = stream.read()) != null) { samples.add(sample); } Assertions.assertFalse(samples.isEmpty()); } } @Test void testSimpleCount() { Assertions.assertEquals(5, samples.size()); } @Test void testSentences() { Assertions.assertNotNull(samples.get(0).getDocument()); Assertions.assertEquals(3, samples.get(0).getSentences().length); Assertions.assertEquals(new Span(0, 119), samples.get(0).getSentences()[0]); Assertions.assertEquals(new Span(120, 180), samples.get(0).getSentences()[1]); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_ad_ADToke0100644 0000000 0000000 00000000164 14523004075 032511 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ad/ADTokenSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ad/ADTokenSampleStreamTes0100644 0000000 0000000 00000004353 14523004075 034116 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ad; import java.io.File; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.ObjectStream; public class ADTokenSampleStreamTest extends AbstractADSampleStreamTest { @Test void testSimpleCount() { Assertions.assertEquals(NUM_SENTENCES, samples.size()); } @Test void testSentences() { Assertions.assertTrue(samples.get(5).getText().contains("ofereceu-me")); } @BeforeEach void setup() throws IOException { super.setup(); ADTokenSampleStreamFactory factory = new ADTokenSampleStreamFactory<>(ADTokenSampleStreamFactory.Parameters.class); File data = new File(getResource("ad.sample").getFile()); Assertions.assertNotNull(data); File dict = new File(getResourceWithoutPrefix("opennlp/tools/tokenize/latin-detokenizer.xml").getFile()); Assertions.assertNotNull(dict); String[] args = {"-data", data.getCanonicalPath(), "-encoding", "UTF-8", "-lang", "por", "-detokenizer", dict.getCanonicalPath()}; try (ObjectStream tokenSampleStream = factory.create(args)) { TokenSample sample = tokenSampleStream.read(); while (sample != null) { samples.add(sample); sample = tokenSampleStream.read(); } } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_ad_Abstra0100644 0000000 0000000 00000000167 14523004075 032621 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ad/AbstractADSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/ad/AbstractADSampleStream0100644 0000000 0000000 00000003007 14523004075 034120 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.ad; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.BeforeEach; import opennlp.tools.commons.Sample; import opennlp.tools.formats.AbstractFormatTest; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.util.InputStreamFactory; public abstract class AbstractADSampleStreamTest extends AbstractFormatTest { protected static final int NUM_SENTENCES = 8; protected final List samples = new ArrayList<>(); protected InputStreamFactory in; @BeforeEach void setup() throws IOException { in = new ResourceAsStreamFactory(AbstractADSampleStreamTest.class, FORMATS_BASE_DIR + "ad.sample"); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_brat_Abst0100644 0000000 0000000 00000000157 14523004075 032641 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/brat/AbstractBratTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/brat/AbstractBratTest.jav0100644 0000000 0000000 00000004330 14523004075 034171 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import opennlp.tools.formats.AbstractFormatTest; public abstract class AbstractBratTest extends AbstractFormatTest { protected static final String BRAT_TYPE_PERSON = "Person"; protected static final String BRAT_TYPE_LOCATION = "Location"; protected static final String BRAT_TYPE_ORGANIZATION = "Organization"; protected static final String BRAT_TYPE_DATE = "Date"; protected static final String BRAT_TYPE_RELATED = "Related"; protected static final String BRAT_TYPE_ANNOTATION = "#AnnotationNote"; protected final Map typeToClassMap = new HashMap<>(); protected File directory; @BeforeEach public void setup() throws IOException { directory = getBratDir(); Assertions.assertNotNull(directory); typeToClassMap.put(BRAT_TYPE_PERSON, AnnotationConfiguration.ENTITY_TYPE); typeToClassMap.put(BRAT_TYPE_LOCATION, AnnotationConfiguration.ENTITY_TYPE); typeToClassMap.put(BRAT_TYPE_ORGANIZATION, AnnotationConfiguration.ENTITY_TYPE); typeToClassMap.put(BRAT_TYPE_DATE, AnnotationConfiguration.ENTITY_TYPE); } private String getDirectoryAsString() { return getResource("brat/").getFile(); } protected File getBratDir() { return new File(getDirectoryAsString()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_brat_Brat0100644 0000000 0000000 00000000167 14523004075 032641 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/brat/BratAnnotationStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/brat/BratAnnotationStream0100644 0000000 0000000 00000012744 14523004075 034305 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; import java.io.IOException; import java.util.LinkedHashSet; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.util.ObjectStream; import static org.junit.jupiter.api.Assertions.fail; public class BratAnnotationStreamTest extends AbstractBratTest { /* Expectations */ private static final String[] VOA_PERSONS = new String[]{ "Obama", "Barack Obama", "Lee Myung - bak"}; private static final String[] VOA_LOCATIONS = new String[]{ "South Korea", "North Korea", "China", "South Korean", "United States", "Pyongyang"}; private static final String[] VOA_DATES = new String[]{ "Wednesday", "Wednesday evening", "Thursday"}; @BeforeEach public void setup() throws IOException { super.setup(); } @Test void testParsingEntities() throws IOException { AnnotationConfiguration annConfig = new AnnotationConfiguration(typeToClassMap); ObjectStream annStream = creatBratAnnotationStream(annConfig, "brat/voa-with-entities.ann"); Assertions.assertNotNull(annStream); validateBratAnnotationStream(annStream, 5, 10, 3, 0, 2, 0); } @Test void testParsingRelations() throws IOException { // add relation type for this config typeToClassMap.put(BRAT_TYPE_RELATED, AnnotationConfiguration.RELATION_TYPE); AnnotationConfiguration annConfig = new AnnotationConfiguration(typeToClassMap); ObjectStream annStream = creatBratAnnotationStream(annConfig, "brat/voa-with-relations.ann"); Assertions.assertNotNull(annStream); validateBratAnnotationStream(annStream, 5, 10, 3, 0, 0, 7); } private ObjectStream creatBratAnnotationStream(AnnotationConfiguration conf, String file) { return new BratAnnotationStream(conf, "testing", getResourceStream(file)); } private void validateBratAnnotationStream(ObjectStream annStream, int expectPersons, int expectLocations, int expectDates, int expectOrganizations, int expectAnnotations, int expectRelations) throws IOException { int dates = 0; int persons = 0; int relations = 0; int locations = 0; int annotations = 0; int organizations = 0; Set annotatedDates = new LinkedHashSet<>(); Set annotatedPersons = new LinkedHashSet<>(); Set annotatedLocations = new LinkedHashSet<>(); BratAnnotation ann; while ((ann = annStream.read()) != null) { Assertions.assertNotNull(ann); String type = ann.getType(); Assertions.assertNotNull(type); String coveredText = null; RelationAnnotation rAnnotation = null; AnnotatorNoteAnnotation aAnnotation = null; if (ann instanceof SpanAnnotation sAnnotation) { coveredText = sAnnotation.getCoveredText(); Assertions.assertNotNull(coveredText); } else if (ann instanceof RelationAnnotation) { rAnnotation = (RelationAnnotation) ann; } else if (ann instanceof AnnotatorNoteAnnotation) { aAnnotation = (AnnotatorNoteAnnotation) ann; } else { fail("Found object of invalid class for '" + type + "' type!"); } switch (type) { case BRAT_TYPE_PERSON: { persons++; annotatedPersons.add(coveredText); break; } case BRAT_TYPE_LOCATION: { locations++; annotatedLocations.add(coveredText); break; } case BRAT_TYPE_DATE: { dates++; annotatedDates.add(coveredText); break; } case BRAT_TYPE_ORGANIZATION: { organizations++; break; } case BRAT_TYPE_RELATED: { relations++; Assertions.assertNotNull(rAnnotation); break; } case BRAT_TYPE_ANNOTATION: { annotations++; Assertions.assertNotNull(aAnnotation); break; } default: { fail("Found an unsupported BRAT type!"); } } } Assertions.assertEquals(expectDates, dates); Assertions.assertEquals(expectPersons, persons); Assertions.assertEquals(expectLocations, locations); Assertions.assertEquals(expectAnnotations, annotations); Assertions.assertEquals(expectOrganizations, organizations); Assertions.assertEquals(expectRelations, relations); Assertions.assertArrayEquals(VOA_DATES, annotatedDates.toArray()); Assertions.assertArrayEquals(VOA_PERSONS, annotatedPersons.toArray()); Assertions.assertArrayEquals(VOA_LOCATIONS, annotatedLocations.toArray()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_brat_Brat0100644 0000000 0000000 00000000165 14523004075 032637 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/brat/BratDocumentParserTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/brat/BratDocumentParserTe0100644 0000000 0000000 00000005720 14523004075 034237 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; import java.io.IOException; import java.io.InputStream; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.namefind.NameSample; import opennlp.tools.sentdetect.NewlineSentenceDetector; import opennlp.tools.tokenize.WhitespaceTokenizer; public class BratDocumentParserTest extends AbstractBratTest { @BeforeEach public void setup() throws IOException { super.setup(); } @Test void testParse() throws IOException { AnnotationConfiguration config = new AnnotationConfiguration(typeToClassMap); InputStream txtIn = getResourceStream("brat/opennlp-1193.txt"); InputStream annIn = getResourceStream("brat/opennlp-1193.ann"); BratDocument doc = BratDocument.parseDocument(config, "opennlp-1193", txtIn, annIn); Assertions.assertNotNull(doc); BratDocumentParser parser = new BratDocumentParser(new NewlineSentenceDetector(), WhitespaceTokenizer.INSTANCE); List names = parser.parse(doc); Assertions.assertEquals(3, names.size()); NameSample sample1 = names.get(0); Assertions.assertNotNull(sample1); Assertions.assertEquals(1, sample1.getNames().length); Assertions.assertEquals(0, sample1.getNames()[0].getStart()); Assertions.assertEquals(2, sample1.getNames()[0].getEnd()); NameSample sample2 = names.get(1); Assertions.assertNotNull(sample2); Assertions.assertEquals(1, sample2.getNames().length); Assertions.assertEquals(0, sample2.getNames()[0].getStart()); Assertions.assertEquals(1, sample2.getNames()[0].getEnd()); NameSample sample3 = names.get(2); Assertions.assertNotNull(sample3); Assertions.assertEquals(3, sample3.getNames().length); Assertions.assertEquals(0, sample3.getNames()[0].getStart()); Assertions.assertEquals(1, sample3.getNames()[0].getEnd()); Assertions.assertEquals(1, sample3.getNames()[1].getStart()); Assertions.assertEquals(2, sample3.getNames()[1].getEnd()); Assertions.assertEquals(2, sample3.getNames()[2].getStart()); Assertions.assertEquals(3, sample3.getNames()[2].getEnd()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_brat_Brat0100644 0000000 0000000 00000000157 14523004075 032640 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/brat/BratDocumentTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/brat/BratDocumentTest.jav0100644 0000000 0000000 00000007257 14523004075 034217 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; import java.io.IOException; import java.io.InputStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class BratDocumentTest extends AbstractBratTest { @BeforeEach public void setup() throws IOException { super.setup(); } @Test void testDocumentWithEntitiesParsing() throws IOException { AnnotationConfiguration config = new AnnotationConfiguration(typeToClassMap); InputStream txtIn = getResourceStream("brat/voa-with-entities.txt"); InputStream annIn = getResourceStream("brat/voa-with-entities.ann"); BratDocument doc = BratDocument.parseDocument(config, "voa-with-entities", txtIn, annIn); Assertions.assertEquals("voa-with-entities", doc.getId()); Assertions.assertTrue(doc.getText().startsWith(" U . S . President ")); Assertions.assertTrue(doc.getText().endsWith("multinational process . \n")); Assertions.assertEquals(18, doc.getAnnotations().size()); BratAnnotation annotation = doc.getAnnotation("T2"); checkNote(annotation, "Barack Obama", "President Obama was the 44th U.S. president"); annotation = doc.getAnnotation("T3"); checkNote(annotation, "South Korea", "The capital of South Korea is Seoul"); } private void checkNote(BratAnnotation annotation, String expectedCoveredText, String expectedNote) { Assertions.assertInstanceOf(SpanAnnotation.class, annotation); SpanAnnotation spanAnn = (SpanAnnotation) annotation; Assertions.assertEquals(expectedCoveredText, spanAnn.getCoveredText()); Assertions.assertEquals(expectedNote, spanAnn.getNote()); } /** * Parse spans that have multiple fragments and ensure they are matched to the correct tokens. *

* Test to ensure OPENNLP-1193 works. */ @Test void testSpanWithMultiFragments() throws IOException { AnnotationConfiguration config = new AnnotationConfiguration(typeToClassMap); InputStream txtIn = getResourceStream("brat/opennlp-1193.txt"); InputStream annIn = getResourceStream("brat/opennlp-1193.ann"); BratDocument doc = BratDocument.parseDocument(config, "opennlp-1193", txtIn, annIn); SpanAnnotation t1 = (SpanAnnotation) doc.getAnnotation("T1"); Assertions.assertEquals(t1.getSpans()[0].getStart(), 0); Assertions.assertEquals(t1.getSpans()[0].getEnd(), 7); Assertions.assertEquals(t1.getSpans()[1].getStart(), 8); Assertions.assertEquals(t1.getSpans()[1].getEnd(), 15); Assertions.assertEquals(t1.getSpans()[2].getStart(), 17); Assertions.assertEquals(t1.getSpans()[2].getEnd(), 24); SpanAnnotation t2 = (SpanAnnotation) doc.getAnnotation("T2"); Assertions.assertEquals(t2.getSpans()[0].getStart(), 26); Assertions.assertEquals(t2.getSpans()[0].getEnd(), 33); Assertions.assertEquals(t2.getSpans()[1].getStart(), 40); Assertions.assertEquals(t2.getSpans()[1].getEnd(), 47); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_brat_Brat0100644 0000000 0000000 00000000167 14523004075 032641 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/brat/BratNameSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/brat/BratNameSampleStream0100644 0000000 0000000 00000006223 14523004075 034210 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.brat; import java.io.FileFilter; import java.io.IOException; import java.util.Collections; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.namefind.NameSample; import opennlp.tools.sentdetect.NewlineSentenceDetector; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.ObjectStream; public class BratNameSampleStreamTest extends AbstractBratTest { @BeforeEach public void setup() throws IOException { super.setup(); } @Test void readNoOverlap() throws IOException { BratNameSampleStream stream = createNameSampleWith("-entities.", null); int count = 0; NameSample sample = stream.read(); while (sample != null) { count++; sample = stream.read(); } Assertions.assertEquals(8, count); } @Test void readOverlapFail() { Assertions.assertThrows(RuntimeException.class, () -> { BratNameSampleStream stream = createNameSampleWith("overlapping", null); NameSample sample = stream.read(); while (sample != null) { sample = stream.read(); Assertions.assertNotNull(sample); } }); } @Test void emptySample() { Assertions.assertThrows(IllegalArgumentException.class, () -> createNameSampleWith("overlapping", Collections.emptySet())); } @Test void readOverlapFilter() throws IOException { BratNameSampleStream stream = createNameSampleWith("overlapping", Collections.singleton("Person")); int count = 0; NameSample sample = stream.read(); while (sample != null) { count++; sample = stream.read(); } Assertions.assertEquals(8, count); } private BratNameSampleStream createNameSampleWith(String nameContainsFilter, Set nameTypes) throws IOException { AnnotationConfiguration config = new AnnotationConfiguration(typeToClassMap); FileFilter fileFilter = pathname -> pathname.getName().contains(nameContainsFilter); ObjectStream bratDocumentStream = new BratDocumentStream(config, directory, false, fileFilter); return new BratNameSampleStream(new NewlineSentenceDetector(), WhitespaceTokenizer.INSTANCE, bratDocumentStream, nameTypes); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_conllu_Ab0100644 0000000 0000000 00000000177 14523004075 032640 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/conllu/AbstractConlluSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/conllu/AbstractConlluSamp0100644 0000000 0000000 00000002651 14523004075 034307 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; import java.io.IOException; import java.util.ArrayList; import java.util.List; import opennlp.tools.commons.Sample; import opennlp.tools.formats.AbstractFormatTest; import opennlp.tools.formats.ResourceAsStreamFactory; public abstract class AbstractConlluSampleStreamTest extends AbstractFormatTest { protected final List samples = new ArrayList<>(); protected ConlluStream getStream(String resource) throws IOException { return new ConlluStream(new ResourceAsStreamFactory( AbstractConlluSampleStreamTest.class, FORMATS_BASE_DIR + "conllu/" + resource)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_conllu_Co0100644 0000000 0000000 00000000174 14523004075 032654 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/conllu/ConlluLemmaSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/conllu/ConlluLemmaSampleS0100644 0000000 0000000 00000003166 14523004075 034245 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.lemmatizer.LemmaSample; import opennlp.tools.util.ObjectStream; public class ConlluLemmaSampleStreamTest extends AbstractConlluSampleStreamTest { @Test void testParseSpanishS300() throws IOException { ConlluStream cStream = getStream("es-ud-sample.conllu"); Assertions.assertNotNull(cStream); try (ObjectStream stream = new ConlluLemmaSampleStream(cStream, ConlluTagset.U)) { LemmaSample predicted = stream.read(); Assertions.assertEquals("digám+tú+él", predicted.getLemmas()[0]); Assertions.assertEquals("la", predicted.getTokens()[3]); Assertions.assertEquals("el", predicted.getLemmas()[3]); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_conllu_Co0100644 0000000 0000000 00000000172 14523004075 032652 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/conllu/ConlluPOSSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/conllu/ConlluPOSSampleStr0100644 0000000 0000000 00000006555 14523004075 034226 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.postag.POSSample; import opennlp.tools.util.ObjectStream; public class ConlluPOSSampleStreamTest extends AbstractConlluSampleStreamTest { @Test void testParseContraction() throws IOException { ConlluStream cStream = getStream("pt_br-ud-sample.conllu"); Assertions.assertNotNull(cStream); try (ObjectStream stream = new ConlluPOSSampleStream(cStream, ConlluTagset.U)) { POSSample expected = POSSample.parse("Numa_ADP+DET reunião_NOUN entre_ADP " + "representantes_NOUN da_ADP+DET Secretaria_PROPN da_ADP+DET Criança_PROPN do_ADP+DET " + "DF_PROPN ea_CCONJ juíza_NOUN da_ADP+DET Vara_PROPN de_ADP Execuções_PROPN de_ADP " + "Medidas_PROPN Socioeducativas_PROPN ,_PUNCT Lavínia_PROPN Tupi_PROPN Vieira_PROPN " + "Fonseca_PROPN ,_PUNCT ficou_VERB acordado_ADJ que_CCONJ dos_ADP+DET 25_NUM " + "internos_NOUN ,_PUNCT 12_NUM serão_AUX internados_VERB na_ADP+DET Unidade_PROPN " + "de_ADP Planaltina_PROPN e_CCONJ os_DET outros_DET 13_NUM devem_AUX retornar_VERB " + "para_ADP a_DET Unidade_PROPN do_ADP+DET Recanto_NOUN das_ADP+DET Emas_PROPN ,_PUNCT " + "antigo_ADJ Ciago_PROPN ._PUNCT"); POSSample predicted = stream.read(); Assertions.assertEquals(expected, predicted); } } @Test void testParseSpanishS300() throws IOException { ConlluStream cStream = getStream("es-ud-sample.conllu"); Assertions.assertNotNull(cStream); try (ObjectStream stream = new ConlluPOSSampleStream(cStream, ConlluTagset.U)) { POSSample expected1 = POSSample.parse( "Digámoslo_VERB+PRON+PRON claramente_ADV ,_PUNCT la_DET insurgencia_NOUN se_PRON " + "ha_AUX pronunciado_VERB mucho_PRON más_ADV claramente_ADV respecto_NOUN " + "al_ADP+DET tema_NOUN de_ADP la_DET paz_NOUN que_CCONJ el_DET Estado_NOUN ,_PUNCT " + "como_SCONJ lo_PRON demuestra_VERB el_DET fragmento_NOUN que_SCONJ Bermúdez_PROPN " + "cita_VERB de_ADP la_DET respuesta_NOUN de_ADP \"_PUNCT Gabino_PROPN \"_PUNCT " + "a_ADP Piedad_PROPN Córdoba_PROPN ,_PUNCT en_ADP la_DET cual_PRON no_ADV se_PRON " + "plantea_VERB ni_CCONJ siquiera_ADV \"_PUNCT esperar_VERB un_DET mejor_ADJ " + "gobierno_NOUN \"_PUNCT ._PUNCT"); POSSample predicted = stream.read(); Assertions.assertEquals(expected1, predicted); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_conllu_Co0100644 0000000 0000000 00000000177 14523004075 032657 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/conllu/ConlluSentenceSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/conllu/ConlluSentenceSamp0100644 0000000 0000000 00000005142 14523004075 034306 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; public class ConlluSentenceSampleStreamTest extends AbstractConlluSampleStreamTest { @Test void testParseTwoSentences() throws IOException { ConlluStream cStream = getStream("de-ud-train-sample.conllu"); Assertions.assertNotNull(cStream); try (ObjectStream stream = new ConlluSentenceSampleStream(cStream, 1)) { SentenceSample sample1 = stream.read(); Assertions.assertEquals("Fachlich kompetent, sehr gute Beratung und ein freundliches Team.", sample1.getDocument()); Assertions.assertEquals(new Span(0, 65), sample1.getSentences()[0]); SentenceSample sample2 = stream.read(); Assertions.assertEquals("Beiden Zahnärzten verdanke ich einen neuen Biss und dadurch " + "endlich keine Rückenschmerzen mehr.", sample2.getDocument()); Assertions.assertEquals(new Span(0, 95), sample2.getSentences()[0]); Assertions.assertNull(stream.read(), "Stream must be exhausted"); } cStream = getStream("de-ud-train-sample.conllu"); Assertions.assertNotNull(cStream); try (ObjectStream stream = new ConlluSentenceSampleStream(cStream, 3)) { SentenceSample sample = stream.read(); Assertions.assertEquals("Fachlich kompetent, sehr gute Beratung und ein freundliches Team." + " Beiden Zahnärzten verdanke ich einen neuen Biss und dadurch endlich keine " + "Rückenschmerzen mehr.", sample.getDocument()); Assertions.assertNull(stream.read(), "Stream must be exhausted"); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_conllu_Co0100644 0000000 0000000 00000000161 14523004075 032650 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/conllu/ConlluStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/conllu/ConlluStreamTest.j0100644 0000000 0000000 00000010735 14523004075 034250 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.Optional; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.ObjectStream; public class ConlluStreamTest extends AbstractConlluSampleStreamTest { @Test void testParseTwoSentences() throws IOException { try (ObjectStream stream = getStream("de-ud-train-sample.conllu")) { ConlluSentence sent1 = stream.read(); Assertions.assertEquals("train-s21", sent1.getSentenceIdComment()); Assertions.assertEquals("Fachlich kompetent, sehr gute Beratung und ein freundliches Team.", sent1.getTextComment()); Assertions.assertEquals(11, sent1.getWordLines().size()); ConlluSentence sent2 = stream.read(); Assertions.assertEquals("train-s22", sent2.getSentenceIdComment()); Assertions.assertEquals( "Beiden Zahnärzten verdanke ich einen neuen Biss und dadurch endlich keine Rückenschmerzen mehr.", sent2.getTextComment()); Assertions.assertEquals(14, sent2.getWordLines().size()); Assertions.assertNull(stream.read(), "Stream must be exhausted"); } } @Test void testOptionalComments() throws IOException { try (ObjectStream stream = getStream("full-sample.conllu")) { ConlluSentence sent1 = stream.read(); Assertions.assertEquals("1", sent1.getSentenceIdComment()); Assertions.assertEquals("They buy and sell books.", sent1.getTextComment()); Assertions.assertTrue(sent1.isNewDocument()); Assertions.assertTrue(sent1.isNewParagraph()); Assertions.assertEquals(6, sent1.getWordLines().size()); ConlluSentence sent2 = stream.read(); Assertions.assertEquals("2", sent2.getSentenceIdComment()); Assertions.assertEquals( "I have no clue.", sent2.getTextComment()); Assertions.assertTrue(sent2.isNewDocument()); Assertions.assertEquals(5, sent2.getWordLines().size()); ConlluSentence sent3 = stream.read(); Assertions.assertEquals("panc0.s4", sent3.getSentenceIdComment()); Assertions.assertEquals(Optional.of("tat yathÄnuÅ›rÅ«yate."), sent3.getTranslit()); Assertions.assertEquals("ततॠयथानà¥à¤¶à¥à¤°à¥‚यते।", sent3.getTextComment()); Assertions.assertEquals(3, sent3.getWordLines().size()); Assertions.assertTrue(sent3.isNewParagraph()); Map textLang3 = new HashMap<>(); textLang3.put(new Locale("fr"), "Voilà ce qui nous est parvenu par la tradition orale."); textLang3.put(new Locale("en"), "This is what is heard."); Assertions.assertEquals(Optional.of(textLang3) , sent3.getTextLang()); ConlluSentence sent4 = stream.read(); Assertions.assertEquals("mf920901-001-p1s1A", sent4.getSentenceIdComment()); Assertions.assertEquals( "Slovenská ústava: pro i proti", sent4.getTextComment()); Assertions.assertEquals(6, sent4.getWordLines().size()); Assertions.assertTrue(sent4.isNewDocument()); Assertions.assertTrue(sent4.isNewParagraph()); Assertions.assertEquals(Optional.of("mf920901-001"), sent4.getDocumentId()); Assertions.assertEquals(Optional.of("mf920901-001-p1"), sent4.getParagraphId()); Assertions.assertEquals(Optional.of(Collections.singletonMap(new Locale("en"), "Slovak constitution: pros and cons")) , sent4.getTextLang()); Assertions.assertNull(stream.read(), "Stream must be exhausted"); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_conllu_Co0100644 0000000 0000000 00000000174 14523004075 032654 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/conllu/ConlluTokenSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/conllu/ConlluTokenSampleS0100644 0000000 0000000 00000010360 14523004075 034264 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.ObjectStream; public class ConlluTokenSampleStreamTest extends AbstractConlluSampleStreamTest { @Test void testParseTwoSentences() throws IOException { ConlluStream cStream = getStream("de-ud-train-sample.conllu"); try (ObjectStream stream = new ConlluTokenSampleStream(cStream)) { TokenSample expected1 = TokenSample.parse( "Fachlich kompetent" + TokenSample.DEFAULT_SEPARATOR_CHARS + ", sehr gute Beratung und ein freundliches Team" + TokenSample.DEFAULT_SEPARATOR_CHARS + ".", TokenSample.DEFAULT_SEPARATOR_CHARS); Assertions.assertEquals(expected1, stream.read()); TokenSample expected2 = TokenSample.parse("Beiden Zahnärzten verdanke ich einen " + "neuen Biss und dadurch endlich keine Rückenschmerzen mehr" + TokenSample.DEFAULT_SEPARATOR_CHARS + ".", TokenSample.DEFAULT_SEPARATOR_CHARS); Assertions.assertEquals(expected2, stream.read()); Assertions.assertNull(stream.read(), "Stream must be exhausted"); } } @Test void testParseContraction() throws IOException { ConlluStream cStream = getStream("pt_br-ud-sample.conllu"); try (ObjectStream stream = new ConlluTokenSampleStream(cStream)) { TokenSample expected1 = TokenSample.parse( "Numa reunião entre representantes da Secretaria da Criança do DF " + "ea juíza da Vara de Execuções de Medidas Socioeducativas" + TokenSample.DEFAULT_SEPARATOR_CHARS + ", Lavínia Tupi Vieira Fonseca" + TokenSample.DEFAULT_SEPARATOR_CHARS + ", ficou acordado que dos 25 internos" + TokenSample.DEFAULT_SEPARATOR_CHARS + ", 12 serão internados na Unidade de " + "Planaltina e os outros 13 devem retornar para a Unidade do Recanto das Emas" + TokenSample.DEFAULT_SEPARATOR_CHARS + ", antigo Ciago" + TokenSample.DEFAULT_SEPARATOR_CHARS + "." , TokenSample.DEFAULT_SEPARATOR_CHARS); TokenSample predicted = stream.read(); Assertions.assertEquals(expected1, predicted); } } @Test void testParseSpanishS300() throws IOException { ConlluStream cStream = getStream("es-ud-sample.conllu"); try (ObjectStream stream = new ConlluTokenSampleStream(cStream)) { TokenSample expected1 = TokenSample.parse( "Digámoslo claramente" + TokenSample.DEFAULT_SEPARATOR_CHARS + ", la insurgencia se ha pronunciado mucho más claramente respecto al " + "tema de la paz que el Estado" + TokenSample.DEFAULT_SEPARATOR_CHARS + ", como lo demuestra el fragmento que Bermúdez cita de la respuesta de \"" + TokenSample.DEFAULT_SEPARATOR_CHARS + "Gabino" + TokenSample.DEFAULT_SEPARATOR_CHARS + "\" a Piedad Córdoba" + TokenSample.DEFAULT_SEPARATOR_CHARS + ", en la cual no se plantea ni siquiera \"" + TokenSample.DEFAULT_SEPARATOR_CHARS + "esperar un mejor gobierno" + TokenSample.DEFAULT_SEPARATOR_CHARS + "\"" + TokenSample.DEFAULT_SEPARATOR_CHARS + "." , TokenSample.DEFAULT_SEPARATOR_CHARS); TokenSample predicted = stream.read(); Assertions.assertEquals(expected1, predicted); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_conllu_Co0100644 0000000 0000000 00000000163 14523004075 032652 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/conllu/ConlluWordLineTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/conllu/ConlluWordLineTest0100644 0000000 0000000 00000003347 14523004075 034311 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.conllu; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.InvalidFormatException; public class ConlluWordLineTest { @Test void testParseLine() throws InvalidFormatException { ConlluWordLine line = new ConlluWordLine( "12\tHänden\tHand\tNOUN\tNN\tCase=Dat|Number=Plur\t5\tnmod\t_\t_"); Assertions.assertEquals("12", line.getId()); Assertions.assertEquals("Händen", line.getForm()); Assertions.assertEquals("Hand", line.getLemma()); Assertions.assertEquals("NOUN", line.getPosTag(ConlluTagset.U)); Assertions.assertEquals("NN", line.getPosTag(ConlluTagset.X)); Assertions.assertEquals("Case=Dat|Number=Plur", line.getFeats()); Assertions.assertEquals("5", line.getHead()); Assertions.assertEquals("nmod", line.getDeprel()); Assertions.assertEquals("_", line.getDeps()); Assertions.assertEquals("_", line.getMisc()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_frenchtre0100644 0000000 0000000 00000000205 14523004075 032712 xustar000000000 0000000 133 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/frenchtreebank/ConstitParseSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/frenchtreebank/ConstitPar0100644 0000000 0000000 00000006330 14523004075 034317 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.frenchtreebank; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.formats.AbstractFormatTest; import opennlp.tools.parser.Parse; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; public class ConstitParseSampleStreamTest extends AbstractFormatTest { private final String[] sample1Tokens = new String[] { "L'", "autonomie", "de", "la", "Bundesbank", ",", "la", "politique", "de", "stabilité", "qu'", "elle", "a", "fait", "prévaloir", "(", "avec", "moins", "de", "succès", "et", "de", "sévérité", "qu'", "on", "ne", "le", "dit", ",", "mais", "tout", "est", "relatif", ")", ",", "est", "une", "pièce", "essentielle", "de", "la", "division", "des", "pouvoirs", "en", "Allemagne", "." }; private ObjectStream sample; @BeforeEach public void setup() throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int length; try (InputStream sampleIn = getResourceStream("frenchtreebank/sample1.xml")) { while ((length = sampleIn.read(buffer)) > 0) { out.write(buffer, 0, length); } } sample = ObjectStreamUtils.createObjectStream(out.toByteArray()); Assertions.assertNotNull(sample); } @Test void testThereIsExactlyOneSent() throws IOException { try (ObjectStream samples = new ConstitParseSampleStream(sample)) { Assertions.assertNotNull(samples.read()); Assertions.assertNull(samples.read()); Assertions.assertNull(samples.read()); } } @Test void testTokensAreCorrect() throws IOException { try (ObjectStream samples = new ConstitParseSampleStream(sample)) { Parse p = samples.read(); Parse[] tagNodes = p.getTagNodes(); String[] tokens = new String[tagNodes.length]; for (int ti = 0; ti < tagNodes.length; ti++) { tokens[ti] = tagNodes[ti].getCoveredText(); } Assertions.assertArrayEquals(sample1Tokens, tokens); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_irishsent0100644 0000000 0000000 00000000211 14523004075 032737 xustar000000000 0000000 137 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/irishsentencebank/IrishSentenceBankDocumentTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/irishsentencebank/IrishSe0100644 0000000 0000000 00000005363 14523004075 034322 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.irishsentencebank; import java.io.IOException; import java.io.InputStream; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.formats.AbstractFormatTest; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.util.Span; public class IrishSentenceBankDocumentTest extends AbstractFormatTest { @Test void testParsingSimpleDoc() throws IOException { try (InputStream irishSBXmlIn = getResourceStream("irishsentencebank/irishsentencebank-sample.xml")) { IrishSentenceBankDocument doc = IrishSentenceBankDocument.parse(irishSBXmlIn); List sents = doc.getSentences(); Assertions.assertEquals(2, sents.size()); IrishSentenceBankDocument.IrishSentenceBankSentence sent1 = sents.get(0); IrishSentenceBankDocument.IrishSentenceBankSentence sent2 = sents.get(1); Assertions.assertEquals("A Dhia, tá mé ag iompar clainne!", sent1.getOriginal()); IrishSentenceBankDocument.IrishSentenceBankFlex[] flex = sent1.getFlex(); Assertions.assertEquals(7, flex.length); Assertions.assertEquals("A", flex[0].getSurface()); Assertions.assertArrayEquals(new String[] {"a"}, flex[0].getFlex()); IrishSentenceBankDocument.IrishSentenceBankFlex[] flex2 = sent2.getFlex(); Assertions.assertEquals("ón", flex2[4].getSurface()); Assertions.assertArrayEquals(new String[] {"ó", "an"}, flex2[4].getFlex()); Assertions.assertEquals("Excuse me, are you from the stone age?", sent2.getTranslation()); TokenSample ts = sent1.getTokenSample(); Span[] spans = ts.getTokenSpans(); Assertions.assertEquals(9, spans.length); Assertions.assertEquals(24, spans[7].getStart()); Assertions.assertEquals(31, spans[7].getEnd()); Assertions.assertEquals("clainne", ts.getText().substring(spans[7].getStart(), spans[7].getEnd())); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_leipzig_L0100644 0000000 0000000 00000000201 14523004075 032644 xustar000000000 0000000 129 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/leipzig/LeipzigLanguageSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/leipzig/LeipzigLanguageSa0100644 0000000 0000000 00000005222 14523004075 034245 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.leipzig; import java.io.File; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import opennlp.tools.util.InvalidFormatException; /** * Tests for the {@link LeipzigLanguageSampleStream} class. */ public class LeipzigLanguageSampleStreamTest { private static final String testDataPath = LeipzigLanguageSampleStreamTest.class .getClassLoader().getResource("opennlp/tools/formats/leipzig/samples").getPath(); @TempDir File emptyTempDir; @Test void testReadSentenceFiles() { int samplesPerLanguage = 2; int sentencesPerSample = 1; try (LeipzigLanguageSampleStream stream = new LeipzigLanguageSampleStream(new File(testDataPath), sentencesPerSample, samplesPerLanguage)) { int count = 0; while (stream.read() != null) { count++; } Assertions.assertEquals(4, count); } catch (IOException e) { Assertions.fail(); } } @Test void testNotEnoughSentences() { Assertions.assertThrows(InvalidFormatException.class, () -> { int samplesPerLanguage = 2; int sentencesPerSample = 2; try (LeipzigLanguageSampleStream stream = new LeipzigLanguageSampleStream( new File(testDataPath), sentencesPerSample, samplesPerLanguage)) { while (stream.read() != null) ; } }); } @Test void testReadSentenceFilesWithEmptyDir() { int samplesPerLanguage = 2; int sentencesPerSample = 1; try (LeipzigLanguageSampleStream stream = new LeipzigLanguageSampleStream( emptyTempDir, sentencesPerSample, samplesPerLanguage)) { int count = 0; while (stream.read() != null) { count++; } Assertions.assertEquals(0, count); } catch (IOException e) { Assertions.fail(); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_letsmt_Le0100644 0000000 0000000 00000000163 14523004075 032665 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/letsmt/LetsmtDocumentTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/letsmt/LetsmtDocumentTest0100644 0000000 0000000 00000005661 14523004075 034375 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.letsmt; import java.io.IOException; import java.io.InputStream; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.formats.AbstractFormatTest; public class LetsmtDocumentTest extends AbstractFormatTest { @Test void testParsingSimpleDoc() throws IOException { try (InputStream letsmtXmlIn = getResourceStream("letsmt/letsmt-with-words.xml")) { LetsmtDocument doc = LetsmtDocument.parse(letsmtXmlIn); List sents = doc.getSentences(); Assertions.assertEquals(2, sents.size()); LetsmtDocument.LetsmtSentence sent1 = sents.get(0); Assertions.assertNull(sent1.getNonTokenizedText()); Assertions.assertArrayEquals(new String[] { "The", "Apache", "Software", "Foundation", "uses", "various", "licenses", "to", "distribute", "software", "and", "documentation", ",", "to", "accept", "regular", "contributions", "from", "individuals", "and", "corporations", ",", "and", "to", "accept", "larger", "grants", "of", "existing", "software", "products", "." }, sent1.getTokens()); LetsmtDocument.LetsmtSentence sent2 = sents.get(1); Assertions.assertNull(sent2.getNonTokenizedText()); Assertions.assertArrayEquals(new String[] { "All", "software", "produced", "by", "The", "Apache", "Software", "Foundation", "or", "any", "of", "its", "projects", "or", "subjects", "is", "licensed", "according", "to", "the", "terms", "of", "the", "documents", "listed", "below", "." }, sent2.getTokens()); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_masc_Abst0100644 0000000 0000000 00000000173 14523004075 032632 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/masc/AbstractMascSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/masc/AbstractMascSampleSt0100644 0000000 0000000 00000002636 14523004075 034220 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.io.File; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import opennlp.tools.formats.AbstractFormatTest; public abstract class AbstractMascSampleStreamTest extends AbstractFormatTest { protected File directory; @BeforeEach public void setup() throws IOException { directory = getMascDir(); Assertions.assertNotNull(directory); } private String getDirectoryAsString() { return getResource("masc/").getFile(); } protected File getMascDir() { return new File(getDirectoryAsString()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_masc_Masc0100644 0000000 0000000 00000000176 14523004075 032627 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/masc/MascNamedEntitySampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/masc/MascNamedEntitySampl0100644 0000000 0000000 00000011120 14523004075 034206 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.io.FileFilter; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.namefind.NameFinderME; import opennlp.tools.namefind.NameSample; import opennlp.tools.namefind.TokenNameFinderEvaluator; import opennlp.tools.namefind.TokenNameFinderFactory; import opennlp.tools.namefind.TokenNameFinderModel; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; import opennlp.tools.util.TrainingParameters; public class MascNamedEntitySampleStreamTest extends AbstractMascSampleStreamTest { private MascNamedEntitySampleStream stream; @BeforeEach public void setup() throws IOException { super.setup(); FileFilter fileFilter = pathname -> pathname.getName().contains("MASC"); stream = new MascNamedEntitySampleStream( new MascDocumentStream(directory, true, fileFilter)); Assertions.assertNotNull(stream); } @Test void read() { try { NameSample s = stream.read(); String[] expectedTokens = {"This", "is", "a", "test", "Sentence", "."}; Assertions.assertArrayEquals(expectedTokens, s.getSentence()); Span[] expectedTags = new Span[] {new Span(4, 5, "org")}; Span[] returnedTags = s.getNames(); // check the start/end positions Assertions.assertEquals(expectedTags.length, returnedTags.length); Assertions.assertArrayEquals(expectedTags, returnedTags); s = stream.read(); expectedTokens = new String[] {"This", "is", "'nother", "test", "sentence", "."}; Assertions.assertArrayEquals(expectedTokens, s.getSentence()); expectedTags = new Span[] {}; returnedTags = s.getNames(); Assertions.assertArrayEquals(expectedTags, returnedTags); } catch (IOException e) { Assertions.fail("IO Exception: " + e.getMessage()); } } @Test void close() { try { stream.close(); NameSample s = stream.read(); } catch (IOException e) { Assertions.assertEquals(e.getMessage(), "You are reading an empty document stream. " + "Did you close it?"); } } @Test void reset() { try { NameSample s = stream.read(); s = stream.read(); s = stream.read(); Assertions.assertNull(s); //The stream should be exhausted by now stream.reset(); s = stream.read(); String[] expectedTokens = {"This", "is", "a", "test", "Sentence", "."}; Assertions.assertArrayEquals(expectedTokens, s.getSentence()); Span[] expectedTags = new Span[] {new Span(4, 5, "org")}; Span[] returnedTags = s.getNames(); // check the start/end positions Assertions.assertEquals(expectedTags.length, returnedTags.length); Assertions.assertArrayEquals(expectedTags, returnedTags); } catch (IOException e) { Assertions.fail("IO Exception: " + e.getMessage()); } } @Test void train() { try { FileFilter fileFilter = pathname -> pathname.getName().contains(""); ObjectStream trainSample = new MascNamedEntitySampleStream( new MascDocumentStream(directory, true, fileFilter)); TrainingParameters trainingParameters = new TrainingParameters(); trainingParameters.put(TrainingParameters.ITERATIONS_PARAM, 100); TokenNameFinderModel model = NameFinderME.train("en", null, trainSample, trainingParameters, new TokenNameFinderFactory()); ObjectStream testNames = new MascNamedEntitySampleStream( new MascDocumentStream(directory, true, fileFilter)); TokenNameFinderEvaluator evaluator = new TokenNameFinderEvaluator(new NameFinderME(model)); evaluator.evaluate(testNames); } catch (Exception e) { Assertions.fail("Exception raised", e); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_masc_Masc0100644 0000000 0000000 00000000166 14523004075 032626 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/masc/MascPOSSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/masc/MascPOSSampleStreamT0100644 0000000 0000000 00000010161 14523004075 034077 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.io.FileFilter; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.postag.POSEvaluator; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSSample; import opennlp.tools.postag.POSTaggerFactory; import opennlp.tools.postag.POSTaggerME; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; public class MascPOSSampleStreamTest extends AbstractMascSampleStreamTest { private MascPOSSampleStream stream; @BeforeEach public void setup() throws IOException { super.setup(); FileFilter fileFilter = pathname -> pathname.getName().contains("MASC"); stream = new MascPOSSampleStream( new MascDocumentStream(directory, true, fileFilter)); Assertions.assertNotNull(stream); } @Test void read() { try { POSSample s = stream.read(); String[] expectedTokens = {"This", "is", "a", "test", "Sentence", "."}; Assertions.assertArrayEquals(expectedTokens, s.getSentence()); String[] expectedTags = {"DT", "VB", "AT", "NN", "NN", "."}; Assertions.assertArrayEquals(expectedTags, s.getTags()); s = stream.read(); expectedTokens = new String[] {"This", "is", "'nother", "test", "sentence", "."}; Assertions.assertArrayEquals(expectedTokens, s.getSentence()); expectedTags = new String[] {"DT", "VB", "RB", "NN", "NN", "."}; Assertions.assertArrayEquals(expectedTags, s.getTags()); } catch (IOException e) { Assertions.fail("IO Exception: " + e.getMessage()); } } @Test void close() { try { stream.close(); POSSample s = stream.read(); } catch (IOException e) { Assertions.assertEquals(e.getMessage(), "You are reading an empty document stream. " + "Did you close it?"); } } @Test void reset() { try { POSSample s = stream.read(); s = stream.read(); s = stream.read(); Assertions.assertNull(s); //The stream should be exhausted by now stream.reset(); s = stream.read(); String[] expectedTokens = {"This", "is", "a", "test", "Sentence", "."}; Assertions.assertArrayEquals(expectedTokens, s.getSentence()); String[] expectedTags = {"DT", "VB", "AT", "NN", "NN", "."}; Assertions.assertArrayEquals(expectedTags, s.getTags()); } catch (IOException e) { Assertions.fail("IO Exception: " + e.getMessage()); } } @Test void train() { try { FileFilter fileFilter = pathname -> pathname.getName().contains(""); ObjectStream trainPOS = new MascPOSSampleStream( new MascDocumentStream(directory, true, fileFilter)); TrainingParameters trainingParameters = new TrainingParameters(); trainingParameters.put(TrainingParameters.ITERATIONS_PARAM, 20); POSModel model = POSTaggerME.train("en", trainPOS, trainingParameters, new POSTaggerFactory()); ObjectStream testPOS = new MascPOSSampleStream( new MascDocumentStream(directory, true, fileFilter)); POSEvaluator evaluator = new POSEvaluator(new POSTaggerME(model)); evaluator.evaluate(testPOS); } catch (Exception e) { Assertions.fail("Exception raised", e); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_masc_Masc0100644 0000000 0000000 00000000173 14523004075 032624 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/masc/MascSentenceSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/masc/MascSentenceSampleSt0100644 0000000 0000000 00000011627 14523004075 034221 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.io.FileFilter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import opennlp.tools.sentdetect.SentenceDetectorEvaluator; import opennlp.tools.sentdetect.SentenceDetectorFactory; import opennlp.tools.sentdetect.SentenceDetectorME; import opennlp.tools.sentdetect.SentenceModel; import opennlp.tools.sentdetect.SentenceSample; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; import opennlp.tools.util.TrainingParameters; public class MascSentenceSampleStreamTest extends AbstractMascSampleStreamTest { private MascSentenceSampleStream stream; @BeforeEach public void setup() throws IOException { super.setup(); FileFilter fileFilter = pathname -> pathname.getName().contains("MASC"); stream = new MascSentenceSampleStream( new MascDocumentStream(directory, true, fileFilter), 2); Assertions.assertNotNull(stream); } @Test void reset() { try { //exhaust the fake file SentenceSample testSample = stream.read(); //now we should get null testSample = stream.read(); Assertions.assertNull(testSample); //by resetting, we should get good results again stream.reset(); testSample = stream.read(); Assertions.assertNotNull(testSample); String documentText = "This is a test Sentence. This is 'nother test sentence. "; List sentenceSpans = new ArrayList<>(); sentenceSpans.add(new Span(0, 24)); sentenceSpans.add(new Span(25, 55)); SentenceSample expectedSample = new SentenceSample(documentText, sentenceSpans.toArray(new Span[0])); Assertions.assertEquals(testSample.toString(), expectedSample.toString()); } catch (IOException e) { Assertions.fail("IO Exception"); } } @Test void close() { try { stream.close(); stream.read(); } catch (IOException e) { Assertions.assertEquals(e.getMessage(), "You are reading an empty document stream. " + "Did you close it?"); } } @Test void read() { FileFilter fileFilter = pathname -> pathname.getName().contains(""); try { MascSentenceSampleStream stream = new MascSentenceSampleStream( new MascDocumentStream(directory, true, fileFilter), 2); String documentText = "This is a test Sentence. This is 'nother test sentence. "; List sentenceSpans = new ArrayList<>(); sentenceSpans.add(new Span(0, 24)); sentenceSpans.add(new Span(25, 55)); SentenceSample expectedSample = new SentenceSample(documentText, sentenceSpans.toArray(new Span[0])); SentenceSample testSample = stream.read(); Assertions.assertEquals(testSample.toString(), expectedSample.toString()); //the fake file is exhausted, we should get null now testSample = stream.read(); Assertions.assertNull(testSample); } catch (IOException e) { Assertions.fail("IO Exception", e); } } @Test @Disabled //todo: We can't train on the FakeMasc data, it is too small. void train() { try { FileFilter fileFilter = pathname -> pathname.getName().contains(""); ObjectStream trainSentences = new MascSentenceSampleStream( new MascDocumentStream(directory, true, fileFilter), 1); TrainingParameters trainingParameters = new TrainingParameters(); trainingParameters.put(TrainingParameters.ITERATIONS_PARAM, 20); SentenceModel model = SentenceDetectorME.train("en", trainSentences, new SentenceDetectorFactory(), trainingParameters); ObjectStream testPOS = new MascSentenceSampleStream( new MascDocumentStream(directory, true, fileFilter), 1); SentenceDetectorEvaluator evaluator = new SentenceDetectorEvaluator( new SentenceDetectorME(model)); evaluator.evaluate(testPOS); } catch (Exception e) { Assertions.fail("Exception raised", e); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_masc_Masc0100644 0000000 0000000 00000000170 14523004075 032621 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/masc/MascTokenSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/masc/MascTokenSampleStrea0100644 0000000 0000000 00000011040 14523004075 034212 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.masc; import java.io.FileFilter; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.tokenize.TokenSample; import opennlp.tools.tokenize.TokenizerEvaluator; import opennlp.tools.tokenize.TokenizerFactory; import opennlp.tools.tokenize.TokenizerME; import opennlp.tools.tokenize.TokenizerModel; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.Span; import opennlp.tools.util.TrainingParameters; public class MascTokenSampleStreamTest extends AbstractMascSampleStreamTest { private MascTokenSampleStream stream; @BeforeEach public void setup() throws IOException { super.setup(); FileFilter fileFilter = pathname -> pathname.getName().contains("MASC"); stream = new MascTokenSampleStream( new MascDocumentStream(directory, true, fileFilter)); Assertions.assertNotNull(stream); } @Test void read() { try { TokenSample s = stream.read(); String expectedString = "This is a test Sentence."; Assertions.assertEquals(expectedString, s.getText()); Span[] expectedTags = { new Span(0, 4), new Span(5, 7), new Span(8, 9), new Span(10, 14), new Span(15, 23), new Span(23, 24)}; Assertions.assertArrayEquals(expectedTags, s.getTokenSpans()); s = stream.read(); String expectedTokens = "This is 'nother test sentence."; Assertions.assertEquals(expectedTokens, s.getText()); expectedTags = new Span[] { new Span(0, 4), new Span(5, 7), new Span(8, 15), new Span(16, 20), new Span(21, 29), new Span(29, 30)}; Assertions.assertArrayEquals(expectedTags, s.getTokenSpans()); } catch (IOException e) { Assertions.fail("IO Exception: " + e.getMessage()); } } @Test void close() { try { stream.close(); TokenSample s = stream.read(); } catch (IOException e) { Assertions.assertEquals(e.getMessage(), "You are reading an empty document stream. " + "Did you close it?"); } } @Test void reset() { try { TokenSample s = stream.read(); s = stream.read(); s = stream.read(); Assertions.assertNull(s); //The stream should be exhausted by now stream.reset(); s = stream.read(); String expectedString = "This is a test Sentence."; Assertions.assertEquals(expectedString, s.getText()); Span[] expectedTags = { new Span(0, 4), new Span(5, 7), new Span(8, 9), new Span(10, 14), new Span(15, 23), new Span(23, 24)}; Assertions.assertArrayEquals(expectedTags, s.getTokenSpans()); } catch (IOException e) { Assertions.fail("IO Exception: " + e.getMessage()); } } @Test void train() { try { FileFilter fileFilter = pathname -> pathname.getName().contains(""); ObjectStream trainTokens = new MascTokenSampleStream( new MascDocumentStream(directory, true, fileFilter)); TrainingParameters trainingParameters = new TrainingParameters(); trainingParameters.put(TrainingParameters.ITERATIONS_PARAM, 20); TokenizerModel model = TokenizerME.train(trainTokens, new TokenizerFactory( "en", null, false, null), trainingParameters); ObjectStream testTokens = new MascTokenSampleStream( new MascDocumentStream(directory, true, fileFilter)); TokenizerEvaluator evaluator = new TokenizerEvaluator(new TokenizerME(model)); evaluator.evaluate(testTokens); } catch (Exception e) { Assertions.fail("Exception raised", e); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_muc_Docum0100644 0000000 0000000 00000000170 14523004075 032646 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/muc/DocumentSplitterStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/muc/DocumentSplitterStrea0100644 0000000 0000000 00000003577 14523004075 034352 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.muc; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; public class DocumentSplitterStreamTest { @Test void testSplitTwoDocuments() throws IOException { StringBuilder docsString = new StringBuilder(); for (int i = 0; i < 2; i++) { docsString.append("\n"); docsString.append("test document #").append(i).append("\n"); docsString.append("\n"); } try (ObjectStream docs = new DocumentSplitterStream( ObjectStreamUtils.createObjectStream(docsString.toString()))) { String doc1 = docs.read(); Assertions.assertEquals(docsString.length() / 2, doc1.length() + 1); Assertions.assertTrue(doc1.contains("#0")); String doc2 = docs.read(); Assertions.assertEquals(docsString.length() / 2, doc2.length() + 1); Assertions.assertTrue(doc2.contains("#1")); Assertions.assertNull(docs.read()); Assertions.assertNull(docs.read()); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/muc/SgmlParserTest.java0100644 0000000 0000000 00000002601 14523004075 033670 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.muc; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Test; import opennlp.tools.formats.AbstractFormatTest; public class SgmlParserTest extends AbstractFormatTest { @Test void testParse1() throws IOException { try (Reader in = new InputStreamReader(getResourceStream("muc/parsertest1.sgml"), StandardCharsets.UTF_8)) { SgmlParser parser = new SgmlParser(); parser.parse(in, new SgmlParser.ContentHandler() { }); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_nkjp_NKJP0100644 0000000 0000000 00000000173 14523004075 032522 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/nkjp/NKJPSegmentationDocumentTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/nkjp/NKJPSegmentationDocu0100644 0000000 0000000 00000003476 14523004075 034155 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.nkjp; import java.io.IOException; import java.io.InputStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.formats.AbstractFormatTest; public class NKJPSegmentationDocumentTest extends AbstractFormatTest { @Test void testParsingSimpleDoc() throws IOException { try (InputStream nkjpSegXmlIn = getResourceStream("nkjp/ann_segmentation.xml")) { NKJPSegmentationDocument doc = NKJPSegmentationDocument.parse(nkjpSegXmlIn); Assertions.assertEquals(1, doc.getSegments().size()); Assertions.assertEquals(7, doc.getSegments().get("segm_1.1-s").size()); String src = "To krótkie zdanie w drugim akapicie."; int offset = doc.getSegments().get("segm_1.1-s").get("segm_1.1-seg").offset; Assertions.assertEquals(0, offset); int length = doc.getSegments().get("segm_1.1-s").get("segm_1.1-seg").length; Assertions.assertEquals(2, length); Assertions.assertEquals("To", src.substring(offset, length)); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_formats_nkjp_NKJP0100644 0000000 0000000 00000000163 14523004075 032521 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/nkjp/NKJPTextDocumentTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/formats/nkjp/NKJPTextDocumentTest0100644 0000000 0000000 00000004206 14523004075 034160 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.formats.nkjp; import java.io.InputStream; import java.util.Map; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.formats.AbstractFormatTest; public class NKJPTextDocumentTest extends AbstractFormatTest { @Test void testParsingSimpleDoc() throws Exception { try (InputStream nkjpTextXmlIn = getResourceStream("nkjp/text_structure.xml")) { NKJPTextDocument doc = NKJPTextDocument.parse(nkjpTextXmlIn); Assertions.assertEquals(1, doc.getDivtypes().size()); Assertions.assertEquals("article", doc.getDivtypes().get("div-1")); Assertions.assertEquals(1, doc.getTexts().size()); Assertions.assertEquals(1, doc.getTexts().get("text-1").size()); Assertions.assertEquals(2, doc.getTexts().get("text-1").get("div-1").size()); String exp = "To krótki tekst w formacie NKJP. Zawiera dwa zdania."; Assertions.assertEquals(exp, doc.getTexts().get("text-1").get("div-1").get("p-1")); } } @Test void testGetParagraphs() throws Exception { try (InputStream nkjpTextXmlIn = getResourceStream("nkjp/text_structure.xml")) { NKJPTextDocument doc = NKJPTextDocument.parse(nkjpTextXmlIn); Map paras = doc.getParagraphs(); Assertions.assertEquals("To krótkie zdanie w drugim akapicie.", paras.get("ab-1")); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_langdetect_Defaul0100644 0000000 0000000 00000000210 14523004075 032565 xustar000000000 0000000 136 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/langdetect/DefaultLanguageDetectorContextGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/langdetect/DefaultLanguageDetecto0100644 0000000 0000000 00000003146 14523004075 034251 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import java.nio.CharBuffer; import java.util.Arrays; import java.util.Collection; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class DefaultLanguageDetectorContextGeneratorTest { @Test void extractContext() { String doc = "abcde fghijk"; DefaultLanguageDetectorContextGenerator cg = new DefaultLanguageDetectorContextGenerator(1, 3); Collection features = Arrays.asList(cg.getContext(doc)); Assertions.assertEquals(33, features.size()); Assertions.assertTrue(features.contains(CharBuffer.wrap("ab"))); Assertions.assertTrue(features.contains(CharBuffer.wrap("abc"))); Assertions.assertTrue(features.contains(CharBuffer.wrap("e f"))); Assertions.assertTrue(features.contains(CharBuffer.wrap(" fg"))); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/langdetect/DummyFactory.java0100644 0000000 0000000 00000005373 14523004075 033260 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import java.util.ArrayList; import java.util.List; import opennlp.tools.ngram.NGramModel; import opennlp.tools.tokenize.SimpleTokenizer; import opennlp.tools.util.StringList; import opennlp.tools.util.normalizer.CharSequenceNormalizer; public class DummyFactory extends LanguageDetectorFactory { public DummyFactory() { super(); } @Override public void init() { super.init(); } @Override public LanguageDetectorContextGenerator getContextGenerator() { return new MyContextGenerator(2, 5, new UpperCaseNormalizer()); } public static class UpperCaseNormalizer implements CharSequenceNormalizer { private static final long serialVersionUID = 589425364183582853L; @Override public CharSequence normalize(CharSequence text) { return text.toString().toUpperCase(); } } public static class MyContextGenerator extends DefaultLanguageDetectorContextGenerator { private static final long serialVersionUID = 5737572653101696876L; public MyContextGenerator(int min, int max, CharSequenceNormalizer... normalizers) { super(min, max, normalizers); } @Override public String[] getContext(CharSequence document) { CharSequence[] superContext = super.getContext(document); List context = new ArrayList<>(superContext.length); for (CharSequence cs : superContext) { context.add(cs.toString()); } document = this.normalizer.normalize(document); SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE; String[] words = tokenizer.tokenize(document.toString()); NGramModel tokenNgramModel = new NGramModel(); if (words.length > 0) { tokenNgramModel.add(new StringList(words), 1, 3); for (StringList tokenList : tokenNgramModel) { if (tokenList.size() > 0) { context.add("tg=" + tokenList); } } } return context.toArray(new String[0]); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_langdetect_Langua0100644 0000000 0000000 00000000177 14523004075 032610 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/langdetect/LanguageDetectorCrossValidatorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/langdetect/LanguageDetectorCrossV0100644 0000000 0000000 00000004416 14523004075 034267 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import java.util.concurrent.atomic.AtomicInteger; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.TrainingParameters; public class LanguageDetectorCrossValidatorTest { @Test public void evaluate() throws Exception { TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, 100); params.put(TrainingParameters.CUTOFF_PARAM, 5); params.put("PrintMessages", false); final AtomicInteger correctCount = new AtomicInteger(); final AtomicInteger incorrectCount = new AtomicInteger(); LanguageDetectorCrossValidator cv = new LanguageDetectorCrossValidator(params, new LanguageDetectorFactory(), new LanguageDetectorEvaluationMonitor() { @Override public void correctlyClassified(LanguageSample reference, LanguageSample prediction) { correctCount.incrementAndGet(); } @Override public void misclassified(LanguageSample reference, LanguageSample prediction) { incorrectCount.incrementAndGet(); } }); LanguageDetectorSampleStream sampleStream = LanguageDetectorMETest.createSampleStream(); cv.evaluate(sampleStream, 2); Assertions.assertEquals(99, cv.getDocumentCount()); Assertions.assertEquals(0.98989898989899, cv.getDocumentAccuracy(), 0.01); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_langdetect_Langua0100644 0000000 0000000 00000000172 14523004075 032603 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/langdetect/LanguageDetectorEvaluatorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/langdetect/LanguageDetectorEvalua0100644 0000000 0000000 00000006214 14523004075 034263 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import java.io.ByteArrayOutputStream; import java.nio.charset.StandardCharsets; import java.util.concurrent.atomic.AtomicInteger; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.cmdline.langdetect.LanguageDetectorEvaluationErrorListener; public class LanguageDetectorEvaluatorTest { @Test void processSample() throws Exception { LanguageDetectorModel model = LanguageDetectorMETest.trainModel(); LanguageDetectorME langdetector = new LanguageDetectorME(model); final AtomicInteger correctCount = new AtomicInteger(); final AtomicInteger incorrectCount = new AtomicInteger(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); LanguageDetectorEvaluator evaluator = new LanguageDetectorEvaluator(langdetector, new LanguageDetectorEvaluationMonitor() { @Override public void correctlyClassified(LanguageSample reference, LanguageSample prediction) { correctCount.incrementAndGet(); } @Override public void misclassified(LanguageSample reference, LanguageSample prediction) { incorrectCount.incrementAndGet(); } }, new LanguageDetectorEvaluationErrorListener(outputStream)); evaluator.evaluateSample(new LanguageSample(new Language("pob"), "escreve e faz palestras pelo mundo inteiro sobre anjos")); evaluator.evaluateSample(new LanguageSample(new Language("fra"), "escreve e faz palestras pelo mundo inteiro sobre anjos")); evaluator.evaluateSample(new LanguageSample(new Language("fra"), "escreve e faz palestras pelo mundo inteiro sobre anjos")); Assertions.assertEquals(1, correctCount.get()); Assertions.assertEquals(2, incorrectCount.get()); Assertions.assertEquals(3, evaluator.getDocumentCount()); Assertions.assertEquals(evaluator.getAccuracy(), 0.01, 0.33); String report = outputStream.toString(StandardCharsets.UTF_8); Assertions.assertEquals("Expected\tPredicted\tContext" + System.lineSeparator() + "fra\tpob\tescreve e faz palestras pelo mundo inteiro sobre anjos" + System.lineSeparator() + "fra\tpob\tescreve e faz palestras pelo mundo inteiro sobre anjos" + System.lineSeparator(), report); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_langdetect_Langua0100644 0000000 0000000 00000000170 14523004075 032601 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/langdetect/LanguageDetectorFactoryTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/langdetect/LanguageDetectorFactor0100644 0000000 0000000 00000006425 14523004075 034270 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import java.io.ByteArrayInputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; public class LanguageDetectorFactoryTest { private static LanguageDetectorModel model; private static byte[] serialized; @BeforeAll static void train() throws Exception { ResourceAsStreamFactory streamFactory = new ResourceAsStreamFactory( LanguageDetectorMETest.class, "/opennlp/tools/doccat/DoccatSample.txt"); PlainTextByLineStream lineStream = new PlainTextByLineStream(streamFactory, StandardCharsets.UTF_8); LanguageDetectorSampleStream sampleStream = new LanguageDetectorSampleStream(lineStream); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, "100"); params.put(TrainingParameters.CUTOFF_PARAM, "5"); params.put(TrainingParameters.ALGORITHM_PARAM, "NAIVEBAYES"); model = LanguageDetectorME.train(sampleStream, params, new DummyFactory()); serialized = LanguageDetectorMETest.serializeModel(model); } @Test void testCorrectFactory() throws IOException { LanguageDetectorModel myModel = new LanguageDetectorModel(new ByteArrayInputStream(serialized)); Assertions.assertNotNull(myModel.getFactory()); Assertions.assertInstanceOf(LanguageDetectorFactory.class, myModel.getFactory()); } @Test void testDummyFactory() throws IOException { LanguageDetectorModel myModel = new LanguageDetectorModel(new ByteArrayInputStream(serialized)); Assertions.assertNotNull(myModel.getFactory()); Assertions.assertInstanceOf(DummyFactory.class, myModel.getFactory()); } @Test void testDummyFactoryContextGenerator() { LanguageDetectorContextGenerator cg = model.getFactory().getContextGenerator(); String[] context = cg.getContext( "a dummy text phrase to test if the context generator works!!!!!!!!!!!!"); Set set = new HashSet<>(Arrays.asList(context)); Assertions.assertTrue(set.contains("!!!!!")); // default normalizer would remove the repeated ! Assertions.assertTrue(set.contains("a dum")); Assertions.assertTrue(set.contains("tg=[THE,CONTEXT,GENERATOR]")); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_langdetect_Langua0100644 0000000 0000000 00000000163 14523004075 032603 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/langdetect/LanguageDetectorMETest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/langdetect/LanguageDetectorMETest0100644 0000000 0000000 00000011142 14523004075 034203 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; public class LanguageDetectorMETest { private LanguageDetectorModel model; @BeforeEach void init() throws Exception { this.model = trainModel(); } @Test void testPredictLanguages() { LanguageDetector ld = new LanguageDetectorME(this.model); Language[] languages = ld.predictLanguages("estava em uma marcenaria na Rua Bruno"); Assertions.assertEquals(4, languages.length); Assertions.assertEquals("pob", languages[0].getLang()); Assertions.assertEquals("ita", languages[1].getLang()); Assertions.assertEquals("spa", languages[2].getLang()); Assertions.assertEquals("fra", languages[3].getLang()); } @Test void testProbingPredictLanguages() { LanguageDetectorME ld = new LanguageDetectorME(this.model); for (int i = 0; i < 10000; i += 1000) { StringBuilder sb = new StringBuilder(); sb.append("estava em uma marcenaria na Rua Bruno ".repeat(Math.max(0, i + 1))); ProbingLanguageDetectionResult result = ld.probingPredictLanguages(sb.toString()); Assertions.assertTrue(result.length() <= 600); Language[] languages = result.languages(); Assertions.assertEquals(4, languages.length); Assertions.assertEquals("pob", languages[0].getLang()); Assertions.assertEquals("ita", languages[1].getLang()); Assertions.assertEquals("spa", languages[2].getLang()); Assertions.assertEquals("fra", languages[3].getLang()); } } @Test void testPredictLanguage() { LanguageDetector ld = new LanguageDetectorME(this.model); Language language = ld.predictLanguage("Dove è meglio che giochi"); Assertions.assertEquals("ita", language.getLang()); } @Test void testSupportedLanguages() { LanguageDetector ld = new LanguageDetectorME(this.model); String[] supportedLanguages = ld.getSupportedLanguages(); Assertions.assertEquals(4, supportedLanguages.length); } @Test void testLoadFromSerialized() throws IOException { byte[] serialized = serializeModel(model); LanguageDetectorModel myModel = new LanguageDetectorModel(new ByteArrayInputStream(serialized)); Assertions.assertNotNull(myModel); } protected static byte[] serializeModel(LanguageDetectorModel model) throws IOException { try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { model.serialize(out); return out.toByteArray(); } } public static LanguageDetectorModel trainModel() throws Exception { return trainModel(new LanguageDetectorFactory()); } public static LanguageDetectorModel trainModel(LanguageDetectorFactory factory) throws Exception { LanguageDetectorSampleStream sampleStream = createSampleStream(); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, 100); params.put(TrainingParameters.CUTOFF_PARAM, 5); params.put("DataIndexer", "TwoPass"); params.put(TrainingParameters.ALGORITHM_PARAM, "NAIVEBAYES"); return LanguageDetectorME.train(sampleStream, params, factory); } public static LanguageDetectorSampleStream createSampleStream() throws IOException { ResourceAsStreamFactory streamFactory = new ResourceAsStreamFactory( LanguageDetectorMETest.class, "/opennlp/tools/doccat/DoccatSample.txt"); PlainTextByLineStream lineStream = new PlainTextByLineStream(streamFactory, StandardCharsets.UTF_8); return new LanguageDetectorSampleStream(lineStream); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_langdetect_Langua0100644 0000000 0000000 00000000157 14523004075 032606 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/langdetect/LanguageSampleTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/langdetect/LanguageSampleTest.jav0100644 0000000 0000000 00000010467 14523004075 034221 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class LanguageSampleTest { @Test void testConstructor() { Language lang = new Language("aLang"); CharSequence context = "aContext"; LanguageSample sample = new LanguageSample(lang, context); Assertions.assertEquals(lang, sample.language()); Assertions.assertEquals(context, sample.context()); } @Test void testLanguageSampleSerDe() throws IOException { Language lang = new Language("aLang"); CharSequence context = "aContext"; LanguageSample languageSample = new LanguageSample(lang, context); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream(byteArrayOutputStream); out.writeObject(languageSample); out.flush(); byte[] bytes = byteArrayOutputStream.toByteArray(); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); ObjectInput objectInput = new ObjectInputStream(byteArrayInputStream); LanguageSample deSerializedLanguageSample = null; try { deSerializedLanguageSample = (LanguageSample) objectInput.readObject(); } catch (ClassNotFoundException e) { // do nothing } Assertions.assertNotNull(deSerializedLanguageSample); Assertions.assertEquals(languageSample.context(), deSerializedLanguageSample.context()); Assertions.assertEquals(languageSample.language(), deSerializedLanguageSample.language()); Assertions.assertEquals(languageSample, deSerializedLanguageSample); } @Test void testNullLang() { Assertions.assertThrows(NullPointerException.class, () -> { CharSequence context = "aContext"; new LanguageSample(null, context); }); } @Test void testNullContext() { Assertions.assertThrows(NullPointerException.class, () -> { Language lang = new Language("aLang"); new LanguageSample(lang, null); }); } @Test void testToString() { Language lang = new Language("aLang"); CharSequence context = "aContext"; LanguageSample sample = new LanguageSample(lang, context); Assertions.assertEquals(lang.getLang() + "\t" + context, sample.toString()); } @Test void testHash() { int hashA = new LanguageSample(new Language("aLang"), "aContext").hashCode(); int hashB = new LanguageSample(new Language("bLang"), "aContext").hashCode(); int hashC = new LanguageSample(new Language("aLang"), "bContext").hashCode(); Assertions.assertNotEquals(hashA, hashB); Assertions.assertNotEquals(hashA, hashC); Assertions.assertNotEquals(hashB, hashC); } @Test void testEquals() { LanguageSample sampleA = new LanguageSample(new Language("aLang"), "aContext"); LanguageSample sampleA1 = new LanguageSample(new Language("aLang"), "aContext"); LanguageSample sampleB = new LanguageSample(new Language("bLang"), "aContext"); LanguageSample sampleC = new LanguageSample(new Language("aLang"), "bContext"); Assertions.assertEquals(sampleA, sampleA); Assertions.assertEquals(sampleA, sampleA1); Assertions.assertNotEquals(sampleA, sampleB); Assertions.assertNotEquals(sampleA, sampleC); Assertions.assertNotEquals(sampleB, sampleC); Assertions.assertNotEquals(sampleA.context(), "something else"); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/langdetect/LanguageTest.java0100644 0000000 0000000 00000005756 14523004075 033225 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.langdetect; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class LanguageTest { @Test void emptyConfidence() { String languageCode = "aLanguage"; Language lang = new Language(languageCode); Assertions.assertEquals(languageCode, lang.getLang()); Assertions.assertEquals(0, lang.getConfidence(), 0); } @Test void nonEmptyConfidence() { String languageCode = "aLanguage"; double confidence = 0.05; Language lang = new Language(languageCode, confidence); Assertions.assertEquals(languageCode, lang.getLang()); Assertions.assertEquals(confidence, lang.getConfidence(), 0); } @Test void emptyLanguage() { Assertions.assertThrows(NullPointerException.class, () -> new Language(null)); } @Test void emptyLanguageConfidence() { Assertions.assertThrows(NullPointerException.class, () -> new Language(null, 0.05)); } @Test void testToString() { Language lang = new Language("aLang"); Assertions.assertEquals("aLang (0.0)", lang.toString()); lang = new Language("aLang", 0.0886678); Assertions.assertEquals("aLang (0.0886678)", lang.toString()); } @Test void testHash() { int hashA = new Language("aLang").hashCode(); int hashAA = new Language("aLang").hashCode(); int hashB = new Language("BLang").hashCode(); int hashA5 = new Language("aLang", 5.0).hashCode(); int hashA6 = new Language("BLang", 6.0).hashCode(); Assertions.assertEquals(hashA, hashAA); Assertions.assertNotEquals(hashA, hashB); Assertions.assertNotEquals(hashA, hashA5); Assertions.assertNotEquals(hashB, hashA5); Assertions.assertNotEquals(hashA5, hashA6); } @Test void testEquals() { Language langA = new Language("langA"); Language langB = new Language("langB"); Language langA5 = new Language("langA5", 5.0); Language langA6 = new Language("langA5", 6.0); Assertions.assertEquals(langA, langA); Assertions.assertEquals(langA5, langA5); Assertions.assertNotEquals(langA, langA5); Assertions.assertNotEquals(langA, langB); Assertions.assertEquals(langA6, langA5); Assertions.assertNotEquals(langA.getLang(), "something else"); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_languagemodel_Lan0100644 0000000 0000000 00000000173 14523004075 032601 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/languagemodel/LanguageModelEvaluationTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/languagemodel/LanguageModelEvalua0100644 0000000 0000000 00000004426 14523004075 034247 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.languagemodel; import java.util.Collection; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.StringList; /** * Tests for evaluating accuracy of language models */ public class LanguageModelEvaluationTest { @Test void testPerplexityComparison() { Collection trainingVocabulary = LanguageModelTestUtils.generateRandomVocabulary(1100000); Collection testVocabulary = LanguageModelTestUtils.generateRandomVocabulary(100); NGramLanguageModel unigramLM = new NGramLanguageModel(1); for (String[] sentence : trainingVocabulary) { unigramLM.add(new StringList(sentence), 1, 1); } double unigramPerplexity = LanguageModelTestUtils.getPerplexity(unigramLM, testVocabulary, 1); NGramLanguageModel bigramLM = new NGramLanguageModel(2); for (String[] sentence : trainingVocabulary) { bigramLM.add(new StringList(sentence), 1, 2); } double bigramPerplexity = LanguageModelTestUtils.getPerplexity(bigramLM, testVocabulary, 2); Assertions.assertTrue(unigramPerplexity >= bigramPerplexity); NGramLanguageModel trigramLM = new NGramLanguageModel(3); for (String[] sentence : trainingVocabulary) { trigramLM.add(new StringList(sentence), 1, 3); } double trigramPerplexity = LanguageModelTestUtils.getPerplexity(trigramLM, testVocabulary, 3); Assertions.assertTrue(bigramPerplexity >= trigramPerplexity); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_languagemodel_Lan0100644 0000000 0000000 00000000166 14523004075 032603 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/languagemodel/LanguageModelTestUtils.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/languagemodel/LanguageModelTestUt0100644 0000000 0000000 00000005452 14523004075 034262 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.languagemodel; import java.math.BigDecimal; import java.math.MathContext; import java.util.Collection; import java.util.LinkedList; import java.util.Random; import org.junit.jupiter.api.Disabled; import opennlp.tools.ngram.NGramUtils; /** * Utility class for language models tests */ @Disabled public class LanguageModelTestUtils { private static final java.math.MathContext CONTEXT = MathContext.DECIMAL128; private static final Random r = new Random(); private static final char[] chars = new char[] {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}; public static Collection generateRandomVocabulary(int size) { Collection vocabulary = new LinkedList<>(); for (int i = 0; i < size; i++) { String[] sentence = generateRandomSentence(); vocabulary.add(sentence); } return vocabulary; } public static String[] generateRandomSentence() { int dimension = r.nextInt(10) + 1; String[] sentence = new String[dimension]; for (int j = 0; j < dimension; j++) { int i = r.nextInt(10); char c = chars[i]; sentence[j] = c + "-" + c + "-" + c; } return sentence; } public static double getPerplexity(LanguageModel lm, Collection testSet, int ngramSize) throws ArithmeticException { BigDecimal perplexity = new BigDecimal(1d); for (String[] sentence : testSet) { for (String[] ngram : NGramUtils.getNGrams(sentence, ngramSize)) { double ngramProbability = lm.calculateProbability(ngram); perplexity = perplexity.multiply(new BigDecimal(1d).divide( new BigDecimal(ngramProbability), CONTEXT)); } } double p = StrictMath.log(perplexity.doubleValue()); if (Double.isInfinite(p) || Double.isNaN(p)) { return Double.POSITIVE_INFINITY; // over/underflow -> too high perplexity } else { BigDecimal log = new BigDecimal(p); return StrictMath.pow(StrictMath.E, log.divide(new BigDecimal(testSet.size()), CONTEXT).doubleValue()); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_languagemodel_Ngr0100644 0000000 0000000 00000000166 14523004075 032617 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/languagemodel/NgramLanguageModelTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/languagemodel/NgramLanguageModelT0100644 0000000 0000000 00000015666 14523004075 034232 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.languagemodel; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.ngram.NGramGenerator; /** * Tests for {@link opennlp.tools.languagemodel.NGramLanguageModel} */ public class NgramLanguageModelTest { @Test public void testEmptyVocabularyProbability() { NGramLanguageModel model = new NGramLanguageModel(); Assertions.assertEquals(0d, model.calculateProbability(""), 0d, "probability with an empty vocabulary is always 0"); Assertions.assertEquals(0d, model.calculateProbability("1", "2", "3"), 0d, "probability with an empty vocabulary is always 0"); } @Test public void testRandomVocabularyAndSentence() { NGramLanguageModel model = new NGramLanguageModel(); for (String[] sentence : LanguageModelTestUtils.generateRandomVocabulary(10)) { model.add(sentence); } double probability = model.calculateProbability(LanguageModelTestUtils.generateRandomSentence()); Assertions.assertTrue(probability >= 0 && probability <= 1, "a probability measure should be between 0 and 1 [was " + probability + "]"); } @Test public void testNgramModel() { NGramLanguageModel model = new NGramLanguageModel(4); model.add("I", "saw", "the", "fox"); model.add("the", "red", "house"); model.add("I", "saw", "something", "nice"); double probability = model.calculateProbability("I", "saw", "the", "red", "house"); Assertions.assertTrue(probability >= 0 && probability <= 1, "a probability measure should be between 0 and 1 [was " + probability + "]"); String[] tokens = model.predictNextTokens("I", "saw"); Assertions.assertNotNull(tokens); Assertions.assertArrayEquals(new String[] {"the", "fox"}, tokens); } @Test public void testBigramProbability() { NGramLanguageModel model = new NGramLanguageModel(2); model.add("", "I", "am", "Sam", ""); model.add("", "Sam", "I", "am", ""); model.add("", "I", "do", "not", "like", "green", "eggs", "and", "ham", ""); double probability = model.calculateProbability("", "I"); Assertions.assertEquals(0.666d, probability, 0.001); probability = model.calculateProbability("Sam", ""); Assertions.assertEquals(0.5d, probability, 0.001); probability = model.calculateProbability("", "Sam"); Assertions.assertEquals(0.333d, probability, 0.001); probability = model.calculateProbability("am", "Sam"); Assertions.assertEquals(0.5d, probability, 0.001); probability = model.calculateProbability("I", "am"); Assertions.assertEquals(0.666d, probability, 0.001); probability = model.calculateProbability("I", "do"); Assertions.assertEquals(0.333d, probability, 0.001); probability = model.calculateProbability("I", "am", "Sam"); Assertions.assertEquals(0.333d, probability, 0.001); } @Test public void testTrigram() { NGramLanguageModel model = new NGramLanguageModel(3); model.add("I", "see", "the", "fox"); model.add("the", "red", "house"); model.add("I", "saw", "something", "nice"); double probability = model.calculateProbability("I", "saw", "the", "red", "house"); Assertions.assertTrue(probability >= 0 && probability <= 1, "a probability measure should be between 0 and 1 [was " + probability + "]"); String[] tokens = model.predictNextTokens("I", "saw"); Assertions.assertNotNull(tokens); Assertions.assertArrayEquals(new String[] {"something"}, tokens); } @Test public void testBigram() { NGramLanguageModel model = new NGramLanguageModel(2); model.add("I", "see", "the", "fox"); model.add("the", "red", "house"); model.add("I", "saw", "something", "nice"); double probability = model.calculateProbability("I", "saw", "the", "red", "house"); Assertions.assertTrue(probability >= 0 && probability <= 1, "a probability measure should be between 0 and 1 [was " + probability + "]"); String[] tokens = model.predictNextTokens("I", "saw"); Assertions.assertNotNull(tokens); Assertions.assertArrayEquals(new String[] {"something"}, tokens); } @Test public void testSerializedNGramLanguageModel() throws Exception { NGramLanguageModel languageModel = new NGramLanguageModel(getClass().getResourceAsStream( "/opennlp/tools/ngram/ngram-model.xml"), 3); double probability = languageModel.calculateProbability("The", "brown", "fox", "jumped"); Assertions.assertTrue(probability >= 0 && probability <= 1, "a probability measure should be between 0 and 1 [was " + probability + "]"); String[] tokens = languageModel.predictNextTokens("the", "brown", "fox"); Assertions.assertNotNull(tokens); Assertions.assertArrayEquals(new String[] {"jumped"}, tokens); } @Test public void testTrigramLanguageModelCreationFromText() throws Exception { int ngramSize = 3; NGramLanguageModel languageModel = new NGramLanguageModel(ngramSize); try (InputStream is = getClass().getResourceAsStream("/opennlp/tools/languagemodel/sentences.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) { for (String line : reader.lines().toList()) { String[] array = line.split(" "); List split = Arrays.asList(array); List generatedStrings = NGramGenerator.generate(split, ngramSize, " "); for (String generatedString : generatedStrings) { String[] tokens = generatedString.split(" "); if (tokens.length > 0) { languageModel.add(tokens); } } } String[] tokens = languageModel.predictNextTokens("neural", "network", "language"); Assertions.assertNotNull(tokens); Assertions.assertArrayEquals(new String[] {"models"}, tokens); double p1 = languageModel.calculateProbability("neural", "network", "language", "models"); double p2 = languageModel.calculateProbability("neural", "network", "language", "model"); Assertions.assertTrue(p1 > p2); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_lemmatizer_Dictio0100644 0000000 0000000 00000000172 14523004075 032646 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/lemmatizer/DictionaryLemmatizerMultiTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/lemmatizer/DictionaryLemmatizerMu0100644 0000000 0000000 00000004236 14523004075 034412 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; public class DictionaryLemmatizerMultiTest { private static DictionaryLemmatizer dictionaryLemmatizer; @BeforeAll static void loadDictionary() throws Exception { dictionaryLemmatizer = new DictionaryLemmatizer( DictionaryLemmatizerTest.class.getResourceAsStream( "/opennlp/tools/lemmatizer/smalldictionarymulti.dict") ); } @Test void testForNullPointerException() { List sentence = Arrays.asList("The", "dogs", "were", "running", "and", "barking", "down", "the", "street"); List sentencePOS = Arrays.asList("DT", "NNS", "VBD", "VBG", "CC", "VBG", "RP", "DT", "NN"); List> expectedLemmas = new ArrayList<>(); expectedLemmas.add(List.of("the", "dog", "is", "run,run", "and", "bark, bark", "down", "the", "street")); List> actualLemmas = dictionaryLemmatizer.lemmatize(sentence, sentencePOS); for (int i = 0; i < sentence.size(); i++) { // don't compare cases where the word is not in the dictionary... if (!actualLemmas.get(0).get(0).equals("O")) { Assertions.assertEquals(expectedLemmas.get(i), actualLemmas.get(i)); } } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_lemmatizer_Dictio0100644 0000000 0000000 00000000165 14523004075 032650 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/lemmatizer/DictionaryLemmatizerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/lemmatizer/DictionaryLemmatizerTe0100644 0000000 0000000 00000003730 14523004075 034377 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; public class DictionaryLemmatizerTest { private static DictionaryLemmatizer dictionaryLemmatizer; @BeforeAll static void loadDictionary() throws Exception { dictionaryLemmatizer = new DictionaryLemmatizer( DictionaryLemmatizerTest.class.getResourceAsStream("/opennlp/tools/lemmatizer/smalldictionary.dict") ); } @Test void testForNullPointerException() { String[] sentence = new String[] {"The", "dogs", "were", "running", "and", "barking", "down", "the", "street"}; String[] sentencePOS = new String[] {"DT", "NNS", "VBD", "VBG", "CC", "VBG", "RP", "DT", "NN"}; String[] expectedLemma = new String[] {"the", "dog", "is", "run", "and", "bark", "down", "the", "street"}; String[] actualLemma = dictionaryLemmatizer.lemmatize(sentence, sentencePOS); for (int i = 0; i < sentence.length; i++) { // don't compare cases where the word is not in the dictionary... if (!actualLemma[i].equals("O")) { Assertions.assertEquals(expectedLemma[i], actualLemma[i]); } } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_lemmatizer_DummyL0100644 0000000 0000000 00000000163 14523004075 032642 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/lemmatizer/DummyLemmaSampleStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/lemmatizer/DummyLemmaSampleStream0100644 0000000 0000000 00000005420 14523004075 034332 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.util.FilterObjectStream; import opennlp.tools.util.ObjectStream; /** * This dummy lemma sample stream reads a file containing forms, postags, gold * lemmas, and predicted lemmas. It can be used together with DummyLemmatizer * simulate a lemmatizer. */ public class DummyLemmaSampleStream extends FilterObjectStream { private static final Logger logger = LoggerFactory.getLogger(DummyLemmaSampleStream.class); private final boolean mIsPredicted; private int count = 0; // the predicted flag sets if the stream will contain the expected or the // predicted tags. public DummyLemmaSampleStream(ObjectStream samples, boolean isPredicted) { super(samples); mIsPredicted = isPredicted; } public LemmaSample read() throws IOException { List toks = new ArrayList<>(); List posTags = new ArrayList<>(); List goldLemmas = new ArrayList<>(); List predictedLemmas = new ArrayList<>(); for (String line = samples.read(); line != null && !line.equals(""); line = samples.read()) { String[] parts = line.split("\t"); if (parts.length != 4) { logger.warn("Skipping corrupt line {}: {}", count, line); } else { toks.add(parts[0]); posTags.add(parts[1]); goldLemmas.add(parts[2]); predictedLemmas.add(parts[3]); } count++; } if (!toks.isEmpty()) { if (mIsPredicted) { return new LemmaSample(toks.toArray(new String[0]), posTags.toArray(new String[0]), predictedLemmas.toArray(new String[0])); } else return new LemmaSample(toks.toArray(new String[0]), posTags.toArray(new String[0]), goldLemmas.toArray(new String[0])); } else { return null; } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/lemmatizer/DummyLemmatizer.java0100644 0000000 0000000 00000004310 14523004075 034007 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import java.io.IOException; import java.util.Arrays; import java.util.List; /** * This dummy lemmatizer implementation simulates a {@link LemmatizerME}. * The file has samples of sentences, with target and predicted values. */ public class DummyLemmatizer implements Lemmatizer { private final DummyLemmaSampleStream mSampleStream; public DummyLemmatizer(DummyLemmaSampleStream aSampleStream) { mSampleStream = aSampleStream; } @Override public String[] lemmatize(String[] toks, String[] tags) { try { LemmaSample predsSample = mSampleStream.read(); // checks if the streams are sync for (int i = 0; i < toks.length; i++) { if (!toks[i].equals(predsSample.getTokens()[i]) || !tags[i].equals(predsSample.getTags()[i])) { throw new RuntimeException("The streams are not sync!" + "\n expected sentence: " + Arrays.toString(toks) + "\n expected tags: " + Arrays.toString(tags) + "\n predicted sentence: " + Arrays.toString(predsSample.getTokens()) + "\n predicted tags: " + Arrays.toString(predsSample.getTags())); } } return predsSample.getLemmas(); } catch (IOException e) { throw new RuntimeException(e); } } @Override public List> lemmatize(List toks, List tags) { return null; } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/lemmatizer/LemmaSampleTest.java0100644 0000000 0000000 00000011100 14523004075 033712 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import java.io.StringReader; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class LemmaSampleTest { @Test void testParameterValidation() { Assertions.assertThrows(IllegalArgumentException.class, () -> new LemmaSample(new String[] {""}, new String[] {""}, new String[] {"test", "one element to much"})); } private static String[] createSentence() { return new String[] {"Forecasts", "for", "the", "trade", "figures", "range", "widely", "."}; } private static String[] createTags() { return new String[] {"NNS", "IN", "DT", "NN", "NNS", "VBP", "RB", "."}; } private static String[] createLemmas() { return new String[] {"Forecast", "for", "the", "trade", "figure", "range", "widely", "."}; } @Test void testLemmaSampleSerDe() throws IOException { LemmaSample lemmaSample = createGoldSample(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream(byteArrayOutputStream); out.writeObject(lemmaSample); out.flush(); byte[] bytes = byteArrayOutputStream.toByteArray(); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); ObjectInput objectInput = new ObjectInputStream(byteArrayInputStream); LemmaSample deSerializedLemmaSample = null; try { deSerializedLemmaSample = (LemmaSample) objectInput.readObject(); } catch (ClassNotFoundException e) { // do nothing } Assertions.assertNotNull(deSerializedLemmaSample); Assertions.assertArrayEquals(lemmaSample.getLemmas(), deSerializedLemmaSample.getLemmas()); Assertions.assertArrayEquals(lemmaSample.getTokens(), deSerializedLemmaSample.getTokens()); Assertions.assertArrayEquals(lemmaSample.getTags(), deSerializedLemmaSample.getTags()); } @Test void testRetrievingContent() { LemmaSample sample = new LemmaSample(createSentence(), createTags(), createLemmas()); Assertions.assertArrayEquals(createSentence(), sample.getTokens()); Assertions.assertArrayEquals(createTags(), sample.getTags()); Assertions.assertArrayEquals(createLemmas(), sample.getLemmas()); } @Test void testToString() throws IOException { LemmaSample sample = new LemmaSample(createSentence(), createTags(), createLemmas()); String[] sentence = createSentence(); String[] tags = createTags(); String[] lemmas = createLemmas(); StringReader sr = new StringReader(sample.toString()); BufferedReader reader = new BufferedReader(sr); for (int i = 0; i < sentence.length; i++) { String line = reader.readLine(); String[] parts = line.split("\t"); Assertions.assertEquals(3, parts.length); Assertions.assertEquals(sentence[i], parts[0]); Assertions.assertEquals(tags[i], parts[1]); Assertions.assertEquals(lemmas[i], parts[2]); } } @Test void testEquals() { Assertions.assertNotSame(createGoldSample(), createGoldSample()); Assertions.assertEquals(createGoldSample(), createGoldSample()); Assertions.assertNotEquals(createPredSample(), createGoldSample()); Assertions.assertNotEquals(createPredSample(), new Object()); } public static LemmaSample createGoldSample() { return new LemmaSample(createSentence(), createTags(), createLemmas()); } public static LemmaSample createPredSample() { String[] lemmas = createLemmas(); lemmas[5] = "figure"; return new LemmaSample(createSentence(), createTags(), lemmas); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_lemmatizer_Lemmat0100644 0000000 0000000 00000000164 14523004075 032653 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/lemmatizer/LemmatizerEvaluatorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/lemmatizer/LemmatizerEvaluatorTes0100644 0000000 0000000 00000005513 14523004075 034420 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.cmdline.lemmatizer.LemmaEvaluationErrorListener; import opennlp.tools.util.MockInputStreamFactory; import opennlp.tools.util.PlainTextByLineStream; /** * Tests for {@link LemmatizerEvaluator}. * * @see opennlp.tools.chunker.ChunkerEvaluator */ public class LemmatizerEvaluatorTest { private static final double DELTA = 1.0E-9d; /** * Checks the evaluator results against the results got using the conlleval, * available at * https://www.cnts.ua.ac.be/conll2000/chunking/output.html but * containing lemmas instead of chunks. * * @throws IOException Thrown if IO errors occurred. */ @Test void testEvaluator() throws IOException { String inPredicted = "opennlp/tools/lemmatizer/output.txt"; String inExpected = "opennlp/tools/lemmatizer/output.txt"; String encoding = StandardCharsets.UTF_8.name(); DummyLemmaSampleStream predictedSample = new DummyLemmaSampleStream( new PlainTextByLineStream( new MockInputStreamFactory(new File(inPredicted)), encoding), true); DummyLemmaSampleStream expectedSample = new DummyLemmaSampleStream( new PlainTextByLineStream( new MockInputStreamFactory(new File(inExpected)), encoding), false); Lemmatizer dummyLemmatizer = new DummyLemmatizer(predictedSample); OutputStream stream = new ByteArrayOutputStream(); LemmatizerEvaluationMonitor listener = new LemmaEvaluationErrorListener(stream); LemmatizerEvaluator evaluator = new LemmatizerEvaluator(dummyLemmatizer, listener); evaluator.evaluate(expectedSample); Assertions.assertEquals(0.9877049180327869, evaluator.getWordAccuracy(), DELTA); Assertions.assertNotSame(0, stream.toString().length()); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/lemmatizer/LemmatizerMETest.java0100644 0000000 0000000 00000007704 14523004075 034067 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.lemmatizer; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.util.InsufficientTrainingDataException; import opennlp.tools.util.MockInputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; /** * This is the test class for {@link LemmatizerME}. *

* A proper testing and evaluation of the name finder is only possible with a * large corpus which contains a huge amount of test sentences. *

* The scope of this test is to make sure that the name finder code can be * executed. This test can not detect mistakes which lead to incorrect feature * generation or other mistakes which decrease the tagging performance of the * name finder. *

* In this test the {@link LemmatizerME} is trained with a small amount of * training sentences and then the computed model is used to predict sentences * from the training sentences. */ public class LemmatizerMETest { private LemmatizerME lemmatizer; private static final String[] tokens = {"Rockwell", "said", "the", "agreement", "calls", "for", "it", "to", "supply", "200", "additional", "so-called", "shipsets", "for", "the", "planes", "."}; private static final String[] postags = {"NNP", "VBD", "DT", "NN", "VBZ", "IN", "PRP", "TO", "VB", "CD", "JJ", "JJ", "NNS", "IN", "DT", "NNS", "."}; private static final String[] expect = {"rockwell", "say", "the", "agreement", "call", "for", "it", "to", "supply", "200", "additional", "so-called", "shipset", "for", "the", "plane", "."}; @BeforeEach void startup() throws IOException { // train the lemmatizer ObjectStream sampleStream = new LemmaSampleStream( new PlainTextByLineStream(new MockInputStreamFactory( new File("opennlp/tools/lemmatizer/trial.old.tsv")), StandardCharsets.UTF_8)); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, 100); params.put(TrainingParameters.CUTOFF_PARAM, 5); LemmatizerModel lemmatizerModel = LemmatizerME.train("eng", sampleStream, params, new LemmatizerFactory()); this.lemmatizer = new LemmatizerME(lemmatizerModel); } @Test void testLemmasAsArray() { String[] lemmas = lemmatizer.lemmatize(tokens, postags); Assertions.assertArrayEquals(expect, lemmas); } @Test void testInsufficientData() { Assertions.assertThrows(InsufficientTrainingDataException.class, () -> { ObjectStream sampleStream = new LemmaSampleStream( new PlainTextByLineStream(new MockInputStreamFactory( new File("opennlp/tools/lemmatizer/trial.old-insufficient.tsv")), StandardCharsets.UTF_8)); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, 100); params.put(TrainingParameters.CUTOFF_PARAM, 5); LemmatizerME.train("eng", sampleStream, params, new LemmatizerFactory()); }); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/AbstractEventStreamTest.java0100644 0000000 0000000 00000010056 14523004075 033706 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml; import java.io.IOException; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.FileEventStream; import opennlp.tools.util.ObjectStream; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; public abstract class AbstractEventStreamTest { protected static final String EVENTS_PLAIN = "other wc=ic w&c=he,ic n1wc=lc n1w&c=belongs,lc n2wc=lc\n" + "other wc=lc w&c=belongs,lc p1wc=ic p1w&c=he,ic n1wc=lc\n" + "other wc=lc w&c=to,lc p1wc=lc p1w&c=belongs,lc p2wc=ic\n" + "org-start wc=ic w&c=apache,ic p1wc=lc p1w&c=to,lc\n" + "org-cont wc=ic w&c=software,ic p1wc=ic p1w&c=apache,ic\n" + "org-cont wc=ic w&c=foundation,ic p1wc=ic p1w&c=software,ic\n" + "other wc=other w&c=.,other p1wc=ic\n"; protected static final String EVENTS = "other wc=ic=1.0 w&c=he,ic=2.0 n1wc=lc=3.0 n1w&c=belongs,lc=4.0 n2wc=lc=5.0\n" + "other wc=lc=1.0 w&c=belongs,lc=2.0 p1wc=ic=3.0 p1w&c=he,ic=4.0 n1wc=lc=5.0\n" + "other wc=lc=1.0 w&c=to,lc=2.0 p1wc=lc=3.0 p1w&c=belongs,lc=4.0 p2wc=ic=5.0\n" + "org-start wc=ic=1.0 w&c=apache,ic=2.0 p1wc=lc=3.0 p1w&c=to,lc=4.0\n" + "org-cont wc=ic=1.0 w&c=software,ic=2.0 p1wc=ic=3.0 p1w&c=apache,ic=4.0\n" + "org-cont wc=ic=1.0 w&c=foundation,ic=2.0 p1wc=ic=3.0 p1w&c=software,ic=4.0\n" + "other wc=other=1.0 w&c=.,other=2.0 p1wc=ic=3.0\n"; protected static final String EVENTS_INVALID_1 = "other wc=ic=1,0 w&c=he,ic=2,0 n1wc=lc=3,0 n1w&c=belongs,lc=4,0 n2wc=lc=5,0\n"; protected static final String EVENTS_INVALID_2 = "other wc=ic=A w&c=he,ic=B n1wc=lc=C n1w&c=belongs,lc=D n2wc=lc=E\n"; protected static final String EVENTS_INVALID_NEGATIVE = "other wc=ic=-1.0 w&c=he,ic=-2.0 n1wc=lc=-3.0 n1w&c=belongs,lc=-4.0 n2wc=lc=-5.0\n"; protected abstract ObjectStream createEventStream(String input) throws IOException; @Test void testToLine() throws IOException { try (ObjectStream eventStream = createEventStream(EVENTS_PLAIN)) { // just reading the first element here for format and platform checks Event e = eventStream.read(); assertNotNull(e); assertNotNull(e.getOutcome()); assertEquals("other wc=ic w&c=he,ic n1wc=lc n1w&c=belongs,lc n2wc=lc" + System.lineSeparator(), FileEventStream.toLine(e)); } } @ParameterizedTest @ValueSource(strings = {EVENTS_INVALID_1, EVENTS_INVALID_2}) void testReadWithInvalidRealValues(String input) throws IOException { try (ObjectStream eventStream = createEventStream(input)) { Event e = eventStream.read(); assertNotNull(e); assertNotNull(e.getOutcome()); assertEquals("other", e.getOutcome()); assertNotNull(e.getContext()); assertEquals(5, e.getContext().length); assertNull(e.getValues()); // expected as float values where formatted incorrectly } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/ArrayMathTest.java0100644 0000000 0000000 00000011537 14523004075 031662 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class ArrayMathTest { @Test public void testInnerProductDoubleNaN() { Assertions.assertTrue(Double.isNaN(ArrayMath.innerProduct(null, new double[] {0}))); Assertions.assertTrue(Double.isNaN(ArrayMath.innerProduct(new double[] {0}, null))); Assertions.assertTrue(Double.isNaN(ArrayMath.innerProduct(new double[] {0, 1, 2}, new double[] {0, 1, 2, 3}))); } @Test public void testInnerProduct() { Assertions.assertEquals(0, ArrayMath.innerProduct(new double[] {}, new double[] {}), 0); Assertions.assertEquals(-1, ArrayMath.innerProduct(new double[] {1}, new double[] {-1}), 0); Assertions.assertEquals(14, ArrayMath.innerProduct(new double[] {1, 2, 3}, new double[] {1, 2, 3}), 0); } @Test public void testL1Norm() { Assertions.assertEquals(0, ArrayMath.l1norm(new double[] {}), 0); Assertions.assertEquals(0, ArrayMath.l1norm(new double[] {0}), 0); Assertions.assertEquals(2, ArrayMath.l1norm(new double[] {1, -1}), 0); Assertions.assertEquals(55, ArrayMath.l1norm(new double[] {1, -2, 3, -4, 5, -6, 7, -8, 9, -10}), 0); } @Test public void testL2Norm() { Assertions.assertEquals(0, ArrayMath.l2norm(new double[] {}), 0); Assertions.assertEquals(0, ArrayMath.l2norm(new double[] {0}), 0); Assertions.assertEquals(1.41421, ArrayMath.l2norm(new double[] {1, -1}), 0.001); Assertions.assertEquals(0.54772, ArrayMath.l2norm(new double[] {0.1, -0.2, 0.3, -0.4}), 0.001); } @Test public void testInvL2Norm() { Assertions.assertEquals(0.70711, ArrayMath.invL2norm(new double[] {1, -1}), 0.001); Assertions.assertEquals(1.82575, ArrayMath.invL2norm(new double[] {0.1, -0.2, 0.3, -0.4}), 0.001); } @Test public void testLogSumOfExps() { Assertions.assertEquals(0, ArrayMath.logSumOfExps(new double[] {0}), 0); Assertions.assertEquals(1, ArrayMath.logSumOfExps(new double[] {1}), 0); Assertions.assertEquals(2.048587, ArrayMath.logSumOfExps(new double[] {-1, 2}), 0.001); Assertions.assertEquals(1.472216, ArrayMath.logSumOfExps(new double[] {-0.1, 0.2, -0.3, 0.4}), 0.001); } @Test public void testMax() { Assertions.assertEquals(0, ArrayMath.max(new double[] {0}), 0); Assertions.assertEquals(0, ArrayMath.max(new double[] {0, 0, 0}), 0); Assertions.assertEquals(2, ArrayMath.max(new double[] {0, 1, 2}), 0); Assertions.assertEquals(200, ArrayMath.max(new double[] {100, 200, 2}), 0); Assertions.assertEquals(300, ArrayMath.max(new double[] {100, 200, 300, -10, -20}), 0); } @Test public void testArgmaxException1() { Assertions.assertThrows(IllegalArgumentException.class, () -> ArrayMath.argmax(null)); } @Test public void testArgmaxException2() { Assertions.assertThrows(IllegalArgumentException.class, () -> ArrayMath.argmax(new double[] {})); } @Test public void testArgmax() { Assertions.assertEquals(0, ArrayMath.argmax(new double[] {0})); Assertions.assertEquals(0, ArrayMath.argmax(new double[] {0, 0, 0})); Assertions.assertEquals(2, ArrayMath.argmax(new double[] {0, 1, 2})); Assertions.assertEquals(1, ArrayMath.argmax(new double[] {100, 200, 2})); Assertions.assertEquals(2, ArrayMath.argmax(new double[] {100, 200, 300, -10, -20})); } @Test public void testToDoubleArray() { Assertions.assertEquals(0, ArrayMath.toDoubleArray(Collections.emptyList()).length); Assertions.assertArrayEquals(new double[] {0}, ArrayMath.toDoubleArray(List.of((0D))), 0); Assertions.assertArrayEquals(new double[] {0, 1, -2.5, -0.3, 4}, ArrayMath.toDoubleArray(Arrays.asList(0D, 1D, -2.5D, -0.3D, 4D)), 0); } @Test public void testToIntArray() { Assertions.assertEquals(0, ArrayMath.toIntArray(Collections.emptyList()).length); Assertions.assertArrayEquals(new int[] {0}, ArrayMath.toIntArray(List.of(0))); Assertions.assertArrayEquals(new int[] {0, 1, -2, -3, 4}, ArrayMath.toIntArray(Arrays.asList(0, 1, -2, -3, 4))); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/BeamSearchTest.java0100644 0000000 0000000 00000014451 14523004075 031762 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml; import java.util.HashMap; import java.util.Map; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.util.BeamSearchContextGenerator; import opennlp.tools.util.Sequence; public class BeamSearchTest { static class IdentityFeatureGenerator implements BeamSearchContextGenerator { private final String[] outcomeSequence; IdentityFeatureGenerator(String[] outcomeSequence) { this.outcomeSequence = outcomeSequence; } public String[] getContext(int index, String[] sequence, String[] priorDecisions, Object[] additionalContext) { return new String[] {outcomeSequence[index]}; } } static class IdentityModel implements MaxentModel { private final String[] outcomes; private final Map outcomeIndexMap = new HashMap<>(); private final double bestOutcomeProb = 0.8d; private final double otherOutcomeProb; IdentityModel(String[] outcomes) { this.outcomes = outcomes; for (int i = 0; i < outcomes.length; i++) { outcomeIndexMap.put(outcomes[i], i); } otherOutcomeProb = 0.2d / (outcomes.length - 1); } public double[] eval(String[] context) { double[] probs = new double[outcomes.length]; for (int i = 0; i < probs.length; i++) { if (outcomes[i].equals(context[0])) { probs[i] = bestOutcomeProb; } else { probs[i] = otherOutcomeProb; } } return probs; } public double[] eval(String[] context, double[] probs) { return eval(context); } public double[] eval(String[] context, float[] values) { return eval(context); } public String getAllOutcomes(double[] outcomes) { return null; } public String getBestOutcome(double[] outcomes) { return null; } public Object[] getDataStructures() { return null; } public int getIndex(String outcome) { return 0; } public int getNumOutcomes() { return outcomes.length; } public String getOutcome(int i) { return outcomes[i]; } } /** * Tests that beam search does not fail to detect an empty sequence. */ @Test void testBestSequenceZeroLengthInput() { String[] sequence = new String[0]; BeamSearchContextGenerator cg = new IdentityFeatureGenerator(sequence); String[] outcomes = new String[] {"1", "2", "3"}; MaxentModel model = new IdentityModel(outcomes); BeamSearch bs = new BeamSearch<>(3, model); Sequence seq = bs.bestSequence(sequence, null, cg, (int i, String[] inputSequence, String[] outcomesSequence, String outcome) -> true); Assertions.assertNotNull(seq); Assertions.assertEquals(sequence.length, seq.getOutcomes().size()); } /** * Tests finding a sequence of length one. */ @Test void testBestSequenceOneElementInput() { String[] sequence = {"1"}; BeamSearchContextGenerator cg = new IdentityFeatureGenerator(sequence); String[] outcomes = new String[] {"1", "2", "3"}; MaxentModel model = new IdentityModel(outcomes); BeamSearch bs = new BeamSearch<>(3, model); Sequence seq = bs.bestSequence(sequence, null, cg, (int i, String[] inputSequence, String[] outcomesSequence, String outcome) -> true); Assertions.assertNotNull(seq); Assertions.assertEquals(sequence.length, seq.getOutcomes().size()); Assertions.assertEquals("1", seq.getOutcomes().get(0)); } /** * Tests finding the best sequence on a short input sequence. */ @Test void testBestSequence() { String[] sequence = {"1", "2", "3", "2", "1"}; BeamSearchContextGenerator cg = new IdentityFeatureGenerator(sequence); String[] outcomes = new String[] {"1", "2", "3"}; MaxentModel model = new IdentityModel(outcomes); BeamSearch bs = new BeamSearch<>(2, model); Sequence seq = bs.bestSequence(sequence, null, cg, (int i, String[] inputSequence, String[] outcomesSequence, String outcome) -> true); Assertions.assertNotNull(seq); Assertions.assertEquals(sequence.length, seq.getOutcomes().size()); Assertions.assertEquals("1", seq.getOutcomes().get(0)); Assertions.assertEquals("2", seq.getOutcomes().get(1)); Assertions.assertEquals("3", seq.getOutcomes().get(2)); Assertions.assertEquals("2", seq.getOutcomes().get(3)); Assertions.assertEquals("1", seq.getOutcomes().get(4)); } /** * Tests finding the best sequence on a short input sequence. */ @Test void testBestSequenceWithValidator() { String[] sequence = {"1", "2", "3", "2", "1"}; BeamSearchContextGenerator cg = new IdentityFeatureGenerator(sequence); String[] outcomes = new String[] {"1", "2", "3"}; MaxentModel model = new IdentityModel(outcomes); BeamSearch bs = new BeamSearch<>(2, model, 0); Sequence seq = bs.bestSequence(sequence, null, cg, (int i, String[] inputSequence, String[] outcomesSequence, String outcome) -> !"2".equals(outcome)); Assertions.assertNotNull(seq); Assertions.assertEquals(sequence.length, seq.getOutcomes().size()); Assertions.assertEquals("1", seq.getOutcomes().get(0)); Assertions.assertNotSame("2", seq.getOutcomes().get(1)); Assertions.assertEquals("3", seq.getOutcomes().get(2)); Assertions.assertNotSame("2", seq.getOutcomes().get(3)); Assertions.assertEquals("1", seq.getOutcomes().get(4)); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/MockEventTrainer.java0100644 0000000 0000000 00000002553 14523004075 032350 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml; import java.util.Map; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; public class MockEventTrainer implements EventTrainer { public MaxentModel train(ObjectStream events) { return null; } @Override public MaxentModel train(DataIndexer indexer) { return null; } @Override public void init(TrainingParameters trainingParams, Map reportMap) { } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/MockSequenceTrainer.java0100644 0000000 0000000 00000002435 14523004075 033036 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml; import java.util.Map; import opennlp.tools.commons.Sample; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.SequenceStream; import opennlp.tools.util.TrainingParameters; public class MockSequenceTrainer implements EventModelSequenceTrainer { @Override public AbstractModel train(SequenceStream events) { return null; } @Override public void init(TrainingParameters trainParams, Map reportMap) { } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/PrepAttachDataUtil.java0100644 0000000 0000000 00000006244 14523004075 032614 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.jupiter.api.Assertions; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; public class PrepAttachDataUtil { /* Caches ppa files as List via their name (key) */ private static final Map> PPA_FILE_EVENTS = new HashMap<>(); private static List readPpaFile(String filename) throws IOException { if (!PPA_FILE_EVENTS.containsKey(filename)) { List events = new ArrayList<>(); try (InputStream in = PrepAttachDataUtil.class.getResourceAsStream("/data/ppa/" + filename); BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8))) { String line; while ((line = reader.readLine()) != null) { String[] items = line.split("\\s+"); String label = items[5]; String[] context = {"verb=" + items[1], "noun=" + items[2], "prep=" + items[3], "prep_obj=" + items[4]}; events.add(new Event(label, context)); } PPA_FILE_EVENTS.put(filename, events); } } return PPA_FILE_EVENTS.get(filename); } public static ObjectStream createTrainingStream() throws IOException { List trainingEvents = readPpaFile("training"); return ObjectStreamUtils.createObjectStream(trainingEvents); } public static void testModel(MaxentModel model, double expecedAccuracy) throws IOException { List devEvents = readPpaFile("devset"); int total = 0; int correct = 0; for (Event ev: devEvents) { String targetLabel = ev.getOutcome(); double[] ocs = model.eval(ev.getContext()); int best = 0; for (int i = 1; i < ocs.length; i++) { if (ocs[i] > ocs[best]) { best = i; } } String predictedLabel = model.getOutcome(best); if (targetLabel.equals(predictedLabel)) correct++; total++; } double accuracy = correct / (double) total; Assertions.assertEquals(expecedAccuracy, accuracy, .00001); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/TrainerFactoryTest.java0100644 0000000 0000000 00000005353 14523004075 032725 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.ml.TrainerFactory.TrainerType; import opennlp.tools.ml.maxent.GISTrainer; import opennlp.tools.ml.perceptron.SimplePerceptronSequenceTrainer; import opennlp.tools.util.TrainingParameters; public class TrainerFactoryTest { private TrainingParameters mlParams; @BeforeEach void setup() { mlParams = new TrainingParameters(); mlParams.put(TrainingParameters.ALGORITHM_PARAM, GISTrainer.MAXENT_VALUE); mlParams.put(TrainingParameters.ITERATIONS_PARAM, 10); mlParams.put(TrainingParameters.CUTOFF_PARAM, 5); } @Test void testBuiltInValid() { Assertions.assertTrue(TrainerFactory.isValid(mlParams)); } @Test void testSequenceTrainerValid() { mlParams.put(TrainingParameters.ALGORITHM_PARAM, MockSequenceTrainer.class.getCanonicalName()); Assertions.assertTrue(TrainerFactory.isValid(mlParams)); } @Test void testEventTrainerValid() { mlParams.put(TrainingParameters.ALGORITHM_PARAM, MockEventTrainer.class.getCanonicalName()); Assertions.assertTrue(TrainerFactory.isValid(mlParams)); } @Test void testInvalidTrainer() { mlParams.put(TrainingParameters.ALGORITHM_PARAM, "xyz"); Assertions.assertFalse(TrainerFactory.isValid(mlParams)); } @Test void testIsSequenceTrainerTrue() { mlParams.put(AbstractTrainer.ALGORITHM_PARAM, SimplePerceptronSequenceTrainer.PERCEPTRON_SEQUENCE_VALUE); TrainerType trainerType = TrainerFactory.getTrainerType(mlParams); Assertions.assertEquals(TrainerType.EVENT_MODEL_SEQUENCE_TRAINER, trainerType); } @Test void testIsSequenceTrainerFalse() { mlParams.put(AbstractTrainer.ALGORITHM_PARAM, GISTrainer.MAXENT_VALUE); TrainerType trainerType = TrainerFactory.getTrainerType(mlParams); Assertions.assertNotEquals(TrainerType.EVENT_MODEL_SEQUENCE_TRAINER, trainerType); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_maxent_Footbal0100644 0000000 0000000 00000000157 14523004075 032637 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/FootballEventStream.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/FootballEventStream.jav0100644 0000000 0000000 00000003406 14523004075 034201 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Arrays; import opennlp.tools.ml.model.Event; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; public class FootballEventStream implements ObjectStream { ObjectStream textStream; public FootballEventStream() throws IOException { textStream = new PlainTextByLineStream( new URLInputStreamFactory(this.getClass().getResource("/opennlp/tools/ml/maxent/football.dat")), StandardCharsets.US_ASCII); } @Override public Event read() throws IOException { String line = textStream.read(); if (line == null) { return null; } String[] tokens = line.split("\\s+"); return new Event(tokens[tokens.length - 1], Arrays.copyOf(tokens, tokens.length - 1)); } @Override public void reset() throws IOException, UnsupportedOperationException { textStream.reset(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/GISIndexingTest.java0100644 0000000 0000000 00000022163 14523004075 033373 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.ml.AbstractEventTrainer; import opennlp.tools.ml.AbstractTrainer; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.maxent.quasinewton.QNTrainer; import opennlp.tools.ml.model.AbstractDataIndexer; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.DataIndexerFactory; import opennlp.tools.ml.model.Event; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.ModelUtil; public class GISIndexingTest { private static final String[][] cntx = new String[][] { {"dog", "cat", "mouse"}, {"text", "print", "mouse"}, {"dog", "pig", "cat", "mouse"} }; private static final String[] outputs = new String[] {"A", "B", "A"}; private ObjectStream createEventStream() { List events = new ArrayList<>(); for (int i = 0; i < cntx.length; i++) { events.add(new Event(outputs[i], cntx[i])); } return ObjectStreamUtils.createObjectStream(events); } /* * Test the GIS.trainModel(ObjectStream eventStream) method */ @Test void testGISTrainSignature1() throws IOException { try (ObjectStream eventStream = createEventStream()) { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); params.put(AbstractTrainer.CUTOFF_PARAM, 1); EventTrainer trainer = TrainerFactory.getEventTrainer(params, null); Assertions.assertNotNull(trainer.train(eventStream)); } } /* * Test the GIS.trainModel(ObjectStream eventStream,boolean smoothing) method */ @Test void testGISTrainSignature2() throws IOException { try (ObjectStream eventStream = createEventStream()) { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); params.put(AbstractTrainer.CUTOFF_PARAM, 1); params.put("smoothing", true); EventTrainer trainer = TrainerFactory.getEventTrainer(params, null); Assertions.assertNotNull(trainer.train(eventStream)); } } /* * Test the GIS.trainModel(ObjectStream eventStream, int iterations, int cutoff) method */ @Test void testGISTrainSignature3() throws IOException { try (ObjectStream eventStream = createEventStream()) { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); params.put(AbstractTrainer.ITERATIONS_PARAM, 10); params.put(AbstractTrainer.CUTOFF_PARAM, 1); EventTrainer trainer = TrainerFactory.getEventTrainer(params, null); Assertions.assertNotNull(trainer.train(eventStream)); } } /* * Test the GIS.trainModel(ObjectStream eventStream, int iterations, int cutoff, double sigma) method */ @Test void testGISTrainSignature4() throws IOException { try (ObjectStream eventStream = createEventStream()) { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); params.put(AbstractTrainer.ITERATIONS_PARAM, 10); params.put(AbstractTrainer.CUTOFF_PARAM, 1); GISTrainer trainer = (GISTrainer) TrainerFactory.getEventTrainer(params, null); trainer.setGaussianSigma(0.01); Assertions.assertNotNull(trainer.trainModel(eventStream)); } } /* * Test the GIS.trainModel((ObjectStream eventStream, int iterations, int cutoff, * boolean smoothing, boolean printMessagesWhileTraining)) method */ @Test void testGISTrainSignature5() throws IOException { try (ObjectStream eventStream = createEventStream()) { TrainingParameters params = ModelUtil.createDefaultTrainingParameters(); params.put(AbstractTrainer.ITERATIONS_PARAM, 10); params.put(AbstractTrainer.CUTOFF_PARAM, 1); params.put("smoothing", false); EventTrainer trainer = TrainerFactory.getEventTrainer(params, null); Assertions.assertNotNull(trainer.train(eventStream)); } } @Test void testIndexingWithTrainingParameters() throws IOException { ObjectStream eventStream = createEventStream(); TrainingParameters parameters = TrainingParameters.defaultParams(); // by default we are using GIS/EventTrainer/Cutoff of 5/100 iterations parameters.put(TrainingParameters.ITERATIONS_PARAM, 10); parameters.put(AbstractEventTrainer.DATA_INDEXER_PARAM, AbstractEventTrainer.DATA_INDEXER_ONE_PASS_VALUE); parameters.put(AbstractEventTrainer.CUTOFF_PARAM, 1); // note: setting the SORT_PARAM to true is the default, so it is not really needed parameters.put(AbstractDataIndexer.SORT_PARAM, true); // guarantee that you have a GIS trainer... EventTrainer trainer = TrainerFactory.getEventTrainer(parameters, new HashMap<>()); Assertions.assertEquals("opennlp.tools.ml.maxent.GISTrainer", trainer.getClass().getName()); AbstractEventTrainer aeTrainer = (AbstractEventTrainer) trainer; // guarantee that you have a OnePassDataIndexer ... DataIndexer di = aeTrainer.getDataIndexer(eventStream); Assertions.assertEquals("opennlp.tools.ml.model.OnePassDataIndexer", di.getClass().getName()); Assertions.assertEquals(3, di.getNumEvents()); Assertions.assertEquals(2, di.getOutcomeLabels().length); Assertions.assertEquals(6, di.getPredLabels().length); // change the parameters and try again... eventStream.reset(); parameters.put(TrainingParameters.ALGORITHM_PARAM, QNTrainer.MAXENT_QN_VALUE); parameters.put(AbstractEventTrainer.DATA_INDEXER_PARAM, AbstractEventTrainer.DATA_INDEXER_TWO_PASS_VALUE); parameters.put(AbstractEventTrainer.CUTOFF_PARAM, 2); trainer = TrainerFactory.getEventTrainer(parameters, new HashMap<>()); Assertions.assertEquals("opennlp.tools.ml.maxent.quasinewton.QNTrainer", trainer.getClass().getName()); aeTrainer = (AbstractEventTrainer) trainer; di = aeTrainer.getDataIndexer(eventStream); Assertions.assertEquals("opennlp.tools.ml.model.TwoPassDataIndexer", di.getClass().getName()); eventStream.close(); } @Test void testIndexingFactory() throws IOException { Map myReportMap = new HashMap<>(); ObjectStream eventStream = createEventStream(); // set the cutoff to 1 for this test. TrainingParameters parameters = new TrainingParameters(); parameters.put(AbstractDataIndexer.CUTOFF_PARAM, 1); // test with a 1 pass data indexer... parameters.put(AbstractEventTrainer.DATA_INDEXER_PARAM, AbstractEventTrainer.DATA_INDEXER_ONE_PASS_VALUE); DataIndexer di = DataIndexerFactory.getDataIndexer(parameters, myReportMap); Assertions.assertEquals("opennlp.tools.ml.model.OnePassDataIndexer", di.getClass().getName()); di.index(eventStream); Assertions.assertEquals(3, di.getNumEvents()); Assertions.assertEquals(2, di.getOutcomeLabels().length); Assertions.assertEquals(6, di.getPredLabels().length); eventStream.reset(); // test with a 2-pass data indexer... parameters.put(AbstractEventTrainer.DATA_INDEXER_PARAM, AbstractEventTrainer.DATA_INDEXER_TWO_PASS_VALUE); di = DataIndexerFactory.getDataIndexer(parameters, myReportMap); Assertions.assertEquals("opennlp.tools.ml.model.TwoPassDataIndexer", di.getClass().getName()); di.index(eventStream); Assertions.assertEquals(3, di.getNumEvents()); Assertions.assertEquals(2, di.getOutcomeLabels().length); Assertions.assertEquals(6, di.getPredLabels().length); // the rest of the test doesn't actually index, so we can close the eventstream. eventStream.close(); // test with a 1-pass Real value dataIndexer parameters.put(AbstractEventTrainer.DATA_INDEXER_PARAM, AbstractEventTrainer.DATA_INDEXER_ONE_PASS_REAL_VALUE); di = DataIndexerFactory.getDataIndexer(parameters, myReportMap); Assertions.assertEquals("opennlp.tools.ml.model.OnePassRealValueDataIndexer", di.getClass().getName()); // test with an UNRegistered MockIndexer parameters.put(AbstractEventTrainer.DATA_INDEXER_PARAM, "opennlp.tools.ml.maxent.MockDataIndexer"); di = DataIndexerFactory.getDataIndexer(parameters, myReportMap); Assertions.assertEquals("opennlp.tools.ml.maxent.MockDataIndexer", di.getClass().getName()); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/GISTrainerTest.java0100644 0000000 0000000 00000006150 14523004075 033230 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent; import java.util.HashMap; import java.util.Map; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.Context; import opennlp.tools.ml.model.Event; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; public class GISTrainerTest { @SuppressWarnings("unchecked") @Test void testGaussianSmoothing() throws Exception { TrainingParameters params = new TrainingParameters(); params.put("Algorithm", "MAXENT"); params.put("DataIndexer", "OnePass"); params.put("Cutoff", 0); params.put("Iterations", 5); params.put("GaussianSmoothing", true); Map reportMap = new HashMap<>(); EventTrainer trainer = TrainerFactory.getEventTrainer(params, reportMap); ObjectStream eventStream = new FootballEventStream(); AbstractModel smoothedModel = (AbstractModel) trainer.train(eventStream); Map predMap = (Map) smoothedModel.getDataStructures()[1]; double[] nevilleFalseExpected = new double[] {-0.17, .10, 0.05}; double[] nevilleTrueExpected = new double[] {0.080, -0.047, -0.080}; String predicateToTest = "Neville=false"; Assertions.assertArrayEquals(nevilleFalseExpected, predMap.get(predicateToTest).getParameters(), 0.01); predicateToTest = "Neville=true"; Assertions.assertArrayEquals(nevilleTrueExpected, predMap.get(predicateToTest).getParameters(), 0.001); eventStream.reset(); params.put("GaussianSmoothing", false); trainer = TrainerFactory.getEventTrainer(params, reportMap); AbstractModel unsmoothedModel = (AbstractModel) trainer.train(eventStream); predMap = (Map) unsmoothedModel.getDataStructures()[1]; nevilleFalseExpected = new double[] {-0.19, 0.11, 0.06}; nevilleTrueExpected = new double[] {0.081, -0.050, -0.084}; predicateToTest = "Neville=false"; Assertions.assertArrayEquals(nevilleFalseExpected, predMap.get(predicateToTest).getParameters(), 0.01); predicateToTest = "Neville=true"; Assertions.assertArrayEquals(nevilleTrueExpected, predMap.get(predicateToTest).getParameters(), 0.001); eventStream.close(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_maxent_MaxentP0100644 0000000 0000000 00000000160 14523004075 032617 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/MaxentPrepAttachTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/MaxentPrepAttachTest.ja0100644 0000000 0000000 00000010434 14523004075 034142 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent; import java.io.IOException; import java.util.HashMap; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.ml.AbstractEventTrainer; import opennlp.tools.ml.AbstractTrainer; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.PrepAttachDataUtil; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.model.AbstractDataIndexer; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.ml.model.TwoPassDataIndexer; import opennlp.tools.ml.model.UniformPrior; import opennlp.tools.util.TrainingParameters; public class MaxentPrepAttachTest { private DataIndexer testDataIndexer; @BeforeEach void initIndexer() { TrainingParameters trainingParameters = new TrainingParameters(); trainingParameters.put(AbstractTrainer.CUTOFF_PARAM, 1); trainingParameters.put(AbstractDataIndexer.SORT_PARAM, false); testDataIndexer = new TwoPassDataIndexer(); testDataIndexer.init(trainingParameters, new HashMap<>()); } @Test void testMaxentOnPrepAttachData() throws IOException { testDataIndexer.index(PrepAttachDataUtil.createTrainingStream()); // this shows why the GISTrainer should be a AbstractEventTrainer. // TODO: make sure that the trainingParameter cutoff and the // cutoff value passed here are equal. AbstractModel model = new GISTrainer().trainModel(100, testDataIndexer, new UniformPrior(), 1); PrepAttachDataUtil.testModel(model, 0.7997028967566229); } @Test void testMaxentOnPrepAttachData2Threads() throws IOException { testDataIndexer.index(PrepAttachDataUtil.createTrainingStream()); AbstractModel model = new GISTrainer().trainModel(100, testDataIndexer, new UniformPrior(), 2); PrepAttachDataUtil.testModel(model, 0.7997028967566229); } @Test void testMaxentOnPrepAttachDataWithParams() throws IOException { TrainingParameters trainParams = new TrainingParameters(); trainParams.put(AbstractTrainer.ALGORITHM_PARAM, GISTrainer.MAXENT_VALUE); trainParams.put(AbstractEventTrainer.DATA_INDEXER_PARAM, AbstractEventTrainer.DATA_INDEXER_TWO_PASS_VALUE); trainParams.put(AbstractTrainer.CUTOFF_PARAM, 1); EventTrainer trainer = TrainerFactory.getEventTrainer(trainParams, null); MaxentModel model = trainer.train(PrepAttachDataUtil.createTrainingStream()); PrepAttachDataUtil.testModel(model, 0.7997028967566229); } @Test void testMaxentOnPrepAttachDataWithParamsDefault() throws IOException { TrainingParameters trainParams = new TrainingParameters(); trainParams.put(AbstractTrainer.ALGORITHM_PARAM, GISTrainer.MAXENT_VALUE); EventTrainer trainer = TrainerFactory.getEventTrainer(trainParams, null); MaxentModel model = trainer.train(PrepAttachDataUtil.createTrainingStream()); PrepAttachDataUtil.testModel(model, 0.8086159940579352); } @Test void testMaxentOnPrepAttachDataWithParamsLLThreshold() throws IOException { TrainingParameters trainParams = new TrainingParameters(); trainParams.put(AbstractTrainer.ALGORITHM_PARAM, GISTrainer.MAXENT_VALUE); trainParams.put(GISTrainer.LOG_LIKELIHOOD_THRESHOLD_PARAM, 5.); EventTrainer trainer = TrainerFactory.getEventTrainer(trainParams, null); MaxentModel model = trainer.train(PrepAttachDataUtil.createTrainingStream()); PrepAttachDataUtil.testModel(model, 0.8103490963109681); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/MockDataIndexer.java0100644 0000000 0000000 00000003527 14523004075 033430 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent; import java.util.Map; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.Event; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; public class MockDataIndexer implements DataIndexer { @Override public int[][] getContexts() { return new int[0][0]; } @Override public int[] getNumTimesEventsSeen() { return new int[0]; } @Override public int[] getOutcomeList() { return new int[0]; } @Override public String[] getPredLabels() { return new String[0]; } @Override public int[] getPredCounts() { return new int[0]; } @Override public String[] getOutcomeLabels() { return new String[0]; } @Override public float[][] getValues() { return new float[0][0]; } @Override public int getNumEvents() { return 0; } @Override public void init(TrainingParameters trainParams, Map reportMap) { } @Override public void index(ObjectStream eventStream) { } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_maxent_RealBas0100644 0000000 0000000 00000000164 14523004075 032560 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/RealBasicEventStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/RealBasicEventStreamTes0100644 0000000 0000000 00000010232 14523004075 034154 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent; import java.io.ByteArrayInputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.ml.AbstractEventStreamTest; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.RealValueFileEventStream; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import static org.junit.jupiter.api.Assertions.fail; /** * Verifies that the textual event (input) format in {@link RealBasicEventStream} is: *
* {@code outcome context1 context2 context3 ...} *

* and is consistent with {@link RealValueFileEventStream}. Moreover, the test checks that processing * given input works as expected. *

* Reported in and adjusted via: * OPENNLP-589. * * @see ObjectStream * @see RealValueFileEventStream */ public class RealBasicEventStreamTest extends AbstractEventStreamTest { @Override protected RealBasicEventStream createEventStream(String input) throws IOException { InputStreamFactory factory = () -> new ByteArrayInputStream(input.getBytes(StandardCharsets.UTF_8)); ObjectStream stream = new PlainTextByLineStream(factory, StandardCharsets.UTF_8); return new RealBasicEventStream(stream); } /** * See: {@link AbstractEventStreamTest#EVENTS} for the input data. */ @Test void testReadWithValidInput() throws IOException { try (ObjectStream eventStream = createEventStream(EVENTS)) { Assertions.assertEquals("other [wc=ic=1.0 w&c=he,ic=2.0 n1wc=lc=3.0 n1w&c=belongs,lc=4.0 n2wc=lc=5.0]", eventStream.read().toString()); Assertions.assertEquals("other [wc=lc=1.0 w&c=belongs,lc=2.0 p1wc=ic=3.0 p1w&c=he,ic=4.0 n1wc=lc=5.0]", eventStream.read().toString()); Assertions.assertEquals("other [wc=lc=1.0 w&c=to,lc=2.0 p1wc=lc=3.0 p1w&c=belongs,lc=4.0 p2wc=ic=5.0]", eventStream.read().toString()); Assertions.assertEquals("org-start [wc=ic=1.0 w&c=apache,ic=2.0 p1wc=lc=3.0 p1w&c=to,lc=4.0]", eventStream.read().toString()); Assertions.assertEquals("org-cont [wc=ic=1.0 w&c=software,ic=2.0 p1wc=ic=3.0 p1w&c=apache,ic=4.0]", eventStream.read().toString()); Assertions.assertEquals("org-cont [wc=ic=1.0 w&c=foundation,ic=2.0 p1wc=ic=3.0 p1w&c=software,ic=4.0]", eventStream.read().toString()); Assertions.assertEquals("other [wc=other=1.0 w&c=.,other=2.0 p1wc=ic=3.0]", eventStream.read().toString()); Assertions.assertNull(eventStream.read()); } } @Test void testReadWithInvalidNegativeValues() throws IOException { try (RealBasicEventStream eventStream = createEventStream(EVENTS_INVALID_NEGATIVE)) { eventStream.read(); fail("Negative values should not be tolerated as input!"); } catch (RuntimeException rte) { //noinspection StatementWithEmptyBody if (rte.getMessage().startsWith("Negative values are not allowed")) { // expected behviour } else { fail(rte); } } } @Test void testReset() { try (RealBasicEventStream rbeStream = createEventStream(EVENTS)) { rbeStream.reset(); } catch (IOException ioe) { fail(ioe.toString()); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_maxent_RealVal0100644 0000000 0000000 00000000156 14523004075 032576 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/RealValueModelTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/RealValueModelTest.java0100644 0000000 0000000 00000006312 14523004075 034122 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent; import java.io.IOException; import java.util.HashMap; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.ml.AbstractTrainer; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.FileEventStream; import opennlp.tools.ml.model.OnePassRealValueDataIndexer; import opennlp.tools.ml.model.RealValueFileEventStream; import opennlp.tools.util.TrainingParameters; public class RealValueModelTest { private DataIndexer testDataIndexer; @BeforeEach void initIndexer() { TrainingParameters trainingParameters = new TrainingParameters(); trainingParameters.put(AbstractTrainer.CUTOFF_PARAM, 1); testDataIndexer = new OnePassRealValueDataIndexer(); testDataIndexer.init(trainingParameters, new HashMap<>()); } @Test void testRealValuedWeightsVsRepeatWeighting() throws IOException { GISModel realModel; GISTrainer gisTrainer = new GISTrainer(); try (RealValueFileEventStream rvfes1 = new RealValueFileEventStream( "src/test/resources/data/opennlp/maxent/real-valued-weights-training-data.txt")) { testDataIndexer.index(rvfes1); realModel = gisTrainer.trainModel(100, testDataIndexer); } GISModel repeatModel; try (FileEventStream rvfes2 = new FileEventStream( "src/test/resources/data/opennlp/maxent/repeat-weighting-training-data.txt")) { testDataIndexer.index(rvfes2); repeatModel = gisTrainer.trainModel(100, testDataIndexer); } String[] features2Classify = new String[] {"feature2", "feature5"}; double[] realResults = realModel.eval(features2Classify); double[] repeatResults = repeatModel.eval(features2Classify); Assertions.assertEquals(realResults.length, repeatResults.length); for (int i = 0; i < realResults.length; i++) { Assertions.assertEquals(repeatResults[i], realResults[i], 0.01f); } features2Classify = new String[] {"feature1", "feature2", "feature3", "feature4", "feature5"}; realResults = realModel.eval(features2Classify, new float[] {5.5f, 6.1f, 9.1f, 4.0f, 1.8f}); repeatResults = repeatModel.eval(features2Classify, new float[] {5.5f, 6.1f, 9.1f, 4.0f, 1.8f}); Assertions.assertEquals(realResults.length, repeatResults.length); for (int i = 0; i < realResults.length; i++) { Assertions.assertEquals(repeatResults[i], realResults[i],0.01f); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_maxent_ScaleDo0100644 0000000 0000000 00000000161 14523004075 032556 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/ScaleDoesntMatterTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/ScaleDoesntMatterTest.j0100644 0000000 0000000 00000010621 14523004075 034150 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent; import java.nio.charset.StandardCharsets; import java.util.HashMap; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.ml.AbstractTrainer; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.ml.model.OnePassRealValueDataIndexer; import opennlp.tools.ml.model.RealValueFileEventStream; import opennlp.tools.util.MockInputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.ModelUtil; public class ScaleDoesntMatterTest { private DataIndexer testDataIndexer; @BeforeEach void initIndexer() { TrainingParameters trainingParameters = new TrainingParameters(); trainingParameters.put(AbstractTrainer.CUTOFF_PARAM, 0); testDataIndexer = new OnePassRealValueDataIndexer(); testDataIndexer.init(trainingParameters, new HashMap<>()); } /** * This test sets out to prove that the scale you use on real valued * predicates doesn't matter when it comes the probability assigned to each * outcome. Strangely, if we use (1,2) and (10,20) there's no difference. If * we use (0.1,0.2) and (10,20) there is a difference. *

* Note: The textual event format is: *
* {@code outcome context1 context2 context3 ...} *

* This was changed when * OPENNLP-589 was resolved. */ @Test void testScaleResults() throws Exception { final String smallValues = "A predA=0.1 predB=0.2\n" + "B predB=0.3 predA=0.1\n"; final String smallTest = "predA=0.2 predB=0.2"; final String largeValues = "A predA=10 predB=20\n" + "B predB=30 predA=10\n"; final String largeTest = "predA=20 predB=20"; ObjectStream smallEventStream = new RealBasicEventStream( new PlainTextByLineStream(new MockInputStreamFactory(smallValues), StandardCharsets.UTF_8)); testDataIndexer.index(smallEventStream); EventTrainer smallModelTrainer = TrainerFactory.getEventTrainer( ModelUtil.createDefaultTrainingParameters(), null); MaxentModel smallModel = smallModelTrainer.train(testDataIndexer); String[] contexts = smallTest.split("\\s+"); float[] values = RealValueFileEventStream.parseContexts(contexts); double[] smallResults = smallModel.eval(contexts, values); String smallResultString = smallModel.getAllOutcomes(smallResults); Assertions.assertNotNull(smallResultString); ObjectStream largeEventStream = new RealBasicEventStream( new PlainTextByLineStream(new MockInputStreamFactory(largeValues), StandardCharsets.UTF_8)); testDataIndexer.index(largeEventStream); EventTrainer largeModelTrainer = TrainerFactory.getEventTrainer( ModelUtil.createDefaultTrainingParameters(), null); MaxentModel largeModel = largeModelTrainer.train(testDataIndexer); contexts = largeTest.split("\\s+"); values = RealValueFileEventStream.parseContexts(contexts); double[] largeResults = largeModel.eval(contexts, values); String largeResultString = largeModel.getAllOutcomes(largeResults); Assertions.assertNotNull(largeResultString); Assertions.assertEquals(smallResults.length, largeResults.length); for (int i = 0; i < smallResults.length; i++) { Assertions.assertEquals(largeResults[i], smallResults[i], 0.01f); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_maxent_URLInpu0100644 0000000 0000000 00000000161 14523004075 032542 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/URLInputStreamFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/URLInputStreamFactory.j0100644 0000000 0000000 00000002321 14523004075 034113 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent; import java.io.IOException; import java.io.InputStream; import java.net.URL; import opennlp.tools.util.InputStreamFactory; public class URLInputStreamFactory implements InputStreamFactory { private final URL url; public URLInputStreamFactory(URL url) { this.url = url; } @Override public InputStream createInputStream() throws IOException { return url.openStream(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_maxent_io_Real0100644 0000000 0000000 00000000173 14523004075 032621 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/io/RealValueFileEventStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/io/RealValueFileEventSt0100644 0000000 0000000 00000004203 14523004075 034076 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.io; import java.io.IOException; import java.util.HashMap; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.ml.AbstractTrainer; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.OnePassRealValueDataIndexer; import opennlp.tools.ml.model.RealValueFileEventStream; import opennlp.tools.util.TrainingParameters; public class RealValueFileEventStreamTest { private DataIndexer indexer; @BeforeEach void initIndexer() { TrainingParameters trainingParameters = new TrainingParameters(); trainingParameters.put(AbstractTrainer.CUTOFF_PARAM, 1); indexer = new OnePassRealValueDataIndexer(); indexer.init(trainingParameters, new HashMap<>()); } @Test void testLastLineBug() throws IOException { try (RealValueFileEventStream rvfes = new RealValueFileEventStream( "src/test/resources/data/opennlp/maxent/io/rvfes-bug-data-ok.txt")) { indexer.index(rvfes); } Assertions.assertEquals(1, indexer.getOutcomeLabels().length); try (RealValueFileEventStream rvfes = new RealValueFileEventStream( "src/test/resources/data/opennlp/maxent/io/rvfes-bug-data-broken.txt")) { indexer.index(rvfes); } Assertions.assertEquals(1, indexer.getOutcomeLabels().length); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_maxent_quasine0100644 0000000 0000000 00000000166 14523004075 032716 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/quasinewton/LineSearchTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/quasinewton/LineSearchT0100644 0000000 0000000 00000016565 14523004075 034232 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.quasinewton; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.ml.maxent.quasinewton.LineSearch.LineSearchResult; public class LineSearchTest { private static final double TOLERANCE = 0.01; @Test void testLineSearchDeterminesSaneStepLength1() { Function objectiveFunction = new QuadraticFunction1(); // given double[] testX = new double[] {0}; double testValueX = objectiveFunction.valueAt(testX); double[] testGradX = objectiveFunction.gradientAt(testX); double[] testDirection = new double[] {1}; // when LineSearchResult lsr = LineSearchResult.getInitialObject(testValueX, testGradX, testX); LineSearch.doLineSearch(objectiveFunction, testDirection, lsr, 1.0); double stepSize = lsr.getStepSize(); // then boolean succCond = TOLERANCE < stepSize && stepSize <= 1; Assertions.assertTrue(succCond); } @Test void testLineSearchDeterminesSaneStepLength2() { Function objectiveFunction = new QuadraticFunction2(); // given double[] testX = new double[] {-2}; double testValueX = objectiveFunction.valueAt(testX); double[] testGradX = objectiveFunction.gradientAt(testX); double[] testDirection = new double[] {1}; // when LineSearchResult lsr = LineSearchResult.getInitialObject(testValueX, testGradX, testX); LineSearch.doLineSearch(objectiveFunction, testDirection, lsr, 1.0); double stepSize = lsr.getStepSize(); // then boolean succCond = TOLERANCE < stepSize && stepSize <= 1; Assertions.assertTrue(succCond); } @Test void testLineSearchFailsWithWrongDirection1() { Function objectiveFunction = new QuadraticFunction1(); // given double[] testX = new double[] {0}; double testValueX = objectiveFunction.valueAt(testX); double[] testGradX = objectiveFunction.gradientAt(testX); double[] testDirection = new double[] {-1}; // when LineSearchResult lsr = LineSearchResult.getInitialObject(testValueX, testGradX, testX); LineSearch.doLineSearch(objectiveFunction, testDirection, lsr, 1.0); double stepSize = lsr.getStepSize(); // then boolean succCond = TOLERANCE < stepSize && stepSize <= 1; Assertions.assertFalse(succCond); Assertions.assertEquals(0.0, stepSize, TOLERANCE); } @Test void testLineSearchFailsWithWrongDirection2() { Function objectiveFunction = new QuadraticFunction2(); // given double[] testX = new double[] {-2}; double testValueX = objectiveFunction.valueAt(testX); double[] testGradX = objectiveFunction.gradientAt(testX); double[] testDirection = new double[] {-1}; // when LineSearchResult lsr = LineSearchResult.getInitialObject(testValueX, testGradX, testX); LineSearch.doLineSearch(objectiveFunction, testDirection, lsr, 1.0); double stepSize = lsr.getStepSize(); // then boolean succCond = TOLERANCE < stepSize && stepSize <= 1; Assertions.assertFalse(succCond); Assertions.assertEquals(0.0, stepSize, TOLERANCE); } @Test void testLineSearchFailsWithWrongDirection3() { Function objectiveFunction = new QuadraticFunction1(); // given double[] testX = new double[] {4}; double testValueX = objectiveFunction.valueAt(testX); double[] testGradX = objectiveFunction.gradientAt(testX); double[] testDirection = new double[] {1}; // when LineSearchResult lsr = LineSearchResult.getInitialObject(testValueX, testGradX, testX); LineSearch.doLineSearch(objectiveFunction, testDirection, lsr, 1.0); double stepSize = lsr.getStepSize(); // then boolean succCond = TOLERANCE < stepSize && stepSize <= 1; Assertions.assertFalse(succCond); Assertions.assertEquals(0.0, stepSize, TOLERANCE); } @Test void testLineSearchFailsWithWrongDirection4() { Function objectiveFunction = new QuadraticFunction2(); // given double[] testX = new double[] {2}; double testValueX = objectiveFunction.valueAt(testX); double[] testGradX = objectiveFunction.gradientAt(testX); double[] testDirection = new double[] {1}; // when LineSearchResult lsr = LineSearchResult.getInitialObject(testValueX, testGradX, testX); LineSearch.doLineSearch(objectiveFunction, testDirection, lsr, 1.0); double stepSize = lsr.getStepSize(); // then boolean succCond = TOLERANCE < stepSize && stepSize <= 1; Assertions.assertFalse(succCond); Assertions.assertEquals(0.0, stepSize, TOLERANCE); } @Test void testLineSearchFailsAtMinimum1() { Function objectiveFunction = new QuadraticFunction2(); // given double[] testX = new double[] {0}; double testValueX = objectiveFunction.valueAt(testX); double[] testGradX = objectiveFunction.gradientAt(testX); double[] testDirection = new double[] {-1}; // when LineSearchResult lsr = LineSearchResult.getInitialObject(testValueX, testGradX, testX); LineSearch.doLineSearch(objectiveFunction, testDirection, lsr, 1.0); double stepSize = lsr.getStepSize(); // then boolean succCond = TOLERANCE < stepSize && stepSize <= 1; Assertions.assertFalse(succCond); Assertions.assertEquals(0.0, stepSize, TOLERANCE); } @Test void testLineSearchFailsAtMinimum2() { Function objectiveFunction = new QuadraticFunction2(); // given double[] testX = new double[] {0}; double testValueX = objectiveFunction.valueAt(testX); double[] testGradX = objectiveFunction.gradientAt(testX); double[] testDirection = new double[] {1}; // when LineSearchResult lsr = LineSearchResult.getInitialObject(testValueX, testGradX, testX); LineSearch.doLineSearch(objectiveFunction, testDirection, lsr, 1.0); double stepSize = lsr.getStepSize(); // then boolean succCond = TOLERANCE < stepSize && stepSize <= 1; Assertions.assertFalse(succCond); Assertions.assertEquals(0.0, stepSize, TOLERANCE); } /** * Quadratic function: f(x) = (x-2)^2 + 4 */ public static class QuadraticFunction1 implements Function { public double valueAt(double[] x) { // (x-2)^2 + 4; return StrictMath.pow(x[0] - 2, 2) + 4; } public double[] gradientAt(double[] x) { // 2(x-2) return new double[] {2 * (x[0] - 2)}; } public int getDimension() { return 1; } } /** * Quadratic function: f(x) = x^2 */ public static class QuadraticFunction2 implements Function { public double valueAt(double[] x) { // x^2; return StrictMath.pow(x[0], 2); } public double[] gradientAt(double[] x) { // 2x return new double[] {2 * x[0]}; } public int getDimension() { return 1; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_maxent_quasine0100644 0000000 0000000 00000000174 14523004075 032715 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/quasinewton/NegLogLikelihoodTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/quasinewton/NegLogLikel0100644 0000000 0000000 00000024165 14523004075 034220 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.quasinewton; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.ml.AbstractTrainer; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.OnePassRealValueDataIndexer; import opennlp.tools.ml.model.RealValueFileEventStream; import opennlp.tools.util.TrainingParameters; public class NegLogLikelihoodTest { private static final double TOLERANCE01 = 1.0E-06; private static final double TOLERANCE02 = 1.0E-10; private DataIndexer testDataIndexer; @BeforeEach void initIndexer() { TrainingParameters trainingParameters = new TrainingParameters(); trainingParameters.put(AbstractTrainer.CUTOFF_PARAM, 1); testDataIndexer = new OnePassRealValueDataIndexer(); testDataIndexer.init(trainingParameters, new HashMap<>()); } @Test void testDomainDimensionSanity() throws IOException { // given RealValueFileEventStream rvfes1 = new RealValueFileEventStream( "src/test/resources/data/opennlp/maxent/real-valued-weights-training-data.txt", StandardCharsets.UTF_8.name()); testDataIndexer.index(rvfes1); NegLogLikelihood objectFunction = new NegLogLikelihood(testDataIndexer); // when int correctDomainDimension = testDataIndexer.getPredLabels().length * testDataIndexer.getOutcomeLabels().length; // then Assertions.assertEquals(correctDomainDimension, objectFunction.getDimension()); } @Test void testInitialSanity() throws IOException { // given RealValueFileEventStream rvfes1 = new RealValueFileEventStream( "src/test/resources/data/opennlp/maxent/real-valued-weights-training-data.txt", StandardCharsets.UTF_8.name()); testDataIndexer.index(rvfes1); NegLogLikelihood objectFunction = new NegLogLikelihood(testDataIndexer); // when double[] initial = objectFunction.getInitialPoint(); // then for (double anInitial : initial) { Assertions.assertEquals(0.0, anInitial, TOLERANCE01); } } @Test void testGradientSanity() throws IOException { // given RealValueFileEventStream rvfes1 = new RealValueFileEventStream( "src/test/resources/data/opennlp/maxent/real-valued-weights-training-data.txt", StandardCharsets.UTF_8.name()); testDataIndexer.index(rvfes1); NegLogLikelihood objectFunction = new NegLogLikelihood(testDataIndexer); // when double[] initial = objectFunction.getInitialPoint(); double[] gradientAtInitial = objectFunction.gradientAt(initial); // then Assertions.assertNotNull(gradientAtInitial); } @Test void testValueAtInitialPoint() throws IOException { // given RealValueFileEventStream rvfes1 = new RealValueFileEventStream( "src/test/resources/data/opennlp/maxent/real-valued-weights-training-data.txt", "UTF-8"); testDataIndexer.index(rvfes1); NegLogLikelihood objectFunction = new NegLogLikelihood(testDataIndexer); // when double value = objectFunction.valueAt(objectFunction.getInitialPoint()); double expectedValue = 13.86294361; // then Assertions.assertEquals(expectedValue, value, TOLERANCE01); } @Test void testValueAtNonInitialPoint01() throws IOException { // given RealValueFileEventStream rvfes1 = new RealValueFileEventStream( "src/test/resources/data/opennlp/maxent/real-valued-weights-training-data.txt", StandardCharsets.UTF_8.name()); testDataIndexer.index(rvfes1); NegLogLikelihood objectFunction = new NegLogLikelihood(testDataIndexer); // when double[] nonInitialPoint = new double[] {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; double value = objectFunction.valueAt(nonInitialPoint); double expectedValue = 13.862943611198894; // then Assertions.assertEquals(expectedValue, value, TOLERANCE01); } @Test void testValueAtNonInitialPoint02() throws IOException { // given RealValueFileEventStream rvfes1 = new RealValueFileEventStream( "src/test/resources/data/opennlp/maxent/real-valued-weights-training-data.txt", StandardCharsets.UTF_8.name()); testDataIndexer.index(rvfes1); NegLogLikelihood objectFunction = new NegLogLikelihood(testDataIndexer); // when double[] nonInitialPoint = new double[] {3, 2, 3, 2, 3, 2, 3, 2, 3, 2}; double value = objectFunction.valueAt(dealignDoubleArrayForTestData(nonInitialPoint, testDataIndexer.getPredLabels(), testDataIndexer.getOutcomeLabels())); double expectedValue = 53.163219721099026; // then Assertions.assertEquals(expectedValue, value, TOLERANCE02); } @Test void testGradientAtInitialPoint() throws IOException { // given RealValueFileEventStream rvfes1 = new RealValueFileEventStream( "src/test/resources/data/opennlp/maxent/real-valued-weights-training-data.txt", StandardCharsets.UTF_8.name()); testDataIndexer.index(rvfes1); NegLogLikelihood objectFunction = new NegLogLikelihood(testDataIndexer); // when double[] gradientAtInitialPoint = objectFunction.gradientAt(objectFunction.getInitialPoint()); double[] expectedGradient = new double[] {-9.0, -14.0, -17.0, 20.0, 8.5, 9.0, 14.0, 17.0, -20.0, -8.5}; // then Assertions.assertTrue(compareDoubleArray(expectedGradient, gradientAtInitialPoint, testDataIndexer, TOLERANCE01)); } @Test void testGradientAtNonInitialPoint() throws IOException { // given RealValueFileEventStream rvfes1 = new RealValueFileEventStream( "src/test/resources/data/opennlp/maxent/real-valued-weights-training-data.txt", StandardCharsets.UTF_8.name()); testDataIndexer.index(rvfes1); NegLogLikelihood objectFunction = new NegLogLikelihood(testDataIndexer); // when double[] nonInitialPoint = new double[] {0.2, 0.5, 0.2, 0.5, 0.2, 0.5, 0.2, 0.5, 0.2, 0.5}; double[] gradientAtNonInitialPoint = objectFunction.gradientAt(dealignDoubleArrayForTestData(nonInitialPoint, testDataIndexer.getPredLabels(), testDataIndexer.getOutcomeLabels())); double[] expectedGradient = new double[] {-12.755042847945553, -21.227127506102434, -72.57790706276435, 38.03525795198456, 15.348650889354925, 12.755042847945557, 21.22712750610244, 72.57790706276438, -38.03525795198456, -15.348650889354925}; // then Assertions.assertTrue(compareDoubleArray(expectedGradient, gradientAtNonInitialPoint, testDataIndexer, TOLERANCE01)); } private double[] alignDoubleArrayForTestData(double[] expected, String[] predLabels, String[] outcomeLabels) { double[] aligned = new double[predLabels.length * outcomeLabels.length]; String[] sortedPredLabels = predLabels.clone(); String[] sortedOutcomeLabels = outcomeLabels.clone(); Arrays.sort(sortedPredLabels); Arrays.sort(sortedOutcomeLabels); Map invertedPredIndex = new HashMap<>(); Map invertedOutcomeIndex = new HashMap<>(); for (int i = 0; i < predLabels.length; i++) { invertedPredIndex.put(predLabels[i], i); } for (int i = 0; i < outcomeLabels.length; i++) { invertedOutcomeIndex.put(outcomeLabels[i], i); } for (int i = 0; i < sortedOutcomeLabels.length; i++) { for (int j = 0; j < sortedPredLabels.length; j++) { aligned[i * sortedPredLabels.length + j] = expected[invertedOutcomeIndex .get(sortedOutcomeLabels[i]) * sortedPredLabels.length + invertedPredIndex.get(sortedPredLabels[j])]; } } return aligned; } private double[] dealignDoubleArrayForTestData(double[] expected, String[] predLabels, String[] outcomeLabels) { double[] dealigned = new double[predLabels.length * outcomeLabels.length]; String[] sortedPredLabels = predLabels.clone(); String[] sortedOutcomeLabels = outcomeLabels.clone(); Arrays.sort(sortedPredLabels); Arrays.sort(sortedOutcomeLabels); Map invertedPredIndex = new HashMap<>(); Map invertedOutcomeIndex = new HashMap<>(); for (int i = 0; i < predLabels.length; i++) { invertedPredIndex.put(predLabels[i], i); } for (int i = 0; i < outcomeLabels.length; i++) { invertedOutcomeIndex.put(outcomeLabels[i], i); } for (int i = 0; i < sortedOutcomeLabels.length; i++) { for (int j = 0; j < sortedPredLabels.length; j++) { dealigned[invertedOutcomeIndex.get(sortedOutcomeLabels[i]) * sortedPredLabels.length + invertedPredIndex.get(sortedPredLabels[j])] = expected[i * sortedPredLabels.length + j]; } } return dealigned; } private boolean compareDoubleArray(double[] expected, double[] actual, DataIndexer indexer, double tolerance) { double[] alignedActual = alignDoubleArrayForTestData( actual, indexer.getPredLabels(), indexer.getOutcomeLabels()); if (expected.length != alignedActual.length) { return false; } for (int i = 0; i < alignedActual.length; i++) { if (StrictMath.abs(alignedActual[i] - expected[i]) > tolerance) { return false; } } return true; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_maxent_quasine0100644 0000000 0000000 00000000167 14523004075 032717 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/quasinewton/QNMinimizerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/quasinewton/QNMinimizer0100644 0000000 0000000 00000005776 14523004075 034275 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.quasinewton; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class QNMinimizerTest { @Test void testQuadraticFunction() { QNMinimizer minimizer = new QNMinimizer(); Function f = new QuadraticFunction(); double[] x = minimizer.minimize(f); double minValue = f.valueAt(x); Assertions.assertEquals(1.0, x[0], 1e-5); Assertions.assertEquals(5.0, x[1], 1e-5); Assertions.assertEquals(10.0, minValue, 1e-10); } @Test void testRosenbrockFunction() { QNMinimizer minimizer = new QNMinimizer(); Function f = new Rosenbrock(); double[] x = minimizer.minimize(f); double minValue = f.valueAt(x); Assertions.assertEquals(1.0, x[0], 1e-5); Assertions.assertEquals(1.0, x[1], 1e-5); Assertions.assertEquals(0, minValue, 1e-10); } /** * Quadratic function: f(x,y) = (x-1)^2 + (y-5)^2 + 10 */ public static class QuadraticFunction implements Function { @Override public int getDimension() { return 2; } @Override public double valueAt(double[] x) { return StrictMath.pow(x[0] - 1, 2) + StrictMath.pow(x[1] - 5, 2) + 10; } @Override public double[] gradientAt(double[] x) { return new double[] {2 * (x[0] - 1), 2 * (x[1] - 5)}; } } /** * Rosenbrock function: *

* {@code f(x,y) = (1-x)^2 + 100*(y-x^2)^2} * {@code f(x,y)} is non-convex and has global minimum at {@code (x,y) = (1,1)} where {@code f(x,y) = 0}. *

* with *

    *
  • {@code f_x = -2*(1-x) - 400*(y-x^2)*x}
  • *
  • {@code f_y = 200*(y-x^2)}
  • *
*/ public static class Rosenbrock implements Function { @Override public int getDimension() { return 2; } @Override public double valueAt(double[] x) { return StrictMath.pow(1 - x[0], 2) + 100 * StrictMath.pow(x[1] - StrictMath.pow(x[0], 2), 2); } @Override public double[] gradientAt(double[] x) { double[] g = new double[2]; g[0] = -2 * (1 - x[0]) - 400 * (x[1] - StrictMath.pow(x[0], 2)) * x[0]; g[1] = 200 * (x[1] - StrictMath.pow(x[0], 2)); return g; } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_maxent_quasine0100644 0000000 0000000 00000000170 14523004075 032711 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/quasinewton/QNPrepAttachTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/quasinewton/QNPrepAttac0100644 0000000 0000000 00000011547 14523004075 034206 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.quasinewton; import java.io.IOException; import java.util.HashMap; import org.junit.jupiter.api.Test; import opennlp.tools.ml.AbstractEventTrainer; import opennlp.tools.ml.AbstractTrainer; import opennlp.tools.ml.PrepAttachDataUtil; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.model.AbstractDataIndexer; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.ml.model.TwoPassDataIndexer; import opennlp.tools.util.TrainingParameters; public class QNPrepAttachTest { @Test void testQNOnPrepAttachData() throws IOException { DataIndexer indexer = new TwoPassDataIndexer(); TrainingParameters indexingParameters = new TrainingParameters(); indexingParameters.put(AbstractTrainer.CUTOFF_PARAM, 1); indexingParameters.put(AbstractDataIndexer.SORT_PARAM, false); indexer.init(indexingParameters, new HashMap<>()); indexer.index(PrepAttachDataUtil.createTrainingStream()); AbstractModel model = new QNTrainer().trainModel(100, indexer); PrepAttachDataUtil.testModel(model, 0.8155484030700668); } @Test void testQNOnPrepAttachDataWithParamsDefault() throws IOException { TrainingParameters trainParams = new TrainingParameters(); trainParams.put(AbstractTrainer.ALGORITHM_PARAM, QNTrainer.MAXENT_QN_VALUE); MaxentModel model = TrainerFactory.getEventTrainer(trainParams, null) .train(PrepAttachDataUtil.createTrainingStream()); PrepAttachDataUtil.testModel(model, 0.8115870264917059); } @Test void testQNOnPrepAttachDataWithElasticNetParams() throws IOException { TrainingParameters trainParams = new TrainingParameters(); trainParams.put(AbstractTrainer.ALGORITHM_PARAM, QNTrainer.MAXENT_QN_VALUE); trainParams.put(AbstractEventTrainer.DATA_INDEXER_PARAM, AbstractEventTrainer.DATA_INDEXER_TWO_PASS_VALUE); trainParams.put(AbstractTrainer.CUTOFF_PARAM, 1); trainParams.put(QNTrainer.L1COST_PARAM, 0.25); trainParams.put(QNTrainer.L2COST_PARAM, 1.0D); MaxentModel model = TrainerFactory.getEventTrainer(trainParams, null) .train(PrepAttachDataUtil.createTrainingStream()); PrepAttachDataUtil.testModel(model, 0.8229759841544937); } @Test void testQNOnPrepAttachDataWithL1Params() throws IOException { TrainingParameters trainParams = new TrainingParameters(); trainParams.put(AbstractTrainer.ALGORITHM_PARAM, QNTrainer.MAXENT_QN_VALUE); trainParams.put(AbstractEventTrainer.DATA_INDEXER_PARAM, AbstractEventTrainer.DATA_INDEXER_TWO_PASS_VALUE); trainParams.put(AbstractTrainer.CUTOFF_PARAM, 1); trainParams.put(QNTrainer.L1COST_PARAM, 1.0D); trainParams.put(QNTrainer.L2COST_PARAM, 0D); MaxentModel model = TrainerFactory.getEventTrainer(trainParams, null) .train(PrepAttachDataUtil.createTrainingStream()); PrepAttachDataUtil.testModel(model, 0.8180242634315424); } @Test void testQNOnPrepAttachDataWithL2Params() throws IOException { TrainingParameters trainParams = new TrainingParameters(); trainParams.put(AbstractTrainer.ALGORITHM_PARAM, QNTrainer.MAXENT_QN_VALUE); trainParams.put(AbstractEventTrainer.DATA_INDEXER_PARAM, AbstractEventTrainer.DATA_INDEXER_TWO_PASS_VALUE); trainParams.put(AbstractTrainer.CUTOFF_PARAM, 1); trainParams.put(QNTrainer.L1COST_PARAM, 0D); trainParams.put(QNTrainer.L2COST_PARAM, 1.0D); MaxentModel model = TrainerFactory.getEventTrainer(trainParams, null) .train(PrepAttachDataUtil.createTrainingStream()); PrepAttachDataUtil.testModel(model, 0.8227283981183461); } @Test void testQNOnPrepAttachDataInParallel() throws IOException { TrainingParameters trainParams = new TrainingParameters(); trainParams.put(AbstractTrainer.ALGORITHM_PARAM, QNTrainer.MAXENT_QN_VALUE); trainParams.put(QNTrainer.THREADS_PARAM, 2); MaxentModel model = TrainerFactory.getEventTrainer(trainParams, null) .train(PrepAttachDataUtil.createTrainingStream()); PrepAttachDataUtil.testModel(model, 0.8115870264917059); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_maxent_quasine0100644 0000000 0000000 00000000165 14523004075 032715 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/quasinewton/QNTrainerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/maxent/quasinewton/QNTrainerTe0100644 0000000 0000000 00000011524 14523004075 034213 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.maxent.quasinewton; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.HashMap; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.ml.AbstractTrainer; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.BinaryFileDataReader; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.GenericModelReader; import opennlp.tools.ml.model.GenericModelWriter; import opennlp.tools.ml.model.OnePassRealValueDataIndexer; import opennlp.tools.ml.model.RealValueFileEventStream; import opennlp.tools.util.TrainingParameters; public class QNTrainerTest { private static final int ITERATIONS = 50; private DataIndexer testDataIndexer; @BeforeEach void initIndexer() { TrainingParameters trainingParameters = new TrainingParameters(); trainingParameters.put(AbstractTrainer.CUTOFF_PARAM, 1); testDataIndexer = new OnePassRealValueDataIndexer(); testDataIndexer.init(trainingParameters, new HashMap<>()); } @Test void testTrainModelReturnsAQNModel() throws Exception { // given RealValueFileEventStream rvfes1 = new RealValueFileEventStream( "src/test/resources/data/opennlp/maxent/real-valued-weights-training-data.txt"); testDataIndexer.index(rvfes1); // when QNModel trainedModel = new QNTrainer().trainModel(ITERATIONS, testDataIndexer); // then Assertions.assertNotNull(trainedModel); } @Test void testInTinyDevSet() throws Exception { // given RealValueFileEventStream rvfes1 = new RealValueFileEventStream( "src/test/resources/data/opennlp/maxent/real-valued-weights-training-data.txt"); testDataIndexer.index(rvfes1); // when QNModel trainedModel = new QNTrainer(15).trainModel(ITERATIONS, testDataIndexer); String[] features2Classify = new String[] { "feature2", "feature3", "feature3", "feature3", "feature3", "feature3", "feature3", "feature3", "feature3", "feature3", "feature3", "feature3"}; double[] eval = trainedModel.eval(features2Classify); // then Assertions.assertNotNull(eval); } @Test void testModel() throws IOException { // given RealValueFileEventStream rvfes1 = new RealValueFileEventStream( "src/test/resources/data/opennlp/maxent/real-valued-weights-training-data.txt"); testDataIndexer.index(rvfes1); // when QNModel trainedModel = new QNTrainer(15).trainModel( ITERATIONS, testDataIndexer); Assertions.assertNotEquals(null, trainedModel); } @Test void testSerdeModel() throws IOException { // given RealValueFileEventStream rvfes1 = new RealValueFileEventStream( "src/test/resources/data/opennlp/maxent/real-valued-weights-training-data.txt"); testDataIndexer.index(rvfes1); // when QNModel trainedModel = new QNTrainer(5, 700).trainModel(ITERATIONS, testDataIndexer); ByteArrayOutputStream modelBytes = new ByteArrayOutputStream(); GenericModelWriter modelWriter = new GenericModelWriter(trainedModel, new DataOutputStream(modelBytes)); modelWriter.persist(); modelWriter.close(); GenericModelReader modelReader = new GenericModelReader(new BinaryFileDataReader( new ByteArrayInputStream(modelBytes.toByteArray()))); AbstractModel readModel = modelReader.getModel(); QNModel deserModel = (QNModel) readModel; Assertions.assertEquals(trainedModel, deserModel); String[] features2Classify = new String[] { "feature2", "feature3", "feature3", "feature3", "feature3", "feature3", "feature3", "feature3", "feature3", "feature3", "feature3", "feature3"}; double[] eval01 = trainedModel.eval(features2Classify); double[] eval02 = deserModel.eval(features2Classify); Assertions.assertEquals(eval01.length, eval02.length); for (int i = 0; i < eval01.length; i++) { Assertions.assertEquals(eval01[i], eval02[i], 0.00000001); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/model/EventTest.java0100644 0000000 0000000 00000004154 14523004075 032150 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class EventTest { @Test void testNullOutcome() { try { new Event(null, new String[] {"aa", "bb", "cc"}); Assertions.fail("NPE must be thrown"); } catch (NullPointerException expected) { } } @Test void testNullContext() { try { new Event("o1", null); Assertions.fail("NPE must be thrown"); } catch (NullPointerException expected) { } } @Test void testWithValues() { Event event = new Event("o1", new String[] {"aa", "bb", "cc"}); Assertions.assertEquals("o1", event.getOutcome()); Assertions.assertArrayEquals(new String[] {"aa", "bb", "cc"}, event.getContext()); Assertions.assertNull(event.getValues()); Assertions.assertEquals("o1 [aa bb cc]", event.toString()); } @Test void testWithoutValues() { Event event = new Event("o1", new String[] {"aa", "bb", "cc"}, new float[] {0.2F, 0.4F, 0.4F}); Assertions.assertEquals("o1", event.getOutcome()); Assertions.assertArrayEquals(new String[] {"aa", "bb", "cc"}, event.getContext()); Assertions.assertArrayEquals(new float[] {0.2F, 0.4F, 0.4F}, event.getValues(), 0.001F); Assertions.assertEquals("o1 [aa=0.2 bb=0.4 cc=0.4]", event.toString()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_model_FileEven0100644 0000000 0000000 00000000156 14523004075 032551 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/model/FileEventStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/model/FileEventStreamTest.java0100644 0000000 0000000 00000005306 14523004075 034124 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.IOException; import java.io.StringReader; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.ml.AbstractEventStreamTest; import opennlp.tools.util.ObjectStream; public class FileEventStreamTest extends AbstractEventStreamTest { @Override protected FileEventStream createEventStream(String input) throws IOException { return new FileEventStream(new StringReader(input)); } /** * See: {@link AbstractEventStreamTest#EVENTS_PLAIN} for the input data. */ @Test void testReadWithValidInput() throws IOException { try (ObjectStream eventStream = createEventStream(EVENTS_PLAIN)) { Assertions.assertEquals("other [wc=ic w&c=he,ic n1wc=lc n1w&c=belongs,lc n2wc=lc]", eventStream.read().toString()); Assertions.assertEquals("other [wc=lc w&c=belongs,lc p1wc=ic p1w&c=he,ic n1wc=lc]", eventStream.read().toString()); Assertions.assertEquals("other [wc=lc w&c=to,lc p1wc=lc p1w&c=belongs,lc p2wc=ic]", eventStream.read().toString()); Assertions.assertEquals("org-start [wc=ic w&c=apache,ic p1wc=lc p1w&c=to,lc]", eventStream.read().toString()); Assertions.assertEquals("org-cont [wc=ic w&c=software,ic p1wc=ic p1w&c=apache,ic]", eventStream.read().toString()); Assertions.assertEquals("org-cont [wc=ic w&c=foundation,ic p1wc=ic p1w&c=software,ic]", eventStream.read().toString()); Assertions.assertEquals("other [wc=other w&c=.,other p1wc=ic]", eventStream.read().toString()); Assertions.assertNull(eventStream.read()); } } @Test void testReset() throws IOException { try (FileEventStream feStream = createEventStream(EVENTS_PLAIN)) { feStream.reset(); Assertions.fail("UnsupportedOperationException should be thrown"); } catch (UnsupportedOperationException expected) { } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_model_ModelPar0100644 0000000 0000000 00000000164 14523004075 032556 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/model/ModelParameterChunkerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/model/ModelParameterChunkerTes0100644 0000000 0000000 00000007616 14523004075 034212 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; /** * Test cases for {@link ModelParameterChunker}. * * @author Martin Wiesner */ public class ModelParameterChunkerTest { private File tmp; @BeforeEach void setup() throws IOException { tmp = Files.createTempFile("chunker-test", ".dat").toFile(); tmp.deleteOnExit(); } @AfterEach void tearDown() { tmp = null; } /* * Note: 8k Integer elements will be concatenated into a flat String. The size of the resulting character * sequence won't hit the critical 64K limit (see: DataOutputStream#writeUTF). * * No chunking is therefore required. */ @Test void testWriteReadUTFWithoutChunking() { // 8k ints -> 48042 bytes for a flat String testAndCheck(8192, 48042); } /* * Note: 16k Integer elements will be concatenated into a flat String. The size of the resulting character * sequence will exceed the critical 64K limit (see: DataOutputStream#writeUTF). * * Chunking is therefore required and used internally to avoid the blow up of the serialization procedure. * * When restoring the chunked String, the signature string (#SIGNATURE_CHUNKED_PARAMS) will be escaped. * Thus, we can assume the restored string must be equal to the artificially created original input. */ @Test void testWriteReadUTFWithChunking() { // 16k ints -> 103578 bytes for a flat String testAndCheck(16384, 103578); } private void testAndCheck(int elementCount, int expectedByteLength) { String p = getParameter(elementCount); Assertions.assertNotNull(p); Assertions.assertFalse(p.trim().isEmpty()); Assertions.assertEquals(expectedByteLength, p.getBytes(StandardCharsets.UTF_8).length); // TEST try (DataOutputStream dos = new DataOutputStream(Files.newOutputStream(tmp.toPath()))) { ModelParameterChunker.writeUTF(dos, p); } catch (IOException e) { Assertions.fail(e.getLocalizedMessage()); } // VERIFY try (DataInputStream dis = new DataInputStream(Files.newInputStream(tmp.toPath()))) { String restoredBelow64K = ModelParameterChunker.readUTF(dis); // assumptions Assertions.assertNotNull(restoredBelow64K); Assertions.assertFalse(restoredBelow64K.trim().isEmpty()); Assertions.assertEquals(p, restoredBelow64K); Assertions.assertEquals(expectedByteLength, p.getBytes(StandardCharsets.UTF_8).length); } catch (IOException e) { Assertions.fail(e.getLocalizedMessage()); } } private String getParameter(int elementCount) { List someParameters = new ArrayList<>(elementCount); for (int i = 0; i < elementCount; i++) { someParameters.add(i); } return someParameters.toString(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_model_OnePassD0100644 0000000 0000000 00000000161 14523004075 032524 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/model/OnePassDataIndexerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/model/OnePassDataIndexerTest.j0100644 0000000 0000000 00000006220 14523004075 034054 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.IOException; import java.util.Collections; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; public class OnePassDataIndexerTest { @Test void testIndex() throws IOException { // He belongs to Apache Software Foundation . ObjectStream eventStream = new SimpleEventStreamBuilder() .add("other/w=he n1w=belongs n2w=to po=other pow=other,He powf=other,ic ppo=other") .add("other/w=belongs p1w=he n1w=to n2w=apache po=other pow=other,belongs powf=other,lc ppo=other") .add("other/w=to p1w=belongs p2w=he n1w=apache n2w=software po=other pow=other,to" + " powf=other,lc ppo=other") .add("org-start/w=apache p1w=to p2w=belongs n1w=software n2w=foundation po=other pow=other,Apache" + " powf=other,ic ppo=other") .add("org-cont/w=software p1w=apache p2w=to n1w=foundation n2w=. po=org-start" + " pow=org-start,Software powf=org-start,ic ppo=other") .add("org-cont/w=foundation p1w=software p2w=apache n1w=. po=org-cont pow=org-cont,Foundation" + " powf=org-cont,ic ppo=org-start") .add("other/w=. p1w=foundation p2w=software po=org-cont pow=org-cont,. powf=org-cont,other" + " ppo=org-cont") .build(); DataIndexer indexer = new OnePassDataIndexer(); indexer.init(new TrainingParameters(Collections.emptyMap()), null); indexer.index(eventStream); Assertions.assertEquals(3, indexer.getContexts().length); Assertions.assertArrayEquals(new int[] {0}, indexer.getContexts()[0]); Assertions.assertArrayEquals(new int[] {0}, indexer.getContexts()[1]); Assertions.assertArrayEquals(new int[] {0}, indexer.getContexts()[2]); Assertions.assertNull(indexer.getValues()); Assertions.assertEquals(5, indexer.getNumEvents()); Assertions.assertArrayEquals(new int[] {0, 1, 2}, indexer.getOutcomeList()); Assertions.assertArrayEquals(new int[] {3, 1, 1}, indexer.getNumTimesEventsSeen()); Assertions.assertArrayEquals(new String[] {"ppo=other"}, indexer.getPredLabels()); Assertions.assertArrayEquals(new String[] {"other", "org-start", "org-cont"}, indexer.getOutcomeLabels()); Assertions.assertArrayEquals(new int[] {5}, indexer.getPredCounts()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_model_OnePassR0100644 0000000 0000000 00000000172 14523004075 032544 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/model/OnePassRealValueDataIndexerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/model/OnePassRealValueDataInde0100644 0000000 0000000 00000014101 14523004075 034043 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.IOException; import java.util.Collections; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; public class OnePassRealValueDataIndexerTest { DataIndexer indexer; @BeforeEach void setUp() { indexer = new OnePassRealValueDataIndexer(); indexer.init(new TrainingParameters(Collections.emptyMap()), null); } @Test void testIndex() throws IOException { // He belongs to Apache Software Foundation . ObjectStream eventStream = new SimpleEventStreamBuilder() .add("other/w=he n1w=belongs n2w=to po=other pow=other,He powf=other,ic ppo=other") .add("other/w=belongs p1w=he n1w=to n2w=apache po=other pow=other,belongs powf=other,lc ppo=other") .add("other/w=to p1w=belongs p2w=he n1w=apache n2w=software po=other pow=other,to" + " powf=other,lc ppo=other") .add("org-start/w=apache p1w=to p2w=belongs n1w=software n2w=foundation po=other pow=other,Apache" + " powf=other,ic ppo=other") .add("org-cont/w=software p1w=apache p2w=to n1w=foundation n2w=. po=org-start" + " pow=org-start,Software powf=org-start,ic ppo=other") .add("org-cont/w=foundation p1w=software p2w=apache n1w=. po=org-cont pow=org-cont,Foundation" + " powf=org-cont,ic ppo=org-start") .add("other/w=. p1w=foundation p2w=software po=org-cont pow=org-cont,. powf=org-cont,other" + " ppo=org-cont") .build(); indexer.index(eventStream); Assertions.assertEquals(3, indexer.getContexts().length); Assertions.assertArrayEquals(new int[] {0}, indexer.getContexts()[0]); Assertions.assertArrayEquals(new int[] {0}, indexer.getContexts()[1]); Assertions.assertArrayEquals(new int[] {0}, indexer.getContexts()[2]); Assertions.assertEquals(3, indexer.getValues().length); Assertions.assertNull(indexer.getValues()[0]); Assertions.assertNull(indexer.getValues()[1]); Assertions.assertNull(indexer.getValues()[2]); Assertions.assertEquals(5, indexer.getNumEvents()); Assertions.assertArrayEquals(new int[] {0, 1, 2}, indexer.getOutcomeList()); Assertions.assertArrayEquals(new int[] {3, 1, 1}, indexer.getNumTimesEventsSeen()); Assertions.assertArrayEquals(new String[] {"ppo=other"}, indexer.getPredLabels()); Assertions.assertArrayEquals(new String[] {"other", "org-start", "org-cont"}, indexer.getOutcomeLabels()); Assertions.assertArrayEquals(new int[] {5}, indexer.getPredCounts()); } @Test void testIndexValues() throws IOException { // He belongs to Apache Software Foundation . ObjectStream eventStream = new SimpleEventStreamBuilder() .add("other/w=he;0.1 n1w=belongs;0.2 n2w=to;0.1 po=other;0.1" + " pow=other,He;0.1 powf=other,ic;0.1 ppo=other;0.1") .add("other/w=belongs;0.1 p1w=he;0.2 n1w=to;0.1 n2w=apache;0.1" + " po=other;0.1 pow=other,belongs;0.1 powf=other,lc;0.1 ppo=other;0.1") .add("other/w=to;0.1 p1w=belongs;0.2 p2w=he;0.1 n1w=apache;0.1" + " n2w=software;0.1 po=other;0.1 pow=other,to;0.1 powf=other,lc;0.1 ppo=other;0.1") .add("org-start/w=apache;0.1 p1w=to;0.2 p2w=belongs;0.1 n1w=software;0.1 n2w=foundation;0.1" + " po=other;0.1 pow=other,Apache;0.1 powf=other,ic;0.1 ppo=other;0.1") .add("org-cont/w=software;0.1 p1w=apache;0.2 p2w=to;0.1 n1w=foundation;0.1" + " n2w=.;0.1 po=org-start;0.1 pow=org-start,Software;0.1 powf=org-start,ic;0.1 ppo=other;0.1") .add("org-cont/w=foundation;0.1 p1w=software;0.2 p2w=apache;0.1 n1w=.;0.1 po=org-cont;0.1" + " pow=org-cont,Foundation;0.1 powf=org-cont,ic;0.1 ppo=org-start;0.1") .add("other/w=.;0.1 p1w=foundation;0.1 p2w=software;0.1 po=org-cont;0.1 pow=org-cont,.;0.1" + " powf=org-cont,other;0.1 ppo=org-cont;0.1") .build(); indexer.index(eventStream); Assertions.assertEquals(3, indexer.getContexts().length); Assertions.assertArrayEquals(new int[] {0}, indexer.getContexts()[0]); Assertions.assertArrayEquals(new int[] {0}, indexer.getContexts()[1]); Assertions.assertArrayEquals(new int[] {0}, indexer.getContexts()[2]); Assertions.assertEquals(3, indexer.getValues().length); final float delta = 0.001F; Assertions.assertArrayEquals( indexer.getValues()[0], new float[] {0.1F, 0.2F, 0.1F, 0.1F, 0.1F, 0.1F, 0.1F}, delta); Assertions.assertArrayEquals( indexer.getValues()[1], new float[] {0.1F, 0.2F, 0.1F, 0.1F, 0.1F, 0.1F, 0.1F, 0.1F, 0.1F}, delta); Assertions.assertArrayEquals( indexer.getValues()[2], new float[] {0.1F, 0.2F, 0.1F, 0.1F, 0.1F, 0.1F, 0.1F, 0.1F, 0.1F}, delta); Assertions.assertEquals(5, indexer.getNumEvents()); Assertions.assertArrayEquals(new int[] {0, 1, 2}, indexer.getOutcomeList()); Assertions.assertArrayEquals(new int[] {3, 1, 1}, indexer.getNumTimesEventsSeen()); Assertions.assertArrayEquals(new String[] {"ppo=other"}, indexer.getPredLabels()); Assertions.assertArrayEquals(new String[] {"other", "org-start", "org-cont"}, indexer.getOutcomeLabels()); Assertions.assertArrayEquals(new int[] {5}, indexer.getPredCounts()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_model_RealValu0100644 0000000 0000000 00000000167 14523004075 032571 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/model/RealValueFileEventStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/model/RealValueFileEventStream0100644 0000000 0000000 00000007405 14523004075 034147 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.IOException; import java.io.StringReader; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.ml.AbstractEventStreamTest; import opennlp.tools.ml.maxent.RealBasicEventStream; import opennlp.tools.util.ObjectStream; import static org.junit.jupiter.api.Assertions.fail; /** * Verifies that the textual event (input) format in {@link RealValueFileEventStream} is: *
* {@code outcome context1 context2 context3 ...} *

* and is consistent with {@link RealBasicEventStream}. Moreover, the test checks that processing * given input works as expected. * * @see ObjectStream * @see RealBasicEventStream */ public class RealValueFileEventStreamTest extends AbstractEventStreamTest { @Override protected RealValueFileEventStream createEventStream(String input) throws IOException { return new RealValueFileEventStream(new StringReader(input)); } /** * See: {@link AbstractEventStreamTest#EVENTS} for the input data. */ @Test void testReadWithValidInput() throws IOException { try (ObjectStream eventStream = createEventStream(EVENTS)) { Assertions.assertEquals("other [wc=ic=1.0 w&c=he,ic=2.0 n1wc=lc=3.0 n1w&c=belongs,lc=4.0 n2wc=lc=5.0]", eventStream.read().toString()); Assertions.assertEquals("other [wc=lc=1.0 w&c=belongs,lc=2.0 p1wc=ic=3.0 p1w&c=he,ic=4.0 n1wc=lc=5.0]", eventStream.read().toString()); Assertions.assertEquals("other [wc=lc=1.0 w&c=to,lc=2.0 p1wc=lc=3.0 p1w&c=belongs,lc=4.0 p2wc=ic=5.0]", eventStream.read().toString()); Assertions.assertEquals("org-start [wc=ic=1.0 w&c=apache,ic=2.0 p1wc=lc=3.0 p1w&c=to,lc=4.0]", eventStream.read().toString()); Assertions.assertEquals("org-cont [wc=ic=1.0 w&c=software,ic=2.0 p1wc=ic=3.0 p1w&c=apache,ic=4.0]", eventStream.read().toString()); Assertions.assertEquals("org-cont [wc=ic=1.0 w&c=foundation,ic=2.0 p1wc=ic=3.0 p1w&c=software,ic=4.0]", eventStream.read().toString()); Assertions.assertEquals("other [wc=other=1.0 w&c=.,other=2.0 p1wc=ic=3.0]", eventStream.read().toString()); Assertions.assertNull(eventStream.read()); } } @Test void testReadWithInvalidNegativeValues() throws IOException { try (RealValueFileEventStream eventStream = createEventStream(EVENTS_INVALID_NEGATIVE)) { eventStream.read(); fail("Negative values should not be tolerated as input!"); } catch (RuntimeException rte) { //noinspection StatementWithEmptyBody if (rte.getMessage().startsWith("Negative values are not allowed")) { // expected behviour } else { fail(rte); } } } @Test void testReset() throws IOException { try (RealValueFileEventStream feStream = createEventStream(EVENTS)) { feStream.reset(); Assertions.fail("UnsupportedOperationException should be thrown"); } catch (UnsupportedOperationException expected) { } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_model_SimpleEv0100644 0000000 0000000 00000000163 14523004075 032576 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/model/SimpleEventStreamBuilder.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/model/SimpleEventStreamBuilder0100644 0000000 0000000 00000004663 14523004075 034232 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import opennlp.tools.util.ObjectStream; public class SimpleEventStreamBuilder { private final List eventList = new ArrayList<>(); private int pos = 0; /* * the format of event should look like: * without values) other/w=he n1w=belongs n2w=to po=other pow=other,He powf=other,ic * with values) other/w=he;0.5 n1w=belongs;0.4 n2w=to;0.3 po=other;0.5 pow=other,He;0.25 powf=other,ic;0.5 */ public SimpleEventStreamBuilder add(String event) { String[] ss = event.split("/"); if (ss.length != 2) { throw new RuntimeException(String.format("format error of the event \"%s\"", event)); } // look for context (and values) String[] cvPairs = ss[1].split("\\s+"); if (cvPairs[0].contains(";")) { // has values? String[] context = new String[cvPairs.length]; float[] values = new float[cvPairs.length]; for (int i = 0; i < cvPairs.length; i++) { String[] pair = cvPairs[i].split(";"); if (pair.length != 2) { throw new RuntimeException(String.format("format error of the event \"%s\". " + "\"%s\" doesn't have value", event, Arrays.toString(pair))); } context[i] = pair[0]; values[i] = Float.parseFloat(pair[1]); } eventList.add(new Event(ss[0], context, values)); } else { eventList.add(new Event(ss[0], cvPairs)); } return this; } public ObjectStream build() { return () -> { if (eventList.size() <= pos) { return null; } return eventList.get(pos++); }; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_model_TwoPassD0100644 0000000 0000000 00000000161 14523004075 032554 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/model/TwoPassDataIndexerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/model/TwoPassDataIndexerTest.j0100644 0000000 0000000 00000010270 14523004075 034104 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.model; import java.io.IOException; import java.util.Collections; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.namefind.DefaultNameContextGenerator; import opennlp.tools.namefind.NameContextGenerator; import opennlp.tools.namefind.NameFinderEventStream; import opennlp.tools.namefind.NameSample; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; import opennlp.tools.util.Span; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.featuregen.AdaptiveFeatureGenerator; public class TwoPassDataIndexerTest { @Test void testIndex() throws IOException { // He belongs to Apache Software Foundation . ObjectStream eventStream = new SimpleEventStreamBuilder() .add("other/w=he n1w=belongs n2w=to po=other pow=other,He powf=other,ic ppo=other") .add("other/w=belongs p1w=he n1w=to n2w=apache po=other pow=other,belongs powf=other,lc ppo=other") .add("other/w=to p1w=belongs p2w=he n1w=apache n2w=software po=other pow=other,to" + " powf=other,lc ppo=other") .add("org-start/w=apache p1w=to p2w=belongs n1w=software n2w=foundation po=other pow=other,Apache" + " powf=other,ic ppo=other") .add("org-cont/w=software p1w=apache p2w=to n1w=foundation n2w=. po=org-start" + " pow=org-start,Software powf=org-start,ic ppo=other") .add("org-cont/w=foundation p1w=software p2w=apache n1w=. po=org-cont pow=org-cont,Foundation" + " powf=org-cont,ic ppo=org-start") .add("other/w=. p1w=foundation p2w=software po=org-cont pow=org-cont,. powf=org-cont,other" + " ppo=org-cont") .build(); DataIndexer indexer = new TwoPassDataIndexer(); indexer.init(new TrainingParameters(Collections.emptyMap()), null); indexer.index(eventStream); Assertions.assertEquals(3, indexer.getContexts().length); Assertions.assertArrayEquals(new int[] {0}, indexer.getContexts()[0]); Assertions.assertArrayEquals(new int[] {0}, indexer.getContexts()[1]); Assertions.assertArrayEquals(new int[] {0}, indexer.getContexts()[2]); Assertions.assertNull(indexer.getValues()); Assertions.assertEquals(5, indexer.getNumEvents()); Assertions.assertArrayEquals(new int[] {0, 1, 2}, indexer.getOutcomeList()); Assertions.assertArrayEquals(new int[] {3, 1, 1}, indexer.getNumTimesEventsSeen()); Assertions.assertArrayEquals(new String[] {"ppo=other"}, indexer.getPredLabels()); Assertions.assertArrayEquals(new String[] {"other", "org-start", "org-cont"}, indexer.getOutcomeLabels()); Assertions.assertArrayEquals(new int[] {5}, indexer.getPredCounts()); } @Test void testIndexWithNewline() throws IOException { String[] sentence = "He belongs to Apache \n Software Foundation .".split(" "); NameContextGenerator CG = new DefaultNameContextGenerator( (AdaptiveFeatureGenerator[]) null); NameSample nameSample = new NameSample(sentence, new Span[] {new Span(3, 7)}, false); ObjectStream eventStream = new NameFinderEventStream( ObjectStreamUtils.createObjectStream(nameSample), "org", CG, null); DataIndexer indexer = new TwoPassDataIndexer(); indexer.init(new TrainingParameters(Collections.emptyMap()), null); indexer.index(eventStream); Assertions.assertEquals(5, indexer.getContexts().length); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_naivebayes_Abs0100644 0000000 0000000 00000000166 14523004075 032610 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/naivebayes/AbstractNaiveBayesTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/naivebayes/AbstractNaiveBayesT0100644 0000000 0000000 00000003463 14523004075 034175 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.naivebayes; import java.util.ArrayList; import java.util.List; import opennlp.tools.ml.model.Event; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; public class AbstractNaiveBayesTest { protected ObjectStream createTrainingStream() { List trainingEvents = new ArrayList<>(); String label1 = "politics"; String[] context1 = {"bow=the", "bow=united", "bow=nations"}; trainingEvents.add(new Event(label1, context1)); String label2 = "politics"; String[] context2 = {"bow=the", "bow=united", "bow=states", "bow=and"}; trainingEvents.add(new Event(label2, context2)); String label3 = "sports"; String[] context3 = {"bow=manchester", "bow=united"}; trainingEvents.add(new Event(label3, context3)); String label4 = "sports"; String[] context4 = {"bow=manchester", "bow=and", "bow=barca"}; trainingEvents.add(new Event(label4, context4)); return ObjectStreamUtils.createObjectStream(trainingEvents); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_naivebayes_Nai0100644 0000000 0000000 00000000171 14523004075 032606 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/naivebayes/NaiveBayesCorrectnessTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/naivebayes/NaiveBayesCorrectne0100644 0000000 0000000 00000007521 14523004075 034231 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.naivebayes; import java.io.IOException; import java.util.HashMap; import java.util.stream.Stream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import opennlp.tools.ml.AbstractTrainer; import opennlp.tools.ml.model.AbstractDataIndexer; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.ml.model.TwoPassDataIndexer; import opennlp.tools.util.TrainingParameters; /** * Test for naive bayes classification correctness without smoothing */ public class NaiveBayesCorrectnessTest extends AbstractNaiveBayesTest { private DataIndexer testDataIndexer; @BeforeEach void initIndexer() throws IOException { TrainingParameters trainingParameters = new TrainingParameters(); trainingParameters.put(AbstractTrainer.CUTOFF_PARAM, 1); trainingParameters.put(AbstractDataIndexer.SORT_PARAM, false); testDataIndexer = new TwoPassDataIndexer(); testDataIndexer.init(trainingParameters, new HashMap<>()); testDataIndexer.index(createTrainingStream()); } @ParameterizedTest @MethodSource("provideLabelsWithContextAndProb") void testNaiveBayes(String label, String[] context, double expectedProb) { NaiveBayesModel model = (NaiveBayesModel) new NaiveBayesTrainer().trainModel(testDataIndexer); Event event = new Event(label, context); testModel(model, event, expectedProb); // Expected value with smoothing } /* * Produces a stream of pairs for parameterized unit tests. */ private static Stream provideLabelsWithContextAndProb() { return Stream.of( // Example 1: Arguments.of("politics" , new String[] {"bow=united", "bow=nations"}, 0.9681650180264167), Arguments.of("sports", new String[] {"bow=manchester", "bow=united"}, 0.9658833555831029), Arguments.of("politics", new String[] {"bow=united"}, 0.6655036407766989), Arguments.of("politics", new String[] {}, 7.0 / 12.0) ); } private void testModel(MaxentModel model, Event event, double higher_probability) { double[] outcomes = model.eval(event.getContext()); String outcome = model.getBestOutcome(outcomes); Assertions.assertEquals(2, outcomes.length); Assertions.assertEquals(event.getOutcome(), outcome); if (event.getOutcome().equals(model.getOutcome(0))) { Assertions.assertEquals(higher_probability, outcomes[0], 0.0001); } if (!event.getOutcome().equals(model.getOutcome(0))) { Assertions.assertEquals(1.0 - higher_probability, outcomes[0], 0.0001); } if (event.getOutcome().equals(model.getOutcome(1))) { Assertions.assertEquals(higher_probability, outcomes[1], 0.0001); } if (!event.getOutcome().equals(model.getOutcome(1))) { Assertions.assertEquals(1.0 - higher_probability, outcomes[1], 0.0001); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_naivebayes_Nai0100644 0000000 0000000 00000000174 14523004075 032611 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/naivebayes/NaiveBayesModelReadWriteTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/naivebayes/NaiveBayesModelRead0100644 0000000 0000000 00000006301 14523004075 034134 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.naivebayes; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.HashMap; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.ml.AbstractTrainer; import opennlp.tools.ml.model.AbstractDataIndexer; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.TwoPassDataIndexer; import opennlp.tools.util.TrainingParameters; /** * Tests for persisting and reading naive bayes models. */ public class NaiveBayesModelReadWriteTest extends AbstractNaiveBayesTest { private DataIndexer testDataIndexer; @BeforeEach void initIndexer() throws IOException { TrainingParameters trainingParameters = new TrainingParameters(); trainingParameters.put(AbstractTrainer.CUTOFF_PARAM, 1); trainingParameters.put(AbstractDataIndexer.SORT_PARAM, false); testDataIndexer = new TwoPassDataIndexer(); testDataIndexer.init(trainingParameters, new HashMap<>()); testDataIndexer.index(createTrainingStream()); } @Test void testBinaryModelPersistence() throws IOException { NaiveBayesModel model = (NaiveBayesModel) new NaiveBayesTrainer().trainModel(testDataIndexer); Path tempFile = Files.createTempFile("bnb-", ".bin"); File file = tempFile.toFile(); try { NaiveBayesModelWriter modelWriter = new BinaryNaiveBayesModelWriter(model, file); modelWriter.persist(); NaiveBayesModelReader reader = new BinaryNaiveBayesModelReader(file); reader.checkModelType(); AbstractModel abstractModel = reader.constructModel(); Assertions.assertNotNull(abstractModel); } finally { file.delete(); } } @Test void testTextModelPersistence() throws Exception { NaiveBayesModel model = (NaiveBayesModel) new NaiveBayesTrainer().trainModel(testDataIndexer); Path tempFile = Files.createTempFile("ptnb-", ".txt"); File file = tempFile.toFile(); try { NaiveBayesModelWriter modelWriter = new PlainTextNaiveBayesModelWriter(model, file); modelWriter.persist(); NaiveBayesModelReader reader = new PlainTextNaiveBayesModelReader(file); reader.checkModelType(); AbstractModel abstractModel = reader.constructModel(); Assertions.assertNotNull(abstractModel); } finally { file.delete(); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_naivebayes_Nai0100644 0000000 0000000 00000000170 14523004075 032605 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/naivebayes/NaiveBayesPrepAttachTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/naivebayes/NaiveBayesPrepAttac0100644 0000000 0000000 00000006772 14523004075 034177 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.naivebayes; import java.io.IOException; import java.util.HashMap; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.ml.AbstractTrainer; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.PrepAttachDataUtil; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.model.AbstractDataIndexer; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.ml.model.TwoPassDataIndexer; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; /** * Test for Naive Bayes training and use with the ppa data. */ public class NaiveBayesPrepAttachTest { private ObjectStream trainingStream; @BeforeEach void initIndexer() throws IOException { trainingStream = PrepAttachDataUtil.createTrainingStream(); Assertions.assertNotNull(trainingStream); } @Test void testNaiveBayesOnPrepAttachData() throws IOException { TrainingParameters trainingParameters = new TrainingParameters(); trainingParameters.put(AbstractTrainer.CUTOFF_PARAM, 1); trainingParameters.put(AbstractDataIndexer.SORT_PARAM, false); DataIndexer testDataIndexer = new TwoPassDataIndexer(); testDataIndexer.init(trainingParameters, new HashMap<>()); testDataIndexer.index(trainingStream); MaxentModel model = new NaiveBayesTrainer().trainModel(testDataIndexer); Assertions.assertInstanceOf(NaiveBayesModel.class, model); PrepAttachDataUtil.testModel(model, 0.7897994553107205); } @Test void testNaiveBayesOnPrepAttachDataUsingTrainUtil() throws IOException { TrainingParameters trainParams = new TrainingParameters(); trainParams.put(AbstractTrainer.ALGORITHM_PARAM, NaiveBayesTrainer.NAIVE_BAYES_VALUE); trainParams.put(AbstractTrainer.CUTOFF_PARAM, 1); EventTrainer trainer = TrainerFactory.getEventTrainer(trainParams, null); MaxentModel model = trainer.train(trainingStream); Assertions.assertInstanceOf(NaiveBayesModel.class, model); PrepAttachDataUtil.testModel(model, 0.7897994553107205); } @Test void testNaiveBayesOnPrepAttachDataUsingTrainUtilWithCutoff5() throws IOException { TrainingParameters trainParams = new TrainingParameters(); trainParams.put(AbstractTrainer.ALGORITHM_PARAM, NaiveBayesTrainer.NAIVE_BAYES_VALUE); trainParams.put(AbstractTrainer.CUTOFF_PARAM, 5); EventTrainer trainer = TrainerFactory.getEventTrainer(trainParams, null); MaxentModel model = trainer.train(trainingStream); Assertions.assertInstanceOf(NaiveBayesModel.class, model); PrepAttachDataUtil.testModel(model, 0.7945035899975241); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_naivebayes_Nai0100644 0000000 0000000 00000000203 14523004075 032602 xustar000000000 0000000 131 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/naivebayes/NaiveBayesSerializedCorrectnessTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/naivebayes/NaiveBayesSerialize0100644 0000000 0000000 00000012121 14523004075 034224 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.naivebayes; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import java.nio.file.Files; import java.nio.file.Path; import java.util.HashMap; import java.util.stream.Stream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import opennlp.tools.ml.AbstractTrainer; import opennlp.tools.ml.model.AbstractDataIndexer; import opennlp.tools.ml.model.DataIndexer; import opennlp.tools.ml.model.Event; import opennlp.tools.ml.model.TwoPassDataIndexer; import opennlp.tools.util.TrainingParameters; /** * Test for naive bayes classification correctness without smoothing. */ public class NaiveBayesSerializedCorrectnessTest extends AbstractNaiveBayesTest { private DataIndexer testDataIndexer; @BeforeEach void initIndexer() throws IOException { TrainingParameters trainingParameters = new TrainingParameters(); trainingParameters.put(AbstractTrainer.CUTOFF_PARAM, 1); trainingParameters.put(AbstractDataIndexer.SORT_PARAM, false); testDataIndexer = new TwoPassDataIndexer(); testDataIndexer.init(trainingParameters, new HashMap<>()); testDataIndexer.index(createTrainingStream()); } @ParameterizedTest @MethodSource("provideLabelsWithContext") void testNaiveBayes(String label, String[] context) throws IOException { NaiveBayesModel model1 = (NaiveBayesModel) new NaiveBayesTrainer().trainModel(testDataIndexer); NaiveBayesModel model2 = persistedModel(model1); Event event = new Event(label, context); testModelOutcome(model1, model2, event); } /* * Produces a stream of pairs for parameterized unit tests. */ private static Stream provideLabelsWithContext() { return Stream.of( // Example 1: Arguments.of("politics" , new String[] {"bow=united", "bow=nations"}), Arguments.of("sports", new String[] {"bow=manchester", "bow=united"}), Arguments.of("politics", new String[] {"bow=united"}), Arguments.of("politics", new String[] {}) ); } @Test void testPlainTextModel() throws IOException { NaiveBayesModel model1 = (NaiveBayesModel) new NaiveBayesTrainer().trainModel(testDataIndexer); StringWriter sw1 = new StringWriter(); NaiveBayesModelWriter modelWriter = new PlainTextNaiveBayesModelWriter(model1, new BufferedWriter(sw1)); modelWriter.persist(); NaiveBayesModelReader reader = new PlainTextNaiveBayesModelReader(new BufferedReader(new StringReader(sw1.toString()))); reader.checkModelType(); NaiveBayesModel model2 = (NaiveBayesModel) reader.constructModel(); StringWriter sw2 = new StringWriter(); modelWriter = new PlainTextNaiveBayesModelWriter(model2, new BufferedWriter(sw2)); modelWriter.persist(); Assertions.assertEquals(sw1.toString(), sw2.toString()); } private static NaiveBayesModel persistedModel(NaiveBayesModel model) throws IOException { Path tempFilePath = Files.createTempFile("ptnb-", ".bin"); File file = tempFilePath.toFile(); try { NaiveBayesModelWriter modelWriter = new BinaryNaiveBayesModelWriter(model, file); modelWriter.persist(); NaiveBayesModelReader reader = new BinaryNaiveBayesModelReader(file); reader.checkModelType(); return (NaiveBayesModel) reader.constructModel(); } finally { file.delete(); } } private static void testModelOutcome(NaiveBayesModel model1, NaiveBayesModel model2, Event event) { String[] labels1 = extractLabels(model1); String[] labels2 = extractLabels(model2); Assertions.assertArrayEquals(labels1, labels2); double[] outcomes1 = model1.eval(event.getContext()); double[] outcomes2 = model2.eval(event.getContext()); Assertions.assertArrayEquals(outcomes1, outcomes2, 0.000000000001); } private static String[] extractLabels(NaiveBayesModel model) { String[] labels = new String[model.getNumOutcomes()]; for (int i = 0; i < model.getNumOutcomes(); i++) { labels[i] = model.getOutcome(i); } return labels; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_ml_perceptron_Per0100644 0000000 0000000 00000000170 14523004075 032657 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/perceptron/PerceptronPrepAttachTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ml/perceptron/PerceptronPrepAttac0100644 0000000 0000000 00000015005 14523004075 034312 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ml.perceptron; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.ml.AbstractTrainer; import opennlp.tools.ml.EventTrainer; import opennlp.tools.ml.PrepAttachDataUtil; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.ml.model.AbstractDataIndexer; import opennlp.tools.ml.model.AbstractModel; import opennlp.tools.ml.model.MaxentModel; import opennlp.tools.ml.model.TwoPassDataIndexer; import opennlp.tools.util.TrainingParameters; /** * Test for perceptron training and use with the ppa data. */ public class PerceptronPrepAttachTest { @Test void testPerceptronOnPrepAttachData() throws IOException { TwoPassDataIndexer indexer = new TwoPassDataIndexer(); TrainingParameters indexingParameters = new TrainingParameters(); indexingParameters.put(AbstractTrainer.CUTOFF_PARAM, 1); indexingParameters.put(AbstractDataIndexer.SORT_PARAM, false); indexer.init(indexingParameters, new HashMap<>()); indexer.index(PrepAttachDataUtil.createTrainingStream()); MaxentModel model = new PerceptronTrainer().trainModel(400, indexer, 1); PrepAttachDataUtil.testModel(model, 0.7650408516959644); } @Test void testPerceptronOnPrepAttachDataWithSkippedAveraging() throws IOException { TrainingParameters trainParams = new TrainingParameters(); trainParams.put(AbstractTrainer.ALGORITHM_PARAM, PerceptronTrainer.PERCEPTRON_VALUE); trainParams.put(AbstractTrainer.CUTOFF_PARAM, 1); trainParams.put("UseSkippedAveraging", true); EventTrainer trainer = TrainerFactory.getEventTrainer(trainParams, null); MaxentModel model = trainer.train(PrepAttachDataUtil.createTrainingStream()); PrepAttachDataUtil.testModel(model, 0.773706362961129); } @Test void testPerceptronOnPrepAttachDataWithTolerance() throws IOException { TrainingParameters trainParams = new TrainingParameters(); trainParams.put(AbstractTrainer.ALGORITHM_PARAM, PerceptronTrainer.PERCEPTRON_VALUE); trainParams.put(AbstractTrainer.CUTOFF_PARAM, 1); trainParams.put(AbstractTrainer.ITERATIONS_PARAM, 500); trainParams.put("Tolerance", 0.0001d); EventTrainer trainer = TrainerFactory.getEventTrainer(trainParams, null); MaxentModel model = trainer.train(PrepAttachDataUtil.createTrainingStream()); PrepAttachDataUtil.testModel(model, 0.7677642980935875); } @Test void testPerceptronOnPrepAttachDataWithStepSizeDecrease() throws IOException { TrainingParameters trainParams = new TrainingParameters(); trainParams.put(AbstractTrainer.ALGORITHM_PARAM, PerceptronTrainer.PERCEPTRON_VALUE); trainParams.put(AbstractTrainer.CUTOFF_PARAM, 1); trainParams.put(AbstractTrainer.ITERATIONS_PARAM, 500); trainParams.put("StepSizeDecrease", 0.06d); EventTrainer trainer = TrainerFactory.getEventTrainer(trainParams, null); MaxentModel model = trainer.train(PrepAttachDataUtil.createTrainingStream()); PrepAttachDataUtil.testModel(model, 0.7791532557563754); } @Test void testModelSerialization() throws IOException { TrainingParameters trainParams = new TrainingParameters(); trainParams.put(AbstractTrainer.ALGORITHM_PARAM, PerceptronTrainer.PERCEPTRON_VALUE); trainParams.put(AbstractTrainer.CUTOFF_PARAM, 1); trainParams.put("UseSkippedAveraging", true); EventTrainer trainer = TrainerFactory.getEventTrainer(trainParams, null); AbstractModel model = (AbstractModel) trainer.train(PrepAttachDataUtil.createTrainingStream()); PrepAttachDataUtil.testModel(model, 0.773706362961129); // serialize and load model, then check if it still works as expected ByteArrayOutputStream modelBytes = new ByteArrayOutputStream(); BinaryPerceptronModelWriter writer = new BinaryPerceptronModelWriter(model, new DataOutputStream(modelBytes)); writer.persist(); writer.close(); MaxentModel restoredModel = new BinaryPerceptronModelReader( new DataInputStream(new ByteArrayInputStream(modelBytes.toByteArray()))).getModel(); PrepAttachDataUtil.testModel(restoredModel, 0.773706362961129); } @Test void testModelEquals() throws IOException { TrainingParameters trainParams = new TrainingParameters(); trainParams.put(AbstractTrainer.ALGORITHM_PARAM, PerceptronTrainer.PERCEPTRON_VALUE); trainParams.put(AbstractTrainer.CUTOFF_PARAM, 1); trainParams.put("UseSkippedAveraging", true); EventTrainer trainer = TrainerFactory.getEventTrainer(trainParams, null); AbstractModel modelA = (AbstractModel) trainer.train(PrepAttachDataUtil.createTrainingStream()); AbstractModel modelB = (AbstractModel) trainer.train(PrepAttachDataUtil.createTrainingStream()); Assertions.assertEquals(modelA, modelB); Assertions.assertEquals(modelA.hashCode(), modelB.hashCode()); } @Test void verifyReportMap() throws IOException { TrainingParameters trainParams = new TrainingParameters(); trainParams.put(AbstractTrainer.ALGORITHM_PARAM, PerceptronTrainer.PERCEPTRON_VALUE); trainParams.put(AbstractTrainer.CUTOFF_PARAM, 1); // Since we are verifying the report map, we don't need to have more than 1 iteration trainParams.put(AbstractTrainer.ITERATIONS_PARAM, 1); trainParams.put("UseSkippedAveraging", true); Map reportMap = new HashMap<>(); EventTrainer trainer = TrainerFactory.getEventTrainer(trainParams, reportMap); trainer.train(PrepAttachDataUtil.createTrainingStream()); Assertions.assertTrue( reportMap.containsKey("Training-Eventhash"), "Report Map does not contain the training event hash"); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/BilouCodecTest.java0100644 0000000 0000000 00000052152 14523004075 033151 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.Span; /** * This is the test class for {@link BilouCodec}. */ public class BilouCodecTest { private static final BilouCodec codec = new BilouCodec(); private static final String A_TYPE = "atype"; private static final String A_START = A_TYPE + "-" + BilouCodec.START; private static final String A_CONTINUE = A_TYPE + "-" + BilouCodec.CONTINUE; private static final String A_LAST = A_TYPE + "-" + BilouCodec.LAST; private static final String A_UNIT = A_TYPE + "-" + BilouCodec.UNIT; private static final String B_TYPE = "btype"; private static final String B_START = B_TYPE + "-" + BilouCodec.START; private static final String B_CONTINUE = B_TYPE + "-" + BilouCodec.CONTINUE; private static final String B_LAST = B_TYPE + "-" + BilouCodec.LAST; private static final String B_UNIT = B_TYPE + "-" + BilouCodec.UNIT; private static final String C_TYPE = "ctype"; private static final String C_UNIT = C_TYPE + "-" + BilouCodec.UNIT; private static final String OTHER = BilouCodec.OTHER; @Test void testEncodeNoNames() { NameSample nameSample = new NameSample("Once upon a time.".split(" "), new Span[] {}, true); String[] expected = new String[] {OTHER, OTHER, OTHER, OTHER}; String[] acutal = codec.encode(nameSample.getNames(), nameSample.getSentence().length); Assertions.assertArrayEquals(expected, acutal, "Only 'Other' is expected."); } @Test void testEncodeSingleUnitTokenSpan() { String[] sentence = "I called Julie again.".split(" "); Span[] singleSpan = new Span[] {new Span(2, 3, A_TYPE)}; NameSample nameSample = new NameSample(sentence, singleSpan, true); String[] expected = new String[] {OTHER, OTHER, A_UNIT, OTHER}; String[] acutal = codec.encode(nameSample.getNames(), nameSample.getSentence().length); Assertions.assertArrayEquals(expected, acutal, "'Julie' should be 'unit' only, the rest should be 'other'."); } @Test void testEncodeDoubleTokenSpan() { String[] sentence = "I saw Stefanie Schmidt today.".split(" "); Span[] singleSpan = new Span[] {new Span(2, 4, A_TYPE)}; NameSample nameSample = new NameSample(sentence, singleSpan, true); String[] expected = new String[] {OTHER, OTHER, A_START, A_LAST, OTHER}; String[] acutal = codec.encode(nameSample.getNames(), nameSample.getSentence().length); Assertions.assertArrayEquals(expected, acutal, "'Stefanie' should be 'start' only, 'Schmidt' is 'last' " + "and the rest should be 'other'."); } @Test void testEncodeTripleTokenSpan() { String[] sentence = "Secretary - General Anders Fogh Rasmussen is from Denmark.".split(" "); Span[] singleSpan = new Span[] {new Span(3, 6, A_TYPE)}; NameSample nameSample = new NameSample(sentence, singleSpan, true); String[] expected = new String[] {OTHER, OTHER, OTHER, A_START, A_CONTINUE, A_LAST, OTHER, OTHER, OTHER}; String[] acutal = codec.encode(nameSample.getNames(), nameSample.getSentence().length); Assertions.assertArrayEquals(expected, acutal, "'Anders' should be 'start' only, 'Fogh' is 'inside', " + "'Rasmussen' is 'last' and the rest should be 'other'."); } @Test void testEncodeAdjacentUnitSpans() { String[] sentence = "word PersonA PersonB word".split(" "); Span[] singleSpan = new Span[] {new Span(1, 2, A_TYPE), new Span(2, 3, A_TYPE)}; NameSample nameSample = new NameSample(sentence, singleSpan, true); String[] expected = new String[] {OTHER, A_UNIT, A_UNIT, OTHER}; String[] acutal = codec.encode(nameSample.getNames(), nameSample.getSentence().length); Assertions.assertArrayEquals(expected, acutal, "Both PersonA and PersonB are 'unit' tags"); } @Test void testCreateSequenceValidator() { Assertions.assertInstanceOf(BilouNameFinderSequenceValidator.class, codec.createSequenceValidator()); } @Test void testDecodeEmpty() { Span[] expected = new Span[] {}; Span[] actual = codec.decode(new ArrayList<>()); Assertions.assertArrayEquals(expected, actual); } /** * Unit, Other */ @Test void testDecodeSingletonFirst() { List encoded = Arrays.asList(A_UNIT, OTHER); Span[] expected = new Span[] {new Span(0, 1, A_TYPE)}; Span[] actual = codec.decode(encoded); Assertions.assertArrayEquals(expected, actual); } /** * Unit, Unit, Other */ @Test void testDecodeAdjacentSingletonFirst() { List encoded = Arrays.asList(A_UNIT, A_UNIT, OTHER); Span[] expected = new Span[] {new Span(0, 1, A_TYPE), new Span(1, 2, A_TYPE)}; Span[] actual = codec.decode(encoded); Assertions.assertArrayEquals(expected, actual); } /** * Start, Last, Other */ @Test void testDecodePairFirst() { List encoded = Arrays.asList(A_START, A_LAST, OTHER); Span[] expected = new Span[] {new Span(0, 2, A_TYPE)}; Span[] actual = codec.decode(encoded); Assertions.assertArrayEquals(expected, actual); } /** * Start, Continue, Last, Other */ @Test void testDecodeTripletFirst() { List encoded = Arrays.asList(A_START, A_CONTINUE, A_LAST, OTHER); Span[] expected = new Span[] {new Span(0, 3, A_TYPE)}; Span[] actual = codec.decode(encoded); Assertions.assertArrayEquals(expected, actual); } /** * Start, Continue, Continue, Last, Other */ @Test void testDecodeTripletContinuationFirst() { List encoded = Arrays.asList(A_START, A_CONTINUE, A_CONTINUE, A_LAST, OTHER); Span[] expected = new Span[] {new Span(0, 4, A_TYPE)}; Span[] actual = codec.decode(encoded); Assertions.assertArrayEquals(expected, actual); } /** * Start, Last, Unit, Other */ @Test void testDecodeAdjacentPairSingleton() { List encoded = Arrays.asList(A_START, A_LAST, A_UNIT, OTHER); Span[] expected = new Span[] {new Span(0, 2, A_TYPE), new Span(2, 3, A_TYPE)}; Span[] actual = codec.decode(encoded); Assertions.assertArrayEquals(expected, actual); } /** * Other, Unit, Other */ @Test void testDecodeOtherFirst() { List encoded = Arrays.asList(OTHER, A_UNIT, OTHER); Span[] expected = new Span[] {new Span(1, 2, A_TYPE)}; Span[] actual = codec.decode(encoded); Assertions.assertArrayEquals(expected, actual); } /** * Other, A-Start, A-Continue, A-Last, Other, B-Start, B-Last, Other, C-Unit, Other */ @Test void testDecodeMultiClass() { List encoded = Arrays.asList(OTHER, A_START, A_CONTINUE, A_LAST, OTHER, B_START, B_LAST, OTHER, C_UNIT, OTHER); Span[] expected = new Span[] {new Span(1, 4, A_TYPE), new Span(5, 7, B_TYPE), new Span(8, 9, C_TYPE)}; Span[] actual = codec.decode(encoded); Assertions.assertArrayEquals(expected, actual); } @Test void testCompatibilityEmpty() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {})); } /* * Singles and singles in combination with other valid type (unit/start+last) */ /** * B-Start => Fail * A-Unit, B-Start => Fail * A-Start, A-Last, B-Start => Fail */ @Test void testCompatibilitySinglesStart() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {B_START})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_UNIT, B_START})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_START, A_LAST, B_START})); } /** * B-Continue => Fail * A-Unit, B-Continue => Fail * A-Start, A-Last, B-Continue => Fail */ @Test void testCompatibilitySinglesContinue() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {B_CONTINUE})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_UNIT, B_CONTINUE})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_START, A_LAST, B_CONTINUE})); } /** * B-Last => Fail * A-Unit, B-Last => Fail * A-Start, A-Last, B-Last => Fail */ @Test void testCompatibilitySinglesLast() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {B_LAST})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_UNIT, B_LAST})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_START, A_LAST, B_LAST})); } /** * Other => Fail * A-Unit, Other => Pass * A-Start, A-Last, Other => Pass */ @Test void testCompatibilitySinglesOther() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {OTHER})); Assertions.assertTrue(codec.areOutcomesCompatible(new String[] {A_UNIT, OTHER})); Assertions.assertTrue(codec.areOutcomesCompatible(new String[] {A_START, A_LAST, OTHER})); } /** * B-Unit => Pass * A-Unit, B-Unit => Pass * A-Start, A-Last, B-Unit => Pass */ @Test void testCompatibilitySinglesUnit() { Assertions.assertTrue(codec.areOutcomesCompatible(new String[] {B_UNIT})); Assertions.assertTrue(codec.areOutcomesCompatible(new String[] {A_UNIT, B_UNIT})); Assertions.assertTrue(codec.areOutcomesCompatible(new String[] {A_START, A_LAST, B_UNIT})); } /** * Doubles and doubles in combination with other valid type (unit/start+last) *

* B-Start, B-Continue => Fail * A-Unit, B-Start, B-Continue => Fail * A-Start, A-Last, B-Start, B-Continue => Fail */ @Test void testCompatibilityStartContinue() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {B_START, B_CONTINUE})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_UNIT, B_START, B_CONTINUE})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_START, A_LAST, B_START, B_CONTINUE})); } /** * B-Start, B-Last => Pass * A-Unit, B-Start, B-Last => Pass * A-Start, A-Last, B-Start, B-Last => Pass */ @Test void testCompatibilityStartLast() { Assertions.assertTrue(codec.areOutcomesCompatible(new String[] {B_START, B_LAST})); Assertions.assertTrue(codec.areOutcomesCompatible(new String[] {A_UNIT, B_START, B_LAST})); Assertions.assertTrue(codec.areOutcomesCompatible(new String[] {A_START, A_LAST, B_START, B_LAST})); } /** * B-Start, Other => Fail * A-Unit, B-Start, Other => Fail * A-Start, A-Last, B-Start, Other => Fail */ @Test void testCompatibilityStartOther() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {B_START, OTHER})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_UNIT, B_START, OTHER})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_START, A_LAST, B_START, OTHER})); } /** * B-Start, B-Unit => Fail * A-Unit, B-Start, B-Unit => Fail * A-Start, A-Last, B-Start, B-Unit => Fail */ @Test void testCompatibilityStartUnit() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {B_START, B_UNIT})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_UNIT, B_START, B_UNIT})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_START, A_LAST, B_START, B_UNIT})); } /** * B-Continue, C-Last => Fail * A-Unit, B-Continue, C-Last => Fail * A-Start, A-Last, B-Continue, B-Last => Fail */ @Test void testCompatibilityContinueLast() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {B_CONTINUE, B_LAST})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_UNIT, B_CONTINUE, B_LAST})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_START, A_LAST, B_CONTINUE, B_LAST})); } /** * B-Continue, Other => Fail * A-Unit, B-Continue, Other => Fail * A-Start, A-Last, B-Continue, Other => Fail */ @Test void testCompatibilityContinueOther() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {B_CONTINUE, OTHER})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_UNIT, B_CONTINUE, OTHER})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_START, A_LAST, B_CONTINUE, OTHER})); } /** * B-Continue, B-Unit => Fail * A-Unit, B-Continue, B-Unit => Fail * A-Start, A-Last, B-Continue, B-Unit => Fail */ @Test void testCompatibilityContinueUnit() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {B_CONTINUE, B_UNIT})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_UNIT, B_CONTINUE, B_UNIT})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_START, A_LAST, B_CONTINUE, B_UNIT})); } /** * B-Last, Other => Fail * A-Unit, B-Last, Other => Fail * A-Start, A-Last, B-Last, Other => Fail */ @Test void testCompatibilityLastOther() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {B_LAST, OTHER})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_UNIT, B_LAST, OTHER})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_START, A_LAST, B_LAST, OTHER})); } /** * B-Last, B-Unit => Fail * A-Unit, B-Last, B-Unit => Fail * A-Start, A-Last, B-Last, B-Unit => Fail */ @Test void testCompatibilityLastUnit() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {B_LAST, B_UNIT})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_UNIT, B_LAST, B_UNIT})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_START, A_LAST, B_LAST, B_UNIT})); } /** * Other, B-Unit => Pass * A-Unit, Other, B-Unit => Pass * A-Start, A-Last, Other, B-Unit => Pass */ @Test void testCompatibilityOtherUnit() { Assertions.assertTrue(codec.areOutcomesCompatible(new String[] {OTHER, B_UNIT})); Assertions.assertTrue(codec.areOutcomesCompatible(new String[] {A_UNIT, OTHER, B_UNIT})); Assertions.assertTrue(codec.areOutcomesCompatible(new String[] {A_START, A_LAST, OTHER, B_UNIT})); } /** * Triples and triples in combination with other valid type (unit/start+last) *

* B-Start, B-Continue, B-Last => Pass * A-Unit, B-Start, B-Continue, B-Last => Pass * A-Start, A-Last, B-Start, B-Continue, B-Last => Pass */ @Test void testCompatibilityStartContinueLast() { Assertions.assertTrue(codec.areOutcomesCompatible( new String[] {B_START, B_CONTINUE, B_LAST})); Assertions.assertTrue(codec.areOutcomesCompatible( new String[] {A_UNIT, B_START, B_CONTINUE, B_LAST})); Assertions.assertTrue(codec.areOutcomesCompatible( new String[] {A_START, A_LAST, B_START, B_CONTINUE, B_LAST})); } /** * B-Start, B-Continue, Other => Fail * A-Unit, B-Start, B-Continue, Other => Fail * A-Start, A-Last, B-Start, B-Continue, Other => Fail */ @Test void testCompatibilityStartContinueOther() { Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {B_START, B_CONTINUE, OTHER})); Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {A_UNIT, B_START, B_CONTINUE, OTHER})); Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {A_START, A_LAST, B_START, B_CONTINUE, OTHER})); } /** * B-Start, B-Continue, B-Unit => Fail * A-Unit, B-Start, B-Continue, B-Unit => Fail * A-Start, A-Last, B-Start, B-Continue, B-Unit => Fail */ @Test void testCompatibilityStartContinueUnit() { Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {B_START, B_CONTINUE, B_UNIT})); Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {A_UNIT, B_START, B_CONTINUE, B_UNIT})); Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {A_START, A_LAST, B_START, B_CONTINUE, B_UNIT})); } /** * B-Continue, B-Last, Other => Fail * A-Unit, B-Continue, B-Last, Other => Fail * A-Start, A-Last, B-Continue, B-Last, Other => Fail */ @Test void testCompatibilityContinueLastOther() { Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {B_CONTINUE, B_LAST, OTHER})); Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {A_UNIT, B_CONTINUE, B_LAST, OTHER})); Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {A_START, A_LAST, B_CONTINUE, B_LAST, OTHER})); } /** * B-Continue, B-Last, B-Unit => Fail * A-Unit, B-Continue, B-Last, B_Unit => Fail * A-Start, A-Last, B-Continue, B-Last, B_Unit => Fail */ @Test void testCompatibilityContinueLastUnit() { Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {B_CONTINUE, B_LAST, B_UNIT})); Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {A_UNIT, B_CONTINUE, B_LAST, B_UNIT})); Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {A_START, A_LAST, B_CONTINUE, B_LAST, B_UNIT})); } /** * B-Last, Other, B-Unit => Fail * A-Unit, B-Continue, B-Last, B_Unit => Fail * A-Start, A-Last, B-Continue, B-Last, B_Unit => Fail */ @Test void testCompatibilityLastOtherUnit() { Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {B_LAST, OTHER, B_UNIT})); Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {A_UNIT, B_LAST, OTHER, B_UNIT})); Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {A_START, A_LAST, B_LAST, OTHER, B_UNIT})); } /** * Quadruples and quadruple in combination of unit/start+last *

* B-Start, B-Continue, B-Last, Other => Pass * A-Unit, B-Start, B-Continue, B-Last, Other => Pass * A-Start, A-Last, B-Start, B-Continue, B-Last, Other => Pass */ @Test void testCompatibilityStartContinueLastOther() { Assertions.assertTrue(codec.areOutcomesCompatible( new String[] {B_START, B_CONTINUE, B_LAST, OTHER})); Assertions.assertTrue(codec.areOutcomesCompatible( new String[] {A_UNIT, B_START, B_CONTINUE, B_LAST, OTHER})); Assertions.assertTrue(codec.areOutcomesCompatible( new String[] {A_START, A_LAST, B_START, B_CONTINUE, B_LAST, OTHER})); } /** * B-Start, B-Continue, B-Last, B-Unit => Pass * A-Unit, B-Start, B-Continue, B-Last, B-Unit => Pass * A-Start, A-Last, B-Start, B-Continue, B-Last, B-Unit => Pass */ @Test void testCompatibilityStartContinueLastUnit() { Assertions.assertTrue(codec.areOutcomesCompatible( new String[] {B_START, B_CONTINUE, B_LAST, B_UNIT})); Assertions.assertTrue(codec.areOutcomesCompatible( new String[] {A_UNIT, B_START, B_CONTINUE, B_LAST, B_UNIT})); Assertions.assertTrue(codec.areOutcomesCompatible( new String[] {A_START, A_LAST, B_START, B_CONTINUE, B_LAST, B_UNIT})); } /** * B-Continue, B-Last, Other, B-Unit => Fail * A-Unit, B-Continue, B-Last, Other, B-Unit => Fail * A-Start, A-Last, B-Continue, B-Last, Other, B-Unit => Fail */ @Test void testCompatibilityContinueLastOtherUnit() { Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {B_CONTINUE, B_LAST, OTHER, B_UNIT})); Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {A_UNIT, B_CONTINUE, B_LAST, OTHER, B_UNIT})); Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {A_START, A_LAST, B_CONTINUE, B_LAST, OTHER, B_UNIT})); } /** * Quintuple *

* B-Start, B-Continue, B-Last, Other, B-Unit => Pass * A-Unit, B-Start, B-Continue, B-Last, Other, B-Unit => Pass * A-Staart, A-Last, B-Start, B-Continue, B-Last, Other, B-Unit => Pass */ @Test void testCompatibilityUnitOther() { Assertions.assertTrue(codec.areOutcomesCompatible( new String[] {B_START, B_CONTINUE, B_LAST, OTHER, B_UNIT})); Assertions.assertTrue(codec.areOutcomesCompatible( new String[] {A_UNIT, B_START, B_CONTINUE, B_LAST, OTHER, B_UNIT})); Assertions.assertTrue(codec.areOutcomesCompatible( new String[] {A_START, A_LAST, B_START, B_CONTINUE, B_LAST, OTHER, B_UNIT})); } /** * Multiclass */ @Test void testCompatibilityMultiClass() { Assertions.assertTrue(codec.areOutcomesCompatible( new String[] {B_UNIT, A_CONTINUE, A_LAST, A_UNIT, B_START, B_LAST, A_START, C_UNIT, OTHER})); } /** * Bad combinations */ @Test void testCompatibilityBadTag() { Assertions.assertFalse(codec.areOutcomesCompatible( new String[] {A_START, A_CONTINUE, OTHER, "BAD"})); } @Test void testCompatibilityWrongClass() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_START, B_LAST, OTHER})); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_namefind_BilouNam0100644 0000000 0000000 00000000177 14523004075 032556 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/BilouNameFinderSequenceValidatorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/BilouNameFinderSequenceV0100644 0000000 0000000 00000033713 14523004075 034205 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * This is the test class for {@link BilouNameFinderSequenceValidator}. * inputSequence is actually not used, but provided in the test to describe the cases. */ public class BilouNameFinderSequenceValidatorTest { private static final BilouNameFinderSequenceValidator validator = new BilouNameFinderSequenceValidator(); private static final String START_A = "TypeA-" + BilouCodec.START; private static final String CONTINUE_A = "TypeA-" + BilouCodec.CONTINUE; private static final String LAST_A = "TypeA-" + BilouCodec.LAST; private static final String UNIT_A = "TypeA-" + BilouCodec.UNIT; private static final String START_B = "TypeB-" + BilouCodec.START; private static final String CONTINUE_B = "TypeB-" + BilouCodec.CONTINUE; private static final String LAST_B = "TypeB-" + BilouCodec.LAST; //private static String UNIT = BilouCodec.UNIT; private static final String OTHER = BilouCodec.OTHER; @Test void testStartAsFirstLabel() { String[] inputSequence = new String[] {"TypeA", "TypeA", "something"}; String[] outcomesSequence = new String[] {}; Assertions.assertTrue(validator.validSequence(0, inputSequence, outcomesSequence, START_A)); } @Test void testContinueAsFirstLabel() { String[] inputSequence = new String[] {"TypeA", "something", "something"}; String[] outcomesSequence = new String[] {}; Assertions.assertFalse(validator.validSequence(0, inputSequence, outcomesSequence, CONTINUE_A)); } @Test void testLastAsFirstLabel() { String[] inputSequence = new String[] {"TypeA", "something", "something"}; String[] outcomesSequence = new String[] {}; Assertions.assertFalse(validator.validSequence(0, inputSequence, outcomesSequence, LAST_A)); } @Test void testUnitAsFirstLabel() { String[] inputSequence = new String[] {"TypeA", "something", "something"}; String[] outcomesSequence = new String[] {}; Assertions.assertTrue(validator.validSequence(0, inputSequence, outcomesSequence, UNIT_A)); } @Test void testOtherAsFirstLabel() { String[] inputSequence = new String[] {"something", "TypeA", "something"}; String[] outcomesSequence = new String[] {}; Assertions.assertTrue(validator.validSequence(0, inputSequence, outcomesSequence, OTHER)); } /** * Start, Any Start => Invalid */ @Test void testBeginFollowedByBegin() { String[] outcomesSequence = new String[] {START_A}; // Same Types String outcome = START_A; String[] inputSequence = new String[] {"TypeA", "TypeA", "something"}; Assertions.assertFalse(validator.validSequence(1, inputSequence, outcomesSequence, outcome)); // Diff. Types outcome = START_B; inputSequence = new String[] {"TypeA", "TypeB", "something"}; Assertions.assertFalse(validator.validSequence(1, inputSequence, outcomesSequence, outcome)); } /** * Start, Continue, Same type => Valid * Start, Continue, Diff. Type => Invalid */ @Test void testBeginFollowedByContinue() { String[] outcomesSequence = new String[] {START_A}; // Same Types String outcome = CONTINUE_A; String[] inputSequence = new String[] {"TypeA", "TypeA", "TypeA", "something"}; Assertions.assertTrue(validator.validSequence(1, inputSequence, outcomesSequence, outcome)); // Different Types outcome = CONTINUE_B; inputSequence = new String[] {"TypeA", "TypeB", "TypeB", "something"}; Assertions.assertFalse(validator.validSequence(1, inputSequence, outcomesSequence, outcome)); } /** * Start, Last, Same Type => Valid * Start, Last, Diff. Type => Invalid */ @Test void testStartFollowedByLast() { String[] outcomesSequence = new String[] {START_A}; // Same Type String outcome = LAST_A; String[] inputSequence = new String[] {"TypeA", "TypeA", "something"}; Assertions.assertTrue(validator.validSequence(1, inputSequence, outcomesSequence, outcome)); // Diff. Types outcome = LAST_B; inputSequence = new String[] {"TypeA", "TypeB", "something"}; Assertions.assertFalse(validator.validSequence(1, inputSequence, outcomesSequence, outcome)); } /** * Start, Other => Invalid */ @Test void testStartFollowedByOther() { String[] inputSequence = new String[] {"TypeA", "something", "something"}; String[] outcomesSequence = new String[] {START_A}; Assertions.assertFalse(validator.validSequence(1, inputSequence, outcomesSequence, OTHER)); } /** * Start, Unit => Invalid */ @Test void testStartFollowedByUnit() { String[] inputSequence = new String[] {"TypeA", "AnyType", "something"}; String[] outcomesSequence = new String[] {START_A}; Assertions.assertFalse(validator.validSequence(1, inputSequence, outcomesSequence, UNIT_A)); } /** * Continue, Any Begin => Invalid */ @Test void testContinueFollowedByStart() { String[] outcomesSequence = new String[] {START_A, CONTINUE_A}; // Same Types String outcome = START_A; String[] inputSequence = new String[] {"TypeA", "TypeA", "TypeA", "something"}; Assertions.assertFalse(validator.validSequence(2, inputSequence, outcomesSequence, outcome)); // Diff. Types outcome = START_B; inputSequence = new String[] {"TypeA", "TypeA", "TypeB", "something"}; Assertions.assertFalse(validator.validSequence(2, inputSequence, outcomesSequence, outcome)); } /** * Continue, Continue, Same type => Valid * Continue, Continue, Diff. Type => Invalid */ @Test void testContinueFollowedByContinue() { String[] outcomesSequence = new String[] {START_A, CONTINUE_A, CONTINUE_A}; // Same Types String outcome = CONTINUE_A; String[] inputSequence = new String[] {"TypeA", "TypeA", "TypeA", "TypeA", "something"}; Assertions.assertTrue(validator.validSequence(3, inputSequence, outcomesSequence, outcome)); // Different Types outcome = CONTINUE_B; inputSequence = new String[] {"TypeA", "TypeA", "TypeA", "TypeB", "something"}; Assertions.assertFalse(validator.validSequence(3, inputSequence, outcomesSequence, outcome)); } /** * Continue, Last, Same Type => Valid * Continue, Last, Diff. Type => Invalid */ @Test void testContinueFollowedByLast() { String[] outcomesSequence = new String[] {OTHER, START_A, CONTINUE_A}; // Same Types String outcome = LAST_A; String[] inputSequence = new String[] {"something", "TypeA", "TypeA", "TypeA", "something"}; Assertions.assertTrue(validator.validSequence(3, inputSequence, outcomesSequence, outcome)); // Different Types outcome = LAST_B; inputSequence = new String[] {"something", "TypeA", "TypeA", "TypeB", "something"}; Assertions.assertFalse(validator.validSequence(3, inputSequence, outcomesSequence, outcome)); } /** * Continue, Other => Invalid */ @Test void testContinueFollowedByOther() { String[] inputSequence = new String[] {"TypeA", "TypeA", "something", "something"}; String[] outcomesSequence = new String[] {START_A, CONTINUE_A}; Assertions.assertFalse(validator.validSequence(2, inputSequence, outcomesSequence, OTHER)); } /** * Continue, Unit => Invalid */ @Test void testContinueFollowedByUnit() { String[] inputSequence = new String[] {"TypeA", "TypeA", "AnyType", "something"}; String[] outcomesSequence = new String[] {START_A, CONTINUE_A}; Assertions.assertFalse(validator.validSequence(2, inputSequence, outcomesSequence, UNIT_A)); } /** * Last, Any Start => Valid */ @Test void testLastFollowedByStart() { String[] outcomesSequence = new String[] {START_A, CONTINUE_A, LAST_A}; // Same Types String outcome = START_A; String[] inputSequence = new String[] {"TypeA", "TypeA", "TypeA", "TypeA", "TypeA"}; Assertions.assertTrue(validator.validSequence(3, inputSequence, outcomesSequence, outcome)); // Same Types outcome = START_B; inputSequence = new String[] {"TypeA", "TypeA", "TypeA", "TypeB", "TypeB"}; Assertions.assertTrue(validator.validSequence(3, inputSequence, outcomesSequence, outcome)); } /** * Last, Any Continue => Invalid */ @Test void testLastFollowedByContinue() { String[] outcomesSequence = new String[] {START_A, CONTINUE_A, LAST_A}; String outcome = CONTINUE_A; String[] inputSequence = new String[] {"TypeA", "TypeA", "TypeA", "TypeA", "something"}; Assertions.assertFalse(validator.validSequence(3, inputSequence, outcomesSequence, outcome)); // Diff. Types outcome = CONTINUE_B; inputSequence = new String[] {"TypeA", "TypeA", "TypeA", "TypeB", "something"}; Assertions.assertFalse(validator.validSequence(3, inputSequence, outcomesSequence, outcome)); } /** * Last, Any Last => Invalid */ @Test void testLastFollowedByLast() { String[] outcomesSequence = new String[] {OTHER, OTHER, START_A, CONTINUE_A, LAST_A}; // Same Types String outcome = LAST_A; String[] inputSequence = new String[] {"something", "something", "TypeA", "TypeA", "TypeA", "TypeA", "something"}; Assertions.assertFalse(validator.validSequence(5, inputSequence, outcomesSequence, outcome)); // Diff. Types outcome = LAST_B; inputSequence = new String[] {"something", "something", "TypeA", "TypeA", "TypeA", "TypeB", "something"}; Assertions.assertFalse(validator.validSequence(5, inputSequence, outcomesSequence, outcome)); } /** * Last, Other => Valid */ @Test void testLastFollowedByOther() { String[] inputSequence = new String[] {"TypeA", "TypeA", "TypeA", "something", "something"}; String[] outcomesSequence = new String[] {START_A, CONTINUE_A, LAST_A}; Assertions.assertTrue(validator.validSequence(3, inputSequence, outcomesSequence, OTHER)); } /** * Last, Unit => Valid */ @Test void testLastFollowedByUnit() { String[] inputSequence = new String[] {"TypeA", "TypeA", "TypeA", "AnyType", "something"}; String[] outcomesSequence = new String[] {START_A, CONTINUE_A, LAST_A}; Assertions.assertTrue(validator.validSequence(3, inputSequence, outcomesSequence, UNIT_A)); } /** * Other, Any Start => Valid */ @Test void testOtherFollowedByBegin() { String[] inputSequence = new String[] {"something", "TypeA", "TypeA"}; String[] outcomesSequence = new String[] {OTHER}; Assertions.assertTrue(validator.validSequence(1, inputSequence, outcomesSequence, START_A)); } /** * Other, Any Continue => Invalid */ @Test void testOtherFollowedByContinue() { String[] inputSequence = new String[] {"something", "TypeA", "TypeA"}; String[] outcomesSequence = new String[] {OTHER}; Assertions.assertFalse(validator.validSequence(1, inputSequence, outcomesSequence, CONTINUE_A)); } /** * Other, Any Last => Invalid */ @Test void testOtherFollowedByLast() { String[] inputSequence = new String[] {"something", "TypeA", "TypeA"}; String[] outcomesSequence = new String[] {OTHER}; Assertions.assertFalse(validator.validSequence(1, inputSequence, outcomesSequence, LAST_A)); } /** * Outside, Unit => Valid */ @Test void testOtherFollowedByUnit() { String[] inputSequence = new String[] {"something", "AnyType", "something"}; String[] outcomesSequence = new String[] {OTHER}; Assertions.assertTrue(validator.validSequence(1, inputSequence, outcomesSequence, UNIT_A)); } /** * Other, Other => Valid */ @Test void testOutsideFollowedByOutside() { String[] inputSequence = new String[] {"something", "something", "something"}; String[] outcomesSequence = new String[] {OTHER}; Assertions.assertTrue(validator.validSequence(1, inputSequence, outcomesSequence, OTHER)); } /** * Unit, Any Start => Valid */ @Test void testUnitFollowedByBegin() { String[] inputSequence = new String[] {"AnyType", "TypeA", "something"}; String[] outcomesSequence = new String[] {UNIT_A}; Assertions.assertTrue(validator.validSequence(1, inputSequence, outcomesSequence, START_A)); } /** * Unit, Any Continue => Invalid */ @Test void testUnitFollowedByInside() { String[] inputSequence = new String[] {"TypeA", "TypeA", "something"}; String[] outcomesSequence = new String[] {UNIT_A}; Assertions.assertFalse(validator.validSequence(1, inputSequence, outcomesSequence, CONTINUE_A)); } /** * Unit, Any Last => Invalid */ @Test void testUnitFollowedByLast() { String[] inputSequence = new String[] {"AnyType", "TypeA", "something"}; String[] outcomesSequence = new String[] {UNIT_A}; Assertions.assertFalse(validator.validSequence(1, inputSequence, outcomesSequence, LAST_A)); } /** * Unit, Other => Valid */ @Test void testUnitFollowedByOutside() { String[] inputSequence = new String[] {"TypeA", "something", "something"}; String[] outcomesSequence = new String[] {UNIT_A}; Assertions.assertTrue(validator.validSequence(1, inputSequence, outcomesSequence, OTHER)); } /** * Unit, Unit => Valid */ @Test void testUnitFollowedByUnit() { String[] inputSequence = new String[] {"AnyType", "AnyType", "something"}; String[] outcomesSequence = new String[] {UNIT_A}; Assertions.assertTrue(validator.validSequence(1, inputSequence, outcomesSequence, UNIT_A)); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/BioCodecTest.java0100644 0000000 0000000 00000022437 14523004075 032613 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.Span; /** * This is the test class for {@link BioCodec}. */ public class BioCodecTest { private static final BioCodec codec = new BioCodec(); private static final String A_TYPE = "atype"; private static final String A_START = A_TYPE + "-" + BioCodec.START; private static final String A_CONTINUE = A_TYPE + "-" + BioCodec.CONTINUE; private static final String B_TYPE = "btype"; private static final String B_START = B_TYPE + "-" + BioCodec.START; private static final String B_CONTINUE = B_TYPE + "-" + BioCodec.CONTINUE; private static final String C_TYPE = "ctype"; private static final String C_START = C_TYPE + "-" + BioCodec.START; private static final String OTHER = BioCodec.OTHER; @Test void testEncodeNoNames() { NameSample nameSample = new NameSample("Once upon a time.".split(" "), new Span[] {}, true); String[] expected = new String[] {OTHER, OTHER, OTHER, OTHER}; String[] actual = codec.encode(nameSample.getNames(), nameSample.getSentence().length); Assertions.assertArrayEquals(expected, actual, "Only 'Other' is expected."); } @Test void testEncodeSingleTokenSpan() { String[] sentence = "I called Julie again.".split(" "); Span[] spans = new Span[] {new Span(2, 3, A_TYPE)}; NameSample nameSample = new NameSample(sentence, spans, true); String[] expected = new String[] {OTHER, OTHER, A_START, OTHER}; String[] actual = codec.encode(nameSample.getNames(), nameSample.getSentence().length); Assertions.assertArrayEquals(expected, actual, "'Julie' should be 'start' only, the rest should be 'other'."); } @Test void testEncodeDoubleTokenSpan() { String[] sentence = "I saw Stefanie Schmidt today.".split(" "); Span[] span = new Span[] {new Span(2, 4, A_TYPE)}; NameSample nameSample = new NameSample(sentence, span, true); String[] expected = new String[] {OTHER, OTHER, A_START, A_CONTINUE, OTHER}; String[] actual = codec.encode(nameSample.getNames(), nameSample.getSentence().length); Assertions.assertArrayEquals(expected, actual, "'Stefanie' should be 'start' only, 'Schmidt' is " + "'continue' and the rest should be 'other'."); } @Test void testEncodeDoubleTokenSpanNoType() { final String DEFAULT_START = "default" + "-" + BioCodec.START; final String DEFAULT_CONTINUE = "default" + "-" + BioCodec.CONTINUE; String[] sentence = "I saw Stefanie Schmidt today.".split(" "); Span[] span = new Span[] {new Span(2, 4, null)}; NameSample nameSample = new NameSample(sentence, span, true); String[] expected = new String[] {OTHER, OTHER, DEFAULT_START, DEFAULT_CONTINUE, OTHER}; String[] actual = codec.encode(nameSample.getNames(), nameSample.getSentence().length); Assertions.assertArrayEquals(expected, actual, "'Stefanie' should be 'start' only, 'Schmidt' is " + "'continue' and the rest should be 'other'."); } @Test void testEncodeAdjacentSingleSpans() { String[] sentence = "something PersonA PersonB Something".split(" "); Span[] span = new Span[] {new Span(1, 2, A_TYPE), new Span(2, 3, A_TYPE)}; NameSample nameSample = new NameSample(sentence, span, true); String[] expected = new String[] {OTHER, A_START, A_START, OTHER}; String[] actual = codec.encode(nameSample.getNames(), nameSample.getSentence().length); Assertions.assertArrayEquals(expected, actual); } @Test void testEncodeAdjacentSpans() { String[] sentence = "something PersonA PersonA PersonB Something".split(" "); Span[] span = new Span[] {new Span(1, 3, A_TYPE), new Span(3, 4, A_TYPE)}; NameSample nameSample = new NameSample(sentence, span, true); String[] expected = new String[] {OTHER, A_START, A_CONTINUE, A_START, OTHER}; String[] actual = codec.encode(nameSample.getNames(), nameSample.getSentence().length); Assertions.assertArrayEquals(expected, actual); } @Test void testCreateSequenceValidator() { Assertions.assertInstanceOf(NameFinderSequenceValidator.class, codec.createSequenceValidator()); } @Test void testDecodeEmpty() { Span[] expected = new Span[] {}; Span[] actual = codec.decode(new ArrayList<>()); Assertions.assertArrayEquals(expected, actual); } /** * Start, Other */ @Test void testDecodeSingletonFirst() { List encoded = Arrays.asList(B_START, OTHER); Span[] expected = new Span[] {new Span(0, 1, B_TYPE)}; Span[] actual = codec.decode(encoded); Assertions.assertArrayEquals(expected, actual); } /** * Start Start Other */ @Test void testDecodeAdjacentSingletonFirst() { List encoded = Arrays.asList(B_START, B_START, OTHER); Span[] expected = new Span[] {new Span(0, 1, B_TYPE), new Span(1, 2, B_TYPE)}; Span[] actual = codec.decode(encoded); Assertions.assertArrayEquals(expected, actual); } /** * Start Continue Other */ @Test void testDecodePairFirst() { List encoded = Arrays.asList(B_START, B_CONTINUE, OTHER); Span[] expected = new Span[] {new Span(0, 2, B_TYPE)}; Span[] actual = codec.decode(encoded); Assertions.assertArrayEquals(expected, actual); } /** * Start Continue Continue Other */ @Test void testDecodeTripletFirst() { List encoded = Arrays.asList(B_START, B_CONTINUE, B_CONTINUE, OTHER); Span[] expected = new Span[] {new Span(0, 3, B_TYPE)}; Span[] actual = codec.decode(encoded); Assertions.assertArrayEquals(expected, actual); } /** * Start Continue Start Other */ @Test void testDecodeAdjacentPairSingleton() { List encoded = Arrays.asList(B_START, B_CONTINUE, B_START, OTHER); Span[] expected = new Span[] {new Span(0, 2, B_TYPE), new Span(2, 3, B_TYPE)}; Span[] actual = codec.decode(encoded); Assertions.assertArrayEquals(expected, actual); } /** * Other Start Other */ @Test void testDecodeOtherFirst() { List encoded = Arrays.asList(OTHER, B_START, OTHER); Span[] expected = new Span[] {new Span(1, 2, B_TYPE)}; Span[] actual = codec.decode(encoded); Assertions.assertArrayEquals(expected, actual); } /** * A-Start A-Continue, A-Continue, Other, B-Start, B-Continue, Other, C-Start, Other */ @Test void testDecodeMultiClass() { List encoded = Arrays.asList(OTHER, A_START, A_CONTINUE, A_CONTINUE, OTHER, B_START, B_CONTINUE, OTHER, C_START, OTHER); Span[] expected = new Span[] {new Span(1, 4, A_TYPE), new Span(5, 7, B_TYPE), new Span(8, 9, C_TYPE)}; Span[] actual = codec.decode(encoded); Assertions.assertArrayEquals(expected, actual); } @Test void testCompatibilityEmpty() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {})); } @Test void testCompatibilitySingleStart() { Assertions.assertTrue(codec.areOutcomesCompatible(new String[] {A_START})); } @Test void testCompatibilitySingleContinue() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_CONTINUE})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {B_START, A_CONTINUE})); } @Test void testCompatibilitySingleOther() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {OTHER})); } @Test void testCompatibilityStartContinue() { Assertions.assertTrue(codec.areOutcomesCompatible(new String[] {A_START, A_CONTINUE})); } @Test void testCompatibilityStartOther() { Assertions.assertTrue(codec.areOutcomesCompatible(new String[] {A_START, OTHER})); } @Test void testCompatibilityContinueOther() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_CONTINUE, OTHER})); Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {B_START, A_CONTINUE, OTHER})); } @Test void testCompatibilityStartContinueOther() { Assertions.assertTrue(codec.areOutcomesCompatible(new String[] {A_START, A_CONTINUE, OTHER})); } @Test void testCompatibilityMultiClass() { Assertions.assertTrue(codec.areOutcomesCompatible( new String[] {A_START, A_CONTINUE, B_START, OTHER})); } @Test void testCompatibilityBadTag() { Assertions.assertFalse(codec.areOutcomesCompatible(new String[] {A_START, A_CONTINUE, "BAD"})); } @Test void testCompatibilityRepeated() { Assertions.assertTrue(codec.areOutcomesCompatible( new String[] {A_START, A_START, A_CONTINUE, A_CONTINUE, B_START, B_START, OTHER, OTHER})); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_namefind_Dictiona0100644 0000000 0000000 00000000174 14523004075 032577 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/DictionaryNameFinderEvaluatorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/DictionaryNameFinderEval0100644 0000000 0000000 00000007017 14523004075 034227 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.cmdline.namefind.NameEvaluationErrorListener; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; import opennlp.tools.util.StringList; import opennlp.tools.util.eval.FMeasure; /** * Tests the evaluation of a {@link DictionaryNameFinder}. */ public class DictionaryNameFinderEvaluatorTest { @Test void testEvaluator() throws IOException { DictionaryNameFinder nameFinder = new DictionaryNameFinder(createDictionary()); TokenNameFinderEvaluator evaluator = new TokenNameFinderEvaluator( nameFinder, new NameEvaluationErrorListener()); ObjectStream sample = createSample(); evaluator.evaluate(sample); sample.close(); FMeasure fmeasure = evaluator.getFMeasure(); Assertions.assertEquals(1, fmeasure.getFMeasure()); Assertions.assertEquals(1, fmeasure.getRecallScore()); } /** * @return A {@link NameSample} stream using an annotated corpus * @throws IOException Thrown if IO errors occurred. */ private static ObjectStream createSample() throws IOException { InputStreamFactory in = new ResourceAsStreamFactory( DictionaryNameFinderEvaluatorTest.class, "/opennlp/tools/namefind/AnnotatedSentences.txt"); return new NameSampleDataStream(new PlainTextByLineStream(in, StandardCharsets.ISO_8859_1)); } /** * @return A {@link Dictionary} with all names from the sample data. * @throws IOException Thrown if IO errors occurred. */ private static Dictionary createDictionary() throws IOException { ObjectStream sampleStream = createSample(); NameSample sample = sampleStream.read(); List entries = new ArrayList<>(); while (sample != null) { Span[] names = sample.getNames(); if (names != null && names.length > 0) { String[] toks = sample.getSentence(); for (Span name : names) { String[] nameToks = new String[name.length()]; System.arraycopy(toks, name.getStart(), nameToks, 0, name.length()); entries.add(nameToks); } } sample = sampleStream.read(); } sampleStream.close(); Dictionary dictionary = new Dictionary(true); for (String[] entry : entries) { StringList dicEntry = new StringList(entry); dictionary.put(dicEntry); } return dictionary; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_namefind_Dictiona0100644 0000000 0000000 00000000163 14523004075 032575 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/DictionaryNameFinderTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/DictionaryNameFinderTest0100644 0000000 0000000 00000007763 14523004075 034267 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.tokenize.SimpleTokenizer; import opennlp.tools.util.Span; import opennlp.tools.util.StringList; /** * Tests for the {@link DictionaryNameFinder} class. */ public class DictionaryNameFinderTest { private final Dictionary mDictionary = new Dictionary(); private TokenNameFinder mNameFinder; public DictionaryNameFinderTest() { StringList vanessa = new StringList(new String[] {"Vanessa"}); mDictionary.put(vanessa); StringList vanessaWilliams = new StringList("Vanessa", "Williams"); mDictionary.put(vanessaWilliams); StringList max = new StringList(new String[] {"Max"}); mDictionary.put(max); StringList michaelJordan = new StringList("Michael", "Jordan"); mDictionary.put(michaelJordan); } @BeforeEach void setUp() { mNameFinder = new DictionaryNameFinder(mDictionary); } @Test void testSingleTokeNameAtSentenceStart() { String sentence = "Max a b c d"; SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE; String[] tokens = tokenizer.tokenize(sentence); Span[] names = mNameFinder.find(tokens); Assertions.assertEquals(1, names.length); Assertions.assertTrue(names[0].getStart() == 0 && names[0].getEnd() == 1); } @Test void testSingleTokeNameInsideSentence() { String sentence = "a b Max c d"; SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE; String[] tokens = tokenizer.tokenize(sentence); Span[] names = mNameFinder.find(tokens); Assertions.assertEquals(1, names.length); Assertions.assertTrue(names[0].getStart() == 2 && names[0].getEnd() == 3); } @Test void testSingleTokeNameAtSentenceEnd() { String sentence = "a b c Max"; SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE; String[] tokens = tokenizer.tokenize(sentence); Span[] names = mNameFinder.find(tokens); Assertions.assertEquals(1, names.length); Assertions.assertTrue(names[0].getStart() == 3 && names[0].getEnd() == 4); } @Test void testLastMatchingTokenNameIsChoosen() { String[] sentence = {"a", "b", "c", "Vanessa"}; Span[] names = mNameFinder.find(sentence); Assertions.assertEquals(1, names.length); Assertions.assertTrue(names[0].getStart() == 3 && names[0].getEnd() == 4); } @Test void testLongerTokenNameIsPreferred() { String[] sentence = {"a", "b", "c", "Vanessa", "Williams"}; Span[] names = mNameFinder.find(sentence); Assertions.assertEquals(1, names.length); Assertions.assertTrue(names[0].getStart() == 3 && names[0].getEnd() == 5); } @Test void testCaseSensitivity() { String[] sentence = {"a", "b", "c", "vanessa", "williams"}; Span[] names = mNameFinder.find(sentence); Assertions.assertEquals(1, names.length); Assertions.assertTrue(names[0].getStart() == 3 && names[0].getEnd() == 5); } @Test void testCaseLongerEntry() { String[] sentence = {"a", "b", "michael", "jordan"}; Span[] names = mNameFinder.find(sentence); Assertions.assertEquals(1, names.length); Assertions.assertEquals(2, names[0].length()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_namefind_NameFind0100644 0000000 0000000 00000000164 14523004075 032525 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/NameFinderEventStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/NameFinderEventStreamTes0100644 0000000 0000000 00000012204 14523004075 034215 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.ml.model.Event; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; import opennlp.tools.util.Span; import opennlp.tools.util.featuregen.AdaptiveFeatureGenerator; /** * This is the test class for {@link NameFinderEventStream}. */ public class NameFinderEventStreamTest { private static final String[] SENTENCE = {"Elise", "Wendel", "appreciated", "the", "hint", "and", "enjoyed", "a", "delicious", "traditional", "meal", "."}; private static final NameContextGenerator CG = new DefaultNameContextGenerator( (AdaptiveFeatureGenerator[]) null); /** * Tests the correctly generated outcomes for a test sentence. */ @Test void testOutcomesForSingleTypeSentence() throws IOException { NameContextGenerator CG = new DefaultNameContextGenerator( (AdaptiveFeatureGenerator[]) null); NameSample nameSample = new NameSample(SENTENCE, new Span[] {new Span(0, 2, "person")}, false); try (ObjectStream eventStream = new NameFinderEventStream( ObjectStreamUtils.createObjectStream(nameSample), "person", CG, null)) { Assertions.assertEquals("person-" + NameFinderME.START, eventStream.read().getOutcome()); Assertions.assertEquals("person-" + NameFinderME.CONTINUE, eventStream.read().getOutcome()); for (int i = 0; i < 10; i++) { Assertions.assertEquals(NameFinderME.OTHER, eventStream.read().getOutcome()); } Assertions.assertNull(eventStream.read()); } } /** * Tests the correctly generated outcomes for a test sentence. If the Span * declares its type, passing the type to event stream has no effect */ @Test void testOutcomesTypeCantOverride() throws IOException { String type = "XYZ"; NameSample nameSample = new NameSample(SENTENCE, new Span[] {new Span(0, 2, "person")}, false); ObjectStream eventStream = new NameFinderEventStream( ObjectStreamUtils.createObjectStream(nameSample), type, CG, null); String prefix = type + "-"; Assertions.assertEquals(prefix + NameFinderME.START, eventStream.read().getOutcome()); Assertions.assertEquals(prefix + NameFinderME.CONTINUE, eventStream.read().getOutcome()); for (int i = 0; i < 10; i++) { Assertions.assertEquals(NameFinderME.OTHER, eventStream.read().getOutcome()); } Assertions.assertNull(eventStream.read()); eventStream.close(); } /** * Tests the correctly generated outcomes for a test sentence. If the Span * does not declare its type and the user passed a type, use the type from * user */ @Test void testOutcomesWithType() throws IOException { String type = "XYZ"; NameSample nameSample = new NameSample(SENTENCE, new Span[] {new Span(0, 2)}, false); ObjectStream eventStream = new NameFinderEventStream( ObjectStreamUtils.createObjectStream(nameSample), type, CG, null); String prefix = type + "-"; Assertions.assertEquals(prefix + NameFinderME.START, eventStream.read().getOutcome()); Assertions.assertEquals(prefix + NameFinderME.CONTINUE, eventStream.read().getOutcome()); for (int i = 0; i < 10; i++) { Assertions.assertEquals(NameFinderME.OTHER, eventStream.read().getOutcome()); } Assertions.assertNull(eventStream.read()); eventStream.close(); } /** * Tests the correctly generated outcomes for a test sentence. If the Span * does not declare its type and the user did not set a type, it will use * "default". */ @Test void testOutcomesTypeEmpty() throws IOException { NameSample nameSample = new NameSample(SENTENCE, new Span[] {new Span(0, 2)}, false); ObjectStream eventStream = new NameFinderEventStream( ObjectStreamUtils.createObjectStream(nameSample), null, CG, null); String prefix = "default-"; Assertions.assertEquals(prefix + NameFinderME.START, eventStream.read().getOutcome()); Assertions.assertEquals(prefix + NameFinderME.CONTINUE, eventStream.read().getOutcome()); for (int i = 0; i < 10; i++) { Assertions.assertEquals(NameFinderME.OTHER, eventStream.read().getOutcome()); } Assertions.assertNull(eventStream.read()); eventStream.close(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/NameFinderMETest.java0100644 0000000 0000000 00000033641 14523004075 033375 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.io.File; import java.nio.charset.StandardCharsets; import java.util.Collections; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.ml.model.SequenceClassificationModel; import opennlp.tools.util.MockInputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; import opennlp.tools.util.TrainingParameters; /** * This is the test class for {@link NameFinderME}. *

* A proper testing and evaluation of the name finder * is only possible with a large corpus which contains * a huge amount of test sentences. *

* The scope of this test is to make sure that the name finder * code can be executed. This test can not detect * mistakes which lead to incorrect feature generation * or other mistakes which decrease the tagging * performance of the name finder. *

* In this test the {@link NameFinderME} is trained with * a small amount of training sentences and then the * computed model is used to predict sentences from the * training sentences. */ public class NameFinderMETest { private static final String TYPE_OVERRIDE = "aType"; private static final String DEFAULT = "default"; @Test void testNameFinder() throws Exception { // train the name finder String encoding = "ISO-8859-1"; ObjectStream sampleStream = new NameSampleDataStream( new PlainTextByLineStream(new MockInputStreamFactory( new File("opennlp/tools/namefind/AnnotatedSentences.txt")), encoding)); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, 70); params.put(TrainingParameters.CUTOFF_PARAM, 1); TokenNameFinderModel nameFinderModel = NameFinderME.train("eng", null, sampleStream, params, TokenNameFinderFactory.create(null, null, Collections.emptyMap(), new BioCodec())); TokenNameFinder nameFinder = new NameFinderME(nameFinderModel); // now test if it can detect the sample sentences String[] sentence = {"Alisa", "appreciated", "the", "hint", "and", "enjoyed", "a", "delicious", "traditional", "meal."}; Span[] names = nameFinder.find(sentence); Assertions.assertEquals(1, names.length); Assertions.assertEquals(new Span(0, 1, DEFAULT), names[0]); sentence = new String[] { "Hi", "Mike", ",", "it's", "Stefanie", "Schmidt", "." }; names = nameFinder.find(sentence); Assertions.assertEquals(2, names.length); Assertions.assertEquals(new Span(1, 2, DEFAULT), names[0]); Assertions.assertEquals(new Span(4, 6, DEFAULT), names[1]); } /** * Train NamefinderME using AnnotatedSentencesWithTypes.txt with "person" * nameType and try the model in a sample text. */ @Test void testNameFinderWithTypes() throws Exception { // train the name finder String encoding = "ISO-8859-1"; ObjectStream sampleStream = new NameSampleDataStream( new PlainTextByLineStream(new MockInputStreamFactory( new File("opennlp/tools/namefind/AnnotatedSentencesWithTypes.txt")), encoding)); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, 70); params.put(TrainingParameters.CUTOFF_PARAM, 1); TokenNameFinderModel nameFinderModel = NameFinderME.train("eng", null, sampleStream, params, TokenNameFinderFactory.create(null, null, Collections.emptyMap(), new BioCodec())); NameFinderME nameFinder = new NameFinderME(nameFinderModel); // now test if it can detect the sample sentences String[] sentence2 = new String[] {"Hi", "Mike", ",", "it's", "Stefanie", "Schmidt", "."}; Span[] names2 = nameFinder.find(sentence2); Assertions.assertEquals(2, names2.length); Assertions.assertEquals(new Span(1, 2, "person"), names2[0]); Assertions.assertEquals(new Span(4, 6, "person"), names2[1]); Assertions.assertEquals("person", names2[0].getType()); Assertions.assertEquals("person", names2[1].getType()); String[] sentence = {"Alisa", "appreciated", "the", "hint", "and", "enjoyed", "a", "delicious", "traditional", "meal."}; Span[] names = nameFinder.find(sentence); Assertions.assertEquals(1, names.length); Assertions.assertEquals(new Span(0, 1, "person"), names[0]); Assertions.assertTrue(hasOtherAsOutcome(nameFinderModel)); } /** * Train NamefinderME using OnlyWithNames.train. The goal is to check if the model validator accepts it. * This is related to the issue OPENNLP-9 */ @Test void testOnlyWithNames() throws Exception { // train the name finder ObjectStream sampleStream = new NameSampleDataStream( new PlainTextByLineStream(new MockInputStreamFactory( new File("opennlp/tools/namefind/OnlyWithNames.train")), StandardCharsets.UTF_8)); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, 70); params.put(TrainingParameters.CUTOFF_PARAM, 1); TokenNameFinderModel nameFinderModel = NameFinderME.train("eng", null, sampleStream, params, TokenNameFinderFactory.create(null, null, Collections.emptyMap(), new BioCodec())); NameFinderME nameFinder = new NameFinderME(nameFinderModel); // now test if it can detect the sample sentences String[] sentence = ("Neil Abercrombie Anibal Acevedo-Vila Gary Ackerman " + "Robert Aderholt Daniel Akaka Todd Akin Lamar Alexander Rodney Alexander").split("\\s+"); Span[] names1 = nameFinder.find(sentence); Assertions.assertEquals(new Span(0, 2, DEFAULT), names1[0]); Assertions.assertEquals(new Span(2, 4, DEFAULT), names1[1]); Assertions.assertEquals(new Span(4, 6, DEFAULT), names1[2]); Assertions.assertFalse(hasOtherAsOutcome(nameFinderModel)); } @Test void testOnlyWithNamesTypeOverride() throws Exception { // train the name finder ObjectStream sampleStream = new NameSampleDataStream( new PlainTextByLineStream(new MockInputStreamFactory( new File("opennlp/tools/namefind/OnlyWithNames.train")), StandardCharsets.UTF_8)); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, 70); params.put(TrainingParameters.CUTOFF_PARAM, 1); TokenNameFinderModel nameFinderModel = NameFinderME.train("eng", TYPE_OVERRIDE, sampleStream, params, TokenNameFinderFactory.create(null, null, Collections.emptyMap(), new BioCodec())); NameFinderME nameFinder = new NameFinderME(nameFinderModel); // now test if it can detect the sample sentences String[] sentence = ("Neil Abercrombie Anibal Acevedo-Vila Gary Ackerman " + "Robert Aderholt Daniel Akaka Todd Akin Lamar Alexander Rodney Alexander").split("\\s+"); Span[] names1 = nameFinder.find(sentence); Assertions.assertEquals(new Span(0, 2, TYPE_OVERRIDE), names1[0]); Assertions.assertEquals(new Span(2, 4, TYPE_OVERRIDE), names1[1]); Assertions.assertEquals(new Span(4, 6, TYPE_OVERRIDE), names1[2]); Assertions.assertFalse(hasOtherAsOutcome(nameFinderModel)); } /** * Train NamefinderME using OnlyWithNamesWithTypes.train. * The goal is to check if the model validator accepts it. * This is related to the issue OPENNLP-9 */ @Test void testOnlyWithNamesWithTypes() throws Exception { // train the name finder ObjectStream sampleStream = new NameSampleDataStream( new PlainTextByLineStream(new MockInputStreamFactory( new File("opennlp/tools/namefind/OnlyWithNamesWithTypes.train")), StandardCharsets.UTF_8)); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, 70); params.put(TrainingParameters.CUTOFF_PARAM, 1); TokenNameFinderModel nameFinderModel = NameFinderME.train("eng", null, sampleStream, params, TokenNameFinderFactory.create(null, null, Collections.emptyMap(), new BioCodec())); NameFinderME nameFinder = new NameFinderME(nameFinderModel); // now test if it can detect the sample sentences String[] sentence = ("Neil Abercrombie Anibal Acevedo-Vila Gary Ackerman " + "Robert Aderholt Daniel Akaka Todd Akin Lamar Alexander Rodney Alexander").split("\\s+"); Span[] names1 = nameFinder.find(sentence); Assertions.assertEquals(new Span(0, 2, "person"), names1[0]); Assertions.assertEquals(new Span(2, 4, "person"), names1[1]); Assertions.assertEquals(new Span(4, 6, "person"), names1[2]); Assertions.assertEquals("person", names1[2].getType()); Assertions.assertFalse(hasOtherAsOutcome(nameFinderModel)); } /** * Train NamefinderME using OnlyWithNames.train. The goal is to check if the model validator accepts it. * This is related to the issue OPENNLP-9 */ @Test void testOnlyWithEntitiesWithTypes() throws Exception { // train the name finder ObjectStream sampleStream = new NameSampleDataStream( new PlainTextByLineStream(new MockInputStreamFactory( new File("opennlp/tools/namefind/OnlyWithEntitiesWithTypes.train")), StandardCharsets.UTF_8)); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ALGORITHM_PARAM, "MAXENT"); params.put(TrainingParameters.ITERATIONS_PARAM, 70); params.put(TrainingParameters.CUTOFF_PARAM, 1); TokenNameFinderModel nameFinderModel = NameFinderME.train("eng", null, sampleStream, params, TokenNameFinderFactory.create(null, null, Collections.emptyMap(), new BioCodec())); NameFinderME nameFinder = new NameFinderME(nameFinderModel); // now test if it can detect the sample sentences String[] sentence = "NATO United States Barack Obama".split("\\s+"); Span[] names1 = nameFinder.find(sentence); Assertions.assertEquals(new Span(0, 1, "organization"), names1[0]); // NATO Assertions.assertEquals(new Span(1, 3, "location"), names1[1]); // United States Assertions.assertEquals("person", names1[2].getType()); Assertions.assertFalse(hasOtherAsOutcome(nameFinderModel)); } private boolean hasOtherAsOutcome(TokenNameFinderModel nameFinderModel) { SequenceClassificationModel model = nameFinderModel.getNameFinderSequenceModel(); String[] outcomes = model.getOutcomes(); for (String outcome : outcomes) { if (outcome.equals(NameFinderME.OTHER)) { return true; } } return false; } @Test void testDropOverlappingSpans() { Span[] spans = new Span[] {new Span(1, 10), new Span(1, 11), new Span(1, 11), new Span(5, 15)}; Span[] remainingSpan = NameFinderME.dropOverlappingSpans(spans); Assertions.assertEquals(new Span(1, 11), remainingSpan[0]); } /** * Train NamefinderME using voa1.train with several * nameTypes and try the model in a sample text. */ @Test void testNameFinderWithMultipleTypes() throws Exception { // train the name finder ObjectStream sampleStream = new NameSampleDataStream( new PlainTextByLineStream(new MockInputStreamFactory( new File("opennlp/tools/namefind/voa1.train")), StandardCharsets.UTF_8)); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, 70); params.put(TrainingParameters.CUTOFF_PARAM, 1); TokenNameFinderModel nameFinderModel = NameFinderME.train("eng", null, sampleStream, params, TokenNameFinderFactory.create(null, null, Collections.emptyMap(), new BioCodec())); NameFinderME nameFinder = new NameFinderME(nameFinderModel); // now test if it can detect the sample sentences String[] sentence = new String[] {"U", ".", "S", ".", "President", "Barack", "Obama", "has", "arrived", "in", "South", "Korea", ",", "where", "he", "is", "expected", "to", "show", "solidarity", "with", "the", "country", "'", "s", "president", "in", "demanding", "North", "Korea", "move", "toward", "ending", "its", "nuclear", "weapons", "programs", "."}; Span[] names1 = nameFinder.find(sentence); Assertions.assertEquals(new Span(0, 4, "location"), names1[0]); Assertions.assertEquals(new Span(5, 7, "person"), names1[1]); Assertions.assertEquals(new Span(10, 12, "location"), names1[2]); Assertions.assertEquals(new Span(28, 30, "location"), names1[3]); Assertions.assertEquals("location", names1[0].getType()); Assertions.assertEquals("person", names1[1].getType()); Assertions.assertEquals("location", names1[2].getType()); Assertions.assertEquals("location", names1[3].getType()); sentence = new String[] {"Scott", "Snyder", "is", "the", "director", "of", "the", "Center", "for", "U", ".", "S", ".", "Korea", "Policy", "."}; Span[] names2 = nameFinder.find(sentence); Assertions.assertEquals(2, names2.length); Assertions.assertEquals(new Span(0, 2, "person"), names2[0]); Assertions.assertEquals(new Span(7, 15, "organization"), names2[1]); Assertions.assertEquals("person", names2[0].getType()); Assertions.assertEquals("organization", names2[1].getType()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_namefind_NameFind0100644 0000000 0000000 00000000172 14523004075 032524 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/NameFinderSequenceValidatorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/NameFinderSequenceValida0100644 0000000 0000000 00000016057 14523004075 034207 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * This is the test class for {@link NameFinderSequenceValidator}. */ public class NameFinderSequenceValidatorTest { private static final NameFinderSequenceValidator validator = new NameFinderSequenceValidator(); private static final String START_A = "TypeA-" + NameFinderME.START; private static final String CONTINUE_A = "TypeA-" + NameFinderME.CONTINUE; private static final String START_B = "TypeB-" + NameFinderME.START; private static final String CONTINUE_B = "TypeB-" + NameFinderME.CONTINUE; private static final String OTHER = NameFinderME.OTHER; @Test void testContinueCannotBeFirstOutcome() { String[] inputSequence = new String[] {"PersonA", "is", "here"}; String[] outcomesSequence = new String[] {}; Assertions.assertFalse(validator.validSequence(0, inputSequence, outcomesSequence, CONTINUE_A)); } @Test void testContinueAfterStartAndSameType() { // previous start, same name type String[] inputSequence = new String[] {"Stefanie", "Schmidt", "is", "German"}; String[] outcomesSequence = new String[] {START_A}; Assertions.assertTrue(validator.validSequence(1, inputSequence, outcomesSequence, CONTINUE_A)); } @Test void testContinueAfterStartAndNotSameType() { // previous start, not same name type String[] inputSequence = new String[] {"PersonA", "LocationA", "something"}; String[] outcomesSequence = new String[] {START_A}; Assertions.assertFalse(validator.validSequence(1, inputSequence, outcomesSequence, CONTINUE_B)); } @Test void testContinueAfterContinueAndSameType() { // previous continue, same name type String[] inputSequence = new String[] {"FirstName", "MidleName", "LastName", "is", "a", "long", "name"}; String[] outcomesSequence = new String[] {START_A, CONTINUE_A}; Assertions.assertTrue(validator.validSequence(2, inputSequence, outcomesSequence, CONTINUE_A)); } @Test void testContinueAfterContinueAndNotSameType() { // previous continue, not same name type String[] inputSequence = new String[] {"FirstName", "LastName", "LocationA", "something"}; String[] outcomesSequence = new String[] {START_A, CONTINUE_A}; Assertions.assertFalse(validator.validSequence(2, inputSequence, outcomesSequence, CONTINUE_B)); } @Test void testContinueAfterOther() { // previous other String[] inputSequence = new String[] {"something", "is", "wrong", "here"}; String[] outcomesSequence = new String[] {OTHER}; Assertions.assertFalse(validator.validSequence(1, inputSequence, outcomesSequence, CONTINUE_A)); } @Test void testStartIsAlwaysAValidOutcome() { final String outcome = START_A; // pos zero String[] inputSequence = new String[] {"PersonA", "is", "here"}; String[] outcomesSequence = new String[] {}; Assertions.assertTrue(validator.validSequence(0, inputSequence, outcomesSequence, outcome)); // pos one, previous other inputSequence = new String[] {"it's", "PersonA", "again"}; outcomesSequence = new String[] {OTHER}; Assertions.assertTrue(validator.validSequence(1, inputSequence, outcomesSequence, outcome)); // pos one, previous start inputSequence = new String[] {"PersonA", "PersonB", "something"}; outcomesSequence = new String[] {START_A}; Assertions.assertTrue(validator.validSequence(1, inputSequence, outcomesSequence, outcome)); // pos two, previous other inputSequence = new String[] {"here", "is", "PersonA"}; outcomesSequence = new String[] {OTHER, OTHER}; Assertions.assertTrue(validator.validSequence(2, inputSequence, outcomesSequence, outcome)); // pos two, previous start, same name type inputSequence = new String[] {"is", "PersonA", "PersoneB"}; outcomesSequence = new String[] {OTHER, START_A}; Assertions.assertTrue(validator.validSequence(2, inputSequence, outcomesSequence, outcome)); // pos two, previous start, different name type inputSequence = new String[] {"something", "PersonA", "OrganizationA"}; outcomesSequence = new String[] {OTHER, START_B}; Assertions.assertTrue(validator.validSequence(2, inputSequence, outcomesSequence, outcome)); // pos two, previous continue, same name type inputSequence = new String[] {"Stefanie", "Schmidt", "PersonB", "something"}; outcomesSequence = new String[] {START_A, CONTINUE_A}; Assertions.assertTrue(validator.validSequence(2, inputSequence, outcomesSequence, outcome)); // pos two, previous continue, not same name type inputSequence = new String[] {"Stefanie", "Schmidt", "OrganizationA", "something"}; outcomesSequence = new String[] {START_B, CONTINUE_B}; Assertions.assertTrue(validator.validSequence(2, inputSequence, outcomesSequence, outcome)); } @Test void testOtherIsAlwaysAValidOutcome() { final String outcome = OTHER; // pos zero String[] inputSequence = new String[] {"it's", "a", "test"}; String[] outcomesSequence = new String[] {}; Assertions.assertTrue(validator.validSequence(0, inputSequence, outcomesSequence, outcome)); // pos one, previous other inputSequence = new String[] {"it's", "a", "test"}; outcomesSequence = new String[] {OTHER}; Assertions.assertTrue(validator.validSequence(1, inputSequence, outcomesSequence, outcome)); // pos one, previous start inputSequence = new String[] {"Mike", "is", "here"}; outcomesSequence = new String[] {START_A}; Assertions.assertTrue(validator.validSequence(1, inputSequence, outcomesSequence, outcome)); // pos two, previous other inputSequence = new String[] {"it's", "a", "test"}; outcomesSequence = new String[] {OTHER, OTHER}; Assertions.assertTrue(validator.validSequence(2, inputSequence, outcomesSequence, outcome)); // pos two, previous start inputSequence = new String[] {"is", "Mike", "here"}; outcomesSequence = new String[] {OTHER, START_A}; Assertions.assertTrue(validator.validSequence(2, inputSequence, outcomesSequence, outcome)); // pos two, previous continue inputSequence = new String[] {"Stefanie", "Schmidt", "lives", "at", "home"}; outcomesSequence = new String[] {START_A, CONTINUE_A}; Assertions.assertTrue(validator.validSequence(2, inputSequence, outcomesSequence, outcome)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_namefind_NameSamp0100644 0000000 0000000 00000000163 14523004075 032544 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/NameSampleDataStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/NameSampleDataStreamTest0100644 0000000 0000000 00000043121 14523004075 034205 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.io.IOException; import java.io.ObjectStreamException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.MockInputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; /** * This is the test class for {@link NameSampleDataStream}.. */ public class NameSampleDataStreamTest { private static final String person = "person"; private static final String date = "date"; private static final String location = "location"; private static final String organization = "organization"; /** * Create a string from a array section. * * @param tokens the tokens * @param nameSpan the section * @return the string */ private static String sublistToString(String[] tokens, Span nameSpan) { StringBuilder sb = new StringBuilder(); for (int i = nameSpan.getStart(); i < nameSpan.getEnd(); i++) { sb.append(tokens[i]).append(" "); } return sb.toString().trim(); } /** * Create a NameSampleDataStream from a corpus with entities annotated but * without nameType and validate it. * * @throws IOException Thrown if IO errors occurred. */ @Test void testWithoutNameTypes() throws IOException { InputStreamFactory in = new ResourceAsStreamFactory(getClass(), "/opennlp/tools/namefind/AnnotatedSentences.txt"); NameSampleDataStream ds = new NameSampleDataStream( new PlainTextByLineStream(in, StandardCharsets.ISO_8859_1)); NameSample ns = ds.read(); String[] expectedNames = {"Alan McKennedy", "Julie", "Marie Clara", "Stefanie Schmidt", "Mike", "Stefanie Schmidt", "George", "Luise", "George Bauer", "Alisa Fernandes", "Alisa", "Mike Sander", "Stefan Miller", "Stefan Miller", "Stefan Miller", "Elenor Meier", "Gina Schneider", "Bruno Schulz", "Michel Seile", "George Miller", "Miller", "Peter Schubert", "Natalie"}; List names = new ArrayList<>(); List spans = new ArrayList<>(); while (ns != null) { for (Span nameSpan : ns.getNames()) { names.add(sublistToString(ns.getSentence(), nameSpan)); spans.add(nameSpan); } ns = ds.read(); } ds.close(); Assertions.assertEquals(expectedNames.length, names.size()); Assertions.assertEquals(createDefaultSpan(6, 8), spans.get(0)); Assertions.assertEquals(createDefaultSpan(3, 4), spans.get(1)); Assertions.assertEquals(createDefaultSpan(1, 3), spans.get(2)); Assertions.assertEquals(createDefaultSpan(4, 6), spans.get(3)); Assertions.assertEquals(createDefaultSpan(1, 2), spans.get(4)); Assertions.assertEquals(createDefaultSpan(4, 6), spans.get(5)); Assertions.assertEquals(createDefaultSpan(2, 3), spans.get(6)); Assertions.assertEquals(createDefaultSpan(16, 17), spans.get(7)); Assertions.assertEquals(createDefaultSpan(18, 20), spans.get(8)); Assertions.assertEquals(createDefaultSpan(0, 2), spans.get(9)); Assertions.assertEquals(createDefaultSpan(0, 1), spans.get(10)); Assertions.assertEquals(createDefaultSpan(3, 5), spans.get(11)); Assertions.assertEquals(createDefaultSpan(3, 5), spans.get(12)); Assertions.assertEquals(createDefaultSpan(10, 12), spans.get(13)); Assertions.assertEquals(createDefaultSpan(1, 3), spans.get(14)); Assertions.assertEquals(createDefaultSpan(6, 8), spans.get(15)); Assertions.assertEquals(createDefaultSpan(6, 8), spans.get(16)); Assertions.assertEquals(createDefaultSpan(8, 10), spans.get(17)); Assertions.assertEquals(createDefaultSpan(12, 14), spans.get(18)); Assertions.assertEquals(createDefaultSpan(1, 3), spans.get(19)); Assertions.assertEquals(createDefaultSpan(0, 1), spans.get(20)); Assertions.assertEquals(createDefaultSpan(2, 4), spans.get(21)); Assertions.assertEquals(createDefaultSpan(5, 6), spans.get(22)); } private Span createDefaultSpan(int s, int e) { return new Span(s, e, NameSample.DEFAULT_TYPE); } /** * Checks that invalid spans cause an {@link ObjectStreamException} to be thrown. */ @Test void testWithoutNameTypeAndInvalidData() { try (NameSampleDataStream sampleStream = new NameSampleDataStream( ObjectStreamUtils.createObjectStream(" Name "))) { sampleStream.read(); Assertions.fail(); } catch (IOException expected) { // the read above is expected to throw an exception } try (NameSampleDataStream sampleStream = new NameSampleDataStream( ObjectStreamUtils.createObjectStream(" Name "))) { sampleStream.read(); Assertions.fail(); } catch (IOException expected) { // the read above is expected to throw an exception } try (NameSampleDataStream sampleStream = new NameSampleDataStream( ObjectStreamUtils.createObjectStream( " Person Street "))) { sampleStream.read(); Assertions.fail(); } catch (IOException expected) { // the read above is expected to throw an exception } } /** * Create a NameSampleDataStream from a corpus with entities annotated * with multiple nameTypes, like person, date, location and organization, and validate it. * * @throws IOException Thrown if IO errors occurred. */ @Test void testWithNameTypes() throws IOException { InputStreamFactory in = new ResourceAsStreamFactory(getClass(), "/opennlp/tools/namefind/voa1.train"); NameSampleDataStream ds = new NameSampleDataStream( new PlainTextByLineStream(in, StandardCharsets.UTF_8)); Map> names = new HashMap<>(); Map> spans = new HashMap<>(); NameSample ns; while ((ns = ds.read()) != null) { Span[] nameSpans = ns.getNames(); for (Span nameSpan : nameSpans) { if (!names.containsKey(nameSpan.getType())) { names.put(nameSpan.getType(), new ArrayList<>()); spans.put(nameSpan.getType(), new ArrayList<>()); } names.get(nameSpan.getType()).add(sublistToString(ns.getSentence(), nameSpan)); spans.get(nameSpan.getType()).add(nameSpan); } } ds.close(); String[] expectedPerson = {"Barack Obama", "Obama", "Obama", "Lee Myung - bak", "Obama", "Obama", "Scott Snyder", "Snyder", "Obama", "Obama", "Obama", "Tim Peters", "Obama", "Peters"}; String[] expectedDate = {"Wednesday", "Thursday", "Wednesday"}; String[] expectedLocation = {"U . S .", "South Korea", "North Korea", "China", "South Korea", "North Korea", "North Korea", "U . S .", "South Korea", "United States", "Pyongyang", "North Korea", "South Korea", "Afghanistan", "Seoul", "U . S .", "China"}; String[] expectedOrganization = {"Center for U . S . Korea Policy"}; Assertions.assertEquals(expectedPerson.length, names.get(person).size()); Assertions.assertEquals(expectedDate.length, names.get(date).size()); Assertions.assertEquals(expectedLocation.length, names.get(location).size()); Assertions.assertEquals(expectedOrganization.length, names.get(organization).size()); Assertions.assertEquals(new Span(5, 7, person), spans.get(person).get(0)); Assertions.assertEquals(expectedPerson[0], names.get(person).get(0)); Assertions.assertEquals(new Span(10, 11, person), spans.get(person).get(1)); Assertions.assertEquals(expectedPerson[1], names.get(person).get(1)); Assertions.assertEquals(new Span(29, 30, person), spans.get(person).get(2)); Assertions.assertEquals(expectedPerson[2], names.get(person).get(2)); Assertions.assertEquals(new Span(23, 27, person), spans.get(person).get(3)); Assertions.assertEquals(expectedPerson[3], names.get(person).get(3)); Assertions.assertEquals(new Span(1, 2, person), spans.get(person).get(4)); Assertions.assertEquals(expectedPerson[4], names.get(person).get(4)); Assertions.assertEquals(new Span(8, 9, person), spans.get(person).get(5)); Assertions.assertEquals(expectedPerson[5], names.get(person).get(5)); Assertions.assertEquals(new Span(0, 2, person), spans.get(person).get(6)); Assertions.assertEquals(expectedPerson[6], names.get(person).get(6)); Assertions.assertEquals(new Span(25, 26, person), spans.get(person).get(7)); Assertions.assertEquals(expectedPerson[7], names.get(person).get(7)); Assertions.assertEquals(new Span(1, 2, person), spans.get(person).get(8)); Assertions.assertEquals(expectedPerson[8], names.get(person).get(8)); Assertions.assertEquals(new Span(6, 7, person), spans.get(person).get(9)); Assertions.assertEquals(expectedPerson[9], names.get(person).get(9)); Assertions.assertEquals(new Span(14, 15, person), spans.get(person).get(10)); Assertions.assertEquals(expectedPerson[10], names.get(person).get(10)); Assertions.assertEquals(new Span(0, 2, person), spans.get(person).get(11)); Assertions.assertEquals(expectedPerson[11], names.get(person).get(11)); Assertions.assertEquals(new Span(12, 13, person), spans.get(person).get(12)); Assertions.assertEquals(expectedPerson[12], names.get(person).get(12)); Assertions.assertEquals(new Span(12, 13, person), spans.get(person).get(13)); Assertions.assertEquals(expectedPerson[13], names.get(person).get(13)); Assertions.assertEquals(new Span(7, 8, date), spans.get(date).get(0)); Assertions.assertEquals(expectedDate[0], names.get(date).get(0)); Assertions.assertEquals(new Span(27, 28, date), spans.get(date).get(1)); Assertions.assertEquals(expectedDate[1], names.get(date).get(1)); Assertions.assertEquals(new Span(15, 16, date), spans.get(date).get(2)); Assertions.assertEquals(expectedDate[2], names.get(date).get(2)); Assertions.assertEquals(new Span(0, 4, location), spans.get(location).get(0)); Assertions.assertEquals(expectedLocation[0], names.get(location).get(0)); Assertions.assertEquals(new Span(10, 12, location), spans.get(location).get(1)); Assertions.assertEquals(expectedLocation[1], names.get(location).get(1)); Assertions.assertEquals(new Span(28, 30, location), spans.get(location).get(2)); Assertions.assertEquals(expectedLocation[2], names.get(location).get(2)); Assertions.assertEquals(new Span(3, 4, location), spans.get(location).get(3)); Assertions.assertEquals(expectedLocation[3], names.get(location).get(3)); Assertions.assertEquals(new Span(5, 7, location), spans.get(location).get(4)); Assertions.assertEquals(expectedLocation[4], names.get(location).get(4)); Assertions.assertEquals(new Span(16, 18, location), spans.get(location).get(5)); Assertions.assertEquals(expectedLocation[5], names.get(location).get(5)); Assertions.assertEquals(new Span(1, 3, location), spans.get(location).get(6)); Assertions.assertEquals(expectedLocation[6], names.get(location).get(6)); Assertions.assertEquals(new Span(5, 9, location), spans.get(location).get(7)); Assertions.assertEquals(expectedLocation[7], names.get(location).get(7)); Assertions.assertEquals(new Span(0, 2, location), spans.get(location).get(8)); Assertions.assertEquals(expectedLocation[8], names.get(location).get(8)); Assertions.assertEquals(new Span(4, 6, location), spans.get(location).get(9)); Assertions.assertEquals(expectedLocation[9], names.get(location).get(9)); Assertions.assertEquals(new Span(10, 11, location), spans.get(location).get(10)); Assertions.assertEquals(expectedLocation[10], names.get(location).get(10)); Assertions.assertEquals(new Span(6, 8, location), spans.get(location).get(11)); Assertions.assertEquals(expectedLocation[11], names.get(location).get(11)); Assertions.assertEquals(new Span(4, 6, location), spans.get(location).get(12)); Assertions.assertEquals(expectedLocation[12], names.get(location).get(12)); Assertions.assertEquals(new Span(10, 11, location), spans.get(location).get(13)); Assertions.assertEquals(expectedLocation[13], names.get(location).get(13)); Assertions.assertEquals(new Span(12, 13, location), spans.get(location).get(14)); Assertions.assertEquals(expectedLocation[14], names.get(location).get(14)); Assertions.assertEquals(new Span(5, 9, location), spans.get(location).get(15)); Assertions.assertEquals(expectedLocation[15], names.get(location).get(15)); Assertions.assertEquals(new Span(11, 12, location), spans.get(location).get(16)); Assertions.assertEquals(expectedLocation[16], names.get(location).get(16)); Assertions.assertEquals(new Span(7, 15, organization), spans.get(organization).get(0)); Assertions.assertEquals(expectedOrganization[0], names.get(organization).get(0)); } @Test void testWithNameTypeAndInvalidData() { try (NameSampleDataStream sampleStream = new NameSampleDataStream( ObjectStreamUtils.createObjectStream(" Name "))) { sampleStream.read(); Assertions.fail(); } catch (IOException expected) { // the read above is expected to throw an exception } try (NameSampleDataStream sampleStream = new NameSampleDataStream( ObjectStreamUtils.createObjectStream( " Name "))) { sampleStream.read(); Assertions.fail(); } catch (IOException expected) { // the read above is expected to throw an exception } } @Test void testClearAdaptiveData() throws IOException { String trainingData = "a\n" + "b\n" + "c\n" + "\n" + "d\n"; ObjectStream untokenizedLineStream = new PlainTextByLineStream( new MockInputStreamFactory(trainingData), StandardCharsets.UTF_8); ObjectStream trainingStream = new NameSampleDataStream(untokenizedLineStream); Assertions.assertFalse(trainingStream.read().isClearAdaptiveDataSet()); Assertions.assertFalse(trainingStream.read().isClearAdaptiveDataSet()); Assertions.assertFalse(trainingStream.read().isClearAdaptiveDataSet()); Assertions.assertTrue(trainingStream.read().isClearAdaptiveDataSet()); Assertions.assertNull(trainingStream.read()); trainingStream.close(); } @Test void testHtmlNameSampleParsing() throws IOException { InputStreamFactory in = new ResourceAsStreamFactory(getClass(), "/opennlp/tools/namefind/html1.train"); NameSampleDataStream ds = new NameSampleDataStream( new PlainTextByLineStream(in, StandardCharsets.UTF_8)); NameSample ns = ds.read(); Assertions.assertEquals(1, ns.getSentence().length); Assertions.assertEquals("", ns.getSentence()[0]); ns = ds.read(); Assertions.assertEquals(1, ns.getSentence().length); Assertions.assertEquals("", ns.getSentence()[0]); ns = ds.read(); Assertions.assertEquals(1, ns.getSentence().length); Assertions.assertEquals("", ns.getSentence()[0]); ns = ds.read(); Assertions.assertEquals(1, ns.getSentence().length); Assertions.assertEquals("

    ", ns.getSentence()[0]); //
  • Advanced Integrated Pest Management
  • ns = ds.read(); Assertions.assertEquals(6, ns.getSentence().length); Assertions.assertEquals("
  • ", ns.getSentence()[0]); Assertions.assertEquals("Advanced", ns.getSentence()[1]); Assertions.assertEquals("Integrated", ns.getSentence()[2]); Assertions.assertEquals("Pest", ns.getSentence()[3]); Assertions.assertEquals("Management", ns.getSentence()[4]); Assertions.assertEquals("
  • ", ns.getSentence()[5]); Assertions.assertEquals(new Span(1, 5, organization), ns.getNames()[0]); //
  • Bay Cities Produce Co., Inc.
  • ns = ds.read(); Assertions.assertEquals(7, ns.getSentence().length); Assertions.assertEquals("
  • ", ns.getSentence()[0]); Assertions.assertEquals("Bay", ns.getSentence()[1]); Assertions.assertEquals("Cities", ns.getSentence()[2]); Assertions.assertEquals("Produce", ns.getSentence()[3]); Assertions.assertEquals("Co.,", ns.getSentence()[4]); Assertions.assertEquals("Inc.", ns.getSentence()[5]); Assertions.assertEquals("
  • ", ns.getSentence()[6]); Assertions.assertEquals(new Span(1, 6, organization), ns.getNames()[0]); ns = ds.read(); Assertions.assertEquals(1, ns.getSentence().length); Assertions.assertEquals("
", ns.getSentence()[0]); ns = ds.read(); Assertions.assertEquals(1, ns.getSentence().length); Assertions.assertEquals("", ns.getSentence()[0]); ns = ds.read(); Assertions.assertEquals(1, ns.getSentence().length); Assertions.assertEquals("", ns.getSentence()[0]); Assertions.assertNull(ds.read()); ds.close(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/NameSampleTest.java0100644 0000000 0000000 00000022401 14523004075 033155 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.Span; /** * This is the test class for {@link NameSample}. */ public class NameSampleTest { /** * Create a NameSample from scratch and validate it. * * @param useTypes if to use nametypes * @return the NameSample */ private static NameSample createSimpleNameSample(boolean useTypes) { String[] sentence = {"U", ".", "S", ".", "President", "Barack", "Obama", "is", "considering", "sending", "additional", "American", "forces", "to", "Afghanistan", "."}; Span[] names = {new Span(0, 4, "Location"), new Span(5, 7, "Person"), new Span(14, 15, "Location")}; NameSample nameSample; if (useTypes) { nameSample = new NameSample(sentence, names, false); } else { Span[] namesWithoutType = new Span[names.length]; for (int i = 0; i < names.length; i++) { namesWithoutType[i] = new Span(names[i].getStart(), names[i].getEnd()); } nameSample = new NameSample(sentence, namesWithoutType, false); } return nameSample; } @Test void testNameSampleSerDe() throws IOException { NameSample nameSample = createGoldSample(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream(byteArrayOutputStream); out.writeObject(nameSample); out.flush(); byte[] bytes = byteArrayOutputStream.toByteArray(); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); ObjectInput objectInput = new ObjectInputStream(byteArrayInputStream); NameSample deSerializedNameSample = null; try { deSerializedNameSample = (NameSample) objectInput.readObject(); } catch (ClassNotFoundException e) { // do nothing } Assertions.assertNotNull(deSerializedNameSample); Assertions.assertArrayEquals(nameSample.getSentence(), deSerializedNameSample.getSentence()); Assertions.assertArrayEquals(nameSample.getNames(), deSerializedNameSample.getNames()); Assertions.assertArrayEquals(nameSample.getAdditionalContext(), deSerializedNameSample.getAdditionalContext()); } /** * Test serialization of sequential spans. */ @Test void testSequentialSpans() { String[] sentence = {"A", "Place", "a", "time", "A", "Person", "."}; Span[] names = {new Span(0, 2, "Place"), new Span(2, 4, "Time"), new Span(4, 6, "Person")}; NameSample nameSample = new NameSample(sentence, names, false); Assertions.assertEquals( " A Place a time A Person .", nameSample.toString()); } /** * Test serialization of unsorted sequential spans. */ @Test void testUnsortedSequentialSpans() { String[] sentence = {"A", "Place", "a", "time", "A", "Person", "."}; Span[] names = {new Span(0, 2, "Place"), new Span(4, 6, "Person"), new Span(2, 4, "Time")}; NameSample nameSample = new NameSample(sentence, names, false); Assertions.assertEquals( " A Place a time A Person .", nameSample.toString()); } /** * Test if it fails to name spans are overlapping */ @Test void testOverlappingNameSpans() { Assertions.assertThrows(RuntimeException.class, () -> { String[] sentence = {"A", "Place", "a", "time", "A", "Person", "."}; Span[] names = {new Span(0, 2, "Place"), new Span(3, 5, "Person"), new Span(2, 4, "Time")}; new NameSample(sentence, names, false); }); } /** * Checks if could create a NameSample without NameTypes, generate the * string representation and validate it. */ @Test void testNoTypesToString() { String nameSampleStr = createSimpleNameSample(false).toString(); Assertions.assertEquals(" U . S . President Barack Obama " + " is considering " + "sending additional American forces to Afghanistan .", nameSampleStr); } /** * Checks if could create a NameSample with NameTypes, generate the * string representation and validate it. */ @Test void testWithTypesToString() throws Exception { String nameSampleStr = createSimpleNameSample(true).toString(); Assertions.assertEquals(" U . S . President " + " Barack Obama " + "is considering sending additional American forces to Afghanistan .", nameSampleStr); NameSample parsedSample = NameSample.parse(" U . S . " + "President Barack Obama is considering sending " + "additional American forces to Afghanistan .", false); Assertions.assertEquals(createSimpleNameSample(true), parsedSample); } /** * Checks that if the name is the last token in a sentence it is still outputed * correctly. */ @Test void testNameAtEnd() { String[] sentence = new String[] { "My", "name", "is", "Anna" }; NameSample sample = new NameSample(sentence, new Span[] {new Span(3, 4)}, false); Assertions.assertEquals("My name is Anna ", sample.toString()); } /** * Tests if an additional space is correctly treated as one space. * * @throws IOException Thrown if IO errors occurred. */ @Test void testParseWithAdditionalSpace() throws IOException { String line = " M . K . Schwitters ? Heartfield ?"; NameSample test = NameSample.parse(line, false); Assertions.assertEquals(8, test.getSentence().length); } /** * Checks if it accepts name type with some special characters */ @Test void testTypeWithSpecialChars() throws Exception { NameSample parsedSample = NameSample .parse( " U . S . " + "President Barack Obama is considering sending " + "additional American forces to Afghanistan .", false); Assertions.assertEquals(3, parsedSample.getNames().length); Assertions.assertEquals("type-1", parsedSample.getNames()[0].getType()); Assertions.assertEquals("type_2", parsedSample.getNames()[1].getType()); Assertions.assertEquals("type_3-/;.,&%$", parsedSample.getNames()[2].getType()); } /** * Test if it fails to parse empty type */ @Test void testMissingType() { Assertions.assertThrows(IOException.class, () -> NameSample.parse(" token ", false)); } /** * Test if it fails to parse type with space * */ @Test void testTypeWithSpace() { Assertions.assertThrows(IOException.class, () -> NameSample.parse(" token ", false)); } /** * Test if it fails to parse type with new line * */ @Test void testTypeWithNewLine() { Assertions.assertThrows(IOException.class, () -> NameSample.parse(" token ", false)); } /** * Test if it fails to parse type with : * */ @Test void testTypeWithInvalidChar1() { Assertions.assertThrows(IOException.class, () -> NameSample.parse(" token ", false)); } /** * Test if it fails to parse type with > * */ @Test void testTypeWithInvalidChar2() { Assertions.assertThrows(IOException.class, () -> NameSample.parse("a> token ", false)); } /** * Test if it fails to parse nested names * */ @Test void testNestedNameSpans() { Assertions.assertThrows(IOException.class, () -> NameSample.parse( " Kennedy City ", false)); } @Test void testEquals() { Assertions.assertNotSame(createGoldSample(), createGoldSample()); Assertions.assertEquals(createGoldSample(), createGoldSample()); Assertions.assertNotEquals(createGoldSample(), createPredSample()); Assertions.assertNotEquals(createPredSample(), new Object()); } public static NameSample createGoldSample() { return createSimpleNameSample(true); } public static NameSample createPredSample() { return createSimpleNameSample(false); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_namefind_NameSamp0100644 0000000 0000000 00000000163 14523004075 032544 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/NameSampleTypeFilterTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/NameSampleTypeFilterTest0100644 0000000 0000000 00000006445 14523004075 034257 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.io.ByteArrayInputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; public class NameSampleTypeFilterTest { private static NameSampleTypeFilter filter; private static final String text = " NATO Secretary - General " + " Anders Fogh Rasmussen made clear that despite an intensifying " + "insurgency and uncertainty over whether U . S . President " + " Barack Obama will send more troops , NATO " + "will remain in Afghanistan ."; private static final String person = "person"; private static final String organization = "organization"; @Test void testNoFilter() throws IOException { final String[] types = new String[] {}; filter = new NameSampleTypeFilter(types, sampleStream(text)); NameSample ns = filter.read(); Assertions.assertEquals(0, ns.getNames().length); } @Test void testSingleFilter() throws IOException { final String[] types = new String[] {organization}; filter = new NameSampleTypeFilter(types, sampleStream(text)); NameSample ns = filter.read(); Assertions.assertEquals(1, ns.getNames().length); Assertions.assertEquals(organization, ns.getNames()[0].getType()); } @Test void testMultiFilter() throws IOException { final String[] types = new String[] {person, organization}; filter = new NameSampleTypeFilter(types, sampleStream(text)); NameSample ns = filter.read(); Map> collect = Arrays.stream(ns.getNames()) .collect(Collectors.groupingBy(Span::getType)); Assertions.assertEquals(2, collect.size()); Assertions.assertEquals(2, collect.get(person).size()); Assertions.assertEquals(1, collect.get(organization).size()); } private ObjectStream sampleStream(String sampleText) throws IOException { InputStreamFactory in = () -> new ByteArrayInputStream(sampleText.getBytes(StandardCharsets.UTF_8)); return new NameSampleDataStream( new PlainTextByLineStream(in, StandardCharsets.UTF_8)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_namefind_RegexNam0100644 0000000 0000000 00000000165 14523004075 032553 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/RegexNameFinderFactoryTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/RegexNameFinderFactoryTe0100644 0000000 0000000 00000010237 14523004075 034203 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.Span; public class RegexNameFinderFactoryTest { private static RegexNameFinder regexNameFinder; private static final String text = "my email is opennlp@gmail.com and my phone num is" + " 123-234-5678 and i like" + " https://www.google.com and I visited MGRS 11sku528111 AKA 11S KU 528 111 and" + " DMS 45N 123W AKA" + " +45.1234, -123.12 AKA 45.1234N 123.12W AKA 45 30 N 50 30 W"; @BeforeEach void setUp() { regexNameFinder = RegexNameFinderFactory.getDefaultRegexNameFinders( RegexNameFinderFactory.DEFAULT_REGEX_NAME_FINDER.DEGREES_MIN_SEC_LAT_LON, RegexNameFinderFactory.DEFAULT_REGEX_NAME_FINDER.EMAIL, RegexNameFinderFactory.DEFAULT_REGEX_NAME_FINDER.MGRS, RegexNameFinderFactory.DEFAULT_REGEX_NAME_FINDER.USA_PHONE_NUM, RegexNameFinderFactory.DEFAULT_REGEX_NAME_FINDER.URL); } @Test void testEmail() { String[] tokens = WhitespaceTokenizer.INSTANCE.tokenize(text); Span[] find = regexNameFinder.find(tokens); List spanList = Arrays.asList(find); Assertions.assertTrue(spanList.contains(new Span(3, 4, "EMAIL"))); Span emailSpan = new Span(3, 4, "EMAIL"); Assertions.assertEquals("opennlp@gmail.com", tokens[emailSpan.getStart()]); } @Test void testPhoneNumber() { String[] tokens = WhitespaceTokenizer.INSTANCE.tokenize(text); Span[] find = regexNameFinder.find(tokens); List spanList = Arrays.asList(find); Span phoneSpan = new Span(9, 10, "PHONE_NUM"); Assertions.assertTrue(spanList.contains(phoneSpan)); Assertions.assertEquals("123-234-5678", tokens[phoneSpan.getStart()]); } @Test void testURL() { String[] tokens = WhitespaceTokenizer.INSTANCE.tokenize(text); Span[] find = regexNameFinder.find(tokens); List spanList = Arrays.asList(find); Span urlSpan = new Span(13, 14, "URL"); Assertions.assertTrue(spanList.contains(urlSpan)); Assertions.assertEquals("https://www.google.com", tokens[urlSpan.getStart()]); } @Test void testLatLong() { String[] tokens = WhitespaceTokenizer.INSTANCE.tokenize(text); Span[] find = regexNameFinder.find(tokens); List spanList = Arrays.asList(find); Span latLongSpan1 = new Span(22, 24, "DEGREES_MIN_SEC_LAT_LON"); Span latLongSpan2 = new Span(35, 41, "DEGREES_MIN_SEC_LAT_LON"); Assertions.assertTrue(spanList.contains(latLongSpan1)); Assertions.assertTrue(spanList.contains(latLongSpan2)); Assertions.assertEquals("528", tokens[latLongSpan1.getStart()]); Assertions.assertEquals("45", tokens[latLongSpan2.getStart()]); } @Test void testMgrs() { String[] tokens = WhitespaceTokenizer.INSTANCE.tokenize(text); Span[] find = regexNameFinder.find(tokens); List spanList = Arrays.asList(find); Span mgrsSpan1 = new Span(18, 19, "MGRS"); Span mgrsSpan2 = new Span(20, 24, "MGRS"); Assertions.assertTrue(spanList.contains(mgrsSpan1)); Assertions.assertTrue(spanList.contains(mgrsSpan2)); Assertions.assertEquals("11SKU528111".toLowerCase(), tokens[mgrsSpan1.getStart()]); Assertions.assertEquals("11S", tokens[mgrsSpan2.getStart()]); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_namefind_RegexNam0100644 0000000 0000000 00000000156 14523004075 032553 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/RegexNameFinderTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/RegexNameFinderTest.java0100644 0000000 0000000 00000005603 14523004075 034143 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.util.HashMap; import java.util.Map; import java.util.regex.Pattern; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.Span; /** * Tests for the {@link RegexNameFinder} class. */ public class RegexNameFinderTest { @Test void testFindSingleTokenPattern() { Pattern testPattern = Pattern.compile("test"); String[] sentence = new String[] {"a", "test", "b", "c"}; Pattern[] patterns = new Pattern[] {testPattern}; Map regexMap = new HashMap<>(); String type = "testtype"; regexMap.put(type, patterns); RegexNameFinder finder = new RegexNameFinder(regexMap); Span[] result = finder.find(sentence); Assertions.assertEquals(1, result.length); Assertions.assertEquals(1, result[0].getStart()); Assertions.assertEquals(2, result[0].getEnd()); } @Test void testFindTokenizdPattern() { Pattern testPattern = Pattern.compile("[0-9]+ year"); String[] sentence = new String[] {"a", "80", "year", "b", "c"}; Pattern[] patterns = new Pattern[] {testPattern}; Map regexMap = new HashMap<>(); String type = "match"; regexMap.put(type, patterns); RegexNameFinder finder = new RegexNameFinder(regexMap); Span[] result = finder.find(sentence); Assertions.assertEquals(1, result.length); Assertions.assertEquals(1, result[0].getStart()); Assertions.assertEquals(3, result[0].getEnd()); Assertions.assertEquals("match", result[0].getType()); } @Test void testFindMatchingPatternWithoutMatchingTokenBounds() { Pattern testPattern = Pattern.compile("[0-8] year"); // does match "0 year" String[] sentence = new String[] {"a", "80", "year", "c"}; Pattern[] patterns = new Pattern[] {testPattern}; Map regexMap = new HashMap<>(); String type = "testtype"; regexMap.put(type, patterns); RegexNameFinder finder = new RegexNameFinder(regexMap); Span[] result = finder.find(sentence); Assertions.assertEquals(0, result.length); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_namefind_TokenNam0100644 0000000 0000000 00000000174 14523004075 032561 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/TokenNameFinderCrossValidatorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/TokenNameFinderCrossVali0100644 0000000 0000000 00000010571 14523004075 034217 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.io.ByteArrayOutputStream; import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.Map; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.cmdline.namefind.NameEvaluationErrorListener; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.InsufficientTrainingDataException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.ModelType; public class TokenNameFinderCrossValidatorTest { private final String TYPE = null; @Test /* * Test that reproduces jira OPENNLP-463 */ void testWithNullResources() throws Exception { InputStreamFactory in = new ResourceAsStreamFactory(getClass(), "/opennlp/tools/namefind/AnnotatedSentences.txt"); ObjectStream sampleStream = new NameSampleDataStream( new PlainTextByLineStream(in, StandardCharsets.ISO_8859_1)); TrainingParameters mlParams = new TrainingParameters(); mlParams.put(TrainingParameters.ITERATIONS_PARAM, 70); mlParams.put(TrainingParameters.CUTOFF_PARAM, 1); mlParams.put(TrainingParameters.ALGORITHM_PARAM, ModelType.MAXENT.toString()); TokenNameFinderCrossValidator cv = new TokenNameFinderCrossValidator("eng", TYPE, mlParams, null, (TokenNameFinderEvaluationMonitor) null); cv.evaluate(sampleStream, 2); Assertions.assertNotNull(cv.getFMeasure()); } @Test /* * Test that tries to reproduce jira OPENNLP-466 */ void testWithNameEvaluationErrorListener() throws Exception { InputStreamFactory in = new ResourceAsStreamFactory(getClass(), "/opennlp/tools/namefind/AnnotatedSentences.txt"); ObjectStream sampleStream = new NameSampleDataStream( new PlainTextByLineStream(in, StandardCharsets.ISO_8859_1)); TrainingParameters mlParams = new TrainingParameters(); mlParams.put(TrainingParameters.ITERATIONS_PARAM, 70); mlParams.put(TrainingParameters.CUTOFF_PARAM, 1); mlParams.put(TrainingParameters.ALGORITHM_PARAM, ModelType.MAXENT.toString()); ByteArrayOutputStream out = new ByteArrayOutputStream(); NameEvaluationErrorListener listener = new NameEvaluationErrorListener(out); Map resources = Collections.emptyMap(); TokenNameFinderCrossValidator cv = new TokenNameFinderCrossValidator("eng", TYPE, mlParams, null, resources, listener); cv.evaluate(sampleStream, 2); Assertions.assertTrue(out.size() > 0); Assertions.assertNotNull(cv.getFMeasure()); } @Test void testWithInsufficientData() { Assertions.assertThrows(InsufficientTrainingDataException.class, () -> { InputStreamFactory in = new ResourceAsStreamFactory(getClass(), "/opennlp/tools/namefind/AnnotatedSentencesInsufficient.txt"); ObjectStream sampleStream = new NameSampleDataStream( new PlainTextByLineStream(in, StandardCharsets.ISO_8859_1)); TrainingParameters mlParams = new TrainingParameters(); mlParams.put(TrainingParameters.ITERATIONS_PARAM, 70); mlParams.put(TrainingParameters.CUTOFF_PARAM, 1); mlParams.put(TrainingParameters.ALGORITHM_PARAM, ModelType.MAXENT.toString()); TokenNameFinderCrossValidator cv = new TokenNameFinderCrossValidator("eng", TYPE, mlParams, null, (TokenNameFinderEvaluationMonitor) null); cv.evaluate(sampleStream, 2); }); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_namefind_TokenNam0100644 0000000 0000000 00000000167 14523004075 032563 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/TokenNameFinderEvaluatorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/TokenNameFinderEvaluator0100644 0000000 0000000 00000006612 14523004075 034255 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.cmdline.namefind.NameEvaluationErrorListener; import opennlp.tools.util.Span; import static org.mockito.Mockito.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; /** * This is the test class for {@link TokenNameFinderEvaluator}. */ public class TokenNameFinderEvaluatorTest { /** * Return a dummy name finder that always return something expected */ public TokenNameFinder mockTokenNameFinder(Span[] ret) { TokenNameFinder mockInstance = mock(TokenNameFinder.class); when(mockInstance.find(any(String[].class))).thenReturn(ret); return mockInstance; } @Test void testPositive() { OutputStream stream = new ByteArrayOutputStream(); TokenNameFinderEvaluationMonitor listener = new NameEvaluationErrorListener(stream); Span[] pred = createSimpleNameSampleA().getNames(); // Construct mock object TokenNameFinderEvaluator eval = new TokenNameFinderEvaluator(mockTokenNameFinder(pred), listener); eval.evaluateSample(createSimpleNameSampleA()); Assertions.assertEquals(1.0, eval.getFMeasure().getFMeasure()); Assertions.assertEquals(0, stream.toString().length()); } @Test void testNegative() { OutputStream stream = new ByteArrayOutputStream(); TokenNameFinderEvaluationMonitor listener = new NameEvaluationErrorListener(stream); Span[] pred = createSimpleNameSampleB().getNames(); // Construct mock object TokenNameFinderEvaluator eval = new TokenNameFinderEvaluator(mockTokenNameFinder(pred), listener); eval.evaluateSample(createSimpleNameSampleA()); Assertions.assertEquals(0.8, eval.getFMeasure().getFMeasure()); Assertions.assertNotSame(0, stream.toString().length()); } private static final String[] sentence = {"U", ".", "S", ".", "President", "Barack", "Obama", "is", "considering", "sending", "additional", "American", "forces", "to", "Afghanistan", "."}; private static NameSample createSimpleNameSampleA() { Span[] names = {new Span(0, 4, "Location"), new Span(5, 7, "Person"), new Span(14, 15, "Location")}; NameSample nameSample; nameSample = new NameSample(sentence, names, false); return nameSample; } private static NameSample createSimpleNameSampleB() { Span[] names = {new Span(0, 4, "Location"), new Span(14, 15, "Location")}; NameSample nameSample; nameSample = new NameSample(sentence, names, false); return nameSample; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_namefind_TokenNam0100644 0000000 0000000 00000000163 14523004075 032557 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/TokenNameFinderModelTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/namefind/TokenNameFinderModelTest0100644 0000000 0000000 00000016271 14523004075 034215 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.namefind; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URISyntaxException; import java.net.URL; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; import java.util.Map; import java.util.stream.Collectors; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.AbstractModelLoaderTest; import opennlp.tools.EnabledWhenCDNAvailable; import opennlp.tools.cmdline.TerminateToolException; import opennlp.tools.cmdline.namefind.TokenNameFinderTrainerTool; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSTaggerMETest; import opennlp.tools.util.FileUtil; import opennlp.tools.util.MockInputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.ModelType; public class TokenNameFinderModelTest extends AbstractModelLoaderTest { @Test void testNERWithPOSModel() throws IOException { // create a resources folder Path resourcesFolder = Files.createTempDirectory("resources").toAbsolutePath(); // save a POS model there POSModel posModel = POSTaggerMETest.trainPOSModel(ModelType.MAXENT); Assertions.assertNotNull(posModel); File posModelFile = new File(resourcesFolder.toFile(), "pos-model.bin"); posModel.serialize(posModelFile); Assertions.assertTrue(posModelFile.exists()); // load feature generator xml bytes try (InputStream fgInputStream = this.getClass().getResourceAsStream("ner-pos-features.xml"); BufferedReader buffers = new BufferedReader(new InputStreamReader(fgInputStream))) { String featureGeneratorString = buffers.lines().collect(Collectors.joining("\n")); // create a featuregenerator file Path featureGenerator = Files.createTempFile("ner-featuregen", ".xml"); Files.write(featureGenerator, featureGeneratorString.getBytes()); Map resources; try { resources = TokenNameFinderTrainerTool.loadResources(resourcesFolder.toFile(), featureGenerator.toAbsolutePath().toFile()); } catch (IOException e) { throw new TerminateToolException(-1, e.getMessage(), e); } finally { Files.delete(featureGenerator); } // train a name finder ObjectStream sampleStream = new NameSampleDataStream( new PlainTextByLineStream(new MockInputStreamFactory( new File("opennlp/tools/namefind/voa1.train")), StandardCharsets.UTF_8)); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, 70); params.put(TrainingParameters.CUTOFF_PARAM, 1); TokenNameFinderModel nameFinderModel = NameFinderME.train("en", null, sampleStream, params, TokenNameFinderFactory.create(null, featureGeneratorString.getBytes(), resources, new BioCodec())); File model = Files.createTempFile("nermodel", ".bin").toFile(); try (FileOutputStream modelOut = new FileOutputStream(model)) { nameFinderModel.serialize(modelOut); Assertions.assertTrue(model.exists()); } finally { Assertions.assertTrue(model.delete()); FileUtil.deleteDirectory(resourcesFolder.toFile()); } } } /* * OPENNLP-1369 */ @EnabledWhenCDNAvailable(hostname = "opennlp.sourceforge.net") @Test void testNERWithPOSModelV15() throws IOException, URISyntaxException { // 0. Download model from sourceforge and place at the right location final String modelName = "pt-pos-perceptron.bin"; downloadVersion15Model(modelName); final Path model = OPENNLP_DIR.resolve(modelName); final Path resourcesFolder = Files.createTempDirectory("resources").toAbsolutePath(); Assertions.assertNotNull(model); Assertions.assertNotNull(resourcesFolder); // 1. Copy the downloaded model to the temporary resource folder, so it can be referenced from // the feature gen xml file. final Path copy = resourcesFolder.resolve(modelName); Files.copy(OPENNLP_DIR.resolve(modelName), copy, StandardCopyOption.REPLACE_EXISTING); Assertions.assertTrue(copy.toFile().exists()); // 2. Load feature generator xml bytes final URL featureGeneratorXmlUrl = this.getClass().getResource("ner-pos-features-v15.xml"); Assertions.assertNotNull(featureGeneratorXmlUrl); final Path featureGeneratorXmlPath = Path.of(featureGeneratorXmlUrl.toURI()); Assertions.assertNotNull(featureGeneratorXmlPath); final Path featureGenerator = Files.createTempFile("ner-featuregen-v15", ".xml"); Assertions.assertNotNull(featureGenerator); Files.copy(featureGeneratorXmlPath, featureGenerator, StandardCopyOption.REPLACE_EXISTING); Assertions.assertTrue(featureGenerator.toFile().exists()); Map resources; try { resources = TokenNameFinderTrainerTool.loadResources(resourcesFolder.toFile(), featureGenerator.toAbsolutePath().toFile()); } catch (IOException e) { throw new TerminateToolException(-1, e.getMessage(), e); } finally { Files.delete(featureGenerator); } // train a name finder ObjectStream sampleStream = new NameSampleDataStream( new PlainTextByLineStream(new MockInputStreamFactory( new File("opennlp/tools/namefind/voa1.train")), StandardCharsets.UTF_8)); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ITERATIONS_PARAM, 70); params.put(TrainingParameters.CUTOFF_PARAM, 1); TokenNameFinderModel nameFinderModel = NameFinderME.train("en", null, sampleStream, params, TokenNameFinderFactory.create(null, Files.readString(featureGeneratorXmlPath, StandardCharsets.UTF_8) .getBytes(StandardCharsets.UTF_8), resources, new BioCodec())); File nerModel = Files.createTempFile("nermodel", ".bin").toFile(); try (FileOutputStream modelOut = new FileOutputStream(nerModel)) { nameFinderModel.serialize(modelOut); Assertions.assertTrue(nerModel.exists()); } finally { Assertions.assertTrue(nerModel.delete()); FileUtil.deleteDirectory(resourcesFolder.toFile()); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ngram/NGramCharModelTest.java0100644 0000000 0000000 00000006007 14523004075 033245 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ngram; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * Tests for {@link NGramCharModel} */ public class NGramCharModelTest { @Test void testZeroGetCount() { NGramCharModel ngramModel = new NGramCharModel(); int count = ngramModel.getCount(""); Assertions.assertEquals(0, count); Assertions.assertEquals(0, ngramModel.size()); } @Test void testZeroGetCount2() { NGramCharModel ngramModel = new NGramCharModel(); ngramModel.add("the"); int count = ngramModel.getCount("fox"); Assertions.assertEquals(0, count); Assertions.assertEquals(1, ngramModel.size()); } @Test void testAdd() { NGramCharModel ngramModel = new NGramCharModel(); ngramModel.add("fox"); int count = ngramModel.getCount("the"); Assertions.assertEquals(0, count); Assertions.assertEquals(1, ngramModel.size()); } @Test void testAdd1() { NGramCharModel ngramModel = new NGramCharModel(); ngramModel.add("the"); int count = ngramModel.getCount("the"); Assertions.assertEquals(1, count); Assertions.assertEquals(1, ngramModel.size()); } @Test void testAdd2() { NGramCharModel ngramModel = new NGramCharModel(); ngramModel.add("the", 1, 3); int count = ngramModel.getCount("th"); Assertions.assertEquals(1, count); Assertions.assertEquals(6, ngramModel.size()); } @Test void testRemove() { NGramCharModel ngramModel = new NGramCharModel(); String ngram = "the"; ngramModel.add(ngram); ngramModel.remove(ngram); Assertions.assertEquals(0, ngramModel.size()); } @Test void testContains() { NGramCharModel ngramModel = new NGramCharModel(); String token = "the"; ngramModel.add(token); Assertions.assertFalse(ngramModel.contains("fox")); } @Test void testContains2() { NGramCharModel ngramModel = new NGramCharModel(); String token = "the"; ngramModel.add(token, 1, 3); Assertions.assertTrue(ngramModel.contains("the")); } @Test void testCutoff1() { NGramCharModel ngramModel = new NGramCharModel(); String token = "the"; ngramModel.add(token, 1, 3); ngramModel.cutoff(2, 4); Assertions.assertEquals(0, ngramModel.size()); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ngram/NGramGeneratorTest.java0100644 0000000 0000000 00000013161 14523004075 033334 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ngram; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class NGramGeneratorTest { @Test void generateListTest1() { final List input = Arrays.asList("This", "is", "a", "sentence"); final int window = 1; final String separator = "-"; final List ngrams = NGramGenerator.generate(input, window, separator); Assertions.assertEquals(4, ngrams.size()); Assertions.assertEquals("This", ngrams.get(0)); Assertions.assertEquals("is", ngrams.get(1)); Assertions.assertEquals("a", ngrams.get(2)); Assertions.assertEquals("sentence", ngrams.get(3)); } @Test void generateListTest2() { final List input = Arrays.asList("This", "is", "a", "sentence"); final int window = 2; final String separator = "-"; final List ngrams = NGramGenerator.generate(input, window, separator); Assertions.assertEquals(3, ngrams.size()); Assertions.assertEquals("This-is", ngrams.get(0)); Assertions.assertEquals("is-a", ngrams.get(1)); Assertions.assertEquals("a-sentence", ngrams.get(2)); } @Test void generateListTest3() { final List input = Arrays.asList("This", "is", "a", "sentence"); final int window = 3; final String separator = "-"; final List ngrams = NGramGenerator.generate(input, window, separator); Assertions.assertEquals(2, ngrams.size()); Assertions.assertEquals("This-is-a", ngrams.get(0)); Assertions.assertEquals("is-a-sentence", ngrams.get(1)); } @Test void generateListTest4() { final List input = Arrays.asList("This", "is", "a", "sentence"); final int window = 4; final String separator = "-"; final List ngrams = NGramGenerator.generate(input, window, separator); Assertions.assertEquals(1, ngrams.size()); Assertions.assertEquals("This-is-a-sentence", ngrams.get(0)); } @Test void generateCharTest1() { final char[] input = "Test".toCharArray(); final int window = 1; final String separator = "-"; final List ngrams = NGramGenerator.generate(input, window, separator); Assertions.assertEquals(4, ngrams.size()); Assertions.assertEquals("T", ngrams.get(0)); Assertions.assertEquals("e", ngrams.get(1)); Assertions.assertEquals("s", ngrams.get(2)); Assertions.assertEquals("t", ngrams.get(3)); } @Test void generateCharTest2() { final char[] input = "Test".toCharArray(); final int window = 2; final String separator = "-"; final List ngrams = NGramGenerator.generate(input, window, separator); Assertions.assertEquals(3, ngrams.size()); Assertions.assertEquals("T-e", ngrams.get(0)); Assertions.assertEquals("e-s", ngrams.get(1)); Assertions.assertEquals("s-t", ngrams.get(2)); } @Test void generateCharTest3() { final char[] input = "Test".toCharArray(); final int window = 3; final String separator = "-"; final List ngrams = NGramGenerator.generate(input, window, separator); Assertions.assertEquals(2, ngrams.size()); Assertions.assertEquals("T-e-s", ngrams.get(0)); Assertions.assertEquals("e-s-t", ngrams.get(1)); } @Test void generateCharTest4() { final char[] input = "Test".toCharArray(); final int window = 4; final String separator = "-"; final List ngrams = NGramGenerator.generate(input, window, separator); Assertions.assertEquals(1, ngrams.size()); Assertions.assertEquals("T-e-s-t", ngrams.get(0)); } @Test void generateCharTest() { final char[] input = "Test again".toCharArray(); final int window = 4; final String separator = "-"; final List ngrams = NGramGenerator.generate(input, window, separator); Assertions.assertEquals(7, ngrams.size()); Assertions.assertEquals(("T-e-s-t"), ngrams.get(0)); Assertions.assertEquals(("e-s-t- "), ngrams.get(1)); Assertions.assertEquals(("s-t- -a"), ngrams.get(2)); Assertions.assertEquals(("t- -a-g"), ngrams.get(3)); Assertions.assertEquals((" -a-g-a"), ngrams.get(4)); Assertions.assertEquals(("a-g-a-i"), ngrams.get(5)); Assertions.assertEquals(("g-a-i-n"), ngrams.get(6)); } @Test void generateLargerWindowThanListTest() { final List input = Arrays.asList("One", "two"); final int window = 3; final String separator = "-"; final List ngrams = NGramGenerator.generate(input, window, separator); Assertions.assertTrue(ngrams.isEmpty()); } @Test void emptyTest() { final List input = new ArrayList<>(); final int window = 2; final String separator = "-"; final List ngrams = NGramGenerator.generate(input, window, separator); Assertions.assertTrue(ngrams.isEmpty()); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ngram/NGramModelTest.java0100644 0000000 0000000 00000021074 14523004075 032450 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ngram; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.StringList; /** * Tests for {@link opennlp.tools.ngram.NGramModel} */ public class NGramModelTest { @Test void testZeroGetCount() { NGramModel ngramModel = new NGramModel(); int count = ngramModel.getCount(new StringList("")); Assertions.assertEquals(0, count); Assertions.assertEquals(0, ngramModel.size()); } @Test void testZeroGetCount2() { NGramModel ngramModel = new NGramModel(); ngramModel.add(new StringList("the", "bro", "wn")); int count = ngramModel.getCount(new StringList("fox")); Assertions.assertEquals(0, count); Assertions.assertEquals(1, ngramModel.size()); } @Test void testAdd() { NGramModel ngramModel = new NGramModel(); ngramModel.add(new StringList("the", "bro", "wn")); int count = ngramModel.getCount(new StringList("the")); Assertions.assertEquals(0, count); Assertions.assertEquals(1, ngramModel.size()); } @Test void testAdd1() { NGramModel ngramModel = new NGramModel(); ngramModel.add(new StringList("the", "bro", "wn")); int count = ngramModel.getCount(new StringList("the", "bro", "wn")); Assertions.assertEquals(1, count); Assertions.assertEquals(1, ngramModel.size()); } @Test void testAdd2() { NGramModel ngramModel = new NGramModel(); ngramModel.add(new StringList("the", "bro", "wn"), 2, 3); int count = ngramModel.getCount(new StringList("the", "bro", "wn")); Assertions.assertEquals(1, count); Assertions.assertEquals(3, ngramModel.size()); } @Test void testAdd3() { NGramModel ngramModel = new NGramModel(); ngramModel.add(new StringList("the", "brown", "fox"), 2, 3); int count = ngramModel.getCount(new StringList("the", "brown", "fox")); Assertions.assertEquals(1, count); count = ngramModel.getCount(new StringList("the", "brown")); Assertions.assertEquals(1, count); count = ngramModel.getCount(new StringList("brown", "fox")); Assertions.assertEquals(1, count); Assertions.assertEquals(3, ngramModel.size()); } @Test void testRemove() { NGramModel ngramModel = new NGramModel(); StringList tokens = new StringList("the", "bro", "wn"); ngramModel.add(tokens); ngramModel.remove(tokens); Assertions.assertEquals(0, ngramModel.size()); } @Test void testContains() { NGramModel ngramModel = new NGramModel(); StringList tokens = new StringList("the", "bro", "wn"); ngramModel.add(tokens); Assertions.assertFalse(ngramModel.contains(new StringList("the"))); } @Test void testContains2() { NGramModel ngramModel = new NGramModel(); StringList tokens = new StringList("the", "bro", "wn"); ngramModel.add(tokens, 1, 3); Assertions.assertTrue(ngramModel.contains(new StringList("the"))); } @Test void testNumberOfGrams() { NGramModel ngramModel = new NGramModel(); StringList tokens = new StringList("the", "bro", "wn"); ngramModel.add(tokens, 1, 3); Assertions.assertEquals(6, ngramModel.numberOfGrams()); } @Test void testCutoff1() { NGramModel ngramModel = new NGramModel(); StringList tokens = new StringList("the", "brown", "fox", "jumped"); ngramModel.add(tokens, 1, 3); ngramModel.cutoff(2, 4); Assertions.assertEquals(0, ngramModel.size()); } @Test void testCutoff2() { NGramModel ngramModel = new NGramModel(); StringList tokens = new StringList("the", "brown", "fox", "jumped"); ngramModel.add(tokens, 1, 3); ngramModel.cutoff(1, 3); Assertions.assertEquals(9, ngramModel.size()); } @Test void testToDictionary() { NGramModel ngramModel = new NGramModel(); StringList tokens = new StringList("the", "brown", "fox", "jumped"); ngramModel.add(tokens, 1, 3); tokens = new StringList("the", "brown", "Fox", "jumped"); ngramModel.add(tokens, 1, 3); Dictionary dictionary = ngramModel.toDictionary(); Assertions.assertNotNull(dictionary); Assertions.assertEquals(9, dictionary.size()); Assertions.assertEquals(1, dictionary.getMinTokenCount()); Assertions.assertEquals(3, dictionary.getMaxTokenCount()); } @Test void testToDictionary1() { NGramModel ngramModel = new NGramModel(); StringList tokens = new StringList("the", "brown", "fox", "jumped"); ngramModel.add(tokens, 1, 3); tokens = new StringList("the", "brown", "Fox", "jumped"); ngramModel.add(tokens, 1, 3); Dictionary dictionary = ngramModel.toDictionary(true); Assertions.assertNotNull(dictionary); Assertions.assertEquals(14, dictionary.size()); Assertions.assertEquals(1, dictionary.getMinTokenCount()); Assertions.assertEquals(3, dictionary.getMaxTokenCount()); } @Test void testInvalidFormat() { Assertions.assertThrows(InvalidFormatException.class, () -> { InputStream stream = new ByteArrayInputStream("inputstring".getBytes(StandardCharsets.UTF_8)); NGramModel ngramModel = new NGramModel(stream); stream.close(); ngramModel.toDictionary(true); }); } @Test void testFromFile() throws Exception { try (InputStream stream = getClass().getResourceAsStream("/opennlp/tools/ngram/ngram-model.xml")) { NGramModel ngramModel = new NGramModel(stream); Dictionary dictionary = ngramModel.toDictionary(true); Assertions.assertNotNull(dictionary); Assertions.assertEquals(14, dictionary.size()); Assertions.assertEquals(3, dictionary.getMaxTokenCount()); Assertions.assertEquals(1, dictionary.getMinTokenCount()); } } @Test void testSerialize() throws Exception { try (InputStream stream = getClass().getResourceAsStream("/opennlp/tools/ngram/ngram-model.xml"); ByteArrayOutputStream baos = new ByteArrayOutputStream()) { NGramModel ngramModel1 = new NGramModel(stream); Dictionary dictionary = ngramModel1.toDictionary(true); Assertions.assertNotNull(dictionary); Assertions.assertEquals(14, dictionary.size()); Assertions.assertEquals(3, dictionary.getMaxTokenCount()); Assertions.assertEquals(1, dictionary.getMinTokenCount()); ngramModel1.serialize(baos); final String serialized = baos.toString(Charset.defaultCharset()); InputStream inputStream = new ByteArrayInputStream(serialized.getBytes(StandardCharsets.UTF_8)); NGramModel ngramModel2 = new NGramModel(inputStream); Assertions.assertEquals(ngramModel2.numberOfGrams(), ngramModel2.numberOfGrams()); Assertions.assertEquals(ngramModel2.size(), ngramModel2.size()); dictionary = ngramModel2.toDictionary(true); Assertions.assertNotNull(dictionary); Assertions.assertEquals(14, dictionary.size()); Assertions.assertEquals(3, dictionary.getMaxTokenCount()); Assertions.assertEquals(1, dictionary.getMinTokenCount()); } } @Test void testFromInvalidFileMissingCount() { Assertions.assertThrows(InvalidFormatException.class, () -> { try (InputStream stream = getClass().getResourceAsStream( "/opennlp/tools/ngram/ngram-model-no-count.xml")) { NGramModel ngramModel = new NGramModel(stream); ngramModel.toDictionary(true); } }); } @Test void testFromInvalidFileNotANumber() { Assertions.assertThrows(InvalidFormatException.class, () -> { try (InputStream stream = getClass().getResourceAsStream( "/opennlp/tools/ngram/ngram-model-not-a-number.xml")) { NGramModel ngramModel = new NGramModel(stream); ngramModel.toDictionary(true); } }); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/ngram/NGramUtilsTest.java0100644 0000000 0000000 00000010633 14523004075 032507 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.ngram; import java.util.Collection; import java.util.LinkedList; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.StringList; /** * Tests for {@link NGramUtils} */ public class NGramUtilsTest { @Test void testBigramMLProbability() { Collection set = new LinkedList<>(); set.add(new StringList("", "I", "am", "Sam", "")); set.add(new StringList("", "Sam", "I", "am", "")); set.add(new StringList("", "I", "do", "not", "like", "green", "eggs", "and", "ham", "")); set.add(new StringList("")); Double d = NGramUtils.calculateBigramMLProbability("", "I", set); Assertions.assertEquals(Double.valueOf(0.6666666666666666d), d); d = NGramUtils.calculateBigramMLProbability("Sam", "", set); Assertions.assertEquals(Double.valueOf(0.5d), d); d = NGramUtils.calculateBigramMLProbability("", "Sam", set); Assertions.assertEquals(Double.valueOf(0.3333333333333333d), d); } @Test void testTrigramMLProbability() { Collection set = new LinkedList<>(); set.add(new StringList("", "I", "am", "Sam", "")); set.add(new StringList("", "Sam", "I", "am", "")); set.add(new StringList("", "I", "do", "not", "like", "green", "eggs", "and", "ham", "")); set.add(new StringList("")); Double d = NGramUtils.calculateTrigramMLProbability("I", "am", "Sam", set); Assertions.assertEquals(Double.valueOf(0.5), d); d = NGramUtils.calculateTrigramMLProbability("Sam", "I", "am", set); Assertions.assertEquals(Double.valueOf(1d), d); } @Test void testNgramMLProbability() { Collection set = new LinkedList<>(); set.add(new StringList("", "I", "am", "Sam", "")); set.add(new StringList("", "Sam", "I", "am", "")); set.add(new StringList("", "I", "do", "not", "like", "green", "eggs", "and", "ham", "")); set.add(new StringList("")); Double d = NGramUtils.calculateNgramMLProbability(new StringList("I", "am", "Sam"), set); Assertions.assertEquals(Double.valueOf(0.5), d); d = NGramUtils.calculateNgramMLProbability(new StringList("Sam", "I", "am"), set); Assertions.assertEquals(Double.valueOf(1d), d); } @Test void testLinearInterpolation() { Collection set = new LinkedList<>(); set.add(new StringList("the", "green", "book", "STOP")); set.add(new StringList("my", "blue", "book", "STOP")); set.add(new StringList("his", "green", "house", "STOP")); set.add(new StringList("book", "STOP")); Double lambda = 1d / 3d; Double d = NGramUtils.calculateTrigramLinearInterpolationProbability("the", "green", "book", set, lambda, lambda, lambda); Assertions.assertNotNull(d); Assertions.assertEquals(Double.valueOf(0.5714285714285714d), d, "wrong result"); } @Test void testLinearInterpolation2() { Collection set = new LinkedList<>(); set.add(new StringList("D", "N", "V", "STOP")); set.add(new StringList("D", "N", "V", "STOP")); Double lambda = 1d / 3d; Double d = NGramUtils.calculateTrigramLinearInterpolationProbability("N", "V", "STOP", set, lambda, lambda, lambda); Assertions.assertNotNull(d); Assertions.assertEquals(Double.valueOf(0.75d), d, "wrong result"); } @Test void testGetNGrams() { Collection nGrams = NGramUtils.getNGrams(new StringList("I", "saw", "brown", "fox"), 2); Assertions.assertEquals(3, nGrams.size()); nGrams = NGramUtils.getNGrams(new StringList("I", "saw", "brown", "fox"), 3); Assertions.assertEquals(2, nGrams.size()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_parser_AbstractPa0100644 0000000 0000000 00000000160 14523004075 032577 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/AbstractParserModelTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/AbstractParserModelTest.ja0100644 0000000 0000000 00000023466 14523004075 034234 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.stream.Stream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.ValueSource; import opennlp.tools.tokenize.WhitespaceTokenizer; import opennlp.tools.util.Span; /** * Common test class for {@link ParserModel}-driven test cases. */ public abstract class AbstractParserModelTest { /** * @return Retrieves a valid {@link ParserModel}, either trained or loaded. */ protected abstract ParserModel getModel(); /** * Verifies that serialization of {@link ParserModel} equals trained state. *

* Tests {@link ParserModel#equals(Object)}. */ @Test void testModelSerializationAndEquality() throws IOException { Assertions.assertNotNull(getModel()); Assertions.assertFalse(getModel().isLoadedFromSerialized()); // Test serializing and de-serializing model ByteArrayOutputStream outArray = new ByteArrayOutputStream(); getModel().serialize(outArray); outArray.close(); // TEST: de-serialization and equality ParserModel outputModel = new ParserModel(new ByteArrayInputStream(outArray.toByteArray())); Assertions.assertNotNull(outputModel); Assertions.assertTrue(outputModel.isLoadedFromSerialized()); Assertions.assertEquals(getModel(), outputModel); } /** * Verifies that parsing with a {@link ParserModel} does not cause problems at runtime. */ @ParameterizedTest(name = "Parse example {index}.") @MethodSource("provideParsePairs") void testParsing(String input, String reference) { // prepare Assertions.assertNotNull(getModel()); Parse p = Parse.parseParse(input); Assertions.assertNotNull(p); Assertions.assertTrue(p.complete()); Assertions.assertEquals(reference, p.getText()); opennlp.tools.parser.Parser parser = ParserFactory.create(getModel()); Assertions.assertNotNull(parser); // TEST: parsing Parse parsedViaParser = parser.parse(p); Assertions.assertNotNull(parsedViaParser); Assertions.assertTrue(parsedViaParser.complete()); Assertions.assertEquals(reference, p.getText()); Span s = parsedViaParser.getSpan(); Assertions.assertNotNull(s); } /* * Verifies / addresses OPENNLP-509 * See: https://issues.apache.org/jira/projects/OPENNLP/issues/OPENNLP-509 */ @Test void testParsingCheckParentReferencesArePopulated() { // fixtures final String sent = "Martin is testing."; // prepare List tokens = Arrays.asList(WhitespaceTokenizer.INSTANCE.tokenize(sent)); String text = String.join(" ", tokens); Parse sentP = new Parse(text, new Span(0, text.length()), AbstractBottomUpParser.INC_NODE, 0, null); int start = 0; int i = 0; for (Iterator ti = tokens.iterator(); ti.hasNext(); i++) { String tok = ti.next(); sentP.insert(new Parse(text, new Span(start, start + tok.length()), AbstractBottomUpParser.TOK_NODE, 0, i)); start += tok.length() + 1; } Parser parser = ParserFactory.create(getModel()); Assertions.assertNotNull(parser); // Verifies parents of top-k parses (k=2) Parse[] parses = parser.parse(sentP, 2); Assertions.assertNotNull(parses); for (Parse parent : parses) { checkParentsEqual(parent); } } /* * Recursively traverses the parse tree and verifies parent references are populated. */ private void checkParentsEqual(Parse parent) { for (Parse child : parent.getChildren()) { Parse cParent = child.getParent(); // System.out.println(cParent.toStringPennTreebank() " --- type: " cParent.getType()); if (AbstractBottomUpParser.TOK_NODE.equals(child.getType())) { return; // found a leaf node: stopping recursion } Assertions.assertEquals(parent, cParent); if (cParent.getChildren() != null) { checkParentsEqual(child); } } } /* * Verifies changes in OPENNLP-1330 and addresses follow-up OPENNLP-1333 * See: https://issues.apache.org/jira/projects/OPENNLP/issues/OPENNLP-1333 * * Uses test data from PR 392 (https://github.com/apache/opennlp/pull/392). */ @ParameterizedTest @ValueSource(ints = {1, 2, 3}) void testParsingTopParses(int k) { // fixtures final String sent = "Eric is testing."; final String refParseTopChunking = "(TOP (S (NP (NNP Eric)) (VP (VBZ is) (NP (DT testing.)))))"; final String refParseTopTreeInsert = "(TOP (S (NP (NNP Eric)) (VP (VBZ is) (NN testing.))))"; // prepare List tokens = Arrays.asList(WhitespaceTokenizer.INSTANCE.tokenize(sent)); String text = String.join(" ", tokens); Parse sentP = new Parse(text, new Span(0, text.length()), AbstractBottomUpParser.INC_NODE, 0, 0); int start = 0; int i = 0; for (Iterator ti = tokens.iterator(); ti.hasNext(); i++) { String tok = ti.next(); sentP.insert(new Parse(text, new Span(start, start + tok.length()), AbstractBottomUpParser.TOK_NODE, 0, i)); start += tok.length() + 1; } opennlp.tools.parser.Parser parser = ParserFactory.create(getModel()); Assertions.assertNotNull(parser); // TEST: parsing Parse[] parses = parser.parse(sentP, k); Assertions.assertNotNull(parses); Assertions.assertEquals(k, parses.length); double previousProb = 0; // initial ref value for (int j = 0; j < parses.length; j++) { Assertions.assertTrue(parses[j].getProb() < previousProb); String asPennTreebankStyle = parses[j].toStringPennTreebank(); // System.out.println(parses[j].getProb() + " - " + asPennTreebankStyle); if (j == 0) { if (ParserType.CHUNKING.equals(getModel().getParserType())) { Assertions.assertEquals(refParseTopChunking, asPennTreebankStyle); } else if (ParserType.TREEINSERT.equals(getModel().getParserType())) { Assertions.assertEquals(refParseTopTreeInsert, asPennTreebankStyle); } } } } /* * Produces a stream of pairs for parameterized unit tests. */ private static Stream provideParsePairs() { return Stream.of( // Example 1: with eos character Arguments.of("(TOP " + "(S (S (NP-SBJ (PRP She) )(VP (VBD was) " + "(ADVP (RB just) )(NP-PRD (NP (DT another) (NN freighter) )" + "(PP (IN from) (NP (DT the) (NNPS States) )))))(, ,) " + "(CC and) " + "(S (NP-SBJ (PRP she) )(VP (VBD seemed) " + "(ADJP-PRD (ADJP (RB as) (JJ commonplace) )(PP (IN as) (NP (PRP$ her) " + "(NN name) )))))(. .) ))", "She was just another freighter from the States , " + "and she seemed as commonplace as her name . "), // Example 2: without eos character Arguments.of("(S " + "(PP (IN On) (NP (NNP June) (CD 16))) " + "(NP (PRP he))" + "(VP (VBD was) (VP (VBN born) " + "(PP in (NP Germany)))))", "On June 16 he was born Germany ") ) ; } /** * Verifies that parsing with a {@link ParserModel} picks up top k. */ @ParameterizedTest(name = "Parse example {index}.") @MethodSource("provideParsePairsForTopKEquals2") void testParsingForTopKEquals2(String input, String reference) { // prepare Assertions.assertNotNull(getModel()); Parse p = Parse.parseParse(input); Assertions.assertNotNull(p); Assertions.assertTrue(p.complete()); Assertions.assertEquals(reference , p.getText()); opennlp.tools.parser.Parser parser = ParserFactory.create(getModel()); Assertions.assertNotNull(parser); // TEST: parsing with numParses = 2 Parse[] pArr = parser.parse(p , 2); Assertions.assertNotNull(pArr); Assertions.assertEquals(2 , pArr.length); Assertions.assertEquals(reference , p.getText()); } /* * Produces a stream of pairs for parameterized unit tests. */ private static Stream provideParsePairsForTopKEquals2() { return Stream.of( // Example 1: Arguments.of("(TOP " + "(VP (VBG Testing) " + "(PP (IN for) " + "(NP (DT the) " + "(NNP AbstractBottomUpParser))) " + "(S (VP (TO to) (VP (VB return) " + "(NP (JJ top) (JJ first) (NN k)) (, ,) " + "(PP (RB instead) (IN of) (NP (DT the) (NN bottom) (NN k)))))) (. parses.)))" , "Testing for the AbstractBottomUpParser to return top first k , " + "instead of the bottom k parses. ") ); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_parser_ChunkSampl0100644 0000000 0000000 00000000156 14523004075 032625 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/ChunkSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/ChunkSampleStreamTest.java0100644 0000000 0000000 00000011254 14523004075 034240 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.chunker.ChunkSample; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; public class ChunkSampleStreamTest { @Test void testConvertParseToPosSample() throws IOException { try (ObjectStream chunkSampleStream = new ChunkSampleStream(new ParseSampleStream( ObjectStreamUtils.createObjectStream(ParseTest.PARSE_STRING)))) { ChunkSample sample = chunkSampleStream.read(); Assertions.assertEquals("She", sample.getSentence()[0]); Assertions.assertEquals("PRP", sample.getTags()[0]); Assertions.assertEquals("S-NP", sample.getPreds()[0]); Assertions.assertEquals("was", sample.getSentence()[1]); Assertions.assertEquals("VBD", sample.getTags()[1]); Assertions.assertEquals("O", sample.getPreds()[1]); Assertions.assertEquals("just", sample.getSentence()[2]); Assertions.assertEquals("RB", sample.getTags()[2]); Assertions.assertEquals("S-ADVP", sample.getPreds()[2]); Assertions.assertEquals("another", sample.getSentence()[3]); Assertions.assertEquals("DT", sample.getTags()[3]); Assertions.assertEquals("S-NP", sample.getPreds()[3]); Assertions.assertEquals("freighter", sample.getSentence()[4]); Assertions.assertEquals("NN", sample.getTags()[4]); Assertions.assertEquals("C-NP", sample.getPreds()[4]); Assertions.assertEquals("from", sample.getSentence()[5]); Assertions.assertEquals("IN", sample.getTags()[5]); Assertions.assertEquals("O", sample.getPreds()[5]); Assertions.assertEquals("the", sample.getSentence()[6]); Assertions.assertEquals("DT", sample.getTags()[6]); Assertions.assertEquals("S-NP", sample.getPreds()[6]); Assertions.assertEquals("States", sample.getSentence()[7]); Assertions.assertEquals("NNPS", sample.getTags()[7]); Assertions.assertEquals("C-NP", sample.getPreds()[7]); Assertions.assertEquals(",", sample.getSentence()[8]); Assertions.assertEquals(",", sample.getTags()[8]); Assertions.assertEquals("O", sample.getPreds()[8]); Assertions.assertEquals("and", sample.getSentence()[9]); Assertions.assertEquals("CC", sample.getTags()[9]); Assertions.assertEquals("O", sample.getPreds()[9]); Assertions.assertEquals("she", sample.getSentence()[10]); Assertions.assertEquals("PRP", sample.getTags()[10]); Assertions.assertEquals("S-NP", sample.getPreds()[10]); Assertions.assertEquals("seemed", sample.getSentence()[11]); Assertions.assertEquals("VBD", sample.getTags()[11]); Assertions.assertEquals("O", sample.getPreds()[11]); Assertions.assertEquals("as", sample.getSentence()[12]); Assertions.assertEquals("RB", sample.getTags()[12]); Assertions.assertEquals("S-ADJP", sample.getPreds()[12]); Assertions.assertEquals("commonplace", sample.getSentence()[13]); Assertions.assertEquals("JJ", sample.getTags()[13]); Assertions.assertEquals("C-ADJP", sample.getPreds()[13]); Assertions.assertEquals("as", sample.getSentence()[14]); Assertions.assertEquals("IN", sample.getTags()[14]); Assertions.assertEquals("O", sample.getPreds()[14]); Assertions.assertEquals("her", sample.getSentence()[15]); Assertions.assertEquals("PRP$", sample.getTags()[15]); Assertions.assertEquals("S-NP", sample.getPreds()[15]); Assertions.assertEquals("name", sample.getSentence()[16]); Assertions.assertEquals("NN", sample.getTags()[16]); Assertions.assertEquals("C-NP", sample.getPreds()[16]); Assertions.assertEquals(".", sample.getSentence()[17]); Assertions.assertEquals(".", sample.getTags()[17]); Assertions.assertEquals("O", sample.getPreds()[17]); Assertions.assertNull(chunkSampleStream.read()); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_parser_ParseSampl0100644 0000000 0000000 00000000156 14523004075 032627 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/ParseSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/ParseSampleStreamTest.java0100644 0000000 0000000 00000003576 14523004075 034252 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; public class ParseSampleStreamTest { private static ObjectStream createParseSampleStream() throws IOException { InputStreamFactory in = new ResourceAsStreamFactory( ParseSampleStreamTest.class, "/opennlp/tools/parser/test.parse"); return new ParseSampleStream(new PlainTextByLineStream(in, StandardCharsets.UTF_8)); } @Test void testReadTestStream() throws IOException { try (ObjectStream parseStream = createParseSampleStream()) { Assertions.assertNotNull(parseStream.read()); Assertions.assertNotNull(parseStream.read()); Assertions.assertNotNull(parseStream.read()); Assertions.assertNotNull(parseStream.read()); Assertions.assertNull(parseStream.read()); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/ParseTest.java0100644 0000000 0000000 00000010704 14523004075 031723 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * Tests for the {@link Parse} class. */ public class ParseTest { public static final String PARSE_STRING = "(TOP (S (S (NP-SBJ (PRP She) )(VP (VBD was) " + "(ADVP (RB just) )(NP-PRD (NP (DT another) (NN freighter) )(PP (IN from) (NP (DT the) " + "(NNPS States) )))))(, ,) (CC and) (S (NP-SBJ (PRP she) )(VP (VBD seemed) " + "(ADJP-PRD (ADJP (RB as) (JJ commonplace) )(PP (IN as) (NP (PRP$ her) " + "(NN name) )))))(. .) ))"; @Test void testToHashCode() { Parse p1 = Parse.parseParse(PARSE_STRING); p1.hashCode(); } @Test void testToString() { Parse p1 = Parse.parseParse(PARSE_STRING); p1.toString(); } @Test void testEquals() { Parse p1 = Parse.parseParse(PARSE_STRING); Assertions.assertEquals(p1, p1); } @Test void testParseClone() { Parse p1 = Parse.parseParse(PARSE_STRING); Parse p2 = (Parse) p1.clone(); Assertions.assertEquals(p1, p2); Assertions.assertEquals(p2, p1); } @Test void testGetText() { Parse p = Parse.parseParse(PARSE_STRING); // TODO: Why does parse attaches a space to the end of the text ??? String expectedText = "She was just another freighter from the States , " + "and she seemed as commonplace as her name . "; Assertions.assertEquals(expectedText, p.getText()); } @Test void testShow() { Parse p1 = Parse.parseParse(PARSE_STRING); StringBuffer parseString = new StringBuffer(); p1.show(parseString); Parse p2 = Parse.parseParse(parseString.toString()); Assertions.assertEquals(p1, p2); } @Test void testTokenReplacement() { Parse p1 = Parse.parseParse("(TOP (S-CLF (NP-SBJ (PRP It) )(VP (VBD was) " + " (NP-PRD (NP (DT the) (NN trial) )(PP (IN of) " + " (NP (NP (NN oleomargarine) (NN heir) )(NP (NNP Minot) " + " (PRN (-LRB- -LRB-) (NNP Mickey) " + " (-RRB- -RRB-) )(NNP Jelke) )))(PP (IN for) " + " (NP (JJ compulsory) (NN prostitution) " + " ))(PP-LOC (IN in) (NP (NNP New) (NNP York) " + " )))(SBAR (WHNP-1 (WDT that) )(S (VP (VBD put) " + " (NP (DT the) (NN spotlight) )(PP (IN on) (NP (DT the) " + " (JJ international) (NN play-girl) ))))))(. .) ))"); StringBuffer parseString = new StringBuffer(); p1.show(parseString); Parse p2 = Parse.parseParse(parseString.toString()); Assertions.assertEquals(p1, p2); } @Test void testGetTagNodes() { Parse p = Parse.parseParse(PARSE_STRING); Parse[] tags = p.getTagNodes(); for (Parse node : tags) { Assertions.assertTrue(node.isPosTag()); } Assertions.assertEquals("PRP", tags[0].getType()); Assertions.assertEquals("VBD", tags[1].getType()); Assertions.assertEquals("RB", tags[2].getType()); Assertions.assertEquals("DT", tags[3].getType()); Assertions.assertEquals("NN", tags[4].getType()); Assertions.assertEquals("IN", tags[5].getType()); Assertions.assertEquals("DT", tags[6].getType()); Assertions.assertEquals("NNPS", tags[7].getType()); Assertions.assertEquals(",", tags[8].getType()); Assertions.assertEquals("CC", tags[9].getType()); Assertions.assertEquals("PRP", tags[10].getType()); Assertions.assertEquals("VBD", tags[11].getType()); Assertions.assertEquals("RB", tags[12].getType()); Assertions.assertEquals("JJ", tags[13].getType()); Assertions.assertEquals("IN", tags[14].getType()); Assertions.assertEquals("PRP$", tags[15].getType()); Assertions.assertEquals("NN", tags[16].getType()); Assertions.assertEquals(".", tags[17].getType()); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/ParserEvaluatorTest.java0100644 0000000 0000000 00000006574 14523004075 034002 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.parser.lang.en.HeadRules; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.eval.FMeasure; /** * Tests {@link ParserEvaluator}. Samples and test assumptions taken from historic "main" method, * that was once available in the class under test. * See: OPENNLP-689. */ public class ParserEvaluatorTest { private Parser parser; @BeforeEach public void setup() throws IOException { InputStreamFactory in = new ResourceAsStreamFactory(getClass(), "/opennlp/tools/parser/parser.train"); ParseSampleStream samples = new ParseSampleStream(new PlainTextByLineStream(in, StandardCharsets.UTF_8)); Assertions.assertNotNull(samples); ClassLoader cl = Thread.currentThread().getContextClassLoader(); try (InputStream headRulesIn = cl.getResourceAsStream("opennlp/tools/parser/en_head_rules")) { HeadRules headRules = new HeadRules(new BufferedReader( new InputStreamReader(headRulesIn, StandardCharsets.UTF_8))); ParserModel model = opennlp.tools.parser.chunking.Parser.train( "en", samples, headRules, TrainingParameters.defaultParams()); parser = ParserFactory.create(model); Assertions.assertNotNull(parser); } } @Test void testProcessSample() { String goldParseString = "(TOP (S (NP (NNS Sales) (NNS executives)) (VP (VBD were) " + "(VP (VBG examing) (NP (DT the) (NNS figures)) (PP (IN with) (NP (JJ great) (NN care))) )) " + "(NP (NN yesterday)) (. .) ))"; ParserEvaluator pe = new ParserEvaluator(parser); Parse p = pe.processSample(Parse.parseParse(goldParseString)); Assertions.assertNotNull(p); FMeasure measure = pe.getFMeasure(); Assertions.assertNotNull(measure); // Expected output: Precision: 0.42857142857142855, Recall: 0.375, F-Measure: 0.39999999999999997 Assertions.assertEquals(measure.getPrecisionScore(), 0.42857142857142855d, 0d); Assertions.assertEquals(measure.getRecallScore(), 0.375d, 0d); Assertions.assertEquals(measure.getFMeasure(), 0.39999999999999997d, 0d); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/ParserTestUtil.java0100644 0000000 0000000 00000005273 14523004075 032750 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.parser.lang.en.HeadRules; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; public class ParserTestUtil { public static HeadRules createTestHeadRules() throws IOException { try (InputStream headRulesIn = ParserTestUtil.class.getResourceAsStream( "/opennlp/tools/parser/en_head_rules"); Reader reader = new BufferedReader(new InputStreamReader(headRulesIn, StandardCharsets.UTF_8))) { return new HeadRules(reader); } } public static ObjectStream openTestTrainingData() throws IOException { ObjectStream resetableSampleStream = new ObjectStream<>() { private ObjectStream samples; @Override public void close() throws IOException { samples.close(); } @Override public Parse read() throws IOException { return samples.read(); } @Override public void reset() throws IOException { try { if (samples != null) { samples.close(); } InputStreamFactory in = new ResourceAsStreamFactory(getClass(), "/opennlp/tools/parser/parser.train"); samples = new ParseSampleStream(new PlainTextByLineStream(in, StandardCharsets.UTF_8)); } catch (UnsupportedEncodingException e) { // Should never happen Assertions.fail(e.getMessage()); } } }; resetableSampleStream.reset(); return resetableSampleStream; } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/PosSampleStreamTest.java0100644 0000000 0000000 00000007131 14523004075 033730 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.postag.POSSample; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; public class PosSampleStreamTest { @Test void testConvertParseToPosSample() throws IOException { try (ObjectStream posSampleStream = new PosSampleStream(new ParseSampleStream( ObjectStreamUtils.createObjectStream(ParseTest.PARSE_STRING)))) { POSSample sample = posSampleStream.read(); Assertions.assertEquals("PRP", sample.getTags()[0]); Assertions.assertEquals("She", sample.getSentence()[0]); Assertions.assertEquals("VBD", sample.getTags()[1]); Assertions.assertEquals("was", sample.getSentence()[1]); Assertions.assertEquals("RB", sample.getTags()[2]); Assertions.assertEquals("just", sample.getSentence()[2]); Assertions.assertEquals("DT", sample.getTags()[3]); Assertions.assertEquals("another", sample.getSentence()[3]); Assertions.assertEquals("NN", sample.getTags()[4]); Assertions.assertEquals("freighter", sample.getSentence()[4]); Assertions.assertEquals("IN", sample.getTags()[5]); Assertions.assertEquals("from", sample.getSentence()[5]); Assertions.assertEquals("DT", sample.getTags()[6]); Assertions.assertEquals("the", sample.getSentence()[6]); Assertions.assertEquals("NNPS", sample.getTags()[7]); Assertions.assertEquals("States", sample.getSentence()[7]); Assertions.assertEquals(",", sample.getTags()[8]); Assertions.assertEquals(",", sample.getSentence()[8]); Assertions.assertEquals("CC", sample.getTags()[9]); Assertions.assertEquals("and", sample.getSentence()[9]); Assertions.assertEquals("PRP", sample.getTags()[10]); Assertions.assertEquals("she", sample.getSentence()[10]); Assertions.assertEquals("VBD", sample.getTags()[11]); Assertions.assertEquals("seemed", sample.getSentence()[11]); Assertions.assertEquals("RB", sample.getTags()[12]); Assertions.assertEquals("as", sample.getSentence()[12]); Assertions.assertEquals("JJ", sample.getTags()[13]); Assertions.assertEquals("commonplace", sample.getSentence()[13]); Assertions.assertEquals("IN", sample.getTags()[14]); Assertions.assertEquals("as", sample.getSentence()[14]); Assertions.assertEquals("PRP$", sample.getTags()[15]); Assertions.assertEquals("her", sample.getSentence()[15]); Assertions.assertEquals("NN", sample.getTags()[16]); Assertions.assertEquals("name", sample.getSentence()[16]); Assertions.assertEquals(".", sample.getTags()[17]); Assertions.assertEquals(".", sample.getSentence()[17]); Assertions.assertNull(posSampleStream.read()); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/chunking/ParserTest.java0100644 0000000 0000000 00000003745 14523004075 033722 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser.chunking; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import opennlp.tools.parser.AbstractParserModelTest; import opennlp.tools.parser.HeadRules; import opennlp.tools.parser.Parse; import opennlp.tools.parser.ParserModel; import opennlp.tools.parser.ParserTestUtil; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; /** * Tests for the {@link opennlp.tools.parser.chunking.Parser} class. */ public class ParserTest extends AbstractParserModelTest { /* Trained dynamically before test */ private static ParserModel model; @Override protected ParserModel getModel() { return model; } @BeforeAll public static void setupEnvironment() throws IOException { ObjectStream parseSamples = ParserTestUtil.openTestTrainingData(); HeadRules headRules = ParserTestUtil.createTestHeadRules(); // Training an English lang 'opennlp.tools.parser.chunking.Parse' model = Parser.train("eng", parseSamples, headRules, TrainingParameters.defaultParams()); Assertions.assertNotNull(model); Assertions.assertFalse(model.isLoadedFromSerialized()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_parser_lang_en_He0100644 0000000 0000000 00000000156 14523004075 032577 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/lang/en/HeadRulesTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/lang/en/HeadRulesTest.java0100644 0000000 0000000 00000003622 14523004075 034051 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser.lang.en; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class HeadRulesTest { @Test void testSerialization() throws IOException { try (InputStream headRulesIn = HeadRulesTest.class.getResourceAsStream("/opennlp/tools/parser/en_head_rules"); InputStreamReader reader = new InputStreamReader(headRulesIn, StandardCharsets.UTF_8)) { HeadRules headRulesOrginal = new HeadRules(reader); ByteArrayOutputStream out = new ByteArrayOutputStream(); headRulesOrginal.serialize(new OutputStreamWriter(out, StandardCharsets.UTF_8)); out.close(); HeadRules headRulesRecreated = new HeadRules(new InputStreamReader( new ByteArrayInputStream(out.toByteArray()), StandardCharsets.UTF_8)); Assertions.assertEquals(headRulesOrginal, headRulesRecreated); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_parser_treeinsert0100644 0000000 0000000 00000000156 14523004075 032744 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/treeinsert/ParserTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/parser/treeinsert/ParserTest.java0100644 0000000 0000000 00000003756 14523004075 034302 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.parser.treeinsert; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import opennlp.tools.parser.AbstractParserModelTest; import opennlp.tools.parser.HeadRules; import opennlp.tools.parser.Parse; import opennlp.tools.parser.ParserModel; import opennlp.tools.parser.ParserTestUtil; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.TrainingParameters; /** * Tests for the {@link opennlp.tools.parser.treeinsert.Parser} class. */ public class ParserTest extends AbstractParserModelTest { /* Trained dynamically before test */ private static ParserModel model; @Override protected ParserModel getModel() { return model; } @BeforeAll public static void setupEnvironment() throws IOException { ObjectStream parseSamples = ParserTestUtil.openTestTrainingData(); HeadRules headRules = ParserTestUtil.createTestHeadRules(); // Training an English lang 'opennlp.tools.parser.treeinsert.Parser' model = Parser.train("eng", parseSamples, headRules, TrainingParameters.defaultParams()); Assertions.assertNotNull(model); Assertions.assertFalse(model.isLoadedFromSerialized()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_postag_Configurab0100644 0000000 0000000 00000000174 14523004075 032640 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/postag/ConfigurablePOSContextGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/postag/ConfigurablePOSContextGene0100644 0000000 0000000 00000004041 14523004075 034215 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.featuregen.AdaptiveFeatureGenerator; import opennlp.tools.util.featuregen.TokenFeatureGenerator; public class ConfigurablePOSContextGeneratorTest { private void testContextGeneration(int cacheSize) { AdaptiveFeatureGenerator fg = new TokenFeatureGenerator(); ConfigurablePOSContextGenerator cg = new ConfigurablePOSContextGenerator(cacheSize, fg); String[] tokens = new String[] {"a", "b", "c", "d", "e"}; String[] tags = new String[] {"t_a", "t_b", "t_c", "t_d", "t_e"}; cg.getContext(0, tokens, tags, null); Assertions.assertEquals(1, cg.getContext(0, tokens, tags, null).length); Assertions.assertEquals("w=a", cg.getContext(0, tokens, tags, null)[0]); Assertions.assertEquals("w=b", cg.getContext(1, tokens, tags, null)[0]); Assertions.assertEquals("w=c", cg.getContext(2, tokens, tags, null)[0]); Assertions.assertEquals("w=d", cg.getContext(3, tokens, tags, null)[0]); Assertions.assertEquals("w=e", cg.getContext(4, tokens, tags, null)[0]); } @Test void testWithoutCache() { testContextGeneration(0); } @Test void testWithCache() { testContextGeneration(3); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_postag_DefaultPOS0100644 0000000 0000000 00000000167 14523004075 032531 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/postag/DefaultPOSContextGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/postag/DefaultPOSContextGenerator0100644 0000000 0000000 00000011751 14523004075 034257 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.util.Arrays; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.stream.IntStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.util.StringList; /** * We encountered a concurrency issue in the pos tagger module in the class * DefaultPOSContextGenerator. *

* The issue is demonstrated in DefaultPOSContextGeneratorTest.java. The test "multithreading()" * consistently fails on our system with the current code if the number of threads * (NUMBER_OF_THREADS) is set to 10. If the number of threads is set to 1 (effectively disabling * multithreading), the test consistently passes. *

* We resolved the issue by removing a field in DefaultPOSContextGenerator.java. */ public class DefaultPOSContextGeneratorTest { public static final int NUMBER_OF_THREADS = 10; private static Object[] tokens; private static DefaultPOSContextGenerator defaultPOSContextGenerator; private static String[] tags; @BeforeAll static void setUp() { final String matchingToken = "tokenC"; tokens = new Object[] {"tokenA", "tokenB", matchingToken, "tokenD"}; final StringList stringList = new StringList(new String[] {matchingToken}); Dictionary dictionary = new Dictionary(); dictionary.put(stringList); defaultPOSContextGenerator = new DefaultPOSContextGenerator(dictionary); tags = new String[] {"tagA", "tagB", "tagC", "tagD"}; } @Test void noDictionaryMatch() { int index = 1; final String[] actual = defaultPOSContextGenerator.getContext(index, tokens, tags); final String[] expected = new String[] { "default", "w=tokenB", "suf=B", "suf=nB", "suf=enB", "suf=kenB", "pre=t", "pre=to", "pre=tok", "pre=toke", "c", "p=tokenA", "t=tagA", "pp=*SB*", "n=tokenC", "nn=tokenD" }; Assertions.assertArrayEquals(expected, actual, "Calling with not matching index at: " + index + "\nexpected \n" + Arrays.toString(expected) + " but actually was \n" + Arrays.toString(actual)); } @Test void dictionaryMatch() { int indexWithDictionaryMatch = 2; final String[] actual = defaultPOSContextGenerator.getContext(indexWithDictionaryMatch, tokens, tags); final String[] expected = new String[] { "default", "w=tokenC", "p=tokenB", "t=tagB", "pp=tokenA", "t2=tagA,tagB", "n=tokenD", "nn=*SE*" }; Assertions.assertArrayEquals(expected, actual, "Calling with index matching dictionary entry at: " + indexWithDictionaryMatch + "\nexpected \n" + Arrays.toString(expected) + " but actually was \n" + Arrays.toString(actual)); } @Test void multithreading() { Callable matching = () -> { dictionaryMatch(); return null; }; Callable notMatching = () -> { noDictionaryMatch(); return null; }; final List> callables = IntStream.range(0, 200000) .mapToObj(index -> (index % 2 == 0) ? matching : notMatching) .collect(Collectors.toList()); final ExecutorService executorService = Executors.newFixedThreadPool(NUMBER_OF_THREADS); try { final List> futures = executorService.invokeAll(callables); executorService.shutdown(); executorService.awaitTermination(30, TimeUnit.SECONDS); futures.forEach(future -> { try { future.get(); } catch (InterruptedException e) { Assertions.fail("Interrupted because of: " + e.getCause().getMessage()); } catch (ExecutionException ee) { Assertions.fail(ee.getCause().getMessage()); } }); } catch (final InterruptedException e) { Assertions.fail("Test interrupted"); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_postag_DummyPOSTa0100644 0000000 0000000 00000000156 14523004075 032523 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/postag/DummyPOSTaggerFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/postag/DummyPOSTaggerFactory.java0100644 0000000 0000000 00000007644 14523004075 034162 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Map; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.util.SequenceValidator; import opennlp.tools.util.model.ArtifactSerializer; import opennlp.tools.util.model.UncloseableInputStream; public class DummyPOSTaggerFactory extends POSTaggerFactory { private static final String DUMMY_POSDICT = "DUMMY_POSDICT"; private DummyPOSDictionary dict; public DummyPOSTaggerFactory() { } public DummyPOSTaggerFactory(DummyPOSDictionary posDictionary) { super(null, null, null); this.dict = posDictionary; } @Override public SequenceValidator getSequenceValidator() { return new DummyPOSSequenceValidator(); } @Override public DummyPOSDictionary getTagDictionary() { return artifactProvider.getArtifact(DUMMY_POSDICT); } @Override public POSContextGenerator getPOSContextGenerator() { return new DummyPOSContextGenerator(this.ngramDictionary); } @Override @SuppressWarnings("rawtypes") public Map createArtifactSerializersMap() { Map serializers = super.createArtifactSerializersMap(); serializers.put(DUMMY_POSDICT, new DummyPOSDictionarySerializer()); return serializers; } @Override public Map createArtifactMap() { Map artifactMap = super.createArtifactMap(); if (this.dict != null) { artifactMap.put(DUMMY_POSDICT, this.dict); } return artifactMap; } static class DummyPOSContextGenerator extends DefaultPOSContextGenerator { public DummyPOSContextGenerator(Dictionary dict) { super(dict); } } public static class DummyPOSDictionarySerializer implements ArtifactSerializer { @Override public DummyPOSDictionary create(InputStream in) throws IOException { return DummyPOSDictionary.create(new UncloseableInputStream(in)); } @Override public void serialize(DummyPOSDictionary artifact, OutputStream out) throws IOException { artifact.serialize(out); } } static class DummyPOSSequenceValidator implements SequenceValidator { @Override public boolean validSequence(int i, String[] inputSequence, String[] outcomesSequence, String outcome) { return true; } } public static class DummyPOSDictionary extends POSDictionary { private POSDictionary dict; public DummyPOSDictionary() { } public DummyPOSDictionary(POSDictionary dict) { this.dict = dict; } public static DummyPOSDictionary create( UncloseableInputStream uncloseableInputStream) throws IOException { return new DummyPOSDictionary(POSDictionary.create(uncloseableInputStream)); } public void serialize(OutputStream out) throws IOException { dict.serialize(out); } public String[] getTags(String word) { return dict.getTags(word); } @Override public Class getArtifactSerializerClass() { return DummyPOSDictionarySerializer.class; } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/postag/POSDictionaryTest.java0100644 0000000 0000000 00000010215 14523004075 033336 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * Tests for the {@link POSDictionary} class. */ public class POSDictionaryTest { private static POSDictionary loadDictionary(String name) throws IOException { return POSDictionary.create(POSDictionaryTest.class.getResourceAsStream(name)); } private static POSDictionary serializeDeserializeDict(POSDictionary dict) throws IOException { try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { dict.serialize(out); POSDictionary serializedDictionary; try (InputStream in = new ByteArrayInputStream(out.toByteArray())) { serializedDictionary = POSDictionary.create(in); } return serializedDictionary; } } @Test void testSerialization() throws IOException { POSDictionary dictionary = new POSDictionary(); dictionary.put("a", "1", "2", "3"); dictionary.put("b", "4", "5", "6"); dictionary.put("c", "7", "8", "9"); dictionary.put("Always", "RB", "NNP"); Assertions.assertEquals(dictionary, serializeDeserializeDict(dictionary)); } @Test void testLoadingDictionaryWithoutCaseAttribute() throws IOException { POSDictionary dict = loadDictionary("TagDictionaryWithoutCaseAttribute.xml"); Assertions.assertArrayEquals(new String[] {"NNP"}, dict.getTags("McKinsey")); Assertions.assertNull(dict.getTags("Mckinsey")); } @Test void testCaseSensitiveDictionary() throws IOException { POSDictionary dict = loadDictionary("TagDictionaryCaseSensitive.xml"); Assertions.assertArrayEquals(new String[] {"NNP"}, dict.getTags("McKinsey")); Assertions.assertNull(dict.getTags("Mckinsey")); dict = serializeDeserializeDict(dict); Assertions.assertArrayEquals(new String[] {"NNP"}, dict.getTags("McKinsey")); Assertions.assertNull(dict.getTags("Mckinsey")); } @Test void testCaseInsensitiveDictionary() throws IOException { POSDictionary dict = loadDictionary("TagDictionaryCaseInsensitive.xml"); Assertions.assertArrayEquals(new String[] {"NNP"}, dict.getTags("McKinsey")); Assertions.assertArrayEquals(new String[] {"NNP"}, dict.getTags("Mckinsey")); Assertions.assertArrayEquals(new String[] {"NNP"}, dict.getTags("MCKINSEY")); Assertions.assertArrayEquals(new String[] {"NNP"}, dict.getTags("mckinsey")); dict = serializeDeserializeDict(dict); Assertions.assertArrayEquals(new String[] {"NNP"}, dict.getTags("McKinsey")); Assertions.assertArrayEquals(new String[] {"NNP"}, dict.getTags("Mckinsey")); } @Test void testToString() throws IOException { POSDictionary dict = loadDictionary("TagDictionaryCaseInsensitive.xml"); Assertions.assertEquals("POSDictionary{size=1, caseSensitive=false}", dict.toString()); dict = loadDictionary("TagDictionaryCaseSensitive.xml"); Assertions.assertEquals("POSDictionary{size=1, caseSensitive=true}", dict.toString()); } @Test void testEqualsAndHashCode() throws IOException { POSDictionary dictA = loadDictionary("TagDictionaryCaseInsensitive.xml"); POSDictionary dictB = loadDictionary("TagDictionaryCaseInsensitive.xml"); Assertions.assertEquals(dictA, dictB); Assertions.assertEquals(dictA.hashCode(), dictB.hashCode()); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/postag/POSEvaluatorTest.java0100644 0000000 0000000 00000005773 14523004075 033210 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.cmdline.postag.POSEvaluationErrorListener; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.Sequence; public class POSEvaluatorTest { @Test void testPositive() throws InvalidFormatException { OutputStream stream = new ByteArrayOutputStream(); POSTaggerEvaluationMonitor listener = new POSEvaluationErrorListener(stream); POSEvaluator eval = new POSEvaluator(new DummyPOSTagger( POSSampleTest.createGoldSample()), listener); eval.evaluateSample(POSSampleTest.createGoldSample()); Assertions.assertEquals(1.0, eval.getWordAccuracy(), 0.0); Assertions.assertEquals(0, stream.toString().length()); } @Test void testNegative() throws InvalidFormatException { OutputStream stream = new ByteArrayOutputStream(); POSTaggerEvaluationMonitor listener = new POSEvaluationErrorListener(stream); POSEvaluator eval = new POSEvaluator( new DummyPOSTagger(POSSampleTest.createGoldSample()), listener); eval.evaluateSample(POSSampleTest.createPredSample()); Assertions.assertEquals(.7, eval.getWordAccuracy(), .1d); Assertions.assertNotSame(0, stream.toString().length()); } static class DummyPOSTagger implements POSTagger { private final POSSample sample; public DummyPOSTagger(POSSample sample) { this.sample = sample; } public List tag(List sentence) { return Arrays.asList(sample.getTags()); } public String[] tag(String[] sentence) { return sample.getTags(); } public String tag(String sentence) { return null; } public Sequence[] topKSequences(List sentence) { return null; } public Sequence[] topKSequences(String[] sentence) { return null; } public String[] tag(String[] sentence, Object[] additionalContext) { return tag(sentence); } public Sequence[] topKSequences(String[] sentence, Object[] additionalContext) { return topKSequences(sentence); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/postag/POSModelTest.java0100644 0000000 0000000 00000004302 14523004075 032271 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.model.ModelType; public class POSModelTest { @Test void testPOSModelSerializationMaxent() throws IOException { POSModel posModel = POSTaggerMETest.trainPOSModel(ModelType.MAXENT); Assertions.assertFalse(posModel.isLoadedFromSerialized()); try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { posModel.serialize(out); POSModel recreatedPosModel = new POSModel(new ByteArrayInputStream(out.toByteArray())); Assertions.assertNotNull(recreatedPosModel); Assertions.assertTrue(recreatedPosModel.isLoadedFromSerialized()); Assertions.assertEquals(posModel, recreatedPosModel); } } @Test void testPOSModelSerializationPerceptron() throws IOException { POSModel posModel = POSTaggerMETest.trainPOSModel(ModelType.PERCEPTRON); Assertions.assertFalse(posModel.isLoadedFromSerialized()); try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { posModel.serialize(out); POSModel recreatedPosModel = new POSModel(new ByteArrayInputStream(out.toByteArray())); Assertions.assertTrue(recreatedPosModel.isLoadedFromSerialized()); Assertions.assertEquals(posModel, recreatedPosModel); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_postag_POSSampleE0100644 0000000 0000000 00000000161 14523004075 032465 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/postag/POSSampleEventStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/postag/POSSampleEventStreamTest.j0100644 0000000 0000000 00000003521 14523004075 034142 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.ml.model.Event; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; /** * Tests for the {@link POSSampleEventStream} class. */ public class POSSampleEventStreamTest { /** * Tests that the outcomes for a single sentence match the * expected outcomes. */ @Test void testOutcomesForSingleSentence() throws Exception { String sentence = "That_DT sounds_VBZ good_JJ ._."; POSSample sample = POSSample.parse(sentence); try (ObjectStream eventStream = new POSSampleEventStream( ObjectStreamUtils.createObjectStream(sample))) { Assertions.assertEquals("DT", eventStream.read().getOutcome()); Assertions.assertEquals("VBZ", eventStream.read().getOutcome()); Assertions.assertEquals("JJ", eventStream.read().getOutcome()); Assertions.assertEquals(".", eventStream.read().getOutcome()); Assertions.assertNull(eventStream.read()); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/postag/POSSampleTest.java0100644 0000000 0000000 00000011147 14523004075 032457 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.InvalidFormatException; /** * Tests for the {@link POSSample} class. */ public class POSSampleTest { @Test void testEquals() throws InvalidFormatException { Assertions.assertNotSame(createGoldSample(), createGoldSample()); Assertions.assertEquals(createGoldSample(), createGoldSample()); Assertions.assertNotEquals(createPredSample(), createGoldSample()); Assertions.assertNotEquals(createPredSample(), new Object()); } public static POSSample createGoldSample() throws InvalidFormatException { String sentence = "the_DT stories_NNS about_IN well-heeled_JJ " + "communities_NNS and_CC developers_NNS"; return POSSample.parse(sentence); } public static POSSample createPredSample() throws InvalidFormatException { String sentence = "the_DT stories_NNS about_NNS well-heeled_JJ " + "communities_NNS and_CC developers_CC"; return POSSample.parse(sentence); } @Test void testPOSSampleSerDe() throws IOException { POSSample posSample = createGoldSample(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream(byteArrayOutputStream); out.writeObject(posSample); out.flush(); byte[] bytes = byteArrayOutputStream.toByteArray(); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); ObjectInput objectInput = new ObjectInputStream(byteArrayInputStream); POSSample deSerializedPOSSample = null; try { deSerializedPOSSample = (POSSample) objectInput.readObject(); } catch (ClassNotFoundException e) { // do nothing } Assertions.assertNotNull(deSerializedPOSSample); Assertions.assertArrayEquals(posSample.getAdditionalContext(), deSerializedPOSSample.getAdditionalContext()); Assertions.assertArrayEquals(posSample.getSentence(), deSerializedPOSSample.getSentence()); Assertions.assertArrayEquals(posSample.getTags(), deSerializedPOSSample.getTags()); } /** * Tests if it can parse a valid token_tag sentence. */ @Test void testParse() throws InvalidFormatException { String sentence = "the_DT stories_NNS about_IN well-heeled_JJ " + "communities_NNS and_CC developers_NNS"; POSSample sample = POSSample.parse(sentence); Assertions.assertEquals(sentence, sample.toString()); } /** * Tests if it can parse an empty {@link String}. */ @Test void testParseEmptyString() throws InvalidFormatException { String sentence = ""; POSSample sample = POSSample.parse(sentence); Assertions.assertEquals(sample.getSentence().length, 0); Assertions.assertEquals(sample.getTags().length, 0); } /** * Tests if it can parse an empty token. */ @Test void testParseEmtpyToken() throws InvalidFormatException { String sentence = "the_DT _NNS"; POSSample sample = POSSample.parse(sentence); Assertions.assertEquals(sample.getSentence()[1], ""); } /** * Tests if it can parse an empty tag. */ @Test void testParseEmtpyTag() throws InvalidFormatException { String sentence = "the_DT stories_"; POSSample sample = POSSample.parse(sentence); Assertions.assertEquals(sample.getTags()[1], ""); } /** * Tests if an exception is thrown if there is only a token/tag * in the sentence. */ @Test void testParseWithError() { String sentence = "the_DT stories"; try { POSSample.parse(sentence); } catch (InvalidFormatException e) { return; } Assertions.fail(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/postag/POSTaggerFactoryTest.java0100644 0000000 0000000 00000012211 14523004075 033770 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.postag.DummyPOSTaggerFactory.DummyPOSContextGenerator; import opennlp.tools.postag.DummyPOSTaggerFactory.DummyPOSDictionary; import opennlp.tools.postag.DummyPOSTaggerFactory.DummyPOSSequenceValidator; import opennlp.tools.util.BaseToolFactory; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; /** * Tests for the {@link POSTaggerFactory} class. */ public class POSTaggerFactoryTest { private static ObjectStream createSampleStream() throws IOException { InputStreamFactory in = new ResourceAsStreamFactory( POSTaggerFactoryTest.class, "/opennlp/tools/postag/AnnotatedSentences.txt"); return new WordTagSampleStream(new PlainTextByLineStream(in, StandardCharsets.UTF_8)); } private static POSModel trainPOSModel(POSTaggerFactory factory) throws IOException { return POSTaggerME.train("eng", createSampleStream(), TrainingParameters.defaultParams(), factory); } @Test void testPOSTaggerWithCustomFactory() throws IOException { DummyPOSDictionary posDict = new DummyPOSDictionary( POSDictionary.create(POSDictionaryTest.class .getResourceAsStream("TagDictionaryCaseSensitive.xml"))); POSModel posModel = trainPOSModel(new DummyPOSTaggerFactory(posDict)); POSTaggerFactory factory = posModel.getFactory(); Assertions.assertInstanceOf(DummyPOSDictionary.class, factory.getTagDictionary()); Assertions.assertInstanceOf(DummyPOSContextGenerator.class, factory.getPOSContextGenerator()); Assertions.assertInstanceOf(DummyPOSSequenceValidator.class, factory.getSequenceValidator()); ByteArrayOutputStream out = new ByteArrayOutputStream(); posModel.serialize(out); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); POSModel fromSerialized = new POSModel(in); factory = fromSerialized.getFactory(); Assertions.assertInstanceOf(DummyPOSDictionary.class, factory.getTagDictionary()); Assertions.assertInstanceOf(DummyPOSContextGenerator.class, factory.getPOSContextGenerator()); Assertions.assertInstanceOf(DummyPOSSequenceValidator.class, factory.getSequenceValidator()); } @Test void testPOSTaggerWithDefaultFactory() throws IOException { POSDictionary posDict = POSDictionary.create(POSDictionaryTest.class .getResourceAsStream("TagDictionaryCaseSensitive.xml")); POSModel posModel = trainPOSModel(new POSTaggerFactory(null, null, posDict)); POSTaggerFactory factory = posModel.getFactory(); Assertions.assertInstanceOf(POSDictionary.class, factory.getTagDictionary()); Assertions.assertNotNull(factory.getPOSContextGenerator()); Assertions.assertInstanceOf(DefaultPOSSequenceValidator.class, factory.getSequenceValidator()); ByteArrayOutputStream out = new ByteArrayOutputStream(); posModel.serialize(out); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); POSModel fromSerialized = new POSModel(in); factory = fromSerialized.getFactory(); Assertions.assertInstanceOf(POSDictionary.class, factory.getTagDictionary()); Assertions.assertNotNull(factory.getPOSContextGenerator()); Assertions.assertInstanceOf(DefaultPOSSequenceValidator.class, factory.getSequenceValidator()); } @Test void testCreateWithInvalidName() { Assertions.assertThrows(InvalidFormatException.class, () -> BaseToolFactory.create("X", null)); } @Test void testCreateWithInvalidName2() { Assertions.assertThrows(InvalidFormatException.class, () -> POSTaggerFactory.create("X", null, null)); } @Test void testCreateWithHierarchy() { Assertions.assertThrows(InvalidFormatException.class, () -> BaseToolFactory.create(Object.class.getCanonicalName(), null)); } @Test void testCreateWithHierarchy2() { Assertions.assertThrows(InvalidFormatException.class, () -> POSTaggerFactory.create(this.getClass().getCanonicalName(), null, null)); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/postag/POSTaggerMEIT.java0100644 0000000 0000000 00000002765 14523004075 032274 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; public class POSTaggerMEIT { private static POSTagger tagger; @BeforeAll public static void prepare() throws IOException { tagger = new POSTaggerME("en"); } @Test void testPOSTagger() { String[] tags = tagger.tag(new String[] { "The", "driver", "got", "badly", "injured", "."}); // TODO OPENNLP-1539 Adjust this depending on the POSFormat String[] expected = {"DET", "NOUN", "VERB", "ADV", "VERB", "PUNCT"}; Assertions.assertArrayEquals(expected, tags); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/postag/POSTaggerMETest.java0100644 0000000 0000000 00000007313 14523004075 032671 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.InsufficientTrainingDataException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.ModelType; /** * Tests for the {@link POSTaggerME} class. */ public class POSTaggerMETest { private static ObjectStream createSampleStream() throws IOException { InputStreamFactory in = new ResourceAsStreamFactory(POSTaggerMETest.class, "/opennlp/tools/postag/AnnotatedSentences.txt"); return new WordTagSampleStream(new PlainTextByLineStream(in, StandardCharsets.UTF_8)); } /** * Trains a POSModel from the annotated test data. * * @return {@link POSModel} */ public static POSModel trainPOSModel(ModelType type) throws IOException { TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ALGORITHM_PARAM, type.toString()); params.put(TrainingParameters.ITERATIONS_PARAM, 100); params.put(TrainingParameters.CUTOFF_PARAM, 5); return POSTaggerME.train("eng", createSampleStream(), params, new POSTaggerFactory()); } @Test void testPOSTagger() throws IOException { POSModel posModel = trainPOSModel(ModelType.MAXENT); POSTagger tagger = new POSTaggerME(posModel); String[] tags = tagger.tag(new String[] { "The", "driver", "got", "badly", "injured", "."}); Assertions.assertEquals(6, tags.length); Assertions.assertEquals("DT", tags[0]); Assertions.assertEquals("NN", tags[1]); Assertions.assertEquals("VBD", tags[2]); Assertions.assertEquals("RB", tags[3]); Assertions.assertEquals("VBN", tags[4]); Assertions.assertEquals(".", tags[5]); } @Test void testBuildNGramDictionary() throws IOException { ObjectStream samples = createSampleStream(); POSTaggerME.buildNGramDictionary(samples, 0); } @Test void insufficientTestData() { Assertions.assertThrows(InsufficientTrainingDataException.class, () -> { InputStreamFactory in = new ResourceAsStreamFactory(POSTaggerMETest.class, "/opennlp/tools/postag/AnnotatedSentencesInsufficient.txt"); ObjectStream stream = new WordTagSampleStream( new PlainTextByLineStream(in, StandardCharsets.UTF_8)); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ALGORITHM_PARAM, ModelType.MAXENT.name()); params.put(TrainingParameters.ITERATIONS_PARAM, 100); params.put(TrainingParameters.CUTOFF_PARAM, 5); POSTaggerME.train("eng", stream, params, new POSTaggerFactory()); }); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_postag_WordTagSam0100644 0000000 0000000 00000000160 14523004075 032564 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/postag/WordTagSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/postag/WordTagSampleStreamTest.ja0100644 0000000 0000000 00000004345 14523004075 034214 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.postag; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.CollectionObjectStream; /** * Tests for the {@link WordTagSampleStream} class. */ public class WordTagSampleStreamTest { @Test void testParseSimpleSample() throws IOException { Collection sampleString = new ArrayList<>(1); sampleString.add("This_x1 is_x2 a_x3 test_x4 sentence_x5 ._x6"); try (WordTagSampleStream stream = new WordTagSampleStream(new CollectionObjectStream<>(sampleString))) { POSSample sample = stream.read(); String[] words = sample.getSentence(); Assertions.assertEquals("This", words[0]); Assertions.assertEquals("is", words[1]); Assertions.assertEquals("a", words[2]); Assertions.assertEquals("test", words[3]); Assertions.assertEquals("sentence", words[4]); Assertions.assertEquals(".", words[5]); String[] tags = sample.getTags(); Assertions.assertEquals("x1", tags[0]); Assertions.assertEquals("x2", tags[1]); Assertions.assertEquals("x3", tags[2]); Assertions.assertEquals("x4", tags[3]); Assertions.assertEquals("x5", tags[4]); Assertions.assertEquals("x6", tags[5]); Assertions.assertNull(stream.read()); stream.reset(); Assertions.assertNotNull(stream.read()); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_sentdetect_Abstra0100644 0000000 0000000 00000000171 14523004075 032637 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/AbstractSentenceDetectorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/AbstractSentenceDetect0100644 0000000 0000000 00000010575 14523004075 034326 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Locale; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; public abstract class AbstractSentenceDetectorTest { protected static final Locale LOCALE_DUTCH = new Locale("nl"); protected static final Locale LOCALE_POLISH = new Locale("pl"); protected static final Locale LOCALE_PORTUGUESE = new Locale("pt"); protected static final Locale LOCALE_SPANISH = new Locale("es"); static ObjectStream createSampleStream(Locale loc) throws IOException { final String trainingResource; if (loc.equals(LOCALE_DUTCH)) { trainingResource = "/opennlp/tools/sentdetect/Sentences_NL.txt"; } else if (loc.equals(Locale.GERMAN)) { trainingResource = "/opennlp/tools/sentdetect/Sentences_DE.txt"; } else if (loc.equals(Locale.FRENCH)) { trainingResource = "/opennlp/tools/sentdetect/Sentences_FR.txt"; } else if (loc.equals(Locale.ITALIAN)) { trainingResource = "/opennlp/tools/sentdetect/Sentences_IT.txt"; } else if (loc.equals(LOCALE_POLISH)) { trainingResource = "/opennlp/tools/sentdetect/Sentences_PL.txt"; } else if (loc.equals(LOCALE_PORTUGUESE)) { trainingResource = "/opennlp/tools/sentdetect/Sentences_PT.txt"; } else if (loc.equals(LOCALE_SPANISH)) { trainingResource = "/opennlp/tools/sentdetect/Sentences_ES.txt"; } else { trainingResource = "/opennlp/tools/sentdetect/Sentences.txt"; } InputStreamFactory in = new ResourceAsStreamFactory( AbstractSentenceDetectorTest.class, trainingResource); return new SentenceSampleStream(new PlainTextByLineStream(in, StandardCharsets.UTF_8)); } static SentenceModel train(SentenceDetectorFactory factory, Locale loc) throws IOException { final String lang; if (loc.equals(LOCALE_DUTCH)) { lang = "dut"; } else if (loc.equals(Locale.GERMAN)) { lang = "deu"; } else if (loc.equals(Locale.FRENCH)) { lang = "fra"; } else if (loc.equals(Locale.ITALIAN)) { lang = "ita"; } else if (loc.equals(LOCALE_POLISH)) { lang = "pol"; } else if (loc.equals(LOCALE_PORTUGUESE)) { lang = "por"; } else if (loc.equals(LOCALE_SPANISH)) { lang = "spa"; } else { lang = "eng"; } return SentenceDetectorME.train(lang, createSampleStream(loc), factory, TrainingParameters.defaultParams()); } static Dictionary loadAbbDictionary(Locale loc) throws IOException { final String abbrevDict; if (loc.equals(LOCALE_DUTCH)) { abbrevDict = "opennlp/tools/lang/abb_NL.xml"; } else if (loc.equals(Locale.GERMAN)) { abbrevDict = "opennlp/tools/lang/abb_DE.xml"; } else if (loc.equals(Locale.FRENCH)) { abbrevDict = "opennlp/tools/lang/abb_FR.xml"; } else if (loc.equals(Locale.ITALIAN)) { abbrevDict = "opennlp/tools/lang/abb_IT.xml"; } else if (loc.equals(LOCALE_POLISH)) { abbrevDict = "opennlp/tools/lang/abb_PT.xml"; } else if (loc.equals(LOCALE_PORTUGUESE)) { abbrevDict = "opennlp/tools/lang/abb_PT.xml"; } else if (loc.equals(LOCALE_SPANISH)) { abbrevDict = "opennlp/tools/lang/abb_ES.xml"; } else { abbrevDict = "opennlp/tools/lang/abb_EN.xml"; } return new Dictionary(AbstractSentenceDetectorTest.class.getClassLoader() .getResourceAsStream(abbrevDict)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_sentdetect_Defaul0100644 0000000 0000000 00000000174 14523004075 032626 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/DefaultEndOfSentenceScannerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/DefaultEndOfSentenceSc0100644 0000000 0000000 00000003134 14523004075 034211 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * Tests for the {@link DefaultEndOfSentenceScanner} class. */ public class DefaultEndOfSentenceScannerTest { @Test void testScanning() { EndOfSentenceScanner scanner = new DefaultEndOfSentenceScanner( new char[] {'.', '!', '?'}); List eosPositions = scanner.getPositions("... um die Wertmarken zu auswählen !?"); Assertions.assertEquals(0, eosPositions.get(0).intValue()); Assertions.assertEquals(1, eosPositions.get(1).intValue()); Assertions.assertEquals(2, eosPositions.get(2).intValue()); Assertions.assertEquals(35, eosPositions.get(3).intValue()); Assertions.assertEquals(36, eosPositions.get(4).intValue()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_sentdetect_Defaul0100644 0000000 0000000 00000000172 14523004075 032624 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/DefaultSDContextGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/DefaultSDContextGenera0100644 0000000 0000000 00000004610 14523004075 034240 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.sentdetect.lang.Factory; public class DefaultSDContextGeneratorTest { @Test void testGetContext() { SDContextGenerator sdContextGenerator = new DefaultSDContextGenerator(Collections.emptySet(), Factory.defaultEosCharacters); String[] context = sdContextGenerator.getContext( "Mr. Smith joined RONDHUIT Inc. as a manager of sales department.", 2); Assertions.assertArrayEquals("sn/eos=./x=Mr/2/xcap/v=/s=/n=Smith/ncap".split("/"), context); context = sdContextGenerator.getContext( "Mr. Smith joined RONDHUIT Inc. as a manager of sales department.", 29); Assertions.assertArrayEquals("sn/eos=./x=Inc/3/xcap/v=RONDHUIT/vcap/s=/n=as".split("/"), context); } @Test void testGetContextWithAbbreviations() { SDContextGenerator sdContextGenerator = new DefaultSDContextGenerator(new HashSet<>(Arrays.asList("Mr./Inc.".split("/"))), Factory.defaultEosCharacters); String[] context = sdContextGenerator.getContext( "Mr. Smith joined RONDHUIT Inc. as a manager of sales department.", 2); Assertions.assertArrayEquals("sn/eos=./x=Mr/2/xcap/xabbrev/v=/s=/n=Smith/ncap".split("/"), context); context = sdContextGenerator.getContext( "Mr. Smith joined RONDHUIT Inc. as a manager of sales department.", 29); Assertions.assertArrayEquals("sn/eos=./x=Inc/3/xcap/xabbrev/v=RONDHUIT/vcap/s=/n=as".split("/"), context); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_sentdetect_DummyS0100644 0000000 0000000 00000000171 14523004075 032641 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/DummySentenceDetectorFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/DummySentenceDetectorF0100644 0000000 0000000 00000010153 14523004075 034315 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Map; import java.util.Set; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.util.model.ArtifactSerializer; public class DummySentenceDetectorFactory extends SentenceDetectorFactory { private static final String DUMMY_DICT = "dummy"; private DummyDictionary dict; public DummySentenceDetectorFactory() { } public DummySentenceDetectorFactory(String languageCode, boolean useTokenEnd, Dictionary abbreviationDictionary, char[] eosCharacters) { super(languageCode, useTokenEnd, abbreviationDictionary, eosCharacters); } @Override protected void init(String languageCode, boolean useTokenEnd, Dictionary abbreviationDictionary, char[] eosCharacters) { super.init(languageCode, useTokenEnd, abbreviationDictionary, eosCharacters); this.dict = new DummyDictionary(abbreviationDictionary); } @Override public DummyDictionary getAbbreviationDictionary() { if (this.dict == null && artifactProvider != null) { this.dict = artifactProvider.getArtifact(DUMMY_DICT); } return this.dict; } @Override public SDContextGenerator getSDContextGenerator() { return new DummySDContextGenerator(getAbbreviationDictionary() .asStringSet(), getEOSCharacters()); } @Override public EndOfSentenceScanner getEndOfSentenceScanner() { return new DummyEOSScanner(getEOSCharacters()); } @Override @SuppressWarnings("rawtypes") public Map createArtifactSerializersMap() { Map serializers = super.createArtifactSerializersMap(); serializers.put(DUMMY_DICT, new DummyDictionarySerializer()); return serializers; } @Override public Map createArtifactMap() { Map artifactMap = super.createArtifactMap(); if (this.dict != null) { artifactMap.put(DUMMY_DICT, this.dict); } return artifactMap; } public static class DummyDictionarySerializer implements ArtifactSerializer { public DummyDictionary create(InputStream in) throws IOException { return new DummyDictionary(in); } public void serialize(DummyDictionary artifact, OutputStream out) throws IOException { artifact.serialize(out); } } public static class DummyDictionary extends Dictionary { private final Dictionary indict; public DummyDictionary(Dictionary dict) { this.indict = dict; } public DummyDictionary(InputStream in) throws IOException { this.indict = new Dictionary(in); } public void serialize(OutputStream out) throws IOException { indict.serialize(out); } public Set asStringSet() { return indict.asStringSet(); } @Override public Class getArtifactSerializerClass() { return DummyDictionarySerializer.class; } } static class DummySDContextGenerator extends DefaultSDContextGenerator { public DummySDContextGenerator(Set inducedAbbreviations, char[] eosCharacters) { super(inducedAbbreviations, eosCharacters); } } static class DummyEOSScanner extends DefaultEndOfSentenceScanner { public DummyEOSScanner(char[] eosCharacters) { super(eosCharacters); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_sentdetect_Newlin0100644 0000000 0000000 00000000170 14523004075 032656 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/NewlineSentenceDetectorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/NewlineSentenceDetecto0100644 0000000 0000000 00000003222 14523004075 034332 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * Tests for the {@link NewlineSentenceDetector} class. */ public class NewlineSentenceDetectorTest { private static void testSentenceValues(String sentences) { NewlineSentenceDetector sd = new NewlineSentenceDetector(); String[] results = sd.sentDetect(sentences); Assertions.assertEquals(3, results.length); Assertions.assertEquals("one.", results[0]); Assertions.assertEquals("two.", results[1]); Assertions.assertEquals("three.", results[2]); } @Test void testNewlineCr() { testSentenceValues("one.\rtwo. \r\r three.\r"); } @Test void testNewlineLf() { testSentenceValues("one.\ntwo. \n\n three.\n"); } @Test void testNewlineCrLf() { testSentenceValues("one.\r\ntwo. \r\n\r\n three.\r\n"); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_sentdetect_SDEven0100644 0000000 0000000 00000000156 14523004075 032552 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SDEventStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SDEventStreamTest.java0100644 0000000 0000000 00000004201 14523004075 034176 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.ml.model.Event; import opennlp.tools.sentdetect.lang.Factory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; import opennlp.tools.util.Span; /** * Tests for the {@link SDEventStream} class. */ public class SDEventStreamTest { @Test void testEventOutcomes() throws IOException { // Sample with two sentences SentenceSample sample = new SentenceSample("Test sent. one. Test sent. 2?", new Span(0, 15), new Span(16, 29)); ObjectStream sampleStream = ObjectStreamUtils.createObjectStream(sample); Factory factory = new Factory(); ObjectStream eventStream = new SDEventStream(sampleStream, factory.createSentenceContextGenerator("eng"), factory.createEndOfSentenceScanner("eng")); Assertions.assertEquals(SentenceDetectorME.NO_SPLIT, eventStream.read().getOutcome()); Assertions.assertEquals(SentenceDetectorME.SPLIT, eventStream.read().getOutcome()); Assertions.assertEquals(SentenceDetectorME.NO_SPLIT, eventStream.read().getOutcome()); Assertions.assertEquals(SentenceDetectorME.SPLIT, eventStream.read().getOutcome()); Assertions.assertNull(eventStream.read()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_sentdetect_Senten0100644 0000000 0000000 00000000172 14523004075 032660 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorEvaluatorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorEvalua0100644 0000000 0000000 00000005130 14523004075 034330 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.cmdline.sentdetect.SentenceEvaluationErrorListener; import opennlp.tools.util.Span; public class SentenceDetectorEvaluatorTest { @Test void testPositive() { OutputStream stream = new ByteArrayOutputStream(); SentenceDetectorEvaluationMonitor listener = new SentenceEvaluationErrorListener(stream); SentenceDetectorEvaluator eval = new SentenceDetectorEvaluator(new DummySD( SentenceSampleTest.createGoldSample()), listener); eval.evaluateSample(SentenceSampleTest.createGoldSample()); Assertions.assertEquals(1.0, eval.getFMeasure().getFMeasure()); Assertions.assertEquals(0, stream.toString().length()); } @Test void testNegative() { OutputStream stream = new ByteArrayOutputStream(); SentenceDetectorEvaluationMonitor listener = new SentenceEvaluationErrorListener(stream); SentenceDetectorEvaluator eval = new SentenceDetectorEvaluator(new DummySD( SentenceSampleTest.createGoldSample()), listener); eval.evaluateSample(SentenceSampleTest.createPredSample()); Assertions.assertEquals(eval.getFMeasure().getFMeasure(), -1.0, .1d); Assertions.assertNotSame(0, stream.toString().length()); } /** * a dummy sentence detector that always return something expected */ public static class DummySD implements SentenceDetector { private final SentenceSample sample; public DummySD(SentenceSample sample) { this.sample = sample; } @Override public String[] sentDetect(CharSequence s) { return null; } @Override public Span[] sentPosDetect(CharSequence s) { return sample.getSentences(); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_sentdetect_Senten0100644 0000000 0000000 00000000170 14523004075 032656 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorFactoryTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorFactor0100644 0000000 0000000 00000016162 14523004075 034340 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Locale; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.sentdetect.DummySentenceDetectorFactory.DummyDictionary; import opennlp.tools.sentdetect.DummySentenceDetectorFactory.DummyEOSScanner; import opennlp.tools.sentdetect.DummySentenceDetectorFactory.DummySDContextGenerator; import opennlp.tools.sentdetect.lang.Factory; /** * Tests for the {@link SentenceDetectorME} class. */ public class SentenceDetectorFactoryTest extends AbstractSentenceDetectorTest { @Test void testDefault() throws IOException { Dictionary dic = loadAbbDictionary(Locale.ENGLISH); char[] eos = {'.', '?'}; SentenceModel sdModel = train( new SentenceDetectorFactory("eng", true, dic, eos), Locale.ENGLISH); SentenceDetectorFactory factory = sdModel.getFactory(); Assertions.assertInstanceOf(DefaultSDContextGenerator.class, factory.getSDContextGenerator()); Assertions.assertInstanceOf(DefaultEndOfSentenceScanner.class, factory.getEndOfSentenceScanner()); Assertions.assertArrayEquals(eos, factory.getEOSCharacters()); ByteArrayOutputStream out = new ByteArrayOutputStream(); sdModel.serialize(out); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); SentenceModel fromSerialized = new SentenceModel(in); factory = fromSerialized.getFactory(); Assertions.assertInstanceOf(DefaultSDContextGenerator.class, factory.getSDContextGenerator()); Assertions.assertInstanceOf(DefaultEndOfSentenceScanner.class, factory.getEndOfSentenceScanner()); Assertions.assertArrayEquals(eos, factory.getEOSCharacters()); } @Test void testNullDict() throws IOException { Dictionary dic = null; char[] eos = {'.', '?'}; SentenceModel sdModel = train( new SentenceDetectorFactory("eng", true, dic, eos), Locale.ENGLISH); SentenceDetectorFactory factory = sdModel.getFactory(); Assertions.assertNull(factory.getAbbreviationDictionary()); Assertions.assertInstanceOf(DefaultSDContextGenerator.class, factory.getSDContextGenerator()); Assertions.assertInstanceOf(DefaultEndOfSentenceScanner.class, factory.getEndOfSentenceScanner()); Assertions.assertArrayEquals(eos, factory.getEOSCharacters()); ByteArrayOutputStream out = new ByteArrayOutputStream(); sdModel.serialize(out); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); SentenceModel fromSerialized = new SentenceModel(in); factory = fromSerialized.getFactory(); Assertions.assertNull(factory.getAbbreviationDictionary()); Assertions.assertInstanceOf(DefaultSDContextGenerator.class, factory.getSDContextGenerator()); Assertions.assertInstanceOf(DefaultEndOfSentenceScanner.class, factory.getEndOfSentenceScanner()); Assertions.assertArrayEquals(eos, factory.getEOSCharacters()); } @Test void testDefaultEOS() throws IOException { Dictionary dic = null; char[] eos = null; SentenceModel sdModel = train( new SentenceDetectorFactory("eng", true, dic, eos), Locale.ENGLISH); SentenceDetectorFactory factory = sdModel.getFactory(); Assertions.assertNull(factory.getAbbreviationDictionary()); Assertions.assertInstanceOf(DefaultSDContextGenerator.class, factory.getSDContextGenerator()); Assertions.assertInstanceOf(DefaultEndOfSentenceScanner.class, factory.getEndOfSentenceScanner()); Assertions.assertArrayEquals(Factory.defaultEosCharacters, factory.getEOSCharacters()); ByteArrayOutputStream out = new ByteArrayOutputStream(); sdModel.serialize(out); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); SentenceModel fromSerialized = new SentenceModel(in); factory = fromSerialized.getFactory(); Assertions.assertNull(factory.getAbbreviationDictionary()); Assertions.assertInstanceOf(DefaultSDContextGenerator.class, factory.getSDContextGenerator()); Assertions.assertInstanceOf(DefaultEndOfSentenceScanner.class, factory.getEndOfSentenceScanner()); Assertions.assertArrayEquals(Factory.defaultEosCharacters, factory.getEOSCharacters()); } @Test void testDummyFactory() throws IOException { Dictionary dic = loadAbbDictionary(Locale.ENGLISH); char[] eos = {'.', '?'}; SentenceModel sdModel = train( new DummySentenceDetectorFactory("eng", true, dic, eos), Locale.ENGLISH); SentenceDetectorFactory factory = sdModel.getFactory(); Assertions.assertInstanceOf(DummyDictionary.class, factory.getAbbreviationDictionary()); Assertions.assertInstanceOf(DummySDContextGenerator.class, factory.getSDContextGenerator()); Assertions.assertInstanceOf(DummyEOSScanner.class, factory.getEndOfSentenceScanner()); Assertions.assertArrayEquals(eos, factory.getEOSCharacters()); ByteArrayOutputStream out = new ByteArrayOutputStream(); sdModel.serialize(out); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); SentenceModel fromSerialized = new SentenceModel(in); factory = fromSerialized.getFactory(); Assertions.assertInstanceOf(DummyDictionary.class, factory.getAbbreviationDictionary()); Assertions.assertInstanceOf(DummySDContextGenerator.class, factory.getSDContextGenerator()); Assertions.assertInstanceOf(DummyEOSScanner.class, factory.getEndOfSentenceScanner()); Assertions.assertArrayEquals(eos, factory.getEOSCharacters()); Assertions.assertEquals(factory.getAbbreviationDictionary(), sdModel.getAbbreviations()); Assertions.assertArrayEquals(factory.getEOSCharacters(), sdModel.getEosCharacters()); } @Test void testCreateDummyFactory() throws IOException { Dictionary dic = loadAbbDictionary(Locale.ENGLISH); char[] eos = {'.', '?'}; SentenceDetectorFactory factory = SentenceDetectorFactory.create( DummySentenceDetectorFactory.class.getCanonicalName(), "spa", false, dic, eos); Assertions.assertInstanceOf(DummyDictionary.class, factory.getAbbreviationDictionary()); Assertions.assertInstanceOf(DummySDContextGenerator.class, factory.getSDContextGenerator()); Assertions.assertInstanceOf(DummyEOSScanner.class, factory.getEndOfSentenceScanner()); Assertions.assertArrayEquals(eos, factory.getEOSCharacters()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_sentdetect_Senten0100644 0000000 0000000 00000000170 14523004075 032656 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEDutchTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEDutc0100644 0000000 0000000 00000011777 14523004075 034252 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import opennlp.tools.dictionary.Dictionary; /** * Tests for the {@link SentenceDetectorME} class. *

* Demonstrates OPENNLP-1554. *

* In this context, well-known known Dutch (nl_NL) abbreviations must be respected, * so that words abbreviated with one or more '.' characters do not * result in incorrect sentence boundaries. *

* See: * OPENNLP-1554 */ public class SentenceDetectorMEDutchTest extends AbstractSentenceDetectorTest { private static final char[] EOS_CHARS = {'.', '?', '!'}; private static SentenceModel sentdetectModel; @BeforeAll public static void prepareResources() throws IOException { Dictionary abbreviationDict = loadAbbDictionary(LOCALE_DUTCH); SentenceDetectorFactory factory = new SentenceDetectorFactory( "dut", true, abbreviationDict, EOS_CHARS); sentdetectModel = train(factory, LOCALE_DUTCH); Assertions.assertNotNull(sentdetectModel); Assertions.assertEquals("dut", sentdetectModel.getLanguage()); } // Example taken from 'Sentences_NL.txt' @Test void testSentDetectWithInlineAbbreviationsEx1() { final String sent1 = "Een droom, tot de vorming waarvan een bijzonder sterke compressie " + "heeft bijgedragen, zal het meest gunstige materiaal zijn voor dit onderzoek."; // Here we have one abbreviations "p." => pagina (page) final String sent2 = "Ik kies voor de droom van de botanische monografie die " + "op p. 183 en volgende wordt beschreven."; SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); String sampleSentences = sent1 + " " + sent2; String[] sents = sentDetect.sentDetect(sampleSentences); Assertions.assertEquals(2, sents.length); Assertions.assertEquals(sent1, sents[0]); Assertions.assertEquals(sent2, sents[1]); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(2, probs.length); } // Reduced example taken from 'Sentences_NL.txt' @Test void testSentDetectWithInlineAbbreviationsEx2() { // Here we have one abbreviations: "d.w.z." = dat wil zeggen (eng.: that is to say) final String sent1 = "Met het oog op de overvloed aan ideeën die de analyse op elk " + "afzonderlijk element van de droominhoud brengt, zullen sommige lezers twijfels " + "hebben over het principe of alles wat later tijdens de analyse in je opkomt, " + "tot de droomgedachten gerekend mag worden, d.w.z. of aangenomen mag worden " + "dat al deze gedachten al tijdens de slaaptoestand actief waren en bijdroegen " + "aan de vorming van de droom?"; SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); String[] sents = sentDetect.sentDetect(sent1); Assertions.assertEquals(1, sents.length); Assertions.assertEquals(sent1, sents[0]); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(1, probs.length); } // Modified example deduced from 'Sentences_NL.txt' @Test void testSentDetectWithInlineAbbreviationsEx3() { // Here we have two abbreviations "pag." pagina and "e.v." = en verder/en volgende (furthermore) final String sent1 = "De gekleurde plaat die ik openmaak (zie de analyse pag. 185 e.v.) " + "verwijst naar een nieuw thema, de kritiek van collega's op mijn werk, en naar " + "een thema dat al in de droom voorkomt, mijn hobby's, en ook naar de jeugdherinnering " + "waarin ik een boek met gekleurde platen uit elkaar pluk, het gedroogde exemplaar " + "van de plant raakt aan de gymnasiumervaring met het herbarium en benadrukt deze " + "herinnering in het bijzonder."; SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); String[] sents = sentDetect.sentDetect(sent1); Assertions.assertEquals(1, sents.length); Assertions.assertEquals(sent1, sents[0]); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(1, probs.length); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_sentdetect_Senten0100644 0000000 0000000 00000000171 14523004075 032657 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEFrenchTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEFren0100644 0000000 0000000 00000011330 14523004075 034226 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.IOException; import java.util.Locale; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import opennlp.tools.dictionary.Dictionary; /** * Tests for the {@link SentenceDetectorME} class. *

* Demonstrates OPENNLP-1540. *

* In this context, well-known known French (fr_FR) abbreviations must be respected, * so that words abbreviated with one or more '.' characters do not * result in incorrect sentence boundaries. *

* See: * OPENNLP-1540 */ public class SentenceDetectorMEFrenchTest extends AbstractSentenceDetectorTest { private static final char[] EOS_CHARS = {'.', '?', '!'}; private static SentenceModel sentdetectModel; @BeforeAll public static void prepareResources() throws IOException { Dictionary abbreviationDict = loadAbbDictionary(Locale.FRENCH); SentenceDetectorFactory factory = new SentenceDetectorFactory( "fra", true, abbreviationDict, EOS_CHARS); sentdetectModel = train(factory, Locale.FRENCH); Assertions.assertNotNull(sentdetectModel); Assertions.assertEquals("fra", sentdetectModel.getLanguage()); } @ParameterizedTest @ValueSource(strings = { "Je choisis le rêve de la monographie botanique communiqué à la p. 205.", "Devant la surabondance des idées incidentes que l’analyse apporte à propos de chacun des " + "éléments du contenu de rêve, un doute principiel s’éveillera chez plus d’un lecteur: peut-on " + "donc compter au nombre des pensées de rêve tout ce qui, après coup, vous vient à l’idée dans " + "l’analyse, c.-à-d. peut-on supposer que toutes ces pensées ont déjà été actives pendant l’état " + "de sommeil et ont coopéré à la formation du rêve?" }) void testSentDetectWithInlineAbbreviationsResultsInOneSentence(String input) { SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); String[] sents = sentDetect.sentDetect(input); Assertions.assertEquals(1, sents.length); Assertions.assertEquals(input, sents[0]); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(1, probs.length); } @Test void testSentDetectWithInlineAbbreviationsResultsInTwoSentences() { // In this rather long sentence, we find two abbreviations: "cf. = see", "p. = page" final String sent1 = "La planche en couleurs que je déplie conduit (cf. l’analyse, p. 208) à un " + "nouveau thème – les critiques que les confrères font de mes travaux – et à un thème déjà " + "représenté dans le rêve, celui de mes occupations favorites, puis encore au souvenir " + "d’enfance où j’arrache les pages d’un livre aux planches en couleurs; l’exemplaire " + "séché de la plante touche à l’expérience de l’herbier vécue au lycée et fait " + "particulièrement ressortir ce souvenir."; final String sent2 = "Je vois donc de quelle sorte est la relation entre le contenu du rêve et les " + "pensées du rêve: non seulement les éléments du rêve sont déterminés de multiples façons, " + "mais les pensées du rêve prises une à une sont aussi représentées dans le rêve " + "par plusieurs éléments."; String sampleSentences = sent1 + " " + sent2; SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); String[] sents = sentDetect.sentDetect(sampleSentences); Assertions.assertEquals(2, sents.length); Assertions.assertEquals(sent1, sents[0]); Assertions.assertEquals(sent2, sents[1]); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(2, probs.length); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_sentdetect_Senten0100644 0000000 0000000 00000000171 14523004075 032657 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEGermanTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEGerm0100644 0000000 0000000 00000010610 14523004075 034226 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.IOException; import java.util.Locale; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import opennlp.tools.dictionary.Dictionary; /** * Tests for the {@link SentenceDetectorME} class. *

* Verifies OPENNLP-793 in combination with OPENNLP-570. *

* In this context, well-known known German (de_DE) abbreviations must be respected, * so that words abbreviated with one or more '.' characters do not * result in incorrect sentence boundaries. *

* See: * OPENNLP-793 * OPENNLP-570 */ public class SentenceDetectorMEGermanTest extends AbstractSentenceDetectorTest { private static final char[] EOS_CHARS = {'.', '?', '!'}; private static SentenceModel sentdetectModel; @BeforeAll public static void prepareResources() throws IOException { Dictionary abbreviationDict = loadAbbDictionary(Locale.GERMAN); SentenceDetectorFactory factory = new SentenceDetectorFactory( "deu", true, abbreviationDict, EOS_CHARS); sentdetectModel = train(factory, Locale.GERMAN); Assertions.assertNotNull(sentdetectModel); Assertions.assertEquals("deu", sentdetectModel.getLanguage()); } // Example taken from 'Sentences_DE.txt' @Test void testSentDetectWithInlineAbbreviationsEx1() { final String sent1 = "Ein Traum, zu dessen Bildung eine besonders starke Verdichtung beigetragen, " + "wird für diese Untersuchung das günstigste Material sein."; // Here we have two abbreviations "S. = Seite" and "ff. = folgende (Plural)" final String sent2 = "Ich wähle den auf S. 183 ff. mitgeteilten Traum von der botanischen Monographie."; SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); String sampleSentences = sent1 + " " + sent2; String[] sents = sentDetect.sentDetect(sampleSentences); Assertions.assertEquals(2, sents.length); Assertions.assertEquals(sent1, sents[0]); Assertions.assertEquals(sent2, sents[1]); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(2, probs.length); } // Reduced example taken from 'Sentences_DE.txt' @Test void testSentDetectWithInlineAbbreviationsEx2() { // Here we have three abbreviations: "S. = Seite", "vgl. = vergleiche", and "f. = folgende (Singular)" final String sent1 = "Die farbige Tafel, die ich aufschlage, " + "geht (vgl. die Analyse S. 185 f.) auf ein neues Thema ein."; SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); String[] sents = sentDetect.sentDetect(sent1); Assertions.assertEquals(1, sents.length); Assertions.assertEquals(sent1, sents[0]); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(1, probs.length); } // Modified example deduced from 'Sentences_DE.txt' @Test void testSentDetectWithInlineAbbreviationsEx3() { // Here we have two abbreviations "z. B. = zum Beispiel" and "S. = Seite" final String sent1 = "Die farbige Tafel, die ich aufschlage, " + "geht (z. B. die Analyse S. 185) auf ein neues Thema ein."; SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); String[] sents = sentDetect.sentDetect(sent1); Assertions.assertEquals(1, sents.length); Assertions.assertEquals(sent1, sents[0]); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(1, probs.length); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_sentdetect_Senten0100644 0000000 0000000 00000000161 14523004075 032656 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEIT.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEIT.j0100644 0000000 0000000 00000012123 14523004075 034101 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.Span; public class SentenceDetectorMEIT { @Test void testSentenceDetectorDownloadModel() throws IOException { SentenceDetectorME sentDetect = new SentenceDetectorME("en"); // Tests sentence detector with sentDetect method String sampleSentences1 = "This is a test. There are many tests, this is the second."; String[] sents = sentDetect.sentDetect(sampleSentences1); Assertions.assertEquals(sents.length, 2); Assertions.assertEquals(sents[0], "This is a test."); Assertions.assertEquals(sents[1], "There are many tests, this is the second."); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(probs.length, 2); String sampleSentences2 = "This is a test. There are many tests, this is the second"; sents = sentDetect.sentDetect(sampleSentences2); Assertions.assertEquals(sents.length, 2); probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(probs.length, 2); Assertions.assertEquals(sents[0], "This is a test."); Assertions.assertEquals(sents[1], "There are many tests, this is the second"); String sampleSentences3 = "This is a \"test\". He said \"There are many tests, this is the second.\""; sents = sentDetect.sentDetect(sampleSentences3); Assertions.assertEquals(sents.length, 2); probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(probs.length, 2); Assertions.assertEquals(sents[0], "This is a \"test\"."); Assertions.assertEquals(sents[1], "He said \"There are many tests, this is the second.\""); String sampleSentences4 = "This is a \"test\". I said \"This is a test.\" Any questions?"; sents = sentDetect.sentDetect(sampleSentences4); Assertions.assertEquals(sents.length, 3); probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(probs.length, 3); Assertions.assertEquals(sents[0], "This is a \"test\"."); Assertions.assertEquals(sents[1], "I said \"This is a test.\""); Assertions.assertEquals(sents[2], "Any questions?"); String sampleSentences5 = "This is a one sentence test space at the end. "; sents = sentDetect.sentDetect(sampleSentences5); Assertions.assertEquals(1, sentDetect.getSentenceProbabilities().length); Assertions.assertEquals(sents[0], "This is a one sentence test space at the end."); String sampleSentences6 = "This is a one sentences test with tab at the end. "; sents = sentDetect.sentDetect(sampleSentences6); Assertions.assertEquals(sents[0], "This is a one sentences test with tab at the end."); String sampleSentences7 = "This is a test. With spaces between the two sentences."; sents = sentDetect.sentDetect(sampleSentences7); Assertions.assertEquals(sents[0], "This is a test."); Assertions.assertEquals(sents[1], "With spaces between the two sentences."); String sampleSentences9 = ""; sents = sentDetect.sentDetect(sampleSentences9); Assertions.assertEquals(0, sents.length); String sampleSentences10 = " "; // whitespaces and tabs sents = sentDetect.sentDetect(sampleSentences10); Assertions.assertEquals(0, sents.length); String sampleSentences11 = "This is test sentence without a dot at the end and spaces "; sents = sentDetect.sentDetect(sampleSentences11); Assertions.assertEquals(sents[0], "This is test sentence without a dot at the end and spaces"); probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(1, probs.length); String sampleSentence12 = " This is a test."; sents = sentDetect.sentDetect(sampleSentence12); Assertions.assertEquals(sents[0], "This is a test."); String sampleSentence13 = " This is a test"; sents = sentDetect.sentDetect(sampleSentence13); Assertions.assertEquals(sents[0], "This is a test"); // Test that sentPosDetect also works Span[] pos = sentDetect.sentPosDetect(sampleSentences2); Assertions.assertEquals(pos.length, 2); probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(probs.length, 2); Assertions.assertEquals(new Span(0, 15), pos[0]); Assertions.assertEquals(new Span(16, 56), pos[1]); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_sentdetect_Senten0100644 0000000 0000000 00000000172 14523004075 032660 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEItalianTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEItal0100644 0000000 0000000 00000013251 14523004075 034231 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Locale; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.PlainTextByLineStream; /** * Tests for the {@link SentenceDetectorME} class. *

* Demonstrates OPENNLP-1530. *

* In this context, well-known known Italian (it_IT) abbreviations must be respected, * so that words abbreviated with one or more '.' characters do not * result in incorrect sentence boundaries. *

* See: * OPENNLP-1530 */ public class SentenceDetectorMEItalianTest extends AbstractSentenceDetectorTest { private static final char[] EOS_CHARS = {'.', '?', '!'}; private static SentenceModel sentdetectModel; @BeforeAll public static void prepareResources() throws IOException { Dictionary abbreviationDict = loadAbbDictionary(Locale.ITALIAN); SentenceDetectorFactory factory = new SentenceDetectorFactory( "ita", true, abbreviationDict, EOS_CHARS); sentdetectModel = train(factory, Locale.ITALIAN); Assertions.assertNotNull(sentdetectModel); Assertions.assertEquals("ita", sentdetectModel.getLanguage()); } @ParameterizedTest @ValueSource(strings = { "La chiesa fu costruita fra il 1258 ed il 1308 ca. come chiesa del convento degli Agostiniani.", "Laureato in Scienza Politiche presso l'Università S. Pio V, di Roma.", "La chiesa, che prima dipendeva da S. Giovanni Battista sopra Quarona, " + "fu innalzata parrocchia nel 1588, con la posa della croce sulla sommità." }) void testSentDetectWithInlineAbbreviationsResultsInOneSentence(String input) { SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); String[] sents = sentDetect.sentDetect(input); Assertions.assertEquals(1, sents.length); Assertions.assertEquals(input, sents[0]); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(1, probs.length); } @Test void testSentDetectWithInlineAbbreviationsResultsInTwoSentences() { // In this rather long sentence, we find two abbreviations: "S. = San" and "S. = Santa" final String sent1 = "L' antico Conservatorio di S. Giuseppe e Teresa di Pucara del 1662 è " + "soggetto a speculazione edilizia."; final String sent2 = "La consegna ha avuto luogo nell'auditorium S. Chiara di Trento, che per " + "l'occasione era pieno."; String sampleSentences = sent1 + " " + sent2; SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); String[] sents = sentDetect.sentDetect(sampleSentences); Assertions.assertEquals(2, sents.length); Assertions.assertEquals(sent1, sents[0]); Assertions.assertEquals(sent2, sents[1]); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(2, probs.length); } /* * Verifies OPENNLP-1163, * see: https://issues.apache.org/jira/browse/OPENNLP-1163 * * Original problem: * "Even though the abbreviation "art." was included in the XML file, * the sentence detector breaks the sentence on instances of this * abbreviation preceded by article and apostrophe * (e.g. nell'art., dall'art., dell'art.)" * * This test demonstrates it is working, with "art." in the abbreviations xml file. */ @Test void testSentDetectOpenNLP1163() throws IOException { final SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); final String testResource = "/opennlp/tools/sentdetect/Test-Sample_OPENNLP-1163.txt"; InputStreamFactory in = new ResourceAsStreamFactory( AbstractSentenceDetectorTest.class, testResource); List detectedSentences = new ArrayList<>(); try (PlainTextByLineStream stream = new PlainTextByLineStream(in, StandardCharsets.UTF_8)) { StringBuilder text = new StringBuilder(); String line; do { line = stream.read(); text.append(line); } while (line != null); String[] sents = sentDetect.sentDetect(text.toString()); detectedSentences.addAll(Arrays.asList(sents)); } // Test Assertions.assertEquals(11, detectedSentences.size()); for (String sent : detectedSentences) { Assertions.assertFalse(hasMisplacedAbbreviationAtEnd(sent)); } } private boolean hasMisplacedAbbreviationAtEnd(String sent) { return sent.endsWith("dell'art.") || sent.endsWith("dall'art.") || sent.endsWith("nell'art."); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_sentdetect_Senten0100644 0000000 0000000 00000000171 14523004075 032657 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEPolishTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEPoli0100644 0000000 0000000 00000010270 14523004075 034241 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import opennlp.tools.dictionary.Dictionary; /** * Tests for the {@link SentenceDetectorME} class. *

* Demonstrates OPENNLP-1543. *

* In this context, well-known known Polish (pl_PL) abbreviations must be respected, * so that words abbreviated with one or more '.' characters do not * result in incorrect sentence boundaries. *

* See: * OPENNLP-1543 *

* Examples taken from: * * https://pl.wikipedia.org/wiki/Sigmund_Freud */ public class SentenceDetectorMEPolishTest extends AbstractSentenceDetectorTest { private static final char[] EOS_CHARS = {'.', '?', '!'}; private static SentenceModel sentdetectModel; @BeforeAll public static void prepareResources() throws IOException { Dictionary abbreviationDict = loadAbbDictionary(LOCALE_POLISH); SentenceDetectorFactory factory = new SentenceDetectorFactory( "pol", true, abbreviationDict, EOS_CHARS); sentdetectModel = train(factory, LOCALE_POLISH); Assertions.assertNotNull(sentdetectModel); Assertions.assertEquals("pol", sentdetectModel.getLanguage()); } @ParameterizedTest @ValueSource(strings = { "Freud zauważył, że w normalnych warunkach silne pobudzenie emocjonalne wymaga " + "odpowiedniego rozładowania w formie działania (np. uraza ze strony jakiejś osoby wymaga " + "odwetu) lub opracowania intelektualnego.", "Z tego pierwszego badania można odnieść wrażenie, że elementy \"botaniczny\" i \"monografia\" " + "znalazły się w treści snu, ponieważ mogą mieć najszerszy kontakt z większością myśli sennych, " + "tj. reprezentują punkty węzłowe, w których spotyka się wiele myśli sennych, ponieważ są one " + "niejednoznaczne w odniesieniu do interpretacji snów." }) void testSentDetectWithInlineAbbreviationsResultsInOneSentence(String input) { SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); String[] sents = sentDetect.sentDetect(input); Assertions.assertEquals(1, sents.length); Assertions.assertEquals(input, sents[0]); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(1, probs.length); } @Test void testSentDetectWithInlineAbbreviationsResultsInTwoSentences() { // One abbreviated term: "pt." -> final String sent1 = "W szkicu autobiograficznym pt. moje życie i psychoanaliza Freud pisze, że " + "jego przodkowie żyli przez wiele lat w Kolonii."; final String sent2 = "W wyniku prześladowań Żydów w XIV i XV wieku uciekli na wschód do " + "Polski i na Litwę."; String sampleSentences = sent1 + " " + sent2; SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); String[] sents = sentDetect.sentDetect(sampleSentences); Assertions.assertEquals(2, sents.length); Assertions.assertEquals(sent1, sents[0]); Assertions.assertEquals(sent2, sents[1]); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(2, probs.length); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_sentdetect_Senten0100644 0000000 0000000 00000000175 14523004075 032663 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEPortugueseTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMEPort0100644 0000000 0000000 00000007161 14523004075 034267 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import opennlp.tools.dictionary.Dictionary; /** * Tests for the {@link SentenceDetectorME} class. *

* Demonstrates OPENNLP-1531. *

* In this context, well-known known Portuguese (pt) abbreviations must be respected, * so that words abbreviated with one or more '.' characters do not * result in incorrect sentence boundaries. *

* See: * OPENNLP-1531 */ public class SentenceDetectorMEPortugueseTest extends AbstractSentenceDetectorTest { private static final char[] EOS_CHARS = {'.', '?', '!'}; private static SentenceModel sentdetectModel; @BeforeAll public static void prepareResources() throws IOException { Dictionary abbreviationDict = loadAbbDictionary(LOCALE_PORTUGUESE); SentenceDetectorFactory factory = new SentenceDetectorFactory( "por", true, abbreviationDict, EOS_CHARS); sentdetectModel = train(factory, LOCALE_PORTUGUESE); Assertions.assertNotNull(sentdetectModel); Assertions.assertEquals("por", sentdetectModel.getLanguage()); } @ParameterizedTest @ValueSource(strings = { "Medico é o Dr. Avelino, d'aqui a legoa e meia, nas Bolsas.", "Mas já V. Ex.a vê, esta gentinha é pobre!", "S. Alteza o Gran-Duque Casimiro!" }) void testSentDetectWithInlineAbbreviationsResultsInOneSentence(String input) { SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); String[] sents = sentDetect.sentDetect(input); Assertions.assertEquals(1, sents.length); Assertions.assertEquals(input, sents[0]); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(1, probs.length); } @Test void testSentDetectWithInlineAbbreviationsResultsInTwoSentences() { // In this rather long sentence, we find two abbreviations: "Sr. (Senhor)", "D. (Dom)" final String sent1 = "O povo pernambucano, tradicionalmente inimigo dos imperadores, " + "lembrava-se do tempo em que o Sr. D. Pedro de Alcantara dava-se ao luxo de " + "visitar o norte."; final String sent2 = "S. Exc.a soffre de fartura."; String sampleSentences = sent1 + " " + sent2; SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); String[] sents = sentDetect.sentDetect(sampleSentences); Assertions.assertEquals(2, sents.length); Assertions.assertEquals(sent1, sents[0]); Assertions.assertEquals(sent2, sents[1]); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(2, probs.length); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_sentdetect_Senten0100644 0000000 0000000 00000000172 14523004075 032660 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMESpanishTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMESpan0100644 0000000 0000000 00000010306 14523004075 034237 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import opennlp.tools.dictionary.Dictionary; /** * Tests for the {@link SentenceDetectorME} class. *

* Demonstrates OPENNLP-1526. *

* In this context, well-known known Spanish (es_ES) abbreviations must be respected, * so that words abbreviated with one or more '.' characters do not * result in incorrect sentence boundaries. *

* See: * OPENNLP-1526 */ public class SentenceDetectorMESpanishTest extends AbstractSentenceDetectorTest { private static final char[] EOS_CHARS = {'.', '?', '!'}; private static SentenceModel sentdetectModel; @BeforeAll public static void prepareResources() throws IOException { Dictionary abbreviationDict = loadAbbDictionary(LOCALE_SPANISH); SentenceDetectorFactory factory = new SentenceDetectorFactory( "spa", true, abbreviationDict, EOS_CHARS); sentdetectModel = train(factory, LOCALE_SPANISH); Assertions.assertNotNull(sentdetectModel); Assertions.assertEquals("spa", sentdetectModel.getLanguage()); } @ParameterizedTest @ValueSource(strings = { "El panel de color que abro (cf. el análisis de la pág. 185) trata un tema nuevo", "El panel de color que abro (p.ej. el análisis de la pág. 185) trata un tema nuevo", "El caballo se come la ensalada de pepino con el n.º dos." }) void testSentDetectWithInlineAbbreviationsResultsInOneSentence(String input) { SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); String[] sents = sentDetect.sentDetect(input); Assertions.assertEquals(1, sents.length); Assertions.assertEquals(input, sents[0]); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(1, probs.length); } @Test void testSentDetectWithInlineAbbreviationsResultsInTwoSentences() { // In this rather long sentence, we find two abbreviations: "cf. (see)", "pág. = Página" final String sent1 = "Ya Aristóteles creía en la posibilidad de hallar en los sueños la indicación" + "del comienzo de una enfermedad de la que en el estado de vigilia no experimentábamos aún" + "el menor indicio (merced a la ampliación que el sueño deja experimentar a las" + "impresiones), y autores médicos de cuyas opiniones se hallaba muy lejos el conceder a los" + "sueños un valor profético, han aceptado esta significación de los mismos como" + "anunciadores de la enfermedad (cf. Simón, pág. 31, y otros muchos autores más" + "antiguos)."; final String sent2 = "Tampoco en la época moderna faltan ejemplos comprobados de una tal " + "función diagnóstica del sueño."; String sampleSentences = sent1 + " " + sent2; SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); String[] sents = sentDetect.sentDetect(sampleSentences); Assertions.assertEquals(2, sents.length); Assertions.assertEquals(sent1, sents[0]); Assertions.assertEquals(sent2, sents[1]); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(2, probs.length); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_sentdetect_Senten0100644 0000000 0000000 00000000163 14523004075 032660 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMETest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceDetectorMETest0100644 0000000 0000000 00000017027 14523004075 034264 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Locale; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.InsufficientTrainingDataException; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; import opennlp.tools.util.TrainingParameters; /** * Tests for the {@link SentenceDetectorME} class. */ public class SentenceDetectorMETest extends AbstractSentenceDetectorTest { private static SentenceModel sentdetectModel; @BeforeAll public static void prepareResources() throws IOException { Dictionary abbreviationDict = loadAbbDictionary(Locale.ENGLISH); SentenceDetectorFactory factory = new SentenceDetectorFactory( "eng", true, abbreviationDict, null); sentdetectModel = train(factory, Locale.ENGLISH); Assertions.assertNotNull(sentdetectModel); Assertions.assertEquals("eng", sentdetectModel.getLanguage()); } @Test void testSentDetect() { SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); // Tests sentence detector with sentDetect method String sampleSentences1 = "This is a test. There are many tests, this is the second."; String[] sents = sentDetect.sentDetect(sampleSentences1); Assertions.assertEquals(sents.length, 2); Assertions.assertEquals(sents[0], "This is a test."); Assertions.assertEquals(sents[1], "There are many tests, this is the second."); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(probs.length, 2); String sampleSentences2 = "This is a test. There are many tests, this is the second"; sents = sentDetect.sentDetect(sampleSentences2); Assertions.assertEquals(sents.length, 2); probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(probs.length, 2); Assertions.assertEquals(sents[0], "This is a test."); Assertions.assertEquals(sents[1], "There are many tests, this is the second"); String sampleSentences3 = "This is a \"test\". He said \"There are many tests, this is the second.\""; sents = sentDetect.sentDetect(sampleSentences3); Assertions.assertEquals(sents.length, 2); probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(probs.length, 2); Assertions.assertEquals(sents[0], "This is a \"test\"."); Assertions.assertEquals(sents[1], "He said \"There are many tests, this is the second.\""); String sampleSentences4 = "This is a \"test\". I said \"This is a test.\" Any questions?"; sents = sentDetect.sentDetect(sampleSentences4); Assertions.assertEquals(sents.length, 3); probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(probs.length, 3); Assertions.assertEquals(sents[0], "This is a \"test\"."); Assertions.assertEquals(sents[1], "I said \"This is a test.\""); Assertions.assertEquals(sents[2], "Any questions?"); String sampleSentences5 = "This is a one sentence test space at the end. "; sents = sentDetect.sentDetect(sampleSentences5); Assertions.assertEquals(1, sentDetect.getSentenceProbabilities().length); Assertions.assertEquals(sents[0], "This is a one sentence test space at the end."); String sampleSentences6 = "This is a one sentences test with tab at the end. "; sents = sentDetect.sentDetect(sampleSentences6); Assertions.assertEquals(sents[0], "This is a one sentences test with tab at the end."); String sampleSentences7 = "This is a test. With spaces between the two sentences."; sents = sentDetect.sentDetect(sampleSentences7); Assertions.assertEquals(sents[0], "This is a test."); Assertions.assertEquals(sents[1], "With spaces between the two sentences."); String sampleSentences9 = ""; sents = sentDetect.sentDetect(sampleSentences9); Assertions.assertEquals(0, sents.length); String sampleSentences10 = " "; // whitespaces and tabs sents = sentDetect.sentDetect(sampleSentences10); Assertions.assertEquals(0, sents.length); String sampleSentences11 = "This is test sentence without a dot at the end and spaces "; sents = sentDetect.sentDetect(sampleSentences11); Assertions.assertEquals(sents[0], "This is test sentence without a dot at the end and spaces"); probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(1, probs.length); String sampleSentence12 = " This is a test."; sents = sentDetect.sentDetect(sampleSentence12); Assertions.assertEquals(sents[0], "This is a test."); String sampleSentence13 = " This is a test"; sents = sentDetect.sentDetect(sampleSentence13); Assertions.assertEquals(sents[0], "This is a test"); // Test that sentPosDetect also works Span[] pos = sentDetect.sentPosDetect(sampleSentences2); Assertions.assertEquals(pos.length, 2); probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(probs.length, 2); Assertions.assertEquals(new Span(0, 15), pos[0]); Assertions.assertEquals(new Span(16, 56), pos[1]); } /* * Tests OPENNLP-793 -> known abbreviations shall be respected (= no sentence break) * see: https://issues.apache.org/jira/projects/OPENNLP/issues/OPENNLP-793 */ @Test void testSentDetectWithInlineAbbreviations() { SentenceDetectorME sentDetect = new SentenceDetectorME(sentdetectModel); String sampleSentences1 = "This is a test for Mr. Miller. " + "His wife, Ms. Susan Miller, is also part of this test."; String[] sents = sentDetect.sentDetect(sampleSentences1); Assertions.assertEquals(sents.length, 2); Assertions.assertEquals(sents[0], "This is a test for Mr. Miller."); Assertions.assertEquals(sents[1], "His wife, Ms. Susan Miller, is also part of this test."); double[] probs = sentDetect.getSentenceProbabilities(); Assertions.assertEquals(probs.length, 2); } @Test void testTrainWithInsufficientData() { Assertions.assertThrows(InsufficientTrainingDataException.class, () -> { InputStreamFactory in = new ResourceAsStreamFactory(getClass(), "/opennlp/tools/sentdetect/SentencesInsufficient.txt"); TrainingParameters mlParams = new TrainingParameters(); mlParams.put(TrainingParameters.ITERATIONS_PARAM, 100); mlParams.put(TrainingParameters.CUTOFF_PARAM, 0); SentenceDetectorFactory factory = new SentenceDetectorFactory("eng", true, null, null); SentenceDetectorME.train("eng", new SentenceSampleStream(new PlainTextByLineStream(in, StandardCharsets.UTF_8)), factory, mlParams); }); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_sentdetect_Senten0100644 0000000 0000000 00000000157 14523004075 032663 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceSampleTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/sentdetect/SentenceSampleTest.jav0100644 0000000 0000000 00000006544 14523004075 034273 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.sentdetect; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.Span; /** * Tests for the {@link SentenceSample} class. */ public class SentenceSampleTest { @Test void testRetrievingContent() { SentenceSample sample = new SentenceSample("1. 2.", new Span(0, 2), new Span(3, 5)); Assertions.assertEquals("1. 2.", sample.getDocument()); Assertions.assertEquals(new Span(0, 2), sample.getSentences()[0]); Assertions.assertEquals(new Span(3, 5), sample.getSentences()[1]); } @Test void testSentenceSampleSerDe() throws IOException { SentenceSample sentenceSample = createGoldSample(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream(byteArrayOutputStream); out.writeObject(sentenceSample); out.flush(); byte[] bytes = byteArrayOutputStream.toByteArray(); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); ObjectInput objectInput = new ObjectInputStream(byteArrayInputStream); SentenceSample deSerializedSentenceSample = null; try { deSerializedSentenceSample = (SentenceSample) objectInput.readObject(); } catch (ClassNotFoundException e) { // do nothing } Assertions.assertNotNull(deSerializedSentenceSample); Assertions.assertEquals(sentenceSample.getDocument(), deSerializedSentenceSample.getDocument()); Assertions.assertArrayEquals(sentenceSample.getSentences(), deSerializedSentenceSample.getSentences()); } @Test void testInvalidSpansFailFast() { Assertions.assertThrows(IllegalArgumentException.class, () -> { SentenceSample sample = new SentenceSample("1. 2.", new Span(0, 2), new Span(5, 7)); }); } @Test void testEquals() { Assertions.assertNotSame(createGoldSample(), createGoldSample()); Assertions.assertEquals(createGoldSample(), createGoldSample()); Assertions.assertNotEquals(createPredSample(), createGoldSample()); Assertions.assertNotEquals(createPredSample(), new Object()); } public static SentenceSample createGoldSample() { return new SentenceSample("1. 2.", new Span(0, 2), new Span(3, 5)); } public static SentenceSample createPredSample() { return new SentenceSample("1. 2.", new Span(0, 1), new Span(4, 5)); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/stemmer/PorterStemmerTest.java0100644 0000000 0000000 00000003553 14523004075 033645 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.stemmer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; public class PorterStemmerTest { private PorterStemmer stemmer; @BeforeEach public void setup() { stemmer = new PorterStemmer(); } @Test void testStem() { Assertions.assertEquals("deni", stemmer.stem("deny")); Assertions.assertEquals("declin", stemmer.stem("declining")); Assertions.assertEquals("divers", stemmer.stem("diversity")); Assertions.assertEquals("diver", stemmer.stem("divers")); Assertions.assertEquals("dental", stemmer.stem("dental")); } @ParameterizedTest @ValueSource(strings = {"likes", "liked", "likely", "liking"}) void testStemLike(String input) { Assertions.assertEquals("like", stemmer.stem(input)); } @Test // Context: OpenNLP-1229 - This is here to demonstrate & verify. void testStemThis() { Assertions.assertEquals("thi", stemmer.stem("this")); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/stemmer/SnowballStemmerTest.java0100644 0000000 0000000 00000016655 14523004075 034162 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.stemmer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.stemmer.snowball.SnowballStemmer; import opennlp.tools.stemmer.snowball.SnowballStemmer.ALGORITHM; public class SnowballStemmerTest { @Test void testArabic() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.ARABIC); Assertions.assertEquals(stemmer.stem("أأباءاهم"), "اباء"); Assertions.assertEquals(stemmer.stem("Ø§Ø³ØªÙØªÙŠØ§ÙƒÙ…ا"), "Ø§Ø³ØªÙØªÙŠ"); Assertions.assertEquals(stemmer.stem("استنتاجاتهما"), "استنتاجا"); } @Test void testDanish() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.DANISH); Assertions.assertEquals(stemmer.stem("aabenbaringen"), "aabenbaring"); Assertions.assertEquals(stemmer.stem("skuebrødsbordene"), "skuebrødsbord"); Assertions.assertEquals(stemmer.stem("skrøbeligheder"), "skrøb"); } @Test void testDutch() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.DUTCH); Assertions.assertEquals(stemmer.stem("vliegtuigtransport"), "vliegtuigtransport"); Assertions.assertEquals(stemmer.stem("sterlabcertificaat"), "sterlabcertificat"); Assertions.assertEquals(stemmer.stem("vollegrondsgroenteteelt"), "vollegrondsgroenteteelt"); } @Test void testCatalan() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.CATALAN); Assertions.assertEquals(stemmer.stem("importantíssimes"), "important"); Assertions.assertEquals(stemmer.stem("besar"), "bes"); Assertions.assertEquals(stemmer.stem("accidentalment"), "accidental"); } @Test void testEnglish() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.ENGLISH); Assertions.assertEquals(stemmer.stem("accompanying"), "accompani"); Assertions.assertEquals(stemmer.stem("malediction"), "maledict"); Assertions.assertEquals(stemmer.stem("softeners"), "soften"); } @Test // Context: OpenNLP-1229 - This is here to demonstrate & verify. void testStemThis() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.ENGLISH); Assertions.assertEquals("this", stemmer.stem("this")); } @Test void testFinnish() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.FINNISH); Assertions.assertEquals(stemmer.stem("esiintymispaikasta"), "esiintymispaik"); Assertions.assertEquals(stemmer.stem("esiintyviätaiteilijaystäviään"), "esiintyviätaiteilijaystäviä"); Assertions.assertEquals(stemmer.stem("hellbergiä"), "hellberg"); } @Test void testFrench() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.FRENCH); Assertions.assertEquals(stemmer.stem("accomplissaient"), "accompl"); Assertions.assertEquals(stemmer.stem("examinateurs"), "examin"); Assertions.assertEquals(stemmer.stem("prévoyant"), "prévoi"); } @Test void testGerman() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.GERMAN); Assertions.assertEquals(stemmer.stem("buchbindergesellen"), "buchbindergesell"); Assertions.assertEquals(stemmer.stem("mindere"), "mind"); Assertions.assertEquals(stemmer.stem("mitverursacht"), "mitverursacht"); } @Test void testGreek() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.GREEK); Assertions.assertEquals(stemmer.stem("επιστÏοφή"), "επιστÏοφ"); Assertions.assertEquals(stemmer.stem("ΑμεÏικανών"), "αμεÏικαν"); Assertions.assertEquals(stemmer.stem("στÏατιωτών"), "στÏατιωτ"); } @Test void testHungarian() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.HUNGARIAN); Assertions.assertEquals(stemmer.stem("abbahagynám"), "abbahagyna"); Assertions.assertEquals(stemmer.stem("konstrukciójából"), "konstrukció"); Assertions.assertEquals(stemmer.stem("lopta"), "lopt"); } @Test void testIrish() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.IRISH); Assertions.assertEquals(stemmer.stem("bhfeidhm"), "feidhm"); Assertions.assertEquals(stemmer.stem("feirmeoireacht"), "feirmeoir"); Assertions.assertEquals(stemmer.stem("monarcacht"), "monarc"); } @Test void testItalian() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.ITALIAN); Assertions.assertEquals(stemmer.stem("abbattimento"), "abbatt"); Assertions.assertEquals(stemmer.stem("dancer"), "dancer"); Assertions.assertEquals(stemmer.stem("dance"), "danc"); } @Test void testIndonesian() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.INDONESIAN); Assertions.assertEquals(stemmer.stem("peledakan"), "ledak"); Assertions.assertEquals(stemmer.stem("pelajaran"), "ajar"); Assertions.assertEquals(stemmer.stem("perbaikan"), "baik"); } @Test void testPortuguese() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.PORTUGUESE); Assertions.assertEquals(stemmer.stem("aborrecimentos"), "aborrec"); Assertions.assertEquals(stemmer.stem("aché"), "aché"); Assertions.assertEquals(stemmer.stem("ache"), "ache"); } @Test void testRomanian() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.ROMANIAN); Assertions.assertEquals(stemmer.stem("absurdităţilor"), "absurd"); Assertions.assertEquals(stemmer.stem("laÅŸi"), "laÈ™"); Assertions.assertEquals(stemmer.stem("saracilor"), "sarac"); } @Test void testSpanish() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.SPANISH); Assertions.assertEquals(stemmer.stem("besó"), "bes"); Assertions.assertEquals(stemmer.stem("importantísimas"), "importantisim"); Assertions.assertEquals(stemmer.stem("incidental"), "incidental"); } @Test void testSwedish() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.SWEDISH); Assertions.assertEquals(stemmer.stem("aftonringningen"), "aftonringning"); Assertions.assertEquals(stemmer.stem("andedrag"), "andedrag"); Assertions.assertEquals(stemmer.stem("andedrägt"), "andedräg"); } @Test void testTurkish() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.TURKISH); Assertions.assertEquals(stemmer.stem("ab'yle"), "ab'yle"); Assertions.assertEquals(stemmer.stem("kaçmamaktadır"), "kaçmamak"); Assertions.assertEquals(stemmer.stem("sarayı'nı"), "sarayı'nı"); } @Test void testFinish() { SnowballStemmer stemmer = new SnowballStemmer(ALGORITHM.FINNISH); // reference: https://snowballstem.org/demo.html#Finnish Assertions.assertEquals("edeltän", stemmer.stem("edeltäneeseen")); //r_LONG() Assertions.assertEquals("voita", stemmer.stem("voitaisiin")); // r_VI() Assertions.assertEquals("innostuks", stemmer.stem("innostuksessaan")); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_tokenize_Detokeni0100644 0000000 0000000 00000000167 14523004075 032660 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/DetokenizationDictionaryTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/DetokenizationDictionary0100644 0000000 0000000 00000004424 14523004075 034444 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.tokenize.DetokenizationDictionary.Operation; public class DetokenizationDictionaryTest { private DetokenizationDictionary dict; @BeforeEach void setUp() { String[] tokens = new String[] {"\"", "(", ")", "-"}; Operation[] operations = new Operation[] {Operation.RIGHT_LEFT_MATCHING, Operation.MOVE_RIGHT, Operation.MOVE_LEFT, Operation.MOVE_BOTH}; dict = new DetokenizationDictionary(tokens, operations); } private static void testEntries(DetokenizationDictionary dict) { Assertions.assertEquals(Operation.RIGHT_LEFT_MATCHING, dict.getOperation("\"")); Assertions.assertEquals(Operation.MOVE_RIGHT, dict.getOperation("(")); Assertions.assertEquals(Operation.MOVE_LEFT, dict.getOperation(")")); Assertions.assertEquals(Operation.MOVE_BOTH, dict.getOperation("-")); } @Test void testSimpleDict() { testEntries(dict); } @Test void testSerialization() throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); dict.serialize(out); DetokenizationDictionary parsedDict = new DetokenizationDictionary( new ByteArrayInputStream(out.toByteArray())); // should contain the same entries like the original testEntries(parsedDict); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_tokenize_Detokeni0100644 0000000 0000000 00000000163 14523004075 032654 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/DetokenizerEvaluatorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/DetokenizerEvaluatorTest0100644 0000000 0000000 00000005064 14523004075 034436 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.cmdline.tokenizer.DetokenEvaluationErrorListener; public class DetokenizerEvaluatorTest { @Test void testPositive() { OutputStream stream = new ByteArrayOutputStream(); DetokenEvaluationErrorListener listener = new DetokenEvaluationErrorListener(stream); DetokenizerEvaluator eval = new DetokenizerEvaluator(new DummyDetokenizer( TokenSampleTest.createGoldSample()), listener); eval.evaluateSample(TokenSampleTest.createGoldSample()); Assertions.assertEquals(1.0, eval.getFMeasure().getFMeasure(), 0.0); Assertions.assertEquals(0, stream.toString().length()); } @Test void testNegative() { OutputStream stream = new ByteArrayOutputStream(); DetokenEvaluationErrorListener listener = new DetokenEvaluationErrorListener( stream); DetokenizerEvaluator eval = new DetokenizerEvaluator(new DummyDetokenizer( TokenSampleTest.createGoldSample()), listener); eval.evaluateSample(TokenSampleTest.createPredSilverSample()); Assertions.assertEquals(-1.0d, eval.getFMeasure().getFMeasure(), .1d); Assertions.assertNotSame(0, stream.toString().length()); } /** * a dummy tokenizer that always return something expected */ static class DummyDetokenizer implements Detokenizer { private final TokenSample sample; public DummyDetokenizer(TokenSample sample) { this.sample = sample; } public DetokenizationOperation[] detokenize(String[] tokens) { return null; } public String detokenize(String[] tokens, String splitMarker) { return this.sample.getText(); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_tokenize_Dictiona0100644 0000000 0000000 00000000164 14523004075 032645 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/DictionaryDetokenizerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/DictionaryDetokenizerTes0100644 0000000 0000000 00000006413 14523004075 034414 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.IOException; import java.io.InputStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.tokenize.DetokenizationDictionary.Operation; import opennlp.tools.tokenize.Detokenizer.DetokenizationOperation; public class DictionaryDetokenizerTest { @Test void testDetokenizer() { String[] tokens = new String[] {".", "!", "(", ")", "\"", "-"}; Operation[] operations = new Operation[] { Operation.MOVE_LEFT, Operation.MOVE_LEFT, Operation.MOVE_RIGHT, Operation.MOVE_LEFT, Operation.RIGHT_LEFT_MATCHING, Operation.MOVE_BOTH}; DetokenizationDictionary dict = new DetokenizationDictionary(tokens, operations); Detokenizer detokenizer = new DictionaryDetokenizer(dict); DetokenizationOperation[] detokenizeOperations = detokenizer.detokenize(new String[] {"Simple", "test", ".", "co", "-", "worker"}); Assertions.assertEquals(DetokenizationOperation.NO_OPERATION, detokenizeOperations[0]); Assertions.assertEquals(DetokenizationOperation.NO_OPERATION, detokenizeOperations[1]); Assertions.assertEquals(DetokenizationOperation.MERGE_TO_LEFT, detokenizeOperations[2]); Assertions.assertEquals(DetokenizationOperation.NO_OPERATION, detokenizeOperations[3]); Assertions.assertEquals(DetokenizationOperation.MERGE_BOTH, detokenizeOperations[4]); Assertions.assertEquals(DetokenizationOperation.NO_OPERATION, detokenizeOperations[5]); } static Detokenizer createLatinDetokenizer() throws IOException { try (InputStream dictIn = DictionaryDetokenizerTest.class.getResourceAsStream( "/opennlp/tools/tokenize/latin-detokenizer.xml")) { DetokenizationDictionary dict = new DetokenizationDictionary(dictIn); return new DictionaryDetokenizer(dict); } } @Test void testDetokenizeToString() throws IOException { Detokenizer detokenizer = createLatinDetokenizer(); String[] tokens = new String[] {"A", "test", ",", "(", "string", ")", "."}; String sentence = detokenizer.detokenize(tokens, null); Assertions.assertEquals("A test, (string).", sentence); } @Test void testDetokenizeToString2() throws IOException { Detokenizer detokenizer = createLatinDetokenizer(); String[] tokens = new String[] {"A", "co", "-", "worker", "helped", "."}; String sentence = detokenizer.detokenize(tokens, null); Assertions.assertEquals("A co-worker helped.", sentence); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_tokenize_DummyTok0100644 0000000 0000000 00000000160 14523004075 032660 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/DummyTokenizerFactory.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/DummyTokenizerFactory.ja0100644 0000000 0000000 00000007557 14523004075 034350 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Map; import java.util.Set; import java.util.regex.Pattern; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.util.model.ArtifactSerializer; public class DummyTokenizerFactory extends TokenizerFactory { private static final String DUMMY_DICT = "dummy"; private DummyDictionary dict; public DummyTokenizerFactory() { } public DummyTokenizerFactory(String languageCode, Dictionary abbreviationDictionary, boolean useAlphaNumericOptimization, Pattern alphaNumericPattern) { super(languageCode, abbreviationDictionary, useAlphaNumericOptimization, alphaNumericPattern); } @Override protected void init(String languageCode, Dictionary abbreviationDictionary, boolean useAlphaNumericOptimization, Pattern alphaNumericPattern) { super.init(languageCode, abbreviationDictionary, useAlphaNumericOptimization, alphaNumericPattern); this.dict = new DummyDictionary(abbreviationDictionary); } @Override public DummyDictionary getAbbreviationDictionary() { if (this.dict == null && artifactProvider != null) { this.dict = artifactProvider.getArtifact(DUMMY_DICT); } return this.dict; } @Override public TokenContextGenerator getContextGenerator() { return new DummyContextGenerator(getAbbreviationDictionary().asStringSet()); } @Override @SuppressWarnings("rawtypes") public Map createArtifactSerializersMap() { Map serializers = super.createArtifactSerializersMap(); serializers.put(DUMMY_DICT, new DummyDictionarySerializer()); return serializers; } @Override public Map createArtifactMap() { Map artifactMap = super.createArtifactMap(); if (this.dict != null) artifactMap.put(DUMMY_DICT, this.dict); return artifactMap; } public static class DummyDictionarySerializer implements ArtifactSerializer { public DummyDictionary create(InputStream in) throws IOException { return new DummyDictionary(in); } public void serialize(DummyDictionary artifact, OutputStream out) throws IOException { artifact.serialize(out); } } public static class DummyDictionary extends Dictionary { private final Dictionary indict; public DummyDictionary(Dictionary dict) { this.indict = dict; } public DummyDictionary(InputStream in) throws IOException { this.indict = new Dictionary(in); } public void serialize(OutputStream out) throws IOException { indict.serialize(out); } public Set asStringSet() { return indict.asStringSet(); } @Override public Class getArtifactSerializerClass() { return DummyDictionarySerializer.class; } } static class DummyContextGenerator extends DefaultTokenContextGenerator { public DummyContextGenerator(Set inducedAbbreviations) { super(inducedAbbreviations); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_tokenize_SimpleTo0100644 0000000 0000000 00000000156 14523004075 032650 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/SimpleTokenizerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/SimpleTokenizerTest.java0100644 0000000 0000000 00000011163 14523004075 034331 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * Tests for the {@link SimpleTokenizer} class. */ public class SimpleTokenizerTest { // The SimpleTokenizer is thread safe private final SimpleTokenizer mTokenizer = SimpleTokenizer.INSTANCE; /** * Tests if it can tokenize whitespace separated tokens. */ @Test void testWhitespaceTokenization() { String text = "a b c d e f "; String[] tokenizedText = mTokenizer.tokenize(text); Assertions.assertEquals("a", tokenizedText[0]); Assertions.assertEquals("b", tokenizedText[1]); Assertions.assertEquals("c", tokenizedText[2]); Assertions.assertEquals("d", tokenizedText[3]); Assertions.assertEquals("e", tokenizedText[4]); Assertions.assertEquals("f", tokenizedText[5]); Assertions.assertEquals(6, tokenizedText.length); } /** * Tests if it can tokenize a word and a dot. */ @Test void testWordDotTokenization() { String text = "a."; String[] tokenizedText = mTokenizer.tokenize(text); Assertions.assertEquals("a", tokenizedText[0]); Assertions.assertEquals(".", tokenizedText[1]); Assertions.assertEquals(2, tokenizedText.length); } /** * Tests if it can tokenize a word and numeric. */ @Test void testWordNumericTokeniztation() { String text = "305KW"; String[] tokenizedText = mTokenizer.tokenize(text); Assertions.assertEquals("305", tokenizedText[0]); Assertions.assertEquals("KW", tokenizedText[1]); Assertions.assertEquals(2, tokenizedText.length); } @Test void testWordWithOtherTokenization() { String text = "rebecca.sleep()"; String[] tokenizedText = mTokenizer.tokenize(text); Assertions.assertEquals("rebecca", tokenizedText[0]); Assertions.assertEquals(".", tokenizedText[1]); Assertions.assertEquals("sleep", tokenizedText[2]); Assertions.assertEquals("(", tokenizedText[3]); Assertions.assertEquals(")", tokenizedText[4]); Assertions.assertEquals(5, tokenizedText.length); } @Test void testTokenizationOfStringWithUnixNewLineTokens() { SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE; tokenizer.setKeepNewLines(true); Assertions.assertEquals(2, tokenizer.tokenize("a\n").length); Assertions.assertArrayEquals(new String[] {"a", "\n"}, tokenizer.tokenize("a\n")); Assertions.assertEquals(3, tokenizer.tokenize("a\nb").length); Assertions.assertArrayEquals(new String[] {"a", "\n", "b"}, tokenizer.tokenize("a\nb")); Assertions.assertEquals(4, tokenizer.tokenize("a\n\n b").length); Assertions.assertArrayEquals(new String[] {"a", "\n", "\n", "b"}, tokenizer.tokenize("a\n\n b")); Assertions.assertEquals(7, tokenizer.tokenize("a\n\n b\n\n c").length); Assertions.assertArrayEquals(new String[] {"a", "\n", "\n", "b", "\n", "\n", "c"}, tokenizer.tokenize("a\n\n b\n\n c")); } @Test void testTokenizationOfStringWithWindowsNewLineTokens() { SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE; tokenizer.setKeepNewLines(true); Assertions.assertEquals(3, tokenizer.tokenize("a\r\n").length); Assertions.assertArrayEquals(new String[] {"a", "\r", "\n"}, tokenizer.tokenize("a\r\n")); Assertions.assertEquals(4, tokenizer.tokenize("a\r\nb").length); Assertions.assertArrayEquals(new String[] {"a", "\r", "\n", "b"}, tokenizer.tokenize("a\r\nb")); Assertions.assertEquals(6, tokenizer.tokenize("a\r\n\r\n b").length); Assertions.assertArrayEquals(new String[] {"a", "\r", "\n", "\r", "\n", "b"}, tokenizer .tokenize("a\r\n\r\n b")); Assertions.assertEquals(11, tokenizer.tokenize("a\r\n\r\n b\r\n\r\n c").length); Assertions.assertArrayEquals(new String[] {"a", "\r", "\n", "\r", "\n", "b", "\r", "\n", "\r", "\n", "c"}, tokenizer.tokenize("a\r\n\r\n b\r\n\r\n c")); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_tokenize_TokSpanE0100644 0000000 0000000 00000000161 14523004075 032574 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/TokSpanEventStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/TokSpanEventStreamTest.j0100644 0000000 0000000 00000004125 14523004075 034252 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.ml.model.Event; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; /** * Tests for the {@link TokSpanEventStream} class. */ public class TokSpanEventStreamTest { /** * Tests the event stream for correctly generated outcomes. */ @Test void testEventOutcomes() throws IOException { ObjectStream sentenceStream = ObjectStreamUtils.createObjectStream("\"out.\""); ObjectStream tokenSampleStream = new TokenSampleStream(sentenceStream); try (ObjectStream eventStream = new TokSpanEventStream(tokenSampleStream, false)) { Assertions.assertEquals(TokenizerME.SPLIT, eventStream.read().getOutcome()); Assertions.assertEquals(TokenizerME.NO_SPLIT, eventStream.read().getOutcome()); Assertions.assertEquals(TokenizerME.NO_SPLIT, eventStream.read().getOutcome()); Assertions.assertEquals(TokenizerME.SPLIT, eventStream.read().getOutcome()); Assertions.assertEquals(TokenizerME.SPLIT, eventStream.read().getOutcome()); Assertions.assertNull(eventStream.read()); Assertions.assertNull(eventStream.read()); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_tokenize_TokenSam0100644 0000000 0000000 00000000160 14523004075 032630 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/TokenSampleStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/TokenSampleStreamTest.ja0100644 0000000 0000000 00000010145 14523004075 034253 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; import opennlp.tools.util.Span; /** * Tests for the {@link TokenSampleStream} class. */ public class TokenSampleStreamTest { /** * Tests if the {@link TokenSample} correctly tokenizes tokens which * are separated by a whitespace. */ @Test void testParsingWhitespaceSeparatedTokens() throws IOException { String sampleTokens = "Slave to the wage"; ObjectStream sampleTokenStream = new TokenSampleStream( ObjectStreamUtils.createObjectStream(sampleTokens)); TokenSample tokenSample = sampleTokenStream.read(); Span[] tokenSpans = tokenSample.getTokenSpans(); Assertions.assertEquals(4, tokenSpans.length); Assertions.assertEquals("Slave", tokenSpans[0].getCoveredText(sampleTokens)); Assertions.assertEquals("to", tokenSpans[1].getCoveredText(sampleTokens)); Assertions.assertEquals("the", tokenSpans[2].getCoveredText(sampleTokens)); Assertions.assertEquals("wage", tokenSpans[3].getCoveredText(sampleTokens)); } /** * Tests if the {@link TokenSample} correctly tokenizes tokens which * are separated by the split chars. */ @Test void testParsingSeparatedString() throws IOException { String sampleTokens = "abcd"; ObjectStream sampleTokenStream = new TokenSampleStream( ObjectStreamUtils.createObjectStream(sampleTokens)); TokenSample tokenSample = sampleTokenStream.read(); Span[] tokenSpans = tokenSample.getTokenSpans(); Assertions.assertEquals(4, tokenSpans.length); Assertions.assertEquals("a", tokenSpans[0].getCoveredText(tokenSample.getText())); Assertions.assertEquals(new Span(0, 1), tokenSpans[0]); Assertions.assertEquals("b", tokenSpans[1].getCoveredText(tokenSample.getText())); Assertions.assertEquals(new Span(1, 2), tokenSpans[1]); Assertions.assertEquals("c", tokenSpans[2].getCoveredText(tokenSample.getText())); Assertions.assertEquals(new Span(2, 3), tokenSpans[2]); Assertions.assertEquals("d", tokenSpans[3].getCoveredText(tokenSample.getText())); Assertions.assertEquals(new Span(3, 4), tokenSpans[3]); } /** * Tests if the {@link TokenSample} correctly tokenizes tokens which * are separated by whitespace and by the split chars. */ @Test void testParsingWhitespaceAndSeparatedString() throws IOException { String sampleTokens = "a bc de"; try (ObjectStream sampleTokenStream = new TokenSampleStream( ObjectStreamUtils.createObjectStream(sampleTokens))) { TokenSample tokenSample = sampleTokenStream.read(); Span[] tokenSpans = tokenSample.getTokenSpans(); Assertions.assertEquals(5, tokenSpans.length); Assertions.assertEquals("a", tokenSpans[0].getCoveredText(tokenSample.getText())); Assertions.assertEquals("b", tokenSpans[1].getCoveredText(tokenSample.getText())); Assertions.assertEquals("c", tokenSpans[2].getCoveredText(tokenSample.getText())); Assertions.assertEquals("d", tokenSpans[3].getCoveredText(tokenSample.getText())); Assertions.assertEquals("e", tokenSpans[4].getCoveredText(tokenSample.getText())); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/TokenSampleTest.java0100644 0000000 0000000 00000011344 14523004075 033430 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.Span; public class TokenSampleTest { public static TokenSample createGoldSample() { return new TokenSample("A test.", new Span[] {new Span(0, 1), new Span(2, 6)}); } public static TokenSample createPredSample() { return new TokenSample("A test.", new Span[] {new Span(0, 3), new Span(2, 6)}); } public static TokenSample createPredSilverSample() { return new TokenSample("A t st.", new Span[] {new Span(0, 1), new Span(2, 6)}); } @Test void testRetrievingContent() { String sentence = "A test"; TokenSample sample = new TokenSample(sentence, new Span[] {new Span(0, 1), new Span(2, 6)}); Assertions.assertEquals("A test", sample.getText()); Assertions.assertEquals(new Span(0, 1), sample.getTokenSpans()[0]); Assertions.assertEquals(new Span(2, 6), sample.getTokenSpans()[1]); } @Test void testTokenSampleSerDe() throws IOException { TokenSample tokenSample = createGoldSample(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream(byteArrayOutputStream); out.writeObject(tokenSample); out.flush(); byte[] bytes = byteArrayOutputStream.toByteArray(); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); ObjectInput objectInput = new ObjectInputStream(byteArrayInputStream); TokenSample deSerializedTokenSample = null; try { deSerializedTokenSample = (TokenSample) objectInput.readObject(); } catch (ClassNotFoundException e) { // do nothing } Assertions.assertNotNull(deSerializedTokenSample); Assertions.assertEquals(tokenSample.getText(), deSerializedTokenSample.getText()); Assertions.assertArrayEquals(tokenSample.getTokenSpans(), deSerializedTokenSample.getTokenSpans()); } @Test void testCreationWithDetokenizer() throws IOException { Detokenizer detokenizer = DictionaryDetokenizerTest.createLatinDetokenizer(); String[] tokens = new String[] { "start", "(", // move right ")", // move left "end", ".", // move left "hyphen", "-", // move both "string", "." }; TokenSample a = new TokenSample(detokenizer, tokens); Assertions.assertEquals("start () end. hyphen-string.", a.getText()); Assertions.assertEquals("start (" + TokenSample.DEFAULT_SEPARATOR_CHARS + ") end" + TokenSample.DEFAULT_SEPARATOR_CHARS + "." + " hyphen" + TokenSample.DEFAULT_SEPARATOR_CHARS + "-" + TokenSample.DEFAULT_SEPARATOR_CHARS + "string" + TokenSample.DEFAULT_SEPARATOR_CHARS + ".", a.toString()); Assertions.assertEquals(9, a.getTokenSpans().length); Assertions.assertEquals(new Span(0, 5), a.getTokenSpans()[0]); Assertions.assertEquals(new Span(6, 7), a.getTokenSpans()[1]); Assertions.assertEquals(new Span(7, 8), a.getTokenSpans()[2]); Assertions.assertEquals(new Span(9, 12), a.getTokenSpans()[3]); Assertions.assertEquals(new Span(12, 13), a.getTokenSpans()[4]); Assertions.assertEquals(new Span(14, 20), a.getTokenSpans()[5]); Assertions.assertEquals(new Span(20, 21), a.getTokenSpans()[6]); Assertions.assertEquals(new Span(21, 27), a.getTokenSpans()[7]); Assertions.assertEquals(new Span(27, 28), a.getTokenSpans()[8]); } @Test void testEquals() { Assertions.assertNotSame(createGoldSample(), createGoldSample()); Assertions.assertEquals(createGoldSample(), createGoldSample()); Assertions.assertNotEquals(createPredSample(), createGoldSample()); Assertions.assertNotEquals(createPredSample(), new Object()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_tokenize_Tokenize0100644 0000000 0000000 00000000161 14523004075 032700 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/TokenizerEvaluatorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/TokenizerEvaluatorTest.j0100644 0000000 0000000 00000004777 14523004075 034367 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.cmdline.tokenizer.TokenEvaluationErrorListener; import opennlp.tools.util.Span; public class TokenizerEvaluatorTest { @Test void testPositive() { OutputStream stream = new ByteArrayOutputStream(); TokenizerEvaluationMonitor listener = new TokenEvaluationErrorListener(stream); TokenizerEvaluator eval = new TokenizerEvaluator(new DummyTokenizer( TokenSampleTest.createGoldSample()), listener); eval.evaluateSample(TokenSampleTest.createGoldSample()); Assertions.assertEquals(1.0, eval.getFMeasure().getFMeasure(), 0.0); Assertions.assertEquals(0, stream.toString().length()); } @Test void testNegative() { OutputStream stream = new ByteArrayOutputStream(); TokenizerEvaluationMonitor listener = new TokenEvaluationErrorListener( stream); TokenizerEvaluator eval = new TokenizerEvaluator(new DummyTokenizer( TokenSampleTest.createGoldSample()), listener); eval.evaluateSample(TokenSampleTest.createPredSample()); Assertions.assertEquals(.5d, eval.getFMeasure().getFMeasure(), .1d); Assertions.assertNotSame(0, stream.toString().length()); } /** * a dummy tokenizer that always return something expected */ static class DummyTokenizer implements Tokenizer { private final TokenSample sample; public DummyTokenizer(TokenSample sample) { this.sample = sample; } public String[] tokenize(String s) { return null; } public Span[] tokenizePos(String s) { return this.sample.getTokenSpans(); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_tokenize_Tokenize0100644 0000000 0000000 00000000157 14523004075 032705 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/TokenizerFactoryTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/TokenizerFactoryTest.jav0100644 0000000 0000000 00000041571 14523004075 034354 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Locale; import java.util.regex.Pattern; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.tokenize.DummyTokenizerFactory.DummyContextGenerator; import opennlp.tools.tokenize.DummyTokenizerFactory.DummyDictionary; import opennlp.tools.tokenize.lang.Factory; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; /** * Tests for the {@link TokenizerFactory} class. */ public class TokenizerFactoryTest { private static final Locale LOCALE_DUTCH = new Locale("nl"); private static final Locale LOCALE_POLISH = new Locale("pl"); private static final Locale LOCALE_PORTUGUESE = new Locale("pt"); private static final Locale LOCALE_SPANISH = new Locale("es"); private static ObjectStream createSampleStream() throws IOException { InputStreamFactory in = new ResourceAsStreamFactory( TokenizerFactoryTest.class, "/opennlp/tools/tokenize/token.train"); return new TokenSampleStream(new PlainTextByLineStream(in, StandardCharsets.UTF_8)); } private static TokenizerModel train(TokenizerFactory factory) throws IOException { return TokenizerME.train(createSampleStream(), factory, TrainingParameters.defaultParams()); } private static Dictionary loadAbbDictionary(Locale loc) throws IOException { final String abbrevDict; if (loc.equals(LOCALE_DUTCH)) { abbrevDict = "opennlp/tools/lang/abb_NL.xml"; } else if (loc.equals(Locale.GERMAN)) { abbrevDict = "opennlp/tools/lang/abb_DE.xml"; } else if (loc.equals(Locale.FRENCH)) { abbrevDict = "opennlp/tools/lang/abb_FR.xml"; } else if (loc.equals(Locale.ITALIAN)) { abbrevDict = "opennlp/tools/lang/abb_IT.xml"; } else if (loc.equals(LOCALE_POLISH)) { abbrevDict = "opennlp/tools/lang/abb_PL.xml"; } else if (loc.equals(LOCALE_PORTUGUESE)) { abbrevDict = "opennlp/tools/lang/abb_PT.xml"; } else if (loc.equals(LOCALE_SPANISH)) { abbrevDict = "opennlp/tools/lang/abb_ES.xml"; } else { abbrevDict = "opennlp/tools/lang/abb_EN.xml"; } return new Dictionary(TokenizerFactoryTest.class.getClassLoader() .getResourceAsStream(abbrevDict)); } @Test void testDefault() throws IOException { Dictionary dic = loadAbbDictionary(Locale.ENGLISH); final String lang = "eng"; TokenizerModel model = train(new TokenizerFactory(lang, dic, false, null)); TokenizerFactory factory = model.getFactory(); Assertions.assertNotNull(factory.getAbbreviationDictionary()); Assertions.assertInstanceOf(DefaultTokenContextGenerator.class, factory.getContextGenerator()); String defaultPattern = Factory.DEFAULT_ALPHANUMERIC.pattern(); Assertions.assertEquals(defaultPattern, factory.getAlphaNumericPattern().pattern()); Assertions.assertEquals(lang, factory.getLanguageCode()); Assertions.assertEquals(lang, model.getLanguage()); Assertions.assertFalse(factory.isUseAlphaNumericOptimization()); ByteArrayOutputStream out = new ByteArrayOutputStream(); model.serialize(out); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); TokenizerModel fromSerialized = new TokenizerModel(in); factory = fromSerialized.getFactory(); Assertions.assertNotNull(factory.getAbbreviationDictionary()); Assertions.assertInstanceOf(DefaultTokenContextGenerator.class, factory.getContextGenerator()); Assertions.assertEquals(defaultPattern, factory.getAlphaNumericPattern().pattern()); Assertions.assertEquals(lang, factory.getLanguageCode()); Assertions.assertEquals(lang, model.getLanguage()); Assertions.assertFalse(factory.isUseAlphaNumericOptimization()); } @Test void testNullDict() throws IOException { Dictionary dic = null; final String lang = "eng"; TokenizerModel model = train(new TokenizerFactory(lang, dic, false, null)); TokenizerFactory factory = model.getFactory(); Assertions.assertNull(factory.getAbbreviationDictionary()); Assertions.assertInstanceOf(DefaultTokenContextGenerator.class, factory.getContextGenerator()); String defaultPattern = Factory.DEFAULT_ALPHANUMERIC.pattern(); Assertions.assertEquals(defaultPattern, factory.getAlphaNumericPattern().pattern()); Assertions.assertEquals(lang, factory.getLanguageCode()); Assertions.assertEquals(lang, model.getLanguage()); Assertions.assertFalse(factory.isUseAlphaNumericOptimization()); ByteArrayOutputStream out = new ByteArrayOutputStream(); model.serialize(out); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); TokenizerModel fromSerialized = new TokenizerModel(in); factory = fromSerialized.getFactory(); Assertions.assertNull(factory.getAbbreviationDictionary()); Assertions.assertInstanceOf(DefaultTokenContextGenerator.class, factory.getContextGenerator()); Assertions.assertEquals(defaultPattern, factory.getAlphaNumericPattern().pattern()); Assertions.assertEquals(lang, factory.getLanguageCode()); Assertions.assertEquals(lang, model.getLanguage()); Assertions.assertFalse(factory.isUseAlphaNumericOptimization()); } @Test void testCustomPatternAndAlphaOpt() throws IOException { Dictionary dic = null; final String lang = "spa"; String pattern = "^[0-9a-záéíóúüýñA-ZÃÉÃÓÚÃÑ]+$"; TokenizerModel model = train(new TokenizerFactory(lang, dic, true, Pattern.compile(pattern))); TokenizerFactory factory = model.getFactory(); Assertions.assertNull(factory.getAbbreviationDictionary()); Assertions.assertInstanceOf(DefaultTokenContextGenerator.class, factory.getContextGenerator()); Assertions.assertEquals(pattern, factory.getAlphaNumericPattern().pattern()); Assertions.assertEquals(lang, factory.getLanguageCode()); Assertions.assertEquals(lang, model.getLanguage()); Assertions.assertTrue(factory.isUseAlphaNumericOptimization()); ByteArrayOutputStream out = new ByteArrayOutputStream(); model.serialize(out); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); TokenizerModel fromSerialized = new TokenizerModel(in); factory = fromSerialized.getFactory(); Assertions.assertNull(factory.getAbbreviationDictionary()); Assertions.assertInstanceOf(DefaultTokenContextGenerator.class, factory.getContextGenerator()); Assertions.assertEquals(pattern, factory.getAlphaNumericPattern().pattern()); Assertions.assertEquals(lang, factory.getLanguageCode()); Assertions.assertEquals(lang, model.getLanguage()); Assertions.assertTrue(factory.isUseAlphaNumericOptimization()); } void checkCustomPatternForTokenizerME(String lang, String pattern, String sentence, int expectedNumTokens) throws IOException { Locale loc = Locale.ENGLISH; if ("dut".equals(lang) || "nld".equals(lang)) { loc = LOCALE_DUTCH; } else if ("deu".equals(lang)) { loc = Locale.GERMAN; } else if ("fra".equals(lang)) { loc = Locale.FRENCH; } else if ("ita".equals(lang)) { loc = Locale.ITALIAN; } else if ("pol".equals(lang)) { loc = LOCALE_POLISH; } else if ("por".equals(lang)) { loc = LOCALE_PORTUGUESE; } else if ("spa".equals(lang)) { loc = LOCALE_SPANISH; } TokenizerModel model = train(new TokenizerFactory(lang, loadAbbDictionary(loc), true, Pattern.compile(pattern))); TokenizerME tokenizer = new TokenizerME(model); String[] tokens = tokenizer.tokenize(sentence); Assertions.assertEquals(expectedNumTokens, tokens.length); String[] sentSplit = sentence .replaceAll("'", " '") .replaceAll(",", " ,") .split(" "); for (int i = 0; i < sentSplit.length; i++) { String sElement = sentSplit[i]; if (i == sentSplit.length - 1) { sElement = sElement.replace(".", ""); // compensate for sentence ending } Assertions.assertEquals(sElement, tokens[i]); } } // For language specific patterns see: opennlp.tools.tokenize.lang.Factory @Test void testCustomPatternForTokenizerMEWithAbbreviationsDeu() throws IOException { String lang = "deu"; String pattern = "^[A-Za-z0-9äéöüÄÉÖÜß]+$"; String sentence = "Ich wähle den auf S. 183 ff. mitgeteilten Traum von der botanischen Monographie."; checkCustomPatternForTokenizerME(lang, pattern, sentence, 14); } @Test void testCustomPatternForTokenizerMEWithAbbreviationsDut() throws IOException { String lang = "dut"; String pattern = "^[A-Za-z0-9äöüëèéïijÄÖÜËÉÈÃIJ]+$"; String sentence = "Ik kies voor de droom van de botanische monografie die " + "op p. 183 en volgende wordt beschreven."; checkCustomPatternForTokenizerME(lang, pattern, sentence, 18); } @Test void testCustomPatternForTokenizerMEWithAbbreviationsFra() throws IOException { String lang = "fra"; String pattern = "^[a-zA-Z0-9àâäèéêëîïôœùûüÿçÀÂÄÈÉÊËÎÃÔŒÙÛÜŸÇ]+$"; String sentence = "Je choisis le rêve de la monographie botanique communiqué à la p. 205."; checkCustomPatternForTokenizerME(lang, pattern, sentence, 14); } @Test void testCustomPatternForTokenizerMEWithAbbreviationsPol() throws IOException { String lang = "pol"; String pattern = "^[A-Za-z0-9żźćńółęąśŻŹĆĄŚĘÅÓŃ]+$"; String sentence = "W szkicu autobiograficznym pt. moje życie i psychoanaliza Freud pisze, że " + "jego przodkowie żyli przez wiele lat w Kolonii."; checkCustomPatternForTokenizerME(lang, pattern, sentence, 21); } @Test void testCustomPatternForTokenizerMEWithAbbreviationsPor() throws IOException { String lang = "por"; String pattern = "^[0-9a-záãâàéêíóõôúüçA-ZÃÃÂÀÉÊÃÓÕÔÚÜÇ]+$"; String sentence = "O povo pernambucano, tradicionalmente inimigo dos imperadores, " + "lembrava-se do tempo em que o Sr. D. Pedro de Alcantara dava-se ao luxo " + "de visitar o norte."; checkCustomPatternForTokenizerME(lang, pattern, sentence, 28); } @Test void testCustomPatternForTokenizerMEWithAbbreviationsSpa() throws IOException { String lang = "spa"; String pattern = "^[0-9a-záéíóúüýñA-ZÃÉÃÓÚÃÑ]+$"; String sentence = "Elegiremos el de la monografía botánica expuesto antes del " + "capítulo V en pág. 448 del presente volumen."; checkCustomPatternForTokenizerME(lang, pattern, sentence, 18); } @Test void testCustomPatternForTokenizerMEPor() throws IOException { String lang = "por"; String pattern = "^[0-9a-záãâàéêíóõôúüçA-ZÃÃÂÀÉÊÃÓÕÔÚÜÇ]+$"; String sentence = "Na floresta mágica a raposa dança com unicórnios felizes."; checkCustomPatternForTokenizerME(lang, pattern, sentence, 10); } @Test void testCustomPatternForTokenizerMESpa() throws IOException { String lang = "spa"; String pattern = "^[0-9a-záéíóúüýñA-ZÃÉÃÓÚÃÑ]+$"; String sentence = "En el verano los niños juegan en el parque y sus risas crean alegría."; checkCustomPatternForTokenizerME(lang, pattern, sentence, 15); } @Test void testCustomPatternForTokenizerMECat() throws IOException { String lang = "cat"; String pattern = "^[0-9a-zàèéíïòóúüçA-ZÀÈÉÃÃÒÓÚÜÇ]+$"; String sentence = "Als xiuxiuejants avets l'os blau neda amb cignes i s'ho passen bé."; checkCustomPatternForTokenizerME(lang, pattern, sentence, 15); } @Test void testCustomPatternForTokenizerMEIta() throws IOException { String lang = "ita"; String pattern = "^[0-9a-zàèéìîíòóùüA-ZÀÈÉÌÎÃÒÓÙÜ]+$"; String sentence = "Cosa fare di domenica per migliorare il tuo lunedì."; checkCustomPatternForTokenizerME(lang, pattern, sentence, 10); } @Test void testCustomPatternForTokenizerMEWithAbbreviationsIta() throws IOException { String lang = "ita"; String pattern = "^[0-9a-zàèéìîíòóùüA-ZÀÈÉÌÎÃÒÓÙÜ]+$"; String sentence = "La chiesa fu costruita fra il 1258 ed il 1308 ca. come chiesa " + "del convento degli Agostiniani."; checkCustomPatternForTokenizerME(lang, pattern, sentence, 18); } @Test void testContractionsIta() throws IOException { Dictionary dic = null; String lang = "ita"; String pattern = "^[0-9a-zàèéìîíòóùüA-ZÀÈÉÌÎÃÒÓÙÜ]+$"; TokenizerModel model = train(new TokenizerFactory(lang, dic, true, Pattern.compile(pattern))); TokenizerME tokenizer = new TokenizerME(model); String sentence = "La contrazione di \"dove è\" è \"dov'è\"."; String[] tokens = tokenizer.tokenize(sentence); Assertions.assertEquals(11, tokens.length); String[] sentSplit = sentence.replaceAll("\\.", " .") .replaceAll("'", " '").replaceAll("([^ ])\"", "$1 \"").split(" "); for (int i = 0; i < sentSplit.length; i++) { Assertions.assertEquals(sentSplit[i], tokens[i]); } } @Test void testContractionsEng() throws IOException { Dictionary dic = null; String lang = "eng"; String pattern = "^[A-Za-z0-9]+$"; TokenizerModel model = train(new TokenizerFactory(lang, dic, true, Pattern.compile(pattern))); TokenizerME tokenizer = new TokenizerME(model); String sentence = "The cat wasn't in the house and the dog wasn't either."; String[] tokens = tokenizer.tokenize(sentence); Assertions.assertEquals(14, tokens.length); String[] sentSplit = sentence.replaceAll("\\.", " .") .replaceAll("'", " '").split(" "); for (int i = 0; i < sentSplit.length; i++) { Assertions.assertEquals(sentSplit[i], tokens[i]); } } @Test void testDummyFactory() throws IOException { Dictionary dic = loadAbbDictionary(Locale.ENGLISH); final String lang = "eng"; String pattern = "^[0-9A-Za-z]+$"; TokenizerModel model = train(new DummyTokenizerFactory(lang, dic, true, Pattern.compile(pattern))); TokenizerFactory factory = model.getFactory(); Assertions.assertInstanceOf(DummyDictionary.class, factory.getAbbreviationDictionary()); Assertions.assertInstanceOf(DummyContextGenerator.class, factory.getContextGenerator()); Assertions.assertEquals(pattern, factory.getAlphaNumericPattern().pattern()); Assertions.assertEquals(lang, factory.getLanguageCode()); Assertions.assertEquals(lang, model.getLanguage()); Assertions.assertTrue(factory.isUseAlphaNumericOptimization()); ByteArrayOutputStream out = new ByteArrayOutputStream(); model.serialize(out); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); TokenizerModel fromSerialized = new TokenizerModel(in); factory = fromSerialized.getFactory(); Assertions.assertInstanceOf(DummyDictionary.class, factory.getAbbreviationDictionary()); Assertions.assertInstanceOf(DummyContextGenerator.class, factory.getContextGenerator()); Assertions.assertEquals(pattern, factory.getAlphaNumericPattern().pattern()); Assertions.assertEquals(lang, factory.getLanguageCode()); Assertions.assertEquals(lang, model.getLanguage()); Assertions.assertTrue(factory.isUseAlphaNumericOptimization()); } @Test void testCreateDummyFactory() throws IOException { Dictionary dic = loadAbbDictionary(Locale.ENGLISH); final String lang = "eng"; String pattern = "^[0-9A-Za-z]+$"; TokenizerFactory factory = TokenizerFactory.create( DummyTokenizerFactory.class.getCanonicalName(), lang, dic, true, Pattern.compile(pattern)); Assertions.assertInstanceOf(DummyDictionary.class, factory.getAbbreviationDictionary()); Assertions.assertInstanceOf(DummyContextGenerator.class, factory.getContextGenerator()); Assertions.assertEquals(pattern, factory.getAlphaNumericPattern().pattern()); Assertions.assertEquals(lang, factory.getLanguageCode()); Assertions.assertTrue(factory.isUseAlphaNumericOptimization()); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/TokenizerMEIT.java0100644 0000000 0000000 00000002412 14523004075 032773 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class TokenizerMEIT { @Test void testTokenizerDownloadedModel() throws IOException { TokenizerME tokenizer = new TokenizerME("en"); String[] tokens = tokenizer.tokenize("test,"); Assertions.assertEquals(2, tokens.length); Assertions.assertEquals("test", tokens[0]); Assertions.assertEquals(",", tokens[1]); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/TokenizerMETest.java0100644 0000000 0000000 00000012376 14523004075 033410 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.InsufficientTrainingDataException; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.TrainingParameters; /** * Tests for the {@link TokenizerME} class. *

* This test trains the tokenizer with a few sample tokens * and then predicts a token. This test checks if the * tokenizer code can be executed. * * @see TokenizerME */ public class TokenizerMETest { @Test void testTokenizerSimpleModel() throws IOException { TokenizerModel model = TokenizerTestUtil.createSimpleMaxentTokenModel(); TokenizerME tokenizer = new TokenizerME(model); String[] tokens = tokenizer.tokenize("test,"); Assertions.assertEquals(2, tokens.length); Assertions.assertEquals("test", tokens[0]); Assertions.assertEquals(",", tokens[1]); } @Test void testTokenizer() throws IOException { TokenizerModel model = TokenizerTestUtil.createMaxentTokenModel(); TokenizerME tokenizer = new TokenizerME(model); String[] tokens = tokenizer.tokenize("Sounds like it's not properly thought through!"); Assertions.assertEquals(9, tokens.length); Assertions.assertEquals("Sounds", tokens[0]); Assertions.assertEquals("like", tokens[1]); Assertions.assertEquals("it", tokens[2]); Assertions.assertEquals("'s", tokens[3]); Assertions.assertEquals("not", tokens[4]); Assertions.assertEquals("properly", tokens[5]); Assertions.assertEquals("thought", tokens[6]); Assertions.assertEquals("through", tokens[7]); Assertions.assertEquals("!", tokens[8]); } @Test void testInsufficientData() { Assertions.assertThrows(InsufficientTrainingDataException.class, () -> { InputStreamFactory trainDataIn = new ResourceAsStreamFactory( TokenizerModel.class, "/opennlp/tools/tokenize/token-insufficient.train"); ObjectStream samples = new TokenSampleStream( new PlainTextByLineStream(trainDataIn, StandardCharsets.UTF_8)); TrainingParameters mlParams = new TrainingParameters(); mlParams.put(TrainingParameters.ITERATIONS_PARAM, 100); mlParams.put(TrainingParameters.CUTOFF_PARAM, 5); TokenizerME.train(samples, TokenizerFactory.create(null, "eng", null, true, null), mlParams); }); } @Test void testNewLineAwareTokenization() throws IOException { TokenizerModel model = TokenizerTestUtil.createMaxentTokenModel(); TokenizerME tokenizer = new TokenizerME(model); tokenizer.setKeepNewLines(true); Assertions.assertEquals(2, tokenizer.tokenize("a\n").length); Assertions.assertArrayEquals(new String[] {"a", "\n"}, tokenizer.tokenize("a\n")); Assertions.assertEquals(3, tokenizer.tokenize("a\nb").length); Assertions.assertArrayEquals(new String[] {"a", "\n", "b"}, tokenizer.tokenize("a\nb")); Assertions.assertEquals(4, tokenizer.tokenize("a\n\n b").length); Assertions.assertArrayEquals(new String[] {"a", "\n", "\n", "b"}, tokenizer.tokenize("a\n\n b")); Assertions.assertEquals(7, tokenizer.tokenize("a\n\n b\n\n c").length); Assertions.assertArrayEquals(new String[] {"a", "\n", "\n", "b", "\n", "\n", "c"}, tokenizer.tokenize("a\n\n b\n\n c")); } @Test void testTokenizationOfStringWithWindowsNewLineTokens() throws IOException { TokenizerModel model = TokenizerTestUtil.createMaxentTokenModel(); TokenizerME tokenizer = new TokenizerME(model); tokenizer.setKeepNewLines(true); Assertions.assertEquals(3, tokenizer.tokenize("a\r\n").length); Assertions.assertArrayEquals(new String[] {"a", "\r", "\n"}, tokenizer.tokenize("a\r\n")); Assertions.assertEquals(4, tokenizer.tokenize("a\r\nb").length); Assertions.assertArrayEquals(new String[] {"a", "\r", "\n", "b"}, tokenizer.tokenize("a\r\nb")); Assertions.assertEquals(6, tokenizer.tokenize("a\r\n\r\n b").length); Assertions.assertArrayEquals(new String[] {"a", "\r", "\n", "\r", "\n", "b"}, tokenizer .tokenize("a\r\n\r\n b")); Assertions.assertEquals(11, tokenizer.tokenize("a\r\n\r\n b\r\n\r\n c").length); Assertions.assertArrayEquals(new String[] {"a", "\r", "\n", "\r", "\n", "b", "\r", "\n", "\r", "\n", "c"}, tokenizer.tokenize("a\r\n\r\n b\r\n\r\n c")); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/TokenizerModelTest.java0100644 0000000 0000000 00000003262 14523004075 034141 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * Tests for the {@link TokenizerModel} class. */ public class TokenizerModelTest { @Test void testTokenizerModelSerialization() throws IOException { TokenizerModel model = TokenizerTestUtil.createSimpleMaxentTokenModel(); Assertions.assertFalse(model.isLoadedFromSerialized()); ByteArrayOutputStream arrayOut = new ByteArrayOutputStream(); model.serialize(arrayOut); arrayOut.close(); TokenizerModel modelRestored = new TokenizerModel(new ByteArrayInputStream(arrayOut.toByteArray())); Assertions.assertNotNull(modelRestored); Assertions.assertTrue(modelRestored.isLoadedFromSerialized()); Assertions.assertEquals(model, modelRestored); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/TokenizerTestUtil.java0100644 0000000 0000000 00000005651 14523004075 034022 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import opennlp.tools.formats.ResourceAsStreamFactory; import opennlp.tools.util.CollectionObjectStream; import opennlp.tools.util.InputStreamFactory; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.PlainTextByLineStream; import opennlp.tools.util.Span; import opennlp.tools.util.TrainingParameters; /** * Utility class for testing the {@link Tokenizer}. */ public class TokenizerTestUtil { static TokenizerModel createSimpleMaxentTokenModel() throws IOException { List samples = new ArrayList<>(); samples.add(new TokenSample("year", new Span[]{new Span(0, 4)})); samples.add(new TokenSample("year,", new Span[]{ new Span(0, 4), new Span(4, 5)})); samples.add(new TokenSample("it,", new Span[]{ new Span(0, 2), new Span(2, 3)})); samples.add(new TokenSample("it", new Span[]{ new Span(0, 2)})); samples.add(new TokenSample("yes", new Span[]{ new Span(0, 3)})); samples.add(new TokenSample("yes,", new Span[]{ new Span(0, 3), new Span(3, 4)})); TrainingParameters mlParams = new TrainingParameters(); mlParams.put(TrainingParameters.ITERATIONS_PARAM, 100); mlParams.put(TrainingParameters.CUTOFF_PARAM, 0); return TokenizerME.train(new CollectionObjectStream<>(samples), TokenizerFactory.create(null, "eng", null, true, null), mlParams); } static TokenizerModel createMaxentTokenModel() throws IOException { InputStreamFactory trainDataIn = new ResourceAsStreamFactory( TokenizerModel.class, "/opennlp/tools/tokenize/token.train"); ObjectStream samples = new TokenSampleStream( new PlainTextByLineStream(trainDataIn, StandardCharsets.UTF_8)); TrainingParameters mlParams = new TrainingParameters(); mlParams.put(TrainingParameters.ITERATIONS_PARAM, 100); mlParams.put(TrainingParameters.CUTOFF_PARAM, 0); return TokenizerME.train(samples, TokenizerFactory.create(null, "eng", null, true, null), mlParams); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_tokenize_Whitespa0100644 0000000 0000000 00000000164 14523004075 032677 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/WhitespaceTokenStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/WhitespaceTokenStreamTes0100644 0000000 0000000 00000006165 14523004075 034360 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.ObjectStreamUtils; import opennlp.tools.util.Span; public class WhitespaceTokenStreamTest { /** * Tests for the {@link WhitespaceTokenStream} class. */ @Test void testWhitespace() throws IOException { String text = " a b c d e f "; ObjectStream sampleStream = new TokenSampleStream( ObjectStreamUtils.createObjectStream(text)); WhitespaceTokenStream tokenStream = new WhitespaceTokenStream(sampleStream); String read = tokenStream.read(); Assertions.assertEquals("a b c d e f", read); } @Test void testSeparatedString() throws IOException { String text = " a bc de "; ObjectStream sampleStream = new TokenSampleStream( ObjectStreamUtils.createObjectStream(text)); WhitespaceTokenStream tokenStream = new WhitespaceTokenStream(sampleStream); String read = tokenStream.read(); Assertions.assertEquals("a b c d e", read); } /** * Tests for the {@link TokenizerStream} correctly tokenizes whitespace separated tokens. */ @Test void testTokenizerStream() throws IOException { String text = " a b c d e "; WhitespaceTokenizer instance = WhitespaceTokenizer.INSTANCE; TokenizerStream stream = new TokenizerStream(instance, ObjectStreamUtils.createObjectStream(text)); TokenSample read = stream.read(); Span[] tokenSpans = read.getTokenSpans(); Assertions.assertEquals(5, tokenSpans.length); Assertions.assertEquals("a", tokenSpans[0].getCoveredText(read.getText())); Assertions.assertEquals(new Span(1, 2), tokenSpans[0]); Assertions.assertEquals("b", tokenSpans[1].getCoveredText(read.getText())); Assertions.assertEquals(new Span(3, 4), tokenSpans[1]); Assertions.assertEquals("c", tokenSpans[2].getCoveredText(read.getText())); Assertions.assertEquals(new Span(5, 6), tokenSpans[2]); Assertions.assertEquals("d", tokenSpans[3].getCoveredText(read.getText())); Assertions.assertEquals(new Span(8, 9), tokenSpans[3]); Assertions.assertEquals("e", tokenSpans[4].getCoveredText(read.getText())); Assertions.assertEquals(new Span(13, 14), tokenSpans[4]); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_tokenize_Whitespa0100644 0000000 0000000 00000000162 14523004075 032675 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/WhitespaceTokenizerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/WhitespaceTokenizerTest.0100644 0000000 0000000 00000010133 14523004075 034326 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * Tests for the {@link WhitespaceTokenizer} class. */ public class WhitespaceTokenizerTest { @Test void testOneToken() { Assertions.assertEquals("one", WhitespaceTokenizer.INSTANCE.tokenize("one")[0]); Assertions.assertEquals("one", WhitespaceTokenizer.INSTANCE.tokenize(" one")[0]); Assertions.assertEquals("one", WhitespaceTokenizer.INSTANCE.tokenize("one ")[0]); } /** * Tests if it can tokenize whitespace separated tokens. */ @Test void testWhitespaceTokenization() { String text = "a b c d e f "; String[] tokenizedText = WhitespaceTokenizer.INSTANCE.tokenize(text); Assertions.assertEquals("a", tokenizedText[0]); Assertions.assertEquals("b", tokenizedText[1]); Assertions.assertEquals("c", tokenizedText[2]); Assertions.assertEquals("d", tokenizedText[3]); Assertions.assertEquals("e", tokenizedText[4]); Assertions.assertEquals("f", tokenizedText[5]); Assertions.assertEquals(6, tokenizedText.length); } @Test void testTokenizationOfStringWithoutTokens() { Assertions.assertEquals(0, WhitespaceTokenizer.INSTANCE.tokenize("").length); // empty Assertions.assertEquals(0, WhitespaceTokenizer.INSTANCE.tokenize(" ").length); // space Assertions.assertEquals(0, WhitespaceTokenizer.INSTANCE.tokenize(" ").length); // tab Assertions.assertEquals(0, WhitespaceTokenizer.INSTANCE.tokenize(" ").length); } @Test void testTokenizationOfStringWithUnixNewLineTokens() { WhitespaceTokenizer tokenizer = WhitespaceTokenizer.INSTANCE; tokenizer.setKeepNewLines(true); Assertions.assertEquals(2, tokenizer.tokenize("a\n").length); Assertions.assertArrayEquals(new String[] {"a", "\n"}, tokenizer.tokenize("a\n")); Assertions.assertEquals(3, tokenizer.tokenize("a\nb").length); Assertions.assertArrayEquals(new String[] {"a", "\n", "b"}, tokenizer.tokenize("a\nb")); Assertions.assertEquals(4, tokenizer.tokenize("a\n\n b").length); Assertions.assertArrayEquals(new String[] {"a", "\n", "\n", "b"}, tokenizer.tokenize("a\n\n b")); Assertions.assertEquals(7, tokenizer.tokenize("a\n\n b\n\n c").length); Assertions.assertArrayEquals(new String[] {"a", "\n", "\n", "b", "\n", "\n", "c"}, tokenizer.tokenize("a\n\n b\n\n c")); } @Test void testTokenizationOfStringWithWindowsNewLineTokens() { WhitespaceTokenizer tokenizer = WhitespaceTokenizer.INSTANCE; tokenizer.setKeepNewLines(true); Assertions.assertEquals(3, tokenizer.tokenize("a\r\n").length); Assertions.assertArrayEquals(new String[] {"a", "\r", "\n"}, tokenizer.tokenize("a\r\n")); Assertions.assertEquals(4, tokenizer.tokenize("a\r\nb").length); Assertions.assertArrayEquals(new String[] {"a", "\r", "\n", "b"}, tokenizer.tokenize("a\r\nb")); Assertions.assertEquals(6, tokenizer.tokenize("a\r\n\r\n b").length); Assertions.assertArrayEquals(new String[] {"a", "\r", "\n", "\r", "\n", "b"}, tokenizer .tokenize("a\r\n\r\n b")); Assertions.assertEquals(11, tokenizer.tokenize("a\r\n\r\n b\r\n\r\n c").length); Assertions.assertArrayEquals(new String[] {"a", "\r", "\n", "\r", "\n", "b", "\r", "\n", "\r", "\n", "c"}, tokenizer.tokenize("a\r\n\r\n b\r\n\r\n c")); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_tokenize_Wordpiec0100644 0000000 0000000 00000000161 14523004075 032664 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/WordpieceTokenizerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/tokenize/WordpieceTokenizerTest.j0100644 0000000 0000000 00000004244 14523004075 034333 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.tokenize; import java.util.HashSet; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class WordpieceTokenizerTest { @Test void testSentence() { final Tokenizer tokenizer = new WordpieceTokenizer(getVocabulary()); final String[] tokens = tokenizer.tokenize("the quick brown fox jumps over the very lazy dog"); final String[] expected = {"[CLS]", "the", "quick", "brown", "fox", "jumps", "over", "the", "[UNK]", "lazy", "dog", "[SEP]"}; Assertions.assertArrayEquals(expected, tokens); } @Test void testSentenceWithPunctuation() { final Tokenizer tokenizer = new WordpieceTokenizer(getVocabulary()); final String[] tokens = tokenizer.tokenize("The quick brown fox jumps over the very lazy dog."); final String[] expected = {"[CLS]", "[UNK]", "quick", "brown", "fox", "jumps", "over", "the", "[UNK]", "lazy", "dog", "[UNK]", "[SEP]"}; Assertions.assertArrayEquals(expected, tokens); } private Set getVocabulary() { final Set vocabulary = new HashSet<>(); vocabulary.add("the"); vocabulary.add("quick"); vocabulary.add("brown"); vocabulary.add("fox"); vocabulary.add("jumps"); vocabulary.add("over"); vocabulary.add("the"); vocabulary.add("lazy"); vocabulary.add("dog"); return vocabulary; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_AbstractEven0100644 0000000 0000000 00000000156 14523004075 032622 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/AbstractEventStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/AbstractEventStreamTest.java0100644 0000000 0000000 00000007236 14523004075 034261 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.ml.model.Event; /** * Tests for the {@link AbstractEventStream} class. */ public class AbstractEventStreamTest { /** * Checks if the {@link AbstractEventStream} behavior is correctly * if the {@link AbstractEventStream#createEvents(Object)} method * return iterators with events and empty iterators. */ @Test void testStandardCase() throws IOException { List samples = new ArrayList<>(); samples.add(RESULT.EVENTS); samples.add(RESULT.EMPTY); samples.add(RESULT.EVENTS); try (TestEventStream eventStream = new TestEventStream(new CollectionObjectStream<>(samples))) { int eventCounter = 0; while (eventStream.read() != null) { eventCounter++; } Assertions.assertEquals(2, eventCounter); } } /** * Checks if the {@link AbstractEventStream} behavior is correctly * if the {@link AbstractEventStream#createEvents(Object)} method * only returns empty iterators. */ @Test void testEmtpyEventStream() throws IOException { List samples = new ArrayList<>(); samples.add(RESULT.EMPTY); try (TestEventStream eventStream = new TestEventStream(new CollectionObjectStream<>(samples))) { Assertions.assertNull(eventStream.read()); // now check if it can handle multiple empty event iterators samples.add(RESULT.EMPTY); samples.add(RESULT.EMPTY); } try (TestEventStream eventStream = new TestEventStream(new CollectionObjectStream<>(samples))) { Assertions.assertNull(eventStream.read()); } } enum RESULT { EVENTS, EMPTY } static class TestEventStream extends AbstractEventStream { protected TestEventStream(ObjectStream samples) { super(samples); } /** * Creates {@link Iterator}s for testing. * * @param sample parameter to specify the output * @return it returns an {@link Iterator} which contains one * {@link Event} object if the sample parameter equals * {@link RESULT#EVENTS} or an empty {@link Iterator} if the sample * parameter equals {@link RESULT#EMPTY}. */ @Override protected Iterator createEvents(RESULT sample) { if (RESULT.EVENTS.equals(sample)) { List events = new ArrayList<>(); events.add(new Event("test", new String[] {"f1", "f2"})); return events.iterator(); } else if (RESULT.EMPTY.equals(sample)) { List emptyList = Collections.emptyList(); return emptyList.iterator(); } else { // throws runtime exception, execution stops here Assertions.fail(); return null; } } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/DownloadParserTest.java0100644 0000000 0000000 00000011415 14523004075 033256 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.net.MalformedURLException; import java.net.URL; import java.util.Map; import java.util.stream.Stream; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; public class DownloadParserTest { @ParameterizedTest(name = "Verify \"{0}\" available models") @MethodSource(value = "expectedModels") void testAvailableModels(String language, Map expectedModels) { final URL baseUrl = fromClasspath("opennlp/tools/util/index.html"); assertNotNull(baseUrl); final DownloadUtil.DownloadParser downloadParser = new DownloadUtil.DownloadParser(baseUrl); Map> result = downloadParser.getAvailableModels(); assertNotNull(result); assertEquals(5, result.size()); final Map availableModels = result.get(language); assertNotNull(availableModels); for (Map.Entry e : expectedModels.entrySet()) { final String url = availableModels.get(e.getKey()); final String expectedUrl = baseUrl + "/" + e.getValue(); assertNotNull(url, "A model for the given model type is expected"); assertEquals(expectedUrl, url); } } @Test void testNullUrl() { assertThrows(NullPointerException.class, () -> new DownloadUtil.DownloadParser(null) ); } @Test void testInvalidUrl() throws MalformedURLException { final DownloadUtil.DownloadParser downloadParser = new DownloadUtil.DownloadParser(new URL("file:/this/does/not/exist")); Map> result = downloadParser.getAvailableModels(); assertNotNull(result); assertEquals(0, result.size()); } private URL fromClasspath(String file) { return Thread.currentThread().getContextClassLoader().getResource(file); } // Note: This needs to be public as JUnit 5 requires it like this. public static Stream expectedModels() { // Data as defined in "test/resources/opennlp/tools/util/index.html" return Stream.of( Arguments.of("en", Map.of( DownloadUtil.ModelType.SENTENCE_DETECTOR, "opennlp-en-ud-ewt-sentence-1.0-1.9.3.bin", DownloadUtil.ModelType.TOKENIZER, "opennlp-en-ud-ewt-tokens-1.0-1.9.3.bin", DownloadUtil.ModelType.POS, "opennlp-en-ud-ewt-pos-1.0-1.9.3.bin")), Arguments.of("fr", Map.of( DownloadUtil.ModelType.SENTENCE_DETECTOR, "opennlp-1.0-1.9.3fr-ud-ftb-sentence-1.0-1.9.3.bin", DownloadUtil.ModelType.TOKENIZER, "opennlp-fr-ud-ftb-tokens-1.0-1.9.3.bin", DownloadUtil.ModelType.POS, "opennlp-fr-ud-ftb-pos-1.0-1.9.3.bin")), Arguments.of("de", Map.of( DownloadUtil.ModelType.SENTENCE_DETECTOR, "opennlp-de-ud-gsd-sentence-1.0-1.9.3.bin", DownloadUtil.ModelType.TOKENIZER, "opennlp-de-ud-gsd-tokens-1.0-1.9.3.bin", DownloadUtil.ModelType.POS, "opennlp-de-ud-gsd-pos-1.0-1.9.3.bin")), Arguments.of("it", Map.of( DownloadUtil.ModelType.SENTENCE_DETECTOR, "opennlp-it-ud-vit-sentence-1.0-1.9.3.bin", DownloadUtil.ModelType.TOKENIZER, "opennlp-it-ud-vit-tokens-1.0-1.9.3.bin", DownloadUtil.ModelType.POS, "opennlp-it-ud-vit-pos-1.0-1.9.3.bin")), Arguments.of("nl", Map.of( DownloadUtil.ModelType.SENTENCE_DETECTOR, "opennlp-nl-ud-alpino-sentence-1.0-1.9.3.bin", DownloadUtil.ModelType.TOKENIZER, "opennlp-nl-ud-alpino-tokens-1.0-1.9.3.bin", DownloadUtil.ModelType.POS, "opennlp-nl-ud-alpino-pos-1.0-1.9.3.bin")) ); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/DownloadUtilTest.java0100644 0000000 0000000 00000012171 14523004075 032737 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; import java.net.URL; import java.nio.file.DirectoryStream; import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import java.util.stream.Stream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.NullAndEmptySource; import org.junit.jupiter.params.provider.ValueSource; import opennlp.tools.EnabledWhenCDNAvailable; import opennlp.tools.sentdetect.SentenceModel; import opennlp.tools.tokenize.TokenizerModel; import static org.junit.jupiter.api.Assertions.fail; public class DownloadUtilTest { private static final String APACHE_CDN = "dlcdn.apache.org"; @BeforeAll public static void cleanupWhenOnline() { boolean isOnline; try (Socket socket = new Socket()) { socket.connect(new InetSocketAddress(APACHE_CDN, 80), EnabledWhenCDNAvailable.TIMEOUT_MS); isOnline = true; } catch (IOException e) { // Unreachable, unresolvable or timeout isOnline = false; } // If CDN is available -> go cleanup in preparation of the actual tests if (isOnline) { wipeExistingModelFiles("-tokens-"); wipeExistingModelFiles("-sentence-"); } } /* * Helper method that wipes out mode files if they exist on the text execution env. * Those model files are wiped from the user's home hidden '.opennlp' subdirectory. * * Thereby, a clean download can be guaranteed - ín CDN is available and test are executed. */ private static void wipeExistingModelFiles(final String fragment) { final String openNLPHomeDir = System.getProperty("user.home") + "/.opennlp/"; final Path dir = FileSystems.getDefault().getPath(openNLPHomeDir); if (Files.exists(dir)) { try (DirectoryStream stream = Files.newDirectoryStream(dir, "*opennlp-*" + fragment + "*")) { for (Path modelFileToWipe: stream) { Files.deleteIfExists(modelFileToWipe); } } catch (IOException e) { fail(e.getLocalizedMessage()); } } } @ParameterizedTest(name = "Verify \"{0}\" sentence model") @ValueSource(strings = {"en", "fr", "de", "it", "nl"}) @EnabledWhenCDNAvailable(hostname = "dlcdn.apache.org") public void testDownloadModelByLanguage(String lang) throws IOException { SentenceModel model = DownloadUtil.downloadModel(lang, DownloadUtil.ModelType.SENTENCE_DETECTOR, SentenceModel.class); Assertions.assertNotNull(model); Assertions.assertEquals(lang, model.getLanguage()); Assertions.assertTrue(model.isLoadedFromSerialized()); } @ParameterizedTest(name = "Verify \"{0}\" tokenizer model") @MethodSource(value = "provideURLs") @EnabledWhenCDNAvailable(hostname = "dlcdn.apache.org") public void testDownloadModelByURL(String language, URL url) throws IOException { TokenizerModel model = DownloadUtil.downloadModel(url, TokenizerModel.class); Assertions.assertNotNull(model); Assertions.assertEquals(language, model.getLanguage()); Assertions.assertTrue(model.isLoadedFromSerialized()); } @ParameterizedTest(name = "Detect invalid input: \"{0}\"") @NullAndEmptySource @ValueSource(strings = {" ", "\t", "\n"}) public void testDownloadModelInvalid(String input) { Assertions.assertThrows(IOException.class, () -> DownloadUtil.downloadModel( input, DownloadUtil.ModelType.SENTENCE_DETECTOR, SentenceModel.class), "Invalid model"); } private static final DownloadUtil.ModelType MT_TOKENIZER = DownloadUtil.ModelType.TOKENIZER; // Note: This needs to be public as JUnit 5 requires it like this. public static Stream provideURLs() { return Stream.of( Arguments.of("en", DownloadUtil.available_models.get("en").get(MT_TOKENIZER)), Arguments.of("fr", DownloadUtil.available_models.get("fr").get(MT_TOKENIZER)), Arguments.of("de", DownloadUtil.available_models.get("de").get(MT_TOKENIZER)), Arguments.of("it", DownloadUtil.available_models.get("it").get(MT_TOKENIZER)), Arguments.of("nl", DownloadUtil.available_models.get("nl").get(MT_TOKENIZER)) ); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/FileUtil.java0100644 0000000 0000000 00000002560 14523004075 031210 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.File; import org.junit.jupiter.api.Assertions; public class FileUtil { /** * delete the specified directory and its child directories and files * @param file specify the file or directory to be deleted */ public static void deleteDirectory(File file) { if (file.exists()) { if (file.isDirectory()) { File[] files = file.listFiles(); if (files != null) { for (File f: files) { deleteDirectory(f); } } } Assertions.assertTrue(file.delete()); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/MockInputStreamFactory.java0100644 0000000 0000000 00000003464 14523004075 034114 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.ByteArrayInputStream; import java.io.File; import java.io.InputStream; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; public class MockInputStreamFactory implements InputStreamFactory { private final File inputSourceFile; private final String inputSourceStr; private final Charset charset; public MockInputStreamFactory(File file) { this.inputSourceFile = file; this.inputSourceStr = null; this.charset = null; } public MockInputStreamFactory(String str) { this(str, StandardCharsets.UTF_8); } public MockInputStreamFactory(String str, Charset charset) { this.inputSourceFile = null; this.inputSourceStr = str; this.charset = charset; } @Override public InputStream createInputStream() { if (inputSourceFile != null) { return getClass().getClassLoader().getResourceAsStream(inputSourceFile.getPath()); } else { return new ByteArrayInputStream(inputSourceStr.getBytes(charset)); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/ObjectStreamUtilsTest.java0100644 0000000 0000000 00000011012 14523004075 033726 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.TreeSet; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class ObjectStreamUtilsTest { @Test void buildStreamTest() throws IOException { String[] data = {"dog", "cat", "pig", "frog"}; // make a stream out of the data array... ObjectStream stream = ObjectStreamUtils.createObjectStream(data); compare(stream, data); // make a stream out of a list... List dataList = Arrays.asList(data); stream = ObjectStreamUtils.createObjectStream(Arrays.asList(data)); compare(stream, data); // make a stream out of a set... // A treeSet will order the set in Alphabetical order, so // we can compare it with the sorted Array, but this changes the // array. so it must be checked last. Arrays.sort(data); stream = ObjectStreamUtils.createObjectStream(new TreeSet<>(dataList)); compare(stream, data); } @Test void concatenateStreamTest() throws IOException { String[] data1 = {"dog1", "cat1", "pig1", "frog1"}; String[] data2 = {"dog2", "cat2", "pig2", "frog2"}; String[] expected = {"dog1", "cat1", "pig1", "frog1", "dog2", "cat2", "pig2", "frog2"}; // take individual streams and concatenate them as 1 stream. // Note: this is much easier than trying to create an array of // streams which needs to have annotation to avoid warnings about // generics and arrays. ObjectStream stream = ObjectStreamUtils.concatenateObjectStream( ObjectStreamUtils.createObjectStream(data1), ObjectStreamUtils.createObjectStream(data2)); compare(stream, expected); // test that collections of streams can be concatenated... List> listOfStreams = new ArrayList<>(); listOfStreams.add(ObjectStreamUtils.createObjectStream(data1)); listOfStreams.add(ObjectStreamUtils.createObjectStream(data2)); stream = ObjectStreamUtils.concatenateObjectStream(listOfStreams); compare(stream, expected); // test that sets of streams can be concatenated.. Set> streamSet = new HashSet<>(); streamSet.add(ObjectStreamUtils.createObjectStream(data1)); streamSet.add(ObjectStreamUtils.createObjectStream(data2)); stream = ObjectStreamUtils.concatenateObjectStream(streamSet); // The order the of the streams in the set is not know a priori // just check that the dog, cat, pig. frog is in the write order... compareUpToLastCharacter(stream, expected); } private void compare(ObjectStream stream, String[] expectedValues) throws IOException { String value; int i = 0; while ((value = stream.read()) != null) { Assertions.assertTrue(i < expectedValues.length, "The stream is longer than expected at index: " + i + " expected length: " + expectedValues.length + " expectedValues" + Arrays.toString(expectedValues)); Assertions.assertEquals(expectedValues[i++], value); } } private void compareUpToLastCharacter(ObjectStream stream, String[] expectedValues) throws IOException { String value; int i = 0; while ((value = stream.read()) != null) { Assertions.assertTrue(i < expectedValues.length, "The stream is longer than expected at index: " + i + " expected length: " + expectedValues.length + " expectedValues" + Arrays.toString(expectedValues)); Assertions.assertEquals( expectedValues[i].substring(0, expectedValues[i].length() - 1), value.substring(0, value.length() - 1)); i++; } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/ParagraphStreamTest.java0100644 0000000 0000000 00000004101 14523004075 033405 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.IOException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class ParagraphStreamTest { @Test void testSimpleReading() throws IOException { try (ParagraphStream paraStream = new ParagraphStream( ObjectStreamUtils.createObjectStream("1", "2", "", "", "4", "5"))) { Assertions.assertEquals("1\n2\n", paraStream.read()); Assertions.assertEquals("4\n5\n", paraStream.read()); Assertions.assertNull(paraStream.read()); } try (ParagraphStream paraStream = new ParagraphStream( ObjectStreamUtils.createObjectStream("1", "2", "", "", "4", "5", ""))) { Assertions.assertEquals("1\n2\n", paraStream.read()); Assertions.assertEquals("4\n5\n", paraStream.read()); Assertions.assertNull(paraStream.read()); } } @Test void testReset() throws IOException { try (ParagraphStream paraStream = new ParagraphStream( ObjectStreamUtils.createObjectStream("1", "2", "", "", "4", "5", ""))) { Assertions.assertEquals("1\n2\n", paraStream.read()); paraStream.reset(); Assertions.assertEquals("1\n2\n", paraStream.read()); Assertions.assertEquals("4\n5\n", paraStream.read()); Assertions.assertNull(paraStream.read()); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_PlainTextByL0100644 0000000 0000000 00000000160 14523004075 032553 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/PlainTextByLineStreamTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/PlainTextByLineStreamTest.ja0100644 0000000 0000000 00000004452 14523004075 034175 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.IOException; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * Tests for the {@link PlainTextByLineStream} class. */ public class PlainTextByLineStreamTest { static final String testString = "line1" + '\n' + "line2" + '\n' + "line3" + "\r\n" + "line4" + '\n'; @Test void testLineSegmentation() throws IOException { ObjectStream stream = new PlainTextByLineStream(new MockInputStreamFactory(testString), StandardCharsets.UTF_8); Assertions.assertEquals("line1", stream.read()); Assertions.assertEquals("line2", stream.read()); Assertions.assertEquals("line3", stream.read()); Assertions.assertEquals("line4", stream.read()); Assertions.assertNull(stream.read()); stream.close(); } @Test void testReset() throws IOException { ObjectStream stream = new PlainTextByLineStream(new MockInputStreamFactory(testString), StandardCharsets.UTF_8); Assertions.assertEquals("line1", stream.read()); Assertions.assertEquals("line2", stream.read()); Assertions.assertEquals("line3", stream.read()); stream.reset(); Assertions.assertEquals("line1", stream.read()); Assertions.assertEquals("line2", stream.read()); Assertions.assertEquals("line3", stream.read()); Assertions.assertEquals("line4", stream.read()); Assertions.assertNull(stream.read()); stream.close(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/SequenceTest.java0100644 0000000 0000000 00000007745 14523004075 032115 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * Tests for the {@link Sequence} class. */ public class SequenceTest { /** * Tests the copy constructor {@link Sequence#Sequence(Sequence)}. */ @Test void testCopyConstructor() { Sequence sequence = new Sequence(); sequence.add("a", 10); sequence.add("b", 20); Sequence copy = new Sequence(sequence); Assertions.assertEquals(sequence.getOutcomes(), copy.getOutcomes()); Assertions.assertArrayEquals(copy.getProbs(), sequence.getProbs(), 0.0); Assertions.assertEquals(0, sequence.compareTo(copy)); } /** * Tests {@link Sequence#add(String, double)}, also * tests {@link Sequence#getOutcomes()} and {@link Sequence#getProbs()}. */ @Test void testAddMethod() { Sequence sequence = new Sequence(); sequence.add("a", 10d); // check if insert was successful Assertions.assertEquals("a", sequence.getOutcomes().get(0)); Assertions.assertEquals(10d, sequence.getProbs()[0]); } /** * Tests {@link Sequence#compareTo(Sequence)}. */ @Test void testCompareTo() { Sequence lowScore = new Sequence(); lowScore.add("A", 1d); lowScore.add("B", 2d); lowScore.add("C", 3d); Sequence highScore = new Sequence(); lowScore.add("A", 7d); lowScore.add("B", 8d); lowScore.add("C", 9d); Assertions.assertEquals(-1, lowScore.compareTo(highScore)); Assertions.assertEquals(1, highScore.compareTo(lowScore)); } /** * Checks that {@link Sequence#toString()} is executable. */ @Test void testToString() { new Sequence().toString(); Sequence sequence = new Sequence(); sequence.add("test", 0.1d); sequence.toString(); } @Test void testGetAtIndex() { final Sequence sequence = new Sequence(); sequence.add("A", 1d); sequence.add("B", 2d); sequence.add("C", 3d); Assertions.assertEquals(3, sequence.getSize()); Assertions.assertEquals("A", sequence.getOutcome(0)); Assertions.assertEquals("B", sequence.getOutcome(1)); Assertions.assertEquals("C", sequence.getOutcome(2)); Assertions.assertEquals(1d, sequence.getProb(0)); Assertions.assertEquals(2d, sequence.getProb(1)); Assertions.assertEquals(3d, sequence.getProb(2)); } @Test void testGetAtIndexInvalid() { final Sequence sequence = new Sequence(); sequence.add("A", 1d); Assertions.assertThrows(IndexOutOfBoundsException.class, () -> sequence.getOutcome(-1)); Assertions.assertThrows(IndexOutOfBoundsException.class, () -> sequence.getOutcome(sequence.getSize() + 1)); Assertions.assertThrows(IndexOutOfBoundsException.class, () -> sequence.getProb(-1)); Assertions.assertThrows(IndexOutOfBoundsException.class, () -> sequence.getProb(sequence.getSize() + 1)); } @Test void testListCopy() { final Sequence sequence = new Sequence(); sequence.add("A", 1d); Assertions.assertEquals(1, sequence.getSize()); Assertions.assertThrows(UnsupportedOperationException.class, () -> sequence.getOutcomes().add( "This should fail! It should not be possible to modify the internal state")); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/SpanTest.java0100644 0000000 0000000 00000017373 14523004075 031244 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * Tests for the {@link Span} class. */ public class SpanTest { /** * Test for {@link Span#getStart()}. */ @Test void testGetStart() { Assertions.assertEquals(5, new Span(5, 6).getStart()); } /** * Test for {@link Span#getEnd()}. */ @Test void testGetEnd() { Assertions.assertEquals(6, new Span(5, 6).getEnd()); } /** * Test for {@link Span#length()}. */ @Test void testLength() { Assertions.assertEquals(11, new Span(10, 21).length()); } /** * Test for {@link Span#contains(Span)}. */ @Test void testContains() { Span a = new Span(500, 900); Span b = new Span(520, 600); Assertions.assertTrue(a.contains(b)); } /** * Test for {@link Span#contains(Span)}. */ @Test void testContainsWithEqual() { Span a = new Span(500, 900); Assertions.assertTrue(a.contains(a)); } /** * Test for {@link Span#contains(Span)}. */ @Test void testContainsWithLowerIntersect() { Span a = new Span(500, 900); Span b = new Span(450, 1000); Assertions.assertFalse(a.contains(b)); } /** * Test for {@link Span#contains(Span)}. */ @Test void testContainsWithHigherIntersect() { Span a = new Span(500, 900); Span b = new Span(500, 1000); Assertions.assertFalse(a.contains(b)); } /** * Test for {@link Span#contains(int)}. */ @Test void testContainsInt() { Span a = new Span(10, 300); /* NOTE: here the span does not contain the endpoint marked as the end * for the span. This is because the end should be placed one past the * true end for the span. The indexes used must observe the same * requirements for the contains function. */ Assertions.assertFalse(a.contains(9)); Assertions.assertTrue(a.contains(10)); Assertions.assertTrue(a.contains(200)); Assertions.assertTrue(a.contains(299)); Assertions.assertFalse(a.contains(300)); } /** * Test for {@link Span#startsWith(Span)}. */ @Test void testStartsWith() { Span a = new Span(10, 50); Span b = new Span(10, 12); Assertions.assertTrue(a.startsWith(a)); Assertions.assertTrue(a.startsWith(b)); Assertions.assertFalse(b.startsWith(a)); } /** * Test for {@link Span#intersects(Span)}. */ @Test void testIntersects() { Span a = new Span(10, 50); Span b = new Span(40, 100); Assertions.assertTrue(a.intersects(b)); Assertions.assertTrue(b.intersects(a)); Span c = new Span(10, 20); Span d = new Span(40, 50); Assertions.assertFalse(c.intersects(d)); Assertions.assertFalse(d.intersects(c)); Assertions.assertTrue(b.intersects(d)); } /** * Test for {@link Span#crosses(Span)}. */ @Test void testCrosses() { Span a = new Span(10, 50); Span b = new Span(40, 100); Assertions.assertTrue(a.crosses(b)); Assertions.assertTrue(b.crosses(a)); Span c = new Span(10, 20); Span d = new Span(40, 50); Assertions.assertFalse(c.crosses(d)); Assertions.assertFalse(d.crosses(c)); Assertions.assertFalse(b.crosses(d)); } /** * Test for {@link Span#compareTo(Span)}. */ @Test void testCompareToLower() { Span a = new Span(100, 1000); Span b = new Span(10, 50); Assertions.assertTrue(a.compareTo(b) > 0); } /** * Test for {@link Span#compareTo(Span)}. */ @Test void testCompareToHigher() { Span a = new Span(100, 200); Span b = new Span(300, 400); Assertions.assertTrue(a.compareTo(b) < 0); } /** * Test for {@link Span#compareTo(Span)}. */ @Test void testCompareToEquals() { Span a = new Span(30, 1000); Span b = new Span(30, 1000); Assertions.assertEquals(0, a.compareTo(b)); } /// /** * Test for {@link Span#compareTo(Span)}. */ @Test void testCompareToEqualsSameType() { Span a = new Span(30, 1000, "a"); Span b = new Span(30, 1000, "a"); Assertions.assertEquals(0, a.compareTo(b)); } /** * Test for {@link Span#compareTo(Span)}. */ @Test void testCompareToEqualsDiffType1() { Span a = new Span(30, 1000, "a"); Span b = new Span(30, 1000, "b"); Assertions.assertEquals(-1, a.compareTo(b)); } /** * Test for {@link Span#compareTo(Span)}. */ @Test void testCompareToEqualsDiffType2() { Span a = new Span(30, 1000, "b"); Span b = new Span(30, 1000, "a"); Assertions.assertEquals(1, a.compareTo(b)); } /** * Test for {@link Span#compareTo(Span)}. */ @Test void testCompareToEqualsNullType1() { Span a = new Span(30, 1000); Span b = new Span(30, 1000, "b"); Assertions.assertEquals(1, a.compareTo(b)); } /** * Test for {@link Span#compareTo(Span)}. */ @Test void testCompareToEqualsNullType2() { Span a = new Span(30, 1000, "b"); Span b = new Span(30, 1000); Assertions.assertEquals(-1, a.compareTo(b)); } /** * Test for {@link Span#hashCode()}. */ @Test void testhHashCode() { Assertions.assertEquals(new Span(10, 11), new Span(10, 11)); } /** * Test for {@link Span#equals(Object)}. */ @Test void testEqualsWithNull() { Span a = new Span(0, 0); Assertions.assertNotNull(a); } /** * Test for {@link Span#equals(Object)}. */ @Test void testEquals() { Span a1 = new Span(100, 1000, "test"); Span a2 = new Span(100, 1000, "test"); Assertions.assertEquals(a1, a2); // end is different Span b1 = new Span(100, 100, "test"); Assertions.assertNotEquals(a1, b1); // type is different Span c1 = new Span(100, 1000, "Test"); Assertions.assertNotEquals(a1, c1); Span d1 = new Span(100, 1000); Assertions.assertNotEquals(d1, a1); Assertions.assertNotEquals(a1, d1); } /** * Test for {@link Span#toString()}. */ @Test void testToString() { Assertions.assertEquals("[50..100)", new Span(50, 100).toString()); Assertions.assertEquals("[50..100) myType", new Span(50, 100, "myType").toString()); } @Test void testTrim() { String string1 = " 12 34 "; Span span1 = new Span(0, string1.length()); Assertions.assertEquals("12 34", span1.trim(string1).getCoveredText(string1)); } @Test void testTrimWhitespaceSpan() { String string1 = " "; Span span1 = new Span(0, string1.length()); Assertions.assertEquals("", span1.trim(string1).getCoveredText(string1)); } /** * Test if it fails to construct span with invalid start */ @Test void testTooSmallStart() { Assertions.assertThrows(IllegalArgumentException.class, () -> new Span(-1, 100)); } /** * Test if it fails to construct span with invalid end */ @Test void testTooSmallEnd() { Assertions.assertThrows(IllegalArgumentException.class, () -> new Span(50, -1)); } /** * Test if it fails to construct span with start > end */ @Test void testStartLargerThanEnd() { Assertions.assertThrows(IllegalArgumentException.class, () -> new Span(100, 50)); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/StringListTest.java0100644 0000000 0000000 00000006354 14523004075 032442 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.util.Iterator; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * Tests for the {@link StringList} class. */ public class StringListTest { /** * Tests {@link StringList} which uses {@link String#intern}. */ @Test void testIntern() { StringList l1 = new StringList("a"); StringList l2 = new StringList("a", "b"); Assertions.assertSame(l1.getToken(0), l2.getToken(0)); } /** * Tests {@link StringList#getToken(int)}. */ @Test void testGetToken() { StringList l = new StringList("a", "b"); Assertions.assertEquals(2, l.size()); Assertions.assertEquals("a", l.getToken(0)); Assertions.assertEquals("b", l.getToken(1)); } /** * Tests {@link StringList#iterator()}. */ @Test void testIterator() { StringList l = new StringList("a"); Iterator it = l.iterator(); Assertions.assertTrue(it.hasNext()); Assertions.assertEquals("a", it.next()); Assertions.assertFalse(it.hasNext()); // now test with more than one string l = new StringList("a", "b", "c"); it = l.iterator(); Assertions.assertTrue(it.hasNext()); Assertions.assertEquals("a", it.next()); Assertions.assertTrue(it.hasNext()); Assertions.assertEquals("b", it.next()); Assertions.assertTrue(it.hasNext()); Assertions.assertEquals("c", it.next()); Assertions.assertFalse(it.hasNext()); } /** * Tests {@link StringList#compareToIgnoreCase(StringList)}. */ @Test void testCompareToIgnoreCase() { Assertions.assertTrue(new StringList("a", "b").compareToIgnoreCase( new StringList("A", "B"))); } /** * Tests {@link StringList#equals(Object)}. */ @Test void testEquals() { Assertions.assertEquals(new StringList("a", "b"), new StringList("a", "b")); Assertions.assertNotEquals(new StringList("a", "b"), new StringList("A", "B")); } /** * Tests {@link StringList#hashCode()}. */ @Test void testHashCode() { Assertions.assertEquals(new StringList("a", "b").hashCode(), new StringList("a", "b").hashCode()); Assertions.assertNotEquals(new StringList("a", "b").hashCode(), new StringList("a", "c").hashCode()); } /** * Tests {@link StringList#toString()}. */ @Test void testToString() { Assertions.assertEquals("[a]", new StringList("a").toString()); Assertions.assertEquals("[a,b]", new StringList("a", "b").toString()); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/StringUtilTest.java0100644 0000000 0000000 00000004741 14523004075 032442 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * Tests for the {@link StringUtil} class. */ public class StringUtilTest { @Test void testNoBreakSpace() { Assertions.assertTrue(StringUtil.isWhitespace(0x00A0)); Assertions.assertTrue(StringUtil.isWhitespace(0x2007)); Assertions.assertTrue(StringUtil.isWhitespace(0x202F)); Assertions.assertTrue(StringUtil.isWhitespace((char) 0x00A0)); Assertions.assertTrue(StringUtil.isWhitespace((char) 0x2007)); Assertions.assertTrue(StringUtil.isWhitespace((char) 0x202F)); } @Test void testToLowerCase() { Assertions.assertEquals("test", StringUtil.toLowerCase("TEST")); Assertions.assertEquals("simple", StringUtil.toLowerCase("SIMPLE")); } @Test void testToUpperCase() { Assertions.assertEquals("TEST", StringUtil.toUpperCase("test")); Assertions.assertEquals("SIMPLE", StringUtil.toUpperCase("simple")); } @Test void testIsEmpty() { Assertions.assertTrue(StringUtil.isEmpty("")); Assertions.assertFalse(StringUtil.isEmpty("a")); } @Test void testIsEmptyWithNullString() { // should raise a NPE Assertions.assertThrows(NullPointerException.class, () -> { // should raise a NPE StringUtil.isEmpty(null); }); } @Test void testLowercaseBeyondBMP() { int[] codePoints = new int[] {65, 66578, 67}; //A,Deseret capital BEE,C int[] expectedCodePoints = new int[] {97, 66618, 99};//a,Deseret lowercase b,c String input = new String(codePoints, 0, codePoints.length); String lc = StringUtil.toLowerCase(input); Assertions.assertArrayEquals(expectedCodePoints, lc.codePoints().toArray()); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/TrainingParametersTest.java0100644 0000000 0000000 00000021156 14523004075 034134 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import java.io.ByteArrayInputStream; import java.util.HashMap; import java.util.Map; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.ml.EventTrainer; public class TrainingParametersTest { @Test void testConstructors() throws Exception { TrainingParameters tp1 = new TrainingParameters(build("key1=val1,key2=val2,key3=val3")); TrainingParameters tp2 = new TrainingParameters( new ByteArrayInputStream("key1=val1\nkey2=val2\nkey3=val3\n".getBytes()) ); TrainingParameters tp3 = new TrainingParameters(tp2); assertEquals(tp1, tp2); assertEquals(tp2, tp3); } @Test void testDefault() { TrainingParameters tr = TrainingParameters.defaultParams(); Assertions.assertEquals(4, tr.getObjectSettings().size()); Assertions.assertEquals("MAXENT", tr.algorithm()); Assertions.assertEquals(EventTrainer.EVENT_VALUE, tr.getStringParameter(TrainingParameters.TRAINER_TYPE_PARAM, "v11")); // use different defaults Assertions.assertEquals(100, tr.getIntParameter(TrainingParameters.ITERATIONS_PARAM, 200)); // use different defaults Assertions.assertEquals(5, tr.getIntParameter(TrainingParameters.CUTOFF_PARAM, 200)); // use different defaults } @Test public void testSetParamsWithCLIParams() { String[] args = { "-model" , "en-token-test.bin" , "-alphaNumOpt" , "isAlphaNumOpt" , "-lang" , "en" , "-data" , "en-token.train" , "-encoding" , "UTF-8" , "-cutoff" , "10" , "-iterations" , "50" }; TrainingParameters tr = TrainingParameters.setParams(args); Assertions.assertEquals("MAXENT" , tr.algorithm()); Assertions.assertEquals(50 , tr.getIntParameter(TrainingParameters.ITERATIONS_PARAM , TrainingParameters.ITERATIONS_DEFAULT_VALUE)); Assertions.assertEquals(10 , tr.getIntParameter(TrainingParameters.CUTOFF_PARAM , TrainingParameters.CUTOFF_DEFAULT_VALUE)); } @Test public void testSetParamsWithoutCLIParams() { String[] args = { "-model" , "en-token-test.bin" , "-alphaNumOpt" , "isAlphaNumOpt" , "-lang" , "en" , "-data" , "en-token.train" , "-encoding" , "UTF-8" }; TrainingParameters tr = TrainingParameters.setParams(args); Assertions.assertEquals("MAXENT" , tr.algorithm()); Assertions.assertEquals(100 , tr.getIntParameter(TrainingParameters.ITERATIONS_PARAM , TrainingParameters.ITERATIONS_DEFAULT_VALUE)); Assertions.assertEquals(5 , tr.getIntParameter(TrainingParameters.CUTOFF_PARAM , TrainingParameters.CUTOFF_DEFAULT_VALUE)); } @Test public void testSetParamsWithoutCutoffCLIParams() { String[] args = { "-model" , "en-token-test.bin" , "-alphaNumOpt" , "isAlphaNumOpt" , "-lang" , "en" , "-data" , "en-token.train" , "-encoding" , "UTF-8" , "-iterations" , "50" }; TrainingParameters tr = TrainingParameters.setParams(args); Assertions.assertEquals("MAXENT" , tr.algorithm()); Assertions.assertEquals(50 , tr.getIntParameter(TrainingParameters.ITERATIONS_PARAM , TrainingParameters.ITERATIONS_DEFAULT_VALUE)); Assertions.assertEquals(5 , tr.getIntParameter(TrainingParameters.CUTOFF_PARAM , TrainingParameters.CUTOFF_DEFAULT_VALUE)); } @Test public void testSetParamsWithoutIterationsCLIParams() { String[] args = { "-model" , "en-token-test.bin" , "-alphaNumOpt" , "isAlphaNumOpt" , "-lang" , "en" , "-data" , "en-token.train" , "-encoding" , "UTF-8" , "-cutoff" , "10" }; TrainingParameters tr = TrainingParameters.setParams(args); Assertions.assertEquals("MAXENT" , tr.algorithm()); Assertions.assertEquals(100 , tr.getIntParameter(TrainingParameters.ITERATIONS_PARAM , TrainingParameters.ITERATIONS_DEFAULT_VALUE)); Assertions.assertEquals(10 , tr.getIntParameter(TrainingParameters.CUTOFF_PARAM , TrainingParameters.CUTOFF_DEFAULT_VALUE)); } @Test void testGetAlgorithm() { TrainingParameters tp = build("Algorithm=Perceptron,n1.Algorithm=SVM"); Assertions.assertEquals("Perceptron", tp.algorithm()); Assertions.assertEquals("SVM", tp.algorithm("n1")); } @Test void testGetAlgorithmCaseInsensitive() { TrainingParameters tp = build("ALGORITHM=Perceptron,n1.Algorithm=SVM"); Assertions.assertEquals("Perceptron", tp.algorithm()); Assertions.assertEquals("SVM", tp.algorithm("n1")); } @Test void testGetSettings() { TrainingParameters tp = build("k1=v1,n1.k2=v2,n2.k3=v3,n1.k4=v4"); assertEquals(buildMap("k1=v1"), tp.getObjectSettings()); assertEquals(buildMap("k2=v2,k4=v4"), tp.getObjectSettings("n1")); assertEquals(buildMap("k3=v3"), tp.getObjectSettings("n2")); Assertions.assertTrue(tp.getObjectSettings("n3").isEmpty()); } @Test void testGetParameters() { TrainingParameters tp = build("k1=v1,n1.k2=v2,n2.k3=v3,n1.k4=v4"); assertEquals(build("k1=v1"), tp.getParameters(null)); assertEquals(build("k2=v2,k4=v4"), tp.getParameters("n1")); assertEquals(build("k3=v3"), tp.getParameters("n2")); Assertions.assertTrue(tp.getParameters("n3").getObjectSettings().isEmpty()); } @Test void testPutGet() { TrainingParameters tp = build("k1=v1,int.k2=123,str.k2=v3,str.k3=v4,boolean.k4=false,double.k5=123.45,k21=234.5"); Assertions.assertEquals("v1", tp.getStringParameter("k1", "def")); Assertions.assertEquals("def", tp.getStringParameter("k2", "def")); Assertions.assertEquals("v3", tp.getStringParameter("str", "k2", "def")); Assertions.assertEquals("def", tp.getStringParameter("str", "k4", "def")); Assertions.assertEquals(-100, tp.getIntParameter("k11", -100)); tp.put("k11", 234); Assertions.assertEquals(234, tp.getIntParameter("k11", -100)); Assertions.assertEquals(123, tp.getIntParameter("int", "k2", -100)); Assertions.assertEquals(-100, tp.getIntParameter("int", "k4", -100)); Assertions.assertEquals(tp.getDoubleParameter("k21", -100), 0.001, 234.5); tp.put("k21", 345.6); Assertions.assertEquals(tp.getDoubleParameter("k21", -100), 0.001, 345.6); // should be changed tp.putIfAbsent("k21", 456.7); Assertions.assertEquals(tp.getDoubleParameter("k21", -100), 0.001, 345.6); // should be unchanged Assertions.assertEquals(tp.getDoubleParameter("double", "k5", -100), 0.001, 123.45); Assertions.assertTrue(tp.getBooleanParameter("k31", true)); tp.put("k31", false); Assertions.assertFalse(tp.getBooleanParameter("k31", true)); Assertions.assertFalse(tp.getBooleanParameter("boolean", "k4", true)); } // format: k1=v1,k2=v2,... private static Map buildMap(String str) { String[] pairs = str.split(","); Map map = new HashMap<>(pairs.length); for (String pair : pairs) { String[] keyValue = pair.split("="); map.put(keyValue[0], keyValue[1]); } return map; } // format: k1=v1,k2=v2,... private static TrainingParameters build(String str) { return new TrainingParameters(buildMap(str)); } private static void assertEquals(Map map1, Map map2) { Assertions.assertNotNull(map1); Assertions.assertNotNull(map2); Assertions.assertEquals(map1.size(), map2.size()); for (String key : map1.keySet()) { Assertions.assertEquals(map1.get(key), map2.get(key)); } } private static void assertEquals(Map map, TrainingParameters actual) { Assertions.assertNotNull(actual); assertEquals(map, actual.getObjectSettings()); } private static void assertEquals(TrainingParameters expected, TrainingParameters actual) { if (expected == null) { Assertions.assertNull(actual); } else { assertEquals(expected.getObjectSettings(), actual); } } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/VersionTest.java0100644 0000000 0000000 00000003652 14523004075 031763 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * Tests for the {@link Version} class. */ public class VersionTest { @Test void testParse() { Version referenceVersion = Version.currentVersion(); Assertions.assertEquals(referenceVersion, Version.parse(referenceVersion.toString())); Assertions.assertEquals(new Version(1, 5, 2, false), Version.parse("1.5.2-incubating")); Assertions.assertEquals(new Version(1, 5, 2, false), Version.parse("1.5.2")); } @Test void testParseSnapshot() { Assertions.assertEquals(new Version(1, 5, 2, true), Version.parse("1.5.2-incubating-SNAPSHOT")); Assertions.assertEquals(new Version(1, 5, 2, true), Version.parse("1.5.2-SNAPSHOT")); } @Test void testParseInvalidVersion() { try { Version.parse("1.5."); } catch (NumberFormatException e) { return; } Assertions.assertFalse(false); } @Test void testParseInvalidVersion2() { try { Version.parse("1.5"); } catch (NumberFormatException e) { return; } Assertions.fail(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_eval_CrossVa0100644 0000000 0000000 00000000172 14523004075 032626 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/eval/CrossValidationPartitionerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/eval/CrossValidationPartitio0100644 0000000 0000000 00000015630 14523004075 034324 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.eval; import java.io.IOException; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.NoSuchElementException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.ObjectStream; import opennlp.tools.util.eval.CrossValidationPartitioner.TrainingSampleStream; /** * Test for the {@link CrossValidationPartitioner} class. */ public class CrossValidationPartitionerTest { @Test void testEmptyDataSet() throws IOException { Collection emptyCollection = Collections.emptySet(); CrossValidationPartitioner partitioner = new CrossValidationPartitioner<>(emptyCollection, 2); Assertions.assertTrue(partitioner.hasNext()); Assertions.assertNull(partitioner.next().read()); Assertions.assertTrue(partitioner.hasNext()); Assertions.assertNull(partitioner.next().read()); Assertions.assertFalse(partitioner.hasNext()); try { // Should throw NoSuchElementException partitioner.next(); // ups, hasn't thrown one Assertions.fail(); } catch (NoSuchElementException e) { // expected } } /** * Test 3-fold cross validation on a small sample data set. */ @Test void test3FoldCV() throws IOException { List data = new LinkedList<>(); data.add("01"); data.add("02"); data.add("03"); data.add("04"); data.add("05"); data.add("06"); data.add("07"); data.add("08"); data.add("09"); data.add("10"); CrossValidationPartitioner partitioner = new CrossValidationPartitioner<>(data, 3); // first partition Assertions.assertTrue(partitioner.hasNext()); TrainingSampleStream firstTraining = partitioner.next(); Assertions.assertEquals("02", firstTraining.read()); Assertions.assertEquals("03", firstTraining.read()); Assertions.assertEquals("05", firstTraining.read()); Assertions.assertEquals("06", firstTraining.read()); Assertions.assertEquals("08", firstTraining.read()); Assertions.assertEquals("09", firstTraining.read()); Assertions.assertNull(firstTraining.read()); ObjectStream firstTest = firstTraining.getTestSampleStream(); Assertions.assertEquals("01", firstTest.read()); Assertions.assertEquals("04", firstTest.read()); Assertions.assertEquals("07", firstTest.read()); Assertions.assertEquals("10", firstTest.read()); Assertions.assertNull(firstTest.read()); // second partition Assertions.assertTrue(partitioner.hasNext()); TrainingSampleStream secondTraining = partitioner.next(); Assertions.assertEquals("01", secondTraining.read()); Assertions.assertEquals("03", secondTraining.read()); Assertions.assertEquals("04", secondTraining.read()); Assertions.assertEquals("06", secondTraining.read()); Assertions.assertEquals("07", secondTraining.read()); Assertions.assertEquals("09", secondTraining.read()); Assertions.assertEquals("10", secondTraining.read()); Assertions.assertNull(secondTraining.read()); ObjectStream secondTest = secondTraining.getTestSampleStream(); Assertions.assertEquals("02", secondTest.read()); Assertions.assertEquals("05", secondTest.read()); Assertions.assertEquals("08", secondTest.read()); Assertions.assertNull(secondTest.read()); // third partition Assertions.assertTrue(partitioner.hasNext()); TrainingSampleStream thirdTraining = partitioner.next(); Assertions.assertEquals("01", thirdTraining.read()); Assertions.assertEquals("02", thirdTraining.read()); Assertions.assertEquals("04", thirdTraining.read()); Assertions.assertEquals("05", thirdTraining.read()); Assertions.assertEquals("07", thirdTraining.read()); Assertions.assertEquals("08", thirdTraining.read()); Assertions.assertEquals("10", thirdTraining.read()); Assertions.assertNull(thirdTraining.read()); ObjectStream thirdTest = thirdTraining.getTestSampleStream(); Assertions.assertEquals("03", thirdTest.read()); Assertions.assertEquals("06", thirdTest.read()); Assertions.assertEquals("09", thirdTest.read()); Assertions.assertNull(thirdTest.read()); Assertions.assertFalse(partitioner.hasNext()); } @Test void testFailSafty() throws IOException { List data = new LinkedList<>(); data.add("01"); data.add("02"); data.add("03"); data.add("04"); CrossValidationPartitioner partitioner = new CrossValidationPartitioner<>(data, 4); // Test that iterator from previous partition fails // if it is accessed TrainingSampleStream firstTraining = partitioner.next(); Assertions.assertEquals("02", firstTraining.read()); TrainingSampleStream secondTraining = partitioner.next(); try { firstTraining.read(); Assertions.fail(); } catch (IllegalStateException expected) { // the read above is expected to throw an exception } try { firstTraining.getTestSampleStream(); Assertions.fail(); } catch (IllegalStateException expected) { // the read above is expected to throw an exception } // Test that training iterator fails if there is a test iterator secondTraining.getTestSampleStream(); try { secondTraining.read(); Assertions.fail(); } catch (IllegalStateException expected) { // the read above is expected to throw an exception } // Test that test iterator from previous partition fails // if there is a new partition TrainingSampleStream thirdTraining = partitioner.next(); ObjectStream thridTest = thirdTraining.getTestSampleStream(); Assertions.assertTrue(partitioner.hasNext()); partitioner.next(); try { thridTest.read(); Assertions.fail(); } catch (IllegalStateException expected) { // the read above is expected to throw an exception } } @Test void testToString() { Collection emptyCollection = Collections.emptySet(); new CrossValidationPartitioner<>(emptyCollection, 10).toString(); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/eval/FMeasureTest.java0100644 0000000 0000000 00000012143 14523004075 032767 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.eval; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.Span; /** * Tests for the {@link FMeasure} class. */ public class FMeasureTest { private static final double DELTA = 1.0E-9d; private final Span[] gold = { new Span(8, 9), new Span(9, 10), new Span(10, 12), new Span(13, 14), new Span(14, 15), new Span(15, 16) }; private final Span[] predicted = { new Span(14, 15), new Span(15, 16), new Span(100, 120), new Span(210, 220), new Span(220, 230) }; private final Span[] predictedCompletelyDistinct = { new Span(100, 120), new Span(210, 220), new Span(211, 220), new Span(212, 220), new Span(220, 230) }; private final Span[] goldToMerge = { new Span(8, 9), new Span(9, 10), new Span(11, 11), new Span(13, 14), new Span(14, 15), new Span(15, 16), new Span(18, 19), }; private final Span[] predictedToMerge = { new Span(8, 9), new Span(14, 15), new Span(15, 16), new Span(100, 120), new Span(210, 220), new Span(220, 230) }; /** * Test for the {@link FMeasure#countTruePositives(Object[], Object[])} method. */ @Test public void testCountTruePositives() { Assertions.assertEquals(0, FMeasure.countTruePositives(new Object[] {}, new Object[] {})); Assertions.assertEquals(gold.length, FMeasure.countTruePositives(gold, gold)); Assertions.assertEquals(0, FMeasure.countTruePositives(gold, predictedCompletelyDistinct)); Assertions.assertEquals(2, FMeasure.countTruePositives(gold, predicted)); } /** * Test for the {@link FMeasure#precision(Object[], Object[])} method. */ @Test public void testPrecision() { Assertions.assertEquals(1.0d, FMeasure.precision(gold, gold), DELTA); Assertions.assertEquals(0, FMeasure.precision(gold, predictedCompletelyDistinct), DELTA); Assertions.assertEquals(Double.NaN, FMeasure.precision(gold, new Object[] {}), DELTA); Assertions.assertEquals(0, FMeasure.precision(new Object[] {}, gold), DELTA); Assertions.assertEquals(2d / predicted.length, FMeasure.precision(gold, predicted), DELTA); } /** * Test for the {@link FMeasure#recall(Object[], Object[])} method. */ @Test public void testRecall() { Assertions.assertEquals(1.0d, FMeasure.recall(gold, gold), DELTA); Assertions.assertEquals(0, FMeasure.recall(gold, predictedCompletelyDistinct), DELTA); Assertions.assertEquals(0, FMeasure.recall(gold, new Object[] {}), DELTA); Assertions.assertEquals(Double.NaN, FMeasure.recall(new Object[] {}, gold), DELTA); Assertions.assertEquals(2d / gold.length, FMeasure.recall(gold, predicted), DELTA); } @Test public void testEmpty() { FMeasure fm = new FMeasure(); Assertions.assertEquals(-1, fm.getFMeasure(), DELTA); Assertions.assertEquals(0, fm.getRecallScore(), DELTA); Assertions.assertEquals(0, fm.getPrecisionScore(), DELTA); } @Test public void testPerfect() { FMeasure fm = new FMeasure(); fm.updateScores(gold, gold); Assertions.assertEquals(1, fm.getFMeasure(), DELTA); Assertions.assertEquals(1, fm.getRecallScore(), DELTA); Assertions.assertEquals(1, fm.getPrecisionScore(), DELTA); } @Test public void testMerge() { FMeasure fm = new FMeasure(); fm.updateScores(gold, predicted); fm.updateScores(goldToMerge, predictedToMerge); FMeasure fmMerge = new FMeasure(); fmMerge.updateScores(gold, predicted); FMeasure toMerge = new FMeasure(); toMerge.updateScores(goldToMerge, predictedToMerge); fmMerge.mergeInto(toMerge); double selected1 = predicted.length; double target1 = gold.length; double tp1 = FMeasure.countTruePositives(gold, predicted); double selected2 = predictedToMerge.length; double target2 = goldToMerge.length; double tp2 = FMeasure.countTruePositives(goldToMerge, predictedToMerge); Assertions.assertEquals((tp1 + tp2) / (target1 + target2), fm.getRecallScore(), DELTA); Assertions.assertEquals((tp1 + tp2) / (selected1 + selected2), fm.getPrecisionScore(), DELTA); Assertions.assertEquals(fm.getRecallScore(), fmMerge.getRecallScore(), DELTA); Assertions.assertEquals(fm.getPrecisionScore(), fmMerge.getPrecisionScore(), DELTA); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/eval/MeanTest.java0100644 0000000 0000000 00000003260 14523004075 032140 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.eval; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * Tests for the {@link Mean} class. */ public class MeanTest { @Test public void testMeanCalculation() { Mean a = new Mean(); a.add(1); Assertions.assertEquals(1, a.count()); Assertions.assertEquals(1d, a.mean(), 0.00001d); a.add(1); Assertions.assertEquals(2, a.count()); Assertions.assertEquals(1d, a.mean(), 0.00001d); a.toString(); Mean b = new Mean(); b.add(0.5); Assertions.assertEquals(1, b.count()); Assertions.assertEquals(0.5d, b.mean(), 0.00001d); b.add(2); Assertions.assertEquals(2, b.count()); Assertions.assertEquals(1.25d, b.mean(), 0.00001d); b.toString(); Mean c = new Mean(); Assertions.assertEquals(0, c.count()); Assertions.assertEquals(0d, c.mean(), 0.00001d); c.toString(); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_ext_Extensio0100644 0000000 0000000 00000000156 14523004075 032717 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/ext/ExtensionLoaderTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/ext/ExtensionLoaderTest.java0100644 0000000 0000000 00000002662 14523004075 034241 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.ext; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class ExtensionLoaderTest { // define an interface here interface TestStringGenerator { String generateTestString(); } static public class TestStringGeneratorImpl implements TestStringGenerator { public String generateTestString() { return "test"; } } @Test void testLoadingStringGenerator() { TestStringGenerator g = ExtensionLoader.instantiateExtension(TestStringGenerator.class, TestStringGeneratorImpl.class.getName()); Assertions.assertEquals("test", g.generateTestString()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_B0100644 0000000 0000000 00000000200 14523004075 032615 xustar000000000 0000000 128 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/BigramNameFeatureGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/BigramNameFeature0100644 0000000 0000000 00000005546 14523004075 034225 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class BigramNameFeatureGeneratorTest { private List features; private static final String[] TEST_SENTENCE = new String[] {"This", "is", "an", "example", "sentence"}; @BeforeEach void setUp() { features = new ArrayList<>(); } @Test void testBegin() { final int testTokenIndex = 0; AdaptiveFeatureGenerator generator = new BigramNameFeatureGenerator(); generator.createFeatures(features, TEST_SENTENCE, testTokenIndex, null); Assertions.assertEquals(2, features.size()); Assertions.assertEquals("w,nw=This,is", features.get(0)); Assertions.assertEquals("wc,nc=ic,lc", features.get(1)); } @Test void testMiddle() { final int testTokenIndex = 2; AdaptiveFeatureGenerator generator = new BigramNameFeatureGenerator(); generator.createFeatures(features, TEST_SENTENCE, testTokenIndex, null); Assertions.assertEquals(4, features.size()); Assertions.assertEquals("pw,w=is,an", features.get(0)); Assertions.assertEquals("pwc,wc=lc,lc", features.get(1)); Assertions.assertEquals("w,nw=an,example", features.get(2)); Assertions.assertEquals("wc,nc=lc,lc", features.get(3)); } @Test void testEnd() { final int testTokenIndex = 4; AdaptiveFeatureGenerator generator = new BigramNameFeatureGenerator(); generator.createFeatures(features, TEST_SENTENCE, testTokenIndex, null); Assertions.assertEquals(2, features.size()); Assertions.assertEquals("pw,w=example,sentence", features.get(0)); Assertions.assertEquals("pwc,wc=lc,lc", features.get(1)); } @Test void testShort() { String[] shortSentence = new String[] {"word"}; final int testTokenIndex = 0; AdaptiveFeatureGenerator generator = new BigramNameFeatureGenerator(); generator.createFeatures(features, shortSentence, testTokenIndex, null); Assertions.assertEquals(0, features.size()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_B0100644 0000000 0000000 00000000201 14523004075 032616 xustar000000000 0000000 129 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/BrownBigramFeatureGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/BrownBigramFeatur0100644 0000000 0000000 00000005401 14523004075 034255 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import opennlp.tools.formats.ResourceAsStreamFactory; public class BrownBigramFeatureGeneratorTest { private AdaptiveFeatureGenerator generator; @BeforeEach void setup() throws IOException { ResourceAsStreamFactory stream = new ResourceAsStreamFactory( getClass(), "/opennlp/tools/formats/brown-cluster.txt"); BrownCluster brownCluster = new BrownCluster(stream.createInputStream()); generator = new BrownBigramFeatureGenerator(brownCluster); } @Test void createFeaturesTest() { String[] tokens = new String[] {"he", "went", "with", "you"}; List features = new ArrayList<>(); generator.createFeatures(features, tokens, 3, null); Assertions.assertEquals(2, features.size()); Assertions.assertTrue(features.contains("pbrowncluster,browncluster=0101,0010")); Assertions.assertTrue(features.contains("pbrowncluster,browncluster=01010,00101")); } @Test void createFeaturesSuccessiveTokensTest() { final String[] testSentence = new String[] {"he", "went", "with", "you", "in", "town"}; List features = new ArrayList<>(); generator.createFeatures(features, testSentence, 3, null); Assertions.assertEquals(3, features.size()); Assertions.assertTrue(features.contains("pbrowncluster,browncluster=0101,0010")); Assertions.assertTrue(features.contains("pbrowncluster,browncluster=01010,00101")); Assertions.assertTrue(features.contains("browncluster,nbrowncluster=0010,0000")); } @Test void noFeaturesTest() { final String[] testSentence = new String[] {"he", "went", "with", "you"}; List features = new ArrayList<>(); generator.createFeatures(features, testSentence, 0, null); Assertions.assertEquals(0, features.size()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_C0100644 0000000 0000000 00000000174 14523004075 032630 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/CachedFeatureGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/CachedFeatureGene0100644 0000000 0000000 00000010335 14523004075 034161 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; /** * Test for the {@link CachedFeatureGenerator} class. */ public class CachedFeatureGeneratorTest { private final AdaptiveFeatureGenerator[] identityGenerator = new AdaptiveFeatureGenerator[] { new IdentityFeatureGenerator()}; private String[] testSentence1; private String[] testSentence2; private List features; @BeforeEach void setUp() { testSentence1 = new String[] {"a1", "b1", "c1", "d1"}; testSentence2 = new String[] {"a2", "b2", "c2", "d2"}; features = new ArrayList<>(); } /** * Tests if cache works for one sentence and two different token indexes. */ @Test void testCachingOfSentence() { CachedFeatureGenerator generator = new CachedFeatureGenerator(identityGenerator); int testIndex = 0; // after this call features are cached for testIndex generator.createFeatures(features, testSentence1, testIndex, null); Assertions.assertEquals(1, generator.getNumberOfCacheMisses()); Assertions.assertEquals(0, generator.getNumberOfCacheHits()); Assertions.assertTrue(features.contains(testSentence1[testIndex])); features.clear(); // check if features are really cached final String expectedToken = testSentence1[testIndex]; testSentence1[testIndex] = null; generator.createFeatures(features, testSentence1, testIndex, null); Assertions.assertEquals(1, generator.getNumberOfCacheMisses()); Assertions.assertEquals(1, generator.getNumberOfCacheHits()); Assertions.assertTrue(features.contains(expectedToken)); Assertions.assertEquals(1, features.size()); features.clear(); // try caching with an other index int testIndex2 = testIndex + 1; generator.createFeatures(features, testSentence1, testIndex2, null); Assertions.assertEquals(2, generator.getNumberOfCacheMisses()); Assertions.assertEquals(1, generator.getNumberOfCacheHits()); Assertions.assertTrue(features.contains(testSentence1[testIndex2])); features.clear(); // now check if cache still contains feature for testIndex generator.createFeatures(features, testSentence1, testIndex, null); Assertions.assertTrue(features.contains(expectedToken)); } /** * Tests if the cache was cleared after the sentence changed. */ @Test void testCacheClearAfterSentenceChange() { CachedFeatureGenerator generator = new CachedFeatureGenerator(identityGenerator); int testIndex = 0; // use generator with sentence 1 generator.createFeatures(features, testSentence1, testIndex, null); features.clear(); // use another sentence but same index generator.createFeatures(features, testSentence2, testIndex, null); Assertions.assertEquals(2, generator.getNumberOfCacheMisses()); Assertions.assertEquals(0, generator.getNumberOfCacheHits()); Assertions.assertTrue(features.contains(testSentence2[testIndex])); Assertions.assertEquals(1, features.size()); features.clear(); // check if features are really cached final String expectedToken = testSentence2[testIndex]; testSentence2[testIndex] = null; generator.createFeatures(features, testSentence2, testIndex, null); Assertions.assertTrue(features.contains(expectedToken)); Assertions.assertEquals(1, features.size()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_C0100644 0000000 0000000 00000000204 14523004075 032622 xustar000000000 0000000 132 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/CharacterNgramFeatureGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/CharacterNgramFea0100644 0000000 0000000 00000003654 14523004075 034202 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class CharacterNgramFeatureGeneratorTest { private List features; private static final String[] TEST_SENTENCE = new String[] {"This", "is", "an", "example", "sentence"}; @BeforeEach void setUp() { features = new ArrayList<>(); } @Test void testDefault() { final int testTokenIndex = 3; AdaptiveFeatureGenerator generator = new CharacterNgramFeatureGenerator(); generator.createFeatures(features, TEST_SENTENCE, testTokenIndex, null); assertContainsNg(features, "ex", "exa", "exam", "examp", "xa", "xam", "xamp", "xampl", "am", "amp", "ampl", "ample", "mp", "mpl", "mple", "pl", "ple", "le"); } private static void assertContainsNg(List features, String... elements) { Assertions.assertEquals(elements.length, features.size()); for (String e : elements) { Assertions.assertTrue(features.contains("ng=" + e)); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_F0100644 0000000 0000000 00000000172 14523004075 032631 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/FeatureGeneratorUtilTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/FeatureGeneratorU0100644 0000000 0000000 00000006552 14523004075 034274 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class FeatureGeneratorUtilTest { @Test void test() { // digits Assertions.assertEquals("2d", FeatureGeneratorUtil.tokenFeature("12")); Assertions.assertEquals("4d", FeatureGeneratorUtil.tokenFeature("1234")); Assertions.assertEquals("an", FeatureGeneratorUtil.tokenFeature("abcd234")); Assertions.assertEquals("dd", FeatureGeneratorUtil.tokenFeature("1234-56")); Assertions.assertEquals("ds", FeatureGeneratorUtil.tokenFeature("4/6/2017")); Assertions.assertEquals("dc", FeatureGeneratorUtil.tokenFeature("1,234,567")); Assertions.assertEquals("dp", FeatureGeneratorUtil.tokenFeature("12.34567")); Assertions.assertEquals("num", FeatureGeneratorUtil.tokenFeature("123(456)7890")); // letters Assertions.assertEquals("lc", FeatureGeneratorUtil.tokenFeature("opennlp")); Assertions.assertEquals("sc", FeatureGeneratorUtil.tokenFeature("O")); Assertions.assertEquals("ac", FeatureGeneratorUtil.tokenFeature("OPENNLP")); Assertions.assertEquals("cp", FeatureGeneratorUtil.tokenFeature("A.")); Assertions.assertEquals("ic", FeatureGeneratorUtil.tokenFeature("Mike")); Assertions.assertEquals("other", FeatureGeneratorUtil.tokenFeature("somethingStupid")); // symbols Assertions.assertEquals("other", FeatureGeneratorUtil.tokenFeature(",")); Assertions.assertEquals("other", FeatureGeneratorUtil.tokenFeature(".")); Assertions.assertEquals("other", FeatureGeneratorUtil.tokenFeature("?")); Assertions.assertEquals("other", FeatureGeneratorUtil.tokenFeature("!")); Assertions.assertEquals("other", FeatureGeneratorUtil.tokenFeature("#")); Assertions.assertEquals("other", FeatureGeneratorUtil.tokenFeature("%")); Assertions.assertEquals("other", FeatureGeneratorUtil.tokenFeature("&")); } @Test void testJapanese() { // Hiragana Assertions.assertEquals("jah", FeatureGeneratorUtil.tokenFeature("ãã†ã„ãˆã°")); Assertions.assertEquals("jah", FeatureGeneratorUtil.tokenFeature("ãŠãƒ¼ã·ã‚“・ã〜ã™ãƒ»ããµã¨ã†ã‡ã‚")); Assertions.assertEquals("other", FeatureGeneratorUtil.tokenFeature("ã‚ã±ã£ã¡ãƒ»ããµã¨ã†ã‡ã‚財団")); // Katakana Assertions.assertEquals("jak", FeatureGeneratorUtil.tokenFeature("ジャパン")); Assertions.assertEquals("jak", FeatureGeneratorUtil.tokenFeature("オープン・ソ〜ス・ソフトウェア")); Assertions.assertEquals("other", FeatureGeneratorUtil.tokenFeature("アパッãƒãƒ»ã‚½ãƒ•トウェア財団")); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_G0100644 0000000 0000000 00000000166 14523004075 032635 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/GeneratorFactoryTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/GeneratorFactoryT0100644 0000000 0000000 00000025337 14523004075 034311 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.util.InvalidFormatException; import opennlp.tools.util.model.ArtifactSerializer; import opennlp.tools.util.model.DictionarySerializer; public class GeneratorFactoryTest { static class TestParametersFeatureGeneratorFactory extends GeneratorFactory.AbstractXmlFeatureGeneratorFactory { public TestParametersFeatureGeneratorFactory() { super(); } @Override public AdaptiveFeatureGenerator create() throws InvalidFormatException { return new TestParametersFeatureGenerator( getInt("intParam"), getFloat("floatParam"), getLong("longParam"), getDouble("doubleParam"), getBool("boolParam"), getStr("strParam")); } } record TestParametersFeatureGenerator(int ip, float fp, long lp, double dp, boolean bp, String sp) implements AdaptiveFeatureGenerator { @Override public void createFeatures(List features, String[] tokens, int index, String[] previousOutcomes) { } } @Test void testCreationWithTokenClassFeatureGenerator() throws Exception { InputStream generatorDescriptorIn = getClass().getResourceAsStream( "/opennlp/tools/util/featuregen/TestTokenClassFeatureGeneratorConfig.xml"); // If this fails the generator descriptor could not be found // at the expected location Assertions.assertNotNull(generatorDescriptorIn); AggregatedFeatureGenerator aggregatedGenerator = (AggregatedFeatureGenerator) GeneratorFactory.create(generatorDescriptorIn, null); Assertions.assertEquals(1, aggregatedGenerator.getGenerators().size()); Assertions.assertEquals(TokenClassFeatureGenerator.class.getName(), aggregatedGenerator.getGenerators().iterator().next().getClass().getName()); } @Test void testCreationWihtSimpleDescriptor() throws Exception { InputStream generatorDescriptorIn = getClass().getResourceAsStream( "/opennlp/tools/util/featuregen/TestFeatureGeneratorConfig.xml"); // If this fails the generator descriptor could not be found // at the expected location Assertions.assertNotNull(generatorDescriptorIn); Collection expectedGenerators = new ArrayList<>(); expectedGenerators.add(OutcomePriorFeatureGenerator.class.getName()); AggregatedFeatureGenerator aggregatedGenerator = (AggregatedFeatureGenerator) GeneratorFactory.create(generatorDescriptorIn, null); for (AdaptiveFeatureGenerator generator : aggregatedGenerator.getGenerators()) { expectedGenerators.remove(generator.getClass().getName()); // if of kind which requires parameters check that } // If this fails not all expected generators were found and // removed from the expected generators collection Assertions.assertEquals(0, expectedGenerators.size()); } /** * Tests the creation from a descriptor which contains an unkown element. * The creation should fail with an {@link InvalidFormatException} */ @Test void testCreationWithUnkownElement() { Assertions.assertThrows(IOException.class, () -> { try (InputStream descIn = getClass().getResourceAsStream( "/opennlp/tools/util/featuregen/FeatureGeneratorConfigWithUnkownElement.xml")) { GeneratorFactory.create(descIn, null); } }); } @Test void testDictionaryArtifactToSerializerMappingExtraction() throws IOException { InputStream descIn = getClass().getResourceAsStream( "/opennlp/tools/util/featuregen/TestDictionarySerializerMappingExtraction.xml"); Map> mapping = GeneratorFactory.extractArtifactSerializerMappings(descIn); Assertions.assertInstanceOf(DictionarySerializer.class, mapping.get("test.dictionary")); // TODO: if make the following effective, the test fails. // this is strange because DictionaryFeatureGeneratorFactory cast dictResource to Dictionary... //Assert.assertTrue(mapping.get("test.dictionary") instanceof // opennlp.tools.dictionary.Dictionary); } @Test void testParameters() throws Exception { InputStream generatorDescriptorIn = getClass().getResourceAsStream( "/opennlp/tools/util/featuregen/TestParametersConfig.xml"); // If this fails the generator descriptor could not be found // at the expected location Assertions.assertNotNull(generatorDescriptorIn); AdaptiveFeatureGenerator generator = GeneratorFactory.create(generatorDescriptorIn, null); Assertions.assertInstanceOf(TestParametersFeatureGenerator.class, generator); TestParametersFeatureGenerator featureGenerator = (TestParametersFeatureGenerator) generator; Assertions.assertEquals(123, featureGenerator.ip); Assertions.assertEquals(featureGenerator.fp, 0.1, 45); Assertions.assertEquals(67890, featureGenerator.lp); Assertions.assertEquals(featureGenerator.dp, 0.1, 123456.789); Assertions.assertTrue(featureGenerator.bp); Assertions.assertEquals("HELLO", featureGenerator.sp); } @Test void testNotAutomaticallyInsertAggregatedFeatureGenerator() throws Exception { InputStream generatorDescriptorIn = getClass().getResourceAsStream( "/opennlp/tools/util/featuregen/TestNotAutomaticallyInsertAggregatedFeatureGenerator.xml"); // If this fails the generator descriptor could not be found // at the expected location Assertions.assertNotNull(generatorDescriptorIn); AdaptiveFeatureGenerator featureGenerator = GeneratorFactory.create(generatorDescriptorIn, null); Assertions.assertInstanceOf(OutcomePriorFeatureGenerator.class, featureGenerator); } @Test void testAutomaticallyInsertAggregatedFeatureGenerator() throws Exception { InputStream generatorDescriptorIn = getClass().getResourceAsStream( "/opennlp/tools/util/featuregen/TestAutomaticallyInsertAggregatedFeatureGenerator.xml"); // If this fails the generator descriptor could not be found // at the expected location Assertions.assertNotNull(generatorDescriptorIn); AdaptiveFeatureGenerator featureGenerator = GeneratorFactory.create(generatorDescriptorIn, null); Assertions.assertInstanceOf(AggregatedFeatureGenerator.class, featureGenerator); AggregatedFeatureGenerator aggregatedFeatureGenerator = (AggregatedFeatureGenerator) featureGenerator; Assertions.assertEquals(3, aggregatedFeatureGenerator.getGenerators().size()); for (AdaptiveFeatureGenerator afg : aggregatedFeatureGenerator.getGenerators()) { Assertions.assertInstanceOf(OutcomePriorFeatureGenerator.class, afg); } } @Test void testNotAutomaticallyInsertAggregatedFeatureGeneratorChild() throws Exception { InputStream generatorDescriptorIn = getClass().getResourceAsStream( "/opennlp/tools/util/featuregen/TestNotAutomaticallyInsertAggregatedFeatureGeneratorCache.xml"); // If this fails the generator descriptor could not be found // at the expected location Assertions.assertNotNull(generatorDescriptorIn); AdaptiveFeatureGenerator featureGenerator = GeneratorFactory.create(generatorDescriptorIn, null); Assertions.assertInstanceOf(CachedFeatureGenerator.class, featureGenerator); CachedFeatureGenerator cachedFeatureGenerator = (CachedFeatureGenerator) featureGenerator; Assertions.assertInstanceOf(OutcomePriorFeatureGenerator.class, cachedFeatureGenerator.getCachedFeatureGenerator()); } @Test void testAutomaticallyInsertAggregatedFeatureGeneratorChildren() throws Exception { InputStream generatorDescriptorIn = getClass().getResourceAsStream( "/opennlp/tools/util/featuregen/TestAutomaticallyInsertAggregatedFeatureGeneratorCache.xml"); // If this fails the generator descriptor could not be found // at the expected location Assertions.assertNotNull(generatorDescriptorIn); AdaptiveFeatureGenerator featureGenerator = GeneratorFactory.create(generatorDescriptorIn, null); Assertions.assertInstanceOf(CachedFeatureGenerator.class, featureGenerator); CachedFeatureGenerator cachedFeatureGenerator = (CachedFeatureGenerator) featureGenerator; AdaptiveFeatureGenerator afg = cachedFeatureGenerator.getCachedFeatureGenerator(); Assertions.assertInstanceOf(AggregatedFeatureGenerator.class, afg); AggregatedFeatureGenerator aggregatedFeatureGenerator = (AggregatedFeatureGenerator) afg; Assertions.assertEquals(3, aggregatedFeatureGenerator.getGenerators().size()); for (AdaptiveFeatureGenerator afgen : aggregatedFeatureGenerator.getGenerators()) { Assertions.assertInstanceOf(OutcomePriorFeatureGenerator.class, afgen); } } @Test void testInsertCachedFeatureGenerator() throws Exception { InputStream generatorDescriptorIn = getClass().getResourceAsStream( "/opennlp/tools/util/featuregen/TestInsertCachedFeatureGenerator.xml"); // If this fails the generator descriptor could not be found // at the expected location Assertions.assertNotNull(generatorDescriptorIn); AdaptiveFeatureGenerator featureGenerator = GeneratorFactory.create(generatorDescriptorIn, null); Assertions.assertInstanceOf(CachedFeatureGenerator.class, featureGenerator); CachedFeatureGenerator cachedFeatureGenerator = (CachedFeatureGenerator) featureGenerator; Assertions.assertInstanceOf(AggregatedFeatureGenerator.class, cachedFeatureGenerator.getCachedFeatureGenerator()); AggregatedFeatureGenerator aggregatedFeatureGenerator = (AggregatedFeatureGenerator) cachedFeatureGenerator.getCachedFeatureGenerator(); Assertions.assertEquals(3, aggregatedFeatureGenerator.getGenerators().size()); for (AdaptiveFeatureGenerator afg : aggregatedFeatureGenerator.getGenerators()) { Assertions.assertInstanceOf(OutcomePriorFeatureGenerator.class, afg); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_I0100644 0000000 0000000 00000000172 14523004075 032634 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/IdentityFeatureGenerator.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/IdentityFeatureGe0100644 0000000 0000000 00000002111 14523004075 034251 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.List; public class IdentityFeatureGenerator implements AdaptiveFeatureGenerator { public void createFeatures(List features, String[] tokens, int index, String[] previousOutcomes) { features.add(tokens[index]); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_I0100644 0000000 0000000 00000000165 14523004075 032636 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/InSpanGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/InSpanGeneratorTe0100644 0000000 0000000 00000004322 14523004075 034226 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.namefind.TokenNameFinder; import opennlp.tools.util.Span; public class InSpanGeneratorTest { static class SimpleSpecificPersonFinder implements TokenNameFinder { private final String theName; public SimpleSpecificPersonFinder(String theName) { this.theName = theName; } @Override public Span[] find(String[] tokens) { for (int i = 0; i < tokens.length; i++) { if (theName.equals(tokens[i])) { return new Span[] {new Span(i, i + 1, "person")}; } } return new Span[] {}; } @Override public void clearAdaptiveData() { } } @Test void test() { List features = new ArrayList<>(); String[] testSentence = new String[] {"Every", "John", "has", "its", "day", "."}; AdaptiveFeatureGenerator generator = new InSpanGenerator("john", new SimpleSpecificPersonFinder("John")); generator.createFeatures(features, testSentence, 0, null); Assertions.assertEquals(0, features.size()); features.clear(); generator.createFeatures(features, testSentence, 1, null); Assertions.assertEquals(2, features.size()); Assertions.assertEquals("john:w=dic", features.get(0)); Assertions.assertEquals("john:w=dic=John", features.get(1)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_P0100644 0000000 0000000 00000000203 14523004075 032636 xustar000000000 0000000 131 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/POSTaggerNameFeatureGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/POSTaggerNameFeat0100644 0000000 0000000 00000003136 14523004075 034074 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import opennlp.tools.postag.POSTaggerMETest; import opennlp.tools.util.model.ModelType; public class POSTaggerNameFeatureGeneratorTest { @Test void testFeatureGeneration() throws IOException { POSTaggerNameFeatureGenerator fg = new POSTaggerNameFeatureGenerator( POSTaggerMETest.trainPOSModel(ModelType.MAXENT)); String[] tokens = {"Hi", "Mike", ",", "it", "'s", "Stefanie", "Schmidt", "."}; for (int i = 0; i < tokens.length; i++) { List feats = new ArrayList<>(); fg.createFeatures(feats, tokens, i, null); Assertions.assertTrue(feats.get(0).startsWith("pos=")); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_P0100644 0000000 0000000 00000000177 14523004075 032650 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/PosTaggerFeatureGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/PosTaggerFeatureG0100644 0000000 0000000 00000004466 14523004075 034225 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class PosTaggerFeatureGeneratorTest { private List features; private static final String[] TEST_SENTENCE = new String[] {"This", "is", "an", "example", "sentence"}; private static final String[] TEST_TAGS = new String[] {"DT", "VBZ", "DT", "NN", "NN"}; @BeforeEach void setUp() { features = new ArrayList<>(); } @Test void testBegin() { final int testTokenIndex = 0; AdaptiveFeatureGenerator generator = new PosTaggerFeatureGenerator(); generator.createFeatures(features, TEST_SENTENCE, testTokenIndex, TEST_TAGS); Assertions.assertEquals(0, features.size()); } @Test void testNext() { final int testTokenIndex = 1; AdaptiveFeatureGenerator generator = new PosTaggerFeatureGenerator(); generator.createFeatures(features, TEST_SENTENCE, testTokenIndex, TEST_TAGS); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("t=DT", features.get(0)); } @Test void testMiddle() { final int testTokenIndex = 3; AdaptiveFeatureGenerator generator = new PosTaggerFeatureGenerator(); generator.createFeatures(features, TEST_SENTENCE, testTokenIndex, TEST_TAGS); Assertions.assertEquals(2, features.size()); Assertions.assertEquals("t=DT", features.get(0)); Assertions.assertEquals("t2=VBZ,DT", features.get(1)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_P0100644 0000000 0000000 00000000174 14523004075 032645 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/PrefixFeatureGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/PrefixFeatureGene0100644 0000000 0000000 00000005426 14523004075 034254 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class PrefixFeatureGeneratorTest { private List features; @BeforeEach void setUp() { features = new ArrayList<>(); } @Test void lengthTest1() { String[] testSentence = new String[] {"This", "is", "an", "example", "sentence"}; int testTokenIndex = 0; int suffixLength = 2; AdaptiveFeatureGenerator generator = new PrefixFeatureGenerator(suffixLength); generator.createFeatures(features, testSentence, testTokenIndex, null); Assertions.assertEquals(2, features.size()); Assertions.assertEquals("pre=T", features.get(0)); Assertions.assertEquals("pre=Th", features.get(1)); } @Test void lengthTest2() { String[] testSentence = new String[] {"This", "is", "an", "example", "sentence"}; int testTokenIndex = 3; int suffixLength = 5; AdaptiveFeatureGenerator generator = new PrefixFeatureGenerator(suffixLength); generator.createFeatures(features, testSentence, testTokenIndex, null); Assertions.assertEquals(5, features.size()); Assertions.assertEquals("pre=e", features.get(0)); Assertions.assertEquals("pre=ex", features.get(1)); Assertions.assertEquals("pre=exa", features.get(2)); Assertions.assertEquals("pre=exam", features.get(3)); Assertions.assertEquals("pre=examp", features.get(4)); } @Test void lengthTest3() { String[] testSentence = new String[] {"This", "is", "an", "example", "sentence"}; int testTokenIndex = 1; int suffixLength = 5; AdaptiveFeatureGenerator generator = new PrefixFeatureGenerator(suffixLength); generator.createFeatures(features, testSentence, testTokenIndex, null); Assertions.assertEquals(2, features.size()); Assertions.assertEquals("pre=i", features.get(0)); Assertions.assertEquals("pre=is", features.get(1)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_P0100644 0000000 0000000 00000000201 14523004075 032634 xustar000000000 0000000 129 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/PreviousMapFeatureGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/PreviousMapFeatur0100644 0000000 0000000 00000004077 14523004075 034326 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * Test for the {@link PreviousMapFeatureGenerator} class. */ public class PreviousMapFeatureGeneratorTest { @Test void testFeatureGeneration() { AdaptiveFeatureGenerator fg = new PreviousMapFeatureGenerator(); String[] sentence = new String[] {"a", "b", "c"}; List features = new ArrayList<>(); // this should generate the pd=null feature fg.createFeatures(features, sentence, 0, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("pd=null", features.get(0)); features.clear(); // this should generate the pd=1 feature fg.updateAdaptiveData(sentence, new String[] {"1", "2", "3"}); fg.createFeatures(features, sentence, 0, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("pd=1", features.get(0)); features.clear(); // this should generate the pd=null feature again after // the adaptive data was cleared fg.clearAdaptiveData(); fg.createFeatures(features, sentence, 0, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("pd=null", features.get(0)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_P0100644 0000000 0000000 00000000204 14523004075 032637 xustar000000000 0000000 132 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/PreviousTwoMapFeatureGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/PreviousTwoMapFea0100644 0000000 0000000 00000004243 14523004075 034260 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class PreviousTwoMapFeatureGeneratorTest { @Test void testFeatureGeneration() { AdaptiveFeatureGenerator fg = new PreviousTwoMapFeatureGenerator(); String[] sentence = new String[] {"a", "b", "c"}; List features = new ArrayList<>(); // this should generate the no features fg.createFeatures(features, sentence, 0, null); Assertions.assertEquals(0, features.size()); // this should generate the pd=null feature fg.createFeatures(features, sentence, 1, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("ppd=null,null", features.get(0)); features.clear(); // this should generate the pd=1 feature fg.updateAdaptiveData(sentence, new String[] {"1", "2", "3"}); fg.createFeatures(features, sentence, 1, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("ppd=2,1", features.get(0)); features.clear(); // this should generate the pd=null feature again after // the adaptive data was cleared fg.clearAdaptiveData(); fg.createFeatures(features, sentence, 1, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("ppd=null,null", features.get(0)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_S0100644 0000000 0000000 00000000176 14523004075 032652 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/SentenceFeatureGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/SentenceFeatureGe0100644 0000000 0000000 00000010250 14523004075 034227 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class SentenceFeatureGeneratorTest { private List features; private static final String[] TEST_SENTENCE = new String[] {"This", "is", "an", "example", "sentence"}; private static final String[] TEST_SHORT = new String[] {"word"}; @BeforeEach void setUp() { features = new ArrayList<>(); } @Test void testTT() { AdaptiveFeatureGenerator generator = new SentenceFeatureGenerator(true, true); generator.createFeatures(features, TEST_SENTENCE, 2, null); Assertions.assertEquals(0, features.size()); generator.createFeatures(features, TEST_SENTENCE, 0, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("S=begin", features.get(0)); features.clear(); generator.createFeatures(features, TEST_SENTENCE, TEST_SENTENCE.length - 1, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("S=end", features.get(0)); features.clear(); generator.createFeatures(features, TEST_SHORT, 0, null); Assertions.assertEquals(2, features.size()); Assertions.assertEquals("S=begin", features.get(0)); Assertions.assertEquals("S=end", features.get(1)); } @Test void testTF() { AdaptiveFeatureGenerator generator = new SentenceFeatureGenerator(true, false); generator.createFeatures(features, TEST_SENTENCE, 2, null); Assertions.assertEquals(0, features.size()); generator.createFeatures(features, TEST_SENTENCE, 0, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("S=begin", features.get(0)); features.clear(); generator.createFeatures(features, TEST_SENTENCE, TEST_SENTENCE.length - 1, null); Assertions.assertEquals(0, features.size()); features.clear(); generator.createFeatures(features, TEST_SHORT, 0, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("S=begin", features.get(0)); } @Test void testFT() { AdaptiveFeatureGenerator generator = new SentenceFeatureGenerator(false, true); generator.createFeatures(features, TEST_SENTENCE, 2, null); Assertions.assertEquals(0, features.size()); generator.createFeatures(features, TEST_SENTENCE, 0, null); Assertions.assertEquals(0, features.size()); generator.createFeatures(features, TEST_SENTENCE, TEST_SENTENCE.length - 1, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("S=end", features.get(0)); features.clear(); generator.createFeatures(features, TEST_SHORT, 0, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("S=end", features.get(0)); } @Test void testFF() { AdaptiveFeatureGenerator generator = new SentenceFeatureGenerator(false, false); generator.createFeatures(features, TEST_SENTENCE, 2, null); Assertions.assertEquals(0, features.size()); generator.createFeatures(features, TEST_SENTENCE, 0, null); Assertions.assertEquals(0, features.size()); generator.createFeatures(features, TEST_SENTENCE, TEST_SENTENCE.length - 1, null); Assertions.assertEquals(0, features.size()); generator.createFeatures(features, TEST_SHORT, 0, null); Assertions.assertEquals(0, features.size()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_S0100644 0000000 0000000 00000000163 14523004075 032646 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/StringPatternTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/StringPatternTest0100644 0000000 0000000 00000015256 14523004075 034352 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class StringPatternTest { @Test void testIsAllLetters() { Assertions.assertTrue(StringPattern.recognize("test").isAllLetter()); Assertions.assertTrue(StringPattern.recognize("TEST").isAllLetter()); Assertions.assertTrue(StringPattern.recognize("TesT").isAllLetter()); Assertions.assertTrue(StringPattern.recognize("grün").isAllLetter()); Assertions.assertTrue(StringPattern.recognize("üäöæß").isAllLetter()); Assertions.assertTrue(StringPattern.recognize("ã‚ア亜Aï½").isAllLetter()); } @Test void testIsInitialCapitalLetter() { Assertions.assertTrue(StringPattern.recognize("Test").isInitialCapitalLetter()); Assertions.assertFalse(StringPattern.recognize("tEST").isInitialCapitalLetter()); Assertions.assertTrue(StringPattern.recognize("TesT").isInitialCapitalLetter()); Assertions.assertTrue(StringPattern.recognize("Üäöæß").isInitialCapitalLetter()); Assertions.assertFalse(StringPattern.recognize("ã„イ井").isInitialCapitalLetter()); Assertions.assertTrue(StringPattern.recognize("Iã„イ井").isInitialCapitalLetter()); Assertions.assertTrue(StringPattern.recognize("Iã„イ井").isInitialCapitalLetter()); } @Test void testIsAllCapitalLetter() { Assertions.assertTrue(StringPattern.recognize("TEST").isAllCapitalLetter()); Assertions.assertTrue(StringPattern.recognize("ÄÄÄÜÜÜÖÖÖÖ").isAllCapitalLetter()); Assertions.assertFalse(StringPattern.recognize("ÄÄÄÜÜÜÖÖä").isAllCapitalLetter()); Assertions.assertFalse(StringPattern.recognize("ÄÄÄÜÜdÜÖÖ").isAllCapitalLetter()); Assertions.assertTrue(StringPattern.recognize("ABC").isAllCapitalLetter()); Assertions.assertFalse(StringPattern.recognize("ã†ã‚¦å®‡").isAllCapitalLetter()); } @Test void testIsAllLowerCaseLetter() { Assertions.assertTrue(StringPattern.recognize("test").isAllLowerCaseLetter()); Assertions.assertTrue(StringPattern.recognize("öäü").isAllLowerCaseLetter()); Assertions.assertTrue(StringPattern.recognize("öäüßßß").isAllLowerCaseLetter()); Assertions.assertFalse(StringPattern.recognize("Test").isAllLowerCaseLetter()); Assertions.assertFalse(StringPattern.recognize("TEST").isAllLowerCaseLetter()); Assertions.assertFalse(StringPattern.recognize("testT").isAllLowerCaseLetter()); Assertions.assertFalse(StringPattern.recognize("tesÖt").isAllLowerCaseLetter()); Assertions.assertTrue(StringPattern.recognize("ï½ï½‚c").isAllLowerCaseLetter()); Assertions.assertFalse(StringPattern.recognize("ãˆã‚¨çµµ").isAllLowerCaseLetter()); } @Test void testIsAllDigit() { Assertions.assertTrue(StringPattern.recognize("123456").isAllDigit()); Assertions.assertFalse(StringPattern.recognize("123,56").isAllDigit()); Assertions.assertFalse(StringPattern.recognize("12356f").isAllDigit()); Assertions.assertTrue(StringPattern.recognize("123456").isAllDigit()); } @Test void testIsAllHiragana() { Assertions.assertTrue(StringPattern.recognize("ã‚ã±ã£ã¡ãƒ»ã‚‹ã—ーん").isAllHiragana()); Assertions.assertFalse(StringPattern.recognize("ã‚ã±ã£ã¡ãƒ»ããµã¨ã†ã‡ã‚財団").isAllHiragana()); Assertions.assertFalse(StringPattern.recognize("ã‚ã±ã£ã¡ãƒ»ã‚‹ã—ーんV1.ï¼").isAllHiragana()); } @Test void testIsAllKatakana() { Assertions.assertTrue(StringPattern.recognize("アパッãƒãƒ»ãƒ«ã‚·ãƒ¼ãƒ³").isAllKatakana()); Assertions.assertFalse(StringPattern.recognize("アパッãƒãƒ»ã‚½ãƒ•トウェア財団").isAllKatakana()); Assertions.assertFalse(StringPattern.recognize("アパッãƒãƒ»ãƒ«ã‚·ãƒ¼ãƒ³ï¼¶ï¼‘.ï¼").isAllKatakana()); } @Test void testDigits() { Assertions.assertEquals(6, StringPattern.recognize("123456").digits()); Assertions.assertEquals(3, StringPattern.recognize("123fff").digits()); Assertions.assertEquals(0, StringPattern.recognize("test").digits()); Assertions.assertEquals(3, StringPattern.recognize("123fff").digits()); } @Test void testContainsPeriod() { Assertions.assertTrue(StringPattern.recognize("test.").containsPeriod()); Assertions.assertTrue(StringPattern.recognize("23.5").containsPeriod()); Assertions.assertFalse(StringPattern.recognize("test,/-1").containsPeriod()); } @Test void testContainsComma() { Assertions.assertTrue(StringPattern.recognize("test,").containsComma()); Assertions.assertTrue(StringPattern.recognize("23,5").containsComma()); Assertions.assertFalse(StringPattern.recognize("test./-1").containsComma()); } @Test void testContainsSlash() { Assertions.assertTrue(StringPattern.recognize("test/").containsSlash()); Assertions.assertTrue(StringPattern.recognize("23/5").containsSlash()); Assertions.assertFalse(StringPattern.recognize("test.1-,").containsSlash()); } @Test void testContainsDigit() { Assertions.assertTrue(StringPattern.recognize("test1").containsDigit()); Assertions.assertTrue(StringPattern.recognize("23,5").containsDigit()); Assertions.assertFalse(StringPattern.recognize("test./-,").containsDigit()); Assertions.assertTrue(StringPattern.recognize("テスト1").containsDigit()); Assertions.assertFalse(StringPattern.recognize("テストTEST").containsDigit()); } @Test void testContainsHyphen() { Assertions.assertTrue(StringPattern.recognize("test--").containsHyphen()); Assertions.assertTrue(StringPattern.recognize("23-5").containsHyphen()); Assertions.assertFalse(StringPattern.recognize("test.1/,").containsHyphen()); } @Test void testContainsLetters() { Assertions.assertTrue(StringPattern.recognize("test--").containsLetters()); Assertions.assertTrue(StringPattern.recognize("23h5ßm").containsLetters()); Assertions.assertFalse(StringPattern.recognize("---.1/,").containsLetters()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_S0100644 0000000 0000000 00000000174 14523004075 032650 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/SuffixFeatureGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/SuffixFeatureGene0100644 0000000 0000000 00000005426 14523004075 034263 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class SuffixFeatureGeneratorTest { private List features; @BeforeEach void setUp() { features = new ArrayList<>(); } @Test void lengthTest1() { String[] testSentence = new String[] {"This", "is", "an", "example", "sentence"}; int testTokenIndex = 0; int suffixLength = 2; AdaptiveFeatureGenerator generator = new SuffixFeatureGenerator(suffixLength); generator.createFeatures(features, testSentence, testTokenIndex, null); Assertions.assertEquals(2, features.size()); Assertions.assertEquals("suf=s", features.get(0)); Assertions.assertEquals("suf=is", features.get(1)); } @Test void lengthTest2() { String[] testSentence = new String[] {"This", "is", "an", "example", "sentence"}; int testTokenIndex = 3; int suffixLength = 5; AdaptiveFeatureGenerator generator = new SuffixFeatureGenerator(suffixLength); generator.createFeatures(features, testSentence, testTokenIndex, null); Assertions.assertEquals(5, features.size()); Assertions.assertEquals("suf=e", features.get(0)); Assertions.assertEquals("suf=le", features.get(1)); Assertions.assertEquals("suf=ple", features.get(2)); Assertions.assertEquals("suf=mple", features.get(3)); Assertions.assertEquals("suf=ample", features.get(4)); } @Test void lengthTest3() { String[] testSentence = new String[] {"This", "is", "an", "example", "sentence"}; int testTokenIndex = 1; int suffixLength = 5; AdaptiveFeatureGenerator generator = new SuffixFeatureGenerator(suffixLength); generator.createFeatures(features, testSentence, testTokenIndex, null); Assertions.assertEquals(2, features.size()); Assertions.assertEquals("suf=s", features.get(0)); Assertions.assertEquals("suf=is", features.get(1)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_T0100644 0000000 0000000 00000000200 14523004075 032637 xustar000000000 0000000 128 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/TokenClassFeatureGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/TokenClassFeature0100644 0000000 0000000 00000003721 14523004075 034262 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class TokenClassFeatureGeneratorTest { private List features; private static final String[] TEST_SENTENCE = new String[] {"This", "is", "an", "Example", "sentence"}; @BeforeEach void setUp() { features = new ArrayList<>(); } @Test void testGenWAC() { final int testTokenIndex = 3; AdaptiveFeatureGenerator generator = new TokenClassFeatureGenerator(true); generator.createFeatures(features, TEST_SENTENCE, testTokenIndex, null); Assertions.assertEquals(2, features.size()); Assertions.assertEquals("wc=ic", features.get(0)); Assertions.assertEquals("w&c=example,ic", features.get(1)); } @Test void testNoWAC() { final int testTokenIndex = 3; AdaptiveFeatureGenerator generator = new TokenClassFeatureGenerator(false); generator.createFeatures(features, TEST_SENTENCE, testTokenIndex, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("wc=ic", features.get(0)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_T0100644 0000000 0000000 00000000173 14523004075 032650 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/TokenFeatureGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/TokenFeatureGener0100644 0000000 0000000 00000003602 14523004075 034253 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class TokenFeatureGeneratorTest { private List features; private static final String[] TEST_SENTENCE = new String[] {"This", "is", "an", "example", "sentence"}; @BeforeEach void setUp() { features = new ArrayList<>(); } @Test void test() { final int testTokenIndex = 0; AdaptiveFeatureGenerator generator = new TokenFeatureGenerator(false); generator.createFeatures(features, TEST_SENTENCE, testTokenIndex, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("w=This", features.get(0)); } @Test void testLowerCase() { final int testTokenIndex = 0; AdaptiveFeatureGenerator generator = new TokenFeatureGenerator(true); generator.createFeatures(features, TEST_SENTENCE, testTokenIndex, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("w=this", features.get(0)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_T0100644 0000000 0000000 00000000202 14523004075 032641 xustar000000000 0000000 130 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/TokenPatternFeatureGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/TokenPatternFeatu0100644 0000000 0000000 00000005316 14523004075 034305 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class TokenPatternFeatureGeneratorTest { private List features; @BeforeEach void setUp() { features = new ArrayList<>(); } @Test void testSingleToken() { String[] testSentence = new String[] {"This", "is", "an", "example", "sentence"}; final int testTokenIndex = 3; AdaptiveFeatureGenerator generator = new TokenPatternFeatureGenerator(); generator.createFeatures(features, testSentence, testTokenIndex, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("st=example", features.get(0)); } @Test void testSentence() { String[] testSentence = new String[] {"This is an example sentence"}; final int testTokenIndex = 0; AdaptiveFeatureGenerator generator = new TokenPatternFeatureGenerator(); generator.createFeatures(features, testSentence, testTokenIndex, null); Assertions.assertEquals(14, features.size()); Assertions.assertEquals("stn=5", features.get(0)); Assertions.assertEquals("pt2=iclc", features.get(1)); Assertions.assertEquals("pt3=iclclc", features.get(2)); Assertions.assertEquals("st=this", features.get(3)); Assertions.assertEquals("pt2=lclc", features.get(4)); Assertions.assertEquals("pt3=lclclc", features.get(5)); Assertions.assertEquals("st=is", features.get(6)); Assertions.assertEquals("pt2=lclc", features.get(7)); Assertions.assertEquals("pt3=lclclc", features.get(8)); Assertions.assertEquals("st=an", features.get(9)); Assertions.assertEquals("pt2=lclc", features.get(10)); Assertions.assertEquals("st=example", features.get(11)); Assertions.assertEquals("st=sentence", features.get(12)); Assertions.assertEquals("pta=iclclclclc", features.get(13)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_T0100644 0000000 0000000 00000000201 14523004075 032640 xustar000000000 0000000 129 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/TrigramNameFeatureGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/TrigramNameFeatur0100644 0000000 0000000 00000006543 14523004075 034262 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class TrigramNameFeatureGeneratorTest { private List features; private static final String[] TEST_SENTENCE = new String[] {"This", "is", "an", "example", "sentence"}; @BeforeEach void setUp() { features = new ArrayList<>(); } @Test void testBegin() { final int testTokenIndex = 0; AdaptiveFeatureGenerator generator = new TrigramNameFeatureGenerator(); generator.createFeatures(features, TEST_SENTENCE, testTokenIndex, null); Assertions.assertEquals(2, features.size()); Assertions.assertEquals("w,nw,nnw=This,is,an", features.get(0)); Assertions.assertEquals("wc,nwc,nnwc=ic,lc,lc", features.get(1)); } @Test void testNextOfBegin() { final int testTokenIndex = 1; AdaptiveFeatureGenerator generator = new TrigramNameFeatureGenerator(); generator.createFeatures(features, TEST_SENTENCE, testTokenIndex, null); Assertions.assertEquals(2, features.size()); Assertions.assertEquals("w,nw,nnw=is,an,example", features.get(0)); Assertions.assertEquals("wc,nwc,nnwc=lc,lc,lc", features.get(1)); } @Test void testMiddle() { final int testTokenIndex = 2; AdaptiveFeatureGenerator generator = new TrigramNameFeatureGenerator(); generator.createFeatures(features, TEST_SENTENCE, testTokenIndex, null); Assertions.assertEquals(4, features.size()); Assertions.assertEquals("ppw,pw,w=This,is,an", features.get(0)); Assertions.assertEquals("ppwc,pwc,wc=ic,lc,lc", features.get(1)); Assertions.assertEquals("w,nw,nnw=an,example,sentence", features.get(2)); Assertions.assertEquals("wc,nwc,nnwc=lc,lc,lc", features.get(3)); } @Test void testEnd() { final int testTokenIndex = 4; AdaptiveFeatureGenerator generator = new TrigramNameFeatureGenerator(); generator.createFeatures(features, TEST_SENTENCE, testTokenIndex, null); Assertions.assertEquals(2, features.size()); Assertions.assertEquals("ppw,pw,w=an,example,sentence", features.get(0)); Assertions.assertEquals("ppwc,pwc,wc=lc,lc,lc", features.get(1)); } @Test void testShort() { String[] shortSentence = new String[] {"I", "know", "it"}; final int testTokenIndex = 1; AdaptiveFeatureGenerator generator = new TrigramNameFeatureGenerator(); generator.createFeatures(features, shortSentence, testTokenIndex, null); Assertions.assertEquals(0, features.size()); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_featuregen_W0100644 0000000 0000000 00000000174 14523004075 032654 xustar000000000 0000000 124 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/WindowFeatureGeneratorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/featuregen/WindowFeatureGene0100644 0000000 0000000 00000007432 14523004075 034265 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.featuregen; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; /** * Test for the {@link WindowFeatureGenerator} class. */ public class WindowFeatureGeneratorTest { private final String[] testSentence = new String[] {"a", "b", "c", "d", "e", "f", "g", "h"}; private List features; @BeforeEach void setUp() { features = new ArrayList<>(); } /** * Tests if the {@link WindowFeatureGenerator} works as specified, with a previous * and next window size of zero. */ @Test void testWithoutWindow() { AdaptiveFeatureGenerator windowFeatureGenerator = new WindowFeatureGenerator( new IdentityFeatureGenerator(), 0, 0); int testTokenIndex = 2; windowFeatureGenerator.createFeatures(features, testSentence, testTokenIndex, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("c", features.get(0)); } @Test void testWindowSizeOne() { AdaptiveFeatureGenerator windowFeatureGenerator = new WindowFeatureGenerator( new IdentityFeatureGenerator(), 1, 1); int testTokenIndex = 2; windowFeatureGenerator.createFeatures(features, testSentence, testTokenIndex, null); Assertions.assertEquals(3, features.size()); Assertions.assertEquals("c", features.get(0)); Assertions.assertEquals("p1b", features.get(1)); Assertions.assertEquals("n1d", features.get(2)); } @Test void testWindowAtBeginOfSentence() { AdaptiveFeatureGenerator windowFeatureGenerator = new WindowFeatureGenerator( new IdentityFeatureGenerator(), 1, 0); int testTokenIndex = 0; windowFeatureGenerator.createFeatures(features, testSentence, testTokenIndex, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("a", features.get(0)); } @Test void testWindowAtEndOfSentence() { AdaptiveFeatureGenerator windowFeatureGenerator = new WindowFeatureGenerator( new IdentityFeatureGenerator(), 0, 1); int testTokenIndex = testSentence.length - 1; windowFeatureGenerator.createFeatures(features, testSentence, testTokenIndex, null); Assertions.assertEquals(1, features.size()); Assertions.assertEquals("h", features.get(0)); } /** * Tests for a window size of previous and next 2 if the features are correct. */ @Test void testForCorrectFeatures() { AdaptiveFeatureGenerator windowFeatureGenerator = new WindowFeatureGenerator( new IdentityFeatureGenerator(), 2, 2); int testTokenIndex = 3; windowFeatureGenerator.createFeatures(features, testSentence, testTokenIndex, null); Assertions.assertEquals(5, features.size()); Assertions.assertEquals("d", features.get(0)); Assertions.assertEquals("p1c", features.get(1)); Assertions.assertEquals("p2b", features.get(2)); Assertions.assertEquals("n1e", features.get(3)); Assertions.assertEquals("n2f", features.get(4)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_model_ByteAr0100644 0000000 0000000 00000000164 14523004075 032606 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/model/ByteArraySerializerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/model/ByteArraySerializerTes0100644 0000000 0000000 00000003036 14523004075 034262 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.model; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Arrays; import java.util.Random; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class ByteArraySerializerTest { @Test void testSerialization() throws IOException { byte[] b = new byte[1024]; new Random(23).nextBytes(b); ByteArraySerializer serializer = new ByteArraySerializer(); ByteArrayOutputStream bOut = new ByteArrayOutputStream(); serializer.serialize(Arrays.copyOf(b, b.length), bOut); Assertions.assertArrayEquals(b, bOut.toByteArray()); Assertions.assertArrayEquals(b, serializer.create(new ByteArrayInputStream(b))); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_normalizer_E0100644 0000000 0000000 00000000201 14523004075 032656 xustar000000000 0000000 129 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/normalizer/EmojiCharSequenceNormalizerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/normalizer/EmojiCharSequence0100644 0000000 0000000 00000002661 14523004075 034271 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.normalizer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class EmojiCharSequenceNormalizerTest { public EmojiCharSequenceNormalizer normalizer = EmojiCharSequenceNormalizer.getInstance(); @Test void normalizeEmoji() { String s = new StringBuilder() .append("Any funny text goes here ") .appendCodePoint(0x1F606) .appendCodePoint(0x1F606) .appendCodePoint(0x1F606) .append(" ") .appendCodePoint(0x1F61B) .toString(); Assertions.assertEquals( "Any funny text goes here ", normalizer.normalize(s)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_normalizer_N0100644 0000000 0000000 00000000202 14523004075 032670 xustar000000000 0000000 130 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/normalizer/NumberCharSequenceNormalizerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/normalizer/NumberCharSequenc0100644 0000000 0000000 00000002160 14523004075 034303 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.normalizer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class NumberCharSequenceNormalizerTest { @Test void normalize() { Assertions.assertEquals("absc , abcd", NumberCharSequenceNormalizer.getInstance().normalize("absc 123,0123 abcd")); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_normalizer_S0100644 0000000 0000000 00000000202 14523004075 032675 xustar000000000 0000000 130 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/normalizer/ShrinkCharSequenceNormalizerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/normalizer/ShrinkCharSequenc0100644 0000000 0000000 00000002705 14523004075 034316 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.normalizer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class ShrinkCharSequenceNormalizerTest { private final ShrinkCharSequenceNormalizer normalizer = ShrinkCharSequenceNormalizer.getInstance(); @Test void normalizeSpace() { Assertions.assertEquals( "a text extra space", normalizer.normalize("a text extra space")); } @Test void normalizeChar() { Assertions.assertEquals("Helloo", normalizer.normalize("Helllllloooooo")); Assertions.assertEquals("Hello", normalizer.normalize("Hello")); Assertions.assertEquals("HHello", normalizer.normalize("HHello")); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_normalizer_T0100644 0000000 0000000 00000000203 14523004075 032677 xustar000000000 0000000 131 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/normalizer/TwitterCharSequenceNormalizerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/normalizer/TwitterCharSequen0100644 0000000 0000000 00000004261 14523004075 034356 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.normalizer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class TwitterCharSequenceNormalizerTest { private final TwitterCharSequenceNormalizer normalizer = TwitterCharSequenceNormalizer.getInstance(); @Test void normalizeHashtag() { Assertions.assertEquals("asdf 2nnfdf", normalizer.normalize("asdf #hasdk23 2nnfdf")); } @Test void normalizeUser() { Assertions.assertEquals("asdf 2nnfdf", normalizer.normalize("asdf @hasdk23 2nnfdf")); } @Test void normalizeRT() { Assertions.assertEquals(" 2nnfdf", normalizer.normalize("RT RT RT 2nnfdf")); } @Test void normalizeLaugh() { Assertions.assertEquals("ahahah", normalizer.normalize("ahahahah")); Assertions.assertEquals("haha", normalizer.normalize("hahha")); Assertions.assertEquals("haha", normalizer.normalize("hahaa")); Assertions.assertEquals("ahaha", normalizer.normalize("ahahahahhahahhahahaaaa")); Assertions.assertEquals("jaja", normalizer.normalize("jajjajajaja")); } @Test void normalizeFace() { Assertions.assertEquals("hello hello", normalizer.normalize("hello :-) hello")); Assertions.assertEquals("hello hello", normalizer.normalize("hello ;) hello")); Assertions.assertEquals(" hello", normalizer.normalize(":) hello")); Assertions.assertEquals("hello ", normalizer.normalize("hello :P")); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_normalizer_U0100644 0000000 0000000 00000000177 14523004075 032712 xustar000000000 0000000 127 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/normalizer/UrlCharSequenceNormalizerTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/normalizer/UrlCharSequenceNo0100644 0000000 0000000 00000003607 14523004075 034266 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.normalizer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class UrlCharSequenceNormalizerTest { private final UrlCharSequenceNormalizer normalizer = UrlCharSequenceNormalizer.getInstance(); @Test void normalizeUrl() { Assertions.assertEquals( "asdf 2nnfdf", normalizer.normalize("asdf http://asdf.com/dfa/cxs 2nnfdf")); Assertions.assertEquals( "asdf 2nnfdf ", normalizer.normalize("asdf http://asdf.com/dfa/cx" + "s 2nnfdf http://asdf.com/dfa/cxs")); } @Test void normalizeEmail() { Assertions.assertEquals( "asdf 2nnfdf", normalizer.normalize("asdf asd.fdfa@hasdk23.com.br 2nnfdf")); Assertions.assertEquals( "asdf 2nnfdf ", normalizer.normalize("asdf asd.fdfa@hasdk23.com.br" + " 2nnfdf asd.fdfa@hasdk23.com.br")); Assertions.assertEquals( "asdf 2nnfdf", normalizer.normalize("asdf asd+fdfa@hasdk23.com.br 2nnfdf")); Assertions.assertEquals( "asdf _br 2nnfdf", normalizer.normalize("asdf asd.fdfa@hasdk23.com_br 2nnfdf")); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_wordvector_A0100644 0000000 0000000 00000000170 14523004075 032673 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/wordvector/AbstractWordVectorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/wordvector/AbstractWordVecto0100644 0000000 0000000 00000002260 14523004075 034346 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.wordvector; import java.io.InputStream; import opennlp.tools.formats.AbstractFormatTest; public class AbstractWordVectorTest { protected static final String FORMATS_BASE_DIR = "/opennlp/tools/util/wordvector/"; protected InputStream getResourceStream(String resource) { return AbstractFormatTest.class.getResourceAsStream(FORMATS_BASE_DIR + resource); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_wordvector_D0100644 0000000 0000000 00000000167 14523004075 032704 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/wordvector/DoubleArrayVectorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/wordvector/DoubleArrayVector0100644 0000000 0000000 00000005651 14523004075 034351 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.wordvector; import java.nio.DoubleBuffer; import java.nio.FloatBuffer; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class DoubleArrayVectorTest { private double[] doubleArray; @BeforeEach public void setup() { doubleArray = new double[]{Float.MIN_VALUE, -1, 0, 1, Float.MAX_VALUE}; } @AfterEach public void tearDown() { doubleArray = null; } @Test public void testGetDataType() { DoubleArrayVector faVector = new DoubleArrayVector(doubleArray); Assertions.assertEquals(WordVectorType.DOUBLE, faVector.getDataType()); } @Test public void testGetDimension() { DoubleArrayVector faVector = new DoubleArrayVector(doubleArray); Assertions.assertEquals(doubleArray.length, faVector.dimension()); } @Test public void testGetAsFloat() { DoubleArrayVector faVector = new DoubleArrayVector(doubleArray); for (int i = 0; i < faVector.dimension(); i++) { Assertions.assertEquals(doubleArray[i], faVector.getAsFloat(i)); } } @Test public void testGetAsDouble() { DoubleArrayVector faVector = new DoubleArrayVector(doubleArray); for (int i = 0; i < faVector.dimension(); i++) { Assertions.assertEquals(doubleArray[i], faVector.getAsDouble(i)); } } @Test public void testToFloatBuffer() { // reference final float[] floatArray = new float[]{Float.MIN_VALUE, -1, 0, 1, Float.MAX_VALUE}; FloatBuffer refBuffer = FloatBuffer.wrap(floatArray); DoubleArrayVector daVector = new DoubleArrayVector(doubleArray); FloatBuffer fBuffer = daVector.toFloatBuffer(); Assertions.assertNotNull(fBuffer); Assertions.assertEquals(0, refBuffer.compareTo(fBuffer)); } @Test public void testToDoubleBuffer() { // reference DoubleBuffer refBuffer = DoubleBuffer.wrap(doubleArray); DoubleArrayVector daVector = new DoubleArrayVector(this.doubleArray); DoubleBuffer dBuffer = daVector.toDoubleBuffer(); Assertions.assertNotNull(dBuffer); Assertions.assertEquals(0, refBuffer.compareTo(dBuffer)); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_wordvector_F0100644 0000000 0000000 00000000166 14523004075 032705 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/wordvector/FloatArrayVectorTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/wordvector/FloatArrayVectorT0100644 0000000 0000000 00000005613 14523004075 034326 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.wordvector; import java.nio.DoubleBuffer; import java.nio.FloatBuffer; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class FloatArrayVectorTest { private float[] floatArray; @BeforeEach public void setup() { floatArray = new float[]{Float.MIN_VALUE, -1, 0, 1, Float.MAX_VALUE}; } @AfterEach public void tearDown() { floatArray = null; } @Test public void testGetDataType() { FloatArrayVector faVector = new FloatArrayVector(floatArray); Assertions.assertEquals(WordVectorType.FLOAT, faVector.getDataType()); } @Test public void testGetDimension() { FloatArrayVector faVector = new FloatArrayVector(floatArray); Assertions.assertEquals(floatArray.length, faVector.dimension()); } @Test public void testGetAsFloat() { FloatArrayVector faVector = new FloatArrayVector(floatArray); for (int i = 0; i < faVector.dimension(); i++) { Assertions.assertEquals(floatArray[i], faVector.getAsFloat(i)); } } @Test public void testGetAsDouble() { FloatArrayVector faVector = new FloatArrayVector(floatArray); for (int i = 0; i < faVector.dimension(); i++) { Assertions.assertEquals(floatArray[i], faVector.getAsDouble(i)); } } @Test public void testToFloatBuffer() { // reference FloatBuffer refBuffer = FloatBuffer.wrap(floatArray); FloatArrayVector faVector = new FloatArrayVector(floatArray); FloatBuffer fBuffer = faVector.toFloatBuffer(); Assertions.assertNotNull(fBuffer); Assertions.assertEquals(0, refBuffer.compareTo(fBuffer)); } @Test public void testToDoubleBuffer() { // reference final double[] doubleArray = new double[]{Float.MIN_VALUE, -1, 0, 1, Float.MAX_VALUE}; DoubleBuffer refBuffer = DoubleBuffer.wrap(doubleArray); FloatArrayVector faVector = new FloatArrayVector(floatArray); DoubleBuffer dBuffer = faVector.toDoubleBuffer(); Assertions.assertNotNull(dBuffer); Assertions.assertEquals(0, refBuffer.compareTo(dBuffer)); } } apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/wordvector/GloveTest.java0100644 0000000 0000000 00000004502 14523004075 033603 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.wordvector; import java.io.IOException; import java.io.InputStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /* * Note: * Examples taken from the 'glove.6B.50d.txt' data set, * which is licensed under CC0 1.0 Universal (CC0 1.0) Public Domain Dedication. * (see: https://creativecommons.org/publicdomain/zero/1.0/) */ public class GloveTest extends AbstractWordVectorTest { @Test public void testParseValid() throws IOException { try (InputStream glove = getResourceStream("glove-example-short.txt")) { WordVectorTable wvTable = Glove.parse(glove); Assertions.assertNotNull(wvTable); Assertions.assertNotNull(wvTable.get("the")); Assertions.assertNotNull(wvTable.get("of")); Assertions.assertNotNull(wvTable.get("to")); Assertions.assertNotNull(wvTable.get("and")); // Tokens unknown in the short example should not be found (!) Assertions.assertNull(wvTable.get("OpenNLP")); } } @Test public void testParseEmpty() throws IOException { try (InputStream glove = getResourceStream("glove-example-empty.txt")) { WordVectorTable wvTable = Glove.parse(glove); Assertions.assertNotNull(wvTable); Assertions.assertEquals(-1, wvTable.dimension()); } } @Test public void testParseDetectsBrokenDimensions() throws IOException { try (InputStream glove = getResourceStream("glove-example-broken-dimensions.txt")) { Assertions.assertThrows(IOException.class, () -> Glove.parse(glove)); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_java_opennlp_tools_util_wordvector_M0100644 0000000 0000000 00000000170 14523004075 032707 xustar000000000 0000000 120 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/wordvector/MapWordVectorTableTest.java apache-opennlp-2.3.3-src/opennlp-tools/src/test/java/opennlp/tools/util/wordvector/MapWordVectorTabl0100644 0000000 0000000 00000006526 14523004075 034316 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.tools.util.wordvector; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class MapWordVectorTableTest extends AbstractWordVectorTest { private WordVectorTable wvTable; @BeforeEach public void setup() throws IOException { try (InputStream glove = getResourceStream("glove-example-short.txt")) { wvTable = Glove.parse(glove); Assertions.assertNotNull(wvTable); } } @Test public void testSize() { // see content of: 'glove-example-short.txt' Assertions.assertEquals(4f, wvTable.size()); } @Test public void testDimension() { // see content of: 'glove-example-short.txt' Assertions.assertEquals(50f, wvTable.dimension()); } @Test public void testTokens() { // reference Set refTokens = Set.of("the", "of", "to", "and"); Iterator tokens = wvTable.tokens(); Assertions.assertNotNull(tokens); String token; while (tokens.hasNext()) { token = tokens.next(); Assertions.assertTrue(refTokens.contains(token)); } } @Test public void testGetWordVectors() { // reference Set refTokens = Set.of("the", "of", "to", "and"); for (String token: refTokens) { WordVector wv = wvTable.get(token); Assertions.assertNotNull(wv); Assertions.assertEquals(50f, wv.dimension()); } } @Test public void testGetWordVectorEquality() { // the word vector of "the" token, see content of: 'glove-example-short.txt' float[] wordVectorOfThe = new float[] { 0.418f, 0.24968f, -0.41242f, 0.1217f, 0.34527f, -0.044457f, -0.49688f, -0.17862f, -0.00066023f, -0.6566f, 0.27843f, -0.14767f, -0.55677f, 0.14658f, -0.0095095f, 0.011658f, 0.10204f, -0.12792f, -0.8443f, -0.12181f, -0.016801f, -0.33279f, -0.1552f, -0.23131f, -0.19181f, -1.8823f, -0.76746f, 0.099051f, -0.42125f, -0.19526f, 4.0071f, -0.18594f, -0.52287f, -0.31681f, 0.00059213f, 0.0074449f, 0.17778f, -0.15897f, 0.012041f, -0.054223f, -0.29871f, -0.15749f, -0.34758f, -0.045637f, -0.44251f, 0.18785f, 0.0027849f, -0.18411f, -0.11514f, -0.78581f}; FloatArrayVector refWordVector = new FloatArrayVector(wordVectorOfThe); WordVector wv = wvTable.get("the"); Assertions.assertNotNull(wv); for (int i = 0; i < wordVectorOfThe.length; i++) { Assertions.assertEquals(refWordVector.getAsFloat(i), wv.getAsFloat(i)); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_data_opennlp_maxent_io_rvf0100644 0000000 0000000 00000000164 14523004075 032705 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/data/opennlp/maxent/io/rvfes-bug-data-broken.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/data/opennlp/maxent/io/rvfes-bug-data-brok0100644 0000000 0000000 00000000030 14523004075 034073 0ustar00rootroot0000000 0000000 C goodbye=1.0 C goodbye ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_data_opennlp_maxent_io_rvf0100644 0000000 0000000 00000000160 14523004075 032701 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/data/opennlp/maxent/io/rvfes-bug-data-ok.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/data/opennlp/maxent/io/rvfes-bug-data-ok.t0100644 0000000 0000000 00000000030 14523004075 034011 0ustar00rootroot0000000 0000000 C goodbye C goodbye=1.0 ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_data_opennlp_maxent_real-v0100644 0000000 0000000 00000000175 14523004075 032611 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/data/opennlp/maxent/real-valued-weights-training-data.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/data/opennlp/maxent/real-valued-weights-tr0100644 0000000 0000000 00000001332 14523004075 034224 0ustar00rootroot0000000 0000000 A feature1=4.0 feature3=10.0 feature4=2.0 A feature1=2.0 feature2=4.0 feature4=3.0 A feature2=5.0 feature3=12.0 feature4=4.0 A feature1=1.0 feature3=11.0 feature4=3.0 A feature1=4.0 feature2=5.0 feature4=2.0 A feature1=3.0 feature2=4.0 feature3=9.0 A feature2=3.0 feature3=11.0 feature4=2.0 A feature1=1.0 feature3=12.0 A feature2=6.0 feature3=12.0 feature4=3.0 A feature1=3.0 feature2=7.0 feature3=11.0 B feature5=4.0 feature2=1.0 feature4=10.0 B feature2=1.0 feature3=11.0 B feature5=3.0 feature4=12.0 B feature2=1.0 feature3=11.0 B feature5=4.0 feature4=10.0 B feature2=1.0 feature3=9.0 B feature5=2.0 feature4=11.0 B feature2=1.0 feature3=12.0 B feature5=4.0 feature4=12.0 B feature2=1.0 feature3=11.0 feature4=4.0 ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_data_opennlp_maxent_repeat0100644 0000000 0000000 00000000172 14523004075 032700 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/data/opennlp/maxent/repeat-weighting-training-data.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/data/opennlp/maxent/repeat-weighting-train0100644 0000000 0000000 00000005207 14523004075 034313 0ustar00rootroot0000000 0000000 A feature1 feature1 feature1 feature1 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature4 feature4 A feature1 feature1 feature2 feature2 feature2 feature2 feature4 feature4 feature4 A feature2 feature2 feature2 feature2 feature2 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature4 feature4 feature4 feature4 A feature1 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature4 feature4 feature4 A feature1 feature1 feature1 feature1 feature2 feature2 feature2 feature2 feature2 feature4 feature4 A feature1 feature1 feature1 feature2 feature2 feature2 feature2 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 A feature2 feature2 feature2 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature4 feature4 A feature1 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 A feature2 feature2 feature2 feature2 feature2 feature2 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature4 feature4 feature4 A feature1 feature1 feature1 feature2 feature2 feature2 feature2 feature2 feature2 feature2 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 B feature5 feature5 feature5 feature5 feature2 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 B feature2 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 B feature5 feature5 feature5 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 B feature2 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 B feature5 feature5 feature5 feature5 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 B feature2 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 B feature5 feature5 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 B feature2 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 B feature5 feature5 feature5 feature5 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 feature4 B feature2 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature3 feature4 feature4 feature4 feature4 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/data/ppa/NOTICE0100644 0000000 0000000 00000000423 14523004075 026522 0ustar00rootroot0000000 0000000 This folder contains Prepositional Phrase Attachment Dataset from Ratnaparkhi, Reynar, & Roukos, "A Maximum Entropy Model for Prepositional Phrase Attachment". ARPA HLT 1994. The data is licensed under the AL 2.0. Please cite the above paper when the data is redistributed.apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/data/ppa/bitstrings0100644 0000000 0000000 00010304217 14523004075 027742 0ustar00rootroot0000000 0000000 *** 00000000000000000000000000000000 BOUNDARY_WORD 01001111111000000000000111011110 , 00000000000000000000000000000010 the 00000000000000000000000000100100 . 00000000000000000000000000100010 of 00000000000000000000000000011010 to 00000000000000000000000101010010 a 00000000000000000000000000110100 * 00000000000000000000000000000000 and 00000000000000000000000010000010 in 00000000000000000000000001001010 's 00000000000000000000000110000010 that 00000000000000000000000101000010 for 00000000000000000000000100001010 T 00100000000000000000000000000000 $ 00000000000000000000000000001100 '' 00000000000000000000000000000000 is 00000000000000000000001000010010 The 00100000000000000000000000100100 0 00000000000000000000000000000000 `` 00000000000000000000000000000000 said 00000000000111111111110011000010 on 00000000000000000000010000001010 % 00000000000000000000111100001000 it 00000000000000000000000011110010 by 00000000000000000000000010001010 at 00000000000000000000000100101010 from 00000000000000000000001000101010 as 00000000000000000000000001101010 million 00000000000000000000000001010000 with 00000000000000000000001000001010 Mr. 00101111111011000011111000111000 was 00000000000000000000100000010010 be 00000000000100101111100010110010 are 00000000000000000000000100010010 its 00000000000000000000000001000100 n't 00000000000000000000000101110010 has 00000000000000000000010000010010 an 00000000000000000000000001010100 have 00000000000000000000001100010010 will 00000000000000000000001110010010 he 00000000000000000000001111110010 or 00000000000000000000001010000010 company 00000000000111101111111000000101 which 00000000000111111111111001110010 would 00000000000000000000000110010010 year 00000000000111111111111101100010 about 00000000000000000000000010101010 market 00000000000000000000000001011001 -- 00000000000010110100000101001000 were 00000000000000000000010100010010 says 00000000000111111111111111000010 they 00000000000000000000010111110010 this 00000000000000000000000010010100 more 00000000000000000000000111000000 had 00000000000000000000000000010010 In 00100000000000000000000001001010 But 00100000000111111111111001000010 billion 00000000000000000001000001010000 their 00000000000000000000000110000100 up 00000000000000000000001100110010 but 00000000000111111111111001000010 than 00000000000000000000001110000010 his 00000000000000000000000000000100 U.S. 01000000000000000000000000000000 been 00000000000000101011100001110010 who 00000000000000000000101001110010 also 00000000000000000010001001110010 share 00000000000111111111111000011111 new 00000000000111101111100011110000 other 00000000000000000000010011000000 one 00000000000000000000000000010100 : 00000000000000000000100000101010 stock 00000000000111111111101101010000 not 00000000000000000001000001110010 some 00000000000000000000001011000000 1 00000000000000000000000000000000 New 00100000000111101111100011110000 I 00100000000000000000100111110010 Corp. 00100000000000000000000000000000 ; 00000000000000000001000000101010 -RRB- 01000000000000000000000000000000 shares 00000000000000000000000001001011 It 00100000000000000000000011110010 years 00000000000000000000000000111011 trading 00000000000000000000000001011101 -LRB- 01000000000000000000000000000000 could 00000000000000000000100110010010 Inc. 00100000000000000000000000000000 two 00000000000111101011101001010000 all 00000000000000000000111011000000 & 00001111111000000000000011001000 last 00000000000000000000000001100010 because 00000000000000000000001001000010 out 00000000000000000000011100110010 when 00000000000000000000101001000010 do 00000000000111111111011100010010 York 00100000000000000000011110000010 after 00000000000000000000000000101010 president 00001111110110110111111000001101 can 00000000000000000000110110010010 sales 00000000000111101110111000000111 only 00000000000000000011000001110010 A 00100000000000000000000000110100 Co. 00100000000000000000000000000000 into 00000000000000000100000000001010 *pseudo-attach* 00000000000000000000000000000000 such 00000000000000000000100011000000 He 00100000000000000000001111110010 first 00000000000000000000000111010000 over 00000000000000000101000000001010 business 00000000000100100000100010100001 quarter 00000000000111111100110010010111 if 00000000000000101010101001000010 government 00000000000011100010101000100101 any 00000000000000000000010100010100 most 00000000000111101011101011000000 prices 00000000000000000000000110000111 companies 00000000000110100100100011110011 may 00000000000000000000000010010010 cents 00000000000000000000000010001011 down 00000000000000000001001100110010 ' 00000000000000000000000000110010 we 00000000000000000000000111110010 time 00000000000111111111110100010111 many 00000000000001001001001011000000 say 00000000000111111101100110110010 no 00000000000000000000001100010100 there 00000000000111101111111101000010 much 00000000000111101011110001110010 price 00000000000000000000000111000111 months 00000000000000000000000001111011 now 00000000000000001000001001110010 yesterday 00000000000111101110101001100010 them 00000000000000000001010001110010 people 00000000000000000000000100110011 week 00000000000111111111110101100010 investors 00000000000111100110001000110011 rose 00000000000000000000000100110010 group 00000000000110100100101101110101 bonds 00000000000111101101100010000111 so 00000000000000000010000001110010 stocks 00000000000111101110111011100011 earnings 00000000000011001010100000000111 interest 00000000000000000000000110100111 3 00000000000000000000000000000000 did 00000000000111101110111100010010 American 00100000000000000000010110101000 major 00000000000000000000001000010000 even 00000000000000000101000001110010 what 00000000000000000001101101000010 We 00100000000000000000000111110010 you 00000000000000000001000111110010 next 00000000000000000000010001100010 make 00000000000111111011101110110010 expected 00000000000111111111011000110010 through 00000000000000010001000000001010 executive 00001111111000000000000101110000 three 00000000000111101011111001010000 chief 00001111111111111111111001110000 industry 00000000000111101110100100100101 Friday 00100000000111101111101001100010 just 00000000000000001100001001110010 net 00000000000000000000100101010000 10 00000000000000000000000000000000 under 00000000000000000000100000001010 earlier 00000000000000000000001001100010 before 00000000000000000100000000101010 off 00000000000000000000101100110010 And 00100000000000000000000010000010 made 00000000000011011100010000110010 officials 00000000000000000000000100010101 rate 00000000000000001110101011000111 money 00000000000111101110010100100111 unit 00000000000111101111111001110101 federal 00000000000111111111101100110000 program 00000000000111101111100011100111 those 00000000000000000010000011000000 while 00000000000000000001101001000010 month 00000000000111111111100101100010 30 00000000000000000000000000000000 like 00000000000000000010000000001010 still 00000000000000010000001001110010 sell 00000000000111111110001110110010 firm 00000000000110101111111011110101 does 00000000000011101100111100010010 between 00000000000000000011000000001010 buy 00000000000111111100001110110010 against 00000000000000000000000000001010 days 00000000000000000000000000011011 investment 00000000000001000000100010110000 Exchange 00100000000000000000000100111101 profit 00000000000111101111110000000111 financial 00000000000000000000100000110000 since 00000000000000000010000000101010 plan 00000000000111111111111011100111 ago 00000000000111101101001001100010 That 00100000000000000000000101000010 get 00000000000111111010101110110010 rates 00000000000111111111101101000011 chairman 00000000000111111111111000101101 For 00100000000000000000000100001010 own 00000000000000000011110010101000 markets 00000000000000000000000011100011 recent 00000000000000000000101100010000 fell 00000000000000000010000100110010 They 00100000000000000000010111110010 big 00000000000000000000101000010000 back 00000000000000000000111100110010 Japanese 00100000000000000001100100110000 state 00000000000111101111111010100101 income 00000000000111111111010101000111 analysts 00000000000000000000000010010011 issue 00000000000111101111101000110111 should 00000000000000000001010110010010 well 00000000000111101110110001110010 offer 00000000000111111111110111100111 funds 00000000000110100000000110011001 higher 00000000000000000000011111000000 bank 00000000000100101110000001100101 these 00000000000000000000000011000000 including 00000000000011101111011010000010 securities 00000000000111111011110010110000 part 00000000000111111111111101101111 debt 00000000000000000000000010110001 products 00000000000000000000000011001001 being 00000000000000000011001001110010 tax 00000000000000000000000001110001 Japan 00100000000111111111111101101000 House 00100000000000000000100110100101 take 00000000000111111100101110110010 15 00000000000000000000000000000000 ? 00000000000000011000000000001010 1988 00000000000000000000000000000000 she 00000000000000000000011111110010 8 00000000000000000000000000000000 lower 00000000000000000001011111000000 This 00100000000000000000000010010100 increase 00000000000111111111110100110111 reported 00000000000111110010000111000010 If 00100000000000101010101001000010 during 00000000000000001101000000001010 banks 00000000000110101110000001110011 her 00000000000000000000001100000100 past 00000000000000000001010001100010 sale 00000000000111111111111001001111 work 00000000000111111111100010110111 very 00000000000000000100000001110010 operations 00000000000111101111100000001001 both 00000000000000001011011011000000 sold 00000000000001000000010000110010 less 00000000000000000000100111000000 Bank 00100000000100101110000001100101 another 00000000000000000000000100010100 vice 00001111110001001000000001110000 way 00000000000111111111111100010111 closed 00000000000000000000110100110010 bid 00000000000111111111111111100111 plans 00000000000111111110101000110010 As 00100000000000000000000001101010 cash 00000000000011101111110110110001 third 00000000000000000011101011010000 several 00000000000001000011000011000000 pay 00000000000111111101001110110010 index 00000000000000000000011110000111 trade 00000000000001000000000000010001 where 00000000000000000100101001000010 loss 00000000000111101111111101000111 1987 00000000000000000000000000000000 Bush 00101111111100101001000110001000 growth 00000000000111100000001010100111 5 00000000000000000000000000000000 end 00000000000111111111110100001111 2 00000000000000000000000000000000 each 00000000000000000000100100010100 National 00100000000001000000011100110000 -NL- 01000000000000000000000000000000 early 00000000000000000011010100110010 day 00000000000111111111111000010111 dollar 00000000000111111111111101000101 issues 00000000000110100000001011100011 20 00000000000000000000000000000000 At 00100000000000000000000100101010 common 00000000000000000000110101010000 economic 00000000000000000011000000110000 few 00000000000111111111110001010000 yield 00000000000111111110110110110010 good 00000000000000000000001010010000 futures 00000000000111111110011110110000 might 00000000000000000000010110010010 high 00000000000000000001011100010000 traders 00000000000000000000000001010011 used 00000000000011010000110000110010 average 00000000000100000011000101010000 report 00000000000111101111110000110111 're 00000000000000000011111110000010 50 00000000000000000000000000000000 bill 00000000000111101110110011100111 then 00000000000000101101000001110010 Stock 00100000000111111111101101010000 close 00000000000111111010110110110010 five 00000000000111111110111001010000 how 00000000000000000000001101000010 spokesman 00000000000000000000001010010101 Congress 00100000000111101111001101101000 costs 00000000000111101111101000000011 our 00000000000000000000000010000100 Treasury 00100000000011001011000110110000 added 00000000000111101100010111000010 use 00000000000111110111110110110010 concern 00000000000100000000100111110101 due 00000000000000000000010100110010 too 00000000000000000110000001110010 officer 00001111111111111111111110011101 1989 00000000000000000000000000000000 him 00000000000000000101010001110010 contract 00000000000111000001000000011001 among 00000000000000000001100000001010 Oct. 00100000000000000000000000000000 number 00000000000111111111111010111111 current 00000000000000000001000011010000 already 00000000000000011000001001110010 law 00000000000001000000000010011001 least 00000000000111101110111110000010 yen 00000000000000000000010000001011 agreement 00000000000111101111111000100111 director 00000000000111111111111000110101 revenue 00000000000111101110101000000111 Federal 00100000000111111111101100110000 far 00000000000111111101110001110010 based 00000000000111111110100000110010 think 00000000000111111111100110110010 British 00100000000000000000100100110000 computer 00000000000000000001011010110000 There 00100000000111101111111101000010 foreign 00000000000000000010010000110000 same 00000000000000000000100011010000 7 00000000000000000000000000000000 agreed 00000000000111111111101000110010 points 00000000000000000000000001011011 loans 00000000000111101111101111100011 ended 00000000000000000010010100110010 late 00000000000000000001010100110010 going 00000000000111101110011000110010 case 00000000000111111111100001100111 Some 00100000000000000000001011000000 public 00000000000000000000110000110000 according 00000000000111111111111000110010 assets 00000000000111111111110111100011 September 00100000000111001111111001100010 Street 00100000000000000000100010101000 stake 00000000000111111111111110100111 San 00101111111011111100001101110000 value 00000000000111111111110010001111 period 00000000000111101111101001000111 selling 00000000000111000001110001000000 board 00000000000011000001000101010101 real 00000000000010101111111000110000 Dow 00101111111111111111010110110000 100 00000000000000000000000000000000 Wall 00100000000111111111011110101000 small 00000000000000001001010000010000 operating 00000000000000000000000101010000 Board 00100000000011000001000101010101 called 00000000000011010101010000110010 International 00100000000000000001010010110000 until 00000000000000000110000000101010 problems 00000000000111101110111000100011 analyst 00000000000111101111111100110101 point 00000000000111101110010011011011 court 00000000000000000000000111010101 One 00100000000000000000000000010100 world 00000000000111010100111011000101 move 00000000000111111111111000110111 system 00000000000111101111000011100111 exchange 00000000000000000000000100111101 economy 00000000000111111111111001000101 1990 00000000000000000000000000000000 cut 00000000000111010010010110110010 put 00000000000111111010010110110010 results 00000000000111101111100000100011 see 00000000000111111110100110110010 little 00000000000000000000110000010000 want 00000000000111111111000110110010 management 00000000000000000000000111100001 UAL 01000000000000000000000000000000 oil 00000000000000000001001110110000 around 00000000000000100001000000001010 former 00000000000000000000101001110000 help 00000000000000000001110110110010 compared 00000000000111111111100000110010 capital 00000000000000000000000000110001 today 00000000000000001100010001110010 California 00100000000111111101110001101000 maker 00000000000111101111110001110101 however 00000000000111111111110011101000 firms 00000000000110000100010011110011 agency 00000000000000001000010000100101 Securities 00100000000111111011110010110000 office 00000000000111101101101010000001 whether 00000000000000000001001101000010 long 00000000000000000000110001110010 Group 00100000000110100100101101110101 offering 00000000000111101111110001110111 John 00101111111000000000000110011000 six 00000000000111111111111001010000 West 00100000000111110000101110101000 production 00000000000000000000000100000111 Jones 00101111111000000000100101001000 third-quarter 00000000000000000000000000000000 news 00000000000111110111000011000001 cost 00000000000111111111111111110111 second 00000000000000000000001011010000 go 00000000000111101011010110110010 Monday 00100000000111110111101001100010 First 00100000000000000000000111010000 buying 00000000000111101101110001000000 set 00000000000111101010010110110010 strong 00000000000000000001100000010000 bond 00000000000000000000111110110000 likely 00000000000111111101011000110010 annual 00000000000000000001000101010000 increased 00000000000000000000011001000000 continue 00000000000111111111010110110010 country 00000000000111111111101111000101 11 00000000000000000000000000000000 losses 00000000000111101111100000000011 recently 00000000000000001001001001110010 declined 00000000000000000101101000110010 President 00101111110110110111111000001101 four 00000000000111101111011001010000 insurance 00000000000000000000010010110000 without 00000000000000111000000000001010 total 00000000000000000001111100010000 half 00000000000111111111111011101111 general 00000000000111100001001000101000 25 00000000000000000000000000000000 further 00000000000000000000101111000000 large 00000000000000000001010000010000 August 00100000000111101110111001100010 drop 00000000000111111111001100110111 Chicago 00100000000111111110100001101000 When 00100000000000000000101001000010 takeover 00000000000000000010001100010000 expects 00000000000111111100101000110010 decline 00000000000111111111011100110111 senior 00000000000110100111101001110000 result 00000000000111111111111011111111 notes 00000000000111111111111010000111 held 00000000000000001000010000110010 political 00000000000000000000000000110000 # 00000000000000000000000000000000 policy 00000000000110001000000011111001 wo 00000000000000101011111100010010 right 00000000000111100100111000110010 though 00000000000111111011101001000010 corporate 00000000000000000000010000110000 must 00000000000000000010010110010010 Department 00100000000000000000001110010101 weeks 00000000000000000000000101111011 announced 00000000000000000001000111000010 become 00000000000111101100010110110010 Soviet 00100000000000001000110100110000 largest 00000000000000000000110011010000 administration 00000000000111110111111100100101 Nov. 00100000000000000000000000000000 Big 00100000000000000000101000010000 Senate 00100000000000000010101110100101 plant 00000000000111101111111010001001 London 00100000000111101111011001101000 Inc 00100000000000000000000000000000 Ms. 00101111111011000011111010111000 come 00000000000111110011010110110010 making 00000000000111111111111101000000 gain 00000000000111111111101101000111 here 00000000000000010100010001110010 support 00000000000111111111010010110111 home 00000000000000000000010110100001 junk 00000000000000010000000110110000 fund 00000000000110000100001110011001 volume 00000000000111101100001110000111 official 00000000000000000000000000010101 12 00000000000000000000000000000000 Robert 00101111111000001000000110011000 certain 00000000000000000001000011000000 level 00000000000111101100111001000111 services 00000000000011101110011101001001 change 00000000000111111110111000110111 9 00000000000000000000000000000000 On 00100000000000000000010000001010 problem 00000000000111111111001101100111 executives 00000000000000000000100010110011 began 00000000000000000010001000110010 give 00000000000111110011101110110010 top 00000000000000000001011000010000 demand 00000000000111101110100100111001 Francisco 00101111111100000011100000011101 service 00000000000000000000000101111001 fiscal 00000000000000000000110001100010 latest 00000000000000000010000011010000 credit 00000000000000000000001100110001 comment 00000000000111111100110110110010 deal 00000000000111111110101010110111 old 00000000000111111111001001100010 control 00000000000000100010110000101111 Texas 00100000000111101111010001101000 paid 00000000000011000000010000110010 took 00000000000000001011000000010010 -RCB- 01000000000000000000000000000000 Washington 00100000000111111111111001101000 orders 00000000000000000000000100011001 businesses 00000000000111100110010001100011 purchase 00000000000111101111110101110111 40 00000000000000000000000000000000 research 00000000000000000000000101100001 priced 00000000000111110111110100110010 better 00000000000000000001001111000000 13 00000000000000000000000000000000 show 00000000000111101011110110110010 power 00000000000000000000001001111001 -LCB- 01000000000000000000000000000000 product 00000000000000001010011000100001 example 00000000000111111111111111101000 addition 00000000000111111111111011010111 proposed 00000000000000000001001001000000 spending 00000000000000000000000000111001 dropped 00000000000000000011000100110010 nine 00000000000111111101111001010000 employees 00000000000000000010000000110011 nation 00000000000111111111111111000101 possible 00000000000000000000111000010000 line 00000000000111101110000000100111 future 00000000000001001101111000010000 meeting 00000000000111111111110001000111 nearly 00000000000000000111000001110010 workers 00000000000000000000000000110011 record 00000000000111101111111100010000 need 00000000000111111010000110110010 South 00100000000010000010000110101000 later 00000000000000000010001001100010 October 00100000000111101101111001100010 my 00000000000000000000000100000100 4 00000000000000000000000000000000 rise 00000000000111111111111100110111 members 00000000000000000100001010110011 know 00000000000111111011100110110010 amount 00000000000111111111111010001111 proposal 00000000000111111111011011100111 General 00100000000111100001001000101000 Warner 00100000000101100101110000001000 came 00000000000000000100001000110010 named 00000000000011001010010000110010 programs 00000000000111101100010100100011 Fed 00100000000111101111110000100101 buy-out 00000000000000000000000000000000 almost 00000000000000001111000001110010 trying 00000000000111111110011000110010 national 00000000000001000000011100110000 estate 00000000000100010000001100011101 While 00100000000000000001101001000010 return 00000000000111111111100101010111 include 00000000000000000001101110110010 expect 00000000000111111101000110110010 changes 00000000000111101111111000100011 gains 00000000000111111110100000000011 investor 00000000000001000010000000110101 Union 00100000000111100011001100100101 others 00000000000000000110110010110011 composite 00000000000111111111111101110000 estimated 00000000000111100011100111000010 keep 00000000000111111101111110110010 Ford 00100000000111101101011000101000 life 00000000000111101111101110100001 us 00000000000000010001010001110010 received 00000000000011001001010000110010 filed 00000000000001000110010000110010 lot 00000000000111111111111001111111 America 00100000000111101111000101101000 offered 00000000000110100000010000110010 James 00101111111000000000000100011000 enough 00000000000000000110010001110010 transaction 00000000000111111111110011001111 often 00000000000000100000001001110010 told 00000000000111001101010000110010 position 00000000000111111101101110100111 order 00000000000111111111011101010111 yet 00000000000111110110010001110010 Europe 00100000000111111111011101101000 charge 00000000000111101110101101000111 customers 00000000000111101010110000110011 currently 00000000000000111000001001110010 Ltd. 00100000000000000000000000000000 decision 00000000000111111111101011100111 Tokyo 00100000000000000101011001101000 June 00100000000000000000011001100010 never 00000000000000000100001001110010 ca 00000000000111111111111100010010 again 00000000000000000100010001110010 fall 00000000000111111111011000110111 times 00000000000000000000000010011011 July 00100000000000001000011001100010 acquisition 00000000000111101111110001001111 United 00100000000111111101110110101000 whose 00000000000000000000011010000010 European 00100000000000000001000100110000 Capital 00100000000000000000000000110001 holding 00000000000000010000000011100101 outstanding 00000000000111111111111000011101 able 00000000000011010000011000110010 dollars 00000000000000000000101000001011 within 00000000000000011101000000001010 Association 00100000000110101011110001010101 Tuesday 00100000000111100111101001100010 500 00000000000000000000000000000000 Co 00101111111111111110110001001000 previous 00000000000000000000000011010000 area 00000000000111101110011001100111 provide 00000000000111110111101110110010 paper 00000000000110100100111010110000 damage 00000000000111101111001100100111 East 00100000000010000000001110101000 financing 00000000000000000000001000111001 loan 00000000000000000000001011100101 run 00000000000111101110010110110010 lost 00000000000000000100010000110010 building 00000000000111010010110001000000 commercial 00000000000001000011010000110000 managers 00000000000000000001100010110011 away 00000000000000000001111100110010 important 00000000000000000000001110010000 manager 00000000000000010010101000110101 things 00000000000111101111100110100011 got 00000000000011111011000000010010 China 00100000000111110111111101101000 division 00000000000111101110011001110101 information 00000000000110001011100010111001 Sept. 00100000000000000000000000000000 6 00000000000000000000000000000000 earthquake 00000000000000101111111001100111 local 00000000000000100100010000110000 OF 01000000000000000000000000011010 every 00000000000000000001000100010100 best 00000000000000000001010011010000 low 00000000000011000011011100010000 makes 00000000000100000001000000010010 suit 00000000000111101000100001100111 additional 00000000000000000000100100010000 've 00000000000100000101111110000010 private 00000000000000000100010000110000 contracts 00000000000000000001000100011001 found 00000000000111000001110111000010 believe 00000000000111101111100110110010 So 00100000000000000010000001110010 continued 00000000000000001000111000110010 head 00000000000111111111110011110111 31 00000000000000000000000000000000 makers 00000000000111100111100111110011 action 00000000000111101110110001100111 inflation 00000000000111101001011100000111 After 00100000000000000000000000101010 following 00000000000000000110100000001010 place 00000000000111101111110101010111 rights 00000000000100000010000100100111 led 00000000000001011011010000110010 Corp 00100000000000000000000000000000 terms 00000000000111111111101100101111 below 00000000000000001001000000001010 once 00000000000000001000011011000000 your 00000000000000000000010100000100 What 00100000000000000001101101000010 Chairman 00100000000111111111111000101101 White 00100000000111111111011010101000 marketing 00000000000000000000100001100001 To 00100000000000000000000101010010 drug 00000000000000001010111010110000 Many 00100000000001001001001011000000 subsidiary 00000000000111101101111001110101 auto 00000000000000000000001110110000 charges 00000000000111101101110000100011 fact 00000000000111111111110011010111 raise 00000000000110111111001110110010 calls 00000000000000000000000110110010 Commission 00100000000100001100101001010101 D. 00101111111111111111101001011000 Canadian 00100000000000000000000100110000 equipment 00000000000101100000001001001001 Last 00100000000000000000000001100010 Los 00101111111011010111101101110000 special 00000000000000000010010000010000 units 00000000000000000000010000001001 above 00000000000000011001000000001010 open 00000000000111101101110110110010 budget 00000000000000000000000001010001 crash 00000000000111111111010001100111 left 00000000000011000101010000110010 face 00000000000000000000000011110111 car 00000000000000000000001000100001 international 00000000000000000001010010110000 statement 00000000000111101010001011100111 union 00000000000111100011001100100101 soon 00000000000010110000010001110010 computers 00000000000111100111111001100011 Boston 00100000000111111111100001101000 itself 00000000000000000111010001110010 city 00000000000111101111101010100101 account 00000000000111101010111110111001 You 00100000000000000001000111110010 However 00100000000111111111110011101000 potential 00000000000000000010111000010000 equity 00000000000000000000011010100001 taken 00000000000111110010110000110010 biggest 00000000000000000001110011010000 advertising 00000000000000000001101010100001 getting 00000000000111101000000101000000 shareholders 00000000000111101110111010110011 Western 00100000000000000100110110101000 full 00000000000000000100011100010000 domestic 00000000000000000001010000110000 Canada 00100000000111110111011101101000 options 00000000000110101110001111100011 development 00000000000011000000101001100001 look 00000000000111110101010110110010 bills 00000000000100100100110010000111 via 00000000000000000110011010000010 bought 00000000000000100100010000110010 gas 00000000000001000010011010110000 asked 00000000000111111101010000110010 talks 00000000000111101111010000100111 rather 00000000000011101111110111000000 1986 00000000000000000000000000000000 David 00101111111000000000010010011000 Sony 00100000000111001011111100101000 reached 00000000000011010000010000110010 family 00000000000111100011111100000001 claims 00000000000111101110110000100011 hit 00000000000111001010010110110010 levels 00000000000111100000111001000111 risk 00000000000111111111010101100111 ad 00000000000000100000101010100001 Now 00100000000000001000001001110010 With 00100000000000000000001000001010 probably 00000000000011000000001001110010 consumer 00000000000011010001010000110000 legal 00000000000100000000000000110000 Germany 00100000000000001111000010101000 force 00000000000000101010010001010111 steel 00000000000000000100011010110000 approved 00000000000001011001010000110010 technology 00000000000001010100111010110000 60 00000000000000000000000000000000 remain 00000000000001000000010110110010 restructuring 00000000000111000010101111001111 University 00100000000111100000010000110101 personal 00000000000000001000010000110000 included 00000000000000100001010000110010 effect 00000000000111101111111110001111 City 00100000000111101111101010100101 find 00000000000111101010101110110010 similar 00000000000000000000010000010000 reduce 00000000000111111110111110110010 By 00100000000000000000000010001010 18 00000000000000000000000000000000 went 00000000000011001100001000110010 countries 00000000000000000000001101110011 hard 00000000000000000000111110010000 Jaguar 00100000000111110010101100101000 March 00100000000000000010011001100010 available 00000000000011000110110000110010 Mrs. 00101111111011000000101110111000 posted 00000000000000010001010000110010 effort 00000000000111111111011100100111 TV 01000000000000000000000000000000 defense 00000000000111101010110110110000 Under 00100000000000000000100000001010 banking 00000000000000000001000010110000 data 00000000000100001100001010111001 16 00000000000000000000000000000000 Although 00100000000111111101101001000010 Sales 00100000000111101110111000000111 known 00000000000111000010110000110010 performance 00000000000111101101011010100111 figures 00000000000110101100100000100011 These 00100000000000000000000011000000 Air 00100000000000000000101010101000 An 00100000000000000000000001010100 systems 00000000000001000000000001001001 Committee 00100000000000000000100001010101 long-term 00000000000000000000000000000000 finance 00000000000111111110010110110000 saying 00000000000111111111111010000010 different 00000000000000001000010000010000 cases 00000000000111100110100010100011 14 00000000000000000000000000000000 Financial 00100000000000000000100000110000 increases 00000000000111101111101010000011 especially 00000000000111111011000001110010 profits 00000000000111101111110000000011 department 00000000000000000000001110010101 given 00000000000111111100010000110010 portfolio 00000000000111101111000010000001 reports 00000000000100101011010000100011 estimates 00000000000111100011010000100011 growing 00000000000000000001010001000000 efforts 00000000000111111101011100100111 William 00101111111000000000100110011000 magazine 00000000000000000000111101000001 payments 00000000000111101111101100000011 health 00000000000000001001100000110000 network 00000000000111101111111100001001 IBM 01000000000000000000000000000000 legislation 00000000000111101110010011100111 dividend 00000000000111100000100011000111 despite 00000000000111110110100000001010 approval 00000000000111101111000100100111 Wednesday 00100000000111001011101001100010 year-earlier 00000000000000000000000000000000 noted 00000000000111111011110111000010 groups 00000000000000000000000100100011 Hong 00100000000111111111101101110000 particularly 00000000000110111011000001110010 17 00000000000000000000000000000000 coming 00000000000111101111100001000000 construction 00000000000000000000001001100001 previously 00000000000000001101001001110010 Britain 00100000000111111101111101101000 cars 00000000000000000000001001100011 slightly 00000000000111101000010001110010 Revenue 00100000000111101110101000000111 clear 00000000000111101110010001110010 parent 00000000000111111100010000110101 committee 00000000000000000000100001010101 lead 00000000000111111101110110110010 remains 00000000000000000000001000110010 helped 00000000000000000011010000110010 Angeles 00101111111100101000000100011101 either 00000000000000000010011011000000 holders 00000000000111101110011010110011 acquire 00000000000111110100001110110010 Even 00100000000000000101000001110010 German 00100000000000000000000010101000 begin 00000000000111111001110110110010 clients 00000000000111101110110000110011 joint 00000000000111101010111000110000 airline 00000000000000000001100000100101 Pacific 00100000000100101001001010101000 S&P 01000000000000000000000000000000 producers 00000000000111101110010000110011 individual 00000000000000001001101000110000 acquired 00000000000011100100010000110010 interests 00000000000111111111001110100111 something 00000000000000000010010001110010 taking 00000000000111111010100101000000 really 00000000000000010100001001110010 pressure 00000000000111101110100100100111 working 00000000000111001001000001000000 Court 00100000000000000000000111010101 food 00000000000000001111111010110000 using 00000000000011000001111101000000 raised 00000000000011000111111001000000 Columbia 00100000000111111111111000101000 gained 00000000000000000001000100110010 Airlines 00100000000000000000001010101000 looking 00000000000111101110110000110010 percentage 00000000000000000001100001010000 leaders 00000000000000000000000110110101 Most 00100000000111101011101011000000 Merrill 00100000000111111011100000101000 Michael 00101111111000000000000000011000 along 00000000000000000011100000110010 venture 00000000000000010101000000100111 brokerage 00000000000000001000000010110000 process 00000000000111110111101101100111 Sen. 00100000000000000000000000000000 buyers 00000000000111101101100000110011 Kong 00100000000000000000010100011101 industrial 00000000000011101110001110110000 states 00000000000000000000000101110011 toward 00000000000000000001000000001010 Lynch 00100000000000000100001001001000 although 00000000000111111101101001000010 retail 00000000000000000101010000110000 regulators 00000000000000000000010010110011 ever 00000000000000100100001001110010 Rep. 00100000000000000000000000000000 Richard 00101111111000000010100110011000 short 00000000000000000000000001101111 failed 00000000000011001111101000110010 completed 00000000000011110000010000110010 job 00000000000111101111110000000001 strategy 00000000000111111111101001100111 me 00000000000000001001010001110010 marks 00000000000000000000000000001011 question 00000000000111110111110101100111 television 00000000000000000000001010110000 huge 00000000000000000010100000010000 currency 00000000000111101111011010100001 themselves 00000000000000000011010001110010 gold 00000000000111110100101110110000 'm 00000000000111110100111110000010 200 00000000000000000000000000000000 deficit 00000000000110101111100000100111 thing 00000000000111111101101100010111 plunge 00000000000111111010101100110111 judge 00000000001000000000001100001000 reason 00000000000111111111101100010111 owns 00000000000000000101000000010010 leading 00000000000000010000011000010000 basis 00000000000111000011001001000111 19 00000000000000000000000000000000 plants 00000000000111101110100010001001 lawyers 00000000000000000111000010110011 having 00000000000111000010111000110010 turn 00000000000111111110010110110010 wants 00000000000111100100101000110010 fourth 00000000000000000011011011010000 view 00000000000111111111110101100111 seeking 00000000000011001110111000110010 manufacturing 00000000000000000000011010110000 course 00000000000111111111111110100001 role 00000000000111111111101110100111 GM 01000000000000000000000000000000 started 00000000000000001010001000110010 team 00000000000111100111110100000001 rules 00000000000000100000111100100011 World 00100000000111010100111011000101 disclosed 00000000000111111111000111000010 Among 00100000000000000001100000001010 bad 00000000000000000000101010010000 adds 00000000000111111110010111000010 scheduled 00000000000111111110111000110010 concerns 00000000000111101110100100100011 military 00000000000000000011110000110000 start 00000000000111101001110110110010 institutions 00000000000111101111011001110011 Morgan 00101111111111111000100000101000 seems 00000000000000000001101000110010 Analysts 00100000000000000000000010010011 generally 00000000000010100000001001110010 goods 00000000000101101110110011001001 name 00000000000111111110111010110111 directors 00000000000000000100101010110011 thought 00000000000111111110110111000010 vote 00000000000111110111111000110111 Meanwhile 00100000000111111111011011101000 quickly 00000000000001100000010001110010 free 00000000000000000010101001000000 issued 00000000000010100000010000110010 Calif. 00100000000000000000000000000000 related 00000000000000000000111000110010 great 00000000000000000000011000010000 Industries 00100000000111101100100000101001 competition 00000000000111101101111010100111 auction 00000000000111101001100001000111 black 00000000000000001001001000110000 sharply 00000000000011101000010001110010 build 00000000000110011111101110110010 project 00000000000111101011100011100111 Drexel 00101111111111101110000000101000 reduced 00000000000010010000111001000000 accounts 00000000000111100000001110111001 stores 00000000000110100000100010101001 campaign 00000000000011000111000001100111 estimate 00000000000111111001011010110111 State 00100000000111101111111010100101 meet 00000000000111110111011110110010 seen 00000000000111010010110000110010 North 00100000000111100011100110101000 turned 00000000000111001001001000110010 doing 00000000000111011101000101000000 activity 00000000000111101100110001100111 significant 00000000000000000000000000010000 done 00000000000011010010110000110010 April 00100000000000000001011001100010 considered 00000000000101111100010000110010 outside 00000000000010110000000000001010 seven 00000000000111111001111001010000 leader 00000000000011000100000110110101 heavy 00000000000000000010011100010000 always 00000000000000110100001001110010 property 00000000000111101001100000100001 includes 00000000000000000001000000010010 Shearson 00101111111111111111000000101000 ahead 00000000000000000111111100110010 J. 00101111111111000001001111011000 reserves 00000000000111101111100111100011 hold 00000000000111111110101110110010 Series 00100000000111101111110000111111 study 00000000000111101111100000110111 largely 00000000000111001011000001110010 mortgage 00000000000000000100000110110000 attorney 00000000000000001110110000110101 hours 00000000000000000000000100011011 call 00000000000111111100000110110010 investments 00000000000111101111100001101001 Eastern 00100000000000000011110110101000 involved 00000000000001001110010000110010 She 00100000000000000000011111110010 measure 00000000000111111101110011100111 thrift 00000000000000000011000000100101 impact 00000000000111111111101110001111 'll 00000000000000000001111110000010 series 00000000000111101111110000111111 Business 00100000000100100000100010100001 PLC 01000000000000000000000000000000 range 00000000000111111111011001000111 caused 00000000000000000111010000110010 French 00100000000000001010100100110000 Average 00100000000100000011000101010000 subject 00000000000111111100111000110010 key 00000000000000001000011000010000 needed 00000000000000001000110000110010 hurt 00000000000111011001110000110010 allow 00000000000111010011101110110010 Paul 00101111111000000000000010011000 supply 00000000000000010000111110110111 instead 00000000000111101111101000101111 planned 00000000000000001001001001000000 Institute 00100000000010001001010001010101 longer 00000000000000111110010001110010 All 00100000000000000000111011000000 means 00000000000110010011000000010010 try 00000000000110111111010110110010 areas 00000000000111101111110010100011 telephone 00000000000000001001001010110000 traded 00000000000001011000010000110010 kind 00000000000111111111101010111111 partner 00000000000111111111101000110101 near 00000000000000110000000000001010 France 00100000000111110101111101101000 - 00000000000000000000000011100010 settlement 00000000000111101110110011001111 dealers 00000000000000000000000101010011 stock-index 00000000000000000000000000000000 Reserve 00100000000000000000011011100101 fees 00000000000111101011100100000011 May 00100000000000000000000010010010 A. 00101111111011000001100111011000 Investors 00100000000111100110001000110011 Industrial 00100000000011101110001110110000 conference 00000000000000001000110001000111 continuing 00000000000000000000010001000000 December 00100000000111101011111001100010 situation 00000000000111111111101101100111 children 00000000000111101110111100110011 jumped 00000000000000001001000100110010 shows 00000000000010010011000000010010 man 00000000000111101110110010110101 Thursday 00100000000111101011101001100010 Other 00100000000000000000010011000000 beginning 00000000000111101100111000110010 22 00000000000000000000000000000000 eight 00000000000111111110011001010000 earned 00000000000000001000100100110010 Service 00100000000000000000000101111001 His 00100000000000000000000000000100 simply 00000000000001000000001001110010 Still 00100000000000010000001001110010 projects 00000000000111101111110100100011 became 00000000000000010000001000110010 floor 00000000000111101101011001000111 lines 00000000000111100110000000100111 staff 00000000000011100011100010000001 Smith 00101111111100101100011000001000 24 00000000000000000000000000000000 anything 00000000000000010010010001110010 produce 00000000000111111111101110110010 taxes 00000000000000000000110100000011 leveraged 00000000000111101010111100010000 Peter 00101111111000000000010110011000 Trust 00100000000000000001010001001000 Judge 00100000001000000000001100001000 smaller 00000000000000010000001111000000 ` 00000000000000000000000000000000 active 00000000000000000110011100010000 filing 00000000000011100011110011110101 daily 00000000000000001101000101010000 summer 00000000000111111111110000010111 Index 00100000000000000000011110000111 merger 00000000000111101010100011001111 arbitrage 00000000000000000000111010100001 independent 00000000000000000011101000110000 showed 00000000000000010011000000010010 owned 00000000000111001111010000110010 created 00000000000111101100010000110010 house 00000000000000000000100110100101 Journal 00100000000111101111011101000001 According 00100000000111111111111000110010 session 00000000000111111110010001100111 required 00000000000010001000110000110010 hand 00000000000111111111110110100011 benefits 00000000000111101110101100000011 why 00000000000000000000101101000010 parts 00000000000110101111110111001001 Guber 00101111111101110000000100001000 history 00000000000111111111001001100111 test 00000000000111101010111110110111 George 00101111111000000000010100011000 receive 00000000000111101011001110110010 opened 00000000000000000011001000110010 sent 00000000000000000001001000110010 changed 00000000000111111111111001000000 brokers 00000000000000000000001101010011 Bay 00100000000000000001010010100101 Since 00100000000000000010000000101010 delivery 00000000000000000000101110000111 trader 00000000000000000001101110110101 hopes 00000000000111111010101000110010 post 00000000000000000010011101110111 tons 00000000000000000000001100001011 men 00000000000000000000111100110011 boost 00000000000111110010010110110010 Dec. 00100000000000000000000000000000 150 00000000000000000000000000000000 night 00000000000111101011110000010111 75 00000000000000000000000000000000 base 00000000000111100001110011000111 announcement 00000000000111111011110001100111 form 00000000000111111111111101110111 abortion 00000000000000101001010000100001 consider 00000000000111100110100110110010 closely 00000000000111111111001001110010 morning 00000000000000000001110000010111 Americans 00100000000000000000010100110011 preferred 00000000000000000010110101010000 Noriega 00100000000111101110111010001000 aid 00000000000111100100001100100111 Peters 00101111111000000000100010001000 Communications 00100000000010000010010010110000 francs 00000000000000000000100000001011 capacity 00000000000111111100011010100111 conditions 00000000000111101110111010100011 volatility 00000000000111101011111010100111 Both 00100000000000001011011011000000 21 00000000000000000000000000000000 35 00000000000000000000000000000000 side 00000000000111100111001001100111 80 00000000000000000000000000000000 difficult 00000000000111101011111110010000 software 00000000000000000000111010110000 seem 00000000000000001011000110110010 Also 00100000000000000010001001110010 Moody 00100000000111111111111110101000 transactions 00000000000111100110010000100111 Systems 00100000000001000000000001001001 produced 00000000001111001100010000110010 letter 00000000000111111110001011100111 party 00000000000100101101101100100101 agencies 00000000000100000000100100100011 rest 00000000000111111111111100001111 usually 00000000001000100000001001110010 center 00000000000111111111010001010101 limited 00000000000001000000001001000000 decided 00000000000111010011101000110010 increasing 00000000000000000101010001000000 per 00000000000000000000010101010000 closing 00000000000111101111111001110111 seek 00000000000111011011001110110010 'd 00000000000000001001111110000010 limit 00000000000111111111110110110010 member 00000000000111111110111100111111 nothing 00000000000010000010010001110010 forced 00000000000011001000110000110010 spokeswoman 00000000000000000000000010010101 strike 00000000000111101111101010110111 News 00100000000111110111000011000001 attempt 00000000000111110111011100100111 note 00000000000111101111011010110111 short-term 00000000000000000000000000000000 recession 00000000000111111111101010100111 comes 00000000000001000100001000110010 pound 00000000000111111111011000010111 feel 00000000000111001111100110110010 wanted 00000000000111110011101000110010 behind 00000000000010100001000000001010 majority 00000000000111101111111100111111 press 00000000000111000100001011000001 women 00000000000111101100111100110011 trust 00000000000000000001010001001000 Justice 00100000000111101111110110110000 No 00100000000000000000001100010100 hope 00000000000111111110000110110010 school 00000000000010001110100001000001 labor 00000000000000000000110110110000 bring 00000000000111110110101110110010 unchanged 00000000000111101111110100110010 R. 00101111111111101111101101011000 worth 00000000000101000001110000011101 article 00000000000111101111001000100111 exports 00000000000111101110100100000111 45 00000000000000000000000000000000 CBS 01000000000000000000000000000000 cuts 00000000000111111111111010000011 23 00000000000000000000000000000000 brought 00000000000010011100010000110010 28 00000000000000000000000000000000 Its 00100000000000000000000001000100 Dr. 00100000000000000000000000000000 operation 00000000000111101111010000001001 rally 00000000000111101110101100110111 effective 00000000000011000100010100110010 size 00000000000111111111101000001111 evidence 00000000000111101111101110101111 followed 00000000000001000111010000110010 rising 00000000000000000010010001000000 separate 00000000000000100000010000010000 gave 00000000000110001011000000010010 pilots 00000000000000010000100110110011 congressional 00000000000000000100111000110000 believes 00000000000110100011000000010010 1985 00000000000000000000000000000000 Express 00100000000011000010001010101000 overseas 00000000000000000001011010100001 initial 00000000000000000010000100010000 designed 00000000000111111100110000110010 matter 00000000000111111111101000010111 allowed 00000000000001001000110000110010 Secretary 00100000000000100100110110010101 quoted 00000000000111111111110100110010 main 00000000000000000100010011010000 capital-gains 00000000000000000000000000000000 returns 00000000000111100100001100000011 1992 00000000000000000000000000000000 directly 00000000000010010000010001110010 sign 00000000000111111111011010110111 game 00000000000111101011101101100111 Time 00100000000111111111110100010111 opposition 00000000000111101011001100100111 Motor 00100000000000000010100001001000 Management 00100000000000000000000111100001 light 00000000000111101011110001101111 relatively 00000000000100001100000001110010 highly 00000000000000110000000001110010 response 00000000000111111111111101010111 machines 00000000000011001111011010101001 term 00000000000111101101101001000111 sense 00000000000111101101010101100111 paying 00000000000111000110100101000000 continues 00000000000000011001101000110010 trades 00000000000000000000010000100111 70 00000000000000000000000000000000 yields 00000000000111101101000011000111 require 00000000000111010001101110110010 90 00000000000000000000000000000000 expenses 00000000000111111110001000000011 won 00000000001111101001010000110010 economist 00001111111000000000000100110101 spent 00000000000010000100010000110010 U.S 01000000000110110111100100110000 built 00000000000111001100010000110010 whole 00000000000000000001100011010000 institutional 00000000000000010001101000110000 signed 00000000000111101001010000110010 idea 00000000000111111111100000001111 1,000 00000000000000000000000000000000 minutes 00000000000000000000001100011011 newspaper 00000000000000000000001101000001 together 00000000000000000011111100110010 running 00000000000111111110100001000000 creditors 00000000000111111111010000110011 final 00000000000000010000000011010000 People 00100000000000000000000100110011 Democrats 00100000000111101111110110110011 imports 00000000000111101100000100000111 Insurance 00100000000000000000010010110000 interview 00000000000111111111101000100111 instance 00000000000111111111110111101000 Brothers 00101111111000000001100001001000 media 00000000000000000011001010110000 de 00001111111000000010010101001000 convertible 00000000000000000001100110110000 ruling 00000000000111101110101011100111 Jr. 00100000000000000000000000000000 moves 00000000000111100011001000100011 activities 00000000000111101111101100100011 January 00100000000111100111111001100010 sector 00000000000111111011101100001001 care 00000000000010000110010110111001 sure 00000000000000001110010001110010 actual 00000000000000000100000100010000 Chemical 00100000000000010000011010110000 let 00000000000111101010100110110010 ways 00000000000111111111111110100011 minimum 00000000000111111100011100010000 Fund 00100000000110000100001110011001 Moreover 00100000000111111111101011101000 fully 00000000000000000111001001110010 actually 00000001000000000000001001110010 Yesterday 00100000000111101110101001100010 1991 00000000000000000000000000000000 shareholder 00000000000000000000111100010000 consumers 00000000000111100010111000110011 single 00000000000000010010010000010000 declines 00000000000111101111011010000011 greater 00000000000000000010001111000000 Korea 00100000000101111101010101101000 questions 00000000000101101100100010101111 contributed 00000000000011001101101000110010 protection 00000000000110101011000100100111 Lehman 00101111111000000000111001001000 introduced 00000000000111011001010000110010 natural 00000000000110101101101010110000 SEC 01000000000000000000000000000000 across 00000000000110100001000000001010 block 00000000000110111111110110110010 veto 00000000000111011001111010110111 flat 00000000000010000001110110010000 Democratic 00100000000000000000011000110000 space 00000000000000000010111010110000 appear 00000000000110011111010110110010 energy 00000000000000010110010010110000 ability 00000000000111111111111100100111 various 00000000000000001001000011000000 stop 00000000000110101001110110110010 serious 00000000000000000100000000010000 play 00000000000101111110010110110010 Because 00100000000000000000001001000010 Services 00100000000011101110011101001001 provision 00000000000111101111110011100111 quality 00000000000111101110000011100001 partly 00000000000100001011000001110010 offers 00000000000000010111000000010010 battle 00000000000111111111110000100111 apparently 00000000000010000000001001110010 needs 00000000000111101110101000110010 slow 00000000000100000101110110110010 perhaps 00000000000111111101000001110010 positions 00000000000111111001000001100011 standard 00001111111111101110111010101000 leave 00000000000101111110101110110010 300 00000000000000000000000000000000 giant 00000000000100000000100100100001 moved 00000000000111001111001000110010 security 00000000000000000011100000110000 Supreme 00100000000111111111110111100101 over-the-counter 00000000000000000000000000000000 quarterly 00000000000000010101000101010000 offices 00000000000111000101000001100011 26 00000000000000000000000000000000 sharp 00000000000000000000100000010000 Saatchi 00101111111111101101110000001000 improved 00000000000000000010011001000000 U.K. 01000000000000000000000000000000 resigned 00000000000101111110001000110010 trial 00000000000111100110000001100111 real-estate 00000000000000000000000000000000 age 00000000000000000000100001000111 widely 00000000000000100111001001110010 producer 00000000000111101111000001110101 negotiations 00000000000111111111010000100111 rule 00000000000111101110001000110111 savings 00000000000000000000111011100101 survey 00000000000111101110100000110111 decade 00000000000111111111101101100010 figure 00000000000111101111001000110111 himself 00000000000000100011010001110010 Despite 00100000000111110110100000001010 wage 00000000000000000000000101110001 machine 00000000000001001000101000100001 provisions 00000000000111101110111100100011 advanced 00000000000000000011101010110000 spend 00000000001110111111001110110010 central 00000000000001000001111100110000 spring 00000000000111111101110000010111 cause 00000000000111110011110110110010 Research 00100000000000000000000101100001 avoid 00000000000101101111111110110010 hands 00000000000110001010001101100011 Then 00100000000000101101000001110010 Savings 00100000000000000000111011100101 Salomon 00101111111111111111011000101000 29 00000000000000000000000000000000 exchanges 00000000000000000000100011100011 opening 00000000000111101111100001110111 Markets 00100000000000000000000011100011 Nasdaq 00100000000000000000000000100101 discount 00000000000111110010010011000111 offset 00000000000110110010010110110010 Kidder 00100000000111111111110000101000 customer 00000000000000000001111000100001 Lawson 00101111111100010100010010001000 focus 00000000000111110110110110110010 deals 00000000000111110110010000100111 forces 00000000000111100000010110001001 Computer 00100000000000000001011010110000 chain 00000000000111100010000001110101 Charles 00101111111000000001100110011000 lawyer 00000000000111101111111110110101 economists 00000000000000000000000000010011 Goldman 00100000000100101101110000101000 Bond 00100000000000000000111110110000 else 00000000000111100101000101001000 step 00000000000111111110011000110111 regional 00000000000000001100010000110000 date 00000000000111111011001000110111 Security 00100000000000000011100000110000 indicated 00000000000011000001100111000010 talk 00000000000111111111000101010111 takes 00000000000010001011000000010010 Hutton 00101111111111111111000001001000 pretax 00000000000000000010000101010000 hour 00000000000111101110101000100111 holds 00000000000001000101000000010010 margins 00000000000000010000001000000011 payment 00000000000111001100100011000111 November 00100000000111101111111001100010 improve 00000000000111011110111110110010 air 00000000000000000000101010101000 create 00000000000110111111101110110010 Two 00100000000111101011101001010000 2.5 00000000000000000000000000000000 cancer 00000000000000000110110010100111 Hugo 00100000000011001011111100001000 substantial 00000000000010000000000000010000 Administration 00100000000111110111111100100101 safety 00000000000000000000000011100001 alone 00000000000010000100010001110010 specific 00000000000000000001000000010000 Commerce 00100000000111111111110110110000 commission 00000000000100001100101001010101 Manhattan 00100000000000010011100001101000 Investment 00100000000001000000100010110000 adding 00000000000111111110111010000010 Electric 00100000000000001110010001001000 package 00000000000111101011110011100111 young 00000000000000000001001000110000 bankers 00000000000110101110001111110011 tough 00000000000000001001011010010000 Lincoln 00100000000000101100110100101000 willing 00000000000111111100011000110010 district 00000000000111101010110111100101 appears 00000000000000010001101000110010 Stanley 00101111111000000110001001001000 list 00000000000111110111100101100111 amounts 00000000000111101110101010001111 totaled 00000000000000000000100100110010 provides 00000000000010000001000000010010 Gorbachev 00101111111100111111010010001000 target 00000000000111101011100101100111 1.5 00000000000000000000000000000000 familiar 00000000000111111001100000110010 speculation 00000000000111101101111010101111 water 00000000000000000000110000100001 jobs 00000000000000000000100001100011 review 00000000000111111111111110110111 Trade 00100000000001000000000000010001 fear 00000000000111101110000110110010 chance 00000000000111111110111100010111 Motors 00100000000000011110010001001000 add 00000000000111110011001110110010 holdings 00000000000111101111110001101001 rejected 00000000000111111001010000110010 quake 00000000000111111100101101100111 managing 00000000000000000000001001110000 fight 00000000000111111101110010110111 provided 00000000000010010111010000110010 policies 00000000000111111100111100100011 IRS 01000000000000000000000000000000 stay 00000000000110011101010110110010 premium 00000000000111101001100011000111 reach 00000000000111111011001110110010 war 00000000000011101011000111111001 Market 00100000000000000000000001011001 Another 00100000000000000000000100010100 civil 00000000000000010001000000110000 brand 00000000000000000000011000100001 weak 00000000000000000011100000010000 worked 00000000000111111110001000110010 overall 00000000000000000000000100010000 Digital 00100000000010001010100100101000 white 00000000000111111111011010101000 headquarters 00000000000111101111101010000001 option 00000000000111011111101100100111 debentures 00000000000111111111001010000111 split 00000000000000000000010101110111 larger 00000000000000000000001111000000 Australia 00100000000111111011011101101000 developed 00000000010111101100010000110010 so-called 00000000000000000000000000000000 Health 00100000000000001001100000110000 10,000 00000000000000000000000000000000 passed 00000000100111111001010000110010 expectations 00000000000111101111010000100011 Steel 00100000000000000100011010110000 phone 00000000000000000001001010110000 Telerate 00100000000110111100100100101000 strength 00000000000111111111111010100111 climbed 00000000000000010101000100110010 standards 00000000000100100110111100100011 PaineWebber 01000000000111111011101000101000 Valley 00100000000000000000000010100101 field 00000000000111101111101000000001 regulatory 00000000000000000101000000110000 housing 00000000000000100110010010110000 OTC 01000000000000000000000000000000 win 00000000000011111110101110110010 heavily 00000000000010000111001001110010 facilities 00000000000111101101110100100011 weekend 00000000000111101111010000010111 goes 00000000000000100100001000110010 remaining 00000000000001000000010011010000 valued 00000000000011000001110100110010 interested 00000000000011111110010000110010 planning 00000000000111101100110001000000 considering 00000000000010000000010101000000 Not 00100000000000000001000001110010 existing 00000000000000000011000011010000 moving 00000000000111101001100001000000 success 00000000000111110111011010100111 direct 00000000000000000000011100010000 woman 00000000000111100111110010110101 act 00000000000111111101001000110111 C$ 00100000000000000000000000000000 More 00100000000000000000000111000000 Dallas 00100000000111110101111001101000 benefit 00000000000111100011110110110010 Republican 00100000000000000010011000110000 Thomas 00101111111000100000000010011000 Ohio 00100000000111111110101001101000 develop 00000000001111111111101110110010 Of 00100000000000000000000000011010 events 00000000000111111111101010100011 entire 00000000000000001000010011010000 approach 00000000000111110111111010110111 environmental 00000000000001000101000000110000 debate 00000000000111101000111010100111 book 00000000000111001100101000100001 electronic 00000000000000000000101010110000 afternoon 00000000000000000000000000010111 death 00000000000111101111011010100111 Those 00100000000000000010000011000000 region 00000000000111111011111001000101 met 00000000000111110110010000110010 dividends 00000000000100101101100100000011 1984 00000000000000000000000000000000 E. 00101111111011000000001011011000 Reagan 00101111110000001000000110001000 27 00000000000000000000000000000000 particular 00000000000000000111100001101111 expansion 00000000000111101010111001100111 purchases 00000000000111100000000010100111 beyond 00000000000000101001000000001010 room 00000000000110101010110100100111 forecast 00000000000111110101011010110111 medical 00000000000000000001100000110000 Poland 00100000000111011000111101101000 prevent 00000000000011110111111110110010 400 00000000000000000000000000000000 mostly 00000000000111101011000001110010 opportunity 00000000000111111111101100100111 raising 00000000000011010010011101000000 ads 00000000000111101111000101100011 bids 00000000000111100100001100011001 grew 00000000000000001000001000110010 kept 00000000000001011100010000110010 consultant 00000000000111101000011110110101 saw 00000000000101111011000000010010 works 00000000000111101111000000010010 competitors 00000000000111101111110000110011 Baker 00101111111100100001001010001000 funding 00000000000000000000100000111001 giving 00000000000111111010101101000000 prepared 00000000000010111100110000110010 cited 00000000000000110001010000110010 elected 00000000000111011010010000110010 complete 00000000000111110101110110110010 aircraft 00000000000000000110001010110000 practice 00000000000111111101110101100111 requirements 00000000000111111011111100100011 reflecting 00000000000111111011011010000010 owners 00000000000010001111100000110011 concerned 00000000000111110111110000110010 Indeed 00100000000111111111001011101000 30-year 00000000000000000000000000000000 carrier 00000000000111101111100001000101 measures 00000000000111101111001000100011 modest 00000000000000001010100000010000 version 00000000000111101111101000111111 land 00000000000101100101100000100001 feet 00000000000000000000101100001011 RJR 01000000000000000000000000000000 cover 00000000000111101111110110110010 rating 00000000000011111111000011000111 secretary 00000000000000100100110110010101 Qintex 00100000000000000111110110101000 Data 00100000000100001100001010111001 Yet 00100000000111110110010001110010 Panama 00100000000111111000111101101000 Associates 00100000000111101111101011101001 transportation 00000000000010001001110110110000 chemical 00000000000000010000011010110000 Times 00100000000000000000000010011011 mutual 00000000000001001001111110110000 trouble 00000000000000100110110100100111 bankruptcy 00000000000000000000010111100101 parties 00000000000110100100011001110011 factors 00000000000111101101111010100011 unless 00000000000000000110101001000010 Such 00100000000000000000100011000000 pence 00000000000000000001000000001011 falling 00000000000010000110010001000000 individuals 00000000000110101110111000110011 spread 00000000000111101011001010110111 restrictions 00000000000111001110100100100111 investigation 00000000000111111101110001100111 sought 00000000000010111000110000110010 Bell 00100000000001001011001010110000 necessary 00000000000111000101111110010000 Alan 00101111111000000010100010011000 stand 00000000000111111101010110110010 Johnson 00101111111100101101011000001000 maintain 00000000000111110111111110110010 drugs 00000000000110100111111001100011 poor 00000000011111111110111110101000 read 00000000000101111010010110110010 mean 00000000000111101000100110110010 backed 00000000000010001111010000110010 believed 00000000000111011100110000110010 Sachs 00101111111011010011101001001000 expensive 00000000000011001000001110010000 carry 00000000000111100110101110110010 Mexico 00100000000111011111111101101000 Pentagon 00100000000111101001110000100101 lack 00000000000111111111111110111111 immediately 00000000000000110000010001110010 tried 00000000000111111011101000110010 33 00000000000000000000000000000000 store 00000000000000000101111010110000 Thatcher 00101111111100100010010010001000 principal 00000000000000000010010011010000 troubled 00000000000001000000101001000000 houses 00000000000000000100000011110011 story 00000000000111100110111101100111 St. 00100000000000000000000000000000 Office 00100000000111101101101010000001 attention 00000000000111101101110100100111 Dinkins 00101111111110111100110010001000 original 00000000000000000000010011010000 owner 00000000000011111111110000110101 experts 00000000000000000000000010110011 ones 00000000000111101010011001110011 criminal 00000000000000000001000000110000 Home 00100000000000000000010110100001 items 00000000000111101111101010100011 County 00100000000011000000110010100101 reduction 00000000000111101111101010100111 Instead 00100000000111101111101000101111 England 00100000000000010101011110000010 tell 00000000000111111010100110110010 community 00000000000111101110000001000001 movie 00000000000011011000101000100001 par 00000000000111101101010000101000 panel 00000000000110101100000001010101 person 00000000000111101111110010110101 pending 00000000000000001100010001000000 output 00000000000111101110110100000111 44 00000000000000000000000000000000 collapse 00000000000111111111010010001111 popular 00000000000000000010000010010000 details 00000000000111101111001100101111 access 00000000000111101010001100100111 acquisitions 00000000000111101111000010100111 runs 00000000000000000011000000010010 emergency 00000000000001000000010100010000 year-ago 00000000000000000000000000000000 easy 00000000000011000001011110010000 asset 00000000000000000001001010100001 negative 00000000000000000010001010010000 dispute 00000000000111111110110000100111 ease 00000000000111110110111110110010 Santa 00100000000111101110101101110000 tender 00000000000000000000001100010000 combined 00000000000000000110001001000000 numbers 00000000000111101110100000100011 profitable 00000000000000000100010010010000 students 00000000000000000000011000110011 plunged 00000000000001000101000100110010 difference 00000000000111111100001000010111 certainly 00000000001011000000001001110010 gives 00000000000110000001000000010010 Gulf 00100000000100100110001110101000 Moscow 00100000000111101011101101101000 Development 00100000000011000000101001100001 During 00100000000000001101000000001010 Traders 00100000000000000000000001010011 purchased 00000000000010100100010000110010 primarily 00000000001100001011000001110010 65 00000000000000000000000000000000 Entertainment 00100000000000100010010010110000 Standard 00101111111111101110111010101000 trend 00000000000111111100111101100111 increasingly 00000000000000010000000001110010 pension 00000000000000000001111110110000 factory 00000000000111101010100000100001 image 00000000000111111111111001100111 balance 00000000000110111111011010100111 claim 00000000000111111101011010110111 ownership 00000000000000000000000010100111 bidding 00000000000110101000110001000000 250 00000000000000000000000000000000 publicly 00000000000100100111001001110010 mortgages 00000000000111101110101111100011 released 00000000000011100000010000110010 materials 00000000000000000001000111001001 LIN 01000000000101001001110000001000 gets 00000000000001111011000000010010 powerful 00000000000000000000000010010000 Paris 00100000000111111101111001101000 M. 00101111111111000001011111011000 lose 00000000000111001111001110110010 Nissan 00100000000111001011011000101000 represents 00000000000000100001000000010010 conservative 00000000000000001000011000110000 actions 00000000000111101111101000100011 competitive 00000000000000000010110010010000 charged 00000000000101010110010000110010 seemed 00000000000100000001101000110010 margin 00000000000000000001100011000111 authority 00000000000111101001110100100111 Great 00100000000000000000011000010000 Boeing 00100000000111101000011100101000 attributed 00000000000001010101010000110010 Houston 00100000000111011101111001101000 aimed 00000000000000000101110100110010 properties 00000000000110101101110000001001 experience 00000000000111101011001110100111 anyone 00000000000000101010010001110010 Ltd 00100000000000000000000000000000 true 00000000000011000100010110010000 subordinated 00000000000000000000100110110000 1994 00000000000000000000000000000000 laws 00000000000000001100111100100011 Chrysler 00100000000111101110011100101000 roughly 00000000000000100111000001110010 proposals 00000000000111101110101000100011 headed 00000000000111101111010000110010 drive 00000000000101110110010110110010 fine 00000000000000010010000001000111 NBC 01000000000000000000000000000000 internal 00000000000000000101000100010000 US$ 01000000000000000000000000000000 treatment 00000000000111110010011010100111 Minister 00101111111000000001100110010101 partners 00000000000110101010000011101001 jury 00000000000000001001101000010111 vehicles 00000000000000000001101001100011 live 00000000001111011101010110110010 miles 00000000000000000000000100001011 affected 00000000000001110001110000110010 Swiss 00100000000000000010100100110000 export 00000000000000000011000100010000 Act 00100000000111111101001000110111 Costa 00101111111100000111001101110000 reorganization 00000000000000000000000111001111 facility 00000000000111101111011010001001 corporations 00000000000111101111110001110011 settled 00000010000011001100010000110010 Transportation 00100000000010001001110110110000 monetary 00000000000000010011000000110000 leaving 00000000000111111111101101000000 wrong 00000000000001000000110110010000 retirement 00000000000000000000011011100001 signs 00000000000111101101111110101111 film 00000000000000000000101000100001 Poor 00100000011111111110111110101000 alleged 00000000000000000001111000010000 Separately 00101111111111111111111011101000 B. 00101111111011000001011011011000 season 00000000000111101110001000100111 material 00000000000000000001100000100001 improvement 00000000000111111111001010100111 Republicans 00100000000111100101010110110011 manufacturers 00000000000100000110111111110011 USX 01000000000000000000000000000000 nations 00000000000000000000011101110011 grow 00000000000111011101010110110010 highest 00000000000000011010000011010000 sources 00000000000000000000001000010101 junk-bond 00000000000000000000000000000000 human 00000000000010000101000000110000 present 00000000000010000101110110110010 clearly 00000000000101000000001001110010 minority 00000000000000000000101000110000 placed 00000000000011001100010000110010 pretty 00000000000000001100000001110010 accept 00000000000111111001111110110010 monthly 00000000000000110101000101010000 Party 00100000000100101101101100100101 shift 00000000000111110100111000110111 L. 00101111111011000001001011011000 amid 00000000000000000010100000001010 flow 00000000000100010000001010001111 someone 00000000000000001010010001110010 fixed 00000000000000100000011100010000 eventually 00000000001000000000001001110010 No. 00100000000000000000000000000000 values 00000000000111101000001000100011 successful 00000000000000000001000010010000 favor 00000000000111111111101001101111 recovery 00000000000111001111101010100111 appeal 00000000000111111111111010110111 putting 00000000000111110111101101000000 Asia 00100000000111111110011101101000 world-wide 00000000000000000000000000000000 ending 00000000000000000110010100110010 waiting 00000000000101111110110000110010 accounting 00000000000000000010000010110000 Florida 00100000000111101011110001101000 Hurricane 00100000000100100101100100100001 organization 00000000000111101111011001100111 whom 00000000000111101110101101000010 55 00000000000000000000000000000000 appeared 00000000000000001001101000110010 disaster 00000000000111100001101101100111 lending 00000000000000000000110011000111 players 00000000000111100110001001110011 Resources 00100000000001100010001101001001 advantage 00000000000000000011010110001111 Net 00100000000000000000100101010000 steps 00000000000110001011001000100011 deposits 00000000000111100010100111100011 predicted 00000000000111111111110111000010 magazines 00000000000110111100110001100011 Soviets 00100000000111101111111110110011 technical 00000000000000000010000000110000 bit 00000000000111111111110001111111 traditional 00000000000000000000001000110000 51 00000000000000000000000000000000 Morris 00101111111111110111100000001000 break 00000000000111110110010110110010 risks 00000000000111101011011000100011 controls 00000000000010000111000000010010 Oakland 00100000000110111101101001101000 declining 00000000000000010010010001000000 failure 00000000000111111110111100100111 researchers 00000000000000000110000010110011 core 00000000000000011010010011010000 starting 00000000000110011100111000110010 victims 00000000000111101000001010110011 C. 00101111111011000000010111011000 Chinese 00100000000000001001010100110000 liquidity 00000000000000001010011010100111 shopping 00000000000000000000100101100001 lawmakers 00000000000000000100010010110011 revised 00000000000000000010001001000000 sometimes 00000000000001100000001001110010 losing 00000000000000000100100101000000 Arizona 00100000000111100011110001101000 crisis 00000000000111111001001101100111 threat 00000000000111111010111100100111 elections 00000000000111101001010001100111 partnership 00000000000110101111100011110101 mark 00000000000111101010111100001000 unusual 00000000000000000001110100010000 expand 00000000000111101110111110110010 Central 00100000000001000001111100110000 nor 00000000000000000000011011000000 normal 00000000000000011011000000010000 Medical 00100000000000000001100000110000 everything 00000000000000100010010001110010 Three 00100000000111101011111001010000 remained 00000000000000010000010110110010 significantly 00000000000000001000010001110010 involving 00000000000000010000000000001010 ordered 00000001000011000101010000110010 W. 00101111111011000000100011011000 client 00000000000111111111001110000001 Campeau 00100000000100101111110000001000 couple 00000000000111111111101001111111 p.m. 00000000000000000000000000000000 substantially 00000000000100001000010001110010 tomorrow 00000000000000101100010001110010 confidence 00000000000111101110001110100111 listed 00000000000011011000010000110010 advertisers 00000000000110110010111000110011 showing 00000000000000000000110101000000 Trump 00101111111100101100010010001000 words 00000000000111101111000110100011 model 00000000000000000000000001000111 Council 00100000000000000101010001010101 wrote 00000000000111111111010111000010 reflect 00000000000001101001101110110010 portion 00000000000111111111011110111111 voted 00000000000111101011101000110010 Continental 00100000000111101011110110101000 art 00000000000111101010111100100001 industries 00000000000111101100100000101001 Chapter 00100000000000000001110001100010 Though 00100000000111111011101001000010 Brown 00101111111100101111011000001000 request 00000000000111111111101111100111 adviser 00000000000111111100110110110101 Southern 00100000000000000000110110101000 election 00000000000000000010010001100111 reasons 00000000000111111111101110100011 benchmark 00000000000111111111011000010000 Mitsubishi 00100000000111010001111000101000 agree 00000000000111111001100110110010 Philip 00101111111000001000011100001000 source 00000000000000000101011000010101 Center 00100000000111111111010001010101 Life 00100000000111101111101110100001 everyone 00000000000001001010010001110010 complex 00000000000000000110000010010000 mainly 00000000000110001011000001110010 established 00000000001111101100010000110010 editor 00000000000111111110011000110101 weakness 00000000001111111111111010100111 Mae 00100000000110001100111110000010 Lloyd 00101111111010001101111110101000 segment 00000000000111101110111001110101 Frank 00101111111000000010010100001000 push 00000000000111100110010110110010 positive 00000000000000000100001010010000 quite 00000000000000000000000001110010 operate 00000000000111111111001110110010 employee 00000000000000000000000000110101 Mortgage 00100000000000000100000110110000 effects 00000000000111111101101110001111 plus 00000000000000000010011010000010 decide 00000000000111111110011110110010 N.J. 01000000000000000000000000000000 maturity 00000000000111101101100001000111 developing 00000000000111110111110001000000 sort 00000000000111111111110110111111 chemicals 00000000000001111111111010110000 managed 00000000000011111000110000110010 gone 00000000000101101010110000110010 1982 00000000000000000000000000000000 thrifts 00000000000111100111100001110011 advance 00000000000111101111001001101111 refused 00000000000111101111101000110010 education 00000000000111101111101101100001 stronger 00000000000000001000001111000000 Park 00100000000100000001000010100101 launched 00000000000011011001010000110010 usual 00000000000111101111010011010000 chips 00000000000111101001110110001001 Holdings 00100000000111101111110001101001 AMR 01000000000000000000000000000000 Futures 00100000000111111110011110110000 cable 00000000000000000101001010110000 trillion 00000000000000000100000001010000 direction 00000000000111111011001001100111 Sir 00101111111111100110011100001000 thus 00000000000111101101000001110010 Each 00100000000000000000100100010100 mixed 00000000000111110100010000110010 Mass. 00100000000000000000000000000000 played 00000000000101011100010000110010 Loan 00100000000000000000001011100101 centers 00000000000111101110010100100011 release 00000000000111101001111101110111 adjusted 00000000000010110110110000110010 accord 00000000000111101111011000100111 police 00000000000000000000101100100101 reflects 00000000000000000001010000110010 EC 01000000000000000000000000000000 thousands 00000000000111111111111000101111 Hills 00100000000000001100000010100101 uncertainty 00000000000111111110111010100111 bigger 00000000000000000110001111000000 Burnham 00101111111000000001011001001000 proceeds 00000000000111101110000100100111 Earlier 00100000000000000000001001100010 finally 00000000010000000000001001110010 Defense 00100000000111101010110110110000 resources 00000000000001100010001101001001 slide 00000000000111110111101100110111 electronics 00000000000000000111011010110000 1.2 00000000000000000000000000000000 Donald 00101111111000000000011010011000 Our 00100000000000000000000010000100 contrast 00000000000111111111101011010111 Today 00100000000000001100010001110010 relief 00000000000111111010111000111001 event 00000000000111111100100000001111 hearing 00000000000111110101001011100111 typically 00000000010001100000001001110010 slowing 00000000000111001111010001000000 engineering 00000000000001000001000001100001 42 00000000000000000000000000000000 thinks 00000000000111100011000000010010 Credit 00100000000000000000001100110001 supplies 00000000000110100000110100000111 primary 00000000000000000110010011010000 reflected 00000000010000000001010000110010 mind 00000000000111111110110101010111 controlled 00000000000011001111010000110010 opposed 00000000000111111000110000110010 H. 00101111111111000011001011011000 crude 00000000000111101110011000101000 1.1 00000000000000000000000000000000 Stephen 00101111111000001000010110011000 Here 00100000000000010100010001110010 surged 00000000000000000101000100110010 S.A. 01000000000000000000000000000000 suggested 00000000000110111111110111000010 buyer 00000000000111111110101010110101 Italy 00100000000111101111111101101000 sports 00000000000001000000001010110000 annually 00000000000000000000001001000111 movies 00000000000100001111110101100011 pace 00000000000111101111011001000111 travel 00000000000001000100000000100001 Partners 00100000000110101010000011101001 affect 00000000000111101101101110110010 Sunday 00100000000111011011101001100010 McCaw 01000000000101000100100100101000 protect 00000000000111111111111110110010 talking 00000000000110110111110000110010 ratings 00000000000111101011000011000111 soared 00000000000010100001000100110010 vehicle 00000000000011000110001000100001 warrants 00000000000111100100101111100011 high-yield 00000000000000000000000000000000 pages 00000000000000000010000100001011 AG 01000000000000000000000000000000 sells 00000000000100001101000000010010 Australian 00100000000000000010000100110000 fewer 00000000000000000001000111000000 Paribas 00101111111000100000000101001000 faces 00000000000001000011000000010010 broad 00000000000000000110100000010000 practices 00000000000111101111111100100011 Finance 00100000000111111110010110110000 Black 00100000000000001001001000110000 stopped 00000000000001001010001000110010 felt 00000000000111101110110111000010 1.8 00000000000000000000000000000000 doubt 00000000000111111110010001110010 GE 01000000000000000000000000000000 commodity 00000000000111101111111110110000 determined 00000000000111011101110000110010 throughout 00000000000001001101000000001010 stations 00000000000111101011110100001001 relations 00000000000111101101010011111001 design 00000000000111001100011110110111 environment 00000000000111110111011001100111 hundreds 00000000000111101101111000101111 reform 00000000000111101010111000111001 double 00000000000111111110011011000000 buy-outs 00000000000000000000000000000000 joined 00000000100011000101010000110010 Broadcasting 00100000000010010010010010110000 II 01000000000000000000000000000000 argue 00000000000101111001100110110010 speed 00000000000111101110110110110111 fraud 00000000000010000010100010100111 confirmed 00000000000111011101110111000010 ask 00000000000111011010100110110010 fears 00000000000111101110101010101111 About 00100000000000000000000010101010 Ministry 00100000000000000011100110010101 producing 00000000000011000111110001000000 cities 00000000000111101100010001100011 represent 00000000000111101001101110110010 Frankfurt 00100000000111001100011001101000 moment 00000000000111111110011000010111 families 00000000000111101111111100110011 ban 00000000000111111011111000110111 February 00100000000111111111111001100010 structure 00000000000111101101001001100111 uses 00000000010111101111000000010010 guilty 00000000000001011100111000110010 crime 00000000000101111101110010100111 Foreign 00100000000000000010010000110000 consulting 00000000000001000000000010110000 responsible 00000000000011111110110000110010 books 00000000000111101111100101100011 heart 00000000000000000010011011100001 defendants 00000000000111101111000110110011 red 00000000000001000010001000110000 equal 00000000000001100000111000110010 social 00000000000000010101000000110000 Citicorp 00100000000111101010110100101000 operates 00000000000000100101000000010010 Intel 00100000000111100100011100101000 virtually 00000000000001110111000001110010 My 00100000000000000000000100000100 Labor 00100000000000000000110110110000 written 00000001000111110010110000110010 Technology 00100000000001010100111010110000 Energy 00100000000000010110010010110000 tests 00000000000101101010001000100011 seats 00000000000000101001000001100011 32 00000000000000000000000000000000 schools 00000000000111101100110001100011 leadership 00000000000111101010101001100111 distribution 00000000000000000001001001100001 ounce 00000000000111110111101000100111 influence 00000000000111111100110010110111 Jersey 00100000000000000001011110000010 1.6 00000000000000000000000000000000 wide 00000000000010000000100000010000 Only 00100000000000000011000001110010 System 00100000000111101111000011100111 happen 00000000010111111101010110110010 farmers 00000000000001001110111000110011 goal 00000000000111111111100101100111 town 00000000000111101111110100000001 damages 00000000000111101111000100000011 Price 00100000000000000000000111000111 healthy 00000000000000010001100000010000 front 00000000000111111101111001101111 finished 00000000000000100011001000110010 Africa 00100000000101111101110101101000 Hill 00101111111000010100000101001000 ground 00000000000111111110110100100111 parents 00000000000111100111110000110011 Bear 00100000000111111100110000101000 possibility 00000000000111111111000000001111 temporary 00000000001000000001000000010000 scandal 00000000000111101110100011100111 communications 00000000000010000010010010110000 providing 00000000000101111111111101000000 120 00000000000000000000000000000000 section 00000000000111001011100001000111 slowdown 00000000000111111101101010100111 buildings 00000000000000000000110001100011 exercise 00000000000110110111110110110010 fallen 00000000000111101010110000110010 Why 00100000000000000000101101000010 relationship 00000000000110111110110000100111 Prime 00101111111111101100010110110000 Lambert 00101111111111111110100001001000 corn 00000000000110100001101110110000 Community 00100000000111101110000001000001 Brady 00101111111000100011001010001000 homes 00000000000000001000101001100011 cutting 00000000000111011001011101000000 except 00000000000111110010011010000010 Machines 00100000000011001111011010101001 networks 00000000000111101110110100001001 sides 00000000000000000100100111110011 piece 00000000000111111111111000111111 global 00000000000001101010000000110000 coupon 00000000000000010000010011000111 reporting 00000000000000000000110001000000 decisions 00000000000111100111101000100011 Joseph 00101111111000010000000010011000 damaged 00000000001011010001110000110010 Jack 00101111111000000001011010011000 wake 00000000000111111101111100001111 denied 00000000000011010001110111000010 suspended 00000000001001010100010000110010 file 00000000000111001111011110110010 Aug. 00100000000000000000000000000000 Cray 00100000000111110110100100101000 serve 00000000001111111111001110110010 regular 00000000000000001010010000010000 liability 00000000000010000101101000111001 Report 00100000000111101111110000110111 models 00000000000000000000101001100011 specialists 00000000000000000010000010110011 deputy 00000000000000000010001001110000 publishing 00000000000000100011011010110000 opinion 00000000000111100011111001100111 utility 00000000000010100001000000100101 follow 00000000000001111110101110110010 Power 00100000000000000000001001111001 airlines 00000000000000000000001010101000 speech 00000000000111111101001011100111 ventures 00000000000000000001000000100111 reserve 00000000000000000000011011100101 Korean 00100000000000000001010100110000 immediate 00000000000000000001010100010000 mail 00000000000101101110000000100001 association 00000000000110101011110001010101 volatile 00000000000010000000010010010000 worry 00000000000111101001100110110010 copper 00000000000111111011101110110000 38 00000000000000000000000000000000 Sears 00100000000111101110110100101000 wife 00000000000111111111111110000001 Their 00100000000000000000000110000100 Hollywood 00100000000000100111110001101000 Phillips 00101111111100101000111000001000 Thus 00100000000111101101000001110010 jump 00000000000111111100101100110111 minister 00001111111000000001100110010101 HUD 01000000000000010000101100100101 Oil 00100000000000000001001110110000 responsibility 00000000000111101111001100111001 intended 00000000000101111100110000110010 halt 00000000000011011111110110110010 antitrust 00000000000010000001000000110000 soft 00000000000010100010101010110000 shown 00000000000110010010110000110010 suggest 00000000000011111100100110110010 delay 00000000000111111100111000110111 rumors 00000000000111101111111010101111 municipal 00000000000000000000000110110000 accused 00000000000111010011110000110010 follows 00000000100000000011000000010010 AT&T 01000000000000000000000000000000 reaction 00000000000111111101111101010111 49 00000000000000000000000000000000 declared 00000000000111001101110111000010 1.7 00000000000000000000000000000000 Compaq 00100000000111111110100100101000 associated 00000000000000000001100000110010 invest 00000000000111111001010110110010 disclose 00000000000111110110011110110010 underwriters 00000000000110100100101001110011 puts 00000000000010000011000000010010 voters 00000000000000000001011000110011 documents 00000000000110101110001000100011 abroad 00000000000000110100010001110010 37 00000000000000000000000000000000 Douglas 00101111111000000101010100001000 F. 00101111111011000010110011011000 circulation 00000000000111110111100011000111 studio 00000000000110100111000100000001 worst 00000000000000001111010011010000 T. 00101111111100100101100011011000 courts 00000000000011000010010110110011 aggressive 00000000000000000010110100010000 prime 00001111111111101100010110110000 worried 00000000000111111111110000110010 challenge 00000000000111111011111010110111 broker 00000000000011100011101110110101 Chase 00100000000111101000111000101000 employment 00000000000000000000001100000111 comparable 00000000000101100111010101010000 newspapers 00000000000111001100110001100011 1.3 00000000000000000000000000000000 1970s 00000000000000000000000000000000 hotel 00000000000011100101111010110000 scientists 00000000000001000110000010110011 Beijing 00100000000111111001101101101000 5,000 00000000000000000000000000000000 commitments 00000000000111101011100100011001 living 00000000000011000001000001000000 Manufacturers 00100000000100000110111111110011 hostile 00000000000000000101001100010000 suffered 00000000000101101001010000110010 training 00000000000000000001101101100001 happened 00000000000111100110001000110010 join 00000000000111101111111110110010 litigation 00000000000111101110100010100111 prospects 00000000000111111111111100111001 Just 00100000000000001100001001110010 Volume 00100000000111101100001110000111 meanwhile 00000000000111111111011011101000 agreements 00000000000111101110010000100111 Merc 00100000000000000001110000100101 Keating 00101111111101000000110010001000 compromise 00000000000111101011101010110111 save 00000000000011111111001110110010 Exxon 00100000000111101100011100101000 factor 00000000000101110111011010110101 Jan. 00100000000000000000000000000000 handle 00000000000011101111111110110010 Saturday 00100000000111111011101001100010 flight 00000000000111101000000000100001 Navy 00100000000000001100101100100101 extraordinary 00000000000000000000010100010000 Dealers 00100000000000000000000101010011 100,000 00000000000000000000000000000000 boosted 00000000000011010001111001000000 Sun 00100000000111101111011000101000 12.5 00000000000000000000000000000000 served 00000000000111011110001000110010 residents 00000000000000000000100000110011 brief 00000000000000010011000000010000 Navigation 00100000000000011000100001100001 extra 00000000000000000011100100010000 spot 00000000000111101110110011000111 outlook 00000000000111111101111100111001 Manville 00100000000111100011101100101000 10-year 00000000000000000000000000000000 1983 00000000000000000000000000000000 votes 00000000000001000001000001100011 critics 00000000000000000011000010110011 Miller 00101111111100101000001000001000 college 00000000000010000011000001000001 Greenspan 00101111111100101111110010001000 views 00000000000111101111111101100011 appeals 00000000000000000000111111100101 citing 00000000000111111101011010000010 keeping 00000000000111111011101101000000 excess 00000000000100000001111001101111 School 00100000000010001110100001000001 Control 00100000000000100010110000101111 panic 00000000000000110110111010100111 Apple 00100000000111101110100100101000 pricing 00000000000000000011000011100001 B.A.T 01000000000000000000000000000000 counsel 00000000000000001110001000110101 professional 00000000000000010000101000110000 minor 00000000000000001010000000010000 inventories 00000000000111101101110100000111 Singapore 00100000000110111111111001101000 truck 00000000000000011000001000100001 Phelan 00101111111000001011000010001000 discussions 00000000000111100111010000100111 automotive 00000000000001010000101010110000 trucks 00000000000110101110111001100011 looks 00000000000111001000001000110010 discovered 00000000000111110101110111000010 From 00100000000000000000001000101010 replace 00000000000111111011111110110010 fourth-quarter 00000000000000000000000000000000 Mitchell 00101111111110010000000100001000 suggests 00000000000001010011000000010010 prove 00000000000111111100100110110010 argued 00000000000111110111110111000010 Lee 00101111111000000000010100001000 crop 00000000000000000100011000100001 returned 00000000000011111011101000110010 safe 00000000000011000000011010010000 senators 00000000000000000000100110110011 Mixte 00100000000111100111111101001001 one-time 00000000000000000000000000000000 preliminary 00000000000000000001001100010000 reporters 00000000000000100001110000110011 Edward 00101111111000000100000110011000 fairly 00000000000010001100000001110010 accepted 00000000000000001001010000110010 conventional 00000000000000010001110000110000 coup 00000000000000001000111010110101 launch 00000000000101110111110110110010 Georgia-Pacific 01000000000000000000000000000000 settle 00000000000111101111011110110010 ABC 01000000000000000000000000000000 visit 00000000000111111001111010110111 initially 00000000100000000000001001110010 Bill 00100000000111101110110011100111 representatives 00000000000110101110101010110011 succeeds 00001111111111101011011111000010 barrels 00000000000000000000000110001011 warned 00000000000111011111110111000010 guarantee 00000000000111110111011010110111 movement 00000000000110111111101001100111 regulations 00000000000000000011111100100011 sound 00000000000110101110110110110111 Toronto 00100000000000000001011001101000 task 00000000000111010101100000110111 Budget 00100000000000000000000001010001 upon 00000000000001000001000000001010 tend 00000000000011101011000110110010 music 00000000000010000001111100100001 S. 00101111111011100001111011011000 twice 00000000000111101010011011000000 Telephone 00100000000000001001001010110000 telecommunications 00000000000010011011011010110000 Major 00100000000000000000001000010000 ANC 01000000000000000000000000000000 site 00000000000111011110101101100111 asking 00000000000111110011110101000000 formed 00000000001011100000010000110010 type 00000000000111111110110110111111 discuss 00000000000111111000011110110010 society 00000000000111101011001001100111 negotiating 00000000000111000110111000110010 coverage 00000000000110101110011010100111 language 00000000000111110110101001100111 metals 00001111111010101000011110110000 guarantees 00000000000011000111000000010010 attract 00000000000010111111101110110010 criticism 00000000000111110110011010100111 professor 00000000000111111111011000110101 Sotheby 00100000000111100101111110101000 entered 00000000000010001001010000110010 century 00000000000000000010000001000111 Industry 00100000000111101110100100100101 pass 00000000000111011110101110110010 Stearns 00101111111000000011101001001000 retailers 00000000000111001110010000110011 blacks 00000000000111101010111000110011 candidates 00000000000111101100100110110011 prosecutors 00000000000000001001010010110011 MGM 01000000000000000000000000000000 obtain 00000000000011011111101110110010 District 00100000000111101010110111100101 baseball 00000000000000000000111100100001 shipments 00000000000111101111110100000111 patients 00000000000000100000011100110011 Louis 00100000000111100111000001001000 forecasts 00000000000111101101010000100011 Several 00100000000001000011000011000000 guidelines 00000000000000000010111100100011 weekly 00000000000000000101000101010000 fire 00000000000111101110000110110111 concluded 00000000000111011011110111000010 1980 00000000000000000000000000000000 audience 00000000000111011011111001100111 Communist 00100000000011000011011000110000 slipped 00000000000000100001000100110010 limits 00000000000111000110100100100111 Officials 00100000000000000000000100010101 controversial 00000000000000001010000010010000 alternative 00000000000000000000101100100111 tumbled 00000000000011100001000100110010 indicate 00000000000011010100100110110010 quick 00000000000001100000010000010000 authorities 00000000000000000010010010110011 strategic 00000000000000010010000000110000 disappointing 00000000000000010011100000010000 intelligence 00000000000110110101000010110000 43 00000000000000000000000000000000 operator 00000000000111101010100001110101 traffic 00000000000111100001101110000111 insurers 00000000000000000010100001110011 older 00000000000010000010101000110000 understand 00000000000111101011100110110010 gene 00000000000100100011111100001000 assistance 00000000000111101100001100100111 pushed 00000000000010000001001000110010 extent 00000000000111111110100000001111 word 00000000000111011100111101100111 1980s 00000000000000000000000000000000 calling 00000000000111101111110101000000 meetings 00000000000111110111010000100111 consecutive 00000000000000000000100001010000 surge 00000000000111111111101100110111 representing 00000000000100010000000000001010 Conn. 00100000000000000000000000000000 SCI 01000000000000000000000000000000 ready 00000000000001111100011000110010 adopted 00000000000110011001010000110010 46 00000000000000000000000000000000 requires 00000000000000010001000000010010 prior 00000000000000011000111000110010 worse 00000000000000000101001111000000 station 00000000000111101001110100001001 critical 00000000000000011000011000010000 strategies 00000000000111101100011100100011 USAir 01000000000000000000000000000000 turning 00000000000111111101100001000000 lawsuit 00000000000111101100100001100111 begun 00000000000110101010110000110010 underlying 00000000000000100000000100010000 Krenz 00100000000000000000000000000000 nuclear 00000000000000000001110000110000 surprised 00000000000011010101110000110010 easily 00000000000000100000010001110010 intends 00000000000111111000101000110010 Coors 00100000000000001010010000001000 contends 00000000000111011111010111000010 setting 00000000000011111110100001000000 predict 00000000000111110101100110110010 devices 00000000000111101101011001001001 extend 00000000000111001110111110110010 Petroleum 00100000000000000111001010101000 am 00000000000000000100111110000010 assistant 00000000000110000001001001110000 N.Y. 01000000000000000000000000000000 lenders 00000000000111111110010000110011 described 00000000000111100010110000110010 unlikely 00000000000111100101011000110010 finding 00000000000111111011110101000000 newly 00000000000000001111001001110010 collection 00000000000111111110000101100111 Calif 00100000000000000000000000000000 judges 00000000000000000000010110110011 CDs 01000000000000000000000000000000 politics 00000000000111101110010010100111 Agency 00100000000000001000010000100101 expressed 00000000000001010001010000110010 neither 00000000000000010000011011000000 bottom 00000000000000010011100011010000 advisers 00000000000110101110010110110101 track 00000000000000101001001010110111 indeed 00000000000111111111001011101000 watch 00000000001111101110101110110010 differences 00000000000111101111111010100111 observers 00000000000000000000000100010011 quarters 00000000000000010100010101111011 lives 00000000000111001111111101100011 48 00000000000000000000000000000000 extremely 00000000000000011100000001110010 Terms 00100000000111111111101100101111 pursue 00000000000111011111011110110010 Simmons 00101111111101101100001000001000 triggered 00000000000100010111010000110010 picture 00000000000111100110100101100111 resignation 00000000000111111111110001100111 knows 00000000000111101100110111000010 costly 00000000000000000100110010010000 publisher 00000000000111111111110000110101 Over 00100000000000000101000000001010 Until 00100000000000000110000000101010 Like 00100000000000000010000000001010 4.5 00000000000000000000000000000000 rival 00000000000001100110101001000000 Economic 00100000000000000011000000110000 branch 00000000000000101010110010000001 patent 00000000000000101000100000100001 millions 00000000000111101011111000101111 Quantum 00100000000000001011010100101000 names 00000000000110101111111101100011 Rockefeller 00100000000000001000000000001000 offerings 00000000000111101101001011100011 matters 00000000000111101101101010100011 generation 00000000000111010001111000111111 swings 00000000000111111011111110000011 proceedings 00000000000111101111001001000111 3.5 00000000000000000000000000000000 participants 00000000000110110100101001110011 opportunities 00000000000010001001101110100011 extended 00000000000011110000111001000000 ties 00000000000111001100110000100111 massive 00000000000000001000100000010000 style 00000000000111001101001001100111 Philadelphia 00100000000111101111111001101000 equivalent 00000000000111101111101100001111 class 00000000000011100110111100010000 appropriations 00000000000011000001001101010001 hear 00000000000110111110100110110010 Force 00100000000000101010010001010111 choice 00000000000111101010111101100111 specialist 00000000000000000101101110110101 Switzerland 00100000000111111110111101101000 eye 00000000000101111111111001100111 Messrs. 00101111111011000000110001111000 Pittsburgh 00100000000101101111111001101000 Trading 00100000000000000000000001011101 utilities 00000000000000000001110110110000 studies 00000000000100111000001000100011 simple 00000000000000001010011010010000 attorneys 00000000000000010111000010110011 ensure 00000000000111110100100110110010 flights 00000000000111100100101001100011 voting 00000000000011001000111100010000 heads 00000000000111000111000000010010 ratio 00000000000111111000111001000111 games 00000000000001000100101001100011 covered 00000000000011110001110000110010 creating 00000000000110111111111101000000 attack 00000000000111111101100100100111 carried 00000000000001100001001000110010 P&G 01000000000000000000000000000000 manufacturer 00000000000111100010100001110101 Stores 00100000000110100000100010101001 dozen 00000000000000000000010001010000 caught 00000000011111001100010000110010 takeovers 00000000000110101110000010100111 pharmaceutical 00000000000001011011011010110000 Bureau 00100000000000000000010001010101 obligation 00000000000000000111101100100111 pulled 00000000000101000001001000110010 succeed 00000000000110111001010110110010 stage 00000000000111101110101101100111 democracy 00000000000111101011110010100111 41 00000000000000000000000000000000 Fannie 00100000000001110111110101001000 pick 00000000000111000110010110110010 1981 00000000000000000000000000000000 invested 00000000000011000100010000110010 lawsuits 00000000000110101011110000100011 98 00000000000000000000000000000000 urged 00000000000001001101010000110010 pact 00000000000111101110111000100111 expanding 00000000000111000101010001000000 grown 00000000000011101010110000110010 Public 00100000000000000000110000110000 drives 00000000000101000111000000010010 34 00000000000000000000000000000000 administrative 00000000000000001001000000110000 500,000 00000000000000000000000000000000 suspension 00000000000111111111001101001111 politicians 00000000000110111100111000110011 allegations 00000000000111101111110000100011 contributions 00000000000111101110111100000011 Next 00100000000000000000010001100010 privately 00000000000010100001001001110010 colleagues 00000000000111111110110000110011 condition 00000000000111101110111101100111 Green 00100000000000001110010000001000 rebound 00000000000111111011101100110111 taxpayers 00000000000111101100111000110011 gross 00000000000100001001010101010000 moderate 00000000000000001010011100010000 specialty 00000000000010000101010000110000 constitutional 00000000000000001100000000110000 basic 00000000000000001010000000110000 ultimately 00000000000000000000001001110010 six-month 00000000000000000000000000000000 fans 00000000000100100010100000110011 85 00000000000000000000000000000000 virus 00000000000101110001001001000101 Ogilvy 00101111110111101111111010101000 purchasing 00000000000111101111110001000000 prompted 00000000000000010111010000110010 entertainment 00000000000000100010010010110000 plastic 00000000000000100010101010110000 bailout 00000000000000000000010111001111 illegal 00000000000000000000100110010000 ceiling 00000000000111111111100011000111 Delta 00100000000111101100010001101000 pushing 00000000000111111000110101000000 features 00000000001111000111000000010010 message 00000000000111111110111101100111 Red 00100000000001000010001000110000 turmoil 00000000000110101011111010100111 modern 00000000000000000100001000110000 initiative 00000000000000010100100011100111 Amex 00100000000000000010000000100101 radio 00000000000000000100001010110000 Drug 00100000000000001010111010110000 lowered 00000000000111110111111001000000 officers 00000000000111101110101010110011 India 00100000000111101011111101101000 presence 00000000000111110111101110100111 ran 00000000000011000001001000110010 supposed 00000000000111110110011000110010 bringing 00000000000111111110101101000000 easier 00000000000011000100011110010000 learned 00000000000111111000110111000010 Rica 00101111111011111000110000011101 brands 00000000000110101110001010101000 expense 00000000000111111111101111110111 troubles 00000000000111111110011000100011 ruled 00000000000111101101110111000010 permanent 00000000000010000001000000010000 severe 00000000000001010000000000010000 editorial 00000000000000001010010101010000 insured 00000000000000010100101001000000 grain 00000000000000000101101110110000 culture 00000000000111100011001001100111 reforms 00000000000111101111011000100011 personnel 00000000000000001001101101100001 36 00000000000000000000000000000000 fast 00000000000111100100110001110010 stock-market 00000000000000000000000000000000 resulting 00000000000000101001100100110010 none 00000000000111101101101000101111 Northrop 00100000000111101110101100101000 faster 00000000000000000011001111000000 amendment 00000000000011001100001000100111 investing 00000000000111111101000001000000 possibly 00000000000110011101000001110010 fair 00000000000000000001011010010000 sell-off 00000000000000000000000000000000 letters 00000000000111100100100101100011 per-share 00000000000000000000000000000000 banker 00000000000110101111001110110101 Lang 00101111111110101110100010001000 shot 00000000000101101010010110110010 chains 00000000000111100001000001110101 unable 00000000000111110100011000110010 Grand 00100000000000000000010110110000 population 00000000000111101010011000100001 MCA 01000000000000000000000000000000 promise 00000000000111101101111010110111 Davis 00101111111100111111001000001000 sellers 00000000000111111000101001110011 retailing 00000000000010000011111010110000 supported 00000000010011000101010000110010 answer 00000000000111110011111010110111 sets 00000000010111000111000000010010 hearings 00000000000111101011010000100111 pipeline 00000000000100000001111010110000 industrials 00001111111000000101110110110000 Nekoosa 00100000000111100001001010101000 Atlanta 00100000000111101101111001101000 wait 00000000000101110101010110110010 How 00100000000000000000001101000010 strongly 00000010000000000000010001110010 1.4 00000000000000000000000000000000 rapidly 00000000000000000000010001110010 sees 00000001000111100011000000010010 Harris 00101111111000011110010000001000 Bethlehem 00100000000111100010111000101000 Prudential-Bache 01000000000000000000000000000000 Once 00100000000000001000011011000000 tied 00000000010011001100110000110010 watching 00000000000111000001110101000000 luxury 00000000000011010000001010110000 elsewhere 00000000000111010100010001110010 progress 00000000000111101001111010100111 currencies 00000000000111111111100101110011 Before 00100000000000000100000000101010 instruments 00000000000000000000110001111001 elaborate 00000000000111111000110110110010 a.m. 00000000000000000000000000000000 Farmers 00100000000001001110111000110011 helping 00000000000111001010111000110010 seat 00000000000111101101001011100111 shipping 00000000001001000010110001000000 jointly 00000000000000010000010001110010 merchandise 00000000000000001111101010100001 comments 00000000000111111111101000100011 expanded 00000000000010100000111001000000 Atlantic 00100000000000000100011010101000 allowing 00000000000000010000001101000000 weaker 00000000000000000100001111000000 aerospace 00000000000011011111011010110000 founder 00000000000111111111111001101101 approve 00000000000111110011111110110010 temporarily 00000000000001000000010001110010 child 00000000000101101001111000100001 heard 00000000000111110110110111000010 63 00000000000000000000000000000000 dealer 00000000000000000000101110110101 1993 00000000000000000000000000000000 Fidelity 00100000000001011111111000101000 maximum 00000000000001101100011100010000 Source 00100000000000000101011000010101 match 00000000010111111111110110110010 Honecker 00101111111101011100110010001000 900 00000000000000000000000000000000 signal 00000000000111100111011010110111 blue-chip 00000000000000000000000000000000 types 00000000000111110101000100101111 membership 00000000000100111100001100100111 exposure 00000000000101111111110100100111 circuit 00000000000000000101010111100101 consultants 00000000000000001111000010110011 five-year 00000000000000000000000000000000 career 00000000000111101100010000000001 suits 00000000000111111011110000100011 sugar 00000000000000001011101110110000 collapsed 00000000000101100110001000110010 slid 00000000000001100001000100110010 Martin 00101111111000010000010100001000 Northern 00100000000000100000110110101000 import 00000000000000000001000100010000 rated 00000000000111111100010100110010 aide 00000000000011101100010110110101 Mark 00100000000111101010111100001000 playing 00000000000001001110100001000000 alternatives 00000000000111101011001110100011 Ross 00101111111000001010111000001000 FEDERAL 01000000000111111111101100110000 complained 00000000000111101111110111000010 processing 00000000000000000010000001100001 facing 00000000000000000100010101000000 merely 00000000100001000000001001110010 Wang 00101111111100101100110000001000 handling 00000000000111111110110001000000 somewhat 00000000000101001000010001110010 default 00000000000111101111010101010111 write 00000000000111101110101110110010 reducing 00000000000111111111011101000000 Young 00100000000000000001001000110000 killed 00000000000011110100010000110010 Food 00100000000000001111111010110000 cooperation 00000000000111100101111010100111 blame 00000000000111111110010010110111 becomes 00000000000000100000001000110010 carriers 00000000000111100100101011110011 eliminate 00000000000111001111111110110010 sophisticated 00000000000100000001010010010000 realize 00000000000110111100100110110010 Spain 00100000000111101110111101101000 anticipated 00000000000000001101001001000000 fresh 00000000000000011000010000010000 branches 00000000000000000011000001100011 subcommittee 00000000000000000010000001010101 father 00000000000111111111101110000001 causing 00000000000111111100101101000000 resume 00000000000111001001110110110010 attractive 00000000000000000010101110010000 Nikkei 00100000000011101101100011010000 58 00000000000000000000000000000000 Hungary 00100000000111110000111101101000 health-care 00000000000000000000000000000000 Bankers 00100000000110101110001111110011 seeks 00000000000000010100101000110010 represented 00000000000110010111010000110010 household 00000000000000110000101010110000 committed 00000000000101111000110000110010 published 00000000000111100000010000110010 fuel 00000000000000000000110110110111 McDonald 01000000000111101101111110101000 50,000 00000000000000000000000000000000 Georgia 00100000000111000111110001101000 circumstances 00000000000111101011101010100011 Israel 00100000000111100101111101101000 three-month 00000000000000000000000000000000 plastics 00000000000011111011111010110000 sudden 00000000000001100100100000010000 turns 00000000000111110001001000110010 one-year 00000000000000000000000000000000 friendly 00000000000000100001001100010000 mother 00000000000111100111011110000001 door 00000000000111011011111000000001 fields 00000000000000001001110001111001 hired 00000000101111101100010000110010 affiliate 00000000000111111110111001100111 impossible 00000000000111101101011110010000 promised 00000000000011011000110000110010 GNP 01000000000000000000000000000000 Stevens 00101111111110101100111000001000 Mac 00100000001001101100111110000010 chip 00000000000000001000001000100001 halted 00000000001000010100010000110010 transfer 00000000000111010111110110110010 criticized 00000000000110000101010000110010 Hampshire 00100000000000010001011110000010 status 00000000000111111101101001100111 Dean 00101111111100011111101000101000 claimed 00000000000010010101110111000010 RTC 01000000000000000000000000000000 rooms 00000000000100000110000001100011 Hewlett-Packard 01000000000000000000000000000000 formerly 00000000000000001110011010000010 love 00000000000100111110000110110010 Lawrence 00101111111000110000000010011000 retain 00000000000011111110001110110010 mine 00000000000000001011100010001001 Fe 00100000000000010000000001001000 died 00000000000110111110001000110010 revenues 00000000000111101100001100000011 Class 00100000000011100110111100010000 risen 00000000000111111010110000110010 GOP 01000000000000000000000000000000 Coast 00100000000000001001000010101000 Army 00100000000000000100101100100101 affairs 00000000000111101100001011111001 cold 00000000000000000101011010010000 nature 00000000000111111100111000001111 widespread 00000000000000010000000000010000 behalf 00000000000111111111001000000111 quiet 00000000000010101010011100010000 Mich. 00100000000000000000000000000000 metric 00000000000000000010010101010000 road 00000000000111111011111000000001 States 00100000000000000000000101110011 cheap 00000000000011100101011010010000 restaurant 00000000000000010001111010110000 one-third 00000000000000000000000000000000 deliver 00000000000101011111101110110010 enormous 00000000000000000100010100010000 becoming 00000000000111101011000101000000 harder 00000000000000000000011110010000 prison 00000000000001100110110101010111 normally 00000000000011100000001001110010 Carolina 00100000000000011100010101101000 Prices 00100000000000000000000110000111 Marshall 00101111111000000000000100001000 vs. 00000000000000000000000000000000 surplus 00000000000110101101100000100111 recorded 00000001000001101100010000110010 threatened 00000000000110111000110000110010 frequently 00000000000111100000001001110010 incentives 00000000000111101000101100000011 warning 00000000000001100011001011100111 corporation 00000000000111101111101001000101 hospital 00000000000000001000100000100001 acquiring 00000000000111111111110001000000 secondary 00000000000111111010111110110000 Sea 00100000000000000000011010101000 governments 00000000000111001000100001110011 targets 00000000000111100100011100100011 Stocks 00100000000111101110111011100011 filled 00000000000111010110010000110010 exactly 00000000000000011100001001110010 appointed 00000000000111000010010000110010 certificates 00000000000111111111111100101111 Banking 00100000000000000001000010110000 borrowing 00000000000000000000010000111001 CD 01000000000000000000000000000000 connection 00000000000111111101100000110010 identified 00000000000000010010110000110010 Illinois 00100000000000000111110001101000 800 00000000000000000000000000000000 FDA 01000000000000000000000000000000 viewed 00000000001111000010110000110010 complaints 00000000000110101011101000100011 nervous 00000000000100100111110000110010 regarding 00000000100110010000000000001010 ought 00000000000110000001101000110010 steady 00000000000001000011100000010000 Lockheed 00100000000110101111011100101000 subsidies 00000000000111100101001100000011 180 00000000000000000000000000000000 highway 00000000000000000110010010110000 variety 00000000000111111111111101111111 confident 00000000000111101111110000110010 delays 00000000000111100011011000100011 York-based 00100000000000000000000000000000 hot 00000000000000010001011010010000 shop 00000000000111100011110001001000 accounted 00000000000000001110110000110010 advice 00000000000111111011110100100111 encourage 00000000000101010011111110110010 structural 00000000001001000010000000110000 assume 00000000000111100100100110110010 determine 00000000000111101110011110110010 57 00000000000000000000000000000000 stands 00000000001111101000001000110010 99 00000000000000000000000000000000 THE 01000000000000000000000000100100 demands 00000000000111100111010000100011 two-year 00000000000000000000000000000000 stories 00000000000000001111110101100011 statements 00000000000110101101101000100011 Pennsylvania 00100000000111101111110001101000 profitability 00000000000111101011011010100111 identify 00000000000111111100011110110010 overnight 00000000000000011011010101010000 101 00000000000000000000000000000000 fighting 00000000000111001011110101000000 heat 00000000000111110000110110110111 Peabody 00101111111000001011101001001000 Walter 00101111111000000001010100001000 combination 00000000000111111111010000111111 2.3 00000000000000000000000000000000 commissions 00000000000111101010100100000011 cautious 00000000000010100111110000110010 awarded 00000000000100100000010000110010 Freddie 00100000001110010101110101001000 Workers 00100000000000000000000000110011 Gas 00100000000001000010011010110000 G. 00101111111011000001000011011000 student 00000000000000010010111000100001 favorable 00000000000000000000110010010000 agent 00000000000111101011110000110101 66 00000000000000000000000000000000 Coca-Cola 01000000000000000000000000000000 badly 00000000000100100000010001110010 users 00000000000111100000010000110011 62 00000000000000000000000000000000 thin 00000000000111111010011100010000 check 00000000000111100110001010110111 resulted 00000000000000001001100100110010 War 00100000000011101011000111111001 bridge 00000000000001000000110110100001 establish 00000000000111011111101110110010 changing 00000000000011100101010001000000 agents 00000000000000000011100000110011 15,000 00000000000000000000000000000000 pressures 00000000000111100110100100100111 retired 00000000000111100110101001000000 address 00000000000110011111110110110010 commitment 00000000000111111100111100100111 Chancellor 00101111110111110010010110010101 procedures 00000000000111100101111100100011 difficulties 00000000000111111101011000100011 numerous 00000000000000101001000011000000 maintenance 00000000000000000011000001100001 concept 00000000000111111101100000001111 39 00000000000000000000000000000000 Spielvogel 00101111111001100000000101001000 carries 00000000010000000011000000010010 university 00000000000111100000010000110101 2,000 00000000000000000000000000000000 friends 00000000000110100111110000110011 friend 00000000000111101011011110000001 theory 00000000000111011111111101100111 fundamental 00000000000000101010000000110000 divisions 00000000000111100000110000001001 disk 00000000000010101000001000100001 victory 00000000000111111111111010110101 Airways 00100000000000101011001010101000 portfolios 00000000000111101111101001101001 recalls 00000000000111111111011111000010 edition 00000000000111111001100001000111 coffee 00000000000100111001101110110000 occurred 00000000000000000110001000110010 Radio 00100000000000000100001010110000 formal 00000000000000000011000000010000 Christmas 00100000000000000000000000100001 leaves 00000000001000000011000000010010 1.25 00000000000000000000000000000000 200,000 00000000000000000000000000000000 syndicate 00000000000111101011000010000001 reputation 00000000000111101111101110100111 AIDS 01000000000010001110101000110000 credits 00000000000111111100101100000011 effectively 00000000000011000000010001110010 apply 00000000000111011111010110110010 acting 00000000000001000000000001000000 insist 00000000000001111001100110110010 looked 00000000000111101000001000110010 Latin 00100000000000010000100110101000 tape 00000000000110011001011000000001 player 00000000000111101111111010110101 reasonable 00000000000010100000000000010000 color 00000000000110101100001010110000 delayed 00000000010001010100010000110010 tobacco 00000000000000011011011010110000 resistance 00000000000111001011001100100111 boom 00000000000111110011101010100111 High 00100000000000000001011100010000 totaling 00000000000000000010100100110010 two-thirds 00000000000000000000000000000000 unlike 00000000000110111001101001000010 speculators 00000000000100000001001000110011 retailer 00000000000111100100100001110101 Virginia 00100000000000001110110001101000 generate 00000000000111101111101110110010 consensus 00000000000111100011111101100111 Giants 00100000000111101101000011110011 voice 00000000000111101001110000000001 handful 00000000000111111111101101111111 Authority 00100000000111101001110100100111 billions 00000000000111101111011000101111 silver 00000000000011101011101110110000 1979 00000000000000000000000000000000 regulation 00000000000101001110011010100111 exploration 00000000000110101001100001100001 Miami 00100000000110111011111001101000 organizations 00000000000110010000000100100011 Democrat 00100000000000000000011110110101 merchant 00000000000011010000111100110000 machinists 00000000000000011110100110110011 CenTrust 01000000000110001000110100101000 explain 00000000000111111010011110110010 Nevertheless 00100000000111110111101011101000 card 00000000000000000001110001111001 gasoline 00000000000000001001101110110000 fellow 00000000000001010000101000110000 faced 00000000000011010110010000110010 Daniel 00101111111000000100100010011000 surprising 00000000000010000010110110010000 Housing 00100000000000100110010010110000 worker 00000000000000100010111000100001 rivals 00000000000111100001110000110011 Breeden 00101111111010111010000010001000 Nicaragua 00100000000111001111111101101000 beer 00000000000000111011111010110000 violations 00000000000111111101100010100111 intense 00000000000000000000110100010000 plummeted 00000000000011000101000100110010 wonder 00000000000111001011100110110010 doubled 00000000000111001010110000110010 standing 00000000000110111011000001000000 compete 00000000000111101001010110110010 forms 00000000000111101111010100101111 NYSE 01000000000000000000000000000000 race 00000000000111111110000001100111 Turner 00101111111101101100110000001000 Bob 00101111111010000001010000011000 Bridge 00100000000001000000110110100001 King 00101111111100100011100000001000 son 00000000000111111011111110000001 African 00100000000000000101010100110000 street 00000000000000000000100010101000 Arthur 00101111111000000110010100001000 8.50 00000000000000000000000000000000 47 00000000000000000000000000000000 gap 00000000000110101001100000100111 basket 00000000000111111011011000111111 round 00000000000111101011111000111111 candidate 00000000000111101111101010110101 Massachusetts 00100000000101110111110001101000 1999 00000000000000000000000000000000 enter 00000000000111111011011110110010 Mercantile 00100000000000000111111110110000 River 00100000000000000000100010100101 Government 00100000000011100010101000100101 institution 00000000000111001111011001100111 scientific 00000000000001000001100000110000 Donaldson 00100000000100100110110000101000 Brazil 00100000000111101010111101101000 programming 00000000000111101010000100001001 steep 00000000000001000100100000010000 roll 00000000000010110110010110110010 blamed 00000000000001110101010000110010 indicates 00000000001001010011000000010010 inside 00000000000100110000000000001010 genetic 00000000000000111000101010110000 occur 00000000001011011101010110110010 54 00000000000000000000000000000000 dead 00000000000010001001110110010000 marketplace 00000000000111111110111001000101 aware 00000000000111111011110000110010 happens 00000000000001100110001000110010 Toyota 00100000000111101011011000101000 allows 00000000000000001001000000010010 MCI 01000000000000000000000000000000 table 00000000000111001110101101100111 Cleveland 00100000000111011001111001101000 writer 00000000000111101001011110110101 Cincinnati 00100000000110100001111001101000 legislative 00000000000001000000000000110000 Thompson 00101111111110101100001000001000 wholesale 00000000000001010101010000110000 Christopher 00101111111000001010000010011000 broke 00000000000000100001001000110010 Or 00100000000000000000001010000010 crucial 00000000000000111000011000010000 Las 00101111111111101111001101110000 machinery 00000000000011001011111010110000 applications 00000000000110100101010100100011 S&L 01000000000000000000000000000000 insurer 00000000000111011111011001100111 Detroit 00100000000111001001111001101000 genes 00000000000110111101110101100011 Mesa 00100000000110101100110100101000 B 00100000000000000000000000000000 Tom 00100000011000000100000000011000 Barney 00101111111011010011000101001000 downward 00000000000000001111010001000000 English 00100000000000001100111100100001 places 00000000000111101111000010100011 Seoul 00100000000010111111111001101000 2.2 00000000000000000000000000000000 mining 00000000000000000011011010110000 Social 00100000000000010101000000110000 deficit-reduction 00000000000000000000000000000000 begins 00000000000000101010001000110010 Thomson 00101111111111110101101000101000 remarks 00000000000111111110101000100011 paintings 00000000000001101101110101100011 Brooks 00101111111100101100000000001000 hoped 00000000000110111011101000110010 Equipment 00100000000101100000001001001001 requiring 00000000000110010000000000001010 bulk 00000000000111100100111000001111 reading 00000000000111101110110001000000 0.2 00000000000000000000000000000000 wave 00000000000111110111101000111111 Hall 00100000001100100100100000001000 shortly 00000000000100110000010001110010 downturn 00000000000111010111101010100111 P. 00101111111011000011101011011000 buy-back 00000000000000000000000000000000 Dutch 00100000000000010010100100110000 earn 00000000000101111111001110110010 closer 00000000000000100000111000110010 600 00000000000000000000000000000000 Perhaps 00100000000111111101000001110010 Companies 00100000000110100100100011110011 coal 00000000000001000100011010110000 rich 00000000000111001010011010010000 announce 00000000000111111101011110110010 trends 00000000000111101100100100100111 Asian 00100000000000000101000100110000 broader 00000000000000011000001111000000 sustained 00000000000000000010111001000000 send 00000000000010111110101110110010 after-tax 00000000000000000000000000000000 unemployment 00000000000010100001011100000111 dealing 00000000000111101001100000110010 goals 00000000000111110100111100100011 Baltimore 00100000000111011011111001101000 conducted 00000000010111001100010000110010 Do 00100000000111111111011100010010 blood 00000000000000000000010000100001 52 00000000000000000000000000000000 title 00000000000111110110100101100111 freedom 00000000000111011111110100100111 indication 00000000000111111110111110101111 bet 00000000000111111110011010110111 priority 00000000000111101010111010110101 franchise 00000000000000011000100000100001 stable 00000000000001100011100000010000 fast-food 00000000000000000000000000000000 Section 00100000000111001011100001000111 Says 00100000000111111111111111000010 contend 00000000000110111001100110110010 projections 00000000000100100101010000100011 Environmental 00100000000001000101000000110000 Options 00100000000110101110001111100011 developer 00000000000011100011110000110101 Darman 00101111111100100010000010001000 purpose 00000000000111101111010000001111 toy 00000000000000010011111010110000 unsecured 00000000000000000011100110110000 replaced 00000000010011010100010000110010 Maxwell 00101111111100110101110000001000 Composite 00100000000111111111111101110000 recovered 00000000000011100101000100110010 surprise 00000000000110101111101010110111 broken 00000000000110110010110000110010 submitted 00000000001001100000010000110010 6.5 00000000000000000000000000000000 appropriate 00000000000000000000101110010000 memory 00000000000000010100010000100001 linked 00000000000011001100110000110010 exceed 00000000000111100011001110110010 subsidiaries 00000000000111101111110000001001 expire 00000000000011011101010110110010 Products 00100000000000000000000011001001 electric 00000000000000001110010001001000 departure 00000000000111011111110001100111 Henry 00101111111000001000000010011000 respond 00000000000111110111010110110010 considerable 00000000000000000010000000010000 readers 00000000000111110111110000110011 Mason 00101111111000001000001010001000 Phoenix 00100000000110111111101001101000 FCC 01000000000000000000000000000000 hoping 00000000000110101100110000110010 Banco 00101111111111001100101000101000 husband 00000000000111111111011110000001 slump 00000000000111110111101010100111 Company 00100000000111101111111000000101 essentially 00000000001001000000001001110010 introduce 00000000000100111111101110110010 Much 00100000000111101011110001110010 Ill. 00100000000000000000000000000000 assembly 00000000000000000000000001111001 guy 00000000000111101010110010110101 meant 00000000000011101100110000110010 filings 00000000000111101111000011110101 Wells 00101111111010101100010000001000 schedule 00000000000111111110011010100111 mergers 00000000000111101110000010100111 Fla. 00100000000000000000000000000000 divided 00000000000010110010110000110010 slower 00000000000000101000001111000000 Nixon 00101111111000001010100110001000 delivered 00000000001111100000010000110010 interest-rate 00000000000000000000000000000000 sluggish 00000000000000001011100000010000 2.4 00000000000000000000000000000000 desire 00000000000111111001111100100111 records 00000000000010010110001000100011 Your 00100000000000000000010100000100 driving 00000000000111001100100001000000 video 00000000000000001000001010110000 sued 00000001100011000101010000110010 56 00000000000000000000000000000000 deep 00000000000000000110000000010000 renewed 00000000000000010101010001000000 BellSouth 01000000000111001111011100101000 deposit 00000000000000000000001110100001 covering 00000000010100010000000000001010 middle 00000000000101111111100011010000 seeing 00000000000111111001000101000000 narrow 00000000000000000101110110110010 grand 00000000000000000000010110110000 competing 00000000000000010010101001000000 planes 00000000000110111000101001100011 trip 00000000000110111111001011100111 Integrated 00100000000110011001101010110000 restaurants 00000000000111101111110001100011 Royal 00100000000010000001111000101000 importance 00000000000111101100111000001111 line-item 00000000000000000000000000000000 Hanover 00100000000011111001010001001000 charging 00000000000011010101111010000010 allegedly 00000000000010000001001001110010 pilot 00000000000000000011111000100001 acknowledged 00000000000111110011110111000010 host 00000000000111111111011100111111 payable 00000000000111011100010100110010 59 00000000000000000000000000000000 cells 00000000000111101011110110001001 citizens 00000000000111111111100000110011 El 00101111111011011111001101110000 enforcement 00000000000000000000010011100001 Witter 00101111111011100000000101001000 scale 00000000000111110011011001000111 intent 00000000000111111111110100100111 rape 00000000001001100101110010100111 Resolution 00100000000111100100110011100111 abortions 00000000000101101111010100000011 involve 00000000000000010001101110110010 guaranteed 00000000000010100001101001000000 Gary 00101111111000000000010000011000 750 00000000000000000000000000000000 arrangement 00000000000111111100111000100111 principle 00000000000111111110111101010111 Northeast 00100000000111111010001110101000 sufficient 00000000000000100110010001110010 fly 00000000000001011101010110110010 D.C. 01000000000000000000000000000000 Kodak 00100000000100110000000001001000 behavior 00000000000111101110101001100111 Wright 00101111111100001000001010001000 easing 00000000000101001111010001000000 appreciation 00000000000110100110111001100111 argument 00000000000111111011111001100111 relative 00000000000001011000111000110010 viewers 00000000000011100000111000110011 cast 00000000000110001010010110110010 plenty 00000000000111101100111000101111 sit 00000000000111111011010110110010 authorized 00000000000100101000111001000000 KKR 01000000000000000000000000000000 financially 00000000000110000000000001110010 Without 00100000000000111000000000001010 sensitive 00000000000000100100010010010000 Campbell 00101111111100101111001000001000 draw 00000000000000111110101110110010 watched 00000000000000101000010000110010 Organization 00100000000111101111011001100111 Corporate 00100000000000000000010000110000 130 00000000000000000000000000000000 Skinner 00101111111101100110010010001000 deadline 00000000000111101100101111100111 A$ 00100000000000000000000000000000 conduct 00000000000111100111110110110010 purposes 00000000000110111011101110100011 apparent 00000000000000001010110100010000 negotiated 00000000000011101100010000110010 Berlin 00100000000000001101000010101000 metal 00000000000000110100011010110000 achieved 00000000001110010010110000110010 creative 00000000000001001010000000110000 eased 00000000000000001101000100110010 95 00000000000000000000000000000000 successor 00000000000111111111001011100111 farm 00000000000000000111010000110000 Pont 00101111111110001100111110000010 La 00101111111111111001001101110000 Italian 00100000000000100010100100110000 maybe 00000000000111011101000001110010 handled 00000000000000001100010000110010 responded 00000000000101111011101000110010 Minneapolis 00100000000111111011111001101000 Carl 00101111111000000000101010011000 presented 00000000000001100000010000110010 testing 00000000000001000010110001000000 Fujitsu 00100000000110000111011100101000 efficient 00000000000000001100001110010000 squeeze 00000000000111100011001010110111 originally 00000000000000000101001001110010 correct 00000000000111000101110110110010 NEC 01000000000000000000000000000000 Hooker 00100000000111111000111100101000 Star 00100000000000000010100100100001 Wolf 00101111111000111011000010001000 catch 00000000000011110110010110110010 encouraged 00000000000101010101110000110010 stated 00000000000000000101110111000010 stood 00000000000001001000001000110010 secured 00000000000000001011100110110000 Holding 00100000000000010000000011100101 Money 00100000000111101110010100100111 entirely 00000000000001000000000001110010 educational 00000000000000010100000000110000 donations 00000000000111100110111100000011 experienced 00000000010011101100010000110010 imposed 00000001000011001100010000110010 optimistic 00000000000110000111110000110010 fee 00000000000111101101100011000111 arm 00000000000111111011110000110101 Du 00101111111001110011110101001000 shut 00000000000110111010010110110010 Acquisition 00100000000111101111110001001111 operators 00000000000111011110010000110011 defensive 00000000000000100011000000010000 starts 00000000000001011010001000110010 Lewis 00101111111100000001100100001000 selected 00000000000000000101101001000000 packaging 00000000001011001011111010110000 resolve 00000000000111011111110110110010 cycle 00000000000011010011001001100111 ranging 00000000000000010101100100110010 Rally 00100000000111101110101100110111 afford 00000000000111111001000110110010 sheet 00000000000001000000100110111001 2009 00000000000000000000000000000000 insists 00000000000111000111010111000010 promotion 00000000000111101111001001100001 consumption 00000000000111101111000100000111 defend 00000000000110101111111110110010 weather 00000000000111101111000001111001 Scott 00101111111010000001000100001000 joining 00000000000111111101101101000000 Interstate 00100000000001000001100001101000 Webster 00101111111101101011001000001000 Estate 00100000000100010000001100011101 rapid 00000000000000010000100000010000 definitive 00000000000000010001001100010000 Art 00100000000111101010111100100001 alliance 00000000000111101011011001100111 tight 00000000000001001011100000010000 sterling 00000000000110101101101100101000 succeeded 00000001000110001100010000110010 Fifth 00100000000100100111100011010000 exclusive 00000000000000010101010100010000 Little 00100000000000000000110000010000 aggressively 00000000000010100000010001110010 allies 00000000000111100110110000110011 Gen. 00100000000000000000000000000000 broadcast 00000000000000010100001010110000 regime 00000000000110110101101001100111 attitude 00000000000101111011111001100111 applied 00000000000111100000110000110010 location 00000000000111011101001001100111 Paramount 00100000000111110111111000101000 bear 00000000000111111100110000101000 Daiwa 00100000000000010100111000101000 Sam 00100000001001000001010100001000 Vegas 00101111111000010100110000011101 reluctant 00000000000110110100011000110010 license 00000000000111101011111010110111 participate 00000000000101111001010110110010 Foods 00100000000000001110100000101001 analysis 00000000000111100110111001100111 nationwide 00000000000000000001000001000111 forward 00000000000000010011111100110010 1974 00000000000000000000000000000000 program-trading 00000000000000000000000000000000 poverty 00000000000111101011011100000111 Lilly 00101111111110000011111010101000 copies 00000000000000000010010100101111 repair 00000000000000001011011110110111 Icahn 00101111111100101101010010001000 ship 00000000000111101101000110110111 Care 00100000000010000110010110111001 indicating 00000000000111010111111010000010 disappointed 00000000000101110101110000110010 Bonds 00100000000111101101100010000111 Indian 00100000000000001011010100110000 posts 00000000000111110110000001100011 carrying 00000000000000000000100101000000 fill 00000000000110111110101110110010 97 00000000000000000000000000000000 FHA 01000000000000000000000000000000 hardly 00000001100001000000001001110010 square 00000000000000010010010101010000 Is 00100000000000000000001000010010 Her 00100000000000000000001100000100 Yeargin 00100000000000000000000000000000 waste 00000000000111101111001010100001 convicted 00000000000111011011110000110010 canceled 00000000000010010100010000110010 Gold 00100000000111110100101110110000 loyalty 00000000000101101111110100100111 Connecticut 00100000000111010111110001101000 feeling 00000000000111110101110101100111 fashion 00000000000011100100111100100001 supplier 00000000000111101100100001110101 acts 00000000000111100101001000100011 holder 00000000000111100000111100010000 oppose 00000000000100111111111110110010 assumption 00000000000111111110010000001111 72 00000000000000000000000000000000 Howard 00101111111000001010010100001000 promises 00000000000111100010101000110010 20,000 00000000000000000000000000000000 winning 00000000000011001111110001000000 manage 00000000000111111010001110110010 Paper 00100000000110100100111010110000 apart 00000000000000011001111100110010 compares 00000000000111100111100000110010 III 01000000000000000000000000000000 Ferranti 00100000000000000111010100101000 burden 00000000000111111110101110001111 suddenly 00000000000100000000001001110010 engaged 00000000000110111110010000110010 employers 00000000000111111110111000110011 attempting 00000000000111111010011000110010 bullish 00000000000000000001101010010000 prefer 00000000000110111011000110110010 Steven 00101111111000000010010110011000 proved 00000000001001111100010000110010 Allen 00101111111000000100000100001000 ministry 00000000000000000011100110010101 learn 00000000000110101011100110110010 associate 00000000000000000110001001110000 engineers 00000000000000010110000000110011 evening 00000000000000001000110000010111 prospect 00000000000111111111010000001111 350 00000000000000000000000000000000 potentially 00000000001000000000000001110010 recapitalization 00000000000000000010000111001111 aside 00000000000000001001111100110010 plane 00000000000111101111001001000101 Information 00100000000110001011100010111001 compensation 00000000000101000010001000111001 swap 00000000000000000010010101110111 Third 00100000000000000011101011010000 shops 00000000000011101111110001100011 decades 00000000000000010100010011111011 Harvard 00100000000010011111111000101000 depressed 00000000000000000011101001000000 concentrate 00000000000101110110110110110010 pounds 00000000000000000000100100001011 expecting 00000000000111010001000101000000 kill 00000000000110011111111110110010 exceeded 00000000000001000001010000110010 nobody 00000000000100001010010001110010 4.6 00000000000000000000000000000000 weapons 00000000000111101110000110001001 Bull 00100000000111111110111110110000 recover 00000000000011101111001110110010 convert 00000000000111101010001110110010 semiconductor 00000000000000000101011010110000 dealings 00000000000111011100010000100111 search 00000000000111111111101100111001 device 00000000000111101100000011100111 approximately 00000000000000010111000001110010 OPEC 01000000000111101010011000101000 mayor 00000000000111111110010000110101 council 00000000000000000101010001010101 hits 00000000001101000111000000010010 Cross 00100000000110100010110100100001 ships 00000000000110111110000110001001 backing 00000000000111111011010001000000 rebounded 00000000000001100101000100110010 Telegraph 00101111111111101111110001001000 high-risk 00000000000000000000000000000000 indicators 00000000000111101100101010100011 borrowed 00000000000001000100010000110010 suffer 00000000000110110011110110110010 Steinhardt 00101111111000001101001000001000 3.1 00000000000000000000000000000000 calculated 00000000000111110001110000110010 Lufkin 00101111111011011011101001001000 testimony 00000000000111101101101000100011 remove 00000000000101111111111110110010 Law 00100000000001000000000010011001 Taiwan 00100000000111011110111101101000 partnerships 00000000000110101110000011110101 comfortable 00000000000001100111110000110010 uncertain 00000000000111100010110110010000 WCRS 01000000000000000000000000000000 manages 00000000000001001101000000010010 award 00000000000111101110101000110111 improvements 00000000000111111111011000100011 doctors 00000000000110000010111000110011 cheaper 00000000000001001101001111000000 peak 00000000000110001011011010100111 engine 00000000000001000010001010110000 Dennis 00101111111000001000100010011000 pulp 00000000001000000100011010110000 choose 00000000000110110011001110110010 credibility 00000000000111101111110100100111 consideration 00000000000111101110011010100111 classes 00000000000000000100100100101111 unions 00000000000111101111100110110011 Gonzalez 00101111111110010100111010001000 CIA 01000000000000000000000000000000 Blue 00100000000000000110001000110000 fined 00000000010011000000010000110010 professionals 00000000000000011111000010110011 Merieux 00101111111100001010100110010101 89 00000000000000000000000000000000 permission 00000000000100100101000100100111 factories 00000000000111101110110001100011 activists 00000000000100000001000010110011 dramatic 00000000000001000000000000010000 completely 00000000000000100000000001110010 participation 00000000000111111010001110100111 Li 00101111111100010000000100001000 duties 00000000000111110110101000100011 expert 00000000000110001111100000010101 Michigan 00100000000110110111110001101000 bureau 00000000000000000000010001010101 focused 00000000000001000000100000110010 cosmetics 00000000000000001011111010110000 cell 00000000000000011001110000100001 raw 00000000000111101010101010110000 LTV 01000000000000000000000000000000 capped 00000000000111110100010100110010 democratic 00000000000000000000011000110000 deaths 00000000000111101111000001100011 Germans 00100000000000000111000010101000 Maine 00100000000111011111110001101000 premiums 00000000000111101101000100000011 garden 00000000000000000011111100100001 difficulty 00000000000100101110110100100111 mainframe 00000000000000011000010000110000 character 00000000000111111111110000000001 Viacom 00100000000111101001010100101000 abandoned 00000000001110010100010000110010 Denver 00100000000111101001111001101000 knew 00000000000111001100110111000010 Beach 00100000000001000011000010100101 Orange 00100000000100000010011010101000 Jim 00101111111000000000100100011000 pieces 00000000000111101111100100101111 Roman 00100000000110101011011010101000 poll 00000000000000001000100000110111 Ortega 00101111111101100000110010001000 noting 00000000000111110111111010000010 53 00000000000000000000000000000000 grants 00000000000000000001110100100011 steelmakers 00000000000111101111000001110011 onto 00000000000000001100000000001010 1990s 00000000000000000000000000000000 eager 00000000000111101000011000110010 urging 00000000000001000001110101000000 beat 00000000000111000110101110110010 110 00000000000000000000000000000000 fit 00000000000110111110010110110010 Kennedy 00101111111100100000011010001000 permit 00000000000011111011101110110010 supporting 00000000000001111011011101000000 football 00000000000000000001001100100001 64 00000000000000000000000000000000 registered 00000000000001101100010000110010 broadcasting 00000000000010010010010010110000 three-year 00000000000000000000000000000000 Press 00100000000111000100001011000001 totally 00000000000000111000000001110010 blue 00000000000000000110001000110000 shape 00000000000111101010110010110111 distributed 00000000000011000000110000110010 imported 00000000000011100001101001000000 typical 00000000000000101000011000010000 writing 00000000000111110110100001000000 body 00000000000111100110101001100111 southern 00000000000000000000110110101000 reinsurance 00000000000000010000010010110000 timing 00000000000111011001111000001111 Pa. 00100000000000000000000000000000 motion 00000000000111011101001011100111 recommended 00000000000000101101110111000010 owed 00000000000001011000110000110010 discussing 00000000000111001110010101000000 pattern 00000000000111101110100101100111 1.9 00000000000000000000000000000000 leverage 00000000000110101111110100100111 controversy 00000000000111101010111010100111 tone 00000000000110111101111101100111 Roger 00101111111000001010010110011000 stability 00000000000111100111111010100111 obvious 00000000000000000100001110010000 Newport 00100000000110101110011010101000 NCNB 01000000000000000000000000000000 IRA 01000000000000000011111100001000 argues 00000000000111111011010111000010 papers 00000000000110100110001000100011 Corry 00100000000000000000000000000000 succeeding 00001111111111110110011010000010 comparison 00000000000111111111001011010111 Pictures 00100000000000000000000001101001 robust 00000000000000110011100000010000 discontinued 00000000000000010100010001000000 solid 00000000000000100011100000010000 arms 00000000000000000000001010100001 thinking 00000000000011111111110000110010 Engelken 00100000000000000000000000000000 retire 00000000000110111101010110110010 Maybe 00100000000111011101000001110010 weight 00000000000100001111110100100111 Four 00100000000111101111011001010000 struck 00000000001111001001001000110010 eyes 00000000000111111111101101100011 excluding 00000000000111011001101001000010 collateral 00000000000111111100110100100111 predicting 00000000000111111110110101000000 leads 00000000110000000011000000010010 Kenneth 00101111111000001010000110011000 bankruptcy-law 00000000000000000000000000000000 turnover 00000000000111101110001110000111 Herald 00100000000001110011010001001000 upward 00000000000000000011010001000000 CNN 01000000000000000000000000000000 bidders 00000000000111101101011001110011 anticipation 00000000000111111110111001101111 statistics 00000000000000000000100001111001 wheat 00000000000010100011101110110000 Avenue 00100000000000000000010010100101 pointed 00000000000111000001001000110010 projected 00000000000000000101001001000000 lowest 00000000000000001010000011010000 link 00000000000111111110001010110111 Ronald 00101111111000000110110100011000 answers 00000000000111110111001000100011 Mazda 00100000000111111011011000101000 exist 00000000001001011101010110110010 winter 00000000000100101001010000010111 Nicholas 00101111111000001000001100011000 Parliament 00100000000111101101101101101000 concrete 00000000000000101011000000010000 Remic 00100000000001011000000110110000 turnaround 00000000000110111101101010100111 glass 00000000000000000011111010110000 Kemper 00100000000111100011000100101000 Delmed 00100000000000000000000000000000 developers 00000000000111000110010000110011 Profit 00100000000111101111110000000111 ride 00000000000111110111001010110111 emphasis 00000000000111111110100100100111 6.9 00000000000000000000000000000000 Panamanian 00100000000001000000010100110000 longtime 00000000000000000100101001110000 Gramm-Rudman 01000000000000000000000000000000 monitor 00000000000011111111110110110010 novel 00000000000111101110101000100001 referring 00000000000111111101111000110010 Disney 00101111111000001100000001001000 hospitals 00000000000111111010110001100011 102 00000000000000000000000000000000 67 00000000000000000000000000000000 Cohen 00101111111100101101100010001000 Philippines 00100000000111110111111110110011 Neither 00100000000000010000011011000000 125 00000000000000000000000000000000 slowed 00000000000010011010110000110010 69 00000000000000000000000000000000 Currently 00100000000000111000001001110010 category 00000000000111101101001101100111 author 00000000000111111111010000110101 barely 00000000001011100000001001110010 resolved 00000000000100010010110000110010 telling 00000000000111000000001101000000 Warren 00101111111000000001000100001000 peace 00000000000000000000100111111001 promote 00000000000110111111111110110010 otherwise 00000010000000000000001001110010 storage 00000000000000000010100001100001 outcome 00000000000111111001111000001111 probe 00000000000111101111110001100111 discussed 00000000000100010100010000110010 Technologies 00100000000000000010001011101001 8.5 00000000000000000000000000000000 causes 00000000000110100111000000010010 Nomura 00100000000001000100111000101000 250,000 00000000000000000000000000000000 Nabisco 00100000000111110011000001001000 teams 00000000000010101001110101100011 sanctions 00000000000110100011110000100011 deny 00000000000110010100100110110010 contractor 00000000000000010000101010110101 labor-management 00000000000000000000000000000000 slight 00000000000000100100100000010000 aides 00000000000000000000010110110101 Westinghouse 00100000000111111100100100101000 indications 00000000000111111101011110101111 Capitol 00101111111111101011101000101000 Va. 00100000000000000000000000000000 younger 00000000000000010010101000110000 everybody 00000000000010001010010001110010 Fees 00100000000111101011100100000011 cleared 00000000000011111001010000110010 helps 00000000000000001011010000110010 tentatively 00000000000001100001001001110010 fail 00000000000111000111010110110010 wild 00000000000000000100011010010000 copy 00000000000111111101111000111111 spirits 00000000000011011011111010110000 mature 00000000000111100101110110110010 Hunt 00101111111110001100000000001000 breakers 00000000000111111010011111010101 Marine 00100000000101000000011010110000 Imperial 00100000000111100001111000101000 1972 00000000000000000000000000000000 happy 00000000000111000111110000110010 modestly 00000000000010001000010001110010 Beverly 00100000000111110010011010101000 extensive 00000000000000000101010100010000 merge 00000000000111101011011110110010 disclosure 00000000000111101101011101001111 club 00000000000000000010010100000001 unfair 00000000000110101001000110010000 straight 00000000000000001000100001010000 fired 00000000000001010100010000110010 favorite 00000000000000000111110000000001 Jeffrey 00101111111000000010000110011000 busy 00000000000000010100011010010000 Northwest 00100000000111100111110110101000 packages 00000000000110111111110100100011 raises 00000100000010000011000000010010 Zealand 00100000000000110001011110000010 2019 00000000000000000000000000000000 vulnerable 00000000000011000110011110010000 Sterling 00100000000110101101101100101000 Edison 00100000000000000011010001001000 detailed 00000000000000001011000000010000 Bankruptcy 00100000000000000000010111100101 attempts 00000000000111111011011100100111 insisted 00000000000110011111110111000010 Vice 00101111110001001000000001110000 Within 00100000000000011101000000001010 Tennessee 00100000000110101110110001101000 casino 00000000000000010101111010110000 dropping 00000000000111111000100101000000 developments 00000000000111100111101010100011 Golden 00100000000101000010001000110000 false 00000000000000000001000110010000 restore 00000000000011010010111110110010 Aetna 00100000000000000101111000101000 arguments 00000000000111001111101000100011 Squibb 00100000000011111100111100101000 supporters 00000000000100000010000010110011 hundred 00000000000110101110000001010000 StatesWest 01000000000000000000000000000000 indictment 00000000000111100100100001100111 700 00000000000000000000000000000000 church 00000000000111101011110001000001 eliminated 00000000000000010100010000110010 reaching 00000000000111101100100101000000 degree 00000000000111110111011001000111 scheme 00000000000111101100100011100111 penalties 00000000000111100111110000100011 findings 00000000000111100110101000100011 charity 00000000000111110000100000100001 receiving 00000000000001000100100101000000 departments 00000000000100110001110100100011 Director 00100000000111111111111000110101 Cos. 00100000000000000000000000000000 tiny 00000000000000000101010000010000 barrel 00000000000111111111111001011111 separately 00001111111111111111111011101000 Besides 00100000000111101001101001000010 advised 00000000000010001101010000110010 Aerospace 00100000000011011111011010110000 4.7 00000000000000000000000000000000 Third-quarter 00100000000000000000000000000000 stuff 00000000000111100101111101100111 vary 00000000000000110000010110110010 cellular 00000000000000111101011010110000 Free 00100000000000000010101001000000 therefore 00000000000011101101000001110010 loan-loss 00000000000000000000000000000000 Connaught 00100000000001011110111100101000 Coke 00100000000010011110110100101000 2.7 00000000000000000000000000000000 struggling 00000000000111110110111000110010 districts 00000000000101100010000100100011 Old 00100000000111111111001001100010 3.7 00000000000000000000000000000000 revive 00000000000111111010111110110010 Iowa 00100000000111111111110001101000 associates 00000000000111101111101011101001 productivity 00000000000000001101011100000111 requested 00000000001011101001010000110010 obtained 00000000001010001001010000110010 Reynolds 00101111111100010111000001001000 Van 00101111111110111010001000110000 second-largest 00000000000000000000000000000000 survive 00000000000101111101010110110010 whites 00000000000111100000111000110011 incentive 00000000000000100111101100100111 brain 00000000000000111001110000100001 dismissed 00000000100001010100010000110010 mainframes 00000000000111111111111001100011 reality 00000000000111111001110101100111 sending 00000000000111100000001101000000 presidential 00000000000000000000111000110000 Who 00100000000000000000101001110010 opponents 00000000000111111010000010110011 aspects 00000000000111111111110100101111 Commodity 00100000000111101111111110110000 3.3 00000000000000000000000000000000 Mississippi 00100000000111011100110001101000 gyrations 00000000000110101111111010100111 subscribers 00000000000000001000000000110011 Roberts 00101111111100101010111000001000 3.8 00000000000000000000000000000000 weakening 00000000000001000111010001000000 Tax 00100000000000000000000001110001 2.6 00000000000000000000000000000000 Gandhi 00101111111110110000101010001000 guide 00000000000111110001111010110111 NASA 01000000000000000000000000000000 ticket 00000000000110011111100000100001 Unlike 00100000000110111001101001000010 Attorney 00100000000000001110110000110101 lots 00000000000111101001111000101111 2.8 00000000000000000000000000000000 Program 00100000000111101111100011100111 screen 00000000000111111001011000000001 vast 00000000000010010000100000010000 failing 00000000000111011010111000110010 Rey 00101111111100000110001010001000 asbestos 00000000000000000010010000100001 Allianz 00100000000000000000000000000000 140 00000000000000000000000000000000 Bancorp 00100000000000001011010001001000 expires 00000000001001100110001000110010 versions 00000000000111100101000100101111 display 00000000000111100010001010110111 wish 00000000000011011110000110110010 assumed 00000000000111010101110111000010 segments 00000000000111111100000100101111 190-point 00000000000000000000000000000000 veteran 00000000000111100010011100111111 rare 00000000000001000000011010010000 Senator 00100000000011001001001100001000 61 00000000000000000000000000000000 flexibility 00000000000111001111110100100111 rebels 00000000000101101100101110110011 realized 00000000000111110000110111000010 Lawyers 00100000000000000111000010110011 asset-backed 00000000000000000000000000000000 biotechnology 00000000000000010011011010110000 sentiment 00000000000111100110111010100111 technique 00000000000111100101000011100111 Nigel 00101111111011101010001010011000 engines 00000000000111110100101001100011 Tiger 00100000000010000100111000101000 respectively 00000000000111111111010011101000 Constitution 00100000000111101101111001000101 specifically 00000001000100000000001001110010 Funding 00100000000000000000100000111001 sat 00000000001110011110001000110010 foreign-exchange 00000000000000000000000000000000 treaty 00000000000111111010100011100111 danger 00000000000111111011110101100111 start-up 00000000000000000000000000000000 fueled 00000000000010100111010000110010 anyway 00000000000001100100010001110010 underwriter 00000000000000000001101000110101 brother 00000000000111101101111110000001 approached 00000000000010000101010000110010 teachers 00000000000011101100111000110011 sitting 00000000000111000011000001000000 dominated 00000000001111101111010000110010 Brands 00100000000110101110001010101000 complain 00000000000110011001100110110010 repurchase 00000000000000000001010101110111 outlets 00000000000111101000110010101001 violated 00000000000011101001010000110010 lists 00000000010011000111000000010010 counter 00000000000111111011110110110010 experiments 00000000000111001110001000100011 plays 00000000011111000111000000010010 K 00100000000000000000000000000000 greatest 00000000000000000101010011010000 bolster 00000000000101110010111110110010 scores 00000000000111101110100100101111 Mary 00101111111000000110000000011000 Far 00100000000111111101110001110010 ton 00000000000111110111000001000111 economics 00000000000111101110101101100001 subsequent 00000000000000000001101100010000 checks 00000000000111000000001000100011 barriers 00000000000110101011001000100011 stakes 00000000000111110100001110100111 Kansas 00100000000000010000011010101000 surveyed 00000000000100010000010001110010 explains 00000000000111111101011111000010 blow 00000000000111111001111000110111 Giuliani 00101111111001001000001010001000 3.9 00000000000000000000000000000000 Jenrette 00101111111000001011110001001000 permitted 00000000001001011000110000110010 disease 00000000000111111101110010100111 Sullivan 00101111111100101100111000001000 planners 00000000000000000111010110110101 bases 00000000000111100001010110001001 fixed-rate 00000000000000000000000000000000 Mobil 00100000000111101111011100101000 seller 00000000000111111100100101100111 Galileo 00100000000011000011101100101000 incest 00000000000000000000000000000000 Daily 00100000000000001101000101010000 reductions 00000000000111101111110110000011 5.5 00000000000000000000000000000000 71 00000000000000000000000000000000 lift 00000000000100110010010110110010 warrant 00000000000000000011011010110111 interesting 00000000000000000001001110010000 articles 00000000000111100101110101100011 politically 00000000000100000000000001110010 depends 00000000000000001000100000110010 restructure 00000000000111110110001110110010 Barry 00101111111000100101010100001000 Alexander 00101111111100101100000100001000 Upham 00101111111111100001111010101000 Unisys 00100000000101100110111100101000 founded 00000001010011000101010000110010 newsletter 00000000000000000001001101000001 Island 00100000000100000101000010100101 debts 00000000000111111111000111100011 Sports 00100000000001000000001010110000 surrounding 00000000000010010000000000001010 ideas 00000000000111101110100101100011 apparel 00000000000000100011111010110000 preparing 00000000000111100110111000110010 diversified 00000000000000000100101001000000 House-Senate 01000000000000000000000000000000 225 00000000000000000000000000000000 precious 00001111111101010111111110110000 whatever 00000000000000000011101101000010 penalty 00000000000000000011000001100111 steadily 00000000000001001000010001110010 Rouge 00100000000000001101100010100101 psyllium 00000000000001110110110000100001 strategist 00000000000110111101101110110101 Wedtech 00100000000110100011101100101000 appointment 00000000000111110111110001100111 reset 00000000000000001101100110110000 plaintiffs 00000000000111110110100110110011 duty 00000000000110001111110100100111 shall 00000000000000000011010110010010 Malaysia 00100000000111111100111101101000 coalition 00000000000100000101101001100111 Banks 00100000000110101110000001110011 League 00100000000111111111010100000001 WPP 01000000000000000000000000000000 Anderson 00101111111100101111100010001000 Malcolm 00101111111000000100001100011000 adjustable 00000000000111110001010011000111 Colorado 00100000000111010011110001101000 rumored 00000000000111010110111000110010 surprisingly 00000000000111001100000001110010 Akzo 00100000000110100110111100101000 guys 00000000000111101110000100110011 13th 00000000000000000000000000000000 missing 00000000000011011111100001000000 scene 00000000000111111110101101100111 northern 00000000000000100000110110101000 Line 00100000000111101110000000100111 inventory 00000000000000000101011100000111 Midwest 00100000000111101110001110101000 attached 00000000000011000100110000110010 Hahn 00101111111000100100000010001000 Spanish 00100000000001000110100100110000 Mayor 00100000000111111110010000110101 convinced 00000000000111110101110000110010 Steve 00101111111000100010001000011000 traditionally 00000000000001011000001001110010 3.6 00000000000000000000000000000000 judicial 00000000000000100000000000110000 seriously 00000000100000000000010001110010 inquiry 00000000000110111111110001100111 borrow 00000000000100111111001110110010 committees 00000000000000001001000001010101 covers 00000000000001000001000000010010 risky 00000000000110000001010010010000 injunction 00000000000111110110111000100111 Rowe 00101111111011011010011100001000 baby 00000000000010001101101000100001 financed 00000000000001000001110000110010 Boren 00101111111101110000111010001000 5.3 00000000000000000000000000000000 Any 00100000000000000000010100010100 switch 00000000000111111101111000110111 urban 00000000000100000000001000110000 seasonally 00000000000101001111001001110010 load 00000000000010001000010011000111 resolution 00000000000111100100110011100111 hire 00000000010100111111101110110010 necessarily 00000000000010010100001001110010 climb 00000000000111111100011000110111 organized 00000000000010001001101001000000 commodities 00000000000111111101101110110000 involvement 00000000000111111100001110100111 residential 00000000000000001111010000110000 row 00000000000111100111000001000111 achieve 00000000000011111111101110110010 assuming 00000000000111011101111010000010 master 00000000000110110011111000100001 performed 00000000001100010010110000110010 reportedly 00000000000000000110001001110010 secret 00000000000000001001111000010000 state-owned 00000000000000000000000000000000 long-distance 00000000000000000000000000000000 publication 00000000000110101011011010100111 bar 00000000000001000000000110110111 Small 00100000000000001001010000010000 attracted 00000000000001110111010000110010 improving 00000000000111010101010001000000 pays 00000000000110001101000000010010 cleanup 00000000000000000000111101001111 falls 00000000000011101000001000110010 neighborhood 00000000000111101110010000000001 financier 00001111111100001101100000110101 Others 00100000000000000110110010110011 controlling 00000000000001100000011100010000 taxable 00000000000000010000011100010000 admits 00000000000111010111010111000010 poison 00000000000100001100101000101000 studying 00000000000111101100010101000000 printing 00000000000011011011011010110000 clean 00000000000111101111110110110111 partial 00000000000000110000100000010000 produces 00000000000000001101000000010010 Pilson 00100000000000000000000000000000 kids 00000000000111100011111100110011 troops 00000000000101100010100000110011 worries 00000000000111101111011010101111 picked 00000000000111110011001000110010 fleet 00000000000111101110011000100001 businessmen 00000000000110100010011000110011 rallied 00000000000011000001000100110010 merged 00000000000001011010001001000000 FBI 01000000000000000000000000000000 USA 01000000000000000000000000000000 automatic 00000000000000001000101010110000 Seidman 00101111111000101011000010001000 refinery 00000000000111101110000010001001 excessive 00000000000000001001000110010000 well-known 00000000000000000000000000000000 rarely 00000000000100100000001001110010 Samuel 00101111111000001000001010011000 restricted 00000000001000000101101001000000 Jose 00101111111100000010000000011101 bondholders 00000000000111110110111000110011 dangerous 00000000000000010100010010010000 skeptical 00000000000111100111110000110010 Every 00100000000000000001000100010100 alleges 00000000000001111011010111000010 Urban 00100000000100000000001000110000 tells 00000000000101100011000000010010 Containers 00100000000111101101100111001001 Olivetti 00101111111100110111111010101000 4.2 00000000000000000000000000000000 equities 00000000000111101001011010100001 mountain 00000000000000000000110100100001 RATE 01000000000000001110101011000111 450 00000000000000000000000000000000 Society 00100000000111101011001001100111 Limited 00100000000001000000001001000000 curb 00000000000111100010111110110010 stress 00000000000111101110001010110111 pictures 00000000000000000000000001101001 Gov. 00100000000000000000000000000000 LONDON 01000000000111101111011001101000 3,000 00000000000000000000000000000000 MORTGAGE 01000000000000000100000110110000 foreigners 00000000000111011110111000110011 diluted 00000000000000111000010000110010 wages 00000000000111101111100100000011 climate 00000000000111111011101001100111 Ariz. 00100000000000000000000000000000 marked 00000000000001010111010000110010 pool 00000000000111001101100101100111 discipline 00000000000110111010011010100111 kinds 00000000000111111111100100101111 prepare 00000000000111000101001110110010 scenario 00000000000111011001111101100111 Waertsilae 00100000000000000000000000000000 bloc 00000000000101110101000010101000 3.4 00000000000000000000000000000000 retained 00000000100011101100010000110010 mention 00000000011111111111110110110010 negotiate 00000000000111111111011110110010 cards 00000000000111101101110001111001 Wilson 00101111111100100001001000001000 caution 00000000000111101100111010100111 Grenfell 00101111111000000111001001001000 streets 00000000000110111111111000001111 Gamble 00101111111111111011110001001000 withdrawal 00000000000111101110011101001111 count 00000000000111101100001000110111 68 00000000000000000000000000000000 Monieson 00100000000000000000000000000000 signaled 00000000000001000101110111000010 maintained 00000000000101110101110111000010 serving 00000000000011000100100101000000 page 00000000000100000111000001000111 defendant 00000000000111111101101010110101 greatly 00000000000000101000010001110010 famous 00000000000000011010000010010000 1973 00000000000000000000000000000000 7.5 00000000000000000000000000000000 Asked 00100000000111111101010000110010 Roh 00101111111000001000010110001000 stem 00000000000011010011110110110010 boards 00000000000111111010111101100011 liberal 00000000000000010010011000110000 legislators 00000000000000000101010010110011 consent 00000000000011000001000101001111 buys 00000000000001100101000000010010 notice 00000000000111001010011010100111 gotten 00000000000011111010110000110010 protests 00000000000111111010101000100011 reject 00000000011111111011111110110010 Day 00100000000111111111111000010111 requests 00000000000111101110100100011001 Chief 00101111111111111111111001110000 30-day 00000000000000000000000000000000 anybody 00000000000000011010010001110010 theater 00000000000100010001111010110000 Second 00100000000000000000001011010000 Maryland 00100000000111001111110001101000 tools 00000000000110100110011111001001 tracks 00000000001111101111000000010010 farmer 00000000000100100000110010110101 Texaco 00100000000111101101101100101000 breaking 00000000000111111100100001000000 1995 00000000000000000000000000000000 milk 00000000001100001011111010110000 zero-coupon 00000000000000000000000000000000 Interest 00100000000000000000000110100111 Sciences 00100000000000000010100001001001 black-and-white 00000000000000000000000000000000 Lebanon 00100000000111111101011101101000 pollution 00000000000111011101000011100001 justify 00000000000011101011111110110010 Glass 00100000000000000011111010110000 petroleum 00000000000000000111001010101000 governor 00000000000011101110010000110101 adjustments 00000000000111100001011000100011 wine 00000000000100010011111010110000 quotas 00000000000111100100100100100111 Taylor 00101111111100101100001000001000 located 00000000000001001100010000110010 transferred 00000000001011011000110000110010 threatening 00000000000110111010111000110010 pull 00000000000011011110101110110010 EDT 01000000000000000000000000000000 Earnings 00100000000011001010100000000111 agrees 00000000000111100111010111000010 wire 00000000000101001110000000100001 setback 00000000000111111101111010110101 investigating 00000000000111110100010101000000 consistently 00000000001000000001001001110010 protected 00000000000011010001110000110010 conceded 00000000000111001111110111000010 Contras 00100000000111111111101110110011 Deutsche 00100000000010010001111000101000 contained 00000000000110000001010000110010 lobbying 00000000000001000000110001000000 Total 00100000000000000001111100010000 respondents 00000000000000000000000110110011 discounting 00000000000111111111010001000000 assist 00000000000111100001111110110010 Estimated 00100000000111100011100111000010 emerged 00000000000000111110001000110010 airport 00000000000010101010111010000001 economies 00000000000111101101101101100011 plea 00000000000110100111001011100111 Stein 00101111111101101011000010001000 periods 00000000000111100101101001000111 lies 00000000001000100110001000110010 benefited 00000000000111111001100100110010 feared 00000000000101100111110111000010 persuade 00000000000100011111111110110010 Maynard 00101111111101101001000100001000 momentum 00000000000111100110110100100111 Lines 00100000000111100110000000100111 killing 00000000000111101110100001110111 eggs 00000000001010101111110101100011 academic 00000000000000000100000000110000 slowly 00000010100000000000010001110010 sweeping 00000000000100010001000000010000 pleased 00000000000111101101110000110010 pill 00000000000011010011010001001000 Justin 00100000000000000110111000011000 walls 00000000000111100111010101100011 flying 00000000001001001110100001000000 bikes 00000000000011001111101001100011 Procter 00101111111111110111111010101000 valuable 00000000000000000000010010010000 Bloomingdale 00100000000110111101111110101000 conglomerate 00000000000111101001101111110101 competitor 00000000000111101110111010110101 clearing 00000000000000010000000010110000 interviewed 00000000110011000000010000110010 Harry 00101111111000010000010000011000 lire 00000000000000000001100000001011 Polish 00100000000001111000010100110000 Quotron 00100000000001001100100100101000 violation 00000000000111111111111001101111 sex 00000000000000111011110000100001 Agriculture 00100000000111111011110110110000 maturing 00000000000000001000010100110010 lackluster 00000000000000001001100000010000 park 00000000000100000001000010100101 73 00000000000000000000000000000000 concessions 00000000000111101111011100000011 electrical 00000000000000100000101010110000 Electronics 00100000000000000111011010110000 specified 00000000000101010000011100010000 hefty 00000000000000100000100000010000 Posted 00100000000000010001010000110010 depending 00000000000111111000100000110010 recognized 00000000001101000010110000110010 quotations 00000000000111111010101111100011 highs 00000000000000000010111001000111 RATES 01000000000111111111101101000011 hardware 00000000000011101000111010110000 Sons 00101111111111111111110001001000 resort 00000000000111101001011000000001 impose 00000000000001011111101110110010 drew 00000000000001001011000000010010 PAPER 01000000000110100100111010110000 COMMERCIAL 01000000000001000011010000110000 Merksamer 00100000000000000000000000000000 method 00000000000111111110100101100111 Marcos 00101111111100001010100000001000 PRIME 01001111111111101100010110110000 carefully 00000000001000100000010001110010 racketeering 00000000000010100001000000110000 Hamilton 00101111111100110111001000001000 mart 00000000000111000111000001001000 rescue 00000000000000001000011110110111 Pinkerton 00100000000101110101111110101000 responsibilities 00000000000111111111011100100011 LBO 01000000000000000000000000000000 leasing 00000000000000000100000001100001 happening 00000000000111110001110110010000 funded 00000000010001000001110000110010 asks 00000000000111001111010111000010 audit 00000000000000101110111001100111 indexes 00000000000000001000101001110011 Intelligence 00100000000110110101000010110000 facts 00000000000111101111110101100011 graphics 00000000000000001010010010110000 ultimate 00000000000000010000010011010000 Honda 00100000000111110011011000101000 shortage 00000000000110110111101010100111 Dynamics 00100000000000010110010001001000 downtown 00000000000000101000001000110000 sectors 00000000000111101101000010100011 Saudi 00100000000111111000101101110000 document 00000000000111101010110011100111 abuse 00000000000111110100100010100111 receipts 00000000000100001000001100000011 2.1 00000000000000000000000000000000 Overall 00100000000000000000000100010000 star 00000000000000000010100100100001 lease 00000000000000000001000110110111 emerging 00000000000111111111100001000000 passenger 00000000000000000001010101010000 Showtime 00100000000111011000101101101000 adjustment 00000000000111101001001000111001 Exchequer 00101111111100010101000110010101 doctor 00000000000111101101110010110101 bearish 00000000000000000010101010010000 edge 00000000000101101110111001100111 1976 00000000000000000000000000000000 confusion 00000000000111111100111010100111 suggesting 00000000000111011111111010000010 Education 00100000000111101111101101100001 LeBow 01001111111100001000100010001000 Bartlett 00101111111110011100001000001000 extension 00000000000111101110111001100111 sole 00000000000000100000010011010000 absolutely 00000000000110100000000001110010 Ralph 00101111111000000001100010011000 notion 00000000000111111111110000001111 Missouri 00100000000110001111110001101000 theme 00000000000011111101101001100111 print 00000000000111101000110110110111 recommendations 00000000000111101010101000100011 CBOE 01000000000000000000000000000000 Carnival 00100000000111101000111010101000 crowd 00000000000111111101101101100111 Oklahoma 00100000000001001000011010101000 replacement 00000000000001000000100000100001 2000 00000000000000000000000000000000 Proceeds 00100000000111101110000100100111 structures 00000000000111000000110100100011 solution 00000000000111111111111101100111 Results 00100000000111101111100000100011 driven 00000000011111110010110000110010 essential 00000000000001000110001110010000 Fox 00100000000100111010010000001000 boosting 00000000000111101001011101000000 Appropriations 00100000000011000001001101010001 Investments 00100000000111101111100001101001 metropolitan 00000000000000001000001000110000 flag 00000000000111001111111000000001 shipped 00000000100011000000010000110010 expiration 00000000000000000111111101001111 mill 00000000000111101011000010001001 walk 00000000000111011110010110110010 stance 00000000000111100111101110100111 entry 00000000000110011111110001100111 odds 00000000000111111011010000100111 somebody 00000000000011001010010001110010 ordinary 00000000000000000001101000110000 relationships 00000000000111100000010000100111 1,500 00000000000000000000000000000000 Economists 00100000000000000000000000010011 polls 00000000000000000110001000100011 admitted 00000000000011101001110111000010 grounds 00000000000111111101101110100011 jet 00000000000110101010001010110000 liabilities 00000000000111111110000111100011 37.5 00000000000000000000000000000000 targeted 00000000010001101100010000110010 screens 00000000000100001110101001100011 foot 00000000000111101011000001000111 monitoring 00000000000000011110110001000000 mix 00000000000111011100100101100111 implications 00000000000111111111001110001111 Rights 00100000000100000010000100100111 Commercial 00100000000001000011010000110000 concedes 00000000000111110111010111000010 2.9 00000000000000000000000000000000 repeatedly 00000000000000000001001001110010 attended 00000000000000000101010000110010 adequate 00000000000000000000000110010000 meaning 00000000000111111111011110101111 unprecedented 00000000000000001000110100010000 Bruce 00101111111000000100010000011000 Roy 00101111111001000100000010011000 Mexican 00100000000000000011010100110000 suppliers 00000000000111111100010000110011 Museum 00100000000010100111010100000001 electricity 00000000000000001100010000100001 recall 00000000000111001011110110110010 films 00000000000011101111110101100011 officially 00000000000000100001001001110010 Club 00100000000000000010010100000001 Enterprises 00100000000000000000101000101001 fifth 00000000000100100111100011010000 Code 00100000000111111111101111010101 upset 00000000000111001101110000110010 structured 00000000000110000010110000110010 credit-card 00000000000000000000000000000000 integrated 00000000000110011001101010110000 apple 00000000000111101110100100101000 + 00000000000000000100010101010000 sizable 00000000000000000100100000010000 400,000 00000000000000000000000000000000 Commonwealth 00100000000111111000101000101000 advocates 00000000000000001100000010110011 nice 00000000000010000000011010010000 posting 00000000000000100100100101000000 hiring 00000000000010001110110001000000 Kellogg 00100000000111110001110000001000 Vietnam 00100000000110101110101101101000 Warsaw 00100000000000111001001100010000 ambitious 00000000000000000111110100010000 conflict 00000000000111011110110000100111 Jacobson 00101111111101001001001000001000 Milton 00101111111010001111000110011000 suitor 00000000000111011001101010110101 fat 00000000000000110101011010010000 measured 00000000000111000001110000110010 PS 01000000000000000000000000000000 Post 00100000000000000010011101110111 discussion 00000000000111101010011010100111 finds 00000000000100100011000000010010 TW 01000000000000000000000000000000 pit 00000000000000000011011001000111 Craig 00101111111000010100010100001000 stepped 00000000000111111011001000110010 staffers 00000000000000001000000010110011 focusing 00000000000111111100100000110010 struggle 00000000000111101100110000100111 granted 00000000000001111100010000110010 cool 00000000001011100101110110110010 confirm 00000000000101111100100110110010 pleaded 00000000000110000110010000110010 wealthy 00000000000001001000101000110000 adopt 00000000000101111111101110110010 reporter 00000000000111011101011110110101 percent 00000000000000000011100001010000 concentrated 00000000000111101100100000110010 respect 00000000000110111110000110110010 money-market 00000000000000000000000000000000 Trelleborg 00100000000000000000000000000000 repeated 00000000000000000000111001000000 ignored 00000000101000010100010000110010 L.J. 01000000000000000000000000000000 a.m 00000000000000000000000000000000 artist 00000000000111110101100000110101 predicts 00000000000111101111010111000010 compliance 00000000000011000001100000110010 shared 00000000010011010001110000110010 103 00000000000000000000000000000000 characters 00000000000101101111110101100011 acres 00000000000000000000011100001011 involves 00000000001000100001000000010010 accident 00000000000111101101111001100111 recognize 00000000000010111100100110110010 tougher 00000000000010000100001111000000 clothes 00000000000110001111110101100011 lunch 00000000000111111110000000100001 shelf 00000000000000011000001001000000 Metropolitan 00100000000000001000001000110000 adverse 00000000000000100000010100010000 cubic 00000000000000000110010101010000 1960s 00000000000000000000000000000000 explained 00000000000111001011110111000010 Delaware 00100000000111100111110001101000 Franklin 00101111111001101100110100101000 consequences 00000000000111111110001110001111 crimes 00000000000111011110100010100111 chosen 00000000000101110010110000110010 permits 00000000001011000111000000010010 dumped 00000000000100001100010000110010 forcing 00000000000111110011101101000000 Glenn 00101111111010010000000100001000 Conner 00101111111001010000001000001000 tool 00000000000100000110001000100001 discrimination 00000000000111001110100010100111 Dorrance 00100000000000000000000000000000 injuries 00000000000111111110100010100111 Geneva 00100000000111000001111001101000 seasonal 00000000000000010111010101010000 claiming 00000000000111101111111010000010 obligations 00000000000111111111111100000011 ounces 00000000000000000000010100001011 apartment 00000000000111101100101010000001 Real 00100000000010101111111000110000 prominent 00000000000000000100000010010000 Brussels 00100000000111111001111001101000 Bates 00101111111110000110110000001000 repeal 00000000000011010111110110110010 decrease 00000000000111111000111000110111 landing 00000000000000000111100000100001 formally 00000000010000000001001001110010 Human 00100000000010000101000000110000 Greece 00100000000111000011111101101000 fundamentals 00000000000111101000101010100011 skills 00000000000111101111011100100011 missile 00000000000000000010001010110000 elderly 00000000000111110110101000110000 generated 00000000000001100111010000110010 midst 00000000000111111100111100001111 budgets 00000000000111101001110100100011 considerably 00000000000111111000010001110010 independence 00000000000101001111110100100111 soft-drink 00000000000000000000000000000000 edged 00000000000000001011001000110010 170 00000000000000000000000000000000 negotiators 00000000000000100110100110110011 strip 00000000000100111111110100100001 operated 00000011000011001100010000110010 Cathay 00100000000000000000000000000000 Diego 00101111111100000001100000011101 belief 00000000000111111110110000001111 cent 00000000000000000000001010001011 Mikhail 00101111111000000000001010011000 Minnesota 00100000000110101111110001101000 smoking 00000000000001000110010000100001 stretch 00000000000011101011001010110111 lend 00000000001011101111001110110010 Hospital 00100000000000001000100000100001 Russian 00100000000110000001011000110000 arguing 00000000000111111011111010000010 representative 00000000000100100111110000110101 Microsoft 00100000000111101011111100101000 62.5 00000000000000000000000000000000 Lotus 00100000000100110010100100101000 ends 00000000000011100110001000110010 Leader 00100000000011000100000110110101 wall 00000000000111111111011110101000 eliminating 00000000000110001001011101000000 overhaul 00000000000111111111010100110111 8.45 00000000000000000000000000000000 Eagle 00100000000000001100100100100001 expenditures 00000000000111111100100000111001 weaken 00000000000111111100111110110010 Colgate 00100000000111110100110100101000 discounts 00000000000111101000111100000011 500-stock 00000000000000000000000000000000 rely 00000000000011110110110110110010 useful 00000000000011000000010010010000 contest 00000000000111111111110010110111 Raymond 00101111111000000100000010011000 calm 00000000000101100101110110110010 Mass 00100000000111101010110100100001 toll 00000000000111110011000011000111 rises 00000000000111100010010110000011 Part 00100000000111111111111101101111 removed 00000000000110010100010000110010 durable 00000000000010110001010000110000 angry 00000000000010011010110100010000 suspect 00000000000001011110000110110010 INC. 01000000000000000000000000000000 suffering 00000000000101111101100001000000 tremendous 00000000000000100000000000010000 Anthony 00101111111000001100100010011000 Rothschild 00100000000101110011000001001000 treat 00000000010111111011111110110010 Bradstreet 00101111111110111111110001001000 touch 00000000000011011110010110110010 Dun 00101111111111111111111010101000 completion 00000000000111101111011101001111 refinancing 00000000000111000000100111001111 year-end 00000000000000000000000000000000 rain 00000000000011101111110010100111 BankAmerica 01000000000111100011001100101000 cap 00000000000110100001001010110111 breaks 00000000000111101110110010000011 Netherlands 00100000000111100111011110110011 Backer 00101111111110000011101000101000 Executive 00101111111000000000000101110000 vaccine 00000000000101110010111010110000 keeps 00000000101000000011000000010010 amounted 00000000000000101001101000110010 Antonio 00101111111100000011000000011101 Protection 00100000000110101011000100100111 Zenith 00100000000101100011000100101000 Southeast 00100000000000001010001110101000 Statistics 00100000000000000000100001111001 charities 00000000000110011000111000110011 Swedish 00100000000000000110100100110000 Rated 00100000000111111100010100110010 specify 00000000000111101100011110110010 interim 00000000000000001000010100010000 giants 00000000000111101101000011110011 golden 00000000000101000010001000110000 77 00000000000000000000000000000000 eligible 00000000000010001110110000110010 Jewish 00100000000001000000101000110000 EST 01000000000000000000000000000000 combat 00000000000011000111000110110111 signals 00000000000000001111000000010010 creates 00000001010000000011000000010010 aftermath 00000000000110110101111000001111 Alex 00101111111000000001110000011000 informed 00000000000101001011110000110010 restrict 00000000000001011010111110110010 Gerald 00101111111000000010000010011000 dream 00000000000111111101000101100111 cigarettes 00000000000111000111111001100011 0.3 00000000000000000000000000000000 fare 00000000000000000000001111110111 affiliates 00000000000111101101101010110011 incurred 00000000110011101100010000110010 Rather 00100000000011101111110111000000 dominant 00000000000000011100011000010000 Affairs 00100000000111101100001011111001 consistent 00000000000011010001100000110010 conviction 00000000000111100111111101100111 participating 00000000000111111110010000110010 rural 00000000000010000000001000110000 Field 00100000000111101111101000000001 triple-A 01000000000000000000000000000000 explanation 00000000000111111101101100100111 Giant 00100000000100000000100100100001 studios 00000000000110100101110001100011 visited 00000010000001000101010000110010 conspiracy 00000000000111111011100010100111 distributor 00000000000111100110100001110101 experiment 00000000000111110101101000110111 introduction 00000000000111111110111000001111 Foundation 00100000000011100001010001010101 drawn 00000000000011110010110000110010 offsetting 00000000000000010011011101000000 Lane 00101111111010000000000100001000 strengthen 00000000000111110010111110110010 Fiat 00100000000111100111011100101000 mentioned 00000000010100010010110000110010 installed 00000000100000001100010000110010 ghost 00000000000111010110110000000001 youth 00000000000101101001110000000001 Kentucky 00100000000111101000110001101000 league 00000000000111111111010100000001 agricultural 00000000000000001001010000110000 Cable 00100000000000000101001010110000 Already 00100000000000011000001001110010 tries 00000000000111011100101000110010 train 00000000000111101111100110110111 Hudson 00101111111001010011010001001000 executed 00000000100100001100010000110010 reacted 00000000000001111011101000110010 encouraging 00000000000000000011110101000000 south 00000000000010000010000110101000 testify 00000001000101111101010110110010 lows 00000000000011001010111001000111 racial 00000000000000001000000000110000 enable 00000000000111101011101110110010 Puerto 00101111111011110011001101110000 Tandem 00100000000000011100100100101000 Treasurys 00100000000111101111111011100011 converted 00000000001010110010110000110010 Sacramento 00100000000110010101101001101000 Area 00100000000111101110011001100111 polyethylene 00000000000010000100011010110000 Advertising 00100000000000000001101010100001 legislature 00000000000000000010111001000101 mission 00000000000111101011101001100111 earning 00000000000111101000100101000000 anywhere 00000000000011010100010001110010 redemption 00000000000111100111110101001111 Dollar 00100000000111111111111101000101 institute 00000000000010001001010001010101 unveiled 00000000101111111001010000110010 mood 00000000000111110111111101100111 Saab 00100000000100101111111100101000 Harold 00101111111000001110000110011000 thousand 00000000000000000010000001010000 Pierce 00101111111111100000001000001000 Lake 00100000001000001000011010101000 prospective 00000000000000000110111000010000 Tandy 00100000001011101111111100101000 classic 00000000000000001100000010010000 reopen 00000000000111011011011110110010 CFCs 01000000000000000000000000000000 routes 00000000000111101100101001100011 seed 00000000000000011110110110110111 consolidated 00000000000000000000000100101000 Chevron 00100000000111110111011100101000 mortality 00000000000011000000011100000111 nearby 00000000000001001000001000110000 loose 00000000000000100010011010010000 Jackson 00101111111100100100101010001000 1977 00000000000000000000000000000000 Feb. 00100000000000000000000000000000 speak 00000000100111111101010110110010 Irish 00100000000000110010100100110000 Pfeiffer 00100000000000000000000000000000 Chicago-based 00100000000000000000000000000000 unspecified 00000000000000000001100100010000 furniture 00000000000001000011111010110000 consortium 00000000000111101111101001110101 loyal 00000000000000111100010010010000 storm 00000000000111101010101101100111 cotton 00000000000111110011101110110000 Equity 00100000000000000000011010100001 ministers 00000000000000000000100110010101 creation 00000000000111110100111000001111 sparked 00000000000011100111010000110010 chose 00000000000000110011101000110010 picking 00000000001111001110100001000000 withdraw 00000000001011111111001110110010 terrorism 00000000000110100011110010100111 protest 00000000000111101110110010110111 stressed 00000000000111100111110111000010 weakened 00000000000010000010111001000000 Alaska 00100000000111111110010001101000 denies 00000000100000100011000000010010 Marina 00100000000100010010111000101000 76 00000000000000000000000000000000 visible 00000000000000010000010010010000 Well 00100000000111101110110001110010 Chevrolet 00100000000000111011111100001000 Hughes 00100000000011001010111000101000 secure 00000000000011100101110110110010 full-year 00000000000000000000000000000000 pesticides 00000000000111011001111001100011 Oppenheimer 00101111111110110111111010101000 compiled 00000000001011101111010000110010 application 00000000000100111011111001100111 passing 00000000000111001110100001000000 Mellon 00100000000010110001111000101000 aim 00000000000111111100111010110111 judgment 00000000000111101111000001100111 Christian 00100000000000001010011000110000 basically 00000000101001000000001001110010 manner 00000000000111101111111101100111 stayed 00000000100111011110001000110010 powers 00000000000100000111111100100011 Dataproducts 00100000000000000000000000000000 complicated 00000000000000010010010010010000 advances 00000000000111101001111000100011 conversion 00000000000111101001011101001111 featuring 00000001000010010000000000001010 conclusion 00000000000111111101010000001111 Robertson 00101111111100101000101010001000 Professional 00100000000000010000101000110000 victim 00000000000111110011101000111111 performing 00000000000010001110100001000000 averaged 00000000000000000100100100110010 lucrative 00000000000010000000000010010000 calculations 00000000000111110100101000100011 wealth 00000000000111101101110010100111 die 00000000000101011101010110110010 sum 00000000000111101011101010001111 unusually 00000000000110001100000001110010 owning 00000000000001010011111101000000 dump 00000000000000011111110110110010 bonuses 00000000000111101110000100000011 ranks 00000000000110001111111101100011 shock 00000000000110110111001010110111 refuse 00000000000101110111010110110010 poorly 00000000011000000000010001110010 banned 00000000100000010100010000110010 Frederick 00101111111000001101000110011000 quotes 00000000010000001111000000010010 brewing 00000000000011001011011010110000 Williams 00101111111000100001001000001000 mere 00000000000000110010010000010000 stockholders 00000000000111101111111010110011 acted 00000000000100111110001000110010 spinoff 00000000000111111111101001001111 Heritage 00100000000100011100100100100001 window 00000000000111010011011000000001 arranged 00000000011111101100010000110010 baskets 00000000000111001011100100101111 examination 00000000000101111000111001100111 Partnership 00100000000110101111100011110101 doubts 00000000000111101110111010101111 Cranston 00101111111111100000111010001000 TVA 01000000000000000000000000000000 properly 00000001000010000000010001110010 complaint 00000000000111101010100001100111 tourists 00000000000101100000111000110011 employer 00000000000111111101100000110101 visitors 00000000000001100000111000110011 quit 00000000000010111010010110110010 De 00101111111000000010010101001000 acknowledges 00000000000111111101010111000010 era 00000000000111111111011001100111 Rochester 00100000000111111101101001101000 reverse 00000000001111111111110110110010 injured 00000000011111110100010000110010 Channel 00100000000100000001111000000001 freight 00000000000000100010001010110000 tower 00000000000000010011011000000001 Societe 00101111111010001100101000101000 pursuing 00000000000111011110010101000000 opposite 00000000000010100011010011010000 bargain 00000000000111011101101010110111 contain 00000000000000110001101110110010 cattle 00000000000000010001101110110000 Utilities 00100000000000000001110110110000 Republic 00100000000100100001100100100001 Berkeley 00100000000111000111101001101000 automobile 00000000000000001100001110110000 Nobody 00100000000100001010010001110010 string 00000000000111111111110101111111 Nearly 00100000000000000111000001110010 widened 00000000000000011010110000110010 quota 00000000000000000111100011000111 proceed 00000000000111011001010110110010 Stone 00100000001100100001000000001000 Elsewhere 00100000000111010100010001110010 contribution 00000000000111101011111100100111 Machinists 00100000000000011110100110110011 campaigns 00000000000111101100100100100011 barred 00000000010110010100010000110010 overcome 00000000000000110010010110110010 stemming 00000000000000000001100100110010 Louisville 00100000000111011101101001101000 minute 00000000000111111010011000010111 ITT 01000000000000000000000000000000 idle 00000000001100100101110110110010 disasters 00000000000111100101001010100011 enjoy 00000000000101110110100110110010 Asset 00100000000000000001001010100001 spill 00000000000101101001001010110111 preserve 00000000000011110010111110110010 execution 00000000000110001111111101001111 born 00000000000101110100010000110010 counts 00000000000000000000010100101111 van 00001111111110111010001000110000 sister 00000000000111100101011110000001 hurricane 00000000000100100101100100100001 stabilize 00000000000101011010111110110010 contribute 00000000000111010011001110110010 Rican 00101111111000010010110000011101 links 00000000000100111110110000100111 Universal 00100000000001010000001000110000 Whitbread 00100000000000000000000000000000 perform 00000000000110101111001110110010 favored 00000000001011101100010000110010 Evans 00101111111100100110001000001000 intend 00000000000111111011000110110010 Shell 00100000000000000000011000101000 businessman 00000000000111100110011110110101 emerge 00000000000010111101010110110010 painting 00000000000111111111111000000001 repay 00000000000110101110001110110010 debut 00000000000111011111011010100111 pro-choice 00000000000000000000000000000000 Milan 00100000000101001111111001101000 8.55 00000000000000000000000000000000 shoppers 00000000000001101100111000110011 solve 00000000001111111011111110110010 S.p 00100000000000000000000000000000 4.8 00000000000000000000000000000000 matching 00000000000001001011011101000000 Buying 00100000000111101101110001000000 Carter 00101111111000001100100000001000 guess 00000000000101011110000110110010 creditor 00000000000001010000111100010000 stuck 00000001000111110110010000110010 afraid 00000000000110011011110000110010 failures 00000000000011011110000010100111 clearance 00000000000100110101000100100111 tendered 00000000100111110100010000110010 liquid 00000000000001100010101010110000 contains 00000000000100100001000000010010 murder 00000000000101111111011010100111 grant 00000000000000001010000110110111 lock 00000000000100110110010110110010 summit 00000000000111101100101111111001 indicator 00000000000110101110111001100111 spin 00000000000111010101001110110010 yielding 00000000000111101100010100110010 Operating 00100000000000000000000101010000 sentenced 00000000000111111010010000110010 Polaroid 00100000000111101010101100101000 regulator 00000000000000100111110000110101 Amendment 00100000000011001100001000100111 arbitragers 00000000000110100110000011010011 feels 00000000100100100011000000010010 revolution 00000000000111110101101001100111 RICO 01001111111100001100110000011101 actively 00000000000000010111001001110010 emotional 00000000000000001011110100010000 2.25 00000000000000000000000000000000 sounds 00000000001011101000001000110010 concerning 00000000001100010000000000001010 transport 00000000000011001111100110110111 Motorola 00100000000110101011111100101000 perception 00000000000111101111110000001111 aluminum 00000000000000001100011010110000 alive 00000000000010101111111100110010 atmosphere 00000000000110100111111001100111 contractors 00000000000000000010010000110011 Honeywell 00100000000111100101011100101000 compound 00000000000111000001001010110111 stadium 00000000000001101011000100000001 Southwest 00100000000001100111110110101000 Later 00100000000000000010001001100010 franchisees 00000000000110010111110000110011 Deposit 00100000000000000000001110100001 talked 00000000001111101011101000110010 Rock 00100000000101101110001100100001 crunch 00000000000111100110101101100111 comedy 00000000000000100110101000100001 Circuit 00100000000000000101010111100101 formula 00000000000111101101000011100111 salary 00000000000000100111100011000111 mines 00000000000000001111110001111001 regarded 00000000000101000010110000110010 publish 00000000000110101111101110110010 sand 00000000000111000110000000001000 arrested 00000000010111110100010000110010 obviously 00000000010001000000001001110010 narrowed 00000000000001101010110000110010 sick 00000000000010000010011010010000 Macmillan 00100000000111111110101100101000 4.9 00000000000000000000000000000000 drops 00000000000111000111010010000011 Albert 00101111111000001000010000011000 affair 00000000000111101101100011100111 rush 00000000000110111101111010110111 withdrew 00000000000011001111111001000000 Quebecor 00100000000000000000000000000000 Bristol-Myers 01000000000000000000000000000000 Katz 00101111111001101101001000001000 drawing 00000000000101001110100001000000 cocoa 00000000000111010011101110110000 clothing 00000000000011000011111010110000 Moore 00101111111110101000001000001000 lobby 00000000000111001110110010110111 arrangements 00000000000111100100010000100111 blocks 00000000000000101010100100101111 communities 00000000000111100110110001100011 striking 00000000000010000001000010010000 welcome 00000000001111100101110110110010 adults 00000000000000000000001100110011 111 00000000000000000000000000000000 referred 00000000001111101100110000110010 Indosuez 00100000000000000000000000000000 Late 00100000000000000001010100110010 studied 00000010001011000101010000110010 Cancer 00100000000000000110110010100111 DPC 01000000000000000000000000000000 Nelson 00101111111110000000000100001000 Candlestick 00100000000000000000000000000000 HBO 01000000000000000000000000000000 latter 00000000000000110101100011010000 letting 00000000000111111000001101000000 cargo 00000000000001100010001010110000 Safety 00100000000000000000000011100001 responding 00000000001111111010111000110010 underwriting 00000000000000000100000010110000 hedge 00000000000111111110110010110111 HealthVest 01000000000000000000000000000000 regularly 00000000100010000000010001110010 Turkey 00100000000111001110111101101000 chamber 00000000000111100100010000110101 agenda 00000000000111111110101001100111 violate 00000000000100101001101110110010 insider 00000000000111101010011100010000 honor 00000000010011111111110110110010 restated 00000000000111001010001001000000 Consolidated 00100000000000000000000100101000 engage 00000000000111110001010110110010 gathering 00000000001000000010110001000000 270 00000000000000000000000000000000 Hastings 00100000001101011100111010001000 Television 00100000000000000000001010110000 Aeroflot 00100000000000000000000000000000 Alfred 00101111111000000000011110011000 stems 00000000000001000001100100110010 5.9 00000000000000000000000000000000 broadly 00000000000110101000010001110010 definition 00000000000111111000111000001111 Ingersoll 00101111111100001100111000001000 Palo 00101111111111111011101101110000 matched 00000000000011000001110000110010 tickets 00000000000111010001101001100011 NFL 01000000000000000000000000000000 rolling 00000000000000111010100001000000 horse 00000000000000010110001100100001 unsuccessful 00000000000010000001110100010000 Are 00100000000000000000000100010010 operational 00000000000010000010000000110000 Moon 00100000000111000001111000000001 Bally 00100000000111101011010100101000 attempted 00000000000111100111101000110010 deterioration 00000000000111111011101010100111 establishment 00000000000111001011101001100111 bitter 00000000000000100001000000010000 restored 00000010000111010100010000110010 disputes 00000000000111101000010000100111 3.2 00000000000000000000000000000000 rolled 00000000100101101001001000110010 unclear 00000000000111001110010001110010 depend 00000000000110110110110110110010 Let 00100000000111101010100110110010 band 00000000000111101110000100000001 drink 00000000000101011100110110110111 Rico 00101111111100001100110000011101 Madison 00100000000111111110011010101000 bus 00000000000000110101111010110000 0.7 00000000000000000000000000000000 dozens 00000000000111101110111000101111 efficiency 00000000000111111010011010100111 employed 00000000010011001100010000110010 waves 00000000000001001100110101100011 Finally 00100000010000000000001001110010 bright 00000000000000010101011010010000 illegally 00000000010000100001001001110010 legitimate 00000000000110000001000000010000 serves 00000000000010001101000000010010 user 00000000000000010000111000100001 bureaucracy 00000000000111100011101001100111 Seattle 00100000000000111111111001101000 Fuji 00100000000101001001111000101000 Per-share 00100000000000000000000000000000 covert 00000000000000011011110000110000 rejection 00000000000111110111111101001111 green 00000000000000001110010000001000 Applied 00100000000111100000110000110010 Fargo 00101111111101010011111010101000 guilders 00000000000000000110100000001011 demanded 00000000000000110101110111000010 Renaissance 00100000000110010001100100100001 Nippon 00100000000000011000101101110000 affecting 00000000000001010000000000001010 successfully 00000000000010000000010001110010 treasurer 00000000000111111111111011101101 Aviation 00100000000000001110010010110000 brothers 00001111111000000001100001001000 lifted 00000000000011010100010000110010 Packwood 00101111111101101011111010001000 chances 00000000000111111110101000001111 crack 00000000001111110110010110110010 Consumer 00100000000011010001010000110000 5.8 00000000000000000000000000000000 knowledge 00000000000111111111111110101111 roads 00000000000111111110111001100011 investment-grade 00000000000000000000000000000000 CFTC 01000000000000000000000000000000 Issues 00100000000110100000001011100011 7.2 00000000000000000000000000000000 phase 00000000000111110110001000110111 derivative 00000000000101000001000000110000 Jon 00101111111000000100110110011000 promotions 00000000000111100111110100100011 stolen 00000000000101001101101001000000 Mutual 00100000000001001001111110110000 remember 00000000000111110110100110110010 1.50 00000000000000000000000000000000 notified 00000000000110101101010000110010 Earth 00100000000111111100000000100101 pro 00000000011111001010010000010000 6.79 00000000000000000000000000000000 sites 00000000000010000000110100100011 wind 00000000000111001110110110110111 licenses 00000000000111011111110100100011 personally 00000001100010000000010001110010 attacks 00000000000111101111100100100111 accepting 00000000000111100110111101000000 qualify 00000000000111100101001110110010 Spiegel 00101111111100010100110000001000 exposed 00000000000101011000110000110010 lay 00000000000111011010010110110010 promoting 00000000000101010011111101000000 0.9 00000000000000000000000000000000 Arrow 00100000000111111001110100100001 appearance 00000000000110111011111001100111 Upjohn 00100000000101101110111100101000 1997 00000000000000000000000000000000 amended 00000000000000100100111001000000 Value 00100000000111111111110010001111 College 00100000000010000011000001000001 Norman 00101111111000000110010000011000 intention 00000000000111111000111100100111 oversees 00000000000101001101000000010010 drove 00000000000010100001001000110010 unexpected 00000000000000000110010100010000 likes 00000000000111110100101000110010 understanding 00000000000111111100111110101111 functions 00000000000111100011101010100011 0.5 00000000000000000000000000000000 IMF 01000000000000000000000000000000 fled 00000001001011000101010000110010 harvest 00000000000001011010011000100001 Tele-Communications 01000000000000000000000000000000 strongest 00000000000000000011010011010000 Jerry 00101111111000000110000110011000 Bernstein 00101111111100111110111000001000 Toshiba 00100000000110001011111100101000 Put 00100000000111111010010110110010 exception 00000000000111101111101100100111 1971 00000000000000000000000000000000 jail 00000000000111101011110101010111 Prudential 00100000000111001001111000101000 Lone 00100000000111001101011000110000 Edwards 00101111111111111111111000001000 anticipate 00000000000111110101000110110010 Don 00101111111000000000110000011000 breach 00000000000111111011111001101111 intervention 00000000000111100000110001100111 salaries 00000000000111100110100100000011 sixth 00000000000100100011001011010000 Boesky 00101111111100111001010010001000 sentence 00000000000110011011000001100111 Levine 00101111111100111001110010001000 Graphics 00100000000000001010010010110000 steelmaker 00000000000000001000100001110101 coast 00000000000000001001000010101000 Angeles-based 00100000000000000000000000000000 25,000 00000000000000000000000000000000 spirit 00000000000100111111111000001111 Bronx 00100000000111110110110001101000 40,000 00000000000000000000000000000000 cigarette 00000000000000000010001000100001 resumed 00000000000000011010001000110010 symbol 00000000000111011110110110110010 Working 00100000000111001001000001000000 9.5 00000000000000000000000000000000 disagree 00000000000100111001100110110010 averages 00000000000111100000101001110011 Majority 00100000000111101111111100111111 Gray 00101111111100100011000000001000 1970 00000000000000000000000000000000 lived 00000000000100011110001000110010 understood 00000000000111101100110000110010 planner 00000000000111101111010110110101 routine 00000000000011001001000000010000 wear 00000000001011101110101110110010 Amoco 00100000000111001001011100101000 absence 00000000000111111111001000001111 consisting 00000000000001011010101000101111 Church 00100000000111101011110001000001 Guard 00100000000110100110100001111001 announcing 00000000000111111100111101000000 categories 00000000000000000001000010100011 journalists 00000000000111101000111000110011 Network 00100000000111101111111100001001 connected 00000000000000110001100000110010 railroad 00000000000000000001111010110000 Utah 00100000000111101110110001101000 FUNDS 01000000000110100000000110011001 agreeing 00000000000101111010111000110010 1996 00000000000000000000000000000000 immune 00000000000100001011010101010000 comptroller 00000000000111110110010000110101 gift 00000000000111111010010000000001 remainder 00000000000111111110111100001111 territory 00000000000111101001101001100111 1969 00000000000000000000000000000000 rent 00000000000111011010100110110111 RNA 01000000000000000000000000000000 patient 00000000000111101011111000100001 proposing 00000000000111101010111000110010 equaling 00000000000000001000010101010000 cyclical 00000000000010110010000000110000 mounting 00000000000000001101010001000000 Grace 00100000000000000110010000001000 absorb 00000000000001111111101110110010 satisfy 00000000000111010011111110110010 Meredith 00101111111001101000000100001000 6.25 00000000000000000000000000000000 dated 00000000000011010100010100110010 refund 00000000000100101111001010110111 investigators 00000000000000000001010010110011 AB 01000000000000000000000000000000 Nicaraguan 00100000000010000001011000110000 0.1 00000000000000000000000000000000 surgery 00000000001111101101110010100111 backlog 00000000000111100011000101100111 federally 00000000010100101111001001110010 Having 00100000000111000010111000110010 Excluding 00100000000111011001101001000010 bench 00000000000101010110011000000001 challenges 00000000000111111011001000100011 brings 00000000011000000011000000010010 meantime 00000000000111011110101001101000 tested 00000000000110001100010000110010 6.6 00000000000000000000000000000000 conversations 00000000000111111100010000100111 regions 00000000000111100101000010100011 93 00000000000000000000000000000000 Through 00100000000000010001000000001010 zero 00000000000001100101110110110010 married 00000000001111110100010000110010 rushed 00000000000010101011101000110010 congressman 00000000000111101110011110110101 Pemex 00100000000000000000000000000000 Colombia 00100000000111101000111101101000 inadequate 00000000000111110001000110010000 constantly 00000000001011000000010001110010 EPA 01000000000000000000000000000000 manufacture 00000000000100110111110110110010 combine 00000000000111100110001110110010 Finland 00100000000111110010111101101000 notably 00000000000001111011000001110010 Christie 00100000000100011101111110101000 locations 00000000000000011100110001100011 displays 00000000011101000111000000010010 190 00000000000000000000000000000000 100-share 00000000000000000000000000000000 motor 00000000000000000010100001001000 neighborhoods 00000000000111000100110001100011 Wallach 00101111111100100110100010001000 Block 00100000000110111111110110110010 passage 00000000000111101011110101001111 defined 00000000000011000010110000110010 escape 00000000000101011111110110110010 FTC 01000000000000000000000000000000 Foster 00101111111100010000110000101000 Chamber 00100000000111100100010000110101 Right 00100000000111100100111000110010 Unless 00100000000000000110101001000010 Car 00100000000000000000001000100001 Carpenter 00101111111101000000001000001000 Fort 00100000000010111111001101110000 employs 00000000001001001101000000010010 computerized 00000000000000000010101010110000 eat 00000000000100111110101110110010 considers 00000000000000100011000000010010 cumulative 00000000000000000100100110110000 couples 00000000000000001001111100110011 Wisconsin 00100000000111001110110001101000 Whatever 00100000000000000011101101000010 restructured 00000000000011000010111001000000 mills 00000000000000001011100000101001 Semel 00100000000000000000000000000000 Policy 00100000000110001000000011111001 pork 00000000000101000100011010110000 parking 00000000000000000000100000100001 PepsiCo 01000000000101100111111100101000 charter 00000000000000000000000100100001 Consider 00100000000111100110100110110010 bushels 00000000000000000001000100001011 repairs 00000000000111011110001000100011 accommodate 00000000000101110111111110110010 throw 00000000000011101110101110110010 enterprises 00000000000000000000101000101001 song 00000000000110101110101000100001 upscale 00000000100001010000001000110000 bias 00000000000111101100100010100111 86 00000000000000000000000000000000 drilling 00000000000000000000000001100001 enacted 00000000000101111001010000110010 assessment 00000000000111001110111001100111 Oregon 00100000000111111100110001101000 high-quality 00000000000000000000000000000000 Kemp 00101111111100110000010010001000 Sometimes 00100000000001100000001001110010 array 00000000000111000110111001100111 conducting 00000000000111111100010101000000 vowed 00000000000111110111101000110010 desk 00000000000111101110001110000001 Arnold 00101111111000000000110100001000 seize 00000000001111100011111110110010 anymore 00000000001001100100010001110010 wins 00001000001010000011000000010010 Ad 00100000000000100000101010100001 Where 00100000000000000100101001000010 nonperforming 00000000000000000000101001000000 movements 00000000000111111110010010000011 reviewing 00000000000111111110010101000000 surface 00000000000111111110111000000001 Hawaii 00100000000111110001111001101000 Hotel 00100000000011100101111010110000 81 00000000000000000000000000000000 reaches 00000000010010000011000000010010 promising 00000000000000001100010010010000 savings-and-loan 00000000000000000000000000000000 4.4 00000000000000000000000000000000 Cuba 00100000000111100011111101101000 Back 00100000000000000000111100110010 discovery 00000000000111101100011101001111 DNA 01000000000000000000000000000000 methods 00000000000111101101111100100011 Arkansas 00100000000111011110110001101000 ringers 00000000000000000000000000000000 Bass 00100000000000011011000000001000 technologies 00000000000000000010001011101001 misleading 00000000000001010000000110010000 suggestions 00000000000110001011101000100011 300-a-share 00000000000000000000000000000000 CORP. 01000000000000000000000000000000 donated 00000000000101000100010000110010 topic 00000000000111101001111101100111 N.J 01000000000000000000000000000000 speculated 00000000000111000111110111000010 Goodson 00100000000000000000000000000000 Marvin 00101111111000000001000110011000 shuttle 00000000000000010001100011010000 bells 00000000000111110010001110110011 lately 00000000000011100100010001110010 79 00000000000000000000000000000000 commissioner 00000000000111011011110000110101 Rubicam 00101111111101111111110001001000 background 00000000000111111111100000000001 solutions 00000000000111100111001110100011 registration 00000000000000000100100011110101 doors 00000000000111101110101101100011 financial-services 00000000000000000000000000000000 strikes 00000000000111100111001000100011 pressing 00000000000011000100110101000000 Arab 00100000000000000011000100110000 tax-exempt 00000000000000000000000000000000 diminished 00000000000011010100111001000000 spots 00000000000111101101110101100011 Seagram 00100000000111101111101100101000 windows 00000000000111101011110101100011 path 00000000000111101011111101100111 publicity 00000000000110100110111010100111 Ginnie 00100000000001110000110101001000 unrelated 00000000001001100000111000110010 Lorenzo 00101111111100101000001010001000 occasionally 00000000001100100000001001110010 reactions 00000000000111000111001000100011 mandatory 00000000000010001001000000010000 Nynex 00100000000110100111111100101000 regard 00000000000111011110000110110010 avoided 00000000110000010100010000110010 Growth 00100000000111100000001010100111 transfers 00000000000110101010001000100011 designs 00000000011011000111000000010010 1978 00000000000000000000000000000000 knocked 00000000001011001001001000110010 constant 00000000000001101011000000010000 historical 00000000000000110010000000110000 indicted 00000000101111110100010000110010 Louis-Dreyfus 01000000000000000000000000000000 wars 00000000000111101101001111111001 science 00000000000100100100001101100001 exact 00000000000000000110000100010000 submit 00000000000110111011011110110010 losers 00000000000111101111101001110011 7.6 00000000000000000000000000000000 columns 00000000000101100001110101100011 Investor 00100000000001000010000000110101 Miss 00100000000111100011111100001000 Executives 00100000000000000000100010110011 seized 00000000100101000101010000110010 code 00000000000111111111101111010101 Dingell 00101111111100100110111010001000 debacle 00000000000111101011010001100111 techniques 00000000000111001111110100100011 contact 00000000000110011110110000100111 Travel 00100000000001000100000000100001 sank 00000000000001000001000100110010 Contra 00100000000000001011011000110000 switched 00000000000011101011101000110010 1998 00000000000000000000000000000000 publishes 00000000001000011101000000010010 counted 00000000011011001100010000110010 wisdom 00000000000101100011111001100111 publishers 00000000000011110000010000110011 diseases 00000000000111001010101010100011 Nor 00100000000000000000011011000000 explaining 00000000000111101101111010000010 forest 00000000000111110100011010110000 Bolar 00100000000010101101000100101000 ignoring 00000000000111101111011101000000 households 00000000000010010100101001100011 cultural 00000000000011000000000000110000 shifting 00000000000110110111100001000000 explore 00000000000110011011011110110010 Members 00100000000000000100001010110011 Toronto-based 00100000000000000000000000000000 GAF 01000000000000000000000000000000 preference 00000000000000000110110101010000 signing 00000000000111110010110001000000 borrowings 00000000000111111100000010100111 Kingdom 00100000000000000010001010101000 sponsor 00000000000111111110011110110111 Space 00100000000000000010111010110000 massacre 00000000000111001101010001100111 vacant 00000000000110000100110110010000 ozone 00000000000011001001110000100001 conservatives 00000000000111101111010110110011 counterparts 00000000000111111111110000110011 trail 00000000000010101001001010110111 high-tech 00000000000000000000000000000000 kicked 00000000001011101001001000110010 deeply 00000000000010000000000001110010 mass 00000000000111101010110100100001 PC 01000000000000000000000000000000 Telecommunications 00100000000010011011011010110000 arrived 00000000000010111110001000110010 anxiety 00000000000111100100111010100111 designer 00000000000000011000100100100001 battered 00000000000100110001110000110010 6.4 00000000000000000000000000000000 7.875 00000000000000000000000000000000 provider 00000000000111101111011000111111 squeezed 00000001001111110010110000110010 Stockholm 00100000000111110111111001101000 border 00000000000111110011111000000001 careful 00000000000010001010010010010000 heating 00000000000111111000011000101000 execute 00000000000111010011011110110010 sooner 00000000000000100101001111000000 jewelry 00000000010000001011111010110000 Panzhihua 00100000000000000000000000000000 rout 00000000000111111101010001100111 learning 00000000000111111100110101000000 Litigation 00100000000111101110100010100111 Long 00100000000000000000110001110010 half-hour 00000000000000000000000000000000 unexpectedly 00000000000011001100000001110010 Sansui 00100000000000000000000000000000 Jay 00101111111000100100000010011000 computing 00000000000000000110000001100001 quietly 00000010001000000000010001110010 superior 00000000000000001000001001000000 egg 00000000000000000110101100100001 I. 00101111111111000000111011011000 30,000 00000000000000000000000000000000 pursuit 00000000000110111101111000001111 expired 00000000000000100110001000110010 Rose 00100000000000000000000100110010 maintaining 00000000000111011111111101000000 collect 00000000000010111111001110110010 NATO 01000000000000000010011000101000 Heavy 00100000000000000010011100010000 north 00000000000111100011100110101000 writes 00000000000110111011010111000010 expertise 00000000000111111000001110100111 None 00100000000111101101101000101111 Del 00101111111011111100010100001000 assassination 00000000000000000101110101001111 pop 00000000000001000100110110110111 pitch 00000000000100110101111010110111 Dick 00101111111001000101000000011000 disappointment 00000000000110000110111010100111 dual 00000000000101110010000000110000 maturities 00000000000111101001101001000111 Achenbaum 00100000000000000000000000000000 Garcia 00101111111000100101110010001000 listen 00000000000111100111010110110010 artists 00000000000000000000000111101001 error 00000000000111100111111001100111 drought 00000000000111100011101101100111 Andrew 00101111111000000000001110011000 prosecution 00000000000111111111100010100111 recording 00000000000000000010110001000000 Similarly 00100000000111100111111011101000 massage 00000000000000000000000000000000 Municipal 00100000000000000000000110110000 Records 00100000000010010110001000100011 Iron 00100000000111000010001000110000 female 00000000000011110000101000110000 rid 00000000000000000000111000101111 Guber-Peters 01000000000000000000000000000000 Citizens 00100000000111111111100000110011 Stamford 00100000000111110101101001101000 consists 00000000000000000000101000101111 objective 00000000000101100111111001100111 recognition 00000000000110101010011010100111 content 00000000000110111111110100100111 Conn 00100000000000000000000000000000 context 00000000000111100110111000001111 launching 00000000000101101111111101000000 passengers 00000000000000010000000000110011 fusion 00000000000110110101110000100001 Brooklyn 00100000000111010001111001101000 Airport 00100000000010101010111010000001 ignore 00000000000101011111111110110010 soybean 00000000000000000011101110110000 bridges 00000000000101101010000000001000 Advanced 00100000000000000011101010110000 defended 00000000001010101101010000110010 objectives 00000000000111110101011100100011 Femina 00101111111110011100110010001000 Common 00100000000000000000110101010000 Della 00101111111001100110000010011000 Congressional 00100000000000000100111000110000 jurors 00000000000110110010100110110011 Daly 00101111111101000010000010001000 multiple 00000000000000101001111000010000 schedules 00000000000000011111011100100011 popularity 00000000000111001011011010100111 Clark 00101111111100001111001000001000 Brian 00101111111000010010000010011000 feature 00000000000111110010001010110111 promotional 00000000000110100000000000110000 repeat 00000000000101111111110110110010 Eli 00101111111001110010010000001000 engineered 00000000000100100001101001000000 Eurocom 00100000000000000000000000000000 betting 00000000000111111010110101000000 Alto 00101111111000000100100100011101 Cellular 00100000000000111101011010110000 Anheuser 00100000000010000100110100101000 protesters 00000000000110101100100000110011 mess 00000000000111110101101101100111 army 00000000000000000100101100100101 Otherwise 00100010000000000000001001110010 sheets 00000000000001000001100110111001 sidelines 00000000000111111111011110110011 questioned 00000000000111101101010000110010 influential 00000000000010000000110100010000 rough 00000000000000000010011010010000 thereby 00000000000011011101000001110010 Goldberg 00101111111111111111100010001000 scrutiny 00000000000011111110011010100111 Manila 00100000000111001111111001101000 presidency 00000000000111110011000001100111 dinner 00000000000111110000000000100001 Acceptance 00100000000111100001111001111001 Montreal 00100000000110101111111001101000 exemption 00000000000111111111101000111001 psychology 00000000000001101110111010100111 truth 00000000000111111101111101100111 blocking 00000000000000001111011101000000 Sanford 00101111111100110111100010011000 88 00000000000000000000000000000000 colony 00000000000111111111110111000101 Typical 00100000000000101000011000010000 near-term 00000000000000000000000000000000 pregnant 00000000000100010010101000110000 seemingly 00000000000110001000000001110010 bonus 00000000000000000010100011000111 shed 00000000000000101110001110110010 ally 00000000000110000110111001100111 four-year 00000000000000000000000000000000 Yale 00100000000000101111111000101000 contended 00000000000110101111110111000010 Notes 00100000000111111111111010000111 seconds 00000000000000000000011100011011 Vincent 00101111111001000011010100001000 sport 00000000000101011110011000000001 insiders 00000000000000100010000010110011 spur 00000000000100111100111110110010 Mills 00100000000000001011100000101001 stripped 00000000000011001011110000110010 initiatives 00000000000111101001111100100011 optical 00000000000000010010101010110000 glasnost 00000000000110101111110010100111 Manuel 00101111111001010100000010011000 Commodities 00100000000111111101101110110000 Benson 00101111111000000000000101001000 teacher 00000000000101101001011110110101 Following 00100000000000000110100000001010 banning 00000000001110010000000000001010 figured 00000000000111101000110111000010 imbalances 00000000000110100100100000100111 cabinet 00000000000000000000000010000001 Hartford 00100000000111101110101001101000 Mike 00101111111000000010001000011000 seeds 00000000001011110111110101100011 Previously 00100000000000001101001001110010 Zurich 00100000001111111111111001101000 investigations 00000000000111001011110000100011 Mather 00101111111011110111110001001000 yes 00000000000111110011111011101000 intellectual 00000000001000100000000000110000 profit-taking 00000000000000000000000000000000 Everybody 00100000000010001010010001110010 Politburo 00100000000000000101101100100101 comprehensive 00000000000001001011000000010000 Wellington 00100000001011111111111001101000 unconstitutional 00000000000010110000110110010000 interstate 00000000000001000001100001101000 Sydney 00100000000100111111111001101000 0.4 00000000000000000000000000000000 slip 00000011000101111101010110110010 hampered 00000000001101000001110000110010 heading 00000000000110001110100001000000 opens 00000010000010000011000000010010 wider 00000000000001000100001111000000 genuine 00000000000011101001000000010000 Merck 00100000000111111101110000001000 somewhere 00000000000101010100010001110010 column 00000000000011001010001000100111 interbank 00000000000001001111001001110010 wearing 00000000000011001100100101000000 filling 00000000000111110101101101000000 tanks 00000000000110001110111001100011 drain 00000000000110100011001010110111 hurting 00000000000111011000001101000000 Thrift 00100000000000000011000000100101 pulling 00000000000100001110100001000000 Take 00100000000111111100101110110010 Reebok 00100000000101101111010100101000 plunging 00000000000011001010010001000000 Everyone 00100000000001001010010001110010 apiece 00000000000000000001001001000111 asserts 00000000000111011011010111000010 deciding 00000000000011111010111000110010 components 00000000000111100111011111001001 Teddy 00100000000010100000001000011000 apples 00000000000110010111111001100011 sweetened 00000000000000001010001001000000 tuition 00000000000000001000011100000111 item 00000000000001100111111001100111 Monetary 00100000000000010011000000110000 speculative 00000000001000000010000000110000 Murray 00101111111100000000000100001000 Silicon 00100000000110111110011010101000 4.3 00000000000000000000000000000000 Dan 00101111111000000000100010011000 Taipei 00100000000011110111111001101000 DES 01001111111011001111001101110000 acceptable 00000000000000000001101110010000 existence 00000000000111101110111000001111 Arby 00100000000110011001111110101000 Cowboys 00100000000000001010000100000001 wrongdoing 00000000000110111101100010100111 gaining 00000000000000001000100101000000 solely 00000000000000001011000001110010 Mercury 00100000000111101111110110101000 slashed 00000000000011001011111001000000 orderly 00000000000010001000110100010000 minimal 00000000000000011010000000010000 entering 00000000000101011111111101000000 Suisse 00100000000111111111110001111001 advisory 00000000000000000011000010110000 defaults 00000000000111101000010000000011 invited 00000000001101011000110000110010 truly 00000000000000001000000001110010 reasonably 00000000000000101100000001110010 recommend 00000000000111101100100110110010 6,000 00000000000000000000000000000000 announcements 00000000000110101111101000100011 Deloitte 00101111111011000111110000101000 supercomputer 00000000000001000101011010110000 actor 00000000000111101110100000110101 handed 00000000000011001001001000110010 interviews 00000000000110111100010000100111 Buick 00100000000110100111111100001000 booming 00000000000011011001100000010000 Means 00100000000110010011000000010010 6.7 00000000000000000000000000000000 prolonged 00000000000000110001000000010000 5.2 00000000000000000000000000000000 requirement 00000000000111111100110011100111 lesson 00000000000111010111111101100111 Revco 00100000000010010111111100101000 detail 00000000000111111101110101010111 Few 00100000000111111111110001010000 Bork 00100000001111101010011010001000 2004 00000000000000000000000000000000 homeless 00000000000111000010101000110000 ice 00000000000111111110001100100001 Fireman 00100000000111111101111110101000 scandals 00000000000111100111011100100011 moral 00000000000111000000000000110000 Greenwich 00100000000111101001001001101000 Pope 00101111111111101010100000001000 reopened 00000101000111010100010000110010 Healthcare 00100000000000100001100000110000 fan 00000000000111101000010100000001 dubbed 00000000000110110101010000110010 disputed 00000000000000010101001001000000 override 00000000011101111111110110110010 Maidenform 00100000000101100100110100101000 Carlos 00101111111011111000000010011000 shake 00000000001111010110010110110010 foundation 00000000000011100001010001010101 apartheid 00000000000011011101110010100111 incident 00000000000111101101101000110111 leases 00000000010101000111000000010010 observed 00000000000110000111110111000010 tables 00000000000000001010001000100011 liquor 00000000000100001011111010110000 sessions 00000000000000010001000001100011 Leonard 00101111111000000100010100001000 Dole 00101111111100100110011010001000 Comprehensive 00100000000001001011000000010000 urge 00000000000110101100100110110010 2003 00000000000000000000000000000000 saving 00000000001111110010110001000000 Tower 00100000000000010011011000000001 salesman 00000000000111110111101110110101 Rosen 00101111111100100110111000001000 Mitsui 00100000000110001001111000101000 witnesses 00000000000000100000000110110011 imminent 00000000000010000110110100010000 IRAs 01000000000000000000000000000000 violence 00000000000101101011111010100111 tension 00000000000101111011111010100111 Nashua 00100000001001100111111001101000 satellite 00000000000000100000001010110000 shipyard 00000000000111101000110010001001 assigned 00000000000100111000110000110010 frozen 00000000000000000001101001000000 Early 00100000000000000011010100110010 Nothing 00100000000010000010010001110010 proper 00000000001010000001000000010000 removing 00000000000010101011111101000000 trigger 00000000000111010011110110110010 Five 00100000000111111110111001010000 1975 00000000000000000000000000000000 upper 00000000000000001011100011010000 consolidation 00000000000111001011101010100111 Unfortunately 00100000000111111011111011101000 flows 00000000000100010001101010001111 golf 00000000000000000110001100100001 distribute 00000000000111001010001110110010 medicine 00000000000111101111110010100111 HDTV 01000000000000000000000000000000 5.4 00000000000000000000000000000000 crowded 00000000000011010000000010010000 wary 00000000010111101011110000110010 fend 00000000000111110101001110110010 bike 00000000000000101100001000100001 choices 00000000000111100110001110100011 postponed 00000010000011010100010000110010 integration 00000000000110011100111001100111 dark 00000000000111111101011010010000 bidder 00000000000111101001001010110101 Cities 00100000000111101100010001100011 pharmaceuticals 00000000000111111011111010110000 Merkur 00100000000000000000000000000000 attracting 00000000000000011111111101000000 Avery 00100000011011000100000100001000 N. 00101111111011000010111011011000 listening 00000000001011101010111000110010 Lexus 00100000000001011100001000100001 asserted 00000000000111101011110111000010 finish 00000000001011110110010110110010 Beers 00101111111111111100111110000010 researcher 00000000000111111011101110110101 bargains 00000000000111101101001110100011 Pan 00100000000111111010110101001000 LDP 01000000000000000000000000000000 Independent 00100000000000000011101000110000 bottle 00000000000111111011000101100111 enhance 00000000000111011010111110110010 Carbide 00100000000000001101001010101000 Max 00100000000011001000001000011000 communist 00000000000011000011011000110000 74 00000000000000000000000000000000 willingness 00000000000111111101111100100111 gradually 00000000010011000000010001110010 promptly 00000011001000000000010001110010 abandon 00000000000111101010111110110010 phenomenon 00000000000110101011111101100111 command 00000000000111101111000110110111 Larry 00101111111000000010000000011000 interpreted 00000000001010000010110000110010 minds 00000000000111011110111101100011 Plant 00100000000111101111111010001001 automatically 00000000000111000000010001110010 male 00000000000001110000101000110000 manufactured 00000000000110000001101001000000 McDonnell 01001111111111111010111000101000 87 00000000000000000000000000000000 Joe 00101111111000000010010000011000 scared 00000000000011001101110000110010 physical 00000000000011001010000000110000 Colo. 00100000000000000000000000000000 grip 00000000000111111110000011000111 bolstered 00000000001101100111010000110010 anxious 00000000000111001000011000110010 inquiries 00000000000111110010101000100011 winners 00000000000111100111101001110011 Waste 00100000000111101111001010100001 LIBOR 01000000000111110001001010101000 Amsterdam 00100000000111111110111001101000 Pepsi 00100000000010001100110100101000 stiff 00000000000000001000000000010000 interpretation 00000000000111111100111001100111 Will 00100000000000000000001110010010 Tokyu 00100000000000000000000000000000 arrest 00000000000111010101111010110111 tends 00000000000111000001101000110010 specializes 00000000000101111110010000110010 helicopter 00000000000000001010001010110000 assembled 00000000101011001100010000110010 Decker 00101111111111101011110001001000 quantities 00000000000111111001101010001111 240 00000000000000000000000000000000 dialogue 00000000000101001110110000100111 drama 00000000000111010101101001100111 mistake 00000000000111001111101010110111 chunk 00000000000111111111001110111111 regardless 00000000000111111110101000101111 Solidarity 00100000000000000111010010100111 demanding 00000000000111110001110101000000 instrument 00000000000000011101011001100111 box 00000000000000011010000001000111 Norfolk 00100000000111101011000100101000 depositary 00000000000011100010111010101000 throwing 00000000011111110110100001000000 AZT 01000000000000000000000000000000 growers 00000000000001000100010000110011 Elizabeth 00101111111011000010100000011000 thereafter 00000000010010100100010001110010 145 00000000000000000000000000000000 Israeli 00100000000000010011010100110000 patents 00000000000111111110001000100011 cancel 00000000000001101111111110110010 constitute 00000000000111110001101110110010 Kabul 00100000000101000011111001101000 transition 00000000000101111101111101100111 administrator 00000000000110111111110000110101 toys 00000000000111101110111001100011 voluntary 00000000000110010001000000010000 magnetic 00000000000010110010101010110000 prosecutor 00000000000000001001101010110101 challenged 00000000000100000101010000110010 recommendation 00000000000111111100101011100111 editors 00000000000111100010101010110011 authors 00000000000010000001000110110011 commercials 00000000000101001111110101100011 Short 00100000000000000000000001101111 deficits 00000000000110101110100000100111 phones 00000000000111001110101001100011 Wathen 00100000000000000000000000000000 Order 00100000000111111111011101010111 niche 00000000000111011110110000000001 Morishita 00100000000000000000000000000000 defeat 00000000000111111011110010110111 fought 00000000001011000101010000110010 stemmed 00000000000000100001100100110010 establishing 00000000000011101111111101000000 simultaneously 00000001001000000000010001110010 channel 00000000000100000001111000000001 tentative 00000000000000001001001100010000 U.N. 01000000000000000000000000000000 spends 00000000000011001101000000010010 Richmond 00100000000111111111101001101000 Armstrong 00101111111100110010001000001000 entrepreneur 00000000000111100101100000110101 label 00000000000111011111111000000001 Walt 00101111111111110000101101110000 cope 00000000000100101001010110110010 Brewing 00100000000011001011011010110000 protecting 00000000000110001011011101000000 Chicken 00100000000110010100011010110000 Farm 00100000000000000111010000110000 Saks 00100000000010111000011010101000 hidden 00000000000010000001101001000000 copyright 00000000000110000001000000110000 Parker 00101111111110001000001000001000 describes 00000000010100100011000000010010 sometime 00000000000000000110001001100010 resorts 00000000000111000100111000101000 warm 00000000001000000100011010010000 wells 00001111111010101100010000001000 Austin 00100000000111100110101001101000 terminated 00000100001001010100010000110010 singer 00000000000111001101110000001000 800,000 00000000000000000000000000000000 Obviously 00100000010001000000001001110010 Gardens 00100000000111100001011000000001 Francis 00101111111001110100000010011000 unnecessary 00000000000000101010000110010000 odd 00000000000000010110110100010000 convention 00000000000111100001101100100101 saved 00000000000100011100010000110010 crops 00000000000111110010110001100011 Gordon 00101111111000010100000100001000 Coniston 00100000000001000011110000001000 transplants 00000000000001110001110010100111 87.5 00000000000000000000000000000000 hotels 00000000000111001010110001100011 longstanding 00000000000000101001000000010000 160 00000000000000000000000000000000 Peru 00100000000111000110111101101000 Iran 00100000000111101111101101101000 tasks 00000000000111100101101010100011 Ky. 00100000000000000000000000000000 K. 00101111111011000011111011011000 steam 00000000000111101011110000100001 tradition 00000000000111111101001001100111 McDonough 01000000000000000000000000000000 empire 00000000000111110000100100100001 8.40 00000000000000000000000000000000 Mountain 00100000000000000000110100100001 thanks 00000000000111110101111000110010 strict 00000000000010101001000000010000 Monte 00101111111100000101001000110000 fed 00000000000111101111110000100101 laid 00000000000111100001001000110010 Commodore 00100000000110101111010100101000 strain 00000000000101100111001010110111 stages 00000000000111101100000100101111 exceeding 00000000000001001001000000001010 entity 00000000000111001101011001100111 perceived 00000000000010000010110000110010 delegation 00000000000111011111101001100111 writers 00000000000110101111100110110011 tourist 00000000000000000010101100100001 attacked 00000000001010000101010000110010 capable 00000000000100011011110000110010 limiting 00000000000000001001011101000000 exempt 00000000000101010011110110110010 Ciba-Geigy 01000000000000000000000000000000 Oliver 00100000000000011000010100001000 redeem 00000000000111101110001110110010 Terry 00101111111000000000101000011000 Margaret 00101111111011001100001010011000 freeway 00000000000001000110111000000001 satisfied 00000000001111101101110000110010 rhetoric 00000000000101101001101001100111 Chandler 00101111111000011100001000001000 chairs 00000000001001000111000000010010 Supervision 00100000001111100110011010100111 optimism 00000000000111000110111010100111 Internal 00100000000000000101000100010000 7.90 00000000000000000000000000000000 feed 00000000000111111000110110110111 shoes 00000000000101101101110101100011 Laboratories 00100000000010000001001011101001 slipping 00000000000111011010010001000000 decides 00000000000111001011101000110010 marginal 00000000000010100000011100010000 Charlotte 00100000000111111011001001101000 hitting 00000000000111011000100101000000 outcry 00000000001111101011111001100111 smoke 00000000000110001110110110110111 FAA 01000000000000000000000000000000 predecessor 00000000000111111101011110000001 dependent 00000000000111101000100000110010 Philippine 00100000000000000000010100110000 receives 00000000000000011101000000010010 raider 00000000000111111000101010110101 Mips 00100000000000000000000000000000 inspired 00000000000111100111010000110010 beef 00000000000111101111010110110111 Pizza 00100000000111010011001010110000 explosion 00000000000110101111111001100111 7.7 00000000000000000000000000000000 integrity 00000000000111110110111000001111 adjust 00000000000111110010001110110010 Forest 00100000000111110100011010110000 emissions 00000000000101100101000100000111 sponsors 00000000000110010010000010110011 Banque 00101111111111010011101000101000 Nonetheless 00100000000111111110101011101000 spoke 00000000011110011110001000110010 airing 00000000000011100110110001000000 resignations 00000000000101011111111000001111 Drabinsky 00101111111110101100110010001000 memo 00000000000100101110001011100111 fines 00000000000111110111110000100011 issuing 00000000000000111111111101000000 casting 00000000000011010010110001000000 doubling 00000000000101101111010001000000 reader 00000000000111101010111000100001 Nestle 00100000000111111100101100101000 J.P. 01000000000000000000000000000000 witness 00000000000111101000101010110101 billing 00000000000001010010110001000000 Hitachi 00100000000111101110111100101000 element 00000000000110001110111001100111 fares 00000000000000001001000100000011 excellent 00000000000000000011110100010000 hair 00000000000111001111110000000001 procedural 00000000000000010000000000110000 ski 00000000000000100010101100100001 Gen-Probe 01000000000000000000000000000000 enhanced 00000000000010000100111001000000 Vitro 00100000000011001010111100101000 appliances 00000000000111001111011111001001 textile 00000000000010111011011010110000 daughter 00000000000111111101101110000001 mounted 00000000001000001100010000110010 alleging 00000000000000000111111010000010 Anchor 00100000000111110100100100100001 96 00000000000000000000000000000000 GTE 01000000000000000000000000000000 discrepancies 00000000000010101111111010100111 insolvent 00000000000000011000101001000000 write-downs 00000000000000000000000000000000 Given 00100000000111111100010000110010 Axa 00100000000000010001010100101000 settling 00000000000110111010100001000000 concede 00000000000100011001100110110010 mid-October 01000000000000000000000000000000 advising 00000000000000001000001101000000 wood 00001111111100001010111000101000 armed 00000000000000010001101010110000 revived 00000000000001100010111001000000 7.50 00000000000000000000000000000000 historically 00000000000111011000001001110010 redemptions 00000000000111101110110000000011 Income 00100000000111111111010101000111 layoffs 00000000000111001110000010100111 compare 00000000000111001011011110110010 Sweden 00100000000111100011011101101000 Hungarian 00100000000000101000010100110000 relating 00000000000010100000111000110010 topped 00000000001000000001010000110010 impeachment 00000000000000100001111000010000 satisfaction 00000000000111100100001110100111 Florio 00101111111100110010001010001000 Soon 00100000000010110000010001110010 oust 00000000000000101011111110110010 Gibbons 00100000000111101100111000101000 altogether 00000000000101100100010001110010 Iran-Contra 01000000000000000000000000000000 takeover-stock 00000000000000000000000000000000 disabled 00000000000110111010101000110000 text 00000000000111111001111101100111 Voice 00100000000111101001110000000001 advantages 00000000000111111111011110100011 confrontation 00000000000111001110110000100111 Bradley 00100000000000000000100100001000 postpone 00000000011011111011111110110010 catalog 00000000000001001011111010110000 Brazilian 00100000000000000111010100110000 Hilton 00100000000000110100111000101000 D.T. 01000000000000000000000000000000 dress 00000000000111110100110110110111 contributing 00000000000011101010111000110010 animals 00000000000111101011111001100011 Tampa 00100000000111101101101001101000 rice 00000000000100001100000000001000 suburban 00000000000000010000001000110000 opinions 00000000000110100011111101100011 spurred 00000000010011100111010000110010 hybrid 00000000000000001111100100100001 bears 00000000000100100111000000010010 pride 00000000000111011110110010100111 overtime 00000000000000000010000000100001 Square 00100000000000010010010101010000 deteriorating 00000000000000110101010001000000 Shevardnadze 00101111111111100000110010001000 temblor 00000000000000000000000000000000 liquidation 00000000000111101001110101001111 conversation 00000000000101011110110000100111 fault 00000000000111110001110101100111 9.6 00000000000000000000000000000000 Reuters 00100000001000000111111000101000 tumble 00000000000111111101101100110111 dry 00000000000000000001110110110111 mediator 00000000000000000000101010110101 Bennett 00101111111100001000100100001000 cycles 00000000000111011000001010100011 substitute 00000000000111001010110010110111 exceptions 00000000000111001111001110100011 centennial 00000000000000001010111010101000 Kasparov 00100000000000000000000000000000 ranges 00000000000000001011011001000111 enjoyed 00000000000110011100010000110010 Orleans 00100000000000001001011110000010 Individual 00100000000000001001101000110000 audiences 00000000000110011111110000110011 equally 00000000000001100000000001110010 tenure 00000000000111101011101110100111 priorities 00000000000111101101011100100011 deductions 00000000000111111101001100000011 files 00000000000111101110001000100011 Arts 00100000000111101010101101100001 supports 00000000001010000011000000010010 Annualized 00100000000011111001000101010000 procedure 00000000000111011101000011100111 Ward 00101111111100101100010000001000 folks 00000000000111101111000100110011 Should 00100000000000000001010110010010 Show 00100000000111101011110110110010 O. 00101111111010000001101011011000 NATIONAL 01000000000001000000011100110000 substance 00000000000101100101111101100111 N.Y 01000000000000000000000000000000 Interpublic 00100000000001011001010100101000 basketball 00000000000000001001001100100001 Ill 00100000000111001110110100100001 Critics 00100000000000000011000010110011 850 00000000000000000000000000000000 symptoms 00000000001111110111110101100011 4,000 00000000000000000000000000000000 carbon 00000000000101100100101010110000 Shares 00100000000000000000000001001011 8.3 00000000000000000000000000000000 Bentsen 00101111111100100010011010001000 whenever 00000000000011110110101001000010 outlays 00000000000111100110100000111001 balloon 00000000000111111011001010110111 Ramada 00100000000000111101111100101000 1.15 00000000000000000000000000000000 enforce 00000000000001101011111110110010 trim 00000000000111100110111110110010 Victor 00101111111000000000011000011000 beneficiaries 00000000000111101010001010110011 Antar 00101111111100110000110010001000 650 00000000000000000000000000000000 bureaucrats 00000000000111001010100000110011 Tenn. 00100000000000000000000000000000 Delicious 00100000000000000000000000000000 climbing 00000000000111101010010001000000 rebates 00000000000100000000001100000011 Contel 00100000000111100101111100101000 exercisable 00000000000011100110110000110010 prompting 00000000000111110110001101000000 View 00100000000111111111110101100111 tactics 00000000000111001111011100100011 omitted 00000000000111111011111001000000 airports 00000000000111101111010001100011 Colombian 00100000000000100000010100110000 Michelle 00101111111000001100001000011000 comply 00000000000110101001010110110010 circle 00000000000101001100110100100001 presidents 00000000000110110111111001001101 surveys 00000000000000101010001000100011 Kraft 00100000000111111010101100101000 Private 00100000000000000100010000110000 payroll 00000000000111011111100000100001 counting 00000000000111001000100000110010 prime-time 00000000000000000000000000000000 anticipates 00000000010000100011000000010010 retiring 00000000000111010111100001000000 proceeding 00000000000111100111000001000000 grows 00000000000001101000001000110010 severely 00000000001000000000010001110010 supplied 00000000000101100111010000110010 advise 00000000000111010001111110110010 NWA 01000000000000000000000000000000 Holiday 00100000000000011000000000100001 surely 00000001000001000000001001110010 Clean 00100000000111101111110110110111 animal 00000000000011101101110000100001 N.C. 01000000000000000000000000000000 returning 00000000000111111010111000110010 Family 00100000000111100011111100000001 PCs 01000000000000000000000000000000 contrary 00000000000111110100111000110010 frequent 00000000001110000001000000010000 bound 00000000001011001100110000110010 corner 00000000000111111111000101100111 depository 00000000000000010010000000100001 gallery 00000000000110111111100100000001 strengthened 00000000000001000010111001000000 Telesis 00100000000010000111110110101000 exclude 00000000000001011001101110110010 Sisulu 00100000000000000000000000000000 depreciation 00000000000111100111011100000111 evaluation 00000000000111111000111001100111 reluctance 00000000000111010111111100100111 Wayne 00101111111001001001010100001000 Building 00100000000111010010110001000000 13.8 00000000000000000000000000000000 comeback 00000000000111010011101010100111 speculate 00000000000111011001100110110010 informal 00000000000000101000010100010000 Pennzoil 00100000000111101100001100101000 Volokh 00100000000000000000000000000000 low-income 00000000000000000000000000000000 evaluate 00000000000111011111111110110010 perspective 00000000000111111110011110100001 reduces 00000100010010000011000000010010 Columbus 00100000000111111101001001101000 Minpeco 00100000000110001011101100101000 newsprint 00000000000000010100011010110000 comic 00000000000000000010001000110000 watches 00000000100111100111000000010010 dance 00000000000001000111111100100001 refunding 00000000000000101000000110110000 talent 00000000000111111011100000100001 practical 00000000000000001001000000010000 dictator 00000000000110101001000110110101 Hoffman 00101111111100101000100010001000 Clearly 00100000000101000000001001110010 reward 00000000000111111010110010110111 subsidized 00000000000001011001101001000000 bellwether 00000000000000010011011000010000 Shannon 00101111111111101110000100001000 Plan 00100000000111111111111011100111 owes 00000000001011001101000000010010 Yamaichi 00100000000010101100111000101000 releases 00000000000000001001010000100011 replied 00000000000111101010010111000010 Ways 00100000000111111111111110100011 Bonn 00100000000110100101101101101000 Computers 00100000000111100111111001100011 openly 00000000010100000001001001110010 instant 00000000000000110000010100010000 visits 00000000000110000111001000100011 aided 00000000000101001111010000110010 Microsystems 00100000000000010000100001001000 lucky 00000000000001000111000100101000 privilege 00000000000101101111101001100111 drinking 00000000000111101100110110110111 SDI 01000000000000000000000000000000 settlements 00000000000111000000010000100111 Federated 00100000000111101110001100101000 Simon 00101111111100001100011000001000 ranged 00000000000000011101100100110010 mortgage-backed 00000000000000000000000000000000 impending 00000000000000001100010100010000 deeper 00000000000000000001101111000000 propose 00000000000101100011001110110010 God 00100000000111001110101101101000 ordering 00000000000000101011111101000000 experiencing 00000000000111101010010101000000 Arabia 00100000000000000000000001001000 introducing 00000000000011010011111101000000 favors 00000001110000000011000000010010 pain 00000000000111111110110010100111 evident 00000000000111010001110110010000 Ed 00101111111000000001000000011000 single-A-2 01000000000000000000000000000000 single-A-3 01000000000000000000000000000000 1.125 00000000000000000000000000000000 tourism 00000000000111111011001101100001 affluent 00000000000001000110101000110000 missed 00000000000110000100010000110010 190.58-point 00000000000000000000000000000000 corruption 00000000000111110110100010100111 retains 00000001000100000011000000010010 Further 00100000000000000000101111000000 Khmer 00100000000100011010011010101000 warns 00000000000111100011010111000010 Europeans 00100000000111101010100110110011 mechanism 00000000000111110101000011100111 Xerox 00100000000111101111111100101000 vision 00000000000111101101100101100111 telex 00000000000001101110111100101000 opposes 00000000110100100011000000010010 withdrawn 00000000000101010100010000110010 meat 00000000000010111011111010110000 function 00000000000111111010001000110111 withdrawals 00000000000110111110010000000011 Sierra 00100000000110110000001000110000 Along 00100000000000000011100000110010 supermarket 00000000000000011001111010110000 Magazine 00100000000000000000111101000001 oversight 00000000000101101100100011100001 NL 01000000000000000000000000000000 Banc 00100000000111101110100001010000 anti-abortion 00000000000000000000000000000000 overhead 00000000000000000011011100000111 snapped 00000000000011111011001000110010 hate 00000000000010011110000110110010 Better 00100000000000000001001111000000 unique 00000000000001000000010010010000 midnight 00000000000111111010010000101000 Peterson 00101111111100111110000010001000 exclusively 00000000100000010000010001110010 destroyed 00000001000011010100010000110010 subjects 00000000000111101100000010100011 Lyonnais 00100000000111111011110001111001 proof 00000000000111101110011110101111 reveal 00000000000111001100100110110010 day-to-day 00000000000000000000000000000000 Bernard 00101111111000100010000010011000 alter 00000000000111110000111110110010 Whether 00100000000000000001001101000010 Kravis 00101111111000010001010000101000 nine-month 00000000000000000000000000000000 taste 00000000000111111110010000000001 recommends 00000000101100100011000000010010 issuance 00000000000111111101101001001111 lobbyist 00000000000111000010011110110101 survival 00000000000111111011011010100111 Lipper 00101111111111011111110000101000 combining 00000000000110101111111101000000 Reserves 00100000000111101111100111100011 nonetheless 00000000000111111110101011101000 petrochemical 00000000000010100000011010110000 containing 00000000100010010000000000001010 Cineplex 00101111111111100111101100101000 cooperative 00000000000000010000100000100001 boosts 00000000000000000000000010000011 4.25 00000000000000000000000000000000 91 00000000000000000000000000000000 perfect 00000000000000000000011010010000 comfort 00000000000110110111110100100111 gauge 00000000001101111111110110110010 Russell 00101111111001000001000100001000 resign 00000000010110111101010110110010 Steinberg 00101111111100011100100000001000 Senators 00100000000000000000100110110011 Edelman 00101111111100101010010010001000 radical 00000000000000010001000000010000 replacing 00000000000111100110001101000000 outsiders 00000000000110000111111000110011 funny 00000000000011110000011010010000 1.75 00000000000000000000000000000000 Portfolio 00100000000111101111000010000001 infected 00000000000010010001100000110010 tea 00000000000011010101101100100001 appealed 00000000000010111011101000110010 meets 00000110000010000011000000010010 Milken 00101111111110101000101010001000 length 00000000000101111111111000001111 challenging 00000000000000000001101101000000 Yang 00101111111100101111000100001000 intentions 00000000000111111110111101100011 attendants 00000000000000010111111001110011 marketer 00000000000111111110100001110101 images 00000000001111001111110101100011 desert 00000000000001001101110110101000 listing 00000000000111000010110001000000 editions 00000000000111110101100001000111 improper 00000000000000000110000110010000 translated 00000001101111110010110000110010 utilization 00000000000000000110110011000111 abortion-rights 00000000000000000000000000000000 Stewart 00101111111000100001000100001000 Provigo 00100000001010101111111100101000 senator 00000000000011001001001100001000 painful 00000000000010000001010010010000 beautiful 00000000000000011010011010010000 aims 00000000000111100110101000110010 lowering 00000000000111001011011101000000 mistakes 00000000000111100111011000100011 staged 00000000001101101001010000110010 1.05 00000000000000000000000000000000 philosophy 00000000000110101011101001100111 impressive 00000000000001000000110100010000 forest-products 00000000000000000000000000000000 waters 00000000000110000110000000001000 Beecham 00100000000001110011010100101000 attendance 00000000000001100110111100000111 Pfizer 00100000000011101110111100101000 warming 00000000000110110000110001000000 fate 00000000000111011110111000001111 psychological 00000000001100000010000000110000 perfectly 00000000000001011000000001110010 refining 00000000000111101100100001100001 Ashland 00100000000111101100011000101000 recycling 00000000010100000010110001000000 Investigation 00100000000111111101110001100111 Fried 00100000000000100010111000101000 exhibition 00000000000100101111111001100111 Football 00100000000000000001001100100001 Ted 00101111111000010000101000011000 179 00000000000000000000000000000000 memories 00000000000111111110100100101111 EMS 01000000000000000000000000000000 cross 00000000000110100010110100100001 plate 00000000000110011110111000000001 stalled 00000010000101010100010000110010 Hambrecht 00101111111110010111111010101000 dominate 00000000001001101011111110110010 Natural 00100000000110101101101010110000 shadow 00000000000110111001100101100111 department-store 00000000000000000000000000000000 Call 00100000000111111100000110110010 grim 00000000000000010010011010010000 Cambridge 00100000000111110110101001101000 messages 00000000000011101101110101100011 dive 00000000000111100101111000110111 availability 00000000000111000110111000001111 inches 00000000000000000010100100001011 Rogers 00101111111101111010001000001000 Medicare 00100000000000001000001011100001 Assistant 00100000000110000001001001110000 NSC 01000000000000000000000000000000 ongoing 00000000000000010000010100010000 Socialist 00100000000010001001011000110000 Gillette 00100000000111111011001100101000 Jr 00100000000000000000000000000000 vans 00000000000101101010111001100011 merit 00000000000111000110110100100111 conclude 00000000000100111100100110110010 episode 00000000000010101111111001100111 Fresenius 00100000000000000000000000000000 pressed 00000000001111101101010000110010 CALL 01000000000111111100000110110010 multiples 00000000000111111101011001101111 negotiable 00000000000111101011000001001000 prevented 00000001001111010100010000110010 endorsed 00000000110011000101010000110010 4.875 00000000000000000000000000000000 physician 00000000000101001101011110110101 Neil 00101111111000011000110110011000 ASSOCIATION 01000000000110101011110001010101 TRUST 01000000000000000001010001001000 regain 00000000000000011010111110110010 treasury 00000000000011001011000110110000 predictions 00000000000111111001010000100011 smoothly 00000011000101000000010001110010 Springs 00100000000000101000100010100101 Susan 00100000000000001000001000011000 printed 00000000001011000101101001000000 clause 00000000000000000010110011100111 receivables 00000000000111101000101111100011 Soup 00100000001011010001110000101001 select 00000000000111100110010110110000 clinical 00000000000000000101100000110000 maintains 00000000000011100011010111000010 Filipino 00100000000011011000101000110000 ring 00000000000110101111001010110111 Altman 00101111111100011110111000001000 environmentalists 00000000000110111000111000110011 devastating 00000000000011000001010010010000 soaring 00000000000000100010010001000000 agriculture 00000000000111111011110110110000 Richter 00101111111110011000000000001000 salespeople 00000000000001000100000000110011 rock 00000000000101101110001100100001 cites 00000000001100100011000000010010 wings 00000000000010001100110101100011 accrued 00000000000111111000011100010000 locked 00000000000011011110010000110010 BNL 01000000000000000000000000000000 transform 00000000000111001011111110110010 Midland 00100000000010100001111000101000 sea 00000000000000000000011010101000 shaken 00000000000010010001110000110010 Boyd 00101111111101100100000100001000 considerations 00000000000111110011101010100011 Straszheim 00101111111000000110010010001000 somehow 00000000100100000000001001110010 Gould 00101111111100011001110000001000 declares 00000000000111111111101111000010 Division 00100000000111101110011001110101 realistic 00000000000001001101010010010000 noticed 00000000000110110000110111000010 salesmen 00000000000101101110100000110011 skin 00000000000111111001110000100001 rewards 00000000000111001101111000100011 persistent 00000000000010001000000000010000 missiles 00000000000111101110010110001001 Lawmakers 00100000000000000100010010110011 Ray 00101111111000000011010100001000 literally 00000001001001000000001001110010 likelihood 00000000000111110111110000001111 justice 00000000000111101111110110110000 anger 00000000000111110100111010100111 boys 00000000000111100111100000110011 shortages 00000000000111101110011000100011 U.S.S.R. 01000000000000000000000000000000 gifts 00000000000111001111110101100011 adjusters 00000000000000000000000000000000 Beatrice 00100000000111111111001100101000 obtaining 00000000000001101111111101000000 Signal 00100000000111100111011010110111 preventing 00000000000010000011011101000000 journal 00000000000111101111011101000001 threats 00000000000101100111001000100011 Roth 00101111111001100110100010001000 aspect 00000000000111111011010000001111 columnist 00000000000111110100011110110101 processes 00000000000100001111000000010010 non-U.S. 01000000000000000000000000000000 Azoff 00100000000000000000000000000000 107 00000000000000000000000000000000 fancy 00000000000011101000001000110000 western 00000000000000000100110110101000 guard 00000000000110100110100001111001 equity-purchase 00000000000000000000000000000000 106 00000000000000000000000000000000 MiniScribe 01000000000011011100111100101000 Dozen 00100000000000000000010001010000 Friedman 00101111111101111111100010001000 ethics 00000000000111000111011001010001 conflicts 00000000000100100111111010100111 CS 01000000000000000000000000000000 Neal 00101111111000010101010100001000 issuers 00000000000111100110010000110011 instructions 00000000000111101100101000100011 Speaker 00101111111111111111010110010101 disarray 00000000000010000111111010100111 warnings 00000000000111001011101000100011 computer-driven 00000000000000000000000000000000 destroy 00000000001111101011111110110010 drag 00000000000110010110110110110010 Recently 00100000000000001001001001110010 p.m 00000000000000000000000000000000 boss 00000000000111111110101110000001 Sugarman 00101111111100100110010010001000 portable 00000000001000011000010000110000 Hunter 00101111111000011010000000001000 routinely 00000000001001100000001001110010 78 00000000000000000000000000000000 Hertz 00100000000110001101011100101000 strange 00000000000000001000011010010000 Weisfield 00100000000000000000000000000000 generic 00000000000000111000010000110000 liable 00000000000010111110110000110010 pills 00000000000011001011010001001000 proportion 00000000000111111111101010001111 unauthorized 00000000000000100000000110010000 London-based 00100000000000000000000000000000 beneficial 00000000000001000100001001000000 deduction 00000000000111111011101000111001 Goodwill 00100000000000101100100000100001 private-sector 00000000000000000000000000000000 Prince 00100000000111111011111100001000 drinks 00000000000101011101011111001001 Accounting 00100000000000000010000010110000 bargaining 00000000000000011000110001000000 proven 00000000000010101101101001000000 intraday 00000000000100110000000100010000 photos 00000000000011110111110101100011 reversal 00000000000111110101101010100111 assured 00000000000001011011110000110010 NIH 01000000000000000000000000000000 holiday 00000000000000011000000000100001 Perspective 00100000000111111110011110100001 errors 00000000000111110111011000100011 150,000 00000000000000000000000000000000 complains 00000000000111101011010111000010 tissue 00000000000101100000110000100001 flagship 00000000000000101010010011010000 Helmsley 00100000000101111100000000001000 Conference 00100000000000001000110001000111 fixed-income 00000000000000000000000000000000 imagine 00000000000110110110100110110010 12-year 00000000000000000000000000000000 Louisiana 00100000000110111111110001101000 chaos 00000000000101100111111010100111 inflation-adjusted 00000000000000000000000000000000 drivers 00000000000110100010100000110011 Funds 00100000000110100000000110011001 LBOs 01000000000000000000000000000000 barometer 00000000000111111111100000111111 hedging 00000000000000110010110001000000 definitely 00000000110001000000001001110010 Foley 00101111111101000100111010001000 harm 00000000000111100000111000110111 Travelers 00100000000011100001011000110011 Dave 00100000011000000010101000011000 microprocessor 00000000000000000010101000100001 processed 00000000000011001101101001000000 trees 00000000000111000111010101100011 isolated 00000000000100000101101001000000 Generale 00101111111111110000101000101000 Tony 00100000011000010000011000011000 extreme 00000000000000011011110100010000 accompanied 00000000000111111111010000110010 approaches 00000000000000001111001000100011 Infiniti 00100000000000011100001000100001 herself 00000000000000011011010001110010 Managers 00100000000000000001100010110011 8.2 00000000000000000000000000000000 Year 00100000000111111111111101100010 stick 00000010000101111101010110110010 revival 00000000000111010101101010100111 trips 00000000000110100111001000100011 remarkable 00000000000001000100000010010000 scrambling 00000000000111010110011000110010 prompt 00000000000001010011110110110010 breakdown 00000000000111101101101010100111 Finnish 00100000000001010110100100110000 gambling 00000000010100001011111010110000 slated 00000000000010010110111000110010 lung 00000000000000001000101011100001 write-off 00000000000000000000000000000000 deregulation 00000000000111001110011010100111 riding 00000000010110101110100001000000 suspend 00000000000100110110111110110010 kronor 00000000000000000010100000001011 PASOK 01000000000000000000000000000000 defeated 00000000010111111001010000110010 Lorentz 00100000000000000000000000000000 Medicine 00100000000111101111110010100111 Henderson 00101111111111011000001000001000 Greenville 00100000000111001111101001101000 Everything 00100000000000100010010001110010 Publishing 00100000000000100011011010110000 cheating 00000000000111110101100010100111 bugs 00000000000111111011010101100011 surfaced 00000000100001000110001000110010 waited 00000000100110011110001000110010 Eastman 00100000000011001100101101110000 Koreans 00100000000000000100100100110011 Koch 00101111111000100000001000001000 McGraw-Hill 01000000000000000000000000000000 N.V. 01000000000000000000000000000000 protein 00000000000111001010101000100001 trimmed 00000000000011010011111001000000 forfeiture 00000000000010000101101101001111 pack 00000000000111100111001010110111 treated 00000000100110010010110000110010 Skase 00100000000000000000000000000000 radiation 00000000000010001001110000100001 investigate 00000000000111011100011110110010 jurisdiction 00000000000111101110110000100111 Norcen 00100000000000000000000000000000 defects 00000000000111111001011000100011 treating 00000000000101000001111101000000 vital 00000000000000001100011000010000 Gillett 00100000011001110100110000001000 Stern 00101111111000000001000000001000 Andersson 00100000000000000000000000000000 cost-cutting 00000000000000000000000000000000 Am 00100000000000000100111110000010 pledged 00000000000111011011101000110010 bushel 00000000000111111111111011011111 opponent 00000000000011101011111001100111 socialism 00000000000111010111010010100111 platinum 00000000000110111111101110110000 influenced 00000000001001000001110000110010 Crane 00101111111101100010001000001000 fortunes 00000000000111101110011101100011 92 00000000000000000000000000000000 staying 00000000000111101111000001000000 industrialized 00000000000111001101000100110000 1.35 00000000000000000000000000000000 Meridian 00100000000000011001001010101000 Quebec 00100000000100101111111001101000 13.1 00000000000000000000000000000000 scrambled 00000000001110101011101000110010 Civil 00100000000000010001000000110000 Trinity 00100000000010001111000100101000 firmly 00000001000000000000010001110010 Ireland 00100000000111011101011101101000 Vermont 00100000000110111100110001101000 5.1 00000000000000000000000000000000 Huntsman 00100000000000000000000000000000 softening 00000000000111100111010001000000 Knight-Ridder 01000000000000000000000000000000 contracted 00000000101011101100010000110010 native 00000000000010110000101000110000 bearing 00000000000001000100100001000000 seven-day 00000000000000000000000000000000 commuters 00000000000000000000000000000000 AND 01000000000000000000000010000010 Land 00100000000101100101100000100001 distance 00000000000111101010001010110111 curtail 00000000000001111010111110110010 widen 00000000000110110110111110110010 fun 00000000000111011110110100100111 Eventually 00100000001000000000001001110010 coordinate 00000000000101010010111110110010 obstacle 00000000000111110111101100100111 Commons 00100000000111111011011110100001 eventual 00000000000000011000010100010000 exercised 00000011000011010100010000110010 83 00000000000000000000000000000000 Financing 00100000000000000000001000111001 Activity 00100000000111101100110001100111 Courter 00100000000000000000000000000000 Walker 00101111111000101011001000001000 Water 00100000000000000000110000100001 destruction 00000000000111001010111000001111 11.5 00000000000000000000000000000000 tank 00000000000000001001011000000001 outnumbered 00000000000010000001010000110010 softer 00000000000000010100001111000000 Agnelli 00101111111000000111000000001000 admit 00000000000111110000100110110010 targeting 00000000000011100111111101000000 RU-486 01000000000000000000000000000000 borrowers 00000000000111001111110000110011 discouraging 00000000000010001001010010010000 Murphy 00101111111100001000001000001000 Egg 00100000000000000110101100100001 Using 00100000000011000001111101000000 expectation 00000000000111110111010000001111 downgraded 00000000000111101111111001000000 commit 00000000000111011111001110110010 7.88 00000000000000000000000000000000 disposal 00000000000000010010011101001111 Engineering 00100000000001000001000001100001 myself 00000000000000111011010001110010 allocation 00000000000111101101110101001111 Fred 00101111111000000011100110011000 1.04 00000000000000000000000000000000 7.20 00000000000000000000000000000000 2,500 00000000000000000000000000000000 verdict 00000000000111111110100001100111 2.50 00000000000000000000000000000000 across-the-board 00000000000000000000000000000000 cautioned 00000000000110001111110111000010 inclined 00000000000110111100011000110010 vocal 00000000000000000011000010010000 fluctuations 00000000000111101001111110000011 marketed 00000000000010010000110000110010 homeowners 00000000000110100100111000110011 colors 00000000000100101111110101100011 interfere 00000000000100011001010110110010 appetite 00000000000111111110101100111001 lagged 00000000001011111010110000110010 finances 00000000000111101100101101100011 affidavit 00000000000110011111111001100111 Rich 00100000000111001010011010010000 pro-democracy 00000000000000000000000000000000 demonstrators 00000000000000101100100000110011 dismal 00000000000001010011100000010000 entities 00000000000110001010000100100011 Hispanic 00100000000011001000101000110000 completing 00000000000111101111111101000000 fires 00000000001011001111110101100011 Legal 00100000000100000000000000110000 grocery 00000000000000011101010000110000 economically 00000000001100000000000001110010 governing 00000010000010010000000000001010 fishing 00000000000000101000001010110000 0.25 00000000000000000000000000000000 identity 00000000000011100111111001100111 refunds 00000000000011110101001100000011 threw 00000000010011101001001000110010 monopoly 00000000000111001101001011100111 UAW 01000000000000000000000000000000 slash 00000000001111100110111110110010 occurs 00000000100000000110001000110010 Auto 00100000000000000000001110110000 pools 00000000000100101101110101100011 labeled 00000000000000110101010000110010 ethnic 00000000000100100000000000110000 Citibank 00100000000111111110110100101000 perestroika 00000000000101111111110010100111 passive 00000000000001010000011100010000 capability 00000000000111111111111000001001 capitalization 00000000000111111111100010001111 dog 00000000000111100000010000000001 province 00000000000111111101011001100111 marketers 00000000000000011000000010110011 advancing 00000000000001001110010001000000 excuse 00000000000111001111101100100111 Instruments 00100000000000000000110001111001 lie 00000000100101111101010110110010 headline 00000000000111010011111101100111 floating 00000000000001110000011100010000 demonstrations 00000000000111100010101000100011 draft 00000000000000000000011110110111 selection 00000000000111101111110101001111 Hearst 00100000000101110011111100101000 describe 00000000000100110110100110110010 pockets 00000000000111100011111101100011 fragile 00000000000001001001000010010000 frustrated 00000000000100110101110000110010 loses 00000110010010000011000000010010 processors 00000000000001100111110001100011 Agnos 00100000000000000000000000000000 full-time 00000000000000000000000000000000 bed 00000000000111111110010101010111 channels 00000000000111010111110100100011 cite 00000000000111001101000110110010 narrowing 00000000000110001111010001000000 Md. 00100000000000000000000000000000 unhappy 00000000000110101111110000110010 READY 01000000000001111100011000110010 Relations 00100000000111101101010011111001 dissident 00000000000000100000101000110000 LOAN 01000000000000000000001011100101 13.50 00000000000000000000000000000000 FOREIGN 01000000000000000010010000110000 High-grade 00100000000000000000000000000000 ''. 00000000000000000000000000000000 8.25 00000000000000000000000000000000 MONEY 01000000000111101110010100100111 U.S.A 01000000000000000000000000000000 Fulton 00101111111111111101010110110000 foods 00000000000000001110100000101001 sour 00000000000000011000011010010000 appearing 00000000000111100101000001000000 rubles 00000000000000000000011000001011 frustration 00000000000110110110111010100111 beauty 00000000000111001011111010110000 feelings 00000000000111111101111101100011 publications 00000000000111001100000010101001 free-market 00000000000000000000000000000000 Leslie 00101111111000011100000010011000 Mancuso 00100000000000000000000000000000 criteria 00000000000111101000011100100011 Medicaid 00100000000000011000001011100001 6.3 00000000000000000000000000000000 landscape 00000000000100101111101001100111 barring 00000000011100010000000000001010 flexible 00000000000000100010010010010000 lacks 00000000001100000011000000010010 rallies 00000000000111101010010000000011 authorization 00000000000000000011000100100111 earthquakes 00000000000000000000000000000000 fetch 00000000000111000011001110110010 contacts 00000000000111101100010000100111 Freeman 00101111111100111001100010001000 patterns 00000000000100000001111100100011 discounted 00000000000011000001101001000000 install 00000000001100111111101110110010 Indiana 00100000000110011111110001101000 Cie 00100000000000000000000000000000 Financiere 00101111111111101100101000101000 Unocal 00100000000011101111111100101000 Caribbean 00100000000111111011001110101000 10.2 00000000000000000000000000000000 crush 00000000001110111111110110110010 petition 00000000000111101110100001100111 desks 00000000000111111000000001100011 everywhere 00000000000001010100010001110010 swiftly 00000001000101000000010001110010 Richardson 00101111111011101101001000001000 responses 00000000000111001001101000100011 155 00000000000000000000000000000000 march 00000000000000000010011001100010 Dresdner 00100000000010001001111000101000 magnitude 00000000000111011101111000001111 wines 00000000001111101011110101100011 Marketing 00100000000000000000100001100001 tax-free 00000000000000000000000000000000 Thomson-CSF 01000000000000000000000000000000 approvals 00000000000111111001000100100111 Creek 00100000000000000010100010100101 medium 00000000000110111111100000100001 credited 00000000000100110110010000110010 Aircraft 00100000000000000110001010110000 small-business 00000000000000000000000000000000 engineer 00000000000111001011110000110101 entrepreneurs 00000000000110001000111000110011 bars 00000000000000100111000000010010 designated 00000000000101000001101001000000 Chiron 00100000000111001111111100101000 NEW 01000000000111101111100011110000 captured 00000000001000000101010000110010 stabilizing 00000000000001111111010001000000 smart 00000000000100001000011010010000 Sharp 00100000000000000000100000010000 Science 00100000000100100100001101100001 painted 00000000101000001100010000110010 lure 00000000010110111111110110110010 Looking 00100000000111101110110000110010 crazy 00000000000101110001110101001000 buoyed 00000000000101101111010000110010 lagging 00000000000000011101010001000000 shook 00000000001010001001001000110010 thrown 00000000001111110010110000110010 Guaranteed 00100000000010100001101001000000 precisely 00000000000111101100001001110010 Publications 00100000000111001100000010101001 Federation 00100000000110101101110001010101 chromosome 00000000000000000011111100010000 Pioneer 00100000000111101100100100100001 tire 00000000011000010100001110110000 arrange 00000000001011111111101110110010 Unilever 00100000000011001001010100101000 seven-year 00000000000000000000000000000000 camera 00000000000101010000101000100001 detergent 00000000000011001100001000100001 harsh 00000000000001000001000000010000 Share 00100000000111111111111000011111 Berry 00101111111100110000001000001000 Wood 00101111111100001010111000101000 Roe 00101111111011101010000100001000 spark 00000000000010010011110110110010 Representatives 00100000000110101110101010110011 confused 00000000000010010101110000110010 Barbara 00100000000000000001100000011000 blocked 00000000010000010100010000110010 plot 00000000000110111110111000000001 Bogart 00100000000000000000000000000000 Fitzwater 00101111111101001000001010001000 scenes 00000000000111101001110101100011 eating 00000000000011001110100001000000 pump 00000000001010110110010110110010 Peck 00101111111100011010111000001000 Media 00100000000000000011001010110000 Ratners 00100000000000000000000000000000 Reports 00100000000100101011010000100011 privatization 00000000000111100011110101001111 DeConcini 01001111111011110000111010001000 Whitten 00100000000000000000000000000000 Jeff 00100000000000000000001000011000 Arias 00101111111001101000001010001000 regulated 00000000000011000101101001000000 syndrome 00000000000111101111111111010101 imposing 00000000000100101111111101000000 voluntarily 00000000000101000000010001110010 exploit 00000000000100101011111110110010 Dentsu 00100000000000000000000000000000 Coleman 00101111111101001000001000001000 rents 00000000010100001111000000010010 react 00000000000110100111010110110010 featured 00000000011000000001010000110010 Memories 00100000000111111110100100101111 briefly 00000000001100100000010001110010 slate 00000000000111111011101000111111 relieved 00000000000111001011110000110010 swing 00000000000101101111001010110111 subsidy 00000000000000000000111000111001 8.8 00000000000000000000000000000000 pursued 00000110100111010100010000110010 confirmation 00000000000000000000011101001111 HK$ 01000000000000000000000000000000 Watson 00101111110100011100000010001000 BSN 01000000000000000000000000000000 Princeton 00100000000111101111111000101000 architecture 00000000000111110100001101100001 Middle 00100000000101111111100011010000 awful 00000000000000110110110100010000 Linda 00101111111000001000101000011000 Nobel 00100000000001000101011000010000 bull 00000000000111111110111110110000 neighbors 00000000000110101011110000110011 desirable 00000000000000101101010010010000 IMA 01000000000000000000000000000000 workstations 00000000000111101010111001100011 Learning 00100000000111111100110101000000 Simpson 00101111111110101100111010001000 Norton 00101111111011100001000100001000 correction 00000000000111101011101010100111 statute 00000000000111101111111010011001 Cheney 00101111111100101000111010001000 rushing 00000000000111100110011000110010 autumn 00000000000111101110010000010111 Facilities 00100000000111101101110100100011 Globe 00100000000000011111110000100101 damaging 00000000000000000111010010010000 bell 00000000000001001011001010110000 Dodge 00100000000011000011111100001000 Fair 00100000000000000001011010010000 convenience 00000000000001000101010000110000 mutual-fund 00000000000000000000000000000000 performers 00000000000111101011101001110011 embraced 00000010011011000101010000110010 chicken 00000000000110010100011010110000 Realty 00100000000010001010010010110000 Conservative 00100000000000001000011000110000 taxation 00000000000111100110011010100111 Pinnacle 00100000000000001111000110101000 certificate 00000000000111001010100101100111 Dell 00101111111110011001001000001000 Aristech 00100000000111110001010100101000 recovering 00000000000111111011100001000000 Tucson 00100000000111110101001000101000 unavailable 00000000000100111110110000110010 8.1 00000000000000000000000000000000 Toledo 00100000000110101101101001101000 Argentina 00100000000111111001111101101000 Manufacturing 00100000000000000000011010110000 describing 00000000000111111001101101000000 opposing 00000000000000001011011101000000 FASB 01000000000000000000000000000000 cholesterol 00000000000000001110010000100001 forget 00000000000111110011100110110010 Jefferies 00101111111011101111111010101000 12-month 00000000000000000000000000000000 550 00000000000000000000000000000000 Postal 00100000000111001011110000110000 leg 00000000000111100110111000111111 catastrophic 00000000000111000101000000110000 Banxquote 00100000000111101010010110110000 consist 00000000000001100100110111110111 Patrick 00101111111000001001010100001000 Ga. 00100000000000000000000000000000 Allied 00100000000001001110000100101000 laptop 00000000001010011000010000110000 Irvine 00100000000111111111001001101000 Up 00100000000000000000001100110010 Roebuck 00101111111111111101101001001000 Census 00100000000111101111110101100001 Capel 00101111111111111001101001001000 refugees 00000000000111000000100000110011 Rosenthal 00101111111111101110100010001000 Batman 00100000000000000000000000000000 pouring 00000000000001000111100001000000 Montgomery 00101111111000100100111000101000 Hammond 00101111111100100100001000001000 milestones 00000000000111111111110101101111 Yetnikoff 00100000000000000000000000000000 assess 00000000000111110010011110110010 Joel 00101111111000001100000010011000 strengthening 00000000000110000111010001000000 sequester 00000000000000000000000000000000 unveil 00000000000111110011011110110010 N.C 01000000000000000000000000000000 trials 00000000000111101010001000100011 manipulate 00000000000100111011111110110010 accurate 00000000000000000010001110010000 prestigious 00000000000010100100000010010000 Bros. 00100000000000000000000000000000 safer 00000000000000110101001111000000 Trans 00100000000000101001010100101000 US 01000000000000010001010001110010 Mosbacher 00101111110101001000000010001000 Fossett 00100000000000000000000000000000 ideological 00000000001100100000000000110000 splits 00000000000000110110000010100111 cushion 00000000000111011111110010110111 pros 00000000000111101010000010110011 Illuminating 00100000000000000011001001111001 activist 00000000000111100111000000110101 insisting 00000000000110001101111010000010 forever 00000000000000100100010001110010 viable 00000000000011010000010010010000 30-share 00000000000000000000000000000000 participated 00000000000111011110010000110010 Ocean 00100000000111110010001010110000 exists 00000000000100100110001000110010 soil 00000000000111100111010010100111 dipped 00000000000000110101000100110010 first-half 00000000000000000000000000000000 timetable 00000000000111111101001111100111 statistical 00000000000000000101000010110000 fits 00000001100010000011000000010010 Based 00100000000111111110100000110010 anniversary 00000000000000000000011101000111 taught 00000000000001000101010000110010 degrees 00000000000000000000000101011011 2001 00000000000000000000000000000000 Penney 00100000000001101011000001001000 J.C. 01000000000000000000000000000000 declaration 00000000000111101100001011100111 Appeals 00100000000000000000111111100101 upheld 00000000001111111001010000110010 HomeFed 01000000000000000000000000000000 Whittle 00100000000111000010110000001000 pregnancy 00000000000001111111110010100111 McDuffie 01000000000000000000000000000000 disposable 00000000000010111000010000110000 formation 00000000000111010110111000001111 collecting 00000000000010101111111101000000 associations 00000000000110101001110001010101 voices 00000000000101001001111101100011 aging 00000000000000100110101000110000 Beyond 00100000000000101001000000001010 sorts 00000000000111111111000100101111 Wis. 00100000000000000000000000000000 ourselves 00000000000000101011010001110010 Title 00100000000111110110100101100111 Inco 00100000000110101000111100101000 unfortunate 00000000000000100101110100010000 reconsider 00000000001111111010111110110010 ailing 00000000000000001100101001000000 Reform 00100000000111101010111000111001 Cabrera 00100000000000000000000000000000 shoulder 00000000000110110101111010110111 Intelogic 00100000000000000000000000000000 anticipating 00000000000111110110110101000000 Guzman 00100000000000000000000000000000 courtroom 00000000000000110011110000000001 ranking 00000000000111111001011000010000 monitored 00000000011010010001110000110010 moderately 00000000000110001000010001110010 disciplinary 00000000000001000001000000110000 Prof. 00100000000000000000000000000000 samples 00000000000100001010001000100011 collective 00000000000110110010000000110000 obstacles 00000000000110101111001000100011 compensate 00000000000111111001001110110010 lean 00000000000100100101110110110010 trash 00000000000110100000110000100001 175 00000000000000000000000000000000 shore 00000000001110110110010110110010 instituted 00000001110001101100010000110010 pricings 00000000000111111000011000100011 shutdown 00000000000111111111101101001111 fared 00000000011100010010110000110010 Takeover 00100000000000000010001100010000 Reliance 00100000000111111000010100101000 reversed 00000000000001111001010000110010 trademark 00000000000111100100100000100001 7.25 00000000000000000000000000000000 one-day 00000000000000000000000000000000 assurance 00000000000000011110010001110010 deliberately 00000000001110000001001001110010 Keystone 00100000000010001000111100101000 persons 00000000000000000001000100110011 solved 00000001000010010010110000110010 placement 00000000000111101000000100001001 standstill 00000000000000011001001100010000 heightened 00000000000001001101010001000000 2-for-1 00000000000000000000000000000000 Nancy 00101111111000000000001100011000 Greenberg 00101111111100110000100010001000 Roderick 00101111111000001110100010001000 slumped 00000000000010010001000100110010 stretched 00000000100001110010110000110010 valid 00000000000010010000010010010000 redeemed 00000000000110010000010000110010 1.02 00000000000000000000000000000000 terminal 00000000000110100100111000000001 bags 00000000000111000000000000100111 disobedience 00000000000000000000000000000000 theft 00000000000110111111100010100111 Furthermore 00100000000111111100101011101000 humor 00000000000101101111110010100111 breaker 00000000000111111010101011010101 alcohol 00000000000010000011110000100001 Leo 00101111111000010100000010011000 firmed 00000000000000100101000100110010 Newsweek 00100000000111111000110100101000 halts 00000000000111111010101001100010 Imports 00100000000111101100000100000111 prohibited 00000000100111010100010000110010 Jonathan 00101111111000000100010110011000 skidded 00000000000000010001000100110010 Weiss 00101111111110101011001000001000 rail 00000000000010000001111010110000 medium-sized 00000000000000000000000000000000 speaking 00000000000111111011000001000000 justified 00000000001011000001110000110010 welfare 00000000000000010000001011100001 arrive 00000000001101011101010110110010 gathered 00000000010000001100010000110010 Lazard 00101111111111100011011000101000 mystery 00000000000110001011111101100111 spreading 00000000000111001101010001000000 5.6 00000000000000000000000000000000 ink 00000000000110101101110100100001 Ten 00100000000111111100111001010000 Irving 00100000000011000001111000101000 converting 00000000000111111010001101000000 natural-gas 00000000000000000000000000000000 retreat 00000000000111110011101100110111 noncallable 00000000000111011110110000110010 anytime 00000000000000001110000000101010 Laff 00100000000000000000000000000000 collected 00000000100011001100010000110010 diplomatic 00000000000010000000000000110000 Consumers 00100000000111100010111000110011 implies 00000000000101010011000000010010 persuaded 00000000000010101101010000110010 objections 00000000000111110101101000100011 Hart 00101111111100110100101010001000 unsuccessfully 00000000000101000001001001110010 assumes 00000000011100100011000000010010 Broad 00100000000000000110100000010000 unload 00000000000100010110001110110010 tracked 00000000010101100111010000110010 Stoll 00100000000000000000000000000000 10.5 00000000000000000000000000000000 Intermediate 00100000000000000001101010101000 reviews 00000000000110111110001000100011 musical 00000000000000000000001100100001 stays 00000000000100101000001000110010 appreciate 00000000000111011110100110110010 lender 00000000000111100111101010110101 respected 00000000000001000001000010010000 PLO 01000000000000000000000000000000 pessimistic 00000000000011011111110000110010 Needham 00100000000111111100010000001000 concludes 00000000000111110011010111000010 Owen 00101111111001001000110010001000 relied 00000000000111000000100000110010 Palestinian 00100000000000000001011000110000 ASSETS 01000000000111111111110111100011 reacting 00000000001001101010111000110010 LYNCH 01000000000000000100001001001000 MERRILL 01000000000111111011100000101000 days. 00000000000000000000000000000000 knight 00000000000000001010000000001000 CORP 01000000000000000000000000000000 HOME 01000000000000000000010110100001 removal 00000000000111111111111101001111 laboratory 00000000000000111000100000100001 termed 00000000000111110101010000110010 OFFERED 01000000000110100000010000110010 INTERBANK 01000000000001001111001001110010 sponsored 00000000000011101111010000110010 EURODOLLARS 01000000000111111100101001100010 LATE 01000000000000000001010100110010 GEC 01000000000000000000000000000000 bank-backed 00000000000000000000000000000000 Negotiable 00100000000111101011000001001000 ACCEPTANCES 01000000000001010101010001001000 BANKERS 01000000000110101110001111110011 C.D.s 01000000000000000000000000000000 DEPOSIT 01000000000000000000001110100001 CERTIFICATES 01000000000111111111111100101111 pressured 00000000000111011000110000110010 TVS 01000000000000000000000000000000 licensed 00000000000111000101101001000000 attitudes 00000000000111101110111101100011 119 00000000000000000000000000000000 MTM 01000000000000000000000000000000 Between 00100000000000000011000000001010 rental 00000000000001100000001010110000 DISCOUNT 01000000000111110010010011000111 Prebon 00101111111000000011100101001000 Way 00100000000111111111111100010111 convince 00000000000110110111111110110010 1.85 00000000000000000000000000000000 hide 00000000000101011110101110110010 pair 00000000000111111110111101111111 nominal 00000000000011010000011100010000 Temple 00100000001100111100000000001000 visiting 00000000000000100110101001000000 Dunkin 00100000000111111111001111110011 Olympics 00100000000001000001010001100111 dismissal 00000000000111110011111101001111 Quist 00101111111111010111110001001000 unwilling 00000000000111100100011000110010 partially 00000000010000001011000001110010 desktop 00000000000101011000010000110000 70,000 00000000000000000000000000000000 Pharmaceutical 00100000000001011011011010110000 sue 00000000000110110110001110110010 freely 00000000011011000000010001110010 disks 00000000000011101111010100001001 barrier 00000000000111001101111101100111 Loral 00100000000110100011111100101000 lengthy 00000000000001001001000000010000 fibers 00000000000111100011011111001001 extending 00000000000110111001011101000000 Dale 00101111111001011100000010011000 smooth 00000000001001100101110110110010 pure 00000000000001000010011010010000 steal 00000000000011001110101110110010 la 00001111111111111001001101110000 fraudulent 00000000000000110000000110010000 Specialized 00100000000011000100101010110000 9.9 00000000000000000000000000000000 universities 00000000000111100101110001100011 enemy 00000000000011110111111001100111 escaped 00000011001011000101010000110010 Theatre 00100000000100000011000100000001 reckless 00000000000000111100000110010000 drafted 00000000000110111001010000110010 streamlining 00000000000101100111010001000000 child-care 00000000000000000000000000000000 Alberta 00100000000111100101101001101000 bourbon 00000000000001001100001000100001 reviewed 00000000000111010100010000110010 Blumenfeld 00100000000000000000000000000000 SmithKline 01001111111110101000100100101000 tonight 00000000000001101100010001110010 dramatically 00000000000001101000010001110010 diversification 00000000000010000001101000111001 8.9 00000000000000000000000000000000 Conservatives 00100000000111101111010110110011 walking 00000000010111110110100001000000 scientist 00000000000111111101011110110101 stepping 00000000001111110110100001000000 river 00000000000000000000100010100101 syndication 00000000000011110010100001100001 random 00000000000000100101011010101000 Minn. 00100000000000000000000000000000 Daimler-Benz 01000000000000000000000000000000 60,000 00000000000000000000000000000000 yellow 00000000000010111010001000110000 farms 00000000000001001001100000101001 purchasers 00000000000110100000100000110011 Rockwell 00100000000111101111010100101000 2.85 00000000000000000000000000000000 Boys 00100000000111100111100000110011 Montedison 00100000000111101011101100101000 Academy 00100000000110101110110001010101 knowing 00000000000111001101111010000010 industrywide 00000000000000010000000100010000 105 00000000000000000000000000000000 Del. 00100000000000000000000000000000 Wash. 00100000000000000000000000000000 incorporated 00000000001011011110010000110010 Kaufman 00101111111100001000111000001000 Battle 00100000000111111111110000100111 Riegle 00101111111111000110010010001000 catalyst 00000000000111101110100000100001 denying 00000000000101111001011101000000 index-arbitrage 00000000000000000000000000000000 winner 00000000000111101000100101100111 lacked 00000000000000111011000000010010 1929 00000000000000000000000000000000 hardest 00000000000000000100111000110010 Said 00100000000111111111110011000010 wondering 00000000001111001110010001110010 impression 00000000000111100111110000001111 renewing 00000000000000101101011101000000 offensive 00000000000011000011001100100111 freedoms 00000000000101110111101001100111 incorrectly 00000000000100000001001001110010 acknowledge 00000000000111110001100110110010 socialist 00000000000010001001011000110000 3.18 00000000000000000000000000000000 enthusiasm 00000000000111111101101100111001 exodus 00000000000111100100111001100111 Shortly 00100000000100110000010001110010 Embassy 00100000000111111100101100100101 1950s 00000000000000000000000000000000 assault 00000000000111111011100100100111 naval 00000000000000001011110000110000 Casualty 00100000000111101111101011100101 Man 00100000000111101110110010110101 devaluation 00000000000111000011101010100111 Worth 00100000000101000001110000011101 infrastructure 00000000000111110101001101100001 mount 00000000000111111111100110110111 spree 00000000000000010010001000100111 situations 00000000000111111100000010100011 felony 00000000000000010000010000010000 non-violent 00000000000000000000000000000000 faith 00000000000111110010001110100111 rumor 00000000000111011011111101100111 Fournier 00100000000000000000000000000000 implemented 00000000100011010100010000110010 Sunnyvale 00100000000111111100101001101000 disappointments 00000000000111111100010000000011 hole 00000000000111111001111010110101 clash 00000000000100001110110000100111 offshore 00000000000000100101101000110000 pose 00000000000110101001101110110010 examine 00000000000111011110011110110010 platform 00000000000111110011101001100111 prevents 00000000100000110001000000010010 Dreyfus 00100000000111110101011100101000 backers 00000000000011110010000010110011 deserve 00000000000111100011000110110010 Budapest 00100000000101010011111001101000 Pace 00100000000111101111011001000111 OK 01000000000000000000000000000000 resigning 00000000000011111011100001000000 curbs 00000000000111110110100100100111 rigid 00000000000111010101000000010000 7.10 00000000000000000000000000000000 Highland 00100000000001101010011010101000 Plans 00100000000111111110101000110010 naturally 00000001100100000000001001110010 score 00000000000111101111001010110111 critic 00000000000111110111110000110101 determining 00000000000111111001011101000000 undoubtedly 00000000011001000000001001110010 exciting 00000000000000001010001110010000 aviation 00000000000000001110010010110000 lifetime 00000000000111011011110000000001 proving 00000000000111000101110101000000 Employees 00100000000000000010000000110011 defending 00000000000111001001011101000000 spy 00000000000100001000001010110000 ousted 00000000000000111010010000110010 positioned 00000000010101101100110000110010 riders 00000000001001110111110101100011 tracking 00000000000111100010110001000000 Levy 00101111111101001010001000001000 marriage 00000000000111101011110000000001 Demand 00100000000111101110100100111001 mid-1990s 00000000000000000000000000000000 Robinson 00101111111100111010001000001000 attending 00000000000111101011100101000000 Exterior 00100000000000110010110100000001 criminals 00000000000101101100100000110011 Scoring 00100000001101101110100001000000 PWA 01000000000000000000000000000000 external 00000000000000001001000100010000 excitement 00000000000101110110111010100111 Saul 00101111111000100100011100001000 retreated 00000000000001010001000100110010 recommending 00000000000101000101110101000000 230 00000000000000000000000000000000 double-A 01000000000000000000000000000000 devoted 00000000000010001100110000110010 nervousness 00000000000101111110111010100111 O'Kicki 01000000000000000000000000000000 flew 00000000000000011100001000110010 alike 00000000001001010100010001110010 bleak 00000000000000000101100000010000 Lexington 00100000000101110111101001101000 significance 00000000000111111101111000001111 prosecutions 00000000000111010011110000100011 king 00001111111100100011100000001000 Kleinwort 00101111111111100101101000101000 lawn 00000000000111100100101010110000 Night 00100000000111101011110000010111 prescription 00000000000011011000010000110000 Arafat 00100000001111110000101010001000 allocated 00000000000010011000110000110010 floors 00000000000000001010000001100011 hell 00000000000111111111001010110111 occasions 00000000000110010100000010100011 damp 00000000000001000110111110110010 empty 00000000000000010011110100010000 decent 00000000000000000100101010010000 Typically 00100000010001100000001001110010 reconciliation 00000000000000000011111111111001 Herbert 00101111111000101000000010011000 600,000 00000000000000000000000000000000 tune 00000000000111101001001010110111 horizon 00000000000111110111111000000001 Kent 00101111111001000000000100001000 demonstrated 00000000000110110101110111000010 BILLS 01000000000100100100110010000111 maneuver 00000000000111001101111000110111 TREASURY 01000000000011001011000110110000 bay 00000000000000000001010010100101 undisclosed 00000000000000010001100100010000 contemporary 00000000000001101000001000110000 builds 00000000000000101101000000010010 fledgling 00000000000000111100010000110000 sympathetic 00000000000010010001010010010000 cutbacks 00000000000111110101011000100011 trained 00000000000001110100010000110010 Shaw 00101111111010101101001000001000 tariffs 00000000000111101110100100000011 cement 00000000000001010100011010110000 proud 00000000011111101011110000110010 generating 00000000000000010011110001000000 Venture 00100000000000010101000000100111 coins 00000000000100000111110001111001 bold 00000000000000011001000000010000 Researchers 00100000000000000110000010110011 resisted 00000100000111010100010000110010 propaganda 00000000000000110000001100100001 leased 00000000001111000101101001000000 entitled 00000000000111111000011000110010 apartments 00000000000111101010101001100011 neutral 00000000000010101100010010010000 demise 00000000000111110101011000001111 Ruth 00100000000101100011010100001000 proponents 00000000000001111010000010110011 intact 00000000000010100100010001110010 149 00000000000000000000000000000000 innocent 00000000000001100001110110010000 belong 00000000000111110011000110110010 Renault 00100000000101110011101100101000 reinforce 00000000000111011100111110110010 subsequently 00000000000000011001001001110010 8.05 00000000000000000000000000000000 Electronic 00100000000000000000101010110000 counseling 00000000000110000000101101100001 inability 00000000000111100111111100100111 ill 00000000000111001110110100100001 uncovered 00000001010001101100010000110010 induce 00000000000001010011111110110010 gear 00000000000111101000011001001001 polled 00000000001000010000010001110010 exploring 00000000000111101110010101000000 7.98 00000000000000000000000000000000 possibilities 00000000000111110111001110100011 boasts 00000000000100111011010111000010 nomination 00000000000111111111000001100111 besides 00000000000111101001101001000010 second-quarter 00000000000000000000000000000000 Leschly 00100000000000000000000000000000 creativity 00000000000111010110110010100111 Advisers 00100000000110101110010110110101 choosing 00000000000001111010111000110010 write-down 00000000000000000000000000000000 revamped 00000000000000100010111001000000 low-cost 00000000000000000000000000000000 Institutions 00100000000111101111011001110011 4.1 00000000000000000000000000000000 lent 00000000010011000100010000110010 miss 00000000000111100011111100001000 battery 00000000000011111111001000100001 7.3 00000000000000000000000000000000 Out 00100000000000000000011100110010 prospectus 00000000000111101110101111100111 elements 00000000000111100111100100101111 proteins 00000000000110011001111001100011 unsettled 00000000000011011101101001000000 solicitation 00000000000100001010001011100111 divestiture 00000000000111100011111101001111 demonstrate 00000000000001111100100110110010 Rubens 00100000000000000000000000000000 Crude 00100000000111101110011000101000 breakup 00000000000000000001110101001111 indexing 00000000000111101100111000111001 outright 00000000000000010000000110010000 Review 00100000000111111111111110110111 Would 00100000000000000000000110010010 NED 01001111111010010100001000011000 stunned 00000000001011001101110000110010 directed 00000000001110000101010000110010 hailed 00000000001110000010110000110010 corrected 00000000101111010100010000110010 reference 00000000000110110111111100100111 birth 00000000000000000101011011100001 Weyerhaeuser 00100000000101100010111100101000 Macy 00100000000111011101110000001000 McCain 01000000000000000000000000000000 far-reaching 00000000000000000000000000000000 Atlantis 00100000000011001011010100101000 Bobby 00100010111001100000001000011000 discourage 00000000001011101011111110110010 10.4 00000000000000000000000000000000 Newark 00100000000111011111101001101000 candy 00000000000000101011111010110000 profile 00000000000100101110111001000111 Gates 00101111111100000111001000001000 five-cent 00000000000000000000000000000000 proxy 00000000000000000110111000110000 intimate 00000000000001010000110100010000 shrinking 00000000000110001101010001000000 accelerated 00000000000000001100111001000000 nonprofit 00000000000000101100010000110000 Leningrad 00100000000100110011111001101000 7.1 00000000000000000000000000000000 Mario 00101111111011011110010000011000 115 00000000000000000000000000000000 inflated 00000000000000011001101001000000 cooperate 00000000000101101001010110110010 Orkem 00100000000000000000000000000000 ideal 00000000000000000110110100010000 delivering 00000000000001101011111101000000 actors 00000000000000000101000110110011 Goldsmith 00101111111110011000001010001000 Valhi 00100000000101101010111100101000 C 00100000000000000000000000000000 dubious 00000000010101000001000000010000 anti-takeover 00000000000000000000000000000000 Genentech 00100000000111011011001100101000 insulin 00000000000101100101110000100001 Bofors 00100000000100011100110100101000 counties 00000000000000001000110001100011 debt-limit 00000000000000000000000000000000 precedent 00000000000111101101111010110101 Benjamin 00101111111000000111010100001000 lobbyists 00000000000010010110000010110011 builders 00000000000000110111100000110011 toxin 00000000000000000000000000000000 bounce 00000000000111111000011000110111 catastrophe 00000000000111000010101101100111 anti-drug 00000000000000000000000000000000 underwritten 00000000000010101111010000110010 sustain 00000000000110110011111110110010 Hyundai 00100000000111010011011000101000 plain 00000000000011000010011010010000 accompanying 00000000000001110000000000001010 moments 00000000000111100100000010100011 Anne 00101111111000010000001000011000 disrupted 00000000011011010001110000110010 Mirage 00100000001001101010001010110000 beating 00000000000111011010100001000000 museum 00000000000010100111010100000001 reiterated 00000000000000000111110111000010 amendments 00000000000011011011001000100011 Semiconductor 00100000000000000101011010110000 300-day 00000000000000000000000000000000 accusations 00000000000111101100110000100011 forecasting 00000000000000001000110001000000 merchants 00000000000010000010101111110011 sworn 00000001000001110010110000110010 photographs 00000000000001111101110101100011 repaid 00000000001011000000010000110010 relies 00000000000001110000100000110010 erode 00000000000111000110111110110010 9.7 00000000000000000000000000000000 boxes 00000000000000110101110101100011 Afghanistan 00100000000111100101011101101000 Ruder 00101111111001101000110010001000 1960 00000000000000000000000000000000 Grumman 00100000000110100111011100101000 6.8 00000000000000000000000000000000 indefinitely 00000000001100100100010001110010 consumed 00000000001100001100010000110010 distributors 00000000000111010110010000110011 gray 00001111111100100011000000001000 Ann 00101111111010000011110000011000 minorities 00000000000111111100111000110011 omnibus 00000000000110111011101010100001 casualty 00000000000111101111101011100101 questionable 00000000000000001010000110010000 Courtaulds 00100000000000000000000000000000 Clara 00100000000000011000000001001000 softness 00000000000100111011111010100111 white-collar 00000000000000000000000000000000 Schwarz 00101111111010110101000010001000 Construction 00100000000000000000001001100001 fixed-price 00000000000000000000000000000000 teach 00000000000011111011111110110010 humans 00000000000111101100101101101000 containers 00000000000111101101100111001001 borough 00000000000001000010010000110101 8.75 00000000000000000000000000000000 Penn 00100000000010000010111000101000 bracing 00000000001111011110110000110010 denominations 00000000000000000011100100001011 tendency 00000000000110111101111100100111 Panamanians 00100000000001000111111000110011 Look 00100000000111110101010110110010 mid-1970s 00000000000000000000000000000000 addressed 00000000010110010010110000110010 Lantos 00100000000000000000000000000000 rational 00000000000000110000010010010000 performances 00000000000111111111011010100111 peaked 00000000000001000110001000110010 repayment 00000000000100000001111101001111 exceeds 00000000000011001001000000001010 Random 00100000000000100101011010101000 NBI 01000000000000000000000000000000 pachinko 00000000000000000000000000000000 overly 00000000000011011000000001110010 charts 00000000000110111010001000100011 decreased 00000000000000000001011001000000 Petrie 00101111111001000010110000001000 Cocom 00100000000001001100001011100001 speaker 00001111111111111111010110010101 parliamentary 00000000000000010000111000110000 high-school 00000000000000000000000000000000 drifted 00000000000000010011001000110010 300,000 00000000000000000000000000000000 1.20 00000000000000000000000000000000 dates 00000000000010001110001000100011 Birmingham 00100000000111110010101001101000 penny 00000000000111011111000001000111 neck 00000000000111111111010000000001 rebuild 00000000001011111010111110110010 wildly 00000000011000111000000001110010 confusing 00000000000011101001010010010000 gather 00000000000001011110101110110010 Indianapolis 00100000000110001111111001101000 Klein 00101111111110100000001000001000 liberals 00000000000111111000100110110011 narrowly 00000000001000100001001001110010 island 00000000000100000101000010100101 sad 00000000000001100010011010010000 devised 00000000001110111001010000110010 weigh 00000000000100101111001110110010 Namibia 00100000000111000001011101101000 auctions 00000000000111110100110100100011 stream 00000000000110101011011001000111 fast-growing 00000000000000000000000000000000 84 00000000000000000000000000000000 spreads 00000000000100000111001000100011 Par 00100000000111101101010000101000 pegged 00000000001111001100110000110010 Cosby 00100000000000010100100000001000 7.52 00000000000000000000000000000000 Personal 00100000000000001000010000110000 8,000 00000000000000000000000000000000 prohibit 00000000000111111001101110110010 restraint 00000000000111001000110001100111 1.10 00000000000000000000000000000000 clout 00000000000111110011110100100111 Recognition 00100000000110101010011010100111 beneath 00000000001010100001000000001010 racing 00000000000111100000110001000000 styles 00000000000000000001001001100111 Humana 00100000000110110111111100101000 conferees 00000000000000000100100110110011 Wachovia 00100000000000000000000000000000 violating 00000000000101111111011101000000 6.2 00000000000000000000000000000000 guerrillas 00000000000111101000101110110011 survived 00000000000101000101010000110010 crackdown 00000000000111110011001011100111 mall 00000000000111101100100000100001 sweet 00000000000100100110011010010000 Siemens 00100000000111101101111100101000 takeover-related 00000000000000000000000000000000 resist 00000000000011010011111110110010 brisk 00000000000000001111100000010000 terminals 00000000000111101110101001100011 daughters 00000000000111101010011100110011 killings 00000000000111111011110101100011 labels 00000000001110101111110101100011 1.19 00000000000000000000000000000000 Madrid 00100000000000001111111001101000 tightening 00000000000111000111010001000000 Hess 00101111111000001101111000001000 provisional 00000000000001101001001100010000 Burt 00101111111000000010001010011000 nights 00000000000000000000111100011011 Trotter 00100000000000000000000000000000 supervisor 00000000000111100111011110110101 Chile 00100000000111110011111101101000 withstand 00000000000111010111111110110010 friendship 00000000000001101110110000100111 Communication 00100000000011001010010010110000 backs 00000000010100100111000000010010 uncertainties 00000000000011101110111010100111 Sharon 00100000000111010010111000101000 Wheat 00100000000010100011101110110000 linking 00000011000010010000000000001010 Jupiter 00100000000000000000000000000000 setbacks 00000000000111011010011000100011 lesser 00000000000000111000010000010000 Global 00100000000001101010000000110000 troubling 00000000000000010101010010010000 longer-term 00000000000000000000000000000000 downgrade 00000000000111111111010101110111 new-issue 00000000000000000000000000000000 diabetics 00000000000000000000000000000000 Exports 00100000000111101110100100000111 135 00000000000000000000000000000000 10.6 00000000000000000000000000000000 linage 00000000000111111110101110111001 Generally 00100000000010100000001001110010 inevitably 00000000001100000000001001110010 Reed 00101111111100001010001000001000 aboard 00000000000001100001000000001010 government-owned 00000000000000000000000000000000 Mullins 00100000000000000000000000000000 Stock-index 00100000000000000000000000000000 enabled 00000000000010110111010000110010 bacteria 00000000000100111101110010100111 weapon 00000000000100111101111101100111 Dodd 00101111111111001100111010001000 overwhelming 00000000000000000101110100010000 pickup 00000000000001100000100000100001 teaches 00000011000011100011000000010010 prevailed 00000000110000000110001000110010 Hollander 00100000000000000000000000000000 Wade 00101111111110101110000100001000 franc 00000000000111101111001010101000 fierce 00000000000000110000000000010000 refusal 00000000000111110111111100100111 touched 00000000000101101001001000110010 Pretoria 00100000000111101010101101101000 testified 00000000000101000111110111000010 Highway 00100000000000000110010010110000 Serial 00100000000000011000000110110000 Maurice 00101111111000010110110110011000 assurances 00000000000111100111100110101111 Assets 00100000000111111111110111100011 Skipper 00100000000000000000000000000000 Thornburgh 00101111111010100101000010001000 Sandinista 00100000000100000001011000110000 inner 00000000000010101000001000110000 appellate 00000000000000000001100111100101 9.2 00000000000000000000000000000000 soldiers 00000000000100101110100000110011 modernize 00000000000011111010111110110010 Kaiser 00100000000110101010111000101000 broadcasts 00000000000101000101110101100011 S 00100000000000000000000000000000 Eric 00101111111000001001000110011000 midday 00000000000111011100010000101000 county 00000000000011000000110010100101 burned 00000000000101001100010000110010 Masson 00100000000000000000000000000000 exploded 00000000001110100110001000110010 stabilized 00000000000110111010110000110010 tree 00000000000111100100111000000001 superconductors 00000000000000011110111001100011 sun 00000000000111101111011000101000 intervene 00000000000101011001010110110010 notable 00000000000000100100000010010000 volunteer 00000000000000000000100110110111 telephones 00000000000111011110111001100011 charitable 00000000000101100000000000110000 illustrates 00000000000100010011000000010010 Shareholders 00100000000111101110111010110011 Papandreou 00101111111000000100001010001000 nationally 00000000000000010111000001000111 Mattel 00100000000111011011111100101000 Scotland 00100000000111101001011101101000 Sorrell 00101111111100100000001010001000 advocate 00000000000111101100011001101111 capitalism 00000000000111101110110010100111 disappear 00000000000100111101010110110010 2.75 00000000000000000000000000000000 artistic 00000000000000100100000000110000 Higher 00100000000000000000011111000000 Lomas 00101111111111101011111010101000 H&R 01000000000000000000000000000000 blames 00000000001111100011000000010010 gamble 00001111111111111011110001001000 fairness 00000000000000001111011011100001 Does 00100000000011101100111100010010 questioning 00000000000111101111010001000000 Chan 00100000000000000000000000000000 state-controlled 00000000000000000000000000000000 heels 00000000000111110101111000001111 mid-1980s 00000000000000000000000000000000 installations 00000000000111101100110100100011 unrest 00000000000111111011111010100111 Haven 00100000000000011001011110000010 Baxter 00101111111100110110110000001000 discouraged 00000000000010110001110000110010 Carol 00101111111000000111000000011000 masters 00000000000010001110000000001000 Nikko 00100000000000000100111000101000 8.375 00000000000000000000000000000000 scholars 00000000000100010010000010110011 spare 00000000000001000100101010110000 middle-class 00000000000000000000000000000000 plead 00000000000110011001010110110010 Pharmaceuticals 00100000000111111011111010110000 furs 00000000000000000000000000000000 taxpayer 00000000000011111010111000100001 upgrade 00000000011011111111110110110010 Noting 00100000000111110111111010000010 DaPuzzo 01001111111000100110000010001000 adopting 00000000000111111010111101000000 disruption 00000000000111000111101010100111 Democracy 00100000000111101011110010100111 Scottish 00101111111011010101001000110000 staffs 00000000000101111100111101100011 restriction 00000000000110111011001011100111 fails 00000000000010000001101000110010 tripled 00000000000100011010110000110010 Vargas 00101111111100100010101010001000 watchers 00000000000000010010000010110011 cans 00000000000110000001011111001001 bail 00000000000110001110101110110010 USIA 01000000000000000000000000000000 bounced 00000000000111001011001000110010 fashionable 00000000000001110100000010010000 sliding 00000000000010011010010001000000 classified 00000000000000011001000110010000 projection 00000000000111110011011010110111 Music 00100000000010000001111100100001 cure 00000000000111110111110010110111 girl 00000000000111101100110010110101 Seng 00100000000000000101100011010000 highways 00000000000110111110111001100011 Aside 00100000000000001001111100110010 relatives 00000000000101101011110000110011 narrator 00000000000110100110100001100111 Peladeau 00100000000000000000000000000000 dominance 00000000000111110000111001100111 actress 00000000000111101001100000110101 admitting 00000000000111011111010101010000 Posner 00101111111100111110101010001000 annualized 00000000000011111001000101010000 cleaner 00000000000000000111110110110111 circles 00000000000111101100000100100011 exotic 00000000001000010000001000110000 forgotten 00000001100010010010110000110010 unfairly 00000000100101000001001001110010 picks 00000000000001010011001000110010 15.6 00000000000000000000000000000000 dilemma 00000000000111110011111101100111 accelerate 00000000000110110010111110110010 minus 00000000000000100010011010000010 Polly 00100000000000000000000000000000 fraction 00000000000111111110101110111111 library 00000000000111111011010100000001 greenhouse 00000000010100011010000000110000 cable-TV 01000000000000000000000000000000 CMS 01000000000000000000000000000000 Va 00100000000000000000000000000000 fastest-growing 00000000000000000000000000000000 Good 00100000000000000000001010010000 facsimile 00000000000111100101010000110000 Too 00100000000000000110000001110010 Freedom 00100000000111011111110100100111 cleaning 00000000000011001110010110110111 700,000 00000000000000000000000000000000 less-developed 00000000000000000000000000000000 Guinness 00100000000111101001001100101000 legislator 00000000000000001010011110110101 rebate 00000000000000001111100011000111 admission 00000000000111000111111001100111 embarrassment 00000000000111101011101100100111 OSHA 01000000000000000100101100101000 recalled 00000110000111010100010000110010 Burmah 00100000000000000000000000000000 arbs 00000000000111111111100110110011 13.5 00000000000000000000000000000000 occasion 00000000000111111011101100100111 discover 00000000000110001011110110110010 clubs 00000000000000010110110001100011 earns 00000000001100011101000000010010 unknown 00000000000010010000110110010000 boring 00000000000111100110011010010000 Fisher 00101111111101000010001000001000 alliances 00000000000110001100010000100111 old-fashioned 00000000000000000000000000000000 hazards 00000000000111111011111000100011 dizzying 00000000000001001100100000010000 strapped 00000000001001011110110000110010 Belgium 00100000000111110001111101101000 radar 00000000000000011010001010110000 fruit 00000000000110111011111010110000 existed 00000000001100100110001000110010 restrictive 00000000000000000110010010010000 tapes 00000000000111110111010101100011 leftist 00000000000000010101011000110000 Police 00100000000000000000101100100101 discretion 00000000000111101011110100100111 bosses 00000000000111000101110000110011 Staff 00100000000011100011100010000001 Chugai 00100000000000000000000000000000 declaring 00000000000110101001111010000010 prevail 00000000000001111101010110110010 Pakistan 00100000000111001011111101101000 nose 00000000000111110111010000000001 discretionary 00000000000001011000010000110000 knocking 00000000001010101110100001000000 Holmes 00101111111100110111110010001000 nonrecurring 00000000000000101010010000010000 McGovern 01001111111010101000001010001000 premiere 00000000000011001100100101100111 appointments 00000000000100101111101000100011 8.70 00000000000000000000000000000000 sleep 00000000000111101110100010110111 in-house 00000000000000000000000000000000 affiliated 00000000000000100001100000110010 navy 00000000000000001100101100100101 principles 00000000000111111101011100100011 founding 00000000000000010110010011010000 forth 00000000000000101001111100110010 ridiculous 00000000000111000100110110010000 complaining 00000000000101111111110000110010 Eaton 00100000000110111011111100101000 jolt 00000000000100010101111010110111 Barre 00101111111100111000110010001000 searching 00000000000110111110110000110010 Enterprise 00100000000111110110101101100001 Matra 00100000000011001110111100101000 juice 00000000000011101010000010100101 would-be 00000000000000000000000000000000 accessories 00000000000111111111011111001001 desperate 00000000000000100000011010010000 pile 00000000000111111110101000111111 Cuban 00100000000000011011010100110000 supposedly 00000000011001100000001001110010 weighed 00000001000001001100010000110010 premier 00000000000011000010100100100001 specializing 00000000000001111110010000110010 semiannual 00000000000000011101000101010000 Kate 00100000000000000000000000000000 recorders 00000000001001100110100100001001 Diamond 00101111011000000110111000101000 page-one 00000000000000000000000000000000 laying 00000000000111111010100001000000 upside 00000000000111000100111000110010 limitations 00000000000111111010100100100111 punitive 00000000001000010000011100010000 earth 00000000000111111100000000100101 unconsolidated 00000000000000001000000100010000 vigorous 00000000000011001000000000010000 emphasized 00000000000110100111110111000010 recruiting 00000000001001110010110001000000 demonstration 00000000000111100011101010100111 Odeon 00101111111000011001101000101000 Satellite 00100000000000100000001010110000 Buffett 00101111111110111100100010001000 Domestic 00100000000000000001010000110000 Ore. 00100000000000000000000000000000 shrink 00000000000100011010111110110010 disorders 00000000000011000110101010100011 hat 00000000000110100011110000000001 classroom 00000000000111110011110000000001 McCall 01000000000000000000000000000000 electoral 00000000001110100000000000110000 finishing 00000000000000001110100001000000 Lorin 00100000000000000000000000000000 shield 00000000000000001000110100100001 Burlington 00100000000111010111000100101000 viruses 00000000000111111010111001100011 NRM 01000000000000000000000000000000 shaky 00000000000001001000101001000000 Stuart 00101111111000000111100010011000 exporters 00000000000111110110010000110011 shelves 00000000000111111010000001100011 Production 00100000000000000000000100000111 consequence 00000000000111111010111000111111 Analytical 00101111111000000000101001001000 filters 00000000000111100110111001100011 Angels 00100000000010100101110101100011 tighter 00000000000010100100001111000000 Woman 00100000000111100111110010110101 maximize 00000000000011011010111110110010 Superfund 00100000000011100001000000110000 burst 00000000000111100101011000111111 relevant 00000000000001100011001110010000 celebration 00000000000111010010100101100111 Kelly 00101111111100111111100010001000 Keith 00101111111000110100000010011000 bureaucratic 00000000001010100000000000110000 Prospect 00100000000111111111010000001111 kidney 00000000000000001110101011100001 Johns 00101111111111110111110000101000 races 00000000000111101000000110110011 Markey 00101111111111110011111010001000 Economics 00100000000111101110101101100001 epicenter 00000000000000000000000000000000 Texans 00100000000001010111111000110011 oral 00000000000000001010010100010000 municipals 00000000000111101011111011100011 V. 00101111111001000111101011011000 generates 00000000000010011101000000010010 Goodyear 00100000011111001011001100101000 Automotive 00100000000001010000101010110000 post-crash 00000000000000000000000000000000 Barclays 00100000000011110001111000101000 counterpart 00000000000111100101101001100111 Sells 00100000000100001101000000010010 U.S.A. 01000000000000000000000000000000 Adds 00100000000111111110010111000010 Assembly 00100000000000000000000001111001 Lord 00101111111000011011101000101000 computer-guided 00000000000000000000000000000000 sagging 00000000000000101011100000010000 inched 00000000001000001011001000110010 soliciting 00000000000000010011111101000000 Alliance 00100000000111101011011001100111 buildup 00000000000111011011101010100111 constituents 00000000000111110001110000110011 breakfast 00000000000010111010000000100001 conform 00000000000111010111010110110010 ball 00000000000110100010000000001000 Genetics 00100000000101100111100101100001 joins 00000001000001100011000000010010 injury 00000000000000000011001100100111 occupied 00000000000111000000101001000000 Institution 00100000000111001111011001100111 undertaken 00000000100010010010110000110010 vacation 00000000000000011110000000100001 clock 00000000000111111110001001000101 depression 00000000000111111001101101100111 rein 00000000000011001001010110110010 marking 00000000000111100100001101000000 Adobe 00100000000110101111100100101000 55,000 00000000000000000000000000000000 Iraq 00100000000111101001111101101000 iron 00000000000111000010001000110000 aired 00000001001011001100010000110010 concentrating 00000000000101111100100000110010 high-definition 00000000000000000000000000000000 rebuffed 00000000100001111001010000110010 Kohl 00101111111100000100010010001000 Runkel 00100000000000000000000000000000 worm 00000000000111010010111010110000 B-2 00100000000000000000000000000000 gainers 00000000000101101110101001110011 valuation 00000000000111101101010010001111 vacancy 00000000000000011000010011000111 seizure 00000000000111101011001101001111 portions 00000000000111110110100100101111 readily 00000001000100000000010001110010 G.m.b 00100000000000000000000000000000 efficiently 00000000100100000000010001110010 commonly 00000000000010100111001001110010 chart 00000000000100000011001010110111 Czechoslovakia 00100000000110001100111101101000 comparisons 00000000000100101100010000100111 Schering-Plough 01000000000000000000000000000000 autos 00000000000110000111111001100011 52-week 00000000000000000000000000000000 Times-Stock 01000000000000000000000000000000 logic 00000000000110110011101001100111 soften 00000000000111110100111110110010 Operations 00100000000111101111100000001001 shocked 00000000001111001101110000110010 exclusion 00000000000111111111100101001111 Boise 00100000000111101110011010101000 middlemen 00000000000110110100111000110011 DAX 01000000000000000000000000000000 Leon 00101111111000010001100010011000 0.6 00000000000000000000000000000000 format 00000000000111101001100011100111 diverted 00000000000000111000110000110010 broker-dealer 00000000000000000000000000000000 Sloan 00101111111000111101001000001000 1967 00000000000000000000000000000000 hazardous 00000000000000011000101010110000 paint 00000000000011011111100110110111 tour 00000000000101101000100101100111 mild 00000000000011010000100000010000 Avon 00100000000110111011010100101000 Sassy 00100000000000000000000000000000 welcomed 00000010000101000101010000110010 Occidental 00100000000111100000010100101000 turbulence 00000000001110101111111010100111 reservations 00000000000110101010010010111001 Institutes 00100000000110110101110001010101 ethical 00000000000010100000000000110000 oversee 00000000001011111011111110110010 Hoylake 00100000000110000111111000101000 Philips 00100000000111101101011100101000 mandated 00000000000010011001101001000000 Foothills 00100000000000000000000000000000 Nathan 00101111111101001000000100001000 luxury-car 00000000000000000000000000000000 presents 00000010010010000011000000010010 newer 00000000011000010000001000110000 marine 00000000000101000000011010110000 3.35 00000000000000000000000000000000 mental 00000000000101000101000000110000 innovative 00000000000011000000110100010000 Pa 00100000000000000000000000000000 Declining 00100000000000010010010001000000 scuttle 00000000000100100111111110110010 abuses 00000000000111101000100010100111 avoiding 00000000000110011111111101000000 teaching 00000000000111111010110001000000 aftershocks 00000000000000000000000000000000 scarce 00000000000111110001010010010000 furor 00000000000101101010111010100111 accurately 00000000001010000000010001110010 fuels 00000000000111110101011111001001 high-technology 00000000000000000000000000000000 Mackenzie 00101111111001111100111000001000 8.09 00000000000000000000000000000000 topics 00000000000111001000001010100011 firmer 00000000000000000000111111000000 Culture 00100000000111100011001001100111 1.11 00000000000000000000000000000000 TransCanada 01000000001111001000110100101000 duck 00000000000000010001110100100001 neighboring 00000000000000010000110110101000 1.22 00000000000000000000000000000000 tabloid 00000000000001000100101100100001 Aquino 00101111111000001001100110001000 buses 00000000000111101111111001100011 Clearing 00100000000000010000000010110000 arena 00000000000111110011011001100111 Arkla 00100000000111000100111100101000 sufficiently 00000000001000111000000001110010 reunification 00000000000001101001110010100111 exporter 00000000000111110111100001110101 vessels 00000000000111111011100110001001 harmful 00000000000000001001010010010000 urges 00000000000011100011000000010010 Institutional 00100000000000010001101000110000 Crossland 00100000000000000000000000000000 Laband 00100000000000000000000000000000 hinted 00000000000100100111110111000010 8.4 00000000000000000000000000000000 inefficient 00000000000001001100000110010000 freeze 00000000000111111010001010110111 traveling 00000000000101101111000001000000 citizen 00000000000111110111111000100001 marginally 00000000001000101000010001110010 dragged 00000000000001001001001000110010 unanimously 00000000010001100001001001110010 Scowcroft 00100000000100000110100000001000 wears 00001000000110000011000000010010 investigator 00000000000001100000100000010101 thick 00000000001110001100011010010000 closed-end 00000000000000000000000000000000 mayoral 00000000000000101000111000110000 haven 00000000000000011001011110000010 colon 00000000000111101010101011100001 violent 00000000000000000101000000010000 underwrite 00000000000100110110001110110010 printer 00000000000110100000111010110000 travelers 00000000000011100001011000110011 Gorky 00100000000000000000000000000000 payout 00000000000111101111100011000111 112 00000000000000000000000000000000 Theater 00100000000100010001111010110000 infant 00000000000000100010101000110000 phrase 00000000000111001011111101100111 aiming 00000000000011011110110000110010 Sandinistas 00100000000111101111011110110011 dynamic 00000000000010010000000010010000 defective 00000000000001101100000110010000 multimillion-dollar 00000000000000000000000000000000 Metromedia 00100000000101110100111100101000 automobiles 00000000000110101111111001100011 preparation 00000000000111111111011100111001 alert 00000000000111001000001010110111 Memphis 00100000000111110111101001101000 two-day 00000000000000000000000000000000 contingent 00000000000110101000100000110010 bipartisan 00000000000000000111000000010000 awaiting 00000000000000000110010101000000 advises 00000000001000100011000000010010 Former 00100000000000000000101001110000 enabling 00000000000000110000001101000000 Insurers 00100000000000000010100001110011 analyze 00000000000111110001111110110010 practiced 00000000100101101100010000110010 credentials 00000000000110100101101001100111 generations 00000000000110110011100100101111 Schwartz 00101111111101011011000010001000 leap 00000000000111101110011000110111 p53 00000000000000000000000000000000 BMC 01000000000000000000000000000000 lag 00000000000101000111001010110111 Monsanto 00100000000111100111111100101000 runaway 00000000000001010100100000010000 privacy 00000000000011111111110010100111 throws 00000010001110000011000000010010 semiconductors 00000000000111001110111001100011 18,000 00000000000000000000000000000000 reminder 00000000000111111101011000111111 revisions 00000000000111101101111000100011 modifications 00000000000111111010011000100011 Emhart 00100000000011000101111100101000 auctioned 00000000011011000000010000110010 port 00000000000000100000011010101000 Hiroshima 00100000000000000000000000000000 troop 00000000000000000011001010100001 median 00000000000000101100011100010000 cease-fire 00000000000000000000000000000000 boy 00000000000111101110000010110101 detected 00000000100110001100010000110010 globe 00000000000000011111110000100101 defenses 00000000000111111111100110001001 silly 00000000000010011000011010010000 helpful 00000000000011001000011110010000 staggering 00000000000001110100100000010000 suggestion 00000000000111111011110000001111 scams 00000000000000000000000000000000 MMI 01000000000000000000000000000000 ivory 00000000000111110110001110101000 wing 00000000000000100001001001100111 9:30 00000000000000000000000000000000 governors 00000000000000010010101010110011 soar 00000000010101111101010110110010 highlight 00000000010001111111110110110010 Silver 00100000000011101011101110110000 collectors 00000000000110010010100000110011 tires 00000000000110101110101001100011 Lufthansa 00100000000100111100110100101000 disproportionate 00000000000000000011010000010000 exported 00000000101011000000010000110010 historic 00000000000100110010000000110000 worrying 00000000000111011111110000110010 disciplined 00000000000010000101101001000000 poorest 00000000000111101011110011010000 Wilder 00100000000000000000000000000000 Opera 00100000000100100000001100100001 Corning 00100000000101101011010100101000 Profits 00100000000111101111110000000011 dogs 00000000000000101111110101100011 Almost 00100000000000001111000001110010 ratios 00000000000111111010111001000111 Regulatory 00100000000000000101000000110000 bag 00000000000111101011111000000001 adult 00000000000000000110101000110000 lying 00000000000111111111000001000000 syndicated 00000000001000001000001010110000 notification 00000000000000000101111101001111 Ivan 00101111111000000100001010011000 sweep 00000000000001101001001010110111 Keenan 00101111111100100101111010001000 Rio 00101111111101100100101000101000 consented 00000000000110111111101000110010 blast 00000000000111110001001010110111 universal 00000000000001010000001000110000 Local 00100000000000100100010000110000 grab 00000000000000011110101110110010 conservation 00000000000000001000101101100001 supplement 00000000100100111111110110110010 Iranian 00100000000000000010010100110000 qualified 00000000000000011100010010010000 crises 00000000000111110110011000100011 disrupt 00000000001001111010111110110010 orange 00000000000100000010011010101000 market-makers 00000000000000000000000000000000 deck 00000000000111110001111000000001 Mining 00100000000000000011011010110000 Coopers 00101111110011111111111010101000 evil 00000000000001000010101000110000 intervened 00000000000001101011101000110010 announcer 00000000000000101000110000010101 Hang 00100000000111010110110110110010 Chung 00101111111010110000000100001000 inappropriate 00000000000011111000110110010000 Erbamont 00100000000000000000000000000000 script 00000000000101101101111101100111 Representative 00100000000100100111110000110101 joke 00000000000110001111101010110111 fur 00000000001010001011111010110000 cancers 00000000000011100010001010100011 variations 00000000000111101000001010100011 inflationary 00000000000000010001000100010000 appealing 00000000000111101110001110010000 Wertheim 00101111110110100000010000001000 Coats 00100000001100111010000000001000 Metal 00100000000000110100011010110000 Cairo 00100000000100010011111001101000 Children 00100000000111101110111100110011 Salinas 00101111111100001000110010001000 parity 00000000000111101000110000100111 1930s 00000000000000000000000000000000 irresponsible 00000000000111110101000110010000 fallout 00000000000110100011001100100111 indirect 00000000000001010000010100010000 pesticide 00000000000000100001110000100001 taped 00000000000000100101101001000000 backup 00000000000000000110100000100001 inspector 00000000000000010010110000110101 Woolworth 00100000000111000010111100101000 jokes 00000000000110101101110101100011 recessions 00000000000011000101110101100011 7.4 00000000000000000000000000000000 totals 00000000000000001010100100110010 develops 00000000000000111101000000010010 ample 00000000000000000010000110010000 Searle 00100000000111001100110000001000 yourself 00000000000000001011010001110010 interpret 00000000010100111011111110110010 soybeans 00000000000111111111101110110000 emerges 00000000000000001100001000110010 tens 00000000000111101000111000101111 Southwestern 00100000000110110000110110101000 Chivas 00100000000000000000000000000000 50-50 00000000000000000000000000000000 diamond 00001111011000000110111000101000 Banknote 00100000000000000000000000000000 mirror 00000000000111111011010001001000 overseeing 00000000000001000011011101000000 Make 00100000000111111011101110110010 scope 00000000000111111111111000001111 insistence 00000000000111111000101011100111 proposes 00000000000000011100101000110010 Giovanni 00101111111110011000001000011000 ballot 00000000000111100010000001100111 stunning 00000000000000110100100000010000 suspects 00000000011111101111000000010010 Allied-Signal 01000000000000000000000000000000 raiders 00000000000111101011110000110011 Actually 00100001000000000000001001110010 communication 00000000000011001010010010110000 publicized 00000000000000001101010010010000 7.96 00000000000000000000000000000000 Advertisers 00100000000110110010111000110011 Graham 00101111111001010100000100001000 refer 00000000000110110111010110110010 2008 00000000000000000000000000000000 physicians 00000000000100111100111000110011 illustration 00000000000110101100111001100111 passion 00000000000111111110110000000001 Murdoch 00101111111100101000010010001000 fueling 00000000000001010111011101000000 employ 00000000000000100011001110110010 wishes 00000000000111000010101000110010 Parks 00100000000100000011000001111001 Daewoo 00100000000111110111011000101000 organizing 00000000010110000010110001000000 Read 00100000000101111010010110110010 billings 00000000000111111110011000000111 audio 00000000000000001101011010110000 Blair 00101111111100100111111000001000 careers 00000000000111101101011101100011 exchanged 00000000000010010000010000110010 toxic 00000000000000000100101010110000 Venice 00100000001101111111111001101000 consolidating 00000000000111010001011101000000 capture 00000000000100011111110110110010 Carat 00100000000000000000000000000000 rationale 00000000000111111001011100111001 Morton 00101111111101001000101000101000 Miami-based 00100000000000000000000000000000 frightened 00000000000110100101110000110010 understands 00000000001011100011000000010010 co-chief 00000000000000000000000000000000 first-quarter 00000000000000000000000000000000 Alar 00100000000110001010110010100111 lined 00000000000110110011001000110010 cruise 00000000000000000101110000110000 component 00000000000111100010100101100111 Armco 00100000000110110011111100101000 Peugeot 00100000000010000011111100101000 public-relations 00000000000000000000000000000000 stupid 00000000000100011000011010010000 layer 00000000000100110110111001000111 Hoechst 00100000000111001101011100101000 sends 00000000000100000011000000010010 Olympia 00101111111101111111111010101000 deliveries 00000000000111100010000100000111 route 00000000000111001110011000000001 justices 00000000000000001000100110110011 ruble 00000000000111111111101101000101 Enron 00100000000111111011111100101000 Nuclear 00100000000000000001110000110000 Vietnamese 00100000000000111000010100110000 cooperatives 00000000000111101001110001100011 Nevada 00100000000111111010110001101000 improves 00000111000010000011000000010010 Yes 00100000000111110011111011101000 shouted 00000000110110011110001000110010 profession 00000000000111111101000011100111 Games 00100000000001000100101001100011 galvanized 00000000000000000000000000000000 revealed 00000000000010000101110111000010 stimulate 00000000000110111100111110110010 embarrassing 00000000000011000110110100010000 bribe 00000000000111101101001101000111 Never 00100000000000000100001001110010 S.C. 01000000000000000000000000000000 sheer 00000000000101000010000000110000 tale 00000000000110101101100101100111 Prior 00100000000000011000111000110010 synthetic 00000000000100001100101010110000 stealing 00000000000100110011111101000000 104 00000000000000000000000000000000 Nations 00100000000000000000011101110011 Strategic 00100000000000010010000000110000 sections 00000000000111011100000100101111 Belo 00100000000100011110111100101000 Laboratory 00100000000000111000100000100001 enemies 00000000000111101011011101100011 Producers 00100000000111101110010000110011 Video 00100000000000001000001010110000 respective 00000000000000001011010010101000 bitterly 00000000001010000001001001110010 sing 00000000000100001110101110110010 eastern 00000000000000000011110110101000 Panetta 00100000000000000000000000000000 gridlock 00000000000000000000000000000000 enact 00000000001000111111101110110010 adequately 00000000000110000000010001110010 entitlement 00000000000000000000001101100001 Fine 00100000000000010010000001000111 Mulford 00101111111101011010110010001000 placing 00000000000110101011111101000000 fighter 00000000000001010010001010110000 handles 00000000001101001101000000010010 therapy 00000000000011100110011010100111 Burger 00101111111011011000011100001000 separation 00000000000111101111101101001111 overcapacity 00000000000111010111111010100111 flaws 00000000000111110001111000100011 practicing 00000000000010010001110101000000 Cascade 00100000000000000101100010100101 riskier 00000000000011010100001111000000 deemed 00000000001101111100010000110010 Sherman 00101111111000101101001000001000 Marlin 00101111111010110101101100011000 habits 00000000000000000101011100100011 lasted 00000000010000000110001000110010 FEMA 01000000000000000000000000000000 tensions 00000000000100101011111010100111 Circus 00100000001000001010100100100001 draws 00000000110100000011000000010010 Fire 00100000000111101110000110110111 hammered 00000000001001001001001000110010 Suzuki 00100000000111011011011000101000 Ontario 00100000000111001110101001101000 one-hour 00000000000000000000000000000000 Pretax 00100000000000000010000101010000 Pittston 00100000000111101010111100101000 Refcorp 00100000000000000000000000000000 generous 00000000000000000010010010010000 Al 00100000000000000101110000011000 rubble 00000000000000000000000000000000 breed 00000000000000000000001101110111 Luzon 00100000000000000000000000000000 tip 00000000000100101001001010110111 Yields 00100000000111101101000011000111 literature 00000000000111101101101101100001 Details 00100000000111101111001100101111 distributes 00000000000100011101000000010010 tremors 00000000000101001110010101100011 woes 00000000000111111101111000100011 S&Ls 01000000000000000000000000000000 Article 00100000000111101111001000100111 prudent 00000000000001110000010010010000 von 00001111111100111100010101001000 trusts 00000000000010110111000100100011 Rates 00100000000111111111101101000011 notebook 00000000000111111001110000000001 Lisa 00100000000001101000001000011000 sentences 00000000000100001100000001100111 Recent 00100000000000000000101100010000 Shapiro 00101111111010000110100010001000 Popular 00100000000000000010000010010000 Short-term 00100000000000000000000000000000 delta 00000000000111101100010001101000 uniform 00000000000110000101000000010000 initiated 00000000000010111001010000110010 Cambodia 00100000000110110101011101101000 troublesome 00000000001000010101010010010000 coupled 00000000000111111011100000110010 express 00000000000011000010001010101000 planted 00000000010100001100010000110010 tall 00000000000110001100011010010000 terrible 00000000001010001100011010010000 Alaskan 00100000000000001010010100110000 posed 00000000000000110111010000110010 joint-venture 00000000000000000000000000000000 representation 00000000000100100000001100100111 spun 00000000000011101001001000110010 flood 00000000000111111110111000111111 praised 00000000001111110101010000110010 Cie. 00100000000000000000000000000000 Interprovincial 00100000000000000000000000000000 temperatures 00000000000111101100100100000011 Kangyo 00100000000011111001111000101000 kroner 00000000000000000100100000001011 Indians 00100000000110100011100110110011 Mehta 00100000000101111000111010001000 8.02 00000000000000000000000000000000 volumes 00000000000110001100000100101111 owe 00000000000111011010101110110010 Raytheon 00100000000111111101111100101000 regulate 00000000010011111011111110110010 visitor 00000000000101100011001011100111 touting 00000000000110001111001101000000 Ind. 00100000000000000000000000000000 overdue 00000000000110010000011100010000 Californians 00100000000110100011011000110011 2005 00000000000000000000000000000000 pointing 00000000000111110111100001000000 Cambria 00100000000000000000000000000000 Shopping 00100000000000000000100101100001 contaminated 00000000000001010001101001000000 boomers 00000000000101100010010111110011 shaking 00000000010101101110100001000000 dispatched 00000011011011000101010000110010 nerves 00000000000111011101111101100011 Nev. 00100000000000000000000000000000 deferring 00000000000010110011011101000000 executing 00000000000111110101111101000000 Ana 00100000000000010010000001001000 undermine 00000000000101111100111110110010 detectors 00000000000000000001101111001001 Dallas-based 00100000000000000000000000000000 weighted 00000000000011101010001001000000 141.90 00000000000000000000000000000000 20-year 00000000000000000000000000000000 Ernst 00101111111011111111111010101000 photography 00000000000111100110001101100001 curbing 00000000000000111111011101000000 Can 00100000000000000000110110010010 2010 00000000000000000000000000000000 hero 00000000000111111011110000000001 high-priced 00000000000000000000000000000000 non-callable 00000000000000000000000000000000 109 00000000000000000000000000000000 skepticism 00000000000111101110111010100111 planet 00000000000111001101011000000001 Savaiko 00101111111101001010110010001000 attend 00000000000111111001011110110010 clerk 00000000000110111100011110110101 Vanguard 00100000000000100011010100101000 float 00000000001111111101010110110010 Communists 00100000000111101011011110110011 spoken 00000000101111110010110000110010 des 00001111111011001111001101110000 exchange-rate 00000000000000000000000000000000 scaled 00000000000010001001001000110010 directs 00000000011010000011000000010010 Rev. 00100000000000000000000000000000 mainstream 00000000000110100110101001000000 Women 00100000000111101100111100110011 shirts 00000000000011111111110101100011 champion 00000000000111101110000100100001 Scientists 00100000000001000110000010110011 chair 00000000000111110100010000000001 Charleston 00100000000111001101101001101000 hats 00000000000101000111110101100011 parallel 00000000000000000110101001000000 Ball 00100000000110100010000000001000 wires 00000000000100011111110101100011 boat 00000000000111111100001000100001 frenzy 00000000000111011010100101100111 accomplish 00000000000111010110100110110010 parliament 00000000000111101101101101101000 double-digit 00000000000000000000000000000000 adapted 00000000000111101000110000110010 stars 00000000000110101001110101100011 vague 00000000000100000100011010010000 achievement 00000000000110111111111001100111 unsolicited 00000000000000110001001100010000 Datapoint 00100000000111010011111100101000 Equitable 00100000000000011001111000101000 dealership 00000000000110101001110010001001 decliners 00000000000101111100101001110011 prohibits 00000000000000110001000000010010 high-end 00000000000000000000000000000000 outspoken 00000000000000010101110100010000 preserving 00000000000110011111011101000000 fabric 00000000000101011011111010110000 illness 00000000000111111010110010100111 aged 00000000000000000001100001000111 Neb. 00100000000000000000000000000000 haul 00000000001110011110010110110010 Retirement 00100000000000000000011011100001 smallest 00000000000001101010000011010000 coupons 00000000000111101100000100000011 relax 00000000000110101100111110110010 subscription 00000000000000110010000000100001 architect 00000000000111011111110000110101 spectacular 00000000000001101000000000010000 Morrison 00101111111100000010001000001000 Andress 00100000000000000000000000000000 altered 00000000000001011100111001000000 Materials 00100000000000000001000111001001 Aeronautics 00100000000110111111100000110000 elevators 00000000000111000111110001100011 -the 00000000000000000000000000000000 tapped 00000011000101000101010000110010 sums 00000000000111110111101010001111 widening 00000000000000000111010001000000 6.1 00000000000000000000000000000000 departures 00000000000111111000101000100011 Seven 00100000000111111001111001010000 Newhouse 00100000000100101000000000001000 Md 00100000000000000000000000000000 Sim 00100000000000000000000000000000 technological 00000000000100000010000000110000 9.75 00000000000000000000000000000000 -and 00000000000000000000000000000000 balked 00000000000111111001110100110010 liquidated 00000001000111010100010000110010 Falcon 00100000000011101110000000001000 earmarked 00000000000000111110110000110010 laboratories 00000000000010000001001011101001 Vila 00100000000000000000000000000000 downside 00000000000111000011111101100111 Gallagher 00101111111110000110100010001000 bowling 00000000000000000010001100100001 scare 00000000011111010110010110110010 Bozell 00100000000111110011110000101000 males 00000000000000010010011100110011 shifts 00000000000000100111001000100011 Trinova 00100000001110101010111100101000 Sutton 00101111111110000000001010001000 clutter 00000000000111111100110101100111 Bryant 00101111111100110100111010001000 AM 01000000000000000100111110000010 chancellor 00001111110111110010010110010101 Strong 00100000000000000001100000010000 colleges 00000000000111010110111000110011 Corr 00100000000000000000000000000000 Brunswick 00100000000000101001011110000010 7.95 00000000000000000000000000000000 jolted 00000000100111100111010000110010 neglected 00000000000111110101101001000000 Grant 00100000000000001010000110110111 surrender 00000000000100111111110110110010 accountants 00000000000111100110111000110011 Subcommittee 00100000000000000010000001010101 Freeport-McMoRan 01000000000000000000000000000000 Indonesia 00100000000111010011111101101000 Memotec 00100000000001111001000100101000 warn 00000000000011011001100110110010 countersuit 00000000000000000000000000000000 abruptly 00000000000110100000010001110010 pet 00000000010000010000001000110000 Dictaphone 00100000000000000000000000000000 BT 01000000000000000000000000000000 shippers 00000000000000001100010000110011 Roper 00100000000100100011101100101000 unprofitable 00000000000010000000101001000000 82 00000000000000000000000000000000 1.24 00000000000000000000000000000000 loved 00000000000110010000110111000010 predictable 00000000000001001001010010010000 facilitate 00000000000010101011111110110010 5.7 00000000000000000000000000000000 Enforcement 00100000000000000000010011100001 assumptions 00000000000111110000101000100011 Film 00100000000000000000101000100001 encountered 00000000001110011100010000110010 journalist 00000000000111000110011110110101 DD 01000000000000000000000000000000 illustrate 00000000000010011100100110110010 shy 00000000000110101010010110110010 misstated 00000000000000000011110100110010 distant 00000000000111110000000010010000 2018 00000000000000000000000000000000 Brawer 00100000000000000000000000000000 dressed 00000000001111011110010000110010 regret 00000000000110011110000110110010 NAHB 01000000000000000000000000000000 equipped 00000000000111110001100000110010 Donuts 00100000000111110001010000100011 Met 00100000000111110110010000110010 re-election 00000000000000000000000000000000 traveled 00000000001011101011101000110010 thrust 00000000000110101001001010110111 exceptionally 00000000000001001100000001110010 clouds 00000000000100011111000000010010 abrupt 00000000000000010100010100010000 brand-name 00000000000000000000000000000000 Stadium 00100000000001101011000100000001 infringement 00000000000000000110100010100111 adoption 00000000000111101110110101001111 hottest 00000000000001100000010011010000 Leading 00100000000000010000011000010000 Individuals 00100000000110101110111000110011 circulating 00000000000111010011000001000000 indirectly 00000000010000010000010001110010 Uniroyal 00100000011000111001111000101000 1966 00000000000000000000000000000000 Giorgio 00101111111101001010101010001000 contentious 00000000000000010100000010010000 Week 00100000000111111111110101100010 horrible 00000000000001101110011010010000 courses 00000000000111101011110100100011 Drew 00100000000001001011000000010010 packaged 00000000000110010001101001000000 Cox 00101111111100101001100010001000 expression 00000000000111101000111001100111 homelessness 00000000000000000000000000000000 struggles 00000000000111111111001000100011 End 00100000000111111111110100001111 fitness 00000000000000000100101101100001 titles 00000000000111010111010101100011 Jeep 00100000000000001110001000100001 photo 00000000000011010000100000100001 walked 00000000010111110001001000110010 20th 00000000000000000000000000000000 weaknesses 00000000000111100001111000100011 Stoltzman 00100000000000000000000000000000 Experts 00100000000000000000000010110011 Southmark 00100000000110101101111100101000 1.03 00000000000000000000000000000000 gradual 00000000000001010000100000010000 Anheuser-Busch 01000000000000000000000000000000 unfavorable 00000000000000100110010100010000 tumor 00000000000111001110110000100001 Helmut 00101111111000001110001010011000 prelude 00000000000111001101111100100111 preferences 00000000000111011011011100100011 cereal 00000000000110011011111010110000 dioxide 00000000000010001011011111001001 quantity 00000000000111111101101010001111 141.45 00000000000000000000000000000000 Benton 00101111111100011011111000001000 Exploration 00100000000110101001100001100001 Gabelli 00100000000000101010000000001000 bread 00000000000110111101110010100111 Seats 00100000000000101001000001100011 Direct 00100000000000000000011100010000 Dassault 00100000000000000000000000000000 laser 00000000000001000010101010110000 theories 00000000000110001001101000100011 fix 00000000001011111111110110110010 wiped 00000000000111010001001000110010 Liberal 00100000000000010010011000110000 uneasy 00000000000100011111110000110010 Di 00101111111010100101001000011000 8.30 00000000000000000000000000000000 Lauder 00100000000101011011000001001000 credible 00000000000011001101010010010000 precise 00000000000001101001000000010000 inherent 00000000000000001100110100010000 analyzed 00000111000111010100010000110010 stones 00000000001111100111110101100011 Storage 00100000000000000010100001100001 chairmen 00000000000110110110001010110011 widow 00000000000111101001011110000001 Cap 00100000000110100001001010110111 veterans 00000000000000100010111010110000 ACCOUNT 01000000000111101010111110111001 break-even 00000000000000000000000000000000 Fleet 00100000000111101110011000100001 implement 00000000000111101011111110110010 piano 00000000000010011000001100100001 Westmoreland 00100000000100110010111000101000 versus 00000000000000000000101010000010 delaying 00000000000000111001011101000000 mandate 00000000000111011101111010110111 commissioned 00000000000000100000010000110010 leather 00000000000000001010001100100001 Edwin 00101111111000000110011010011000 internationally 00000000010000100100010001110010 politician 00000000000111100011110010110101 Charlie 00100000000011000100100000011000 Boesel 00100000000000000000000000000000 Nationwide 00100000000000000001000001000111 Plaza 00100000000000000101010100000001 govern 00000000000010011110101110110010 short-lived 00000000000000000000000000000000 Retailers 00100000000111001110010000110011 reformers 00000000000111110000000110110011 recognizing 00000000000110001001111010000010 pour 00000000000010001010101110110010 Sens. 00100000000000000000000000000000 Clinton 00100000000001010000000100001000 evaluating 00000000000111110110010101000000 8.04 00000000000000000000000000000000 engaging 00000000000101011110010000110010 Ambassador 00100000000111111000001100100111 ghosts 00000000000000000000000000000000 reputable 00000000000000000000000000000000 issuer 00000000000111111111011001000101 brilliant 00000000000001000000000010010000 Timothy 00101111111000001001110110011000 Pete 00101111111001000000001000011000 lady 00000000000111101011110010110101 billed 00000000000110100010110000110010 Mich 00100000000000000000000000000000 distinctive 00000000000000110100000010010000 seasons 00000000000000000010011100011011 luck 00000000000111110110111010100111 long-awaited 00000000000000000000000000000000 fiercely 00000000000010101000000001110010 struggled 00000000001010101011101000110010 Sinyard 00100000000000000000000000000000 Tribune 00100000000001001011010001001000 angered 00000000000110110111010000110010 disruptions 00000000000111001111111000100011 accelerating 00000000000000001001010001000000 Falls 00100000000011101000001000110010 Certainly 00100000001011000000001001110010 beach 00000000000001000011000010100101 belongs 00000000000011100001101000110010 18.95 00000000000000000000000000000000 bottles 00000000000111001001011111001001 outer 00000000000100010000001000110000 Bloc 00100000000101110101000010101000 Current 00100000000000000001000011010000 designing 00000000000101001111111101000000 Speculation 00100000000111101101111010101111 lighter 00000000000011100100001111000000 consolidate 00000000000010011010111110110010 D 00100000000000000000000000000000 dedicated 00000000000101100000111000110010 diagnostic 00000000000010000010101010110000 everyday 00000000011010010000001000110000 Atlanta-based 00100000000000000000000000000000 Spencer 00101111111100101101110001001000 shots 00000000000000101101110101100011 streamline 00000000000101101100111110110010 palladium 00000000000000000000000000000000 Apparently 00100000000010000000001001110010 20.5 00000000000000000000000000000000 Danny 00101111111000000000011100001000 diet 00000000000101101010010000000001 convincing 00000000000000000011010010010000 Winter 00100000000100101001010000010111 mode 00000000000100001111101001100111 Angelo 00100000000000000000000000000000 injection 00000000000101100100111001100111 hurry 00000000000111111111101010110111 applying 00000000000111110010110101000000 1965 00000000000000000000000000000000 constituency 00000000000111000101101001100111 workstation 00000000000010111100001000100001 bankrupt 00000000000000010010110110010000 boiler 00000000000001101001111010110000 nasty 00000000000010010000011010010000 Things 00100000000111101111100110100011 Cigna 00100000000010101110111100101000 1.18 00000000000000000000000000000000 Rothschilds 00100000000000000000000000000000 Rostenkowski 00101111111100101010111010001000 leeway 00000000000101100111110100100111 Task 00100000000111010101100000110111 write-offs 00000000000000000000000000000000 kick 00000000000101010110010110110010 Worldwide 00100000000000011010010010110000 Russia 00100000000111111010101101101000 cease 00000000000110001001110110110010 donor 00000000000110101000111000100001 underestimated 00000000110101000101010000110010 Ideal 00100000000000000110110100010000 dignity 00000000000111011111110010100111 verge 00000000000111111111011100001111 tighten 00000000000111010010111110110010 subpoena 00000000000111101001111010110111 Laurence 00101111111000000111000110011000 LecTec 01000000000000000000000000000000 Persian 00100000000011001011100011010000 lab 00000000000010100000100000100001 Container 00100000000011000000011010110000 Espectador 00100000000000000000000000000000 supervisors 00000000000011010110101010110011 casinos 00000000000000010000110001100011 Nebraska 00100000000110111110110001101000 preceding 00000000000000000011010001100010 crew 00000000000000000011010100000001 declare 00000000001101101011111110110010 rank 00000000000111111010100110110111 Stanford 00100000000000000111111000101000 evolution 00000000000111110100111001100111 coordination 00000000000000100111111010100111 deferred 00000000000100010000011100010000 attributes 00000000011100100111000000010010 Doug 00101111111011100000001000011000 MedChem 01000000000000000000000000000000 Matsushita 00100000000111111000100100101000 unpaid 00000000000010110000011100010000 inherited 00000000110001101100010000110010 pickers 00000000000000000000000000000000 photographic 00000000000011110100101010110000 Freeway 00100000000001000110111000000001 intensify 00000000001010111010111110110010 spacecraft 00000000001100111010001010110000 Bradford 00101111111011001000000100001000 impressed 00000000000110110101110000110010 1.26 00000000000000000000000000000000 seventh 00000000000111101011100011010000 derived 00000000000011110001100100110010 Collins 00101111111101101000001000001000 necessity 00000000000111011111111000001111 frame 00000000000000000110111000000001 sedan 00000000000000011111101001100011 Brennan 00101111111000000101100010001000 Nielsen 00100000000011101011000001001000 Inland 00100000000111000010111000101000 specter 00000000000111111101011000001111 Jamaica 00100000000110100110101101101000 1906 00000000000000000000000000000000 minicomputers 00000000000111110101111001100011 Franco 00100000000001100010000100001000 1.55 00000000000000000000000000000000 FDIC 01000000000000000000000000000000 14.6 00000000000000000000000000000000 Batibot 00100000000000000000000000000000 Chiat 00101111111111011110110010001000 Rupert 00101111111011000110001010011000 Mo. 00100000000000000000000000000000 Singer 00100000000111001101110000001000 plight 00000000000111101011111000001111 measuring 00000000000010110010110001000000 Mahfouz 00100000000000000000000000000000 bricks 00000000000111100000111001100011 addressing 00000000000111101110111101000000 Gregory 00101111111001100101010100001000 enters 00000001110010000011000000010010 grades 00000000000111011011100100101111 automated 00000000000000101000101010110000 traffickers 00000000000111100111011100100101 vacated 00000000101001111001010000110010 tap 00000000000111001110101110110010 glory 00000000000100111111011010100111 excesses 00000000000100110111111000001111 pumped 00000000010101101001001000110010 wonderful 00000000000010001100011010010000 Marcus 00101111111101100000001000001000 mired 00000000000110011110010000110010 spooked 00000000010110100001110000110010 Assurance 00100000000000011110010001110010 timely 00000000000100000101000000010000 differ 00000000000001011000010110110010 Z 00100000000000000000000000000000 experimental 00000000000000000010101000110000 Eugene 00101111111000000101000110011000 principals 00000000000111110110101010110011 desperately 00000000001100000001001001110010 elimination 00000000000111001110111000001111 inaccurate 00000000000011100100000110010000 enterprise 00000000000111110110101101100001 NCR 01000000000000000000000000000000 novels 00000000000111111111110101100011 spouses 00000000000111101110011100110011 plagued 00000000001111000001110000110010 Brokers 00100000000000000000001101010011 slim 00000000000111101011100000010000 O'Brien 01001111111110001000100010001000 suburb 00000000000000000110010000110101 Winnebago 00100000000000000000000000000000 hunting 00000000011000000010110001000000 switching 00000000001111111010110001000000 chapter 00000000000000000001110001100010 objects 00000000000101101111001000100011 Venezuela 00100000000111100110111101101000 Joan 00100111111000000100111000011000 NASD 01000000000000000000000000000000 prevailing 00000000000000001111000011010000 plaintiff 00000000000111110101110000100101 absorbed 00000000001011001100010000110010 Rubbermaid 00100000000111011011101100101000 intensity 00000000000111011011111000001111 Consulting 00100000000001000000000010110000 scrapped 00000000010111010100010000110010 importing 00000000000011000011110001000000 continually 00000000101100000000010001110010 commentary 00000000000111001111001011100111 camps 00000000000100101110110110001001 Benefit 00100000000111100011110110110010 surviving 00000000000000010101100011010000 Wash 00100000000111111111110100100001 speaks 00000000000110011110001000110010 perceptions 00000000000111101011011010101111 materialized 00000000001010010010110000110010 sharper 00000000000000001100001111000000 U 00100000000000000000000000000000 buck 00000000000111111011000110110111 mile 00000000000111110100100001010000 undercut 00000000001000110010010110110010 Aer 00100000000000000000000000000000 Hotels 00100000000111001010110001100011 residence 00000000000110101001101001100111 subordinate 00000000000100101000001001000000 Pension 00100000000000000001111110110000 frantically 00000000000000000000000000000000 inevitable 00000000000011101010110110010000 babies 00000000000000101011011100110011 peaceful 00000000010001000001000000010000 landed 00000000011000001100010000110010 cry 00000000000001110011110110110010 shoot 00000000010111010110010110110010 borders 00000000000111100010111101100011 Presidents 00100000000110110111111001001101 triple 00000000000111001010011011000000 relieve 00000000000011100011111110110010 oils 00000000000111101111101111001001 Depression 00100000000111111001101101100111 Long-term 00100000000000000000000000000000 turf 00000000000001100010110000000001 Marsh 00101111110101101111111010101000 high-profile 00000000000000000000000000000000 enactment 00000000000111111100101101001111 floating-rate 00000000000000000000000000000000 ABM 01000000000000000000000000000000 fundamentally 00000000001010000000000001110010 four-day 00000000000000000000000000000000 Aluminum 00100000000000001100011010110000 sacrifice 00000000000001111111110110110010 Gelbart 00100000000000000000000000000000 diamonds 00000000000110110111111001100011 flowers 00000000000111101011010101100011 Soo 00100000000000010011101010101000 486 00000000000000000000000000000000 domestically 00000000000000111111111001100011 Mortgage-Backed 01000000000000000000000000000000 satisfactory 00000000000010100001010010010000 Nuovo 00100000000000000000000000000000 contention 00000000000111100111010000001111 Junk 00100000000000010000000110110000 debenture 00000000000000000000001010110001 adjusting 00000000000111110111110101000000 Lower 00100000000000000001011111000000 pie 00000000000000000001011000000001 displayed 00000000111000001100010000110010 Senior 00100000000110100111101001110000 1.42 00000000000000000000000000000000 80,000 00000000000000000000000000000000 grower 00000000000011100001100001110101 Barnett 00101111111000000010111000101000 Kean 00100000011100010101111010001000 underground 00000000000010100010101000110000 poised 00000000000101101100110000110010 dismiss 00000000000101101011111110110010 shah 00000000000111101110100000001000 880 00000000000000000000000000000000 Southam 00100000000000001100111100101000 mechanical 00000000000010100100101010110000 CO. 01000000000000000000000000000000 Ethics 00100000000111000111011001010001 Iverson 00100000000000000000000000000000 fetal-tissue 00000000000000000000000000000000 acid 00000000000100010000111011100001 journalism 00000000000000000101101101100001 jitters 00000000000111111001011010101111 swelled 00000000000001011010110000110010 futures-related 00000000000000000000000000000000 improperly 00000000000110000001001001110010 merits 00000000000110011101111000001111 Strip 00100000000100111111110100100001 Ellis 00101111111000100001111000001000 underscored 00000000001100100111010000110010 noon 00000000000101100100010000101000 summoned 00000000001111011000110000110010 roles 00000000000111000111101110100111 year-to-year 00000000000000000000000000000000 flawed 00000000000111001110110110010000 earliest 00000000000111111111010011010000 lifting 00000000000110101111010001000000 Which 00100000000111111111111001110010 swaps 00000000000110100000010000100111 graduates 00000000000101001000111000110011 incomplete 00000000000000110010000110010000 Kremlin 00100000000111111101110000100101 anti-virus 00000000000000000000000000000000 Investment-grade 00100000000000000000000000000000 Walters 00101111001000101100000010001000 Cypress 00100000000000110000100100101000 Ends 00100000000011100110001000110010 cracks 00000000000111111111111000100011 figuring 00000000000111110010100001000000 invented 00000000011011000101010000110010 machine-tool 00000000000000000000000000000000 nursing 00000000000111110000001010110000 Karen 00101111111000010100110110011000 Wilmington 00100000000111111011101001101000 McNamee 01000000000000000000000000000000 Kaye 00101111111001011101001000001000 vendors 00000000000110111100010000110011 waive 00000000000110110011011110110010 installment 00000000000000000101100001000111 Carla 00100000000000000000000000000000 judgments 00000000000111100000101000100011 distorted 00000000001110110001110000110010 capita 00000000000110111111000001000111 Wilbur 00101111111000010011010100001000 decree 00000000000100110110001011100111 furriers 00000000000000000000000000000000 prosperity 00000000000111000111111010100111 contracting 00000000000000000101100000111001 fortune 00000000000010001010000001000111 Abortion 00100000000000101001010000100001 Crown 00100000000000001000100100100001 Garden 00100000000000000011111100100001 theirs 00000000000101101001110010100111 Rome 00100000000101111111111001101000 notify 00000000001001100011111110110010 0.05 00000000000000000000000000000000 Artist 00100000000111110101100000110101 jittery 00000000000011001111110000110010 ISI 01000000000000000000000000000000 undervalued 00000000000001100000110110010000 Norway 00100000000111110110111101101000 drastically 00000000000100101000010001110010 fever 00000000000111101010001101100111 franchisee 00000000000111111001100001110101 275 00000000000000000000000000000000 diminish 00000000000111001010111110110010 gin 00000000000110110011111010110000 lasting 00000000000001100000000000010000 busiest 00000000000000000101110011010000 worsening 00000000000001100111010001000000 Greene 00101111111100110100011010001000 Belgian 00100000000000001110100100110000 7.8 00000000000000000000000000000000 1.65 00000000000000000000000000000000 7.92 00000000000000000000000000000000 chemistry 00000000000111110111001101100001 investment-banking 00000000000000000000000000000000 Dayton 00101111111110101000101000101000 Maria 00100000000001100110001000011000 unfortunately 00000000000111111011111011101000 Ackerman 00101111111100011111100010001000 decision-making 00000000000000000000000000000000 blessing 00000000000111101110101110100111 fights 00000000000000101110110000100111 closes 00000000010100000011000000010010 malls 00000000000111111011110100100011 vetoed 00000000001001101001010000110010 trucking 00000000000000111011011010110000 delighted 00000000000011101101110000110010 specialize 00000000000101001001010110110010 afterward 00000000001010100100010001110010 copying 00000000011100000010110001000000 Addison 00101111111010100100001000001000 Dillon 00100000000110000100110000101000 bother 00000000000111100101000110110010 Project 00100000000111101011100011100111 Vatican 00100000000011010001101011000101 Quayle 00101111111100111110111010001000 vested 00000000001110010000011100010000 1.8470 00000000000000000000000000000000 carpet 00000000000100111011111010110000 fulfill 00000000000100111110001110110010 fish 00000000000111101101100000100001 upheaval 00000000000110111011111010100111 Ron 00101111111010001000001000011000 Color 00100000000110101100001010110000 Rudolph 00101111111100110001101100011000 clues 00000000000111111111001110100011 GMAC 01000000000000000000000000000000 extradition 00000000000000000000000101001111 technicians 00000000000100001010000010110011 475 00000000000000000000000000000000 Warburg 00100000000000000110100000101000 differently 00000000000100100100010001110010 assassinations 00000000000110101101100010100111 Dong 00100000000000000000000000000000 companion 00000000000000010011110000000001 1.29 00000000000000000000000000000000 unidentified 00000000000000000101101000110000 non-performing 00000000000000000000000000000000 singled 00000000000110001001001000110010 innovation 00000000000001001111110010100111 enjoying 00000000000111101111000101000000 hurdles 00000000000111110101111000100011 responsive 00000000000111110110011110010000 Cup 00100000000000000010100101100111 panels 00000000000000101011000001010101 concert 00000000000111101011111100100001 Ryder 00100000000000100000100100101000 detailing 00000000011010010000000000001010 Thurmond 00100000000111111000111010001000 tenants 00000000000110111011110000110011 circulated 00000000000001010101110111000010 cautiously 00000001100000000000010001110010 compatible 00000000000110101101100000110010 disadvantage 00000000000110100111101010100111 Milwaukee 00100000000001111111111001101000 additions 00000000000110011111001000100011 literary 00000000000001100000000000110000 east 00000000000010000000001110101000 BPCA 01000000000000000000000000000000 reliance 00000000000111111000010100101000 acquires 00000000000000010101000000010010 Factory 00100000000111101010100000100001 WSJ 01000000000000000000000000000000 shelters 00000000000111111110001100000011 chooses 00000000000010000000101000110010 1.23 00000000000000000000000000000000 calendar 00000000000000001100000001000111 strategists 00000000000010010010000010110011 collar 00000000000000000010111000000001 lights 00000000000011001111110101100011 scrap 00000000010101111111110110110010 blank 00000000000000101000011010010000 slack 00000000000111110111100000010000 Afghan 00100000000000000111011000110000 39.55 00000000000000000000000000000000 ICI 01000000000000000000000000000000 13.4 00000000000000000000000000000000 similarly 00000000000111100111111011101000 Works 00100000000111101111000000010010 prepares 00000000000011010010101000110010 ethylene 00000000001001000100011010110000 capitalists 00000000000111101010111011101001 silent 00000000000000101000110110010000 newest 00000000000010010000010011010000 Enfield 00100000000000000000000000000000 Michel 00101111111000001100010100001000 Municipals 00100000000111101011111011100011 bets 00000000000111001011111101100011 artificial 00000000000001100000010100010000 hurdle 00000000000111111100111010110101 succession 00000000000110100101101010100111 tie 00000000000111010110010110110010 Lumpur 00100000000000000000000000000000 1.875 00000000000000000000000000000000 Kuala 00100000000000000000000000000000 yard 00000000000000011111000001000111 relying 00000000000111110000100000110010 deserves 00000000100100000011000000010010 someday 00000001010100000000001001110010 dangers 00000000000111111010111000001111 balanced 00000000000111010001010010010000 imposes 00000001010010000011000000010010 licensing 00000000000000000000100011100001 1963 00000000000000000000000000000000 budgetary 00000000001011100000000000110000 Technical 00100000000000000010000000110000 Calgary 00100000000111010110101001101000 refinance 00000000000110111110001110110010 Seita 00100000000000000000000000000000 implied 00000000000000000101100111000010 dust 00000000000111010111111000000001 massages 00000000000000000000000000000000 Property 00100000000111101001100000100001 potatoes 00000000000111110110111001100011 doldrums 00000000000111100101010001100111 House-passed 00100000000000000000000000000000 preamble 00000000000000000000000000000000 inner-city 00000000000000000000000000000000 refusing 00000000001111101010111000110010 Ralston 00101111111111010000100100101000 Phil 00101111111011000000001000011000 granting 00000000000000101111111101000000 Bebear 00100000000000000000000000000000 cameras 00000000000111111100101001100011 disturbing 00000000000100010001010010010000 deductible 00000000000110100110110000110010 8.60 00000000000000000000000000000000 characterized 00000000000101100010110000110010 walks 00000000000101111100001000110010 devote 00000000001111101111001110110010 FT-SE 01000000000000000000000000000000 Baldwin 00101111111110111000001000001000 deter 00000000000110101011111110110010 Harper 00101111111111011011111010101000 chartered 00001111111000010000101001000000 Fromstein 00100000000000000000000000000000 deficiency 00000000000000010000000111100101 L.A. 01000000000000000000000000000000 Scientific 00100000000001000001100000110000 exhibit 00000000000111101001101000110111 Fluor 00100000000111010101011100101000 1.80 00000000000000000000000000000000 deficiencies 00000000000111001010011000100011 Omaha 00100000000110111001101001101000 tailspin 00000000000111111111111100011111 Paso 00101111111100100010110000011101 undertaking 00000000011111100010110001000000 hence 00000000000111001101000001110010 undermined 00000000000000000001110000110010 Baum 00100000000000000000000000000000 spate 00000000000111111101110101111111 dreams 00000000000111110110111101100011 foster 00001111111100010000110000101000 spotted 00000010010101000101010000110010 Rate 00100000000000001110101011000111 dip 00000000000111110110011000110111 Morning 00100000000000000001110000010111 Citic 00100000000000000000000000000000 manipulation 00000000000110001110000010100111 Marc 00101111111000000000110110011000 workplace 00000000000001000000110000100001 yearly 00000000000001000101000101010000 executions 00000000000110001011110101100011 Wendy 00100000000110100101111110101000 Patterson 00101111110010101000000010001000 Crandall 00101111111100111100100010001000 Olympic 00100000000110000000001000110000 theatrical 00000000000010010000000000110000 brick 00000000000000100010001100100001 backdrop 00000000000111111111011101100111 hard-disk 00000000000000000000000000000000 Armonk 00100000000111110011101001101000 disclosures 00000000000111111100101000100011 ESB 01000000000000000000000000000000 price-earnings 00000000000000000000000000000000 two-part 00000000000000000000000000000000 Hopkins 00101111111000001010101001001000 Cotton 00100000000111110011101110110000 Macintosh 00100000000111011000010000110000 T-shirts 00100000000000000000000000000000 architects 00000000000111000010100000110011 Laurel 00100000100001011100010000001000 venture-capital 00000000000000000000000000000000 3.25 00000000000000000000000000000000 Pontiac 00100000000101111011111100001000 productive 00000000000000000001010010010000 object 00000000000111110101111010110111 scenarios 00000000000111000000001010100011 cooled 00000000010001110010110000110010 billionaire 00000000000000011010011110110101 poorer 00000000000010010100001111000000 seniority 00000000000101010001110000100001 sang 00000000000110100011010111000010 air-freight 00000000000000000000000000000000 LAC 01000000000010011001000100101000 threaten 00000000000110100011001110110010 Large 00100000000000000001010000010000 home-equity 00000000000000000000000000000000 bunch 00000000000111111111011101111111 Wohlstetter 00100000000000000000000000000000 Tisch 00101111111100011011000010001000 Cupertino 00100000000101110011101001101000 register 00000000000100011110010110110010 Marks 00100000000000000000000000001011 Hutchinson 00101111110100100100001000001000 driver 00000000000111101111111000100001 crystal 00000000000010001010001000110000 looms 00000000100101000110001000110010 large-scale 00000000000000000000000000000000 N.M. 01000000000000000000000000000000 coups 00000000000000000000000000000000 demonstrates 00000000000000110011000000010010 Duke 00100000000101001111111000101000 human-rights 00000000000000000000000000000000 Commerzbank 00100000000110111011011100101000 strictly 00000000000101011000000001110010 endanger 00000000000110111000111110110010 Six 00100000000111111111111001010000 Son 00100000000111111011111110000001 big-time 00000000000000000000000000000000 drill 00000000000001010111100110110111 plummet 00000001101101111101010110110010 M$ 00100000000000000000000000000000 dam 00000000000111000111111000000001 rolls 00000000100100001111000000010010 Rand 00100000000000000011000000001011 Kageyama 00100000000000000000000000000000 Castro 00101111111100011100000001001000 reflection 00000000000111110111011000111111 Reich 00101111111111111010100010001000 Fla 00100000000000000000000000000000 Citing 00100000000111111101011010000010 hang 00000000000111010110110110110010 Suez 00100000000111001000110100101000 Geoffrey 00101111111000000000011100011000 Schwab 00101111111100111100110000001000 Yorker 00100000000000111001011110000010 resembles 00000100100010000011000000010010 ages 00000000000000010001100001000111 MeraBank 01000000000100111000110100101000 averaging 00000000000000001100100100110010 1.07 00000000000000000000000000000000 Kevin 00101111111000000011000110011000 erosion 00000000000111011000111001100111 exercises 00000000000110111111000000010010 successes 00000000000111011101111000100011 hot-dipped 00000000000000000000000000000000 Neuberger 00100000000000000000000000000000 elite 00000000000001011011001100100111 televised 00000000000010000101000000010000 congressmen 00000000000110010110111000110011 interior 00000000000111100111110110110000 Seabrook 00100000000110111011100000100001 Marlowe 00100000000000000000000000000000 single-A 01000000000000000000000000000000 compact 00000000000100010000001010110000 Shop 00100000000111100011110001001000 Oak 00100111001100001110011010101000 Korotich 00100000000000000000000000000000 Chancery 00100000000000011001000111100101 reserved 00000000001110010000010000110010 behaved 00000000000000000000000000000000 Charter 00100000000000000000000100100001 Kim 00101111111000101000010100001000 bank-holding 00000000000000000000000000000000 arose 00000000000010000110001000110010 devastation 00000000000110000111111000001111 Elcotel 00100000000000000000000000000000 Hampton 00100000000111010000001000001000 Barron 00100000000111111001111110101000 atoms 00000000000000000000000000000000 restructurings 00000000000111110110000010100111 Convex 00100000000000000000000000000000 worthy 00000000001011101011110000110010 unanticipated 00000000000000000000000000000000 incredible 00000000000000100000110100010000 horses 00000000000010111101110101100011 tricky 00000000000100010101010010010000 Avis 00100000000000011110111100101000 mural 00000000000000000000000000000000 cough 00000000000111111111110110110111 eroding 00000000000111111101010001000000 sentencing 00000000000011101011000001100111 Kohlberg 00101111111111101100110100101000 Abramson 00101111111000001110000010001000 amazing 00000000000010101110110100010000 trustee 00000000000111011111101010110101 evenly 00000001010000010000010001110010 translate 00000000000111001010101110110010 broad-based 00000000000000000000000000000000 permanently 00000000000100000000010001110010 Chris 00100000000000000000100000011000 Jews 00100000000111100000100000110011 confidential 00000000000000111001000110010000 Chevy 00100000000000010111111100001000 trough 00000000000111111001101010100111 tumbling 00000000000000011010010001000000 Drilling 00100000000000000000000001100001 Outside 00100000000010110000000000001010 Toseland 00100000000000000000000000000000 Plains 00100000000000000000111110100101 packaged-goods 00000000000000000000000000000000 Duncan 00101111111110100100000100001000 protectionism 00000000000001101011110010100111 True 00100000000011000100010110010000 dating 00000000000000001111100001000000 1.36 00000000000000000000000000000000 uncomfortable 00000000000000011111110000110010 pledge 00000000000111111101111010110111 investigated 00000010100111010100010000110010 catching 00000000000110111110100001000000 tips 00000000000111101010110101100011 commenting 00000000000111110100100000110010 Eddie 00100000000010001100111110000010 inform 00000000000011100111111110110010 Gaubert 00101111111101111100110010001000 DIG 01000000001011010110010110110010 Deltacorp 00100000000000000000000000000000 handy 00000000000011100100111010000000 cup 00000000000000000010100101100111 1,200 00000000000000000000000000000000 committing 00000000000111011011111101000000 12.9 00000000000000000000000000000000 resident 00000000000011101101011110110101 standardized 00000000000110010101000000010000 antibody 00000000000000000110111010110000 corresponding 00000000000000001100100000010000 congress 00000000000111101111001101101000 Intergroup 00100000000110111011100000110000 Lynn 00101111111011000000000100001000 Egyptian 00100000000001001000010100110000 halls 00000000001001000111110101100011 Bar 00100000000001000000000110110111 schemes 00000000000111100000110100100011 remote 00000000000010100010011010010000 bomb 00000000000000000011111000000001 applicable 00000000000111100000111000110010 policyholders 00000000000100100011110000110011 examined 00000000001011010100010000110010 petrochemicals 00000000000101010011111010110000 Jacobs 00101111111100001001110010001000 upgrading 00000000000101111111010001000000 Aoun 00100000000000000000000000000000 Town 00100000000111101111110100000001 bans 00000000000101111111000000010010 prosecutorial 00000000000010011000000000110000 sweat 00000000000111110110110110110111 regained 00000000001011000100010000110010 videocassette 00000000001100001000001010110000 garbage 00000000000101101111110000100001 judiciary 00000000000111111101010101010001 polypropylene 00000000000110000100011010110000 financiers 00000000000111110100010000110011 capabilities 00000000000111110111110100100011 Bronfman 00101111111000001000100000001000 '80s 00000000000000000000000000000000 RISC 01000000001101001000001010110000 costing 00000000000000010000100101000000 hourly 00000000000000100101000101010000 inflows 00000000000111111001010000000011 Men 00100000000000000000111100110011 buried 00000000011100001100010000110010 depress 00000000000111011000111110110010 financings 00000000000111110000010000100111 lasts 00000000000101000110001000110010 franchisers 00000000000110101001111000110011 Prosecutors 00100000000000001001010010110011 Barrett 00101111111011011100001000001000 slot 00000000000000001010111000000001 heroes 00000000000101111001110101100011 Ironically 00100000000111111110111011101000 embryo 00000000000000000000000000000000 landmark 00000000000010100000000010010000 trails 00000001000010001111000000010010 Harrison 00101111111000100100000100001000 consume 00000000001100111111001110110010 headlines 00000000001100101111110101100011 unscrupulous 00000000000011011101101000110000 duty-free 00000000000000000000000000000000 Heller 00101111111010100101001000001000 375 00000000000000000000000000000000 Kan. 00100000000000000000000000000000 accords 00000000000100101010010000100111 goodwill 00000000000000101100100000100001 Cananea 00100000000000000000000000000000 tactical 00000000000000101101110000110000 participant 00000000000111101100111010110101 Tomorrow 00100000000000101100010001110010 hook 00000000000111001111001010110111 DEC 01000000000000000000000000000000 Joint 00100000000111101010111000110000 humanitarian 00000000000001011011110000110000 BART 01000000000000000000000000000000 Shamir 00101111111101100010010010001000 balls 00000000000001101001110101100011 cartel 00000000000111111111110100000101 bulls 00000000000000001100101001110011 royalties 00000000000111100100100100000011 listeners 00000000000000000011110000110011 rod 00000000000100000111111100001000 delicate 00000000000001010000000010010000 bullet 00000000000110111001111000000001 birthday 00000000000000000100000001000111 scary 00000000000111010110011010010000 energetic 00000000000001011000110100010000 confirms 00000000111100100011000000010010 Ogden 00101111111110101001000100001000 Jordan 00100000000111110110010000001000 midsized 00000000001000111000001010110000 Wyoming 00100000000111111110110001101000 proliferation 00000000000111111111010110111111 pot 00000000000110001101100101100111 skittish 00000000001110111111110000110010 TCI 01000000000000000000000000000000 Russians 00100000000111100110111110110011 POP 01000000000001000100110110110111 remodeling 00000000000111011110100001100001 Islands 00100000000000101101010100000001 N.H. 01000000000000000000000000000000 Jackie 00101111111001001001100010011000 multinational 00000000000000000011100100110000 PPI 01000000000000000000000000000000 confiscated 00000100010011010100010000110010 stark 00000000000100111100000000001000 composed 00000000000110001011110000110010 18.5 00000000000000000000000000000000 knowledgeable 00000000000101001111110000110010 Symbol 00100000000111011110110110110010 Jolla 00101111111000000110110000011101 PBS 01000000000000000000000000000000 Manpower 00100000000110111101011100101000 Digest 00100000000111001110100110110111 guerrilla 00000000000000010001011000110000 Marathon 00100000000000010000011000101000 Please 00100000000000111010100110110010 curtailed 00000000000000110100111001000000 effectiveness 00000000000111110010111000001111 thriving 00000000000010010101000010010000 irony 00000000000111101011110000001111 reeling 00000000000111100001100100110010 trailed 00000010110101000101010000110010 mobile 00000000000100110000001010110000 scattered 00000000000001001101101001000000 jeans 00000000000111011011111010110000 Gate 00100000000010100001111000000001 surpluses 00000000000110111000100000100111 morale 00000000000111101111011100000111 Coastal 00100000000000010111110110101000 identical 00000000001101100000111000110010 185 00000000000000000000000000000000 withheld 00000001000101010100010000110010 hall 00000000001100100100100000001000 assert 00000000000101011001100110110010 Mother 00100000000111100111011110000001 affidavits 00000000000000000000000000000000 Mayer 00101111111100100101001000001000 Haas 00101111111100100001110001001000 conclusions 00000000000111100100101000100011 liberalization 00000000000011100111111010100111 Koskotas 00100000000000000000000000000000 Ark. 00100000000000000000000000000000 nightmare 00000000000111111010101101100111 280 00000000000000000000000000000000 v. 00001111111001000111101011011000 tanker 00000000000100000100111000000001 Poles 00100000000110100000111000110011 Ortiz 00100000000000000000000000000000 legally 00000000001110000000000001110010 L.P. 01000000000000000000000000000000 260 00000000000000000000000000000000 hazardous-waste 00000000000000000000000000000000 PSE 01000000000000000000000000000000 vendor 00000000000010001100001000100001 endure 00000000001001101110101110110010 renew 00000000000101111010111110110010 sample 00000000000111011001100101100111 distressed 00000000000110001000101001000000 2007 00000000000000000000000000000000 revolutionary 00000000000001001001011000110000 Competition 00100000000111101101111010100111 Luis 00101111111001101100000010011000 mainstay 00000000000110111000100101100111 utterly 00000000000000101000000001110010 enjoys 00000100110010000011000000010010 wholly 00000000010000111000000001110010 measurements 00000000000111100010001000100011 flamboyant 00000000000010110001000010010000 exercising 00000000000110100101111101000000 flies 00000000010001000111000000010010 gum 00000000000000000010110000100001 A.C. 01000000000000000000000000000000 benefiting 00000000000111011001100100110010 N.V 01000000000000000000000000000000 Consultants 00100000000000001111000010110011 dollar-denominated 00000000000000000000000000000000 trains 00000000000111001011101001100011 toilet 00000000000001011111010000110000 EPO 01000000000000000000000000000000 propelled 00000000110100100111010000110010 suitors 00000000000111101100111001110011 free-lance 00000000000000000000000000000000 shorter 00000000000000100100001111000000 Sperry 00100000000101111100111100101000 royalty 00000000000000000000101011100001 lens 00000000000001000100001000100001 permitting 00000000001010010000000000001010 lacking 00000000000111001101110101000000 Emergency 00100000000001000000010100010000 NatWest 01000000000100101100111000101000 insufficient 00000000000001100000000110010000 unwanted 00000000000001110000010100010000 devise 00000000010000111111101110110010 collaboration 00000000000111110010110000100111 1.27 00000000000000000000000000000000 CityFed 01000000000011101111000100101000 advancers 00000000000100100001001001110011 Tire 00100000011000010100001110110000 Maxicare 00100000000110100111110110101000 reception 00000000000110011011111101100111 8.03 00000000000000000000000000000000 venerable 00000000010000011000001000110000 habit 00000000000111110100100101100111 trimming 00000000000111001101011101000000 Pat 00101111111001010110010000011000 pork-barrel 00000000000000000000000000000000 doubtful 00000000000101001110010001110010 12.7 00000000000000000000000000000000 0.8 00000000000000000000000000000000 capitalized 00000000000001111000010000110010 blueprint 00000000000111111100001111100111 Zoete 00101111111110101100111110000010 Wedd 00101111111001101010010010110000 sharing 00000000010000000010110001000000 non-food 00000000000000000000000000000000 poured 00000000001001101001001000110010 soda 00000000001011110011111010110000 probable 00000000000011101000000000010000 Burton 00101111111000110100000100001000 assure 00000000000110110100100110110010 prevention 00000000000000000011001001100001 threatens 00000000000011000001101000110010 usage 00000000000000000011010100000111 outflows 00000000000111111101010000000011 murdered 00000000100101110100010000110010 geared 00000000011011001100110000110010 12.6 00000000000000000000000000000000 Retail 00100000000000000101010000110000 bottling 00000000000000011000011010110000 sticking 00000000000110111101100001000000 outlined 00000000001010111001010000110010 inhibit 00000000000110011001101110110010 arbitration 00000000000000000000110011100001 artery 00000000001101000111111001100111 Including 00100000000011101111011010000010 Employers 00100000000111111110111000110011 burdens 00000000000111101100101110001111 singing 00000000001011111010110001000000 belts 00000000000000000001110101100011 modernization 00000000000010010001111101001111 Meese 00101111111100111000010010001000 bribery 00000000000000010110100010100111 Edisto 00100000000000000000000000000000 retaining 00000000000100010011111101000000 hanging 00000000000010010111100001000000 Ridley 00100000000000000000000000000000 attributable 00000000000111001100110000110010 A.P. 01000000000000000000000000000000 court-appointed 00000000000000000000000000000000 Larsen 00101111111100100010100010001000 summary 00000000000011001100011100010000 attracts 00000000001011100001000000010010 22.5 00000000000000000000000000000000 negotiation 00000000000111011010011010100111 Boone 00101111111011000010011100001000 Adm. 00100000000000000000000000000000 unfriendly 00000000000000101001001100010000 coatings 00000000000111101000101111001001 Have 00100000000000000000001100010010 Susie 00101111111000000101111000011000 printers 00000000000110101100000111001001 fronts 00000000000110110010000010100011 Adams 00101111111100000100101000001000 mailing 00000000000001110010110001000000 arms-control 00000000000000000000000000000000 foundations 00000000000110111011111101100011 Lion 00100000000111101111001011000101 Schroder 00101111110001101111111010101000 victories 00000000000111000001111000100011 single-A-1 01000000000000000000000000000000 Deukmejian 00101111111111011000001010001000 rubber 00001111111111011011110001001000 Employee 00100000000000000000000000110101 archrival 00000000000000100010100100100001 Vienna 00100000000011111111111001101000 unwelcome 00000000000010100001110100010000 Capcom 00100000000000000000000000000000 crews 00000000000010101111110101100011 23.5 00000000000000000000000000000000 Gannett 00100000000111111101011100101000 debates 00000000000101010110111010100111 Inflation 00100000000111101001011100000111 determination 00000000000111101111111100100111 Jacob 00101111111001110000000100001000 Pearce 00101111111001011010100010001000 ASKO 01000000000000000000000000000000 finger 00000000000111100011110000000001 loophole 00000000000111111000110011100111 waiver 00000000000110101001111101100111 Robins 00100000000111100110101100101000 teeth 00000000000110101001111101100011 minivans 00000000000110101010111001100011 Associated 00100000000000000001100000110010 defer 00000000000111101111001110110010 JAL 01000000000000000000000000000000 360 00000000000000000000000000000000 Realist 00100000000000000000000000000000 Thailand 00100000000110111100111101101000 outweigh 00000000000001111001101110110010 calculation 00000000000111100001111101100111 grade 00000000000000011101100001000111 broaden 00000000000110011010111110110010 Morita 00100000000000000000000000000000 Either 00100000000000000010011011000000 Wellcome 00100000000001100010111100101000 focuses 00000000000000000000100000110010 Judiciary 00100000000111111101010101010001 Jan 00100000000000010000111000011000 Odds 00100000000111111011010000100111 overruns 00000000000000000000001110000011 outsider 00000000000111111101101000100111 Catholic 00100000000000000100101000110000 Cray-3 00100000000000000000000000000000 centerpiece 00000000000111111011011000001111 380 00000000000000000000000000000000 digital 00000000000010001010100100101000 TRO 01000000000000000000000000000000 Westmin 00100000000000000000000000000000 weighs 00000000000001011101000000010010 infection 00000000000110111010110010100111 Butler 00101111111101101010001000001000 Had 00100000000000000000000000010010 Piper 00100000000100001111110000101000 deceptive 00000000000001110100000110010000 benign 00000000000011010001010010010000 pulls 00000000110101101001001000110010 subscribe 00000000000011010111010110110010 HHS 01000000000000000000000000000000 Mandela 00101111111111000110100010001000 Weil 00101111110110110101001000001000 propane 00000000000010110101010000110000 philosophical 00000000001111100000000000110000 Broadway 00100000000111101111111100100001 Murata 00100000000000000000000000000000 gubernatorial 00000000000000001000111000110000 violates 00000000010000010001000000010010 jetliner 00000000001110101010001010110000 Shanghai 00100011111111111010111110101000 towns 00000000000111100011110001100011 airplanes 00000000000111011111111001100011 Ivory 00100000000111110110001110101000 Pasadena 00100000000111101001101001101000 defunct 00000000000000000010101001110000 class-action 00000000000000000000000000000000 episodes 00000000000110000011100100101111 solo 00000000000000010010101100100001 resemble 00000000000011111001101110110010 Prize 00100000000110111010111010110101 1.82 00000000000000000000000000000000 disagreed 00000000001111110110010000110010 spouse 00000000000111100111010010110101 Transport 00100000000011001111100110110111 Menlo 00100000000010001010011010101000 tackle 00000000010111010111111110110010 35,000 00000000000000000000000000000000 Guaranty 00101111111000000000001001001000 3.75 00000000000000000000000000000000 last-minute 00000000000000000000000000000000 hectic 00000000000010011010011100010000 weakest 00000000000001000111010011010000 hunters 00000000000000100011101001110011 Book 00100000000111001100101000100001 punts 00000000000000000000000000000000 Andrews 00101111111100011010001000001000 wooing 00000000000000001001001101000000 8.33 00000000000000000000000000000000 Doordarshan 00100000000000000000000000000000 protects 00000000001000010001000000010010 corners 00000000000000111011100100101111 thwart 00000000000100110011111110110010 7.93 00000000000000000000000000000000 unacceptable 00000000000011001000110110010000 jumbo 00000000000001001010001010110000 sight 00000000000111111001011001101111 sabotage 00000000000111111111011110110111 bottled 00000000000111110011110110110111 athletes 00000000000111000110111000110011 Firms 00100000000110000100010011110011 loaded 00000000100011110110010000110010 terminate 00000000000111100011111110110010 diplomats 00000000000000001110000010110011 environmentally 00000000001110101000000001110010 Flight 00100000000111101000000000100001 specially 00000000000111001111001001110010 Caltrans 00100000000000000000000000000000 circuits 00000000000001100110000101001001 19.6 00000000000000000000000000000000 practically 00000000000000110111000001110010 worsen 00000000000101110100111110110010 Heights 00100000000000000011100010100101 Torrijos 00100000000000000000000000000000 Leaseway 00100000000000000000000000000000 ambassador 00000000000111111000001100100111 microprocessors 00000000000110010101111001100011 Quinlan 00100000000000000000000000000000 personal-computer 00000000000000000000000000000000 statutory 00000000000010011010000000110000 rescind 00000000011111010111111110110010 unified 00000000000011000001000010010000 single-family 00000000000000000000000000000000 breeding 00000000001100000010110001000000 Guy 00100000000111101010110010110101 Krasnoyarsk 00100000000111011010001010110000 9.8 00000000000000000000000000000000 Deaver 00101111111101101010101010001000 rash 00000000000111111111010101111111 allowance 00000000000111111011111000111001 pasta 00000000001110001011111010110000 arise 00000000000111001101010110110010 Lionel 00100000000000111000001000011000 MacDonald 01001111111100001010100010001000 capitalist 00000000000011100001011000110000 Thousands 00100000000111111111111000101111 5.94 00000000000000000000000000000000 Jenkins 00101111111100000100111010001000 Airline 00100000000000000001100000100101 themes 00000000000111110111110101100011 ranked 00000000110000001100010000110010 Warner-Lambert 01000000000000000000000000000000 sits 00000000000101001100001000110010 cross-border 00000000000000000000000000000000 packed 00000000000011110110010000110010 Portland 00100000000110011111101001101000 Washington-based 00100000000000000000000000000000 shifted 00000000001111111010110000110010 beleaguered 00000000000101101000101001000000 deviation 00000000000000000000000000000000 Sources 00100000000000000000001000010101 Steppenwolf 00100000000000000000000000000000 SHV 01000000000000000000000000000000 McLennan 01000000000000000000000000000000 94 00000000000000000000000000000000 1.12 00000000000000000000000000000000 plug 00000000000111101101111000110111 Templeton 00100000101000101001000000001000 Beebes 00100000000000000000000000000000 specialized 00000000000011000100101010110000 Burgess 00100000000000000000000000000000 dire 00000000000000000101001010010000 Yankee 00100000000000000001100100100001 advertisements 00000000000101101001110101100011 pits 00000000110100001111000000010010 village 00000000000111001111000100000001 income-tax 00000000000000000000000000000000 Salinger 00100000000000000000000000000000 athletic 00000000000000000011001100100001 2016 00000000000000000000000000000000 wanting 00000000000001101010111000110010 Leval 00100000000000000000000000000000 enthusiastic 00000000000010011111110000110010 Deng 00101111111100111000101010001000 flurry 00000000000111111110110101111111 namely 00000000000111111111101001000010 Toys 00100000000111101110111001100011 bothered 00000000000110011000110000110010 Amgen 00100000000110110000111100101000 metaphor 00000000000111100100111010110101 obligated 00000000000110011100011000110010 weird 00000000001000011110011010010000 competent 00000000000010110001010010010000 solar 00000000000000001101110000110000 1.54 00000000000000000000000000000000 applies 00000000000001000001101000110010 pre-trial 00000000000000000000000000000000 co-author 00000000000000000000000000000000 temptation 00000000000111011101111100100111 onerous 00000000000001000101001110010000 Leadbetter 00100000000000000000000000000000 capitalize 00000000000111100110110110110010 Stark 00100000000100111100000000001000 sky 00000000000111011110111000000001 flee 00000000000010101110101110110010 negligible 00000000000011011000000000010000 depletion 00000000000100100101000101001111 12.8 00000000000000000000000000000000 surrendered 00000000000111000100010000110010 fiber 00000000000111011000001010110000 pall 00000000000100110010111010100111 current-carrying 00000000000000000000000000000000 peddling 00000000000000001001110001000000 arranging 00000000000111001111111101000000 subtle 00000000000000010001010010010000 Mercedes 00100000000111010000000001000111 Light 00100000000111101011110001101111 root 00000000000100100111001010110111 1,400 00000000000000000000000000000000 thieves 00000000000111001101111000110011 Oy 00100000000000000000000000000000 swift 00000000000000100110011010010000 Customers 00100000000111101010110000110011 fabrication 00000000000000011001100001100001 ranch 00000000000111101100000100000001 savvy 00000000000111101000101000110000 binge 00000000000000010010011100100011 Nature 00100000000111111100111000001111 MEI 01000000000000000000000000000000 jailed 00000000010101110100010000110010 pencils 00000000001010011111110101100011 Knight 00100000000000001010000000001000 Corps 00100000000000101011000100001001 tightened 00000000000111100010111001000000 alleviate 00000000000110101010111110110010 Command 00100000000111101111000110110111 damn 00000000000101001000011010010000 approaching 00000000000000010011100001000000 contingency 00000000000000000101111110110000 portrait 00000000000111100010111000111111 coaches 00000000000110111001110101100011 Windsor 00100000000001001100101001101000 Partly 00100000000100001011000001110010 rebel 00000000000001110001011000110000 wipe 00000000000101001110101110110010 Redford 00100000000000000000000000000000 Publishers 00100000000011110000010000110011 550,000 00000000000000000000000000000000 O'Neill 01001111111101100000100010001000 stagnant 00000000000001100111100000010000 Elders 00100000000000001111111000101000 nickel 00000000000111101111101110110000 severance 00000000000000000000001011100001 malignant 00000000000000000000000000000000 faded 00000000010001000110001000110010 Nuys 00101111111001001111110100100001 commerce 00000000000111111111110110110000 Sunbelt 00100000001111101000110100101000 Erich 00101111111000000110000010011000 acquirer 00000000000111111001101100100111 19th 00000000000000000000000000000000 pipe 00000000000110000001111010110000 professors 00000000000100101100111000110011 Picop 00100000000000000000000000000000 Norwood 00100000000101001101001000001000 punish 00000000011010100011111110110010 practitioners 00000000000010000110100000110011 probability 00000000000111110011110000001111 148 00000000000000000000000000000000 Friday-the-13th 00100000000000000000000000000000 whooping 00000000000000000000000000000000 restoration 00000000000111101110101101001111 rocks 00000000011111100111110101100011 Utsumi 00100000000000000000000000000000 midyear 00000000000111110110010000101000 Depending 00100000000111111000100000110010 faculty 00000000000001000001000010000001 mismanagement 00000000000111101111100010100111 108 00000000000000000000000000000000 laughing 00000000000101001111000001000000 indexation 00000000000000000000000000000000 ambitions 00000000000111110010111101100011 tired 00000000001111101011110000110010 Tim 00101111111000100001111000011000 recreation 00000000000000000110001101100001 Accord 00100000000111101111011000100111 renewal 00000000000011110110101101001111 Louisiana-Pacific 01000000000000000000000000000000 425 00000000000000000000000000000000 denounced 00000010101011000101010000110010 pitching 00000000010010101110100001000000 Get 00100000000111111010101110110010 erased 00000011100111010100010000110010 outlawed 00000000000111111001101001000000 bite 00000000000111110011001010110111 subscriber 00000000000000001110111000100001 personality 00000000000111001011110000000001 pervasive 00000000000101110001010010010000 Uranium 00100000001101000100011010110000 one-half 00000000000000000000000000000000 etc 00000000000000000000000000000000 500-Stock 01000000000000000000000000000000 Braniff 00100000000111011111001100101000 abused 00000011000111010100010000110010 performer 00000000000111100101111010110101 '87 00000000000000000000000000000000 Brookings 00100000000000111001100011010000 gallons 00000000000000000001100100001011 Eight 00100000000111111110011001010000 roller-coaster 00000000000000000000000000000000 underwear 00000000010101101011111010110000 recoup 00000000001110101111001110110010 Geographic 00100000000000100010000000110000 Friend 00100000000111101011011110000001 UNESCO 01000000000000000000000000000000 Mideast 00100000000111111111011011000101 grabbed 00000001111011000101010000110010 Ever 00100000000000100100001001110010 Mitterrand 00101111111000101000001010001000 irrelevant 00000000000111100011110110010000 youngest 00000000000000000111010011010000 KGB 01000000000000000000000000000000 repairing 00000000000000100111111101000000 diversity 00000000000111000010111000001111 conferences 00000000000000001100110001000111 hung 00000000000100001001001000110010 flowing 00000000000000000111100001000000 Aichi 00100000000000000000000000000000 marched 00000000011011101001001000110010 Lama 00100000000000100011011110000111 Hydro-Quebec 01000000000000000000000000000000 hard-line 00000000000000000000000000000000 stockholder 00000000000001000000111100010000 Nimitz 00100000000000000000000000000000 meaningful 00000000000001001000000000010000 wherever 00000000000000101110101001000010 reinforcement 00000000000000000000000000000000 dealerships 00000000000111111110101001100011 educate 00000000010010111011111110110010 swelling 00000000000011011111010001000000 pro-life 00000000000000000000000000000000 technically 00000000001000001000000001110010 Bergsma 00100000000000000000000000000000 Ramirez 00100000001110001001111010001000 cheered 00000000000001010001110000110010 creatures 00000000001111000111110101100011 fanfare 00000000000110010110110100100111 Perlman 00100000000000000000000000000000 underscore 00000000000000011100100110110010 ocean 00000000000111110010001010110000 commute 00000000000000000000000000000000 debris 00000000000110100101110101100011 unpopular 00000000000011000001110100010000 Often 00100000000000100000001001110010 computer-assisted 00000000000000000000000000000000 lenses 00000000000001100101111001100011 insulation 00000000000111111011011111001001 recognizes 00000001001011100011000000010010 Airbus 00100000000000000110110100101000 keen 00000000000010000110001010010000 beings 00000000000101111101000100100111 Kume 00100000000000000000000000000000 DDB 01000000000000000000000000000000 mildly 00000000000111101000000001110010 memorandum 00000000000111100110001011100111 finishes 00000000101010000011000000010010 Weekes 00100000000000000000000000000000 G-7 00100000000000000000000000000000 postwar 00000000000000001000000011010000 gallon 00000000000111111111111101011111 batteries 00000000000111110111111001100011 replies 00000000000101100011010111000010 personal-injury 00000000000000000000000000000000 incumbent 00000000000111101110011000110000 OMB 01000000000000000000000000000000 neighbor 00000000000111111001011110000001 characteristic 00000000000111111100010101100111 Somalia 00100000000000000000000000000000 Minerals 00100000000101001011011010110000 sexual 00000000000100001000000000110000 butter 00000000000010011001011111001001 sunk 00000000001100111010110000110010 Palmer 00101111111100001011001000001000 Furukawa 00100000000000000000000000000000 tax-loss 00000000000000000000000000000000 TVs 01000000000000000000000000000000 8.15 00000000000000000000000000000000 prodding 00000000001011011111010001000000 Andreas 00101111111100110101010100001000 ENERGY 01000000000000010110010010110000 beta 00000000000000001011100000100001 fool 00000000000110001111001010110111 extract 00000000000100101111101110110010 8.06 00000000000000000000000000000000 cooking 00000000000101000010110001000000 Alice 00101111111000001001110000011000 Kane 00101111111010100110100010001000 importer 00000000000111101011100001110101 8.65 00000000000000000000000000000000 casual 00000000000100000001000000010000 wore 00000000000011001011000000010010 pitches 00000000000000010010110100100011 translation 00000000000010001001100101100111 relocation 00000000000111110011001001100001 accumulated 00000000000010101100010000110010 afloat 00000000000001000100010001110010 taxed 00000000000010010010110000110010 Traditional 00100000000000000000001000110000 collections 00000000000111100110001100000011 naming 00000000000110110011111101000000 hearts 00000000000111011010111101100011 restricts 00000000000001110001000000010010 bulletin 00000000000000000100000000110111 7.75 00000000000000000000000000000000 incidents 00000000000111101000000010100011 Richfield 00100000000111111010101010100101 muscle 00000000000111111111101001111001 gloomy 00000000000000001001001010010000 revise 00000000000110111010111110110010 grace 00000000000000000110010000001000 racked 00000000000001111011001000110010 intentionally 00000001100001000001001001110010 oriented 00000000000001110001010010010000 promoted 00000000001111010100010000110010 craft 00000000000111101101100110110111 Worse 00100000000000000101001111000000 Sohmer 00100000000000000000000000000000 Carson 00101111111100100010010000001000 Tucker 00101111111110110101001000001000 encourages 00000000000101100001000000010010 theaters 00000000000100100011110001100011 freed 00000001100011010100010000110010 answered 00000000001100000101010000110010 coping 00000000000011010101100000110010 processor 00000000000000100000100001110101 artificially 00000000000011000001001001110010 constructed 00000000010101001100010000110010 chaotic 00000000000000010001000010010000 constraints 00000000000111010110100100100111 A.G. 01000000000000000000000000000000 insure 00000000010110111011111110110010 scripts 00000000000001100011110101100011 MIPS 01000000000000000000000000000000 4.75 00000000000000000000000000000000 certified 00000000000111000001101001000000 lovely 00000000000111101110011010010000 incinerator 00000000000001101010001010110000 9.1 00000000000000000000000000000000 benefit-seeking 00000000000000000000000000000000 11.8 00000000000000000000000000000000 Criminal 00100000000000000001000000110000 Kurt 00101111111000001000110110011000 self-incrimination 00000000000000000000000000000000 simultaneous 00000000000011000001000000010000 calculate 00000000000111100010011110110010 Lesko 00100000000000000000000000000000 ensuring 00000000000111101001111010000010 Attorneys 00100000000000010111000010110011 rift 00000000000111111100110000100111 notwithstanding 00000000000010001000001001110010 punishable 00000000000000000000000000000000 Cruz 00101111111000011000001010001000 inch 00000000000111100011101000100111 absolute 00000000000000001101010100010000 repression 00000000000101001011111010100111 encouragement 00000000000110010111110100100111 Oh 00100000000111111010101011101000 refrigerators 00000000000111010110111001100011 Curry 00100000000000000000000000000000 feeding 00000000001110110010110001000000 blonde 00000000000000000000000000000000 tours 00000000000000000000010101100011 flavor 00000000000111101110110000000001 contacted 00000001110011000101010000110010 Agreement 00100000000111101111111000100111 municipalities 00000000000110101011110001100011 frustrating 00000000000101010001010010010000 revision 00000000000110010111101010100111 scholar 00000000000111011011011110110101 shocks 00000000000111111001111000100011 Blackstone 00100000000001001011010100101000 Days 00100000000000000000000000011011 organizational 00000000000011100000000000110000 divisive 00000000000001011001010010010000 sovereignty 00000000000111100011110010100111 hunt 00001111111110001100000000001000 surging 00000000000000001010010001000000 Connolly 00101111111101011100100010001000 Marxist 00100000000001000001011000110000 titled 00000000000010110101010000110010 standpoint 00000000000111110101001001100111 magic 00000000000111000011110000000001 zip 00000000000000000000100111100101 presentation 00000000000111011111001011100111 Revolution 00100000000111110101101001100111 endless 00000000000001000110110100010000 signature 00000000000111011101010000000001 susceptible 00000000000101001100011000110010 occasional 00000000000001001010010100010000 1.48 00000000000000000000000000000000 competes 00000000110011110110010000110010 federation 00000000000110101101110001010101 12.3 00000000000000000000000000000000 restoring 00000000000011100111011101000000 celebrate 00000000001101100011111110110010 third-largest 00000000000000000000000000000000 hopeful 00000000000110001111110000110010 installing 00000000000101111101111101000000 motive 00000000000111111110101100010111 Resource 00100000000010000110010010110000 dilute 00000000001101111010111110110010 undo 00000000001110100111111110110010 moreover 00000000000111111111101011101000 Patel 00100000000000000000000000000000 Stick 00100010000101111101010110110010 triggering 00000000000111100111111101000000 parks 00000000000100000011000001111001 bursts 00000000000110011101100100101111 quote 00000000000111000111001010110111 defaulted 00000000000111010100100000110010 vicious 00000000000100011110011010010000 R.H. 01000000000000000000000000000000 Trecker 00100000000000000000000000000000 alarm 00000000000110101101001100100111 slashing 00000000000101001101011101000000 Cornell 00100000000010010111111000101000 hacker 00000000000000000000000000000000 Tokyo-based 00100000000000000000000000000000 roots 00000000000110111100111101100011 phased 00000000010111110010110000110010 restricting 00000000000000000011011101000000 Craven 00100000000000000000000000000000 revoke 00000000001001100110111110110010 procurement 00000000000000000100100011100001 shelter 00000000000101011110110110110111 Bonwit 00100000000001101100101010110000 restraints 00000000000111011010100100100111 Jobs 00100000000000000000100001100011 cheapest 00000000000000010001010011010000 Unix 00100000000101100100100000100001 psychiatric 00000000000000010001100000110000 5.75 00000000000000000000000000000000 tube 00000000000001000100111000000001 secrets 00000000000110000111011100100011 prefers 00000000000000101100101000110010 fastest 00000000000111111110000011010000 parallels 00000000000001101010110000100111 Col. 00100000000000000000000000000000 compelling 00000000000000011101010010010000 cafeteria 00000000000001010001111010110000 Lily 00100000000101001101111100001000 1.43 00000000000000000000000000000000 Guangdong 00100000000000000000000000000000 Teller 00100000000100010011111111001001 hosts 00000000000111111111000000010010 cooperating 00000000000111011101100000110010 dependence 00000000000111011110100100100111 spite 00000000000111111111011001101111 unrealistic 00000000000001010101000110010000 guests 00000000000110110111110000110011 Egon 00100000000000000000000000000000 mothers 00000000000110100010011100110011 Willamette 00100000000000000000000000000000 bargain-hunting 00000000000000000000000000000000 spawned 00000000100100100111010000110010 Beginning 00100000000111101100111000110010 notorious 00000000000011101111000010010000 Fazio 00100000000000000000000000000000 flashy 00000000000110100101000010010000 Laidlaw 00100000000101000011000100101000 Likewise 00100000000111100110111011101000 Ga 00100000000000000000000000000000 12.4 00000000000000000000000000000000 vintage 00000000000000010000000001000111 endorsement 00000000000101001110111001100111 monitors 00000000000001000111000000010010 Rorer 00100000000010011011010100101000 prestige 00000000000111111111110010100111 contemplating 00000000000010010110010101000000 Seagate 00100000000110100000100100101000 CNW 01000000000000000000000000000000 Fletcher 00101111111000011000001000001000 Noranda 00100000000001000111111100101000 successors 00000000000110100011110000110011 designers 00000000000100001000010000110011 Vermont-Slauson 01000000000000000000000000000000 examiners 00000000000000000111010010110011 Bids 00100000000111100100001100011001 7.37 00000000000000000000000000000000 guest 00000000000000000011110000000001 sorry 00000000000000101111110000110010 66.7 00000000000000000000000000000000 deputies 00000000000111100110101010110011 mushrooms 00000000000000000000000000000000 outfit 00000000000111110101011001100111 please 00000000000000111010100110110010 beverage 00000000000001111011111010110000 bono 00000000000000000000000000000000 whatsoever 00000000011000100100010001110010 Currency 00100000000111101111011010100001 pretrial 00000000000000110101000000010000 Downey 00101111111001111101001000001000 Idaho 00100000000111111010101001101000 Agricole 00100000000000000000000000000000 11,000 00000000000000000000000000000000 Assuming 00100000000111011101111010000010 leaped 00000000000010000001000100110010 Reinvestment 00100000000000000101101011100001 bilateral 00000000000000111010000000110000 Verwoerd 00100000000000000000000000000000 disagreement 00000000000111010110111010100111 grossly 00000000000000011000000001110010 Liberty 00100000000111111100100100100001 Teamsters 00100000000000001101110100110000 Output 00100000000111101110110100000111 Tenneco 00100000001111101111111100101000 instructed 00000000001110101101010000110010 Inouye 00101111111100100000111010001000 exhausted 00000011100011010100010000110010 Vancouver 00100000000011111011101001101000 yielded 00000000000000110001000100110010 Nugget 00100000000010001111110100100001 conspiring 00000000000101101010111000110010 pawn 00000000000000000000000000000000 decisive 00000000001001000001000000010000 shaping 00000000000111101110100001000000 Pratt 00101111111101110111111010101000 Overseas 00100000000000000001011010100001 definitively 00000000011100100001001001110010 influx 00000000000111101100111001100111 Cook 00101111111100010111001000001000 Resorts 00100000000111000100111000101000 1.71 00000000000000000000000000000000 Valspar 00100000000000000000000000000000 coach 00000000000111100100011110110101 nonsense 00000000000111110101110010100111 Classic 00100000000000001100000010010000 overpriced 00000000000000000011110110010000 Moran 00101111111111100101001000001000 Beta 00100000000000001011100000100001 unwarranted 00000000000000001101000110010000 newcomers 00000000000111011100111000110011 dissent 00000000000110001111110010100111 Gintel 00100000000000000000000000000000 subway 00000000000010001000001010110000 tariff 00000000000000000000100011110001 freeways 00000000000000000000000000000000 tops 00000000010111100111000000010010 mountain-bike 00000000000000000000000000000000 entrepreneurial 00000000000011110010000000110000 '86 00000000000000000000000000000000 Burke 00101111111101111100100010001000 Taiwanese 00100000000000000111100100110000 longest 00000000000101110011010011010000 vigorously 00000010000001000000010001110010 holidays 00000000000011111101110101100011 modify 00000000000010111110001110110010 Ariz 00100000000000000000000000000000 Denver-based 00100000000000000000000000000000 pumping 00000000010111101110100001000000 Left 00100000000011000101010000110010 profitably 00000001010010000000010001110010 burn 00000000000110011110101110110010 21.5 00000000000000000000000000000000 flooded 00000001100011110110010000110010 Hasbro 00100000000110111000111100101000 45,000 00000000000000000000000000000000 Sr. 00100000000000000000000000000000 1.44 00000000000000000000000000000000 unlawful 00000000000000101111000110010000 Rubin 00101111111100011111000010001000 Lortie 00100000000000000000000000000000 shattered 00000000000111011101101001000000 markedly 00000000000010101000010001110010 arbitrator 00000000000111111011100000110101 resisting 00000000000110100110010101000000 phony 00000000000000001100000110010000 DAF 01000000000000000000000000000000 yeast 00000000000000000000000000000000 Arlington 00100000000101010011101001101000 8.7 00000000000000000000000000000000 lounge 00000000000111100101111000000001 remembered 00000000010001000010110000110010 heaviest 00000000000000101011010011010000 inning 00000000000010110010001000100111 deduct 00000000000000111111001110110010 Except 00100000000111110010011010000010 songs 00000000000111100001110101100011 affects 00000000000011100001000000010010 intellectual-property 00000000000000000000000000000000 implication 00000000000111100011110000001111 blunt 00000000000101000101110110110010 Initial 00100000000000000010000100010000 Llosa 00100000000000000000000000000000 Steelworkers 00100000000000100010001010101000 hype 00000000000110010110111010100111 shell 00000000000000000000011000101000 Easy 00100000000011000001011110010000 Asarco 00100000000111100011111100101000 del 00001111111011111100010100001000 Fernando 00100000000100000100000000011101 realization 00000000000111100101110000001111 poses 00000010000100000011000000010010 Rapid 00100000000000010000100000010000 jets 00000000000110001100101001100011 Kuwait 00100000000111011011111101101000 recreational 00000000000000111000001010110000 endangered 00000000001100000101101001000000 destroying 00000000000101101011111101000000 prediction 00000000000111111011111101100111 Storer 00100000000101000100110000001000 Norwegian 00100000000000100110100100110000 425,000 00000000000000000000000000000000 Case 00100000000111111111100001100111 supply-side 00000000000000000000000000000000 suspected 00000000000111101011110000110010 40-year-old 00000000000000000000000000000000 accusing 00000000000000000000101101000000 reimburse 00000000010010100011111110110010 jetliners 00000000000000101011101001100011 Sioux 00100000000010011000011010101000 Redmond 00100000000110111100101001101000 Esselte 00100000000000000000000000000000 guns 00000000000110101111110101100011 oversubscribed 00000000010001110100010000110010 guards 00000000000010100101000110001001 1.375 00000000000000000000000000000000 molecular 00000000011100011010000000110000 10.1 00000000000000000000000000000000 refuge 00000000000101100110110110111001 Developments 00100000000111100111101010100011 stir 00000000000100010110010110110010 Apogee 00100000000000000000000000000000 Hardiman 00101111111000000001000010001000 Portugal 00100000000111001001011101101000 ministries 00000000000100011010000100100011 Vogelstein 00100000000000000000000000000000 Cruise 00100000000000000101110000110000 incorrect 00000000000000100100000110010000 Sumitomo 00100000000011001001111000101000 Dakota 00100000000000011000010101101000 Magna 00100000000011110011010100101000 loopholes 00000000000111110110101110100011 audits 00000000000111010010001000100011 outset 00000000000111111101110000001111 pigs 00000000000000111111110010100111 Hot 00100000000000010001011010010000 0.01 00000000000000000000000000000000 accepts 00000000011000100011000000010010 closings 00000000000000010001000010100111 reminded 00000000000001001011110000110010 17.5 00000000000000000000000000000000 Treaty 00100000000111111010100011100111 brewer 00000000000111100101000001110101 H.F. 01000000000000000000000000000000 Ahmanson 00101111111111101101000001001000 Port 00100000000000100000011010101000 correspondent 00000000000000000010011110110101 resilience 00000000000101010011111010100111 plummeting 00000000000000111010010001000000 frequent-flier 00000000000000000000000000000000 drawings 00000000000111011101110101100011 bloody 00000000000000101010011010010000 playwright 00000000000111101111011110110101 Belli 00100000000000000000000000000000 Wanniski 00100000000000000000000000000000 Porter 00101111111111001001001000001000 infringed 00000000000101100000100000110010 accuse 00000000000111110010100110110010 Hubbard 00101111111000001110111000001000 13.2 00000000000000000000000000000000 museums 00000000000111101011110001100011 eighth 00000000000111000011100011010000 problematic 00000000000001010110010010010000 applicants 00000000000000000001000000110011 splitting 00000000000111101111001101000000 supportive 00000000011011101011110000110010 stretching 00000000000101011101100001000000 Give 00100000000111110011101110110010 commissioners 00000000000000000110010010110011 757 00000000000000000000000000000000 co-chairman 00000000000000000000000000000000 Einhorn 00101111111111001110100010001000 narrows 00000000000001011101000000001010 Nine-month 00100000000000000000000000000000 minimize 00000000000000111010111110110010 widens 00000000000001010110001111111001 outpaced 00000000001010000001010000110010 sinking 00000000000001100001111110110000 caller 00000000000111100101110010110101 142.10 00000000000000000000000000000000 1961 00000000000000000000000000000000 Minority 00100000000000000000101000110000 hint 00000000000111111011011010110111 Assurances 00100000000111100111100110101111 17.50 00000000000000000000000000000000 peaks 00000000000111100110111001000111 lineup 00000000000111100101100101100111 know-how 00000000000000000000000000000000 Centers 00100000000111101110010100100011 detect 00000000011100111111101110110010 Sherwin 00101111100101011100000010001000 rooted 00000000000010011110010000110010 honest 00000000000010010110110100010000 volunteers 00000000000110100111111000110011 implicit 00000000000010001100110100010000 Commissioner 00100000000111011011110000110101 strengths 00000000000111111100111101100011 desired 00000000011011000001000000010000 S.A 01000000000000000000000000000000 Newspapers 00100000000111001100110001100011 Yeutter 00101111111100000000001010001000 startling 00000000000000100000010010010000 Jaffray 00101111111011110101101001001000 Shack 00100000000001011011100100001001 attacking 00000000000000110100001101000000 Bells 00100000000111110010001110110011 yuppies 00000000000111100111111000110011 bang 00000000000111110111111010110101 bodies 00000000000111101101000100100011 wound 00000000001111111011001000110010 Vinson 00100000000000000000000000000000 See 00100000000111111110100110110010 stretches 00000001000101001111000000010010 legendary 00000000000011010100000010010000 bond-equivalent 00000000000000000000000000000000 refuses 00000000000111101100101000110010 seamen 00000000000100001011000001110011 haunts 00000000000000000000000000000000 woo 00001111111011001011110110110010 Initiative 00100000000000010100100011100111 transplant 00000000000000000110101011100001 Cadillac 00100000000111011011111100001000 assessing 00000000000110100001011101000000 laundry 00000000000100011000001010110000 2.87 00000000000000000000000000000000 dealt 00000000001011010110010000110010 Garrison 00101111111100010001110001001000 briefing 00000000000000001010110001000111 nevertheless 00000000000111110111101011101000 estimating 00000000000111000001111010000010 Against 00100000000000000000000000001010 foresee 00000000000111010101000110110010 anti-abortionists 00000000000000000000000000000000 criticize 00000000001000101011111110110010 Ken 00100000001000011000101000011000 Judicial 00100000000000100000000000110000 republic 00000000000100100001100100100001 freeing 00000000000111111100001101000000 heavier 00000000000001100100001111000000 6.90 00000000000000000000000000000000 ballooning 00000000000000000000000000000000 Ian 00101111111000010000110110011000 prevails 00000000011110000110001000110010 mentality 00000000000101001111101001100111 shortfall 00000000000110001101101010100111 ringing 00000000000010101110100001000000 disappears 00000000101000000110001000110010 diversifying 00000000000101100011100001000000 Hees 00100000000110000001010100101000 libel 00000000000000100001000000110000 asserting 00000000000111100111111010000010 deadlines 00000000000000100110011100100011 8.32 00000000000000000000000000000000 uncommon 00000000000111100111110110010000 warranty 00000000000000010000111000111001 austerity 00000000000000000000011000111001 Dearborn 00100000000111010111101001101000 closest 00000000000000001001010011010000 explosions 00000000000110110101100110001001 nurses 00000000000110101100111000110011 reruns 00000000000111000101110101100011 1990-model 00000000000000000000000000000000 tacked 00000000000010100000100000110010 drift 00000000000111100110011000110111 stop-loss 00000000000000000000000000000000 Saab-Scania 01000000000000000000000000000000 Leipzig 00100000000000000000000000000000 inspection 00000000000000001110111001100111 crossed 00000000101011000101010000110010 9.4 00000000000000000000000000000000 Zsa 00100000000000000000000000000000 youngsters 00000000000110100000100100110011 Mehl 00101111111011101000000010001000 customs 00000000000111101011110000110000 awareness 00000000000110001110011010100111 offenders 00000000000010001100111000110011 hypoglycemia 00000000000000000000000000000000 grave 00000000000010010100011000010000 intensive 00000000000000100100010100010000 nervously 00000001010000000000010001110010 syndicates 00000000000000111010000100100011 GATT 01000000000000000000000000000000 resale 00000000000111110111101101001111 soap 00000000000011000010101100100001 euphoria 00000000000000101110111010100111 Jefferson 00100111111110010010010000001000 Noxell 00100000000000000000000000000000 S.C 01000000000000000000000000000000 prepaid 00000000001100110000011100010000 spurring 00000000000100000101011101000000 drug-related 00000000000000000000000000000000 statutes 00000000000101001110011100100011 renamed 00000000001010100100010000110010 ancient 00000000000000001100001000110000 ironic 00000000000110101110110110010000 incomes 00000000000111100010100100000011 convictions 00000000000111100001101000100011 peculiar 00000000000000010100011000010000 minerals 00000000000101001011011010110000 Homes 00100000000000001000101001100011 Peruvian 00100000000001011000010100110000 strips 00000000000111101000010101100011 arising 00000000000000000011100100110010 Visa 00100000000001100010000000100001 Rick 00101111111000000001111000011000 Deputy 00100000000000000010001001110000 exclusivity 00000000000100011110011010100111 Shakespeare 00100000000001100000101100100001 McAlpine 01000000000000000000000000000000 withholding 00000000000110110000011100010000 selective 00000000000010001101010010010000 inspectors 00000000000000001101010010110011 homosexual 00000000000011101000101000110000 rocked 00000000101100100111010000110010 architectural 00000000000001110010101010110000 Welch 00101111111100011100000010001000 pullback 00000000000101101001101010100111 tumultuous 00000000000000000111101100010000 Freres 00101111111000011000100001001000 Copper 00100000000111111011101110110000 emergencies 00000000000111000011100010100111 18-a-share 00000000000000000000000000000000 endowment 00000000000110101111101110111001 sponsoring 00000000000011111101111101000000 breathing 00000000000000010010110001000000 clinic 00000000000111110110010100000001 supervision 00000000001111100110011010100111 7.9 00000000000000000000000000000000 1.34 00000000000000000000000000000000 Comex 00100000000100100111110000100101 prizes 00000000000110110000000001100011 steering 00000000000011111010110001000000 diverse 00000000000000001000000010010000 stereo 00000000000001010101011010110000 recorder 00000000000001100100100100001001 peripheral 00000000000000010100101010110000 suitable 00000000000001010000010010010000 fiduciary 00000000001001100000000000110000 construct 00000000000010101111101110110010 convenient 00000000000101000001010010010000 beaten 00000000100111110010110000110010 checking 00000000000000010100100001000000 Athletics 00100000000000000000000000000000 Bowes 00101111111001010000000101001000 Pitney 00101111111110101001101000101000 Voting 00100000000011001000111100010000 Goodman 00101111111100100010001000001000 backlogs 00000000000010000000111000000011 Crowd 00100000000111111101101101100111 cancellation 00000000000111111101111101001111 campus 00000000000111101111101001000001 loosen 00000000000101110110111110110010 Fujis 00100000000000000000000000000000 explicit 00000000000001100000110100010000 Jerome 00101111111000001100110110011000 special-interest 00000000000000000000000000000000 medium-term 00000000000000000000000000000000 developing-country 00000000000000000000000000000000 Sheraton 00100000000100111000001000110000 fax 00000000001000011000001010110000 Metals 00101111111010101000011110110000 disappeared 00000000000010100110001000110010 Leventhal 00100000000000000000000000000000 rulings 00000000000111100101101000100011 nominees 00000000000111000101101000100011 114 00000000000000000000000000000000 prosecuted 00000000011011010100010000110010 await 00000000000111110101011110110010 retreating 00000000000110011101100001000000 Conway 00101111111110100100000010001000 7.60 00000000000000000000000000000000 similarity 00000000000101010110110000100111 dumping 00000000000011110010110001000000 113 00000000000000000000000000000000 indictments 00000000000100111111110000100011 distinguish 00000000001000111111001110110010 sketchy 00000000000000000000000000000000 Gutfreund 00101111111000010000100010001000 caffeine-free 00000000000000000000000000000000 scramble 00000000000111111110000101010111 Measure 00100000000111111101110011100111 narrower 00000000000011000100001111000000 crumbling 00000000000110101010110001000000 abolish 00000000000110110001111110110010 nearing 00000000000011010110010101000000 liquidate 00000000000101111110001110110010 Shops 00100000000011101111110001100011 1.32 00000000000000000000000000000000 matches 00000000000000111111000000010010 periodic 00000000010011000001000000010000 Coliseum 00100000000011111010111000000001 invitation 00000000000111011011101100100111 relate 00000000000100110111010110110010 projecting 00000000000101100001110101000000 lung-cancer 00000000000000000000000000000000 catastrophes 00000000000000000000000000000000 postal 00000000000111001011110000110000 Survey 00100000000111101110100000110111 Matthews 00101111111111111011111010101000 northeast 00000000000111111010001110101000 bikers 00000000000000000000000000000000 Calif.-based 00100000000000000000000000000000 athletics 00000000000000000000000000000000 enthusiasts 00000000000011110000000010110011 adjacent 00000000000010010000111000110010 Reitman 00100000000000000000000000000000 Petrolane 00100000000000000000000000000000 Ernest 00101111111000011000000010011000 lobbied 00000000000001011110001000110010 Innopac 00100000000000000000000000000000 clean-air 00000000000000000000000000000000 2.58 00000000000000000000000000000000 Equitec 00100000000000000000000000000000 helm 00000000000110010111111000001111 bullets 00000000000100000101110101100011 Deal 00100000000111111110101010110111 precision 00000000000111010010101010110000 searched 00000001010101000101010000110010 Child 00100000000101101001111000100001 distinction 00000000000111111100101000010111 restrain 00000000001000111010111110110010 presumably 00000000010100000000001001110010 yards 00000000000000000010010100001011 case-by-case 00000000000000000000000000000000 indecent 00000000000000010011000110010000 1,800 00000000000000000000000000000000 comfortably 00000000011100000000010001110010 Milacron 00100000000011011011010001001000 sloppy 00000000000011001011000110010000 subsidize 00000000001011100011111110110010 touchy 00000000000001011101000010010000 1.46 00000000000000000000000000000000 unraveled 00000000000000000000000000000000 Caterpillar 00100000000110110101011100101000 exorbitant 00000000000000000000000000000000 Wyss 00101111111000001110110010001000 jobless 00000000000011010100010011000111 Fraser 00101111111100110110111000001000 eagerness 00000000000110110101111100100111 stricken 00000000011011100001110000110010 tended 00000000000110110111101000110010 Devices 00100000000111101101011001001001 Sasser 00100000000000000000000000000000 aids 00000000000010001110101000110000 Jamie 00100000000000101011111100001000 instantly 00000010101000000000010001110010 Salvador 00101111111100101000110000011101 plots 00000000001110100111110101100011 havoc 00000000000101101111111010100111 inserted 00000010100001001100010000110010 Conant 00100000000000000000000000000000 2.46 00000000000000000000000000000000 safeguards 00000000000101011111001000100011 entertaining 00000000000011010000110100010000 235 00000000000000000000000000000000 Octel 00100000000000000000000000000000 uptick 00000000000000000000000000000000 donation 00000000000001011111100011000111 Keefe 00100001111100101111110000101000 con 00000000000000001101001000110000 accountable 00000000000111001110110000110010 Accepted 00100000000000001001010000110010 Clifford 00101111111000110000000100001000 assessed 00000000000010001100010000110010 Beretta 00100000000111111100001010110000 eliminates 00000000000110100001000000010010 breath 00000000000111110110010000000001 listings 00000000000011000001000100001001 policy-making 00000000000000000000000000000000 clarification 00000000000111101001001101001111 portrayal 00000000000000000000000000000000 dissenters 00000000000000000000000000000000 42.5 00000000000000000000000000000000 chores 00000000000111101010110100100011 mph 00000000000000000000001001011011 canned 00000000000011010100101010110000 suspicion 00000000000111111110110101100111 Mattress 00100000000001011011010001001000 instances 00000000000110100000000010100011 Discovision 00100000000000000000000000000000 ESPN 01000000000000000000000000000000 acceptance 00000000000111100001111001111001 Commerciale 00101111111100001010101010001000 Mateo 00101111111100000001000000011101 Amdura 00100000000000000000000000000000 Doman 00100000000000000000000000000000 1.13 00000000000000000000000000000000 swapping 00000000000111111001110001000000 Kalikow 00101111111101100001000010001000 cloud 00000000000111100001001010110111 Grey 00100000000111100100010000001000 Berlitz 00100000000000000000000000000000 4.52 00000000000000000000000000000000 Suddenly 00100000000100000000001001110010 rocket 00000000000100011010001010110000 Specter 00100000000111111101011000001111 parade 00000000000111100100100101100111 money-losing 00000000000000000000000000000000 Okla. 00100000000000000000000000000000 disclosing 00000000000100001111111101000000 fleeting 00000000000000000000000000000000 pipelines 00000000000000101100010000110011 Healthdyne 00100000000000000000000000000000 stadiums 00000000000110011111110101100011 feat 00000000000111110100101101100111 scratch 00000000000111100100010001000000 sink 00000000000110010110010110110010 350,000 00000000000000000000000000000000 assertions 00000000000111111101101000100011 Guarantee 00100000000111110111011010110111 Dai-Ichi 01000000000000000000000000000000 flooding 00000000000011111111010001000000 admirable 00000000001111011000110100010000 16,000 00000000000000000000000000000000 calculates 00000000000101111011010111000010 Munich 00100000001001111111111001101000 serial 00000000000000011000000110110000 clerks 00000000000000101110000000110011 surrounded 00000000001101101111010000110010 proves 00000000001101010011000000010010 Judges 00100000000000000000010110110011 Officer 00101111111111111111111110011101 bizarre 00000000000001100000000010010000 one-fourth 00000000000000000000000000000000 6.20 00000000000000000000000000000000 120,000 00000000000000000000000000000000 Be 00100000000100101111100010110010 awards 00000000000000010000001000100011 twist 00000000000111001100111010110101 wives 00000000000111000010011100110011 177 00000000000000000000000000000000 Berkshire 00101111111110101001110110101000 508-point 00000000000000000000000000000000 Fortunately 00100000000111111010111011101000 besieged 00000000011111010001110000110010 Trudeau 00100000000000000000000000000000 crossing 00000000000100011010100001000000 Productions 00100000000000001011111011101001 grasp 00000000000111101111110010110111 guild 00000000000001000000001100100101 neutrons 00000000000000000000000000000000 Dover 00100000000110000111101001101000 rake 00000000000000000000000000000000 punishment 00000000000111111110100000111001 unjustified 00000000000110100101000110010000 ceramic 00000000000001010100101010110000 tightly 00000000000001100111001001110010 spiral 00000000000100101001101010100111 praise 00000000000111011110110010110111 newsletters 00000000000110001110000100100011 superconductor 00000000000001010100100000100001 Colgate-Palmolive 01000000000000000000000000000000 adversary 00000000000101110111111001100111 ordinarily 00000000011100000000001001110010 1.70 00000000000000000000000000000000 plumbing 00000000010110001011111010110000 defends 00000000010111100011000000010010 workout 00000000000000000000000000000000 Schaeffer 00100000000000000000000000000000 crushed 00000000011110010001110000110010 leery 00000000000101101011110000110010 X 00100000000000000000000000000000 S* 00100000000000000000000000000000 compounded 00000000000001101111010000110010 uninsured 00000000000001001010101000110000 D'Arcy 01001111111111000100110100101000 Wachter 00100000000000000000000000000000 lower-than-expected 00000000000000000000000000000000 576 00000000000000000000000000000000 mass-market 00000000000000000000000000000000 cheaply 00000001100100000000010001110010 Osaka 00100000001111100111111001101000 Cardillo 00100000000000000000000000000000 Scorpio 00100000000000000000000000000000 touted 00000000000001000010110000110010 Thi 00100000000000000000000000000000 makeup 00000000000110001011111000001111 liquidating 00000000000110010011011101000000 reinvest 00000000001001101111001110110010 bowed 00000000011111101001001000110010 spurned 00000000000100111001010000110010 Gene 00100000000100100011111100001000 day-care 00000000000000000000000000000000 tony 00000000011000010000011000011000 16.1 00000000000000000000000000000000 staging 00000000001111100010110001000000 bomber 00000000000010010010001010110000 money-management 00000000000000000000000000000000 romance 00000000000111100000101100100001 Nguyen 00100000000000000000000000000000 3.16 00000000000000000000000000000000 baseline 00000000000000000000000000000000 Palace 00100000000111001101000100000001 Lowe 00101111111110100101001000001000 Chiefs 00100000000000000111000000100111 tennis 00000000000000000101101100100001 isolation 00000000000110000111111010100111 Sprint 00100000000001101100111110000010 Hanson 00100000000100011010010000001000 celebrity 00000000000111010100000001000111 hovering 00000000000100001111000001000000 Gross 00100000000100001001010101010000 hepatitis 00000000000111111101110000100001 sagged 00000000000011010001000100110010 fray 00000000000111010010101101100111 Levitt 00101111111111101010100010001000 crown 00000000000000001000100100100001 Bert 00101111111000001011000110011000 prints 00000000000110011111000000010010 evasion 00000000000111111111110010000011 Disabilities 00100000000000000011100010100111 Utility 00100000000010100001000000100101 80486 00000000000000000000000000000000 shipment 00000000000111101111001101001111 robots 00000000000110100101111001100011 Kia 00100000000000000000000000000000 foreclosed 00000000000100001000101001000000 management-led 00000000000000000000000000000000 Estimates 00100000000111100011010000100011 Hart-Scott-Rodino 01000000000000000000000000000000 Eurodollar 00100000000000001000000110110000 appropriated 00000000000000000000010000110010 Hispanics 00100000000101111100111000110011 motivation 00000000000111010111110100100111 13.6 00000000000000000000000000000000 210 00000000000000000000000000000000 Provident 00100000000001111001111000101000 fake 00000000000001110010011010010000 stress-related 00000000000000000000000000000000 Donoghue 00100000000111011101111110101000 etc. 00000000000000000000000000000000 blind 00000000000010101101011010010000 persist 00000000100001111101010110110010 386 00000000000000000000000000000000 TRW 01000000000000000000000000000000 embarrassed 00000000000111000101110000110010 Xtra 00100000000000000000000000000000 540 00000000000000000000000000000000 Blockbuster 00100000000001001011100100100001 FERC 01000000000000000000000000000000 cater 00000000000101010111010110110010 50.3 00000000000000000000000000000000 Alabama 00100000000111110011110001101000 spokesmen 00000000000010101000000010110011 IPO 01000000000000000000000000000000 reinvestment 00000000000000000101101011100001 tolerate 00000000001011001111101110110010 assorted 00000000000000000101000011000000 marble 00000000000010100010001000110000 four-year-old 00000000000000000000000000000000 erupted 00000000001010100110001000110010 intellectuals 00000000000111111000111000110011 Cunningham 00101111111100111011100010001000 competitiveness 00000000000110100111111010100111 salvage 00000000000010111111110110110010 genetically 00000000000011001111001001110010 permissible 00000000000000010000110001000000 Tharp 00100000000000000000000000000000 widget 00000000000000000000000000000000 8.47 00000000000000000000000000000000 Pravda 00100000000110010110101101101000 unlimited 00000000000001000010010100010000 bloated 00000000000000111011100000010000 22.8 00000000000000000000000000000000 hangs 00000000000000111100001000110010 perjury 00000000000000100111100010100111 chase 00000000000111101000111000101000 topiary 00000000000000000000000000000000 waterworks 00000000000000000000000000000000 cogeneration 00000000000001100000011010110000 ... 00000000000001110100000101001000 constitution 00000000000111101101111001000101 privileges 00000000000111110110011100100011 Champion 00100000000111101110000100100001 auditors 00000000000101001010101010110011 Organizations 00100000000110010000000100100011 transformed 00000000010111010001001000110010 Canton 00100000000100010111101001101000 scaring 00000000000000000000000000000000 dismayed 00000000001101001101110000110010 OAS 01000000000000000000000000000000 dislike 00000000000000011110000110110010 flags 00000000000000111101110101100011 contractual 00000000000000101000000000110000 pennies 00000000000000000000000000000000 Randy 00101111111000010001111000011000 ear 00000000000101101111111001100111 Oberstar 00100000000000000000000000000000 speculator 00000000000110011111101110110101 classical 00000000000000100000001000110000 Samsung 00100000000011011101000100101000 Hut 00100000000000101000011010101000 Hans 00100000000000011110110110011000 lessons 00000000000011101001110101100011 Harbor 00100000000011000110000010100101 Edgar 00101111111000100000011100001000 musicians 00000000000010101100111000110011 Components 00100000000111100111011111001001 accountability 00000000000111011000011010100111 GRAINS 01001111111111011111101110110000 emotion 00000000000100011111110010100111 SOYBEANS 01000000000111111111101110110000 rand 00000000000000000011000000001011 polystyrene 00000000000000000000000000000000 Convention 00100000000111100001101100100101 tremor 00000000000000000000000000000000 Crusaders 00100000000000000000000000000000 offend 00000000000000100011111110110010 Sverdlovsk 00100000000000000000000000000000 gate 00000000000010100001111000000001 Genetic 00100000000000111000101010110000 breakthrough 00000000000111111011111010110101 breathtaking 00000000001000100001000000010000 portrayed 00000000000100000010110000110010 COPPER 01000000000111111011101110110000 universe 00000000000111101100101101100111 cables 00000000000111011011011111001001 fearing 00000000000110101101111010000010 richest 00000000000010000011110011010000 Picasso 00100000000101111001110010100111 lubricants 00000000000111100010101111001001 Reuter 00101111111000011001001000001000 Tiananmen 00100000000101111010011010101000 robot 00000000000010000100001000100001 fatal 00000000000000001101011010010000 Action 00100000000111101110110001100111 Bougainville 00100000011110000100011010110000 snack-food 00000000000000000000000000000000 powerhouse 00000000000111000011100100100001 Manic 00100000011000011010000000110000 Mines 00100000000000001111110001111001 Century 00100000000000000010000001000111 McCarthy 01001111111101001100100010001000 Adolph 00100000000111010100111000101000 Ethiopia 00100000000111010101011101101000 influences 00000000001110011111000000010010 differentials 00000000000000000001001110000011 gut 00000000001000100101110110110010 10.77 00000000000000000000000000000000 recycled 00000000001010101101101001000000 tolerance 00000000000111011110011010100111 shooting 00000000000110101110100001000000 void 00000000000111110000111000110111 UFO 01000000000000000000000000000000 spurt 00000000000111110101101100110111 Eduard 00101111111000100110000010011000 Goupil 00100000000000000000000000000000 57-year-old 00000000000000000000000000000000 communists 00000000000111101011011110110011 Concord 00100000000111000010101001101000 Mengistu 00100000000100011111111010001000 underscores 00000000000110000011000000010010 hazard 00000000000111110111010110111001 sharpest 00000000000000101010000011010000 divide 00000000000100011110101110110010 carry-forward 00000000000000000000000000000000 obliged 00000000000010000100011000110010 jeopardize 00000000000111111000111110110010 8.35 00000000000000000000000000000000 Institut 00101111111011110100010110110000 Brouwer 00101111010110101100000010001000 Hatch 00100000000101101100111010001000 vivid 00000000000010000011000010010000 Ivy 00100000000000000000101100100001 input 00000000000001100111110100100111 gossip 00000000000111101100001100100001 Bruno 00101111111100100010000100001000 sitcom 00000000000000000000000000000000 compromises 00000000000110101111111000100011 deployed 00000000010110001100010000110010 importantly 00000000000010010001001110010000 1.16 00000000000000000000000000000000 dogged 00000000110101010001110000110010 Convenience 00100000000001000101010000110000 CEO 01000000000000000000000000000000 entrenched 00000000000010010000110100010000 chorus 00000000000111100000100101100111 Houston-based 00100000000000000000000000000000 Fairfax 00100000000111101001110000001000 dangerously 00000000000000111100000001110010 Allan 00101111111001001100000010011000 cosmetic 00000000000001111010000000110000 Ehrlich 00100000000000000000000000000000 brains 00000000000111101011111101100011 Ben 00101111111000000011000000011000 glamorous 00000000000010101001000010010000 38.5 00000000000000000000000000000000 surprises 00000000000101000111001000100011 vegetables 00000000000111001010111001100011 accomplished 00000000000001010010110000110010 precipitous 00000000000000010100100000010000 magnified 00000000000000000000000000000000 cooling 00000000000100010010110001000000 roller 00000000010101101010101010110000 pitched 00000000101001101100010000110010 conditional 00000000000000000100100000110010 elegant 00000000000010100110110100010000 rampant 00000000000100101101010001000000 Cos 00100000000000000000000000000000 Consequently 00100000000111111000101011101000 delegate 00000000000011000100100110110111 Woods 00101111111101101101110001001000 illustrated 00000000010101000001110000110010 preclude 00000000000101111001101110110010 prosperous 00000000000000001001000010010000 hemorrhaging 00000000000000000000000000000000 expenditure 00000000000100101010100000111001 Daffynition 00100000000000000000000000000000 Rodeo 00100000000000000000000000000000 enables 00000000001101100001000000010010 updated 00000000000000100110111001000000 Laura 00101111111011010000001000011000 disk-drive 00000000000000000000000000000000 Jamaican 00100000000000000000000000000000 Mobile 00100000000100110000001010110000 speeches 00000000000110100101101000100011 Arena 00100000000111110011011001100111 Keeping 00100000000111111011101101000000 reversing 00000000000111111110001101000000 Advancing 00100000000001001110010001000000 tragedy 00000000000111011010101101100111 paralyzed 00000000010101010001110000110010 restrained 00000000010010010001110000110010 Ore 00100000000000111110110100100001 Spalding 00100000000000000000000000000000 crashes 00000000000111110000101001110011 Ark 00100000000000000000000000000000 Carr 00101111111111011100100010001000 unreasonable 00000000000010010101000110010000 proclaimed 00000000000010100101110111000010 attribute 00000000000111000101000110110010 glossy 00000000011110010000001000110000 Top 00100000000000000001011000010000 negotiator 00000000000010000111101110110101 weighing 00000000000010010010010101000000 Countries 00100000000000000000001101110011 recital 00000000000000000000000000000000 perpetual 00000000010100010000001000110000 Jewelers 00100000000000000000000000000000 Dorfman 00101111111000000110110010001000 deprived 00000000001010101011110000110010 switches 00000000000111110010100100001001 Eddington 00100000000000000000000000000000 Waxman 00101111111100110000111010001000 pencil 00000000000110101100110000000001 sleeping 00000000000000000011000001000000 Duff 00101111111111010111111010101000 Phelps 00101111111100001101110001001000 mundane 00000000000000001000010010010000 Rhone-Poulenc 01000000000000000000000000000000 ratified 00000000010001111001010000110010 Arabs 00100000000110101101000110110011 tag 00000000000111111111111110000011 Specifically 00100001000100000000001001110010 Minella 00100000000000000000000000000000 garage 00000000000001000011100000100001 Mead 00100000000100100111111100101000 equivalents 00000000000000000000101001101001 ominous 00000000000000011000110100010000 2006 00000000000000000000000000000000 airwaves 00000000000111111111001110110011 portraying 00000000000110111001001101000000 legitimacy 00000000000100010111111000001111 Omnicom 00100000000000011001010100101000 affordable 00000000000111001101001110010000 Robin 00101111111001001000001000011000 mistakenly 00000000001001000001001001110010 Colo 00100000000000000000000000000000 Due 00100000000000000000010100110010 Tyler 00101111111010101010000100001000 instrumentation 00000000000111101110100001100001 outperform 00000000001010100011111110110010 surveillance 00000000000000000100001101100001 Garbage 00100000000101101111110000100001 explosive 00000000000001010110110100010000 placements 00000000000111101000100100001001 downright 00000000011011101000000001110010 Roosevelt 00101111111000000110010000101000 prohibition 00000000000111111100000001100111 high-interest 00000000000000000000000000000000 Wilfred 00100000000000000000000000000000 Midler 00100000000000000000000000000000 Brooke 00101111111100101000000100001000 launches 00000000000100111111000000010010 Baby 00100000000010001101101000100001 excluded 00000100100111010100010000110010 contending 00000000000111111101111010000010 Convertible 00100000000000000001100110110000 patience 00000000000111110110110100100111 pioneer 00000000000111101100100100100001 Byrd 00101111111100100100011010001000 Shane 00100000000000000000000000000000 Enviropact 00100000000000000000000000000000 undeveloped 00000000001000011100101010110000 compelled 00000000000000011100011000110010 rallying 00000000000110000011100001000000 rosy 00000000000000000011001010010000 Emerson 00100000000101110000100100101000 curve 00000000000000000010001000100111 life-insurance 00000000000000000000000000000000 11.7 00000000000000000000000000000000 7.42 00000000000000000000000000000000 18.7 00000000000000000000000000000000 AN 01000000000000000000000001010100 amusing 00000000000011000110110110010000 multibillion-dollar 00000000000000000000000000000000 DJIA 01000000000000000000000000000000 examiner 00000000000010000010110000110101 supplying 00000000000000000001111101000000 footing 00000000000110101010110000100111 CNBC 01000000000000000000000000000000 Ohbayashi 00100000000000000000000000000000 Cause 00100000000111110011110110110010 arrives 00000000000010011000001000110010 Berman 00101111111101100011100010001000 medication 00000000000110010110111001100011 2.19 00000000000000000000000000000000 13-week 00000000000000000000000000000000 Merchants 00100000000010000010101111110011 potato 00000000000000010001110000100001 Austrian 00100000000000001000010100110000 BanPonce 01000000000000000000000000000000 F 00100000000000000000000000000000 Lyondell 00100000000000000000000000000000 Midwestern 00100000000000111101000100110000 low-interest 00000000000000000000000000000000 snags 00000000000111101000011000100011 invites 00000000000010010001000000010010 pertussis 00000000000000000000000000000000 repaired 00000011011001010100010000110010 1,850 00000000000000000000000000000000 updating 00000000000000000000000000000000 oldest 00000000000111100110110011010000 deficit-cutting 00000000000000000000000000000000 Basin 00100000000010000100100010100101 Cheer 00100000001100010110010110110010 hesitate 00000000000111011011000110110010 non-recurring 00000000000000000000000000000000 Tribe 00101111111110101011111010001000 shame 00000000000111011111101010110111 convey 00000000001110111011111110110010 Calgary-based 00100000000000000000000000000000 Garratt 00100000000000000000000000000000 airplane 00000000000110110110001010110000 220 00000000000000000000000000000000 divest 00000000000110010011111110110010 confined 00000000000101001100110000110010 mighty 00000000000000111000011010010000 new-home 00000000000000000000000000000000 Interior 00100000000111100111110110110000 unsafe 00000000000011001101000110010000 prepayment 00000000000000000001101011100001 Cane 00100000000110000111101110110000 unity 00000000000111110001110010100111 198 00000000000000000000000000000000 on-site 00000000000000000000000000000000 lobbies 00000000000111011010110100100011 lower-priced 00000000000000000000000000000000 coated 00000000000000100101010000110000 civilian 00000000000000000111110000110000 headaches 00000000000111110010011000100011 richer 00000000000000001001001111000000 manageable 00000000000011100110010010010000 Schulof 00100000000000000000000000000000 Fairfield 00100000000111011010101001101000 Pharmacia 00100000000000000000000000000000 Timbers 00100000000000000000000000000000 Ventures 00100000000000000001000000100111 civic 00000000001101100000000000110000 pale 00000000000011010110011010010000 Hancock 00101111111111111000001000001000 intensifying 00000000000000101101010001000000 R.I. 01000000000000000000000000000000 Providence 00100000000111010101101001101000 middleman 00000000000111101100101010110101 Crime 00100000000101111101110010100111 Falconbridge 00100000000110010101111100101000 shipbuilding 00000000000000001011011010110000 looming 00000000000000001011100001000000 manufactures 00000000001010011101000000010010 DWG 01000000000000000000000000000000 Sandra 00101111111000000001110110011000 747 00000000000000000000000000000000 foreign-currency 00000000000000000000000000000000 law-enforcement 00000000000000000000000000000000 Yield 00100000000111111110110110110010 165 00000000000000000000000000000000 Kobe 00100000000101100010111000101000 Nadeau 00100000000000000000000000000000 showroom 00000000000011010001111010110000 Gerard 00101111111001110101100010011000 14.5 00000000000000000000000000000000 appliance 00000000000000011011111010110000 Flom 00101111111010110111110001001000 annuities 00000000000111010111111001100011 Manitoba 00100000000101000111111001101000 chunks 00000000000111101001100100101111 Monica 00100000000001011000000001001000 mouth 00000000000111101101011110000001 lips 00000000000111110001011110000001 Zeta 00100000000000000000000000000000 BP 01000000000000000000000000000000 hub 00000000000000000000001010000001 sideline 00000000000000000000000000000000 seal 00000000000100100000100110110111 blaming 00000000000111101000001101000000 advertised 00000000000111110001101001000000 cocaine 00000000000000001010110000100001 upbeat 00000000000001100001110100010000 unpublished 00000000000000000000000000000000 chapters 00000000000000001100000001100011 Politics 00100000000111101110010010100111 Game 00100000000111101011101101100111 labs 00000000000110100100110001100011 scored 00000000000001101001010000110010 roadways 00000000000000000000000000000000 miners 00000000000000011000000000110011 Richards 00101111111110001000000100001000 truce 00000000000111101110010011001111 Ferguson 00101111111101101110100010001000 three-quarters 00000000000000000000000000000000 educated 00000000000111111110110100010000 resuming 00000000001101111011011101000000 10.3 00000000000000000000000000000000 forests 00000000000110110100110001100011 Businessland 00100000000111010100111100101000 Burns 00101111111100100111001000001000 childhood 00000000000111000110110000000001 SKF 01000000000000000000000000000000 when-issued 00000000000000000000000000000000 junk-holders 00000000000000000000000000000000 brushed 00000000000000000000000000000000 approves 00000000000000111001010000110010 METALS 01001111111010101000011110110000 2.625 00000000000000000000000000000000 PRECIOUS 01001111111101010111111110110000 wrapped 00000000001011111011001000110010 Lancaster 00100000000100101111101001101000 discarded 00000000101001010100010000110010 reoffered 00000000000111100111110100110010 retinoblastoma 00000000000000000000000000000000 Oakes 00100000000000000000000000000000 330 00000000000000000000000000000000 deadly 00000000000001010100000010010000 limbo 00000000000111111000110101010111 Broderick 00100000000000000000000000000000 span 00000000000000100101001010110111 Ing 00101111111111001101000100001000 high-performance 00000000000000000000000000000000 fin-syn 00000000000000000000000000000000 unofficial 00000000000000010110010100010000 F-14 00100000000000000000000000000000 modified 00000000000011000100111001000000 deteriorated 00000000000001111010110000110010 blue-collar 00000000000000000000000000000000 long-range 00000000000000000000000000000000 75,000 00000000000000000000000000000000 miracle 00000000000111101100001101100111 Frankly 00100000000111101000001001110010 stumbled 00000000000101111011001000110010 Owens-Corning 01000000000000000000000000000000 customary 00000000000011110100000010010000 consumer-products 00000000000000000000000000000000 Villanova 00100000000000000000000000000000 Nintendo 00100000000101100011011100101000 outline 00000000000101010111110110110010 1920s 00000000000000000000000000000000 outrage 00000000000010101110111010100111 Gogh 00101111111001000001110100100001 Seymour 00101111111001001000000100001000 characterize 00000000000110000011111110110010 assortment 00000000000101010100111001100111 colorful 00000000000010110100000010010000 Gallery 00100000000110111111100100000001 regular-season 00000000000000000000000000000000 Box 00100000000000011010000001000111 editorial-page 00000000000000000000000000000000 2.375 00000000000000000000000000000000 maneuvering 00000000000011010111110100100111 Reflecting 00100000000111111011011010000010 motivated 00000000000101000001110000110010 Beirut 00100000000111101011111001101000 inspire 00000000000101101111101110110010 recipients 00000000000111101110001010110011 Engineers 00100000000000010110000000110011 highlighted 00000000010111100111010000110010 notions 00000000000110000011111101100011 Behind 00100000000010100001000000001010 worrisome 00000000010000000101010010010000 scholarship 00000000000000001111001101100001 Opponents 00100000000111111010000010110011 reap 00000000000111001111101110110010 fence 00000000000111001001111000000001 2,400 00000000000000000000000000000000 earthquake-related 00000000000000000000000000000000 profoundly 00000000001000101000000001110010 leisure 00000000000000110011001010110000 loading 00000000000001111110110110110111 ports 00000000000111100111110001100011 prostitution 00000000000111111001110010100111 girlfriend 00000000000111111010111110000001 Daikin 00100000000000000000000000000000 Lloyds 00100000000001001001111000101000 trafficking 00000000000111110101011100100101 Sung 00100001100101110100010000110010 tally 00000000000111100010001000110111 Solar 00100000000000001101110000110000 Comptroller 00100000000111110110010000110101 diversify 00000000000110010010111110110010 hastily 00000000001011000001001001110010 Ekco 00100000000000000000000000000000 LDC 01000000000000000000000000000000 justifies 00000101010110000011000000010010 Work 00100000000111111111100010110111 refineries 00000000000101100111110001100011 Carolinas 00100000000000000000000000000000 clobbered 00000000010010000001110000110010 Died 00100000000110111110001000110010 roadway 00000000000100001111000100101000 blows 00000000000110101111000000010010 Plus 00100000000000000010011010000010 foes 00000000000101101010000010110011 scheduling 00000000000110110010110001000000 half-dozen 00000000000000000000000000000000 Owners 00100000000010001111100000110011 Sheller-Globe 01000000000000000000000000000000 forthcoming 00000000000011001001010010010000 trap 00000000000110100101001010110111 Axa-Midi 01000000000000000000000000000000 Test 00100000000111101010111110110111 exposures 00000000000101010000010000100111 ingredients 00000000000111100001101010100011 resentment 00000000000110101110111010100111 arrival 00000000000111111001011010100111 eroded 00000000000111111110111001000000 Boskin 00101111111100110110101010001000 frequency 00000000000110011011111000001111 ninth 00000000000110101011100011010000 sandwich 00000000000011100101111000000001 swimming 00000000000001100010101100100001 Doyle 00101111111110010000001000001000 CWA 01000000000000000000000000000000 dose 00000000000111111000111000111111 alarmed 00000000000111100101110000110010 VAX 01000000000010011000010000110000 girls 00000000000111101101111100110011 dashed 00000000010101010100010000110010 swamped 00000000010110101101110000110010 Underwriters 00100000000110100100101001110011 skilled 00000000000101001000101000110000 premises 00000000000110100100111101100011 shouting 00000000011111100110100001000000 speeding 00000000000111100110100001000000 conduit 00000000000110110011101110110101 celebrating 00000000000111101100001101000000 Halloween 00100000000000010110000000100001 phoned 00000000001011101101010000110010 attach 00000000000101001111101110110010 Omni 00100000000100110001111010110000 illusion 00000000000111101101110000001111 39,000 00000000000000000000000000000000 instruction 00000000000000001100001101100001 midtown 00000000000110010000001000110000 novelist 00000000000101100111011110110101 romantic 00000000000000001011011010010000 lets 00000000001100100001000000010010 gun 00000000000111101000010000000001 posture 00000000000111001011101110100111 reads 00000000100010000011000000010010 shrank 00000000000011011010110000110010 Cech 00100000000000000000000000000000 Turnpike 00100000000000011110010011010000 ADRs 01000000000000000000000000000000 Pickens 00101111111100111100100000001000 stockbrokers 00000000000000000000101111110011 emotionally 00000000000001001000000001110010 gestures 00000000000011011111001000100011 noise 00000000000000000001110000100001 statewide 00000000000000100101000000010000 dial 00000000000111101001110110110111 interrupted 00000100010111010100010000110010 Dominion 00100000000000000111000100101000 claimants 00000000000111110101100110110011 monopolies 00000000000111111111100000100001 concentration 00000000000111110011011010100111 1.17 00000000000000000000000000000000 taping 00000000010011100010110001000000 corrupt 00000000000001111000101000110000 bribed 00000000000000000000000000000000 continental 00000000000111101011110110101000 clarify 00000000000111101010011110110010 21.3 00000000000000000000000000000000 reinvested 00000000111011000000010000110010 fleets 00000000000111111011101001100011 specifics 00000000000011101110001100101111 7.82 00000000000000000000000000000000 buffer 00000000000000000001110101010000 Marietta 00101111111111100101001000110000 built-in 00000000000000000000000000000000 en 00000000000000100010001000110000 Surely 00100001000001000000001001110010 Regional 00100000000000001100010000110000 death-penalty 00000000000000000000000000000000 occurring 00000000101100001100010000110010 disappearance 00000000000101100111111000001111 sights 00000000000111000011111101100011 1.21 00000000000000000000000000000000 stone 00000000001100100001000000001000 Amid 00100000000000000010100000001010 rebuilding 00000000000100000010110001000000 occupation 00000000000110101111101001100111 distinct 00000000000010010000010000010000 Werner 00101111111100101110000100001000 imprisonment 00000000000111110100111000111001 320 00000000000000000000000000000000 codes 00000000000000101001011100100011 Maclean 00101111111111100100001000011000 acceleration 00000000000110010110111001100111 Whittington 00100000000000000000000000000000 Insight 00100000000100100100111001100111 piled 00000000000111101011001000110010 Friends 00100000000110100111110000110011 booked 00000000001110001100010000110010 translations 00000000000000000000111001101001 educators 00000000000000000100111000110011 inject 00000000010111101111101110110010 depended 00000000000001100000100000110010 intermediate 00000000000000000001101010101000 wooden 00000000000000001010001000110000 dairy 00000000000011100100011010110000 Violetta 00100000000000000000000000000000 bread-and-butter 00000000000000000000000000000000 meals 00000000000010101101110101100011 88.12 00000000000000000000000000000000 Remember 00100000000111110110100110110010 urgency 00000000000011110111110100100111 dragging 00000000011111101110100001000000 Demler 00101111111000010001000010001000 terrorist 00000000000000001001011000110000 1.49 00000000000000000000000000000000 photograph 00000000000111101011001000111111 fingers 00000000000100000111111101100011 U.S.-Soviet 01000000000000000000000000000000 3.69 00000000000000000000000000000000 contraceptive 00000000000000000010001011100001 fertilizer 00000000001000001011111010110000 self-employed 00000000000000000000000000000000 Stephens 00101111111101001101110001001000 ai 00000000000111111101111100010010 reassuring 00000000000011110000010010010000 perfume 00000000000010010011111010110000 Tae 00101111111100110100011100100101 tainted 00000000010000010101101001000000 calamity 00000000000111111000101101100111 resolutions 00000000000100000011101000100011 Glazer 00101111111011001110100010001000 emergence 00000000000110011111111000001111 pocket 00000000000111100111010000000001 geography 00000000000111101011010010100111 Elliott 00101111111000000010100100001000 Hawaiian 00100000000010110000001000110000 Schwartau 00100000000000000000000000000000 bookings 00000000000000000000010100011001 bleeding 00000000000111100001110000100001 heir 00000000000111100011001100100111 amend 00000000001110111010111110110010 dying 00000000000111101101000001000000 junior 00000000000000110000101000110000 openness 00000000000110111111110010100111 tailored 00000000011101101100110000110010 surgical 00000000000000001100101010110000 drawbacks 00000000000111111100011000100011 steeper 00000000000001001100001111000000 four-game 00000000000000000000000000000000 Orders 00100000000000000000000100011001 incur 00000000000110000011001110110010 Employment 00100000000000000000001100000111 specifications 00000000000111010111011100100011 IMS 01000000000000000000000000000000 define 00000000001010101011111110110010 Corrupt 00100000000001111000101000110000 9000 00000000000000000000000000000000 legislatures 00000000000000000011010010110011 playoffs 00000000000000000000000000000000 FM 01000000000000000000000000000000 1.06 00000000000000000000000000000000 Record 00100000000111101111111100010000 Automobile 00100000000000001100001110110000 Comair 00100000000000000000000000000000 Kao 00100000000000000000000000000000 Software 00100000000000000000111010110000 Combined 00100000000000000110001001000000 shedding 00000000000111011001110001000000 concluding 00000000000110111001111010000010 pipes 00000000000111100111101111001001 LSI 01000000000000000000000000000000 WHEN 01000000000000000000101001000010 stressing 00000000000111011001111010000010 Ferdinand 00101111111001110100011100001000 FirstSouth 01000000000000000000000000000000 scant 00000000000000000010110000010000 18.65 00000000000000000000000000000000 blanket 00000000000000011100100000100001 remembers 00000001000011100011000000010010 remarked 00000000000111010111110111000010 19.7 00000000000000000000000000000000 slackened 00000000000000000000000000000000 Taft 00100000000101100100110000001000 Rahn 00100000000000000000000000000000 Sagan 00100000000000000000000000000000 Boulder 00100000000111100111101001101000 advocating 00000000000111000011111101000000 Beth 00101111111000011110001000011000 Try 00100000000110111111010110110010 harbor 00000000000011000110000010100101 questionnaire 00000000000111100010001011100111 BRIEFS 01001111111110011111101110110000 builder 00000000000111101101000001110101 killer 00000000000100100100001100100001 1,100 00000000000000000000000000000000 26.5 00000000000000000000000000000000 Theodore 00101111111000011001110110011000 FK-506 01000000000000000000000000000000 dependents 00000000000111011110011100110011 Wichita 00100000000001111011101001101000 Medellin 00100000000000000000000000000000 dull 00000000000111100010011010010000 drum 00000000010110010110010110110010 Additionally 00100000000111111011101011101000 intolerable 00000000000000010011001110010000 absent 00000000011000010100010000110010 audited 00000000001010010001101001000000 Bay-area 00100000000000000000000000000000 30.6 00000000000000000000000000000000 Ultimately 00100000000000000000001001110010 remark 00000000000111101101111101100111 fasteners 00000000000000000000000000000000 cost-of-living 00000000000000000000000000000000 Matilda 00100000000000000000000000000000 Oscar 00101111111000001100001100011000 publicist 00000000000110111011011110110101 virtual 00000000000001101010010000010000 Mo 00100000000000000000000000000000 clever 00000000000001010000011010010000 emigration 00000000000010101100011100000111 Holt 00101111111100010111000010001000 Fruit 00100000000110111011111010110000 19.95 00000000000000000000000000000000 negligence 00000000000110011111100010100111 premature 00000000000111110101110110010000 Troubled 00100000000001000000101001000000 rage 00000000000111110010111010100111 Petco 00100000000000000000000000000000 bone 00000000000000101001110000100001 faulty 00000000000000101100000110010000 Greek 00100000000010100001011000110000 tarnished 00000000110110000001110000110010 Empire 00100000000111110000100100100001 salmonella 00000000000000100101110000100001 1-2-3 00000000000000000000000000000000 installation 00000000000111111001111101001111 torn 00000000001001110010110000110010 distributions 00000000000100000010001100000011 409 00000000000000000000000000000000 deductibility 00000000000101001111111000001111 Magellan 00100000000001010001111110110000 subpoenas 00000000000101100110110100011001 Arctic 00100000000011110010001000110000 sprawling 00000000010010010000001000110000 inception 00000000000111111111011110100111 full-fledged 00000000000000000000000000000000 Chambers 00100000000100110100110111110011 diaper 00000000000000100101011010110000 Beefeater 00100000000000000000000000000000 saddled 00000000000101110110010000110010 Quina 00100000000000000000000000000000 quoting 00000000000110111100001101000000 depicted 00000000000000000010110000110010 Whittaker 00100000001011001010111100101000 Elaine 00101111111000000100011000011000 abstract 00000000000000001110110100010000 Bruyette 00101111111111111100101001001000 Concerned 00100000000111110111110000110010 fulfilling 00000000000111100101011101000000 Morgenzon 00100000000000000000000000000000 Chuck 00100000000000000001101000011000 measurement 00000000000010101000100001100001 till 00000000000000010110000000101010 Corsica 00100000000000000000000000000000 Yorkshire 00100000000000000000000000000000 treats 00000100000110000011000000010010 4.92 00000000000000000000000000000000 mulling 00000000000111100010010101000000 24-hour 00000000000000000000000000000000 forefront 00000000000111111110101100001111 CPI 01000000000000000000000000000000 Cherokee 00100000000000111001010100101000 Oracle 00100000000110001100100100101000 Going 00100000000111101110011000110010 bore 00000000000001101011000000010010 Akron 00100000000111111110001001101000 Moss 00101111111110101010100010001000 Mafia 00100000000011001010101000110000 Register 00100000000100011110010110110010 prisons 00000000000011100111110001100011 NRDC 01000000000000000000000000000000 respectable 00000000000000110111100000010000 rig 00000000000110110110110110110111 340 00000000000000000000000000000000 stock-fund 00000000000000000000000000000000 markdowns 00000000000111101111010000000011 backlash 00000000000111101110101010100111 Hoelzer 00100000000000000000000000000000 Isler 00100000000000000000000000000000 criticisms 00000000000111111011101000100011 Dreyer 00100000000000000000000000000000 penetrate 00000000000101100111111110110010 sensational 00000000000000000000000000000000 restitution 00000000000000101011001100000011 refrain 00000000000110010011110110110010 Authorities 00100000000000000010010010110011 PR 01000000000000000000000000000000 go-ahead 00000000000000000000000000000000 Cela 00100000000000000000000000000000 Margin 00100000000000000001100011000111 dominates 00000010110010000011000000010010 Touche 00101111111111100100010000101000 computer-aided 00000000000000000000000000000000 Arco 00100000000111101100010100101000 1949 00000000000000000000000000000000 appreciated 00000000000010010001101001000000 intelligent 00000000000010100000110100010000 DeVoe 01000000000000000000000000000000 connecting 00000000000000011010110001000000 Corcoran 00100000000000000000000000000000 meaningless 00000000000010100011110110010000 continuation 00000000000111111111101110111111 Store 00100000000000000101111010110000 rear 00000000000100001010001000110000 buy-and-hold 00000000000000000000000000000000 first-time 00000000000000000000000000000000 Candela 00100000000000000000000000000000 flush 00000000000101111101100000110010 neatly 00000001111100000000010001110010 meters 00000000000000101111000001000111 seismic 00000000000000000000000000000000 minimum-wage 00000000000000000000000000000000 contested 00000000000001000101101001000000 abundant 00000000000000001111110010010000 IG 01000000000000000000000000000000 Metall 00100000000000000000000000000000 heady 00000000000000110010011010010000 coordinator 00000000000110100111110000110101 skiers 00000000000000000000000000000000 mad 00000000000001110000011010010000 hints 00000000000111101100011110101111 Basir 00100000000000000000000000000000 voiced 00000000000011010001010000110010 extends 00000001000010000011000000010010 emphasize 00000000000110001100100110110010 Bumiputra 00100000000000000000000000000000 Mail 00100000000101101110000000100001 two-step 00000000000000000000000000000000 mid-November 01000000000000000000000000000000 Westridge 00100000000000000000000000000000 17.6 00000000000000000000000000000000 threshold 00000000000111001010101101100111 combines 00000000001111100001000000010010 Hedges 00100000000111111101000001111001 Faced 00100000000011010110010000110010 jackets 00000000000001100111110101100011 materialize 00000000110111111101010110110010 prescribed 00000000000100001101101001000000 logical 00000000000000100000000010010000 mink 00000000000000100110101100100001 Kerry 00101111111001010010000100001000 Schlumberger 00100000000110110100111100101000 Did 00100000000111101110111100010010 psychologist 00000000000111110101011110110101 honestly 00000000111000000000010001110010 searches 00000000000101100010001000100011 timidity 00000000000111100011111010100111 provinces 00000000000110000101011101110011 forge 00000000000110011110010110110010 Occupational 00100000000110100101000000110000 reclaim 00000000000000000000000000000000 attraction 00000000000111101111111001100111 tags 00000000000111101100111110000011 IAFP 01000000000000000000000000000000 Egypt 00100000000111111011111101101000 Figure 00100000000111101111001000110111 merchandising 00000000000000010000100001100001 downs 00000000000111111011001001100001 ups 00000000001111110011111010110000 Corn 00100000000110100001101110110000 self-interest 00000000000000000000000000000000 Superior 00100000000000001000001001000000 Veterans 00100000000000100010111010110000 Bullock 00101111111110001110000010001000 aesthetic 00000000000010001000000000110000 canal 00000000000000000111001010100101 disorder 00000000000011011111110010100111 best-known 00000000000000000000000000000000 Haskins 00101111111100101111101001001000 feedlots 00000000000111111111101000000111 tritium 00000000000000000000000000000000 muster 00000000001101101110101110110010 dissidents 00000000000111110100100110110011 leaks 00000000000101111101110101100011 integrate 00000000000111010110111110110010 Izvestia 00100000000000000000000000000000 towards 00000000000011000001000000001010 mega-issues 00000000000000000000000000000000 Enserch 00100000000000000000000000000000 winds 00000000000111100111000000010010 coffers 00000000000111111010011100100011 Finkelstein 00100000000000000000000000000000 viability 00000000000111110010011000001111 Toy 00100000000000010011111010110000 Environment 00100000000111110111011001100111 Claiborne 00101111111000010100000001001000 Scenario 00100000000111011001111101100111 Johnston 00101111111110111111100010001000 Montana 00100000000110011100110001101000 Coda 00100000000000000000000000000000 locally 00000000001100100001001001110010 8.85 00000000000000000000000000000000 Miss. 00100000000000000000000000000000 Southeastern 00100000000000101000110110101000 bullion 00000000000000000001011110110000 disgorge 00000000000000000000000000000000 bracket 00000000000111111111100110000011 variables 00000000000110110111001010100011 190.58 00000000000000000000000000000000 F-16 00100000000000000000000000000000 national-security 00000000000000000000000000000000 opted 00000000001110111011101000110010 harvested 00000001100001001100010000110010 thumb 00000000000111110111110010100111 steer 00000000000001111011101110110010 Nora 00100000000000000000000000000000 154 00000000000000000000000000000000 trainer 00000000000000101111011110110101 sounded 00000000001100101000001000110010 seldom 00000000000101100000001001110010 blockbuster 00000000000001001011100100100001 ropes 00000000000111101011100000100001 ducks 00000000000111011011010101100011 Projects 00100000000111101111110100100011 wide-ranging 00000000000000000000000000000000 conspired 00000000000110011111101000110010 small-town 00000000000000000000000000000000 adversely 00000000010010000000010001110010 consisted 00000000000000000100101000101111 carpets 00000000000000000000000000000000 268 00000000000000000000000000000000 feeds 00000100001110000011000000010010 Export 00100000000000000011000100010000 allocate 00000000000111110111001110110010 Hopwood 00101111111100111111110001001000 Toubro 00100000000000000000000000000000 brave 00000000000010110010011010010000 notebooks 00000000000000000000000000000000 presumed 00000000000110110101110110010000 gates 00001111111100000111001000001000 Rafale 00100000000000000000000000000000 reinforced 00000000000100100111010000110010 Canaan 00100000000000000000000000000000 scuttled 00000001001011010100010000110010 government-controlled 00000000000000000000000000000000 stockpiles 00000000000111111100010100000111 intangible 00000000000001100000101001000000 pleasure 00000000000111101111010000000001 chronic 00000000000001110010000000110000 Islamic 00100000000000100001011000110000 counterproductive 00000000000011011000110110010000 Briggs 00100000000000000000000000000000 supervised 00000000010101000101010000110010 1964 00000000000000000000000000000000 compliment 00000000000000000000000000000000 insult 00000000000111000011101100100111 Lesk 00100000000000000000000000000000 Durkin 00100000000000000000000000000000 orthodox 00000000000000011001011000110000 punch 00000000000101001111001010110111 Sri 00101111111000010011001101110000 regrets 00000000000111101110011010101111 singers 00000000000110110111110101100011 Violin 00100000000010001010101100100001 violin 00000000000010001010101100100001 trespass 00000000000000000000000000000000 Kessler 00101111111110111100000010001000 nearest 00000000000011010000010011010000 Ambrosiano 00101111111000100111010001001000 inefficiency 00000000000111111011010010100111 Valentine 00100000000000000000000000000000 DEA 01000000000000000000000000000000 guideline 00000000000000000000000000000000 Honduras 00100000000111110101011101101000 Detrex 00100000000000000000000000000000 astronauts 00000000000000001000011100110011 Cummins 00100000000011100010111000101000 Escort 00100000000000000011100110110111 Fujisawa 00100000000000000000000000000000 frankly 00000000000111101000001001110010 Design 00100000000111001100011110110111 ward 00001111111100101100010000001000 misrepresentations 00000000000100110111100010100111 pauses 00000000010101101111000000010010 balloting 00000000000111101100010001100111 Coates 00100000000000000000000000000000 dancing 00000000000111101010001100100001 U.S.-backed 01000000000000000000000000000000 warehouses 00000000000111111011110001100011 7.97 00000000000000000000000000000000 Olin 00100000000000010111111100101000 Brotherhood 00100000000111111111011110100001 Ship 00100000000111101101000110110111 two-hour 00000000000000000000000000000000 refined 00000000000111011001101001000000 crudes 00000000000100000101011011100011 constructive 00000000000001000001010010010000 accuracy 00000000000111010010111000001111 normalcy 00000000000000000000000000000000 stranger 00000000000111101100111100010111 deliberate 00000000001101000001000000010000 dolls 00000000001000100101110101100011 adjuster 00000000000000000000000000000000 Bancroft 00100000000111110011010100101000 conservatorship 00000000000000000000000000000000 Filipinos 00100000000010011100111000110011 sings 00000000100011100011000000010010 dispose 00000000000110010111110110110010 callers 00000000000000100110111000110011 Bologna 00100000000000000000000000000000 lion 00000000000111101111001011000101 boast 00000000000111101011011010110111 Klerk 00101111111000101100111110000010 1.5765 00000000000000000000000000000000 Tesoro 00100000000110100011010100101000 142.75 00000000000000000000000000000000 Proponents 00100000000001111010000010110011 430 00000000000000000000000000000000 shrift 00000000000000000000000000000000 inconceivable 00000000001101001110010001110010 63.52 00000000000000000000000000000000 Legent 00100000000000000000000000000000 flap 00000000000101010010111010100111 skyrocketing 00000000000010111010010001000000 Greg 00101111111010000000001000011000 environments 00000000000111111010110100100011 Libya 00100000000110011100111101101000 regulating 00000000000011010011011101000000 Sen 00100000000000000000000000000000 knock 00000000000001001110101110110010 ecological 00000000000101011000000000110000 whiskey 00000000000101110011111010110000 FOR 01000000000000000000000100001010 Especially 00100000000111111011000001110010 Finnair 00100000000000000000000000000000 suspicious 00000000000011101011110000110010 Bickwit 00100000000000000000000000000000 Parenthood 00100000000000000000000000000000 donating 00000000000000000000000000000000 segregation 00000000000110110011111010100111 IN 01000000000000000000000001001010 inviting 00000000000011000100001101000000 O'Connell 01001111110101111100000010001000 loser 00000000000111111000111010110101 unloading 00000000000111101001110001000000 15.5 00000000000000000000000000000000 nerve 00000000000110110001110000100001 Included 00100000000000100001010000110010 750,000 00000000000000000000000000000000 quantitative 00000000011010011010000000110000 stopping 00000000001001111011011101000000 Release 00100000000111101001111101110111 Mack 00101111111001101001001000001000 fragrance 00000000000100101011111010110000 589 00000000000000000000000000000000 honesty 00000000000010011111110010100111 sporting 00000000000010010010101010110000 suspending 00000000000011111011011101000000 wasted 00000000011011000100010000110010 Fernandez 00101111111001100111000010001000 Conasupo 00100000000000000000000000000000 depositors 00000000000111000111110000110011 aroused 00000000001111100111010000110010 workings 00000000000101010110011000001111 Bahamas 00100000000111111101111110110011 cracked 00000000010111101001001000110010 export-control 00000000000000000000000000000000 bumpy 00000000000000000000000000000000 hand-held 00000000000000000000000000000000 Cynthia 00101111111000001011110110011000 spectrum 00000000000111011100111001100111 Carroll 00101111111011100100000100001000 unwillingness 00000000000111101101111100100111 chilling 00000000000000111010000000010000 COMPANIES 01000000000110100100100011110011 Pact 00100000000111101110111000100111 paychecks 00000000000010100100111101100011 toppled 00000001001101000101010000110010 conciliatory 00000000011111000001000000010000 carpeting 00000000000011101011111010110000 slice 00000000000111101101011000111111 resurgence 00000000000110110101101010100111 theoretical 00000000010010011010000000110000 evacuation 00000000000000000110001011100001 payouts 00000000000111100011001100000011 KLM 01000000000000000000000000000000 flopped 00000000010101000110001000110010 orbit 00000000000111100010110101010111 lapses 00000000000111011100011000100011 bran 00000000000000000000000000000000 Called 00100000000011010101010000110010 Otto 00101111111010100001001010011000 magnate 00001111111100111111110000110101 26-week 00000000000000000000000000000000 Tenders 00101111111111111111110100011001 hydrogen 00000000000111011110110000100001 arteries 00000000000110101101110010100111 lining 00000000000111001010100001000000 Abbie 00100000000000000000000000000000 rattled 00000000000000000000000000000000 Monterrey 00100000000000000000000000000000 mouse 00000000000111011110000000001000 INDUSTRIES 01000000000111101100100000101001 136 00000000000000000000000000000000 1.08 00000000000000000000000000000000 ugly 00000000000010110101110100010000 Seaman 00100000000000111001000000001000 Morristown 00100000000110110101101001101000 naked 00000000000011010010011010010000 islands 00000000000000101101010100000001 229 00000000000000000000000000000000 worthless 00000000000001100100110110010000 stimulators 00000000000000000000000000000000 retrieve 00000000100101101111101110110010 Asea 00101111111011000100010000101000 1.76 00000000000000000000000000000000 Boveri 00101111111011010001000101001000 2.35 00000000000000000000000000000000 Buddy 00100000000010101011111100001000 Deere 00101111111111001011111010101000 Hammack 00100000000000000000000000000000 realities 00000000000110101011111000001111 Boyer 00100000000000000000000000000000 chasing 00000000000000000011000101000000 legality 00000000000111100101011000001111 Imo 00100000000111011110111100101000 anti-competitive 00000000000000000000000000000000 AMERICAN 01000000000000000000010110101000 kickbacks 00000000000111111011001100000011 Walnut 00100000000000000000000000000000 Recovery 00100000000111001111101010100111 inexpensive 00000000000000000111001110010000 Networks 00100000000111101110110100001001 11.25 00000000000000000000000000000000 deliberations 00000000000111100011010000100111 regulates 00000000011000010001000000010010 escrow 00000000000000010011101010100001 Connie 00100000000000000000000000000000 depth 00000000000111100010111000001111 Could 00100000000000000000100110010010 Aga 00100000000000000000000000000000 Khan 00100000000101111011000001001000 Marous 00100000000000000000000000000000 disabilities 00000000000000000011100010100111 Combustion 00100000000110111010011010110000 Mount 00100000000111111111100110110111 Pons 00100000000000000000000000000000 Patent 00100000000000101000100000100001 Vickers 00101111111110100100101000101000 positively 00000001001000010000010001110010 well-being 00000000000000000000000000000000 IFI 01000000000000000000000000000000 nominee 00000000000111111111101010110101 21.7 00000000000000000000000000000000 high-grade 00000000000000000000000000000000 missions 00000000000111100011110100100011 harmed 00000000101101010001110000110010 1.30 00000000000000000000000000000000 rider 00000000000000000000000000000000 Shea 00101111111110010100111000001000 Cherry 00100000000111010010001000110000 Uncle 00100000001110000010111000101000 143 00000000000000000000000000000000 full-sized 00000000000000000000000000000000 7.30 00000000000000000000000000000000 legacy 00000000000111010100100101100111 advent 00000000000110010101111000001111 Drugs 00100000000110100111111001100011 sailing 00000000000001100111000001000000 prize 00000000000110111010111010110101 centered 00000000000000011100100000110010 naczelnik 00000000000000000000000000000000 intensified 00000000000000010100111001000000 countryside 00000000000111111101001110110011 hog 00000000000000001111101110110000 Advisory 00100000000000000011000010110000 anthrax 00000000000000000000000000000000 revolving 00000000000001001111010000110000 27.1 00000000000000000000000000000000 Agents 00100000000000000011100000110011 roofing 00000000000000000000000000000000 14.1 00000000000000000000000000000000 supplemental 00000000000000011010010000010000 frivolous 00000000000000100010000110010000 celebrated 00000000000001000001101001000000 drugstore 00000000000001011001111010110000 bankruptcy-court 00000000000000000000000000000000 1.56 00000000000000000000000000000000 potent 00000000000001100100000010010000 company-owned 00000000000000000000000000000000 aspirations 00000000000111010010111101100011 surgeon 00000000000000001010110000110101 voter 00000000000000000000111000100001 gerrymandering 00000000000111001010110010100111 CAT 01000000000111110010010000000001 Acadia 00100000000000000000000000000000 Less 00100000000000000000100111000000 equality 00000000000111001111111010100111 mom 00000000000010111111110010100111 wealthier 00000000000010110100001111000000 patented 00000000000011101101101001000000 envy 00000000000111111010110101100111 Ridge 00100000000011101010100010100101 Fame 00100000000100101111110010100111 foil 00000000000111100111100110110111 non-profit 00000000000000000000000000000000 Jerusalem 00100000000111000011111001101000 10-day 00000000000000000000000000000000 27.9 00000000000000000000000000000000 catastrophic-illness 00000000000000000000000000000000 Readers 00100000000111110111110000110011 awaits 00000000111010000011000000010010 AFL-CIO 01000000000000000000000000000000 144 00000000000000000000000000000000 initiate 00000000000011001111101110110010 forfeit 00000000000110001110001110110010 hypothetical 00000000000110000101000010010000 Lighting 00100000000011011010010010110000 employing 00000000000000000101111101000000 Bryan 00101111111000000110100100001000 minimills 00000000000000000000000000000000 uprising 00000000000111100111101001100111 1.52 00000000000000000000000000000000 504 00000000000000000000000000000000 collateralized 00000000000011100010100110110000 Novello 00100000000000000000000000000000 sociologist 00000000000100011011011110110101 tactic 00000000000110111001111101100111 moderates 00000000000111101110000110110011 Sununu 00101111110100111100000010001000 functioning 00000000000111110111010001000000 rode 00000000001101001011000000010010 rewrite 00000001100010111111110110110010 rejecting 00000000000100101011111101000000 anti-government 00000000000000000000000000000000 substantive 00000000000100010101000000010000 programmers 00000000000001101100010000110011 assisting 00000000000111011100001101000000 Levin 00101111111011100110100010001000 faltered 00000000110101000110001000110010 Kirk 00101111111000001101010100001000 submarine 00000000001101101010001010110000 subdued 00000000000010111010011100010000 Quickview 00100000000000000000000000000000 upgraded 00000000000111110011111001000000 intensely 00000000010010101000000001110010 sway 00000000000111100110110010110111 Sky 00100000000111011110111000000001 dock 00000000000111101100000001111001 Micro 00100000000000010010011010110000 crashed 00000000000110100110001000110010 ABA 01000000000000000000000000000000 billion-dollar 00000000000000000000000000000000 9.3 00000000000000000000000000000000 Pipeline 00100000000100000001111010110000 sympathy 00000000000110000110110100100111 condemning 00000001111010010000000000001010 fluid 00000000000110110100101010110000 taxi 00000000000000011000101000110000 11.4 00000000000000000000000000000000 incapable 00000000001000101011110000110010 sacrificing 00000000000001100001111101000000 Cathcart 00100000000000000000000000000000 slopes 00000000000000000000000000000000 sensible 00000000000010110000010010010000 vaccines 00000000000101111010111001100011 topple 00000000011101010111111110110010 Willkie 00101111111100010100010000101000 clue 00000000000111111010111100010111 intriguing 00000000000000100001001110010000 elephant 00000000000000111100001100100001 0.60 00000000000000000000000000000000 computerizing 00000000000111110001111101000000 gently 00000000001101000000010001110010 recordings 00000000001100100101110101100011 barrage 00000000000111110100111000111111 pronounced 00000000000110010001010010010000 Comsat 00100000000100010011111100101000 provoked 00000000011011100111010000110010 respectability 00000000000000000000000000000000 contrasts 00000000000000011011100000110010 reminds 00000000000101001011000000010010 ripe 00000000000001011110110000110010 Whitney 00101111111000101111110001001000 Super 00100000000000010001001000110000 'We 01000000000000000000000000000000 controllers 00000000000000001010000000110011 doctrine 00000000000111110001000011100111 skiing 00000000000111000000101100100001 Geduld 00100000000000000000000000000000 Was 00100000000000000000100000010010 fad 00000000000111100100101101100111 beliefs 00000000000111001110111101100011 homer 00000000000000000000000000000000 ** 00000000000000000000000000000000 erroneous 00000000000000010100000110010000 DLJ 01000000000000000000000000000000 reins 00000000000111100011000011000111 reasoning 00000000000110111011111101100111 lottery 00000000000000110000100000100001 impetus 00000000000111001011101100100111 brunt 00000000000111111110001100001111 prerogatives 00000000000000000000000000000000 Think 00100000000111111111100110110010 Sikes 00100000000000000000000000000000 amortization 00000000000111101101100101001111 Disease 00100000000111111101110010100111 Cilcorp 00100000000000000000000000000000 8.42 00000000000000000000000000000000 accuses 00000000100001100011000000010010 certainty 00000000000111111110010101100111 relaxing 00000000000001011111010001000000 0.03 00000000000000000000000000000000 jammed 00000000010011110110010000110010 7:30 00000000000000000000000000000000 pediatric 00000000000000000000000000000000 republics 00000000000111100011000110110101 swell 00000000000111001101110110110010 325 00000000000000000000000000000000 Roberti 00100000000000000000000000000000 simpler 00000000000000010101001111000000 seizing 00000000000110100111111101000000 expelled 00000010010111010100010000110010 Cutler 00101111111101001100111000001000 Ala 00100000000000000000000000000000 H.H. 01000000000000000000000000000000 Courts 00100000000011000010010110110011 Nye 00100000000000000000000000000000 absences 00000000000000000000000000000000 Martha 00100000100000000110001000011000 flat-rolled 00000000000000000000000000000000 quadrupled 00000000000100111010110000110010 condemn 00000000001000100011111110110010 Taking 00100000000111111010100101000000 Managua 00100000000111100001101101101000 Seventh 00100000000111101011100011010000 Half 00100000000111111111111011101111 closure 00000000000111101101111101001111 radios 00000000000110110110111001100011 1.8340 00000000000000000000000000000000 talents 00000000000101101101111101100011 gripes 00000000000111111100111010101111 selections 00000000000011000110010101100011 Cara 00100000000000000000000000000000 H 00100000000000000000000000000000 physics 00000000000000001011001101100001 drafting 00000000000101110010110001000000 passes 00000000011000001111000000010010 Carriers 00100000000111100100101011110011 Developers 00100000000111000110010000110011 Unicorp 00100000000000100111110110101000 bowl 00000000000001101100100010110101 overbuilt 00000000000001011101101001000000 rollers 00000000000000000000000000000000 hotel-casino 00000000000000000000000000000000 Being 00100000000000000011001001110010 Bronner 00100000000000000000000000000000 laundering 00000000000000010001011110110111 identifying 00000000000000110011111101000000 Knopf 00100000000111111111100101011000 conceptual 00000000000000000000000000000000 foreseeable 00000000000110100101100011010000 Sit 00100000000111111011010110110010 ideology 00000000000101001111110010100111 resemblance 00000000000110010101111100100111 Albany 00100000000111111111000001101000 14.7 00000000000000000000000000000000 Professor 00100000000111111111011000110101 UBS 01000000000000000000000000000000 thwarted 00001100001011010100010000110010 Fashion 00100000000011100100111100100001 mysterious 00000000000011100100000010010000 Trouble 00100000000000100110110100100111 seizures 00000000000110001101100010100111 believing 00000000000110111101111010000010 observes 00000000000111111001011111000010 117 00000000000000000000000000000000 T-bills 00100000000000000000000000000000 Terrizzi 00100000000000000000000000000000 Bundesbank 00100000000111101110110000100101 discrepancy 00000000000111111010101000010111 run-up 00000000000000000000000000000000 Paterson 00100000000000000000000000000000 Final 00100000000000010000000011010000 MIT 01000000000000000000000000000000 evolved 00000001100001110010110000110010 peoples 00000000000111010100100100100001 distress 00000000000000000111111010100111 TPA 01000000000000000000000000000000 dried 00000000000111011011001000110010 dialysis 00000000000000000000000000000000 sporadic 00000000000001011000000000010000 Reupke 00100000000000000000000000000000 flowed 00000000001001101000001000110010 Southland 00100000000111001111101100101000 instrumental 00000000100001110100010000110010 wool 00000000001001110011111010110000 trapped 00000001100001110100010000110010 Hathaway 00101111111001010010001010101000 exaggerated 00000000000110110001110000110010 objected 00000000000111011111101000110010 flocked 00000000001100101011101000110010 five-member 00000000000000000000000000000000 156.7 00000000000000000000000000000000 pants 00000000000100001101110101100011 unused 00000000101001010000001000110000 doomed 00000000000111111110110110010000 accessible 00000000000111111101001110010000 Parents 00100000000111100111110000110011 independently 00000000001100000000010001110010 Hyde 00100000000010101010011010101000 haunted 00000000001100101111010000110010 non-financial 00000000000000000000000000000000 1.58 00000000000000000000000000000000 culmination 00000000000000000000000000000000 Younkers 00100000000000000000000000000000 exile 00000000000111111001110101010111 insider-trading 00000000000000000000000000000000 slumping 00000000000001011010010001000000 booklets 00000000000000000000000000000000 7.78 00000000000000000000000000000000 3.10 00000000000000000000000000000000 205 00000000000000000000000000000000 pizza 00000000000111010011001010110000 Atlas 00100000000111111111011100101000 diplomat 00000000000111101011101110110101 worthwhile 00000000000000001110011110010000 overstated 00000000000010100010111001000000 Gatward 00100000000000000000000000000000 19th-century 00000000000000000000000000000000 volunteered 00000000001100111011101000110010 coincidence 00000000000111110101101010110111 Poughkeepsie 00100000000000000000000000000000 managements 00000000000010001011110000110011 astonishing 00000000000001001000110100010000 Buy 00100000000111111100001110110010 remedy 00000000000111011010110010110111 Messiah 00100000000000000000000000000000 mimic 00000000001101100111111110110010 Hyman 00101111111101000010100010001000 Bare-Faced 01000000000000000000000000000000 Cabernet 00100000000000000000000000000000 stampede 00000000000101001101001010110111 inclination 00000000000111110101111100100111 Buffalo 00100000000111101010101001101000 Sidley 00100000000000000000000000000000 Heinemann 00100000000000000000000000000000 data-processing 00000000000000000000000000000000 Legg 00101111111111110110101100011000 two-tier 00000000000000000000000000000000 conception 00000000000111111011100101001111 Farrell 00101111111111010000100010001000 general-purpose 00000000000000000000000000000000 Castle 00101111111111110011111010101000 Studies 00100000000100111000001000100011 TO 01000000000000000000000101010010 1.69 00000000000000000000000000000000 thoughtful 00000000001010010101000010010000 reviving 00000000000111100111011101000000 upstart 00000000000111101101101000110000 duo 00000000000000000000000000000000 Mueller 00101111111100111101001000001000 Hirsch 00101111111100110000111000001000 echo 00000000000111001110011010101000 Anything 00100000000000010010010001110010 refiners 00000000000110101100010000110011 solicit 00000000000010010011011110110010 aliens 00000000000110010100111000110011 wedge 00000000000011010110110000100111 fractionally 00000000000000000000000000000000 acquitted 00000000000100101011110000110010 mushroomed 00000000000000000000000000000000 Bauman 00100000000000000000000000000000 fund-raising 00000000000000000000000000000000 speeds 00000000000111001111000000010010 mail-order 00000000000000000000000000000000 Lavelle 00100000000000000000000000000000 Failure 00100000000111111110111100100111 Bausch 00100000000000000000000000000000 jacket 00000000000111010001011000000001 Close 00100000000111111010110110110010 impatient 00000000000001001111110000110010 advertisement 00000000000111111010101000100111 tumor-suppressor 00000000000000000000000000000000 outperformed 00000000010100000001010000110010 planting 00000000001010110010110001000000 prone 00000000000111001100011000110010 part-time 00000000000000000000000000000000 Von 00101111111100111100010101001000 Alvin 00101111111000000101000010011000 Ky 00100000000000000000000000000000 entice 00000000000001111011111110110010 confessed 00000000001010111011101000110010 1.40 00000000000000000000000000000000 detective 00000000000010110010011110110101 2.02 00000000000000000000000000000000 mediocre 00000000000000100111100000010000 Judith 00101111110000110110001000011000 outfits 00000000010001100111110101100011 Nonperforming 00100000000000000000101001000000 Jeremy 00101111111000001010110110011000 semiannually 00000000000000000000000000000000 GAO 01000000000000000000000000000000 Liberties 00100000000000001100000100100111 fruitless 00000000000000000000000000000000 dictate 00000000000100011100100110110010 gentle 00000000000001101000011010010000 Speaking 00100000000111111011000001000000 vacuum 00000000000000111100001000100001 coordinated 00000000000001010001000000010000 REITs 01000000000000000000000000000000 Baltic 00100000000110001101011000110000 drastic 00000000000011000000000000010000 governed 00000000001110010001110000110010 Kay 00101111111111000000000100001000 contemplated 00000000000011011101001001000000 kitchen 00000000000101101111111000000001 Bunker 00101111111001110110000000001000 proceeded 00000000000110101011101000110010 Stevenson 00101111110000110101001000001000 abolished 00000001110111010100010000110010 upstairs 00000000000000010101110110010000 40.1 00000000000000000000000000000000 hears 00000000110101100011000000010010 Unable 00100000000111110100011000110010 deflator 00000000000111111111111110000111 unraveling 00000000000110011111010001000000 unwise 00000000000010110111110110010000 Hugh 00101111111000111100000010011000 22.6 00000000000000000000000000000000 recipe 00000000000111110101111010110101 receiver 00000000000111011011101010110101 tunnel 00000000000000101010111000000001 mineral 00000000000001010010101010110000 floppy 00000000001100011000001010110000 10.8 00000000000000000000000000000000 Powell 00101111111011001000100010001000 Hercules 00100000000111011101011100101000 uranium 00000000001101000100011010110000 rewarding 00000000001110010101010010010000 shutting 00000000000101101110100001000000 Re 00101111111111101010011100001000 facto 00001111110101101100111110000010 ours 00000000000111110111010010100111 refers 00000000000111100001101000110010 glare 00000000000000000000000000000000 Transit 00100000000001000110010010110000 awaited 00000001111111010100010000110010 flaw 00000000000111011000111010110101 criticizes 00000001100001100011000000010010 Shere 00100000000000000000000000000000 favorably 00000000110000010000010001110010 Schuster 00101111111101110111110001001000 Prentice 00100000000000000000000000000000 Meador 00100000000000000000000000000000 electronically 00000001110000010000010001110010 Macrodantin 00100000000000000000000000000000 organize 00000000001110101111101110110010 snack 00000000000111010101010000110000 ballpark 00000000000111011110001101100111 whichever 00000000000000000010011001110010 divergence 00000000000000000000000000000000 Ala. 00100000000000000000000000000000 momentary 00000000000000000000000000000000 PIK 01000000000000000000000000000000 subjected 00000000000110100100011000110010 preoccupied 00000000001111110101100000110010 analyzing 00000000000010001111111101000000 market-share 00000000000000000000000000000000 sons 00001111111111111111110001001000 Himont 00100000000110001111111100101000 U.K 01000000000000000000000000000000 Willis 00101111111110101010000100001000 aligned 00000000011011110110010000110010 A.H. 01000000000000000000000000000000 GASB 01000000000000000000000000000000 termination 00000000000111111110101101001111 Syrian 00100000000001000100010100110000 fruits 00000000000111110111111000001111 concession 00000000000111101111001011100111 pullout 00000000000111100110001101001111 Shin 00100000000000000100000000001000 streak 00000000000100110001001001111001 Albuquerque 00100000000110011011101001101000 Avondale 00100000000000000000000000000000 towel 00000000000110111101111000000001 scam 00000000000111011100101101100111 19.2 00000000000000000000000000000000 captain 00000000000111111111111000100001 burdened 00000000000110001101110000110010 F-20 00100000000000000000000000000000 dictators 00000000000000000000000000000000 tab 00000000000111101010001111100111 extensions 00000000000110110010001000100011 face-to-face 00000000000000000000000000000000 battled 00000000000111000101010000110010 Together 00100000000000000011111100110010 pin 00000000010011010110010110110010 liked 00000000000110111000110111000010 establishes 00000000001110100001000000010010 chefs 00000000000000000000000000000000 ferry 00000000000011110111100110110111 integrating 00000000000111011101011101000000 uncle 00000000001110000010111000101000 Clarkson 00100000000000000000000000000000 Brewery 00100000000111000001111010110000 Ames 00100000000100011011110000001000 Petersburg 00100000000111111101111011101000 Stroh 00100000000001101001000100101000 Traffic 00100000000111100001101110000111 Gartner 00100000000000001100111000101000 digs 00000000011101001111000000010010 proposition 00000000000010000000000001000111 8.20 00000000000000000000000000000000 eaten 00000001010001110010110000110010 greedy 00000000000011001000011010010000 rows 00000000000111101011000100101111 campaigned 00000000011001011110001000110010 Brent 00100000000000110000011100001000 pro-union 00000000000000000000000000000000 7,000 00000000000000000000000000000000 comprise 00000000000000001001101110110010 Louis-based 00100000000000000000000000000000 gang 00000000000111101010010100000001 directory 00000000000000011000001010110000 Accor 00100000000000000000000000000000 pared 00000000000111011111111001000000 Annual 00100000000000000001000101010000 U.S.-made 01000000000000000000000000000000 adventure 00000000000111011100001100100001 assignment 00000000000011101111111001100111 obscure 00000000000011010110110100010000 Bakker 00101111111100110110001010001000 Faberge 00100000000000000000000000000000 slew 00000000000111111101010101111111 lumber 00000000000011010100011010110000 introductions 00000000000111110100000000100111 Alley 00101111111000110000000000001000 timber 00000000000011000100011010110000 Earl 00101111111000101100000010011000 2.77 00000000000000000000000000000000 Machinery 00100000000011001011111010110000 Sidhpur 00100000000000000000000000000000 fame 00000000000100101111110010100111 14.2 00000000000000000000000000000000 309 00000000000000000000000000000000 creeping 00000000000110111011100001000000 Jean 00100000000000001000111000011000 gangs 00000000000111011100100000110011 completes 00000011000100000011000000010010 Gramm 00101111111000101100111010001000 partisan 00000000011001000001000000010000 Rudman 00101111111111111011111010001000 lightning 00000000000000101111100100100001 reasoned 00000000000101010111110111000010 stamps 00000000000111101011111111001001 Traub 00100000000000000000000000000000 eight-year 00000000000000000000000000000000 tide 00000000000111111001100101100111 wondered 00000000000111110100110111000010 Eurobonds 00100000000111111111011010000111 McCormick 01001111111000010000111000001000 painfully 00000000000100001000000001110010 Hesse 00100000100110000100001000001000 shied 00000000000010101010010110110010 Barclay 00101111111000010101001000001000 burning 00000000001111010010110001000000 Anyone 00100000000000101010010001110010 fossil 00000000000000001010101010110000 batch 00000000000111111110011000111111 cultures 00000000000111111011101010100011 database 00000000000011100101011010110000 Des 00101111111011001111001101110000 1.77 00000000000000000000000000000000 Secret 00100000000000001001111000010000 255 00000000000000000000000000000000 NEWS 01000000000111110111000011000001 7.45 00000000000000000000000000000000 prepayments 00000000000000000000000000000000 impressionist 00000000000000011110101100100001 '70s 00000000000000000000000000000000 Christies 00100000000000000000000000000000 Rainbow 00100000000010100100100000100001 247 00000000000000000000000000000000 collapsing 00000000000110101010010001000000 decidedly 00000000000110101000000001110010 950 00000000000000000000000000000000 keyboard 00000000000111101101011000000001 accustomed 00000000000111010100011000110010 Tass 00100000000000000000010000001000 23,000 00000000000000000000000000000000 arrogant 00000000000111010110110110010000 vulnerability 00000000000110011101111100100111 providers 00000000000111110011110100100011 77-year-old 00000000000000000000000000000000 willful 00000000000000001111000110010000 Abby 00101111111010000001011100001000 tenfold 00000000000000011010011011000000 confirming 00000000000110000001111010000010 centuries 00000000000000000000010100111011 Margins 00100000000000010000001000000011 twists 00000000000101100110010101100011 14.8 00000000000000000000000000000000 1948 00000000000000000000000000000000 strikers 00000000000010100110100000110011 thoughts 00000000000111101001111101100011 Pritzker 00100000001000011000000000001000 retirees 00000000000101101100111000110011 16.2 00000000000000000000000000000000 Military 00100000000000000011110000110000 higher-priced 00000000000000000000000000000000 6.76 00000000000000000000000000000000 Feldman 00101111111000000111000010001000 secretaries 00000000000111111110101010110011 omit 00000000000110100110111110110010 attractions 00000000000100101001110101100011 applause 00000000000101110110011010100111 Ground 00100000000111111110110100100111 tuned 00000000000001110000110000110010 connections 00000000000101101100010000100111 absurd 00000000000111101111010110010000 7.15 00000000000000000000000000000000 tossed 00000000000011011001001000110010 1962 00000000000000000000000000000000 ripped 00000000011101101001001000110010 contents 00000000000111110001111000001111 Istat 00100000000000000000000000000000 misled 00000000000000101101010000110010 harshly 00000001110100000000010001110010 Basic 00100000000000001010000000110000 Rice 00100000000100001100000000001000 Ready 00100000000001111100011000110010 assemble 00000000001001111111101110110010 neat 00000000000101010110011010010000 Graduate 00100000000101100000010001000001 Bros 00100000000000000000000000000000 ludicrous 00000000000110111101110110010000 9,000 00000000000000000000000000000000 fearful 00000000000110101011110000110010 posing 00000000000110000100100101000000 camp 00000000000000000001000001100111 now-defunct 00000000000000000000000000000000 courthouse 00000000000000000000001111010101 Primerica 00100000000110001101111100101000 nagging 00000000000000100100011000010000 domination 00000000000101110100111001100111 little-known 00000000000000000000000000000000 censorship 00000000000001100110011010100111 recalling 00000000000010100100100101000000 Powers 00100000000100000111111100100011 vessel 00000000000111101011011001000101 ordinance 00000000000111100010111000100111 handicapped 00000000000111111010101000110000 chlorofluorocarbons 00000000000111111101111001100011 Campaign 00100000000011000111000001100111 767 00000000000000000000000000000000 diversion 00000000000111101010111000001111 exacerbated 00000000011101100111010000110010 subordinates 00000000000100111011110000110011 symbolic 00000000000000010101000000010000 mathematics 00000000000111110110001101100001 Rural 00100000000010000000001000110000 precious-metals 00000000000000000000000000000000 Machine 00100000000001001000101000100001 UV-B 01000000000000000000000000000000 Shore 00100000001110110110010110110010 Purchase 00100000000111101111110101110111 dumb 00000000000010001000011010010000 loath 00000000000111101100011000110010 upturn 00000000000111111101001010100111 appearances 00000000000101101111101000100011 mechanisms 00000000000111111110011100100011 Fleming 00100001111000011100000101001000 posters 00000000000111100111110101100011 bandwagon 00000000000111110110001101100111 Telecom 00100000000111001001001010101000 zone 00000000000100101001101001100111 bout 00000000000111111100111000111111 revamping 00000000000111011111010001000000 greeted 00000001000011110110010000110010 advertise 00000000000110000110101110110010 councils 00000000000101010101110001100011 bat 00000000000111110101011000000001 recurring 00000000000000011000000000010000 soul 00000000000111111101010000000001 Francisco-based 00100000000000000000000000000000 distributing 00000000000011001111111101000000 harmony 00000000000101111111111010100111 virtues 00000000000111101010011000001111 pesetas 00000000000000000101100000001011 intrusion 00000000000101001111110001100111 -a 00000000000000000000000000000000 Wild 00100000000000000100011010010000 numbered 00000000000000001001101001000000 grandchildren 00000000000101100011110000110011 47-year-old 00000000000000000000000000000000 acknowledging 00000000000111111100111010000010 lands 00000000000000001011110100100011 unfilled 00000000000111111000000110110000 handsome 00000000000000010101010000010000 transporting 00000000000110100001111101000000 45-year-old 00000000000000000000000000000000 eases 00000010011010000011000000010010 Platt 00101111110100101000000010001000 Chemicals 00100000000001111111111010110000 Nazionale 00100000000000000000000000000000 unnamed 00000000000010101101101000110000 interference 00000000000011000111111010100111 misconduct 00000000000111011111100010100111 ceilings 00000000000111100011100100100111 payrolls 00000000000011010101010100000111 Purchasing 00100000000111101111110001000000 satisfying 00000000000000100101110110110010 Putnam 00100000001100000111111000101000 topping 00000000000111101101001101000000 188 00000000000000000000000000000000 sigh 00000000000111111110010101111111 bearings 00000000010010001011111010110000 elect 00000000000101000011001110110010 unborn 00000000000011011010101000110000 forecasters 00000000000000000000001000010011 Chip 00100000000000001000001000100001 highest-quality 00000000000000000000000000000000 equation 00000000000111101001011001100111 20.9 00000000000000000000000000000000 Teagan 00100000000000000000000000000000 jumping 00000000000110100111100001000000 atmospheric 00000000000000001101000000110000 glad 00000000000000110101110000110010 viewpoint 00000000000110100101001001100111 resistant 00000000000000001100011000110010 lid 00000000000111111011001011100111 sealed 00000000000111001101101001000000 agendas 00000000000000000000000000000000 Salt 00100000001111110101100110101000 parental 00000000000010100101000000110000 landfill 00000000000001011100100000100001 hill 00001111111000010100000101001000 skyrocketed 00000000000111110001000100110010 Country 00100000000111111111101111000101 essence 00000000000111111110011001101111 Honolulu 00100000000110010011111001101000 misses 00000101000010000011000000010010 generators 00000000000111110110011111001001 Rifenburgh 00100000000000000000000000000000 tilt 00000000000101100101001010110111 mania 00000000000000001010111000100111 Camp 00100000000000000001000001100111 Austria 00100000000111100010111101101000 craze 00000000000111100101100011100111 commanding 00000000000000001110101001000000 temperature 00000000000001100110100011100001 Trustcorp 00100000010111111010111100101000 diesel 00000000000000110010001010110000 wheels 00000000000111101100110101100011 logo 00000000000111110001011000000001 Florence 00100000000010101100000100001000 concealing 00000000000111101101111101000000 L'Oreal 01000000000000000000000000000000 protracted 00000000010000110001000000010000 single-handedly 00000000000000000000000000000000 bacterium 00000000000000000000000000000000 assisted 00000000011011101100010000110010 Abrams 00101111111100110101100010001000 hopefully 00000000000101101101000001110010 direct-mail 00000000000000000000000000000000 3,500 00000000000000000000000000000000 Virgin 00100000000111001001000000001000 hurts 00000011000010000011000000010010 Esso 00100000000000000000000000000000 retaliation 00000000000111000011110000100011 supercomputers 00000000000111010101111001100011 crystals 00000000001101110111110101100011 Phillip 00101111111000001001010110011000 appease 00000000000011000011111110110010 Underwood 00101111110101110101001000001000 complicate 00000000000101101010111110110010 Minneapolis-based 00100000000000000000000000000000 foam 00000000000001001100101010110000 achieving 00000000000111110011111101000000 refinanced 00000001011001010100010000110010 crusade 00000000000111110100000001100111 prototype 00000000000111101101010000000001 245 00000000000000000000000000000000 prisoner 00000000000111111110111000100001 shortcomings 00000000000111101010011000100011 195 00000000000000000000000000000000 Lipton 00101111111000000000111000001000 addresses 00000000001100100111000000010010 sluggishness 00000000000101110011111010100111 lauded 00000000000000000000000000000000 Deb 00100000011011011000001000110000 cost-sharing 00000000000000000000000000000000 relation 00000000000111111100111101010111 examples 00000000000111100110100100101111 relinquish 00000000000101101110001110110010 Legislation 00100000000111101110010011100111 370 00000000000000000000000000000000 212 00000000000000000000000000000000 W.R. 01000000000000000000000000000000 Randolph 00101111111000000101000100001000 Builders 00100000000000110111100000110011 populist 00000000000001000110011000110000 invests 00000000001101011110010000110010 picket 00000000000000011011100011010000 Song 00100000000110101110101000100001 inclusion 00000000000110110111111000001111 apt 00000000000111111001011000110010 dusty 00000000010110010000001000110000 1.64 00000000000000000000000000000000 asbestos-related 00000000000000000000000000000000 smokers 00000000000000101100111000110011 ignorance 00000000000111101111111000001111 attractiveness 00000000000110000101111000001111 clinics 00000000000111010011110100100011 1956 00000000000000000000000000000000 Barber 00101111111000001011010100001000 nowhere 00000000001101010100010001110010 nonexecutive 00000000000000000000000000000000 separating 00000000000000001101011101000000 shakeout 00000000000111001101101010100111 Pierre 00101111111111111100000010011000 La. 00100000000000000000000000000000 custody 00000000000110011010011010100111 Amman 00100000000100010100001000001000 Potlatch 00100000000000000000000000000000 screening 00000000000110000010110001000000 Romano 00101111111100001110000100001000 Andy 00101111111001001101001000011000 Michelin 00100000000011100011010100101000 Cablevision 00100000000000101010010010110000 beats 00000001001010000011000000010010 drunk 00000000000000110100011010010000 Heebner 00100000000000000000000000000000 dies 00000000000111011111000000010010 aborted 00000000000000000011001001000000 Taj 00101111111110001100011110110011 trusted 00000000001011011101101001000000 Korowin 00100000000000000000000000000000 Tyco 00100000000001011100100100101000 privatized 00000000000111100000101001000000 Rabkin 00100000000000000000000000000000 heed 00000000000000111111110110110010 Dimensions 00100000000111101000000100101111 Matchbox 00100000000000000000000000000000 denouncing 00000000000000100001001101000000 Rosenblatt 00100000000000000000000000000000 USFL 01000000000000000000000000000000 Longman 00100000000000000000000000000000 furious 00000000000110111110110110010000 wastewater 00000000000000000000000000000000 Cole 00101111111110000000001000001000 Poquet 00100000000000000000000000000000 Rumors 00100000000111101111111010101111 aggregates 00000000000111101101100001111001 inference 00000000000000000000000000000000 Sweig 00100000000000000000000000000000 Cluett 00100000000000000000000000000000 Dalkon 00100000000111100010001000110000 Shield 00100000000000001000110100100001 SWAPO 01000000000000000000000000000000 Eidsmo 00100000000000000000000000000000 arts 00000000000111101010101101100001 calculating 00000000000111011111011101000000 scarcely 00000001011001000000001001110010 Regatta 00100000000000000000000000000000 Farmington 00100000000000000000000000000000 abandoning 00000000000111100001011101000000 emeritus 00000000000000000000011000110101 robbed 00000000000000000000000000000000 embargo 00000000000111111010111000100111 profound 00000000000000101000000000010000 morally 00000000101000101000000001110010 imagination 00000000000111111011111101100011 suing 00000000000110101101001101000000 falsely 00000000010100100001001001110010 Gitano 00100000000000000000000000000000 rhythm 00000000000110110001110010100111 clears 00000011110010000011000000010010 Gibson 00101111111101011000001000001000 3:30 00000000000000000000000000000000 NCAA 01000000000000000000000000000000 devastated 00000000110111010001110000110010 overvalued 00000000000011000011110110010000 extraordinarily 00000000000101001100000001110010 Fenton 00100000000000000000000000000000 Kimball 00100000000000000000000000000000 11.3 00000000000000000000000000000000 Made 00100000000011011100010000110010 decade-long 00000000000000000000000000000000 Exporting 00100000000111110011110001000000 Valdez 00100000000000010010110110000000 Dunn 00101111111101011100111000001000 Calloway 00100000000000000000000000000000 215 00000000000000000000000000000000 butler 00001111111101101010001000001000 SsangYong 01000000000000000000000000000000 invade 00000000010100100011111110110010 Jayark 00100000000000000000000000000000 destabilizing 00000000000010011001010010010000 administrators 00000000000000100110000010110011 9.50 00000000000000000000000000000000 wildlife 00000000000010010001100000110000 thread 00000000000111101000110101100111 MLX 01000000000000000000000000000000 0.19 00000000000000000000000000000000 Brokerage 00100000000000001000000010110000 Guterman 00100000000000000000000000000000 Laurie 00101111111001111000001000011000 tangible 00000000000010011000000000010000 forming 00000000000111010011111101000000 8.6 00000000000000000000000000000000 Lucky 00100000000001000111000100101000 Unilab 00100000000000000000000000000000 opera 00000000000100100000001100100001 1.45 00000000000000000000000000000000 1.37 00000000000000000000000000000000 distinguished 00000000000000010110101001000000 Chestman 00100000000000000000000000000000 verbal 00000000000100011000000000110000 possess 00000000000100101110101110110010 McKinney 01000000000000000000000000000000 fixing 00000000011110000010110001000000 cornerstone 00000000000111111110001110111111 excited 00000000000110011111110000110010 removes 00000000000100010001000000010010 CACI 01000000000000000000000000000000 ANR 01000000000000000000000000000000 Mahal 00101111111001110011010101010000 Compared 00100000000111111111100000110010 Lentjes 00100000000000000000000000000000 crocidolite 00000000000000000000000000000000 anti-dumping 00000000000000000000000000000000 sweaters 00000000000111111100111001100011 resilient 00000000000000000000000000000000 Furlaud 00100000000000000000000000000000 Morningstar 00100000000000000000000000000000 Lorillard 00100000000000000000000000000000 Ishihara 00100000000000000000000000000000 EEOC 01000000000000000000000000000000 forum 00000000000110010011101001100111 Petipa 00100000000000000000000000000000 Geva 00100000000000000000000000000000 Westchester 00100000000110011010011010101000 Auvil 00100000000000000000000000000000 Myerson 00101111111101100110111000001000 Garza 00100000000000000000000000000000 mains 00000000000000000000000000000000 rerun 00000000000000000000000000000000 Cooperman 00100000000000000000000000000000 consequent 00000000000000000000000000000000 McKesson 01000000000111001000111100101000 Maxtor 00100000000000000000000000000000 Stookey 00100000000000000000000000000000 Garzarelli 00101111111001001110101010001000 Hoare 00101111111110001101101000101000 Point-Pepperell 01000000000000000000000000000000 Farley 00101111111100010000001000001000 Sumatra 00100000000000000000000000000000 Intan 00100000000000000000000000000000 O'Linn 01000000000000000000000000000000 Kamp 00100000000000000000000000000000 2657.38 00000000000000000000000000000000 BancOklahoma 01000000000000000000000000000000 2:30 00000000000000000000000000000000 Flat 00100000000010000001110110010000 Zycher 00100000000000000000000000000000 Chinn 00101111111111011001000010001000 Ibbotson 00100000000000000000000000000000 Weisman 00101111111000101110000010001000 Allday 00100000000000000000000000000000 Nucor 00100000000000000000000000000000 326 00000000000000000000000000000000 IBC 01000000000000000000000000000000 Rianta 00100000000000000000000000000000 Lingus 00100000000000000000000000000000 Ovcharenko 00100000000000000000000000000000 McGowan 01001111111101111010100010001000 Lung 00100000000000001000101011100001 candidacy 00000000000111110111000001100111 blip 00000000000111000101101010100111 McGill 01000000000001101000010000001000 Note 00100000000111101111011010110111 BroadBeach 01000000000000000000000000000000 Linear 00100000000100010000101100101000 passwords 00000000000000000000000000000000 plantation 00000000000000000000000000000000 Elkhorn 00100000000000000000000000000000 Parsow 00100000000000000000000000000000 Matthew 00101111111000001110110110011000 1.8685 00000000000000000000000000000000 thrill 00000000000110010000100101100111 CPAs 01000000000000000000000000000000 Wertheimer 00100000000000000000000000000000 Environmentalism 00100000000000000000000000000000 8.53 00000000000000000000000000000000 Billy 00100000001000000011100000011000 announces 00000000001101100011000000010010 Lamb 00100000000010101110000000001000 Mastergate 00100000000000000000000000000000 2638.73 00000000000000000000000000000000 Harlem 00100000000110100100110001101000 McDermott 01001111111101000000000100001000 Rush 00100000000110111101111010110111 Bailey 00101111111101101111100010001000 Front 00100000000111111101111001101111 bust 00000000000111010111001010110111 Calabasas 00100000000000000000000000000000 2,700 00000000000000000000000000000000 Jimmy 00101111111111111000011100001000 Success 00100000000111110111011010100111 2.80 00000000000000000000000000000000 Fiorini 00100000000000000000000000000000 prescriptions 00000000001101100010001000100011 CDL 01000000000000000000000000000000 Shipments 00100000000111101111110100000111 market-making 00000000000000000000000000000000 Bulgaria 00100000000111001010111101101000 hinder 00000000000110000110111110110010 Fremont 00100000000101010111101001101000 varying 00000000000000011001000011000000 spreadsheet 00000000000000110000111010110000 fashioned 00000000011101101100010000110010 Karalis 00100000000000000000000000000000 greenmail 00000000000010101111110010100111 fizzled 00000000110001000110001000110010 patron 00000000000111111100101010110101 double-decker 00000000000000000000000000000000 denial 00000000000111111110100101001111 Taxpayers 00100000000111101100111000110011 1.8667 00000000000000000000000000000000 0.95 00000000000000000000000000000000 harms 00000000000000000000000000000000 air-traffic 00000000000000000000000000000000 Freind 00100000000000000000000000000000 offending 00000000000000001011110001000000 digits 00000000000000001011101010110101 deterring 00000000000000000111111101000000 smiled 00000000100101011110001000110010 dilutive 00000000000000000000000000000000 Clough 00101111110100001100000010001000 Canelo 00101111111010010001000010001000 allay 00000000000100011011111110110010 peers 00000000000100101011110000110011 Tulsa 00100000000110111011101001101000 -are 00000000000000000000000000000000 resource 00000000000010000110010010110000 wrestling 00000000000111110101100000110010 census 00000000000111101111110101100001 Biscuits 00100000000000000000011011101001 FileNet 01000000000000000000000000000000 ruptured 00000000000000000000000000000000 dwellings 00000000000000000000000000000000 boundaries 00000000000111000010111101100011 constituencies 00000000000111111011000100100011 1.8485 00000000000000000000000000000000 ARCO 01000000000111101100010100101000 Ruvolo 00100000000000000000000000000000 negatively 00000000011000010000010001110010 STORES 01000000000110100000100010101001 E-mail 00100000000000000000000000000000 Safeco 00100000000000000000000000000000 affirmative 00000000000011000001000000110000 Programs 00100000000111101100010100100011 budge 00000000111001111101010110110010 retrofit 00000000000000000000000000000000 Wheeler 00101111111011101101101001001000 Paramount-MCA 01000000000000000000000000000000 Kellner 00101111100000101100000010001000 alarming 00000000000011100110110100010000 Garth 00100000000000000000000000000000 Poodle 00100000001001111010011010101000 Ashton-Tate 01000000000000000000000000000000 computer-security 00000000000000000000000000000000 = 00000000000000000000000000000000 flesh 00000000000111101111000010110111 Rainman 00100000000000000000000000000000 giveaways 00000000000000000000000000000000 Arbel 00100000000000000000000000000000 offing 00000000000111111110011110110011 irrational 00000000000110000100110100010000 Cubs 00100000000000010111110000100101 articulate 00000000000001000101110110110010 swung 00000000000000010101101000110010 Camden 00100000000111101011101001101000 Tan 00101111111111100100101000101000 Ottawa 00100000000111100111111001101000 Spending 00100000000000000000000000111001 thinly 00000000000101100111001001110010 Ngoc 00100000000000000000000000000000 Varity 00100000001101001010111100101000 avert 00000000000000111111101110110010 6.80 00000000000000000000000000000000 efficiencies 00000000000111101101001000000011 viral 00000000001111000010000000110000 Purnick 00100000000000000000000000000000 Galoob 00100000000000000000000000000000 2683.20 00000000000000000000000000000000 Cawthorn 00100000000000000000000000000000 Monarch 00100000000111111100110100101000 enforcers 00000000000000000000000000000000 Gargan 00100000000000000000000000000000 compulsive 00000000000000000000000000000000 hostage 00000000000000100000110001000000 dimension 00000000000010101101101001100111 thicker 00000000000011110100001111000000 Broker 00100000000011100011101110110101 Fleischmann 00100000000000000000000000000000 chemists 00000000000000000000000000000000 Born 00100000000101110100010000110010 Byron 00100000000000001011111100001000 SciMed 01000000000000000000000000000000 Rockford 00100000000101101111101001101000 quest 00000000000111111111001111100111 due-process 00000000000000000000000000000000 Mansion 00100000000111011110010100000001 Anacomp 00100000000000000000000000000000 168 00000000000000000000000000000000 Harbors 00100000000000000010000001111001 satire 00000000001101111001110010100111 Books 00100000000111101111100101100011 worlds 00000000000111011111000100101111 Ca 00100000000111111111111100010010 housewares 00000000000011010011111010110000 directories 00000000000111100111101001100011 comforting 00000000001000011001010010010000 Nichols 00101111111101100110100010001000 patrols 00000000000111110001100110001001 zinc 00000000000110100100011010110000 Forster 00101111111101101100111000001000 2.875 00000000000000000000000000000000 Lonrho 00100000000011100101101100101000 rewarded 00000001011111010100010000110010 marketable 00000000000010001100111000101000 receptor 00000000000000000000000000000000 Immunex 00100000000010101010111100101000 frightening 00000000000001001011010010010000 tendering 00000000000110111001110001000000 Shattuck 00100000000000000000000000000000 Aldus 00100000000000000000000000000000 percentages 00000000000111100010100000100011 transferring 00000000000110000001111101000000 well-intentioned 00000000000000000000000000000000 peasant 00000000000000101000101000110000 runway 00000000000111101001111000000001 Berbera 00100000000000000000000000000000 justification 00000000000111111011011100111001 passionate 00000000000100000101000010010000 Cubans 00100000000011100101100110110011 Fidel 00101111111011101000101101110000 barges 00000000000000000000000000000000 Asman 00100000000000000000000000000000 tame 00000000000110100101110110110010 Were 00100000000000000000010100010010 Peasants 00100000000111100100111000110011 world-class 00000000000000000000000000000000 Ranch 00100000000111101100000100000001 academy 00000000000110101110110001010101 Landry 00101111000110101100000010001000 Aikman 00101111111101110001110001001000 301 00000000000000000000000000000000 Tomlin 00101111111010110000000010001000 bureaus 00000000000000011110000100100011 Everett 00101111111100110000000100001000 Lippens 00100000000000000000000000000000 Economy 00100000000111111111111001000101 Tana 00100000000000000000000000000000 ``... 00000000000000000000000000000000 Fridays 00100000000000000000000000000000 Argentine 00100000000000000110010100110000 UPS 01000000001111110011111010110000 consult 00000000000110101011011110110010 repayments 00000000000111111001001100000011 Concerto 00100000000101100010010100000001 Artists 00100000000000000000000111101001 Similar 00100000000000000000010000010000 overwhelmingly 00000000011000100001001001110010 budding 00000000000000000010011000010000 JSP 01000000000000000000000000000000 bribes 00000000000100101010000100000011 Studios 00100000000110100101110001100011 converter 00000000000000000000000000000000 Statistical 00100000000000000101000010110000 assign 00000000011011101111101110110010 winding 00000000010111100110100001000000 reformer 00000000000111111011011110110101 provoke 00000000100011101111101110110010 Churchill 00101111111101101000101010001000 Diana 00100000001000000001001000011000 Deltec 00100000000000000000000000000000 ferroelectric 00000000000000000000000000000000 toothpaste 00000000001101110011111010110000 unpredictable 00000000000011100001110100010000 Boris 00101111111000101010001000011000 vodka 00000000000111101110110000100001 Movieline 00100000000000000000000000000000 Lakes 00100000000001010110110100100001 Va.-based 00100000000000000000000000000000 guaranteeing 00000000000001010011011101000000 Victorian 00100000011001010000001000110000 Kurzweil 00100000000000000000000000000000 expedite 00000000000101000110111110110010 back-office 00000000000000000000000000000000 Westamerica 00100000000000000000000000000000 Heating 00100000000111111000011000101000 friend-of-the-court 00000000000000000000000000000000 Spokesmen 00100000000010101000000010110011 glamour 00000000000111101111100000100001 plentiful 00000000000111011011010010010000 bombed 00000000111011000101010000110010 Segundo 00100000000000000000000000000000 terrific 00000000001000001100011010010000 6.50 00000000000000000000000000000000 Brody 00101111111000000100000010001000 Goodrich 00100000011111000011000001001000 debt-laden 00000000000000000000000000000000 spilled 00000000010001101001001000110010 1959 00000000000000000000000000000000 reckons 00000000000000000000000000000000 incompetent 00000000000110111101000110010000 4:30 00000000000000000000000000000000 disgruntled 00000000000000001000101000110000 revoked 00000010100101010100010000110010 Alexandria 00100000000110110011101001101000 Ely 00101111111011000110000010001000 1.14 00000000000000000000000000000000 undemocratic 00000000000000000000000000000000 excise 00000000001010110000011100010000 Smurfit 00100000000000000000000000000000 Stalinist 00100000000000000000000000000000 c 00000000000000000000000000000000 parcel 00000000000111100010101011000001 walkout 00000000000110111101101010110111 transmissions 00000000000111111011111111001001 1.47 00000000000000000000000000000000 Jerell 00100000000000000000000000000000 1.95 00000000000000000000000000000000 unnecessarily 00000000000000000000000000000000 readings 00000000001001100010001000100011 year-before 00000000000000000000000000000000 Beam 00100000000110100011000110110111 frontier 00000000000000000110100100100001 Brown-Forman 01000000000000000000000000000000 Nick 00100000000010110001111000011000 Byrne 00101111111111111000100010001000 Novell 00100000000000000000000000000000 peninsula 00000000000111111101100010100101 Marin 00100000000000000000000000000000 high-flying 00000000000000000000000000000000 Coleco 00100000000001100111000100101000 connects 00000000000000000000000000000000 ramps 00000000000000000000000000000000 withdrawing 00000000000100111101100001000000 substitutes 00000000000111000011001110100011 World-wide 00100000000000000000000000000000 low-priced 00000000000000000000000000000000 motion-picture 00000000000000000000000000000000 personalities 00000000010111100111110101100011 battery-operated 00000000000000000000000000000000 Fantasy 00100000000111111010001100100001 Boies 00100000000000000000000000000000 Stronach 00100000000000000000000000000000 Firm 00100000000110101111111011110101 advertiser 00000000000000011001100000110101 2662.91 00000000000000000000000000000000 26.23 00000000000000000000000000000000 Aztar 00100000000000000000000000000000 immigrants 00000000000110101000111000110011 Nuveen 00101111111010011111111010101000 Bard 00100000000000000000000000000000 Koenig 00100000000000000000000000000000 570 00000000000000000000000000000000 Gruberova 00100000000000000000000000000000 convene 00000000000111100011011110110010 shareholding 00000000000001100111101001100111 Euro 00100000010100011000001000110000 granite 00000000000001101010101100100001 resurrect 00000000000000000000000000000000 2.62 00000000000000000000000000000000 apparatus 00000000000100110111101001100111 progressed 00000000000000111010110000110010 STOCK 01000000000111111111101101010000 124 00000000000000000000000000000000 Traviata 00100000000000000000000000000000 Adding 00100000000111111110111010000010 Ludcke 00101111111101111010110001001000 recoveries 00000000000111101011010000000011 Vista 00100000000111101101010100101000 aftershock 00000000000000000000000000000000 Normally 00100000000011100000001001110010 videotape 00000000001010001000001010110000 Threlkeld 00100000000000000000000000000000 guarded 00000000000000111001101001000000 waivers 00000000000110110011001100000011 incompetence 00000000000010100101110010100111 2659.22 00000000000000000000000000000000 Corazon 00101111111001000010001100011000 Paxus 00100000000000000000000000000000 Foote 00101111111110010111110000101000 FCB 01000000000000000000000000000000 bonanza 00000000000111100010111010110101 syndicator 00000000000011000111110000110101 plotting 00000000000000101010111000110010 Directors 00100000000000000100101010110011 heavy-duty 00000000000000000000000000000000 Cyanamid 00100000000111100010001010101000 Orr 00100000000000000000000000000000 defraud 00000000000111000011111110110010 valuations 00000000001101110010001000100011 Train 00100000000111101111100110110111 lofty 00000000000001100001000000010000 Lowell 00101111111000011000111000011000 crippled 00000000000100010001110000110010 idealistic 00000000000000000000000000000000 profit-sharing 00000000000000000000000000000000 Proposition 00100000000010000000000001000111 Leisure 00100000000000110011001010110000 Shale 00100000000000000000000000000000 47.6 00000000000000000000000000000000 CO 01001111111111111110110001001000 low-end 00000000000000000000000000000000 festival 00000000000111101001010100000001 shoe 00000000011100001011111010110000 Wars 00100000000111101101001111111001 F.W. 01000000000000000000000000000000 Recruit 00100000000101101010100110110111 signaling 00000000000111001001111010000010 Retired 00100000000111100110101001000000 Banker 00100000000110101111001110110101 Coldwell 00100000000001010001100010110000 Kriz 00100000000000000000000000000000 salmon 00000000000111110001101100100001 thoroughbred 00000000000001011000001000110000 70.5 00000000000000000000000000000000 flatly 00000000000011100001001001110010 HyperCard 01000000000000011110101101101000 resell 00000000000111001110001110110010 slightest 00000000000000000010100011010000 Dogs 00100000000000101111110101100011 Emeryville 00100000000000000000000000000000 Gilbert 00101111111000010000000100001000 14.75 00000000000000000000000000000000 2.38 00000000000000000000000000000000 Mickey 00100000000000100000001000011000 Meagher 00101111111111010101101001001000 Arps 00100000000001000101101001001000 Skadden 00100000000110111011110000101000 charm 00000000000111110110110010100111 vehemently 00000000101001100001001001110010 Farr 00101111111011100100111000001000 cartridge 00000000000000000000000000000000 minicomputer 00000000000000010101011010110000 Earthquake 00100000000000101111111001100111 pent-up 00000000000000000000000000000000 voice-activated 00000000000000000000000000000000 900,000 00000000000000000000000000000000 worded 00000000000000000110111001000000 265 00000000000000000000000000000000 imaginative 00000000000001110000110100010000 24.9 00000000000000000000000000000000 snow 00000000000000000110000000001000 Zipper 00100000000000000000000000000000 elusive 00000000000011110000110100010000 latitude 00000000000111100111110100100111 behest 00000000000111101101011000001111 cellular-phone 00000000000000000000000000000000 socially 00000000000010001000000001110010 13,000 00000000000000000000000000000000 overturn 00000000000001100011111110110010 quieted 00000000000000000000000000000000 5.50 00000000000000000000000000000000 bicycle 00000000000000100110001000100001 Amdahl 00100000000111011011011100101000 Initially 00100000100000000000001001110010 Butcher 00101111111111100011111010101000 Tariff 00100000000000000000100011110001 Ferruzzi 00100000000001000011011000101000 Beghin-Say 01000000000000000000000000000000 stating 00000000000010011001111010000010 annuity 00000000000001000100010010110000 anew 00000000011010100100010001110010 Biden 00101111111100101100011010001000 Wilmer 00100000000000000000000000000000 Les 00100000000111101110010000011000 Warehouse 00100000000010010001111010110000 resurgent 00000000000000000000000000000000 Solo 00100000000000010010101100100001 17.95 00000000000000000000000000000000 Year-earlier 00100000000000000000000000000000 consents 00000000000101101101000100100111 Dubinsky 00100000000000000000000000000000 Heinz 00100000000111010011000001001000 X-rays 00100000000000000000000000000000 DRAMs 01000000000111000101111001100011 Polls 00100000000000000110001000100011 outages 00000000000000000000000000000000 Montagu 00101111111100101011000001001000 Strauss 00101111111101111011000010001000 Recreation 00100000000000000110001101100001 videos 00000000000100101100110101100011 transforms 00000000000000000000000000000000 reactors 00000000000111111001100110001001 Planners 00100000000000000111010110110101 Guillermo 00100000000000000000000000000000 wash 00000000000111111111110100100001 directive 00000000000111100110110011100111 corps 00000000000000101011000100001001 Rules 00100000000000100000111100100011 likewise 00000000000111100110111011101000 suites 00000000000000001111100100001001 occupancy 00000000000000000000010110100111 expands 00000000001110000011000000010010 Drive 00100000000101110110010110110010 hitter 00000000000000000000000000000000 survives 00000100101110000011000000010010 GenCorp 01000000000111111111101100101000 ex-dividend 00000000000000000000000000000000 jazz 00000000000010010000001100100001 erupt 00000000101001111101010110110010 120-a-share 00000000000000000000000000000000 advocacy 00000000000001000011100000110101 generic-drug 00000000000000000000000000000000 stole 00000000000010111011000000010010 battling 00000000000110100001110101000000 tinkering 00000000000110100101100000110010 Bumpers 00101111111111110000111010001000 preferential 00000000000000001100011100010000 Packwood-Roth 01000000000000000000000000000000 Making 00100000000111111111111101000000 Funny 00100000000011110000011010010000 Katzenstein 00100000000000000000000000000000 grid 00000000000000000000000000000000 Bianchi 00100000000000000000000000000000 Letter 00100000000111111110001011100111 Desert 00100000000001001101110110101000 2200 00000000000000000000000000000000 Manager 00100000000000010010101000110101 Amira 00100000000000000000000000000000 pause 00000000000110111111101010110111 Lucy 00100000000000000000000000000000 Akio 00100000000000000000000000000000 expressions 00000000000111111101100100101111 Wrap 00100000110110010110010110110010 coin 00000000000000000011100000100001 reformulated 00000000000000000000000000000000 sandwiches 00000000001000011111110101100011 Stop 00100000000110101001110110110010 Mercedes-Benz 01000000000000000000000000000000 behave 00000000000011111101010110110010 investigative 00000000000000001101000010110000 pains 00000000000001011111001000100011 Go 00100000000111101011010110110010 trustees 00000000000110001110101010110011 Bias 00100000000111101100100010100111 1.8355 00000000000000000000000000000000 2653.28 00000000000000000000000000000000 stringent 00000000000001000110010010010000 protested 00000000000111000101110111000010 Bangkok 00100000000110110011111001101000 inflict 00000000000000000000000000000000 Tourism 00100000000111111011001101100001 Prix 00100000000000000000000000000000 terribly 00000000000010101100000001110010 first-ever 00000000000000000000000000000000 pistons 00000000000000000000000000000000 futuristic 00000000000000000000000000000000 Harvey 00101111111000010001010100001000 composer 00000000000111100010011110110101 displaying 00000000000111010101111101000000 EDS 01000000000000000000000000000000 outflow 00000000000111111110111101000111 energies 00000000000111011011111101100011 Litvack 00100000000000000000000000000000 memorable 00000000000000000111000010010000 conflicting 00000000000000001000000110010000 dishonesty 00000000000000000000000000000000 strained 00000000001010010001110000110010 safeguard 00000001110100111111110110110010 Kozinski 00100000000000000000000000000000 Czech 00100000000101001101011000110000 enjoined 00000000110011010100010000110010 Scandinavian 00100000000011000101110110101000 frenetic 00000000000000000000000000000000 rings 00000000000010011111000000010010 Agricultural 00100000000000001001010000110000 commonplace 00000000000111010100110110010000 Selling 00100000000111000001110001000000 Tramp 00100000000000000000000000000000 transmitted 00000000010000000001110000110010 Wolfgang 00100000000000000011100010011000 Harlan 00100000000000000000000000000000 masses 00000000000101101111111000001111 Kyle 00100000000000000000000000000000 transformation 00000000000111001011111000001111 East-West 01000000000000000000000000000000 Deep 00100000000000000110000000010000 Peace 00100000000000000000100111111001 beaches 00000000000111010111110101100011 7.85 00000000000000000000000000000000 pumps 00000000000111100101011111001001 Hence 00100000000111001101000001110010 mellow 00000000000000000000000000000000 Older 00100000000010000010101000110000 Americas 00100000000100110101110101000001 reassured 00000000010010101101110000110010 queen 00000000000100110001100100100001 Beale 00100000000000000000000000000000 mornings 00000000000000000000000000000000 meager 00000000000001101100100000010000 1.8353 00000000000000000000000000000000 Village 00100000000111001111000100000001 glut 00000000000111100111101010100111 41.60 00000000000000000000000000000000 populated 00000000000000101001101001000000 Diversified 00100000000000000100101001000000 141.52 00000000000000000000000000000000 1.6145 00000000000000000000000000000000 7.32 00000000000000000000000000000000 7.89 00000000000000000000000000000000 stripping 00000000000101111001001101000000 condemned 00000011101011000101010000110010 dropout 00000000000101100000010011000111 extraneous 00000000000000000000000000000000 reimbursed 00000010001011010100010000110010 enacting 00000000000110001011111101000000 giveaway 00000000000100001001101010100111 china 00000000000111110111111101101000 Environmentalists 00100000000110111000111000110011 10.9 00000000000000000000000000000000 defrauding 00000000000101100011011101000000 Furlett 00101111111101100010101010001000 murky 00000000000001000110011010010000 indoor 00000000011100010000001000110000 16.4 00000000000000000000000000000000 cable-television 00000000000000000000000000000000 21.2 00000000000000000000000000000000 stopgap 00000000000000000000000000000000 anti-crime 00000000000000000000000000000000 Staten 00100000000000000000000000000000 1.72 00000000000000000000000000000000 Figures 00100000000110101100100000100011 Feshbach 00100000000000000000000000000000 1.60 00000000000000000000000000000000 18.50 00000000000000000000000000000000 Masius 00101111111000100100010000101000 enviable 00000000000000001001110100010000 presided 00000000001111011110001000110010 Story 00100000000111100110111101100111 cash-strapped 00000000000000000000000000000000 NRC 01000000000000000000000000000000 Sidney 00101111111000010001110110011000 mileage 00000000000000001000111000111001 debating 00000000000111100110010101000000 marches 00000000000000000000000000000000 Amvest 00100000000000000000000000000000 Nutritional 00100000000011010001100000110000 jam 00000000000000010110110110110111 foolish 00000000000011001100011110010000 goodies 00000000000000000000000000000000 2014 00000000000000000000000000000000 Holland 00101111111101111000001000001000 7.01 00000000000000000000000000000000 0.10 00000000000000000000000000000000 aggravate 00000000000000000000000000000000 substituted 00000000001100010000010000110010 Predictably 00100001110100000000001001110010 rendering 00000000001111101010110001000000 firing 00000000001011110010110001000000 pare 00000000000010111010111110110010 approving 00000000000001001111111101000000 Kawasaki 00100000000101110010111000101000 silence 00000000000101101110111010100111 6,250,000 00000000000000000000000000000000 contamination 00000000000111101001100010100111 dawn 00000000000111101100010000101000 substances 00000000000111000110011111001001 solvents 00000000000000000000000000000000 reluctantly 00000000001101000001001001110010 freer 00000000000001000110101001000000 intervening 00000000000110101111000001000000 stubbornly 00000000001001100001001001110010 Barnhardt 00100000000000000000000000000000 kicker 00000000000000000000000000000000 Burroughs 00100000000110010000111100101000 million-share 00000000000000000000000000000000 Selkin 00100000000000000000000000000000 ambivalent 00000000000001011111110000110010 kidnapping 00000000000111101011101101001111 2.04 00000000000000000000000000000000 Lt. 00100000000000000000000000000000 countered 00000000010111110110010000110010 chew 00000000111010010110010110110010 liberty 00000000000111111100100100100001 height 00000000000100011111111000001111 wise 00000000001100000100011010010000 accrue 00000000000110010011001110110010 laugh 00000000000100110101010110110010 statue 00000000000110111101100101100111 disguised 00000000001000000010110000110010 Isabella 00100000000000000000000000000000 Claudio 00100000000000000000000000000000 productions 00000000000000001011111011101001 surpass 00000000000101010110001110110010 referendum 00000000000110011111001011100111 references 00000000000101111111001000100011 3.52 00000000000000000000000000000000 pessimism 00000000000101110010111010100111 17.2 00000000000000000000000000000000 2613.73 00000000000000000000000000000000 Inside 00100000000100110000000000001010 sparking 00000000000001001001001101000000 whereby 00000000101010010000000000001010 Gallup 00100000000000111000111000110000 43.5 00000000000000000000000000000000 Paying 00100000000111000110100101000000 stumble 00000011010101111101010110110010 Mitsukoshi 00100000000000000000000000000000 locks 00000000001000011111000000010010 uproar 00000000001110000111111001100111 expiring 00000000000000001100010100110010 WHO'S 01000000000000000000000000000000 Asahi 00100000000101101001111000101000 Aska 00100000000000000000000000000000 extortion 00000000000111010011100010100111 spared 00000000011001010100010000110010 buzz 00000000000000000000000000000000 18.4 00000000000000000000000000000000 unsold 00000000000010000110101001000000 cocktail 00000000000001011010000000100001 Guinea 00100000000001101001011110000010 Weirton 00100000000000000000000000000000 Mass.-based 00100000000000000000000000000000 servants 00000000000111110011110000100011 prey 00000000000101110000001100100111 conceal 00000000000101100011111110110010 siphoned 00000000000000000000000000000000 bureaucrat 00000000000111100001010010110101 colonial 00000000000000100100100100100001 morality 00000000000111011111010010100111 supervising 00000000001011111011011101000000 modernized 00000000000000000000000000000000 WEFA 01000000000000000000000000000000 BethForge 01000000000000000000000000000000 Leigh-Pemberton 01000000000000000000000000000000 overstate 00000000000000000000000000000000 Continued 00100000000000001000111000110010 underline 00000000000000000000000000000000 Influenced 00100000001001000001110000110010 pollen 00000000000000000000000000000000 Racketeer 00100000001111001111001001110010 presage 00000000000000000000000000000000 horn 00001111111101101111111010101000 Francois 00101111111001000010101100011000 longing 00000000000000000000000000000000 Shipbuilding 00100000000000001011011010110000 Schroders 00100000000000000000000000000000 Increasingly 00100000000000010000000001110010 Volkswagen 00100000000111100110111100101000 Prizm 00100000000000000000000000000000 explicitly 00000000000001000001001001110010 AS 01000000000000000000000001101010 Gasoline 00100000000000001001101110110000 casts 00000111110010000011000000010010 Woo 00101111111011001011110110110010 southwest 00000000000001100111110110101000 overwhelmed 00000000000110010001110000110010 Flying 00100000001001001110100001000000 Keep 00100000000111111101111110110010 Happy 00100000000111000111110000110010 Use 00100000000111110111110110110010 safely 00000000100101000000010001110010 AGIP 01000000000000000000000000000000 low-sulfur 00000000000000000000000000000000 boasted 00000000000101110111110111000010 Above 00100000000000011001000000001010 governmental 00000000000011000101000000110000 math 00000000000011011111001101100001 lecture 00000000000110011011001011100111 late-night 00000000000000000000000000000000 prosecuting 00000000001111111011011101000000 purely 00000000000111011000000001110010 reassessment 00000000000000000000000000000000 brightest 00000000000011110001010011010000 12.45 00000000000000000000000000000000 defenders 00000000000111000010000010110011 stabbed 00000000000000000000000000000000 disparate 00000000000011010000010000010000 Ganes 00100000000000000000000000000000 immunity 00000000000100101111110100100111 Kinder-Care 01000000000000000000000000000000 curriculum 00000000000111100010011000100001 promoter 00000000000111100101011110110101 robberies 00000000000000000000000000000000 selecting 00000000000101100111111101000000 inconsistent 00000000000110111101100000110010 proudly 00000000000111000001001001110010 herbicide 00000000000110101111100000100001 arrests 00000000000111101000101000100011 vault 00000000000101110010100110110111 4.50 00000000000000000000000000000000 boats 00000000000111011100101001100011 rigs 00000000000111100010110100100011 hunger 00000000000100001111110010100111 coaster 00000000010010000101001111001001 soup 00000000001011010001110000101001 prod 00000000001101010111111110110010 Andersen 00101111111111111011001000110000 edging 00000000000011100011100001000000 dunes 00000000000000000000000000000000 drilled 00000000001101100000010000110010 Sharpshooter 00100000000000000000000000000000 homework 00000000000111001101110010100111 Unice 00100000000000000000000000000000 1989-90 00000000000000000000000000000000 biological 00000000000010001010000000110000 repurchased 00000000000110100100010000110010 14.3 00000000000000000000000000000000 Amicable 00100000001010011000110100010000 year-on-year 00000000000000000000000000000000 11.9 00000000000000000000000000000000 copied 00000110001011010100010000110010 cemetery 00000000000111111100111000000001 Governor 00100000000011101110010000110101 motives 00000000000111110111111101100011 rays 00000000001101101001111111001001 Lomb 00100000000000000000000000000000 8.28 00000000000000000000000000000000 cautions 00000000000011111011010111000010 Hibor 00100000000000000000000000000000 5.80 00000000000000000000000000000000 141.70 00000000000000000000000000000000 Naval 00100000000000001011110000110000 responsibly 00000000000000000000000000000000 minimizing 00000000000011110111011101000000 offense 00000000000111101000110001100111 relaxation 00000000000111111010101101001111 Step 00100000000111111110011000110111 Danish 00100000000000010110100100110000 blunted 00000000000000000000000000000000 originated 00000001001001001100010000110010 guidance 00000000000111101111110010111001 Key 00100000000000001000011000010000 parked 00000011001001001100010000110010 reinstatement 00000000000111111011101101001111 garner 00000000000111110000100110110111 unexplained 00000000000000000000000000000000 286 00000000000000000000000000000000 plateau 00000000000111010000101101100111 Analysis 00100000000111100110111001100111 oxygen 00000000000111000001110000100001 pressuring 00000000000010100100001101000000 pollutants 00000000000110100111100110001001 accompanies 00000000000111011001000000010010 sanguine 00000000000010111111110000110010 Milpitas 00100000000110110100101001101000 coaching 00000000000000000000000000000000 Schools 00100000000111101100110001100011 252 00000000000000000000000000000000 Pattison 00100000000000000000000000000000 smelter 00000000000111101011110010001001 ABB 01000000000000000000000000000000 121 00000000000000000000000000000000 tempting 00000000000110010101010010010000 nears 00000010010110000011000000010010 spell 00000000001100011110010110110010 Nikon 00100000000000000000000000000000 15.2 00000000000000000000000000000000 DFC 01000000000000000000000000000000 80%-owned 00000000000000000000000000000000 Mulroney 00101111111100100001110010001000 Meet 00100000000111110111011110110010 ardent 00000000000100011000110100010000 2002 00000000000000000000000000000000 U.S.-based 01000000000000000000000000000000 Supply 00100000000000010000111110110111 moratorium 00000000000111100011001011100111 fetal 00000000000000011110110000100001 Kerr-McGee 01000000000000000000000000000000 slowest 00000000000011101010000011010000 2.30 00000000000000000000000000000000 Huntington 00100000000110111010011010101000 embroiled 00000000001001011110010000110010 Township 00100000000000000110010100000001 Ned 00101111111010010100001000011000 nominated 00000000000101111010010000110010 Live 00100000001111011101010110110010 Itel 00100000000111011000111100101000 hostages 00000000000111100010100000110011 Broadcast 00100000000000010100001010110000 uncharted 00000000000000000000000000000000 Myron 00100000000000000000000000000000 Egan 00100000000000000000000000000000 SAS 01000000000000000000000000000000 dean 00001111111100011111101000101000 bankruptcies 00000000000111101001111001100011 Down 00100000000000000001001100110010 conserve 00000000000101101111001110110010 corrections 00000000000111111100101101100001 Unit 00100000000111101111111001110101 unregulated 00000000000101001000101001000000 MMS 01000000000000000000000000000000 nonfinancial 00000000000000000010001110110000 1.39 00000000000000000000000000000000 3.23 00000000000000000000000000000000 Jennison 00100000000000000000000000000000 beneficiary 00000000000111111010100101100111 Wildlife 00100000000010010001100000110000 Winnick 00100000000000000000000000000000 Investigators 00100000000000000001010010110011 disposing 00000000000111110110111000101111 Tonkin 00100000000000000000000000000000 speedy 00000000000010010101000000010000 resumption 00000000000111111110010110111111 kidnapped 00000000110001110100010000110010 regards 00000000000001100011000000010010 handicap 00000000000101100101111010110111 near-record 00000000000000000000000000000000 nine-member 00000000000000000000000000000000 7.51 00000000000000000000000000000000 reassigned 00000000001000011000110000110010 phases 00000000000110110111000100101111 Maguire 00100000000000000000000000000000 foreign-policy 00000000000000000000000000000000 pledges 00000000000001111111001000100011 writings 00000000000111001001111101100011 disability 00000000000000000100101011100001 Petrochemical 00100000000010100000011010110000 USI 01000000000000000000000000000000 funnel 00000000000001101111001110110010 corporate-finance 00000000000000000000000000000000 grandiose 00000000000000000000000000000000 meltdown 00000000000111101101010001100111 9.80 00000000000000000000000000000000 infringe 00000000001101010110110110110010 Baseball 00100000000000000000111100100001 mailed 00000000000101100000010000110010 groundwork 00000000000111111101011100111001 understandable 00000000000111000111110110010000 reveals 00000000000011010011000000010010 whack 00000000000000000000000000000000 gender 00000000000001010110100101010001 Era 00100000000111111111011001100111 remarkably 00000000000100101100000001110010 Shaffer 00101111101100101100000010001000 obsolete 00000000000001000100000110010000 Base 00100000000111100001110011000111 authoritarian 00000000000000100101011000110000 reinforcing 00000000000010110101011101000000 Someone 00100000000000001010010001110010 liberalized 00000000000111101010111001000000 Garry 00100000000000000000000000000000 blew 00000000000101001001001000110010 daunting 00000000000001110001000010010000 second-biggest 00000000000000000000000000000000 Grasso 00101111110110101100000010001000 balk 00000000000110010101010110110010 panicky 00000000000000000000000000000000 harbors 00000000000000000010000001111001 leaking 00000000001110101110100001000000 co-owner 00000000000000000000000000000000 Reagan-era 00100000000000000000000000000000 Casey 00101111111100100101100010001000 14-year-old 00000000000000000000000000000000 misdeeds 00000000000110110111100010100111 family-planning 00000000000000000000000000000000 supermarkets 00000000000000010011001010110000 stamping 00000000001000100000011010110000 redesigned 00000000000001101010001001000000 smell 00000000000001010111110110110010 Estee 00100000000000000000000000000000 JUDGE 01000000001000000000001100001000 Palm 00100000000000011110011010101000 disdain 00000000000111111010011100111001 counters 00000000000001100011010111000010 personal-care 00000000000000000000000000000000 Perry 00101111111110100001000100001000 championship 00000000000000011010001100100001 commuter 00000000000000010100010000110000 wreckage 00000000000000000000000000000000 convened 00000000001100111001010000110010 Prague 00100000000001000111111001101000 gatherings 00000000001110100010001000100011 Bromwich 00100000000000000000000000000000 narcotics 00000000000000110010111010110000 Cooper 00101111111100101011110000001000 Rubber 00101111111111011011110001001000 kid 00000000000111100001110010110101 third-party 00000000000000000000000000000000 Yamamoto 00100000000000000000000000000000 injected 00000000100001001100010000110010 Nadir 00100000000000000000000000000000 map 00000000000111101100100101100111 Revenues 00100000000111101100001100000011 objection 00000000000110010111111100100111 consultation 00000000000111011010110000100111 Baird 00101111111100100100011000001000 Cash 00100000000011101111110110110001 fiction 00000000000000101111110010100111 Tell 00100000000111111010100110110010 28.4 00000000000000000000000000000000 belonging 00000000001111100000111000110010 Rising 00100000000000000010010001000000 tongue 00000000000111001100110000000001 Greens 00100000000111111011001110110011 la-la 00000000000000000000000000000000 collapses 00000000000000000000000000000000 timid 00000000010111100101010010010000 Electron 00101111111111101100111110000010 majors 00000000000111111010111110110011 Thermo 00101111111000001100110101001000 whipsawed 00000000000000000000000000000000 equals 00000000000000001010011010000010 rocky 00000000000010000010001000110000 wonders 00000000000111010000110111000010 Milunovich 00100000000000000000000000000000 cheer 00000000001100010110010110110010 7.03 00000000000000000000000000000000 hamper 00000000000011101010111110110010 C.J. 01000000000000000000000000000000 fastball 00000000000000000000000000000000 Rubel 00100000000000000000000000000000 raid 00000000000111011101111000110111 ambiguous 00000000000010101101001110010000 wrangling 00000000000100010010111010100111 1.8415 00000000000000000000000000000000 142.85 00000000000000000000000000000000 cassette 00000000000010111000001010110000 redeeming 00000000000101101011011101000000 redesign 00000000000111101101011110110111 Natick 00100000000000000000000000000000 Twelve 00100000000110101111000011000000 flattened 00000000000000000000000000000000 triumph 00000000000111111101100101100111 gearing 00000000000111011110100001000000 282 00000000000000000000000000000000 puzzled 00000000000110101101110000110010 shutdowns 00000000000001001000000010100111 crafted 00000111010111010100010000110010 megawatts 00000000000000000000110100001011 turbine 00000000000000000100100001100001 stripes 00000000000100101101111101100011 minors 00000000000000000000000000000000 liberation 00000000000000000110110100100001 overthrow 00000001010110111111110110110010 township 00000000000000000110010100000001 moderation 00000000000100101111111010100111 Nationale 00101111111000100000010101001000 chocolate 00000000011000001011111010110000 frantic 00000000010111000001000000010000 Wilshire 00100000000000010110100010100101 vividly 00000001010101000000010001110010 visually 00000000000000000000000000000000 belt 00000000000000010101110001111001 regains 00000000000000000000000000000000 Volcker 00101111111100101110110010001000 realizes 00000000111011100011000000010010 chlorine 00000000000000000000000000000000 salt 00000000001111110101100110101000 middle-aged 00000000000000000000000000000000 20-stock 00000000000000000000000000000000 fertilizers 00000000000111101100111001100011 NV 01000000000000000000000000000000 monster 00000000000111100101010000000001 arbitrager 00000000000111101011100000110101 prose 00000000000101101100110000000001 earnest 00000000000110000011111001101000 backgrounds 00000000000111100000111101100011 commander 00000000000101111111110000110101 subscriptions 00000000000111110000101111100011 shells 00000000000111111111101001100011 12,000 00000000000000000000000000000000 alien 00000000000100001001001110010000 Hells 00100000000000000000000000000000 pig 00000000000010110000101100100001 artillery 00000000000000101010001010110000 Automatic 00100000000000001000101010110000 feud 00000000000100101110110000100111 Suburban 00100000000000010000001000110000 44.3 00000000000000000000000000000000 California-based 00100000000000000000000000000000 942 00000000000000000000000000000000 BioSciences 01000000000000000000000000000000 broadcasters 00000000000110110110111000110011 accidents 00000000000111100000100010100111 shirt 00000000000110101110111000000001 traditions 00000000000111101101111101100011 loud 00000000000110110000011010010000 coats 00000000001100111010000000001000 conditioned 00000000000110111100100000110010 million-plus 00000000000000000000000000000000 288 00000000000000000000000000000000 originations 00000000000111110001110001010101 consequently 00000000000111111000101011101000 perverse 00000000011000000101010010010000 tending 00000000000001101100110000110010 guessed 00000000000110100000110111000010 documentary 00000000000111001110101000100001 490 00000000000000000000000000000000 exonerated 00000000000000000000000000000000 roofs 00000000000000000000000000000000 48-year-old 00000000000000000000000000000000 Baring 00100000000011000111011000101000 unduly 00000000010000101000000001110010 systematic 00000000000101000101000000010000 Mushkat 00100000000000000000000000000000 burgeoning 00000000000001000000100000010000 paradox 00000000000111001001111101100111 spotty 00000000000001000101110110010000 hard-hit 00000000000000000000000000000000 unscathed 00000000000000000000000000000000 wad 00000000000000000000000000000000 unloaded 00000000001111000000010000110010 roof 00000000000111101110111000000001 lap 00000000000111110101010000000001 phasing 00000000000011101110100001000000 Small-business 00100000000000000000000000000000 inundated 00000000000000000000000000000000 Bombay 00100000000000100111111001101000 Delhi 00100000000001001001011110000010 folk 00000000000000010100001100100001 treacherous 00000000000010010101010010010000 cereals 00000000000101101100111001100011 Driscoll 00100000000000000000000000000000 resumes 00000000001100001111000000010010 Bakes 00100000000000000000000000000000 15-year 00000000000000000000000000000000 Blum 00101111111101101010000010001000 guilt 00000000000010100110100010100111 51-year-old 00000000000000000000000000000000 nickname 00000000000100101101111101100111 Wine 00100000000100010011111010110000 solidify 00000000000000000000000000000000 turbines 00000000000110101101010001001001 161 00000000000000000000000000000000 pacts 00000000000101110000010000100111 exceedingly 00000000000001101100000001110010 0.88 00000000000000000000000000000000 halting 00000000000010101011011101000000 Completion 00100000000111101111011101001111 resolving 00000000000111000011011101000000 territories 00000000000000111100101111100011 protesting 00000000000010000101110101000000 detained 00000000110101110100010000110010 Comments 00100000000111111111101000100011 B.V. 01000000000000000000000000000000 Challenge 00100000000111111011111010110111 Remics 00100000000100111010111001100011 Fiscal 00100000000000000000110001100010 snag 00000000000111000000111010110101 complied 00000000101011110110010000110010 8.27 00000000000000000000000000000000 Maier 00101111111100010000000010001000 observer 00000000000001000101011001100111 staunchly 00000000000000000000000000000000 10th 00000000000000000000000000000000 west 00000000000111110000101110101000 waved 00000000001010011001001000110010 jumps 00000000000111101010111110000011 GDP 01000000000000000000000000000000 Pipe 00100000000110000001111010110000 Schaefer 00101111111110000110000010001000 Sound 00100000000110101110110110110111 Stealth 00100000000101101010001010110000 10-a-share 00000000000000000000000000000000 knees 00000000000111001000111101100011 Guffey 00100000000000000000000000000000 organized-crime 00000000000000000000000000000000 Aaron 00101111111011011001110000011000 big-ticket 00000000000000000000000000000000 Isaac 00101111111111101000000100001000 Official 00100000000000000000000000010101 Hallwood 00100000000001000101010100101000 Jacques 00101111111001000110000010011000 doorstep 00000000000000000000000000000000 Shelby 00101111111011011011010100001000 Donnelley 00100000000010101011000001001000 Marriott 00100000000100000111111100101000 Basham 00100000000000000000000000000000 UBS-Phillips 01000000000000000000000000000000 whopping 00000000000111100111111100010000 122 00000000000000000000000000000000 1.93 00000000000000000000000000000000 Eggs 00100000001010101111110101100011 witnessing 00000000000111110111000101000000 implicated 00000000111111110100010000110010 mice 00000000000111111001110101100011 biologists 00000000000110001010000010110011 polyps 00000000000111110001011100110011 2.53 00000000000000000000000000000000 Knudson 00100000000000000000000000000000 tragic 00000000000000001100011010010000 births 00000000000111110110101001100011 suppressor 00000000000000000000000000000000 rivalry 00000000000111011100110000100111 discoveries 00000000000111000010011000100011 640 00000000000000000000000000000000 60-day 00000000000000000000000000000000 Cetus 00100000000111110110111100101000 8.10 00000000000000000000000000000000 Tyre 00100000000000000000000000000000 endorsing 00000000000111000101111101000000 Felipe 00100000000000000000000000000000 Retin-A 01000000000000000000000000000000 skittishness 00000000000000000000000000000000 Laughlin 00100000000000000000000000000000 N 00100000000000000000000000000000 amassed 00000000000110001001010000110010 basing 00000000000011100001011101000000 heated 00000000000001110000000000010000 donate 00000000000010101111001110110010 stirred 00000000001011100111010000110010 opportunistic 00000000000111100100110100010000 fret 00000000000000111001100110110010 touching 00000000010011100110100001000000 Wales 00100000000101111010010101101000 bailouts 00000000000000000000000000000000 abnormal 00000000000000000011010100010000 ribbons 00000000000000000000000000000000 Woodbridge 00100000000000000000000000000000 answering 00000000000110010010110001000000 closet 00000000000111110101110000000001 Months 00100000000000000000000001111011 transit 00000000000001000110010010110000 guided 00000000011101000001110000110010 cartoons 00000000000111001101110101100011 happily 00000001101100000000010001110010 IFAR 01000000000000000000000000000000 burglary 00000000000000000000000000000000 anxieties 00000000000111111110110010101111 foundering 00000000000000000000000000000000 Itoh 00101111111100111100111000001000 Travis 00100000000000000000000000000000 down-payment 00000000000000000000000000000000 18.1 00000000000000000000000000000000 buckle 00000000000000000000000000000000 Wharton 00100000000111010111111000101000 imagined 00000000000110110100110111000010 understated 00000000000000110110111001000000 Reproductive 00100000000000000000000000000000 time-consuming 00000000000000000000000000000000 demographic 00000000000001011010000000110000 proprietary 00000000000010000100101010110000 setup 00000000000000000000000000000000 presentations 00000000000001011001101000100011 niches 00000000000111101110101010100011 weeklong 00000000000000111010010000010000 interest-bearing 00000000000000000000000000000000 Dodgers 00100000000011110000101100100101 Norwest 00100000000111111110111100101000 30-second 00000000000000000000000000000000 Automated 00100000000000101000101010110000 Sale 00100000000111111111111001001111 boutique 00000000000110101001100100100001 162 00000000000000000000000000000000 mold 00000000000111111101001010110111 clear-cut 00000000000000000000000000000000 undertake 00000000010011101111101110110010 realism 00000000000110111011110010100111 Deputies 00100000000111100110101010110011 solvent 00000000000111001000101001000000 revealing 00000000000111100001110101000000 societies 00000000000000101010000100100011 prop 00000000000110110110010110110010 collector 00000000000011010010011110110101 supervisory 00000000000000000001100011100001 mint 00000000000111101111001000100101 3:15 00000000000000000000000000000000 12-point 00000000000000000000000000000000 aggravated 00000000101111010001110000110010 directing 00000000000010000001011101000000 caring 00000000000101011110110000110010 leaked 00000000000001000001001000110010 Quick 00100000000001100000010000010000 annoyed 00000000000000101101110000110010 entries 00000000000000111001110101100011 imbalance 00000000000110101100100000100111 Properties 00100000000110101101110000001001 Customs 00100000000111101011110000110000 wreck 00000001010010111111110110110010 faithful 00000000000011010100011010010000 administered 00000000000011001001110000110010 juries 00000000000111101011010010110011 enhances 00000110101110000011000000010010 murders 00000000000010110111110101100011 varied 00000000000000010101101001000000 cruel 00000000000010100110011010010000 churches 00000000000111000110110001100011 misinterpreted 00000000000000000000000000000000 ringer 00000000000000000000000000000000 contradictory 00000000000000110100000110010000 Anglia 00100000000000000000000000000000 Hines 00101111111000000101001000001000 Open 00100000000111101101110110110010 paints 00000000111100001111000000010010 2.60 00000000000000000000000000000000 medicines 00000000000110000110111001100011 antibiotic 00000000000001000111111001100111 Nashville 00100000000110011101101001101000 saves 00001100000110000011000000010010 subsidizing 00000000000000000101011101000000 reforming 00000000000100110101011101000000 Syndicate 00100000000111101011000010000001 dialing 00000000000000000000000000000000 vengeance 00000000000111111111111010011111 graduate 00000000000101100000010001000001 hires 00000000011100001111000000010010 Student 00100000000000010010111000100001 YOU 01000000000000000001000111110010 17,000 00000000000000000000000000000000 survivors 00000000000111100110100000110011 burns 00001111111100100111001000001000 anonymity 00000000000100000101011110100001 dwarf 00000000000001001011110110110010 skip 00000000001110101110101110110010 shrinkage 00000000000110101001101010100111 plausible 00000000000000101011010010010000 bouncing 00000000000111010011100001000000 demon 00000000000000000000000000000000 vicar 00000000000000000000000000000000 skeptics 00000000000000001010000010110011 Somerset 00100000001001011011101001101000 na 00000000000000000000000000000000 gon 00000000000000000000000000000000 exit 00000000000010111011001100100111 roommate 00000000000000000000000000000000 Unemployment 00100000000010100001011100000111 gimmicks 00000000000111100010011100100011 Clayton 00101111111011011001001100011000 Planning 00100000000111101100110001000000 36.6 00000000000000000000000000000000 breadth 00000000000110111011111000001111 all-out 00000000000000000000000000000000 contraction 00000000000110101101101010100111 post-World 01000000000000000000000000000000 hooked 00000000001101001100010000110010 adept 00000000000111001101110100110010 heighten 00000000001010000110111110110010 beside 00000000011010100001000000001010 5.25 00000000000000000000000000000000 21.1 00000000000000000000000000000000 28.7 00000000000000000000000000000000 Marwick 00101111111111101000000101001000 Peat 00101111111000010101101000101000 offshoot 00000000000110001100111001100111 pushes 00000110100010000011000000010010 conduits 00000000000000000000000000000000 Perritt 00100000000000000000000000000000 Stockholders 00100000000111101111111010110011 behaving 00000000000000000000000000000000 Philadelphia-based 00100000000000000000000000000000 tad 00000000000000000000000000000000 139 00000000000000000000000000000000 Chandross 00100000000000000000000000000000 Donovan 00101111111001010000100010001000 harbinger 00000000000111111111100101111111 microphone 00000000000111001010111000000001 80-point 00000000000000000000000000000000 backfire 00000000001001111101010110110010 Export-Import 01000000000000000000000000000000 growth-stock 00000000000000000000000000000000 7.94 00000000000000000000000000000000 buyout 00000000000000000101001111001111 8.01 00000000000000000000000000000000 176 00000000000000000000000000000000 Bache 00100000000000011011000001001000 servicing 00000000001110000010110001000000 Dame 00100111111000010010001010101000 Verdi 00100000000000000000000000000000 poet 00000000000111101010011110110101 strains 00000000000011111111001000100011 Spring 00100000000111111101110000010111 unsettling 00000000000000000101001110010000 Alden 00100000000000000000000000000000 Monroe 00100000000000001000000100001000 90,000 00000000000000000000000000000000 Carnegie 00100000000001010000011100001000 Parkway 00100000000000000000000000000000 Homestake 00100000000110100011000100101000 prominently 00000001101000000000010001110010 Tenn 00100000000000000000000000000000 counterrevolutionary 00000000000000000000000000000000 rebellion 00000000000101100111101001100111 189 00000000000000000000000000000000 afterwards 00000000000000000000000000000000 Side 00100000000111100111001001100111 high-level 00000000000000000000000000000000 Newton 00101111111011001101001000001000 infusion 00000000000111110101101010001111 Premier 00100000000011000010100100100001 scrutinized 00000000011000000001110000110010 cherished 00000000000010010001000010010000 erratic 00000000000011100000110100010000 luncheon 00000000000000000110110001000111 repercussions 00000000000111111101001110001111 WDB 01000000000000000000000000000000 monetarist 00000000000000000000000000000000 stagflation 00000000000000000000000000000000 negatives 00000000000111111110110101100011 imply 00000000000110011100100110110010 Palestinians 00100000000010110000011100110011 inept 00000000000000000000000000000000 myths 00000000000110111111110101100011 tail 00000000000010101010111000000001 experiences 00000000000111101010111101100011 Machiguenga 00100000000000000000000000000000 jungle 00000000000111111001111000000001 suspensions 00000000000000000000000000000000 Triton 00100000000001001101010100101000 primitive 00000000000010011001000010010000 destiny 00000000000110101011111101100011 Helen 00100000000001001100111000011000 hesitation 00000000000000000000000000000000 gesture 00000000000111110101111101100111 two-week 00000000000000000000000000000000 booking 00000000000110111010110001000000 packs 00000001100111001111000000010010 smile 00000000000111111101101010110111 Georgetown 00100000000000010111111000101000 reminding 00000000000000111001001101000000 swallowed 00000010011001001100010000110010 listened 00000000000101101011101000110010 exposing 00000000000111010001001101000000 7,500 00000000000000000000000000000000 affiliation 00000000000011111101110000100111 anonymous 00000000000000010101101000110000 Kloves 00100000000000000000000000000000 Marion 00101111111100000001110000001000 Sanwa 00100000000011101001111000101000 autonomy 00000000000111011011110100100111 Deborah 00100000000000010010110110011000 unstable 00000000000010010001110100010000 Simonds-Gooding 01000000000000000000000000000000 data-storage 00000000000000000000000000000000 emphasizing 00000000000000001111111101000000 bicycles 00000000000111100010111001100011 five-day 00000000000000000000000000000000 Guide 00100000000111110001111010110111 Lybrand 00101111111110110111110001001000 wait-and-see 00000000000000000000000000000000 thinner 00000000000000000000000000000000 insulting 00000000000000000000000000000000 marching 00000000000110100111000001000000 shaped 00000000001001001100010000110010 Antarctica 00100000000000000000000000000000 11.6 00000000000000000000000000000000 scrutinizing 00000000000010110010010101000000 amazement 00000000000000000000000000000000 validity 00000000000111111010011000001111 ploy 00000000000111100100111101100111 emphasizes 00000000101011100011000000010010 derivatives 00000000000111111010100110001001 favorites 00000000000110111111111101100011 Twenty-First 01000000000000000000000000000000 Stovall 00100000000000000000000000000000 Granville 00100000000000000000000000000000 cart 00000000000111101101111000000001 thrive 00000010010101111101010110110010 subminimum 00000000000000000000000000000000 Newmark 00100000000000000000000000000000 Standards 00100000000100100110111100100011 oversold 00000000000110011110110110010000 Blunt 00100000000101000101110110110010 29.4 00000000000000000000000000000000 3.19 00000000000000000000000000000000 pinpoint 00000000000111100100011110110010 fold 00000000000101001011110110110010 prowess 00000000000111010111101001100111 courage 00000000000111000111110100100111 fine-tuning 00000000000000000000000000000000 factions 00000000000011000011000100100011 ceased 00000000000000111010001000110010 Soweto 00100000000000000000000000000000 right-wing 00000000000000000000000000000000 Kathryn 00100000000000000000000000000000 appropriators 00000000000000000000000000000000 Population 00100000000111101010011000100001 21.4 00000000000000000000000000000000 Sept 00100000000000000000000000000000 Bolivia 00100000000111010010111101101000 weary 00000000010101101011110000110010 stumbling 00000000000001010000110001000000 waived 00000010011001010100010000110010 blending 00000000000000000000000000000000 17.3 00000000000000000000000000000000 Petroleos 00101111111111011100101000101000 43,000 00000000000000000000000000000000 openings 00000000000000001000000001100011 cast-iron 00000000000000000000000000000000 oddly 00000000110101101000000001110010 receivership 00000000000111110000110101010111 solicited 00000000000010101001010000110010 funneled 00000000010111000000010000110010 470 00000000000000000000000000000000 zoning 00000000000000000101100011100001 realty 00000000000010001010010010110000 prisoners 00000000000111101111000100100011 attendant 00000000000000000101111001110011 famed 00000000000000000000000000000000 Voyager 00100000000111000100100000100001 incorporates 00000000000000000000000000000000 manpower 00000000000110111101011100101000 faults 00000001010101001111000000010010 mentally 00000000000001100010001000110000 lighting 00000000000011011010010010110000 plaid 00000000000000000000000000000000 yanked 00000000000000000000000000000000 chest 00000000000100000010010000000001 elementary 00000000000001111101000100110000 necessities 00000000000000000000000000000000 broadest 00000000000000001100010011010000 Fischer 00101111111001101110100010001000 foremost 00000000000111101110010011010000 resin 00000000000000000000000000000000 severity 00000000000111111110011000001111 R.D. 01000000000000000000000000000000 quicker 00000000000001001001001111000000 Schneider 00101111111100101101001000001000 self-serving 00000000000000000000000000000000 greed 00000000000111001111110010100111 Regal 00100000000001000100000001000111 taboo 00000000000000000000000000000000 20.125 00000000000000000000000000000000 62.875 00000000000000000000000000000000 Bancorp. 00100000000000000000000000000000 Deseret 00100000000000000000000000000000 leaping 00000000000111111010010001000000 atop 00000000000000111101000000001010 treatments 00000000000110100000110100100011 embraces 00000000000000000000000000000000 brakes 00000000000111110101110101100011 impaired 00000000000100000001110000110010 11.1 00000000000000000000000000000000 viewing 00000000010111100010110001000000 dissemination 00000000000000000000000000000000 languages 00000000000000010100110001100011 patch 00000000000010001011110100100001 VOA 01000000000000000000000000000000 solving 00000000000110001101011101000000 166 00000000000000000000000000000000 requesting 00000000000000000101110101000000 deepening 00000000000000111101010001000000 124,875 00000000000000000000000000000000 trivial 00000000001100010101010010010000 restraining 00000000001000000011010101010000 lifts 00000100010110000011000000010010 reshaping 00000000000000000000000000000000 410 00000000000000000000000000000000 skill 00000000000111111011010000000001 Summer 00100000000111111111110000010111 Pepperidge 00100000000000000000000000000000 Jesse 00101111111011001010010000011000 applaud 00000000000111110111100110110010 teen-age 00000000000000000000000000000000 7.80 00000000000000000000000000000000 7.55 00000000000000000000000000000000 8.48 00000000000000000000000000000000 1.88 00000000000000000000000000000000 draining 00000000000001101110100001000000 142 00000000000000000000000000000000 midmorning 00000000000111111101011001101000 recruited 00000001000101000101010000110010 assessments 00000000000111100001010000100011 qualities 00000000000111111100001010100011 pretext 00000000000111111000111100010111 ego 00000000000010001111111001100111 purse 00000000000111100101011000000001 domain 00000000000111001111111001100111 species 00000000000011101010000010100011 presumption 00000000000000000000000000000000 swallow 00000000000101101110101110110010 framers 00000000000100101111111000001111 Confederation 00100000000111101101111000001111 nominate 00000000011010111011111110110010 appoint 00000000001101111111101110110010 rehabilitation 00000000000000000011001101100001 conjunction 00000000000011111101100000110010 Undersecretary 00100000000111100111110110010101 probes 00000000000110001010001000100011 legs 00000000000110011010111101100011 invisible 00000000000010110000110100010000 visual 00000000001101000010000000110000 flashes 00000000010101001111000000010010 diagnosis 00000000000110110110011010100111 disapproved 00000000000000000000000000000000 Hun 00100000000000000000000000000000 Sihanouk 00100000000000000000000000000000 Cambodian 00100000000100000101011000110000 suppose 00000000000111011111100110110010 vetoes 00000000000000000000000000000000 discharge 00000000000111110100011110110111 Asia-Pacific 01000000000000000000000000000000 liberalize 00000000000111101000111110110010 plainly 00000000111001000000001001110010 hospitalized 00000000001001110100010000110010 stroke 00000000000111101101110000000001 pioneers 00000000000111101000100000110011 Mingo 00100000000000000000000000000000 replaces 00000000010100010001000000010010 Thanksgiving 00100000000110100110000000100001 wishing 00000000001100101010111000110010 Belt 00100000000000010101110001111001 strokes 00000000000110010000010101100011 Pilots 00100000000000010000100110110011 examining 00000000000110110110010101000000 Examiner 00100000000010000010110000110101 Nearby 00100000000001001000001000110000 dailies 00000000000101000111110001100011 Reps. 00100000000000000000000000000000 comprises 00000000000001100001000000010010 Taxation 00100000000111100110011010100111 Pryor 00101111111110101001111010001000 216 00000000000000000000000000000000 update 00000001100100111111110110110010 randomly 00000001110101000000010001110010 thorough 00000000000000000101010010010000 wounds 00000000001100011111110101100011 accomplishments 00000000000111111111011101100011 ambulance 00000000000010001010001010110000 delight 00000000000111100010110101100111 Riese 00100000000000000000000000000000 nameplate 00000000000000000000000000000000 Orlando 00100000000111111001101001101000 anti-apartheid 00000000000000000000000000000000 racism 00000000000111111111010010100111 in-depth 00000000000000000000000000000000 Drogoul 00100000000000000000000000000000 Banca 00101111111011110101001000011000 Hammersmith 00100000000000000000000000000000 superpower 00000000000000001000110110110000 loosely 00000000000001000111001001110010 auditor 00000000000111000110101010110011 Nation 00100000000111111111111111000101 communism 00000000000111001110110010100111 immense 00000000000010000100010100010000 confesses 00000000000000100011010111000010 Stanza 00100000000000000000000000000000 subcompact 00000000000011111010001010110000 Corporations 00100000000111101111110001110011 clocks 00000000000000000000000000000000 Again 00100000000000000100010001110010 stacked 00000000011001001100010000110010 trendy 00000000001001010000001000110000 portray 00000000001010111011111110110010 fourth-largest 00000000000000000000000000000000 nostalgic 00000000000000000000000000000000 Yasuda 00100000000111011100010000001000 sleek 00000000000111000111011010010000 sung 00000001100101110100010000110010 Vanderbilt 00100000000011010111111000101000 arsenals 00000000000111101101100110001001 forbidding 00000001101010010000000000001010 authorize 00000000001010111111101110110010 indexers 00000000000000000000000000000000 discriminatory 00000000000000010010000110010000 virtue 00000000000111111111101100111111 Ashurst 00100000000000000000000000000000 concealed 00000000111111010100010000110010 homeland 00000000000111001111101001100111 marital 00000000000111011000000000110000 nullify 00000000000000000000000000000000 reverts 00000000000000000000000000000000 jeopardy 00000000000111111010110101010111 Paulo 00100000000000001001000000011101 TNT 01000000000000000000000000000000 Tourist 00100000000000000010101100100001 Province 00100000000111111101011001100111 Study 00100000000111101111100000110111 locales 00000000000000000000000000000000 English-language 00100000000000000000000000000000 responds 00000000000010100011010111000010 followers 00000000000111101001110000110011 lavish 00000000001010010000001000110000 Father 00100000000111111111101110000001 Buyers 00100000000111101101100000110011 undergoing 00000000000111010010010101000000 religious 00000000000101000000000000110000 religion 00000000000101101011110010100111 Unification 00100000000000010101101101001111 Getting 00100000000111101000000101000000 flown 00000000000111111100100001010000 defect 00000000000111101001101010110111 157 00000000000000000000000000000000 amass 00000000000000000000000000000000 noble 00000000000001000110000000001000 invariably 00000000010101100000001001110010 oat 00000000000000110111101110110000 stellar 00000000000000010111100000010000 Marketers 00100000000000011000000010110011 Tide 00100000000111111001100101100111 high-volume 00000000000000000000000000000000 tastes 00000000000100101001111101100011 youths 00000000000100101101011100110011 Goya 00100000000000000000000000000000 irregularities 00000000000111100111111000100011 Jake 00101111111011101000001000011000 chassis 00000000000011000000011111001001 hiding 00000000000100101110100001000000 Barr 00101111111010011100001000001000 alongside 00000000000000110001000000001010 budgeted 00000000000111000000010000110010 locate 00000000000110100011111110110010 Western-style 00100000000000000000000000000000 Truck 00100000000000011000001000100001 all-time 00000000000000000000000000000000 13.625 00000000000000000000000000000000 Pittsburgh-based 00100000000000000000000000000000 stresses 00000000001011010011000000010010 unfocused 00000000000000000000000000000000 Supporters 00100000000100000010000010110011 steered 00000000001000011100010000110010 Springfield 00100000000010111011101001101000 condominium 00000000000001001001111010110000 D.C 01000000000000000000000000000000 do-it-yourself 00000000000000000000000000000000 EG&G 01000000000000000000000000000000 Debenture 00100000000000000000001010110001 di 00001111111010100101001000011000 echoed 00000000110111100111010000110010 1.31 00000000000000000000000000000000 Treatment 00100000000111110010011010100111 Wastewater 00100000000000000000000000000000 99.75 00000000000000000000000000000000 251 00000000000000000000000000000000 culprit 00000000000111101000101100010111 resiliency 00000000000000000000000000000000 accountant 00000000000111101100110000110101 Armenian 00100000000001110100010100110000 Cockburn 00101111111101110111000010001000 jolts 00000000000100111111001000100011 farther 00000000000000000010101111000000 Visitors 00100000000001100000111000110011 Moslems 00100000000110111110100000110011 feasible 00000000000011011110110110010000 breathed 00000000000000000000000000000000 re-elected 00000000000000000000000000000000 divorced 00000000000011000110101001000000 Ebensburg 00100000000000000000000000000000 Fear 00100000000111101110000110110010 6.40 00000000000000000000000000000000 7.74 00000000000000000000000000000000 imperial 00000000000111100001111000101000 seated 00000000000000100111000001000000 49.9 00000000000000000000000000000000 creators 00000000000111100101111101100011 bind 00000000000111111001001010110111 3.43 00000000000000000000000000000000 Pencil 00100000000110101100110000000001 32.5 00000000000000000000000000000000 Wakeman 00100000000000000000000000000000 complexes 00000000000000011011110001100011 menu 00000000000111000100100101100111 dish 00000000000111011101011000000001 cream 00000000000000000001010100000001 Voters 00100000000000000001011000110011 inventor 00000000000101000111110000110101 endorse 00000000001110101011111110110010 Panisse 00100000000000000000000000000000 Chez 00100000000000000000000000000000 Transmission 00100000000000010100100001100001 Bowl 00100000000001101100100010110101 118 00000000000000000000000000000000 downgrading 00000000000111111111110111001111 Groupe 00100000000111000111111100101000 IOUs 01000000000000000000000000000000 boon 00000000000111111111011100010111 Sandy 00100000000000111010001000011000 Melloan 00100000000000000000000000000000 compromised 00000000010111010001110000110010 fascinating 00000000000001000101000010010000 rebounding 00000000000101111011100001000000 Veraldi 00100000000000000000000000000000 neglect 00000000000110111110011010100111 creator 00000000000101010111111000001111 beeper 00000000000000000000000000000000 birds 00000000001000101111110101100011 1940s 00000000000000000000000000000000 pollution-control 00000000000000000000000000000000 6.70 00000000000000000000000000000000 hormone 00000000000000001100100000100001 Hymowitz 00100000000000000000000000000000 accompany 00000000000111100011101110110010 unanimous 00000000000000001101000000010000 reliable 00000000000000100001010010010000 anti-miscarriage 00000000000000000000000000000000 noticeably 00000000000000000000000000000000 predictably 00000001110100000000001001110010 dilution 00000000000110000111101010100111 Dalton 00101111111110001101001000001000 reassure 00000000000010111011111110110010 3.40 00000000000000000000000000000000 Abraham 00101111111000000001110100001000 shakeup 00000000000000000000000000000000 surges 00000000000111011010011110000011 rub 00000000011110010110010110110010 2.68 00000000000000000000000000000000 Asians 00100000000111001100111000110011 tearing 00000000000110000110100001000000 hovered 00000000000111000110001000110010 suite 00000000000111101001000010000001 cover-up 00000000000000000000000000000000 wield 00000000100001101111101110110010 grandfather 00000000000111110011011110000001 1.63 00000000000000000000000000000000 Verit 00100000000000000000000000000000 pivotal 00000000000000000100011000010000 morass 00000000000111000000101101100111 slick 00000000000110011000011010010000 full-page 00000000000000000000000000000000 fishermen 00000000000110001100100000110011 Baden-Wuerttemberg 01000000000000000000000000000000 paved 00000011110101000101010000110010 Greeniaus 00101111110001001100000010001000 onetime 00000000000001011010010000010000 Pedersen 00100000000000000000000000000000 lousy 00000000000000000001001010010000 Gardner 00101111111101101101001000001000 Refining 00100000000111101100100001100001 Z. 00101111111111110010101011011000 well-heeled 00000000000000000000000000000000 dispersant 00000000000000000000000000000000 DSM 01000000000000000000000000000000 introduces 00000001010101100011000000010010 trailer 00000000000001110100001000100001 Cantor 00100000000000000000000000000000 quantify 00000000000111110100011110110010 reimbursement 00000000000000000001011000111001 Educational 00100000000000010100000000110000 Prime-1 00100000000000000000000000000000 chilled 00000000000010010101101001000000 501 00000000000000000000000000000000 bureaucracies 00000000000100010100110100100011 Raising 00100000000011010010011101000000 Station 00100000000111101001110100001001 Emerging 00100000000111111111100001000000 Guadalajara 00100000000000000000000000000000 pleas 00000000000110000011101000100011 Rohs 00100000000000000000000000000000 GSX 01000000000000000000000000000000 prescribe 00000000000010111011101110110010 Diet 00100000000101101010010000000001 141.80 00000000000000000000000000000000 Witnesses 00100000000000100000000110110011 144.5 00000000000000000000000000000000 158 00000000000000000000000000000000 nudge 00000000010010010110010110110010 Wedding 00100000000111100010110000000001 Coin 00100000000000000011100000100001 Gilchrist 00101111110100001000000010001000 insects 00000000000110110111111000110011 purchaser 00000000000111111011101010110101 138 00000000000000000000000000000000 Won 00100000001111101001010000110010 Sohn 00100000000000000000000000000000 jams 00000000000000000000000000000000 1,300 00000000000000000000000000000000 shoreline 00000000000000000000000000000000 breast 00000000000111101001001011100001 genius 00000000000111101111101001100111 slope 00000000000000111000011010101000 lithographs 00000000000000000000000000000000 Dali 00100000000000000000000000000000 ragged 00000000000000000000000000000000 propped 00000000000110111011001000110010 collectively 00000000101100000000001001110010 albeit 00000000000111011011000001110010 scholarly 00000000000000011000000000110000 Niciporuk 00100000000000000000000000000000 Moines 00101111111100110000110000011101 Donohoo 00100000000000000000000000000000 outpost 00000000000111100001011001100111 explanations 00000000000111101110101110100011 objectivity 00000000000000000000000000000000 shopper 00000000000111100110111000100001 Doubleday 00100000000111001111111010101000 Includes 00100000000000000001000000010010 Cape 00100000000111110000001000110000 BTR 01000000000000000000000000000000 gay 00000000000000100101001000110000 Continent 00100000000111111000111001000101 pillar 00000000000000000000000000000000 Anglo 00100000000111101110100110101000 Coxon 00100000000000000000000000000000 360-day 00000000000000000000000000000000 365-day 00000000000000000000000000000000 156 00000000000000000000000000000000 51-day 00000000000000000000000000000000 mud 00000000000111101100110000100001 microscope 00000000000000000000000000000000 Casablanca 00100000000000000000000000000000 hemisphere 00000000000111111001001100100101 texts 00000000000111011110010101100011 21.9 00000000000000000000000000000000 restarted 00000000000000000000000000000000 notch 00000000000111111111111111011011 114.3 00000000000000000000000000000000 bogus 00000000000000011010000110010000 1968 00000000000000000000000000000000 townships 00000000000111110110010010110101 accruing 00000000000000000000000000000000 American-made 00100000000000000000000000000000 184 00000000000000000000000000000000 Cleopatra 00100000000000000000000000000000 267 00000000000000000000000000000000 tumors 00000000000111011001111000100011 Josephine 00100000000000000000000000000000 thief 00000000000111111100010010110101 Dana 00100000000010001111111100001000 Hayes 00101111111110101001001000001000 Chilean 00100000000000010100010100110000 PACs 01000000000111101100010000110011 intruder 00000000000000000000000000000000 1.28 00000000000000000000000000000000 top-selling 00000000000000000000000000000000 Finding 00100000000111111011110101000000 combustion 00000000000110111010011010110000 discovering 00000000000111111001110101000000 Beneficial 00100000000001000100001001000000 diving 00000000001101111010110001000000 preceded 00000000010100100111010000110010 languishing 00000000000110001111000001000000 MNC 01000000000000000000000000000000 Seib 00101111111100101001000010001000 slept 00000000000010011110001000110010 corporates 00000000000000000000000000000000 Leavitt 00100000000000000000000000000000 stepped-up 00000000000000000000000000000000 doubted 00000000000100110111110111000010 re-examine 00000000000000000000000000000000 government-sponsored 00000000000000000000000000000000 SUGAR 01000000000000001011101110110000 screamed 00000000000000000000000000000000 Belgique 00101111111100001100111110000010 outrageous 00000000000000100011001110010000 probing 00000000000010100101110101000000 Raleigh 00100000000111001001101001101000 fragmented 00000000000111001001000010010000 contender 00000000000111001111101010110101 flame 00000000000111100101110000000001 tangled 00000000000011001101000010010000 felonies 00000000000000000000000000000000 Kimbrough 00100000000000000000000000000000 NIL 01000000000000000000000000000000 So-called 00100000000000000000000000000000 Meantime 00100000000111011110101001101000 Sara 00101111111111110010111000101000 Campaneris 00100000000000000000000000000000 loads 00000000000111101111001000000011 imperative 00000000000111111101110110010000 Bourse 00100000000000000000011000100101 innings 00000000000000000000000000000000 Adler 00101111111100100011111000001000 525 00000000000000000000000000000000 Merchant 00100000000011010000111100110000 gargantuan 00000000000000000000000000000000 cynical 00000000000001101011010010010000 shout 00000001010101111101010110110010 Mort 00100000000000000000000000000000 nightly 00000000000001011101000101010000 skewed 00000000010110000001110000110010 dismantle 00000000011110111011111110110010 at-market 00000000000000000000000000000000 W.Va 01000000000000000000000000000000 Englund 00100000000000000000000000000000 proclaims 00000000000001000011010111000010 2012 00000000000000000000000000000000 laughed 00000000010010011110001000110010 Marie 00100000000111111010001000011000 penchant 00000000000111111110011100111001 entangled 00000000000000000000000000000000 credit-rating 00000000000000000000000000000000 blackened 00000000000000000000000000000000 Cars 00100000000000000000001001100011 Dempsey 00101111111101011000100010001000 Amerada 00101111111111110011010000101000 Whiting 00100000000000000000000000000000 commanders 00000000000000000110100110001001 collaborating 00000000000000000000000000000000 Joshua 00101111111010101000001000011000 complicity 00000000000000000000000000000000 comedies 00000000000111010100010101100011 folding 00000000011011100010110001000000 NMTBA 01000000000000000000000000000000 Editor 00100000000111111110011000110101 17.4 00000000000000000000000000000000 Naturally 00100001100100000000001001110010 rescheduled 00000000001000010000010000110010 Gillespie 00101111111100000110100010001000 foresees 00000000010101100011000000010010 shivers 00000000000000000000000000000000 Nixdorf 00100000000001010000100100101000 Arbitragers 00100000000110100110000011010011 Salembier 00100000000000000000000000000000 presses 00000000001010011111000000010010 paltry 00000000000001011100100000010000 hospitable 00000000000011010101010010010000 16.3 00000000000000000000000000000000 133 00000000000000000000000000000000 Logan 00101111111101111001001000001000 24.5 00000000000000000000000000000000 Giddings 00101111111010101111111010101000 128 00000000000000000000000000000000 Years 00100000000000000000000000111011 du 00001111111001110011110101001000 recessionary 00000000000000000000000000000000 stoppage 00000000000000000000100001010111 Domenici 00101111111110111000111010001000 Grove 00100000000000011010100010100101 Lac 00100000000010011001000100101000 state-of-the-art 00000000000000000000000000000000 Tyszkiewicz 00100000000000000000000000000000 runner 00000000000111100101010010110101 replay 00000000000111111001001000111111 quashed 00000000000000000000000000000000 62,000 00000000000000000000000000000000 Atkins 00101111111110011100100010001000 Alpha 00100000000011110010101010110000 reminiscent 00000000000000101011110000110010 adapt 00000000000111101111010110110010 glorious 00000000000100000110011010010000 Steinbach 00100000000000000000000000000000 fund-raiser 00000000000000000000000000000000 Analyst 00100000000111101111111100110101 forma 00000000011000101101000101010000 Palmero 00100000000000000000000000000000 exemptions 00000000000111101101001100000011 electrodes 00000000000000000000000000000000 Panhandle 00100000000111111001001010101000 Added 00100000000111101100010111000010 273 00000000000000000000000000000000 Cosmos 00100000000010011100010000001000 norms 00000000000101010011011100100011 0.15 00000000000000000000000000000000 inflow 00000000000111101001101010001111 disagrees 00000000000110110110010000110010 mentor 00000000000111110010100100100001 Lance 00101111111000010010000100001000 Harken 00100000000000000000000000000000 connect 00000000000110001011011110110010 grounding 00000000000000000000000000000000 televisions 00000000000001011111101001100011 conscientious 00000000000000000000000000000000 pastry 00000000000000000000000000000000 SIBV-MS 01000000000000000000000000000000 Rod 00100000000100000111111100001000 four-month 00000000000000000000000000000000 computer-related 00000000000000000000000000000000 divert 00000000011000111111101110110010 higher-cost 00000000000000000000000000000000 pennant 00000000000000000011100100100001 wholesalers 00000000000111001100010000110011 vanished 00000000001000000110001000110010 debt-financed 00000000000000000000000000000000 recipes 00000000000101100011110101100011 bands 00000000000011010101110101100011 hard-currency 00000000000000000000000000000000 robbers 00000000000000000000000000000000 fielded 00000000001100101001010000110010 Sheffield 00100000000000000000000000000000 wallet 00000000000000000000000000000000 Heine 00100000000110101111101001101000 choppy 00000000000111011010011100010000 420 00000000000000000000000000000000 Illustrated 00100000010101000001110000110010 Rajiv 00100000000000000000000000000000 stinging 00000000000000000000000000000000 Viroqua 00100000000000000000000000000000 patrons 00000000000111000110100000110011 fitting 00000000000010100101000010010000 softened 00000000000011011010111001000000 45.3 00000000000000000000000000000000 cookbook 00000000000000000000000000000000 assertion 00000000000111111001010000001111 specialties 00000000000111101111010011001001 1.01 00000000000000000000000000000000 Shulman 00100000000000000000000000000000 Privatization 00100000000111100011110101001111 2.79 00000000000000000000000000000000 buoyant 00000000000001110011100000010000 Hansen 00101111111111101000100010001000 inverse 00000000000000000000000000000000 franchised 00000000000001100101010000110000 8:30 00000000000000000000000000000000 company-operated 00000000000000000000000000000000 lags 00000000100110000011000000010010 pitcher 00000000000011101111011110110101 Beverage 00100000000001111011111010110000 overshadowed 00000000000101010001110000110010 bits 00000000000110101011100100101111 Markese 00100000000000000000000000000000 Dodger 00100000000000000000000000000000 capsules 00000000000110110101110101100011 MTV 01000000000000000000000000000000 Lyphomed 00100000000101010011111100101000 scoffs 00000000001101101000001000110010 Closely 00100000000111111111001001110010 lover 00000000000111100001011110000001 showers 00000000000111001011110101100011 possessions 00000000000000000000000000000000 eclectic 00000000000000000000000000000000 gem 00000000000111000001100101100111 28.5 00000000000000000000000000000000 decorated 00000000011110110110010000110010 boosters 00000000000010010000100000110011 Restaurant 00100000000000010001111010110000 bid-wanted 00000000000000000000000000000000 experimenting 00000000000111100101100000110010 equilibrium 00000000000001001111111001100111 et 00000000000001111010010010110000 Conn.-based 00100000000000000000000000000000 49.4 00000000000000000000000000000000 223 00000000000000000000000000000000 cataract 00000000000000000000000000000000 flextime 00000000000000000000000000000000 spurted 00000000000010110001000100110010 13.7 00000000000000000000000000000000 severed 00000000000000000011111001000000 41-year-old 00000000000000000000000000000000 classifications 00000000000000000000000000000000 CALIFORNIA 01000000000111111101110001101000 motorists 00000000000000001100111000110011 bored 00000000000001100101110000110010 refrigeration 00000000000110011111100001100001 masseurs 00000000000000000000000000000000 357 00000000000000000000000000000000 bass 00000000000000011011000000001000 top-performing 00000000000000000000000000000000 tissues 00000000000111100111001010100011 unprepared 00000000001010011110110000110010 Conrail 00100000000101001100110100101000 manifest 00000000000000000000000000000000 2645.08 00000000000000000000000000000000 11th 00000000000000000000000000000000 120-day 00000000000000000000000000000000 Quest 00100000000111111111001111100111 Firestone 00100000000111101011001100101000 physically 00000000000010011000000001110010 three-fourths 00000000000000000000000000000000 1.91 00000000000000000000000000000000 remedies 00000000000111111011011100100011 Westminster 00100000000010010011100000110000 accordingly 00000000000111101101101011101000 Cathedral 00100000000111111110010100000001 couriers 00000000000100110100100000110011 SA 01000000000000000000000000000000 pricey 00000000000000111111000010010000 aerobics 00000000000000000000000000000000 reshaped 00000000000000000000000000000000 indicative 00000000001101101011110000110010 Sindona 00100000000000000000000000000000 Nazer 00101111111000011110110010001000 QVC 01000000000000000000000000000000 L 00100000000000010101111110101000 subgroups 00000000000000000000000000000000 competence 00000000000110011111110010100111 Denmark 00100000000111001100111101101000 Winners 00100000000111100111101001110011 ruining 00000000000111000111001101000000 7.65 00000000000000000000000000000000 bucked 00000000000011101101000000001010 Barksdale 00100000000000000000000000000000 poker 00000000000000001000101100100001 burner 00000000000111101101000001000111 242 00000000000000000000000000000000 26.9 00000000000000000000000000000000 Reader 00100000000111101010111000100001 Forces 00100000000111100000010110001001 M.D 01000000000000000000000000000000 dissolve 00000000010000111011111110110010 Conlon 00100000000000000000000000000000 Lipstein 00100000000000000000000000000000 ceremony 00000000000010000011001011100111 wrapping 00000000000000000000000000000000 legitimize 00000000000111000100111110110010 freshman 00000000000100101000101000110000 Boston-based 00100000000000000000000000000000 Oct 00100000000000000000000000000000 inspections 00000000000110011110001000100011 streamlined 00000000010011100101010010010000 auto-industry 00000000000000000000000000000000 Kids 00100000000111100011111100110011 dissolved 00000001010111010100010000110010 Anton 00100000000000000000000000000000 spiraling 00000000000000000000000000000000 Weinstein 00101111101000101100000010001000 7.35 00000000000000000000000000000000 1.79 00000000000000000000000000000000 LaBonte 01000000000000000000000000000000 traps 00000000000111101110010101100011 Tina 00100000000000000000000000000000 traced 00000000000011110000110000110010 recruits 00000000101100001111000000010010 disbanding 00000000000000000000000000000000 Brozman 00100000000000000000000000000000 mafia 00000000000011001010101000110000 Golenbock 00100000000000000000000000000000 Ba-3 00100000000000000000000000000000 Whitman 00101111111001101111000100001000 Choice 00100000000111101010111101100111 constituent 00000000000110101101011000110000 transmission 00000000000000010100100001100001 infectious 00000000000000100101000000110000 Tommy 00101111111000110010111000011000 mischief 00000000000000000000000000000000 2,064 00000000000000000000000000000000 door-to-door 00000000000000000000000000000000 Ries 00100000000000000000000000000000 NKF 01000000000000000000000000000000 skirt 00000001000010111111110110110010 invent 00000000000110101010101110110010 cardiovascular 00000000000010101100101010110000 judged 00000000000010110000110000110010 chambers 00000000000100110100110111110011 142.43 00000000000000000000000000000000 bargain-basement 00000000000000000000000000000000 arsenal 00000000000001101111111001100111 shorts 00000000000110100010110101100011 1.8578 00000000000000000000000000000000 450,000 00000000000000000000000000000000 feuding 00000000000100110110110000100111 conflict-of-interest 00000000000000000000000000000000 hindered 00000000000010000001110000110010 commercialize 00000000000000000000000000000000 spokesperson 00000000000000000000000000000000 Shultz 00101111111100101100001010001000 buttons 00000000000101000001110101100011 awesome 00000000000010011000110100010000 Redevelopment 00100000000000010011001001100001 ketchup 00000000000000000000000000000000 0.82 00000000000000000000000000000000 Woodland 00100000000000110110011010101000 interstates 00000000000000000000000000000000 Salem 00100000000111000101001000001000 alienating 00000000000000001100001101000000 finals 00000000000000000000000000000000 Memorial 00100000000000001010000000100001 Copyright 00100000000110000001000000110000 Performance 00100000000111101101011010100111 Yonehara 00100000000000000000000000000000 criminality 00000000000110110101110010100111 7.19 00000000000000000000000000000000 Bechtel 00100000000001010011010100101000 Sawyer 00101111110010101100000010001000 stops 00000000001000001111000000010010 58.9 00000000000000000000000000000000 46-year-old 00000000000000000000000000000000 Ladenburg 00100000000011101011110000101000 oil-field 00000000000000000000000000000000 747-400 00000000000000000000000000000000 double-A-minus 01000000000000000000000000000000 Managing 00100000000000000000001001110000 2.73 00000000000000000000000000000000 dips 00000000000000000000000000000000 leagues 00000000000111111101101001110011 Shrontz 00100000000000000000000000000000 Watkins 00101111110000100000000010001000 slows 00000010100010000011000000010010 denominated 00000000000001011110010000110010 sweeps 00000001001111001111000000010010 year-to-date 00000000000000000000000000000000 Trial 00100000000111100110000001100111 halved 00000010110111010100010000110010 vacancies 00000000000000000000000001100011 editing 00000000001011100010110001000000 22.4 00000000000000000000000000000000 undetermined 00000000000000000101100100010000 tack 00000000000101001001111010110111 consummated 00000001011010010010110000110010 contributor 00000000000111011111111100100111 737 00000000000000000000000000000000 start-ups 00000000000000000000000000000000 Bock 00100000000000000000000000000000 Maury 00100000000000000000000000000000 presently 00000000000001010100001001110010 pinning 00000000000000000000000000000000 hasty 00000000001101001101000000010000 appraisals 00000000000111110010001000100011 cheated 00000001101001110100010000110010 Skokie 00100000000111110100101001101000 reassurance 00000000000000000000000000000000 overhang 00000000000000000000000000000000 defrauded 00000000000100101101010000110010 dancers 00000000000110110000100000110011 catheter 00000000000000000000000000000000 Quarterly 00100000000000010101000101010000 condemnation 00000000000010100001001101001111 stiffer 00000000000011001100001111000000 present-day 00000000000000000000000000000000 Priam 00100000000000000000000000000000 edible 00000000000000000000000000000000 salvaged 00000000000000000000000000000000 23.25 00000000000000000000000000000000 allegation 00000000000111110001010000001111 allegiance 00000000000110111011110100100111 849 00000000000000000000000000000000 Sitting 00100000000111000011000001000000 counteract 00000000001111001011111110110010 identifies 00000001000110000011000000010010 coffin 00000000000000000000000000000000 stalemate 00000000000111010110110000100111 modern-day 00000000000000000000000000000000 Howell 00101111111111100111110001001000 indifference 00000000000110100111110100100111 honey 00000000000110010000101100100001 citations 00000000000100100011101000100011 lingering 00000000000010101000000000010000 Waggoner 00100000000000000000000000000000 spectators 00000000000000000000111000110011 whispering 00000000000000000000000000000000 acre 00000000000111111100101000100111 Nova 00100000000111100010100100101000 BSB 01000000000000000000000000000000 0.13 00000000000000000000000000000000 nicely 00000000110010000000010001110010 ghostbusting 00000000000000000000000000000000 321 00000000000000000000000000000000 Middletown 00100000000000000000000000000000 Freight 00100000000000100010001010110000 entitle 00000000000001011011101110110010 Marty 00101111111000000100001000011000 Phibro 00100000000000000000000000000000 inmates 00000000000000011100100000110011 pyramids 00000000000000000000000000000000 Aluminium 00101111111000110100010001001000 Alcan 00101111111111001000100100101000 PipeLines 01000000000000101100010000110011 17.9 00000000000000000000000000000000 pursuant 00000000000100001001111000110010 legerdemain 00000000000000000000000000000000 precaution 00000000000000000000000000000000 Midway 00100000000101000111110110101000 crushing 00000000000001110100011000010000 Sante 00100000000000000000000000000000 32.6 00000000000000000000000000000000 wiping 00000000100111000110100001000000 wholesaler 00000000000111100011100001110101 Vail 00100000000000000000000000000000 2.125 00000000000000000000000000000000 jealousy 00000000000000000000000000000000 busily 00000000000000000000000000000000 Raptopoulos 00100000000000000000000000000000 resold 00000000011111000000010000110010 5.42 00000000000000000000000000000000 delegates 00000000000000000110000000110011 Pell 00101111111111101001111010001000 11.2 00000000000000000000000000000000 housewife 00000000000111100001011110110101 eyebrows 00000000000100011111111101100011 drifting 00000000000111100011100001000000 decks 00000000000000000000000000000000 Stories 00100000000000001111110101100011 5.32 00000000000000000000000000000000 Skeptics 00100000000000001010000010110011 Ghostbusters 00100000000000000000000000000000 Kern 00101111111101011100001000001000 Sanger 00100000000000000000000000000000 Cone 00101111111001101000101001001000 Smithsonian 00100000000000111101100011010000 evidenced 00000000100010000001110000110010 specials 00000000000001110111110101100011 conservatism 00000000000101011111110010100111 haunting 00000000000000000000000000000000 propulsion 00000000000001011010001010110000 Sidewalk 00100000000011110110111000000001 muse 00000000000000000000000000000000 23.8 00000000000000000000000000000000 sequel 00000000000111111010001011100111 enforcing 00000000000011101011111101000000 1.53 00000000000000000000000000000000 worse-than-expected 00000000000000000000000000000000 petitions 00000000000100011001101000100011 underpin 00000000000000000000000000000000 Hammacks 00100000000000000000000000000000 Foot 00100000000111101011000001000111 Zell 00101111111110110110010010001000 tenor 00000000000111100111110000110101 Stinnett 00100000000000000000000000000000 bode 00000000000000010000000110111001 6.31 00000000000000000000000000000000 moderate-income 00000000000000000000000000000000 slammed 00000000000000000000000000000000 FINANCIAL 01000000000000000000100000110000 AUS 01000000000000000000000000000000 debt-ridden 00000000000000000000000000000000 furnace 00000000000000000101111000000001 programmed 00000000000000011000110000110010 nets 00000000110111001111000000010010 logistics 00000000000000010111101010100001 implementing 00000000000111101011111101000000 Lidgerwood 00100000000000000000000000000000 brass 00000000000000110010001100100001 Yamatake-Honeywell 01000000000000000000000000000000 Political 00100000000000000000000000110000 software-development 00000000000000000000000000000000 unreported 00000000001000110000011100010000 racehorse 00000000000000000000000000000000 Related 00100000000000000000111000110010 stomach 00000000000111101011010000000001 horror 00000000000111110100001100100001 bones 00000000000110000001110101100011 4.05 00000000000000000000000000000000 Lin 00100000000101001001110000001000 34.2 00000000000000000000000000000000 2.27 00000000000000000000000000000000 Offices 00100000000111000101000001100011 single-A-minus 01000000000000000000000000000000 2.56 00000000000000000000000000000000 31-year-old 00000000000000000000000000000000 Oaks 00100000000000000001011011101001 7.61 00000000000000000000000000000000 dangling 00000000000100100011100001000000 mettle 00000000000000000000000000000000 silicon 00000000000110111110011010101000 Ciba 00100000000000000100011011000000 Debt 00100000000000000000000010110001 2015 00000000000000000000000000000000 9.35 00000000000000000000000000000000 Pool 00100000000111001101100101100111 Bancshares 00100000000000000000001100101001 rollback 00000000000101111001101010100111 2.45 00000000000000000000000000000000 flower 00000000000000110000101100100001 determines 00000000011011100011000000010010 cosmic 00000000000000000000000000000000 ears 00000000000111100111111101100011 kindly 00000000000010010110011010010000 Trace 00100001000100111111110110110010 conscious 00000000000001010001010010010000 leveling 00000000000110100110100001000000 traces 00000000000010001111000000010010 whitewash 00000000000000000000000000000000 51.75 00000000000000000000000000000000 '60s 00000000000000000000000000000000 10.05 00000000000000000000000000000000 four-part 00000000000000000000000000000000 prevalent 00000000000111110011001110010000 Reuben 00100000000000000000000000000000 Railway 00100000000110010001111010110000 Thornton 00100000000101100000010000001000 496 00000000000000000000000000000000 cups 00000000000001000000101111001001 confidentiality 00000000000000001000100011100001 Internationale 00100000000000000000000000000000 Pakistani 00100000000001101000010100110000 telemarketers 00000000000000000000000000000000 car-rental 00000000000000000000000000000000 Meek 00101111111001011000000000001000 privatize 00000000000100100011111110110010 staffer 00000000000000001011010110110101 vacationers 00000000000000000000000000000000 IBJ 01000000000000000000000000000000 smells 00000000000110101000001000110010 hypocrisy 00000000000111111010111010100111 Parcel 00100000000111100010101011000001 Stephanie 00100000000000000000000000000000 Alternatively 00100000000111111000111011101000 Janney 00101111111111011000010000101000 enhancement 00000000000000000100111001100111 laptops 00000000000010101000111001100011 inflate 00000000000111100000111110110010 railroads 00000000000111101101100001110011 perpetuate 00000000000000000000000000000000 obsession 00000000000101101110110000100111 Riley 00101111111010101000000010001000 Inns 00100000000111100101111011101001 purses 00000000000000000000000000000000 Freud 00100000000000000000000000000000 Bud 00100000000000011011111100001000 tycoon 00000000001000000111110000110101 1987-88 00000000000000000000000000000000 ponder 00000000000110001110100110110010 cleaner-burning 00000000000000000000000000000000 adopts 00000000000000000000000000000000 Salon 00100000000000000000000000000000 swaying 00000000000000000000000000000000 Regarding 00100000100110010000000000001010 viewership 00000000000000000000000000000000 Yorkers 00100000000001011001011110000010 orchestras 00000000000000000000000000000000 nosedive 00000000000111110001101100110111 four-megabit 00000000000000000000000000000000 tin 00000000001011000100011010110000 stung 00000000100110000001110000110010 handout 00000000000000000000000000000000 inching 00000000000000000000000000000000 batting 00000000000000000000000000000000 pooled 00000000000000000000000000000000 snap 00000000100110010110010110110010 pins 00000000001011111011110101100011 shunned 00000011010101000101010000110010 Rental 00100000000001100000001010110000 tidal 00000000000000000000000000000000 snaps 00000000000101000011010111000010 Celimene 00100000000000000000000000000000 bombs 00000000000001001100000110001001 Transamerica 00100000000111100010111100101000 judging 00000000000101011101000001110010 contemplate 00000000000100001110100110110010 container 00000000000011000000011010110000 correctly 00000000000100100001001001110010 IF 01000000000000101010101001000010 zoomed 00000000000001110001000100110010 2.07 00000000000000000000000000000000 Shimbun 00100000000011001011000001001000 jeweler 00000000000000000000000000000000 imitation 00000000000110000100111001100111 Lagnado 00100000000000000000000000000000 Matt 00100000000001010100001000011000 Therefore 00100000000011101101000001110010 ballplayers 00000000000000000000000000000000 academia 00000000000111111100011101101000 nursing-home 00000000000000000000000000000000 Kalamazoo 00100000000000000000000000000000 diabetes 00000000000101101101110010100111 McNamara 01000000000000000000000000000000 shady 00000000000000000000000000000000 rethink 00000000000110001100111110110010 Mich.-based 00100000000000000000000000000000 Syracuse 00100000000110011100101001101000 insuring 00000000000000000000000000000000 Twenty 00100000000111101111000011000000 reorganized 00000000000010101010001001000000 parody 00000000000110110000100101100111 time-limited 00000000000000000000000000000000 Waltham 00100000001101011011101001101000 2.08 00000000000000000000000000000000 intricate 00000000000101011000110100010000 perchlorate 00001111111101110001111111001001 Nev 00100000000000000000000000000000 pensions 00000000000111111000000100000011 Heard 00100000000111110110110111000010 networking 00000000000011110111100001100001 distinctions 00000000000111010000010000100111 perfection 00000000000000000000000000000000 Counsel 00100000000000001110001000110101 fabled 00000000000000000000000000000000 Adam 00101111111000010001110000011000 Holders 00100000000111101110011010110011 observations 00000000000110100011101000100011 5.70 00000000000000000000000000000000 2.33 00000000000000000000000000000000 overturned 00000000110001111001010000110010 Willard 00101111111000010011100010011000 crashing 00000000000000100011100001000000 393 00000000000000000000000000000000 integral 00000000000000000011001110010000 retiree 00000000000000011110111000100001 railings 00000000000000000000000000000000 precipitated 00000000111100100111010000110010 37-year-old 00000000000000000000000000000000 insurgents 00000000000101111101011110110011 towers 00000000000011110010111000101000 multinationals 00000000000111101111100011110011 liquidator 00000000000000000000000000000000 reignited 00000000000000000000000000000000 160,000 00000000000000000000000000000000 Bridges 00100000000101101010000000001000 3.20 00000000000000000000000000000000 realizing 00000000000111111001111010000010 forgo 00000000000110111011111110110010 pitfalls 00000000000111110100011000100011 Sigoloff 00101111111000101000000010001000 British-based 00100000000000000000000000000000 telemarketing 00000000000000000000000000000000 colored 00000000000001100010101000110000 quell 00000000000010100011111110110010 670 00000000000000000000000000000000 mathematical 00000000000110010000000000110000 Dellums 00100000000000000000000000000000 large-capitalization 00000000000000000000000000000000 Namibian 00100000000000000000000000000000 continuously 00000011101000000000010001110010 131 00000000000000000000000000000000 Natwest 00100000000100101100111000101000 misguided 00000000000000011011010010010000 one-fifth 00000000000000000000000000000000 NO 01000000000000000000001100010100 buzzing 00000000000000000000000000000000 observe 00000000000111101110100110110010 destructive 00000000000000001011010010010000 Towers 00100000000011110010111000101000 reputations 00000000000101101000111101100011 2.15 00000000000000000000000000000000 Grimm 00100000000000000000000000000000 remembering 00000000000010010101110101000000 Arabian 00100000000000000100000001001000 incredibly 00000000000110101100000001110010 Marunouchi 00100000000000000000000000000000 4.35 00000000000000000000000000000000 Logic 00100000000110110011101001100111 EAST 01000000000010000000001110101000 speculating 00000000000110111111110000110010 nurseries 00000000000000000000000000000000 Chaplin 00100000000000000000000000000000 twisted 00000000001110011101101001000000 alleys 00000000000000000000000000000000 depleted 00000000001001000101101001000000 Oshkosh 00100000000000000000000000000000 terrorists 00000000000111101110100000110011 railway 00000000000110010001111010110000 ushered 00000000000000000000000000000000 Stan 00101111101001001100001000011000 hamstrung 00000000000000000000000000000000 franchiser 00000000000111111111100001110101 ambition 00000000000101111011110100100111 wit 00000000000011110001110010100111 Monitor 00100000000011111111110110110010 austere 00000000000000000000000000000000 Moslem 00100000000000110001011000110000 rulers 00000000000111100101000110110101 principally 00000000001000001011000001110010 Railroad 00100000000000000001111010110000 Dorgan 00100000000111011000111010001000 Wis 00100000000111011101101001001000 RTZ 01000000000000000000000000000000 jealously 00000000000000000000000000000000 indebted 00000000000100011000010000110010 Kimmel 00100000000000000000000000000000 ESOP 01000000000000000000000000000000 3.55 00000000000000000000000000000000 unresolved 00000000000000000100110110010000 debt-reduction 00000000000000000000000000000000 Crum 00100000000000000000000000000000 reckon 00000000000000000000000000000000 4.55 00000000000000000000000000000000 standby 00000000000000111111010000110000 instability 00000000000111011111111010100111 distilled 00000000000000000000000000000000 covenants 00000000000111001100010000100111 45.2 00000000000000000000000000000000 receivers 00000000000100111100110101100011 oil-producing 00000000000000000000000000000000 expressing 00000000000000101111011101000000 revelations 00000000000111101001101000100011 simmering 00000000000101101101010001000000 co-founded 00000000000000000000000000000000 Irwin 00101111111001100100000010011000 Congressman 00100000000111101110011110110101 posturing 00000000000011001110111010100111 on-again 00000000000000000000000000000000 off-again 00000000000000000000000000000000 gases 00000000000110010011011111001001 surpassed 00000000000100000001010000110010 Mariotta 00100000000000000000000000000000 forcefully 00000000110100000000010001110010 stimulating 00000000000010000101011101000000 accumulating 00000000000011000001010101000000 preferred-stock 00000000000000000000000000000000 common-stock 00000000000000000000000000000000 Miles 00100000000000000000000100001011 ERC 01000000000000000000000000000000 diverting 00000000000000100011011101000000 Pauline 00100000000000000000000000000000 anti-Japanese 01000000000000000000000000000000 scammers 00000000000000000000000000000000 reorganize 00000000000100111010111110110010 virulence 00000000000000000000000000000000 2,800 00000000000000000000000000000000 Interleukin-3 00100000000000000000000000000000 @ 00000000000000000000000000000000 desecration 00000000000000000000000000000000 Sandoz 00100000000100001111111100101000 unravel 00000000000110110100111110110010 documented 00000000000100010001101001000000 Frenzy 00100000000111011010100101100111 390,000 00000000000000000000000000000000 cheese 00000000000111101011111010110000 Algom 00100000000000000000000000000000 Feeding 00100000001110110010110001000000 2.55 00000000000000000000000000000000 buffet 00000000000000000000000000000000 automation 00000000000000010000011001100001 refocusing 00000000000000000000000000000000 575 00000000000000000000000000000000 Chapman 00101111111100101010001000001000 boycott 00000000000111110010100101100111 complements 00000000000000000000000000000000 evade 00000000001101111011111110110010 healing 00000000001011101010110001000000 ITC 01000000000000000000000000000000 hegemony 00000000000000000000000000000000 admissions 00000000000000000000011101100001 hyperinflation 00000000000000000000000000000000 debtor 00000000000111101101000100110000 guise 00000000000000000000000000000000 defines 00000000001001100011000000010010 untapped 00000000000000000000000000000000 Horton 00101111111110101000100010001000 brink 00000000000111111111001100001111 cue 00000000000111111110001111100111 32,000 00000000000000000000000000000000 injuring 00000000000001011101000001110010 oversaw 00000100011010000011000000010010 Peoples 00100000000111010100100100100001 Inner 00100000000010101000001000110000 Inn 00100000000000000000111011101001 per-capita 00000000000000000000000000000000 basement 00000000000111110011000101100111 488 00000000000000000000000000000000 By-Products 01000000000000000000000000000000 renowned 00000000000010101111000010010000 Tyson 00100000000111101011001000001000 SAB 01000000000000000000000000000000 ESOPs 01000000000000000000000000000000 Running 00100000000111111110100001000000 OKC 01000000000000000000000000000000 scotch 00000000000110100000101100100001 Petrus 00100000000000000000000000000000 endured 00000000001110101001010000110010 ouster 00000000000101101111110001100111 Baron 00101111111000100001100000001000 seating 00000000000000010100100000100001 discontinue 00000000000100000110111110110010 wrecked 00000000000000000000000000000000 journey 00000000000110101101111101100111 Socialists 00100000000111111100011110110011 Nov 00100000000000000100011001100010 elder 00001111111101100010101000110000 IATA 01000000000000000000000000000000 Lesser 00100000000000111000010000010000 unaware 00000000010011101011110000110010 Wedel 00100000000000000000000000000000 632 00000000000000000000000000000000 Champlain 00100000000000000000000000000000 Sayles 00100000000000000000000000000000 outraged 00000000000101001101110000110010 Loomis 00100000000000000000000000000000 Nazis 00100000000111100100011110110011 classics 00000000000011001101110101100011 3.625 00000000000000000000000000000000 8.26 00000000000000000000000000000000 McAfee 01000000000000000000000000000000 cronies 00000000000101010011110000110011 Fields 00100000000000001001110001111001 inflammatory 00000000000000000011101011100001 pragmatic 00000000000010001001000010010000 heap 00000000000000101101001010110111 ribozymes 00000000000000000000000000000000 indifferent 00000000000110110011110110010000 shovels 00000000000000000000000000000000 Claude 00100000000000000101100000011000 acquirers 00000000000111101001100000110011 squeezing 00000000000111001001001101000000 lungs 00000000000101001000111101100011 brawl 00000000000000000000000000000000 stifle 00000000000010100111111110110010 circumvent 00000000000000111011111110110010 Consortium 00100000000111101111101001110101 Schuette 00100000000000000000000000000000 brethren 00000000000111010011110000110011 cousin 00000000000111101001111110000001 variation 00000000000111100101101010100111 solidly 00000000110000101000000001110010 album 00000000000100101000001000100111 heck 00000000000111110001111110101000 Borden 00100000000110100101011100101000 Ehlers 00100000000000000000000000000000 occupying 00000000000001011101111101000000 Antitrust 00100000000010000001000000110000 canning 00000000000000000000000000000000 altering 00000000000001100001011101000000 Backhaus 00100000000000000000000000000000 Margeotes 00100000000000000000000000000000 Zilligen 00100000000000000000000000000000 Talcott 00100000000000000000000000000000 Cosmetics 00100000000000001011111010110000 horns 00000000000110110011111101100011 descending 00000000000000000000000000000000 Asher 00101111111000010100111010011000 heights 00000000000000000011100010100101 Philippe 00100000000000000000000000000000 ROTC 01000000000000000000000000000000 Newsday 00100000000111111110001010000001 Amish 00100000000000000000000000000000 sticker 00000000000011001010110011000111 honed 00000000000000000000000000000000 Griffin 00101111111100100000010010001000 2.63 00000000000000000000000000000000 50.1 00000000000000000000000000000000 whimsical 00000000000010010011000010010000 28.6 00000000000000000000000000000000 Bowles 00101111111111001111110001001000 gloom 00000000000101111010111010100111 Cresson 00100000000000000000000000000000 approximate 00000000000111101000000100010000 Lauderdale 00100000000101010110110000011101 Hawkins 00101111111011111101001000001000 recruiter 00001111111111101100011000110101 tenders 00001111111111111111110100011001 browsing 00000000000000000000000000000000 32.8 00000000000000000000000000000000 labor-intensive 00000000000000000000000000000000 Presidio 00100000000111101000011000101000 163 00000000000000000000000000000000 Rabinowitz 00100000000000000000000000000000 Bachmann 00100000000000000000000000000000 Grady 00100000000000000000000000000000 Catherine 00100000000000000000000000000000 Playmates 00100000000000000000000000000000 proportions 00000000000111100000001010100011 1953 00000000000000000000000000000000 Woodward 00101111111111110100111000001000 Bowder 00100000000000000000000000000000 trans-Atlantic 01000000000000000000000000000000 sexy 00000000000001110110011010010000 nonstop 00000000000010011000001010110000 differing 00000000000000101000010000010000 bypass 00000000000010011111110110110010 1955 00000000000000000000000000000000 132 00000000000000000000000000000000 cash-rich 00000000000000000000000000000000 O'Connor 01001111111001000000100010001000 Lahus 00100000000000000000000000000000 nurse 00000000000111101010010010110101 Rocha 00100000000000000000000000000000 heritage 00000000000100011100100100100001 avoidance 00000000000111111100111000111001 Scripps 00101111111101010010111000101000 brew 00000000000100101101001010110111 12.75 00000000000000000000000000000000 Kroger 00100000000110101101011100101000 Unitil 00100000000000000000000000000000 Hubert 00101111111001011010001000011000 McMaster 01000000000000000000000000000000 witch 00000000000000101010101100100001 Napa 00100000000000000000000000000000 paper-products 00000000000000000000000000000000 bombshell 00000000000000000000000000000000 national-service 00000000000000000000000000000000 Lieberman 00101111111011100101001000001000 seniors 00000000000000000001111000110011 reinstated 00000000001001111001010000110010 principal-only 00000000000000000000000000000000 interest-only 00000000000000000000000000000000 mercury 00000000000111101111110110101000 Jennifer 00100000000000000000000000000000 Treybig 00100000000000000000000000000000 diagnosed 00000000001101110100010000110010 Pulp 00100000001000000100011010110000 overwhelm 00000000000000000000000000000000 pen 00000000000011101100111110000010 promoters 00000000000000101000100000110011 Schlesinger 00101111111110011010100010001000 Iraqi 00100000000000010010010100110000 artwork 00000000000000000000000000000000 Tempe 00100000000000000000000000000000 Robinson-Humphrey 01000000000000000000000000000000 unanswered 00000000000000011101110110010000 Minuteman 00100000000000000000000000000000 stereotypes 00000000000000000000000000000000 simmer 00000000000000000000000000000000 damped 00000000001001100111010000110010 History 00100000000111111111001001100111 tumult 00000000000000000000000000000000 catering 00000000001011100000111000110010 FSLIC 01000000000000000000000000000000 Sundance 00100000000000000000000000000000 generation-skipping 00000000000000000000000000000000 Bloch 00101111111111001100110010001000 entitles 00000000001010100001000000010010 consciousness 00000000000111100001101001100111 7.54 00000000000000000000000000000000 dissents 00000000000000000000000000000000 scream 00000000000000000000000000000000 Blackmun 00101111111011011010101010001000 Orthodox 00100000000000011001011000110000 Rosie 00100000000000000000000000000000 Greeks 00100000000000000000000000000000 Nihon 00100000000111101011001101110000 Keizai 00100000000000000000000000000000 Throughout 00100000000001001101000000001010 480 00000000000000000000000000000000 Weatherford 00100000000000000000000000000000 Fiero 00100000000001100000000001000111 landowners 00000000000110001100111000110011 COCOA 01000000000111010011101110110000 wiggle 00000000000000000000000000000000 HOFI 01000000000000000000000000000000 physicist 00000000000111010101011110110101 recruitment 00000000000111110010101101001111 autographed 00000000000000000000000000000000 Syms 00100000000000000000000000000000 Attack 00100000000111111101100100100111 Peltz 00101111110001111100000010001000 Karatz 00100000000000000000000000000000 akin 00000000000111011100011000110010 Janus 00100000000000000000000000000000 handsomely 00000000111000010000010001110010 prefecture 00000000000000000000000000000000 Clarcor 00100000000000000000000000000000 Govett 00101111111001110000000101001000 1.86 00000000000000000000000000000000 15.7 00000000000000000000000000000000 tablets 00000000000111100010100110001001 Marines 00100000000111101110100110110011 mansion 00000000000111011110010100000001 Rank 00100000000111111010100110110111 situated 00000001011001001100010000110010 Kid 00100000000111100001110010110101 Spanish-language 00100000000000000000000000000000 extinction 00000000000000000000000000000000 one-yen 00000000000000000000000000000000 Atsushi 00100000000000000000000000000000 U.S.-Japan 01000000000000000000000000000000 consumer-electronics 00000000000000000000000000000000 Derek 00101111111000000010110110011000 rebut 00000000000111000100011110110010 peanuts 00000000001111110101110010100111 2569.26 00000000000000000000000000000000 Around 00100000000000100001000000001010 Succeeding 00101111111111110110011010000010 20-a-share 00000000000000000000000000000000 cola 00000000000000010011100100100001 gold-mining 00000000000000000000000000000000 Maxus 00100000000111001001000100101000 glance 00000000000111111111100100010111 Omnicare 00100000000000000000000000000000 4.12 00000000000000000000000000000000 Cold 00100000000000000101011010010000 tabs 00000000000000000010100100100111 reply 00000000000101110101111010110111 ailment 00000000001011000111111001100111 scans 00000000000000000000000000000000 Alliant 00100000000000000000000000000000 spells 00001001010110000011000000010010 Frawley 00100000000000000000000000000000 Ilford 00100000000000000000000000000000 untrue 00000000000111110111110110010000 Agfa 00100000000000000000000000000000 organs 00000000000111101100001010100011 preoccupation 00000000000110100110110000100111 Waterford 00100000000000000000000000000000 carnage 00000000000000000000000000000000 2.65 00000000000000000000000000000000 Colton 00100000000000000000000000000000 excessively 00000000010011101000000001110010 lunchtime 00000000000000000000000000000000 tense 00000000000100001100011010010000 transcript 00000000000111100001100101100111 Loewi 00100000000000000000000000000000 390 00000000000000000000000000000000 Catholics 00100000000111000100111000110011 creature 00000000000111101001011000111111 evolve 00000000000110111011010110110010 front-page 00000000000000000000000000000000 Thieme 00100000000000000000000000000000 Perrier 00100000000000000000000000000000 excludes 00000000001001100001000000010010 Cardinal 00100000000001011011111100001000 Holy 00100000000001100001011000110000 Circle 00100000000101001100110100100001 preferring 00000000000100101010111000110010 Japanese-owned 00100000000000000000000000000000 Progress 00100000000111101001111010100111 McMeel 01000000000000000000000000000000 converts 00000000000000011111000000010010 afforded 00000000001110110111010000110010 Torstar 00100000000010011010111100101000 shorting 00000000000000000000000000000000 directionless 00000000000000000000000000000000 photographers 00000000000111101101111000110011 cumbersome 00000000000110111011010010010000 hysteria 00000000000001001110111010100111 Newspaper 00100000000000000000001101000001 retires 00000000011111011110001000110010 capital-punishment 00000000000000000000000000000000 76.50 00000000000000000000000000000000 Mochida 00100000000000000000000000000000 22.125 00000000000000000000000000000000 warehouse-club 00000000000000000000000000000000 Saltzburg 00100000000000000000000000000000 masseuse 00000000000000000000000000000000 24,000 00000000000000000000000000000000 swept 00000000000001101001001000110010 Tariffs 00100000000111101110100100000011 Settlement 00100000000111101110110011001111 Rawls 00100000000000000000000000000000 receipt 00000000000111110111001101001111 clogged 00000000000001001001101001000000 2.23 00000000000000000000000000000000 stock-price 00000000000000000000000000000000 awarding 00000000001101110010110001000000 travels 00000000000111111100001000110010 Misawa 00100000000000000000000000000000 Tabak 00101111111010100100010000101000 GPA 01000000000000000000000000000000 underpinned 00000000000000000000000000000000 19.50 00000000000000000000000000000000 soluble 00000000000000000000000000000000 unconventional 00000000000000011101110100010000 disruptive 00000000000011110101010010010000 miniature 00000000000101000000001000110000 AmeriGas 01000000000010000001111100001000 1923 00000000000000000000000000000000 McCoy 01001111111110001001000010001000 Wadsworth 00100000000000000000000000000000 lengthened 00000000000000000000000000000000 Amcore 00100000000000000000000000000000 Longer 00100000000000111110010001110010 relentlessly 00000010110101000000010001110010 3.90 00000000000000000000000000000000 panicking 00000000000000000000000000000000 Gurria 00100000000000000000000000000000 state-run 00000000000000000000000000000000 82.8 00000000000000000000000000000000 mankind 00000000000111111110101101101000 Wireless 00101111111001110111110001001000 Eslinger 00100000000000000000000000000000 Antolini 00100000000000000000000000000000 Baxley 00100000000000000000000000000000 clips 00000000000111000111110101100011 predicament 00000000000111110000111101100111 Sao 00100000000111110000001101110000 fostered 00000000111111100111010000110010 Neff 00101111111101111100000010001000 Xinhua 00100000000000001000011000101000 workweek 00000000000011100001101001000111 CAE 01000000000000000000000000000000 unfit 00000000000000000000000000000000 ingredient 00000000000110100100111001100111 Negotiations 00100000000111111111010000100111 Metamucil 00100000000000000000000000000000 Portrait 00100000000111100010111000111111 Preti 00100000000000000000000000000000 Cincinnati-based 00100000000000000000000000000000 49.8 00000000000000000000000000000000 extrusion 00000000000000000000000000000000 24.8 00000000000000000000000000000000 Liz 00101111111111100000101101110000 tumbles 00000000000000000000000000000000 biography 00000000000111110000111000111111 discredited 00000000000100011101101001000000 Meyer 00101111111001001000100010001000 bare 00000000000011110010011010010000 Negus 00100000000000000000000000000000 pico 00000000000000000000000000000000 pertinent 00000000000000001011001110010000 CFC 01000000000000000000000000000000 schoolteacher 00000000000000000000000000000000 muni 00000000000000000000000000000000 338 00000000000000000000000000000000 Garfield 00100000000000000000000000000000 hammer 00000000000101000100100000001000 1.78 00000000000000000000000000000000 trickle 00000000000111101010011000110111 purged 00000000000000000000000000000000 Miranda 00100000000001101000000000001000 quotation 00000000000000010000010010111001 interruption 00000000000101000100111001100111 genuinely 00000000000001111000000001110010 56.875 00000000000000000000000000000000 Starpointe 00100000000000000000000000000000 Interactive 00100000000010010100101010110000 concentrations 00000000000111101111111001000111 best-performing 00000000000000000000000000000000 Hachette 00100000000110000101011100101000 Nogales 00100000000000000000000000000000 deprive 00000000000000011011101110110010 grabbing 00000000000010100111111101000000 slapped 00000011011001001100010000110010 intervals 00000000000000000000000000000000 antibodies 00000000000011001111111001100011 rebounds 00000000000000000001011110000011 9.45 00000000000000000000000000000000 NOW 01000000000000001000001001110010 onslaught 00000000000111001100111001100111 manually 00000000000000000000000000000000 best-selling 00000000000000000000000000000000 cooler 00000000000000100001111010110000 railcars 00000000000000000000000000000000 loom 00000000000001101101001010110111 plaster 00000000000100101000010110000000 non-seamen 00000000000000000000000000000000 729 00000000000000000000000000000000 top-tier 00000000000000000000000000000000 five-point 00000000000000000000000000000000 Scudder 00100000000000000100010000101000 modification 00000000000111101101001101001111 unsupported 00000000000000000000000000000000 Bearings 00100000010010001011111010110000 one-inch 00000000000000000000000000000000 fullest 00000000000000000000000000000000 shuffle 00000000000111010101111000110111 outstripped 00000000001100000001010000110010 overreacting 00000000000110100110011000110010 resent 00000000000110101110100110110010 waiving 00000000000000000000000000000000 406 00000000000000000000000000000000 reparations 00000000000000000000000000000000 416 00000000000000000000000000000000 pay-in-kind 00000000000000000000000000000000 LAW 01000000000001000000000010011001 8.12 00000000000000000000000000000000 crest 00000000000100010010010100000001 paragraph 00000000000111100100011000010111 Non-interest 00100000000000000000000000000000 unilateral 00000000000001000010000000110000 Gabriel 00101111111000001100000100001000 Talk 00100000000111111111000101010111 striving 00000000000110110110111000110010 Hold 00100000000111111110101110110010 allocating 00000000000011110011111101000000 restatement 00000000000111111101001001001111 anthers 00000000000000000000000000000000 catastrophic-care 00000000000000000000000000000000 brokerages 00000000000111101000000001110011 malpractice 00000000000100100001000000110000 Russo 00101111111110100100001000001000 surtax 00000000000101011011001011100111 enclosed 00000000000000000000000000000000 educating 00000000000000101001001101000000 Floor 00100000000111101101011001000111 2.44 00000000000000000000000000000000 Langton 00100000000000000000000000000000 hikers 00000000000000000000000000000000 Brace 00101111111000000100101000101000 predominantly 00000000000111001111000010010000 Starr 00101111010010101100000010001000 LeBaron 01000000000000100000000001000111 cost-effective 00000000000000000000000000000000 Rohm 00100000000000000000000000000000 Norris 00101111111101001010100010001000 McLaughlin 01001111111101001111000010001000 Aurora 00100000000000000000000000000000 Shidler 00100000000000000000000000000000 Barnicle 00100000000000000000000000000000 Percival 00100000000000000000000000000000 Responding 00100000001111111010111000110010 Harcourt 00100000011111011011010100101000 10.43 00000000000000000000000000000000 pension-fund 00000000000000000000000000000000 dreamed 00000000000111011000110111000010 Leasing 00100000000000000100000001100001 juggle 00000000000000000000000000000000 Wellman 00100000000000000000000000000000 probation 00000000000111111000111000111001 Hale 00101111111000111000111000001000 Karl 00101111111000011001010100001000 one-month 00000000000000000000000000000000 divorce 00000000000111000111111000100001 Siegel 00101111111100101100100010001000 30-point 00000000000000000000000000000000 historians 00000000000000100000000010110011 gimmickry 00000000000000000000000000000000 diaries 00000000000101100111110101100011 unpleasant 00000000000000100001110100010000 Melamed 00101111111100001010110010001000 cycling 00000000000000000000000000000000 Schulte 00101111111101111111000100001000 Chilmark 00100000000000000000000000000000 Bicycle 00100000000000100110001000100001 secrecy 00000000001011100110011010100111 awkward 00000000000000100110110100010000 identification 00000000000000000110011010100111 fervor 00000000000110100111101001100111 30-minute 00000000000000000000000000000000 low-risk 00000000000000000000000000000000 1:30 00000000000000000000000000000000 1,900 00000000000000000000000000000000 Volatility 00100000000111101011111010100111 Rita 00100000000000000000000000000000 barn 00000000000000001010011000000001 prized 00000000000011001000101001000000 metallurgical 00000000000000010010111000101000 expansive 00000000000000100100110100010000 Tet 00100000000000000000000000000000 17.01 00000000000000000000000000000000 Janet 00101111111000011010001000011000 twin-engine 00000000000000000000000000000000 Fukuyama 00100000000000000000000000000000 satisfies 00000001101110000011000000010010 Ethyl 00100000001011011010111100101000 clearer 00000000000000010001001111000000 Version 00100000000111101111101000111111 Damascus 00100000000110110110101101101000 OEX 01000000000000000000000000000000 Arab-sponsored 00100000000000000000000000000000 discredit 00000000000101001011111110110010 high-speed 00000000000000000000000000000000 3.64 00000000000000000000000000000000 prostitute 00000000000000000000000000000000 FmHA 01000000000000000000000000000000 titanium 00000000000100001010101010110000 dons 00000000000000000000000000000000 0.24 00000000000000000000000000000000 208 00000000000000000000000000000000 362 00000000000000000000000000000000 Newcastle 00101111111100010111110001001000 Interferon 00100000000111101101111111001001 decimal 00000000000000000000000000000000 Canal 00100000000000000111001010100101 seedy 00000000000000000000000000000000 22.25 00000000000000000000000000000000 Endowment 00100000000110101111101110111001 17th-century 00000000000000000000000000000000 Moliere 00100000000000000000000000000000 54,000 00000000000000000000000000000000 coveted 00000000000000010001101001000000 interiors 00000000000111101101101111001001 enhancing 00000000000111101011011101000000 cyclosporine 00000000000000000000000000000000 Starzl 00100000000000000000000000000000 Trek 00100000000111111101111111111001 boxy 00000000000000000000000000000000 one-quarter 00000000000000000000000000000000 Barakat 00101111111101100010000010001000 Tunick 00100000000000000000000000000000 rookie 00000000000000000000000000000000 piles 00000000000111100100000100101111 souvenir 00000000000011101000101100100001 Ruskin 00100000000000000000000000000000 sponsorship 00000000000111111110001101001111 Bertussi 00100000000000000000000000000000 Greve 00100000000000000000000000000000 chanted 00000000000000000000000000000000 Granges 00100000000000101010111100101000 Luxembourg 00100000000100000011111001101000 divergent 00000000000000110000010000010000 Barco 00100000000000000000000000000000 furnaces 00000000000000001001101111001001 Quackenbush 00100000000000000000000000000000 Phoenix-based 00100000000000000000000000000000 Wong 00100000000000000000000000000000 sticks 00000000110111100111000000010010 dominating 00000000000010100011011101000000 Ameritech 00100000000111101011011100101000 roof-crush 00000000000000000000000000000000 SAVINGS 01000000000000000000111011100101 3.125 00000000000000000000000000000000 Crest 00100000000100010010010100000001 accumulation 00000000000110111000111001100111 Lombardi 00100000000000000000000000000000 fatalities 00000000000110100011101001100011 Delchamps 00100000000100010011101100101000 sedans 00000000000000000000000000000000 uphill 00000000000000010001110100010000 Accumulation 00100000000110111000111001100111 Oxnard 00100000000000000000000000000000 glitzy 00000000000000000000000000000000 parochial 00000000000010001000101000110000 coupe 00000000000110100110101001100011 Hicks 00101111111100111110011000001000 33,000 00000000000000000000000000000000 transforming 00000000000111011111001101000000 delinquent 00000000000000001000101001000000 Bulgarian 00100000000000000000000000000000 Turks 00100000000111101101100110110011 two-month 00000000000000000000000000000000 AC&R 01000000000000000000000000000000 Paris-based 00100000000000000000000000000000 Oakar 00100000000000000000000000000000 nail 00000000011011010110010110110010 Revlon 00100000000001011011010100101000 3.46 00000000000000000000000000000000 bakeries 00000000000110111110011110101001 unveiling 00000000000111101111000001110111 canvas 00000000000111101010110000000001 dynamics 00000000000000010110010001001000 Parent 00100000000111111100010000110101 Nigeria 00100000000111011100111101101000 spies 00000000000110100100100000110011 USDA 01000000000000000000000000000000 upswing 00000000000100101100111001100111 ENI 01000000000000000000000000000000 30.1 00000000000000000000000000000000 Trident 00100000000111111101110000110000 Mission 00100000000111101011101001100111 depressing 00000000000001110101010001000000 Lichtblau 00100000000000000000000000000000 AEW 01000000000000000000000000000000 mobilized 00000000000000000000000000000000 moon 00000000000111000001111000000001 Europa 00100000000000000000000000000000 Turnover 00100000000111101110001110000111 Per 00100000000000000000010101010000 outbreak 00000000000101101100111001100111 Kramer 00101111111111110000000100001000 curbed 00000000000011110100111001000000 2643.65 00000000000000000000000000000000 contempt 00000000000111101110111000111001 Equus 00100000000000000000000000000000 FMC 01000000000000000000000000000000 textiles 00000000000111110011111010110000 puzzle 00000000000110111101001010110111 IBM-compatible 01000000000000000000000000000000 money-transfer 00000000000000000000000000000000 Saskatchewan 00100000000111100100110001101000 exporting 00000000000111110011110001000000 inventiveness 00000000000000000000000000000000 organic 00000000000010011100101010110000 1989A 01000000000000000000000000000000 gracefully 00000000000000000000000000000000 universally 00000000110001101000000001110010 convent 00000000000000000000000000000000 Thurber 00100000000000000000000000000000 D.C.-based 01000000000000000000000000000000 waning 00000000000010000111110110010000 Conversely 00100000000111110010111011101000 sexes 00000000000000000000000000000000 impress 00000000011100111011111110110010 Amtrak 00100000000000111000101100100101 pioneered 00000001110101000101010000110010 revolt 00000000000111110001101010100111 Troy 00100000000101111011101001101000 Pilevsky 00100000000000000000000000000000 Seeking 00100000000011001110111000110010 reimbursements 00000000000100000001001100000011 fading 00000000000011011011100001000000 38,000 00000000000000000000000000000000 policy-makers 00000000000000000000000000000000 professes 00000000000000000000000000000000 paths 00000000001011100111110101100011 confronted 00000000100111110110010000110010 Kaminski 00100000000000000000000000000000 roiling 00000000000000000000000000000000 complexity 00000000000111111011111000001111 Levinson 00100000000000000000000000000000 Renee 00100000000000000000000000000000 youthful 00000000000001000011000010010000 Businesses 00100000000111100110010001100011 marijuana 00000000000100110111110000100001 crude-oil 00000000000000000000000000000000 Flint 00100000000110100111101001101000 managerial 00000000000111100000000000110000 3.36 00000000000000000000000000000000 protections 00000000000111110111011100100011 licensee 00000000000111110100101010110101 underneath 00000000111010100001000000001010 Soviet-style 00100000000000000000000000000000 Zurkuhlen 00100000000000000000000000000000 Bermuda 00100000000101100111111001101000 Herman 00101111111000100011010100001000 lyrics 00000000000011000111110101100011 confuse 00000000000000100111111110110010 valuing 00000000000111001111001101000000 Helena 00100000000101000100110001101000 stock-picking 00000000000000000000000000000000 16.5 00000000000000000000000000000000 turboprop 00000000000000000000000000000000 eerie 00000000000110011000110100010000 polished 00000000000110000110011010010000 Ruby 00100000000000000000000000000000 XR4Ti 01000000000000000000000000000000 Edsel 00100000000000000000000000000000 high-yielding 00000000000000000000000000000000 customized 00000000000000111100101010110000 teller 00000000000100010011111111001001 academics 00000000000111101110011000110011 appropriately 00000000010100000000010001110010 52.2 00000000000000000000000000000000 T-shirt 00100000000000000000000000000000 Afrikaner 00100000000000000000000000000000 conducts 00000000000110011101000000010010 mistrust 00000000001101100110011010100111 Watergate 00100000000111111000110110110000 Magazines 00100000000110111100110001100011 Downing 00100000000111101101001011110111 Afrikaners 00100000000000000000000000000000 filmed 00000001110001110100010000110010 Sheep 00100000000111010010101100100001 raped 00000000000000000000000000000000 Hendrik 00100000000000000000000000000000 socalled 00000000000000000000000000000000 Forbes 00100011111100010001110000001000 amending 00000000000000000000000000000000 Settle 00100000000111101111011110110010 Score 00100000000111101111001010110111 gasolines 00000000000000000000000000000000 cleaners 00000000000111001000000001111001 stimulated 00000000011100100111010000110010 chronicle 00000000000011101100111101110111 durable-goods 00000000000000000000000000000000 propping 00000000000000000000000000000000 Processing 00100000000000000010000001100001 kit 00000000000000011010100000001000 idled 00000000000000001101101001000000 Sherwood 00101111111001101100111000101000 Buckley 00101111111111111100100010001000 Famous 00100000000000011010000010010000 Wacoal 00100000000000000000000000000000 Sally 00100000000000000010111000011000 graduation 00000000000111110110000000100001 123 00000000000000000000000000000000 alternate 00000000000000100010010100010000 refocus 00000000000101010110110110110010 Klute 00100000000000000000000000000000 boots 00000000000111011001110101100011 parlors 00000000000000000000000000000000 M&A 01000000000000000000000000000000 round-trip 00000000000000000000000000000000 Wagoneer 00100000000000000000000000000000 selectively 00000011010101000000010001110010 dispatch 00000000000111000111100110110111 Gabor 00100000000000000000000000000000 tribute 00000000000110101101111100100111 E 00100000000000000000000000000000 Aussedat 00100000000000000000000000000000 TransAtlantic 01000000000001001000001010110000 Timken 00100000000000000000000000000000 sweepstakes 00000000000000000000000000000000 Salzman 00101111111101110110010010001000 Cipher 00100000000000000000000000000000 tankers 00000000000110101110100000110011 lieu 00000000000111110111011001101111 Pegasus 00100000000000000000000000000000 battles 00000000000110001110110000100111 anti-nuclear 00000000000000000000000000000000 destination 00000000000111111000100101100111 I-880 00100000000000000000000000000000 Grusin 00100000000000000000000000000000 rescissions 00000000000000000000000000000000 dissatisfied 00000000000111000101100000110010 peace-keeping 00000000000000000000000000000000 minimalist 00000000000000000000000000000000 recognizable 00000000000000000000000000000000 McNally 01000000000000000000000000000000 maitre 00000000000000000000000000000000 Claims 00100000000111101110110000100011 Love 00100000000100111110000110110010 toll-free 00000000000000000000000000000000 Dance 00100000000001000111111100100001 Lonski 00101111001001001100000010001000 dwindled 00000000001001111010110000110010 czar 00000000000101100111110000110101 iceberg 00000000000111111001011001100111 fixtures 00000000000000000101110011001001 weeklies 00000000000000000000000000000000 Ahmad 00100000000000000000000000000000 1.8300 00000000000000000000000000000000 141.65 00000000000000000000000000000000 recourse 00000000000111100110101100010111 wonderfully 00000000000000000000000000000000 Syria 00100000000111111010111101101000 PACIFIC 01000000000100101001001010101000 Tibet 00100000000111111000101101101000 tax-writing 00000000000000000000000000000000 undercurrent 00000000000000000000000000000000 Accordingly 00100000000111101101101011101000 3.06 00000000000000000000000000000000 Mortimer 00100000000000000000000000000000 damper 00000000000101001111001011100111 lawful 00000000000000000000000000000000 1979-80 00000000000000000000000000000000 NewsEdge 01000000000000000000000000000000 necks 00000000000000000000000000000000 nuisance 00000000000111101100111000100001 Traditionally 00100000000001011000001001110010 intentional 00000000000000000000000000000000 Ella 00100000000000000000000000000000 grievances 00000000000111101011101000100011 Fitzgerald 00101111111100000110111000001000 FADA 01000000000000000000000000000000 Josh 00100000000000000000000000000000 Genscher 00100000000000000000000000000000 militant 00000000000010010100000010010000 slogan 00000000000110011001111101100111 snagged 00000000000000000000000000000000 melt 00000000000000000000000000000000 retrofitting 00000000000000000000000000000000 slabs 00000000000000000000000000000000 seething 00000000000000000000000000000000 CML 01000000000000000000000000000000 Planned 00100000000000001001001001000000 hopelessly 00000000001011101000000001110010 Carrion 00100000000000000000000000000000 coastal 00000000000000010111110110101000 immigration 00000000000100000001000000110000 Ma 00100000000000000000000000000000 3.92 00000000000000000000000000000000 grievance 00000000000000001111001011100111 Rafael 00101111111100000101000000011101 Veronis 00100000000000000000000000000000 Whelen 00100000000000000000000000000000 wallpaper 00000000000000000000000000000000 724.4 00000000000000000000000000000000 219 00000000000000000000000000000000 enduring 00000000000000110000110100010000 Betsy 00100000000000000000000000000000 looting 00000000000000000000000000000000 2.11 00000000000000000000000000000000 1958 00000000000000000000000000000000 unitholders 00000000000000000000000000000000 Verne 00100000000000000000000000000000 55-year-old 00000000000000000000000000000000 quickest 00000000000000000000000000000000 pollster 00001111111110101010011110110101 likened 00000000001011110101010000110010 flirting 00000000000000000000000000000000 life-style 00000000000000000000000000000000 15.3 00000000000000000000000000000000 fluke 00000000000000000000000000000000 honeymoon 00000000000111111000000001100111 McKinsey 01001111111010010111111010101000 Say 00100000000111111101100110110010 behind-the-scenes 00000000000000000000000000000000 thugs 00000000000000000000000000000000 chickens 00000000000110100001110101100011 Sichuan 00100000000000000000000000000000 revising 00000000000101111011011101000000 suppressed 00000000101011010100010000110010 Industrials 00101111111000000101110110110000 Howe 00101111111000101110001010001000 Estimate 00100000000111111001011010110111 Barring 00100000011100010000000000001010 enhancements 00000000000111111110001010100011 Birnbaum 00101111111001011010000010001000 Main 00100000000000000100010011010000 Libyans 00100000000000000000000000000000 Biehl 00101111111100011100111000001000 soundtrack 00000000000000000000000000000000 66.8 00000000000000000000000000000000 miscalculated 00000000000000000000000000000000 much-larger 00000000000000000000000000000000 depict 00000000000010001001101110110010 bra 00000000000110101001110000000001 ensuing 00000000000000011000000011010000 Americana 00100000000000000000000000000000 Congressmen 00100000000110010110111000110011 near-monopoly 00000000000000000000000000000000 commented 00000000000110110111110111000010 naive 00000000000111001000011010010000 Tonight 00100000000001101100010001110010 wounded 00000001000001110100010000110010 disconnected 00000000000000000000000000000000 button 00000000000110100011001011100111 callable 00000000000101100110110000110010 Audit 00100000000000101110111001100111 lifelong 00000000000000001100101001110000 visibility 00000000000110011011011010100111 Batchelder 00101111111001011110110010001000 spotlight 00000000000111110101111000110111 3.65 00000000000000000000000000000000 635 00000000000000000000000000000000 evacuated 00000000000000000000000000000000 Noble 00100000000001000110000000001000 fools 00000000001010100101110010100111 influence-peddling 00000000000000000000000000000000 Electrical 00100000000000100000101010110000 survivor 00000000000111100011101010110101 distracting 00000000000000000000000000000000 Gadhafi 00100000000111110001111010001000 worms 00000000000011100011110101100011 81.6 00000000000000000000000000000000 thirtysomething 00000000000000000000000000000000 Edge 00100000000101101110111001100111 Len 00100000000000000000000000000000 Planters 00100000000000000001001010101000 record-keeping 00000000000000000000000000000000 pellets 00000000000000000000000000000000 Kimberly-Clark 01000000000000000000000000000000 bunny 00000000000000000000000000000000 Ski 00100000000000100010101100100001 sadly 00000000000011001000001001110010 Waite 00101111111010010101111110101000 43.50 00000000000000000000000000000000 Textron 00100000000111111100111100101000 221 00000000000000000000000000000000 boardroom 00000000000000000000000000000000 Grossman 00101111111110010000100010001000 Ferro 00100000000000000000000000000000 conscience 00000000000111110001001001100111 hopeless 00000000000100110110011010010000 Hochiminh 00100000000000000000000000000000 Finanziaria 00100000000110111100100001001000 dictatorship 00000000000110110111101001100111 Carew 00100000000000000000000000000000 reformist 00000000001101010000000000110000 Nghe 00100000000000000000000000000000 just-ended 00000000000000000000000000000000 guinea 00000000000001101001011110000010 folded 00000000101001001100010000110010 Hanoi 00100000000110000110101101101000 laughs 00000000000011001111000000010010 grapevine 00000000000000000000000000000000 285 00000000000000000000000000000000 two-year-old 00000000000000000000000000000000 dental 00000000000001010001100000110000 Gauloises 00100000000000000000000000000000 Libyan 00100000000000000100010100110000 2.29 00000000000000000000000000000000 3.13 00000000000000000000000000000000 thoroughly 00000010000101000000010001110010 Judging 00100000000101011101000001110010 staid 00000000000000001101000010010000 mid-range 00000000000000000000000000000000 126 00000000000000000000000000000000 Hospitals 00100000000111111010110001100011 Age 00100000000000000000100001000111 healthier 00000000000000011100001111000000 Save 00100000000011111111001110110010 3.31 00000000000000000000000000000000 equaled 00000000001110000001010000110010 simplify 00000000000100110100111110110010 appalled 00000000000001001101110000110010 dearth 00000000000111111111100110111111 Liu 00101111111101011001000100001000 contagious 00000000000000000000000000000000 kills 00000000001100010001000000010010 Jane 00100111111000000000111000011000 drop-off 00000000000000000000000000000000 enthusiastically 00000001011100000000010001110010 fivefold 00000000001110101000010001110010 invoke 00000000001110100011111110110010 sorghum 00000000000000000000000000000000 tribe 00001111111110101011111010001000 remind 00000000000110011010100110110010 spelling 00000000000100100100110000001000 Account 00100000000111101010111110111001 evaluated 00000010011011010100010000110010 Sugar 00100000000000001011101110110000 touches 00000001000111001111000000010010 space-based 00000000000000000000000000000000 up-front 00000000000000000000000000000000 hospitalization 00000000001110100101110010100111 Warshaw 00100000000000000000000000000000 stalling 00000000000100000110100001000000 560 00000000000000000000000000000000 Tonka 00100000000000111110111100101000 cheat 00000000001010010110010110110010 parachute 00000000000011101111110100100001 Tootal 00100000000000000000000000000000 unleashed 00000000001001101100010000110010 Maalox 00100000000000000000000000000000 Cortese 00100000000000000000000000000000 updates 00000000010111001111000000010010 framed 00000010111001001100010000110010 Pamela 00100000001010100100001000011000 Ogonyok 00100000000000000000000000000000 Montgoris 00100000000000000000000000000000 collects 00000000001110011101000000010010 noncriminal 00000000000000000000000000000000 paired 00000000011101110110010000110010 Franciscans 00100000000000000000000000000000 time-honored 00000000000000000000000000000000 Taxes 00100000000000000000110100000011 verification 00000000000000001001100011100001 dentists 00000000000100001100111000110011 41.8 00000000000000000000000000000000 ladies 00000000000000110010011100110011 Notre 00100111111111100101110110101000 Glauber 00100000000000000000000000000000 Biscayne 00100000000000000000000000000000 hobby 00000000000111101110101100100001 Coalition 00100000000100000101101001100111 Vernon 00100000000000000000110100101000 undersecretary 00000000000111100111110110010101 Lauren 00101111111101001001000100001000 Erotic 00100000000000000000000000000000 high-stakes 00000000000000000000000000000000 boiler-room 00000000000000000000000000000000 tax-deferred 00000000000000000000000000000000 confronting 00000001010010010000000000001010 Sala 00100000000000000000000000000000 Davidson 00101111111101001110100010001000 united 00000000000111111101110110101000 novelistic 00000000000000000000000000000000 old-line 00000000000000000000000000000000 Englewood 00100000000111010011101001101000 feminist 00000000000111110000000000110000 relates 00000000000001100001101000110010 palm 00000000000000011110011010101000 KLUC 01000000000000000000000000000000 stockholdings 00000000000000000000000000000000 visions 00000000000111001111000100101111 broadening 00000000000100100111010001000000 ratification 00000000000111101001111101001111 Payments 00100000000111101111101100000011 forgetting 00000000000000000000000000000000 refurbishing 00000000000000000000000000000000 long-simmering 00000000000000000000000000000000 glue 00000000000110100000111101100111 16.7 00000000000000000000000000000000 slips 00000000000101001111000000010010 Smalling 00100000000000000000000000000000 Thorp 00100000000000000000000000000000 Taco 00100000001110110010001000110000 slaughter 00000000000110111011011010100111 log 00000000000000001101001010110111 supply-demand 00000000000000000000000000000000 Weekly 00100000000000000101000101010000 expose 00000000000111100111111110110010 respects 00000000000110111010000010100011 offspring 00000000000110001000111101100011 28.75 00000000000000000000000000000000 Swissair 00100000001011101000110100101000 neutron 00000000000000000000000000000000 1.0 00000000000000000000000000000000 masonry 00000000000000000000000000000000 profited 00000000101111011110001000110010 infamous 00000000000011111111000010010000 vain 00000000000111101000111101010111 Term 00100000000111101101101001000111 huddled 00000000001010011110001000110010 Canter 00100000000000000000000000000000 disastrous 00000000000111000001010010010000 Oriani 00100000000000000000000000000000 Cordis 00100000000000000000000000000000 echoing 00000000000111111110100000001010 shrewd 00000000000000100101000010010000 non-deductible 00000000000000000000000000000000 cheers 00000000000100100111110101100011 binding 00000000000000011001010010010000 seminars 00000000000011111001110101100011 birth-control 00000000000000000000000000000000 Potential 00100000000000000010111000010000 Ty 00100000000000000000000000000000 juggling 00000000000000000000000000000000 squad 00000000000111100110110100000001 insidious 00000000000000000000000000000000 vastly 00000000001100101000010001110010 hobbled 00000000000000000000000000000000 Gottesman 00100000000000000000000000000000 MARKET 01000000000000000000000001011001 merging 00000000000111101110001101000000 postponement 00000000000111111111001001001111 crowds 00000000000111110001110101100011 Mid-Century 01000000000000000000000000000000 balance-of-payments 00000000000000000000000000000000 sophistication 00000000000001010111110100100111 Klauser 00100000000000000000000000000000 rendered 00000010001001001100010000110010 discriminating 00000000000111110111000001000000 pointedly 00000011010001000001001001110010 materially 00000000000100011000000001110010 Crescott 00100000000000000000000000000000 distancing 00000000000000000000000000000000 Advisors 00100000000100000111000101101001 Eisenberg 00101111111100011110000010001000 Schulman 00101111111000101100000010001000 progressive 00000000000000000110011000110000 Solomon 00101111111100001000000100001000 Sobel 00100000000000000000000000000000 Sculley 00101111111100100101000010001000 price-cutting 00000000000000000000000000000000 4.07 00000000000000000000000000000000 Israelis 00100000000110111010100110110011 Volvo 00100000000110000000110100101000 2.06 00000000000000000000000000000000 1.38 00000000000000000000000000000000 wasteful 00000000000010001011000110010000 Comfort 00100000000110110111110100100111 tropical 00000000110001010000001000110000 67-year-old 00000000000000000000000000000000 armies 00000000000111100111011101100011 Losses 00100000000111101111100000000011 Brierley 00100011111000010011111000101000 so-so 00000000000000000000000000000000 C-17 00100000000000000000000000000000 swoon 00000000000000000000000000000000 Olson 00101111111100100000100010001000 21.8 00000000000000000000000000000000 999 00000000000000000000000000000000 shaved 00000000000000000000000000000000 brush 00000000000111101101110110110111 sewing 00000000000000010101010000110000 nicknamed 00000000000000000000000000000000 reinforces 00000000010110000011000000010010 Youth 00100000000101101001110000000001 chiefly 00000000000000101011000001110010 futile 00000000000001000101010010010000 nuances 00000000000000000000000000000000 dispel 00000000010100011011111110110010 290 00000000000000000000000000000000 objectionable 00000000000000101011001110010000 PPG 01000000000000000000000000000000 foreseen 00000000111010010010110000110010 Than 00100000000000000000001110000010 Personnel 00100000000000001001101101100001 S.G. 01000000000000000000000000000000 roadblocks 00000000000000000000000000000000 Pressure 00100000000111101110100100100111 dare 00000000000000000010000110110010 Shippers 00100000000000001100010000110011 USAA 01000000000000000000000000000000 Hundreds 00100000000111101101111000101111 mindless 00000000000000000000000000000000 life-threatening 00000000000000000000000000000000 Westwood 00100000000110110011010100101000 Adults 00100000000000000000001100110011 liar 00000000000000000000000000000000 Appellate 00100000000000000001100111100101 quack 00000000000000000000000000000000 trait 00000000000000000000000000000000 866 00000000000000000000000000000000 non-duck 00000000000000000000000000000000 kylix 00000000000000000000000000000000 unethical 00000000000001001011000110010000 Isle 00100000000000000000000000000000 first-year 00000000000000000000000000000000 curator 00000000000110000111110000110101 preferably 00000000000101111011000001110010 Leucadia 00100000000110101001111000101000 repeating 00000000000111001100001101000000 expressly 00000001000001000001001001110010 LaSalle 01000000000000000000000000000000 excision 00000000000000000000000000000000 Vision 00100000000111101101100101100111 Strategy 00100000000111111111101001100111 Calor 00100000000000000000000000000000 malice 00000000000000000000000000000000 Chubb 00100000000111110000111100101000 Olsen 00101111111101111111000010001000 DARPA 01000000000000000000000000000000 circumspect 00000000000000000000000000000000 homosexuals 00000000000101011100111000110011 Wardair 00100000000000000000000000000000 custom 00000000000001111000001010110000 invite 00000000000101111011101110110010 Brook 00100111001011110001100010100101 Seasons 00100000000000000010011100011011 Restaurants 00100000000111101111110001100011 grateful 00000000000111010011110110010000 charming 00000000000111010000011010010000 stigma 00000000000110011000111101100111 53.7 00000000000000000000000000000000 Pearson 00100000000111111001110000001000 newcomer 00000000000111110111011110110101 maze 00000000000111100111001000111111 animation 00000000000000010100101100100001 hoped-for 00000000000000000000000000000000 downbeat 00000000000000000000000000000000 Point 00100000000111101110010011011011 25.8 00000000000000000000000000000000 Fatah 00100000000000000000000000000000 nostalgia 00000000000110101001110010100111 cartoon 00000000000000000001101100100001 undefined 00000000000000000000000000000000 scorn 00000000000000000000000000000000 blankets 00000000000000000000000000000000 myriad 00000000000111111001000011000000 Caa 00100000000000000000000000000000 B-3 00100000000000000000000000000000 herd 00000000000111110000011000100001 resurfaced 00000000000000000000000000000000 IT 01000000000000000000000011110010 Liability 00100000000010000101101000111001 sketches 00000000000110000110010101100011 encircling 00000000000000000000000000000000 bred 00000000101101101100010000110010 accordance 00000000000111100001100000110010 spinal 00000000000000000000000000000000 provincial 00000000000000011100010000110000 Clinic 00100000000111110110010100000001 Iwai 00100000000000000000000000000000 8.325 00000000000000000000000000000000 freezes 00000000000101100111000000010010 infants 00000000000101001110011100110011 8.17 00000000000000000000000000000000 8.08 00000000000000000000000000000000 woke 00000000000000000000000000000000 administer 00000000000101000011111110110010 talk-show 00000000000000000000000000000000 Nissho 00100000000000000000000000000000 i 00000000000000000000100111110010 PNC 01000000000000000000000000000000 Nam 00100000000101110100000000001000 handlers 00000000000000001000100110001001 lurched 00000000000000000000000000000000 mountains 00000000000111111101110101100011 6.30 00000000000000000000000000000000 civilians 00000000000000000100011100110011 Liberation 00100000000000000110110100100001 Documents 00100000000110101110001000100011 muted 00000000000010100110110110010000 Caesars 00100000000000101011010100101000 unfounded 00000000000011000101000110010000 Nuggets 00100000000000000000000000000000 conditioners 00000000000111111110000001010111 reservation 00000000000000010001001010110000 decreasing 00000000000110111101010001000000 fertilized 00000000000000000000000000000000 Bynoe 00100000000000000000000000000000 bitterness 00000000000110111110111010100111 Fraud 00100000000010000010100010100111 Carboni 00100000000000000000000000000000 43%-owned 00000000000000000000000000000000 Ind 00100000000000000000000000000000 LaGuardia 01000000000000000000000000000000 Fulbright 00100000000000000000000000000000 sweeten 00000000000111101100111110110010 Athens 00100000000111110011111001101000 wording 00000000000111110110011000001111 gaming 00000000000011000110010010110000 plywood 00000000001010000100011010110000 unwieldy 00000000000000000000000000000000 male-sterile 00000000000000000000000000000000 needing 00000000000000010100100101000000 embarrass 00000000011001111011111110110010 beverages 00000000000001101111011111001001 zones 00000000000000000010110100100011 alarms 00000000000001101111000000010010 mapping 00000000000000000110100001000000 enforced 00000101100111010100010000110010 co-chairmen 00000000000000000000000000000000 endorsements 00000000000110000101110101100011 Seventeen 00100000000110111000110100101000 Embarcadero 00100000000000000000000000000000 preserved 00000100110111010100010000110010 Cemetery 00100000000111111100111000000001 clientele 00000000000101111101101001100111 130,000 00000000000000000000000000000000 Putting 00100000000111110111101101000000 neared 00000000001000101001010000110010 1.8400 00000000000000000000000000000000 elevator 00000000000010010101011001100111 malicious 00000000000000000000000000000000 helicopters 00000000000111101011101001100011 thereof 00000000000000000000000000000000 Emanuel 00100000000000001110001000011000 Sumita 00101010001010100000001010001000 skier 00000000000000000000000000000000 disposed 00000000000010101011110000110010 multimillion 00000000000000011011100000010000 dementia 00000000000000000000000000000000 antique 00000000000000110000001000110000 Cushman 00101111111100010111111010101000 Telelawyer 00100000000000000000000000000000 distracted 00000000000111010001110000110010 warfare 00000000000110101011100110001001 six-year 00000000000000000000000000000000 Janachowski 00100000000000000000000000000000 Barris 00100000000000000101000100101000 briefcase 00000000000111100100110000000001 Weaver 00101111111110101110000010001000 cardiac 00000000000001110000000000110000 172 00000000000000000000000000000000 naphtha 00000000000000000000000000000000 vows 00000000000111110010101000110010 cracker 00000000000000000000000000000000 secretly 00000000011100000001001001110010 chaired 00000000000100101111010000110010 Glaser 00100000000000000000000000000000 appropriation 00000000000000000001000011010001 backfired 00000000011100000110001000110010 Pound 00100000000111111111011000010111 Millicom 00100000000111011010111100101000 adhesive 00000000000000000000000000000000 take-or-pay 00000000000000000000000000000000 sightings 00000000000110110011000100101111 254 00000000000000000000000000000000 molecule 00000000000000000000000000000000 Ailes 00100000000000000000000000000000 Armed 00100000000000010001101010110000 disturbed 00000000000010110101110000110010 Sonnett 00100000000000000000000000000000 maneuvers 00000000000111101110110100100011 cranes 00000000000000000000000000000000 unease 00000000000100001110111010100111 identities 00000000000100101000111101100011 Ohio-based 00100000000000000000000000000000 Pay 00100000000111111101001110110010 facial 00000000000000000000000000000000 1.67 00000000000000000000000000000000 Quite 00100000000000000000000001110010 ventilation 00000000000000001011100011100001 deteriorate 00000000001110111101010110110010 Texan 00100000000100101111011110110101 inspect 00000000000000111110001110110010 Broader 00100000000000011000001111000000 stockbroker 00000000000011100111011110110101 Exabyte 00100000000000000000000000000000 Plastics 00100000000011111011111010110000 firsthand 00000000000000101001001111000000 1.625 00000000000000000000000000000000 24-month 00000000000000000000000000000000 lonely 00000000000011101000011010010000 Boulevard 00100000000111110110100010100101 ferocious 00000000000000000000000000000000 robbery 00000000000010010011100010100111 Haagen 00100000000000000000000000000000 reassume 00000000000000000000000000000000 misdemeanor 00000000000001010000010000010000 sustainable 00000000000001010111100000010000 insures 00000000000010100001000000010010 24.4 00000000000000000000000000000000 reappearance 00000000000000000000000000000000 127 00000000000000000000000000000000 franchises 00000000000010000111110100100011 memos 00000000000111100011101000100011 1947 00000000000000000000000000000000 inspected 00001000001011010100010000110010 journalistic 00000000000011110000000000110000 lured 00000000001100011100010000110010 eternal 00000000000010000100110100010000 renovate 00000000000000000000000000000000 co-founder 00000000000000000000000000000000 foul 00000000000000100001110110110111 Marcel 00100000001111111011100010011000 pianist 00000000000101101111011110110101 240,000 00000000000000000000000000000000 proration 00000000000000000000000000000000 Reiss 00100000000000000000000000000000 butcher 00001111111111100011111010101000 lightly 00000000000110100111001001110010 famine 00000000000111001011010010100111 Tigrean 00100000000000000000000000000000 Rocky 00100000000010000010001000110000 Loeb 00101111111010001010100010001000 Ruffo 00100000000000000000000000000000 Angell 00101111111000000101001010001000 ripple 00000000000000011101001010110111 attorney-client 00000000000000000000000000000000 proponent 00000000000111101101001100111111 confrontational 00000000000100000101010010010000 emotions 00000000000111010111111101100011 buffeted 00000000111101010001110000110010 Gilmore 00100000000000000000000000000000 motorist 00000000000000000000000000000000 footage 00000000000001000111110101100011 Coelho 00100000011111111010101010001000 rightly 00000010001001000001001001110010 Glazier 00100000000000000000000000000000 diplomacy 00000000000010001111110010100111 vacating 00000000000110110100100101000000 copyrights 00000000000111001001111001100011 Allstate 00100000000100001001111000101000 lawmaker 00000000000000010010011110110101 construed 00000000001001000010110000110010 broker-dealers 00000000000000000000000000000000 informally 00000000010101000001001001110010 metro 00000000000011010111110110101000 Dallara 00100000000000000000000000000000 Whitford 00100000000000000000000000000000 quarterback 00000000000111000101011110110101 Millis 00101111111010101100000010001000 withhold 00000000001111001111101110110010 inheritance 00000000000101001011100000100001 rank-and-file 00000000000000000000000000000000 alumni 00000000000000000010001101100001 Yankelovich 00100000000000000000000000000000 1.90 00000000000000000000000000000000 lovable 00000000000000000000000000000000 Oji 00100000000000000000000000000000 cornered 00000000000000000000000000000000 Bigger 00100000000000000110001111000000 Rapanelli 00100000000000000000000000000000 convict 00000000000101101000100110110111 Folk 00100000000000010100001100100001 non-strategic 00000000000000000000000000000000 suppression 00000000000111101101101101001111 stature 00000000000011110111101001100111 Universities 00100000000111100101110001100011 Led 00100000000001011011010000110010 designation 00000000000101010000100101100111 Alcee 00100000000000000000000000000000 playground 00000000000000000000000000000000 310 00000000000000000000000000000000 colleague 00000000000111101100011110110101 fliers 00000000000001110100000000110011 back-up 00000000000000000000000000000000 bestowed 00000000110001001100010000110010 current-account 00000000000000000000000000000000 Haiti 00100000000111010110111101101000 progresses 00000000000000000000000000000000 Guardian 00100000000111110111100100100001 16.6 00000000000000000000000000000000 Beaver 00100000000101010110011010101000 disturb 00000000000000000000000000000000 Shields 00101111111001101001000000001000 screaming 00000000001111100110100001000000 Rapids 00100000000111110110100110010101 seriousness 00000000000111101110011000001111 Lebanese 00100000000001010001011000110000 steeply 00000000001011001000010001110010 long-running 00000000000000000000000000000000 Israeli-Palestinian 01000000000000000000000000000000 W 00100000000000000000000000000000 risked 00000000000001111010001000110010 monumental 00000000001100011101000000010000 Angel 00100000000101101011111100001000 bow 00000000000111011110011010101000 landslide 00000000000000000100010011000111 refugee 00000000000011000001011000110000 Juilliard 00100000000000000000000000000000 mimics 00000000000000000000000000000000 leaning 00000000000111100111100001000000 rhythmic 00000000000000000000000000000000 Gottlieb 00101111111101000111000010001000 adamant 00000000000111010111110000110010 forgiven 00000000000100010000010000110010 ante 00000000000111110001111000110111 1.41 00000000000000000000000000000000 tract 00000000000111101110110100000001 Veslefrikk 00100000000000000000000000000000 Sox 00100000000000000111110100100001 mound 00000000000000000000000000000000 puttable 00000000000000000000000000000000 146 00000000000000000000000000000000 excerpts 00000000000100010011110110110010 capitalistic 00000000000100011101000010010000 Picture 00100000000111100110100101100111 4.15 00000000000000000000000000000000 8.24 00000000000000000000000000000000 thefts 00000000000000000000000000000000 unheard 00000000011101101011110000110010 inkling 00000000000000000000000000000000 Baa-2 00100000000000000000000000000000 Morrissey 00100000000000000000000000000000 lays 00000000000101110001001000110010 D&B 01000000000000000000000000000000 Sago 00100000000000000000000000000000 diminishing 00000000000011011101010001000000 clashed 00000000001011110110010000110010 touring 00000000000000100101110101000000 Geo 00100000000101000100110100101000 single-A-plus 01000000000000000000000000000000 26.50 00000000000000000000000000000000 Cobb 00100000000000000000000000000000 contests 00000000000111111110000001100011 dash 00000000000000100100000001000111 Rambo 00100000000111100111011010010000 Julius 00101111111000100100101000101000 Baer 00101111111100010011010001001000 logged 00000000000000000000000000000000 7.62 00000000000000000000000000000000 Pricing 00100000000000000011000011100001 Inventories 00100000000111101101110100000111 Economist 00101111111000000000000100110101 Doctrine 00100000000111110001000011100111 provoking 00000000000010111101111101000000 name-dropping 00000000000000000000000000000000 Erik 00100000000000000000000000000000 Beauregard 00100000000000000000000000000000 cleaned 00000000000110001011001000110010 Randall 00101111111000100001100010011000 flip 00000000000010001011001010110111 Option 00100000000111011111101100100111 borrower 00000000000111100001101010110101 lively 00000000000010010010011010010000 feisty 00000000000011101001000010010000 Gibraltar 00100000000011100011000100101000 Revson 00100000000000000000000000000000 Asquith 00100000000000000000000000000000 levy 00001111111101001010001000001000 champions 00000000010010001111000000010010 stored 00000010000001001100010000110010 Pyszkiewicz 00100000000000000000000000000000 COMPUTER 01000000000000000001011010110000 high-powered 00000000000000000000000000000000 forged 00000000100001101100010000110010 Lever 00100000000110101110000000001000 sore 00000000000000101110011010010000 depositions 00000000000101000011101000100011 Roberto 00100000000000010101100010011000 Edelson 00100000000000000000000000000000 Linden 00100000000100000100001000001000 Vanity 00100000000111101000010000001000 pigment 00000000000000000000000000000000 ultraviolet 00000000001010011100101010110000 forward-rate 00000000000000000000000000000000 25th 00000000000000000000000000000000 Dougherty 00100000000000000000000000000000 advocated 00000000001101101100010000110010 274 00000000000000000000000000000000 Generali 00100000000111110010111100101000 pillars 00000000000000000000000000000000 crumble 00000000000000000000000000000000 5,500 00000000000000000000000000000000 McKinnon 01001111111000000100000101001000 chalked 00000000000000000000000000000000 Coffee 00100000000100111001101110110000 89.6 00000000000000000000000000000000 whip 00000000000000000010000110110101 Dorsey 00100000000000000000000000000000 Sherry 00101111111011001110000100001000 courting 00000000000110000001110101000000 poster 00000000000100011010001011100111 Mr 00100000000000000000000000000000 arbitrary 00000000000001000000000110010000 Abbott 00100000000101111011110000001000 detergents 00000000000000000000000000000000 Kroll 00100000000000000000000000000000 tractor 00000000000000000100001000100001 orchestra 00000000000111111001110100000001 fiasco 00000000000111010100101101100111 booth 00000000000100100000000000001000 Parts 00100000000110101111110111001001 stymied 00000000001000000001110000110010 Jude 00100000000000000000000000000000 radically 00000000001010101000010001110010 rats 00000000000111000110111001100011 essays 00000000001110000101110101100011 Forrester 00100000000000000000000000000000 wastes 00000000000111100011111111001001 definite 00000000001011000001000000010000 arbitrarily 00000000000000000000000000000000 how-to 00000000000000000000000000000000 GM-Jaguar 01000000000000000000000000000000 seasoned 00000000000111101000000110110000 Pohs 00100000000000000000000000000000 cellular-telephone 00000000000000000000000000000000 dresses 00000000001101000111110101100011 hitches 00000000000000000000000000000000 starving 00000000000010101110101001000000 Poore 00100000000000000000000000000000 snapshots 00000000000000000000000000000000 266 00000000000000000000000000000000 Rifkin 00100000000000000000000000000000 darling 00000000000111110001101000111111 Crete 00100000000000000000000000000000 Altogether 00100000000101100100010001110010 Toni 00101111111011001010111000011000 reconsidered 00000000000000000000000000000000 Magnin 00100000000000000000000000000000 20.4 00000000000000000000000000000000 recounts 00000011010011100011000000010010 Counting 00100000000111001000100000110010 importers 00000000000111100100010000110011 discontinuing 00000000000000000000000000000000 Orioles 00100000000000000000000000000000 reseller 00000000000000000000000000000000 14.9 00000000000000000000000000000000 low-margin 00000000000000000000000000000000 8.125 00000000000000000000000000000000 seminar 00000000000100111011001011100111 25.2 00000000000000000000000000000000 BIP 01000000000000000000000000000000 2.40 00000000000000000000000000000000 Berliner 00100000000000000000000000000000 abating 00000000000000000000000000000000 Off 00100000000000000000101100110010 Drake 00100000000000001000010000001000 finest 00000000000000000111110011010000 N.H 01000000000000000000000000000000 closed-door 00000000000000000000000000000000 sins 00000000000111100100111101100011 Butterfinger 00100000000000000000000000000000 aspiring 00000000000000110101101000110000 LifeSavers 01000000000000000000000000000000 sidewalks 00000000000000000000000000000000 Gerry 00101111111111100000000100001000 Gerstner 00100000000000000000000000000000 Aid 00100000000111100100001100100111 Continuing 00100000000000000000010001000000 15.1 00000000000000000000000000000000 Hershey 00100000000111000011000100101000 LDI 01000000000000000000000000000000 chairmanship 00000000000110101111110001100111 53.9 00000000000000000000000000000000 Sonata 00100000000000000000000000000000 IDS 01000000000000000000000000000000 Greenfield 00101111111100100011000010001000 tile 00000000000010100100001000100001 golf-ball 00000000000000000000000000000000 RCA 01000000000000000000000000000000 overcharged 00000110101011010100010000110010 Qantas 00100000000000000000000000000000 Shuman 00100000000000000000000000000000 Oncotech 00100000000000000000000000000000 2036 00000000000000000000000000000000 estates 00000000000111110011110001100011 boilers 00000000000000000000000000000000 rekindle 00000000000000000000000000000000 panicked 00000000001010001001101001000000 worsened 00000000000101011010110000110010 42.9 00000000000000000000000000000000 Triad 00100000000000000001100110101000 Non-performing 00100000000000000000000000000000 developing-nation 00000000000000000000000000000000 evaluations 00000000000011110010001000100011 Tatzel 00100000000000000000000000000000 contingency-fee 00000000000000000000000000000000 Reduction 00100000000111101111101010100111 Election 00100000000000000010010001100111 mayoralty 00000000000000000000000000000000 Norwalk 00100000000000111011101001101000 Leibler 00100000000000000000000000000000 63-year-old 00000000000000000000000000000000 Agnew 00101111111000000010001010001000 Huber 00101111111100110010100010001000 enzymes 00000000000000000000000000000000 Mulhouse 00100000000000000000000000000000 Units 00100000000000000000010000001001 Mineworkers 00100000000000000000000000000000 Striking 00100000000010000001000010010000 twisting 00000000000110101001110001000000 Gelb 00100000000000000000000000000000 satisfactorily 00000000000000000000000000000000 91-day 00000000000000000000000000000000 37.6 00000000000000000000000000000000 Espy 00100000000000000000000000000000 Colin 00101111111000000011010110011000 Tunica 00100000000000000000000000000000 194 00000000000000000000000000000000 Lamm 00100000000000000000000000000000 fatality 00000000000111111100010011000111 182-day 00000000000000000000000000000000 7.962 00000000000000000000000000000000 Newbridge 00100000000000000000000000000000 phosphide 00000000000000000000000000000000 phosphine 00000000000000000000000000000000 amateur 00000000000000000111101000110000 fumigants 00000000000000000000000000000000 buckled 00000000000000000000000000000000 warranties 00000000000100001001001100000011 Calderon 00100000000000000000000000000000 crutches 00000000000000000000000000000000 Loews 00100000000111110100111100101000 surreal 00000000000000000000000000000000 Lite 00101111111011000110000000101001 OCR 01000000000000000000000000000000 Elkus 00100000000000000000000000000000 Chappell 00100000000001110100001000001000 ballets 00000000000000000000000000000000 ballet 00000000000011001101001100100001 tenant 00000000000111101110111000100001 outbid 00000000000000111010010110110010 405 00000000000000000000000000000000 Tewary 00100000000000000000000000000000 mid-afternoon 00000000000000000000000000000000 119.88 00000000000000000000000000000000 2,002 00000000000000000000000000000000 spins 00000000000000000000000000000000 miscarriages 00000000000000000000000000000000 Clothing 00100000000011000011111010110000 Baa-1 00100000000000000000000000000000 Responses 00100000000111001001101000100011 pollsters 00000000000000101101100110110011 cessation 00000000000000000000000000000000 Opportunity 00100000000111111111101100100111 Dash 00100000000000100100000001000111 9.625 00000000000000000000000000000000 Lemon 00100000000110001010001000110000 inserts 00000000000000000000000000000000 cuckoo 00000000000000000000000000000000 free-standing 00000000000000000000000000000000 nests 00000000000000000000000000000000 Shortridge 00100000000000000000000000000000 acceptances 00000000000001010101010001001000 Help 00100000000000000001110110110010 tricks 00000000000110111110010101100011 Umkhonto 00100000000000000000000000000000 Holston 00100000000000000000000000000000 Kwan 00100000000000000000000000000000 Seattle-based 00100000000000000000000000000000 Turtles 00100000000000000000000000000000 Ninja 00100000000000000000000000000000 excite 00000000000000000000000000000000 Gear 00100000000111101000011001001001 Rattner 00100000000000000000000000000000 weakens 00000000101110000011000000010010 raft 00000000000111111100010101111111 uranium-recovery 00000000000000000000000000000000 Fenerty 00100000000000000000000000000000 Team 00100000000111100111110100000001 Jaworski 00100000000000000000000000000000 Goldfein 00100000000000000000000000000000 dormant 00000000000011001111110110010000 eclipse 00000000000000000000000000000000 Kuhn 00101111111100110001110001001000 Mitsotakis 00100000000000000000000000000000 Ritterman 00100000000000000000000000000000 Soap 00100000000011000010101100100001 Taurus 00100000000010001010100001100001 displaced 00000000010110010001110000110010 exploited 00000011010111010100010000110010 trainers 00000000000000000000000000000000 Sands 00100000000111000111110100100001 Aermacchi 00100000000000000000000000000000 AGF 01000000000000000000000000000000 Aspen 00100000000111011100110100101000 underdeveloped 00000000000011111011110001000000 Fitchburg 00100000000000000000000000000000 look-alike 00000000000000000000000000000000 Kitamura 00100000000000000000000000000000 Iken 00100000000000000000000000000000 Nedelya 00100000000000000000000000000000 Lutsenko 00100000000000000000000000000000 Fleckenstein 00100000000000000000000000000000 crippling 00000000000001010100011000010000 Wilber 00100000000000000000000000000000 GI 01000000000000000000000000000000 Savoca 00100000000000000000000000000000 Thames 00100000000000000000000000000000 tracing 00000000001011001010110001000000 commodity-chemical 00000000000000000000000000000000 high-ranking 00000000000000000000000000000000 shrinks 00000000000000101000001000110010 sprung 00000000001100111011001000110010 exacerbates 00000000000000000000000000000000 litigants 00000000000111110010000110110011 Etzioni 00100000000000000000000000000000 violently 00000000000000000000000000000000 portables 00000000000000000000000000000000 left-wing 00000000000000000000000000000000 Harrisburg 00100000000000000000000000000000 Ahold 00100000000000011010111100101000 Vitarine 00100000000000000000000000000000 spooks 00000000000000000000000000000000 Nesbit 00100000000000000000000000000000 deadlocked 00000000101001110100010000110010 Curzio 00100000000000000000000000000000 Bowman 00101111111010100100000010001000 Whereas 00100000000111111001101001000010 briefed 00000000001100101101010000110010 HN 01000000000000000000000000000000 dancer 00000000000110101001011110110101 sitcoms 00000000000000000000000000000000 tremendously 00000000100001101000000001110010 carcinogenic 00000000000000000000000000000000 outlay 00000000000100001101101010001111 Bayer 00100000000111111011011100101000 focal 00000000000000000000000000000000 Wyse 00100000000110101100100100101000 origin 00000000000111110111101001100111 tick 00000000000000000000000000000000 Atherton 00100000000000000000000000000000 Amos 00100000000000000000000000000000 PacifiCare 01000000000000000000000000000000 repudiate 00000000000000000000000000000000 rug 00000000000000110110111000000001 polyurethane 00000000000000000000000000000000 2.61 00000000000000000000000000000000 N.M 01000000000000000000000000000000 Justices 00100000000000001000100110110011 AIM 01000000000111111100111010110111 coolants 00000000000000000000000000000000 414 00000000000000000000000000000000 computer-market 00000000000000000000000000000000 landlords 00000000000001011100111000110011 Peoria 00100000000011011011101001101000 molecules 00000000000111101110100110001001 Babylonian 00100000000000000000000000000000 Relational 00100000000000000000000000000000 3,200 00000000000000000000000000000000 Riccardo 00100000000000000000000000000000 A-body 00100000000000000000000000000000 air-conditioned 00000000000000000000000000000000 passions 00000000000011100100111101100011 Seelenfreund 00100000000000000000000000000000 Sheldon 00101111111000100101100010011000 erect 00000000010001101111101110110010 4.65 00000000000000000000000000000000 698 00000000000000000000000000000000 wheat-growing 00000000000000000000000000000000 Cossiga 00100000000000000000000000000000 Fortney 00100000000000000000000000000000 superconcentrates 00000000000000000000000000000000 superconcentrated 00000000000000000000000000000000 Shamrock 00101111011111101000100100101000 851 00000000000000000000000000000000 distort 00000000001001111011111110110010 Atco 00100000000000000000000000000000 Otradovec 00100000000000000000000000000000 850,000 00000000000000000000000000000000 shopping-center 00000000000000000000000000000000 Birtcher 00100000000000000000000000000000 Surprisingly 00100000000111001100000001110010 144.17 00000000000000000000000000000000 1.9083 00000000000000000000000000000000 Rudnick 00100000000000000000000000000000 Microdyne 00100000000000000000000000000000 Gruntal 00101111111011010111111010101000 Equity-Income 01000000000000000000000000000000 chef 00000000000001011010011110110101 Awad 00100000000000000000000000000000 BMP 01000000000000000000000000000000 Latchford 00100000000000000000000000000000 compositions 00000000000000000000000000000000 spaces 00000000000010110000110100100011 froth 00000000000111101111010100100111 Marilyn 00100000000011110000001000011000 Conde 00101111111111000011001000101000 bulging 00000000000000001010101001000000 myth 00000000000111000101111101100111 Attempts 00100000000111111011011100100111 Nast 00101111111000111010010001001000 thumbs 00000000000000000000000000000000 absenteeism 00000000000111111111111100000111 Zhang 00100000000000000000000000000000 17,500 00000000000000000000000000000000 Timex 00100000000000000000000000000000 Bidermann 00100000000000000000000000000000 cuisine 00000000000011011010110100000001 vanilla 00000000000100101010101100100001 Regan 00101111111100011100010010001000 teeming 00000000000000000000000000000000 lengths 00000000000111011111001000100011 chess 00000000000000001100001100100001 maneuvered 00000000000000000000000000000000 mediation 00000000000000101010100101100101 Perkin-Elmer 01000000000000000000000000000000 impasse 00000000000111111011101000100111 brokered 00000000000111010000011100010000 bees 00000000000111111000100000110011 i860 00000000000000000000000000000000 flair 00000000000111101000111010110101 anticompetitive 00000000000000000000000000000000 Halsey 00100000000000000000000000000000 Birkel 00100000000000000000000000000000 Gatoil 00100000000000000000000000000000 Bogota 00100000000000000000000000000000 monochrome 00000000000000000000000000000000 bishop 00001111111101011010000000001000 ADT 01000000000000000000000000000000 BMA 01000000000000000000000000000000 102.06 00000000000000000000000000000000 1987-style 00000000000000000000000000000000 shareholder-rights 00000000000000000000000000000000 Nobuto 00100000000000000000000000000000 416,290,000 00000000000000000000000000000000 awash 00000000000111101110010000110010 VA 01000000000000000000000000000000 localities 00000000000111101111010010110011 Tests 00100000000101101010001000100011 Something 00100000000000000010010001110010 dishwasher 00000000000000000000000000000000 Evening 00100000000000001000110000010111 Bluefield 00100000000000000000000000000000 Lurie 00101111111110001000000010001000 Seafirst 00100000000100111100111100101000 46.3 00000000000000000000000000000000 brandy 00000000000000000000000000000000 dispute-settlement 00000000000000000000000000000000 Spirits 00100000000011011011111010110000 2163.4 00000000000000000000000000000000 Bergen 00100000000001001010011010101000 Alcohol 00100000000010000011110000100001 rum 00000000000000000000000000000000 cost-control 00000000000000000000000000000000 Palamara 00100000000000000000000000000000 4.17 00000000000000000000000000000000 folklore 00000000000000000000000000000000 Suntory 00100000000011111010111100101000 Kirin 00100000000000000000000000000000 chords 00000000000000000000000000000000 Starkov 00100000000000000000000000000000 fireproofing 00000000000000000000000000000000 Afanasyev 00100000000000000000000000000000 Fakty 00100000000000000000000000000000 Argumenty 00100000000000000000000000000000 sacks 00000000000000000000000000000000 6.03 00000000000000000000000000000000 4.56 00000000000000000000000000000000 arrears 00000000000111111111001100000011 47.1 00000000000000000000000000000000 sawmill 00000000000000000000000000000000 Talbot 00101111111101111101110001001000 Rehabilitation 00100000000000000011001101100001 Sterba 00100000000000000000000000000000 Centennial 00100000000000001010111010101000 51.6 00000000000000000000000000000000 loan-guarantee 00000000000000000000000000000000 52.7 00000000000000000000000000000000 1.8655 00000000000000000000000000000000 141.50 00000000000000000000000000000000 Auditorium 00100000000111001001011001100111 Mondays 00100000000111010011101001100010 unofficially 00000000000000000000000000000000 Ballet 00100000000011001101001100100001 forceful 00000000000000111001000010010000 M4 00100000000000000000000000000000 Tegal 00100000000000000000000000000000 Scherer 00100011111101111100110000001000 glitches 00000000000111001100011000100011 palms 00000000000000000000000000000000 Au 00100000000111100011001101110000 outstripping 00000000000000000000000000000000 Rehnquist 00101111111000001100111010001000 aisle 00000000000000000000000000000000 186 00000000000000000000000000000000 previous-year 00000000000000000000000000000000 heralded 00000001011001101100010000110010 pinched 00000000000000000000000000000000 222.875 00000000000000000000000000000000 Fourth 00100000000000000011011011010000 Feinman 00100000000000000000000000000000 Derr 00100000000000000000000000000000 mechanically 00000000000000000000000000000000 bites 00000000001101001111000000010010 Wal-Mart 01000000000000000000000000000000 322 00000000000000000000000000000000 exhaust 00000000000111110001110110110111 4.76 00000000000000000000000000000000 MacInnis 01000000000000000000000000000000 Massage 00100000000000000000000000000000 2029 00000000000000000000000000000000 coercion 00000000000101011011110010100111 Humphrey 00101111111110100000000100001000 137 00000000000000000000000000000000 ventilated 00000000000000000000000000000000 grand-jury 00000000000000000000000000000000 soot 00000000000000000000000000000000 3.30 00000000000000000000000000000000 Kenyon 00101111111111001111101001001000 b 00000000000000000000000000000000 Crary 00100000000000000000000000000000 plastic-bodied 00000000000000000000000000000000 transferable 00000000000000000000000000000000 Kingston 00100000001100011011101001101000 recombinant 00000000001000101100101010110000 Compound 00100000000111000001001010110111 UGI 01000000000000000000000000000000 viewer 00000000000010000110111000100001 chop 00000000000000000000000000000000 greatness 00000000000000000000000000000000 sizzling 00000000000011111100100000010000 IPOs 01000000000000000000000000000000 postponing 00000000000011001011111101000000 R.P. 01000000000000000000000000000000 Kossuth 00100000000000000000000000000000 Dreman 00101111111011010000110010001000 induced 00000000001110011000110000110010 mute 00000000000000000000000000000000 7.458 00000000000000000000000000000000 dictation 00000000000000000000000000000000 Alcoa 00100000000010000100111100101000 Helionetics 00100000000000000000000000000000 simulators 00000000000000010000111001110011 curators 00000000000000000000000000000000 mastered 00000000000011111100010000110010 Brenda 00101111111001010000001000011000 less-profitable 00000000000000000000000000000000 cachet 00000000000111101101001110100111 toes 00000000000110101101111101100011 Payson 00100000000000000000000000000000 subtract 00000000000000000000000000000000 -one 00000000000000000000000000000000 triple-A-rated 01000000000000000000000000000000 Malizia 00100000000000000000000000000000 Kristol 00101111111100110001000010001000 7.272 00000000000000000000000000000000 Geiger 00100000000000000000000000000000 Raeder 00100000000000000000000000000000 internally 00000000001000100100010001110010 picocassette 00000000000000000000000000000000 microcassette 00000000000000000000000000000000 distributable 00000000000000000000000000000000 McCraw 01000000000000000000000000000000 money-fund 00000000000000000000000000000000 41.4 00000000000000000000000000000000 Dalai 00100000000111001101100011010000 Peterpaul 00100000000000000000000000000000 second-worst 00000000000000000000000000000000 sift 00000000000000000000000000000000 descent 00000000000110010111101001100111 liftoff 00000000000000000000000000000000 35-year-old 00000000000000000000000000000000 depths 00000000000111100111111000001111 Monsky 00101111011001001100000010001000 deflated 00000000000000000000000000000000 Citadel 00100000000100101011000100101000 tempt 00000000000000111011101110110010 eats 00000011010110000011000000010010 Hard 00100000000000000000111110010000 Oncor 00100000000000000000000000000000 sticky 00000000001110011110011010010000 L.L. 01000000000000000000000000000000 smartest 00000000000000000000000000000000 arb 00000000000011000001011001100111 extinguish 00000000000000000000000000000000 blink 00000000000110101101001010110111 bottomed 00000000001111101001001000110010 Biny 00100000000000000000000000000000 downsizing 00000000000010011110011010100111 invaded 00000010111011000101010000110010 Johnstown 00100000000000000000000000000000 44.5 00000000000000000000000000000000 38.4 00000000000000000000000000000000 investigates 00000000000000000000000000000000 Wiedemann 00100000000000000000000000000000 Redfield 00100000000000000000000000000000 guts 00000000000100110111110100100111 ABC-TV 01000000000000000000000000000000 Biondi 00101111111011111100000010001000 Living 00100000000011000001000001000000 substituting 00000000000111100001111101000000 Rosenbach 00100000000000000000000000000000 213 00000000000000000000000000000000 glycols 00000000000000000000000000000000 sleazy 00000000001110011100011010010000 shampoo 00000000011101101011111010110000 retribution 00000000000000000000000000000000 Cuomo 00101111111100100000101010001000 526 00000000000000000000000000000000 biting 00000000000001011010100001000000 bats 00000000000000000000000000000000 securities-law 00000000000000000000000000000000 multi-crystal 00000000000000000000000000000000 Arpanet 00100000000000000000000000000000 abrasive 00000000000001001110110100010000 felon 00000000000000000000000000000000 penny-stock 00000000000000000000000000000000 drugstores 00000000000110001001111001100011 Campo 00100000000000000000000000000000 217 00000000000000000000000000000000 defied 00000000000000101001010000110010 box-office 00000000000000000000000000000000 Cunin 00100000000000000000000000000000 sails 00000000000000000000000000000000 -if 00000000000000000000000000000000 Oversight 00100000000101101100100011100001 Kandahar 00100000000000000000000000000000 brigade 00000000000001010111101001100111 Sovran 00100000000000000000000000000000 fountain 00000000000111010110011010101000 SBA 01000000000000000000000000000000 Disneyland 00100000000111110000101100100001 trappings 00000000000000000000000000000000 1.57 00000000000000000000000000000000 RICOed 01000000000000000000000000000000 peril 00000000000111110100110101100111 wished 00000000000100111011101000110010 forfeitures 00000000000000000000000000000000 now-standard 00000000000000000000000000000000 stationery 00000000000101101011111010110000 overreacted 00000000000000000000000000000000 60.25 00000000000000000000000000000000 Bike 00100000000000101100001000100001 staunch 00000000000001001100011000010000 extort 00000000000000000000000000000000 Biking 00100000000000000000000000000000 anti-bike 00000000000000000000000000000000 artifacts 00000000000000000000000000000000 terror 00000000000011101001110010100111 19-month-old 00000000000000000000000000000000 rangers 00000000000000000111101010101000 47,000 00000000000000000000000000000000 clutching 00000000000000000000000000000000 Gorman 00100000000000000000000000000000 Archer-Daniels-Midland 01000000000000000000000000000000 strengthens 00000110001110000011000000010010 shine 00000000000110100010100110110111 reaffirmed 00000000000111101011111001000000 uniforms 00000000000110011110010101100011 embrace 00000000001001111111110110110010 blends 00000000000000000000000000000000 Masahiro 00100000000000000000000000000000 Gaskin 00100000000000000000000000000000 recouped 00000000010111000100010000110010 newscast 00000000000000000000000000000000 line-up 00000000000000000000000000000000 animated 00000000000000101000110100010000 satirical 00000000000000000000000000000000 RBS 01000000000000000000000000000000 Wald 00100000000000000000000000000000 Yoneyama 00101111010010010100000010001000 Upon 00100000000001000001000000001010 161.5 00000000000000000000000000000000 detriment 00000000000111011011011000001111 Smale 00100000000000000000000000000000 Womack 00100000000000000000000000000000 220,000 00000000000000000000000000000000 NCI 01000000000000000000000000000000 well-balanced 00000000000000000000000000000000 insurance-company 00000000000000000000000000000000 impeccable 00000000000000000000000000000000 Whenever 00100000000011110110101001000010 blowing 00000000000101111110100001000000 Blandon 00100000000000000000000000000000 title-insurance 00000000000000000000000000000000 rigors 00000000000111111110011100001111 single-B-1 01000000000000000000000000000000 single-B 01000000000000000000000000000000 factoring 00000000000010101011111010110000 Wittgreen 00100000000000000000000000000000 25-year-old 00000000000000000000000000000000 151 00000000000000000000000000000000 8.22 00000000000000000000000000000000 off-exchange 00000000000000000000000000000000 achievements 00000000000111101111011101100011 five-hour 00000000000000000000000000000000 G-2 00100000000000000000000000000000 single-B-plus 01000000000000000000000000000000 cache 00000000000000000000000000000000 Ifint 00100000000000000000000000000000 tenth 00000000000111111110100101111111 Chiriqui 00100000000000000000000000000000 relayed 00000000000000000000000000000000 8.56 00000000000000000000000000000000 decries 00000000000000000000000000000000 Cullinet 00100000000101100000100100101000 Matagorda 00100000000000000000000000000000 turnabout 00000000000000000000000000000000 columnists 00000000000000000000000000000000 paralysis 00000000000100110111110010100111 outlawing 00000000000000000000000000000000 Lopid 00100000000000000000000000000000 mandating 00000000110010010000000000001010 rescinding 00000000000000000000000000000000 fore 00000000000000000000000000000000 clamp 00000000000000000000000000000000 24.875 00000000000000000000000000000000 Balcor 00100000000011111111111100101000 Carlyle 00100000000101110011010100101000 Carlucci 00101111111010001000001010001000 Prop. 00100000000000000000000000000000 corridor 00000000000100001001111000000001 Tait 00100000000000000000000000000000 firefighters 00000000000000011101111000110011 Atari 00100000000000100011111100101000 misrepresentation 00000000000110100011100010100111 272,000 00000000000000000000000000000000 99.1875 00000000000000000000000000000000 Pty. 00100000000000000000000000000000 8.95 00000000000000000000000000000000 Obermaier 00100000000000000000000000000000 Lombardo 00100000000000000000000000000000 Edelstein 00100000000000000000000000000000 undertakings 00000000000000000000000000000000 Postels 00100000000000000000000000000000 Gutfreunds 00100000000000000000000000000000 4.67 00000000000000000000000000000000 Postel 00100000000000000000000000000000 lends 00000000011110000011000000010010 floated 00000000000000011100010000110010 Relocation 00100000000111110011001001100001 borrows 00000000000101011101000000010010 lowly 00000000000000000000000000000000 refiner 00000000000111110111110001111001 37.1 00000000000000000000000000000000 Coal 00100000000001000100011010110000 Reedy 00100000000000000000000000000000 Berthold 00100000000000000000000000000000 6.15 00000000000000000000000000000000 Egnuss 00100000000000000000000000000000 2.21 00000000000000000000000000000000 100-stock 00000000000000000000000000000000 Unitrode 00100000000000000000000000000000 AVX 01000000000000000000000000000000 Transgenic 00100000000000000000000000000000 wrecking 00000000000000000000000000000000 Worcester 00100000000110111000101001101000 8.90 00000000000000000000000000000000 Amstrad 00100000000000000000000000000000 959.3 00000000000000000000000000000000 88.12-point 00000000000000000000000000000000 647.33 00000000000000000000000000000000 65.7 00000000000000000000000000000000 222 00000000000000000000000000000000 up-or-down 00000000000000000000000000000000 2.57 00000000000000000000000000000000 Impact 00100000000111111111101110001111 100.4 00000000000000000000000000000000 Hartt 00100000000000000000000000000000 7.227 00000000000000000000000000000000 Permanente 00100000000000000000000000000000 9.39 00000000000000000000000000000000 Eward 00100000000000000000000000000000 Pepper 00100000000111101100111010001000 experimented 00000000010010110110010000110010 extradited 00000000000000000000000000000000 headway 00000000000000110110110100100111 fluctuate 00000000010001111101010110110010 Trustco 00100000000000010010010001001000 Kerschner 00100000000000000000000000000000 9.06 00000000000000000000000000000000 payola 00000000000000000000000000000000 B.F. 01000000000000000000000000000000 deplorable 00000000000000000000000000000000 Boehringer 00100000000000000000000000000000 oak 00000111001100001110011010101000 178 00000000000000000000000000000000 nicknames 00000000000000000000000000000000 Lenny 00100000000000000000000000000000 superintendents 00000000000000000000000000000000 uninvited 00000000000010110001110100010000 Homecoming 00100000000000000000000000000000 Pinter 00100000000000000000000000000000 overboard 00000000000000010010111100110010 shapes 00000000001111001111000000010010 unrealized 00000000000000000110000101010000 Diaper 00100000000000100101011010110000 loves 00000000100101100011000000010010 flashing 00000000000100010110100001000000 hoarding 00000000000000000000000000000000 withstood 00000000000000000000000000000000 quo 00000000000000000100000001111001 gouging 00000000000000000000000000000000 liver 00000000000100001100101011100001 Moleculon 00100000000000000000000000000000 Jelenic 00100000000000000000000000000000 cloth 00000000000011100101110000100001 Safra 00101111111010100010101010001000 snatched 00000000000000000000000000000000 galleries 00000000000010111001110101100011 Irises 00100000000000000000000000000000 landfills 00000000000100110111110001100011 253 00000000000000000000000000000000 upshot 00000000000111111001110000001111 imaging 00000000000000000001100001100001 Emma 00100000000000000000000000000000 intrigue 00000000000100001010111010100111 restructures 00000000000000000000000000000000 Figgie 00101111111100111100111000101000 Controls 00100000000010000111000000010010 Faulding 00100000000000000000000000000000 720,000 00000000000000000000000000000000 resonance 00000000000101001101001111001001 Treasure 00100000000111000100101100100001 Hogan 00101111111111111101001000001000 Toussie 00100000000000000000000000000000 low-budget 00000000000000000000000000000000 846 00000000000000000000000000000000 uncharacteristically 00000000000000000000000000000000 Tacoma 00100000000111000100101001101000 beloved 00000000000000000000100010010000 Drago 00100000000000000000000000000000 rush-hour 00000000000000000000000000000000 double-decking 00000000000000000000000000000000 dismissing 00000000000000101100001101000000 TECHNOLOGY 01000000000001010100111010110000 inserting 00000000000000000000000000000000 minority-owned 00000000000000000000000000000000 399 00000000000000000000000000000000 SYSTEMS 01000000000001000000000001001001 Francois-Poncet 01000000000000000000000000000000 notoriously 00000000000111101100000001110010 153 00000000000000000000000000000000 Scotts 00100000000000000000000000000000 Lott 00100000000000000000000000000000 610 00000000000000000000000000000000 installments 00000000000110000011100011000111 6,500 00000000000000000000000000000000 fiber-optic 00000000000000000000000000000000 bailed 00000000000111011101001000110010 Lenders 00100000000111111110010000110011 Platinum 00100000000110111111101110110000 converters 00000000000000000000000000000000 philosophies 00000000000000000000000000000000 mitigate 00000000001110010111111110110010 Sasea 00100000000000000000000000000000 Tartan 00100000000000000000000000000000 Ikegai-Goss 01000000000000000000000000000000 illiquid 00000000000000000000000000000000 sturdy 00000000000010011110011010010000 7.81 00000000000000000000000000000000 Starting 00100000000110011100111000110010 coupon-equivalent 00000000000000000000000000000000 smack 00000000000000000000000000000000 receptive 00000000000011111110011110010000 GDR 01000000000000000000000000000000 kinder 00000000000111111011011010010000 A&M 01000000000000000000000000000000 163-member 00000000000000000000000000000000 moniker 00000000000000000000000000000000 prince 00000000000111111011111100001000 Patients 00100000000000100000011100110011 spotting 00000000000000000000000000000000 terrifying 00000000000000000000000000000000 crisis-management 00000000000000000000000000000000 emigres 00000000000000000000000000000000 double-deck 00000000000000000000000000000000 absorbs 00000000000000000000000000000000 Graeme 00100000000000000000000000000000 15.75 00000000000000000000000000000000 Libor 00100000000111110001001010101000 gloves 00000000000001111001110101100011 catapult 00000000000000000000000000000000 Reilly 00101111111100101000000010001000 Hoyt 00100000000000000000000000000000 2.51 00000000000000000000000000000000 dent 00000000000111101000111000110111 Folgers 00100000000000000000000000000000 BBDO 01000000000000000000000000000000 Loom 00100000000001101101001010110111 devotion 00000000000111100101111100100111 Plummer 00100000000000000000000000000000 598 00000000000000000000000000000000 tallest 00000000000000000000000000000000 Creative 00100000000001001010000000110000 44.125 00000000000000000000000000000000 eyeing 00000000000000000000000000000000 persisted 00000000010100000110001000110010 Knudsen 00101111111011101101010000101001 Atkinson 00101111111100011101001000001000 86.50 00000000000000000000000000000000 breach-of-contract 00000000000000000000000000000000 580 00000000000000000000000000000000 rerouting 00000000000000000000000000000000 AEG 01000000000000000000000000000000 million-a-year 00000000000000000000000000000000 29.6 00000000000000000000000000000000 bystanders 00000000000000000000000000000000 untold 00000000000000000000000000000000 Jazz 00100000000010010000001100100001 Photography 00100000000111100110001101100001 all-white 00000000000000000000000000000000 deaf 00000000000011000110011010010000 Ottoman 00100000000000000000000000000000 Marysville 00100000000111101111101001101000 Diamond-Star 01000000000000000000000000000000 microscopic 00000000000001111000001000110000 14th 00000000000000000000000000000000 Breene 00100000000000000000000000000000 acrimony 00000000000000000000000000000000 1.92 00000000000000000000000000000000 anecdotal 00000000000000000000000000000000 9.33 00000000000000000000000000000000 Money-fund 00100000000000000000000000000000 Bonfire 00100000000000000000000000000000 Vanities 00100000000000000000000000000000 Bright 00100000000000010101011010010000 Proteins 00100000000110011001111001100011 fiberglass 00000000010110000100011010110000 liquefy 00000000000000000000000000000000 Beau 00100000000000000000000000000000 396,000 00000000000000000000000000000000 seductive 00000000000000000000000000000000 Ballhaus 00100000000000000000000000000000 establishments 00000000000100000111110001100011 cooked 00000000110101001100010000110010 pondering 00000000000010100010010101000000 bribing 00000000000000000000000000000000 undamaged 00000000000000000000000000000000 bogged 00000000000110101001001000110010 Bears 00100000000100100111000000010010 Appleyard 00100000000000000000000000000000 15.8 00000000000000000000000000000000 research-and-development 00000000000000000000000000000000 76.5 00000000000000000000000000000000 Savageau 00100000000000000000000000000000 Bosch 00100000000111111100111010001000 mysteriously 00000000000000000000000000000000 Sleeping 00100000000000000011000001000000 Andre 00101111111000001110000010011000 herds 00000000000111011111111101100011 Additional 00100000000000000000100100010000 Diamandis 00100000000000000000000000000000 mishandled 00000000000011110101101001000000 washed 00000000010110101001001000110010 Datatronic 00100000000000000000000000000000 multilateral 00000000000111110010000000110000 Roulac 00100000000000000000000000000000 43-year-old 00000000000000000000000000000000 hemoglobin 00000000000000000000000000000000 APPLE 01000000000111101110100100101000 Mastro 00100000000000000000000000000000 Bilzerian 00101111111100101101110010001000 ballots 00000000000001100111000001100011 magistrate 00000000000000000101001100001000 Neptune 00100000000000000000000000000000 confidant 00000000000111100110101100111111 plutonium 00000000000000111010110000100001 Jovian 00100000000000000000000000000000 moons 00000000000000000000000000000000 wealthiest 00000000000011010011110011010000 Butz 00100000000000000000000000000000 murderer 00000000000000000000000000000000 Barrier 00100000000111001101111101100111 inmate 00000000000000010111100000110101 Pettee 00100000000000000000000000000000 nationalist 00000000000101000001011000110000 Payne 00101111110100110101001000001000 entrust 00000000000000000000000000000000 Varian 00100000000000000010110000001000 flier 00000000000000010000111101100111 27.8 00000000000000000000000000000000 brewers 00000000000111001010000001110011 Allied-Lyons 01000000000000000000000000000000 Angola 00100000000111101101011101101000 Krat 00100000000000000000000000000000 rails 00000000000000000000000000000000 5.27 00000000000000000000000000000000 unharmed 00000001111001110100010000110010 Prideaux 00100000000000000000000000000000 Cessna 00100000000000000000000000000000 laced 00000000001010110101100000110010 51.1 00000000000000000000000000000000 fetuses 00000000000010000110011100110011 health-conscious 00000000000000000000000000000000 parental-consent 00000000000000000000000000000000 Secaucus 00100000000111011011101001101000 reassess 00000000000000000000000000000000 stirring 00000000000011100110100001000000 Leche 00100000000000000000000000000000 Fresca 00100000000000000000000000000000 short-run 00000000000000000000000000000000 butterfat 00000000000000000000000000000000 Gras 00101111111000001001101100100101 fast-paced 00000000000000000000000000000000 comparative 00000000000010111010000000110000 ONE 01000000000000000000000000010100 'S 01000000000000000000000110000010 Jewelry 00100000010000001011111010110000 Makers 00100000000111100111100111110011 Copy 00100000000111111101111000111111 grips 00000000000001001001010110110010 Belmont 00100000000000000000000000000000 Desc 00100000000000000000000000000000 Affiliated 00100000000000100001100000110010 uninspired 00000000000000000000000000000000 augment 00000000000000000000000000000000 1,600 00000000000000000000000000000000 Crisco 00100000000000000000000000000000 1.51 00000000000000000000000000000000 Regalia 00101111111101000110001010001000 Accessories 00100000000111111111011111001001 Landesbank 00100000000000000000000000000000 Trifari 00100000000000000000000000000000 Monet 00100000000000000000000000000000 pirates 00000000000000000000000000000000 steadfastly 00000000000101100001001001110010 friction 00000000000110101110110000100111 stroll 00000000000000000000000000000000 jewels 00000000000111110110110101100011 contributors 00000000000111100011110000110011 perennial 00000000000001000100011000010000 Mame 00100000000000000000000000000000 doorway 00000000000000000000000000000000 cracking 00000000001111101110100001000000 gripping 00000000000000000000000000000000 Bolinas 00100000000000000000000000000000 checked 00000000110100001100010000110010 232.3 00000000000000000000000000000000 derail 00000000000101110011111110110010 79.4 00000000000000000000000000000000 26.3 00000000000000000000000000000000 motivate 00000000011100100011111110110010 Engine 00100000000001000010001010110000 third-period 00000000000000000000000000000000 Keller 00101111111000111110100010001000 counterclaim 00000000000000000000000000000000 computer-integrated-manufacturing 00000000000000000000000000000000 4.68 00000000000000000000000000000000 grapple 00000000000100001001010110110010 populations 00000000000101011100100000110011 spraying 00000000000000000000000000000000 dispersants 00000000000000000000000000000000 P 00100000000000011001011100110011 Meson 00100000000000000000000000000000 preposterous 00000000000001110101110110010000 Vic 00100000000000000000000000000000 Twenty-five 00100000000000000000000000000000 Beer 00100000000000111011111010110000 rejects 00000010000011100011000000010010 strife 00000000000111001011111010100111 Rex 00101111111011010100001000011000 Amtech 00100000000000000000000000000000 MD-80 01000000000000000000000000000000 elective 00000000000000000000000000000000 comrades 00000000000111000011110000110011 countermeasures 00000000000000000000000000000000 Aruba 00100000000000000000000000000000 comprising 00000000111010010000000000001010 non-accrual 00000000000000000000000000000000 Neave 00100000000000000000000000000000 compel 00000000000110011011101110110010 65-day 00000000000000000000000000000000 four-door 00000000000000000000000000000000 dismantled 00000010010011010100010000110010 40-year 00000000000000000000000000000000 takeoff 00000000000111100110000000100001 carbon-dioxide 00000000000000000000000000000000 Senshukai 00100000000000000000000000000000 cockpit 00000000000111010011110000000001 Rangel 00100000000000000000000000000000 chloride 00000000000011100011111001001001 reinforcements 00000000000000000000000000000000 carve 00000000000010001110101110110010 whipping 00000000000000000000000000000000 ignores 00000110110010000011000000010010 CompuServe 01000000000000000000000000000000 CDA 01000000000000000000000000000000 tax-preparation 00000000000000000000000000000000 Sol 00100000000000000000000000000000 producer-price 00000000000000000000000000000000 deeds 00000000000111100100010101100011 conferring 00000000000000000000000000000000 CSC 01000000000000000000000000000000 convenes 00000000000000000000000000000000 Examples 00100000000111100110100100101111 Mubarak 00101111110000001001110110001000 449.3 00000000000000000000000000000000 49-nation 00000000000000000000000000000000 Mitsuoka 00100000000000000000000000000000 20.2 00000000000000000000000000000000 -including 00000000000000000000000000000000 0.28 00000000000000000000000000000000 solicitations 00000000000111001010001000100011 2.82 00000000000000000000000000000000 2.86 00000000000000000000000000000000 Location 00100000000111011101001001100111 Renzas 00100000000000000000000000000000 Perkins 00101111111110111101001000001000 Dumez 00100000000000000000000000000000 well-servicing 00000000000000000000000000000000 auxiliary 00000000000000000000000000000000 gray-market 00000000000000000000000000000000 carved 00000000001101101001001000110010 wraps 00000000000000000000000000000000 Bateman 00100000000000000000000000000000 Chronicle 00100000000011101100111101110111 stately 00000000000000000000000000000000 graying 00000000000001111110101001000000 10.75 00000000000000000000000000000000 incentive-backed 00000000000000000000000000000000 Marinaro 00100000000000000000000000000000 banner 00000000000000000100100100100001 gentlemen 00000000000111100110011100110011 genocide 00000000000000000000000000000000 Mao 00100000000111101001000100001000 monastery 00000000000000000000000000000000 Rent 00100000000111011010100110110111 coordinates 00000000000000000000000000000000 heaved 00000000000000000000000000000000 gambler 00000000000111111110011111000101 Staar 00100000000000000000000000000000 automated-teller 00000000000000000000000000000000 Hayward 00100000000110110001101001101000 gravely 00000000000000000000000000000000 early-morning 00000000000000000000000000000000 begging 00000000000000100001110101000000 Departments 00100000000100110001110100100011 subvert 00000000000000000000000000000000 staffing 00000000000000001101100011100001 export-oriented 00000000000000000000000000000000 woods 00001111111101101101110001001000 self-proclaimed 00000000000000000000000000000000 193.3 00000000000000000000000000000000 Reidy 00101111101100001100000010001000 Ryan 00101111111111101100001000001000 5.39 00000000000000000000000000000000 Leach 00101111111011011101001000001000 compensatory 00000000000010010000011100010000 hurricanes 00000000000111110011110000110011 storms 00000000011110100111110101100011 maps 00000000000010001101110101100011 impeded 00000000000000000000000000000000 intolerably 00000000000000000000000000000000 Maloney 00100000000000000000000000000000 Deloitte-Touche 01000000000000000000000000000000 Covert 00100000000000011011110000110000 Fault 00100000000111110001110101100111 persona 00000000000000000000000000000000 hotly 00000000000101000111001001110010 allotment 00000000000100010100111001100111 tongue-in-cheek 00000000000000000000000000000000 452 00000000000000000000000000000000 Digate 00100000000000000000000000000000 Pinpoint 00100000000111100100011110110010 Amram 00100000000000000000000000000000 Directorate 00100000000000010001101100100101 personalized 00000000000000000000000000000000 Volokhs 00100000000000000000000000000000 sewage 00000000000000001000110000100001 muck 00000000000000000000000000000000 increments 00000000000111101100001100101111 137.4 00000000000000000000000000000000 pass-through 00000000000000000000000000000000 remotely 00000000001101101000000001110010 litmus 00000000000000000101110000100001 Eddy 00100000000000000000000000000000 inefficiencies 00000000000111011000011000100011 3.05 00000000000000000000000000000000 donnybrook 00000000000000000000000000000000 doubters 00000000000000000000000000000000 Zuckerman 00101111111101101100000010001000 translator 00000000000111101011011110110101 right-to-life 00000000000000000000000000000000 miserable 00000000000001001110011010010000 visa 00000000000001100010000000100001 co-workers 00000000000000000000000000000000 doll 00000000000000100000111000000001 inexperienced 00000000000111000100110100010000 piers 00000000000000000000000000000000 Strange 00100000000000001000011010010000 1957 00000000000000000000000000000000 Spoon 00100000000000000000000000000000 index-fund 00000000000000000000000000000000 Injury 00100000000000000011001100100111 765 00000000000000000000000000000000 Giffen 00100000000000000000000000000000 lamented 00000000000100010111110111000010 four-color 00000000000000000000000000000000 27.6 00000000000000000000000000000000 Numerous 00100000000000101001000011000000 Breakers 00100000000111111010011111010101 filtering 00000000000000000000000000000000 Jihad 00100000000000000000000000000000 785 00000000000000000000000000000000 Sluggish 00100000000000001011100000010000 13.35 00000000000000000000000000000000 Married 00100000001111110100010000110010 TVX 01000000000000000000000000000000 dislikes 00000000000000000000000000000000 Cristiani 00100000000000000000000000000000 rioting 00000000001111110111111010100111 gist 00000000000000000000000000000000 strongman 00000000000110101011000110110101 reservoir 00000000000101001001101010100111 Martinez 00101111111101011110101010001000 wandering 00000000110111000110100001000000 idiots 00000000000000000000000000000000 Duarte 00101111110000000000110110001000 Pascal 00100000000000000000000000000000 Gemina 00100000000000000000000000000000 Antonini 00100000000000000000000000000000 tailor-made 00000000000000000000000000000000 Steidtmann 00100000000000000000000000000000 off-price 00000000000000000000000000000000 134 00000000000000000000000000000000 Nahas 00100000000000000000000000000000 31.1 00000000000000000000000000000000 spares 00000000000000000000000000000000 Vector 00100000000000000000000000000000 Keizaikai 00100000000000000000000000000000 Shioya 00100000000000000000000000000000 Wah 00100000000000000000000000000000 formulating 00000000000011011101111101000000 1950 00000000000000000000000000000000 Ignatius 00100000000000000000000000000000 cooperatively 00000000000000000000000000000000 Sino-British 01000000000000000000000000000000 gravy 00000000000000000000000000000000 Juliano 00100000000000000000000000000000 Rivkin 00100000000000000000000000000000 Sherlund 00101111111101011100000010001000 62.8 00000000000000000000000000000000 Circulation 00100000000111110111100011000111 correlation 00000000000111000110110000100111 brokering 00000000000101101010110001000000 Mist 00100000000000000000000000000000 Gorillas 00100000000000000000000000000000 Boehm 00100000000000000000000000000000 cop 00000000000101110010011110110101 14,000 00000000000000000000000000000000 protocol 00000000000011010111101001100111 thunder 00000000000001011010011010101000 debt-equity 00000000000000000000000000000000 Sarah 00100000001011000010111000011000 countersued 00000000000000000000000000000000 smash 00000000000000000000000000000000 name-droppers 00000000000000000000000000000000 tantamount 00000000000101101100011000110010 performs 00000011010010000011000000010010 Dirks 00100000000000000000000000000000 Venezuelan 00100000000000110110100100110000 20s 00000000000000000000000000000000 Liza 00100000000000000000000000000000 praising 00000000000000011111001101000000 millionaires 00000000000000000000000000000000 multiply 00000000001000011110010110110010 soccer 00000000000000100000101100100001 perks 00000000000111111111010101100011 tonnage 00000000000000000000000000000000 Appalachia 00100000000000000000000000000000 1,620 00000000000000000000000000000000 irresistible 00000000000001000011001110010000 terse 00000000000000001110111000110000 impulse 00000000000110001111111001100111 Zalubice 00100000000000000000000000000000 MADD 01000000000000000000000000000000 Houston-Montgomery 01000000000000000000000000000000 Hughey 00100000000000000000000000000000 Bridget 00100000000000000000000000000000 raking 00000000000000000000000000000000 55.7 00000000000000000000000000000000 obstruction 00000000000111111010111000101111 ever-narrowing 00000000000000000000000000000000 Confair 00100000000000000000000000000000 superiority 00000000000011100111101001100111 Liquidity 00100000000000001010011010100111 Erie 00100000000111010001101001101000 3.03 00000000000000000000000000000000 comedian 00001111111100111111011110110101 Harley-Davidson 01000000000000000000000000000000 syndicating 00000000000000000000000000000000 co-head 00000000000000000000000000000000 crawl 00000000000111101000011000110111 Checchi 00101111111101100110110010001000 overlooking 00000000001000110000000000001010 politicized 00000000000000000000000000000000 Westin 00100000000000011000001000110000 Flynn 00101111111111111001000010001000 okay 00000000000111110011110110010000 Thal 00100000000000000000000000000000 masse 00000000001000000001110100100001 villages 00000000000110111011110001100011 Across 00100000000110100001000000001010 Winston 00101111111000010010111000011000 Dukakis 00101111111100101100101010001000 stacking 00000000000000000000000000000000 one-stop 00000000000000000000000000000000 Getty 00100000000111110110011000101000 Trenton 00100000000000000000000000000000 staffed 00000000000011100001110000110010 Ehman 00100000000000000000000000000000 Petronas 00100000000000000000000000000000 Pet 00100000010000010000001000110000 paid-up 00000000000000000000000000000000 WORKERS 01000000000000000000000000110011 finalized 00000000011010010010110000110010 6.07 00000000000000000000000000000000 Stock-market 00100000000000000000000000000000 state-appointed 00000000000000000000000000000000 colas 00000000000000000000000000000000 29.7 00000000000000000000000000000000 572 00000000000000000000000000000000 banana 00000000000011011101011000110000 Microwave 00100000000011000010101010110000 secretary-general 00000000000000000000000000000000 McGrath 01001111111101001011001000001000 7.84 00000000000000000000000000000000 soldier 00000000000111101111010010110101 recounted 00000000000000000000000000000000 unfinished 00000000000100011010101000110000 McBride 01000000000000000000000000000000 courtyard 00000000000000000000000000000000 lake 00000000001000001000011010101000 conceived 00000001101011000101010000110010 payoff 00000000000111011101111101100111 Westborough 00100000000000000000000000000000 generalize 00000000000000000000000000000000 Carder 00100000000000000000000000000000 maxim 00000000000000000000000000000000 34,000 00000000000000000000000000000000 USACafes 01000000000000000000000000000000 7.63 00000000000000000000000000000000 Knowlton 00101111111101010111110001001000 mainframe-class 00000000000000000000000000000000 1.81 00000000000000000000000000000000 Deerfield 00100000000000000000000000000000 196 00000000000000000000000000000000 peripherals 00000000000111101110110001001001 -such 00000000000000000000000000000000 summed 00000000000000000000000000000000 shipyards 00000000000110001110001001101001 bundles 00000000000000000000000000000000 Sagos 00100000000000000000000000000000 Lew 00101111111000010001000100001000 lords 00000000000111001101100010100111 Signore 00100000000000000000000000000000 foiled 00000000000000000000000000000000 Mattausch 00100000000000000000000000000000 notices 00000000000010001010001000100011 raping 00000000000000000000000000000000 double-edged 00000000000000000000000000000000 late-afternoon 00000000000000000000000000000000 injecting 00000000000000000000000000000000 tracts 00000000000111001011000100101111 finely 00000000000000000000000000000000 Schreibman 00100000000000000000000000000000 Furs 00100000000000000000000000000000 Accords 00100000000100101010010000100111 markkaa 00000000000000000000000000000000 53.1 00000000000000000000000000000000 careened 00000000000000000000000000000000 Lambda 00100000000000000000000000000000 300ZX 01000000000000000000000000000000 O'Donnell 01001111111110101000000010001000 HDTVs 01000000000000000000000000000000 Pao 00100000000000000000000000000000 routed 00000000000000000000000000000000 Motion 00100000000111011101001011100111 awry 00000000000000000000000000000000 expedited 00000000000000010010010100010000 Kollmorgen 00100000000000000000000000000000 Chris-Craft 01000000000000000000000000000000 470.80 00000000000000000000000000000000 antacid 00000000000000000000000000000000 shoulders 00000000000111101000111101100011 R 00100000000000000000000000000000 illnesses 00000000000111110010101010100011 infighting 00000000000111001110111010100111 variable-rate 00000000000000000000000000000000 illustrations 00000000000000000000000000000000 Helsinki 00100000001001000111111001101000 uninformed 00000000000000000000000000000000 drab 00000000000000000000000000000000 victimized 00000000000000000000000000000000 Chosen 00100000000101110010110000110010 bath 00000000000000111100100000100001 Soren 00100000000000000000000000000000 Blodgett 00100000000000000000000000000000 suckers 00000000000000000000000000000000 affirmative-action 00000000000000000000000000000000 budged 00000000111101000110001000110010 chic 00000000000001100110011010010000 insights 00000000000110001101110101100011 registrants 00000000000000000000000000000000 freshmen 00000000000000000000000000000000 post-1987 00000000000000000000000000000000 880,000 00000000000000000000000000000000 exempting 00000000000000000000000000000000 Yellow 00100000000010111010001000110000 citizenship 00000000000111100110110010100111 cooks 00000000000000000000000000000000 laborers 00000000000111110110100000110011 Amway 00100000000011011010111100101000 deceased 00000000000100111110101001000000 den 00000000000000000000000000000000 yacht 00000000000111000111101100100001 varieties 00000000000000010111000100101111 sideways 00000000000000101011111100110010 professions 00000000000111110110001010100011 catfish 00000000000111001000101100100001 soundness 00000000000111001111011000001111 zeros 00000000000000000000000000000000 Sinfonia 00100000000000000000000000000000 shocking 00000000001011100101010010010000 illegitimate 00000000000000001010101000110000 DeLay 01000000000111111100111000110111 flourished 00000000001101000110001000110010 roster 00000000000111110000100101100111 McClelland 01000000000000000000000000000000 entertain 00000000111011101111101110110010 stint 00000000000111111011101110100111 grandmother 00000000000111100110111110000001 restyled 00000000000000000000000000000000 Nichol 00100000000000000000000000000000 NASAA 01000000000000000000000000000000 28.1 00000000000000000000000000000000 fog 00000000000101010000110000000001 styling 00000000000000100111110010100111 wisely 00000000111001100001001001110010 pursuits 00000000000000000000000000000000 financial-planning 00000000000000000000000000000000 blind-sided 00000000000000000000000000000000 minicars 00000000000000000000000000000000 instructs 00000000000000000000000000000000 Limit 00100000000111111111110110110010 UP 01000000000000000000001100110010 sniffs 00000000000000000000000000000000 autograph 00000000000000000000000000000000 asphalt 00000000000000000000000000000000 Furniture 00100000000001000011111010110000 CalMat 01000000000111000101011100101000 Wolfe 00101111011101101100000010001000 Harty 00100000000000000000000000000000 differs 00000000000000010001100100110010 oversized 00000000001101010010101000110000 denounce 00000000011000100011111110110010 LME 01000000000000000000000000000000 slaughtered 00000000000000000000000000000000 fireworks 00000000001011000111110101100011 Livestock 00100000000001001111101110110000 hoard 00000000000100000001101010001111 disenchanted 00000000000101010101100000110010 commemorative 00000000000000000000000000000000 contradictions 00000000000110110111111010100111 conceding 00000000000111100001111010000010 2.70 00000000000000000000000000000000 sneaked 00000000000000000000000000000000 noncontract 00000000000000000000000000000000 watt 00001111111111000000001010001000 electrolytic 00000000000000000000000000000000 Purina 00101111111000100010010001001000 ADN 01000000000000000000000000000000 hills 00000000000000001100000010100101 749 00000000000000000000000000000000 lingerie 00000000000000000000000000000000 Miguel 00101111111000000000000000011101 microcomputer 00000000000000110101011010110000 Terra 00100000011000001111000100001000 Alusuisse 00100000000000000000000000000000 nowadays 00000000000110111100010001110010 Lep 00100000000000000000000000000000 Univision 00100000000111000111111000101000 Warnaco 00100000000000000000000000000000 Corolla 00100000001101111010001010110000 392 00000000000000000000000000000000 Playtex 00100000000010000111111000101000 showrooms 00000000000111111110110000001001 contiguous 00000000000000000000000000000000 Willmott 00100000000000000000000000000000 reckoning 00000000000000000000000000000000 Basf 00100000000000000000000000000000 piling 00000000011011100110100001000000 drying 00000000001111011110100001000000 rye 00000000000000000000000000000000 SE 01000000000001101111000001000111 '90s 00000000000000000000000000000000 Oka 00100000000000000000000000000000 overarching 00000000000000000000000000000000 21st 00000000000000000000000000000000 erase 00000000001100011011111110110010 far-flung 00000000000000000000000000000000 38.8 00000000000000000000000000000000 hunk 00000000000000000000000000000000 livelihood 00000000000000000000000000000000 versa 00001111110110110111111011001101 Chi 00101111111010101011010001001000 six-figure 00000000000000000000000000000000 hogs 00000000000110110101111001100011 0.32 00000000000000000000000000000000 368 00000000000000000000000000000000 adjudicator 00000000000000000000000000000000 fictional 00000000000000011111000010010000 differential 00000000000110000111001010110111 freight-transport 00000000000000000000000000000000 abound 00000000000000010110001000110010 Trucking 00100000000000111011011010110000 bottoming 00000000000000000000000000000000 367.30 00000000000000000000000000000000 abated 00000000000000000000000000000000 hollow 00000000000111011000011010010000 alternating 00000000000000000000000000000000 Dillow 00100000000000000000000000000000 quacks 00000000000000000000000000000000 Lakeland 00100000000000000000000000000000 Regulators 00100000000000000000010010110011 settings 00000000000111100110001010100011 727 00000000000000000000000000000000 Braidwood 00100000000000000000000000000000 harangues 00000000000000000000000000000000 Rowland 00101111111000101001000100001000 wrath 00000000000111111111011000001111 Harsco 00100000000000000000000000000000 Posix 00100000000000000000000000000000 Weston 00101111111000110101001000001000 impeached 00000000000000000000000000000000 full-scale 00000000000000000000000000000000 appraisal 00000000000000110100111001100111 roll-call 00000000000000000000000000000000 1,040 00000000000000000000000000000000 devoid 00000000000000000000000000000000 Approximately 00100000000000010111000001110010 Bloomfield 00100000000111011010011010101000 candid 00000000000001100101010010010000 2689.14 00000000000000000000000000000000 stalwarts 00000000000000000000000000000000 3000 00000000000000000000000000000000 Loggia 00100000000000000000000000000000 Carmine 00100000000000000000000000000000 gospel 00000000000111110110110000000001 soured 00000000000000010110111001000000 Garman 00100000000000000000000000000000 Iceland 00100000001101000111111001101000 Braintree 00100000000000000000000000000000 seafood 00000000000000100100011010110000 XL 01000000000000000000000000000000 microelectronics 00000000000011101011011010110000 gilt 00000000000111010010111110110000 designate 00000000000100000011001110110010 Felix 00101111111000010110001000011000 Fredric 00101111111000111011110110011000 Frost 00100000000111001110000000001000 AIW 01000000000000000000000000000000 Garber 00100000000000000000000000000000 Lavoro 00100000000000000000000000000000 Riviera 00100000000000000000000000000000 distinctively 00000000000000000000000000000000 extremes 00000000000111010100000100101111 stale 00000000000000000000000000000000 cynicism 00000000000110111010111010100111 courtrooms 00000000000000000000000000000000 Supervisors 00100000000011010110101010110011 Hoover 00100000000000111010100000001000 calculator 00000000000000000000000000000000 960 00000000000000000000000000000000 outlining 00000011010010010000000000001010 dearly 00000000000000000000101110111001 Card 00100000000000000001110001111001 Sitco 00100000000000000000000000000000 Lai 00100000000000000000000000000000 Givaudan 00100000000000000000000000000000 Solarz 00100000000000000000000000000000 pinch 00000000000101111101001010110111 residual 00000000000100011010000000110000 1.09 00000000000000000000000000000000 merchandisers 00000000000000010101000000101001 Betty 00100000000000000100101000011000 cake 00000000000110101001111000000001 Woodstream 00100000000000000000000000000000 bakeware 00000000000000000000000000000000 Bhutto 00100000000000000000000000000000 294 00000000000000000000000000000000 Species 00100000000011101010000010100011 Endangered 00100000001100000101101001000000 sexually 00000000001110001000000001110010 humanity 00000000000111001001110010100111 riots 00000000000001000111111010100111 bakery 00000000000100011011111010110000 predetermined 00000000000000000000000000000000 porcelains 00000000000000000000000000000000 shorter-term 00000000000000000000000000000000 credit-easing 00000000000000000000000000000000 snowballed 00000000000000000000000000000000 14.06 00000000000000000000000000000000 Ammann 00100000000000000000000000000000 mysteries 00000000000111000110011000001111 non-invasive 00000000000000000000000000000000 Serious 00100000000000000100000000010000 Manley 00101111111111001011001000001000 leveraged-buy-out 00000000000000000000000000000000 waits 00000000010110011110001000110010 58,000 00000000000000000000000000000000 accomplishment 00000000000110110111111001100111 finger-pointing 00000000000000000000000000000000 strings 00000000000111111000010101100011 Stronger 00100000000000001000001111000000 thinned 00000000000000000000000000000000 bumble 00000000000000000000000000000000 slogans 00000000000110100111110101100011 Champs 00100000000000000000000000000000 Muniak 00100000000000000000000000000000 Radzymin 00100000000000000000000000000000 Cervantes 00100000000000000000000000000000 Mirror 00100000000111111011010001001000 Spartan 00100000001110111000001000110000 stationed 00000001010001110100010000110010 superficial 00000000000100011101000000010000 mercy 00000000000100001111111000001111 glued 00000000000000000000000000000000 machinist 00000000000000000000000000000000 mid-September 01000000000000000000000000000000 Names 00100000000110101111111101100011 Barnum 00100000000000000000000000000000 recapitalizations 00000000000110001100111001100011 GRE 01000000000000000000000000000000 headlined 00000000000000000000000000000000 Bacarella 00100000000000000000000000000000 leaner 00000000000001010100001111000000 pragmatism 00000000000000000000000000000000 cash-flow 00000000000000000000000000000000 kicking 00000000010001101110100001000000 centralized 00000000000010000101010010010000 Underclass 00100000000000000000000000000000 mob 00000000000000001101010000000001 10:40 00000000000000000000000000000000 retail-sales 00000000000000000000000000000000 Sajak 00100000000000000000000000000000 Assume 00100000000111100100100110110010 bloodbath 00000000000000000000000000000000 armored 00000000000111111010001010110000 beers 00001111111111111100111110000010 braced 00000000001011011110110000110010 ravaged 00000000001111100001110000110010 victor 00001111111000000000011000011000 Gainen 00100000000000000000000000000000 Ingram 00100000000000000000000000000000 gratuities 00000000000000000000000000000000 Garcias 00100000000000000000000000000000 76,000 00000000000000000000000000000000 watts 00001111111000001001000000001000 IL-4 01000000000000000000000000000000 Ah 00100000000111111001101011101000 asthma 00000000000000000000000000000000 allergies 00000000000000000000000000000000 irreparable 00000000000000000000000000000000 downgrades 00000000000110100110000000100011 newsroom 00000000000000000000000000000000 foreclosures 00000000000111000110000010100111 anemic 00000000000001111000110100010000 Marrie 00100000000000000000000000000000 72.2 00000000000000000000000000000000 immoral 00000000000110010011110110010000 defections 00000000000111101010000010100111 propagandists 00000000000000000000000000000000 single-B-2 01000000000000000000000000000000 resettable 00000000000000000000000000000000 obnoxious 00000000000000000000000000000000 windfall 00000000000000010011100011000111 spas 00000000000000000000000000000000 acute 00000000000001100110110100010000 addiction-treatment 00000000000000000000000000000000 unemployed 00000000000101001010101000110000 Grants 00100000000000000001110100100011 pleasing 00000000000010010110010010010000 replenished 00000000000000000000000000000000 busier 00000000000000000000000000000000 beefed 00000000000111110111001000110010 Watts 00101111111000001001000000001000 robotic 00000000000000000000000000000000 rotting 00000000000000000000000000000000 plush 00000000010001011000001000110000 475,000 00000000000000000000000000000000 rained 00000000000000000000000000000000 sunshine 00000000000111001111000100101000 3.45 00000000000000000000000000000000 policeman 00000000000111100011011110110101 castle 00001111111111110011111010101000 fractured 00000000000000011101101001000000 emphatically 00000000000000000000000000000000 routing 00000000000000000000000000000000 sales-tax 00000000000000000000000000000000 destinations 00000000000110101111110001100011 clouded 00000000001111010001110000110010 barge 00000000000000001101111010110000 19.3 00000000000000000000000000000000 Avions 00100000000000000000000000000000 fanciful 00000000000000000000000000000000 Rage 00100000000111110010111010100111 diapers 00000000000100101001111001100011 Emirates 00100000000111111100111101110011 Really 00100000000000010100001001110010 production-sharing 00000000000000000000000000000000 quarter-to-quarter 00000000000000000000000000000000 Blanchard 00101111111011101000001010001000 ineptitude 00000000000101000011111010100111 left-right 00000000000000000000000000000000 3.53 00000000000000000000000000000000 imprisoned 00000001010101110100010000110010 obscurity 00000000000000000000000000000000 Somali 00100000000000000000000000000000 Zacks 00100000000110100100110100101000 trespassing 00000000000000000000000000000000 droves 00000000000111111000011001101111 filers 00000000000111010100100000110011 persuading 00000000000000000100001101000000 Gitanes 00100000000000000000000000000000 co-production 00000000000000000000000000000000 wrongly 00000000010001000001001001110010 endeavor 00000000000101000111111001100111 sapped 00000000001000100111010000110010 embarked 00000000000011100000100000110010 RMS 01000000000000000000000000000000 Belding 00100000000000000000000000000000 media-buying 00000000000000000000000000000000 allowable 00000000000000011000000100010000 magical 00000000000010110110011010010000 TCMP 01000000000000000000000000000000 Peanuts 00100000001111110101110010100111 bulbs 00000000000000000001111001100011 Colodny 00100000000000000000000000000000 contrasted 00000000000000001011100000110010 enjoin 00000000000001100111111110110010 Gatos 00100000000000000000000000000000 testers 00000000000000001000111001100011 hoopla 00000000000000000000000000000000 readership 00000000000000000000000000000000 Scandinavia 00100000000001110001111110110000 Observers 00100000000000000000000100010011 Pearl 00100000000100101010011010101000 midafternoon 00000000000110000100010000101000 33.3 00000000000000000000000000000000 editorially 00000000000000000000000000000000 40.4 00000000000000000000000000000000 wrongful 00000000000000000011000110010000 curry 00000000000000000000000000000000 platforms 00000000000111110010110100100011 Administrators 00100000000000100110000010110011 smattering 00000000000000000000000000000000 Concerns 00100000000111101110100100100011 15.125 00000000000000000000000000000000 new-found 00000000000000000000000000000000 Hearings 00100000000111101011010000100111 fattened 00000000000000000000000000000000 Industrie 00100000000111111000010000101000 Waterbury 00100000000000000000000000000000 Voss 00100000000000000000000000000000 beasts 00000000000000000000000000000000 Spendthrift 00100000001001101111111100101000 waving 00000000000111000110100001000000 Hulings 00100000000000000000000000000000 Bel 00100000000000000000000000000000 insulated 00000011100101010100010000110010 conventional-arms 00000000000000000000000000000000 racehorses 00000000000000000000000000000000 McCabe 01001111111111110100001000001000 Catherall 00100000000000000000000000000000 Misanthrope 00100000000000000000000000000000 50.6 00000000000000000000000000000000 Safeway 00100000000000011101000100101000 overdone 00000000000111010101110110010000 Schweppes 00101111111000111101101000101000 Cadbury 00101111111111001111001100101000 Teresa 00100000000000000000000000000000 small-denomination 00000000000000000000000000000000 blips 00000000000000000000000000000000 repossessed 00000000000000000000000000000000 bucks 00000000000111100010000001100011 Hostile 00100000000000000101001100010000 1934 00000000000000000000000000000000 Givens 00100000000000000000000000000000 manipulative 00000000000000000000000000000000 Victoria 00100000000010111101111100001000 rigor 00000000000000000000000000000000 Summerfolk 00100000000000000000000000000000 bastion 00000000000000000000000000000000 tear 00000000010100010110010110110010 Special 00100000000000000010010000010000 cognoscenti 00000000000000000000000000000000 rigorous 00000000000011010101000000010000 businesslike 00000000000000000000000000000000 Stage 00100000000111101110101101100111 re-evaluate 00000000000000000000000000000000 nettlesome 00000000000000000000000000000000 complying 00000000000111010101100000110010 Dooling 00100000000000000000000000000000 meddling 00000000000111101100001110100111 Wallop 00101111111011000000001010001000 5.91 00000000000000000000000000000000 3.84 00000000000000000000000000000000 Fat 00100000000000110101011010010000 7.31 00000000000000000000000000000000 parkway 00000000000000000000000000000000 Rodriguez 00101111111100101111000010001000 cushioned 00000000000000000000000000000000 Parkways 00100000000000000000000000000000 1990-2002 00000000000000000000000000000000 lien 00000000000000001011100011000111 bathrooms 00000000000000000000000000000000 livestock 00000000000001001111101110110000 Broward 00100000000000011010011010101000 price-depressing 00000000000000000000000000000000 ruin 00000000110100111111110110110010 upheavals 00000000000000000000000000000000 conductor 00000000000001111111110000110101 reconstructed 00000000000000000000000000000000 sided 00000000000010110110010000110010 riches 00000000000101110111110010100111 hackles 00000000000000000000000000000000 Kleiber 00100000000000000000000000000000 theorist 00000000000000000000000000000000 4,500 00000000000000000000000000000000 Insider 00100000000111101010011100010000 compiling 00000000000111001001111101000000 Lothson 00100000000000000000000000000000 recoverable 00000000010010101101101001000000 ceramics 00000000000010001011111010110000 Toto 00100000000000000000000000000000 Vaezi 00100000000000000000000000000000 Mahmoud 00100000000000000000000000000000 Mad 00100000000001110000011010010000 Festival 00100000000111101001010100000001 composers 00000000000110011100111000110011 beset 00000000001001101111010000110010 anguish 00000000000111000011110010100111 Haag 00100000000000000000000000000000 geographic 00000000000000100010000000110000 Willens 00100000000000000000000000000000 1930 00000000000000000000000000000000 59.9 00000000000000000000000000000000 Notice 00100000000111001010011010100111 Blandings 00100000000000000000000000000000 clauses 00000000000010001011011100100011 38-year-old 00000000000000000000000000000000 droughts 00000000000000000000000000000000 MORE 01000000000000000000000111000000 abatement 00000000000000000000000000000000 compounding 00000000000111101110100000001010 toil 00000000000000000000000000000000 innovations 00000000000111111001101010100011 99.1 00000000000000000000000000000000 nationalized 00000000000001100101101001000000 swamp 00000000000111111010011110110111 wander 00000000000000000000000000000000 oasis 00000000000000000000000000000000 Oranjemund 00100000000000000000000000000000 Garrett 00101111111000100000000100001000 Thanks 00100000000111110101111000110010 jewel 00000000000111110111011111111001 Lives 00100000000111001111111101100011 wedged 00000000000000000000000000000000 Cannon 00100000000010101011010100101000 336 00000000000000000000000000000000 renovation 00000000000000000110101101001111 *RSB* 01000000000000000000000000000000 Bretz 00101111111000011010000010001000 uninterrupted 00000000000000011010010100010000 Oddly 00100000110101101000000001110010 Titanium 00100000000100001010101010110000 RMI 01000000000000000000000000000000 vindication 00000000000000000000000000000000 capital-goods 00000000000000000000000000000000 465 00000000000000000000000000000000 faltering 00000000000011111011100000010000 Quarter 00100000000111111100110010010111 usefulness 00000000000111101111011000001111 1,250,000 00000000000000000000000000000000 Clients 00100000000111101110110000110011 mismatch 00000000000000000000000000000000 Safe 00100000000011000000011010010000 EARNINGS 01000000000011001010100000000111 Satoshi 00101010001100010000101100011000 spurts 00000000000000111111001000100011 constitutes 00000000000111100001000000010010 Carmon 00100000000000000000000000000000 counterterrorism 00000000000000000000000000000000 powder 00000000000111001110111000000001 backbone 00000000000111110011011000001111 greeting 00000000000000010010000100110001 hugging 00000000000000000000000000000000 furnished 00000000010111000101010000110010 amasses 00000000000000000000000000000000 three-year-old 00000000000000000000000000000000 pleasantries 00000000000000000000000000000000 8.13 00000000000000000000000000000000 3.33 00000000000000000000000000000000 Mainstream 00100000000110100110101001000000 stalwart 00000000000000000000000000000000 Fowler 00101111111000000110100010001000 mate 00000000000000000001101110111001 Murakami 00100000000000000000000000000000 similarities 00000000000111101010110000100111 shakes 00001100010110000011000000010010 Landfill 00100000000001011100100000100001 7.986 00000000000000000000000000000000 8.292 00000000000000000000000000000000 minimill 00000000000000000000000000000000 Johnny 00101111111011011100111000011000 writedowns 00000000000000000000000000000000 Goode 00101111111000010010100010001000 Expenses 00100000000111111110001000000011 289 00000000000000000000000000000000 Kennametal 00100000000000000000000000000000 FIRM 01000000000110101111111011110101 CHICAGO 01000000000111111110100001101000 Muramatsu 00100000000000000000000000000000 rounded 00000000000010001010010110110010 Bunny 00100000000000000000000000000000 Merhige 00100000001111010100111010001000 WHO 01000000000000000000101001110010 Aslanian 00100000000000000000000000000000 disorderly 00000000000000000000000000000000 Slate 00100000000111111011101000111111 imperialists 00000000000000000000000000000000 Buchner 00100000000000000000000000000000 SoundView 01000000000000000000000000000000 optional 00000000000000011100000110010000 refreshing 00000000000000000000000000000000 3090 00000000000000000000000000000000 whisper 00000000000000000000000000000000 one-party 00000000000000000000000000000000 infringes 00000000000000000000000000000000 wiretap 00000000000000000000000000000000 bond-trading 00000000000000000000000000000000 Invest 00100000000111111001010110110010 minuscule 00000000000010111000000000010000 pretend 00000000000111011100100110110010 cares 00000000000111111100110111000010 Wussler 00100000000000000000000000000000 belie 00000000000000000000000000000000 Herzog 00101111111000110010111000101000 protective 00000000000000100100101010110000 Buzzy 00100000000000000000000000000000 E.E. 01000000000000000000000000000000 sheep 00000000000111010010101100100001 discard 00000000000000000000000000000000 Poll 00100000000000001000100000110111 louder 00000000000000000000000000000000 duly 00000011101001000001001001110010 disapproval 00000000000111110011001101001111 Loss 00100000000111101111111101000111 shelved 00000000100101010100010000110010 impulses 00000000000000000000000000000000 recession-resistant 00000000000000000000000000000000 Denny 00100000000111101001111110101000 Tierney 00101111111110001101000010001000 Bauer 00101111111101110000001000001000 usurp 00000000000000000000000000000000 Juan 00101111111100000110000000011101 prohibiting 00000001001010010000000000001010 Grubman 00101111111100111010010010001000 underscoring 00000000000111111001001101000000 17.8 00000000000000000000000000000000 engulfed 00000000000000000000000000000000 Salvadoran 00100000000001000101011000110000 continuous 00000000000101000001000000010000 24th 00000000000000000000000000000000 shun 00000000000001001001101110110010 muscles 00000000000111110011111101100011 steals 00000000000000000000000000000000 Ariel 00100000000000000000000000000000 Oneida 00100000000000000000000000000000 Breweries 00100000000011101011000000101001 Fanuc 00100000000000000000000000000000 proviso 00000000000000000000000000000000 exacerbate 00000000000010000110111110110010 neurologist 00000000000000000000000000000000 shipbuilder 00000000000000000000000000000000 Blue-chip 00100000000000000000000000000000 0.53 00000000000000000000000000000000 boundary 00000000000000110010011000100001 chauffeur 00000000000000000000000000000000 1900s 00000000000000000000000000000000 Freightways 00100000000000000000000000000000 envisioned 00000000111011101100010000110010 Probably 00100000000011000000001001110010 limbs 00000000000000000000000000000000 scaled-down 00000000000000000000000000000000 reopening 00000000001111011111010001000000 embattled 00000000000011100000101001000000 inquiring 00000000000000000000000000000000 Nunn 00100000001100100100111010001000 censored 00000000000000000000000000000000 B2 00100000000000000000000000000000 Ba3 00100000000000000000000000000000 arrivals 00000000000000001001101001100011 sensation 00000000000111110000101101100111 climbs 00000000000101101000001000110010 bales 00000000000000000001010100001011 arriving 00000000000111101011000001000000 Soybean 00100000000000000011101110110000 jerked 00000000000000000000000000000000 Offshore 00100000000000100101101000110000 tethered 00000000000000000000000000000000 fluent 00000000000000000000000000000000 releasing 00000000000010110011111101000000 exhausting 00000000000000000000000000000000 abusive 00000000000000000001100110010000 evolutionary 00000000000000000000000000000000 ESPs 01000000000000000000000000000000 Carlton 00101111111001100000000100001000 hierarchy 00000000000010110111101001100111 attaching 00000000000000000000000000000000 Wa 00100000000000000000000000000000 unnerved 00000000110000100111010000110010 Werke 00101111111010000111101110000111 contractions 00000000000000000000000000000000 Motoren 00101111111101111000000001001000 Bayerische 00101111111010000100101101110000 shrugged 00000000001110001001001000110010 Sekisui 00100000000000000000000000000000 index-linked 00000000000000000000000000000000 Tacker 00100000000000000000000000000000 jargon 00000000000001110111101001100111 pacemakers 00000000000000000000000000000000 38.50 00000000000000000000000000000000 beefing 00000000010111011110100001000000 226.3 00000000000000000000000000000000 Lampoon 00100000000000000000000000000000 four-page 00000000000000000000000000000000 2.17 00000000000000000000000000000000 regroup 00000000000000000000000000000000 31.3 00000000000000000000000000000000 605 00000000000000000000000000000000 flash 00000000000100000111001010110111 Reinsurance 00100000000000010000010010110000 ruthless 00000000000111011111000010010000 informing 00000000000000000001001101000000 splendidly 00000000000000000000000000000000 timed 00000000010001101100110000110010 mask 00000000000100001111001010110111 exclaims 00000000000111111100011111000010 X-ray 00100000000000000000000000000000 dedication 00000000000111010101111100100111 Trying 00100000000111111110011000110010 41.3 00000000000000000000000000000000 10.625 00000000000000000000000000000000 Applebaum 00100000000000000000000000000000 outage 00000000000000000000000000000000 humble 00000000000011011000011010010000 service-center 00000000000000000000000000000000 Konheim 00100000000000000000000000000000 Barnard 00101111111100110010111010001000 Alamos 00100000000000000000000000000000 Bloom 00101111111100110101110010001000 clad 00000000001000011110010000110010 64.9 00000000000000000000000000000000 periodically 00000001001100000000010001110010 scares 00000000000000000000000000000000 mafias 00000000000000000000000000000000 Modern 00100000000000000100001000110000 presale 00000000000000000000000000000000 SALES 01000000000111101110111000000111 brochures 00000000000000010011010101100011 topaz 00000000000000000000000000000000 HEALTH 01000000000000001001100000110000 gurus 00000000000000000000000000000000 co-managing 00000000000000000000000000000000 cured 00000001101010010010110000110010 EARTHQUAKE 01000000000000101111111001100111 Pointe 00100000000000000000000000000000 grandparents 00000000000111011011110000110011 applauded 00000000000110010101010000110010 masked 00000000110101101100010000110010 challengers 00000000000000011100111000110011 line-item-veto 00000000000000000000000000000000 countrymen 00000000000000000000000000000000 dreaded 00000000000000000000000000000000 warriors 00000000000000000000000000000000 blown 00000000001101001001001000110010 ashore 00000000000000000000000000000000 thirds 00000000000000010100011101111011 Objections 00100000000111110101101000100011 BANK 01000000000100101110000001100101 courted 00000001000001000101010000110010 drowned 00000000000000000000000000000000 after-hours 00000000000000000000000000000000 diversions 00000000000000000000000000000000 Motel 00100000000000001001111010110000 seven-year-old 00000000000000000000000000000000 ushers 00000000000000000000000000000000 clarinetist 00000000000000000000000000000000 knights 00000000000000000000000000000000 hotel-casinos 00000000000000000000000000000000 Baja 00100000000000000000000000000000 Ernesto 00100000000000000000000000000000 crap 00000000000000000000000000000000 48,000 00000000000000000000000000000000 Smaller 00100000000000010000001111000000 Excalibur 00100000000000000000000000000000 concerted 00000000011101000001000000010000 sidestep 00000000001011010111111110110010 masquerading 00000000000000000000000000000000 Gortari 00101111111010101100111110000010 yuppie 00000000000000000001101000010000 outpatient 00000000000100100101000000110000 12th 00000000000000000000000000000000 Welfare 00100000000000010000001011100001 spoiled 00000000000110011101101001000000 Revolutionary 00100000000001001001011000110000 52-year-old 00000000000000000000000000000000 658 00000000000000000000000000000000 lightweight 00000000001101011100101010110000 interactive 00000000000010010100101010110000 ADS 01000000000111101111000101100011 External 00100000000000001001000100010000 affordability 00000000000000000000000000000000 junk-mail 00000000000000000000000000000000 business-to-business 00000000000000000000000000000000 portrays 00000010100011100011000000010010 228 00000000000000000000000000000000 catalogs 00000000000100100001110101100011 mailers 00000000000000000110000100100011 devalued 00000000000000001010111001000000 shade 00000000000111101101001010110111 implanted 00000000000000000000000000000000 hedges 00000000000111111101000001111001 folly 00000000000111000101001001100111 velvet 00000000000000000000000000000000 fragments 00000000000011100111110101100011 Undeterred 00100000000000000000000000000000 gardens 00000000000111100001011000000001 Parke 00100000000000000000000000000000 BPC 01000000000000000000000000000000 weaving 00000000001101001010110001000000 Battery 00100000000011111111001000100001 fantasies 00000000000000000000000000000000 -to 00000000000000000000000000000000 interest-free 00000000000000000000000000000000 Leveraged 00100000000111101010111100010000 grandson 00000000000111111001101000111111 Leverage 00100000000110101111110100100111 guarding 00000000000000000000000000000000 8.21 00000000000000000000000000000000 contributes 00000000000000100001101000110010 Holliston 00100000000111111111110101011111 Kerkorian 00101111111110101000001010001000 Golf 00100000000000000110001100100001 Voices 00100000000101001001111101100011 chill 00000000000100111101001010110111 nemesis 00000000000000000000000000000000 Enough 00100000000000000110010001110010 unproductive 00000000000000000000000000000000 kicks 00000000110101001111000000010010 s 00000000000000000000000000000000 relish 00000000000101001110100110110010 Sonny 00100000000000000000000000000000 10-11 00000000000000000000000000000000 utter 00000000000010100101110110110010 Witness 00100000000111101000101010110101 Athena 00100000000000000000000000000000 campuses 00000000000100011100111000110011 1.5820 00000000000000000000000000000000 Schimmel 00100000000000000000000000000000 Lithox 00100000000000000000000000000000 Lego 00100000000000000000000000000000 eloquently 00000000000000000000000000000000 lazy 00000000000110010110011010010000 sighs 00000000000111110110011111000010 adaptation 00000000000110010100111001100111 Dad 00100000000111101110011110000001 Animals 00100000000111101011111001100011 Kaplan 00101111111100101001001000001000 Kirkpatrick 00100000000111111101111010001000 meal 00000000000111111010011000100001 burnt 00000000000000000000000000000000 Uncertainty 00100000000111111110111010100111 Petersen 00101111111100011010100010001000 dirty 00000000000000011101011010010000 vaults 00000000000000000000000000000000 Dalbar 00100000000000000000000000000000 Previous 00100000000000000000000011010000 Horn 00101111111101101111111010101000 puckish 00000000000000000000000000000000 26,000 00000000000000000000000000000000 brilliantly 00000000000000000000000000000000 stalls 00000001011111001111000000010010 relaxed 00000000000011110001010010010000 steroids 00000000000110111010111001100011 Advance 00100000000111101111001001101111 Clements 00101111111010011101001000001000 materialistic 00000000000000000000000000000000 Kakita 00100000000000000000000000000000 Methodist 00100000000000001100110001101000 Death 00100000000111101111011010100111 Keteyian 00100000000000000000000000000000 SMU 01000000000000000000000000000000 casualties 00000000000111110000100000110011 confided 00000000000000000000000000000000 semblance 00000000000000000000000000000000 Delaney 00101111111100000001001000001000 Allowing 00100000000000010000001101000000 fantasy 00000000000111111010001100100001 skid 00000000000100000101001010110111 Gomez 00101111111101001100110010001000 embodied 00000000000000000000000000000000 747-400s 00000000000000000000000000000000 unrealistically 00000000000000000000000000000000 groceries 00000000000101111100111001100011 Daihatsu 00100000000000000000000000000000 snail 00000000000111111111011111000101 Acura 00100000000000000001111100001000 8.07 00000000000000000000000000000000 8.575 00000000000000000000000000000000 Haussmann 00100000000000000000000000000000 V-6 00100000000000000000000000000000 watering 00000000000000000000000000000000 176.1 00000000000000000000000000000000 piston 00000000000000000000000000000000 two-stroke 00000000000000000000000000000000 abolition 00000000000111101001111000001111 insulate 00000000010101111011111110110010 Bach 00100000000000000000000000000000 aquarium 00000000000000000000000000000000 air-conditioning 00000000000000000000000000000000 punching 00000000000000000000000000000000 options-trading 00000000000000000000000000000000 stray 00000000000000000011110110110111 qualifications 00000000000110011011111101100011 spills 00000001010111001111000000010010 Fuel 00100000000000000000110110110111 Ballard 00100000000000000000000000000000 envision 00000000000100101110100110110010 18th 00000000000000000000000000000000 food-service 00000000000000000000000000000000 upstream 00000000000000000000000000000000 2,100 00000000000000000000000000000000 Stevric 00100000000000000000000000000000 cleverly 00000000000000000000000000000000 twin 00000000010001010000001000110000 lopsided 00000000000000000000000000000000 newscasts 00000000000000000000000000000000 hurried 00000000000000000000000000000000 transcripts 00000000000000000000000000000000 self-destructive 00000000000000000000000000000000 Anna 00100000000110101100000100001000 libraries 00000000000111101101110001100011 possession 00000000000111101111100000101111 Glaxo 00100000000000110111111000101000 Altimari 00100000000000000000000000000000 Miner 00100000000100101110010010110101 J.D. 01000000000000000000000000000000 biographer 00000000000111101111110110000001 bigotry 00000000000000000000000000000000 weddings 00000000000000000000000000000000 heirs 00000000000111111111111101100011 Norwitz 00100000000000000000000000000000 computer-maintenance 00000000000000000000000000000000 irked 00000000000000000000000000000000 flavors 00000000000000000011110001100011 cherry 00000000000111010010001000110000 patrol 00000000000000001010100110110111 Dixon 00101111111111000000001000001000 Kolber 00100000000000000000000000000000 ethos 00000000001001101011111001100111 norm 00000000000111100000110011100111 Judy 00101111110000110000001000011000 well-paid 00000000000000000000000000000000 overproduction 00000000000100001011111010100111 inexorable 00000000000000000000000000000000 Scotia 00100000000000011010010001001000 receivable 00000000000000010000100000100111 ex-President 01000000000000000000000000000000 risking 00000000000011100100100101000000 spearheaded 00000000000000100111010000110010 admittedly 00000011000000000000001001110010 co-sponsored 00000000000000000000000000000000 obsessed 00000000000011110101100000110010 looser 00000000000000000000000000000000 tacitly 00000000000000000000000000000000 Sutro 00100000000000000000000000000000 grumble 00000000000000000000000000000000 retarded 00000000000000000000000000000000 Place 00100000000111101111110101010111 gunned 00000000100110101001001000110010 intimidation 00000000000101100111100010100111 spontaneously 00001010011000000000010001110010 wields 00000000000000000000000000000000 full-length 00000000000000000000000000000000 McMillin 01001111011100101100000010001000 47.125 00000000000000000000000000000000 co-sponsor 00000000000000000000000000000000 3.375 00000000000000000000000000000000 misrepresented 00000110110111010100010000110010 controversies 00000000000110101010111010100111 memorabilia 00000000000000000000000000000000 desk-top 00000000000000000000000000000000 Brand 00100000000000000000011000100001 20.3 00000000000000000000000000000000 bargained 00000000000000000000000000000000 28,000 00000000000000000000000000000000 poignant 00000000000100000111000010010000 fiscal-first 00000000000000000000000000000000 lush 00000000000000000000000000000000 super 00000000000000010001001000110000 implying 00000000000111110001111010000010 dividing 00000000000000011100001101000000 dictated 00000000011101010001110000110010 53-year-old 00000000000000000000000000000000 dirt 00000000000001101001110000100001 Kabel 00100000000000000000000000000000 9.25 00000000000000000000000000000000 8.59 00000000000000000000000000000000 461 00000000000000000000000000000000 valves 00000000000111111100101111001001 Duriron 00100000000000000000000000000000 family-owned 00000000000000000000000000000000 Amazing 00100000000010101110110100010000 mentions 00000001111011100011000000010010 comedic 00000000000000000000000000000000 Thin 00100000000111111010011100010000 commentators 00000000000110000010000010110011 Gotlieb 00100000000000000000000000000000 departed 00000110010111010100010000110010 wicked 00000000000000000000000000000000 repel 00000000010110010111111110110010 Sex 00100000000000111011110000100001 Male 00100000000001110000101000110000 kingpins 00000000000000000000000000000000 50-a-share 00000000000000000000000000000000 Epilepsy 00100000000000000000000000000000 psychoanalyst 00000000000000000000000000000000 Fedders 00100000000000000000000000000000 Nightline 00100000000000000000000000000000 sculpture 00000000000111101010111000000001 unfolding 00000000001001011111010001000000 13.75 00000000000000000000000000000000 modifies 00000000000000000000000000000000 hitch 00000000000111110100111010110101 Swavely 00100000000000000000000000000000 good-natured 00000000000000000000000000000000 Peripherals 00100000000111101110110001001001 blue-chips 00000000000000000000000000000000 virility 00000000000000000000000000000000 Holler 00100000000000000000000000000000 101,250 00000000000000000000000000000000 Gradmann 00100000000000000000000000000000 0.12 00000000000000000000000000000000 well-to-do 00000000000000000000000000000000 22.2 00000000000000000000000000000000 134.8 00000000000000000000000000000000 cardboard 00000000000111010000101100100001 Reaching 00100000000111101100100101000000 favoring 00000000010010010000000000001010 verbatim 00000000000000000000000000000000 233 00000000000000000000000000000000 defaulting 00000000000000000000000000000000 smoother 00000000000000000000000000000000 telephoned 00000000000011101101010000110010 Lights 00100000000011001111110101100011 busted 00000000000000000000000000000000 middle-income 00000000000000000000000000000000 inconclusive 00000000000000000101110110010000 toying 00000000001101110101100000110010 1.73 00000000000000000000000000000000 tar 00000000000111000101110000100001 foreclosure 00000000000000011001111000010000 59.4 00000000000000000000000000000000 documenting 00000000000000000000000000000000 cute 00000000000011100110011010010000 Horse 00100000000000010110001100100001 Greenspon 00101111110100111000000010001000 Ira 00100000000000000011111100001000 belly 00000000000000000011111110110000 bacon 00000000000111110000000000001000 inadequacy 00000000000000000000000000000000 Wilmouth 00100000000000000000000000000000 bubble 00000000000111011001111000000001 enjoyable 00000000000000000000000000000000 Senate-passed 00100000000000000000000000000000 0.43 00000000000000000000000000000000 Y 00100000000000000000000000000000 non-voting 00000000000000000000000000000000 Osborne 00101111100010101100000010001000 0.31 00000000000000000000000000000000 2.05 00000000000000000000000000000000 decorative 00000000000000101010101010110000 linger 00000000011101111101010110110010 34.6 00000000000000000000000000000000 40.6 00000000000000000000000000000000 207 00000000000000000000000000000000 193 00000000000000000000000000000000 35.2 00000000000000000000000000000000 martial 00000000000111000001000000110000 compromising 00000000000000000000000000000000 honored 00000000000001101101110000110010 fury 00000000000000000000000000000000 Dresden 00100000000000000000000000000000 respiratory 00000000000001100101000000110000 improbable 00000000000000110001001110010000 differed 00000000000011011110001000110010 refrigerator 00000000000101111101111000000001 Savin 00100000000110010100111100101000 torrid 00000000000000000000000000000000 clipped 00000000000000000000000000000000 sparkling 00000000001000011100011010010000 contract-drilling 00000000000000000000000000000000 superb 00000000001100001100011010010000 4.20 00000000000000000000000000000000 oh 00000000000111111010101011101000 46.9 00000000000000000000000000000000 Hydro 00100000000011101011010001001000 68.5 00000000000000000000000000000000 Ruiz 00101111111010000110000010001000 961 00000000000000000000000000000000 3.60 00000000000000000000000000000000 gulf 00000000000100100110001110101000 vagaries 00000000000000000000000000000000 Lintas 00100000000111000111101110110000 45-a-share 00000000000000000000000000000000 cousins 00000000000111001100100000110011 angle 00000000000011000111111001100111 Marie-Louise 01000000000000000000000000000000 aberration 00000000000111111000101000100111 Bottling 00100000000000011000011010110000 Movie 00100000000011011000101000100001 657 00000000000000000000000000000000 2-1 00000000000000000000000000000000 Marron 00101111111001011100000010001000 collaborated 00000000000000000000000000000000 labor-backed 00000000000000000000000000000000 Parsippany 00100000001111011011101001101000 MEMOS 01000000000111100011101000100011 MINOR 01000000000000001010000000010000 overriding 00000000001000011000110100010000 fighters 00000000000000000000110110001001 plotters 00000000000000000000000000000000 Rahway 00100000000000000000000000000000 nominations 00000000000111000011101000100011 Catastrophic 00100000000111000101000000110000 Kingsbridge 00100000000000000000000000000000 botched 00000000000000000000000000000000 impede 00000000001100111011111110110010 rejoin 00000000000000000000000000000000 remorse 00000000000000000000000000000000 NAM 01000000000101110100000000001000 revamp 00000000000100101100111110110010 undesirable 00000000000010000101000110010000 0.20 00000000000000000000000000000000 lodged 00000000000000000110010000110010 infections 00000000000100111010110010100111 disposals 00000000000000000000000000000000 shrunk 00000000000111011010110000110010 unsure 00000000001010111111110000110010 1.99 00000000000000000000000000000000 trade-offs 00000000000000000000000000000000 Enimont 00100000000000000000000000000000 Heyden 00100000000000000000000000000000 der 00001111111001100001110100100001 cookie 00000000001000101011111010110000 surpassing 00000000000111100111011010000010 accumulate 00000000000111101000001110110010 flawless 00000000000000000000000000000000 Jeancourt-Galignani 01000000000000000000000000000000 nuts 00000000000101100101110010100111 bolts 00000000000111100011010101100011 M'Bow 01000000000000000000000000000000 COMMUNICATIONS 01000000000010000010010010110000 puzzling 00000000000000100100110110010000 Sofitel 00100000000000000000000000000000 straightforward 00000000000011100101010010010000 equitable 00000000000000011001111000101000 Salvation 00100000000111100001111000010000 non-cash 00000000000000000000000000000000 10.7 00000000000000000000000000000000 operatives 00000000000100101010000010110011 fills 00000000110010000011000000010010 Laidig 00100000000000000000000000000000 Patriarca 00100000000000000000000000000000 lieutenants 00000000000000000000000000000000 yelled 00000000000000000000000000000000 Attention 00100000000111101101110100100111 bugged 00000001000101110100010000110010 professed 00000000000000000000000000000000 Budweiser 00100000000000000000000000000000 defender 00000000000111101111001100111111 unwritten 00000000000001011010010100010000 Pirko 00100000000000000000000000000000 kidnapper 00000000000000000000000000000000 waging 00000000000111110010010101000000 Thunderbird 00100000000000000000000000000000 hawk 00000000000000011010001000110000 Vandenberg 00100000000000000000000000000000 examinations 00000000000110100010001000100011 Rayburn 00100000000000000000000000000000 cooperated 00000000001110110110010000110010 underwent 00000000001011001011000000010010 2.41 00000000000000000000000000000000 Charities 00100000000110011000111000110011 containerboard 00000000000000000000000000000000 8.31 00000000000000000000000000000000 ramp 00000000000111101011110110110111 mechanics 00000000000111101100100000110011 Bedford 00100000000111000110101001101000 improprieties 00000000000101000111100010100111 stock-repurchase 00000000000000000000000000000000 gung-ho 00000000000000000000000000000000 precarious 00000000000111100101010010010000 Wachtel 00101111111110100010101010001000 ALPA 01000000000000000100110100101000 resounding 00000000000000000000000000000000 Wasserstein 00101111111100100110101010001000 1,859 00000000000000000000000000000000 investigational 00000000000000000000000000000000 anti-viral 00000000000000000000000000000000 Modzelewski 00100000000000000000000000000000 INVESTMENT 01000000000001000000100010110000 ridicule 00000000000111110010110010110111 MacMillan 01000000000111111110101100101000 Bloedel 00100000000000100001101000101000 37.75 00000000000000000000000000000000 singling 00000000011111000110100001000000 Chiusano 00100000000000000000000000000000 indecency 00000000000000000000000000000000 containment 00000000000000000000011111111001 Stung 00100000100110000001110000110010 outweighed 00000000010000100111010000110010 misuse 00000000000111110011011001101111 Compare 00100000000111001011011110110010 cop-killer 00000000000000000000000000000000 digest 00000000000111001110100110110111 microchip 00000000000000001100001000100001 sentimental 00000000000010001011011010010000 Rodgers 00101111000010101100000010001000 Cecin 00100000000000000000000000000000 tepid 00000000000000000000000000000000 get-out-the-vote 00000000000000000000000000000000 4.03 00000000000000000000000000000000 Medco 00100000000000000000000000000000 33.25 00000000000000000000000000000000 hammering 00000000000000000000000000000000 ideals 00000000000100001000111101100011 jugs 00000000000000000000000000000000 99.8 00000000000000000000000000000000 first-home 00000000000000000000000000000000 cloture 00000000000000000000000000000000 filibuster 00000000000111110111101010110111 scorecard 00000000000000000000000000000000 Leona 00100000000000000000000000000000 Freedman 00101111111001001110100010001000 Glen 00101111111001110000001000011000 leisurely 00000000000000000000000000000000 nonunion 00000000000001101000101000110000 brutal 00000000000111000001000000010000 slaps 00000000000000000000000000000000 costumes 00000000000111110011010101100011 prostitutes 00000000000110000000111000110011 confronts 00000000000000000000000000000000 adhesives 00000000000111110111111010110000 Ellen 00101111111011010100111000011000 refocused 00000000000000000000000000000000 reprieve 00000000000000000000000000000000 Rep 00100000000000000000000000000000 vogue 00000000000110011111111001101000 ambiguities 00000000000000000000000000000000 shiny 00000000000000000111011010010000 trepidation 00000000000000000000000000000000 balking 00000000000000000000000000000000 reeled 00000000000000000000000000000000 bond-price 00000000000000000000000000000000 assembling 00000000000000001001111101000000 bolstering 00000000000111001111011101000000 laboring 00000000000000000000000000000000 blitz 00000000000111111010000001100111 1.83 00000000000000000000000000000000 Bouygues 00100000000100101110110000001000 decay 00000000000100100101110010100111 30.2 00000000000000000000000000000000 ordeal 00000000000001101011111001100111 Taken 00100000000111110010110000110010 whacked 00000000000000000000000000000000 56.9 00000000000000000000000000000000 interrogated 00000000000000000000000000000000 CVN 01000000000000000000000000000000 snakes 00000000000000000000000000000000 flashlights 00000000000000000000000000000000 donors 00000000000111010111110000110011 rang 00000000001010111011001000110010 spaghetti 00000000000000000000000000000000 fact-finding 00000000000000000000000000000000 Hormats 00100000000000000000000000000000 Tiffany 00101111111111011111111010101000 Isetan 00100000000000000000000000000000 patriotic 00000000000110011000000000110000 garnered 00000000001001000100010000110010 realm 00000000000111011110011000001111 anti-smoking 00000000000000000000000000000000 308.32 00000000000000000000000000000000 defying 00000000000111001101001101000000 downplayed 00000000000000000000000000000000 Marlboro 00100000000001110101001000110000 Cholet 00100000000000000000000000000000 Grobstein 00100000000000000000000000000000 Bad 00100000000000000000101010010000 Nolan 00100000000000000000000000000000 gardening 00000000000001111000101100100001 nutrition 00000000000000010011001101100001 literacy 00000000000000001110001101100001 recipient 00000000000111101001100101100111 403 00000000000000000000000000000000 Acting 00100000000001000000000001000000 daytime 00000000000100011000001000110000 shoestring 00000000000000000000000000000000 ambivalence 00000000000000000000000000000000 innocence 00000000000101111010110010100111 dialects 00000000000000000000000000000000 inferior 00000000000000010101001110010000 lump-sum 00000000000000000000000000000000 comparing 00000000000110001111111101000000 Private-sector 00100000000000000000000000000000 fortunate 00000000000101101111110000110010 statist 00000000000000000000000000000000 gossipy 00000000000000000000000000000000 Kori 00100000000000000000000000000000 cohesive 00000000000000000000000000000000 machikin 00000000000000000000000000000000 brushes 00000000000000000000000000000000 116 00000000000000000000000000000000 Telos 00100000000000000000000000000000 Salvatori 00100000000000000000000000000000 QuesTech 01000000000000000000000000000000 medium-size 00000000000000000000000000000000 tubes 00000000000111001011101111001001 W.J. 01000000000000000000000000000000 framework 00000000000111010011101001100111 mixture 00000000000111111101101000111111 Ethan 00101111111011111010011000011000 informative 00000000000110000101010010010000 plowed 00000000001110101001001000110010 alcoholism 00000000000111001011110010100111 addicted 00000000000000000000000000000000 rim 00000000000011000111110110101000 favoritism 00000000000000000000000000000000 unencumbered 00000000000000000000000000000000 Reese 00100000000000000000000000000000 18.75 00000000000000000000000000000000 enlarged 00000000000000111010111001000000 sewers 00000000000000000000000000000000 glimpses 00000000000000000000000000000000 unfolds 00000000000000000000000000000000 spirited 00000000000110000111000010010000 idealism 00000000000000000000000000000000 spewing 00000000000000000000000000000000 critique 00000000000111010000100101100111 choking 00000000000000000000000000000000 obfuscation 00000000000000000000000000000000 Thief 00100000000111111100010010110101 opium 00000000000000000000000000000000 allure 00000000000111000101111000001111 Ali 00100000000101100001010100001000 Thalmann 00101111111111011111101001001000 Hassan 00100000000010111001000100001000 precluded 00000000000000000000000000000000 salaried 00000000000101101000101000110000 detrimental 00000000000100011001010010010000 pummeled 00000000000000000000000000000000 imposition 00000000000111000101011000001111 feasibility 00000000000011010101111101001111 governance 00000000000111010101001001100111 Leahy 00101111111101010100111010001000 laudable 00000000000000000000000000000000 Practices 00100000000111101111111100100011 monopolize 00000000000000000000000000000000 yearning 00000000000000000000000000000000 10.59 00000000000000000000000000000000 Melvyn 00101111111000010100001000011000 Kyu 00100000000000000000000000000000 Colinas 00100000000000000000000000000000 Staley 00100000000000001100110000001000 salon 00000000000000000000000000000000 Skills 00100000000111101111011100100011 flatten 00000000000000000000000000000000 bug 00000000000111010101011000000001 graders 00000000000000000000000000000000 successive 00000000000000000011101100010000 32-bit 00000000000000000000000000000000 16-bit 00000000000000000000000000000000 impediment 00000000000111010111101100100111 dazzling 00000000000001100101000010010000 80386 00000000000000000000000000000000 crib 00000000000110101000110000000001 Slater 00100000000000000000000000000000 Stuart-James 01000000000000000000000000000000 8.625 00000000000000000000000000000000 Particularly 00100000000110111011000001110010 486-based 00000000000000000000000000000000 uncanny 00000000000000000000000000000000 Archuleta 00100000000000000000000000000000 notifying 00000000000101000001001101000000 securing 00000000000001100111111101000000 symptom 00000000000111111101001000111111 low-ability 00000000000000000000000000000000 coke 00000000000010011110110100101000 derives 00000000000001010001100100110010 boil 00000000000000000000000000000000 counterbid 00000000000000000000000000000000 harsher 00000000000010101100001111000000 eve 00000000000111011010111000001111 flourishing 00000000000111100101000010010000 Fairless 00100000000000000000000000000000 dawning 00000000000000000000000000000000 cushioning 00000000000110001010110001000000 cows 00000000000100111001110101100011 second-half 00000000000000000000000000000000 551 00000000000000000000000000000000 LIT 01000000000010111001101001000000 repeats 00001010010110000011000000010010 vigor 00000000000111110011111010100111 Unions 00100000000111101111100110110011 Harwood 00100000000000000000000000000000 firmness 00000000000011111111111010100111 Bus 00100000000000110101111010110000 tubular 00000000000000000000000000000000 exchangeable 00000000000111101111100110110000 Grain 00100000000000000101101110110000 ballooned 00000000000101111010110000110010 R.I 01000000000000000000000000000000 Suominen 00100000000000000000000000000000 Eggers 00100000000000000000000000000000 Pine 00100000000000110010001000110000 markka 00000000000000000000000000000000 inequities 00000000000000000000000000000000 TWO 01000000000111101011101001010000 Improvement 00100000000111111111001010100111 commentator 00000000000111111010011110110101 slimmer 00000000000001110100001111000000 F-15 00100000000000000000000000000000 31.2 00000000000000000000000000000000 33-year-old 00000000000000000000000000000000 3.68 00000000000000000000000000000000 3.87 00000000000000000000000000000000 Logistics 00100000000000010111101010100001 abrasives 00000000000000000000000000000000 20.6 00000000000000000000000000000000 Evidence 00100000000111101111101110101111 Ondaatje 00100000000000000000000000000000 divestitures 00000000000111110000000010100111 Exit 00100000000010111011001100100111 40th 00000000000000000000000000000000 264 00000000000000000000000000000000 Bluff 00100000000110111001110100100001 legend 00000000000111000000000001000111 batter 00000000000000000000000000000000 runners 00000000000010100100100000110011 beforehand 00000000000000000000000000000000 Branca 00100000000000000000000000000000 Krebs 00101111111010000010100010001000 playoff 00000000000100001000101100100001 Polo 00100000001000001110100000001000 1951 00000000000000000000000000000000 50th 00000000000000000000000000000000 Carnegie-Mellon 01000000000000000000000000000000 eccentric 00000000001101011000110100010000 Jurisprudence 00100000000101011001101001100111 gadgets 00000000000000000000000000000000 non-convertible 00000000000000000000000000000000 Alongside 00100000000000110001000000001010 overhauled 00000000000010010010111001000000 mop 00000000000000000000000000000000 sanctioned 00000100101011010100010000110010 interventions 00000000000111011000110001100111 deepest 00000000000000100111010011010000 superintendent 00000000000000111111110000110101 Crestmont 00100000000000000000000000000000 21.25 00000000000000000000000000000000 Stand 00100000000111111101010110110010 lasers 00000000000110001010111001100011 circus 00000000001000001010100100100001 Membership 00100000000100111100001100100111 Academic 00100000000000000100000000110000 SONG 01000000000110101110101000100001 Nerds 00100000000000000000000000000000 radicals 00000000000100101000100000110011 biology 00000000000011100111001101100001 27.5 00000000000000000000000000000000 conditioning 00000000000111111111000001010111 Freshman 00100000000100101000101000110000 Junior 00100000000000110000101000110000 student-athlete 00000000000000000000000000000000 entrance 00000000000000001111111001100111 Cannell 00100000000000000000000000000000 Students 00100000000000000000011000110011 intercollegiate 00000000000000000000000000000000 disarm 00000000000000000000000000000000 trumpeting 00000000000000000000000000000000 Personally 00100001100010000000010001110010 rationalize 00000000000000000000000000000000 environmentalism 00000000000000000000000000000000 unsound 00000000000000000000000000000000 outdoor 00000000000001110100101010110000 riveting 00000000000000000000000000000000 shredded 00000000000000000000000000000000 wilderness 00000000000000100010110000000001 Tomsho 00100000000000000000000000000000 relinquished 00000000000111100011111001000000 prematurely 00000100011000000000010001110010 McCammon 01000000000000000000000000000000 720 00000000000000000000000000000000 salvo 00000000000000000000000000000000 verdicts 00000000000011001010001000100011 Inter 00100000000111111111100001010111 allege 00000000000011111001100110110010 Strasbourg 00100000000000000000000000000000 messenger 00000000000101100101111000000001 confer 00000000000000000000000000000000 rapid-fire 00000000000000000000000000000000 trays 00000000000000000000000000000000 Harkins 00100000000000000000000000000000 Essentially 00100000001001000000001001110010 facade 00000000000000000000000000000000 enrollment 00000000000101100100011100000111 M 00100000000000000000000000000000 assistants 00000000000000010011110000110011 SS 01000000000000000000000000000000 squads 00000000000000000000110110111001 witnessed 00000000001010101001010000110010 Nazi 00100000000111000001011000110000 Elie 00100000000000000000000000000000 Pissocra 00100000000000000000000000000000 bacterial 00000000000101100101000000110000 Ordinarily 00100000011100000000001001110010 Leemans 00100000000000000000000000000000 privileged 00000000000010000101000010010000 electrogalvanized 00000000000000000000000000000000 inducing 00000000000000000000000000000000 non-toxic 00000000000000000000000000000000 poultry 00000000000110001011111010110000 Bon 00100000000000000000000000000000 allowances 00000000000111001010111100000011 aftertax 00000000000000000000000000000000 frees 00000000000000000000000000000000 controller 00000000000111101111110000110101 Huggins 00100000000000000000000000000000 sidewalk 00000000000011110110111000000001 HAS 01000000000000000000010000010010 sterilizing 00000000000000000000000000000000 Peninsula 00100000000111111101100010100101 6.99 00000000000000000000000000000000 scanners 00000000000010100101111111001001 Encouraged 00100000000101010101110000110010 lightest 00000000000000000000000000000000 Bello 00100000000000000000000000000000 cadet 00000000000000000000000000000000 trick 00000000000111110010101101100111 proclaim 00000000000011011100100110110010 Hawthorne 00100000000000000000000000000000 Lopez 00101111111001110010000100001000 springing 00000000000000000000000000000000 duplicate 00000000011001111111110110110010 Cultural 00100000000011000000000000110000 commercially 00000000000010100000000001110010 iced 00000000000000000000000000000000 beans 00000000000000101100010001111001 salad 00000000000111111101011000000001 cook 00001111111100010111001000001000 pleasant 00000000000000010000011010010000 oil-service 00000000000000000000000000000000 G 00100000000100010101111110101000 wildcat 00000000000000000000000000000000 Swanson 00101111011000101100000010001000 irritates 00000000001101110001000000010010 fifth-largest 00000000000000000000000000000000 arched 00000000000000000000000000000000 dusk 00000000000000000000000000000000 hybrids 00000000000000000000000000000000 gingerly 00000000000000000000000000000000 six-day 00000000000000000000000000000000 ladder 00000000000110110101001001100111 polish 00000000000001111000010100110000 spray 00000000000000111110110110110111 aflatoxin 00000000000110011011110010100111 railing 00000000000000000000000000000000 Gustafson 00100000000000000000000000000000 Calgene 00100000000000000000000000000000 soggy 00000000000000000000000000000000 ornamental 00000000000000000000000000000000 stock-trading 00000000000000000000000000000000 helplessly 00000000000000000000000000000000 Huge 00100000000000000010100000010000 breakdowns 00000000000000000000000000000000 lubricant 00000000000000000000000000000000 9.81 00000000000000000000000000000000 Bavaria 00100000000000000000000000000000 4.97 00000000000000000000000000000000 6.45 00000000000000000000000000000000 528 00000000000000000000000000000000 1,015 00000000000000000000000000000000 32.99 00000000000000000000000000000000 443 00000000000000000000000000000000 traveler 00000000000011000110010010110101 organ 00000000000110001010001011100001 4.375 00000000000000000000000000000000 2.28 00000000000000000000000000000000 3,300 00000000000000000000000000000000 sociology 00000000000011010010001101100001 Mostly 00100000000111101011000001110010 incorporate 00000000000011101111101110110010 self-esteem 00000000000000000000000000000000 Baltimore-based 00100000000000000000000000000000 cared 00000000000111111010110111000010 2023 00000000000000000000000000000000 defeats 00000000000010011111001000100011 three-part 00000000000000000000000000000000 triple-B-plus 01000000000000000000000000000000 attaches 00000000000000000000000000000000 3.50 00000000000000000000000000000000 Jujo 00100000000000011111010000110000 Hongkong 00101111111011000011111010101000 complementary 00000000000000000100010000010000 Efforts 00100000000111111101011100100111 month-to-month 00000000000000000000000000000000 18.9 00000000000000000000000000000000 broadened 00000000000111100100111001000000 wheelchair 00000000000100101100110000000001 superiors 00000000000111111011110000110011 12:01 00000000000000000000000000000000 hungry 00000000000111101110110110010000 maiden 00000000000000000000000000000000 2.14 00000000000000000000000000000000 wobbly 00000000000000000000000000000000 steadied 00000000000000000000000000000000 Soares-Kemp 01000000000000000000000000000000 Francoise 00100000000000000000000000000000 essay 00000000000111100010001000100111 sequence 00000000000110101001100101100111 chiefs 00000000000000000111000000100111 ZBB 01000000000000000000000000000000 progressively 00000000000111001000010001110010 understate 00000000000000000000000000000000 Whip 00100000000000000010000110110101 graph 00000000000000000000000000000000 forging 00000000000001001011111101000000 overreact 00000000000000000000000000000000 human-based 00000000000000000000000000000000 intermediate-term 00000000000000000000000000000000 17-year-old 00000000000000000000000000000000 in-state 00000000000000000000000000000000 305 00000000000000000000000000000000 Bakersfield 00100000000000000000000000000000 Dudley 00101111111000001111100010011000 Eppel 00101111110011001110110010001000 peeled 00000000000000000000000000000000 Poverty 00100000000111101011011100000111 IV 01000000000000000000000000000000 Temple-Inland 01000000000000000000000000000000 Clarke 00101111111000010001100010001000 wicker 00000000000000000000000000000000 teen 00000000111001010000001000110000 authorizing 00000000010110010000000000001010 prosper 00000000101101111101010110110010 allotments 00000000000111101110010000100011 eight-year-old 00000000000000000000000000000000 southeastern 00000000000000101000110110101000 sharecroppers 00000000000000000000000000000000 ponds 00000000000000000000000000000000 Traxler 00100000000000000000000000000000 Democratic-controlled 00100000000000000000000000000000 Holly 00100000000110100111000100101000 life-of-contract 00000000000000000000000000000000 subcommittees 00000000000000000000000000000000 retrenchment 00000000000101001101101010100111 BUSH 01001111111100101001000110001000 GORBACHEV 01001111111100111111010010001000 varies 00000000000000101100001000110010 escaping 00000000000101010100100101000000 blockade 00000000000111110100110010100111 oceans 00000000000000000000000000000000 caps 00000000011001000111000000010010 warmed 00000000000000000000000000000000 Achievement 00100000000110111111111001100111 legalizing 00000000000000000000000000000000 Forum 00100000000110010011101001100111 hydraulic 00000000000000011010101010110000 DC-10 01000000000000000000000000000000 majority-owned 00000000000000000000000000000000 understatement 00000000000000000000000000000000 ebullient 00000000000101100100110100010000 linkages 00000000000100010000010000100111 Jarrett 00101111001010101100000010001000 crumbled 00000000000000000000000000000000 2791.41 00000000000000000000000000000000 f-As 01000000000000000000000000000000 e-In 01000000000000000000000000000000 c-Translated 01000000000000000000000000000000 b-As 01000000000000000000000000000000 Flexible 00100000000000100010010010010000 Closed 00100000000000000000110100110010 dealer-to-dealer 00000000000000000000000000000000 unadited 00000000000000000000000000000000 graduated 00000000010111011110001000110010 AMT 01000000000000000000000000000000 classmates 00000000000101000011110000110011 outskirts 00000000000000000000000000000000 champagne 00000000000111111000001100100001 possessing 00000000000000000000000000000000 1989B 01000000000000000000000000000000 10-year-old 00000000000000000000000000000000 quiz 00000000000101101101001010110111 possessed 00000000000111100100110111000010 titans 00000000000000000000000000000000 238 00000000000000000000000000000000 yardstick 00000000000111001000111101100111 weights 00000000000000000000000000000000 seas 00000000000111011001001001100111 Rhode 00100000000011111010011010101000 0.45 00000000000000000000000000000000 2596.72 00000000000000000000000000000000 Houghton 00100000111100100000000100001000 Leominster 00100000000000000000000000000000 aggregate 00000000000000001100000100010000 attrition 00000000000111100110000010100111 Jovanovich 00101111111110010011010001001000 4.90 00000000000000000000000000000000 Fundamental 00100000000000101010000000110000 enticed 00000000000000000000000000000000 currency-exchange 00000000000000000000000000000000 Eurobond 00100000000000000010111110110000 wood-products 00000000000000000000000000000000 raged 00000000001001000110001000110010 bird 00000000000111001100000000001000 locking 00000000000101100110100001000000 374 00000000000000000000000000000000 penetrated 00000000000000000000000000000000 wet 00000000000000011110011010010000 fifth-grade 00000000000000000000000000000000 out-of-state 00000000000000000000000000000000 fundraising 00000000000000000000000000000000 lax 00000000000111111001010010010000 ascending 00000000000000000000000000000000 Ajinomoto 00100000000000000000000000000000 66.5 00000000000000000000000000000000 Kofcoh 00100000000000000000000000000000 283.7 00000000000000000000000000000000 15-a-share 00000000000000000000000000000000 fleeing 00000000000111111100100101000000 N.A. 01000000000000000000000000000000 Reichmann 00100000000000011000000000001000 46.2 00000000000000000000000000000000 Increasing 00100000000000000101010001000000 persists 00000000000100000110001000110010 campaigning 00000000000111110101000001000000 Glucksman 00100000000000000000000000000000 wavering 00000000000000000000000000000000 hunky-dory 00000000000000000000000000000000 undermining 00000000000111111011011101000000 showcase 00000000000111110010011110110111 Texas-based 00100000000000000000000000000000 teen-agers 00000000000000000000000000000000 coolly 00000001011000010000010001110010 elevated 00000000000011111010111001000000 fulfilled 00000011110111010100010000110010 11.95 00000000000000000000000000000000 aiding 00000000000101100001011101000000 entitling 00000000000000000000000000000000 super-majority 00000000000000000000000000000000 Webb 00101111111111000001000100001000 reinsurers 00000000000000000000000000000000 Berger 00101111111100101010000010001000 Ownership 00100000000000000000000010100111 Yukon 00100000000000000000000000000000 post-split 00000000000000000000000000000000 INTERNATIONAL 01000000000000000001010010110000 seesaw 00000000000000000000000000000000 52.9 00000000000000000000000000000000 71.9 00000000000000000000000000000000 Merger 00100000000111101010100011001111 318 00000000000000000000000000000000 Elected 00100000000111011010010000110010 ammonium 00001111111010001010101010110000 suspicions 00000000000111101101011010101111 pave 00000000000011100110111110110010 monolithic 00000000000010100001000010010000 Model 00100000000000000000000001000111 Instrument 00100000000000011101011001100111 GRiD 01000000000000000000000000000000 tardy 00000000000000000000000000000000 62-year-old 00000000000000000000000000000000 megabyte 00000000000001001000000001000111 hard-charging 00000000000000000000000000000000 microprocessor-based 00000000000000000000000000000000 renegotiated 00000000000011010010111001000000 Vaux 00100000000000000000000000000000 Labatt 00100000000000000000000000000000 Wednesdays 00100000000000000000000000000000 Offered 00100000000110100000010000110010 Carmichael 00100000000000000000000000000000 Door 00100000000111011011111000000001 stricter 00000000000010001100001111000000 Mel 00101111111000001010001000011000 Fortune 00100000000010001010000001000111 admired 00000000000000100101010000110010 Lack 00100000000111111111111110111111 Phyllis 00100000000000000000000000000000 authenticity 00000000000111111001011000001111 dramatization 00000000000000000000000000000000 Lawrenson 00100000000000000000000000000000 recruit 00000000000101101010100110110111 ,... 00000000000000000000000000000000 813 00000000000000000000000000000000 combing 00000000000000000000000000000000 toughest 00000000000000010011010011010000 Willie 00101111111001010010111000011000 microcomputers 00000000000000000000000000000000 Alton 00100000000000000000000000000000 audition 00000000000000000000000000000000 Minutes 00100000000000000000001100011011 57th 00000000000000000000000000000000 Nowhere 00100000001101010100010001110010 cost-conscious 00000000000000000000000000000000 Scarborough 00100000000000000000000000000000 Shriver 00101111111110101111111010101000 starring 00000000000000010110011010000010 delivers 00000111010010000011000000010010 Diane 00101111110000010010001000011000 defuse 00000000000110011011111110110010 Corporation 00100000000111101111101001000101 3.04 00000000000000000000000000000000 CDC 01000000000000000000000000000000 bombing 00000000000000000010010101001111 civil-rights 00000000000000000000000000000000 horizons 00000000000000001011011011101001 Lieber 00100000000000000000000000000000 re-enactment 00000000000000000000000000000000 structuring 00000000000111011101111101000000 725 00000000000000000000000000000000 24.2 00000000000000000000000000000000 for-profit 00000000000000000000000000000000 watchdog 00000000000001101101000010110000 industrialists 00000000000111110111111000110011 liberalizing 00000000000111110111011101000000 evolving 00000000000001111101010001000000 buzzword 00000000000000000000000000000000 milling 00000000000010100101010000110000 machining 00000000000000010001100101100001 Fond 00100000001110101011110000110010 303 00000000000000000000000000000000 buoy 00000000000100100110111110110010 Triangle 00100000000000100001000100101000 Pechiney 00100000001010011010111100101000 Kahan 00101111110110111100000010001000 muddied 00000000000000000000000000000000 debtors 00000000000111101100000001110011 Hemisphere 00100000000111111001001100100101 49.7 00000000000000000000000000000000 Kelley 00101111111110100110100010001000 unattractive 00000000000010110011001110010000 anti-monopoly 00000000000000000000000000000000 frank 00001111111000000010010100001000 scoops 00000000000000000000000000000000 suicide 00000000000000100011110010100111 motions 00000000000101100011101000100011 distraction 00000000000000000000000000000000 stave 00000000000110110101001110110010 NESB 01000000000000000000000000000000 factually 00000000101100101000000001110010 directives 00000000000010010011101000100011 farming 00000000000000101000001100100001 Morocco 00100000000111010100111101101000 aloft 00000000000000111011111100110010 Nacional 00101111111100111100101000101000 fluctuation 00000000000111011011111010100111 Import 00100000000000000001000100010000 souring 00000000000000000000000000000000 57.50 00000000000000000000000000000000 disposition 00000000000111111110101001001111 Sass 00101111111001010110001010001000 bombers 00000000000111100110000110001001 constrained 00000000100101010001110000110010 Huntsville 00100000000101101011101001101000 smiles 00000000100101001111000000010010 oats 00001111111111110010010001001000 3.80 00000000000000000000000000000000 Flakes 00100000000000000000000000000000 Cheerios 00100000000000000000000000000000 antagonize 00000000000000000000000000000000 bend 00000000000111001110010110110010 fathers 00000000000111100010110001100011 Babies 00100000000000101011011100110011 specifying 00000000000000000000000000000000 Form 00100000000111111111111101110111 replete 00000000000000000000000000000000 ramifications 00000000000111111011001110001111 arcane 00000000000000101100110100010000 passport 00000000000111010101010000000001 speakers 00000000000111110010110101100011 Crawford 00101111111100100100000010001000 soothe 00000000011110010111111110110010 reconsideration 00000000000000000000000000000000 Accounts 00100000000111100000001110111001 budgeting 00000000000011110000110001000000 Suns 00100000000000000000000000000000 synergy 00000000000001010110110000100111 teaming 00000000000000000000000000000000 understandably 00000000111100000000001001110010 Tool 00100000000100000110001000100001 Silas 00100000000000000000000000000000 8.52 00000000000000000000000000000000 correspondence 00000000000111001010110000100111 Medtronic 00100000000000000000000000000000 puny 00000000000000000000000000000000 Beckman 00101111111001000010010001001000 hops 00000000000000000000000000000000 Wessels 00100000000000000000000000000000 modeled 00000000000010110000100000110010 hesitantly 00000010111001000001001001110010 screeching 00000000000110110000010000010000 Raul 00101111111001000110001100011000 Newmont 00100000000010101011000100101000 Turkish 00100000000000011000010100110000 libertarians 00000000000000000000000000000000 czars 00000000000000000000000000000000 fragility 00000000000111011111011000001111 quitting 00000000000110100011100001000000 celebrities 00000000000111011000111000110011 unwind 00000000000000000000000000000000 quipped 00000000000000000000000000000000 spanking 00000000000000000000000000000000 butt 00000000000000000000000000000000 fountains 00000000000000000000000000000000 unjust 00000000000000000000000000000000 edgy 00000000000000000000000000000000 suited 00000000001101101100110000110010 olds 00000000000000000000000110000000 NORC 01000000000000000000000000000000 greats 00000000000000000000000000000000 duration 00000000000111010111111000001111 unknowns 00000000000000000000000000000000 payers 00000000000000000000000000000000 Denise 00100000000000000000000000000000 decreases 00000000000111101110101110000011 lighten 00000000000000000000000000000000 dishes 00000000000001000101110101100011 washing 00000000001111001010110001000000 Sutcliffe 00100000000000000000000000000000 replacements 00000000000111100010101110100011 Weekend 00100000000111101111010000010111 assailed 00000000000000000000000000000000 reaped 00000000000110101001010000110010 lecturer 00000000000000000000000000000000 Protocol 00100000000011010111101001100111 Scotto 00101111111100111010110010001000 Tories 00100000000111110100011110110011 grueling 00000000000000001110011010010000 Horne 00100000000000000000000000000000 index-related 00000000000000000000000000000000 strenuously 00000010011001000001001001110010 exchequer 00001111111100010101000110010101 instinctive 00000000000000000000000000000000 Araskog 00101111111110011000100010001000 Writers 00100000000110101111100110110011 Guild 00100000000001000000001100100101 derision 00000000000000000000000000000000 3.28 00000000000000000000000000000000 accelerates 00000000000000000000000000000000 queries 00000000000110111001101000100011 harass 00000000000000000000000000000000 impediments 00000000000000000000000000000000 Darkhorse 00100000000000000000000000000000 Samnick 00100000000000000000000000000000 Poindexter 00100000000111111111111010001000 Adviser 00100000000111111100110110110101 infuse 00000000000000000000000000000000 punishing 00000000000000110101011101000000 intellectually 00000000111000101000000001110010 stratospheric 00000000000000000000000000000000 American-style 00100000000000000000000000000000 unplanned 00000000000000000000000000000000 Rubenstein 00100000000000000000000000000000 Maybelline 00100000000000000000000000000000 overlap 00000000000111110101001010110111 opulent 00000000010101011000001000110000 pink 00000000000110000010001000110000 Hanifen 00100000000000000000000000000000 Fingers 00100000000100000111111101100011 Olay 00100000000000000000000000000000 referrals 00000000000111110001001100000011 intuition 00000000000000000000000000000000 culprits 00000000000000000000000000000000 blend 00000000000111011000100101100111 Tropics 00100000000000000000000000000000 chemist 00000000000111001001011110110101 18-year-old 00000000000000000000000000000000 cruising 00000000000000110110100001000000 teenage 00000000000000000000000000000000 Anglo-Dutch 01000000000000000000000000000000 pneumonia 00000000000111110011010010100111 bombarded 00000000000000000000000000000000 stock-manipulation 00000000000000000000000000000000 mistrials 00000000000000000000000000000000 NBC-TV 01000000000000000000000000000000 out-of-court 00000000000000000000000000000000 Concern 00100000000100000000100111110101 balloons 00000000001010100101110101100011 settles 00000101010010000011000000010010 1.74 00000000000000000000000000000000 Gerhard 00101111111111111111101100011000 2.90 00000000000000000000000000000000 Imhoff 00100000000000000000000000000000 Weakness 00100000001111111111111010100111 gleeful 00000000000000000000000000000000 market-maker 00000000000000000000000000000000 apology 00000000000111100011101100100111 municipality 00000000000111110100010010110101 39.8 00000000000000000000000000000000 jettisoning 00000000000000000000000000000000 Foreigners 00100000000111011110111000110011 mini-component 00000000000000000000000000000000 demolished 00000000000000000000000000000000 15-day 00000000000000000000000000000000 gas-fired 00000000000000000000000000000000 die-hard 00000000000000000000000000000000 PAPERS 01000000000110100110001000100011 Backe 00100000000000000000000000000000 Bouillaire 00100000000000000000000000000000 brainchild 00000000000000000000000000000000 interpretations 00000000000111101101000100101111 10-month 00000000000000000000000000000000 Journalism 00100000000000000101101101100001 operative 00000000000001100111110000110101 home-building 00000000000000000000000000000000 Dresser 00100000000000100011000100101000 tides 00000000000000000000000000000000 5th 00000000000000000000000000000000 anti-Soviet 01000000000000000000000000000000 Vladimir 00100000000110010101111000011000 transported 00000000101111000000010000110010 Heidelberg 00100000000000000000000000000000 manners 00000000000111101111010101100011 Caution 00100000000111101100111010100111 Structural 00100000001001000010000000110000 commendable 00000000000000000000000000000000 Players 00100000000111100110001001110011 Deposits-a 00100000000000000000000000000000 spiked 00000000000000100110110110110111 Bonnie 00101111111000001000011000011000 Sometime 00100000000000000110001001100010 a-Average 01000000000000000000000000000000 repurchasing 00000000000000000000000000000000 CRA 01000000000000000000000000000000 b-Current 01000000000000000000000000000000 tore 00000000001111110001001000110010 35.7 00000000000000000000000000000000 tax-rate 00000000000000000000000000000000 unaffiliated 00000000000000000000000000000000 anchor 00000000000111110100100100100001 Cabinet 00100000000000000000000010000001 overtures 00000000000110000101101000100011 18.375 00000000000000000000000000000000 15.50 00000000000000000000000000000000 unbelievable 00000000000010010101110110010000 irritation 00000000000000001110111010100111 chilly 00000000000000000000000000000000 egos 00000000000111110100111101100011 macroeconomic 00000000000000011011000000110000 Shilling 00101111111011100110101010001000 balancing 00000000000010010010110001000000 2.22 00000000000000000000000000000000 overhauling 00000000000111110101011101000000 carry-forwards 00000000000000000000000000000000 slow-growing 00000000000000000000000000000000 defense-electronics 00000000000000000000000000000000 screwed 00000000000000000000000000000000 fabricate 00000000000000000000000000000000 outdated 00000000000001011100000110010000 39-year-old 00000000000000000000000000000000 Ultimate 00100000000000010000010011010000 merchant-banking 00000000000000000000000000000000 prominence 00000000000111011011011010100111 frames 00000000001010100111110101100011 Goldinger 00100000000000000000000000000000 overlook 00000000010101010111111110110010 wheel 00000000000111001001100101100111 Inspectorate 00100000000000000000000000000000 rocking 00000000001100000110100001000000 Broberg 00100000000000000000000000000000 1.8500 00000000000000000000000000000000 DAT 01000000001110011000001010110000 143.80 00000000000000000000000000000000 copyrighted 00000000001110011100101010110000 Assessment 00100000000111001110111001100111 submitting 00000000000111111101111101000000 requisite 00000000000000000000000000000000 Nike 00100000000110010011111100101000 piecemeal 00000000000010011101000000010000 courier 00000000000001001010010010110000 10:30 00000000000000000000000000000000 Speed 00100000000111101110110110110111 variable 00000000001110110000011100010000 Afterward 00100000001010100100010001110010 McGwire 01000000000000000000000000000000 61-year-old 00000000000000000000000000000000 tapping 00000000000111000111111101000000 187 00000000000000000000000000000000 Rolling 00100000000000111010100001000000 Todd 00101111111001100001000100001000 internationalization 00000000000000000000000000000000 Rickey 00100000000000000000000000000000 ultimatum 00000000000101000011111001100111 Different 00100000000000001000010000010000 pre-emptive 00000000000000000000000000000000 elephants 00000000011001100111110101100011 Snyder 00101111111110001001001000001000 renaissance 00000000000110010001100100100001 140,000 00000000000000000000000000000000 shuttered 00000000000011100101101001000000 podium 00000000000111111111010011001111 exiled 00000000000110010010101000110000 stopper 00000000000000000000000000000000 Roughly 00100000000000100111000001110010 Riordan 00101111111001000101000100001000 Founded 00100001010011000101010000110010 Bullocks 00100000000000000000000000000000 Patricia 00101111111000000001010110011000 Y&R 01000000000000000000000000000000 hands-on 00000000000000000000000000000000 dining 00000000000001111001111010110000 aisles 00000000000000000000000000000000 Somewhere 00100000000101010100010001110010 OECD 01000000000000000000000000000000 Keynesian 00100000001001010000000000110000 satellite-TV 01000000000000000000000000000000 shores 00000000000100111100111101100011 impervious 00000000000000000000000000000000 definitions 00000000000111001101100100101111 microwave 00000000000011000010101010110000 confront 00000000001100101011111110110010 summarily 00000000110000000000010001110010 reigning 00000000000000000000000000000000 aramid 00000000000000000000000000000000 1,700 00000000000000000000000000000000 philosophers 00000000000000000000000000000000 polyester 00000000001001011100101010110000 rude 00000000000111110110011010010000 scraps 00000000000000000000000000000000 Strieber 00100000000000000000000000000000 fumes 00000000000110001111000000010010 spenders 00000000000000000000000000000000 hardy 00000000000001101110000000001000 2.95 00000000000000000000000000000000 276.8 00000000000000000000000000000000 ammunition 00000000000110001111111001100011 baseman 00000000000000000000000000000000 sidelined 00000000000000000000000000000000 newsstands 00000000000000000000000000000000 1942 00000000000000000000000000000000 592 00000000000000000000000000000000 ON 01000000000000000000010000001010 Ventura 00100000000000000000000000000000 videocassettes 00000000000101011100111001100011 depicts 00000000000000000000000000000000 Daimler 00100000000101110111111100101000 gilts 00000000000011001111110010100111 gainer 00000000000111010100111010110101 brow 00000000000000000000000000000000 Bristol 00100000000100000111101001101000 Brae 00100000000000000000000000000000 non-binding 00000000000000000000000000000000 Indexing 00100000000111101100111000111001 Conseco 00100000000000000000000000000000 Billings 00100000000111111110011000000111 FIRST 01000000000000000000000111010000 Tinker 00101111110010110101001000001000 224 00000000000000000000000000000000 Blues 00100000000111101111101101000001 rentals 00000000000111100011101111001001 3-for-2 00000000000000000000000000000000 menswear 00000000000000000000000000000000 intimidating 00000000000000000000000000000000 mystique 00000000000000000000000000000000 cashed 00000000100101001100010000110010 bounces 00000000000000000000000000000000 knot 00000000000000000000000000000000 streamed 00000000000000000000000000000000 pitchers 00000000000000000000000000000000 Montreal-based 00100000000000000000000000000000 token 00000000001000001101000000010000 transports 00000000000000000000000000000000 laggard 00000000000000111101000010010000 peer 00000000000000000111110000100001 envelope 00000000001011110111111001100111 CreditWatch 01000000000000001010010011010000 ACQUISITION 01000000000111101111110001001111 70.1 00000000000000000000000000000000 Expect 00100000000111111101000110110010 Ketchum 00101111111110111001001000001000 motel 00000000000000001001111010110000 473 00000000000000000000000000000000 lighted 00000000000000000000000000000000 spectacle 00000000000111100110011000001111 ribs 00000000000000000000000000000000 Amy 00101111111000111100001000011000 Anglo-French 01000000000000000000000000000000 Bermuda-based 00100000000000000000000000000000 sin 00000000000110110000000001000111 brutally 00000000000000000000000000000000 sack 00000000000110110100000000001000 Stena 00100000000000000000000000000000 Floyd 00101111111000011100000100001000 Tiphook 00100000000000000000000000000000 portraits 00000000000111101101100100101111 Protestants 00100000000000000000000000000000 963 00000000000000000000000000000000 policewoman 00000000000000000000000000000000 9-11 00000000000000000000000000000000 one-shot 00000000000000000000000000000000 Althea 00100000000000000000000000000000 dramas 00000000010010100111110101100011 bouts 00000000000110001101100100101111 knocks 00000000000000000000000000000000 Cayne 00100000000000000000000000000000 Contracts 00100000000000000001000100011001 occupant 00000000000000000000000000000000 concurrent 00000000000011111000010000110000 realists 00000000000000000000000000000000 Hurley 00100000000000000000000000000000 fruition 00000000000000000000000000000000 sovereign 00000000000100011000101000110000 uneven 00000000000110100100110100010000 velocity 00000000000100011111011000001111 copier 00000000000000011101011010110000 rear-seat 00000000000000000000000000000000 12.2 00000000000000000000000000000000 copiers 00000000000010000101111001100011 poison-pill 00000000000000000000000000000000 complexities 00000000000111001111111000001111 NFIB 01000000000000000000000000000000 Fabulous 00100000000101011000011010010000 Carolyn 00100000000000000000000000000000 mental-health 00000000000000000000000000000000 Alltel 00100000000101100100111100101000 pickups 00000000000010101111101001100011 Rail 00100000000010000001111010110000 audible 00000000000000000000000000000000 incidental 00000000000000000000000000000000 Surveys 00100000000000101010001000100011 Crowntuft 00100000000000000000000000000000 turban 00000000000000000000000000000000 induces 00000000000000000000000000000000 Jath 00100000000000000000000000000000 buttress 00000000000000000000000000000000 non-prescription 00000000000000000000000000000000 bladder 00000000000000000000000000000000 attests 00000000000000000000000000000000 Psyllium 00100000000001110110110000100001 DOT 01000000010010000010110001000000 Krishnamurthy 00100000000000000000000000000000 health-food 00000000000000000000000000000000 parlance 00000000000000000000000000000000 flea 00000000000000000000000000000000 lull 00000000000111101001101100110111 stunt 00000000000001001101001010110111 airborne 00000000000000001110001010110000 Foret 00100000000000000000000000000000 PRODUCTS 01000000000000000000000011001001 rock'n 00000000000000000000000000000000 historian 00000000000110100010011110110101 i.e. 00000000000000000000000000000000 instinct 00000000000011001111111001100111 souls 00000000000000100100111101100011 Walk 00100000000111011110010110110010 Analog 00100000000000000000000000000000 Stag 00100000000000000000000000000000 Beech 00100000000001100010111000101000 nightclub 00000000000000000000000000000000 Leap 00100000000111101110011000110111 ballistic 00000000000000010101110000110000 astute 00000000000001001100110100010000 powered 00000000001010101111010000110010 530 00000000000000000000000000000000 sensed 00000000000110100100110111000010 comparatively 00000000000111111100000001110010 E.W. 01000000000000000000000000000000 albums 00000000000000000110101001100011 solvency 00000000000000000111101101001111 proficient 00000000000000000000000000000000 scrapping 00000000000011000101011101000000 62%-owned 00000000000000000000000000000000 markdown 00000000000000000000000000000000 balloonists 00000000000000000000000000000000 cutback 00000000000111011101101010100111 exceptional 00000000000000010000110100010000 53.3 00000000000000000000000000000000 Ginn 00100000000000000000000000000000 Jaya 00100000000000000000000000000000 hot-air 00000000000000000000000000000000 endings 00000000000000000000000000000000 Irian 00100000000000000000000000000000 temblors 00000000000000000000000000000000 feeble 00000000000101001101000000010000 Algeria 00100000000111100001111101101000 scaling 00000000000111011101100001000000 sailors 00000000000000100100100000110011 Romanee-Conti 01000000000000000000000000000000 accompaniment 00000000000000000000000000000000 Tache 00100000000000000000000000000000 Israeli-occupied 00100000000000000000000000000000 relocate 00000000000111010110001110110010 Pushkin 00100000000000000000000000000000 legalization 00000000000111100111000101001111 Roederer 00100000000000000000000000000000 MasterCard 01000000000101111100110100101000 Monogram 00100000000000000000000000000000 Cristal 00100000000000000000000000000000 doomsayers 00000000000000000000000000000000 polling 00000000000000000010100101100001 flagging 00000000000001011011100000010000 McFall 01000000000000000000000000000000 short-covering 00000000000000000000000000000000 Chateau 00100000000000000000000000000000 sunny 00000000000001000011011010010000 rendition 00000000000000000000000000000000 unnerving 00000000000000000000000000000000 Sinatra 00100000000000000000000000000000 tout 00000000001010100111111110110010 Higgins 00101111111100100010111000001000 sparks 00000000000000000000010010000000 spectacularly 00000000000000000000000000000000 Champagne 00100000000111111000001100100001 110.6 00000000000000000000000000000000 complement 00000000000111011110001110110010 tacit 00000000000000011101000000010000 5.99 00000000000000000000000000000000 Hambros 00100000000000000000000000000000 Certificates 00100000000111111111111100101111 Asset-Backed 01000000000000000000000000000000 pledging 00000000001101101010111000110010 reselling 00000000000000000000000000000000 acid-rain 00000000000000000000000000000000 swear 00000000000000000000000000000000 Scottsdale 00100000000111101100101001101000 9.78 00000000000000000000000000000000 kidding 00000000000001001110010001110010 protege 00000000000111111110001100111111 service-industry 00000000000000000000000000000000 Seeing 00100000000111111001000101000000 cult 00000000000110101001010000000001 '40s 00000000000000000000000000000000 '50s 00000000000000000000000000000000 grapes 00000000000111001011010101100011 borne 00000000110001110010110000110010 skins 00000000000000000000000000000000 Raw-steel 00100000000000000000000000000000 awfully 00000000000001111100000001110010 six-packs 00000000000000000000000000000000 subcontractors 00000000000101011011110000110011 coal-fired 00000000000000000000000000000000 graveyard 00000000000000000000000000000000 78.8 00000000000000000000000000000000 non-striking 00000000000000000000000000000000 inaccurately 00000000000000000000000000000000 interrupting 00000000000000000000000000000000 Canepa 00100000000000000000000000000000 astronomical 00000000000000000000000000000000 3.72 00000000000000000000000000000000 unfolded 00000000000000000000000000000000 heroic 00000000000001011001000010010000 Blaine 00100000000000000000000000000000 Shelly 00100000000000000000000000000000 acclaim 00000000000000000000000000000000 Signs 00100000000111101101111110101111 reinstate 00000000000011001110001110110010 moderated 00000000000000000000000000000000 drug-interdiction 00000000000000000000000000000000 disband 00000000000000000000000000000000 strike-force 00000000000000000000000000000000 autonomous 00000000000010001000101001000000 G.D. 01000000000000000000000000000000 16.375 00000000000000000000000000000000 3.41 00000000000000000000000000000000 Guides 00100000000010111111000000010010 3.85 00000000000000000000000000000000 112.5 00000000000000000000000000000000 Placement 00100000000111101000000100001001 Depot 00100000000111101100111110000010 57.5 00000000000000000000000000000000 Balzac 00100000000000000000000000000000 lit 00000000000010111001101001000000 apologies 00000000000111111111001100010111 Presse 00100000000000000000000000000000 diners 00000000000110111100100000110011 Copperweld 00100000000000000000000000000000 Nesbitt 00100000000000000000000000000000 porch 00000000000000000000000000000000 vertical 00000000000111000010000000110000 sanitation 00000000000000110001100000110000 Carver 00101111111110011101001000001000 Gaylord 00101111111100011000010000001000 liquefied 00000000000000000000000000000000 briskly 00000000010001000000010001110010 tangle 00000000000000000000000000000000 Roche 00100000000101101011000001001000 Amazon 00100000000000000000000000000000 bickering 00000000000110010010111010100111 Minna 00100000000000000000000000000000 Depositary 00100000000011100010111010101000 whereas 00000000000111111001101001000010 Receipts 00100000000100001000001100000011 --$ 00000000000000000000000000000000 deleted 00000011001011010100010000110010 cascade 00000000000000000101100010100101 Lima 00100000000001100111111001101000 25.6 00000000000000000000000000000000 extracted 00000001100101010100010000110010 chromosomes 00000000000000000000000000000000 Jew 00100000000111111110010010110101 haunt 00000000000011011011101110110010 lethal 00000000001000000101010010010000 Equally 00100000000001100000000001110010 Mergers 00100000000111101110000010100111 cancerous 00000000000000000000000000000000 2645.90 00000000000000000000000000000000 Face 00100000000000000000000011110111 packet 00000000000000000000000000000000 uncover 00000000010001010111111110110010 23.3 00000000000000000000000000000000 evaporated 00000000010110000110001000110010 Costanza 00100000000000000000000000000000 154.2 00000000000000000000000000000000 imperialism 00000000000000000000000000000000 Sulya 00100000000000000000000000000000 blatant 00000000000001111010000000010000 3.27 00000000000000000000000000000000 burdensome 00000000000001100001010010010000 Monopolies 00100000000111111111100000100001 c-Yields 01000000000000000000000000000000 weekly-average 00000000000000000000000000000000 lest 00000000000111111110101001000010 blunder 00000000000000000000000000000000 9.86 00000000000000000000000000000000 consulted 00000000000001110110010000110010 Agent 00100000000111101011110000110101 251.2 00000000000000000000000000000000 affirmed 00000000011111111001010000110010 stamp 00000000000011101001001010110111 storytelling 00000000000000000000000000000000 acne 00000000000111000110101000110000 doses 00000000000111111110000100101111 Otero 00100000000000000000000000000000 Westport 00100000000101011011101001101000 Criticism 00100000000111110110011010100111 modes 00000000000000000000000000000000 narrative 00000000000011000101010000000001 counterpoint 00000000000000000000000000000000 audacious 00000000000000000000000000000000 19.5 00000000000000000000000000000000 J.L. 01000000000000000000000000000000 Ayer 00100000000110110011000001001000 pre-tax 00000000000000000000000000000000 hamburger 00000000011110001011111010110000 tasteless 00000000000000000000000000000000 encounters 00000000000000110000010000100111 storytellers 00000000000000000000000000000000 pushy 00000000000000000000000000000000 self-congratulatory 00000000000000000000000000000000 flashed 00000000000000000000000000000000 unlawfully 00000000000000000000000000000000 sub-Saharan 01000000000000000000000000000000 Koito 00100000000000000000000000000000 subcompacts 00000000000000000000000000000000 filler 00000000000000000000000000000000 Preston 00101111111010001000000100001000 windshield 00000000000000000000000000000000 tie-up 00000000000000000000000000000000 sorting 00000000011011101110100001000000 belonged 00000000000101100001101000110010 crumpled 00000000000000000000000000000000 tucked 00000000001011011001001000110010 MITI 01000000000000000000000000000000 bulletins 00000000000000000000000000000000 Kuwaiti 00100000000000010000010100110000 treasures 00000000000000000000000000000000 Eve 00100000000111011010111000001111 warehouse 00000000000010010001111010110000 misplaced 00000000000000000000000000000000 Gauguin 00100000000000000000000000000000 value-added 00000000000000000000000000000000 Krisher 00100000000000000000000000000000 research-based 00000000000000000000000000000000 unenthusiastic 00000000000000000000000000000000 antiquities 00000000000000000000000000000000 newsworthy 00000000000000000000000000000000 Newman 00101111111111001010100010001000 214 00000000000000000000000000000000 ADB 01000000000000000000000000000000 program-bashing 00000000000000000000000000000000 Absolutely 00100000000110100000000001110010 stand-alone 00000000000000000000000000000000 Wakui 00100000000000000000000000000000 about-face 00000000000000000000000000000000 Tomash 00100000000000000000000000000000 pullbacks 00000000000000000000000000000000 stockpile 00000000000001000010011000100001 fourth-biggest 00000000000000000000000000000000 Rifkind 00100000000000000000000000000000 vertically 00000000000000000000000000000000 globally 00000000010110100100010001110010 26.7 00000000000000000000000000000000 service-sector 00000000000000000000000000000000 25.4 00000000000000000000000000000000 Spectator 00100000000111110010001010101000 ultrasound 00000000000000000000000000000000 Stearn 00100000000000000000000000000000 forbids 00000000010000110001000000010010 ineffective 00000000000111100110110110010000 three-dimensional 00000000000000000000000000000000 menstrual 00000000000000000000000000000000 pairs 00000000000000000100000100101111 Nikolai 00100000000000000000000000000000 transfusion 00000000000000000000000000000000 dug 00000000101101101001001000110010 luring 00000000000110001001001101000000 consumer-goods 00000000000000000000000000000000 kanji 00000000000000000000000000000000 umbrella 00000000001011101011111001100111 Dome 00100000000111111011010100101000 notebook-sized 00000000000000000000000000000000 supervise 00000000010111001011111110110010 Kyoto 00100000000000000000000000000000 clerical 00000000000110101000101000110000 Dozens 00100000000111101110111000101111 Jacksonville 00100000000111011001101001101000 monetarists 00000000000000000000000000000000 Ratings 00100000000111101011000011000111 Seniors 00100000000000000001111000110011 Various 00100000000000001001000011000000 spreadsheets 00000000000111101000111001100011 genteel 00000000000100010101000010010000 SFE 01000000000000000000000000000000 transmit 00000000101011101111101110110010 9.32 00000000000000000000000000000000 communicate 00000000000111100001010110110010 Hiroshi 00100000000000000000000000000000 real-life 00000000000000000000000000000000 racks 00000000000000000000000000000000 rattle 00000000000000000000000000000000 vacations 00000000000111000111101001100011 Productivity 00100000000000001101011100000111 computerize 00000000000000000000000000000000 Kuehn 00100000000000000000000000000000 Dickens 00100000000000000000000000000000 powerhouses 00000000000000000000000000000000 people... 00000000000000000000000000000000 1.5795 00000000000000000000000000000000 waned 00000000011101000110001000110010 predictive 00000000000000000000000000000000 open-market 00000000000000000000000000000000 Rubendall 00100000000000000000000000000000 lukewarm 00000000000000001101001010010000 pitted 00000000000000000000000000000000 rate-sensitive 00000000000000000000000000000000 Forge 00100000000110011110010110110010 peg 00000000101100111111110110110010 31.25 00000000000000000000000000000000 flourish 00000001001101111101010110110010 risk-free 00000000000000000000000000000000 multifamily 00000000000111111111010000110000 Newly 00100000000000001111001001110010 Contrary 00100000000111110100111000110010 suffers 00000000000010111100001000110010 Send 00100000000010111110101110110010 non-communist 00000000000000000000000000000000 corporatist 00000000000000000000000000000000 Mussolini 00100000000000000000000000000000 unite 00000000001010101110101110110010 unification 00000000000000010101101101001111 rifles 00000000000111101111111111001001 envisaged 00000000000000000000000000000000 nationalistic 00000000000001010000000000110000 corporatism 00000000000000000000000000000000 Tsao 00100000000000000000000000000000 tenets 00000000000000000000000000000000 bent 00000000000110110100100000110010 Evan 00101111111001001010001000011000 addicts 00000000000111101101100010100111 joy 00000000000111101010010000001000 cornfield 00000000000000000000000000000000 pistols 00000000000000000000000000000000 232 00000000000000000000000000000000 flipped 00000000000000000000000000000000 Ranieri 00101111111001111100000010001000 self 00000000000000111110101100100001 readiness 00000000000110001101111100100111 embassy 00000000000111111100101100100101 Sure 00100000000000001110010001110010 encounter 00000000000010011110010110110010 rap 00000000000111111101110000000001 Papua 00100000000000000000000000000000 Mint 00100000000111101111001000100101 individually 00000000000110100100010001110010 demographics 00000000000110001011111101100011 Wako 00100000000000000000000000000000 925 00000000000000000000000000000000 lessen 00000000001100111010111110110010 tipped 00000000111101101001001000110010 Japanese-managed 00100000000000000000000000000000 5.16 00000000000000000000000000000000 Iacocca 00101111111110001000001010001000 Risk 00100000000111111111010101100111 Physicians 00100000000100111100111000110011 Best 00100000000000000001010011010000 wrap 00000000110110010110010110110010 preset 00000000000000000000000000000000 robes 00000000000000000000000000000000 toxic-waste 00000000000000000000000000000000 Passenger 00100000000000000001010101010000 periodicals 00000000000000000000000000000000 NAACP 01000000000000000000000000000000 Attendants 00100000000000010111111001110011 Burr 00100000000000000000000000000000 eagerly 00000001110010000000010001110010 Nine 00100000000111111101111001010000 racially 00000000010001101000000001110010 top-level 00000000000000000000000000000000 racist 00000000000010101110011010010000 Administrator 00100000000110111111110000110101 non-farm 00000000000000000000000000000000 Ottoni 00100000000000000000000000000000 espionage 00000000000110001011100010100111 grisly 00000000000000000000000000000000 Stardent 00100000000000000000000000000000 killers 00000000000000000000000000000000 151,000 00000000000000000000000000000000 misinterpret 00000000000000000000000000000000 herald 00000000000001110011010001001000 castigating 00000000000000000000000000000000 entail 00000000000100011001101110110010 sounding 00000000011110101110100001000000 decentralized 00000000010010000101010010010000 Jenks 00100000000000000000000000000000 appalling 00000000000011001100110110010000 Sherwin-Williams 01000000000000000000000000000000 rung 00000000000000000000000000000000 Sundays 00100000000111110011101001100010 tunes 00000000000110100110010101100011 Dae 00101111111111000101001000110000 envoy 00000000000111000000001100100111 firming 00000000000011100111010001000000 30.4 00000000000000000000000000000000 wrinkle 00000000000000000000000000000000 8.61 00000000000000000000000000000000 jacking 00000000000000000000000000000000 Legislature 00100000000000000010111001000101 promotes 00000000011100010001000000010010 impractical 00000000000111011010011110010000 Ringers 00100000000000000000000000000000 IS 01000000000000000000001000010010 vowing 00000000000010101010111000110010 staple 00000000000110011101100101100111 renegotiate 00000000000110010110001110110010 caustic 00000000000000001101010000110000 Kensington 00100000000000000000000000000000 stagnation 00000000000110001011111010100111 critically 00000000000100111000000001110010 Fang 00100000000000000000000000000000 sentiments 00000000000110101001101000100011 Salim 00100000000000000000000000000000 belfry 00000000000000000000000000000000 Silva 00101111111101000000001010001000 da 00001111111001000011010101001000 Collor 00100000000000000000000000000000 centrist 00000000000000000100011000110000 Whoever 00100000000111001010010001110010 watered-down 00000000000000000000000000000000 CHECKOFF 01000000000111111111010101000101 Perez 00101111111101111100101000101000 M.B.A. 01000000000000000000000000000000 opting 00000000000000000000000000000000 Perrin 00100000000001101001010100001000 Dorothy 00101111111001101010001000011000 CORPORATE 01000000000000000000010000110000 Buck 00100000000111111011000110110111 401 00000000000000000000000000000000 circumventing 00000000000000000000000000000000 balances 00000000000100001010001100000011 625 00000000000000000000000000000000 crane 00001111111101100010001000001000 ritual 00000000000111001101110000000001 smiling 00000000000110100011000001000000 deluge 00000000000111111110000110111111 2603.48 00000000000000000000000000000000 supreme 00000000000111111111110111100101 wrestle 00000000000000000000000000000000 admonition 00000000000001000011111001100111 therapeutic 00000000001100011010000000110000 unruly 00000000000000000000000000000000 propel 00000000000110011000111110110010 worship 00000000000001001001001010110111 cats 00000000000111000001110101100011 cord 00000000000000000000000000000000 dwindling 00000000000001011101010001000000 774 00000000000000000000000000000000 684 00000000000000000000000000000000 inexplicably 00000000000000000000000000000000 happenings 00000000000000000000000000000000 rat 00000000000010000000101100100001 forays 00000000000100001111110001100111 bested 00000000000000000000000000000000 Torrington 00100000000000000000000000000000 Streets 00100000000110111111111000001111 proliferating 00000000000110101101010001000000 musician 00000000000001101111011110110101 Busch 00101111111100011100001000001000 178.5 00000000000000000000000000000000 starters 00000000000111111111100111101000 Opinion 00100000000111100011111001100111 Concerning 00100000001100010000000000001010 dowdy 00000000000000000000000000000000 ASA 01000000000000000000000000000000 toast 00000000000000000000000000000000 Clubs 00100000000000010110110001100011 Quality 00100000000111101110000011100001 paycheck 00000000000000000000000000000000 homemaker 00000000000000000000000000000000 serene 00000000000000000000000000000000 sphere 00000000000111111001001001100111 fudge 00000000000000000000000000000000 applauds 00000000000000000000000000000000 Fitness 00100000000000000100101101100001 exaggerate 00000000000000000000000000000000 63.6 00000000000000000000000000000000 rides 00000001100101001111000000010010 grease 00000000000100100011101100100001 0.02 00000000000000000000000000000000 tuna 00000000000100101011100000100001 jumbos 00000000000000000000000000000000 Panelli 00100000000000000000000000000000 fainting 00000000000000000000000000000000 Bang 00100000000111110111111010110101 26.8 00000000000000000000000000000000 rife 00000000010101110110010000110010 sculptures 00000000001001100111110101100011 183 00000000000000000000000000000000 complications 00000000000111010010011000100011 experimentation 00000000000111011011010010100111 exhibitions 00000000000010010011110101100011 faint 00000000000000111100011010010000 food-processing 00000000000000000000000000000000 tractors 00000000000110111011101001100011 mating 00000000000000000000000000000000 organisms 00000000000111101111001010100011 Biotechnology 00100000000000010011011010110000 foothold 00000000000111011011101110100111 16.9 00000000000000000000000000000000 Fewer 00100000000000000001000111000000 120.7 00000000000000000000000000000000 KPMG 01000000000000000000000000000000 Roland 00101111111001100101100010011000 33.6 00000000000000000000000000000000 5.43 00000000000000000000000000000000 exits 00000000001100100010001000100011 248 00000000000000000000000000000000 38.2 00000000000000000000000000000000 Always 00100000000000110100001001110010 .. 00000000000000000000000000000000 Sino-U.S. 01000000000000000000000000000000 Upper 00100000000000001011100011010000 slowdowns 00000000000000000000000000000000 Mortgage-backed 00100000000000000000000000000000 chain-store 00000000000000000000000000000000 parcels 00000000000111110100000100101111 Dillard 00100000000100101010110000001000 invention 00000000000110000111111001100111 locals 00000000000000000010100110110011 telegraph 00001111111111101111110001001000 father-in-law 00000000000000000000000000000000 choke 00000000000000010110010110110010 well-connected 00000000000000000000000000000000 Canonie 00100000000000000000000000000000 profiting 00000000000000000000000000000000 glowing 00000000000010001101000000010000 leaf 00000000000000001001110100100001 Confidence 00100000000111101110001110100111 7.99 00000000000000000000000000000000 E.F. 01000000000000000000000000000000 drubbing 00000000000000000000000000000000 caveat 00000000000000000000000000000000 off-balance 00000000000000000000000000000000 imperfect 00000000000000000000000000000000 St 00100000000000000000000000000000 Norberto 00100000000000000000000000000000 Merry 00100000001001011000001000110000 Sutherland 00101111111011101110000010001000 word-processing 00000000000000000000000000000000 soprano 00000000000111101001111100001000 Legend 00100000000111000000000001000111 Anita 00100000000000000000000000000000 Esther 00100000000000000000000000000000 7.77 00000000000000000000000000000000 Kan 00100000000000000000000000000000 Zulu 00100000000000000000000000000000 accolade 00000000000000000000000000000000 Eliot 00100000000100111000000100001000 exhaustive 00000000000000101110010100010000 repurchases 00000000000000001000000010100111 271 00000000000000000000000000000000 safest 00000000000001010111010011010000 Tong 00100000000000000000000000000000 Mulberry 00100000000000000000000000000000 197 00000000000000000000000000000000 beamed 00000000011100101001001000110010 11.0 00000000000000000000000000000000 2233.9 00000000000000000000000000000000 acclaimed 00000000001000010001101001000000 evenings 00000000000000001100010101100011 one-eighth 00000000000000000000000000000000 4,400 00000000000000000000000000000000 Sanders 00101111111001100101001000001000 hosting 00000000000000000000000000000000 Pieces 00100000000111101111100100101111 2,120 00000000000000000000000000000000 Kajima 00100000000000000000000000000000 outlooks 00000000000000000000000000000000 32-a-share 00000000000000000000000000000000 erasing 00000000000000000000000000000000 Mellor 00100000000000000000000000000000 22.78 00000000000000000000000000000000 266.66 00000000000000000000000000000000 Luciano 00100000000000000000000000000000 Brecht 00100000000000000000000000000000 nose-dived 00000000000000000000000000000000 Plays 00100000011111000111000000010010 duke 00000000000101001111111000101000 jester 00000000000000000000000000000000 Workplace 00100000000001000000110000100001 Winchester 00100000000111011000101001101000 65th 00000000000000000000000000000000 Aviva 00100000000000000000000000000000 coloratura 00000000000000000000000000000000 grounded 00000011100001001100010000110010 fractional 00000000000000000000000000000000 42.25 00000000000000000000000000000000 Coach 00100000000111100100011110110101 Japanese-Americans 01000000000000000000000000000000 internment 00000000000000000000000000000000 Decades 00100000000000010100010011111011 pre-merger 00000000000000000000000000000000 Formally 00100000010000000001001001110010 adjudicators 00000000000000000000000000000000 ensures 00000000000111010011000000010010 abandons 00000000000000000000000000000000 Il 00100001100011001101001000110000 expediting 00000000000000000000000000000000 Gaming 00100000000011000110010010110000 commits 00000000000000000000000000000000 Return 00100000000111111111100101010111 Ulysses 00100000000000000000000000000000 reopens 00000000000000000000000000000000 Brechtian 00100000000000000000000000000000 Yusen 00100000000000000000000000000000 Connors 00101111111001011001001000001000 LaLonde 01000000000000000000000000000000 appointees 00000000000111110011010110110101 enlightening 00000000000000000000000000000000 Brick 00100000000000100010001100100001 exacerbating 00000000000000000000000000000000 36.50 00000000000000000000000000000000 fingerprint 00000000000000000000000000000000 crimping 00000000000000000000000000000000 Gramm-Rudman-Hollings 01000000000000000000000000000000 rescinded 00000010101011010100010000110010 Fabian 00100000000000000000000000000000 Amfac 00100000000111101001111100101000 countenance 00000000000000000000000000000000 insubordination 00000000000000000000000000000000 shadows 00000000000101001111011000001111 Hollings 00101111111110100000111010001000 nonpartisan 00000000000111010110011000110000 amused 00000000001111100101110000110010 overzealous 00000000001101010100110100010000 Jerritts 00100000000000000000000000000000 slam-dunk 00000000000000000000000000000000 refractory 00000000000000000000000000000000 non-automotive 00000000000000000000000000000000 uneventful 00000000000000000000000000000000 Briscoe 00100000000000000000000000000000 auto-emissions 00000000000000000000000000000000 scrubbers 00000000000011000101110010100111 Crosby 00101111111011110000001000001000 linen 00000000000000000000000000000000 Quack 00100000000000000000000000000000 1,111 00000000000000000000000000000000 sprout 00000000000000000000000000000000 accommodative 00000000000000000000000000000000 entitlements 00000000000000000000000000000000 hatched 00000000000000000000000000000000 stylistic 00000000000000000000000000000000 378 00000000000000000000000000000000 towering 00000000000000000000000000000000 stipulated 00000000000001100101110111000010 federalized 00000000000000000000000000000000 ennui 00000000000000000000000000000000 unopposable 00000000000000000000000000000000 cheerfully 00000000000000000000000000000000 intellect 00000000000100001001110010100111 flock 00000000000110010101111010110111 intimately 00000000000000000000000000000000 downturns 00000000000111111000001010100011 close-up 00000000000000000000000000000000 formulation 00000000000100100111111000001111 counterattack 00000000000000000000000000000000 amazed 00000000000011100101110000110010 McInnes 01000000000000000000000000000000 Gilder 00100000000000000000000000000000 welcoming 00000000000000000000000000000000 organizer 00000000000011100111110000110101 populating 00000000000000000000000000000000 617 00000000000000000000000000000000 mistaken 00000000000000001110110110010000 Petrovich 00100000000000000000000000000000 Messinger 00100000000000000000000000000000 Scientific-Atlanta 01000000000000000000000000000000 Norcross 00100000001000011011101001101000 Streep 00100000000000000000000000000000 Meryl 00100000000000000000000000000000 Detroit-based 00100000000000000000000000000000 biennial 00000000000000000000000000000000 plunges 00000000000111111011011110000011 savings-type 00000000000000000000000000000000 self-conscious 00000000000000000000000000000000 animal-rights 00000000000000000000000000000000 enlist 00000000001001100111111110110010 appended 00000000000000000000000000000000 Brissette 00100000000000000000000000000000 punk 00000000000000000000000000000000 decadence 00000000000000000000000000000000 ambiguity 00000000000000000000000000000000 prohibitively 00000000000000010010100111000000 specs 00000000000000000000000000000000 animosity 00000000000000000000000000000000 afflicted 00000000000110010110010000110010 laureate 00000000000000000000000000000000 intrinsic 00000000000000000000000000000000 Nash 00101111111110110001000100001000 resourceful 00000000000000000000000000000000 repainted 00000000000000000000000000000000 non-advertising 00000000000000000000000000000000 Helpern 00100000000000000000000000000000 marry 00000000000110101110101110110010 Campbell-Mithun 01000000000000000000000000000000 13.65 00000000000000000000000000000000 Jonas 00100000000000000000000000000000 76.8 00000000000000000000000000000000 Campbell-Mithun-Esty 01000000000000000000000000000000 standardize 00000000000000000000000000000000 slippage 00000000000110111001101010100111 market-moving 00000000000000000000000000000000 UNIX 01000000000101100100100000100001 Paluck 00100000000000000000000000000000 33.1 00000000000000000000000000000000 beads 00000000000000000000000000000000 phenomenal 00000000000000000111100000010000 41.2 00000000000000000000000000000000 160.1 00000000000000000000000000000000 21.6 00000000000000000000000000000000 6.52 00000000000000000000000000000000 9.90 00000000000000000000000000000000 -which 00000000000000000000000000000000 Orson 00100000000000000000000000000000 Labouisse 00100000000000000000000000000000 69-26 00000000000000000000000000000000 93-day 00000000000000000000000000000000 Kerr 00101111111101101000000100001000 single-digit 00000000000000000000000000000000 conspire 00000000000000000000000000000000 8.98 00000000000000000000000000000000 tirelessly 00000000000000000000000000000000 344 00000000000000000000000000000000 guesswork 00000000000000000000000000000000 37.50 00000000000000000000000000000000 interpreter 00000000000000000000000000000000 directorial 00000000000000000000000000000000 Unitel 00100000000000000000000000000000 1933 00000000000000000000000000000000 impromptu 00000000000000000000000000000000 3.09 00000000000000000000000000000000 4.48 00000000000000000000000000000000 116.9 00000000000000000000000000000000 5.63 00000000000000000000000000000000 addiction 00000000000111100100110010100111 Liquid 00100000000001100010101010110000 nude 00000000000100010110011010010000 Aim 00100000000111111100111010110111 unsuspected 00000000000000000000000000000000 Olga 00100000000000000000000000000000 112.9 00000000000000000000000000000000 Lucio 00100000000000000000000000000000 70.2 00000000000000000000000000000000 T-bond 00100000000000000000000000000000 maid 00000000000001000110000000100001 voluptuous 00000000000000000000000000000000 1230.80 00000000000000000000000000000000 undulate 00000000000000000000000000000000 11.04 00000000000000000000000000000000 miniseries 00000000000111101010101000100001 pimp 00000000000000000000000000000000 Favorite 00100000000000000111110000000001 DeSoto 01000000000000000000000000000000 23.1 00000000000000000000000000000000 32.71 00000000000000000000000000000000 Gliedman 00100000000000000000000000000000 Advancers 00100000000100100001001001110011 18.3 00000000000000000000000000000000 obscene 00000000000100101101000110010000 licking 00000000000000000000000000000000 164,830,000 00000000000000000000000000000000 619 00000000000000000000000000000000 478 00000000000000000000000000000000 insanity 00000000000000000000000000000000 17.1 00000000000000000000000000000000 Kluge 00101111111110100001000010001000 Rymer 00100000000000000000000000000000 nurtured 00000000111001101100010000110010 orphans 00000000000000000000000000000000 Glasnost 00100000000110101111110010100111 Seasonal 00100000000000010111010101010000 unworthy 00000000000000000000000000000000 subscribes 00000000000000000000000000000000 pluses 00000000000000000000000000000000 ONCE 01000000000000001000011011000000 CPC 01000000000000000000000000000000 Grigoli 00100000000000000000000000000000 Saint 00101111111100000101101000101000 undistinguished 00000000000000000000000000000000 preach 00000000000000000000000000000000 praises 00000011100011100011000000010010 Ivern 00100000000000000000000000000000 Admittedly 00100011000000000000001001110010 recycles 00000000000000000000000000000000 smartly 00000000000000000000000000000000 discriminate 00000000000110001001010110110010 nifty 00000000000000000000000000000000 Godown 00100000000000000000000000000000 nondeductible 00000000000000000000000000000000 piggybacking 00000000000000000000000000000000 OTS 01000000000000000000000000000000 60-vote 00000000000000000000000000000000 superimposed 00000000000000000000000000000000 Osamu 00100000000000000000000000000000 lexicon 00000000000000000000000000000000 specialty-chemicals 00000000000000000000000000000000 cruisers 00000000000000000000000000000000 Invariably 00100000010101100000001001110010 liquid-crystal 00000000000000000000000000000000 whirlwind 00000000000000000000000000000000 disarmament 00000000000111111110110110110000 signal-processing 00000000000000000000000000000000 225.5 00000000000000000000000000000000 courtesy 00000000000000011111110010100111 cathode-ray 00000000000000000000000000000000 363 00000000000000000000000000000000 persuasion 00000000000011111001110010100111 gritty 00000000001100010101000010010000 147 00000000000000000000000000000000 northeastern 00000000000000001000110110101000 Greer 00100000000000000000000000000000 active-matrix 00000000000000000000000000000000 Shapovalov 00100000000000000000000000000000 amicable 00000000001010011000110100010000 Magnascreen 00100000000000000000000000000000 23.9 00000000000000000000000000000000 fighter-plane 00000000000000000000000000000000 unwary 00000000000000000000000000000000 Imaging 00100000000000000001100001100001 Ovonic 00100000000000000000000000000000 Planar 00100000000000000000000000000000 scheming 00000000000000000000000000000000 Photonics 00100000000000000000000000000000 ceded 00000000000000000000000000000000 27-year 00000000000000000000000000000000 bless 00000000000000000000000000000000 18.6 00000000000000000000000000000000 Nestor 00100000000000000000000000000000 4.74 00000000000000000000000000000000 4400 00000000000000000000000000000000 cliched 00000000000000000000000000000000 PegaSys 01000000000000000000000000000000 492 00000000000000000000000000000000 fraught 00000000000001110101100000110010 housewives 00000000000111101111111000110011 fly-by-night 00000000000000000000000000000000 nicked 00000000000000000000000000000000 Distance 00100000000111101010001010110111 Partnerships 00100000000110101110000011110101 8.00 00000000000000000000000000000000 MAY 01000000000000000000000010010010 Zeidner 00100000000000000000000000000000 2.54 00000000000000000000000000000000 Renoir 00100000000000000000000000000000 McChesney 01000000000000000000000000000000 hard-bitten 00000000000000000000000000000000 editorials 00000000000011100101110101100011 Supplemental 00100000000000011010010000010000 junkets 00000000000000000000000000000000 most-recent 00000000000000000000000000000000 broker-sold 00000000000000000000000000000000 thank 00000000000110111010100110110010 risk-averse 00000000000000000000000000000000 durables 00000000000100101110010011001001 altitude 00000000001111000111111001100111 entwined 00000000000000000000000000000000 hindering 00000000000000000000000000000000 better-than-expected 00000000000000000000000000000000 Petit 00100000000000000000000000000000 non-Communist 01000000000000000000000000000000 stop-gap 00000000000000000000000000000000 murals 00000000000000000000000000000000 threemonth 00000000000000000000000000000000 Six-month 00100000000000000000000000000000 Edmund 00101111111000011100110110011000 chided 00000000000000000000000000000000 Geffen 00100000000000000000000000000000 pulse 00000000000111101100110000000001 peals 00000000000000000000000000000000 n 00000000000000000000000000000000 Museums 00100000000111101011110001100011 enroll 00000000000000000000000000000000 Hildebrandt 00100000000000000000000000000000 rowing 00000000000000000000000000000000 ate 00000000000111011011000000010010 Henning 00100000000000000000000000000000 Foremost 00100000000111101110010011010000 poisoning 00000000000001000111111111001001 7.41 00000000000000000000000000000000 Pepsi-Cola 01000000000000000000000000000000 basics 00000000000111100001101000110111 26th 00000000000000000000000000000000 Trinidad 00100000000000000000000000000000 Newgate 00100000000000000000000000000000 Glacier 00100000000000000000000000000000 175,240,000 00000000000000000000000000000000 galling 00000000000000000000000000000000 Trans-Alaska 01000000000000000000000000000000 highlights 00000000100010001111000000010010 health-club 00000000000000000000000000000000 memberships 00000000000111111100000001100011 smokescreen 00000000000000000000000000000000 constituted 00000000000001100001010000110010 Mannesmann 00100000000000000000000000000000 capacitors 00000000000000000000000000000000 Kamm 00100000000000000000000000000000 Sporting 00100000000010010010101010110000 Goods 00100000000101101110110011001001 hobbling 00000000000000000000000000000000 garages 00000000000000000000000000000000 Centronics 00100000000000000000000000000000 timberlands 00000000000000000000000000000000 Sport 00100000000101011110011000000001 yelling 00000000000000000000000000000000 protestors 00000000000000000000000000000000 Halliburton 00100000000110101110111100101000 accede 00000000000000000000000000000000 information-services 00000000000000000000000000000000 stationary 00000000000111001000001010110000 Nipsco 00100000000000000000000000000000 Devario 00100000000000000000000000000000 Igdaloff 00100000000000000000000000000000 Polygram 00100000000100100110110000100001 Mouse 00100000000111011110000000001000 12,190,000 00000000000000000000000000000000 invoked 00000001011011000101010000110010 dials 00000000000000000000000000000000 inconsistencies 00000000000000000000000000000000 Islander 00100000000000000000000000000000 muscular 00001111111010111011110000110000 couch 00000000000011001111110110110111 hangover 00000000000000000000000000000000 male-dominated 00000000000000000000000000000000 suntan 00000000001111111010001000110000 swim 00000000000101001001001010110111 detention 00000000000000001111110010100111 Physical 00100000000011001010000000110000 commemorate 00000000000000000000000000000000 agreeable 00000000000000000000000000000000 Grenada 00100000000101111011110010100111 collages 00000000000000000000000000000000 Greetings 00100000000110110010001010101000 seduce 00000000000000000000000000000000 395 00000000000000000000000000000000 aerobic 00000000000010110110101010110000 200,000-share 00000000000000000000000000000000 ebb 00000000000000000000000000000000 Viyella 00100000000000000000000000000000 juices 00000000000000000000000000000000 65,000 00000000000000000000000000000000 178.375 00000000000000000000000000000000 government-appointed 00000000000000000000000000000000 Joyce 00101111111010100000000100001000 civilized 00000000000000010101000010010000 Toronto-Dominion 01000000000000000000000000000000 Reagan-Bush 01000000000000000000000000000000 bureau-sponsored 00000000000000000000000000000000 capacity-expansion 00000000000000000000000000000000 Kochan 00100000000000000000000000000000 pizzazz 00000000000000000000000000000000 librarian 00000000000000000000000000000000 attends 00000001110011100011000000010010 rekindling 00000000000000000000000000000000 moderating 00000000000000000000000000000000 0.06 00000000000000000000000000000000 macho 00000000000000010110011010010000 prayer 00000000000101010001101100100001 Suffice 00100000000000010111010110110010 skipping 00000000000000000000000000000000 Curran 00100000000000000000000000000000 RV 01000000000000000000000000000000 Bowater 00100000000001100001000100101000 95.4 00000000000000000000000000000000 decency 00000000001100100101110010100111 62.25 00000000000000000000000000000000 conversions 00000000000111101010011100100011 64-year-old 00000000000000000000000000000000 bowls 00000000000000000000000000000000 stairs 00000000001110011111110101100011 WXRK 01000000000000000000000000000000 siding 00000000001110110101100000110010 dissatisfaction 00000000000100011110110000100111 grinding 00000000000001110110100001000000 ignited 00000000011111100111010000110010 cab 00000000000001111100001000100001 lanes 00000000001010110111110101100011 loosening 00000000000110100111010001000000 phantom 00000000000001111001111000010000 Hnilica 00100000000000000000000000000000 7.91 00000000000000000000000000000000 10.37 00000000000000000000000000000000 Biological 00100000000010001010000000110000 prosecute 00000000010110100011111110110010 Future 00100000000001001101111000010000 Jos 00100000000000000000000000000000 Clothiers 00100000000000000000000000000000 Owings 00100000000000000000000000000000 solicits 00000000000000000000000000000000 derogatory 00000000000000000000000000000000 decelerating 00000000000101111010010001000000 476.5 00000000000000000000000000000000 waffled 00000000000000000000000000000000 CalFed 01000000000010111110111100101000 173.1 00000000000000000000000000000000 reciting 00000000000000000000000000000000 alloy 00000000000001100011000100100001 MD-11 01000000000000000000000000000000 platitudes 00000000000000000000000000000000 demons 00000000000000000000000000000000 poltergeists 00000000000000000000000000000000 harried 00000000000000000000000000000000 Alfredo 00100000000000000000000000000000 AH-64 01000000000000000000000000000000 devils 00000000000000000000000000000000 Apache 00100000000111111111010100101000 rechargeable 00000000000000000000000000000000 178.9 00000000000000000000000000000000 173.5 00000000000000000000000000000000 general-election 00000000000000000000000000000000 defense-oriented 00000000000000000000000000000000 Paranormal 00100000000000000000000000000000 congregation 00000000000000000000000000000000 Vicar 00100000000000000000000000000000 Fiorello 00100000000000000000000000000000 Siegal 00100000000000000000000000000000 horrors 00000000000110001111011000001111 re-entered 00000000000000000000000000000000 T-45 00100000000000000000000000000000 also-ran 00000000000000000000000000000000 bedeviled 00000000000000000000000000000000 Breeders 00100000000000000000000000000000 Brink 00100000000111111111001100001111 tabloids 00000000000000000000000000000000 toehold 00000000000101011001101010100111 nod 00000000000111100101111010110111 long-deferred 00000000000000000000000000000000 sacked 00000000000000000000000000000000 Devon 00100000000000000000000000000000 Ages 00100000000000010001100001000111 ghostbusters 00000000000000000000000000000000 3-4 00000000000000000000000000000000 CRI 01000000000000000000000000000000 staggered 00000000000000110000011100010000 Jessica 00100000000000000000000000000000 arch 00000000000110100001111100001000 breeder 00000000000000000000000000000000 Educators 00100000000000000100111000110011 6,400 00000000000000000000000000000000 oaks 00000000000000000001011011101001 Hummerstone 00100000000000000000000000000000 breeders 00000000000000000000000000000000 1,013 00000000000000000000000000000000 Perella 00101111111011001001111000001000 Mediation 00100000000000101010100101100101 stainless 00000000000110110010111000101000 100.2 00000000000000000000000000000000 Frederic 00101111111000010011110110011000 Contributing 00100000000011101010111000110010 Writing 00100000000111110110100001000000 daylight 00000000000000000000000000000000 boulevard 00000000000111110110100010100101 Quixote 00100000000000000000000000000000 ardor 00000000000000000000000000000000 Dartmouth 00100000000001010111111000101000 Graves 00101111111100011100000000001000 vicars 00000000000000000000000000000000 redevelopment 00000000000000010011001001100001 footsteps 00000000000000000000000000000000 strong-willed 00000000000000000000000000000000 recollection 00000000000111110001110000001111 pokes 00000000000000000000000000000000 42-year 00000000000000000000000000000000 acquisitive 00000000000000000000000000000000 vicinity 00000000000000000000000000000000 135.9 00000000000000000000000000000000 emission 00000000000000000011100011100001 spire 00000000000000000000000000000000 Worried 00100000000111111111110000110010 stubborn 00000000000010000111000010010000 918 00000000000000000000000000000000 subtracted 00000000000000000000000000000000 picnic 00000000000000000000000000000000 mid-1990 00000000000000000000000000000000 sprinkle 00000000000000000000000000000000 sixth-largest 00000000000000000000000000000000 pedestrian 00000000000000000000000000000000 110.9 00000000000000000000000000000000 1466.29 00000000000000000000000000000000 thoroughbreds 00000000000000000000000000000000 Industrielle 00100000000000000000000000000000 20-story 00000000000000000000000000000000 untrustworthy 00000000000000000000000000000000 126,630,000 00000000000000000000000000000000 debunk 00000000000000000000000000000000 Covia 00100000000000000000000000000000 Vortex 00100000000000000000000000000000 burial 00000000000000000000000000000000 pub 00000000000001110001111010110000 disproportionately 00000000001010101000000001110010 Giraffe 00100000000000000000000000000000 27.4 00000000000000000000000000000000 Quilted 00100000000000000000000000000000 mahogany 00000000000000000000000000000000 curtains 00000000000000000000000000000000 coordinating 00000000000111110110010110110000 Trabold 00100000000000000000000000000000 Monetta 00100000000000000000000000000000 exorcism 00000000000000000000000000000000 undiversified 00000000000000000000000000000000 Ravitch 00100000000000000000000000000000 52.8 00000000000000000000000000000000 pruned 00000000000000000000000000000000 2.32 00000000000000000000000000000000 203 00000000000000000000000000000000 25.5 00000000000000000000000000000000 shuffling 00000000001001001010110001000000 9.53 00000000000000000000000000000000 9.51 00000000000000000000000000000000 Litchfield 00100000000000000000000000000000 shielded 00001001001011010100010000110010 Diversification 00100000000010000001101000111001 McKenna 01000000000000000000000000000000 clergyman 00000000000000000000000000000000 revisit 00000000000000000000000000000000 sobering 00000000000000000000000000000000 Gaffney 00101111110011111100000010001000 demonic 00000000000000000000000000000000 wheezing 00000000000000000000000000000000 thoughtless 00000000000000000000000000000000 171 00000000000000000000000000000000 demotion 00000000000000000000000000000000 slap 00000000000111100101001010110111 pragmatist 00000000000000000000000000000000 6.75 00000000000000000000000000000000 moonlighting 00000000000000000000000000000000 tenacious 00000000000000000000000000000000 Paperboard 00100000000010100100011010110000 praying 00000000000000000000000000000000 writhing 00000000000000000000000000000000 Ringing 00100000000010101110100001000000 entrepreneurship 00000000000011101011110010100111 revitalization 00000000000111011001101101001111 halve 00000000000000000000000000000000 holy 00000000000001100001011000110000 discontinuance 00000000000101010111011000001111 grinds 00000000000000000000000000000000 raiding 00000000000111101011110001000000 paper-company 00000000000000000000000000000000 psychic 00000000000000000000000000000000 Kathleen 00101111111000000110110110011000 50.875 00000000000000000000000000000000 patterned 00000000000000000000000000000000 bartenders 00000000000000000000000000000000 worst-case 00000000000000000000000000000000 doughnut 00000000000000000000000000000000 ASCAP 01000000000000000000000000000000 Islamabad 00100000000000000000000000000000 Reserved 00100000001110010000010000110010 auditing 00000000000001001100000010110000 nuance 00000000000000000000000000000000 91.7 00000000000000000000000000000000 writeoffs 00000000000000000000000000000000 shareholdings 00000000000111100101111001101001 chin 00000000000111111000111110000001 8,500 00000000000000000000000000000000 conspirators 00000000000100000111100010100111 Heileman 00101111111100111001000100101000 430,000 00000000000000000000000000000000 stuffed 00000000000010001101101001000000 525,000 00000000000000000000000000000000 Alsthom 00100000000000000000000000000000 Xiaoping 00101111111011000100000001100111 247.3 00000000000000000000000000000000 aplenty 00000000000000000000000000000000 waste-to-energy 00000000000000000000000000000000 dived 00000000000000000000000000000000 informational 00000000000101010000000000110000 sure-fire 00000000000000000000000000000000 nonessential 00000000000000000000000000000000 rains 00000000000111101100110000000011 whipsaw 00000000000000000000000000000000 Denlea 00100000000000000000000000000000 Yuri 00100000000011110101111000011000 high-rises 00000000000000000000000000000000 evenhanded 00000000000000000000000000000000 promissory 00000000000000000101100110110000 truthful 00000000000000000000000000000000 earners 00000000000111101111101110000011 Yamatake 00100000000000000000000000000000 oily 00000000000000000000000000000000 Espana 00100000000000000000000000000000 lone 00000000000111001101011000110000 LIMITED 01000000000001000000001001000000 girding 00000000000000000000000000000000 Dry 00100000000000000001110110110111 Outplacement 00100000000001010100000010110000 disregard 00000000000111001111110010110111 Olshan 00100000000000000000000000000000 lower-level 00000000000000000000000000000000 popularized 00000000000000000000000000000000 Molloy 00100000000000000000000000000000 stirrings 00000000000000000000000000000000 pajama 00000000000000000000000000000000 high-visibility 00000000000000000000000000000000 Pleasant 00100000000000010000011010010000 Lupel 00100000000000000000000000000000 Fully 00100000000000000111001001110010 Bertolotti 00100000000000000000000000000000 Yuzek 00100000000000000000000000000000 PARTNERS 01000000000110101010000011101001 J.M. 01000000000000000000000000000000 spurn 00000000000000000000000000000000 political-corruption 00000000000000000000000000000000 extorting 00000000000010110111011101000000 burger 00001111111011011000011100001000 Quinn 00101111111110111110000010001000 Fast-food 00100000000000000000000000000000 Tufts 00100000000001000111111000101000 Gains 00100000000111111110100000000011 78.4 00000000000000000000000000000000 65.6 00000000000000000000000000000000 Slowing 00100000000111001111010001000000 stalked 00000000000110011001001000110010 in-office 00000000000000000000000000000000 wrists 00000000000000000000000000000000 pesatas 00000000000000000000000000000000 72.5 00000000000000000000000000000000 ejected 00000000000000000000000000000000 Hyatt 00100000000100001110000000001000 infrequent 00000000000000000000000000000000 51.50 00000000000000000000000000000000 victorious 00000000000000000000000000000000 gilded 00000000000000000000000000000000 Greenshields 00100000000000000000000000000000 touts 00000000000000000000000000000000 populous 00000000000000100001000010010000 ushering 00000000000000000000000000000000 overcharge 00000000000000000000000000000000 ill-fated 00000000000000000000000000000000 mudslinging 00000000000000000000000000000000 whoever 00000000000111001010010001110010 inverted 00000000000000011011001110010000 confessions 00000000000000000000000000000000 Repsol 00100000000000000000000000000000 purportedly 00000001111100000000001001110010 illicit 00000000000000000100000110010000 signatures 00000000000000000100000001100011 Entex 00100000000000000000000000000000 Shreveport 00100000000000000000000000000000 tempted 00000000000011000100011000110010 interpreting 00000000000111110011011101000000 passel 00000000000000000000000000000000 pay-as-you-go 00000000000000000000000000000000 Move 00100000000111111111111000110111 81,000 00000000000000000000000000000000 Claridge 00100000000101100111111100001000 overpaid 00001101001011010100010000110010 mammoth 00000000000000101100100000010000 runoff 00000000000000000000000000000000 deceived 00000000000000000000000000000000 Brizola 00100000000000000000000000000000 bronze 00000000000001010000101100100001 anxiously 00000000000000000000000000000000 Altos 00100000000000000000000000000000 cabinets 00000000000000000000000000000000 sewer 00000000000010001100101010110000 Subsequent 00100000000000000001101100010000 Chong 00100000000000000000000000000000 Disk 00100000000010101000001000100001 Nugent 00101111111101011111111010101000 Organizing 00100000010110000010110001000000 echelons 00000000000000000000000000000000 Honolulu-based 00100000000000000000000000000000 thug 00000000000000000000000000000000 Mabon 00100000000000000000000000000000 ills 00000000000111111011001010100011 Jason 00100000000000000000000000000000 Sarney 00101111111000001010010110001000 Aerojet 00100000000000000000000000000000 stipulation 00000000000000000000000000000000 Receptech 00100000000000000000000000000000 Lizhi 00100000000000000000000000000000 interleukin-4 00000000000000000000000000000000 Hemming 00100000000000000000000000000000 organ-transplant 00000000000000000000000000000000 deregulate 00000000001111101010111110110010 sheltered 00000000011000100101101001000000 double-B 01000000000000000000000000000000 2149.3 00000000000000000000000000000000 4.83 00000000000000000000000000000000 99.3 00000000000000000000000000000000 unoccupied 00000000000000000000000000000000 deposited 00000000111100001100010000110010 deterrents 00000000000111110011001100100111 condominiums 00000000000110101101111001100011 Foulds 00100000000000000000000000000000 massively 00000000000000000000000000000000 convulsions 00000000000000000000000000000000 embracing 00000000000101001011111101000000 356 00000000000000000000000000000000 busts 00000000000010010111110001100011 rope 00000000000111110100111000000001 694 00000000000000000000000000000000 Gasich 00100000000000000000000000000000 110-story 00000000000000000000000000000000 257.8 00000000000000000000000000000000 Abbot 00100000000000000000000000000000 Bum 00100000000000000000000000000000 swindled 00000000000000000000000000000000 miniscule 00000000000000000000000000000000 twin-jet 00000000000000000000000000000000 past-due 00000000000000000000000000000000 99.14 00000000000000000000000000000000 Doonesbury 00100000000000000000000000000000 Dear 00100000000001010010011010010000 portends 00000000000000000000000000000000 reign 00000000000111110011101110100111 161.1 00000000000000000000000000000000 Medstone 00100000000000000000000000000000 misstatements 00000000000000000000000000000000 4.93 00000000000000000000000000000000 56.25 00000000000000000000000000000000 Smaby 00100000000000000000000000000000 position... 00000000000000000000000000000000 not-for-profit 00000000000000000000000000000000 certificate-of-need 00000000000000000000000000000000 1.62 00000000000000000000000000000000 Hallingby 00100000000000000000000000000000 Palicka 00100000000000000000000000000000 Burnand 00100000000000000000000000000000 lithotripter 00000000000000000000000000000000 Brantford 00100000000000000000000000000000 smashing 00000000000000000000000000000000 Wakefield 00101111111110111101110001001000 A&W 01000000000000000000000000000000 4,900 00000000000000000000000000000000 new-generation 00000000000000000000000000000000 administers 00000000000111001101000000010010 Tip 00100000000100101001001010110111 Doctors 00100000000110000010111000110011 marvelously 00000000000000000000000000000000 326,000 00000000000000000000000000000000 Zones 00100000000000000010110100100011 beaming 00000000000000000000000000000000 Photo 00100000000011010000100000100001 4,830 00000000000000000000000000000000 rounds 00000000000010010011100100101111 Merritt 00100000000110111011000001001000 cash-interest 00000000000000000000000000000000 increment 00000000000000000000000000000000 fastener 00000000000000000000000000000000 Zone 00100000000100101001101001100111 nest 00000000000111001110101100100001 grass 00000000000001100001111000000001 second-story 00000000000000000000000000000000 Trim 00100000000111100110111110110010 Bills 00100000000100100100110010000111 Bobar 00100000000000000000000000000000 camouflaged 00000000011011100101101001000000 toe 00000000000110000101111010110111 Grahams 00100000000000000000000000000000 Grieco 00100000000000000000000000000000 Franz 00100000000111110101010100001000 Steinkuehler 00100000000000000000000000000000 closed-circuit 00000000000000000000000000000000 Matanky 00100000000000000000000000000000 Chips 00100000000111101001110110001001 proprietors 00000000000000000000000000000000 depart 00000000011001111101010110110010 low-crime 00000000000000000000000000000000 encumbered 00000000000000000000000000000000 burglaries 00000000000000000000000000000000 dexterity 00000000000000000000000000000000 crime-ridden 00000000000000000000000000000000 Den 00100000000000000000000000000000 Batten 00100000000000000000000000000000 Norske 00100000000000000000000000000000 Stelco 00100000000000000000000000000000 153.3 00000000000000000000000000000000 parakeet 00000000000000000000000000000000 old-time 00000000000000000000000000000000 ticking 00000000000000000000000000000000 deteriorates 00000000000000000000000000000000 30.3 00000000000000000000000000000000 Oslo 00100000000101011111111001101000 SPCA 01000000000000000000000000000000 retrieved 00000000000000000000000000000000 72.3 00000000000000000000000000000000 anti-discrimination 00000000000000000000000000000000 blurred 00000000000000000000000000000000 statistician 00000000000000000000000000000000 coating 00000000000111001101010001100001 Cleveland-based 00100000000000000000000000000000 Grohl 00100000000000000000000000000000 USG 01000000000000000000000000000000 13.81 00000000000000000000000000000000 building-materials 00000000000000000000000000000000 re-enter 00000000000000000000000000000000 aroma 00000000000000000000000000000000 Fiechter 00100000000000000000000000000000 Kanon 00100000000000000000000000000000 Carre 00101111110000101100111110000010 Franciscan 00100000000000000000000000000000 punished 00000001010010010010110000110010 Enichem 00100000000000000000000000000000 oblivious 00000000000000000000000000000000 dances 00000000011010100111110101100011 upsets 00001010001010000011000000010010 Necci 00100000000000000000000000000000 three-day 00000000000000000000000000000000 warm-up 00000000000000000000000000000000 four-star 00000000000000000000000000000000 Adjusters 00100000000000000000000000000000 Latour 00100000000000000000000000000000 Stock-fund 00100000000000000000000000000000 scrape 00000000000000000000000000000000 347 00000000000000000000000000000000 restart 00000000010100111111110110110010 108.3 00000000000000000000000000000000 99.7 00000000000000000000000000000000 raided 00000000001101000101010000110010 redefine 00000000000000000000000000000000 fund-research 00000000000000000000000000000000 pay-TV 01000000000000000000000000000000 Valerie 00100000000000000000000000000000 canceling 00000000000110010011111101000000 fiddle 00000000000111010111101010110111 lawmaking 00000000000000000000000000000000 Shicoff 00100000000000000000000000000000 Dark 00100000000111111101011010010000 guilder 00000000000000000000000000000000 wage-earning 00000000000000000000000000000000 kettle 00000000000000000000000000000000 Perpetual 00100000010100010000001000110000 typhoons 00000000000000000000000000000000 277 00000000000000000000000000000000 nationalists 00000000000111111110000110110011 47.4 00000000000000000000000000000000 upholding 00000010010010010000000000001010 accommodated 00000000000000000000000000000000 Anglo-American 01000000000000000000000000000000 right-hand 00000000000000000000000000000000 shouts 00000000011111100111000000010010 trotted 00000000000000000000000000000000 Finks 00100000000000000000000000000000 nitrofurantoin 00000000000000000000000000000000 159.7 00000000000000000000000000000000 macrocrystalline 00000000000000000000000000000000 14.43 00000000000000000000000000000000 Crusader 00100000000000000000000000000000 ill-suited 00000000000000000000000000000000 Copiague 00100000000000000000000000000000 fairer 00000000000000000000000000000000 F-18s 00100000000000000000000000000000 Rafales 00100000000000000000000000000000 peal 00000000000000000000000000000000 tempered 00000000000110000001110000110010 2.12 00000000000000000000000000000000 Norwich 00100000000000000000000000000000 Aslacton 00100000000000000000000000000000 Garland 00100000000000000000000000000000 Voter 00100000000000000000111000100001 discordant 00000000000000000000000000000000 manual 00000000000011101100100000100001 Lawrenceville 00100000000000000000000000000000 Yves 00101111111011111011101100101000 162,000 00000000000000000000000000000000 gunmen 00000000000000001100100000110011 apologists 00000000000000000000000000000000 77.7 00000000000000000000000000000000 Strom 00100000000000000000000000000000 whimper 00000000000000000000000000000000 ESP 01000000000000000000000000000000 invincible 00000000000000000000000000000000 symbolism 00000000000000000000000000000000 invitations 00000000000000011111001000100011 full-blown 00000000000000000000000000000000 chat 00000000000111101101101010110111 inequality 00000000000000000000000000000000 assures 00000000010001100011000000010010 instituting 00000000000000000000000000000000 dreadful 00000000000000010111011010010000 Dassault-Breguet 01000000000000000000000000000000 aggravating 00000000000000000000000000000000 mitigating 00000000000000000000000000000000 reintroduced 00000000000000000000000000000000 F-18 00100000000000000000000000000000 ham 00000000001110110011111010110000 repackaged 00000000000000000000000000000000 7.87 00000000000000000000000000000000 chastises 00000000000000000000000000000000 potholes 00000000000000000000000000000000 Stellar 00100000000000010111100000010000 cascading 00000000000000000000000000000000 kingdom 00000000000000000010001010101000 5.163 00000000000000000000000000000000 Piedmont 00100000000110101011000100101000 Ardent 00100000000100011000110100010000 Al-Chalabi 01000000000000000000000000000000 Orrin 00100000000000000000000000000000 loafers 00000000000000000000000000000000 cheaters 00000000000000000000000000000000 evoke 00000000000000000000000000000000 99.95 00000000000000000000000000000000 43.875 00000000000000000000000000000000 rigged 00000000010111110101101001000000 untrained 00000000000000000000000000000000 Lightfoot 00100000000000000000000000000000 50.7 00000000000000000000000000000000 7.70 00000000000000000000000000000000 7.71 00000000000000000000000000000000 Dauchy 00100000000000000000000000000000 futures-investment 00000000000000000000000000000000 raging 00000000000001101101010001000000 Chex 00100000000000000000000000000000 government-approved 00000000000000000000000000000000 Hurwitz 00101111111101101001000010001000 Mix 00100000000111011100100101100111 indomitable 00000000000000000000000000000000 cashing 00000000000100011110010000110010 Sayers 00100000000000000000000000000000 loathed 00000000000000000000000000000000 Snoopy 00100000000000000000000000000000 evinced 00000000000000000000000000000000 torture 00000000000101110001110010100111 256 00000000000000000000000000000000 deterrent 00000000000111111010000110001001 Hartnett 00100000000000000000000000000000 peculiarities 00000000000000000000000000000000 Schulz 00100000000000000000000000000000 Colonial 00100000000000100100100100100001 flip-flop 00000000000000000000000000000000 aerial 00000000000000000000000000000000 tie-ins 00000000000000000000000000000000 jurisdictional 00000000000000000000000000000000 Rewards 00100000000111001101111000100011 well-intended 00000000000000000000000000000000 152,000 00000000000000000000000000000000 Fifteen 00100000000111011111000011000000 long-delayed 00000000000000000000000000000000 Britton 00100000000000000000000000000000 ranches 00000000000000000000000000000000 Raoul-Duval 01000000000000000000000000000000 securities-industry 00000000000000000000000000000000 Hammerschmidt 00100000000000000000000000000000 viewpoints 00000000000000000000000000000000 petitioned 00000000000101101101010000110010 SIA 01000000000000000000000000000000 judgeships 00000000000000000000000000000000 Eritreans 00100000000000000000000000000000 Redwood 00100000000000011000011010101000 2-3 00000000000000000000000000000000 Tigreans 00100000000000000000000000000000 ten 00000000000111111100111001010000 Eritrea 00100000000000000000000000000000 Ababa 00100000000000000000000000000000 simplicity 00000000000001100111110010100111 scrupulous 00000000000000000000000000000000 21.44 00000000000000000000000000000000 Addis 00100000000000000000000000000000 bolted 00000000000000000000000000000000 sell-offs 00000000000000000000000000000000 Eritrean 00100000000000000000000000000000 liberated 00000000000000000000000000000000 'Em 01000000000000000010000101001000 Ethiopian 00100000000001011100010100110000 BAKER 01001111111100100001001010001000 Reading 00100000000111101110110001000000 Foxmoor 00100000000000000000000000000000 sprightly 00000000000000000000000000000000 authorizes 00000000001000110001000000010010 Coudert 00100000000000000000000000000000 wigs 00000000000000000000000000000000 spelled 00000000001111010001001000110010 Haile 00100000000000000000000000000000 painters 00000000000000000000000000000000 capacities 00000000000000000000000000000000 shacks 00000000000000000000000000000000 grabs 00000000000111110011010001110010 accidentally 00000000111100000000010001110010 discourages 00000000000011110001000000010010 Elaborating 00100000000000000000000000000000 Gersony 00100000000000000000000000000000 clan 00000000000000000000000000000000 abortionist 00000000000000000000000000000000 mirrors 00000000001100011111000000010010 compartment 00000000000110100011011000000001 Somalis 00100000000000000000000000000000 computer-software 00000000000000000000000000000000 clipboard 00000000000000000000000000000000 Daytona 00100000000000000000000000000000 wasteland 00000000000000000000000000000000 gawky 00000000000000000000000000000000 preview 00000000000101110000100101100111 Lutz 00100000000000000000000000000000 Hampster 00100000000000000000000000000000 circuit-breaker 00000000000000000000000000000000 creations 00000000000110001101111101100011 Intermec 00100000000000000000000000000000 Sabrina 00100000000000000000000000000000 synchronized 00000000000000000000000000000000 Kenosha 00100000000111100010101001101000 cassettes 00000000000110000111110101100011 980.2 00000000000000000000000000000000 Siad 00100000000000000000000000000000 Michaelson 00100000000000000000000000000000 facilitating 00000000000011010101011101000000 7.79 00000000000000000000000000000000 Lori 00100000000000000000000000000000 brutality 00000000000000000000000000000000 pharmacies 00000000000000000000000000000000 excel 00000000000101001011111100001000 unintended 00000000000011010010010100010000 lash 00000000000000000000000000000000 foreign-aid 00000000000000000000000000000000 fetus 00000000000000000000000000000000 20-point 00000000000000000000000000000000 Rachel 00100000000000000000000000000000 Brookline 00100000000000000000000000000000 Krampe 00100000000000000000000000000000 constitutionality 00000000000111010101111000001111 arisen 00000000001101111010110000110010 anti-Noriega 01000000000000000000000000000000 buoying 00000000000000000000000000000000 reinstating 00000000000000000000000000000000 slides 00000000000001100010001000100011 5-4 00000000000000000000000000000000 depressant 00000000000000000000000000000000 Blondes 00100000000000000000000000000000 Peng 00100000000000000000000000000000 shorten 00000000001110100110111110110010 disregarded 00001011001011010100010000110010 110,000 00000000000000000000000000000000 walkouts 00000000000000000000000000000000 hobbles 00000000000000000000000000000000 smaller-than-expected 00000000000000000000000000000000 273,000 00000000000000000000000000000000 44,000 00000000000000000000000000000000 LAWMAKERS 01000000000000000100010010110011 125,000 00000000000000000000000000000000 electric-utility 00000000000000000000000000000000 sting 00000000000110001010111000000001 542 00000000000000000000000000000000 Carney 00100000000000000000000000000000 105.4 00000000000000000000000000000000 15.25 00000000000000000000000000000000 Galle 00100000000000000000000000000000 Beal 00100000000000000000000000000000 367 00000000000000000000000000000000 429 00000000000000000000000000000000 brown-tobacco 00000000000000000000000000000000 overseen 00000000001110101111010000110010 leapfrog 00000000000000000000000000000000 39.25 00000000000000000000000000000000 locating 00000000000010000111111101000000 mid-size 00000000000000000000000000000000 582 00000000000000000000000000000000 inexorably 00000000000000000000000000000000 leaned 00000000000000000000000000000000 embark 00000000000000000000000000000000 Waldorf 00100000000000000000000000000000 reshuffle 00000000000000000000000000000000 inquired 00000000000000000000000000000000 pursues 00000010010011100011000000010010 Lonesome 00100000000000000000000000000000 Dove 00100000000111110100000000001000 Abortion-rights 00100000000000000000000000000000 soviets 00000000000111101111111110110011 Leave 00100000000101111110101110110010 dressmaking 00000000000000000000000000000000 Resistance 00100000000111001011001100100111 -for 00000000000000000000000000000000 candles 00000000000000000000000000000000 Schramm 00100000000000000000000000000000 DeFazio 01000000000000000000000000000000 handwritten 00000000000000000000000000000000 Jeb 00100000000000000000000000000000 109.85 00000000000000000000000000000000 Compliance 00100000000011000001100000110010 flirted 00000000000000000000000000000000 needy 00000000000111001010101000110000 Nassau 00100000000000000000000000000000 Gaston 00101111111000101000101100011000 Newsprint 00100000000000010100011010110000 Julia 00100000000000000000000000000000 six-cent 00000000000000000000000000000000 superseded 00000000000000000000000000000000 light-wave 00000000000000000000000000000000 revenue-raising 00000000000000000000000000000000 Kendrick 00100000000000000000000000000000 insolvency 00000000000101111110011010100111 evaders 00000000000000000000000000000000 feckless 00000000000000000000000000000000 emboldened 00000000000101100001110000110010 Sylvia 00100000000000000000000000000000 Oriental 00100000000001000000001000110000 feats 00000000000000000000000000000000 compilation 00000000000000000000000000000000 brightened 00000000000000000000000000000000 fascist 00000000000000000000000000000000 short-range 00000000000000000000000000000000 Dolan 00100000000000000000000000000000 unmarked 00000000000000000000000000000000 890 00000000000000000000000000000000 cloak 00000000000000000000000000000000 deflect 00000000000000011011111110110010 practitioner 00000000000000000000000000000000 730 00000000000000000000000000000000 perceive 00000000000101101110100110110010 Hours 00100000000000000000000100011011 registrations 00000000000000000000000000000000 impair 00000000001110000110111110110010 Graduates 00100000000101001000111000110011 careless 00000000000000000000000000000000 Liptak 00100000000000000000000000000000 35.75 00000000000000000000000000000000 galvanizing 00000000000000000000000000000000 misdemeanors 00000000000000000000000000000000 implicitly 00000001010001000001001001110010 2:43 00000000000000000000000000000000 tendencies 00000000000111100011011100100011 Takeover-stock 00100000000000000000000000000000 multiparty 00000000000000000000000000000000 arson 00000000000000000000000000000000 ShareData 01000000000000000000000000000000 trashing 00000000000000000000000000000000 fringes 00000000000110110111011000001111 re-establish 00000000000000000000000000000000 consummate 00000000001101100101110110110010 debt-to-equity 00000000000000000000000000000000 5.09 00000000000000000000000000000000 Zeffirelli 00100000000000000000000000000000 31.4 00000000000000000000000000000000 public-works 00000000000000000000000000000000 unadjusted 00000000000000111000000100010000 Forget 00100000000111110011100110110010 jeopardizing 00000000000000000000000000000000 374.6 00000000000000000000000000000000 Roach 00101111111000001001001000001000 stimuli 00000000000000000000000000000000 non-residential 00000000000000000000000000000000 uninformative 00000000000000000000000000000000 69.6 00000000000000000000000000000000 23.4 00000000000000000000000000000000 discourse 00000000000011001010111010100111 prodded 00000001000111000101010000110010 programmer 00000000000101111011011110110101 bullhorns 00000000000000000000000000000000 tangential 00000000000000000000000000000000 Euromarket 00100000000000000101011010100001 picketing 00000000000000000000000000000000 equate 00000000000000000000000000000000 Rosa 00100000000000101000000001001000 accomplishes 00000000000000000000000000000000 pinpointed 00000000000000000000000000000000 construe 00000000000000000000000000000000 tie-in 00000000000000000000000000000000 reminders 00000000000000000000000000000000 Outstanding 00100000000111111111111000011101 communications-network 00000000000000000000000000000000 non-life 00000000000000000000000000000000 1,680 00000000000000000000000000000000 subcontract 00000000000000000000000000000000 refurbishment 00000000000000000000000000000000 disturbances 00000000000111100100011000100011 Taisho 00100000000000000000000000000000 Dictionary 00100000000111101011110100000001 1,940 00000000000000000000000000000000 financial-data 00000000000000000000000000000000 680 00000000000000000000000000000000 Mandle 00100000000000000000000000000000 Technically 00100000001000001000000001110010 accommodations 00000000000111110111000001100011 735 00000000000000000000000000000000 scenery 00000000000000000000000000000000 savers 00000000000000000001101111110011 captive 00000000000111101110101001000000 Shokubai 00100000000000000000000000000000 self-styled 00000000000000000000000000000000 circuit-board 00000000000000000000000000000000 lowest-rated 00000000000000000000000000000000 Vichy 00100000000000000000000000000000 23.7 00000000000000000000000000000000 home-run 00000000000000000000000000000000 hitters 00000000000111101001101001110011 thoroughfare 00000000000000000000000000000000 deductibles 00000000000000000000000000000000 cultivated 00000000111101101100010000110010 limp 00000000000000000000000000000000 Hardly 00100001100001000000001001110010 test-drive 00000000000000000000000000000000 Sealey 00100000000000000000000000000000 Jahn 00100000000000000000000000000000 692 00000000000000000000000000000000 highest-rated 00000000000000000000000000000000 Ganis 00101111111011101100000010001000 Gumbel 00100000000000000000000000000000 Tele1st 00100000000000000000000000000000 Bargain 00100000000111011101101010110111 Borough 00100000000001000010010000110101 Showa 00100000000000000000000000000000 low-power 00000000000000000000000000000000 Fulham 00100000000000000000000000000000 passbook 00000000000000000000000000000000 crept 00000000000100001011001000110010 get-together 00000000000000000000000000000000 observing 00000000000111101001110101000000 Kawasaki-Rikuso 01000000000000000000000000000000 Long-Term 01000000000000000000000000000000 second-level 00000000000000000000000000000000 buttressed 00000000000000000000000000000000 analogous 00000000000000000000000000000000 Spielberg 00101111111100111100000010001000 Teikoku 00100000000000000000000000000000 capital-markets 00000000000000000000000000000000 solicitor 00000000000000111010110000110101 sharpening 00000000000000000000000000000000 Hafer 00100000000000000000000000000000 dueling 00000000000000000000000000000000 relentless 00000000000010100001000000010000 amateurs 00000000000111010100111000110011 PriMerit 01000000000000000000000000000000 Chatsworth 00100000000000000000000000000000 975 00000000000000000000000000000000 avenues 00000000000111111011001110100011 gut-wrenching 00000000000000000000000000000000 103.1 00000000000000000000000000000000 Ill.-based 00100000000000000000000000000000 minicrash 00000000000000000000000000000000 seaborne 00000000000000000000000000000000 Mediterranean 00100000000111110010001110101000 purposely 00000000000000000000000000000000 unseated 00000000000000000000000000000000 75-year-old 00000000000000000000000000000000 65.4 00000000000000000000000000000000 ramparts 00000000000000000000000000000000 unstoppable 00000000000000000000000000000000 transitional 00000000001001001101000000010000 captivating 00000000000111110011000010010000 Hallmark 00100000000000000010010100110001 Kurland 00100000000000000000000000000000 outposts 00000000000100011000111101100011 bludgeon 00000000100110111111110110110010 Marschalk 00100000000000000000000000000000 crapshoot 00000000000110000111101010110111 racket 00000000000000000000000000000000 Takashi 00100000000000000000000000000000 49,000 00000000000000000000000000000000 erred 00000000011010011110001000110010 com 00000000000110101010010010110000 Chabrol 00100000000000000000000000000000 pany 00000000000000000000000000000000 allergy 00000000000000000000000000000000 5:30 00000000000000000000000000000000 ace 00000000000110100011011100100001 Q45 00100000000000000000000000000000 wags 00000000000101010010000010110011 pundits 00000000000110101010000010110011 palace 00000000000111001101000100000001 Taps 00100000000000000000000000000000 D'Amico 01000000000000000000000000000000 symbols 00000000000111111010110101100011 fences 00000000000110110000010000100111 Civic 00100000001101100000000000110000 glaze 00000000000000000000000000000000 Sentra 00100000000000000000000000000000 Madonna 00100000000000000000000000000000 Mignanelli 00100000000000000000000000000000 now-shaky 00000000000000000000000000000000 relaunched 00000000000000000000000000000000 incompatible 00000000001011110101100000110010 countless 00000000000000000111000011000000 drapes 00000000000000000000000000000000 McCann-Erickson 01000000000000000000000000000000 reschedule 00000000000001001110001110110010 wedded 00000000000100101100011000110010 carrot 00000000000111011101111000000001 hugely 00000000000000000000000000000000 13.15 00000000000000000000000000000000 new-model 00000000000000000000000000000000 one-tenth 00000000000000000000000000000000 Eyes 00100000000111111111101101100011 Omron 00100000000000000000000000000000 Balmy 00100000000000000000000000000000 Krishna 00100000000000000000000000000000 redefinition 00000000000000000000000000000000 S-Cargo 01000000000000000000000000000000 WTI 01000000000000000000000000000000 Epson 00100000000000000000000000000000 clones 00000000000111001001110101100011 tilted 00000000000000000000000000000000 Shipping 00100000001001000010110001000000 insulating 00000000000000000000000000000000 tooth 00000000000100100101110000100001 hideaway 00000000000000000000000000000000 predecessors 00000000000101111011110000110011 bash 00000000000010101101001010110111 944 00000000000000000000000000000000 pre-approved 00000000000000000000000000000000 Towns 00100000000111100011110001100011 squared 00000000000000000000000000000000 sporty 00000000000110001000001010110000 free-enterprise 00000000000000000000000000000000 237,960,000 00000000000000000000000000000000 coherent 00000000001111000001000000010000 refurbished 00000000000000000000000000000000 382 00000000000000000000000000000000 Brean 00100000000000000000000000000000 scooped 00000000000000000000000000000000 Synergistics 00100000000000000000000000000000 excursions 00000000000000000000000000000000 shaving 00000000000001001010110001000000 Josephthal 00100000000000000000000000000000 witches 00000000000000000000000000000000 top-management 00000000000000000000000000000000 compatibility 00000000000110111010110000100111 speedometer 00000000000000000000000000000000 dashboard 00000000000000000000000000000000 bundling 00000000000000000000000000000000 14-year 00000000000000000000000000000000 30-year-old 00000000000000000000000000000000 Balfour 00100000000000000000000000000000 Maclaine 00100000000000000000000000000000 prostaglandin 00000000000000000000000000000000 competed 00000000001001011110001000110010 rigidity 00000000000000000000000000000000 Worst 00100000000000001111010011010000 235,000 00000000000000000000000000000000 glamorize 00000000000000000000000000000000 nominally 00000000011101101000000001110010 analgesic 00000000000000000000000000000000 Nausea 00100000000010010111110010100111 vomiting 00000000000000000000000000000000 razor-thin 00000000000000000000000000000000 Norsk 00100000000010000100101000101000 briefings 00000000000101010011101000100011 Marston 00100000000000000000000000000000 Driskill 00100000000000000000000000000000 researched 00000000101101000101010000110010 fertility 00000000000000001010011100000111 suppress 00000000000101010111111110110010 Yutaka 00100000000000000000000000000000 minicar 00000000000000000000000000000000 Maxima 00100000000000000000000000000000 loosened 00000000000000000000000000000000 iota 00000000000000000000000000000000 Lancet 00100000000000000000000000000000 5.35 00000000000000000000000000000000 vocalist 00000000000000000000000000000000 decades-old 00000000000000000000000000000000 duplicated 00000000000000000000000000000000 monkeys 00000000000000000000000000000000 chopsticks 00000000000000000000000000000000 casually 00000001000001000000010001110010 vaginal 00000000000000000000000000000000 badges 00000000000000000000000000000000 undergo 00000000001011101111101110110010 swarm 00000000000000000000000000000000 backwards 00000000000000000000000000000000 traditionalists 00000000000000000000000000000000 Wide 00100000000010000000100000010000 Timber 00100000000011000100011010110000 subsidizes 00000000000000000000000000000000 contraceptives 00000000000000000000000000000000 clogging 00000000000000000000000000000000 suburbs 00000000000111101101011001100111 derisively 00000000000000000000000000000000 Amax 00100000000000011011000100101000 subtitled 00000000000000000000000000000000 old-style 00000000000000000000000000000000 0.16 00000000000000000000000000000000 thrash 00000000000000000000000000000000 DRUG 01000000000000001010111010110000 5.92 00000000000000000000000000000000 dinosaurs 00000000000000000000000000000000 short-selling 00000000000000000000000000000000 Wrong 00100000000001000000110110010000 Davies 00101111111101111000100010001000 segregated 00000000001000100101101001000000 6.84 00000000000000000000000000000000 Groundwater 00100000000110110000110000100001 three-judge 00000000000000000000000000000000 50.9 00000000000000000000000000000000 pelvic 00000000000000000000000000000000 Harland 00100000000000000000000000000000 rehearing 00000000000111001001101010100111 UNITED 01000000000111111101110110101000 Stockbrokers 00100000000000000000101111110011 high-rise 00000000000000000000000000000000 tarnish 00000000000000000000000000000000 feminists 00000000000000000000000000000000 Frankel 00101111111111110010100010001000 Thielsch 00100000000000000000000000000000 Sigler 00100000000000000000000000000000 utterances 00000000000000000000000000000000 fostering 00000000000000000000000000000000 testimonial 00000000000000000000000000000000 35.50 00000000000000000000000000000000 88.8 00000000000000000000000000000000 Q. 00101111111111011110101011011000 festivities 00000000000101001011110101100011 logs 00000000011011100111110101100011 affirmation 00000000000000000000000000000000 Marcoses 00100000000000000000000000000000 Takeshi 00100000000000000000000000000000 108.4 00000000000000000000000000000000 market-opening 00000000000000000000000000000000 fraudulently 00000000100011000001001001110010 natives 00000000000011101000100000110011 trampling 00000000000000000000000000000000 pleadings 00000000000000000000000000000000 orchestrated 00000000010101101100010000110010 677 00000000000000000000000000000000 16.05 00000000000000000000000000000000 rollbacks 00000000000000000000000000000000 Lords 00100000000111001101100010100111 Tracy 00101111111000011111000100001000 30s 00000000000000000000000000000000 Bulls 00100000000000001100101001110011 disbursed 00000000000000000000000000000000 concerts 00000000000000100101110101100011 anti-programmers 00000000000000000000000000000000 Tully 00101111111010000100001000001000 Petty 00100000000000101101001000110000 Aviv 00100000000000010011010001001000 Tel 00100000000111111100101000101000 Zarett 00101111111000110010110001001000 37.8 00000000000000000000000000000000 reactor 00000000000111101110110010001001 Moshe 00100000000000000000000000000000 Lease 00100000000000000001000110110111 Bodner 00100000000000000000000000000000 antagonistic 00000000000000000000000000000000 757-200s 00000000000000000000000000000000 Topix 00100000000000000000000000000000 ebbs 00000000000010100110111000000001 submarines 00000000000111000011100110001001 Wise 00100000001100000100011010010000 good-faith 00000000000000000000000000000000 distasteful 00000000000000000000000000000000 Delivery 00100000000000000000101110000111 rule`` 00000000000000000000000000000000 conspicuous 00000000000000101001000010010000 Hurd 00100000000000000000000000000000 continent 00000000000111111000111001000101 bankroll 00000000000000000000000000000000 1,640 00000000000000000000000000000000 cropped 00000000001110111011001000110010 7.73 00000000000000000000000000000000 Kirgizia 00100000000000000000000000000000 Yitzhak 00101111111010011111001010011000 Attic 00100000000000000000000000000000 first-rate 00000000000000000000000000000000 Alert 00100000000111001000001010110111 18.8 00000000000000000000000000000000 tent 00000000000000001100110000000001 25.7 00000000000000000000000000000000 Troops 00100000000101100010100000110011 widgets 00000000000000000000000000000000 Jean-Pierre 01000000000000000000000000000000 hampering 00000000000000000000000000000000 Chester 00100000000000000110011010101000 Scare 00100000011111010110010110110010 pest-control 00000000000000000000000000000000 Hal 00101111111010000110100000011000 Cult 00100000000110101001010000000001 27-year-old 00000000000000000000000000000000 ``` 00000000000000000000000000000000 leveraging 00000000000000000000000000000000 fundamentalist 00000000000001101101011000110000 84.3 00000000000000000000000000000000 desires 00000000000110111010111101100011 Heathrow 00100000000101001110010000101000 auto-loan 00000000000000000000000000000000 Panda 00100000000000000000000000000000 Tong'Il 01000000000000000000000000000000 concentrates 00000000000111010000100000110010 Tagliabue 00100000000000000000000000000000 Rozelle 00100000000000000000000000000000 Valued 00100000000011000001110100110010 REAL 01000000000010101111111000110000 ESTATE 01000000000100010000001100011101 Laser 00100000000001000010101010110000 crates 00000000000000000000000000000000 Reducing 00100000000111111111011101000000 77.3 00000000000000000000000000000000 Arbitrage 00100000000000000000111010100001 Insiders 00100000000000100010000010110011 crooked 00000000000000000000000000000000 baggage 00000000000111110011110000100001 Inspector 00100000000000010010110000110101 initiating 00000000000110111101111101000000 heyday 00000000000111000111111000001111 70.9 00000000000000000000000000000000 Unificationist 00100000000000000000000000000000 Bromley 00100000000000000000000000000000 Elanco 00100000000000000000000000000000 5.41 00000000000000000000000000000000 westward 00000000000000000000000000000000 Norwegians 00100000000000000000000000000000 pittance 00000000000000000000000000000000 fund-raisers 00000000000000000000000000000000 dropouts 00000000000000000000000000000000 Mecca 00100000000110100011111001101000 loathsome 00000000000000000000000000000000 labeling 00000000001010000010110001000000 Parfums 00100000000000000000000000000000 Valentino 00100000000000000000000000000000 80.3 00000000000000000000000000000000 reputed 00000000000001101100011000010000 bombings 00000000000111111100100000110011 Perches 00100000000000000000000000000000 Trevino 00100000000000000000000000000000 Ramon 00100000000000000000000000000000 Moonies 00100000000000000000000000000000 abduction 00000000000111110011110001100111 bicentennial 00000000000000100001010011010000 Tax-exempt 00100000000000000000000000000000 trafficker 00000000000000000000000000000000 Shiites 00100000000000000000000000000000 65,200 00000000000000000000000000000000 500-seat 00000000000000000000000000000000 Snow 00100000000000000110000000001000 fixes 00000000000000000000000000000000 painter 00000000000001100111011110110101 Caspar 00101111111001010011111100011000 disrupting 00000000000000000000000000000000 slats 00000000000000000000000000000000 felons 00000000000000000000000000000000 unscheduled 00000000000001110001110100010000 upholstery 00000000000000000000000000000000 evangelist 00001111111110100001100000110101 flaps 00000000000111011011110101100011 Solidarity-led 00100000000000000000000000000000 fooling 00000000000001010110100001000000 Haberle 00100000000000000000000000000000 abolishing 00000000000000000000000000000000 454 00000000000000000000000000000000 0.26 00000000000000000000000000000000 loudest 00000000000000000000000000000000 marred 00000000011110000001110000110010 envelopes 00000000000010100111110101100011 Shiite 00100000000111000101011000110000 Julian 00101111111000110101100010011000 aunt 00000000000111110001111100001000 biased 00000000000111110110110110010000 halves 00000000000111100011000100101111 37-a-share 00000000000000000000000000000000 counterclaims 00000000000000000000000000000000 studiously 00000000000000000000000000000000 blasts 00000000000111111101100110001001 clarified 00000000111011010100010000110010 clippings 00000000000000000000000000000000 14.99 00000000000000000000000000000000 trade-off 00000000000000000000000000000000 Twins 00100000000001001101100110110011 Tracers 00100000000000000000000000000000 323s 00000000000000000000000000000000 ratify 00000000001111010111111110110010 toiletries 00000000000010110011111010110000 NT&SA 01000000000000000000000000000000 larger-than-normal 00000000000000000000000000000000 678 00000000000000000000000000000000 refillable 00000000000000000000000000000000 windshields 00000000000000000000000000000000 DESPITE 01000000000111110110100000001010 litany 00000000000000000000000000000000 securely 00000000000000000000000000000000 raids 00000000000111101000100100100111 roadblock 00000000000111110000111010110101 Durable 00100000000010110001010000110000 hay 00000000000000001110000000001000 5.435 00000000000000000000000000000000 323 00000000000000000000000000000000 Bronco 00100000000000000000000000000000 buyback 00000000000000000000000101110111 tamer 00000000000000000000000000000000 explosively 00000000000000000000000000000000 self-regulatory 00000000000000000000000000000000 Bowery 00100000000000000000000000000000 undisputed 00000000000000000000000000000000 veer 00000000000000000000000000000000 open-ended 00000000000000000000000000000000 shake-up 00000000000000000000000000000000 zoo 00000000000101010001111010110000 motifs 00000000000000000000000000000000 Renk 00100000000000000000000000000000 uphold 00000000000110100111111110110010 Lawson-Walters 01000000000000000000000000000000 Breaking 00100000000111111100100001000000 watchdogs 00000000000110000011011100100011 two-tiered 00000000000000000000000000000000 Browns 00100000000000101000101100100101 Swank 00100000000000000000000000000000 Relief 00100000000111111010111000111001 discontent 00000000000111011110111010100111 Crystal 00100000000010001010001000110000 escalated 00000000000000011010111001000000 Fears 00100000000111101110101010101111 executes 00000000000000000000000000000000 scoff 00000000000011010101010110110010 Watanabe 00100000000000000000000000000000 Rill 00100000000000000000000000000000 opportunists 00000000000000000000000000000000 costume 00000000000111011110101100100001 Lecheria 00100000000000000000000000000000 bucking 00000000000000000000000000000000 Milk 00100000001100001011111010110000 vitally 00000000000000000000000000000000 rancor 00000000000000000000000000000000 TWA 01000000000000000000000000000000 soaking 00000000000000000000000000000000 Barely 00100000001011100000001001110010 Johnnie 00100000000000000000000000000000 Kavanagh 00100000000000000000000000000000 McGuigan 01000000000000000000000000000000 drinker 00000000000000000000000000000000 Ballot 00100000000111100010000001100111 Schmidt 00101111111111100110100010001000 sharks 00000000000000000000000000000000 Rustin 00100000000000000000000000000000 beds 00000000000111100101101001100011 Debate 00100000000111101000111010100111 Citizen 00100000000111110111111000100001 industry-funded 00000000000000000000000000000000 quake-related 00000000000000000000000000000000 functioned 00000000000000000000000000000000 chasers 00000000001101101011110101100011 Jerrold 00101111111000101101100010011000 whiz 00000000000000111011011110110101 BK 01000000000000000000000000000000 Doubles 00100000000111111010011011000000 reportage 00000000000000000000000000000000 double-C 01000000000000000000000000000000 perceives 00000000000000000000000000000000 Offer 00100000000111111111110111100111 Frequent 00100000001110000001000000010000 public-service 00000000000000000000000000000000 unfettered 00000000000000000000000000000000 uncovering 00000000000100000111111101000000 governmental-affairs 00000000000000000000000000000000 coattails 00000000000000000000000000000000 self-regulation 00000000000000000000000000000000 Yates 00101111000100001100000010001000 frighten 00000000000100011011101110110010 enlightened 00000000001110011000110100010000 Brigham 00100000000000000000000000000000 Stieglitz 00100000000000000000000000000000 sequels 00000000000000000000000000000000 testifying 00000000000111100011000001000000 Cedar 00100000000000001000010110110000 Shining 00100000000000000110011010010000 declarations 00000000000111010011101000100011 Talks 00100000000111101111010000100111 bellies 00000000000010111011101011001001 newsman 00000000000111001111011110110101 baseless 00000000000000000000000000000000 fetching 00000000000000000000000000000000 non-alcoholic 00000000000000000000000000000000 Frankenberry 00100000000000000000000000000000 306 00000000000000000000000000000000 Constable 00100000000000000000000000000000 RADIO 01000000000000000100001010110000 wig 00000000000000000000000000000000 415 00000000000000000000000000000000 Racing 00100000000111100000110001000000 adventures 00000000000111101100111101100011 hilarious 00000000000000000000000000000000 product-related 00000000000000000000000000000000 Rheingold 00100000000000000000000000000000 Rexall 00100000000000000000000000000000 Barth 00100000000000000000000000000000 Liquidating 00100000000110010011011101000000 E.R. 01000000000000000000000000000000 Kligman 00100000000000000000000000000000 alerts 00000000000000000000000000000000 Lawsuits 00100000000110101011110000100011 storyteller 00000000000000000000000000000000 Patents 00100000000111111110001000100011 alternates 00000000000000000000000000000000 Telepictures 00100000000000000001101000101000 Contractors 00100000000000000010010000110011 windfalls 00000000000000000000000000000000 harness 00000000000000000000000000000000 278.7 00000000000000000000000000000000 Lorimar 00100000000111110100101100101000 DIALING 01000000000000000000000000000000 Burbank 00100000000111001010101001101000 Brief 00100000000000010011000000010000 Lavery 00100000000000000000000000000000 duplicity 00000000000000000000000000000000 chatter 00000000000000000000000000000000 dreamy 00000000000000000000000000000000 46.1 00000000000000000000000000000000 Colleges 00100000000111010110111000110011 acrimonious 00000000000011011000110100010000 herbicides 00000000000000000000000000000000 Landmark 00100000000010100000000010010000 underperforming 00000000000000100000101001000000 Yokohama 00100000000000000000000000000000 migrate 00000000000000000000000000000000 Yoshio 00100000000000000000000000000000 cautiousness 00000000000000000000000000000000 poking 00000000000000000000000000000000 high-water 00000000000000000000000000000000 far-left 00000000000000000000000000000000 95.2 00000000000000000000000000000000 rejuvenation 00000000000000000000000000000000 joblessness 00000000000000000000000000000000 samurai 00000000000010001110111000000001 disgraceful 00000000000000000000000000000000 intermittent 00000000000000011110010100010000 elitists 00000000000000000000000000000000 accusers 00000000000000000000000000000000 reaffirming 00000000000000000000000000000000 Secondly 00100000000000000000000000000000 starved 00000000001100011110110000110010 85.7 00000000000000000000000000000000 irritated 00000000010100101101110000110010 22.75 00000000000000000000000000000000 Officially 00100000000000100001001001110010 54-year-old 00000000000000000000000000000000 Furey 00100000000000000000000000000000 capital-to-asset 00000000000000000000000000000000 shove 00000000000000000000000000000000 Leming 00100000000000000000000000000000 liberalism 00000000000111001111010010100111 MEDICINE 01000000000111101111110010100111 faction 00000000000110001011101001100111 Liberals 00100000000111111000100110110011 Pettit 00100000000000000000000000000000 bandages 00000000000000000000000000000000 Nicole 00100000000000000000000000000000 Elco 00100000000000000000000000000000 sustains 00000000000000000000000000000000 76.6 00000000000000000000000000000000 ankle 00000000000000000000000000000000 embody 00000000000000000000000000000000 a-Discounted 01000000000000000000000000000000 b-Week 01000000000000000000000000000000 prompts 00000000000000000000000000000000 detectable 00000000000000000000000000000000 Proleukin 00100000000000000000000000000000 alley 00001111111000110000000000001000 24.7 00000000000000000000000000000000 combinations 00000000000001001100010000100111 originators 00000000000000000000000000000000 32.2 00000000000000000000000000000000 Tokio 00100000000000000000000000000000 protocols 00000000000000000000000000000000 expeditiously 00000000000001110000010001110010 exploiting 00000000000111001011111101000000 19.25 00000000000000000000000000000000 SERVICES 01000000000011101110011101001001 fruitful 00000000000000000000000000000000 36.9 00000000000000000000000000000000 disposables 00000000000000000000000000000000 Tiny 00100000000000000101010000010000 Rosenblum 00101111111101000000000010001000 16.75 00000000000000000000000000000000 Tots 00100000000000000000000000000000 streptokinase 00000000000100101001110010100111 Polystyrene 00100000000000000000000000000000 Georgeson 00100000000000000000000000000000 stop-motion 00000000000000000000000000000000 672 00000000000000000000000000000000 Nader 00101111111111101100110010001000 Smelting 00100000000000000000000000000000 Elisa 00100000000000000000000000000000 throwaway 00000000000011001000001010110000 Istituto 00100000000000000000000000000000 3.56 00000000000000000000000000000000 headache 00000000000111011100111010110101 Kato 00100000000000000000000000000000 529.32 00000000000000000000000000000000 outlet 00000000000111100101011001100111 dice 00000000000000000000000000000000 Profit-taking 00100000000000000000000000000000 vexed 00000000000000000000000000000000 pottery 00000000000000000000000000000000 loss-making 00000000000000000000000000000000 missionaries 00000000000000000000000000000000 Grover 00100000000000000000000000000000 likeness 00000000000000000000000000000000 Sigmund 00100000000000000000000000000000 54.5 00000000000000000000000000000000 Addressing 00100000000111101110111101000000 schizophrenic 00000000000000000000000000000000 644 00000000000000000000000000000000 847 00000000000000000000000000000000 Wellesley 00100000000110011000101001101000 55.2 00000000000000000000000000000000 51.3 00000000000000000000000000000000 indigenous 00000000000000000000000000000000 ornaments 00000000000000000000000000000000 unleash 00000000000001101111101110110010 manuevering 00000000000000000000000000000000 misrepresenting 00000000000000000000000000000000 Sole 00100000000000100000010011010000 Machiguengas 00100000000000000000000000000000 Siena 00100000000000000000000000000000 Cranston-Mitchell 01000000000000000000000000000000 McIntyre 01001111111011110100001000001000 anti-cancer 00000000000000000000000000000000 Master 00100000000110110011111000100001 oncogenes 00000000000000000000000000000000 Keogh 00100000000000000000000000000000 Summers 00100000000100101011111010001000 JCP 01000000000000000000000000000000 Arighi 00100000000000000000000000000000 flats 00000000000100100001110100100001 noodles 00000000000000000000000000000000 Fitch 00100000000000000000000000000000 Reames 00100000000000000000000000000000 British-owned 00100000000000000000000000000000 depositing 00000000000000000000000000000000 reliably 00000000000000000000000000000000 Underwriting 00100000000000000100000010110000 10.48 00000000000000000000000000000000 gratification 00000000000000000000000000000000 Dryja 00100000000000000000000000000000 31,329 00000000000000000000000000000000 Broder 00101111111100110110000010001000 upper-income 00000000000000000000000000000000 half-an-hour 00000000000000000000000000000000 Colony 00100000000111111111110111000101 Colon 00100000000111101010101011100001 Complete 00100000000111110101110110110010 59-year-old 00000000000000000000000000000000 Hadson 00100000000000000000000000000000 70.3 00000000000000000000000000000000 scourges 00000000000000000000000000000000 268.3 00000000000000000000000000000000 2008-2009 00000000000000000000000000000000 inherit 00000000001100100111111110110010 36.625 00000000000000000000000000000000 theorized 00000000000000000000000000000000 40.9 00000000000000000000000000000000 75.1 00000000000000000000000000000000 doubly 00000000000000000000000000000000 Occasionally 00100000001100100000001001110010 carefree 00000000000000000000000000000000 Cavenee 00100000000000000000000000000000 assemblies 00000000000111111110101111001001 overruled 00000000011001111001010000110010 riveted 00000000000000100000100000110010 eruption 00000000000000000000000000000000 16.8 00000000000000000000000000000000 single-B-3 01000000000000000000000000000000 Auctions 00100000000111110100110100100011 47.5 00000000000000000000000000000000 adapting 00000000000000000000000000000000 mirroring 00000000000000000000000000000000 identifiable 00000000000000000000000000000000 Silverman 00101111110000101100000010001000 Existing 00100000000000000011000011010000 doctoral 00000000000000000110010000010000 extricate 00000000000000000000000000000000 Gardiner 00101111111001110100001000001000 Legislators 00100000000000000101010010110011 electrically 00000000001001101000000001110010 Gradually 00100000010011000000010001110010 hurling 00000000010010000110100001000000 malignancy 00000000000000000000000000000000 14.25 00000000000000000000000000000000 blase 00000000000000000000000000000000 Millen 00100000000000000000000000000000 overflowing 00000000000000110101100000110010 tandem 00000000000000011100100100101000 sharpen 00000000000111010100111110110010 grass-roots 00000000000000000000000000000000 metaphors 00000000000000000000000000000000 172.5 00000000000000000000000000000000 better-known 00000000000000000000000000000000 Weinberg 00101111111100100000000010001000 entombed 00000000000000000000000000000000 Taccetta 00100000000000000000000000000000 Edinburgh 00100000000000000000000000000000 Skanska 00100000000000000000000000000000 Amazonia 00100000000000000000000000000000 ditch 00000000000101010101111010110111 tomb 00000000000000000000000000000000 isolate 00000000001001010111111110110010 sublime 00000000000001010011000010010000 nonvoting 00000000000100001110110101010000 Sand 00100000000111000110000000001000 glasses 00000000000100111101110101100011 Built 00100000000111001100010000110010 cedar 00000000000000001000010110110000 Keffer 00100000000000000000000000000000 Agnellis 00100000000000000000000000000000 starter 00000000000000000000000000000000 Known 00100000000111000010110000110010 Citation 00100000000111101000000001100111 869 00000000000000000000000000000000 crystal-lattice 00000000000000000000000000000000 demeanor 00000000000101010111101001100111 bid-to-cover 00000000000000000000000000000000 reiterating 00000000000000000000000000000000 257 00000000000000000000000000000000 arrogance 00000000000111111000110010100111 Kazis 00100000000000000000000000000000 passers-by 00000000000000000000000000000000 repackaging 00000000000000000000000000000000 Bognato 00100000000000000000000000000000 corpus 00000000000111110010111100010000 Zero-coupon 00100000000000000000000000000000 discern 00000000000000000000000000000000 referral 00000000000101111100111000100001 Queen 00100000000100110001100100100001 short-sellers 00000000000000000000000000000000 tapestry 00000000000000000000000000000000 Dain 00101111111101000100010000101000 Bosworth 00101111111011011100111000001000 Certain 00100000000000000001000011000000 dutifully 00000000000000000000000000000000 Sunbird 00100000000000000000000000000000 Fahrenheit 00100000000111111101101001100010 drought-related 00000000000000000000000000000000 Active 00100000000000000110011100010000 Prospective 00100000000000000110111000010000 Papetti 00100000000000000000000000000000 100-Share 01000000000000000000000000000000 curled 00000000000000000000000000000000 hyping 00000000000000000000000000000000 motors 00000000000000011110010001001000 magnets 00000000000111100011001111001001 order-taking 00000000000000000000000000000000 enlisted 00000000001001000101010000110010 sipped 00000000001010111011000000010010 97.75 00000000000000000000000000000000 lip 00000000000000111011110000110000 pretense 00000000000111101001110000001111 R.R. 01000000000000000000000000000000 flat-footed 00000000000000000000000000000000 shelled 00000000000000101001001000110010 Inquiry 00100000000110111111110001100111 taint 00000000000000000000000000000000 chopping 00000000000000000000000000000000 undercutting 00000000000111000101011101000000 Path 00100000000111101011111101100111 bedrock 00000000000000000000000000000000 Determining 00100000000111111001011101000000 150-member 00000000000000000000000000000000 Danville 00100000000000000000000000000000 Deacon 00100000000000000000000000000000 Size 00100000000111111111101000001111 circulars 00000000000000000000000000000000 interviewing 00000000000111100101001101000000 1.61 00000000000000000000000000000000 136.4 00000000000000000000000000000000 weekday 00000000000111010110000000100001 high-cost 00000000000000000000000000000000 brash 00000000000110101000011010010000 stonemason 00000000000000000000000000000000 sulfur-dioxide 00000000000000000000000000000000 fixture 00000000000000000000000000000000 Winnipeg 00100000000000000000000000000000 Integra 00100000000000000000000000000000 executive-model 00000000000000000000000000000000 Kiep 00100000000000000000000000000000 e 00000000000000000000000000000000 WASHINGTON 01000000000111111111111001101000 fallback 00000000000000000000000000000000 246 00000000000000000000000000000000 stern 00001111111000000001000000001000 2.88 00000000000000000000000000000000 configuration 00000000000000000000000000000000 BCE 01000000000000000000000000000000 reshuffling 00000000000111111111100111001111 Ingalls 00100000000000000000000000000000 Litton 00100000000001100011000100101000 1991-2000 00000000000000000000000000000000 Storyteller 00100000000000000000000000000000 limited-partnership 00000000000000000000000000000000 13.94 00000000000000000000000000000000 15.375 00000000000000000000000000000000 Forman 00101111111011110000001010001000 stump 00000000000000000000000001100111 Kerlone 00100000000000000000000000000000 hypertension 00000000000001001001110010100111 German-built 00100000000000000000000000000000 Vt. 00100000000000000000000000000000 Mediobanca 00100000000000000000000000000000 corrective 00000000000000111000000000110000 age-bias 00000000000000000000000000000000 pistol 00000000000111101011001011100111 market-based 00000000000000000000000000000000 Kimba 00100000000000000000000000000000 eradicate 00000000000000000000000000000000 surreptitiously 00000000000000000000000000000000 jurisdictions 00000000000111100110000100100011 reappointed 00000000000000000000000000000000 A-D 01000000000000000000000000000000 enlarge 00000000000111010000111110110010 vendetta 00000000000000000000000000000000 unhappiness 00000000000111110100110000100111 demagoguery 00000000000000000000000000000000 1991-1999 00000000000000000000000000000000 Stirling 00100000000000000000000000000000 clean-up 00000000000000000000000000000000 scoffed 00000000000000000000000000000000 Conversation 00100000000101011110110000100111 cinematic 00000000000000000000000000000000 479 00000000000000000000000000000000 Dixie 00100000000101000111111000101000 needlessly 00000000000000000000000000000000 knit 00000000000100100101101001000000 80.8 00000000000000000000000000000000 Brevetti 00100000000000000000000000000000 console 00000000000011000100001110110111 Kilpatrick 00100000000000000000000000000000 Barcelona 00100000000111010111111001101000 333 00000000000000000000000000000000 dummy 00000000000000011101010000010000 disquieting 00000000000000000000000000000000 oppression 00000000000110110111110010100111 1992-1999 00000000000000000000000000000000 LeGere 01000000000000000000000000000000 Ransom 00100000000100101110000000001000 2017 00000000000000000000000000000000 Allegheny 00100000000111001111010100101000 SHORT 01000000000000000000000001101111 trumpet 00000000001100111111110110110010 7.40 00000000000000000000000000000000 disservice 00000000000000000000000000000000 activated 00000111001011010100010000110010 410,000 00000000000000000000000000000000 Published 00100000000111100000010000110010 water-treatment 00000000000000000000000000000000 receptionist 00000000000000000000000000000000 adorned 00000000000000000000000000000000 le 00000000000100010001010101001000 Image 00100000000111111111111001100111 potted 00000000000000000000000000000000 Svenska 00100000000000000000000000000000 honoring 00000000000000000000000000000000 Crutcher 00100000000000000000000000000000 loaned 00000000000000000000000000000000 Greenery 00100000000000000000000000000000 dirtiest 00000000000000000000000000000000 Sixth 00100000000100100011001011010000 cavalier 00000000000111000100000001000111 52.4 00000000000000000000000000000000 Cabernets 00100000000000000000000000000000 UniFirst 01000000000000000000000000000000 sensibility 00000000000000000000000000000000 garment 00000000000001011011111010110000 airliners 00000000000111000110101001100011 dulled 00000000000000000000000000000000 one-upsmanship 00000000000000000000000000000000 Virtue 00100000000111111111101100111111 Buchwald 00100000000000000000000000000000 Crozier 00100000000000000000000000000000 believer 00000000000111100111111010110101 31.75 00000000000000000000000000000000 Suzanne 00101111111000100101111000011000 Lodge 00100000000101111001100010100101 post-Watergate 01000000000000000000000000000000 etiquette 00000000000000000000000000000000 Lees 00100000000000000000000000000000 Happened 00100000000111100110001000110010 avid 00000000001100011000110100010000 bovine 00000000000000000000000000000000 Salvagni 00100000000000000000000000000000 improvisation 00000000000000000000000000000000 dinners 00000000000101101111110001100011 Suppliers 00100000000111111100010000110011 1,816,000 00000000000000000000000000000000 unsteady 00000000000000000000000000000000 savviest 00000000000000000000000000000000 mementos 00000000000000000000000000000000 ever-changing 00000000000000000000000000000000 raw-materials 00000000000000000000000000000000 Counterpoint 00100000000000000000000000000000 stewed 00000000000000000000000000000000 institutes 00000000000110110101110001010101 440 00000000000000000000000000000000 looseleaf 00000000000000000000000000000000 Offering 00100000000111101111110001110111 Lindsey 00101111111110001100110010001000 dessert 00000000000000000000000000000000 priceless 00000000000000000000000000000000 Koppel 00100000000000000000000000000000 Allergan 00100000000000000000000000000000 Mankiewicz 00100000000000000000000000000000 Robbie 00100000000000000000000000000000 3.74 00000000000000000000000000000000 807 00000000000000000000000000000000 outpace 00000000000001100110111110110010 Westcoast 00100000000101101111000100101000 Arkoma 00100000000000000000000000000000 Trunkline 00100000000000000000000000000000 0.84 00000000000000000000000000000000 unmanned 00000000000100111010001010110000 Hillary 00100000000000000000000000000000 ex-wife 00000000000000000000000000000000 Ravenspurn 00100000000000000000000000000000 71%-owned 00000000000000000000000000000000 goods-producing 00000000000000000000000000000000 5.33 00000000000000000000000000000000 Hermitage 00100000000101011110101000100001 low-paid 00000000000000000000000000000000 C.R. 01000000000000000000000000000000 Independence 00100000000101001111110100100111 virgin 00000000000111001001000000001000 intermission 00000000000000000000000000000000 Pittsburg 00100000000000000000000000000000 8.63 00000000000000000000000000000000 cavernous 00000000000000000000000000000000 Jesperson 00100000000000000000000000000000 3.39 00000000000000000000000000000000 Linger 00100000011101111101010110110010 Superdome 00100000000000000000000000000000 McNair 01000000000000000000000000000000 mainline 00000000000000000000000000000000 propriety 00000000000000000000000000000000 relevance 00000000000011100111110100100111 off-budget 00000000000000000000000000000000 Vega 00100000000000000000000000000000 Haskayne 00100000000000000000000000000000 Interhome 00100000000000000000000000000000 1,828,000 00000000000000000000000000000000 Newt 00100000000000000000000000000000 Gingrich 00100000000100011100111010001000 mid-August 01000000000000000000000000000000 emcee 00000000000000000000000000000000 civilization 00000000000111111001010010100111 perch 00000000000000000000000000000000 82.2 00000000000000000000000000000000 mid-June 01000000000000000000000000000000 25.875 00000000000000000000000000000000 Burford 00100000000000000000000000000000 averred 00000000000000000000000000000000 exempted 00000000011111010100010000110010 Richebourg 00100000000000000000000000000000 3.49 00000000000000000000000000000000 Stolzman 00100000000000000000000000000000 drunkenness 00000000000110100001110010100111 Know 00100000000111111011100110110010 impoverished 00000000000000110010101000110000 marrying 00000000000000000000000000000000 playgrounds 00000000000000000000000000000000 floating-point 00000000000000000000000000000000 8.49 00000000000000000000000000000000 Aberdeen 00100000000000000000000000000000 388 00000000000000000000000000000000 2003-2005 00000000000000000000000000000000 vineyard 00000000000100110110111000000001 erodes 00000000000000000000000000000000 collagen 00000000000000000000000000000000 modeling 00000000000000000000000000000000 corneal 00000000000000000000000000000000 2.42 00000000000000000000000000000000 big-name 00000000000000000000000000000000 cornea 00000000000000000000000000000000 simplifying 00000000000000000000000000000000 shudders 00000000000000000000000000000000 Ida 00100000000000000000000000000000 five-year-old 00000000000000000000000000000000 InfoCorp 01000000000000000000000000000000 1989-A 01000000000000000000000000000000 Grantor 00100000000000000000000000000000 Burgundy 00100000000000000000000000000000 Secord 00100000000101111111111010001000 15.06 00000000000000000000000000000000 Liaisons 00100000000000000000000000000000 Gant 00100000000000000000000000000000 Mahoney 00100000000000000000000000000000 instruction-set 00000000000000000000000000000000 Westpac 00100000000111111110111100110000 Dangerous 00100000000000010100010010010000 RC6280 01000000000000000000000000000000 Cote 00100000000000000000000000000000 Munich-based 00100000000000000000000000000000 Mallinckrodt 00100000000000000000000000000000 inspiring 00000000000000000000000000000000 Rhone 00100000001011001010001000110000 reds 00000000000000000000000000000000 Placements 00100000000111101000100100001001 Catch-22 00100000000000000000000000000000 Lately 00100000000011100100010001110010 4.10 00000000000000000000000000000000 grudging 00000000000000000000000000000000 Describing 00100000000111111001101101000000 AIDS-infected 01000000000000000000000000000000 Nagoya 00100000000000000000000000000000 '82 00000000000000000000000000000000 Blancs 00100000000000000000000000000000 Pawtucket 00100000000000000000000000000000 Blanc 00100000000000000000000000000000 buttoned-up 00000000000000000000000000000000 16-year-old 00000000000000000000000000000000 Mesnil 00100000000000000000000000000000 Petrocorp 00100000000000000000000000000000 Mercer 00101111111000000010100010001000 Zealand-based 00100000000000000000000000000000 forestry 00000000000001101011011010110000 deserted 00000000000000101101101001000000 forgive 00000000001010101111001110110010 misadventures 00000000000000000000000000000000 womanizing 00000000000000000000000000000000 lounges 00000000000000000000000000000000 antigen 00000000000000000000000000000000 4.625 00000000000000000000000000000000 vintages 00000000000000000000000000000000 Bordeaux 00100000000111110110101100100001 Seems 00100000000000000001101000110010 three-member 00000000000000000000000000000000 Bette 00100000000000000000000000000000 Kobayashi 00101111110011101000000010001000 Yamaguchi 00100000000000000000000000000000 quarry 00000000000000000000000000000000 static 00000000000011110110011010010000 Tuscany 00100000000000000000000000000000 imitated 00000000000000000000000000000000 workforce 00000000000000000000000000000000 Mitre 00100000000000000000000000000000 Retrovir 00100000000000000000000000000000 drug-industry 00000000000000000000000000000000 Sable 00100000001110001000001010110000 Downgraded 00100000000111101111111001000000 Brunello 00100000000000000000000000000000 Darin 00100000000000000000000000000000 Sventek 00100000000000000000000000000000 appeals-court 00000000000000000000000000000000 Loves 00100000100101100011000000010010 Boots 00100000000111011001110101100011 solace 00000000000000100111110100100111 new-car 00000000000000000000000000000000 Cougar 00100000000000000000000000000000 Kurnit 00100000000000000000000000000000 scanning 00000000000011001010110001000000 cleans 00000000000000000000000000000000 KnowledgeWare 01000000000000000000000000000000 Celtona 00100000000000000000000000000000 absurdity 00000000000000000000000000000000 invasion 00000000000110111100111001100111 romanticized 00000000000000000000000000000000 Gnu-Emacs 01000000000000000000000000000000 5.28 00000000000000000000000000000000 Biondi-Santi 01000000000000000000000000000000 THR 01000000000000000000000000000000 surrogate 00000000000000010101001000110000 Soybeans 00100000000111111111101110110000 covenant 00000000000111101101000010000001 compassion 00000000000111111100110010100111 Yquem 00100000000000000000000000000000 Dirk 00100000000000000000000000000000 Markus 00100000000000000000000000000000 diethylstilbestrol 00000000000000000000000000000000 Whoopee 00100000000000000000000000000000 Makin 00100000000000000000000000000000 rebuff 00000000000000000000000000000000 fuzzy 00000000000001011110011010010000 sickness 00000000000101010111110010100111 Me 00100000000000001001010001110010 bemoaning 00000000000000000000000000000000 overbought 00000000000000000000000000000000 off-base 00000000000000000000000000000000 lucid 00000000000000000000000000000000 conventions 00000000000111000010001000100011 programmatic 00000000000000000000000000000000 throat 00000000000110001100110000000001 508 00000000000000000000000000000000 wisecracks 00000000000000000000000000000000 sweetheart 00000000000000000000000000000000 GERMANS 01000000000000000111000010101000 RALLIED 01000000000011000001000100110010 common-law 00000000000000000000000000000000 thicket 00000000000000000000000000000000 obligatory 00000000000000000000000000000000 astronomer 00000000000000000000000000000000 calves 00000000000000000000000000000000 destabilize 00000000000000000000000000000000 Prime-2 00100000000000000000000000000000 witty 00000000000100011100011010010000 vigil 00000000000011100110111000000001 quips 00000000000111110010011111000010 puns 00000000000000000000000000000000 Stalin 00100000000111011010111101101000 thriller 00000000000000000000000000000000 8.38 00000000000000000000000000000000 rubbish 00000000000000000000000000000000 515 00000000000000000000000000000000 8.62 00000000000000000000000000000000 8.337 00000000000000000000000000000000 females 00000000000101110101011100110011 Pilgrim 00100000000001000000010000001000 Road 00100000000111111011111000000001 inflation-fighting 00000000000000000000000000000000 Kosovo 00100000000000000000000000000000 Bendectin 00100000000000000000000000000000 tort 00000000000001100001000000110000 Caldor 00100000000000000000000000000000 cliff 00000000000010001011111100001000 stiffest 00000000000000000000000000000000 economic-forecasting 00000000000000000000000000000000 deluxe 00000000000000010100110100101000 breathy 00000000000000000000000000000000 foul-mouthed 00000000000000000000000000000000 chemical-weapons 00000000000000000000000000000000 Odyssey 00100000000001011100110000001000 renounce 00000000000000000000000000000000 deserving 00000000000000000000000000000000 U.S.backed 01000000000000000000000000000000 raw-material 00000000000000000000000000000000 JAPANESE 01000000000000000001100100110000 Pensacola 00100000000000000000000000000000 McBee 01001111011000001100000010001000 torched 00000000000000000000000000000000 liners 00000000000111111001111111001001 gratuitous 00000000000000000000000000000000 demo 00000000000000000000000000000000 Surlyn 00100000000000000000000000000000 Acushnet 00100000000000000000000000000000 adapters 00000000000000000000000000000000 counterfeit 00000000000000000000000000000000 consonants 00000000000000000000000000000000 democracies 00000000000000000001111101110011 Cooperation 00100000000111100101111010100111 Burgundies 00100000000000000000000000000000 err 00000000000000000000000000000000 personal-income-tax 00000000000000000000000000000000 transacting 00000000000000000000000000000000 Marico 00100000000000000000000000000000 Zayadi 00100000000000000000000000000000 mid-1992 00000000000000000000000000000000 56.4 00000000000000000000000000000000 marketability 00000000000000000000000000000000 Pestillo 00100000000000000000000000000000 5,200 00000000000000000000000000000000 GREAT 01000000000000000000011000010000 NORTHERN 01000000000000100000110110101000 Automax 00100000000000000000000000000000 OUSTED 01000000000000111010010000110010 0.99 00000000000000000000000000000000 EXECUTIVES 01000000000000000000100010110011 Valdiserri 00100000000000000000000000000000 Castrol 00100000000000000000000000000000 Explonaft 00100000000000000000000000000000 precipitously 00000000000000000000000000000000 assays 00000000000000000000000000000000 5,600 00000000000000000000000000000000 fluids 00000000000000001010110100100011 lowers 00000010101110000011000000010010 chemotherapy 00000000000000000000000000000000 2.36 00000000000000000000000000000000 0.71 00000000000000000000000000000000 estate-freeze 00000000000000000000000000000000 growths 00000000000000000000000000000000 grandchild 00000000000000000000000000000000 Gallo 00100000000000101110000000001000 Paperin 00100000000000000000000000000000 Vauxhall 00100000000000000000000000000000 Weksel 00100000000000000000000000000000 3-for-1 00000000000000000000000000000000 74.6 00000000000000000000000000000000 Jorndt 00100000000000000000000000000000 4.64 00000000000000000000000000000000 Bottlers 00100000000111111101010000110011 Conoco 00100000000111110011111100101000 Interface 00100000000111101100010110111001 Arbor 00101111111101010000101010001000 orchards 00000000000000000000000000000000 polymers 00000000001010110011111010110000 Bixby 00100000000000000000000000000000 superpremiums 00000000000000000000000000000000 Landini 00100000000000000000000000000000 25.3 00000000000000000000000000000000 Vinken 00100000000000000000000000000000 O'Meara 01000000000000000000000000000000 122.7 00000000000000000000000000000000 Galleria 00100000000000000000000000000000 pronunciation 00000000000000000000000000000000 Dasher 00100000000000000000000000000000 Dylan 00100000000000000000000000000000 oranges 00000000000111011010111001100011 Nokia 00100000000000000000000000000000 Vineyard 00100000000100110110111000000001 dynamism 00000000000000000000000000000000 state-sector 00000000000000000000000000000000 Samara 00100000000000000000000000000000 99.5 00000000000000000000000000000000 born-to-shop 00000000000000000000000000000000 Settlements 00100000000111000000010000100111 Bio-Technology 01000000000000000000000000000000 97.9 00000000000000000000000000000000 Townsend 00100000000000000000000000000000 common-sense 00000000000000000000000000000000 wine-making 00000000000000000000000000000000 Headed 00100000000111101111010000110010 Droll 00100000000000000000000000000000 sergeant 00000000000000000000000000000000 Shoupe 00100000000000000000000000000000 Kyodo 00100000000000000000000000000000 headquarter 00000000000000000000000000000000 bytes 00000000000000000000000000000000 suffix 00000000000000000000000000000000 Shepherd 00101111111100001110100010001000 Ostpolitik 00100000000000000000000000000000 item-veto 00000000000000000000000000000000 Corby 00100000000000000000000000000000 1945 00000000000000000000000000000000 detects 00000000000000000000000000000000 roamed 00000000000000000000000000000000 non-disabled 00000000000000000000000000000000 Schoenfeld 00100000000000000000000000000000 Karstadt 00100000000000000000000000000000 Cask 00100000000000000000000000000000 62.1 00000000000000000000000000000000 14.50 00000000000000000000000000000000 dissolution 00000000000111101001101101001111 swimmer 00000000000000000000000000000000 Etess 00100000000000000000000000000000 Gorski 00100000000000000000000000000000 wood-chip 00000000000000000000000000000000 191.9 00000000000000000000000000000000 Hedding 00100000000000000000000000000000 OCN-PPL 01000000000000000000000000000000 dealer-manager 00000000000000000000000000000000 Textile 00100000000010111011011010110000 59.5 00000000000000000000000000000000 Pawley 00100000000000000000000000000000 thrall 00000000000000000000000000000000 Tauke 00100000000000000000000000000000 drift-net 00000000000000000000000000000000 instincts 00000000000111010011111101100011 Viewmaster 00100000000000000000000000000000 soak 00000000000000000000000000000000 cut-and-paste 00000000000000000000000000000000 proprietor 00000000000000000000000000000000 Sochaux 00100000000000000000000000000000 crediting 00000000000000000000000000000000 Winiarski 00100000000000000000000000000000 8.875 00000000000000000000000000000000 omits 00000000000000000000000000000000 strand 00000000000000000000000000000000 Metallgesellschaft 00100000000000000000000000000000 whittled 00000000000000000000000000000000 private-banking 00000000000000000000000000000000 Davison 00101111111000100100001000001000 consciously 00000000000000000000000000000000 Maurer 00100000000000000000000000000000 disconnect 00000000000000000000000000000000 Shores 00100000000100111100111101100011 asset-management 00000000000000000000000000000000 astonished 00000000000000000000000000000000 N.J.-based 01000000000000000000000000000000 Fife 00100000000000000000000000000000 welcomes 00000001010011100011000000010010 26.6 00000000000000000000000000000000 Cents 00100000000000000000000010001011 Siewert 00100000000000000000000000000000 Machine-tool 00100000000000000000000000000000 possesses 00000000000000000000000000000000 unseemly 00000000000000000000000000000000 L.H. 01000000000000000000000000000000 Paragould 00100000000000000000000000000000 migration 00000000000011110110011010100111 Messenger 00100000000101100101111000000001 hasten 00000000001010100110111110110010 epitomizes 00000000000000000000000000000000 Poorer 00100000000010010100001111000000 Wonham 00100000000000000000000000000000 funds-service 00000000000000000000000000000000 Drahuschak 00101111111100001010001010001000 snapping 00000000000110011110100001000000 Lenin 00100000000000001111100000100001 Stoltenberg 00101111111000000000001010001000 Plaskett 00101111111100011110110010001000 McNealy 01000000000000000000000000000000 Oneita 00100000000000000000000000000000 22nd 00000000000000000000000000000000 undercover 00000000000000100100010100110000 prospectively 00000000000000000000000000000000 artifact 00000000000000000000000000000000 turbans 00000000000000000000000000000000 Muller 00100000000000000000000000000000 afternoons 00000000000000000000100000010111 Fosback 00100000000000000000000000000000 Grease 00100000000100100011101100100001 Augusta 00100000000110000101101001101000 quadrupling 00000000000000000000000000000000 NHTSA 01000000000000000000000000000000 forked 00000000000000000000000000000000 steel-related 00000000000000000000000000000000 senate 00000000000000000010101110100101 penalizing 00000000000000000000000000000000 street-corner 00000000000000000000000000000000 Recording 00100000000000000010110001000000 1.84 00000000000000000000000000000000 sweater 00000000000000000000000000000000 fracas 00000000000000000000000000000000 543 00000000000000000000000000000000 climatic 00000000000000000000000000000000 Soros 00101111111000100000001010001000 907 00000000000000000000000000000000 federal-funds 00000000000000000000000000000000 Bulletin 00100000000000000100000000110111 2759.84 00000000000000000000000000000000 mustard 00000000000000000000000000000000 fenugreek 00000000000000000000000000000000 U.S.-China 01000000000000000000000000000000 13.52 00000000000000000000000000000000 carryover 00000000000000000000000000000000 innocents 00000000000000000000000000000000 sketch 00000000000000000000000000000000 Player 00100000000111101111111010110101 herb 00000000000001101001111100001000 month-earlier 00000000000000000000000000000000 Jiang 00100000000000000000000000000000 Dairy 00100000000011100100011010110000 laxative 00000000000000000000000000000000 Endara 00100000000000000000000000000000 distortions 00000000000110111111111010100111 Valuable 00100000000000000000010010010000 Turnaround 00100000000110111101101010100111 meaningfully 00000000000000000000000000000000 eyebrow 00000000000000000000000000000000 DeVries 01000000000000000000000000000000 provisioning 00000000000000000000000000000000 rowdiness 00000000000000000000000000000000 advantageous 00000000000011100111011110010000 two-story 00000000000000000000000000000000 hemorrhoids 00000000000000000000000000000000 tolerant 00000000000100111111110000110010 joints 00000000000111011011101001100011 harboring 00000000000000000000000000000000 diminutive 00000000000000000000000000000000 crack-ridden 00000000000000000000000000000000 swipe 00000000000000000000000000000000 allusions 00000000000111100011011100100111 Knoll 00100000000110100101010100101000 Amerongen 00101111111001000101010100100001 husk 00000000000000000000000000000000 Measures 00100000000111101111001000100011 10.24 00000000000000000000000000000000 98.84 00000000000000000000000000000000 Multilateral 00100000000111110010000000110000 nondescript 00000000000000000000000000000000 Thousand 00100000000000000010000001010000 2006-2009 00000000000000000000000000000000 wed 00000000000000000000000000000000 injections 00000000000000000000000000000000 cholesterol-lowering 00000000000000000000000000000000 EPO-treated 01000000000000000000000000000000 8.312 00000000000000000000000000000000 TAX 01000000000000000000000001110001 99.875 00000000000000000000000000000000 8.474 00000000000000000000000000000000 inducement 00000000000000000000000000000000 rearranging 00000000000000000000000000000000 perverted 00000000000000000000000000000000 sawdust 00000000000000000000000000000000 bumper 00000000000100110000001000110000 multilevel 00000000000000000000000000000000 Sooraji 00100000000000000000000000000000 Administrative 00100000000000001001000000110000 26-year-old 00000000000000000000000000000000 Ovalle 00100000000000000000000000000000 ruined 00000000001111011101101001000000 Promotion 00100000000111101111001001100001 litigious 00000000000000000000000000000000 inspecting 00000000000000000000000000000000 tax-deductible 00000000000000000000000000000000 Compulsions 00100000000000000000000000000000 roaring 00000000000001000111100000010000 bootleg 00000000000000000000000000000000 overspending 00000000000111000010100000111001 orange-juice 00000000000000000000000000000000 marketeers 00000000000011110111100010110011 outbreaks 00000000000000000000000000000000 health-care-services 00000000000000000000000000000000 infusion-therapy 00000000000000000000000000000000 operating-room 00000000000000000000000000000000 detaining 00000000000000000000000000000000 fennel 00000000000000000000000000000000 cumin 00000000000000000000000000000000 castor-oil 00000000000000000000000000000000 Cano 00100000000000000000000000000000 4.39 00000000000000000000000000000000 gorgeous 00000000000000000000000000000000 neutralized 00000000011010000001110000110010 Camille 00100000000000000000000000000000 nods 00000000000000000000000000000000 assent 00000000000000000000000000000000 Kellwood 00100000000000000000000000000000 lyricist 00000000000000000000000000000000 Repligen 00100000000000000000000000000000 confusions 00000000000000000000000000000000 aluminum-hulled 00000000000000000000000000000000 adage 00000000000000000000000000000000 75th 00000000000000000000000000000000 employee-health 00000000000000000000000000000000 Horowitz 00101111111001101111000010001000 Edmond 00100000000000000000000000000000 Matlock 00100000000000000000000000000000 Wonder 00100000000111001011100110110010 ex 00000000000011100110101100100001 MPD 01000000000000000000000000000000 1935 00000000000000000000000000000000 N.D 01000000000000000000000000000000 healthiest 00000000000111111011010011010000 Kchessinska 00100000000000000000000000000000 choreographer 00000000000110101111011110110101 backwater 00000000000000000000000000000000 Rosemary 00100000000000000000000000000000 inheritor 00000000000000000000000000000000 Nakhamkin 00101111111100111110110010001000 divesting 00000000000000000000000000000000 Petrograd 00100000000000000000000000000000 overweight 00000000000000000000000000000000 clutch 00000000000000000000000000000000 ASDA 01000000000000000000000000000000 sterilized 00000000000011101011000110010000 144.57 00000000000000000000000000000000 dispelled 00000000000000000000000000000000 1.9166 00000000000000000000000000000000 MacDowell 01000000000000000000000000000000 Curtain 00100000000000011001110100100001 12.98 00000000000000000000000000000000 smuggler 00000000000000000000000000000000 scourge 00000000000000000000000000000000 fraternity 00000000000111010110010100000001 Dorsch 00100000000000000000000000000000 HIAA 01000000000000000000000000000000 debasement 00000000000000000000000000000000 lethargic 00000000000101011010011100010000 RBC 01000000000000000000000000000000 depresses 00000000110010110001000000010010 Leinonen 00100000000000000000000000000000 proffered 00000000000000000000000000000000 140.74 00000000000000000000000000000000 / 00000000000000001000010001000010 Fiberglas 00100000000110001011000001001000 diligence 00000000000011100100011110100001 Junius 00100000000000000000000000000000 fluctuated 00000000001010111010110000110010 42.875 00000000000000000000000000000000 Duane 00100000000000000000000000000000 Manfred 00100000000000000000000000000000 Siberia 00100000000111100001011101101000 fondly 00000000000000000000000000000000 481,000 00000000000000000000000000000000 1,012 00000000000000000000000000000000 Celebrity 00100000000111010100000001000111 coughed 00000000000000000000000000000000 one-megabit 00000000000000000000000000000000 Physician 00100000000101001101011110110101 Nicastro 00100000000000000000000000000000 KV 01000000000000000000000000000000 Messelt 00100000000000000000000000000000 613 00000000000000000000000000000000 inherits 00000000000000000000000000000000 Primarily 00100000001100001011000001110010 Mazza 00100000000000000000000000000000 Berens 00100000000000000000000000000000 Groups 00100000000000000000000100100011 disintegration 00000000000000000000000000000000 Despair 00100000000111100010111010100111 W.I. 01000000000000000000000000000000 Goes 00100000000000100100001000110010 cheek 00000000000110100110000000001000 Filene 00100000000000000000000000000000 Hinman 00100000000000000000000000000000 MBA 01000000000000000000000000000000 window-shopping 00000000000000000000000000000000 fluoropolymers 00000000000000000000000000000000 bedevil 00000000000000000000000000000000 Refsnes 00100000000000000000000000000000 Raucher 00100000000000000000000000000000 Rieke 00100000000000000000000000000000 Pedro 00101111111000000011111000011000 goddess 00000000000101100110111000000001 liberties 00000000000000001100000100100111 post-1997 00000000000000000000000000000000 light-truck 00000000000000000000000000000000 dogma 00000000000000000000000000000000 Cullen 00100000000000000000000000000000 Outflows 00100000000111111101010000000011 rollover 00000000000000000011101101001111 Naomi 00100000000000000000000000000000 squalid 00000000000000000000000000000000 Danforth 00101111111110011100111010001000 runup 00000000000000000000000000000000 Lead 00100000000111111101110110110010 cleansed 00000000000000000000000000000000 Magarity 00100000000000000000000000000000 Felten 00100000000000000000000000000000 constrain 00000000000000000000000000000000 optimists 00000000000000000000000000000000 hum 00000000000000000000000000000000 pessimists 00000000000010001010000010110011 Ostroff 00100000000000000000000000000000 Microamerica 00100000000000000000000000000000 Aran 00100000000000000000000000000000 wallowing 00000000000000000000000000000000 multimedia 00000000000000000000000000000000 respectful 00000000000000000000000000000000 SuperDot 01000000000000011111101011100001 anyplace 00000000000000000000000000000000 swapped 00000000000000010000010000110010 Jung 00101111111000101001110010110101 enlisting 00000000000000000000000000000000 disingenuous 00000000000000000000000000000000 stampeded 00000000000000000000000000000000 defensible 00000000000000000000000000000000 rapport 00000000000000000000000000000000 U.S.-South 01000000000000000000000000000000 lions 00000000000000000000000000000000 unending 00000000000000000000000000000000 quintessential 00000000000000000000000000000000 swayed 00000000001110000001110000110010 repressive 00000000000101100101000010010000 Lusaka 00100000000000000000000000000000 85.1 00000000000000000000000000000000 Sizwe 00100000000000000000000000000000 equip 00000000000010001110001110110010 Bowing 00100000001101111010111000110010 succumbed 00000000000110010111101000110010 16.40 00000000000000000000000000000000 100%-owned 00000000000000000000000000000000 disappointingly 00000000000000000000000000000000 Valenti 00100000000000000000000000000000 Grauer 00100000000000000000000000000000 S&P-500 01000000000000000000000000000000 Atwell 00100000000000000000000000000000 Founders 00100000000111001110101010110011 mega-hit 00000000000000000000000000000000 re-exports 00000000000000000000000000000000 stabilization 00000000000000001101101010100111 Shing 00100000001110011000010000110000 materializes 00000000000000000000000000000000 Ting 00100000000000000000000000000000 zealous 00000000000000000000000000000000 Organisation 00100000000000000000000000000000 Goldston 00100000000000000000000000000000 Gifford 00100000000000000000000000000000 Kysor 00100000000000000000000000000000 defecting 00000000000000000000000000000000 sensationalism 00000000000000000000000000000000 Heat 00100000000111110000110110110111 Panet-Raymond 01000000000000000000000000000000 skyline 00000000000000000000000000000000 Rollins 00101111111100001101001000001000 Sin 00100000000110110000000001000111 Hilger 00100000000000000000000000000000 catches 00000000110110000011000000010010 entrench 00000000001100100011111110110010 Lebo 00100000000000000000000000000000 signified 00000000000000000000000000000000 Gaines 00101111111101111101001000001000 Manzanec 00100000000000000000000000000000 synthesizer 00000000000000000000000000000000 Ozarks 00100000000000000000000000000000 620 00000000000000000000000000000000 netting 00000000000000000000000000000000 3.15 00000000000000000000000000000000 Bridgeport 00100000000101100111101001101000 McLoughlin 01000000000000000000000000000000 wiry 00000000000000000000000000000000 ruminated 00000000000000000000000000000000 777 00000000000000000000000000000000 cpu 00000000000000000000000000000000 Southerners 00100000000000100001111000110011 Magurno 00100000000000000000000000000000 Killory 00100000000000000000000000000000 unflattering 00000000000000000000000000000000 Fishman 00100000000000000000000000000000 gratuitously 00000000000000000000000000000000 Kummerfeld 00100000000000000000000000000000 mom-and-pop 00000000000000000000000000000000 Equal 00100000000001100000111000110010 bottled-water 00000000000000000000000000000000 citywide 00000000000000000000000000000000 benighted 00000000000000000000000000000000 farm-product 00000000000000000000000000000000 backward 00000000000000001011111100110010 fisheries 00000000000111000110010010110000 teen-ager 00000000000000000000000000000000 trade-distorting 00000000000000000000000000000000 defiantly 00000000000000000000000000000000 Blake 00100000000000000000000000000000 Packer 00101111111110101001000010001000 cold-storage 00000000000000000000000000000000 Twiggy 00100000000000000000000000000000 billion-a-year 00000000000000000000000000000000 60-year-old 00000000000000000000000000000000 Rashid 00100000000000000000000000000000 razor 00000000000101001000001010110000 observation 00000000000111101011111001100111 puritanical 00000000000000000000000000000000 viciously 00000000000000000000000000000000 patronizing 00000000000000000000000000000000 9.28 00000000000000000000000000000000 Carleton 00100000000000000000000000000000 Add 00100000000111110011001110110010 Unlimited 00100000000001000010010100010000 paranoid 00000000000000000000000000000000 food-importing 00000000000000000000000000000000 Atwood 00101111111000111100001000001000 self-sufficient 00000000000000000000000000000000 Investcorp 00100000000000000000000000000000 premium-priced 00000000000000000000000000000000 non-tariff 00000000000000000000000000000000 unforeseen 00000000000001001110010100010000 Cyber 00100000000000000000000000000000 prototypes 00000000000000000111000100101111 clumsy 00000000000000111110011010010000 Nika 00100000000000000000000000000000 980 00000000000000000000000000000000 hates 00000000000000000000000000000000 LJN 01000000000000000000000000000000 Louise 00101111111000100010111000011000 FRANKLIN 01001111111001101100110100101000 Dubnow 00100000000000000000000000000000 Didion 00100000000000000000000000000000 divested 00000000001110100100010000110010 Scientology 00100000000000000000000000000000 panics 00000001111101001111000000010010 1901 00000000000000000000000000000000 consultations 00000000000111110011010000100111 laches 00000000000000000000000000000000 non-answer 00000000000000000000000000000000 overt 00000000000000111000110100010000 Paid 00100000000011000000010000110010 paranoia 00000000000000000000000000000000 caricatures 00000000000000000000000000000000 aforementioned 00000000000000000000000000000000 Michele 00100000000000000000000000000000 traits 00000000000111111111001010100011 persuasively 00000000000000000000000000000000 dues 00000000000111001011000100000011 Nunn-McCurdy 01000000000000000000000000000000 lingers 00000000000000000000000000000000 faked 00000000000000000000000000000000 Szanton 00100000000000000000000000000000 magistrates 00000000000000001000101100100101 DLC 01000000000000000000000000000000 182 00000000000000000000000000000000 Sleep 00100000000111101110100010110111 stranded 00000000011001110100010000110010 3,600 00000000000000000000000000000000 infecting 00000000000000000000000000000000 erratically 00000000000000000000000000000000 70-a-share 00000000000000000000000000000000 factual 00000000001000011010000000110000 Decisions 00100000000111100111101000100011 utopian 00000000000000000000000000000000 investor-relations 00000000000000000000000000000000 Deak 00100000000000000000000000000000 143.6 00000000000000000000000000000000 Huntz 00100000000000000000000000000000 Carry 00100000000111100110101110110010 Taffner 00100000000000000000000000000000 class-conscious 00000000000000000000000000000000 non-interest 00000000000000000000000000000000 month-old 00000000000000000000000000000000 reliever 00000000000000000000000000000000 averted 00000111110111010100010000110010 single-B-minus 01000000000000000000000000000000 Horicon 00100000000000000000000000000000 psychologists 00000000000010101010000010110011 518 00000000000000000000000000000000 sociologists 00000000000000000000000000000000 Archives 00100000000000110111101001100111 brown 00001111111100101111011000001000 Declan 00100000000000000000000000000000 defamatory 00000000000000000000000000000000 Clarence 00101111111000001110010110011000 fabricated 00000000001100010001101001000000 implementation 00000000000111111011111101001111 Alarcon 00100000000000000000000000000000 mock 00000000000001110001000000010000 maverick 00000000000100100101000010010000 Topper 00100000000000000000000000000000 fabrications 00000000000000000000000000000000 semester 00000000000111111100011000010111 eloquent 00000000000100000100110100010000 craving 00000000000111111000011100111001 Chimerine 00101111111111000010110010001000 Zarnowitz 00100000000000000000000000000000 concomitant 00000000000000000000000000000000 Largely 00100000000111001011000001110010 listless 00000000000000000000000000000000 Cyclone 00100000000000000000000000000000 fault-tolerant 00000000000000000000000000000000 gigolo 00000000000000000000000000000000 460 00000000000000000000000000000000 Mohawk 00101111111000111000000001001000 Niagara 00101111111111010000101101110000 crucible 00000000000000000000000000000000 68.8 00000000000000000000000000000000 moxie 00000000000000000000000000000000 ASSOCIATES 01000000000111101111101011101001 juror 00000000000000000000000000000000 dynamite 00000000000000000000000000000000 Litvinchuk 00100000000000000000000000000000 near-perfect 00000000000000000000000000000000 nonferrous 00001111111101110111111110110000 sacred 00000000000000001111000010010000 Zoeller 00100000000000000000000000000000 tolls 00000000000000000000000000000000 49.1 00000000000000000000000000000000 rationally 00000000000000000000000000000000 Dynabook 00100000000000000000000000000000 standard-bearer 00000000000000000000000000000000 Pulitzer 00100000000001001101011000010000 Ginsberg 00100000000000000000000000000000 eschewed 00000000000000000000000000000000 Very 00100000000000000100000001110010 Milgrim 00100000000000000000000000000000 sniping 00000000000000000000000000000000 Scopes 00100000000000000000000000000000 gram 00000000000000000000000000000000 Departing 00100000000000011110101001000000 world-famous 00000000000000000000000000000000 coat 00000000000011100100011000000001 palmtops 00000000000000000000000000000000 notepad 00000000000000000000000000000000 Mencken 00100000000101001011000001001000 fundamentalists 00000000000010011110100000110011 Antori 00100000000000000000000000000000 Hiss 00100000001100101111111010001000 Alger 00100000000000000000000000000000 Crump 00100000000000000000000000000000 banal 00000000000000000000000000000000 whereabouts 00000000000000000000000000000000 Two-year 00100000000000000000000000000000 wardrobe 00000000000000000000000000000000 pored 00000000000000000000000000000000 milligram 00000000000000000000000000000000 trapping 00000000000000000000000000000000 Intertech 00100000000000000000000000000000 small-investor 00000000000000000000000000000000 Tarantino 00100000000000000000000000000000 0.59 00000000000000000000000000000000 clarinet 00000000000000000000000000000000 orchard 00000000000000000000000000000000 extinct 00000000000000000000000000000000 Kolb 00101111110000111000000010001000 justifiable 00000000000000000000000000000000 acquit 00000000000000000000000000000000 uneducated 00000000000000000000000000000000 strides 00000000000110111111001000100011 working-class 00000000000000000000000000000000 methodologies 00000000000000000000000000000000 dressing 00000000000010000010110001000000 embezzlement 00000000000111011011100010100111 escalators 00000000000000000000000000000000 sleaze 00000000000000000000000000000000 insecure 00000000000000000000000000000000 15.82 00000000000000000000000000000000 bashing 00000000000110100010110001000000 sportswear 00000000000011110011111010110000 244,000 00000000000000000000000000000000 fabrics 00000000000000000011011111001001 Galbraith 00101111111101001001000010001000 inversely 00000000000000000000000000000000 ticks 00000000000000000000000000000000 O'Hare 01000000000111010110010000101000 239 00000000000000000000000000000000 2,250,000 00000000000000000000000000000000 CRRES 01000000000000000000000000000000 25.25 00000000000000000000000000000000 Styrofoam 00100000000000000000000000000000 Reasoner 00100000000000000000000000000000 Rent-A-Car 01000000000000000000000000000000 ozone-depleting 00000000000000000000000000000000 regretted 00000000000000000000000000000000 Denton 00100000000000000000000000000000 airway 00000000000000000000000000000000 Hodson 00100000000000000000000000000000 Corroon 00100000000000000000000000000000 fringe 00000000000000011010001011100001 adjusts 00000000000000000000000000000000 349 00000000000000000000000000000000 2-to-1 00000000000000000000000000000000 Palisades 00100000000000000000000000000000 Nemeth 00100000000000000000000000000000 Mottram 00100000000000000000000000000000 30-a-share 00000000000000000000000000000000 Basel 00100000000101100011111001101000 nine-year 00000000000000000000000000000000 Fax 00100000001000011000001010110000 bioresearch 00000000000000000000000000000000 Lyon 00101111111111110000010000001000 Require 00100000000111010001101110110010 Mineola 00100000000000000000000000000000 Changing 00100000000011100101010001000000 compels 00000000000000000000000000000000 franchising 00000000000001110000101100100001 revenue-losing 00000000000000000000000000000000 logically 00000000000000000000000000000000 interestrate 00000000000000000000000000000000 inventions 00000000000101111111110101100011 154,240,000 00000000000000000000000000000000 Centerior 00100000000011001001000100101000 Maddie 00100000000000000000000000000000 custom-tailored 00000000000000000000000000000000 wielded 00000000000000000000000000000000 Delco 00100000000000000000000000000000 low-rate 00000000000000000000000000000000 mocking 00000000000000000000000000000000 486.6 00000000000000000000000000000000 uncritically 00000000000000000000000000000000 haole 00000000000000000000000000000000 FAX 01000000001000011000001010110000 slime 00000000000000000000000000000000 widowed 00000000000000000000000000000000 Mainland 00100000000110100010101000110000 Goldstein 00101111111111110000100010001000 Kempinski 00100000000000000000000000000000 151.20 00000000000000000000000000000000 Clancy 00101111111100110010101010001000 Elderly 00100000000111110110101000110000 second-tier 00000000000000000000000000000000 H-P 01000000000000000000000000000000 Crabs 00100000000000000000000000000000 surface-to-air 00000000000000000000000000000000 2011 00000000000000000000000000000000 non-GM 01000000000000000000000000000000 Aerospace-Thomson 01000000000000000000000000000000 Trivelpiece 00100000000000000000000000000000 guided-missile 00000000000000000000000000000000 Kangaroo 00100000000000000000000000000000 bane 00000000000101110111011000001111 discloses 00000001011011100011000000010010 36.125 00000000000000000000000000000000 Chamberlain 00101111111111100110000000001000 Kalmus 00100000000000000000000000000000 Fantastico 00100000000000000000000000000000 casings 00000000000000000000000000000000 Dass 00100000000000000000000000000000 Wetten 00100000000000000000000000000000 contestant 00000000000000000000000000000000 bottom-line 00000000000000000000000000000000 Ostrager 00100000000000000000000000000000 origination 00000000000000011000010010110000 skillful 00000000000011100111000010010000 escalating 00000000000010011101010001000000 evacuate 00000000000000000000000000000000 inappropriately 00000000000000000000000000000000 trademarks 00000000000101001100111001100011 Thygerson 00100000000000000000000000000000 market-monitoring 00000000000000000000000000000000 CoreStates 01000000000111111111000100101000 Horizons 00100000000000001011011011101001 underlined 00000000000000000000000000000000 layout 00000000000000000000000000000000 Triland 00100000000000000000000000000000 interviewer 00000000000111110101101000100111 Culver 00100000000001011000011010101000 Heron 00100000000000000000000000000000 Nagymaros 00100000000000000000000000000000 logos 00000000000111011110101010110011 depiction 00000000000000000000000000000000 exclusions 00000000000000000000000000000000 12.09 00000000000000000000000000000000 disloyal 00000000000000000000000000000000 heftier 00000000000000000000000000000000 Gressette 00100000000000000000000000000000 straighten 00000000000000000000000000000000 thrift-bailout 00000000000000000000000000000000 entertained 00000000000000000000000000000000 voir 00000000000000000000000000000000 Haworth 00100000000000000000000000000000 Arcadian 00100000000000000000000000000000 landings 00000000000110111101111001100011 Mosettig 00100000000000000000000000000000 Voronezh 00100000000000000000000000000000 Dog 00100000000111100000010000000001 132,000 00000000000000000000000000000000 Quill 00100000000000000000000000000000 Morrow 00101111111111111100111000001000 Stunned 00100000001011001101110000110010 bible 00000000000111100110011000000001 embarking 00000000000000000000000000000000 beam 00000000000110100011000110110111 lavishly 00000000000000000000000000000000 advanced-technology 00000000000000000000000000000000 86.4 00000000000000000000000000000000 global-news 00000000000000000000000000000000 34-year-old 00000000000000000000000000000000 devotes 00000000000000000000000000000000 yanking 00000000000000000000000000000000 realestate 00000000000000000000000000000000 Crier 00100000000000000000000000000000 Welcome 00100000001111100101110110110010 news-weeklies 00000000000000000000000000000000 Eichler 00100000000000000000000000000000 happier 00000000000011101001001111000000 wardens 00000000000000001100000000110011 93,000 00000000000000000000000000000000 transporter 00000000000000000000000000000000 fusillade 00000000000000000000000000000000 outdone 00000000000000000000000000000000 keyless 00000000000000000000000000000000 chore 00000000000000000000000000000000 foresaw 00000000000000000000000000000000 Freon 00100000000000000000000000000000 Designing 00100000000101001111111101000000 registering 00000000000100100001111101000000 dissenting 00000000001000001000101000110000 morbidity 00000000000000000000000000000000 840.8 00000000000000000000000000000000 therein 00000000001001101101000001110010 ammo 00000000000000000000000000000000 pillows 00000000000000000000000000000000 256.6 00000000000000000000000000000000 EBPI 01000000000000000000000000000000 proclaiming 00000000000000000000000000000000 COB 01000000000000000000000000000000 freezers 00000000000000000000000000000000 34th 00000000000000000000000000000000 confuses 00000000000000000000000000000000 Consolo 00100000000000000000000000000000 behemoths 00000000000000000000000000000000 legions 00000000000111110010111000101111 strolling 00000000000101001101100001000000 unperturbed 00000000000000000000000000000000 cramped 00000000000011010001000010010000 extensively 00000001101000010000010001110010 23.2 00000000000000000000000000000000 excised 00000000000000000000000000000000 loving 00000000000101011000101000110000 interfering 00000000000110010101100000110010 owing 00000000001000101010111000110010 Body 00100000000111100110101001100111 ornate 00000000000000000000000000000000 center-right 00000000000000000000000000000000 anchors 00000000000000000000000000000000 repealed 00000101110111010100010000110010 AnaMor 01000000000000000000000000000000 indistinguishable 00000000000000000000000000000000 Whitley 00100000000000000000000000000000 biggest-selling 00000000000000000000000000000000 nontoxic 00000000000000000000000000000000 317 00000000000000000000000000000000 five-cylinder 00000000000000000000000000000000 585,000 00000000000000000000000000000000 nonfiction 00000000000000000000000000000000 mid-sized 00000000000000000000000000000000 compressors 00000000000000000000000000000000 cramming 00000000000000000000000000000000 Camaro-Firebird 01000000000000000000000000000000 Yokich 00100000000000000000000000000000 news-weekly 00000000000000000000000000000000 Curley 00100000000000000000000000000000 agility 00000000000000000000000000000000 Atorino 00100000000000000000000000000000 Lorain 00100000000000000000000000000000 non-biodegradable 00000000000000000000000000000000 classified-ad 00000000000000000000000000000000 nursed 00000000000000000000000000000000 mailings 00000000000010000101110101100011 -all 00000000000000000000000000000000 AMVISC 01000000000000000000000000000000 second-consecutive 00000000000000000000000000000000 Hollingsworth 00100000000000000000000000000000 Malson 00100000000000000000000000000000 PCS 01000000000000000000000000000000 Cola 00100000000000010011100100100001 6.55 00000000000000000000000000000000 parental-leave 00000000000000000000000000000000 bulk-chemical 00000000000000000000000000000000 topsoil 00000000000000000000000000000000 Conrad 00101111111001010101010100001000 melting 00000000000000000000000000000000 thinnest 00000000000000000000000000000000 avalanche 00000000000110110100111001100111 Cement 00100000000001010100011010110000 Fellow 00100000000001010000101000110000 Northview 00100000000000000000000000000000 Vagabond 00100000000000000000000000000000 Leigh 00100000000010010001000100001000 Francesco 00100000000000000000000000000000 vests 00000000000000000000000000000000 Twaron 00100000000000000000000000000000 Dumbo 00100000000000000000000000000000 Sulka 00100000000000000000000000000000 chastised 00000000001101101101010000110010 Vose 00100000000000000000000000000000 litle 00000000000000000000000000000000 steel-quota 00000000000000000000000000000000 unsubsidized 00000000000000000000000000000000 steel-import 00000000000000000000000000000000 upcoming 00000000000001010000010011010000 Heitman 00100000000000000000000000000000 sacking 00000000000000000000000000000000 Gaithersburg 00100000000000000000000000000000 Stram 00100000000000000000000000000000 wholesome 00000000000000000000000000000000 Martinair 00100000000000000000000000000000 Combo 00100000000000000000000000000000 751 00000000000000000000000000000000 snowball 00000000000000001001001010110111 square-foot 00000000000000000000000000000000 Souper 00100000000000000000000000000000 ire 00000000000110111111011000001111 globalists 00000000000000000000000000000000 twin-deficit 00000000000000000000000000000000 Mall 00100000000111101100100000100001 ado 00000000000000000000000000000000 subversion 00000000000000000000000000000000 chrysotile 00000000000000000000000000000000 consternation 00000000000000000000000000000000 M-Whatever 01000000000000000000000000000000 2:07 00000000000000000000000000000000 INSURANCE 01000000000000000000010010110000 ARBITRAGE 01000000000000000000111010100001 frugality 00000000000000000000000000000000 distaste 00000000000000000000000000000000 correspondingly 00000000000000000000000000000000 Rito 00100000000000000000000000000000 bounds 00000000000111110001111101100011 mainland 00000000000110100010101000110000 37th 00000000000000000000000000000000 Fio 00100000000000000000000000000000 stirs 00000101101110000011000000010010 1.5523 00000000000000000000000000000000 pre-register 00000000000000000000000000000000 711 00000000000000000000000000000000 Yankees 00100000000111100100101010100101 pre-registered 00000000000000000000000000000000 sympathies 00000000000000000000000000000000 chides 00000000000000000000000000000000 resuscitate 00000000000000000000000000000000 Spence 00101111010000101100000010001000 chastened 00000000000000000000000000000000 Wolcott 00100000000000000000000000000000 SMALL 01000000000000001001010000010000 sympathize 00000000000000001001010110110010 Avmark 00100000000000000000000000000000 half-life 00000000000000000000000000000000 DC10-30 01000000000000000000000000000000 767-300ER 01000000000000000000000000000000 Polyconomics 00100000000111110001101000101000 unrecognized 00000000000000000000000000000000 expansionary 00000000000100100100110100010000 TALK 01000000000111111111000101010111 320-200 00000000000000000000000000000000 autobiography 00000000000111110111111001100111 Padovan 00100000000000000000000000000000 Immediately 00100000000000110000010001110010 Pimlott 00100000000000000000000000000000 afflicts 00000000000000000000000000000000 restroom 00000000000000000000000000000000 Johnstone 00100000000000000000000000000000 supersonic 00000000000000000000000000000000 BMI 01000000000000000000000000000000 stacks 00000000000111100111000100101111 10%-12 00000000000000000000000000000000 Tudor 00100000000000000000000000000000 Palestine 00100000000111110010001000110000 preaching 00000000000111100101110101000000 subways 00000000000000000000000000000000 offender 00000000000010000011111001100111 deem 00000000000000000000000000000000 Yasser 00100000000000000000000000000000 Farnham 00100000000000000000000000000000 21.50 00000000000000000000000000000000 politicking 00000000000000000000000000000000 Dumpster 00100000000000000000000000000000 new-business 00000000000000000000000000000000 better-than-average 00000000000000000000000000000000 2:54 00000000000000000000000000000000 continuity 00000000000100110111111010100111 conquer 00000000000000000000000000000000 workaholic 00000000000000000000000000000000 overheating 00000000000110111111010001000000 bending 00000000000110010011100001000000 sickening 00000000000000000000000000000000 costumed 00000000000000000000000000000000 Martens 00100000000000000000000000000000 Wealth 00100000000111101101110010100111 Hanao 00100000000000000000000000000000 back-ups 00000000000000000000000000000000 outgoing 00000000000000010100101001110000 HMS 01000000000000000000000000000000 jest 00000000000000000000000000000000 ecstatic 00000000000000000000000000000000 gloomier 00000000000000000000000000000000 vindicated 00000000010011100001110000110010 stranding 00000000000000000000000000000000 brouhaha 00000000000100011010111010100111 Strikes 00100000000111100111001000100011 Petaluma 00100000000000000000000000000000 explanatory 00000000000000000000000000000000 Lyndon 00101111111011001100010000101000 backyard 00000000000000000000000000000000 objecting 00000000000000000000000000000000 scoop 00000000101110010110010110110010 Zhong 00100000000000000000000000000000 9.58 00000000000000000000000000000000 1.59 00000000000000000000000000000000 Shu 00100000000000000000000000000000 43.1 00000000000000000000000000000000 description 00000000000111101010100101100111 anathema 00000000000111111011011000110010 two-room 00000000000000000000000000000000 I.C.H. 01000000000000000000000000000000 188.2 00000000000000000000000000000000 crabs 00000000000000000000000000000000 833.6 00000000000000000000000000000000 slam 00000000000101000001111100001000 porridge 00000000000000000000000000000000 redder 00000000000000000000000000000000 crunchier 00000000000000000000000000000000 1.87 00000000000000000000000000000000 Solicitor 00100000000000111010110000110101 advertorial 00000000000000000000000000000000 premiered 00000000000000000000000000000000 vegetative 00000000000000000000000000000000 residues 00000000000000000000000000000000 Agreed 00100000000111111111101000110010 midweek 00000000000000000000000000000000 buddy 00000000000010101011111100001000 commuting 00000000000000000000000000000000 dispense 00000000000000000000000000000000 Mossman 00100000000000000000000000000000 Mars 00100000000110111100110100101000 Thai 00100000000001100110100100110000 BMP-1 01000000000000000000000000000000 opt 00000000000110110101010110110010 784 00000000000000000000000000000000 espouse 00000000000000000000000000000000 Vevey 00100000000000000000000000000000 21,000 00000000000000000000000000000000 concurred 00000000000000000000000000000000 rep 00000000000000000000000000000000 reunions 00000000000000000000000000000000 Pyongyang 00100000000110111110101101101000 Zapfel 00100000000000000000000000000000 VH-1 01000000000000000000000000000000 steamed 00000000010101010110100001000000 mouths 00000000000001100100111101100011 runups 00000000000000000000000000000000 free-fall 00000000000000000000000000000000 Payroll 00100000000111011111100000100001 Thought 00100000000111111110110111000010 McEnaney 01000000000000000000000000000000 ferociously 00000000000000000000000000000000 IBEW 01000000000000000000000000000000 provocation 00000000000000000000000000000000 boomed 00000000111000000110001000110010 Confidential 00100000000000111001000110010000 Contemporary 00100000000001101000001000110000 231 00000000000000000000000000000000 Pennsylvania-based 00100000000000000000000000000000 34.375 00000000000000000000000000000000 Widuri 00100000000000000000000000000000 curious 00000000000000110000011010010000 bitterest 00000000000000000000000000000000 tones 00000000000110101110010101100011 unbanning 00000000000000000000000000000000 mobilize 00000000000011010111111110110010 dollar-yen 00000000000000000000000000000000 listener 00000000000000000000000000000000 cartilage 00000000000000000000000000000000 chronicles 00000000000000000000000000000000 damping 00000000000000000000000000000000 crossroads 00000000000011100101110010100111 Sandler 00101111110000000100001000001000 516 00000000000000000000000000000000 intents 00000000000000000000000000000000 Ranger 00100000000000100011100100100001 organizers 00000000000011101010000010110011 underpinning 00000000000000000000000000000000 Comes 00100000000001000100001000110010 lockstep 00000000000000000000000000000000 expresses 00000001110101100011000000010010 Feng-hsiung 00100000000000000000000000000000 Echoing 00100000000111111110100000001010 potpourri 00000000000000000000000000000000 Hsu 00100000000000000000000000000000 digging 00000000001011101110100001000000 fixedrate 00000000000000000000000000000000 Lester 00101111111000110001100010011000 7.625 00000000000000000000000000000000 wriggling 00000000000000000000000000000000 prodigious 00000000000000000000000000000000 temporary-help 00000000000000000000000000000000 communicated 00000001110010010010110000110010 Husker 00100000000000000000000000000000 223.0 00000000000000000000000000000000 Cycle 00100000000011010011001001100111 McClatchy 01000000000000000000000000000000 measurable 00000000000000000000000000000000 low-level 00000000000000000000000000000000 sourcing 00000000000000000000000000000000 Beseler 00100000000000000000000000000000 Gap 00100000000110101001100000100111 smoldering 00000000000000000000000000000000 evaporate 00000000000000000000000000000000 sofa 00000000000000000000000000000000 flames 00000000000111101110110101100011 astray 00000000000000000000000000000000 photographed 00000001010001001100010000110010 swinging 00000000000010100011100001000000 pendulum 00000000000000000000000000000000 used'em 00000000000000000000000000000000 two-tone 00000000000000000000000000000000 cancer-causing 00000000000000000000000000000000 Interspec 00100000000000000000000000000000 sleeves 00000000000000000000000000000000 stardom 00000000000000000000000000000000 0.91 00000000000000000000000000000000 7.16 00000000000000000000000000000000 7.72 00000000000000000000000000000000 of'em 00000000000000000000000000000000 200-point 00000000000000000000000000000000 Wedgwood 00100000000000000000000000000000 817.5 00000000000000000000000000000000 25-a-share 00000000000000000000000000000000 5-0 00000000000000000000000000000000 5-1 00000000000000000000000000000000 best-of-seven 00000000000000000000000000000000 Banstar 00100000000000000000000000000000 Areas 00100000000111101111110010100011 nary 00000000000000000000000000000000 spin-off 00000000000000000000000000000000 kingside 00000000000000000000000000000000 trailing 00000000000111001001110101000000 Lombard 00100000000111101100010011000111 'N 01000000000000110100000101001000 gourmet 00000000000000001110101010110000 sauces 00000000000000000000000000000000 Lautenberg 00100000000000000000000000000000 Enright 00100000000000000000000000000000 fuming 00000000000000000000000000000000 catcher 00000000000000000000000000000000 plutonium-powered 00000000000000000000000000000000 Terrible 00100000001010001100011010010000 candies 00000000000000000000000000000000 bedlam 00000000000000000000000000000000 Pull 00100000000011011110101110110010 10:25 00000000000000000000000000000000 Orel 00100000000000000000000000000000 Hershiser 00100000000000000000000000000000 five-game 00000000000000000000000000000000 pops 00000000101111100111000000010010 blundered 00000000000000000000000000000000 sell-order 00000000000000000000000000000000 9:45 00000000000000000000000000000000 Cashin 00100000000000000000000000000000 stomping 00000000000000000000000000000000 spectator 00000000000111110010001010101000 1304.23 00000000000000000000000000000000 457.7 00000000000000000000000000000000 tournament 00000000000111100110010100000001 Mine 00100000000000001011100010001001 79.3 00000000000000000000000000000000 Straits 00100000000110111000111101100111 UMW 01000000000000000000000000000000 homers 00000000000000000000000000000000 1925 00000000000000000000000000000000 Possible 00100000000000000000111000010000 triples 00000000000000000000000000000000 dentist 00000000000111111011010010110101 fielding 00000000000010000000011110000000 alerted 00000000000000001101010000110010 peritoneal 00000000000000000000000000000000 fingering 00000000000000000000000000000000 tip-off 00000000000000000000000000000000 high-leverage 00000000000000000000000000000000 mates 00000000000010011111110101100011 balanced-budget 00000000000000000000000000000000 Rancho 00101111111000001011001101110000 Dahlen 00100000000000000000000000000000 Sunlight 00100000000111111110110000100001 Kosar 00100000000000000000000000000000 in... 00000000000000000000000000000000 250-point 00000000000000000000000000000000 trophy 00000000000000000000000000000000 3:45 00000000000000000000000000000000 2.83 00000000000000000000000000000000 Salina 00100000000000000000000000000000 mid 00000000000111111000110110101000 Kudlow 00101111000000101100000010001000 fish-processing 00000000000000000000000000000000 Reds 00100000000000000000000000000000 Puccio 00100000000000000000000000000000 unstylish 00000000000000000000000000000000 premium-brand 00000000000000000000000000000000 cues 00000000000111111111000000000011 Hinkle 00100000000000000000000000000000 bare-bones 00000000000000000000000000000000 Longley 00100000000000000000000000000000 half-point 00000000000000000000000000000000 snubbing 00000000000000000000000000000000 Glendale 00100000000110001001101001101000 unabated 00000000000111100101110110010000 36-year-old 00000000000000000000000000000000 Optical 00100000000000010010101010110000 203.56 00000000000000000000000000000000 1385.72 00000000000000000000000000000000 wrappers 00000000000000000000000000000000 clanging 00000000000000000000000000000000 Milwaukee-based 00100000000000000000000000000000 problem-solving 00000000000000000000000000000000 downtime 00000000000000000000000000000000 A.L. 01000000000000000000000000000000 pours 00000000000000000000000000000000 steak 00000000000111110011001010110000 Trizec 00100000000000000000000000000000 cross-functional 00000000000000000000000000000000 Tonawanda 00100000000000000000000000000000 air-separation 00000000000000000000000000000000 Aides 00100000000000000000010110110101 Gideon 00100000000000000000000000000000 Westendorf 00100000000000000000000000000000 Ballantine 00101111110010100100001000001000 pessimist 00000000000000000000000000000000 yen-denominated 00000000000000000000000000000000 Streeter 00100000000000000000000000000000 String 00100000000111111111110101111111 A-6 00100000000000000000000000000000 204.2 00000000000000000000000000000000 Beaverton 00100000000000000000000000000000 monstrous 00000000000000000000000000000000 hastened 00000010000111000101010000110010 12:49 00000000000000000000000000000000 Distillers 00100000000110001111001010101000 Schenley 00100000000000000000000000000000 845 00000000000000000000000000000000 punched 00000000000000000000000000000000 Chekhov 00100000000000000000000000000000 no-smoking 00000000000000000000000000000000 analog 00000000000000000000000000000000 snooping 00000000000000000000000000000000 1.5805 00000000000000000000000000000000 Cycling 00100000000000000000000000000000 tapers 00000000000000000000000000000000 360,000 00000000000000000000000000000000 1.5755 00000000000000000000000000000000 Immediate 00100000000000000001010100010000 Jobson 00100000000000000000000000000000 472 00000000000000000000000000000000 15-trader 00000000000000000000000000000000 empathize 00000000000000000000000000000000 haltingly 00000000000000000000000000000000 maligned 00000000000000000000000000000000 Hingorani 00100000000000000000000000000000 wineries 00000000000000000000000000000000 reproduce 00000000001000101110101110110010 279 00000000000000000000000000000000 couched 00000000000000000000000000000000 midrange 00000000000100011000010000110000 82.1 00000000000000000000000000000000 scoring 00000000001101101110100001000000 Trettien 00100000000000000000000000000000 Masterson 00100000000000000000000000000000 tastefully 00000000000000000000000000000000 civility 00000000000000000000000000000000 'em 00000000000000000010000101001000 225,000 00000000000000000000000000000000 a.k.a. 00000000000000000000000000000000 batted 00000000001101000100010000110010 2-0 00000000000000000000000000000000 unto 00000000000000000000000000000000 Adia 00100000000000000000000000000000 ol 00000000000000000000000000000000 Bourbon 00100000000001001100001000100001 distillers 00000000000110001111001010101000 vying 00000000000010011110110000110010 Elite 00100000000001011011001100100111 space-age 00000000000000000000000000000000 Eskandarian 00100000000000000000000000000000 Leadership 00100000000111101010101001100111 fluctuating 00000000000000000000000000000000 Lampe 00100000000000000000000000000000 Bilanz 00100000000000000000000000000000 distiller 00000000000111100101100001110101 perfected 00000000000000000000000000000000 Underneath 00100000111010100001000000001010 subtracting 00000000000111010100100101000000 Absent 00100000011000010100010000110010 destined 00000000011111001100110000110010 preschoolers 00000000000000000000000000000000 Dahl 00101111111101011001000010001000 Porum 00100000000000000000000000000000 gift-giving 00000000000000000000000000000000 666 00000000000000000000000000000000 shoots 00000000000000000000000000000000 industrialist 00000000000111110001100000110101 snapshot 00000000000000000000000000000000 doddering 00000000000000000000000000000000 perked 00000000000000000000000000000000 Talking 00100000000110110111110000110010 Vyacheslav 00100000000000000000000000000000 incensed 00000000000000000000000000000000 Grayhound 00100000000000000000000000000000 11.50 00000000000000000000000000000000 irreverent 00000000000111011100110100010000 1.8200 00000000000000000000000000000000 non-professional 00000000000000000000000000000000 Sulzer 00100000000000000000000000000000 deluged 00000000000000000000000000000000 Execution 00100000000110001111111101001111 secretive 00000000000111011001000010010000 Supposedly 00100000011001100000001001110010 price-slashing 00000000000000000000000000000000 460.98 00000000000000000000000000000000 139.8 00000000000000000000000000000000 solitary 00000000000000000000000000000000 summarize 00000000000000000000000000000000 Wards 00100000000000000000000000000000 deer 00000000000010010110011010101000 defining 00000000000000011111011101000000 Harpener 00100000000000000000000000000000 guides 00000000000010111111000000010010 5.66 00000000000000000000000000000000 Australians 00100000000001001100111000110011 jawboning 00000000000000000000000000000000 computer-systems 00000000000000000000000000000000 142.15 00000000000000000000000000000000 drumbeat 00000000000111110010001000111111 low-profit 00000000000000000000000000000000 power-generation 00000000000000000000000000000000 second-hand 00000000000000000000000000000000 Roseanne 00100000000000000000000000000000 Pinick 00100000000000000000000000000000 Walkman 00100000000000000000000000000000 Kuster 00101111111010110000001010001000 28.25 00000000000000000000000000000000 Kuhns 00100000000000000000000000000000 two-and-a-half 00000000000000000000000000000000 Nortek 00100000000110000111111100101000 blossomed 00000000000000000000000000000000 139.10 00000000000000000000000000000000 Mondschein 00100000000000000000000000000000 1.5840 00000000000000000000000000000000 paneling 00000000000000000000000000000000 648.2 00000000000000000000000000000000 Sterbas 00100000000000000000000000000000 Hoping 00100000000110101100110000110010 Nickles 00100000000000000000000000000000 nightmarish 00000000000000000000000000000000 Saint-Saens 01000000000000000000000000000000 haphazard 00000000000000000000000000000000 wafers 00000000000001001110100010100101 oppressive 00000000000000000000000000000000 Unruh 00101111111000100010101010001000 Kaddurah-Daouk 01000000000000000000000000000000 free-wheeling 00000000000000000000000000000000 Significant 00100000000000000000000000010000 government-backed 00000000000000000000000000000000 commercialization 00000000000000000000000000000000 Gloria 00100000000000000001011000011000 Bonnier 00100000000000000000000000000000 Avalon 00100000000000000000000000000000 Cynwyd 00100000000000000011000100011101 Bala 00100000000111111101101101110000 recapture 00000000100010111111110110110010 six-inch 00000000000000000000000000000000 enormously 00000000000011101000000001110010 Emyanitoff 00100000000000000000000000000000 staff-reduction 00000000000000000000000000000000 Colston 00100000000000000000000000000000 Katherine 00100000000000000000000000000000 Bick 00100000000000000000000000000000 recanted 00000000000000000000000000000000 five-inch 00000000000000000000000000000000 disseminated 00000000000000000000000000000000 splashy 00000000000000000000000000000000 detour 00000000000000000000000000000000 Candice 00100000000000000000000000000000 Indicators 00100000000111101100101010100011 Bode 00100000000000010000000110111001 Orchard 00100000000000000000000000000000 Bostian 00100000000000000000000000000000 Steppel 00100000000000000000000000000000 guitar 00000000000111111110101100100001 doom 00000000000111110110110010110111 formulated 00000000011001101100010000110010 faithfully 00000000000000000000000000000000 shunning 00000000000100111101111101000000 biking 00000000000000000000000000000000 systemwide 00000000000000000000000000000000 mincemeat 00000000000000000000000000000000 Boat 00100000000111111100001000100001 polite 00000000000000100011011010010000 Mill 00100000000111101011000010001001 Vaughan 00100000000000000000000000000000 Hammerstein 00100000000000000000000000000000 Beck 00101111111100111100011000001000 Nishiki 00100000000000000000000000000000 Nutcracker 00100000000000000000000000000000 amok 00000000000000000000000000000000 vaudeville 00000000000000000000000000000000 20.75 00000000000000000000000000000000 salute 00000000000000000000000000000000 Uphoff 00100000000000000000000000000000 low-key 00000000000000000000000000000000 matter-of-factly 00000000000000000000000000000000 Arpino 00100000000000000000000000000000 Joffrey 00100000000000000000000000000000 showcases 00000000000000000000000000000000 Schwinn 00100000000000000000000000000000 nine-day 00000000000000000000000000000000 21.125 00000000000000000000000000000000 half-completed 00000000000000000000000000000000 Kuperberg 00100000000000000000000000000000 beautifully 00000001010100000000010001110010 Seidel 00100000000000000000000000000000 biomedical 00000000000010001011011010110000 Trustees 00100000000110001110101010110011 Tree 00100000000111100100111000000001 Custom 00100000000001111000001010110000 Agile 00100000000000000000000000000000 Joni 00100000000000000000000000000000 Lapin 00100000000000000000000000000000 solidarity 00000000000000000111010010100111 Kinnock 00101111111111101001000010001000 chauvinism 00000000000000000000000000000000 Pall 00100000000100110010111010100111 Hornung 00100000000000000000000000000000 Revisited 00100000000000000000000000000000 disagreements 00000000000010101110110000100111 Naftalis 00100000000000000000000000000000 ex-Attorney 01000000000000000000000000000000 ill-advised 00000000000000000000000000000000 fat-tired 00000000000000000000000000000000 Hardis 00100000000000000000000000000000 54.4 00000000000000000000000000000000 Into 00100000000000000100000000001010 9-10:30 00000000000000000000000000000000 Cabbage 00100000000101110010001000110000 Edouard 00101111111111111011001010011000 quicken 00000000000000000000000000000000 tax-cut 00000000000000000000000000000000 modernist 00000000000000000000000000000000 inflating 00000000000011010111011101000000 pegging 00000000000001010101011101000000 torpedoed 00000000000000000000000000000000 Balloon 00100000000111111011001010110111 neutralization 00000000000000000000000000000000 overshadowing 00000000000000000000000000000000 hardball 00000000000010101000101100100001 Sheridan 00100000000000000000000000000000 6.10 00000000000000000000000000000000 Fishkill 00100000000000000000000000000000 Beacon 00100000000111101010010100001001 take-out 00000000000000000000000000000000 Blankenship 00100000000000000000000000000000 Patch 00100000000010001011110100100001 1926 00000000000000000000000000000000 behaves 00000000001010101000001000110010 Cutrer 00100000000000000000000000000000 deadbeats 00000000000000000000000000000000 workday 00000000000000000000000000000000 Howick 00100000000000000000000000000000 Woodruff 00100000000000000000000000000000 49%-owned 00000000000000000000000000000000 56-year-old 00000000000000000000000000000000 lower-quality 00000000000000000000000000000000 marveled 00000000000000000000000000000000 328.85 00000000000000000000000000000000 Post-Newsweek 01000000000000000000000000000000 Imprimis 00100000000000000000000000000000 sake 00000000000111011101011000001111 Baton 00100000000111110110011010101000 McGlade 01001111111000010000000010001000 Makro 00100000000000000000000000000000 484 00000000000000000000000000000000 Shoppers 00100000000001101100111000110011 Ticketron 00100000000000000000000000000000 exemplifies 00000000000000000000000000000000 lotteries 00000000000000000000000000000000 177.5 00000000000000000000000000000000 full-body 00000000000000000000000000000000 Ousley 00100000000000000000000000000000 ETA 01000000000000000000000000000000 masseur 00000000000000000000000000000000 numerically 00000000000000000000000000000000 Byler 00100000000000000000000000000000 8-9 00000000000000000000000000000000 Borner 00100000000000000000000000000000 Soule 00100000000000000000000000000000 polluted 00000000000110001001101001000000 save-the-earth 00000000000000000000000000000000 whacky 00000000000000000000000000000000 Glory 00100000000100111111011010100111 ahs 00000000000000000000000000000000 Masterpiece 00100000000010111110101000100001 sensitivity 00000000000111110111110100100111 oohs 00000000000000000000000000000000 Supermarkets 00100000000000010011001010110000 Ohlman 00100000000000000000000000000000 spa 00000000000000000000000000000000 arouse 00000000011001101111101110110010 Stephenson 00100000000000000000000000000000 gruesome 00000000000000000000000000000000 Vidunas 00100000000000000000000000000000 cobbled 00000000000000000000000000000000 characterization 00000000000111100001110000001111 salarymen 00000000000000000000000000000000 rotation 00000000000100011001101010100111 Reasons 00100000000111111111101110100011 dormitory 00000000000000000000000000000000 weepers 00000000000000000000000000000000 2020 00000000000000000000000000000000 technicality 00000000000111101000111101100111 naysayers 00000000000000000000000000000000 bottlers 00000000000111111101010000110011 necessitated 00000000000000000000000000000000 125.1 00000000000000000000000000000000 angles 00000000000000000000000000000000 oxide 00000000000000000000010010001001 Systemwide 00100000000000000000000000000000 fried 00000000000000100010111000101000 gyrating 00000000000000000000000000000000 rainier 00000000000110000011000100101000 Kryuchkov 00100000000000000000000000000000 fascinated 00000000000000000000000000000000 relevancy 00000000000000000000000000000000 Buzzell 00100000000000000000000000000000 frets 00000000000100100011010111000010 miscalculation 00000000000000000000000000000000 echelon 00000000000000000000000000000000 Mazzone 00100000000000000000000000000000 infringing 00000000000110010000100000110010 hawks 00000000000100010100110100000001 patent-infringement 00000000000000000000000000000000 asset-allocation 00000000000000000000000000000000 Quelle 00100000000000000000000000000000 Saying 00100000000111111111111010000010 Minera 00100000000000000000000000000000 Intermoda 00100000000000000000000000000000 unrestrained 00000000000000000000000000000000 49-year-old 00000000000000000000000000000000 reactivated 00000000000111110010111001000000 1,250 00000000000000000000000000000000 Battelle 00100000000000000000000000000000 bucket 00000000000110011000100101100111 unsustainable 00000000000000000000000000000000 Charge 00100000000111101110101101000111 untouchable 00000000000000000000000000000000 topsy-turvy 00000000000000000000000000000000 unspent 00000000000000000000000000000000 thin-slab 00000000000000000000000000000000 Pitcher 00100000000011101111011110110101 opener 00000000000000000000000000000000 amply 00000000000000000000000000000000 unobserved 00000000000000000000000000000000 Havana 00100000001111000111111001101000 Ilyushins 00100000000000000000000000000000 Casino 00100000000000010101111010110000 Tropicana 00100000000010110011010100101000 Irish-Soviet 01000000000000000000000000000000 reversible 00000000000000000000000000000000 prolific 00000000000000000000000000000000 preface 00000000000111000101111010110111 Jaffe 00101111111110000100001000001000 morphogenetic 00000000000000000000000000000000 Osborn 00100000000000000000000000000000 rancorous 00000000000000000000000000000000 Sylvester 00100000000111101010000100001000 Stallone 00100000000000000000000000000000 netted 00000000000000101110100100110010 oneself 00000000000000000000000000000000 axiom 00000000000000000000000000000000 NTG 01000000000000000000000000000000 fast-moving 00000000000000000000000000000000 post-production 00000000000000000000000000000000 overlooked 00000001100111010100010000110010 Tracinda 00100000000000000000000000000000 effluent 00000000000000000000000000000000 Hitler 00100000000111010110101101101000 congratulated 00000000000000000000000000000000 gentry 00000000000000000000000000000000 irreparably 00000000000000000000000000000000 Keidanren 00100000000000000000000000000000 85,000 00000000000000000000000000000000 Sasaki 00100000000000000000000000000000 repressed 00000000000000000000000000000000 intertwining 00000000000000000000000000000000 Distributors 00100000000111010110010000110011 Littleton 00100000000000000000000000000000 reimpose 00000000000000000000000000000000 vexing 00000000000000000000000000000000 cling 00000000000010010111010110110010 housekeeper 00000000000111100000000001000111 drummer 00000000000000000000000000000000 antiquated 00000000000001110110101010110000 Meeting 00100000000111111111110001000111 Underscoring 00100000000111111001001101000000 Disappointing 00100000000000010011100000010000 destroys 00000000000000000000000000000000 Remains 00100000000000000000001000110010 maquiladoras 00000000000000000000000000000000 Ishiguro 00100000000000000000000000000000 soothing 00000000001010011110011010010000 fair-market 00000000000000000000000000000000 Howley 00100000000000000000000000000000 Danvers 00100000000000000000000000000000 97.74 00000000000000000000000000000000 Ericson 00100000000000000000000000000000 10-cent-a-share 00000000000000000000000000000000 jacked 00000000000000000000000000000000 Nagano 00100000000000000000000000000000 Zafris 00100000000000000000000000000000 Nakamura 00100000000000000000000000000000 150.3 00000000000000000000000000000000 Sternberg 00100000000000000000000000000000 Frabotta 00100000000000000000000000000000 computer-services 00000000000000000000000000000000 co-manager 00000000000000000000000000000000 Staples 00100000000111111110000010100011 soft-spoken 00000000000000000000000000000000 Exxon-owned 00100000000000000000000000000000 Linsert 00100000000000000000000000000000 Usually 00100000001000100000001001110010 41.75 00000000000000000000000000000000 overcame 00000000000000000000000000000000 Weisberg 00100000000000000000000000000000 Nellcor 00100000001101111010111100101000 amplifiers 00000000000000000000000000000000 BizMart 01000000000000000000000000000000 Aiwa 00100000000000000000000000000000 Leroy 00100000000000000000000000000000 moisture 00000000000000101001110010100111 Ito 00100000000000000000000000000000 horticulturally 00000000000000000000000000000000 Murasawa 00100000000000000000000000000000 occupy 00000000000001101110101110110010 Payco 00100000000000000000000000000000 Boxes 00100000000000110101110101100011 Etc. 00100000000000000000000000000000 microwaves 00000000000000000000000000000000 above-market 00000000000000000000000000000000 absorbing 00000000000111000111110101000000 1939 00000000000000000000000000000000 low-ball 00000000000000000000000000000000 avoids 00000001010100000011000000010010 557 00000000000000000000000000000000 horrendous 00000000000001011000011010010000 54.8 00000000000000000000000000000000 four-wheel-drive 00000000000000000000000000000000 Joann 00100000000000000000000000000000 Lublin 00100000000000000000000000000000 outlines 00000000100111001111000000010010 Dong-A 01000000000000000000000000000000 persistence 00000000000111001110011000001111 placate 00000000010011010111111110110010 Takuma 00100000000000000000000000000000 meticulous 00000000000000000000000000000000 shirking 00000000000000000000000000000000 apologize 00000000000111100101010110110010 escalate 00000000000011000110111110110010 violet 00000000000000000000000000000000 back-end 00000000000000000000000000000000 mollify 00000000000000000000000000000000 BellSouth-LIN 01000000000000000000000000000000 Paev 00100000000000000000000000000000 lakes 00000000000001010110110100100001 Retrieval 00100000000000010101100001100001 3.51 00000000000000000000000000000000 cutthroat 00000000000000000000000000000000 Flowers 00100000000111101011010101100011 DataTimes 01000000000000000000000000000000 Architects 00100000000111000010100000110011 adolescent 00000000000000000000000000000000 illiteracy 00000000000000000000000000000000 indulging 00000000000101110111000001000000 Sprizzo 00100000000000000000000000000000 Soldado 00100000000000000000000000000000 353 00000000000000000000000000000000 Progressive 00100000000000000110011000110000 illiquidity 00000000000000000000000000000000 amplified 00000000011110100001110000110010 sorely 00000000000000000000000000000000 nicer 00000000000000000000000000000000 pre-crash 00000000000000000000000000000000 Own 00100000000000000011110010101000 Bridgestone 00100000000111000111011100101000 drags 00000000000000000000000000000000 Leblang 00100000000000000000000000000000 pap 00000000000000010111110000100001 Grannies 00100000000000000000000000000000 Cato 00100000000101100110000000001000 delisting 00000000000000000000000000000000 underpaid 00000000000001110101101001000000 88-point 00000000000000000000000000000000 3.95 00000000000000000000000000000000 ghettos 00000000000000000000000000000000 132.8 00000000000000000000000000000000 assimilate 00000000000000000000000000000000 dole 00001111111100100110011010001000 ingots 00000000000000000000000000000000 rocketed 00000000000000000000000000000000 Dime 00100000000111111111000001000111 2.10 00000000000000000000000000000000 Kirschner 00100000000000000000000000000000 Mervin 00100000000000000000000000000000 schooling 00000000000100100111110010100111 outgrowth 00000000000000000000000000000000 156.8 00000000000000000000000000000000 Link 00100000000111111110001010110111 Associate 00100000000000000110001001110000 Amcast 00100000000000000000000000000000 hyped 00000000000000000000000000000000 443.6 00000000000000000000000000000000 telegraphed 00000000000000000000000000000000 patchwork 00000000000000000000000000000000 Beall 00101111111000010010000010001000 nationalization 00000000000111111101101101001111 20-year-old 00000000000000000000000000000000 squares 00000000000000000000000000000000 conceit 00000000000000000000000000000000 123.5 00000000000000000000000000000000 10.86 00000000000000000000000000000000 Certified 00100000000111000001101001000000 lovers 00000000000000001101110101100011 rugs 00000000000000000000000000000000 servant 00000000000111101110111111111001 gridlocked 00000000000000000000000000000000 loft 00000000000000000000000000000000 feelers 00000000000000000000000000000000 Bernhard 00100000000000000000000000000000 vantage 00000000000001010011001100100111 MX 01000000000000000000000000000000 cones 00000000000000000000000000000000 dismisses 00000000100111100011000000010010 gifted 00000000000000001011000010010000 80-megabyte 00000000000000000000000000000000 Intl 00100000000000000000000000000000 Kress 00100000000000000000000000000000 Bronces 00100000000000000000000000000000 decor 00000000000000000000000000000000 foyer 00000000000000000000000000000000 textbooks 00000000000000001101111000110011 Flemish 00100000000000000000000000000000 Colnaghi 00100000000000000000000000000000 mindful 00000000000001101011110000110010 Longmont 00100000000000000000000000000000 riskiest 00000000000000000000000000000000 bedroom 00000000000000100011010000000001 carp 00001111111000110100000000001000 eight-count 00000000000000000000000000000000 Barrah 00100000000000000000000000000000 heavy-truck 00000000000000000000000000000000 Ike 00100000000000111001000100001000 brigades 00000000000000000000000000000000 RDF 01000000000000000000000000000000 Weinberger 00101111111110101100001010001000 home-state 00000000000000000000000000000000 keyed 00000000000000000000000000000000 biodegradable 00000000000000000000000000000000 Change 00100000000111111110111000110111 plaintive 00000000000000000000000000000000 Conduct 00100000000111100111110110110010 Rake 00100000000000000000000000000000 Jachmann 00100000000000000000000000000000 Lanier 00101111111001000001000010001000 impartial 00000000000000000000000000000000 valley 00000000000000000000000010100101 Molokai 00100000000000000000000000000000 Maui 00100000000000000000000000000000 changeover 00000000000111111111001010000001 blithely 00000000000000000000000000000000 Push 00100000000111100110010110110010 non-dual 00000000000000000000000000000000 prejudice 00000000000111100111100010100111 Dual 00100000000101110010000000110000 BDDP 01000000000000000000000000000000 Duesseldorf 00100000000000000000000000000000 day-long 00000000000000000000000000000000 eye-catching 00000000000000000000000000000000 packing 00000000000001100010110001000000 fatuous 00000000000000000000000000000000 discharges 00000000000000000000000000000000 paused 00000000000000000000000000000000 boutiques 00000000000000000000000000000000 Stravinsky 00100000000000000000000000000000 minimalism 00000000000000000000000000000000 Publisher 00100000000111111111110000110101 332.38 00000000000000000000000000000000 Arden 00101111111110101000000100001000 pores 00000000000000000000000000000000 keys 00000000000101110101110101100011 79.03 00000000000000000000000000000000 novelties 00000000000000000000000000000000 harmonious 00000000001011001101000000010000 queers 00000000000000000000000000000000 repetitive 00000000001010110001000000010000 blotting 00000000000000000000000000000000 decreed 00000000000111100101110111000010 avant-garde 00000000000000000000000000000000 margarine 00000000000000000000000000000000 fetchingly 00000000000000000000000000000000 279.75 00000000000000000000000000000000 90.6 00000000000000000000000000000000 Likely 00100000000111111101011000110010 waterfront 00000000000010010100100000100001 Sider 00100000000000000000000000000000 World-Wide 01000000000000000000000000000000 965 00000000000000000000000000000000 126.1 00000000000000000000000000000000 42nd 00000000000000000000000000000000 three-party 00000000000000000000000000000000 5.65 00000000000000000000000000000000 horticulture 00000000000000000000000000000000 hosted 00000000010001100111010000110010 test-marketing 00000000000000000000000000000000 pounded 00000000000000000000000000000000 Extension 00100000000111101110111001100111 of... 00000000000000000000000000000000 ft. 00000000000000000000000000000000 Alpine 00100000000001000011010100101000 Metruh 00100000000000000000000000000000 lethargy 00000000000000000000000000000000 Emil 00100000000000000000000000000000 Mersa 00100000000000000000000000000000 abortion-related 00000000000000000000000000000000 reposition 00000000000000000000000000000000 assassin 00000000000000000000000000000000 Quennell 00100000000000000000000000000000 tusks 00000000000000000000000000000000 Waldheim 00101111111000000011110110001000 skirting 00000000000000000000000000000000 Crutzen 00100000000000000000000000000000 mid-30s 00000000000000000000000000000000 Goliaths 00100000000000000000000000000000 Bunting 00101111111110100100111000001000 scrimping 00000000000000000000000000000000 top-yielding 00000000000000000000000000000000 gardener 00000000000000000000000000000000 Graedel 00100000000000000000000000000000 airlift 00000000000111011000101100100101 new-product 00000000000000000000000000000000 southeast 00000000000000001010001110101000 Autry 00100000000000000000000000000000 Whitehall 00100000000101101001000100101000 skin-care 00000000000000000000000000000000 knots 00000000000000101000000001000111 originator 00000000000000000000000000000000 Gosbank 00100000000000000000000000000000 Hingham 00100000000000000000000000000000 bleach 00000000000000000000000000000000 whims 00000000000000000000000000000000 pornography 00000000000111000011010010100111 sludge 00000000000111100101110000100001 replays 00000000000000000000000000000000 halftime 00000000000000000000000000000000 Harlow 00100000000000000000000000000000 ABORTION 01000000000000101001010000100001 high-altitude 00000000000000000000000000000000 languished 00000000011000000110001000110010 leukemia 00000000000010101001110010100111 Chesebrough-Pond 01000000000000000000000000000000 ritzy 00000000000000000000000000000000 72-a-share 00000000000000000000000000000000 fashions 00000000000001001101110101100011 ground-based 00000000000000000000000000000000 high-minded 00000000000000000000000000000000 129.72 00000000000000000000000000000000 87.25 00000000000000000000000000000000 20.7 00000000000000000000000000000000 breather 00000000000000000000000000000000 year-long 00000000000000000000000000000000 tidy 00000000000000011100100000010000 zoom 00000000000000000000000000000000 reacts 00000000000000000000000000000000 B-1B 01000000000000000000000000000000 market-reform 00000000000000000000000000000000 Boudreau 00100000000000000000000000000000 harassment 00000000000011011101100010100111 Subsequently 00100000000000011001001001110010 tortured 00000001001001110100010000110010 legalistic 00000000000000000000000000000000 Tanner 00100000000000000000000000000000 24.3 00000000000000000000000000000000 congressionally 00000000000000000000000000000000 cartoonist 00000000000000000000000000000000 Thrifts 00100000000111100111100001110011 199 00000000000000000000000000000000 conceivable 00000000000011001110010001110010 overload 00000000000000000000000000000000 Allentown 00100000000000000000000000000000 Okla 00100000000000000000000000000000 angrily 00000001011001000001001001110010 Anybody 00100000000000011010010001110010 Deposits 00100000000111100010100111100011 mind-numbing 00000000000000000000000000000000 Swasey 00100000000000000000000000000000 9.37 00000000000000000000000000000000 injustice 00000000001010000111111001100111 reserving 00000000000101100101110101000000 Louvre 00100000000000000000101011001111 141.85 00000000000000000000000000000000 bald 00000000000101100110011010010000 calmer 00000000000011101100001111000000 unconfirmed 00000000000001000101000110010000 epidemic 00000000000100001111111001100111 wrest 00000000000111010100101110110010 hike 00000000000111110011001110000011 mailroom 00000000000000000000000000000000 packets 00000000000000000000000000000000 79-year-old 00000000000000000000000000000000 scavengers 00000000000000000000000000000000 Malone 00101111111101101010100010001000 non-subscription 00000000000000000000000000000000 ironically 00000000000111111110111011101000 disbursements 00000000000000000000000000000000 cowards 00000000000000000000000000000000 kings 00000000000101001010001000110000 Neck 00100000000111111111010000000001 Privately 00100000000010100001001001110010 avail 00000000000101111110010001110010 exchange-listed 00000000000000000000000000000000 Weill 00101111110000110100000010001000 Steptoe 00100000000000000000000000000000 Sonja 00100000000000000000000000000000 condom 00000000000001101100001000100001 Increase 00100000000111111111110100110111 reincorporating 00000000000000000000000000000000 1254.27 00000000000000000000000000000000 unchanging 00000000000000000000000000000000 reshufflings 00000000000000000000000000000000 49.96 00000000000000000000000000000000 Planck 00100000000000000000000000000000 untested 00000000000100010100110100010000 smarter 00000000000001011001001111000000 Bee 00100000000001101001101100100001 Krug 00100000000000000000000000000000 autocratic 00000000000001100100110100010000 Geary 00100000000000000000000000000000 guru 00000000000111111001011110110101 centerfielder 00000000000000000000000000000000 Sense 00100000000111101101010101100111 Pressed 00100000001111101101010000110010 skyward 00000000000000000000000000000000 no-growth 00000000000000000000000000000000 224,070,000 00000000000000000000000000000000 fauna 00000000000000000000000000000000 souped-up 00000000000000000000000000000000 Excel 00100000000101001011111100001000 Barnes 00101111111100100100100010001000 11-year 00000000000000000000000000000000 107.9 00000000000000000000000000000000 catch-up 00000000000000000000000000000000 half-baked 00000000000000000000000000000000 96.4 00000000000000000000000000000000 tug-of-war 00000000000000000000000000000000 hair-trigger 00000000000000000000000000000000 Trend 00100000000111111100111101100111 625.4 00000000000000000000000000000000 EWDB 01000000000000000000000000000000 wayward 00000000000000000000000000000000 statues 00000000000000000000000000000000 HOLIDAY 01000000000000011000000000100001 Tory 00100000000000010110011000110000 retrospective 00000000000000010000100101100111 elixir 00000000000000000000000000000000 Nonsense 00100000000111110101110010100111 director-general 00000000000000000000000000000000 Lasker 00101111111110100101111010001000 three-page 00000000000000000000000000000000 urethane 00000000000000000000000000000000 polyols 00000000000000000000000000000000 UNION 01000000000111100011001100100101 Waldbaum 00100000000000100010110000001000 recklessly 00000000000000000000000000000000 Rowland-Molina 01000000000000000000000000000000 Bern 00100000000011011111111001101000 Sharfman 00100000000000000000000000000000 polysilicon 00000000000000000000000000000000 buckets 00000000000000000000000000000000 tippee 00000000000000000000000000000000 Eakle 00101111100111010100000010001000 tipper 00000000000000000000000000000000 SPAN 01000000000000100101001010110111 hackers 00000000000000000000000000000000 Computerworld 00100000000000000000000000000000 emasculate 00000000000000000000000000000000 housework 00000000000000000000000000000000 commonwealth 00000000000111111000101000101000 resides 00000000000000000000000000000000 analyses 00000000000111101100001000100011 manifestations 00000000000000000000000000000000 deportation 00000000000111001001000101001111 Internet 00100000000000000000000000000000 freezer 00000000000000000000000000000000 reigned 00000000000000000000000000000000 futures-trading 00000000000000000000000000000000 appreciably 00000000000000000000000000000000 symbiotic 00000000000000000000000000000000 one-for-one 00000000000000000000000000000000 husbands 00000000000111111110011100110011 arbitrage`` 00000000000000000000000000000000 1868 00000000000000000000000000000000 210,000 00000000000000000000000000000000 individual-investor 00000000000000000000000000000000 allocator 00000000000000000000000000000000 PRI 01000000000000000000000000000000 Quadrant 00100000000000000000000000000000 revoking 00000000000000000000000000000000 herding 00000000000000000000000000000000 madness 00000000001110011110011010100111 Orrick 00100000000000000000000000000000 1911 00000000000000000000000000000000 1943 00000000000000000000000000000000 Tripoli 00100000000000000000000000000000 relegated 00000000000000000000000000000000 Yanes 00100000000000000000000000000000 Committees 00100000000000001001000001010101 59.3 00000000000000000000000000000000 Maughan 00100000000000000000000000000000 Grisebach 00100000000000000000000000000000 deposed 00000000000101100000101001000000 Villa 00100000001001100111110100100001 Views 00100000000111101111111101100011 REAGAN 01001111110000001000000110001000 Manson 00100000000000000000000000000000 Yaohan 00100000000000000000000000000000 repatriate 00000000000000101111001110110010 342 00000000000000000000000000000000 eucalyptus 00000000001010110010111000101000 Chernobyl 00100000000000011011100000100001 lagoon 00000000000110100110111000000001 Ryzhkov 00100000000000000000000000000000 875 00000000000000000000000000000000 discovers 00000000110011100011000000010010 Ph. 00100000000000000000000000000000 methane 00000000000110101110110000100001 candor 00000000000110101010110010100111 Dannemiller 00100000000000000000000000000000 Alarmed 00100000000111100101110000110010 LaMore 01000000000000000000000000000000 trail-blazing 00000000000000000000000000000000 subsidence 00000000000000000000000000000000 analogy 00000000000110101011111001100111 deployment 00000000000111101011111101001111 extracting 00000000000000000000000000000000 Thieves 00100000000111001101111000110011 urgently 00000010010001000001001001110010 arthritis 00000000000011100010101000110000 armor 00000000001110100101110101100011 BMW 01000000000000000000000000000000 extremists 00000000000011000110000110110101 battery-powered 00000000000000000000000000000000 fanatics 00000000000000000000000000000000 paramilitary 00000000000000000000000000000000 outfly 00000000000000000000000000000000 here... 00000000000000000000000000000000 MiG-29s 01000000000000000000000000000000 early-retirement 00000000000000000000000000000000 Soviet-trained 00100000000000000000000000000000 appointee 00000000000111111001010110110101 epilepsy 00000000000000000000000000000000 infantry 00000000000000000000000000000000 Gromov 00100000000000000000000000000000 Brezhnevite 00100000000000000000000000000000 abide 00000000000111100010010110110010 bewildered 00000000000000000000000000000000 symposiums 00000000000001101011110101100011 insignificant 00000000000011001101110110010000 Millions 00100000000111101011111000101111 journals 00000000000111101110000100100011 shortsighted 00000000000000000000000000000000 983 00000000000000000000000000000000 Ukraine 00100000000000000000000000000000 affiliating 00000000000000000000000000000000 McElroy 01000000000000000000000000000000 Driving 00100000000111001100100001000000 Censorship 00100000000001100110011010100111 Gain 00100000000111111111101101000111 Motley 00100000000000000000000000000000 1890s 00000000000000000000000000000000 debt-rating 00000000000000000000000000000000 methodical 00000000000000000000000000000000 amaze 00000000000000000000000000000000 adequacy 00000000000111111111001010001111 hot-line 00000000000000000000000000000000 volcano 00000000000000000000000000000000 Hardest 00100000000000000100111000110010 Zimbabwean 00100000000000000000000000000000 muscling 00000000000000000000000000000000 man-made 00000000000000000000000000000000 Lausanne 00100000000000000000000000000000 waiters 00000000000101101001111000110011 brochure 00000000000000101000001011100111 A-2 00100000000000000000000000000000 371.20 00000000000000000000000000000000 17th 00000000000000000000000000000000 Helms 00101111111100111100111010001000 intrusive 00000000000000000000000000000000 Confusion 00100000000111111100111010100111 9.43 00000000000000000000000000000000 dolphins 00000000000000000000000000000000 digesting 00000000000110100111011101000000 Nutting 00100000000000000000000000000000 royal 00000000000010000001111000101000 1,750 00000000000000000000000000000000 Capra 00100000000000000000000000000000 Chatset 00100000000000000000000000000000 calming 00000000000000100111010001000000 WAR 01000000000011101011000111111001 11.57 00000000000000000000000000000000 Sundarji 00100000000000000000000000000000 Hindu 00100000000100001101011000110000 howitzer 00000000000000000000000000000000 honorably 00000000000000000000000000000000 630 00000000000000000000000000000000 peacetime 00000000001010011010000000110000 hated 00000000000110010100110111000010 ECI 01000000000000000000000000000000 flaunt 00000000000000000000000000000000 co-founders 00000000000000000000000000000000 underwrote 00000000001001011101000000010010 Parametric 00100000000000000000000000000000 1,365,226 00000000000000000000000000000000 334,774 00000000000000000000000000000000 vaunted 00000000000000000000000000000000 Volk 00100000000000000000000000000000 coherence 00000000000000000000000000000000 Dwight 00101111111000010100011100001000 specialization 00000000000000000000000000000000 -even 00000000000000000000000000000000 Mexicans 00100000000011011100111000110011 unites 00000000000000000000000000000000 jousting 00000000000000000000000000000000 petty 00000000000000101101001000110000 arms-kickback 00000000000000000000000000000000 Singh 00100000000000000000000000000000 537 00000000000000000000000000000000 Daisy 00101111111010001100010000101000 Biotechnical 00100000000000000000000000000000 Lourie 00100000000000000000000000000000 Birinyi 00100000000000000000000000000000 industry-specific 00000000000000000000000000000000 Wynn 00101111110110110100000010001000 wonderment 00000000000000000000000000000000 injure 00000000000000000000000000000000 additives 00000000000111101110011111001001 intermediaries 00000000000111101110111001110011 watershed 00000000000000001011001010010000 Raines 00100000000000000000000000000000 well-versed 00000000000000000000000000000000 motorcycles 00000000000101101000111001100011 8.475 00000000000000000000000000000000 index-options 00000000000000000000000000000000 lumps 00000000000000000000000000000000 ACCOUNTING 01000000000000000010000010110000 Tradition 00100000000111111101001001100111 motorized 00000000000101011000001000110000 separated 00000011000101010100010000110010 cyclist 00000000000000000000000000000000 squabbles 00000000000000000000000000000000 Yoshihashi 00100000000000000000000000000000 pedal 00000000000101110110111000000001 Sain 00100000000000000000000000000000 derided 00000000000000000000000000000000 tool-and-die 00000000000000000000000000000000 Delegates 00100000000000000110000000110011 outmoded 00000000000000000000000000000000 summers 00000000000100101011111010001000 equestrians 00000000000000000000000000000000 waxed 00000000000000000000000000000000 riot 00000000000111001001011000110000 consulting-firm 00000000000000000000000000000000 Lefcourt 00100000000000000000000000000000 8.14 00000000000000000000000000000000 hiker 00000000000000000000000000000000 gold-leaf 00000000000000000000000000000000 3,040,000 00000000000000000000000000000000 bickered 00000000000000000000000000000000 Echo 00100000000111001110011010101000 panned 00000001011001110010110000110010 uh 00000000000000000000000000000000 Newquist 00100000000000000000000000000000 bachelor 00000000000000000000000000000000 B.J. 01000000000000000000000000000000 benches 00000000000000000000000000000000 estate-tax 00000000000000000000000000000000 penalized 00001010001011010100010000110010 HUGO'S 01000000000000000000000000000000 stripped-down 00000000000000000000000000000000 ludicrously 00000000000000000000000000000000 contradict 00000000000111001001101110110010 Sheehan 00100000000000000000000000000000 Theoretically 00100000110100000000001001110010 unprofessional 00000000000000000000000000000000 Wetherell 00100000000000000000000000000000 outwardly 00000000000000000000000000000000 simplification 00000000000000000000000000000000 disbanded 00000011011011010100010000110010 departing 00000000000000011110101001000000 Quaker 00101111111000000110100100101000 leaded 00000000000000000000000000000000 demobilize 00000000000000000000000000000000 methanol 00000000000110111110110000100001 Smiling 00100000000110100011000001000000 Cokely 00100000000000000000000000000000 5-fluorouracil 00000000000000000000000000000000 levamisole 00000000000000000000000000000000 Reduced 00100000000010010000111001000000 workable 00000000001100001101000000010000 leash 00000000000111111110101001000111 Mom 00100000000010111111110010100111 Contract 00100000000111000001000000011001 Robots 00100000000110100101111001100011 propylene 00000000000000000000000000000000 Weisel 00100000000000000000000000000000 computer-generated 00000000000000000000000000000000 family-oriented 00000000000000000000000000000000 long-planned 00000000000000000000000000000000 KCRA 01000000000000000000000000000000 news-oriented 00000000000000000000000000000000 Enrique 00100000000000100011100010011000 Brandon 00101111111000101011010100001000 Cicero 00100000000000000000000000000000 karaoke 00000000000000000000000000000000 Bataan 00100000000000000000000000000000 roar 00000000000000000000000000000000 correspondents 00000000000001111100100000110011 Universal-Rundle 01000000000000000000000000000000 pedestrians 00000000000000000000000000000000 evaluates 00000000000000000000000000000000 kiddies 00000000000000000000000000000000 choked 00000000000000000000000000000000 easygoing 00000000000000000000000000000000 glitz 00000000000000000000000000000000 N.Y.-based 01000000000000000000000000000000 business-as-usual 00000000000000000000000000000000 combating 00000000000000000000000000000000 scouting 00000000000101010101110101000000 no-frills 00000000000000000000000000000000 3,250,000 00000000000000000000000000000000 slicing 00000000000000000000000000000000 fickle 00000000000001010101000010010000 recreational-vehicle 00000000000000000000000000000000 vetoing 00000000000000000000000000000000 well-entrenched 00000000000000000000000000000000 Vosges 00100000000000000000000000000000 Planet 00100000000111001101011000000001 shopped 00000000000000000000000000000000 Clifton 00100000000000000000000000000000 expedition 00000000000111110010001000100111 8300 00000000000000000000000000000000 449.89 00000000000000000000000000000000 Competitors 00100000000111101111110000110011 459.93 00000000000000000000000000000000 provocatively 00000000000000000000000000000000 Females 00100000000101110101011100110011 explode 00000000001010111101010110110010 Males 00100000000000010010011100110011 vacationing 00000000000111000111000001000000 Advocates 00100000000000001100000010110011 lures 00000000000000000000000000000000 8.19 00000000000000000000000000000000 Precious 00101111111101010111111110110000 redoing 00000000000000000000000000000000 Fraumeni 00100000000000000000000000000000 Governors 00100000000000010010101010110011 sparingly 00000000000000000000000000000000 shoddy 00000000000000100011000110010000 MarCor 01000000000000000000000000000000 abate 00000000000000000000000000000000 Fans 00100000000100100010100000110011 Lung-cancer 00100000000000000000000000000000 foreshadowed 00000000000000000000000000000000 forgot 00000000000111100000110111000010 repassed 00000000000000000000000000000000 NORTH 01000000000111100011100110101000 capitalizing 00000000000100110100100000110010 Dederick 00101111111111000110000010001000 Frankenstein 00100000000000000000000000000000 curtly 00000000000000000000000000000000 Barletta 00100000000000000000000000000000 Spadafora 00100000000000000000000000000000 conveyed 00000000100001000101010000110010 ARTICLE 01000000000111101111001000100111 SECTION 01000000000111001011100001000111 CLAUSE 01000000000000000010110011100111 Eskenazi 00100000000000000000000000000000 indict 00000000011001010111111110110010 ore 00000000000000111110110100100001 idling 00000000000010000000000001110111 Tobacco 00100000000000011011011010110000 LaMothe 01000000000000000000000000000000 Vote 00100000000111110111111000110111 gun-running 00000000000000000000000000000000 9.875 00000000000000000000000000000000 stomachs 00000000000000000000000000000000 Covington 00100000000000000000000000000000 Tiant 00100000000000000000000000000000 Same 00100000000000000000100011010000 wiretaps 00000000000000000000000000000000 reverberating 00000000000000101101100001000000 5:09 00000000000000000000000000000000 rent-a-colonel 00000000000000000000000000000000 Tashi 00100000000000000000000000000000 boatload 00000000000111111101000101111111 Bragg 00100000000000000000000000000000 earthworms 00000000000000000000000000000000 impoundment 00000000000000000000000000000000 intoxicated 00000000000000000000000000000000 blackmailing 00000000000000000000000000000000 Hannifin 00100000000000000000000000000000 colonel 00000000000111101010010000110101 triple-B 01000000000000000000000000000000 Armuelles 00100000000000000000000000000000 LTCB 01000000000000000000000000000000 turbulent 00000000000011000011000010010000 Malaysian 00100000000001110110100100110000 Daim 00100000000000000000000000000000 good-will 00000000000000000000000000000000 sever 00000000000000000000000000000000 revolves 00000000000000000000000000000000 executive-branch 00000000000000000000000000000000 unrecognizable 00000000000000000000000000000000 teamed 00000000001101111011001000110010 Roukema 00100000000000000000000000000000 Omar 00100000000000000000000000000000 garrison 00001111111100010001110001001000 caved 00000000000000000000000000000000 QUANTUM 01000000000000001011010100101000 CHEMICAL 01000000000000010000011010110000 falsified 00000000000000110101101001000000 Fairness 00100000000000001111011011100001 incumbents 00000000000000000001100110110011 gringos 00000000000000000000000000000000 Ambler 00100000000000000000000000000000 Somoza 00100000000000000000000000000000 mistress 00000000000000000000000000000000 Commenting 00100000000111110100100000110010 Exactly 00100000000000011100001001110010 havens 00000000000111101101101110000011 Personal-computer 00100000000000000000000000000000 sequestration 00000000000000000000000000000000 ingrained 00000000000000000000000000000000 heats 00000000001001111011001000110010 Hefner 00100000000000000000000000000000 graciously 00000000000000000000000000000000 89.9 00000000000000000000000000000000 ax 00000000000111110010111000100111 507 00000000000000000000000000000000 Industria 00100000000000000000000000000000 buzzwords 00000000000000000000000000000000 Madden 00100000000000000000000000000000 export-related 00000000000000000000000000000000 shadowy 00000000000000000000000000000000 Needless 00100000000110111000111000110010 luminaries 00000000000000000000000000000000 Sentelle 00100000001111010000111010001000 522 00000000000000000000000000000000 Expansion 00100000000111101010111001100111 bedfellows 00000000000000000000000000000000 surfacing 00000000000000000000000000000000 Giroldi 00100000000000000000000000000000 Muzak 00100000000000000000000000000000 Surgeon 00100000000000001010110000110101 Ittleson 00100000000000000000000000000000 litigators 00000000000000000000000000000000 70.7 00000000000000000000000000000000 Lynford 00100000000000000000000000000000 alternatively 00000000000111111000111011101000 anti-depressant 00000000000000000000000000000000 administrations 00000000000111101000000100100011 WHY 01000000000000000000101101000010 Prozac 00100000000000000000000000000000 Stoltz 00100000000000000000000000000000 25.50 00000000000000000000000000000000 plant-science 00000000000000000000000000000000 Walsh 00101111111100101000110010001000 clustered 00000001110001001100010000110010 Ollie 00100000000000101001010100001000 mints 00000000000000000000000000000000 Spurred 00100000010011100111010000110010 abducted 00000000000110110100010000110010 embezzling 00000000000000000000000000000000 protagonist 00000000000000000000000000000000 hospitality 00000000000010110001111010110000 COURT 01000000000000000000000111010101 leapt 00000000000000000000000000000000 mind-set 00000000000000000000000000000000 then-Vice 01000000000000000000000000000000 animal-health 00000000000000000000000000000000 exploding 00000000000010101101010001000000 Mevacor 00100000000000000000000000000000 assassinate 00000000000000000000000000000000 Adopting 00100000000111111010111101000000 twenty 00000000000111101111000011000000 big-selling 00000000000000000000000000000000 squadron 00000000000111001111000001000111 112,000 00000000000000000000000000000000 bumped 00000000000110010001001000110010 273.5 00000000000000000000000000000000 Lieb 00100000000000000000000000000000 angering 00000000000000000000000000000000 575,000 00000000000000000000000000000000 stock-option 00000000000000000000000000000000 edges 00000000000111111001111101100011 Scofield 00100000000000000000000000000000 shipsets 00000000000000000000000000000000 Caspi 00100000000000000000000000000000 333,000 00000000000000000000000000000000 Akerson 00100000000000000000000000000000 amenities 00000000000111110100001010100011 29-year-old 00000000000000000000000000000000 Hovnanian 00100000000000000000000000000000 4.0 00000000000000000000000000000000 condos 00000000000000000000000000000000 Bartlesville 00100000000000000000000000000000 Nob 00100000000000000000000000000000 58.50 00000000000000000000000000000000 electrochemicals 00000000000000000000000000000000 dumps 00000000011101101111000000010010 9.19 00000000000000000000000000000000 severable 00000000000000000000000000000000 outfield 00000000000000000000000000000000 Conlin 00100000000000000000000000000000 stall 00000000000011010110010110110010 industry-government 00000000000000000000000000000000 Morever 00100000000000000000000000000000 condone 00000000000000000000000000000000 build'em 00000000000000000000000000000000 rearing 00000000000000000000000000000000 Ignore 00100000000101011111111110110010 discount-retailing 00000000000000000000000000000000 Brush 00100000000111101101110110110111 354 00000000000000000000000000000000 commenced 00000000000000000000000000000000 fireball 00000000000111000111101010110111 over-40 00000000000000000000000000000000 wreaked 00000000000000000000000000000000 effortlessly 00000000000000000000000000000000 Conservation 00100000000000001000101101100001 jamming 00000000001100001010110001000000 U.S.-Canada 01000000000000000000000000000000 LA 01001111111111111001001101110000 Espre 00100000000000000000000000000000 tellers 00000000000000000000000000000000 fugitives 00000000000000000000000000000000 Hays 00101111111110011100111000001000 Broken 00100000000110110010110000110010 Member 00100000000111111110111100111111 Anaheim 00100000000100110011101001101000 84-6 00000000000000000000000000000000 bundle 00000000000111111111110001011111 HOT 01000000000000010001011010010000 betrayed 00000000111111010001110000110010 irradiated 00000000000000000000000000000000 profligate 00000000000000000000000000000000 rough-and-tumble 00000000000000000000000000000000 duplex 00000000000000000000000000000000 expendable 00000000000000000000000000000000 penthouse 00000000000011111000110100101000 Industrywide 00100000000000010000000100010000 cash-management 00000000000000000000000000000000 234 00000000000000000000000000000000 Ramsey 00100000000000000000000000000000 noncompetitive 00000000000000111000000110110000 postmarked 00000000000000000000000000000000 book-entry 00000000000000000000000000000000 Mondale 00101111111111111000001010001000 Hickey 00100000000000000000000000000000 inadequately 00000000000000000000000000000000 goats 00000000000000000000000000000000 CAPITAL 01000000000000000000000000110001 209,000 00000000000000000000000000000000 mixing 00000000000101000110100001000000 103,000 00000000000000000000000000000000 133.8 00000000000000000000000000000000 underwater 00000000000111101100101010110000 reef 00000000000000000000000000000000 Patricof 00100000000000000000000000000000 Slaughter 00100000000110111011011010100111 Continentals 00100000000000000000000000000000 MPI 01000000000000000000000000000000 ever-present 00000000000000000000000000000000 373 00000000000000000000000000000000 Randol 00100000000000000000000000000000 4.04 00000000000000000000000000000000 pamphlets 00000000000000000000000000000000 Consent 00100000000011000001000101001111 gentler 00000000000000000000000000000000 lathes 00000000000000000000000000000000 metal-forming 00000000000000000000000000000000 Bowker 00100000000000000000000000000000 paraphernalia 00000000000000000000000000000000 93.75 00000000000000000000000000000000 energy-services 00000000000000000000000000000000 mandates 00000001101111001111000000010010 Weichern 00100000000000000000000000000000 1.68 00000000000000000000000000000000 avuncular 00000000000000000000000000000000 10.50 00000000000000000000000000000000 6.625 00000000000000000000000000000000 Offsetting 00100000000000010011011101000000 broadcaster 00000000000110110110011110110101 Vanourek 00100000000000000000000000000000 Sheinberg 00101111111101110101000010001000 1.94 00000000000000000000000000000000 asleep 00000000000000011000010001110010 mega 00000000000011110101011010110000 preferred-share 00000000000000000000000000000000 32.7 00000000000000000000000000000000 shortstop 00000000000000000000000000000000 756 00000000000000000000000000000000 137.6 00000000000000000000000000000000 7.375 00000000000000000000000000000000 consortia 00000000000000000000000000000000 blasted 00000011111011000101010000110010 7.58 00000000000000000000000000000000 seeming 00000000000011111000111000110010 vu 00000000000000000000000000000000 Eckenfelder 00100000000000000000000000000000 810 00000000000000000000000000000000 commercializing 00000000000000000000000000000000 deja 00000000000000000000000000000000 deep-seated 00000000000000000000000000000000 profit-making 00000000000000000000000000000000 hesitant 00000000000111001111110000110010 Inca 00100000000000000000000000000000 355 00000000000000000000000000000000 99.85 00000000000000000000000000000000 amalgamation 00000000000000000000000000000000 Gujarat 00100000000000000000000000000000 Northgate 00100000000000000000000000000000 outcomes 00000000000111001000011000100011 Strait 00100000000111100010011000001111 495 00000000000000000000000000000000 Passive 00100000000001010000011100010000 Usha 00100000000000000000000000000000 Rectifier 00100000000000000000000000000000 Ada 00100000000000000000000000000000 Zurn 00100000000000000000000000000000 unseen 00000000000110110110110000100001 Berra 00100000000010010000111010001000 1990-2004 00000000000000000000000000000000 Scores 00100000000111101110100100101111 204 00000000000000000000000000000000 Jardine 00100001111111101101101000101000 45.66 00000000000000000000000000000000 1,878-page 00000000000000000000000000000000 elites 00000000000000000000000000000000 professionalism 00000000000000000000000000000000 Daniels 00101111111100100000011000001000 Redland 00100000000000000000000000000000 Yogi 00100000000000000000000000000000 JP 01000000000000000000000000000000 Meat 00100000000010111011111010110000 Dentistry 00100000000000000000000000000000 7.282 00000000000000000000000000000000 12.39 00000000000000000000000000000000 Hahnemann 00100000000000000000000000000000 double-A-2 01000000000000000000000000000000 49.6 00000000000000000000000000000000 renovating 00000000000000000000000000000000 0.375 00000000000000000000000000000000 Carey 00101111111111011100001000001000 8.23 00000000000000000000000000000000 8.43 00000000000000000000000000000000 11.625 00000000000000000000000000000000 Jaguar-GM 01000000000000000000000000000000 3.61 00000000000000000000000000000000 hikes 00000000000111110000111110000011 Genel 00100000000000000000000000000000 Eskridge 00100000000000000000000000000000 Gillian 00100000000000000000000000000000 embargoed 00000000000000000000000000000000 Yeah 00100000000111111001111011101000 resentful 00000000000000000000000000000000 impassively 00000000000000000000000000000000 mesh 00000000000000011110010110110010 Commentators 00100000000110000010000010110011 Ninety 00100000000110001111000011000000 insistent 00000000000000000000000000000000 fest 00000000000000000000000000000000 sick-building 00000000000000000000000000000000 Greensboro 00100000000111100011101001101000 collaborate 00000000000000000000000000000000 disturbs 00000000000000000000000000000000 Rhoads 00100000000000000000000000000000 Marmalstein 00100000000000000000000000000000 reconstructing 00000000000000000000000000000000 day-by-day 00000000000000000000000000000000 neurologists 00000000000000000000000000000000 show-biz 00000000000000000000000000000000 Broadcasters 00100000000110110110111000110011 Recession 00100000000111111111101010100111 air-pollution 00000000000000000000000000000000 empowers 00000000000000000000000000000000 Hara 00100000000000000000000000000000 Toney 00100000000000000000000000000000 Lockerbie 00100000000000000000000000000000 9.375 00000000000000000000000000000000 101.4 00000000000000000000000000000000 laundered 00000000000000000000000000000000 17.375 00000000000000000000000000000000 15.9 00000000000000000000000000000000 Jenco 00100000000000000000000000000000 A&P 01000000000000000000000000000000 7.14 00000000000000000000000000000000 stub 00000000000110111010101000100001 Blumstein 00100000000000000000000000000000 441.1 00000000000000000000000000000000 Rosenfeld 00101111110110101000000010001000 underperform 00000000000000000000000000000000 12.95 00000000000000000000000000000000 batches 00000000000000000000000000000000 underperformed 00000000000000000000000000000000 recess 00000000000000011101010001100111 Kalipharma 00100000000000000000000000000000 Surprises 00100000000101000111001000100011 10.14 00000000000000000000000000000000 Growing 00100000000000000001010001000000 Affair 00100000000111101101100011100111 incoming 00000000000000000111000011010000 usability 00000000000000000000000000000000 Mannheim 00100000000000000000000000000000 555 00000000000000000000000000000000 anti-anemia 00000000000000000000000000000000 194,000 00000000000000000000000000000000 SunGard 01000000000000000000000000000000 Gilmartin 00100000000000000000000000000000 7.09 00000000000000000000000000000000 participates 00000000000000000000000000000000 Interco 00100000000111011111101100101000 Maccabee 00100000000000000000000000000000 Heading 00100000000110001110100001000000 99.35 00000000000000000000000000000000 shining 00000000000000000110011010010000 SUNY 01000000000000000000000000000000 hearty 00000000000000000000000000000000 Mile 00100000000111110100100001010000 Welles 00100000000000000000000000000000 MacArthur 01000000000000000000000000000000 Reid 00101111111010001101001000001000 half-time 00000000000000000000000000000000 Sukle 00100000000000000000000000000000 Joey 00100000000000000000000000000000 rages 00000000000000000000000000000000 docudrama 00000000000000000000000000000000 masks 00000000101111001111000000010010 '68 00000000000000000000000000000000 squeamish 00000000000000000000000000000000 contenders 00000000000111111100100110110011 admirer 00000000000000000000000000000000 Wrath 00100000000111111111011000001111 Grapes 00100000000111001011010101100011 exuberance 00000000000000000000000000000000 Reuven 00100000000000000000000000000000 authentic 00000000000010010100110100010000 Cronkite 00100000000000000000000000000000 verse 00000000000000000000000000000000 dramatizations 00000000000000000000000000000000 Alexandrine 00100000000000000000000000000000 scathing 00000000000000000000000000000000 rationalizations 00000000000000000000000000000000 artistry 00000000000000000000000000000000 manic-depressive 00000000000000000000000000000000 misrepresents 00000000000000000000000000000000 Lean 00100000000100100101110110110010 gunship 00000000000000000000000000000000 29.9 00000000000000000000000000000000 sunrise 00000000000001111000110100101000 Philinte 00100000000000000000000000000000 health-products 00000000000000000000000000000000 sporting-goods 00000000000000000000000000000000 Silvers 00100000000000000000000000000000 Nipponese 00100000000000000000000000000000 jealous 00000000010001101011110000110010 Cowan 00100000000000000000000000000000 Alceste 00100000000000000000000000000000 Possibly 00100000000110011101000001110010 messing 00000000101111000110100001000000 ordinances 00000000000000000000000000000000 depicting 00000001011010010000000000001010 profiteers 00000000000000000000000000000000 Henri 00100000000111101110001000011000 uncontrolled 00000000000000000000000000000000 Fung 00100000000000000000000000000000 profiles 00000000001011110010001000100011 Bussieres 00100000000000000000000000000000 Dade 00100000000100001010011010101000 jarring 00000000000000000000000000000000 trickier 00000000000000000000000000000000 Warman 00100000000000000000000000000000 proclamations 00000000000000000000000000000000 disinclined 00000000000000000000000000000000 1.6055 00000000000000000000000000000000 imperfections 00000000000111010000011000100011 141.55 00000000000000000000000000000000 revolutionize 00000000000000000000000000000000 Cattle 00100000000000010001101110110000 Chicagoans 00100000000000000000000000000000 MEATS 01000000000111100111101110110000 Commissions 00100000000111101010100100000011 therapies 00000000000101010000110100100011 LIVESTOCK 01000000000001001111101110110000 526.3 00000000000000000000000000000000 non-Japanese 01000000000000000000000000000000 93.2 00000000000000000000000000000000 Curtis 00101111111110110000000100001000 91.2 00000000000000000000000000000000 Interbank 00100000000001001111001001110010 127.5 00000000000000000000000000000000 underwrites 00000000000000000000000000000000 Thereafter 00100000010010100100010001110010 periphery 00000000000000000000000000000000 redeemable 00000000000000010111100110110000 reassert 00000000000000000000000000000000 Levi 00101111111010000010000100001000 big-city 00000000000000000000000000000000 Nauman 00101111111000000101010110011000 root-canal 00000000000000000000000000000000 detract 00000000000000000000000000000000 clashes 00000000000111111010110000100111 thirty 00000000000111111000111001010000 1.5753 00000000000000000000000000000000 non-daily 00000000000000000000000000000000 Resort 00100000000111101001011000000001 Reinhold 00100000000000000000000000000000 backlit 00000000000000000000000000000000 Ideologues 00100000000000000000000000000000 drawback 00000000000111111100101100010111 adversaries 00000000000111000001110000110011 thickness 00000000000000000000000000000000 annex 00000000000000000000000000000000 Albania 00100000000000000000000000000000 Parkinson 00101111100110101100000010001000 Feeling 00100000000111110101110101100111 Reunification 00100000000001101001110010100111 TI 01000000000000000000000000000000 Browning 00101111111100100011100010001000 Scali 00100000000000000000000000000000 Sloves 00100000000000000000000000000000 Beadleston 00100000000000000000000000000000 Provide 00100000000111110111101110110010 2.03 00000000000000000000000000000000 Vries 00100000000000000000000000000000 Alzheimer 00100000000111011001111110101000 1.89 00000000000000000000000000000000 defense-related 00000000000000000000000000000000 Collectors 00100000000110010010100000110011 Explains 00100000000111111101011111000010 repertoire 00000000000101111001101001100111 overpaying 00000000000110110101110101000000 cross-blending 00000000000000000000000000000000 retainer 00000000000000101011100011000111 Street-style 00100000000000000000000000000000 Lerner 00101111111010101110100010001000 furnish 00000000010101101111101110110010 transmitting 00000000000000000000000000000000 leveled 00000000000111101001001000110010 transplantation 00000000000000000000000000000000 willfully 00000000000000000000000000000000 Courant 00100000000000000000000000000000 zombie 00000000000000000000000000000000 1.5825 00000000000000000000000000000000 searing 00000000000000000000000000000000 ancillary 00000000000000000000000000000000 exploratory 00000000000001000100010100010000 inspiration 00000000000111011101010010111001 Shiseido 00100000000000000000000000000000 5.64 00000000000000000000000000000000 39.7 00000000000000000000000000000000 nuclear-powered 00000000000000000000000000000000 counsels 00000000000111111100101000110011 Canaveral 00100000000000000000000000000000 Probing 00100000000010100101110101000000 AmBase 01000000000000000000000000000000 sugared 00000000000000000000000000000000 Wilkinson 00101111110010000100001000001000 142.70 00000000000000000000000000000000 Meyers 00101111111100110101001000001000 Schaumburg 00100000000000000000000000000000 falsify 00000000000000000000000000000000 Transactions 00100000000111100110010000100111 COKE 01000000000010011110110100101000 perched 00000000000000000000000000000000 thrift-industry 00000000000000000000000000000000 repeals 00000000000000000000000000000000 proclamation 00000000000000000000000000000000 6:30 00000000000000000000000000000000 nonpublic 00000000000001110111000110010000 derring-do 00000000000000000000000000000000 bruising 00000000000000000000000000000000 Safer 00100000000000110101001111000000 15th 00000000000000000000000000000000 27.7 00000000000000000000000000000000 reignite 00000000000000000000000000000000 lower-than-anticipated 00000000000000000000000000000000 Finmeccanica 00100000000000000000000000000000 amortize 00000000000000000000000000000000 Basically 00100000101001000000001001110010 Messina 00100000000000000000000000000000 2.34 00000000000000000000000000000000 bloodied 00000000000000000000000000000000 rods 00000000000111101010101111001001 3.62 00000000000000000000000000000000 Sylmar 00100000000000000000000000000000 295 00000000000000000000000000000000 Frances 00101111111001011000001000011000 Snedeker 00100000000000000000000000000000 Gill 00101111111100100100111000001000 2.5-mile 00000000000000000000000000000000 MACY 01000000000111011101110000001000 protectors 00000000000000000000000000000000 Steinman 00100000000000000000000000000000 ELECTRIC 01000000000000001110010001001000 11.53 00000000000000000000000000000000 information-processing 00000000000000000000000000000000 GENERAL 01000000000111100001001000101000 passable 00000000000000000000000000000000 Victoire 00100000000000000000000000000000 281 00000000000000000000000000000000 Mervyn 00100000000000000000000000000000 1-for-10 00000000000000000000000000000000 Target 00100000000111101011100101100111 Bensonhurst 00100000000000000000000000000000 Emporium 00100000000000000000000000000000 Payment 00100000000111001100100011000111 computer-chip 00000000000000000000000000000000 Trent 00100000000000000000000000000000 A.D. 01000000000000000000000000000000 abetting 00000000000110110111011101000000 Generales 00100000000000000000000000000000 Alleghany 00100000000101000100111100101000 192.5 00000000000000000000000000000000 19.76 00000000000000000000000000000000 pleading 00000000000100000110010000110010 690 00000000000000000000000000000000 NTT 01000000000000000000000000000000 Stahl 00101111111001101110000010001000 technician 00000000000101011011011110110101 Ministers 00100000000000000000100110010101 19-month 00000000000000000000000000000000 Correll 00100000000000000000000000000000 milllion 00000000000000000000000000000000 long-time 00000000000000000000000000000000 Siddeley 00100000000000000000000000000000 Hawker 00100000000000000000000000000000 disarming 00000000000000000000000000000000 attractively 00000000000000000000000000000000 227 00000000000000000000000000000000 straits 00000000000110111000111101100111 plugged 00000000000000000000000000000000 brushing 00000000000000000000000000000000 20.875 00000000000000000000000000000000 ambushed 00000000000000000000000000000000 inter-American 01000000000000000000000000000000 replicating 00000000000000000000000000000000 Aronson 00100000000000000000000000000000 catalytic 00000000000000000000000000000000 46.125 00000000000000000000000000000000 Torres 00100000000000000000000000000000 405.4 00000000000000000000000000000000 pro-active 00000000000000000000000000000000 Brownell 00100000000000000000000000000000 downtrend 00000000000000000000000000000000 bookkeeping 00000000000000000010100011100001 Uhr 00100000000000000000000000000000 40-megabyte 00000000000000000000000000000000 2.59 00000000000000000000000000000000 Hagen 00100000000000000000000000000000 7.12 00000000000000000000000000000000 Supporting 00100000000001111011011101000000 715 00000000000000000000000000000000 7.24 00000000000000000000000000000000 Pathe 00100000000000000000000000000000 Aeroquip 00100000000000000000000000000000 Redstone 00101111111110111010100010001000 stressful 00000000000000000000000000000000 Camera 00100000000101010000101000100001 knee 00000000000111000101110000000001 gas-gathering 00000000000000000000000000000000 Developing 00100000000111110111110001000000 wasting 00000000000001110100100101000000 529 00000000000000000000000000000000 435.5 00000000000000000000000000000000 Sumner 00100000000000000000000000000000 Speculators 00100000000100000001001000110011 constructing 00000000000111101001111101000000 4-for-1 00000000000000000000000000000000 166,900,000 00000000000000000000000000000000 1247.87 00000000000000000000000000000000 2.74 00000000000000000000000000000000 231-191 00000000000000000000000000000000 Addington 00100000000000000000000000000000 incursion 00000000000000000000000000000000 778 00000000000000000000000000000000 1,050 00000000000000000000000000000000 chuckles 00000000000000000000000000000000 Ikegai 00100000000000000000000000000000 sixfold 00000000000000000000000000000000 enriching 00000000000000000000000000000000 Francisco-Oakland 01000000000000000000000000000000 intelligently 00000000000000000000000000000000 Vitulli 00100000000000000000000000000000 rape-and-incest 00000000000000000000000000000000 15.625 00000000000000000000000000000000 42.7 00000000000000000000000000000000 Conte 00100000000000000000000000000000 Gotta 00100000000000000000000000000000 uranium-mining 00000000000000000000000000000000 disinterested 00000000000000000000000000000000 lineups 00000000000000000000000000000000 lectured 00000000000000000000000000000000 Premner 00100000000000000000000000000000 foodstuffs 00000000000000000000000000000000 Testifying 00100000000111100011000001000000 9.83 00000000000000000000000000000000 AuCoin 01000000000000000000000000000000 9.88 00000000000000000000000000000000 S$ 00100000000000000000000000000000 Quek 00100000000000000000000000000000 falters 00000000000000000000000000000000 Png 00100000000000000000000000000000 Grupo 00100000000000000000000000000000 Kwek 00100000000000000000000000000000 1989-1990 00000000000000000000000000000000 McFadden 01000000000000000000000000000000 undone 00000000000000000000000000000000 Guttman 00100000000000000000000000000000 replicate 00000000000000000000000000000000 Staloff 00100000000000000000000000000000 8.36 00000000000000000000000000000000 overhanging 00000000000000000000000000000000 Pamplin 00100000000000000000000000000000 levied 00000011000001001100010000110010 alleviating 00000000000000000000000000000000 indelible 00000000000000000000000000000000 dislocations 00000000000000000000000000000000 paradise 00000000000110101110101100100001 Periodically 00100001001100000000010001110010 verifiable 00000000000000000000000000000000 formulate 00000000110101101111101110110010 97.65 00000000000000000000000000000000 democratization 00000000000111100101110010100111 symmetry 00000000000000000000000000000000 Oldenburg 00100000000000000000000000000000 subskills 00000000000000000000000000000000 fifth-biggest 00000000000000000000000000000000 11th-biggest 00000000000000000000000000000000 best-seller 00000000000000000000000000000000 Notably 00100000000001111011000001110010 croaker 00000000000000000000000000000000 12,500 00000000000000000000000000000000 lookout 00000000000000000000000000000000 Joachim 00100000000000000000000000000000 spawn 00000000000000000000000000000000 blond 00000000000000110101001000110000 sped 00000000000000000000000000000000 Guenter 00100000000000000000000000000000 closeness 00000000000111000101111100100111 averting 00000000000111111001111101000000 spasms 00000000000000000000000000000000 Slotnick 00100000000000000000000000000000 Basket 00100000000111111011011000111111 cage 00000000000100110100000000001000 forums 00000000000000000000000000000000 830 00000000000000000000000000000000 undertook 00000000000100111011000000010010 gall 00000000000000000000000000000000 democratically 00000000000000000000000000000000 internal-security 00000000000000000000000000000000 rumbling 00000000000000000000000000000000 staunchest 00000000000000000000000000000000 99.90 00000000000000000000000000000000 Kass 00100000000000000000000000000000 Pedone 00100000000000000000000000000000 appreciable 00000000000000000000000000000000 paperboard 00000000000010100100011010110000 Mann 00101111111111101001001000001000 Zane 00100000000000000000000000000000 consumer-oriented 00000000000000000000000000000000 Shoney 00100000000000000000000000000000 guiding 00000000000011000100011000010000 indebtedness 00000000000111100110110010110001 585 00000000000000000000000000000000 Teich 00100000000000000000000000000000 hose 00000000000110000110111000000001 blazing 00000000000000000000000000000000 largest-ever 00000000000000000000000000000000 -who 00000000000000000000000000000000 brat 00000000000000000000000000000000 turbogenerator 00000000000000000000000000000000 overlapping 00000000000011000010000000110000 fist 00000000000010011001110000000001 Utrecht 00100000000000000000000000000000 fourthquarter 00000000000000000000000000000000 Mace 00100000000000000000000000000000 283.8 00000000000000000000000000000000 congestion 00000000000100100110011010100111 pilings 00000000000000000000000000000000 disaster-contingency 00000000000000000000000000000000 Pickering 00100000000000000000000000000000 reconstruction 00000000000000000010101101001111 Mehrens 00100000000000000000000000000000 Hollister 00100000000000000000000000000000 Donna 00100000000000000011001000011000 Avedisian 00100000000000000000000000000000 Buyer 00100000000111111110101010110101 coincidental 00000000000000000000000000000000 Bandler 00100000000000000000000000000000 hoses 00000000000000000000000000000000 Byrum 00100000000000000000000000000000 Capitalists 00100000000111101010111011101001 replicated 00000000000000000000000000000000 MIG-1 01000000000000000000000000000000 tiptoe 00000000000000000000000000000000 Beatles 00100000000000000000000000000000 Grano 00100000000000000000000000000000 18.2 00000000000000000000000000000000 57.8 00000000000000000000000000000000 tax-exempts 00000000000000000000000000000000 10:10 00000000000000000000000000000000 2.69 00000000000000000000000000000000 Kakumaru 00100000000000000000000000000000 narrowest 00000000000000000000000000000000 herons 00000000000000000000000000000000 impairment 00000000000000000000000000000000 skids 00000000000000000000000000000000 Centre 00100000000000000110100010100101 misstates 00000000000000000000000000000000 solid-waste 00000000000000000000000000000000 Coverage 00100000000110101110011010100111 Novato 00100000000000000000000000000000 hug 00000000000001000101001010110111 26.875 00000000000000000000000000000000 sauce 00000000000101101010111000000001 Aeronautical 00100000000000000000000000000000 middling 00000000000000000000000000000000 Cher 00100000000000000000000000000000 imagery 00000000000111011101101001100111 respondent 00000000000000000000000000000000 wag 00000000000000000000000000000000 nutritional 00000000000011010001100000110000 Near 00100000000000110000000000001010 petroleum-related 00000000000000000000000000000000 117.3 00000000000000000000000000000000 Bolling 00100000000000000000000000000000 dense 00000000000011101111011010010000 Fabi 00100000000000000000000000000000 Impose 00100000000001011111101110110010 -China 01000000000000000000000000000000 property-casualty 00000000000000000000000000000000 TRADING 01000000000000000000000001011101 befuddled 00000000000000000000000000000000 slackening 00000000000000000000000000000000 170,330,000 00000000000000000000000000000000 44.625 00000000000000000000000000000000 armadillos 00000000000000000000000000000000 Freed 00100001100011010100010000110010 81.50 00000000000000000000000000000000 ULI 01000000000000000000000000000000 129.49 00000000000000000000000000000000 Kasler 00100000000000000000000000000000 Conning 00100000000000000000000000000000 102.625 00000000000000000000000000000000 COTTON 01000000000111110011101110110000 post-quake 00000000000000000000000000000000 5.81 00000000000000000000000000000000 4.47 00000000000000000000000000000000 metrics 00000000000000000000000000000000 well-publicized 00000000000000000000000000000000 mathematician 00000000000110001111011110110101 Luthringshausen 00100000000000000000000000000000 outlying 00000000000000000000000000000000 Ghana 00100000000110100101011101101000 Daggs 00100000000000000000000000000000 Cargill 00100000000011111110111100101000 Vyas 00100000000000000000000000000000 Tator 00100000000000000000000000000000 Tivoli 00100000000000000000000000000000 129 00000000000000000000000000000000 Biaggi 00101111111110111100111010001000 erected 00000001111001001100010000110010 Toms 00100000000000000000000000000000 dislocation 00000000000000000000000000000000 shuts 00000000000000000000000000000000 23.625 00000000000000000000000000000000 psychiatrist 00000000000110011011011110110101 ground-handling 00000000000000000000000000000000 demonstrating 00000000000110110001110101000000 Knoxville 00100000000110010100101001101000 Installation 00100000000111111001111101001111 -will 00000000000000000000000000000000 forbade 00000000000000000000000000000000 sinking-fund 00000000000000000000000000000000 awake 00000000000000000000000000000000 Baa2 00100000000000000000000000000000 Marx 00101111111111001101001000001000 egalitarianism 00000000000000000000000000000000 hypnotized 00000000000000000000000000000000 purported 00000000000010000100011000010000 Q 00100000000000000000000000000000 instructional 00000000000000000000000000000000 15.97 00000000000000000000000000000000 sheepskin 00000000000000000000000000000000 Trivest 00100000000000000000000000000000 Furuta 00100000000000000000000000000000 snorts 00000000000000000000000000000000 Bruner 00100000000000000000000000000000 traumas 00000000000000000000000000000000 culminated 00000000101101000110001000110010 complacency 00000000000111011010110010100111 spans 00000000011111001111000000010010 megabytes 00000000000000000000000000000000 Traverse 00100000000000000000000000000000 Chemex 00100000000000000000000000000000 Comcast 00100000000110101100111100101000 A.F. 01000000000000000000000000000000 screws 00000000000000000000000000000000 Agricola 00100000000000000000000000000000 Immune 00100000000100001011010101010000 Response 00100000000111111111111101010111 Marsam 00100000000000000000000000000000 reclaims 00000000000000000000000000000000 Rival 00100000000001100110101001000000 complication 00000000000000000000000000000000 despair 00000000000111100010111010100111 asylum 00000000000101010000001100100111 Wylie 00100000000000000000000000000000 Princess 00100000000111110010101100100001 Monaco 00100000000110100100111101101000 Alternative 00100000000000000000101100100111 Minimum 00100000000111111100011100010000 skipped 00000000000000000000000000000000 258 00000000000000000000000000000000 enrich 00000000000000000000000000000000 CDBG 01000000000000000000000000000000 Pending 00100000000000001100010001000000 22.50 00000000000000000000000000000000 achieves 00000000000000000000000000000000 24.25 00000000000000000000000000000000 shuttled 00000000000000000000000000000000 bordering 00000000000000000000000000000000 730,070 00000000000000000000000000000000 Moving 00100000000111101001100001000000 face-saving 00000000000000000000000000000000 Must 00100000000000000010010110010010 justifying 00000000000000000000000000000000 stimulation 00000000000000000000000000000000 boycotted 00000000000000000000000000000000 magnet 00000000000011011100100000100001 Aspin 00100000000000011100011010001000 market-oriented 00000000000000000000000000000000 Armenians 00100000000101001100111000110011 16th 00000000000000000000000000000000 Twice 00100000000111101010011011000000 peaking 00000000000111001111000001000000 Ozal 00101111111101101110010010001000 earmark 00000000000000000000000000000000 Lindner 00101111111000111110010010001000 overemphasize 00000000000000000000000000000000 U.S.-built 01000000000000000000000000000000 Eclipse 00100000000000000000000000000000 Reginald 00100000000000000000000000000000 Mayo 00100000001010011000000000001000 near-panic 00000000000000000000000000000000 Emery 00100000000100100001110000001000 unhinged 00000000000000000000000000000000 Sibra 00100000000000000000000000000000 doctorate 00000000000111011001101010100111 ADVERTISING 01000000000000000001101010100001 long-haul 00000000000000000000000000000000 solicitous 00000000000000000000000000000000 widest 00000000000000000000000000000000 McCann 01001111111010011101000100001000 Organic 00100000000010011100101010110000 props 00000000000000000000000000000000 Damage 00100000000111101111001100100111 formidable 00000000000000010000000010010000 top-10 00000000000000000000000000000000 Belier 00100000000000000000000000000000 Laszlo 00100000000000000000000000000000 sympathizers 00000000000110110011110000110011 Todt 00100000000000000000000000000000 155,650,000 00000000000000000000000000000000 Sixty 00100000000110111111000011000000 drown 00000000000000000000000000000000 J'ai 00100000000000000000000000000000 Hecla 00100000000000000000000000000000 earnings-related 00000000000000000000000000000000 butterfly 00000000000000000000000000000000 Corona 00100000000111001100110100101000 Dividend-related 00100000000000000000000000000000 proverbial 00000000000011110000010011010000 Newell 00100000001010001111111100101000 unfair-trade 00000000000000000000000000000000 gripped 00000000000000000000000000000000 ombudsman 00000000000000000000000000000000 retrieval 00000000000000010101100001100001 CF6-6 01000000000000000000000000000000 Pawlowski 00100000000000000000000000000000 capital-spending 00000000000000000000000000000000 X. 00101111111110001100101011011000 Mitsuru 00100000000000000000000000000000 Galveston-Houston 01000000000000000000000000000000 perilously 00000000000000000000000000000000 81%-owned 00000000000000000000000000000000 2,850,000 00000000000000000000000000000000 smokestack 00000000000000000000000000000000 glacial 00000000000000000000000000000000 building-products 00000000000000000000000000000000 304 00000000000000000000000000000000 Candy 00100000000000101011111010110000 subjective 00000000000100001101000000010000 Hemingway 00100000000000000000000000000000 vinyl 00000000001100011100101010110000 checkbook 00000000000000000000000000000000 worksheets 00000000000000000000000000000000 reconstruct 00000000000000000000000000000000 Tilly 00100000000000000000000000000000 plow 00000000011010010110010110110010 applauding 00000000000000000000000000000000 booze 00000000000000000000000000000000 352 00000000000000000000000000000000 Dunde 00100000000000000000000000000000 rebellious 00000000000000000000000000000000 retorts 00000000000000000000000000000000 disparaging 00000000000000000000000000000000 worriers 00000000000000000000000000000000 ice-core 00000000000000000000000000000000 schoolchildren 00000000000111000001111000110011 pianos 00000000000000000000000000000000 Nobuyuki 00100000000000000000000000000000 1900 00000000000000000000000000000000 professionally 00001000011000000000010001110010 Climate 00100000000111111011101001100111 egregious 00000000000000000100110100010000 slinky 00000000000000000000000000000000 technologically 00000000000101101000000001110010 Ravine 00100000000000000000000000000000 WILL 01000000000000000000001110010010 centrifugal 00000000000000000000000000000000 powdered 00000000000000000000000000000000 squaring 00000000000000000000000000000000 chalk 00000000000000000000000000000000 Monthly 00100000000000110101000101010000 egg-breaking 00000000000000000000000000000000 disaster-recovery 00000000000000000000000000000000 sensors 00000000000111101011001111001001 allocations 00000000000111100010111100000011 Takuro 00100000000000000000000000000000 awakened 00000000000000000000000000000000 construction-related 00000000000000000000000000000000 1-to-1 00000000000000000000000000000000 grazing 00000000000010000101100001100001 329 00000000000000000000000000000000 prowl 00000000000000000000000000000000 capturing 00000000000101110011111101000000 rugged 00000000000110111000001000110000 ostensibly 00000000011000001011000001110010 315,000 00000000000000000000000000000000 Kleinaitis 00100000000000000000000000000000 141 00000000000000000000000000000000 180,000 00000000000000000000000000000000 boldly 00000001011000000000010001110010 retention 00000000000000010011101101001111 28.8 00000000000000000000000000000000 986 00000000000000000000000000000000 Farney 00100000000000000000000000000000 most-livable 00000000000000000000000000000000 Bean 00100000000111000100011010110000 82.5 00000000000000000000000000000000 once-cozy 00000000000000000000000000000000 racking 00000000000000000000000000000000 blessed 00000000111011110110010000110010 mechanized 00000000000000000000000000000000 Gayle 00100000000000000000000000000000 originating 00000000000000000000000000000000 McAuley 01000000000000000000000000000000 Eminase 00100000000000000000000000000000 alcoholic 00000000000110001010101010110000 debatable 00000000001001001110010001110010 Sadly 00100000000011001000001001110010 infertility 00000000000000000000000000000000 ranchers 00000000000010101101111000110011 apathetic 00000000000000000000000000000000 fodder 00000000000000011110110000110010 dictates 00000000001111010011000000010010 Clanahan 00100000000000000000000000000000 divisiveness 00000000000000000000000000000000 cost-benefit 00000000000000000000000000000000 infant-mortality 00000000000000000000000000000000 Micronic 00100000000000000000000000000000 mayors 00000000000011001100111000110011 antiviral 00000000000000000000000000000000 Humphries 00100000000000000000000000000000 accorded 00000000000000111100010000110010 Mothers 00100000000110100010011100110011 toughness 00000000000000000000000000000000 somber 00000000000010001101000010010000 Thank 00100000000110111010100110110010 Forest-products 00100000000000000000000000000000 goodness 00000000000111100100111110000001 reappraisal 00000000000000000000000000000000 Ditch 00100000000101010101111010110111 housed 00000000000000011110010000110010 110-lawyer 00000000000000000000000000000000 Bain 00101111111110111111111010101000 4-0 00000000000000000000000000000000 inertia 00000000000110010000100100101000 FORMER 01000000000000000000101001110000 spun-off 00000000000000000000000000000000 PROSECUTOR 01000000000000001001101010110101 ravages 00000000000000000000000000000000 Oprah 00100000000000000000000000000000 Winfrey 00100000000000000000000000000000 Beulah 00100000000000000000000000000000 15.4 00000000000000000000000000000000 JMB 01000000000000000000000000000000 profiteering 00000000000000000000000000000000 unmet 00000000000000011011000110010000 alluded 00000000000000000000000000000000 previews 00000000000000000000000000000000 layers 00000000000110100001000100101111 mistrial 00000000000000000000000000000000 Spruell 00100000000000000000000000000000 Genova 00100000000000000000000000000000 arbitrage-related 00000000000000000000000000000000 documentation 00000000000111010110011010100111 manipulated 00000000110111010100010000110010 Wanted 00100000000111110011101000110010 Heyman 00101111111100001010010010001000 legal-services 00000000000000000000000000000000 SENATE 01000000000000000010101110100101 59.7 00000000000000000000000000000000 618.1 00000000000000000000000000000000 corridors 00000000000100000111111000001111 pales 00000000000000000000000000000000 unclassified 00000000000000000000000000000000 calculators 00000000000000000000000000000000 83.7 00000000000000000000000000000000 21-month 00000000000000000000000000000000 pre-refunded 00000000000000000000000000000000 Hubble 00100000000000000000000000000000 Hueglin 00100000000000000000000000000000 Gabriele 00100000000000000000000000000000 Discovery 00100000000111101100011101001111 Pretl 00100000000000000000000000000000 farm-trade 00000000000000000000000000000000 JURY 01000000000000001001101000010111 11.38 00000000000000000000000000000000 Argus 00100000000111101111100110100001 space-science 00000000000000000000000000000000 skim 00000000000000000000000000000000 Anti-nuclear 00100000000000000000000000000000 binoculars 00000000000000000000000000000000 Aimed 00100000000000000101110100110010 CD-type 01000000000000000000000000000000 tow 00000000000101011010001010110000 highest-yielding 00000000000000000000000000000000 Witman 00100000000000000000000000000000 Advisor 00100000000111110101010110110101 renews 00000000000000000000000000000000 0.07 00000000000000000000000000000000 pad 00000000000010001000100010110111 Io 00100000000000000000000000000000 HOUSE 01000000000000000000100110100101 gravity 00000000001111100101110010100111 inherently 00000000000110111000000001110010 rosier 00000000000000000000000000000000 mobster 00000000000000000000000000000000 cranked 00000000000000000000000000000000 Median 00100000000000101100011100010000 landslides 00000000000000000000000000000000 LAWYERS 01000000000000000111000010110011 year-round 00000000000000000000000000000000 onset 00000000000111111101011100001111 unawareness 00000000000000000000000000000000 insulins 00000000000000000000000000000000 erudite 00000000000000000000000000000000 motor-control 00000000000000000000000000000000 13,120 00000000000000000000000000000000 Bundy 00100000000000000000000000000000 31.9 00000000000000000000000000000000 Disaster 00100000000111100001101101100111 Richmond-Watson 01000000000000000000000000000000 Indianapolis-based 00100000000000000000000000000000 Humulin 00100000000000000000000000000000 6.46 00000000000000000000000000000000 brewery 00000000000111000001111010110000 Novo 00100000000000000000000000000000 2.16 00000000000000000000000000000000 ill-conceived 00000000000000000000000000000000 Himebaugh 00100000000000000000000000000000 enraged 00000000000000000000000000000000 668 00000000000000000000000000000000 822 00000000000000000000000000000000 224.1 00000000000000000000000000000000 Helped 00100000000000000011010000110010 overused 00000000000000000000000000000000 frenzied 00000000000000011010011100010000 bestseller 00000000000000000000000000000000 bookstore 00000000000110101001111010110000 high-pressure 00000000000000000000000000000000 NOTE 01000000000111101111011010110111 thrusting 00000000000110010111001101000000 co-op 00000000000000000000000000000000 0.56 00000000000000000000000000000000 squarely 00000000101000010000010001110010 Negative 00100000000000000010001010010000 Willman 00100000000000000000000000000000 submission 00000000000011011110011010100111 1.66 00000000000000000000000000000000 WHNP 01000000000000000000000000000000 underfunded 00000000000100100000101001000000 sclerosis 00000000000000000000000000000000 examines 00000010110011100011000000010010 on-line 00000000000000000000000000000000 N.M.-based 01000000000000000000000000000000 Freeze 00100000000111111010001010110111 comparably 00000000000000000000000000000000 9.29 00000000000000000000000000000000 169 00000000000000000000000000000000 287 00000000000000000000000000000000 Hibbard 00100000000000000000000000000000 18th-century 00000000000000000000000000000000 Risley 00100000000000000000000000000000 particulars 00000000000000000000000000000000 31.5 00000000000000000000000000000000 Jarvis 00100000000000000000000000000000 breweries 00000000000011101011000000101001 pubs 00000000000010000111110001100011 troughed 00000000000000000000000000000000 Littleboy 00100000000000000000000000000000 blended 00000000000000001110001001000000 176,100,000 00000000000000000000000000000000 degenerated 00000000000000000000000000000000 Differences 00100000000111101111111010100111 Anyway 00100000000001100100010001110010 3,900 00000000000000000000000000000000 deal-making 00000000000000000000000000000000 directions 00000000000101010011001110100011 crook 00000000000000000000000000000000 51.9 00000000000000000000000000000000 irresponsibly 00000000000000000000000000000000 sinister 00000000000000000000000000000000 Percy 00100000000000000000000000000000 Gollust 00100000000000000000000000000000 5.58 00000000000000000000000000000000 trolley 00000000000000000000000000000000 Hardee 00100000000110110101111110101000 Quincy 00101111111011001001000100001000 indecisive 00000000000000000000000000000000 four-hour 00000000000000000000000000000000 Schumacher 00100000000000000000000000000000 PDT 01000000000000000000000000000000 English-speaking 00100000000000000000000000000000 0.50 00000000000000000000000000000000 Paramus 00100000000000000000000000000000 discontinuation 00000000000000000000000000000000 gateway 00000000000111111111100100100001 Scalfaro 00100000000000000000000000000000 decisively 00000000001001000000010001110010 predators 00000000000000000000000000000000 retreats 00000000000000000000000000000000 school-board 00000000000000000000000000000000 Pedroli 00100000000000000000000000000000 Refco 00100000000001001001101000101000 championed 00000000010001000101010000110010 cookies 00000000000111111001111001100011 HEI 01000000000000000000000000000000 62.7 00000000000000000000000000000000 Rendell 00100000000000000000000000000000 air-interdiction 00000000000000000000000000000000 sanitary 00000000000011101100101010110000 childbirth 00000000000000000000000000000000 Kathie 00100000000000000000000000000000 prospered 00000000001000111010110000110010 menus 00000000000000000000000000000000 spine 00000000000110011000110000000001 3.12 00000000000000000000000000000000 gestational 00000000000000000000000000000000 premise 00000000000111110101110000001111 dismay 00000000000100101110111010100111 3.57 00000000000000000000000000000000 317.7 00000000000000000000000000000000 Handicapped 00100000000111111010101000110000 Equities 00100000000111101001011010100001 astonishment 00000000000010001110111010100111 167 00000000000000000000000000000000 753 00000000000000000000000000000000 overtly 00000000000000000000000000000000 83.8 00000000000000000000000000000000 Swift 00100000000000100110011010010000 sensory 00000000000000000000000000000000 recurrence 00000000000111111111000110111111 shortening 00000000000000000000000000000000 guardian 00000000000111110111100100100001 FFr1 01000000000000000000000000000000 appropriateness 00000000000000000000000000000000 Bailit 00100000000000000000000000000000 2013 00000000000000000000000000000000 prior-review 00000000000000000000000000000000 Eurostat 00100000000000000000000000000000 farce 00000000000000000000000000000000 employee-benefit 00000000000000000000000000000000 deepened 00000000000110000110001000110010 Kong-dollar 00100000000000000000000000000000 191.75 00000000000000000000000000000000 knife 00000000000111010101110000000001 Hiroyuki 00100000000000000000000000000000 Wada 00100000000000000000000000000000 reasserting 00000000000000000000000000000000 swallowing 00000000000000000000000000000000 neurosurgeon 00000000000000000000000000000000 27,000 00000000000000000000000000000000 seventh-largest 00000000000000000000000000000000 dumbfounded 00000000000000000000000000000000 ARE 01000000000000000000000100010010 sniffed 00000000000000000000000000000000 intractable 00000000000000001101110100010000 Cheng 00100000000000000000000000000000 HERE 01000000000000010100010001110010 reflexively 00000000000000000000000000000000 Erwin 00100000000000000000000000000000 Aoki 00100000000000000000000000000000 Suggestion 00100000000111111011110000001111 nonproductive 00000000000000000000000000000000 insert 00000001110010111111110110110010 Shaevitz 00100000000000000000000000000000 1938 00000000000000000000000000000000 Check 00100000000111100110001010110111 Ewing 00100000000000000000000000000000 trampled 00000000000000000000000000000000 courtship 00000000000000000000000000000000 Enter 00100000000111111011011110110010 stride 00000000000110110010001000110000 populism 00000000000000000000000000000000 newsprints 00000000000000000000000000000000 breezy 00000000000000000000000000000000 2.09 00000000000000000000000000000000 underprivileged 00000000000000000000000000000000 miscellaneous 00000000000001101111010000110000 Joaquin 00100000000000000000000000000000 Ex-Im 01000000000000000000000000000000 Bankshares 00100000000110100010010000101001 haughty 00000000000000000000000000000000 bluntly 00000000010011000001001001110010 traumatized 00000000000000000000000000000000 13.05 00000000000000000000000000000000 billion-plus 00000000000000000000000000000000 inconvenience 00000000000000000000000000000000 Vietnamese-backed 00100000000000000000000000000000 Mentor 00100000000111110010100100100001 obstructed 00000000000000000000000000000000 2.0 00000000000000000000000000000000 blocker 00000000000000000000000000000000 Lucas 00101111111000100101001000001000 calcium 00000000000111111010110000100001 Procardia 00100000000000000000000000000000 multiplied 00000000000010111010110000110010 41.76 00000000000000000000000000000000 Nowak 00100000000000000000000000000000 527.39 00000000000000000000000000000000 Norbert 00100000000000000000000000000000 Braeuer 00100000000000000000000000000000 Hessische 00100000000000000000000000000000 reappraised 00000000000000000000000000000000 673 00000000000000000000000000000000 Girozentrale 00100000000000000000000000000000 9.324 00000000000000000000000000000000 628 00000000000000000000000000000000 664 00000000000000000000000000000000 15.80 00000000000000000000000000000000 723 00000000000000000000000000000000 hallway 00000000000000000000000000000000 10.03 00000000000000000000000000000000 reappraise 00000000000000000000000000000000 1993-2009 00000000000000000000000000000000 Chao 00100000000000000000000000000000 inaccessible 00000000000000000000000000000000 owl 00000000000000000000000000000000 higher-than-expected 00000000000000000000000000000000 Fueling 00100000000001010111011101000000 Mazowiecki 00100000000000000000000000000000 Viewers 00100000000011100000111000110011 cheering 00000000000000101110101001000000 keyboards 00000000000000000000000000000000 5.83 00000000000000000000000000000000 pay-cable 00000000000000000000000000000000 Brake 00100000000010001010110110110111 Biggest 00100000000000000001110011010000 mayonnaise 00000000000000000000000000000000 3:25 00000000000000000000000000000000 Duck 00100000000000010001110100100001 Backed 00100000000010001111010000110010 162.1 00000000000000000000000000000000 2.01 00000000000000000000000000000000 astride 00000000000000000000000000000000 GR8FLRED 01000000000000000000000000000000 sunglasses 00000000000100101100111001100011 melanin 00000000000000000000000000000000 1:11 00000000000000000000000000000000 9.34 00000000000000000000000000000000 Beddall 00100000000000000000000000000000 Clairol 00100000000000000000000000000000 overbid 00000000000000000000000000000000 rankings 00000000000111101010100000100011 spender 00000000000000000000000000000000 Tadeusz 00100000000000000000000000000000 55th 00000000000000000000000000000000 Diego-based 00100000000000000000000000000000 dissented 00000000111111011110001000110010 SF 01000000000000000000000000000000 11:59 00000000000000000000000000000000 Biosource 00100000000000000000000000000000 Stals 00100000000000000000000000000000 Moscom 00100000000000000000000000000000 Westminister 00100000000000000000000000000000 Events 00100000000111111111101010100011 funeral 00000000000111110100100000100001 jelled 00000000000000000000000000000000 non-executive 00000000000000000000000000000000 wielding 00000000000111110100100101000000 overcomes 00000000000000000000000000000000 flatness 00000000000000000000000000000000 56.1 00000000000000000000000000000000 incense 00000000000000000000000000000000 much-publicized 00000000000000000000000000000000 inventors 00000000000000000000000000000000 last-place 00000000000000000000000000000000 parting 00000000000000000000000000000000 premiering 00000000000000000000000000000000 distract 00000000000010011011101110110010 championships 00000000000000101011010111111001 nonoperating 00000000000000000000000000000000 81.9 00000000000000000000000000000000 trench 00000000000000000000000000000000 spoiler 00000000000000000000000000000000 Audi 00100000000000010011111100001000 Scorpios 00100000000000000000000000000000 Lincoln-Mercury 01000000000000000000000000000000 30.84 00000000000000000000000000000000 Watsonville 00100000000000000000000000000000 disaffected 00000000000000000000000000000000 Salespeople 00100000000001000100000000110011 sciences 00000000000000000010100001001001 CIM 01000000000000000000000000000000 shoo-in 00000000000000000000000000000000 3.26 00000000000000000000000000000000 Pershare 00100000000000000000000000000000 Beauty 00100000000111001011111010110000 anti-white 00000000000000000000000000000000 Cheers 00100000000100100111110101100011 Anchorage 00100000000101110011111001101000 search-and-seizure 00000000000000000000000000000000 contacting 00000000000000000000000000000000 0.89 00000000000000000000000000000000 non-trade 00000000000000000000000000000000 WHAT 01000000000000000001101101000010 275,000 00000000000000000000000000000000 Outokumpu 00100000000000000000000000000000 46.8 00000000000000000000000000000000 soonest 00000000000000000000000000000000 Auditors 00100000000101001010101010110011 pruning 00000000000000000000000000000000 Takes 00100000000010001011000000010010 Curiously 00100000000111100100111011101000 laughingstock 00000000000000000000000000000000 642 00000000000000000000000000000000 conceive 00000000000000000000000000000000 Brockville 00100000000000000000000000000000 jack 00001111111000000001011010011000 Peasant 00100000000000101000101000110000 Basketball 00100000000000001001001100100001 segregate 00000000000000000000000000000000 mightily 00000000000000000000000000000000 3.875 00000000000000000000000000000000 disgust 00000000000000000000000000000000 sows 00000000000000000000000000000000 hour-long 00000000000000000000000000000000 Francaises 00100000000000000000000000000000 vaguely 00000000100101101000000001110010 exclusionary 00000000000000000000000000000000 Transvaal 00100000000000000000000000000000 disgusted 00000000000000000000000000000000 Bourses 00100000000100100000110011100011 crookery 00000000000000000000000000000000 initialing 00000000000000000000000000000000 six-foot 00000000000000000000000000000000 telexes 00000000000000000000000000000000 peruse 00000000000000000000000000000000 Elf 00100000000101010111110110101000 Aquitaine 00100000000010101010001010101000 Conradies 00100000000000000000000000000000 Eavesdropping 00100000000000000000000000000000 HelmsleySpear 01000000000000000000000000000000 appreciates 00000010001010000011000000010010 budget-priced 00000000000000000000000000000000 localized 00000000000000000000000000000000 38.7 00000000000000000000000000000000 54.3 00000000000000000000000000000000 airs 00000000000011101111000000010010 Veritrac 00100000000000000000000000000000 276,334 00000000000000000000000000000000 clarifying 00000000000000000000000000000000 verify 00000000000111001100011110110010 compressed 00000000001111110101101001000000 Donnelly 00101111111100110110100010001000 Counter 00100000000111111011110110110010 Spy 00100000000100001000001010110000 32.125 00000000000000000000000000000000 Elgin 00100000000111101111000100101000 335 00000000000000000000000000000000 reproductive 00000000000000000000000000000000 Dutch-based 00100000000000000000000000000000 conditionally 00000000000000000000000000000000 microbes 00000000000000000000000000000000 Bacillus 00100000000000000000000000000000 subtilis 00000000000000000000000000000000 654 00000000000000000000000000000000 showings 00000000000000000000000000000000 Siemienas 00100000000000000000000000000000 infidelity 00000000000000000000000000000000 Lordstown 00100000000000000000000000000000 confederation 00000000000111101101111000001111 sprays 00000000000000000000000000000000 beeping 00000000000000000000000000000000 two-party 00000000000000000000000000000000 scenic 00000000000000000000000000000000 highest-volume 00000000000000000000000000000000 bridging 00000000000000000000000000000000 Jasper 00100000000000000000000000000000 eavesdropping 00000000000000000000000000000000 ACLU 01000000000000000000000000000000 video-viewing 00000000000000000000000000000000 Declaration 00100000000111101100001011100111 correcting 00000000000101110011011101000000 DeGol 01000000000000000000000000000000 breached 00000000000011011011111001000000 Reno 00100000000111000001101001101000 supervises 00000000000011011101000000010010 furiously 00000000000000000000000000000000 capping 00000000000000000000000000000000 Missile 00100000000000000010001010110000 self-aggrandizing 00000000000000000000000000000000 roustabout 00000000000000000000000000000000 Ong 00100000000000000000000000000000 three-foot 00000000000000000000000000000000 Dang 00100000000000000000000000000000 Eye 00100000000101111111111001100111 salesperson 00000000000000000000000000000000 desolate 00000000000000000000000000000000 Appel 00100000000000000000000000000000 weekends 00000000000101001010111001100011 draconian 00000000000000000000000000000000 drillers 00000000000000000000000000000000 pointless 00000000000000000000000000000000 crust 00000000000000000000000000000000 wallets 00000000000000000000000000000000 full-power 00000000000000000000000000000000 flapping 00000000000000000000000000000000 nuclear-power 00000000000000000000000000000000 911 00000000000000000000000000000000 Basil 00100000000111111100001000011000 garden-variety 00000000000000000000000000000000 Cremonie 00100000000000000000000000000000 307 00000000000000000000000000000000 Ads 00100000000111101111000101100011 gene-splicing 00000000000000000000000000000000 transmitter 00000000000000000000000000000000 predictability 00000000000000000000000000000000 Rothman 00101111111100110101000010001000 Zaves 00100000000000000000000000000000 veritable 00000000000000000000000000000000 bottomless 00000000000000000000000000000000 1.5920 00000000000000000000000000000000 Marchand 00100000000000000000000000000000 hauling 00000000000011101010110001000000 Fighting 00100000000111001011110101000000 kingpin 00000000000000000000000000000000 hostilities 00000000000101110111111010100111 Falkland 00100000000000000000000000000000 lower-priority 00000000000000000000000000000000 Hisham 00101111111010100110000010011000 Secretary-General 01000000000000000000000000000000 Dissident 00100000000000100000101000110000 BONDS 01000000000111101101100010000111 STOCKS 01000000000111101110111011100011 shareholder-owned 00000000000000000000000000000000 self-imposed 00000000000000000000000000000000 bury 00000000000011001011111110110010 toured 00000010001101000101010000110010 Accident 00100000000111101101111001100111 Gabele 00100000000000000000000000000000 J 00100000000000000000000000000000 clarifications 00000000000000000000000000000000 advancer 00000000000000000000000000000000 Zimbabwe 00100000000111011001011101101000 Rayon 00100000000000000000000000000000 vector 00000000000000000000000000000000 Sniper 00100000000000011100110000000001 Dobson 00101111111000110111110001001000 foreman 00000000000000100110000000001000 Shimizu 00100000000111010010110000001000 criticizing 00000000000001100001001101000000 2,360 00000000000000000000000000000000 Yoshiaki 00100000000000000000000000000000 stifling 00000000000011101101010001000000 3.97 00000000000000000000000000000000 Farooquee 00100000000000000000000000000000 Kadane 00100000000000000000000000000000 111.48 00000000000000000000000000000000 fade 00000000001101111101010110110010 lore 00000000000000000000000000000000 inflicted 00000000111001001100010000110010 inspirational 00000000000000000000000000000000 1988-89 00000000000000000000000000000000 fertile 00000000000001010001000010010000 toad 00000000000000000000000000000000 320.5 00000000000000000000000000000000 Aegis 00100000000111100111111000010000 129.6 00000000000000000000000000000000 McAllen 01000000000000000000000000000000 less-serious 00000000000000000000000000000000 kilograms 00000000000000000000000000000000 50.5 00000000000000000000000000000000 cross-connect 00000000000000000000000000000000 booms 00000000000000000000000000000000 Civilization 00100000000111111001010010100111 114.4 00000000000000000000000000000000 thermal 00000000000101011100101010110000 PROPERTIES 01000000000110101101110000001001 holes 00000000000111101110000001100011 Sonet 00100000000000000000000000000000 dwelling 00000000000000000000000000000000 CARE 01000000000010000110010110111001 359 00000000000000000000000000000000 Electricity 00100000000000001100010000100001 Pride 00100000000111011110110010100111 22.9 00000000000000000000000000000000 29.8 00000000000000000000000000000000 UAP 01000000000000000000000000000000 Thacher 00100000000000000000000000000000 insane 00000000000000000000000000000000 Soundview 00100000000000000000000000000000 transplanting 00000000000000000000000000000000 Product 00100000000000001010011000100001 buttoned-down 00000000000000000000000000000000 Wachtell 00101111111111111110010000101000 11:30 00000000000000000000000000000000 Sunshine 00100000000111001111000100101000 relocated 00000000000000000000000000000000 cowboys 00000000000000001010000100000001 roast 00000000000000000000000000000000 Perth 00100000000000000111111001101000 brag 00000000000000000000000000000000 Archive 00100000000000000000000000000000 181 00000000000000000000000000000000 mansions 00000000000000000000000000000000 prejudices 00000000000000000000000000000000 Southfield 00100000000000000000000000000000 swells 00000000000000010110010101100011 Ashtabula 00100000000000000000000000000000 marriages 00000000001010000101110101100011 Remaining 00100000000001000000010011010000 over-allotment 00000000000000000000000000000000 scientifically 00000000000000000000000000000000 money-laundering 00000000000000000000000000000000 funneling 00000000000101011101111101000000 fictitious 00000000000000111101000000010000 heredity 00000000000000000000000000000000 Easterners 00100000000000000000000000000000 Racial 00100000000000001000000000110000 disc 00000000000010010100001000100001 starvation 00000000000000000000000000000000 non-communists 00000000000000000000000000000000 buyouts 00000000000000010101000111001111 Ignacio 00100000000000000000000000000000 framing 00000000000000000000000000000000 complicates 00000011101110000011000000010010 Penh 00100000000000000000000000000000 pep 00000000000000000110000000100001 Phnom 00100000000000000000000000000000 Preliminary 00100000000000000001001100010000 quits 00000000110101011110001000110010 pediatrician 00000000000000000000000000000000 unaffected 00000000101110000001110000110010 rescission 00000000000000000000000000000000 0.0108 00000000000000000000000000000000 Claimants 00100000000111110101100110110011 compulsions 00000000000000000000000000000000 unworkable 00000000000000000000000000000000 Expo 00100000000000000000000000000000 Hit 00100000000111001010010110110010 formality 00000000000000000000000000000000 clearances 00000000000111011101000100100111 645,000 00000000000000000000000000000000 undergraduate 00000000000010100100110100010000 furthermore 00000000000111111100101011101000 yearlong 00000000000001000101000000010000 Menell 00100000000000000000000000000000 senatorial 00000000000000000000000000000000 empirical 00000000000000000000000000000000 Spahr 00100000000000000000000000000000 Bugs 00100000000111111011010101100011 first-term 00000000000000000000000000000000 powerless 00000000000000000000000000000000 compensated 00000000001101011110110000110010 tiptoed 00000000000000000000000000000000 confers 00000000000000000000000000000000 Gelman 00100000000000000000000000000000 redraw 00000000001000010111111110110010 1932 00000000000000000000000000000000 major-party 00000000000000000000000000000000 166.9 00000000000000000000000000000000 witching 00000000000000011000010101010000 consumer-price 00000000000000000000000000000000 J&L 01000000000000000000000000000000 Treasury-bond 00100000000000000000000000000000 Meltzer 00100000000000000000000000000000 primed 00000000000000000000000000000000 startup 00000000000000000000000000000000 Sulzberger 00100000000000000000000000000000 glimpse 00000000000111110101101000111111 5.29 00000000000000000000000000000000 Arlen 00100000000000000000000000000000 retrial 00000000000000000000000000000000 Aloe 00100000000000000000000000000000 Garn 00101111111100111000111010001000 Regulation 00100000000101001110011010100111 reconfirmation 00000000000000000000000000000000 Marcia 00100000000000000000000000000000 Blacks 00100000000111101010111000110011 LLerena 01000000000000000000000000000000 heterogeneous 00000000000000000000000000000000 Fogg 00100000000000000000000000000000 checkpoints 00000000000000000000000000000000 open-door 00000000000000000000000000000000 drills 00000000000000000000000000000000 confiscating 00000000000000000000000000000000 zero-sum 00000000000000000000000000000000 1986-87 00000000000000000000000000000000 Masaki-Schatz 01000000000000000000000000000000 plague 00000001010100111111110110110010 preparedness 00000000000000000000000000000000 Hixson 00100000000000000000000000000000 Henley 00100000000001111011010100101000 Tort 00100000000001100001000000110000 LaFalce 01001111111111001011111010001000 Plaintiffs 00100000000111110110100110110011 Bronson 00100000000000000000000000000000 fully-diluted 00000000000000000000000000000000 stipulates 00000000000000000000000000000000 enrollees 00000000000000000000000000000000 in-store 00000000000000000000000000000000 Regardless 00100000000111111110101000101111 public-interest 00000000000000000000000000000000 Ports 00100000000111100111110001100011 doling 00000000000000000000000000000000 floral 00000000000000000000000000000000 Chesley 00100000000000000000000000000000 Drivon 00100000000000000000000000000000 20.42 00000000000000000000000000000000 5.11 00000000000000000000000000000000 13.71 00000000000000000000000000000000 tidbits 00000000000000000000000000000000 preserves 00000000000000000000000000000000 entertainers 00000000000000000000000000000000 thanked 00000000000000000000000000000000 satellites 00000000000000001011101001100011 O'Dwyer 01000000000000000000000000000000 Dornan 00100000000000000000000000000000 Steelmakers 00100000000111101111000001110011 bookstores 00000000000111001011110001100011 automakers 00000000000000000000000000000000 stocking 00000000000000000000000000000000 outsized 00000000000000000000000000000000 Alter 00100000000111110000111110110010 Anticipating 00100000000111110110110101000000 Congo 00100000000000000000000000000000 Hersly 00100000000000000000000000000000 43.75 00000000000000000000000000000000 Sailing 00100000000001100111000001000000 Chanel 00100000000000000000000000000000 skipper 00000000000000000000000000000000 ceremonial 00000000000100110001000000010000 assassinated 00000000000000000000000000000000 Yacht 00100000000111000111101100100001 Dublin 00100000000100110111101001101000 handwriting 00000000000000100001110000000001 greenhouses 00000000000000000000000000000000 Bishop 00101111111101011010000000001000 balance-sheet 00000000000000000000000000000000 demolishing 00000000000000000000000000000000 attributing 00000000000000000000000000000000 Got 00100000000011111011000000010010 Hotline 00100000000000000000000000000000 Davy 00100000000000000000000000000000 Sanderson 00100000000000000000000000000000 Whirlpool 00100000001111111111111100101000 lieutenant 00000000001000010111111000101000 frigates 00000000000000000000000000000000 Characters 00100000000101101111110101100011 deadwood 00000000000000000000000000000000 monied 00000000000000000000000000000000 prohibitions 00000000000111001010100100100111 poisons 00000000000000000000000000000000 OFFICIALS 01000000000000000000000100010101 multilayer 00000000000000000000000000000000 texture 00000000000000000000000000000000 Insisting 00100000000110001101111010000010 146.8 00000000000000000000000000000000 home-improvement 00000000000000000000000000000000 random-access 00000000000000000000000000000000 gloss 00000000000111010110110010110111 361,000 00000000000000000000000000000000 Bachman 00100000000000000000000000000000 Liddle 00100000000000000000000000000000 Newcomb 00100000000000000000000000000000 senders 00000000000000000000000000000000 categorized 00000000000000000000000000000000 mutation 00000000000000000000000000000000 Lens 00100000000001000100001000100001 Kodansha 00100000000000000000000000000000 hardcore 00000000000000000000000000000000 Golomb 00100000000000000000000000000000 Francisco-area 00100000000000000000000000000000 Goodwin 00100000000000000000000000000000 dome 00000000000111111011010100101000 Thing 00100000000111111101101100010111 Watertown 00100000000000000000000000000000 Hartwell 00100000000000000000000000000000 Bloomington 00100000000111001011101001101000 SoftLetter 01000000000000000000000000000000 philosophic 00000000000000000000000000000000 birthplace 00000000000000000000000000000000 rests 00000000000000110000100000110010 Tarter 00100000000000000000000000000000 Desktop 00100000000101011000010000110000 Goodfellow 00100000000000000000000000000000 M.A. 01000000000000000000000000000000 Naples 00100000000100000001101001101000 4.80 00000000000000000000000000000000 semi-annually 00000000000000000000000000000000 Callable 00100000000101100110110000110010 72-year-old 00000000000000000000000000000000 patriarch 00000000000000000000000000000000 0.75 00000000000000000000000000000000 Krutchensky 00100000000000000000000000000000 persecution 00000000000000000000000000000000 Sequa 00100000001010111010111100101000 checkbooks 00000000000000000000000000000000 anti-American 01000000000000000000000000000000 comprised 00000000001100101011110000110010 Eaux 00100000000000000000000000000000 428 00000000000000000000000000000000 swoop 00000000000000000000000000000000 12.50 00000000000000000000000000000000 loot 00000000000000000000000000000000 auspices 00000000000111101011011000001111 Ticor 00100000000000000000000000000000 Cuisine 00100000000011011010110100000001 Kafka 00100000000000000000000000000000 Tolstoy 00100000000000000000000000000000 cross-ownership 00000000000000000000000000000000 resurrected 00000000000000000000000000000000 liquids 00000000000110111101100001100001 blini 00000000000000000000000000000000 right-to-lifers 00000000000000000000000000000000 single-issue 00000000000000000000000000000000 Stelzer 00100000000000000000000000000000 Mahe 00100000000111101010010010110000 defected 00000000000100101011101000110010 unimportant 00000000000000000000000000000000 waffle 00000000000000000000000000000000 20-minute 00000000000000000000000000000000 monopolized 00000000000000000000000000000000 absolutism 00000000000000000000000000000000 consistency 00000000000110101011110010100111 flag-burning 00000000000000000000000000000000 discomfort 00000000000100111010111010100111 loops 00000000000000000000000000000000 Wirthlin 00100000000000000000000000000000 44,877 00000000000000000000000000000000 squinting 00000000000000000000000000000000 Kegler 00100000000000000000000000000000 Wheels 00100000000111101100110101100011 Barbie 00100000000111001101101100100001 demoted 00000000000000000000000000000000 Joanne 00100000000000000000000000000000 sampled 00000000000000000000000000000000 Newsom 00100000000000000000000000000000 Pymm 00100000000000011011101100101000 well-stated 00000000000000000000000000000000 306.6 00000000000000000000000000000000 endangerment 00000000000000000000000000000000 poetry 00000000001101100101110010100111 rushes 00000000000000000000000000000000 pre-empt 00000000000000000000000000000000 Holtzman 00100000000000000000000000000000 Vesoft 00100000000000000000000000000000 luxurious 00000000000000000000000000000000 pollen-inhibiting 00000000000000000000000000000000 39.2 00000000000000000000000000000000 scapegoat 00000000000000000000000000000000 11.60 00000000000000000000000000000000 shoving 00000000000000000000000000000000 Select 00100000000111100110010110110000 U.S.-U.S.S.R. 01000000000000000000000000000000 convening 00000000000000000000000000000000 foray 00000000000110001111110001100111 Zhao 00101111111100101010000100001000 perils 00000000000101111111011000001111 flocking 00000000000000000000000000000000 345-47 00000000000000000000000000000000 Toward 00100000000000000001000000001010 doubles 00000000000111111010011011000000 constitutionally 00000000110100101000000001110010 ball-bearing 00000000000000000000000000000000 Hans-Dietrich 01000000000000000000000000000000 run-down 00000000000000000000000000000000 Disabled 00100000000110111010101000110000 15.72 00000000000000000000000000000000 10.35 00000000000000000000000000000000 complacent 00000000000000111111110000110010 holdouts 00000000000000000000000000000000 Respect 00100000000110111110000110110010 Knowledgeable 00100000000101001111110000110010 roadbed 00000000000000000000000000000000 830,000 00000000000000000000000000000000 rivers 00000000000101011110000000001000 footwear 00000000000010011011111010110000 368.4 00000000000000000000000000000000 Booker 00100000000000000000000000000000 Rifle 00100000000000100100100000100001 Shareholder 00100000000000000000111100010000 simulates 00000000101010110001000000010010 783 00000000000000000000000000000000 2.66 00000000000000000000000000000000 99.9 00000000000000000000000000000000 Sebastian 00100000000000000000000000000000 453 00000000000000000000000000000000 293 00000000000000000000000000000000 73.5 00000000000000000000000000000000 refuted 00000000000000000000000000000000 prerogative 00000000000000000000000000000000 made-for-TV 01000000000000000000000000000000 porcelain 00000000000000000000000000000000 WTXF 01000000000000000000000000000000 debtholders 00000000000000000000000000000000 piped 00000000000000000000000000000000 deep-pocketed 00000000000000000000000000000000 wiring 00000000000110100101110000100001 102.1 00000000000000000000000000000000 militarily 00000000001010001000000001110010 Questioned 00100000000111101101010000110010 sunlight 00000000000111111110110000100001 takers 00000000000000000010000010100011 inferences 00000000000000000000000000000000 Dyer 00100000000000000000000000000000 plurality 00000000000000000000000000000000 ineffectual 00000000000000000000000000000000 Curtin 00100000000000000000000000000000 clip 00000000000111101110011001000111 reinvigorate 00000000000110010100111110110010 Rodrigo 00100000000000000000000000000000 adroitly 00001100110000000000010001110010 wracked 00000000000000000000000000000000 isthmus 00000000000000000000000000000000 Spirit 00100000000100111111111000001111 accommodation 00000000000101001111111001100111 prolong 00000000000010100110111110110010 communiques 00000000000000000000000000000000 Visiting 00100000000000100110101001000000 278 00000000000000000000000000000000 Tela 00100000000000000000000000000000 Castillo 00100000000000000000000000000000 originates 00000000000000000000000000000000 characteristics 00000000000111100011100100101111 academe 00000000000000000000000000000000 relinquishing 00000000000000000000000000000000 13.32 00000000000000000000000000000000 cafe 00000000000110001110010100000001 jocks 00000000000000000000000000000000 vignettes 00000000000000000000000000000000 Jacoboski 00100000000000000000000000000000 plains 00000000000000000000111110100101 gaze 00000000000000000000000000000000 prickly 00000000000000000000000000000000 bordered 00000000000000000000000000000000 73-year-old 00000000000000000000000000000000 Camilo 00100000000000000000000000000000 lied 00000000001101101011101000110010 Findlay 00100000000000000000000000000000 208.7 00000000000000000000000000000000 athlete 00000000000111001011111001100111 slapping 00000000000001011001001101000000 Sophomore 00100000000000000000000000000000 Playing 00100000000001001110100001000000 Hutchison 00100000000111010001000100001000 miffed 00000000000000000000000000000000 Kinney 00100000000000000000000000000000 exhaustion 00000000000000000000000000000000 Hawley 00101111111111000000010000101000 66-year-old 00000000000000000000000000000000 Somehow 00100000100100000000001001110010 ho-hum 00000000000000000000000000000000 rumblings 00000000000000000000000000000000 abstained 00000000000111101110001000110010 college-sports 00000000000000000000000000000000 Strum 00100000000000000000000000000000 helpless 00000000000000000000000000000000 Calvi 00100000000000000000000000000000 hawking 00000000000000000100000010000000 Milano 00100000000000000000000000000000 computer-servicing 00000000000000000000000000000000 medical-products 00000000000000000000000000000000 arguably 00000000000111000000001001110010 Geeks 00100000000000000000000000000000 53.2 00000000000000000000000000000000 17.73 00000000000000000000000000000000 accrual 00000000000000100001101100100111 SNET 01000000000000000000000000000000 Suhler 00100000000000000000000000000000 433 00000000000000000000000000000000 Leonid 00100000000000000000000000000000 Queensland 00100000000000011111111001101000 Shaw-Walker 01000000000000000000000000000000 attendees 00000000000000000000000000000000 Contact 00100000000110011110110000100111 7.43 00000000000000000000000000000000 nerds 00000000000000000000000000000000 thinning 00000000000000000000000000000000 fragment 00000000000000000000000000000000 renounced 00000000000000000000000000000000 numerical 00000000001011000010000000110000 Bernie 00100000000000000000000000000000 graceful 00000000000000000000000000000000 statesmen 00000000000000000000000000000000 Kahn 00101111111011101110100010001000 geeks 00000000000000000000000000000000 Ramtron 00100000000000000000000000000000 restating 00000000000000000000000000000000 procrastination 00000000000000000000000000000000 nerdy 00000000000000000000000000000000 screwball 00000000000000000000000000000000 Yew 00100000000000000000000000000000 Papers 00100000000110100110001000100011 Playback 00100000000000000000000000000000 266.2 00000000000000000000000000000000 noses 00000000000101100100111101100011 first-three 00000000000000000000000000000000 Jaime 00101111111001000101001010011000 Krysalis 00100000000000000000000000000000 pre-1967 00000000000000000000000000000000 unifying 00000000000000000000000000000000 atomic 00000000000111101001110000110000 hometown 00000000000111110101011110000001 pollinated 00000000000000000000000000000000 psychobiology 00000000000000000000000000000000 Hopefully 00100000000101101101000001110010 Gradison 00100000000000000000000000000000 AEP 01000000000000000000000000000000 attain 00000000011000111011111110110010 veracity 00000000000000000000000000000000 antithetical 00000000000000000000000000000000 tax-writers 00000000000000000000000000000000 Thevenot 00100000000000000000000000000000 Harrington 00101111111101110010100010001000 46.5 00000000000000000000000000000000 Referring 00100000000111111101111000110010 tug 00000000000111110001001000111111 Items 00100000000111101111101010100011 1.6030 00000000000000000000000000000000 pineapple 00000000000000000000000000000000 sulfur 00000000000100011100101010110000 collectibles 00000000000000000000000000000000 Hackensack 00100000000000000000000000000000 pollinate 00000000000000000000000000000000 Real-estate 00100000000000000000000000000000 Ente 00100000000000000000000000000000 Idrocarburi 00100000000000000000000000000000 male-fertile 00000000000000000000000000000000 high-octane 00000000000000000000000000000000 Reviglio 00100000000000000000000000000000 monoliths 00000000000000000000000000000000 wider-than-expected 00000000000000000000000000000000 Refuge 00100000000101100110110110111001 sow 00000000000000000000000000000000 ever-greater 00000000000000000000000000000000 hardships 00000000000000000000000000000000 scout 00000000000000000010100110110111 patched 00000000000000000000000000000000 246.6 00000000000000000000000000000000 double-A-3 01000000000000000000000000000000 Lubar 00100000000000000000000000000000 weighting 00000000000111010011101110100111 commentaries 00000000000000000000000000000000 Germeten 00100000000000000000000000000000 sandwiched 00000000000000000000000000000000 clumps 00000000000000000000000000000000 pristine 00000000000000000000000000000000 Abalkin 00100000000000000000000000000000 simulate 00000000000000000000000000000000 bolder 00000000000001101100001111000000 maximizing 00000000000110111011011101000000 abounded 00000000000000000000000000000000 alienate 00000000010000100011111110110010 Mexicanos 00100000000000000000000000000000 '71 00000000000000000000000000000000 Caere 00100000000000000000000000000000 ransom 00000000000100101110000000001000 Jeremiah 00100000000000000000000000000000 gamut 00000000000000000000000000000000 4,346 00000000000000000000000000000000 86.3 00000000000000000000000000000000 PRICES 01000000000000000000000110000111 Presidency 00100000000111110011000001100111 Telzrow 00100000000000000000000000000000 5.04 00000000000000000000000000000000 Guerin 00100000000000000000000000000000 notoriety 00000000000000000000000000000000 Matchett 00100000000000000000000000000000 Affiliates 00100000000111101101101010110011 334.5 00000000000000000000000000000000 O&Y 01000000000000000000000000000000 291,890 00000000000000000000000000000000 98.5 00000000000000000000000000000000 ingot 00000000000111110011001110110000 Number 00100000000111111111111010111111 influencing 00000000000011100011011101000000 hood 00000000010111101110000000001000 Percent 00100000000000000011100001010000 lurking 00000000000000000000000000000000 domino 00000000000000000000000000000000 small-scale 00000000000000000000000000000000 99,000 00000000000000000000000000000000 Candid 00100000000001100101010010010000 Comment 00100000000111111100110110110010 Principal 00100000000000000010010011010000 wrenching 00000000000111000101000000010000 intertwined 00000000000000000000000000000000 forgiving 00000000000000000000000000000000 Montvale 00100000000111100100101001101000 speculations 00000000000000000000000000000000 exploits 00000000000111011100111101100011 Strasser 00100000000000000000000000000000 groans 00000000000000000000000000000000 sterile 00000000000000000000000000000000 lament 00000000000000000000000000000000 patronage 00000000000101001001110010100111 glutted 00000000000110101110101001000000 buffs 00000000000000000000000000000000 alas 00000000000111111111100011101000 wreak 00000000000000000000000000000000 Babe 00100000000010010010111000101000 government-guaranteed 00000000000000000000000000000000 Enthusiasts 00100000000011110000000010110011 recalculating 00000000000000000000000000000000 Observer 00100000000001000101011001100111 Grounds 00100000000111111101101110100011 paled 00000000000000000000000000000000 fellows 00000000000000000000000000000000 Mendes 00100000000000000000000000000000 Chico 00100000000000000000000000000000 Fossey 00100000000000000000000000000000 duel 00000000000000000000000000000000 12-year-old 00000000000000000000000000000000 3-1 00000000000000000000000000000000 Dian 00100000000000000000000000000000 impulsive 00000000000000000000000000000000 reverses 00001000010110000011000000010010 TROs 01000000000000000000000000000000 reinvented 00000000000000000000000000000000 Droz 00100000000000000000000000000000 freezing 00000000000000101011011101000000 Palma 00100000000000000000000000000000 Flashdance 00100000000000000000000000000000 screenplay 00000000000000000000000000000000 4.32 00000000000000000000000000000000 companions 00000000000000000000000000000000 thrashing 00000000000000000000000000000000 sailed 00000000000000110001001000110010 Kleinman 00100000000000000000000000000000 Streisand 00100000000000000000000000000000 postmaster 00000000000000011010110000110101 paper-goods 00000000000000000000000000000000 Russ 00100000000000000000000000000000 Hodges 00100000000000000000000000000000 Barbra 00100000000000000000000000000000 Coogan 00100000000000000000000000000000 45.50 00000000000000000000000000000000 63.9 00000000000000000000000000000000 65.2 00000000000000000000000000000000 customarily 00000000001101100000001001110010 chalking 00000000000000000000000000000000 rooting 00000000000000000000000000000000 exerting 00000000000000000000000000000000 172.2 00000000000000000000000000000000 fatter 00000000000000000000000000000000 transmogrified 00000000000000000000000000000000 Event 00100000000111111100100000001111 unwitting 00000000000000000000000000000000 test-coaching 00000000000000000000000000000000 Curcio 00100000000000000000000000000000 jour 00000000000000000000000000000000 auspicious 00000000000000000000000000000000 peddle 00000000000100001110001110110010 terrified 00000000000000000000000000000000 booths 00000000000000000000000000000000 Parade 00100000000111100100100101100111 silver-haired 00000000000000000000000000000000 entrusted 00000000000000000000000000000000 Name-dropping 00100000000000000000000000000000 Freudenberger 00100000000000000000000000000000 Birthday 00100000000000000100000001000111 avenue 00000000000000000000010010100101 C-word 00100000000000000000000000000000 associating 00000000000100110101100000110010 much-beloved 00000000000000000000000000000000 undeniably 00000000000000000000000000000000 Scot 00100000000000000000000000000000 lengthen 00000000000000000000000000000000 Crowe 00100000000111011100111010001000 Streetspeak 00100000000000000000000000000000 Orwell 00100000000000000000000000000000 heavyweight 00000000000000001110101100100001 449 00000000000000000000000000000000 arranges 00000000000000000000000000000000 achievable 00000000000000000000000000000000 occurrences 00000000000000000000000000000000 tears 00000000000111101001110010100111 Hello 00100000000000000000000000000000 Pilot 00100000000000000011111000100001 f 00000000000000000000000000000000 this.`` 00000000000000000000000000000000 misperceptions 00000000000000000000000000000000 vis 00000000000111000010111100010000 boilerplate 00000000000000000000000000000000 lotion 00000000000000000000000000000000 laughter 00000000000011001001110010100111 Wear 00100000001011101110101110110010 206 00000000000000000000000000000000 chronically 00000000000000111010001000110000 alerting 00000000000000000000000000000000 gambit 00000000000000000000000000000000 Fails 00100000000010000001101000110010 ploys 00000000000000000000000000000000 scratching 00000000000000000000000000000000 trousers 00000000000000000000000000000000 Heart 00100000000000000010011011100001 Warhol 00101111111110100110101010001000 Enforcers 00100000000000000000000000000000 Christensen 00101111111100001010000010001000 81.2 00000000000000000000000000000000 camouflage 00000000000000000000000000000000 Telesystems 00100000000000000000000000000000 Propper 00100000000000000000000000000000 3.66 00000000000000000000000000000000 69.5 00000000000000000000000000000000 electorate 00000000000111101100111001000101 raisers 00000000000000000011110001111001 Fonda 00100000000000000000000000000000 28.3 00000000000000000000000000000000 cleansing 00000000000000000000000000000000 long-cherished 00000000000000000000000000000000 fuse 00000000000000000000000000000000 Ormstedt 00100000000000000000000000000000 propositions 00000000000011110110010101100011 kilometers 00000000000000000000000000000000 Namib 00100000000000000000000000000000 Assemblyman 00101111111000000000101100001000 Trumps 00100000000000000000000000000000 Premium 00100000000111101001100011000111 towels 00000000000000000000000000000000 earthmoving 00000000000000000000000000000000 one-point 00000000000000000000000000000000 redistribution 00000000000000011110011010100111 dune 00000000000000000000000000000000 7.53 00000000000000000000000000000000 carats 00000000000000000000000000000000 7.57 00000000000000000000000000000000 660 00000000000000000000000000000000 nine-tenths 00000000000000000000000000000000 P-E 01000000000000000000000000000000 Matrix 00100000000001010111111100101000 dig 00000000001011010110010110110010 Avner 00100000000000000000000000000000 renters 00000000000101001000100000110011 sizes 00000000000111101111000100101111 sweetener 00000000000111011000011000100001 polishing 00000000000000000000000000000000 Eubank 00100000000000000000000000000000 tilts 00000000000000000000000000000000 hail 00000000000011001101001010110111 Roll 00100000000010110110010110110010 sands 00000000000111000111110100100001 spinning 00000000000101111010100001000000 immediacy 00000000000000000000000000000000 Panic 00100000000000110110111010100111 1908 00000000000000000000000000000000 Postipankki 00100000000000000000000000000000 quakes 00000000000000000000000000000000 cold-rolled 00000000000000000000000000000000 Harley 00100000000000001001000100001000 stingy 00000000000000000000000000000000 broad-scale 00000000000000000000000000000000 dot 00000000010010000010110001000000 overcrowding 00000000000000000000000000000000 civics 00000000000000000000000000000000 presumes 00000000000000000000000000000000 eluded 00000000000000000000000000000000 distressing 00000000000000000000000000000000 Flags 00100000000000111101110101100011 50.50 00000000000000000000000000000000 antelope 00000000000000000000000000000000 incendiary 00000000000000000000000000000000 Oldsmobile 00100000000010000111111100001000 intrude 00000000000000000000000000000000 mist 00000000000000000000000000000000 rag 00000000000000000000000000000000 '30s 00000000000000000000000000000000 Janesville 00100000000000000000000000000000 Cavalier 00100000000111000100000001000111 cinema 00000000000000000110010001001000 ironies 00000000000000000000000000000000 Circulations 00100000000000000000000000000000 postmarks 00000000000000000000000000000000 VII 01000000000000000000000000000000 bulldozers 00000000000000000000000000000000 Rolls-Royce 01000000000000000000000000000000 Play 00100000000101111110010110110010 d-Percentage 01000000000000000000000000000000 legitimately 00000000000000000000000000000000 f-Includes 01000000000000000000000000000000 wimp 00000000000000000000000000000000 x-Year-to-date 01000000000000000000000000000000 tornado 00000000000000000000000000000000 domestic-production 00000000000000000000000000000000 heaped 00000000000000000000000000000000 Dillmann 00100000000000000000000000000000 plows 00000000000000000000000000000000 bundled 00000000000000000000000000000000 cries 00000000000001111111000000010010 compacted 00000000000000000000000000000000 dove 00000000000111110100000000001000 2129.4 00000000000000000000000000000000 30.7 00000000000000000000000000000000 American-built 00100000000000000000000000000000 Frenzel 00100000000000000000000000000000 60-second 00000000000000000000000000000000 undoing 00000000000000000000000000000000 high-production 00000000000000000000000000000000 lift-ticket 00000000000000000000000000000000 Federalist 00100000000000000000000000000000 Yardeni 00101111111100110100000010001000 Corney 00100000000000000000000000000000 Barrow 00100000000000000000000000000000 Band 00100000000111101110000100000001 CRAF-Cassini 01000000000000000000000000000000 unfazed 00000000000000000000000000000000 malaise 00000000000111001010111010100111 upstate 00000000000000010101010100110010 uncomplicated 00000000000000000000000000000000 securities-firm 00000000000000000000000000000000 lower-income 00000000000000000000000000000000 Essex 00100000000110001011010100101000 Pignatelli 00100000000000000000000000000000 pasture 00000000000000000000000000000000 Pasquale 00100000000000000000000000000000 footnote 00000000000101101111001011100111 assuring 00000000000110011101111010000010 instructors 00000000000000001110100000110011 chafe 00000000000100010101010110110010 blues 00000000000111101111101101000001 Hartley 00101111111010001110100010001000 shrugs 00000000000011000011010111000010 Hole 00100000000111111001111010110101 Wyo 00100000000000000000000000000000 upsurge 00000000000000000000000000000000 billionnaire 00000000000000000000000000000000 Heidi 00100000000000000000000000000000 sweepers 00000000000111111000000010100111 2.26 00000000000000000000000000000000 4,393,237 00000000000000000000000000000000 1982-83 00000000000000000000000000000000 overalls 00000000000000000000000000000000 citation 00000000000111101000000001100111 herbal 00000000000000000000000000000000 Crazy 00100000000101110001110101001000 top-flight 00000000000000000000000000000000 downfall 00000000000111010101011000001111 Bhd. 00100000000000000000000000000000 observance 00000000000111111011011001101111 jeopardizes 00000000000000000000000000000000 rivets 00000000000000000000000000000000 Clairton 00100000000000000000000000000000 post-war 00000000000000000000000000000000 Avdel 00100000000000000000000000000000 Alito 00100000000000000000000000000000 nameplates 00000000000000000000000000000000 marque 00000000000000000000000000000000 pail 00000000000000000000000000000000 Confronted 00100000100111110110010000110010 170.4 00000000000000000000000000000000 dampened 00000000000000000000000000000000 social-studies 00000000000000000000000000000000 precautions 00000000000010111111001000100011 Virtually 00100000000001110111000001110010 Banana 00100000000011011101011000110000 bump 00000000000000000000000000000000 skis 00000000000000000000000000000000 Linh 00100000000000000000000000000000 Needs 00100000000111101110101000110010 PAY 01000000000111111101001110110010 Saigon 00100000000000000000000000000000 villagers 00000000000010001101100110110011 systemic 00000000000000000000000000000000 composites 00000000000000000000000000000000 Subcontractors 00100000000101011011110000110011 stop-payment 00000000000000000000000000000000 Barabba 00100000000000000000000000000000 tradeoffs 00000000000000000000000000000000 late-payment 00000000000000000000000000000000 Floating 00100000000001110000011100010000 Come 00100000000111110011010110110010 Page 00100000000100000111000001000111 grains 00001111111111011111101110110000 FIVE 01000000000111111110111001010000 zeroing 00000000000000000000000000000000 grandkids 00000000000000000000000000000000 Eighteen 00100000000110011111000011000000 segmentation 00000000000000000000000000000000 Scannell 00100000000000000000000000000000 Hewlett 00101111111111001100011100001000 175,000 00000000000000000000000000000000 AST 01000000000000000000000000000000 mortgage-interest 00000000000000000000000000000000 medal 00000000000000010000011000100001 Isuzu 00100000000111110000100100101000 McNeil 01000000000000000000000000000000 drug-dealing 00000000000000000000000000000000 smuggling 00000000000111001010110001000000 esoteric 00000000000000000000000000000000 3.38 00000000000000000000000000000000 flagrant 00000000000000000000000000000000 244 00000000000000000000000000000000 snafu 00000000000000000000000000000000 multiyear 00000000000000000000000000000000 Strategies 00100000000111101100011100100011 well-paying 00000000000000000000000000000000 elders 00000000000000001111111000101000 Tarrytown 00100000000001011011101001101000 glitch 00000000000000000000000000000000 indexer 00000000000000000000000000000000 Core 00100000000000011010010011010000 Axe 00100000000000000000000000000000 bellwethers 00000000000000000000000000000000 Testa 00100000000000000000000000000000 44,400 00000000000000000000000000000000 Negas 00100000000000000000000000000000 Voyles 00100000000000000000000000000000 sleepy 00000000000001010110011010010000 Ferrer 00100000000000000000000000000000 MIPs 01000000000000000000000000000000 43.375 00000000000000000000000000000000 57.7 00000000000000000000000000000000 long-held 00000000000000000000000000000000 descendant 00000000000000000000000000000000 heaven 00000000000110001110101101101000 Bonanza 00100000000111100010111010110101 MacroChem 01000000000000000000000000000000 most-active 00000000000000000000000000000000 turbo-charged 00000000000000000000000000000000 Improving 00100000000111010101010001000000 saga 00000000000111001100101101100111 Usinor-Sacilor 01000000000000000000000000000000 Fab 00100000000000000000000000000000 press-forge 00000000000000000000000000000000 Usinor 00100000000000000000000000000000 unchecked 00000000000000000000000000000000 deducting 00000000000111011100100101000000 caster 00000000000000000000000000000000 scour 00000000000000000000000000000000 76.7 00000000000000000000000000000000 Trees 00100000000111000111010101100011 Carlson 00101111111101111110000010001000 hardened 00000001101001101100010000110010 Wilke 00100000000000000000000000000000 cycads 00000000000000000000000000000000 40-point 00000000000000000000000000000000 domestic-made 00000000000000000000000000000000 grimly 00000000111001000001001001110010 Bolstered 00100000001101100111010000110010 sprouting 00000000000000000000000000000000 wane 00000000000000000000000000000000 Manchester 00100000000110011001101001101000 541 00000000000000000000000000000000 Ferembal 00100000000000000000000000000000 Viatech 00100000000000000000000000000000 automating 00000000000000000000000000000000 Ramo 00100000000000000000000000000000 skyscraper 00000000000000000000000000000000 Mahler 00100000000000000000000000000000 CP486 01000000000000000000000000000000 fronds 00000000000000000000000000000000 decoration 00000000000110000101110010100111 populate 00000000000000000000000000000000 0.17 00000000000000000000000000000000 Cathryn 00100000000000000000000000000000 commutes 00000000000000000000000000000000 35-hour 00000000000000000000000000000000 Discussing 00100000000111001110010101000000 527,000 00000000000000000000000000000000 wring 00000000000000000000000000000000 intimacy 00000000000110010011111010100111 Gourlay 00100000000000000000000000000000 Keene 00100000000000000000000000000000 toiling 00000000000111010111000001000000 Amon 00100000000000000000000000000000 Whitelock 00100000000000000000000000000000 leftists 00000000000000000000000000000000 Gilleland 00100000000000000000000000000000 Rilling 00100000000000000000000000000000 Past 00100000000000000001010001100010 Lyons 00101111111100000000001000001000 Rossini 00100000000000000000000000000000 circulate 00000000000000101110101110110010 sword 00000000000100110000100101100111 hedgers 00000000000000000000000000000000 divisional 00000000000000010000010000110000 Queens 00100000000011100111111001101000 accent 00000000000111100011011001100111 contesting 00000000000111000110010101000000 leathers 00000000000000000000000000000000 churn 00000000000000000000000000000000 Lugar 00100000000000000000000000000000 Kerrey 00100000000000000000000000000000 embroidery 00000000000000000000000000000000 saturated 00000000000111111101101001000000 peasants 00000000000111100100111000110011 infractions 00000000000000000000000000000000 co-sponsors 00000000000000000000000000000000 Repeal 00100000000011010111110110110010 Cocoa 00100000000111010011101110110000 8,880 00000000000000000000000000000000 Cost 00100000000111111111111111110111 centenarians 00000000000000000000000000000000 matures 00000000000000000000000000000000 second-highest 00000000000000000000000000000000 22.1 00000000000000000000000000000000 Wait 00100000000101110101010110110010 depriving 00000000000000000000000000000000 75.2 00000000000000000000000000000000 concepts 00000000000111011000110001100011 independents 00000000000111110100111000110011 VCR 01000000000000000000000000000000 second-place 00000000000000000000000000000000 Stuttgart-based 00100000000000000000000000000000 Myrtle 00100000000000000000000000000000 money-back 00000000000000000000000000000000 Hallett 00100000000000000000000000000000 CHANGED 01000000000111111111111001000000 slaying 00000000000111101110001001001111 code-named 00000000000000000000000000000000 2,202,000 00000000000000000000000000000000 2,205,000 00000000000000000000000000000000 uprooted 00000000001111100101101001000000 rooftops 00000000000000000000000000000000 first-class 00000000000000000000000000000000 COMPUTERS 01000000000111100111111001100011 counterweight 00000000000000000000000000000000 Cannes 00100000000000000000000000000000 hassle 00000000000110010111101010110111 Christina 00100000000000000000000000000000 Niles 00100000000000000000000000000000 CONTINENTAL 01000000000111101011110110101000 hallowed 00000000000000000000000000000000 cut-rate 00000000000000000000000000000000 presenting 00000000000111100101111101000000 51-48 00000000000000000000000000000000 Pinola 00100000000000000000000000000000 fabulous 00000000000101011000011010010000 26.1 00000000000000000000000000000000 cluttered 00000000000111110111000010010000 Homeless 00100000000111000010101000110000 Mahran 00100000000000000000000000000000 509 00000000000000000000000000000000 boredom 00000000000100101010110010100111 198,120,000 00000000000000000000000000000000 sheiks 00000000000000000000000000000000 undelivered 00000000000000000000000000000000 salvation 00000000000111100001111000010000 Toshiki 00100000000000000000000000000000 Kaifu 00100000000000000000000000000000 balconies 00000000000000000000000000000000 vegetable 00000000000100100100011010110000 litter 00000000000111100110110110110111 utmost 00000000000000000000000000000000 412 00000000000000000000000000000000 Thrombinar 00100000000000000000000000000000 16.95 00000000000000000000000000000000 174 00000000000000000000000000000000 coincided 00000000000000010011100000110010 Asilone 00100000000000000000000000000000 269 00000000000000000000000000000000 allegory 00000000000000000000000000000000 alcoholics 00000000000000000000000000000000 Ameritas 00100000000000000000000000000000 no-load 00000000000000000000000000000000 slum 00000000000000000000000000000000 hallmark 00000000000000000010010100110001 beheading 00000000000000000000000000000000 renal 00000000000000000000000000000000 positioning 00000000011010101110100001000000 immensely 00000000011000101000000001110010 dinosaur 00000000000000000000000000000000 single-premium 00000000000000000000000000000000 sacrifices 00000000000111010100011000100011 avaricious 00000000000000000000000000000000 Castaneda 00100000000000000000000000000000 burying 00000000000000000000000000000000 euphemisms 00000000000000000000000000000000 ruling-party 00000000000000000000000000000000 flunk 00000000000000000000000000000000 belongings 00000000000000000000000000000000 oath 00000000000111001111110001100111 convoluted 00000000000000000000000000000000 machetes 00000000000000000000000000000000 heavy-handed 00000000000000000000000000000000 persistency 00000000000000000000000000000000 slums 00000000000101011000111101100011 Figuring 00100000000111110010100001000000 trudging 00000000000000000000000000000000 wares 00000000000110001001111101100011 interspersed 00000000000000000000000000000000 rattling 00000000000000000000000000000000 pleasures 00000000000111111000111101100011 1,150,000 00000000000000000000000000000000 436,000 00000000000000000000000000000000 68.1 00000000000000000000000000000000 crooks 00000000000100010100000000001000 Head 00100000000111111111110011110111 a-Totals 01000000000000000000000000000000 fretting 00000000001100111111110000110010 parlor 00000000000101110001111010110000 Pachinko 00100000000000000000000000000000 pinball 00000000000000000000000000000000 Gumucio 00100000000000000000000000000000 Us 00100000000000010001010001110010 Arabic 00100000000111100111101100100001 Lyneses 00100000000000000000000000000000 unsavory 00000000000000000000000000000000 Dostoevski 00100000000000000000000000000000 Psychologists 00100000000010101010000010110011 Luber 00100000000000000000000000000000 Wenz 00100000000000000000000000000000 unregistered 00000000000000010101100100010000 nobility 00000000000000000000000000000000 blaze 00000000000111101000101101100111 monologues 00000000000000000000000000000000 Factories 00100000000111101110110001100011 Devotees 00100000000000000000000000000000 dictatorial 00000000000000000000000000000000 ping 00000000000000000000000000000000 pastime 00000000000110001000011000100001 c-Domestic 01000000000000000000000000000000 8.68 00000000000000000000000000000000 giddy 00000000000000000000000000000000 embedded 00000000001100011110010000110010 Disputado 00100000000000000000000000000000 logistical 00000000000011011000000000110000 get-rich-quick 00000000000000000000000000000000 laden 00000000001001110101100000110010 socks 00000000001011111111110101100011 sucker 00000000000000000000000000000000 socioeconomic 00000000000000000000000000000000 stapling 00000000000000000000000000000000 disappoint 00000000000000000000000000000000 benevolent 00000000000000000000000000000000 nonresident 00000000000000000000000000000000 subcontractor 00000000000111101011101010110101 Pages 00100000000000000010000100001011 phonebook 00000000000000000000000000000000 obscures 00000000000000000000000000000000 Lackey 00100000000000000000000000000000 Buried 00100000011100001100010000110010 meditation 00000000000000000000000000000000 reclassified 00000000000000000000000000000000 reinvesting 00000000000111011001001101000000 genres 00000000000000000000000000000000 Washburn 00100000000000000000000000000000 Islam 00100000000100111111110010100111 Macon 00100000000000000000000000000000 Menem 00100000000000000000000000000000 idealist 00000000000000000000000000000000 alimony 00000000000000000000000000000000 drained 00000000001010011100010000110010 incidence 00000000000101110111111000001111 ceaselessly 00000000000000000000000000000000 queues 00000000000000000000000000000000 ubiquitous 00000000000011011101000010010000 x-There 01000000000000000000000000000000 Percentage 00100000000000000001100001010000 haulers 00000000000000000000000000000000 Unknown 00100000000010010000110110010000 undertone 00000000000000000000000000000000 tuitions 00000000000000000000000000000000 functionaries 00000000000000000000000000000000 baccalaureate 00000000000000000000000000000000 Hauptman 00100000000000000000000000000000 credit-worthiness 00000000000000000000000000000000 assigns 00000000000000000000000000000000 Oasis 00100000000000000000000000000000 0.94 00000000000000000000000000000000 Menuhin 00100000000000000000000000000000 exam 00000000000110100001100011100111 readied 00000000000000000000000000000000 work-rule 00000000000000000000000000000000 soloist 00000000000000000000000000000000 outstrips 00000000000000000000000000000000 C-SPAN 01000000000000000000000000000000 Ciavarella 00100000000000000000000000000000 furnishings 00000000000111111111001011100101 indulgence 00000000000000000000000000000000 ingenious 00000000000100111000110100010000 widows 00000000000000000000000000000000 vanish 00000001011101111101010110110010 Salisbury 00100000000100001000101001101000 H.J. 01000000000000000000000000000000 Hawke 00101111111101101110101010001000 gullible 00000000000000000000000000000000 12-member 00000000000000000000000000000000 Emshwiller 00100000000000000000000000000000 modicum 00000000000000000000000000000000 Journalists 00100000000111101000111000110011 credit-reporting 00000000000000000000000000000000 rehabilitated 00000000000000000000000000000000 Falco 00100000000000000000000000000000 above-average 00000000000000000000000000000000 Diebel 00100000000000000000000000000000 Philo 00100000000000000000000000000000 pushers 00000000000000000000000000000000 Manion 00100000000000000000000000000000 Bo 00100000000000000000000000000000 enrolled 00000000001110011110010000110010 Papua-New 01000000000000000000000000000000 Bureaus 00100000000000011110000100100011 plying 00000000000000000000000000000000 multitude 00000000000000000000000000000000 Brunei 00100000000111110110101101101000 unqualified 00000000000001010001110100010000 Darby 00101111111010111100001000001000 Stapf 00100000000000000000000000000000 certify 00000000000101011100100110110010 spanning 00000000000000000000000000000000 needle 00000000000101111001110000000001 22,000 00000000000000000000000000000000 shrubs 00000000000000000000000000000000 Spokane 00100000000000000000000000000000 instructor 00000000000111000111110000110101 93.5 00000000000000000000000000000000 tooling 00000000000000000000000000000000 Tacit 00100000000000011101000000010000 thinker 00000000000000000000000000000000 Galamian 00100000000000000000000000000000 follow-on 00000000000000000000000000000000 violinist 00000000000101101011011110110101 Blazer 00100000000000000000000000000000 396 00000000000000000000000000000000 anti-development 00000000000000000000000000000000 assuage 00000000000000000000000000000000 undue 00000000000000000010010100010000 Participants 00100000000110110100101001110011 blindfolded 00000000000100011011110110010000 Alexandra 00100000000000000000000000000000 two-income 00000000000000000000000000000000 44.1 00000000000000000000000000000000 Dominick 00100000000000000000000000000000 decimated 00000000000000000000000000000000 Karns 00100000000000000000000000000000 Darwin 00100000000000000000000000000000 pageant 00000000000000000000000000000000 riskiness 00000000000000000000000000000000 splendid 00000000000000011100011010010000 endowed 00000000000000000000000000000000 Schafer 00100000000000000000000000000000 anti-missile 00000000000000000000000000000000 20th-century 00000000000000000000000000000000 UNC 01000000000000000000000000000000 REVIEW 01000000000111111111111110110111 betas 00000000000000000000000000000000 Cautious 00100000000010100111110000110010 malnutrition 00000000000000000000000000000000 Meritor 00100000000110111001000100101000 fill-or-kill 00000000000000000000000000000000 primordial 00000000000000000000000000000000 careening 00000000000000000000000000000000 drape 00000000000000000000000000000000 market-if-touched 00000000000000000000000000000000 ovens 00000000000100100111001111001001 Suppose 00100000000111011111100110110010 Dream 00100000000111111101000101100111 dolce 00000000000000000000000000000000 55.6 00000000000000000000000000000000 wagons 00000000000000011000110100100011 cluster 00000000000111111110001000111111 tripling 00000000000000000000000000000000 Trout 00100000000010000100000000001000 nonexistent 00000000000010000110110110010000 transplanted 00000000000000000000000000000000 outpacing 00000000000101010111011101000000 TransTechnology 01000000000000000000000000000000 235.2 00000000000000000000000000000000 corrosion-resistant 00000000000000000000000000000000 ordnance 00000000001100100000011010110000 rubs 00000000000000000000000000000000 awhile 00000000000111010011010001110010 anatomical 00000000000000000000000000000000 parched 00000000000000000000000000000000 Schuman 00100000000000000000000000000000 Collectibles 00100000000000000000000000000000 Darwinian 00100000000000000000000000000000 Serenade 00100000000000000000000000000000 hidebound 00000000000000000000000000000000 dents 00000000000000000000000000000000 Woodrow 00100000000000000000000000000000 autographs 00000000000000000000000000000000 Reggie 00100000000000000000000000000000 long-established 00000000000000000000000000000000 confinement 00000000000000000000000000000000 forgery 00000000000101110111100010100111 same-store 00000000000000000000000000000000 Cormack 00100000000000000000000000000000 60.1 00000000000000000000000000000000 Aided 00100000000101001111010000110010 Charisma 00100000000011101101110010100111 Kenji 00100000000000000000000000000000 Utsunomiya 00100000000000000000000000000000 straining 00000000000100011101100001000000 nondemocratic 00000000000000000000000000000000 3.01 00000000000000000000000000000000 Branford 00100000000000000000000000000000 Apollo 00100000000110110000100100101000 auctioneer 00000000000000000000000000000000 Monets 00100000000000000000000000000000 fantastic 00000000000001001000011010010000 unmistakable 00000000000000000000000000000000 Wolff 00100000000000000000000000000000 sparsely 00000000000000000000000000000000 feedlot 00000000000000000000000000000000 fatten 00000000000100000100111110110010 slain 00000000000000000000000000000000 virtuoso 00000000000000000000000000000000 348.4 00000000000000000000000000000000 Feedlots 00100000000111111111101000000111 consuming 00000000000111100011110001000000 Photographic 00100000000011110100101010110000 glass-making 00000000000000000000000000000000 lectures 00000000000101001101110101100011 belly-up 00000000000000000000000000000000 Luther 00101111111011000100011100001000 dined 00000000000000000000000000000000 Minor 00100000000000001010000000010000 effusive 00000000000000000000000000000000 cost-reduction 00000000000000000000000000000000 socializing 00000000000110000111000001000000 hinting 00000000000110110001111010000010 triumphed 00000000000000000000000000000000 Junkins 00100000000000000000000000000000 4.66 00000000000000000000000000000000 Bockris 00100000000000000000000000000000 surround 00000000000000000000000000000000 imagining 00000000000000000000000000000000 anomalous 00000000000000000000000000000000 electrolysis 00000000000000000000000000000000 invoking 00000000000111111111001101000000 deuterium 00000000000000000000000000000000 hoc 00000000000000011101010000100101 ballroom 00000000000101011101111000000001 Hager 00100000000000000000000000000000 Chojnowski 00100000000000000000000000000000 Bolton 00100000000000000000000000000000 wiser 00000000000000000000000000000000 turtle 00000000000000000000000000000000 Pong 00100000000000000000000000000000 Pagong 00100000000000000000000000000000 vibrant 00000000000001001101000010010000 Sesame 00100000000000000000000000000000 distinctly 00000000010110101000000001110010 archaic 00000000000000110100110100010000 higher-income 00000000000000000000000000000000 Komatsu 00100000000110111100111100101000 resists 00000000000000000000000000000000 conservatively 00000000100001000000010001110010 vein 00000000000000000000000000000000 worn 00000000000001110010110000110010 Rainer 00100000000000000000000000000000 shopkeeper 00000000000011001111011110110101 prejudiced 00000000000000000000000000000000 upper-middle 00000000000000000000000000000000 ooze 00000000000000000000000000000000 barons 00000000000000000000000000000000 33.75 00000000000000000000000000000000 smashed 00000000000111011001001000110010 unconcerned 00000000001000111111110000110010 rescuers 00000000000000000000000000000000 Pertschuk 00100000000000000000000000000000 loyalties 00000000000000000000000000000000 aftereffects 00000000000000000000000000000000 schizophrenia 00000000000000000000000000000000 oceanographic 00000000000000000000000000000000 close-knit 00000000000000000000000000000000 Rene 00100000000110111000001000011000 pull-out 00000000000000000000000000000000 se 00000000000001101111000001000111 Christians 00100000000111010000100000110011 scaled-back 00000000000000000000000000000000 easiest 00000000000000001011010011010000 one-penny 00000000000000000000000000000000 most-watched 00000000000000000000000000000000 assaults 00000000000111101011100100100111 Gann 00100000000000000000000000000000 625,000 00000000000000000000000000000000 muses 00000000000000000000000000000000 Cindy 00100000000000000000000000000000 pacemaker 00000000000000000000000000000000 68.2 00000000000000000000000000000000 expansions 00000000000111000100011000100011 in-home 00000000000000000000000000000000 Inmac 00100000000000000000000000000000 Bostik 00100000000000000000000000000000 345 00000000000000000000000000000000 Cardiovascular 00100000000010101100101010110000 power-tool 00000000000000000000000000000000 rescued 00001000010011010100010000110010 12.97 00000000000000000000000000000000 Friedrichs 00100000000000000000000000000000 6.05 00000000000000000000000000000000 heeded 00000011101101000101010000110010 62.42 00000000000000000000000000000000 904 00000000000000000000000000000000 Bostic 00100000000000000000000000000000 immunities 00000000000000000000000000000000 Cards 00100000000111101101110001111001 Capitalizing 00100000000100110100100000110010 8.82 00000000000000000000000000000000 concocted 00000000000100101001010000110010 reckoned 00000000000000000000000000000000 predispose 00000000000000000000000000000000 Hart-Scott 01000000000000000000000000000000 purists 00000000000000000000000000000000 Familia 00100000000000000000000000000000 cooling-off 00000000000000000000000000000000 stack 00000000000111111111001000111111 fiveyear 00000000000000000000000000000000 Ponce 00100000000000000000000000000000 tigers 00000000000000110110110100000001 1990-2009 00000000000000000000000000000000 6.00 00000000000000000000000000000000 nonstrategic 00000000000000000000000000000000 sidesteps 00000000000000000000000000000000 Regrettably 00100000000000000000000000000000 mutually 00000000000110011000000001110010 propensity 00000000000110100101111100100111 Cholet-Dupont 01000000000000000000000000000000 Spectrum 00100000000111011100111001100111 Aviacion 00100000000000000000000000000000 Mexicana 00100000000000000000000000000000 cultivation 00000000000000000000000000000000 Apparel 00100000000000100011111010110000 predates 00000000000000000000000000000000 Mexico-United 01000000000000000000000000000000 699 00000000000000000000000000000000 43.3 00000000000000000000000000000000 pesos 00000000000000000000111000001011 unfulfilled 00000000000000000000000000000000 mutters 00000000000000000000000000000000 double-A-plus 01000000000000000000000000000000 Masket 00100000000000000000000000000000 705.6 00000000000000000000000000000000 Bince 00100000000000000000000000000000 Imasco 00100000000111001100111100101000 galvanize 00000000000000000000000000000000 Generation 00100000000111010001111000111111 amiable 00000000000000000000000000000000 Muslims 00100000000000001001111000110011 FT 01000000000000000000000000000000 Kushkin 00100000000000000000000000000000 Sapporo 00100000000000000000000000000000 Haines 00100000000000000000000000000000 Schrager 00100000000000000000000000000000 Schantz 00100000000000000000000000000000 49.2 00000000000000000000000000000000 subsided 00000000000000000000000000000000 family-run 00000000000000000000000000000000 Marian 00100000000000000000000000000000 lapsed 00000000000000000000000000000000 Adverse 00100000000000100000010100010000 IIcx 01000000000000000000000000000000 17-store 00000000000000000000000000000000 Row 00100000000111100111000001000111 Tough 00100000000000001001011010010000 heartland 00000000000100000111100100100001 Ideally 00100000000111110000111011101000 fantasize 00000000000000000000000000000000 foreign-debt 00000000000000000000000000000000 banished 00000000000000000000000000000000 Reluctant 00100000000110110100011000110010 tie-ups 00000000000000000000000000000000 4.51 00000000000000000000000000000000 Maronites 00100000000000000000000000000000 namesake 00000000000000000000000000000000 3.08 00000000000000000000000000000000 classy 00000000000000000000000000000000 Takashimaya 00100000000000000000000000000000 popping 00000000001011100110100001000000 torments 00000000000000000000000000000000 Carr-Lowrey 01000000000000000000000000000000 Freeport 00100000000100100100110100101000 Compiled 00100000001011101111010000110010 break-up 00000000000000000000000000000000 conquest 00000000000001101111100100100001 Taxi 00100000000000011000101000110000 74.4 00000000000000000000000000000000 boldest 00000000000000000000000000000000 package-sorting 00000000000000000000000000000000 Complying 00100000000111010101100000110010 cigar 00000000000110110001111010110000 stints 00000000000000000000000000000000 court-ordered 00000000000000000000000000000000 Impco 00100000000000000000000000000000 Psychiatry 00100000000000000000000000000000 Gebhard 00100000000000000000000000000000 anti-union 00000000000000000000000000000000 melding 00000000000000000000000000000000 RULES 01000000000000100000111100100011 Kong-based 00100000000000000000000000000000 reconcile 00000000011110100011111110110010 consolation 00000000000000000000000000000000 ip 00000000000000000000000000000000 HASTINGS 01000000001101011100111010001000 Ciminero 00100000000000000000000000000000 Harriman 00100000000000000000000000000000 manuals 00000000000111111000110100100011 chemically 00000000000000000000000000000000 cancellations 00000000000100000011010101100011 Bremen 00100000000000000000000000000000 Ho 00101111111101000100101000101000 tribunal 00000000000100101111000001010101 Interviews 00100000000110111100010000100111 rewritten 00000000000000000000000000000000 Blind 00100000000010101101011010010000 Minh 00100000000000000000000000000000 disintegrating 00000000000000000000000000000000 Bravo 00100000000000000000000000000000 Fixx 00100000000000000000000000000000 exhibits 00000000001010001111000000010010 T.S. 01000000000000000000000000000000 Prufrock 00100000000000000000000000000000 Amor 00100000000000000000000000000000 Insurrecto 00100000000000000000000000000000 Gioconda 00100000000000000000000000000000 2-4 00000000000000000000000000000000 349-0126 00000000000000000000000000000000 Ragged 00100000000000000000000000000000 regionally 00000000000000000000000000000000 self-contained 00000000000000000000000000000000 914-251-6200 00000000000000000000000000000000 Zellerbach 00100000000000000000000000000000 Annenberg 00100000000000000000000000000000 215-898-6791 00000000000000000000000000000000 Crafton-Preyer 01000000000000000000000000000000 913-864-3982 00000000000000000000000000000000 Kiel 00100000000000000000000000000000 rapprochement 00000000000000000000000000000000 314-968-3770 00000000000000000000000000000000 Gilda 00100000000000000000000000000000 Joannie 00100000000000000000000000000000 Rigoletto 00100000000000000000000000000000 Pavarotti 00100000000000000000000000000000 sciatica 00000000000000000000000000000000 fun-loving 00000000000000000000000000000000 Nucci 00100000000000000000000000000000 hump-backed 00000000000000000000000000000000 choreographers 00000000000000000000000000000000 Coast-based 00100000000000000000000000000000 Shoreline 00100000000000000000000000000000 smilingly 00000000000000000000000000000000 countess 00000000000000000000000000000000 Lehar 00100000000000000000000000000000 Distant 00100000000111110000000010010000 Widow 00100000000111101001011110000001 871-0090 00000000000000000000000000000000 Waverly 00100000000000000000000000000000 Consort 00100000000000000000000000000000 ritorno 00000000000000000000000000000000 d'Ulisse 01000000000000000000000000000000 patria 00000000000000000000000000000000 Homeland 00100000000111001111101001100111 Monteverdi 00100000000000000000000000000000 trilogy 00000000000000000000000000000000 Orfeo 00100000000000000000000000000000 L'incoronazione 00100000000000000000000000000000 Poppea 00100000000000000000000000000000 Ulisse 00100000000000000000000000000000 Pudwell 00100000000000000000000000000000 Penelope 00100000000000000000000000000000 Monahan 00100000000000000000000000000000 Melanto 00100000000000000000000000000000 original-instrument 00000000000000000000000000000000 Venetian 00100000000000000000000000000000 instrumentalists 00000000000000000000000000000000 116th 00000000000000000000000000000000 666-1260 00000000000000000000000000000000 structurally 00000000000000000000000000000000 Gave 00100000000110001011000000010010 Drubbing 00100000000000000000000000000000 gyration 00000000000000000000000000000000 Arraignments 00100000000000000000000000000000 resultant 00000000000000000000000000000000 pre-margin 00000000000000000000000000000000 Overextension 00100000000000000000000000000000 industry-supported 00000000000000000000000000000000 Perception 00100000000111101111110000001111 exemplified 00000000000000000000000000000000 magnify 00000000000110000100111110110010 bifurcated 00000000000000000000000000000000 choreographed 00000000000000000000000000000000 foreign-investor 00000000000000000000000000000000 Modest 00100000000000001010100000010000 princely 00000000000000000000000000000000 Anticipated 00100000000000001101001001000000 shamanistic 00000000000000000000000000000000 gathers 00000001001110000011000000010010 Franconia 00100000000000000000000000000000 simplistic 00000000000000000000000000000000 crashlet 00000000000000000000000000000000 obstructionism 00000000000000000000000000000000 Steiger 00100000000000001011111010001000 hiked 00000000000000000000000000000000 rituals 00000000000000000000000000000000 opportuning 00000000000000000000000000000000 castigate 00000000000000000000000000000000 Emile 00100000000000000000000000000000 Giolito 00100000000000000000000000000000 faraway 00000000000000000000000000000000 Cia. 00100000000000000000000000000000 Telefonos 00100000000000000000000000000000 data-transmission 00000000000000000000000000000000 Santiago 00100000000000000000000000000000 9.65 00000000000000000000000000000000 Boost 00100000000111110010010110110010 asunder 00000000000000000000000000000000 heatedly 00000000000000000000000000000000 amplifying 00000000000000000000000000000000 Azara 00100000000000000000000000000000 bathed 00000000000000000000000000000000 meanings 00000000000000000000000000000000 minimums 00000000000000000000000000000000 Carved 00100000001101101001001000110010 price-jarring 00000000000000000000000000000000 commoditize 00000000000000000000000000000000 A.I.R. 01000000000000000000000000000000 1-Dec 01000000000000000000000000000000 38th 00000000000000000000000000000000 1200 00000000000000000000000000000000 -vs. 00000000000000000000000000000000 Lind 00100000000000000000000000000000 Lind-Waldock 01000000000000000000000000000000 remediation 00000000000000000000000000000000 hazardous-waste-site 00000000000000000000000000000000 energized 00000000000000000000000000000000 statistic 00000000000111000100101101100111 conducive 00000000000000000000000000000000 sequins 00000000000000000000000000000000 Dividend 00100000000111100000100011000111 satin 00000000000000000000000000000000 wherewithal 00000000000000000000000000000000 9.125 00000000000000000000000000000000 Doerflinger 00100000000000000000000000000000 Goldin 00100000000000000000000000000000 handmade 00000000000000000000000000000000 Treasury-bill 00100000000000000000000000000000 184-day 00000000000000000000000000000000 51-cash 00000000000000000000000000000000 116.4 00000000000000000000000000000000 116.3 00000000000000000000000000000000 banners 00000000000101100101110101100011 Saddle 00100000000111111010011010101000 -when 00000000000000000000000000000000 High-yield 00100000000000000000000000000000 voodoo 00000000000000000100101100100001 -in 00000000000000000000000000000000 mail-sorting 00000000000000000000000000000000 votive 00000000000000000000000000000000 tanked 00000000000000000000000000000000 retablos 00000000000000000000000000000000 prepayment-protected 00000000000000000000000000000000 topgrade 00000000000000000000000000000000 quasi-federal 00000000000000000000000000000000 devotional 00000000000000000000000000000000 hand-carved 00000000000000000000000000000000 Tbond 00100000000000000000000000000000 MOB 01000000000000001101010000000001 92-14 00000000000000000000000000000000 91-23 00000000000000000000000000000000 99-04 00000000000000000000000000000000 steadier 00000000000000000000000000000000 0.35 00000000000000000000000000000000 97.25 00000000000000000000000000000000 95.11 00000000000000000000000000000000 santos 00000000000000000000000000000000 Haitian 00100000000001001101011000110000 30-Nov. 01000000000000000000000000000000 2445 00000000000000000000000000000000 527 00000000000000000000000000000000 Herb 00100000000001101001111100001000 middle-market 00000000000000000000000000000000 unenticing 00000000000000000000000000000000 -has 00000000000000000000000000000000 14-Sept. 01000000000000000000000000000000 10.875 00000000000000000000000000000000 Stackup 00100000000000000000000000000000 Air-traffic 00100000000000000000000000000000 stitches 00000000000000000000000000000000 harped 00000000000000000000000000000000 bothering 00000000000000000000000000000000 marvel 00000000000111010010100110110111 Humility 00100000000000000000000000000000 Helper 00100000000000000000000000000000 unnoticed 00000000000000010111110110010000 -dividends 00000000000000000000000000000000 21-June 01000000000000000000000000000000 Payouts 00100000000111100011001100000011 -despite 00000000000000000000000000000000 4525 00000000000000000000000000000000 431 00000000000000000000000000000000 U.S.-developed 01000000000000000000000000000000 probe-based 00000000000000000000000000000000 Nagayama 00100000000000000000000000000000 991 00000000000000000000000000000000 GenProbe 01000000000000000000000000000000 non-viral 00000000000000000000000000000000 Nelson-Atkins 01000000000000000000000000000000 ribosomal 00000000000000000000000000000000 robustly 00000000000000000000000000000000 27-March 01000000000000000000000000000000 spiders 00000000000000000000000000000000 world-leading 00000000000000000000000000000000 Tad 00100000000000000000000000000000 Inada 00100000000000000000000000000000 NASDA 01000000000000000000000000000000 Shocked 00100000001111001101110000110010 dilapidated 00000000000000000000000000000000 coals-to-Newcastle 01000000000000000000000000000000 farfetched 00000000000000000000000000000000 Japan-U.S. 01000000000000000000000000000000 FSX 01000000000000000000000000000000 debated 00000010100011010100010000110010 research-and-production 00000000000000000000000000000000 breathe 00000000000000001110101110110010 2400 00000000000000000000000000000000 4-Dec. 01000000000000000000000000000000 Metromedia-ITT 01000000000000000000000000000000 steel-casting 00000000000000000000000000000000 Ave. 00100000000000000000000000000000 declassifying 00000000000000000000000000000000 soldering 00000000000000000000000000000000 Cassatt 00100000000000000000000000000000 flatulent 00000000000000000000000000000000 Sisley 00100000000000000000000000000000 unbearably 00000000000000000000000000000000 unwashed 00000000000000000000000000000000 sketchiest 00000000000000000000000000000000 arouses 00000000000000000000000000000000 SIGNALED 01000000000001000101110111000010 DISTRESSFUL 01000000000000000000000000000000 unfixed 00000000000000000000000000000000 l 00000000000000010101111110101000 Cezanne 00100000000000000000000000000000 pastels 00000000000000000000000000000000 beer-belly 00000000000000000000000000000000 slashes 00000000000000000000000000000000 pre-May 01000000000000000000000000000000 investment-house 00000000000000000000000000000000 Eighty-five 00100000000000000000000000000000 Le 00100000000100010001010101001000 Month 00100000000111111111100101100010 Solihull 00100000000000000000000000000000 torrent 00000000000111111101100101111111 ConAgra 01000000000111000011111100101000 McGillicuddy 01001111011110101100000010001000 once-moribund 00000000000000000000000000000000 Selections 00100000000011000110010101100011 Impressionism 00100000000000000000000000000000 Red-blooded 00100000000000000000000000000000 soreness 00000000000000000000000000000000 rowed 00000000000000000000000000000000 religiously 00000000111101101000000001110010 equal-opportunity 00000000000000000000000000000000 ashamed 00000000000000000000000000000000 Abbey 00100000000000001101111000101000 duller 00000000000000000000000000000000 jogging 00000000000000000000000000000000 male-only 00000000000000000000000000000000 rackets 00000000000000000000000000000000 1637 00000000000000000000000000000000 treadmills 00000000000000000000000000000000 stair 00000000000000000000000000000000 climbers 00000000000000000000000000000000 Youths 00100000000100101101011100110011 basements 00000000000001110001111000110011 attics 00000000000000000000000000000000 Ancient 00100000000000001100001000110000 boom-or-bust 00000000000000000000000000000000 Premark 00100000000000000000000000000000 peddles 00000000000000000000000000000000 M8.7sp 00100000000000000000000000000000 Simulator 00100000000000000000000000000000 Juliet 00100000000000000000000000000000 calories 00000000000000100111101001100011 gizmo 00000000000000000000000000000000 surrealism 00000000000000000000000000000000 fancier 00000000000000000000000000000000 timer 00000000000000000000000000000000 conjures 00000000000000000000000000000000 bell-ringing 00000000000000000000000000000000 dada 00000000000000000000000000000000 Krys 00100000000000000000000000000000 parishes 00000000000010100111110001100011 truthfully 00000000000000000000000000000000 -like 00000000000000000000000000000000 bellringers 00000000000000000000000000000000 bicycling 00000000000000000000000000000000 Jeanette 00100000000000000000000000000000 Traverso 00100000000000000000000000000000 Motif 00100000000000000000000000000000 booklet 00000000000000000000000000000000 enjoyment 00000000000000000000000000000000 Hagood 00100000000000000000000000000000 Roxboro 00100000000000000000000000000000 10,100,000 00000000000000000000000000000000 joys 00000000000111010111011000001111 Slightly 00100000000111101000010001110010 theological 00000000000000000000000000000000 Sherren 00100000000000000000000000000000 fuller 00001111111010011000001000001000 bell-ringer 00000000000000000000000000000000 22-year-old 00000000000000000000000000000000 368.87 00000000000000000000000000000000 once-sacred 00000000000000000000000000000000 Unum 00100000000000000000000000000000 toughened 00000000000000000000000000000000 behavior-modification 00000000000000000000000000000000 smoking-cessation 00000000000000000000000000000000 -here 00000000000000000000000000000000 altar 00000000000110100011111001100111 Bowling 00100000000000000010001100100001 bowling-related 00000000000000000000000000000000 banquet 00000000000011000001010001000111 pleasurable 00000000000000000000000000000000 Cottrell 00100000000000000000000000000000 score-wise 00000000000000000000000000000000 Leftovers 00100000000000000000000000000000 GROUP'S 01000000000000000000000000000000 C.J.B. 01000000000000000000000000000000 Cutbacks 00100000000111110101011000100011 Uncertain 00100000000111100010110110010000 W.D. 01000000000000000000000000000000 dust-up 00000000000000000000000000000000 144,610 00000000000000000000000000000000 somethin 00000000000000000000000000000000 ya 00000000000000000000000000000000 Lorraine 00100000000000000000000000000000 busting 00000000001100101001001000110010 Ilminster 00100000000000000000000000000000 angels 00000000000010100101110101100011 demonologist 00000000000000000000000000000000 psychics 00000000000000000000000000000000 magician 00000000000000000000000000000000 dividend-related 00000000000000000000000000000000 gangbusters 00000000000000000000000000000000 Tales 00100000000100100101110101100011 Elm 00100000000000000000000000000000 Shangkun 00100000000000000000000000000000 Amityvilles 00100000000000000000000000000000 self-perpetuating 00000000000000000000000000000000 queried 00000000000000000000000000000000 Kurtz 00100000000000000000000000000000 sensibilities 00000000000000000000000000000000 ectoplasmic 00000000000000000000000000000000 68-year-old 00000000000000000000000000000000 semi-retired 00000000000000000000000000000000 bushy 00000000000000000000000000000000 undiplomatic 00000000000000000000000000000000 careen 00000000000000000000000000000000 position-squaring 00000000000000000000000000000000 slimy 00000000000000000000000000000000 tweed 00000000000000000000000000000000 Named 00100000000011001010010000110010 attic 00000000000000000000000000000000 Advest 00100000000111100011101000101000 rafters 00000000000000000000000000000000 foul-smelling 00000000000000000000000000000000 Mannington 00100000000000000000000000000000 fume-filled 00000000000000000000000000000000 cools 00000000000000000000000000000000 hobos 00000000000000000000000000000000 ghost-busting 00000000000000000000000000000000 non-religious 00000000000000000000000000000000 LeFevre 01000000000000000000000000000000 2500 00000000000000000000000000000000 self-starting 00000000000000000000000000000000 Cuddles 00100000000000000000000000000000 ghostly 00000000000000000000000000000000 vibrating 00000000000000000000000000000000 grudgingly 00000000011001000001001001110010 vial 00000000000000000000000000000000 cornstarch 00000000000000000000000000000000 groundup 00000000000000000000000000000000 saints 00000000000000000000000000000000 clerics 00000000000110111101100110110011 170.3 00000000000000000000000000000000 apparitions 00000000000000000000000000000000 chandeliers 00000000000000000000000000000000 1472.76 00000000000000000000000000000000 eyewitnesses 00000000000000000000000000000000 goings-on 00000000000000000000000000000000 carpenter 00001111111101000000001000001000 open-top 00000000000000000000000000000000 dripping 00000000000000000000000000000000 Pattenden 00100000000000000000000000000000 Alphonsus 00100000000000000000000000000000 theology 00000000000000000000000000000000 Bonaventure 00101111111001100100000000001000 Olean 00100000000000000000000000000000 exorcise 00000000000000000000000000000000 Keegan 00100000000000000000000000000000 obliges 00000000000000000000000000000000 earthbound 00000000000000000000000000000000 Langevin 00100000000000000000000000000000 prayers 00000000000000000000000000000000 185.59 00000000000000000000000000000000 314.09 00000000000000000000000000000000 Warrens 00100000000000000000000000000000 exorcist 00000000000000000000000000000000 hews 00000000000000000000000000000000 liturgy 00000000000000000000000000000000 pronounces 00000000000000000000000000000000 infestation 00000000000000000000000000000000 335.07 00000000000000000000000000000000 begs 00000000000000000000000000000000 abuzz 00000000000000000000000000000000 manhandled 00000000000000000000000000000000 tossing 00000000000000000000000000000000 hank 00000000000000000000000000000000 exorcisms 00000000000000000000000000000000 darkly 00000000000000000000000000000000 stagewhispers 00000000000000000000000000000000 priest 00000000000110001110000000001000 sprinkles 00000000000000000000000000000000 squirming 00000000000000000000000000000000 Selected 00100000000000000101101001000000 chatting 00000000000000000000000000000000 layman 00000000000111111100111110101000 solemnly 00000000000000000000000000000000 entourage 00000000000000000000000000000000 Lyrics 00100000000011000111110101100011 Torch 00100000000000000000000000000000 Raydiola 00100000000000000000000000000000 Reprinted 00100000000000000000000000000000 BROKERAGE 01000000000000001000000010110000 HIRING 01000000000010001110110001000000 languishes 00000000000000000000000000000000 faultlessly 00000000000000000000000000000000 Camilli 00100000000000000000000000000000 163,000 00000000000000000000000000000000 78,625 00000000000000000000000000000000 69,553 00000000000000000000000000000000 Household 00100000000000110000101010110000 1,300-member 00000000000000000000000000000000 SKILLED 01000000000101001000101000110000 intoxication 00000000000000000000000000000000 Bargain-hunting 00100000000000000000000000000000 bulldozer 00000000000000000000000000000000 solemn 00000000000000000000000000000000 unlabeled 00000000000000000000000000000000 taketh 00000000000000000000000000000000 giveth 00000000000000000000000000000000 Employee-benefit 00100000000000000000000000000000 Stafford 00101111111000100110100010001000 ALLWASTE 01000000000000000000000000000000 k 00000000000000000000000000000000 whiplash 00000000000000000000000000000000 Saveth 00100000000000000000000000000000 Rumack 00100000000000000000000000000000 completeness 00000000000000000000000000000000 recraft 00000000000000000000000000000000 DBL 01000000000000000000000000000000 DOWNSIZING 01000000000010011110011010100111 66,743 00000000000000000000000000000000 70,765 00000000000000000000000000000000 shorter-tenure 00000000000000000000000000000000 TEACH 01000000000011111011111110110010 THYSELF 01000000000000000000000000000000 employer-sponsored 00000000000000000000000000000000 Lowndes 00100000000000000000000000000000 MEA 01000000000000000000000000000000 CULPA 01000000000000000000000000000000 leaky 00000000000000000000000000000000 Ednie 00100000000000000000000000000000 WORK 01000000000111111111100010110111 detective-story 00000000000000000000000000000000 Croissier 00100000000000000000000000000000 STUDENTS 01000000000000000000011000110011 SHUN 01000000000001001001101110110010 flipping 00000000000000000000000000000000 621,624 00000000000000000000000000000000 retard 00000000000000000000000000000000 fraternities 00000000000000000000000000000000 postings 00000000000000001000110100100011 Fiery 00100000000001100001000010010000 11.80 00000000000000000000000000000000 geology 00000000000000000000000000000000 Skilled 00100000000101001000101000110000 Racine 00100000000000000000000000000000 746 00000000000000000000000000000000 Brazilians 00100000000110100111100110110011 crisscrossing 00000000000000000000000000000000 mouth-up 00000000000000000000000000000000 thankless 00000000000000000000000000000000 Thatcherism 00100000000000000000000000000000 Marxism 00100000000111100011010010100111 reprove 00000000000000000000000000000000 Britto 00100000000000000000000000000000 Mello 00100000000000000000000000000000 Alagoas 00100000000000000000000000000000 madly 00000000000000000000000000000000 Rede 00100000000000000000000000000000 Globo 00100000000000000000000000000000 hunter 00001111111000011010000000001000 maharajahs 00000000000000000000000000000000 underworked 00000000000000000000000000000000 Leonel 00100000000000000000000000000000 Janeiro 00100000000000000000000000000000 Marxist-leaning 00100000000000000000000000000000 Inacio 00100000000000000000000000000000 mend 00000000000000000000000000000000 vote-getters 00000000000000000000000000000000 Covas 00100000000000000000000000000000 Chinese-American 01000000000000000000000000000000 970 00000000000000000000000000000000 Maluf 00100000000000000000000000000000 Guilherme 00100000000000000000000000000000 Afif 00100000000000000000000000000000 Domingos 00100000000000000000000000000000 rope-sight 00000000000000000000000000000000 stare 00000000000111010101010110110010 teetering 00000000000110100000100000110010 inequalities 00000000000000000000000000000000 boiling 00000000000000000000000000000000 devises 00000000000000000000000000000000 Argentinian 00100000000000000000000000000000 Totally 00100000000000111000000001110010 trillion-dollar 00000000000000000000000000000000 Amaury 00100000000000000000000000000000 Souza 00100000000000000000000000000000 valiant 00000000000000100100011010010000 Mailson 00100000000000000000000000000000 Ferreira 00100000000000000000000000000000 Nobrega 00101111111110111000001010001000 muffled 00000000000000000000000000000000 accelerator 00000000000111000011011001100111 351 00000000000000000000000000000000 snaking 00000000000000000000000000000000 prize-fighter 00000000000000000000000000000000 shirt-sleeved 00000000000000000000000000000000 1721.4 00000000000000000000000000000000 Caters 00100000000010100001101000110010 Grandsire 00100000000000000000000000000000 cruzado 00000000000000000011000111001111 Shuxian 00100000000000000000000000000000 Treble 00100000000000000000000000000000 2120.5 00000000000000000000000000000000 Hosokawa 00100000000000000000000000000000 odd-sounding 00000000000000000000000000000000 inexperience 00000000000100010011111010100111 Koyata 00100000000000000000000000000000 Sparks 00100000000000000000010010000000 Feud 00100000000100101110110000100111 WHICH 01000000000111111111111001110010 Bowen 00101111111011001000001010001000 memorize 00000000000000000000000000000000 Voell 00100000000000000000000000000000 627,000 00000000000000000000000000000000 stifles 00000000000000000000000000000000 Mirante 00100000000000000000000000000000 non-Humana 01000000000000000000000000000000 kidney-stone 00000000000000000000000000000000 lithotripsy 00000000000000000000000000000000 Debt-Burdened 01000000000000000000000000000000 Seek 00100000000111011011001110110010 HEALTH-CARE 01000000000000000000000000000000 high-paying 00000000000000000000000000000000 anti-China 01000000000000000000000000000000 fee-for-service 00000000000000000000000000000000 highest-pitched 00000000000000000000000000000000 Proper 00100000001010000001000000010000 42,374 00000000000000000000000000000000 38,489 00000000000000000000000000000000 Moxley 00100000000000000000000000000000 physician-executive 00000000000000000000000000000000 Korn 00101111011101001100000010001000 Roommates 00100000000000000000000000000000 -combined 00000000000000000000000000000000 12-bed 00000000000000000000000000000000 2142.6 00000000000000000000000000000000 -some 00000000000000000000000000000000 cooperative-care 00000000000000000000000000000000 NYU 01000000000000000000000000000000 CHIEF 01001111111111111111111001110000 NURSING 01000000000111110000001010110000 philanthropist 00000000000000000000000000000000 Meharry 00100000000000000000000000000000 Underserved 00100000000000000000000000000000 mind-boggling 00000000000000000000000000000000 Change-ringing 00100000000000000000000000000000 71.5 00000000000000000000000000000000 codified 00000000000000000000000000000000 Woong 00100000000000000000000000000000 scruff 00000000000000000000000000000000 childish 00000000000110111011110110010000 carillons 00000000000000000000000000000000 Pacwest 00100000000000000000000000000000 19-building 00000000000000000000000000000000 14.97 00000000000000000000000000000000 1.342 00000000000000000000000000000000 22-acre 00000000000000000000000000000000 Amarillo 00100000000111000101101001101000 Y-MP8-232 01000000000000000000000000000000 Rent-A-Lease 01000000000000000000000000000000 19-story 00000000000000000000000000000000 250,000-square-foot 00000000000000000000000000000000 screeched 00000000000000000000000000000000 Camrys 00100000000000000000000000000000 839.4 00000000000000000000000000000000 pealing 00000000000000000000000000000000 Anglian 00100000000000000000000000000000 flightiness 00000000000000000000000000000000 discos 00000000000000000000000000000000 water-authority 00000000000000000000000000000000 Buoyed 00100000000101101111010000110010 953.8 00000000000000000000000000000000 949.3 00000000000000000000000000000000 hoards 00000000000000000000000000000000 Junk-portfolio 00100000000000000000000000000000 comforted 00000000000000000000000000000000 growth-and-income 00000000000000000000000000000000 Avi 00100000000000000000000000000000 Nachmany 00100000000000000000000000000000 colloquium 00000000000000000000000000000000 Collegiate 00100000000000000000000000000000 pie-in-the-sky 00000000000000000000000000000000 powertrain 00000000000000000000000000000000 belfries 00000000000000000000000000000000 discord 00000000000011101111111010100111 still-to-be-named 00000000000000000000000000000000 sometimes-exhausting 00000000000000000000000000000000 octogenarians 00000000000000000000000000000000 Donbas 00100000000000000000000000000000 START 01000000000111101001110110110010 Ukrainian 00100000000000000000000000000000 Ortegas 00100000000000000000000000000000 nuclear-arms 00000000000000000000000000000000 demilitarize 00000000000000000000000000000000 779.8 00000000000000000000000000000000 Beltway-itis 00100000000000000000000000000000 clammy 00000000000000000000000000000000 importation 00000000000000000000000000000000 50.46 00000000000000000000000000000000 intra-administration 00000000000000000000000000000000 perestrokia 00000000000000000000000000000000 muzzles 00000000000000000000000000000000 Kissinger 00101111111110100000110010001000 Letting 00100000000111111000001101000000 7.160 00000000000000000000000000000000 church-goers 00000000000000000000000000000000 Negro 00100000000000000000000000000000 attorney-consultant 00000000000000000000000000000000 1614 00000000000000000000000000000000 monsieur 00000000000000000000000000000000 Michels 00100000000000000000000000000000 Poduska 00100000000000000000000000000000 law-abiding 00000000000000000000000000000000 14. 00000000000000000000000000000000 189.8 00000000000000000000000000000000 rhythmically 00000000000000000000000000000000 long-dormant 00000000000000000000000000000000 resurrection 00000000000000000000000000000000 morning-session 00000000000000000000000000000000 parishioners 00000000000000000000000000000000 evensong 00000000000000000000000000000000 homicides 00000000000000000000000000000000 2210 00000000000000000000000000000000 Heiwa 00100000000000000000000000000000 invalidated 00000000001000111001010000110010 swirl 00000000000011001001001010110111 loveliest 00000000000000000000000000000000 2170 00000000000000000000000000000000 deters 00000000000000000000000000000000 Executions 00100000000110001011110101100011 heinous 00000000000000110011000010010000 resuscitating 00000000000000000000000000000000 meted 00000000000000000000000000000000 Busey 00100000000000000000000000000000 -Of 01000000000000000000000000000000 sentencings 00000000000000000000000000000000 ASLACTON 01000000000000000000000000000000 disprove 00000000000000000000000000000000 disparities 00000000001010101111111010100111 conclusively 00000000000000000000000000000000 Tailors 00100000000000000000000000000000 purport 00000000000110011011000110110010 legislate 00000000110001101111101110110010 government-funded 00000000000000000000000000000000 avec 00000000000000000000000000000000 Ideas 00100000000111101110100101100011 -Dorothy 01000000000000000000000000000000 2680 00000000000000000000000000000000 unintelligible 00000000000000000000000000000000 Narrowing 00100000000110001111010001000000 Kornreich 00100000000000000000000000000000 Rauch 00100000000000000000000000000000 change-ringing 00000000000000000000000000000000 child-safety 00000000000000000000000000000000 535,322 00000000000000000000000000000000 intercompany 00000000000000000000000000000000 Elkin 00100000000000000000000000000000 Thomasini 00100000000000000000000000000000 haggling 00000000000000000000000000000000 insurance-claims 00000000000000000000000000000000 29year 00000000000000000000000000000000 donned 00000000000000000000000000000000 Tombrello 00100000000000000000000000000000 mushy 00000000000000000000000000000000 heroin 00000000000001001010110000100001 post-hearing 00000000000000000000000000000000 3642.90 00000000000000000000000000000000 Bettencourt 00100000000000000000000000000000 10-gallon 00000000000000000000000000000000 flickered 00000000000000000000000000000000 blared 00000000000000000000000000000000 Merton 00100000000000000000000000000000 figuratively 00000000000000000000000000000000 Shake 00100000001111010110010110110010 Melanie 00100000000000000000000000000000 Carvain 00100000000000000000000000000000 Specialty 00100000000010000101010000110000 Dylex 00100000000000000000000000000000 BROWN-FORMAN 01000000000000000000000000000000 respite 00000000000111011011011001000111 tails 00000000000000000000000000000000 Lubkin 00100000000000000000000000000000 Applause 00100000000101110110011010100111 Vanessa 00100000000000000000000000000000 Marketplace 00100000000111111110111001000101 doctoring 00000000000000000000000000000000 2692.65 00000000000000000000000000000000 populace 00000000000111111101011001000101 patient-physician 00000000000000000000000000000000 half-full 00000000000000000000000000000000 Retention 00100000000000010011101101001111 luggage 00000000000111010011111010110000 elections-an 00000000000000000000000000000000 Wrangler 00100000000000000000000000000000 realign... 00000000000000000000000000000000 vehicle-production 00000000000000000000000000000000 inescapable 00000000000000000000000000000000 2,300 00000000000000000000000000000000 one-year-old 00000000000000000000000000000000 D.S. 01000000000000000000000000000000 260.5 00000000000000000000000000000000 laps 00000000000000000000000000000000 Anac 00100000000000000000000000000000 597.8 00000000000000000000000000000000 Twinsburg 00100000000000000000000000000000 410.5 00000000000000000000000000000000 Boake 00100000000000000000000000000000 150-point 00000000000000000000000000000000 Declines 00100000000111101111011010000011 1.1280 00000000000000000000000000000000 1.1270 00000000000000000000000000000000 toddlers 00000000000000000000000000000000 cumulatively 00000000000000000000000000000000 Infants 00100000000101001110011100110011 Small-lot 00100000000000000000000000000000 decal 00000000000000000000000000000000 83,950 00000000000000000000000000000000 123,000 00000000000000000000000000000000 136,000 00000000000000000000000000000000 F.S.L.I.C 01000000000000000000000000000000 COFFEE 01000000000100111001101110110000 74.35 00000000000000000000000000000000 Pan-American 01000000000000000000000000000000 Baris 00100000000000000000000000000000 safety-seat 00000000000000000000000000000000 semesters 00000000000000000000000000000000 Virgilio 00100000000000000000000000000000 380.80 00000000000000000000000000000000 5.2830 00000000000000000000000000000000 500.20 00000000000000000000000000000000 self-managing 00000000000000000000000000000000 -grows 00000000000000000000000000000000 sufficiency 00000000000000000000000000000000 machine-gun-toting 00000000000000000000000000000000 inhalation 00000000000000000000000000000000 soviet 00000000000000001000110100110000 Permission 00100000000100100101000100100111 Uzi-model 00100000000000000000000000000000 shoemaking 00000000000000000000000000000000 general-practitioner 00000000000000000000000000000000 Crashing 00100000000000100011100001000000 Performing 00100000000010001110100001000000 unleashing 00000000000000000000000000000000 cabin-crew 00000000000000000000000000000000 35549.44 00000000000000000000000000000000 132.00 00000000000000000000000000000000 undisturbed 00000000000000000000000000000000 23-month-old 00000000000000000000000000000000 fascism 00000000000000000000000000000000 synthesis 00000000000000000000000000000000 -it 00000000000000000000000000000000 plainclothes 00000000000000011100101001110000 colloquies 00000000000000000000000000000000 Survive 00100000000101111101010110110010 Communism 00100000000111001110110010100111 corporation-socialist 00000000000000000000000000000000 recklessness 00000000000000000000000000000000 162.3 00000000000000000000000000000000 spiritually 00000000000000000000000000000000 clicked 00000000000000000000000000000000 harmonic 00000000000000000000000000000000 911,606 00000000000000000000000000000000 -teetering 00000000000000000000000000000000 -they 00000000000000000000000000000000 Lure 00100000010110111111110110110010 law-governed 00000000000000000000000000000000 necklace 00000000000000000000000000000000 Pirelli 00100000000001100011010100101000 Isadore 00100000000000000000000000000000 pluralism 00000000001011111001110010100111 marginalizing 00000000000000000000000000000000 50.4 00000000000000000000000000000000 terroristic 00000000000000000000000000000000 perpetuating 00000000000000000000000000000000 crescendo 00000000000000000000000000000000 wellplaced 00000000000000000000000000000000 resubmit 00000000000000000000000000000000 2.89 00000000000000000000000000000000 crave 00000000000000000000000000000000 delete 00000000000000000000000000000000 274.2 00000000000000000000000000000000 199.6 00000000000000000000000000000000 121.2 00000000000000000000000000000000 furthers 00000000000000000000000000000000 Contracting 00100000000000000101100000111001 100.8 00000000000000000000000000000000 Public-works 00100000000000000000000000000000 non-building 00000000000000000000000000000000 behind-schedule 00000000000000000000000000000000 SHAREDATA 01000000000000000000000000000000 a-Monthly 01000000000000000000000000000000 Suisse-First 01000000000000000000000000000000 stronger-than-expected 00000000000000000000000000000000 CSFB 01000000000000000000000000000000 Eurodebt 00100000000000000000000000000000 banking-related 00000000000000000000000000000000 Campeau-related 00100000000000000000000000000000 Hann 00100000000000000000000000000000 ChemPlus 01000000000000000000000000000000 securities-price 00000000000000000000000000000000 1000 00000000000000000000000000000000 beggar-thy-neighbor 00000000000000000000000000000000 order-processing 00000000000000000000000000000000 Chapdelaine 00100000000000000000000000000000 customer-service 00000000000000000000000000000000 computer-service 00000000000000000000000000000000 Criticisms 00100000000111111011101000100011 Packaging 00100000001011001011111010110000 already-sizable 00000000000000000000000000000000 Packages 00100000000110111111110100100011 fragmentation 00000000000000000000000000000000 injury-prone 00000000000000000000000000000000 savvier 00000000000000000000000000000000 six-game 00000000000000000000000000000000 money-center 00000000000000000000000000000000 telecast 00000000000000000000000000000000 889,000 00000000000000000000000000000000 romps 00000000000000000000000000000000 Mercantilists 00100000000000000000000000000000 outdistanced 00000000000000000000000000000000 correlate 00000000000110100011011110110010 montgolfiere 00000000000000000000000000000000 126.6 00000000000000000000000000000000 renouncing 00000000000000000000000000000000 barking 00000000000000000000000000000000 high-rate 00000000000000000000000000000000 typographical 00000000000000000000000000000000 hi-tech 00000000000000000000000000000000 hunched 00000000000000000000000000000000 ledgers 00000000000000000000000000000000 abacuses 00000000000000000000000000000000 Deregulation 00100000000111001110011010100111 work-station 00000000000000000000000000000000 Hatakeyama 00100000000000000000000000000000 higher-salaried 00000000000000000000000000000000 copycats 00000000000000000000000000000000 Ungermann-Bass 01000000000000000000000000000000 computer-network 00000000000000000000000000000000 yearbooks 00000000000000000000000000000000 dog-eared 00000000000000000000000000000000 estimable 00000000000000000000000000000000 begot 00000000000000000000000000000000 safe-deposit 00000000000000000000000000000000 Raton 00100000000000010101100010100101 Boca 00100000000111101010011010101000 interloping 00000000000000000000000000000000 perimeter 00000000000000000000000000000000 Asada 00100000000000000000000000000000 printouts 00000000000000000000000000000000 attendee 00000000000000000000000000000000 sub-markets 00000000000000000000000000000000 Earns 00100000001100011101000000010010 Diceon 00100000000000000000000000000000 Boisvert 00100000000000000000000000000000 integrated-technologies 00000000000000000000000000000000 securities-trading 00000000000000000000000000000000 Varying 00100000000000011001000011000000 pound-deutsche 00000000000000000000000000000000 alphabet 00000000000000000000000000000000 typewriter 00000000000011011100001000100001 affliction 00000000000000000000000000000000 Matsuo 00100000000000000000000000000000 Toshimitsu 00100000000000000000000000000000 traceable 00000000000000000000000000000000 tailoring 00000000000000000000000000000000 sub-segments 00000000000000000000000000000000 corporatewide 00000000000000000000000000000000 Judie 00100000000000000000000000000000 unaffordable 00000000000000000000000000000000 spurs 00000000000000000000000000000000 Prayer 00100000000101010001101100100001 Panasonic 00100000000010111000001000110000 cross-licensing 00000000000000000000000000000000 Daignault 00100000000000000000000000000000 NEC-compatible 01000000000000000000000000000000 disapproves 00000000000000000000000000000000 Kazuhiko 00100000000000000000000000000000 Nishi 00100000000000000000000000000000 Ascii 00100000000000000000000000000000 PC-magazine 01000000000000000000000000000000 15-fold 00000000000000000000000000000000 Tateishi 00100000000000000000000000000000 non-economists 00000000000000000000000000000000 opaque 00000000000000000000000000000000 innovators... 00000000000000000000000000000000 Seiko 00100000000000000000000000000000 elbow 00000000000100100101111010110111 cash* 00000000000000000000000000000000 Analyses 00100000000111101100001000100011 retails 00000000000000000000000000000000 lavishing 00000000000000000000000000000000 100,000-guest 00000000000000000000000000000000 regrettable 00000000000000000000000000000000 advertises 00000000000000000000000000000000 colander 00000000000000000000000000000000 AT 01000000000000000000000100101010 OS 01000000000000000000000000000000 Eckhard 00100000000000000000000000000000 IBM-oriented 01000000000000000000000000000000 Connections 00100000000101101100010000100111 ComputerLand 01000000000111100000111100101000 segmenting 00000000000000000000000000000000 redoubling 00000000000000000000000000000000 Vladivostok 00100000000000000000000000000000 Siniscal 00100000000000000000000000000000 McCormack 01001111111000000111110000101001 creepiest 00000000000000000000000000000000 concoctions 00000000000000000000000000000000 outstandingly 00000000000000000000000000000000 zapping 00000000000000000000000000000000 -plus 00000000000000000000000000000000 107.03 00000000000000000000000000000000 Vasilenko 00100000000000000000000000000000 pine 00000000000000110010001000110000 Timing 00100000000111011001111000001111 high-balance 00000000000000000000000000000000 three-week 00000000000000000000000000000000 ovulation 00000000000000000000000000000000 conceiving 00000000000000000000000000000000 repeaters 00000000000000000000000000000000 ominously 00000000000000000000000000000000 rabbit 00000000000101101110000000001000 Etienne-Emile 01000000000000000000000000000000 Baulieu 00100000000000000000000000000000 rabbit-test 00000000000000000000000000000000 cervical 00000000000000000000000000000000 timbers 00000000000000000000000000000000 Genie 00100000000000000000000000000000 Langner 00100000000000000000000000000000 Stubblefield 00100000000000000000000000000000 Roussel-Uclaf 01000000000000000000000000000000 Eleanor 00100000000000000000000000000000 Smeal 00100000000000000000000000000000 Feminist 00100000000111110000000000110000 browbeat 00000000000000000000000000000000 scare-tactic 00000000000000000000000000000000 unsympathetic 00000000000000000000000000000000 2-5 00000000000000000000000000000000 population-control 00000000000000000000000000000000 queuing 00000000000000000000000000000000 stirrups 00000000000000000000000000000000 burbles 00000000000000000000000000000000 Roussel 00100000000000000000000000000000 small-company 00000000000000000000000000000000 anemics 00000000000000000000000000000000 suppository 00000000000000000000000000000000 logjam 00000000000000000000000000000000 Tropical 00100000110001010000001000110000 non-pregnant 00000000000000000000000000000000 trading-company 00000000000000000000000000000000 surgical-abortion 00000000000000000000000000000000 recognizably 00000000000000000000000000000000 reauthorization 00000000000000000000000000000000 pusillanimity 00000000000000000000000000000000 fertility-control 00000000000000000000000000000000 unblinking 00000000000000000000000000000000 uncritical 00000000000000000000000000000000 Kondo 00100000000000000000000000000000 Borneo 00100000000000000000000000000000 poof 00000000000000000000000000000000 witchcraft 00000000000000000000000000000000 financial-service 00000000000000000000000000000000 inbound 00000000000000000000000000000000 recalculations 00000000000000000000000000000000 sogo-shosha 00000000000000000000000000000000 feudal 00000000001000011000001000110000 Prof 00100000000000000000000000000000 loggers 00000000000000000000000000000000 repriced 00000000000000000000000000000000 Bucking 00100000000000000000000000000000 livid 00000000000000000000000000000000 Nissho-Iwai 01000000000000000000000000000000 Sarawak 00100000000000000000000000000000 Ethel 00100000000000000000000000000000 disapprove 00000000000000000000000000000000 program-driven 00000000000000000000000000000000 Schreyer 00100000000000000000000000000000 small... 00000000000000000000000000000000 consulate 00000000000000000000000000000000 marchers 00000000000000000000000000000000 Ichiro 00100000000000000000000000000000 carvers 00000000000000000000000000000000 halfhearted 00000000000000000000000000000000 natural-resources 00000000000000000000000000000000 fabricator 00000000000000000000000000000000 Warrenton 00100000000000000000000000000000 low* 00000000000000000000000000000000 penetration 00000000000111111110010010001111 Board-listed 00100000000000000000000000000000 faxes 00000000000101010001111000110011 Heightened 00100000000001001101010001000000 Pacheco 00100000000000000000000000000000 Rabin 00101111111001000110010010001000 red-figured 00000000000000000000000000000000 backstage 00000000000000000000000000000000 previewing 00000000000000000000000000000000 Stolen 00100000000101001101101001000000 perpetuates 00000000000000000000000000000000 milked 00000000000000000000000000000000 fortuitous 00000000000000000000000000000000 Cartoon 00100000000000000001101100100001 Rye 00100000000000000000000000000000 lesions 00000000000000000000000000000000 Valiant 00100000000000100100011010010000 celluloids 00000000000000000000000000000000 plant-sciences 00000000000000000000000000000000 Sahour 00100000000000000000000000000000 janitor 00000000000000000000000000000000 Sentencing 00100000000011101011000001100111 62,800 00000000000000000000000000000000 Beit 00100000000000000000000000000000 watercolor 00000000000000000000000000000000 Tahitian 00100000000000000000000000000000 Wayland 00100000000000000000000000000000 Pareo 00100000000000000000000000000000 verso 00000000000000000000000000000000 four-crate 00000000000000000000000000000000 air-waybill 00000000000000000000000000000000 Rubinfien 00100000000000000000000000000000 les 00000000000111101110010000011000 bonded 00000000000000000000000000000000 Al-Seyassah 01000000000000000000000000000000 Seacomb 00100000000000000000000000000000 mislaid 00000000000000000000000000000000 misrouted 00000000000000000000000000000000 black-figured 00000000000000000000000000000000 krater 00000000000000000000000000000000 Bund 00100000000000000000000000000000 vase 00000000000000000000000000000000 Charlottesville 00100000000000000000000000000000 circuitous 00000000000000000000000000000000 Nairobi 00100000000000000000000000000000 Anthropology 00100000000000000000000000000000 Mayan 00100000000000000000000000000000 Aztec 00100000000000000000000000000000 Mixtec 00100000000000000000000000000000 Zapotec 00100000000000000000000000000000 archaeological 00000000000000000000000000000000 Sardina 00100000000000000000000000000000 Elisabeth 00100000000000000000000000000000 Stertz 00100000000000000000000000000000 Acapulco 00100000000000000000000000000000 sheaf 00000000000000000000000000000000 gauging 00000000000000000000000000000000 Romantic 00100000000000001011011010010000 Friedrich 00100000000000000000000000000000 melancholy 00000000000000000000000000000000 Jena 00100000000000000000000000000000 Trompe 00100000000000000000000000000000 l'oeil 00000000000000000000000000000000 Kennett 00100000000000000000000000000000 contestants 00000000000000001010000110110011 95.09 00000000000000000000000000000000 Saudis 00100000000111101110111110110011 rectangle 00000000000000000000000000000000 stereotyped 00000000000000000000000000000000 Fahd 00101111111010001000010000101000 Pillay 00100000000000000000000000000000 retort 00000000000000000000000000000000 forger 00000000000000000000000000000000 faking 00000000000110011101111101000000 seaboard 00000000000000000000000000000000 Lowenthal 00100000000000000000000000000000 Escorts 00100000000111100101100110001001 J.Y. 01000000000000000000000000000000 88,500 00000000000000000000000000000000 1988-model 00000000000000000000000000000000 1.6-liter 00000000000000000000000000000000 fuel-injected 00000000000000000000000000000000 denominator 00000000000000000000000000000000 cap. 00000000000000000000000000000000 Tracer 00100000000000000000000000000000 impedes 00000000000000000000000000000000 frontal 00000000000000000000000000000000 reinstalled 00000000000000000000000000000000 crankcase 00000000000000000000000000000000 strainers 00000000000000000000000000000000 1989-model 00000000000000000000000000000000 Broncos 00100000000000000000000000000000 greenmailer 00000000000000000000000000000000 automotive-lighting 00000000000000000000000000000000 26.2 00000000000000000000000000000000 single-employer 00000000000000000000000000000000 Termination 00100000000111111110101101001111 oilman 00001111111000000111100000110101 telephone-information 00000000000000000000000000000000 lower-court 00000000000000000000000000000000 raucous 00000000000000000000000000000000 Bears-Cleveland 01000000000000000000000000000000 stoked 00000000000000000000000000000000 narration 00000000000000000000000000000000 hitched 00000000000000000000000000000000 don 00001111111000000000110000011000 Taizo 00100000000000000000000000000000 Samaritans 00100000000000000000000000000000 deterred 00000000000111100001110000110010 Kafkaesque 00100000000000000000000000000000 intermixed 00000000000000000000000000000000 recounting 00000000000000000000000000000000 airtime 00000000000000000000000000000000 Cardiff 00100000000000000000000000000000 direct-investment 00000000000000000000000000000000 Mitzel 00100000000000000000000000000000 exposure... 00000000000000000000000000000000 dime 00000000000111111111000001000111 latch 00000000000000000000000000000000 10.19 00000000000000000000000000000000 it... 00000000000000000000000000000000 transparent... 00000000000000000000000000000000 deduces 00000000000000000000000000000000 Stibel 00100000000000000000000000000000 Impediments 00100000000000000000000000000000 11.10 00000000000000000000000000000000 howl 00000000000000000000000000000000 triple-C 01000000000000000000000000000000 double-hamburger 00000000000000000000000000000000 earthquake... 00000000000000000000000000000000 latching 00000000000000000000000000000000 94.2 00000000000000000000000000000000 46.6 00000000000000000000000000000000 Northrup 00100000000000000000000000000000 field-crop-seeds 00000000000000000000000000000000 Creswell 00100000000000000000000000000000 Munsell 00100000000000000000000000000000 Fultz 00100000000000000000000000000000 Zirbel 00100000000000000000000000000000 Wegener 00100000000000000000000000000000 GUIDE 01000000000111110001111010110111 Wieden 00100000000000000000000000000000 trade-ad 00000000000000000000000000000000 sportif 00000000000000000000000000000000 ALCOHOL 01000000000010000011110000100001 KOFY 01000000000000000000000000000000 KOFY-FM 01000000000000000000000000000000 RXDC 01000000000000000000000000000000 Amazonian 00100000000000000000000000000000 Tigue 00100000000000000000000000000000 campfire 00000000000000000000000000000000 divers 00000000000110000100100000110011 valve 00000000000100100101000011100111 narratives 00000000000000000000000000000000 Beech-Nut 01000000000000000000000000000000 Nutrition 00100000000000010011001101100001 cosmologies 00000000000000000000000000000000 Hodgkin 00100000000000000000000000000000 weed-killing 00000000000000000000000000000000 spurns 00000000000000000000000000000000 Izquierda 00100000000000000000000000000000 Unida 00100000000000000000000000000000 Satrum 00100000000000000000000000000000 growth-oriented 00000000000000000000000000000000 ailments 00000000000111100100001010100011 lessening 00000000000010100111010001000000 Solchaga 00100000000000000000000000000000 itinerary 00000000000000000000000000000000 Landis 00100000000000000000000000000000 Corp.:8.50 00100000000000000000000000000000 1,000:8.55 00000000000000000000000000000000 out-and-out 00000000000000000000000000000000 51.25 00000000000000000000000000000000 majestically 00000000000000000000000000000000 .9.76 00000000000000000000000000000000 Lauderhill 00100000000000000000000000000000 ravines 00000000000000000000000000000000 Noriegan 00100000000000000000000000000000 fulminations 00000000000000000000000000000000 unpeace 00000000000000000000000000000000 flicking 00000000000000000000000000000000 shootout 00000000000000000000000000000000 interleukin-2 00000000000000000000000000000000 clamped 00000000000000000000000000000000 1.457 00000000000000000000000000000000 launderers 00000000000000000000000000000000 gaping 00000000000000000000000000000000 4.898 00000000000000000000000000000000 more-attractive 00000000000000000000000000000000 3.253 00000000000000000000000000000000 5.276 00000000000000000000000000000000 shad 00001111111000100101000010001000 anti-clotting 00000000000000000000000000000000 Boehringer-Ingleheim 01000000000000000000000000000000 Thomae 00100000000000000000000000000000 Behringwerke 00100000000000000000000000000000 blood-clot 00000000000000000000000000000000 clot-reducing 00000000000000000000000000000000 451.37 00000000000000000000000000000000 5.00 00000000000000000000000000000000 432.61 00000000000000000000000000000000 528.56 00000000000000000000000000000000 Tasurinchi 00100000000000000000000000000000 0.47 00000000000000000000000000000000 438.15 00000000000000000000000000000000 locking-in 00000000000000000000000000000000 Tax-loss 00100000000000000000000000000000 superficially 00000000000000000000000000000000 anthropology 00000000000000000000000000000000 Beige 00100000001011110010001000110000 yoke 00000000000000000000000000000000 Mid-State 01000000000000000000000000000000 ShowBiz 01000000000000000000000000000000 tidily 00000000000000000000000000000000 un-Westernizable 01000000000000000000000000000000 characterizes 00000000000000000000000000000000 super-exciting 00000000000000000000000000000000 recalcitrant 00000000000000000000000000000000 Clive 00100000000000000000000000000000 pre-cooked 00000000000000000000000000000000 tumor-suppressors 00000000000000000000000000000000 growth-suppressing 00000000000000000000000000000000 Oncogenes 00100000000000000000000000000000 Mask 00100000000100001111001010110111 oncogene 00000000000000000000000000000000 Mascarita 00100000000000000000000000000000 cancer-susceptible 00000000000000000000000000000000 Dedham 00100000000000000000000000000000 supressor 00000000000000000000000000000000 birthmark 00000000000000000000000000000000 retinal 00000000000000000000000000000000 Thaddeus 00100000000000000000000000000000 countermove 00000000000000000000000000000000 fingered 00000000000000000000000000000000 cancer-suppressors 00000000000000000000000000000000 wine-dark 00000000000000000000000000000000 unmask 00000000000000000000000000000000 tumor-suppressing 00000000000000000000000000000000 inactivation 00000000000000000000000000000000 prostate 00000000000111101001101011100001 cervix 00000000000000000000000000000000 Plantation 00100000000000000000000000000000 two-hit 00000000000000000000000000000000 ferreting 00000000000000000000000000000000 geneticist 00000000000000000000000000000000 snippets 00000000000000000000000000000000 ethnography 00000000000000000000000000000000 high-strung 00000000000000000000000000000000 biologist 00000000000001001111011110110101 Wilm 00100000000000000000000000000000 bowel 00000000000000000000000000000000 progressing 00000000000000000000000000000000 Zuratas 00100000000000000000000000000000 Fearon 00100000000000000000000000000000 tedious 00000000001100011100011010010000 36-day 00000000000000000000000000000000 deletions 00000000000000000000000000000000 Zen-like 00100000000000000000000000000000 experimentally 00000000000000000000000000000000 crawled 00000000000000000000000000000000 act... 00000000000000000000000000000000 nomadic 00000000000000000000000000000000 deletion 00000000000000000000000000000000 untamed 00000000000000000000000000000000 unknowingly 00000000000000000000000000000000 cancer-suppressing 00000000000000000000000000000000 cancer-gene 00000000000000000000000000000000 Whitehead 00101111111001101101000010001000 mutated 00000000000000000000000000000000 well-tailored 00000000000000000000000000000000 cosmopolitan 00000000001100001000101000110000 Bodmer 00100000000000000000000000000000 Hoffmann-La 01000000000000000000000000000000 spackle 00000000000000000000000000000000 growth-controlling 00000000000000000000000000000000 221.4 00000000000000000000000000000000 genesis 00000000000000000000000000000000 Humpty 00100000000000000000000000000000 Dumpty 00100000000000000000000000000000 glimmer 00000000000111111100100101111111 autions 00000000000000000000000000000000 lower-than-forecast 00000000000000000000000000000000 federal-court 00000000000000000000000000000000 Nautilus 00100000000010111000110100101000 conventioners 00000000000000000000000000000000 bacteria-free 00000000000000000000000000000000 long-shelf-life 00000000000000000000000000000000 pasteurized 00000000000000000000000000000000 heat-using 00000000000000000000000000000000 advisable 00000000000000000000000000000000 billion-pound 00000000000000000000000000000000 over-capacity 00000000000000000000000000000000 corrupting 00000000000000110111011101000000 scornful 00000000000000000000000000000000 region-by-region 00000000000000000000000000000000 inti 00000000000000000000000000000000 Dain-sponsored 00100000000000000000000000000000 Kinnard 00100000000000000000000000000000 misunderstood 00000010111001010100010000110010 rhino 00000000000000000000000000000000 Andes 00100000000000000000000000000000 High-Grade 01000000000000000000000000000000 aseptically 00000000000000000000000000000000 Table 00100000000111001110101101100111 Cohodes 00100000000000000000000000000000 spuds 00000000000000000000000000000000 effort... 00000000000000000000000000000000 contracted-for 00000000000000000000000000000000 230-215 00000000000000000000000000000000 Tube 00100000000001000100111000000001 53%-owned 00000000000000000000000000000000 3057 00000000000000000000000000000000 Maoists 00100000000000000000000000000000 445 00000000000000000000000000000000 single-handed 00000000000000000000000000000000 flinging 00000000000000000000000000000000 seven-million-ton 00000000000000000000000000000000 Massicotte 00100000000000000000000000000000 depredations 00000000000000000000000000000000 strands 00000000000000000000000000000000 French-language 00100000000000000000000000000000 outsells 00000000000000000000000000000000 weaves 00000000000000000000000000000000 fable 00000000000000000000000000000000 18-month-old 00000000000000000000000000000000 province-wide 00000000000000000000000000000000 Donohue 00100000001011001111111100101000 highlands 00000000000000000000000000000000 Caisse 00101111111110111100101000101000 Delwin 00100000000000000000000000000000 Giroux 00100000000000000000000000000000 Integra-A 01000000000000000000000000000000 Pierre-Karl 01000000000000000000000000000000 Straus 00100000000000000000000000000000 despised 00000000000000000000000000000000 Farrar 00100000000000000000000000000000 beta-blocker 00000000000000000000000000000000 high-blood-pressure 00000000000000000000000000000000 Lorex 00100000000000000000000000000000 Synthelabo 00100000000000000000000000000000 mandatory-retirement 00000000000000000000000000000000 deprives 00000000000000000000000000000000 age-discrimination 00000000000000000000000000000000 polluters 00000000000000000000000000000000 Ment 00100000000000000000000000000000 referees 00000000000000000000000000000000 ORGANIZED 01000000000010001001101001000000 CRIME 01000000000101111101110010100111 Strike 00100000000111101111101010110111 magnificently 00000000000000000000000000000000 crime-fighting 00000000000000000000000000000000 Ushuaia 00100000000000000000000000000000 Ensrud 00100000000000000000000000000000 wine-buying 00000000000000000000000000000000 WHITMAN 01001111111001101111000100001000 RANSOM 01000000000100101110000000001000 204-lawyer 00000000000000000000000000000000 Barell 00100000000000000000000000000000 Maged 00100000000000000000000000000000 Riad 00100000000000000000000000000000 SKIRTS 01000000001101101111000000010010 doted 00000000000000000000000000000000 Dominus 00100000000000000000000000000000 drunk-driving 00000000000000000000000000000000 Opus 00100000000000000000000000000000 Siegler 00101111111001101111111010101000 sexist 00000000000000000000000000000000 countersuing 00000000000000000000000000000000 Chardonnays 00100000000000000000000000000000 Chardonnay 00100000000000000000000000000000 Grgich 00100000000000000000000000000000 Cellar 00100000000000000000000000000000 creams 00000000000000000000000000000000 Cedric 00100000000000000000000000000000 27th 00000000000000000000000000000000 6.36 00000000000000000000000000000000 Clemens 00100000000000000000000000000000 ravenous 00000000000000000000000000000000 Terrace 00100000000000000000000000000000 69.1 00000000000000000000000000000000 53.6 00000000000000000000000000000000 winger 00000000000000000000000000000000 87.4 00000000000000000000000000000000 Brannon 00100000000000000000000000000000 54.50 00000000000000000000000000000000 gymnastics 00000000000000000000000000000000 1,874,000 00000000000000000000000000000000 V-22 00100000000000000000000000000000 Osprey 00100000000000000000000000000000 tilt-rotor 00000000000000000000000000000000 next-generation 00000000000000000000000000000000 sticker-shock 00000000000000000000000000000000 production-rate 00000000000000000000000000000000 skill-dilution 00000000000000000000000000000000 1,754,000 00000000000000000000000000000000 Puget 00100000000000000000000000000000 sparing 00000000000000000000000000000000 Weatherly 00100000000000000000000000000000 six-bottle 00000000000000000000000000000000 reconfigure 00000000000000000000000000000000 15.43 00000000000000000000000000000000 -Dell 01000000000000000000000000000000 KC-135 01000000000000000000000000000000 KC-135s 01000000000000000000000000000000 re-thought 00000000000000000000000000000000 Keehn 00100000000000000000000000000000 Brownstein 00100000000000000000000000000000 industrial-product 00000000000000000000000000000000 Owner 00100000000011111111110000110101 ripen 00000000000000000000000000000000 Northy 00100000000000000000000000000000 wellhead 00000000000000000000000000000000 still-undeveloped 00000000000000000000000000000000 insofar 00000000000000000000000000000000 Koerner 00100000000000000000000000000000 Grange 00100000000000000000000000000000 Polar 00100000000000000000000000000000 Prater 00100000000000000000000000000000 unclaimed 00000000000000000000000000000000 vow 00000000000100011110000110110010 golfing 00000000000000000000000000000000 Ziff 00100000000000000000000000000000 Unico 00100000000000000000000000000000 Prudhoe 00100000000010011010011010101000 Secilia 00100000000000000000000000000000 Stoneman 00100000000000000000000000000000 bog 00000000000000000000000000000000 Solaia 00100000000000000000000000000000 Antinori 00100000000000000000000000000000 N.C.-based 01000000000000000000000000000000 Piero 00100000000000000000000000000000 Barbaresco 00100000000000000000000000000000 Gaja 00100000000000000000000000000000 redlining 00000000000000000000000000000000 Corton-Charlemagne 01000000000000000000000000000000 Coche-Dury 01000000000000000000000000000000 Canyon 00100000000011110010100010100101 hers 00000000000000000000000000000000 murmuring 00000000000000000000000000000000 8.44 00000000000000000000000000000000 Forty 00100000000111001111000011000000 three-digit 00000000000000000000000000000000 Zweibel 00100000000000000000000000000000 consentual 00000000000000000000000000000000 813.4 00000000000000000000000000000000 commanded 00000000000100001001010000110010 757.4 00000000000000000000000000000000 Collateralized 00100000000011100010100110110000 1989-3 00000000000000000000000000000000 high-polluting 00000000000000000000000000000000 248.3 00000000000000000000000000000000 double-A-rated 01000000000000000000000000000000 BCI 01000000000000000000000000000000 GRP 01000000000000000000000000000000 posterity 00000000000000000000000000000000 1989-1 00000000000000000000000000000000 Domaine 00100000000000000000000000000000 8.99 00000000000000000000000000000000 RCSB 01000000000000000000000000000000 50.9375 00000000000000000000000000000000 Landonne 00100000000000000000000000000000 101.95 00000000000000000000000000000000 17.06 00000000000000000000000000000000 Rotie 00100000000000000000000000000000 autobiographical 00000000000000000000000000000000 Guigal 00100000000000000000000000000000 encroaching 00000000000000000000000000000000 17.19 00000000000000000000000000000000 1,908 00000000000000000000000000000000 displeases 00000000000000000000000000000000 Comtes 00100000000000000000000000000000 Taittinger 00100000000000000000000000000000 294.6 00000000000000000000000000000000 creditably 00000000000000000000000000000000 Provost 00100000000000000000000000000000 247,000 00000000000000000000000000000000 cuvees 00000000000000000000000000000000 Hiltons 00100000000000000000000000000000 Sauternes 00100000000000000000000000000000 priciest 00000000000000000000000000000000 sound-alike 00000000000000000000000000000000 Helping 00100000000111001010111000110010 crooned 00000000000000000000000000000000 Wanna 00100000000000000000000000000000 bearable 00000000000000000000000000000000 Laird 00101111111100001010000100001000 reaffirms 00000000000000000000000000000000 impunity 00000000000000000000000000000000 imitate 00000000000000000000000000000000 Riserva 00100000000000000000000000000000 Knife 00100000000111010101110000000001 montgolfing 00000000000000000000000000000000 Walkin 00100000000000000000000000000000 vowel 00000000000000000000000000000000 repositories 00000000000000000000000000000000 funn-eeee 00000000000000000000000000000000 Lipman 00100000000000000000000000000000 Buhrmann-Tetterode 01000000000000000000000000000000 tinker 00001111110010110101001000001000 away-from-home 00000000000000000000000000000000 Benelux 00100000000000000000000000000000 Invercon 00100000000000000000000000000000 Papermils 00100000000000000000000000000000 21.25-a-share 00000000000000000000000000000000 Rieslings 00100000000000000000000000000000 Trockenbeerenauslesen 00100000000000000000000000000000 142.32 00000000000000000000000000000000 142.17 00000000000000000000000000000000 funn-ih 00000000000000000000000000000000 rarefied 00000000000000000000000000000000 percussive 00000000000000000000000000000000 Journals 00100000000111101110000100100011 overdoing 00000000000000000000000000000000 harping 00000000000000000000000000000000 377.80 00000000000000000000000000000000 376.80 00000000000000000000000000000000 -consented 00000000000000000000000000000000 lotions 00000000000000000000000000000000 electrical-products 00000000000000000000000000000000 Ash 00100000000110011110000000001000 Perignon 00100000000000000000000000000000 massed 00000000000000000000000000000000 Halle 00100000000000000000000000000000 Schwerin 00100000000000000000000000000000 Reached 00100000000011010000010000110010 Dom 00100000000000000000000000000000 candlelight 00000000000000000000000000000000 Lubyanka 00100000000000000000000000000000 persecuted 00000000000000000000000000000000 Muscovites 00100000000000000000000000000000 splinter 00000000000000000000000000000000 rectified 00000000000000000000000000000000 clubbed 00000000000000000000000000000000 Champagnes 00100000000000000000000000000000 Yugoslavia 00100000000111101100111101101000 dispersed 00000000000010100101101001000000 Albanians 00100000000000000000000000000000 W.N. 01000000000000000000000000000000 Azem 00100000000000000000000000000000 Vlasi 00100000000000000000000000000000 inciting 00000000000000000000000000000000 22-month-old 00000000000000000000000000000000 Zellers 00100000000000000000000000000000 alto 00001111111000000100100100011101 airy 00000000000000000000000000000000 ceasefire 00000000000000000000000000000000 USS 01000000000000000000000000000000 enunciation 00000000000000000000000000000000 five-month-old 00000000000000000000000000000000 Tipasa 00100000000000000000000000000000 Algiers 00100000000000000000000000000000 suvivors 00000000000000000000000000000000 vowels 00000000000000000000000000000000 amnesty 00000000000000000000101000111001 Fossan 00100000000000000000000000000000 construction-management 00000000000000000000000000000000 Montgolfier 00100000000000000000000000000000 52,000 00000000000000000000000000000000 2,440 00000000000000000000000000000000 2,888 00000000000000000000000000000000 NEKOOSA 01000000000111100001001010101000 Cru 00100000000000000000000000000000 Hani 00100000000000000000000000000000 pension-insurance 00000000000000000000000000000000 responsiblilty 00000000000000000000000000000000 Haut-Brion 01000000000000000000000000000000 1191.86 00000000000000000000000000000000 Lafite-Rothschild 01000000000000000000000000000000 216.74 00000000000000000000000000000000 3416.81 00000000000000000000000000000000 129.38 00000000000000000000000000000000 0.11 00000000000000000000000000000000 130.09 00000000000000000000000000000000 0.0040 00000000000000000000000000000000 -Bordeaux 01000000000000000000000000000000 Vowels 00100000000000000000000000000000 341,000 00000000000000000000000000000000 encompass 00000000000010111001101110110010 78.64 00000000000000000000000000000000 CRAY 01000000000111110110100100101000 markup 00000000000111100011100011000111 98.6 00000000000000000000000000000000 Dylan-influenced 00100000000000000000000000000000 -wines 00000000000000000000000000000000 470,000 00000000000000000000000000000000 805,000 00000000000000000000000000000000 l988 00000000000000000000000000000000 harddisk 00000000000000000000000000000000 543,000 00000000000000000000000000000000 200-person 00000000000000000000000000000000 230-person 00000000000000000000000000000000 760-megabyte 00000000000000000000000000000000 Dearie 00100000000000000000000000000000 hook-up 00000000000000000000000000000000 Blossom 00100000000000000000000000000000 Sauvignon 00100000000000000000000000000000 estimation 00000000000000000000000000000000 77,500 00000000000000000000000000000000 flabbergasted 00000000000000000000000000000000 Tatsuhara 00100000000000000000000000000000 Yamane 00100000000000000000000000000000 Mo.-based 00100000000000000000000000000000 hundreds-of-billions-of-yen 00000000000000000000000000000000 Chicago-Warsaw 01000000000000000000000000000000 Chicago-Helsinki 01000000000000000000000000000000 Miami-Madrid 01000000000000000000000000000000 Dallas-Barcelona 01000000000000000000000000000000 Chicago-Paris 01000000000000000000000000000000 Chicago-Manchester 01000000000000000000000000000000 Christy 00100000000000000000000000000000 transatlantic 00000000000001001000001010110000 PanAm 01000000000000000000000000000000 42.75 00000000000000000000000000000000 counterbids 00000000000000000000000000000000 786,700 00000000000000000000000000000000 Cellars 00100000000000000000000000000000 corrugated 00000000000000000000000000000000 Derel 00100000000000000000000000000000 less-cyclical 00000000000000000000000000000000 Killeen 00100000000000000000000000000000 softwood 00000000000000000000000000000000 40s 00000000000000000000000000000000 244.8 00000000000000000000000000000000 F-A-18 01000000000000000000000000000000 motors. 00000000000000000000000000000000 Angier 00100000000000000000000000000000 22.3 00000000000000000000000000000000 Reddington 00100000000000000000000000000000 C-12 00100000000000000000000000000000 Cinegrill 00100000000000000000000000000000 Undead 00100000000000000000000000000000 unconsciously 00000000000000000000000000000000 denigration 00000000000000000000000000000000 scapegoating 00000000000000000000000000000000 cogeneration-plant 00000000000000000000000000000000 followership 00000000000000000000000000000000 992,000 00000000000000000000000000000000 Career 00100000000111101100010000000001 Kearny 00100000000000000000000000000000 Thayer 00100000000000000000000000000000 Mahan 00100000000000000000000000000000 officialdom 00000000000101110000101101101000 overlooks 00000000000000000000000000000000 Beaumont 00100000000000000000000000000000 1,000-ship 00000000000000000000000000000000 Stirlen 00100000000000000000000000000000 Banerian 00100000000000000000000000000000 Gone 00100000000101101010110000110010 reclaiming 00000000000000000000000000000000 belting 00000000000000000000000000000000 gas-turbine 00000000000000000000000000000000 GOODY 01000000000000000000000000000000 chi-chi 00000000000000000000000000000000 Doskocil 00100000000101100011111100101000 bank-debt 00000000000000000000000000000000 121.6 00000000000000000000000000000000 merger-related 00000000000000000000000000000000 sowing 00000000000000000000000000000000 earrings 00000000000000000000000000000000 gossiping 00000000000000000000000000000000 heartwarmingly 00000000000000000000000000000000 wort 00000000000000000000000000000000 Grammys 00100000000000000000000000000000 scarfing 00000000000000000000000000000000 Aiken 00100000000000000000000000000000 fads 00000000000000000000000000000000 cod-liver 00000000000000000000000000000000 T.V. 01000000000000000000000000000000 Bonnell 00100000000000000000000000000000 Arvind 00100000000000000000000000000000 raves 00000000000000000000000000000000 Milne 00100000000000000000000000000000 cholesterol-fearing 00000000000000000000000000000000 Pysllium 00100000000000000000000000000000 legume 00000000000000000000000000000000 frugal 00000000000000000000000000000000 vegetarians 00000000000000000000000000000000 Boorse 00100000000000000000000000000000 Plantago 00100000000000000000000000000000 ovata 00000000000000000000000000000000 Designated 00100000000101000001101001000000 anti-diarrheal 00000000000000000000000000000000 fanatic 00000000000000000000000000000000 Branch 00100000000000101010110010000001 Horsham 00100000001110111010111100101000 urethra 00000000000000000000000000000000 duodenal 00000000000000000000000000000000 ulcers 00000000000000000000000000000000 gouty 00000000000000000000000000000000 hairy 00000000000000000000000000000000 colorlessness 00000000000000000000000000000000 grams 00000000000000000000000000000000 fleas 00000000000000000000000000000000 transluscent 00000000000000000000000000000000 sifted 00000000000000000000000000000000 laxatives 00000000000000000000000000000000 58-year-old 00000000000000000000000000000000 Fiberall 00100000000000000000000000000000 Elmhurst 00100000000000000000000000000000 teaspoons 00000000000000000000000000000000 low-density 00000000000000000000000000000000 lipoproteins 00000000000000000000000000000000 Chiodo 00100000000000000000000000000000 beet 00000000000100101111101110110000 Duchossois 00100000000000000000000000000000 Thrall 00100000000000000000000000000000 psyllium-fortified 00000000000000000000000000000000 Heartwise 00100000000000000000000000000000 Pond 00100000000010110110111000000001 counter-claims 00000000000000000000000000000000 ingest 00000000000000000000000000000000 starve 00000001111101111101010110110010 covetous 00000000000000000000000000000000 Lakshmipura 00100000000000000000000000000000 brags 00000000000000000000000000000000 regularity 00000000001101011110011010100111 grasping 00000000000011110110100001000000 lumped 00000000011001110010110000110010 unglamorous 00000000000000000000000000000000 sarsaparilla 00000000000000000000000000000000 Nux 00100000000000000000000000000000 vomica 00000000000000000000000000000000 choruses 00000000000000000000000000000000 sandy 00000000000000111010001000011000 dew 00000000000000000000000000000000 dryness 00000000000000000000000000000000 glean 00000000000000000000000000000000 sparkle 00000000000010001001001010110111 Parkhaji 00100000000000000000000000000000 swathed 00000000000000000000000000000000 crimson 00000000000000000000000000000000 chenille 00000000000000000000000000000000 Hakim 00101111111100101010101010001000 416,000 00000000000000000000000000000000 36,000 00000000000000000000000000000000 more-affordable 00000000000000000000000000000000 herniated 00000000000000000000000000000000 Covering 00100000010100010000000000001010 sport-utility 00000000000000000000000000000000 medically 00000000000000000000000000000000 uninsurable 00000000000000000000000000000000 mockery 00000000000000000000000000000000 Explorer 00100000000000000000000000000000 self-insure 00000000000000000000000000000000 small-employer 00000000000000000000000000000000 Heinhold 00100000000000000000000000000000 Ironweed 00100000000000000000000000000000 Abyss 00100000000000000000000000000000 Cab 00100000000001111100001000100001 dereliction 00000000000000000000000000000000 Patricelli 00100000000000000000000000000000 insurance-cost 00000000000000000000000000000000 Kennedy-Waxman 01000000000000000000000000000000 pegs 00000000000000000000000000000000 Crew 00100000000000000011010100000001 health-benefits 00000000000000000000000000000000 F-series 00100000000000000000000000000000 200-300 00000000000000000000000000000000 Chafic 00100000000000000000000000000000 Cotran 00100000000000000000000000000000 insurance-industry 00000000000000000000000000000000 unhealthy 00000000000011010001110100010000 auto-safety 00000000000000000000000000000000 Colonsville 00100000000000000000000000000000 insurance-rate 00000000000000000000000000000000 140.91 00000000000000000000000000000000 guile 00000000000000000000000000000000 Dompierre 00100000000000000000000000000000 29.75 00000000000000000000000000000000 713.5 00000000000000000000000000000000 Valrico 00100000000000000000000000000000 278.4 00000000000000000000000000000000 atrocious 00000000000000000000000000000000 Japanese-made 00100000000000000000000000000000 photocopiers 00000000000000000000000000000000 photofinishing 00000000000001110011111010110000 Semiconductors 00100000000111001110111001100011 236.8 00000000000000000000000000000000 Seasonally 00100000000101001111001001110010 then-52 00000000000000000000000000000000 slowball 00000000000000000000000000000000 shockproof 00000000000000000000000000000000 side-crash 00000000000000000000000000000000 Euphoria 00100000000000101110111010100111 70.6 00000000000000000000000000000000 Stuffing 00100000000000000000000000000000 pitcher-coach 00000000000000000000000000000000 Waning 00100000000010000111110110010000 incongruities 00000000000000000000000000000000 Ramos 00100000000001001000000001001000 perilous 00000000000000010110010010010000 China-bound 00100000000000000000000000000000 streams 00000000001011100010001000100011 Albanese 00100000000000000000000000000000 brute 00000000000111000100110110110000 Maureen 00100000000000000000000000000000 soon-to-be 00000000000000000000000000000000 Miron 00100000000000000000000000000000 White-haired 00100000000000000000000000000000 middle-of-the-road 00000000000000000000000000000000 dubs 00000000000000000000000000000000 16,072 00000000000000000000000000000000 1967-68 00000000000000000000000000000000 1974-75 00000000000000000000000000000000 80-plus 00000000000000000000000000000000 classed 00000000000000000000000000000000 Used 00100000000011010000110000110010 Barings 00100000000000000000000000000000 car-safety 00000000000000000000000000000000 Piers 00100000000000000000000000000000 doomsday 00000000000000000000000000000000 dread 00000000000000000000000000000000 602 00000000000000000000000000000000 headrests 00000000000000000000000000000000 front-seat 00000000000000000000000000000000 Hackman 00100000000000000000000000000000 Emigration 00100000000010101100011100000111 milestone 00000000000111000100111010110101 Anthong 00100000000000000000000000000000 lap-shoulder 00000000000000000000000000000000 381,000 00000000000000000000000000000000 J.V 01000000000000000000000000000000 62.625 00000000000000000000000000000000 cigar-chomping 00000000000000000000000000000000 anti-intellectual 00000000000000000000000000000000 blacklisting 00000000000000000000000000000000 -would 00000000000000000000000000000000 Joining 00100000000111111101101101000000 Boon-Sanwa 01000000000000000000000000000000 reestablish 00000000000100010111111110110010 unequal 00000000000001000011000110010000 Penang 00100000000000000000000000000000 Boon 00100000000111111111011100010111 confluence 00000000000000000000000000000000 high-mindedness 00000000000000000000000000000000 activism 00000000000111001100101001100111 Virgil 00100000000000000000000000000000 Tibbs 00100000000000000000000000000000 Anne-Marie 01000000000000000000000000000000 Sparta 00100000000000000000000000000000 characterizing 00000000000000000000000000000000 fastballs 00000000000000000000000000000000 Spitler 00100000000000000000000000000000 Shutter 00100000000000000000000000000000 lipsticks 00000000000000000000000000000000 asset-sale 00000000000000000000000000000000 animosity... 00000000000000000000000000000000 comprehension 00000000000000000000000000000000 Hogg 00100000000000000000000000000000 18,444 00000000000000000000000000000000 Jewboy 00100000000000000000000000000000 dweller 00000000000000000000000000000000 prodigal 00000000000000110111010011010000 lighter-than-air 00000000000000000000000000000000 Jaclyn 00100000000000000000000000000000 tolerable 00000000000000000000000000000000 kinfolk 00000000000000000000000000000000 peaches 00000000000000000000000000000000 repressing 00000000000000000000000000000000 uptight 00000000000000000000000000000000 Longwood 00100000000000000000000000000000 gunny 00000000000000000000000000000000 supper 00000000000000000000000000000000 Amin 00100000000000000000000000000000 glares 00000000000000000000000000000000 fleshpots 00000000000000000000000000000000 patriarchal 00000000000000000000000000000000 sniggeringly 00000000000000000000000000000000 revoltingly 00000000000000000000000000000000 lecherous 00000000000000000000000000000000 attacker 00000000000000000000000000000000 dystopia 00000000000000000000000000000000 Handmaid 00100000000000000000000000000000 Tale 00100000000110101101100101100111 Obligations 00100000000111111111111100000011 DeMunn 01000000000000000000000000000000 Masur 00100000000000000000000000000000 simple-minded 00000000000000000000000000000000 affectionate 00000000000000000000000000000000 patriarchy 00000000000000000000000000000000 pathetic 00000000000000000000000000000000 Latham 00100000000000000000000000000000 coward 00000000000000000000000000000000 sister-in-law 00000000000000000000000000000000 sniveling 00000000000000000000000000000000 prude 00000000000000000000000000000000 beanballs 00000000000000000000000000000000 bruises 00000000000000000000000000000000 bullies 00000000000000000000000000000000 drooling 00000000000000000000000000000000 dwarfed 00000000000000000000000000000000 Sis 00100000000000000000000000000000 masculine 00000000000000000000000000000000 Jalaalwalikraam 00100000000000000000000000000000 brushbacks 00000000000000000000000000000000 rapist 00000000000000000000000000000000 ogles 00000000000000000000000000000000 undress 00000000000000000000000000000000 trussed-up 00000000000000000000000000000000 flashbacks 00000000000000000000000000000000 feminism 00000000000000000000000000000000 Glenham 00100000000000000000000000000000 assailant 00000000000000000000000000000000 stalking 00000000000000000000000000000000 Textiles 00100000000111110011111010110000 mini-slip 00000000000000000000000000000000 push-up 00000000000000000000000000000000 marketing-communications 00000000000000000000000000000000 175.5 00000000000000000000000000000000 13.44 00000000000000000000000000000000 Braun 00100000000000000000000000000000 Knapp 00101111111111000001000010001000 1,150 00000000000000000000000000000000 35.6 00000000000000000000000000000000 grounds-care 00000000000000000000000000000000 663 00000000000000000000000000000000 double-B-minus 01000000000000000000000000000000 Putty 00100000000000000000000000000000 soulful 00000000000000000000000000000000 metal-workers 00000000000000000000000000000000 pleadingly 00000000000000000000000000000000 tyke 00000000000000000000000000000000 identity-management 00000000000000000000000000000000 Homeroom 00100000000000000000000000000000 fourth-grade 00000000000000000000000000000000 flunking 00000000000000000000000000000000 Alyce 00100000000000000000000000000000 Rolodexes 00100000000000000000000000000000 whale 00000000000000000100110100000001 breaded 00000000000000000000000000000000 uncannily 00000000000000000000000000000000 barber 00001111111000001011010100001000 rib 00000000000000000000000000000000 jab 00000000000000000000000000000000 Landor 00100000000000000000000000000000 Murder 00100000000101111111011010100111 Wrote 00100000000111111111010111000010 weed 00000000110010010110010110110010 viewings 00000000000000000000000000000000 accolades 00000000000000000000000000000000 Alligood 00100000000000000000000000000000 Carews 00100000000000000000000000000000 convocation 00000000000000000000000000000000 eastward 00000000000000000000000000000000 Pan-Alberta 01000000000000000000000000000000 LANDOR 01000000000000000000000000000000 pick-up 00000000000000000000000000000000 1610 00000000000000000000000000000000 1818 00000000000000000000000000000000 consumer-driven 00000000000000000000000000000000 smug 00000000000000000000000000000000 2890 00000000000000000000000000000000 twice-yearly 00000000000000000000000000000000 Avrett 00100000000000000000000000000000 agreed-upon 00000000000000000000000000000000 prim 00000000000000000000000000000000 Surprise 00100000000110101111101010110111 Developed 00100000010111101100010000110010 rainbow 00000000000010100100100000100001 2410 00000000000000000000000000000000 neckties 00000000000000000000000000000000 3636.06 00000000000000000000000000000000 preppy 00000000000000000000000000000000 floppy-tie 00000000000000000000000000000000 stereotype 00000000000000000000000000000000 cheeky 00000000000000000000000000000000 well-hit 00000000000000000000000000000000 stunted 00000000000000000000000000000000 290.1 00000000000000000000000000000000 52-store 00000000000000000000000000000000 40.5 00000000000000000000000000000000 286.8 00000000000000000000000000000000 clothiers 00000000000000000000000000000000 dabbling 00000000000000000000000000000000 stodgy 00000000001010011100011010010000 Barneys 00100000000000000000000000000000 status-conscious 00000000000000000000000000000000 Andover 00100000000011000011010100101000 36.87 00000000000000000000000000000000 forgets 00000000000110000000110111000010 Farmer 00100000000100100000110010110101 savoring 00000000000000000000000000000000 wood-and-brass 00000000000000000000000000000000 2676.60 00000000000000000000000000000000 nullified 00000000000000000000000000000000 backpacks 00000000000000000000000000000000 three-button 00000000000000000000000000000000 center-vented 00000000000000000000000000000000 two-button 00000000000000000000000000000000 tapered 00000000000000000000000000000000 pleated 00000000000000000000000000000000 Dresdner-ABD 01000000000000000000000000000000 Matsuda 00100000000000000000000000000000 replacement-car 00000000000000000000000000000000 Takamori 00100000000000000000000000000000 smoothed 00000000000000000000000000000000 Muscolina 00100000000000000000000000000000 then-husband 00000000000000000000000000000000 CAMPAIGN 01000000000011000111000001100111 serviced 00000000000000000000000000000000 Oriole 00100000000000000000000000000000 801.2 00000000000000000000000000000000 Pompano 00100000000000000000000000000000 Poulenc 00100000001100110111110100100001 submits 00000000001111001011000000010010 5,745,188 00000000000000000000000000000000 weatherbeaten 00000000000000000000000000000000 1,826,596 00000000000000000000000000000000 11,580 00000000000000000000000000000000 C415 00100000000000000000000000000000 35452.72 00000000000000000000000000000000 26.805 00000000000000000000000000000000 1.439 00000000000000000000000000000000 water-pollution 00000000000000000000000000000000 446.5 00000000000000000000000000000000 GMC 01000000000000000000000000000000 35.28 00000000000000000000000000000000 Quant 00100000000000000000000000000000 once-vast 00000000000000000000000000000000 governmemt 00000000000000000000000000000000 silver-conspiracy 00000000000000000000000000000000 Minpeco-Manufacturers 01000000000000000000000000000000 Eizenstat 00100000000000000000000000000000 Frazer 00100000000000000000000000000000 rail-car 00000000000000000000000000000000 35417.44 00000000000000000000000000000000 74%-owned 00000000000000000000000000000000 Railcar 00100000000000000000000000000000 Dugdale 00100000000000000000000000000000 VanSant 01000000000000000000000000000000 computing-services 00000000000000000000000000000000 1,059.04 00000000000000000000000000000000 41.725 00000000000000000000000000000000 46.50 00000000000000000000000000000000 circular 00000000000000010000001011100111 Spiro 00101111111011001100101100011000 155mm 00000000000000000000000000000000 quantitive 00000000000000000000000000000000 975,000 00000000000000000000000000000000 asbestos-abatement 00000000000000000000000000000000 21.72 00000000000000000000000000000000 10,674,500 00000000000000000000000000000000 Sows 00100000000000000000000000000000 13.78 00000000000000000000000000000000 1,070,000 00000000000000000000000000000000 Earle 00100000000000000000000000000000 Charlet 00100000000000000000000000000000 Upset 00100000000111001101110000110010 dotting 00000000000000000000000000000000 Motorcycle 00100000000011000100001000100001 mercenary 00000000000000000000000000000000 Viet 00100000000000000000000000000000 Broadstar 00100000000000000000000000000000 Najarian 00100000000000000000000000000000 Portrayal 00100000000000000000000000000000 Fremantle 00100000000000000000000000000000 E.C. 01000000000000000000000000000000 Scana 00100000000000000000000000000000 165,000 00000000000000000000000000000000 -agreed 00000000000000000000000000000000 yuk 00000000000110011011010001001000 Norwick 00100000000000000000000000000000 glowed 00000000000000000000000000000000 INTERPUBLIC 01000000000001011001010100101000 Cover-Up 01000000000000000000000000000000 Nesconset 00100000000000000000000000000000 scar 00000000000000000000000000000000 low-caliber 00000000000000000000000000000000 Stennett 00100000000000000000000000000000 brightening 00000000000000000000000000000000 skies 00000000000100100100111101100011 pulverizing 00000000000000000000000000000000 Phipps 00100000000000000000000000000000 gunners 00000000000000000000000000000000 Air-raid 00100000000000000000000000000000 sirens 00000000000000000000000000000000 2:25 00000000000000000000000000000000 summoning 00000000000000000000000000000000 Rennie 00100000000000000000000000000000 keenly 00000000000000000000000000000000 12.8-pound 00000000000000000000000000000000 market-affecting 00000000000000000000000000000000 126,000 00000000000000000000000000000000 Old-House 01000000000000000000000000000000 Pirate 00100000000000000000000000000000 1,430 00000000000000000000000000000000 expended 00000000000000000000000000000000 elevations 00000000000000000000000000000000 Bumkins 00100000000000000000000000000000 uselessly 00000000000000000000000000000000 Soups 00100000000000000000000000000000 Enquirer 00100000000000000000000000000000 down-to-earth 00000000000000000000000000000000 UFOs 01000000000000000000000000000000 enlightenment 00000000000111000001110010100111 coughing 00000000000000000000000000000000 pinheaded 00000000000000000000000000000000 1701.7 00000000000000000000000000000000 recyclability 00000000000000000000000000000000 Modifications 00100000000111111010011000100011 radioing 00000000000000000000000000000000 kidnap 00000000000000000000000000000000 mailmen 00000000000000000000000000000000 Finney 00100000000000000000000000000000 Invasion 00100000000110111100111001100111 Snatchers 00100000000000000000000000000000 Fireside 00100000000000000000000000000000 soulless 00000000000111111111001001010000 pod 00000000000000000000000000000000 2102.2 00000000000000000000000000000000 Majestic 00100000000000000000000000000000 Roswell 00100000000000000000000000000000 Communion 00100000000000000000000000000000 Ritter 00100000000000000000000000000000 popularly 00000000000000000000000000000000 sage 00000000000101011001000000001000 flower-inscribed 00000000000000000000000000000000 2117.1 00000000000000000000000000000000 2112.2 00000000000000000000000000000000 sweet-natured 00000000000000000000000000000000 puffed-up 00000000000000000000000000000000 marshmallow 00000000000000000000000000000000 Shiflett 00100000000000000000000000000000 Towering 00100000000000000000000000000000 Syb 00100000000000000000000000000000 president-finance 00000000000000000000000000000000 206.3 00000000000000000000000000000000 Jaap 00100000000000000000000000000000 Visker 00100000000000000000000000000000 Amsterdam-Rotterdam 01000000000000000000000000000000 polyproplene 00000000000000000000000000000000 gallant 00000000000000000000000000000000 Stauffer 00100000000000000000000000000000 multiplying 00000000000000000000000000000000 slimming 00000000000000000000000000000000 Rankin 00100000000000000000000000000000 fiber-related 00000000000000000000000000000000 rayon 00000000000000000000000000000000 arrows 00000000000000000000000000000000 bullet-proof 00000000000000000000000000000000 Kevlar 00100000000000000000000000000000 diagram 00000000000000000000000000000000 Sanderoff 00100000000000000000000000000000 Marvelon 00100000000000000000000000000000 veterinary 00000000000000000000000000000000 Veterinary 00100000000000000000000000000000 flu 00000000000011001010101100100001 pay-movie 00000000000000000000000000000000 omens 00000000000000000000000000000000 12,252 00000000000000000000000000000000 Departure 00100000000111011111110001100111 Reveals 00100000000011010011000000010010 Poison 00100000000100001100101000101000 Keynesians 00100000000000000000000000000000 devaluations 00000000000000000000101110000011 globalist 00000000000000000000000000000000 dyed-in-the-wool 00000000000000000000000000000000 Granada 00100000000001010101010100101000 Crunch 00100000000111100110101101100111 permanence 00000000000000000000000000000000 egg-on-the-face 00000000000000000000000000000000 deutsche 00000000000010010001111000101000 validating 00000000000000000000000000000000 423.5 00000000000000000000000000000000 alienated 00000000001110100001110000110010 Ridgefield 00100000000000000000000000000000 Albion 00100000000000000000000000000000 largish 00000000000000000000000000000000 ersatz 00000000000000000000000000000000 adepts 00000000000000000000000000000000 mavens 00000000000000000000000000000000 stickiness 00000000000000000000000000000000 supply-sider 00000000000000000000000000000000 chicago 00000000000111111110100001101000 reefs 00000000000000000000000000000000 parities 00000000000000000000000000000000 pound-DM 01000000000000000000000000000000 ndpoint 00000000000000000000000000000000 imperatives 00000000000000000000000000000000 low-tax 00000000000000000000000000000000 deregulated 00000000000101000101101001000000 shadowing 00000000000000000000000000000000 sta 00000000000000000000000000000000 10,000-circulation 00000000000000000000000000000000 incentive-maximizing 00000000000000000000000000000000 chairman-elect 00000000000000000000000000000000 British-born 00100000000000000000000000000000 24-year 00000000000000000000000000000000 Surrounded 00100000001101101111010000110010 boating 00000000000011001000101100100001 fastidious 00000000000000000000000000000000 high-handed 00000000000000000000000000000000 client-service 00000000000000000000000000000000 delegating 00000000000000000000000000000000 Orchestration 00100000000000000000000000000000 Ogilvyspeak 00100000000000000000000000000000 Vnet 00100000000000000000000000000000 rampage 00000000000000000000000000000000 top... 00000000000000000000000000000000 detailsman 00000000000000000000000000000000 whirling 00000000000000000000000000000000 decked 00000000000000000000000000000000 lame 00000000000101111010001000110000 cost-saving 00000000000000000000000000000000 Aloha 00100000000001011111110110101000 Muse 00100000000000000000000000000000 sublet 00000000000000000000000000000000 Steps 00100000000110001011001000100011 hard-hitting 00000000000000000000000000000000 conceivably 00000001101100000000001001110010 Georgescu 00100000000000000000000000000000 Partner 00100000000111111111101000110101 Cheryl 00100000000000000000000000000000 Yastrzemski 00100000000000000000000000000000 composting 00000000000000000000000000000000 6,542,000 00000000000000000000000000000000 683,000 00000000000000000000000000000000 Comparable 00100000000101100111010101010000 Bing 00100000000000000000000000000000 6.97 00000000000000000000000000000000 6.61 00000000000000000000000000000000 926.1 00000000000000000000000000000000 728.5 00000000000000000000000000000000 457.5 00000000000000000000000000000000 95.7 00000000000000000000000000000000 Mona 00100000000000000000000000000000 Practical 00100000000000001001000000010000 thumbing 00000000000000000000000000000000 -fawning 00000000000000000000000000000000 breakage 00000000011111000101110010100111 cozy 00000000000010010100011010010000 revenue-desperate 00000000000000000000000000000000 sipping 00000000000000000000000000000000 Nederlanden 00100000000000000000000000000000 McKinzie 01000000000000000000000000000000 certin 00000000000000000000000000000000 candybar 00000000000000000000000000000000 Lisbeth 00100000000000000000000000000000 Echeandia 00100000000000000000000000000000 Fla.-based 00100000000000000000000000000000 Confectioner 00100000000000000000000000000000 Uptick 00100000000000000000000000000000 182.6 00000000000000000000000000000000 Catastrophe 00100000000111000010101101100111 Wu 00101111111100100110110010001000 235.5 00000000000000000000000000000000 525.8 00000000000000000000000000000000 504.2 00000000000000000000000000000000 4.41 00000000000000000000000000000000 revolutionaries 00000000000000000000000000000000 house-painting 00000000000000000000000000000000 hustles 00000000000000000000000000000000 Estates 00100000000111110011110001100011 appartus 00000000000000000000000000000000 pounce 00000000000000000000000000000000 loudspeakers 00000000000000000000000000000000 WHAS 01000000000000000000000000000000 Kuvin 00100000000000000000000000000000 NBC-owned 01000000000000000000000000000000 Viva 00100000000000000000000000000000 viva 00000000000000000000000000000000 unthinkable 00000000000111011101110110010000 illogical 00000000000000000000000000000000 warily 00000000000000000000000000000000 Swearingen 00101111011100001100000010001000 Tambo 00100000000000000000000000000000 peacemakers 00000000000000000000000000000000 signifying 00000000000000000000000000000000 Zwelakhe 00100000000000000000000000000000 Speakers 00100000000111110010110101100011 Phineas 00100000000000000000000000000000 Leads 00100000110000000011000000010010 circled 00000000000000000000000000000000 unconditionally 00001010010000000000010001110010 unilaterally 00000000010101000000010001110010 WTVJ 01000000000000000000000000000000 Bew 00100000000000000000000000000000 Lobo 00100000000000000000000000000000 Arm 00100000000111111011110000110101 century-old 00000000000000000000000000000000 legion 00000000000000000000000000000000 EMC 01000000000000000000000000000000 150-megawatt 00000000000000000000000000000000 300-megawatt 00000000000000000000000000000000 Intercontinental 00100000000000001001101010110000 annnouncement 00000000000000000000000000000000 55-megawatt 00000000000000000000000000000000 Borax 00100000000000000000000000000000 Misubishi 00100000000000000000000000000000 utilize 00000000000110010111111110110010 Westinghouse-Mitsubishi 01000000000000000000000000000000 non-equity 00000000000000000000000000000000 Rangers 00100000000000000111101010101000 then-21 00000000000000000000000000000000 Ruettgers 00100000000000000000000000000000 AP600 01000000000000000000000000000000 2-8 00000000000000000000000000000000 bathroom 00000000000111110001110000100001 Survived 00100000000101000101010000110010 Richterian 00100000000000000000000000000000 mercifully 00000000000000000000000000000000 Longest 00100000000101110011010011010000 Marino 00100000000000000000000000000000 baseballs 00000000000000000000000000000000 Pale 00100000000011010110011010010000 Pachyderms 00100000000000000000000000000000 specialty-metals 00000000000000000000000000000000 confines 00000000000111111100011000001111 13-7 00000000000000000000000000000000 9-6 00000000000000000000000000000000 pre-quake 00000000000000000000000000000000 geologically 00000000000000000000000000000000 trifle 00000000000000000000000000000000 Rabia 00100000000000000000000000000000 8-2 00000000000000000000000000000000 Zayed 00100000000000000000000000000000 flied 00000000000000000000000000000000 Veselich 00100000000000000000000000000000 exhaled 00000000000000000000000000000000 Derby 00100000000001000000101100100001 mighta 00000000000000000000000000000000 Huxtable 00100000000000000000000000000000 champs 00000000000000000000000000000000 374.19 00000000000000000000000000000000 faultless 00000000000000000000000000000000 globalization 00000000000111010011011010100111 bewitched 00000000000000000000000000000000 Leagues 00100000000111111101101001110011 374.20 00000000000000000000000000000000 Jays 00100000000000000000000000000000 cross-bay 00000000000000000000000000000000 pithiest 00000000000000000000000000000000 just-concluded 00000000000000000000000000000000 five-home-run 00000000000000000000000000000000 11,762 00000000000000000000000000000000 morrow 00001111111111111100111000001000 outfielders 00000000000000000000000000000000 do-everything 00000000000000000000000000000000 leadoff 00000000000000000000000000000000 Dominguez 00100000000000000000000000000000 redo 00000000000000000000000000000000 glove 00000000000010011100001000100001 12-day 00000000000000000000000000000000 more-muscular 00000000000000000000000000000000 quake-hit 00000000000000000000000000000000 toasted 00000000000000000000000000000000 dispensed 00000000000000000000000000000000 deference 00000000000111111111101101010111 championship-team 00000000000000000000000000000000 outshine 00000000000000000000000000000000 Cy 00100000000000000000000000000000 best-pitcher 00000000000000000000000000000000 dynasty 00000000000111110000000001000111 post-game 00000000000000000000000000000000 Alderson 00100000000000000000000000000000 dampen 00000000000000000000000000000000 righthander 00000000000000000000000000000000 burgs 00000000000000000000000000000000 Russel 00100000000000000000000000000000 axioms 00000000000000000000000000000000 Haste 00100000000000000000000000000000 Cassell 00100000000000000000000000000000 recede 00000000000000000000000000000000 time-sensitive 00000000000000000000000000000000 tractor-trailer 00000000000000000000000000000000 sorted 00000000000000000000000000000000 8:35 00000000000000000000000000000000 Intrepid 00100000000000000000000000000000 package-sort 00000000000000000000000000000000 Monitoring 00100000000000011110110001000000 craftsmen 00000000000000000000000000000000 flowchart 00000000000000000000000000000000 holdups 00000000000000000000000000000000 mollified 00000000000000000000000000000000 configuration-data 00000000000000000000000000000000 stronghold 00000000000111111001101001100111 vitriolic 00000000000000000000000000000000 underutilized 00000000000000000000000000000000 Labovitz 00100000000000000000000000000000 ODI 01000000000000000000000000000000 143.08 00000000000000000000000000000000 143.93 00000000000000000000000000000000 pre-recorded 00000000000000000000000000000000 Milburn 00100000000000000000000000000000 fourteen 00000000000101001111000011000000 songwriters 00000000000000000000000000000000 remunerated 00000000000000000000000000000000 government-imposed 00000000000000000000000000000000 14,821 00000000000000000000000000000000 Trish 00100000000000000000000000000000 Heimers 00100000000000000000000000000000 RIAA 01000000000000000000000000000000 Nilson 00100000000000000000000000000000 delisted 00000000000000000000000000000000 291-page 00000000000000000000000000000000 Copying 00100000011100000010110001000000 Challenges 00100000000111111011001000100011 100-mile 00000000000000000000000000000000 Dollar-yen 00100000000000000000000000000000 shave 00000000001100101111001110110010 U.S.-style 01000000000000000000000000000000 wheeling 00000000000010100100110100101000 peacefully 00000000000000000000000000000000 77.56 00000000000000000000000000000000 masterminding 00000000000000000000000000000000 Swiss-franc 00100000000000000000000000000000 3.07 00000000000000000000000000000000 spokes 00000000000000000000000000000000 Rey-controlled 00100000000000000000000000000000 product-inspection 00000000000000000000000000000000 meadows 00000000000111000101000000001000 low-slung 00000000000000000000000000000000 Alps 00100000000000000000000000000000 77.70 00000000000000000000000000000000 dossiers 00000000000000000000000000000000 Zurich-based 00100000000000000000000000000000 Writes 00100000000110111011010111000010 un-Swiss 01000000000000000000000000000000 Neue 00100000000000000000000000000000 Zuercher 00100000000000000000000000000000 Zeitung 00100000000000000000000000000000 three-spoked 00000000000000000000000000000000 unheard-of 00000000000000000000000000000000 shoemaker 00000000000000000000000000000000 Investing 00100000000111111101000001000000 Oerlikon-Buehrle 01000000000000000000000000000000 Selve 00100000000000000000000000000000 Thun 00100000000000000000000000000000 Ateliers 00100000000000000000000000000000 Constructions 00100000000000000000000000000000 Mecaniques 00100000000000000000000000000000 cantonal 00000000000000000000000000000000 Cantobank 00100000000000000000000000000000 Frey 00100000000000000000000000000000 Winterthur-based 00100000000000000000000000000000 Gebrueder 00100000000000000000000000000000 Tito 00100000000111011111000100001000 Tettamanti 00100000000000000000000000000000 lugs 00000000000000000000000000000000 Omnicorp 00100000000000000000000000000000 Kingdom-based 00100000000000000000000000000000 Checkrobot 00100000000000000000000000000000 checkout 00000000000000000000000000000000 Norment 00100000000000000000000000000000 Com 00100000000110101010010010110000 Helga 00100000000000000000000000000000 KK 01000000000000000000000000000000 land-rich 00000000000000000000000000000000 Inspectorate-Adia 01000000000000000000000000000000 Fountain 00100000000111010110011010101000 HP 01000000000000000000000000000000 multipleuser 00000000000000000000000000000000 57,000 00000000000000000000000000000000 Helicopters 00100000000111101011101001100011 Airplanes 00100000000111011111111001100011 ArgoSystems 01000000000000000000000000000000 Binder 00100000000111100001001000001000 82,389 00000000000000000000000000000000 -William 01000000000000000000000000000000 Woodcliff 00100000000000000000000000000000 17-nation 00000000000000000000000000000000 INGERSOLL-RAND 01000000000000000000000000000000 non-Cocom 01000000000000000000000000000000 convention-goers 00000000000000000000000000000000 Duluth 00100000000000000000000000000000 Foggs 00100000000000000000000000000000 Ulric 00100000000000000000000000000000 management-by-objective 00000000000000000000000000000000 defense-procurement 00000000000000000000000000000000 reps 00000000000000000000000000000000 flaring 00000000000110101101100001000000 information-systems 00000000000000000000000000000000 high-growth 00000000000000000000000000000000 680.6 00000000000000000000000000000000 673.3 00000000000000000000000000000000 382.2 00000000000000000000000000000000 ski-industry 00000000000000000000000000000000 7.13 00000000000000000000000000000000 camaraderie 00000000000000000000000000000000 16.25 00000000000000000000000000000000 weatherman 00000000000000000000000000000000 butterflies 00000000000000000000000000000000 more-efficient 00000000000000000000000000000000 buzzes 00000000000000000000000000000000 backpedaling 00000000000000000000000000000000 U-turn 00100000000000000000000000000000 bondholdings 00000000000000000000000000000000 133.7 00000000000000000000000000000000 unicycle 00000000000000000000000000000000 Accomplishing 00100000000000000000000000000000 duels 00000000000000000000000000000000 relive 00000000000000000000000000000000 smolder 00000000000000000000000000000000 Pestered 00100000000000000000000000000000 dinkiest 00000000000000000000000000000000 Carrying 00100000000000000000100101000000 innovate 00000000000000000000000000000000 shoves 00000000000000000000000000000000 Swiveling 00100000000000000000000000000000 somewhat-ambiguous 00000000000000000000000000000000 Explaining 00100000000111101101111010000010 security-type 00000000000000000000000000000000 fidgeting 00000000000000000000000000000000 handcuffs 00000000000000000000000000000000 recantation 00000000000000000000000000000000 analytical-instruments 00000000000000000000000000000000 504,200 00000000000000000000000000000000 254,200 00000000000000000000000000000000 fended 00000000000000000000000000000000 mass-producing 00000000000000000000000000000000 fireballs 00000000000000000000000000000000 hurl 00000000000000000000000000000000 liquid-chromatography 00000000000000000000000000000000 Corrigan 00101111111101110000110010001000 Testing 00100000000001000010110001000000 automotive-emissions-testing 00000000000000000000000000000000 94.3 00000000000000000000000000000000 immaturity 00000000000000000000000000000000 economical 00000000000000001101001110010000 Rae 00100000000000000000000000000000 molehill 00000000000000000000000000000000 autocrat 00000000000000000000000000000000 custom-chip 00000000000000000000000000000000 European-minded 00100000000000000000000000000000 disaffection 00000000000000000000000000000000 tying 00000000000110101111001101000000 industry-wide 00000000000000000000000000000000 Chirac 00101111111100110001110010001000 pedaled 00000000000000000000000000000000 Balladur 00101111111000000101010010001000 anti-European 01000000000000000000000000000000 Meinders 00100000000000000000000000000000 vassals 00000000000000000000000000000000 catchers 00000000000000000000000000000000 futility 00000000000000000000000000000000 3.526 00000000000000000000000000000000 eight-month 00000000000000000000000000000000 4.469 00000000000000000000000000000000 tapering 00000000000000000000000000000000 Littman 00100000000000000000000000000000 trillions 00000000000000000000000000000000 RA 01000000000000000000000000000000 go-it-alone 00000000000000000000000000000000 human-resources 00000000000000000000000000000000 Transition 00100000000101111101111101100111 6.21 00000000000000000000000000000000 odds-on 00000000000000000000000000000000 four-quarter 00000000000000000000000000000000 763 00000000000000000000000000000000 ticketing 00000000000000000110100001100001 wagering 00000000000000000000000000000000 VTC 01000000000000000000000000000000 simplified 00000000000000000000000000000000 Stedt 00100000000000000000000000000000 Reviewing 00100000000111111110010101000000 resided 00000000000000000000000000000000 Midvale 00100000000000000000000000000000 aching 00000000000000000000000000000000 Hayne 00100000000000000000000000000000 California-bashing 00100000000000000000000000000000 snotty 00000000000000000000000000000000 loonies 00000000000000000000000000000000 Anti-Christ 01000000000000000000000000000000 Moloch 00100000000000000000000000000000 one-week 00000000000000000000000000000000 Scaring 00100000000000000000000000000000 illogic 00000000000000000000000000000000 inaccuracy 00000000000000000000000000000000 slots 00000000000100010010000001100011 Jukes 00100000000000000000000000000000 charlatanry 00000000000000000000000000000000 profferred 00000000000000000000000000000000 Coconut 00100000000000000000000000000000 Would-be 00100000000000000000000000000000 Merrick 00100000000000000000000000000000 wheel-loader 00000000000000000000000000000000 kilometer 00000000000000000000000000000000 passenger-kilometers 00000000000000000000000000000000 persecuting 00000000000000000000000000000000 voyeurism 00000000000000000000000000000000 conspiracies 00000000000000000000000000000000 Rude 00100000000111110110011010010000 Pravo 00100000000000000000000000000000 leaguers 00000000000000000000000000000000 Czechoslovak 00100000000000000000000000000000 90-day 00000000000000000000000000000000 Cecconi 00100000000000000000000000000000 canals 00000000000011100110101111001001 hydraulically 00000000000000000000000000000000 Moscow-based 00100000000000000000000000000000 small-screen 00000000000000000000000000000000 color-television 00000000000000000000000000000000 Goldstar 00100000000111101001000100101000 29.3 00000000000000000000000000000000 Soyuz 00100000000000000000000000000000 external-trade 00000000000000000000000000000000 Lanka 00101111111111101010110000011101 Dynasty 00100000000111110000000001000111 newsworthiness 00000000000000000000000000000000 diverge 00000000000000000000000000000000 Michaels 00101111111000100110110000001000 obscenity 00000000000000000000000000000000 minor-leaguer 00000000000000000000000000000000 peek 00000000000000000000000000000000 dogfight 00000000000000000000000000000000 Morley 00100000000000000000000000000000 Desai 00100000000000000000000000000000 scarred 00000000000000000000000000000000 Josephson 00100000000000000000000000000000 murkier 00000000000000000000000000000000 Tango 00100000000000000000000000000000 Ethicist 00100000000000000000000000000000 Bridgeville 00100000000000000000000000000000 screenings 00000000000000000000000000000000 hugged 00000000000000000000000000000000 congratulating 00000000000000000000000000000000 mini-studio 00000000000000000000000000000000 Michio 00100000000000000000000000000000 7,600 00000000000000000000000000000000 hand-wringing 00000000000000000000000000000000 152.08 00000000000000000000000000000000 Wakayama 00100000000000000000000000000000 155.15 00000000000000000000000000000000 149.69 00000000000000000000000000000000 prefectural 00000000000000000000000000000000 240.86 00000000000000000000000000000000 1.143 00000000000000000000000000000000 990.79 00000000000000000000000000000000 6.16 00000000000000000000000000000000 10.17 00000000000000000000000000000000 Outlays 00100000000111100110100000111001 105.39 00000000000000000000000000000000 87.57 00000000000000000000000000000000 99.23 00000000000000000000000000000000 Saitama 00100000000000000000000000000000 Fiesta 00100000000111011101001000110000 Accrued 00100000000111111000011100010000 77,000 00000000000000000000000000000000 Himself 00100000000000100011010001110010 high-fidelity 00000000000000000000000000000000 Asil 00100000000000000000000000000000 Ornstein 00100000000000000000000000000000 management-consultant 00000000000000000000000000000000 -products 00000000000000000000000000000000 webs 00000000000000000000000000000000 cross-shareholdings 00000000000000000000000000000000 demeanors 00000000000000000000000000000000 audiophiles 00000000000000000000000000000000 Orville 00100000000000000000000000000000 miniaturized 00000000000000000000000000000000 audio-specialty 00000000000000000000000000000000 Ryosuke 00100000000000000000000000000000 Yoshihisa 00100000000000000000000000000000 Booz-Allen 01000000000000000000000000000000 Attitudes 00100000000111101110111101100011 brimmed 00000000000000000000000000000000 self-confidence 00000000000000000000000000000000 forgeries 00000000000000000000000000000000 existent 00000000000000000000000000000000 tropical-fruit 00000000000000000000000000000000 878 00000000000000000000000000000000 Sandberg 00100000000000000000000000000000 extramarital 00000000000000000000000000000000 Plouf 00100000000000000000000000000000 Kirkland 00101111111100000101001000001000 non-economical 00000000000000000000000000000000 antitrust-law 00000000000000000000000000000000 computer-system-design 00000000000000000000000000000000 tie-breaking 00000000000000000000000000000000 52.125 00000000000000000000000000000000 112.625 00000000000000000000000000000000 fretted 00000000000000000000000000000000 Urging 00100000000001000001110101000000 rebuked 00000000011101000101010000110010 Rafferty 00100000000000000000000000000000 apologizing 00000000000000000000000000000000 1.9375 00000000000000000000000000000000 warehousing 00000000000000000000000000000000 program-trade 00000000000000000000000000000000 Marchese 00100000000000000000000000000000 re-entering 00000000000000000000000000000000 selloffs 00000000000000000000000000000000 452.76 00000000000000000000000000000000 6.43 00000000000000000000000000000000 437.68 00000000000000000000000000000000 448.80 00000000000000000000000000000000 LIN-BellSouth 01000000000000000000000000000000 printing-press 00000000000000000000000000000000 21-a-share 00000000000000000000000000000000 376,000 00000000000000000000000000000000 joint-implants 00000000000000000000000000000000 Kingman 00100000000000000000000000000000 47.3 00000000000000000000000000000000 2082.1 00000000000000000000000000000000 520-lawyer 00000000000000000000000000000000 42.0 00000000000000000000000000000000 1678.5 00000000000000000000000000000000 three-lawyer 00000000000000000000000000000000 DEFENSE 01000000000111101010110110110000 Vellante 00100000000000000000000000000000 Monchecourt 00100000000000000000000000000000 200.5 00000000000000000000000000000000 35527.29 00000000000000000000000000000000 148.85 00000000000000000000000000000000 35378.44 00000000000000000000000000000000 2681.76 00000000000000000000000000000000 First-section 00100000000000000000000000000000 886 00000000000000000000000000000000 profittaking 00000000000000000000000000000000 19.69 00000000000000000000000000000000 1462.93 00000000000000000000000000000000 Valentin 00100000000000000000000000000000 Korff 00100000000000000000000000000000 120-megabyte 00000000000000000000000000000000 APARTHEID 01000000000011011101110010100111 FOES 01000000000101101010000010110011 STAGED 01000000001101101001010000110010 CONGRESSIONAL 01000000000000000100111000110000 LEADERS 01000000000000000000000110110101 BACKED 01000000000010001111010000110010 603 00000000000000000000000000000000 SWITCHING 01000000001111111010110001000000 350-seat 00000000000000000000000000000000 Cortes 00100000000000000000000000000000 bunt 00000000000000000000000000000000 Dissidents 00100000000111110100100110110011 Wenceslas 00100000000000000000000000000000 Milos 00100000000000000000000000000000 Jakes 00100000000000000000000000000000 fond 00000000001110101011110000110010 TRIAL 01000000000111100110000001100111 empowered 00000000010111001100110000110010 offensives 00000000000000000000000000000000 guerrilla-held 00000000000000000000000000000000 passenger-car 00000000000000000000000000000000 orange-and-blue 00000000000000000000000000000000 defeating 00000000000111111101001101000000 midway 00000000000101000111110110101000 Midmorning 00100000000111111101011001101000 Rudolf 00101111111000011011100010011000 Bennigsen-Foerder 01000000000000000000000000000000 Veba 00100000000000000000000000000000 emigrate 00000000010010111101010110110010 testaments 00000000000000000000000000000000 exhibited 00000011111001001100010000110010 wills 00000000000110000100000000001000 scan 00000000000010000101001010110111 gasped 00000000000000000000000000000000 Observing 00100000000111101001110101000000 Coburn 00100000000000000000000000000000 Solving 00100000000110001101011101000000 Cover 00100000000111101111110110110010 Girl 00100000000111101100110010110101 Clarion 00100000000000101101010000110000 demeaning 00000000000010001011011110010000 agitated 00000000000000000000000000000000 630.9 00000000000000000000000000000000 Promise 00100000000111101101111010110111 invokes 00000000000000000000000000000000 intuitive 00000000000000000000000000000000 cosmetics-industry 00000000000000000000000000000000 TEXAS 01000000000111101111010001101000 shrug 00000000000110010101001110110010 jars 00000000000000000000000000000000 CLEARS 01000011110010000011000000010010 habitats 00000000000000000000000000000000 gray-flannel 00000000000000000000000000000000 INQUIRY 01000000000110111111110001100111 soaps 00000000000000000000000000000000 cents-off 00000000000000000000000000000000 CFC-12 01000000000000000000000000000000 mascara 00000000000000000000000000000000 meld 00000000000000000000000000000000 image-making 00000000000000000000000000000000 CFC-11 01000000000000000000000000000000 Richardson-Vicks 01000000000000000000000000000000 moisturizer 00000000000000000000000000000000 cleansers 00000000000000000000000000000000 moisturizers 00000000000000000000000000000000 Mainz 00100000000000000000000000000000 Rollie 00100000000000000000000000000000 Chemistry 00100000000111110111001101100001 Packaged-goods 00100000000000000000000000000000 consolidations 00000000000110000110000010100111 Schering 00100000000100110100111100101000 mass-distribution 00000000000000000000000000000000 mid-priced 00000000000000000000000000000000 132.9 00000000000000000000000000000000 UPHELD 01000000001111111001010000110010 drug-store 00000000000000000000000000000000 Plenitude 00100000000000000000000000000000 Peyrelongue 00100000000000000000000000000000 Cosmair 00100000000000000000000000000000 consumer-product 00000000000000000000000000000000 quirky 00000000000000000000000000000000 RULING 01000000000111101110101011100111 Aziza 00100000000000000000000000000000 ready-to-wear 00000000000000000000000000000000 cultivating 00000000000000000000000000000000 lipstick 00000000000000000000000000000000 retaliating 00000000000000000000000000000000 prior-year 00000000000000000000000000000000 Carmen 00101111111101100000000100001000 ozonedepletion 00000000000000000000000000000000 ponied 00000000000000000000000000000000 assassinating 00000000000000000000000000000000 Chicago-style 00100000000000000000000000000000 UVB 01000000000000000000000000000000 spontaneous 00000000000010000100011010010000 sweetness 00000000000000000000000000000000 baseball-loving 00000000000000000000000000000000 odious 00000000000000000000000000000000 collective-bargaining 00000000000000000000000000000000 ballparks 00000000000000000000000000000000 substitution 00000000000100101111011000001111 sewing-machine 00000000000000000000000000000000 bungled 00000000000000000000000000000000 Makato 00100000000000000000000000000000 reverted 00000000000000000000000000000000 pre-Reagan 01000000000000000000000000000000 nailed 00000000000100101001001000110010 anonymously 00000000000000000000000000000000 accommodating 00000000000111100001010010010000 wimping 00000000000000000000000000000000 screenwriters 00000000000000000000000000000000 baby-faced 00000000000000000000000000000000 hare-brained 00000000000000000000000000000000 well-planned 00000000000000000000000000000000 at-bat 00000000000000000000000000000000 185.9 00000000000000000000000000000000 Claiming 00100000000111101111111010000010 schemers 00000000000000000000000000000000 HCFCs 01000000000000000000000000000000 gobbledygook 00000000000000000000000000000000 home-market 00000000000000000000000000000000 12-story-high 00000000000000000000000000000000 mumbled 00000000000000000000000000000000 foreign-led 00000000000000000000000000000000 ultimatums 00000000000000000000000000000000 Flood 00100000000111111110111000111111 pull-backs 00000000000000000000000000000000 Curt 00100000000000101100001000011000 coherently 00000000000000000000000000000000 kilter 00000000000000000000000000000000 steely 00000000000000000000000000000000 coterie 00000000000000000000000000000000 exasperation 00000000000000000000000000000000 suspecting 00000000000000000000000000000000 verified 00000000000000000000000000000000 Cardinals 00100000000000000000000000000000 flora 00000000000000000000000000000000 Cartoonist 00100000000000000000000000000000 TROUBLES 01000000000111111110011000100011 Congdon 00100000000000000000000000000000 Gerrard 00100000000000000000000000000000 Hordern 00100000000000000000000000000000 backbench 00000000000000000000000000000000 sackings 00000000000000000000000000000000 Deryck 00100000000000000000000000000000 Dionne 00100000000000000000000000000000 Wilcock 00100000000000000000000000000000 swig 00000000000000000000000000000000 marvels 00000000000000000000000000000000 spring-training 00000000000000000000000000000000 queasily 00000000000000000000000000000000 Curdling 00100000000000000000000000000000 Confession 00100000000110001101111101100111 72-game 00000000000000000000000000000000 Tithing 00100000000000000000000000000000 Obedience 00100000000000000000000000000000 Commandment 00100000000000000000000000000000 Wives 00100000000111000010011100110011 Chores 00100000000111101010110100100011 HUSBANDS 01000000000111111110011100110011 Goldscheider 00100000000000000000000000000000 CREATOR'S 01000000000000000000000000000000 DOONESBURY 01000000000000000000000000000000 non-working 00000000000000000000000000000000 housecleaning 00000000000111000000111101100111 Kuiper 00100000000000000000000000000000 yardwork 00000000000000000000000000000000 grammar 00000000000000000000000000000000 less-educated 00000000000000000000000000000000 Nursing 00100000000111110000001010110000 Apt 00100000000111111001011000110010 Herrington 00101111111001001011000010001000 Payers 00100000000000000000000000000000 FAR 01000000000111111101110001110010 FEWER 01000000000000000001000111000000 Conventional 00100000000000010001110000110000 qualifying 00000000000000010101110101000000 Weiner 00101111111000000000000010001000 doomsayer 00000000000000000000000000000000 Korbin 00100000000000000000000000000000 PCBs 01000000000000000000000000000000 discharged 00000000001101010100010000110010 riddled 00000000000101110101100000110010 knowns 00000000000000000000000000000000 blinks 00000000000000000000000000000000 tristate 00000000000000000000000000000000 Reservoirs 00100000000000000000000000000000 accountants... 00000000000000000000000000000000 pro-Reagan 01000000000000000000000000000000 pro-Republican 01000000000000000000000000000000 Answers 00100000000111110111001000100011 Pomton 00100000000000000000000000000000 Crises 00100000000111110110011000100011 SEPARATED 01000011000101010100010000110010 pound-foolish 00000000000000000000000000000000 superstars 00000000000000000000000000000000 Vitaly 00100000000000000000000000000000 penny-wise 00000000000000000000000000000000 somersaulting 00000000000000000000000000000000 elation 00000000000000000000000000000000 Savoy 00100000000000000000000000000000 brow-beating 00000000000000000000000000000000 Eight-foot-tall 00100000000000000000000000000000 Rubenesquely 00100000000000000000000000000000 canvases 00000000000000000000000000000000 cherubs 00000000000000000000000000000000 89,500 00000000000000000000000000000000 trowel 00000000000000000000000000000000 corinthian 00000000000111000101110000010000 capitals 00000000000111101000110101110011 fluting 00000000000000000000000000000000 ascribe 00000000000000000000000000000000 can.. 00000000000000000000000000000000 ninety 00000000000110001111000011000000 mutations 00000000000000000000000000000000 Index-arbitrage 00100000000000000000000000000000 Anxious 00100000000111001000011000110010 cautioning 00000000000000000000000000000000 tongue-lashing 00000000000000000000000000000000 Afnasjev 00100000000000000000000000000000 classmate 00000000000000000000000000000000 holdovers 00000000000000000000000000000000 ice-breaker 00000000000000000000000000000000 Prevented 00100001001111010100010000110010 Ozone 00100000000011001001110000100001 astounding 00000000000111011000110100010000 trivialize 00000000000000000000000000000000 famines 00000000000000000000000000000000 stain 00000000000000000000000000000000 sultan 00000000000111011110100000001000 woven 00000001001001110010110000110010 threads 00000000000000000000000000000000 ceases 00000000000000000000000000000000 SALARIES 01000000000111100110100100000011 Ayers 00100000000000000000000000000000 Anniston 00100000000000000000000000000000 Langendorf 00100000000000000000000000000000 Drury 00100000000000000000000000000000 Barfield 00100000000000000000000000000000 JUDICIAL 01000000000000100000000000110000 supremely 00000000000000000000000000000000 blinking 00000000000000000000000000000000 fusses 00000000000000000000000000000000 endlessly 00000000000000000000000000000000 dissecting 00000000000000000000000000000000 reams 00000000000000000000000000000000 excrutiatingly 00000000000000000000000000000000 near-mutiny 00000000000000000000000000000000 mutinous 00000000000000000000000000000000 plaudits 00000000001000001101000100100111 OVER 01000000000000000101000000001010 23.72 00000000000000000000000000000000 administration-Fed 01000000000000000000000000000000 42.1 00000000000000000000000000000000 phalanx 00000000000000000000000000000000 zero-inflation 00000000000000000000000000000000 tiller 00000000000000000000000000000000 Traded 00100000000001011000010000110010 990,000 00000000000000000000000000000000 Fastenal 00100000000000000000000000000000 Entergy 00100000000000000000000000000000 8300s 00000000000000000000000000000000 bastions 00000000000000000000000000000000 generalist 00000000000000000000000000000000 grappled 00000000000000000000000000000000 imaginable 00000000000000000000000000000000 generalists 00000000000000000000000000000000 non-patent 00000000000000000000000000000000 Giles 00100000000000000000000000000000 patent-law 00000000000000000000000000000000 Colorliner 00100000000000000000000000000000 9,118 00000000000000000000000000000000 litigator 00000000000000000000000000000000 4,645 00000000000000000000000000000000 917 00000000000000000000000000000000 eight-team 00000000000000000000000000000000 non-drug 00000000000000000000000000000000 summons 00000000000000000000000000000000 Lezovich 00100000000000000000000000000000 newspaper-printing 00000000000000000000000000000000 STANDARDS 01000000000100100110111100100011 BOARD'S 01000000000000000000000000000000 124-year-old 00000000000000000000000000000000 reveling 00000000000000000000000000000000 frayed 00000000000000000000000000000000 Epinal 00100000000000000000000000000000 d'Alene 01000000000000000000000000000000 42-year-old 00000000000000000000000000000000 Coeur 00100000000000000000000000000000 eked 00000000000000000000000000000000 1,400-member 00000000000000000000000000000000 mergers-and-acquisitions 00000000000000000000000000000000 syngeries 00000000000000000000000000000000 Old-time 00100000000000000000000000000000 Everywhere 00100000000001010100010001110010 Megargel 00100000000000000000000000000000 42-branch 00000000000000000000000000000000 refueling 00000000000000000000000000000000 task-force 00000000000000000000000000000000 serve-the-world 00000000000000000000000000000000 20-week 00000000000000000000000000000000 counselors 00000000000000011010000010110011 Barrick 00100000000110001010001010101000 cross-pollination 00000000000000000000000000000000 executive-level 00000000000000000000000000000000 multiple-year 00000000000000000000000000000000 Oats 00101111111111110010010001001000 16th-century 00000000000000000000000000000000 marvelous 00000000000011001110011010010000 UNDER 01000000000000000000100000001010 PROPOSAL 01000000000111111111011011100111 TECO 01000000000000000000000000000000 foreign-investment 00000000000000000000000000000000 initialed 00000000000000000000000000000000 Alson 00100000000000000000000000000000 growls 00000000000000000000000000000000 Batangas 00100000000000000000000000000000 Filling 00100000000111110101101101000000 red-flag 00000000000000000000000000000000 -1 00000000000000000000000000000000 ,-1 00000000000000000000000000000000 northwest 00000000000111100111110110101000 FPL 01000000000000000000000000000000 dragger 00000000000000000000000000000000 Manila-based 00100000000000000000000000000000 muffler 00000000000000000000000000000000 CFD 01000000000000000000000000000000 Refinery 00100000000111101110000010001001 ELP 01000000000000000000000000000000 Multi-Income 01000000000000000000000000000000 FMI 01000000000000000000000000000000 ALII 01000000000000000000000000000000 YALE 01000000000000101111111000101000 POLITICAL 01000000000000000000000000110000 honorarium 00000000000000000000000000000000 lard 00000000000000000000000000000000 stupidest 00000000000000000000000000000000 gimmick 00000000000101001101111101100111 493 00000000000000000000000000000000 382-37 00000000000000000000000000000000 budget-reduction 00000000000000000000000000000000 confrontations 00000000000110011010110000100111 seer 00000000000000000000000000000000 surgically 00000000000000000000000000000000 entirety 00000000000000000000000000000000 theorists 00000000000000000000000000000000 defensiveness 00000000000000000000000000000000 off-speed 00000000000000000000000000000000 blackmail 00000000000111000100110010100111 1,001 00000000000000000000000000000000 225.6 00000000000000000000000000000000 judiciously 00000000000000000000000000000000 angst 00000000000000000000000000000000 comity 00000000000110000011111010100111 becase 00000000000000000000000000000000 90-cent-an-hour 00000000000000000000000000000000 executive-legislative 00000000000000000000000000000000 Hatfield 00100010101001000110000010001000 concurrence 00000000000000000000000000000000 adjournment 00000000000000000000000000000000 oat-bran 00000000000000000000000000000000 health-oriented 00000000000000000000000000000000 ready-to-eat 00000000000000000000000000000000 oat-based 00000000000000000000000000000000 flounder 00000000000000000000000000000000 chewed 00000000000000000000000000000000 Krispies 00100000000000000000000000000000 Frosted 00100000000000000000000000000000 Honey 00100000000110010000101100100001 Nut 00100000000001101000101100100001 corn-based 00000000000000000000000000000000 Yankee-come-lately 00100000000000000000000000000000 wily 00000000000000000000000000000000 71.75 00000000000000000000000000000000 Cereal 00100000000110011011111010110000 bran-processing 00000000000000000000000000000000 rice-processing 00000000000000000000000000000000 construction-industry 00000000000000000000000000000000 185-acre 00000000000000000000000000000000 480.4 00000000000000000000000000000000 123.1 00000000000000000000000000000000 858,000 00000000000000000000000000000000 145.7 00000000000000000000000000000000 Mont 00100000000000000000000000000000 PARKER 01001111111110001000001000001000 HANNIFIN 01000000000000000000000000000000 Connectors 00100000000000000000000000000000 Cliff 00100000000010001011111100001000 84.90 00000000000000000000000000000000 Marge 00100000000000000000000000000000 Zainuddin 00100000000000000000000000000000 Datuk 00100000000000000000000000000000 spice 00000000000000000000000000000000 unremarkable 00000000000000000000000000000000 Malaysian-based 00100000000000000000000000000000 shags 00000000000000000000000000000000 diverging 00000000000000000000000000000000 national-policy 00000000000000000000000000000000 2.007 00000000000000000000000000000000 2.616 00000000000000000000000000000000 466 00000000000000000000000000000000 14.933 00000000000000000000000000000000 10.485 00000000000000000000000000000000 18.443 00000000000000000000000000000000 16.436 00000000000000000000000000000000 155.039 00000000000000000000000000000000 140.106 00000000000000000000000000000000 c.i.f 00000000000000000000000000000000 free-on-board 00000000000000000000000000000000 f.o.b 00000000000000000000000000000000 disinflation 00000000000101001010110010100111 Nelms 00100000000000000000000000000000 Instituto 00100000000000000000000000000000 enthusiasms 00000000000000000000000000000000 51.4 00000000000000000000000000000000 Factorex 00100000000000000000000000000000 Catching 00100000000110111110100001000000 public-owned 00000000000000000000000000000000 824 00000000000000000000000000000000 7.04 00000000000000000000000000000000 elegantly 00000000000000000000000000000000 Bilbao 00100000000000000000000000000000 Vizcaya 00100000000000000000000000000000 134-lawyer 00000000000000000000000000000000 golds 00000000000000000000000000000000 welding 00000000000000010110100001100001 welded 00000000000000000000000000000000 durability 00000000000000000000000000000000 Glove 00100000000010011100001000100001 special-projects 00000000000000000000000000000000 PROSECUTORS 01000000000000001001010010110011 caseloads 00000000000000000000000000000000 perplexing 00000000000000000000000000000000 Univest 00100000000000000000000000000000 IMELDA 01000000000000000000000000000000 MARCOS 01001111111100001010100000001000 eight-time 00000000000000000000000000000000 Wary 00100000010111101011110000110010 Pennview 00100000000000000000000000000000 substantiate 00000000000000000000000000000000 PRO 01000000011111001010010000010000 BONO 01000000000000000000000000000000 VOLUNTARISM 01000000000000000000000000000000 Centerbank 00100000000000000000000000000000 Delegate 00100000000011000100100110110111 Wachtler 00100000000000000000000000000000 47-store 00000000000000000000000000000000 Vigdor 00100000000000000000000000000000 DALLAS 01000000000111110101111001101000 HOUSTON 01000000000111011101111001101000 130-lawyer 00000000000000000000000000000000 Datson 00100000000000000000000000000000 70-lawyer 00000000000000000000000000000000 Dotson 00100000000000000000000000000000 PILING 01000000011011100110100001000000 Piggybacking 00100000000000000000000000000000 condoned 00001111001011010100010000110010 acts... 00000000000000000000000000000000 logistics-computer 00000000000000000000000000000000 GHKM 01000000000000000000000000000000 allgedly 00000000000000000000000000000000 cheap-shot 00000000000000000000000000000000 procedurally 00000000000000000000000000000000 fallacious 00000000000000000000000000000000 hurriedly 00000000000000000000000000000000 WFRR 01000000000000000000000000000000 car-dealers 00000000000000000000000000000000 Wilton 00100000000000000000000000000000 broadside 00000000000110011101101010110111 Macheski 00100000000000000000000000000000 acccounting 00000000000000000000000000000000 befallen 00000000000000000000000000000000 invoicing 00000000000000000000000000000000 flips 00000000000000000000000000000000 invoices 00000000000111100111010010111001 groundball 00000000000000000000000000000000 pariah 00000000000000000000000000000000 soiled 00000000000000000000000000000000 Ballooning 00100000000000000000000000000000 Campion 00100000000000000000000000000000 Tennesse 00100000000000000000000000000000 sevices 00000000000000000000000000000000 training-wage 00000000000000000000000000000000 Sugarman-led 00100000000000000000000000000000 acknowledgement 00000000000000000000000000000000 moan 00000000000000000000000000000000 124,000 00000000000000000000000000000000 436.01 00000000000000000000000000000000 Grassley 00100000000000000000000000000000 449.04 00000000000000000000000000000000 Willam 00100000000000000000000000000000 bequest 00000000000000000000000000000000 446.62 00000000000000000000000000000000 diming 00000000000000000000000000000000 stock-purchase 00000000000000000000000000000000 non-competitive 00000000000000000000000000000000 27-week 00000000000000000000000000000000 HBJ 01000000000000000000000000000000 884,000 00000000000000000000000000000000 less-than-perfect 00000000000000000000000000000000 155,000 00000000000000000000000000000000 factory-jobs 00000000000000000000000000000000 launch-vehicle 00000000000000000000000000000000 filtration 00000000000000000000000000000000 coincident 00000000000000000000000000000000 inauspicious 00000000000000000000000000000000 orders-related 00000000000000000000000000000000 ususal 00000000000000000000000000000000 auto-buying 00000000000000000000000000000000 non-packaging 00000000000000000000000000000000 118.6 00000000000000000000000000000000 755,000 00000000000000000000000000000000 2,600 00000000000000000000000000000000 227.1 00000000000000000000000000000000 328.2 00000000000000000000000000000000 734.2 00000000000000000000000000000000 strive 00000000000001010111010110110010 Middlebury 00100000000000000000000000000000 grinders 00000000000000000000000000000000 192.9 00000000000000000000000000000000 266.5 00000000000000000000000000000000 156.3 00000000000000000000000000000000 110.1 00000000000000000000000000000000 61.7 00000000000000000000000000000000 281.2 00000000000000000000000000000000 2,057,750,000 00000000000000000000000000000000 675,400,000 00000000000000000000000000000000 1,048,500,000 00000000000000000000000000000000 588,350,000 00000000000000000000000000000000 impart 00000000000000000000000000000000 megaquestions 00000000000000000000000000000000 entrants 00000000000000011011101001100011 456.64 00000000000000000000000000000000 mega-crash 00000000000000000000000000000000 mega-projects 00000000000000000000000000000000 G.S. 01000000000000000000000000000000 government-run 00000000000000000000000000000000 Crouched 00100000000000000000000000000000 mega-problems 00000000000000000000000000000000 acceded 00000000000000000000000000000000 nonconvertible 00000000000000001001100110110000 overregulated 00000000000000000000000000000000 under-the-table 00000000000000000000000000000000 Tata 00100000000000000000000000000000 Rekindled 00100000100000100111010000110010 Essar 00100000000000000000000000000000 retardation 00000000000000000000000000000000 Bindal 00100000000000000000000000000000 Agro 00100000000000000000000000000000 Chem 00100000000000000000000000000000 agrochemical 00000000000000000000000000000000 M.J. 01000000000000000000000000000000 Pherwani 00100000000000000000000000000000 regenerate 00000000000000000000000000000000 dawdling 00000000000000000000000000000000 cheery 00000000000000000000000000000000 Mega 00100000000011110101011010110000 non-mega 00000000000000000000000000000000 Disclosures 00100000000111111100101000100011 rumor-happy 00000000000000000000000000000000 pin-pointed 00000000000000000000000000000000 prospectuses 00000000000001001010001000100011 mega-crashes 00000000000000000000000000000000 T.T. 01000000000000000000000000000000 Ram 00100000000110100000000001000111 Mohan 00100000000000000000000000000000 unavailability 00000000000000000000000000000000 comparability 00000000000110010000010000100111 polarized 00000000000000000000000000000000 Myers 00101111111110101101001000001000 weapons-modernization 00000000000000000000000000000000 C-130 00100000000000000000000000000000 50%-state-owned 00000000000000000000000000000000 financial-report 00000000000000000000000000000000 bond-rating 00000000000000000000000000000000 11.44 00000000000000000000000000000000 Ellesmere 00100000000000000000000000000000 unionists 00000000000000000000000000000000 uttered 00000000000000000000000000000000 ABBIE 01000000000000000000000000000000 listens 00000000001001101011101000110010 cont 00000000000000000000000000000000 'd. 00000000000000000000000000000000 anti-war 00000000000000000000000000000000 Entrekin 00100000000000000000000000000000 Yippies 00100000000000000000000000000000 734.9 00000000000000000000000000000000 pieced 00000000000000000000000000000000 superceded 00000000000000000000000000000000 blurring 00000000000000000000000000000000 excellence 00000000000001011111110010100111 supercede 00000000000000000000000000000000 Conspiracy 00100000000111111011100010100111 811.9 00000000000000000000000000000000 Stringer 00100000000000000000000000000000 12-2 00000000000000000000000000000000 government-certified 00000000000000000000000000000000 unrestricted 00000000000000110110010100010000 Governmental 00100000000011000101000000110000 rigueur 00000000000000000000000000000000 Jacobsen 00100000000000000000000000000000 mininum-wage 00000000000000000000000000000000 Weir 00100000000110111011010100001000 branched 00000000000000000000000000000000 Reference 00100000000110110111111100100111 Sid 00100000001000101000001000011000 Feders 00100000000000000000000000000000 534 00000000000000000000000000000000 re-creations 00000000000000000000000000000000 Cosgrove-Meurer 01000000000000000000000000000000 Unsolved 00100000000000000000000000000000 Mysteries 00100000000111000110011000001111 Re-enactments 00100000000000000000000000000000 Povich 00100000000000000000000000000000 Rob 00100000000000011101111100001000 95.90 00000000000000000000000000000000 7.445 00000000000000000000000000000000 97.275 00000000000000000000000000000000 0.025 00000000000000000000000000000000 Wentworth 00100000000000000000000000000000 Beatty 00100000000000000000000000000000 epsiode 00000000000000000000000000000000 Caryl 00100000000000000000000000000000 Chessman 00100000000000000000000000000000 Bosket 00100000000000000000000000000000 84-month 00000000000000000000000000000000 re-enacting 00000000000000000000000000000000 130.7 00000000000000000000000000000000 extras 00000000000100110111110101100011 filming 00000000000101111010110001000000 skateboards 00000000000000000000000000000000 re-enactments 00000000000000000000000000000000 stink 00000000000000000000000000000000 Shales 00100000000000000000000000000000 absorption 00000000000000000000000000000000 Re-creating 00100000000000000000000000000000 Salant 00100000000100111110111100101000 anchorman 00001111111010111111110000110101 Konner 00100000000000000000000000000000 AC-130U 01000000000000000000000000000000 Johanna 00100000000000000000000000000000 lightening 00000000000000000000000000000000 36-page 00000000000000000000000000000000 landlord 00000000000111110010111110000001 Solebury 00100000000000000000000000000000 2.47 00000000000000000000000000000000 29.583 00000000000000000000000000000000 re-creactions 00000000000000000000000000000000 re-creation 00000000000000000000000000000000 round-table 00000000000000000000000000000000 misrepresent 00000000000000000000000000000000 11-class 00000000000000000000000000000000 allayed 00000000000000000000000000000000 ITEL 01000000000111011000111100101000 HDM 01000000000000000000000000000000 NIH-appointed 01000000000000000000000000000000 9.333 00000000000000000000000000000000 30.96 00000000000000000000000000000000 something... 00000000000000000000000000000000 unfamiliar 00000000000000100101100000110010 implant 00000000000000000000000000000000 Diagnostics 00100000000111111001010110111001 Medfield 00100000000000000000000000000000 Basel-based 00100000000000000000000000000000 diagnostics 00000000000111111001010110111001 medical-care 00000000000000000000000000000000 low-altitude 00000000000000000000000000000000 wacky 00000000000000000000000000000000 tissue-transplant 00000000000000000000000000000000 Nutt 00100000000000000000000000000000 convenants 00000000000000000000000000000000 outings 00000000000000000000000000000000 Fatman 00100000000000000000000000000000 navigation 00000000000000011000100001100001 scaled-backed 00000000000000000000000000000000 resellers 00000000000000000000000000000000 original-equipment 00000000000000000000000000000000 38-pound 00000000000000000000000000000000 on-board 00000000000000000000000000000000 14-pound 00000000000000000000000000000000 7.904 00000000000000000000000000000000 Ednee 00100000000000000000000000000000 forest-product 00000000000000000000000000000000 Weighing 00100000000010010010010101000000 20-megabyte 00000000000000000000000000000000 snap-on 00000000000000000000000000000000 3-inch 00000000000000000000000000000000 clunky 00000000000000000000000000000000 List 00100000000111110111100101100111 4,999 00000000000000000000000000000000 naggings 00000000000000000000000000000000 5,599 00000000000000000000000000000000 4,199 00000000000000000000000000000000 oil-patch 00000000000000000000000000000000 treasurers 00000000000000000000000000000000 have-not 00000000000000000000000000000000 mo 00000000000000000000000000000000 degenerative 00000000000000000000000000000000 juvenile 00000000000111000000001000110000 cardholders 00000000000000000000000000000000 0.65 00000000000000000000000000000000 12.52 00000000000000000000000000000000 Ammonium 00101111111010001010101010110000 oxidizer 00000000000000000000000000000000 propellant 00000000001001111010001010110000 rockets 00000000000100000111101001100011 flashpoint 00000000000000000000000000000000 KerrMcGee 01000000000000000000000000000000 3,350 00000000000000000000000000000000 Ezekiel 00100000000000000000000000000000 Pothier 00100000000000000000000000000000 Removed 00100000000110010100010000110010 Exact 00100000000000000110000100010000 3.73 00000000000000000000000000000000 159.92 00000000000000000000000000000000 104.79 00000000000000000000000000000000 1.5775 00000000000000000000000000000000 340.83 00000000000000000000000000000000 W.T. 01000000000000000000000000000000 597 00000000000000000000000000000000 1.8410 00000000000000000000000000000000 tempo 00000000000111100011100100100001 1,977 00000000000000000000000000000000 1,716 00000000000000000000000000000000 188.1 00000000000000000000000000000000 163.2 00000000000000000000000000000000 SHOPPE 01000000000000000000000000000000 cents-a-share 00000000000000000000000000000000 four-cents-a-share 00000000000000000000000000000000 0.0075 00000000000000000000000000000000 129.84 00000000000000000000000000000000 129.63 00000000000000000000000000000000 4,090,000 00000000000000000000000000000000 Sacramento-based 00100000000000000000000000000000 3426.33 00000000000000000000000000000000 Cornish 00100000000000000000000000000000 Northington 00100000000000000000000000000000 Rosencrants 00100000000000000000000000000000 Anxiety 00100000000111100100111010100111 219.19 00000000000000000000000000000000 coverages 00000000000000000000000000000000 Roeser 00100000000000000000000000000000 self-reinsure 00000000000000000000000000000000 Goodfriend 00100000000000000000000000000000 18.32 00000000000000000000000000000000 128.9 00000000000000000000000000000000 517.85 00000000000000000000000000000000 475.6 00000000000000000000000000000000 236.23 00000000000000000000000000000000 194.24 00000000000000000000000000000000 39.19 00000000000000000000000000000000 1205.01 00000000000000000000000000000000 NHI 01000000000000000000000000000000 Miniscribe 00100000000011011100111100101000 cosmetology 00000000000000000000000000000000 12-count 00000000000000000000000000000000 H.N. 01000000000000000000000000000000 financial-aid 00000000000000000000000000000000 13.25 00000000000000000000000000000000 Specific 00100000000000000001000000010000 Health-insurance 00100000000000000000000000000000 antagonists 00000000000000000000000000000000 parried 00000000000000000000000000000000 blackmailed 00000000000000000000000000000000 512 00000000000000000000000000000000 CTBS 01000000000000000000000000000000 demobilizing 00000000000000000000000000000000 PLAN 01000000000111111111111011100111 de-emphasized 00000000000000000000000000000000 voided 00000000111001111001010000110010 Sandinistas... 00100000000000000000000000000000 non-lethal 00000000000000000000000000000000 scrupulously 00000000001101100001001001110010 MINIMUM-WAGE 01000000000000000000000000000000 clamping 00000000000000000000000000000000 kilobytes 00000000000000000000000000000000 2,331,100 00000000000000000000000000000000 12.12 00000000000000000000000000000000 85.3 00000000000000000000000000000000 5.85 00000000000000000000000000000000 16.08 00000000000000000000000000000000 formulates 00000000000000000000000000000000 122.36 00000000000000000000000000000000 102.01 00000000000000000000000000000000 50.59 00000000000000000000000000000000 WTD 01000000000000000000000000000000 29.66 00000000000000000000000000000000 25.12 00000000000000000000000000000000 1.255 00000000000000000000000000000000 1.168 00000000000000000000000000000000 555.5 00000000000000000000000000000000 500.26 00000000000000000000000000000000 251.8 00000000000000000000000000000000 44.92 00000000000000000000000000000000 43.34 00000000000000000000000000000000 consonant 00000000000000000000000000000000 Montedision 00100000000000000000000000000000 Antilles 00100000000000010011010101010000 two-letter 00000000000000000000000000000000 computer-printer 00000000000000000000000000000000 Kernel 00100000000111111110100110111111 Catalyst 00100000000111101110100000100001 1,534,600 00000000000000000000000000000000 64.5 00000000000000000000000000000000 Polytechnic 00100000000000000000000000000000 relishes 00000000000000000000000000000000 Strother 00100000000000000000000000000000 Rosalco 00100000000000000000000000000000 Koffman 00100000000000000000000000000000 researching 00000000000111000010010101000000 audio-visual 00000000000000000000000000000000 splintered 00000000000000000000000000000000 229.03 00000000000000000000000000000000 219.27 00000000000000000000000000000000 Oils 00100000000111101111101111001001 fats 00000000000010001101111001100011 amino 00000000000000000000000000000000 acids 00000000000111111111011001100011 460.05 00000000000000000000000000000000 juncture 00000000000111100000101101100111 Sabine 00100000000000000000000000000000 Hub 00100000000000000000001010000001 Erath 00100000000000000000000000000000 familiarization 00000000000000000000000000000000 Lou 00101111111111100010111000011000 bereft 00000000000000000000000000000000 kits 00000000000000100100110100100011 fewest 00000000000000000000000000000000 graphs 00000000000110111011110101100011 policing 00000000000011100010110001000000 adroit 00000000000000000000000000000000 Globex 00100000000000000000000000000000 ATS 01000000000000000000000000000000 geometrical 00000000000000000000000000000000 1.1580 00000000000000000000000000000000 5.20 00000000000000000000000000000000 485 00000000000000000000000000000000 portend 00000000000110111001101110110010 lashed 00000000000000000000000000000000 preparatives 00000000000000000000000000000000 140-point 00000000000000000000000000000000 Grains 00101111111111011111101110110000 Caygill 00100000000000000000000000000000 Lorne 00100000000000000000000000000000 re-establishing 00000000000000000000000000000000 export-boosting 00000000000000000000000000000000 commodity-oriented 00000000000000000000000000000000 subskill 00000000000000000000000000000000 earthshaking 00000000000000000000000000000000 Abitibi-Price 01000000000000000000000000000000 Boise-Cascade 01000000000000000000000000000000 Fery 00100000000000000000000000000000 unbleached 00000000000000000000000000000000 seige 00000000000000000000000000000000 bleached 00000000000000000000000000000000 reinstituting 00000000000000000000000000000000 69-point 00000000000000000000000000000000 10.66 00000000000000000000000000000000 728 00000000000000000000000000000000 cash-flush 00000000000000000000000000000000 NZ$ 01000000000000000000000000000000 Energieproduktiebedrijf 00100000000000000000000000000000 UNA 01000000000000000000000000000000 Hemweg 00100000000000000000000000000000 Swedish-Swiss 01000000000000000000000000000000 857 00000000000000000000000000000000 114.6 00000000000000000000000000000000 570,000 00000000000000000000000000000000 778.6 00000000000000000000000000000000 Barred 00100000010110010100010000110010 Hawesville 00100000000000000000000000000000 extrusions 00000000000000000000000000000000 oversupply 00000000000101001100111001100111 10.38 00000000000000000000000000000000 taxable-equivalent 00000000000000000000000000000000 insatiable 00000000000000011001000100010000 munis 00000000000000000000000000000000 378.1 00000000000000000000000000000000 Muni 00100000000000000000000000000000 CTB 01000000000000000000000000000000 convexity 00000000000000000000000000000000 787 00000000000000000000000000000000 binders 00000000000000000000000000000000 Appelbaum 00101111111101111110110010001000 publicize 00000000000110100100111110110010 Swiss-based 00100000000000000000000000000000 quarter-point 00000000000000000000000000000000 REMICs 01000000000100111010111001100011 27.90 00000000000000000000000000000000 test-preparation 00000000000000000000000000000000 less-sweeping 00000000000000000000000000000000 test-prep 00000000000000000000000000000000 33.90 00000000000000000000000000000000 furloughs 00000000000000000000000000000000 39.5 00000000000000000000000000000000 retirements 00000000000111111101101011100001 illusionary 00000000000000000000000000000000 2,099 00000000000000000000000000000000 30%-owned 00000000000000000000000000000000 101.7 00000000000000000000000000000000 137.8 00000000000000000000000000000000 291.6 00000000000000000000000000000000 more-advanced 00000000000000000000000000000000 Mifflin 00100000000000000000000000000000 92%-owned 00000000000000000000000000000000 PROGRAM 01000000000111101111100011100111 42-a-share 00000000000000000000000000000000 stowaway 00000000000000000000000000000000 1190.43 00000000000000000000000000000000 14.76 00000000000000000000000000000000 215.86 00000000000000000000000000000000 3406.31 00000000000000000000000000000000 0.27 00000000000000000000000000000000 130.80 00000000000000000000000000000000 Naturalization 00100000000111111011110000110000 0.0100 00000000000000000000000000000000 shillings 00000000000000000000000000000000 Immigration 00100000000100000001000000110000 colonists 00000000000000000000000000000000 1807 00000000000000000000000000000000 Geodetic 00100000000000000000000000000000 meter 00000000000000001111000001000111 Businessmen 00100000000110100010011000110011 Metric 00100000000000000010010101010000 Conversion 00100000000111101001011101001111 kindergarten 00000000000111100110110000100001 six-footer 00000000000000000000000000000000 monsoon 00000000000000000000000000000000 inchworm 00000000000000000000000000000000 wheelbases 00000000000000000000000000000000 Farm-machine 00100000000000000000000000000000 Standardized 00100000000110010101000000010000 Tascher 00100000000000000000000000000000 Everyman 00100000000000000000000000000000 Soldiers 00100000000100101110100000110011 satellite-delivered 00000000000000000000000000000000 19-inch 00000000000000000000000000000000 classrooms 00000000000111111010010101100011 canvassed 00000000000000000000000000000000 Subscribing 00100000000000000000000000000000 12-minute 00000000000000000000000000000000 Subscribers 00100000000000001000000000110011 Classroom 00100000000111110011110000000001 ad-free 00000000000000000000000000000000 public-TV 01000000000000000000000000000000 Educator 00100000000000000000000000000000 1,290 00000000000000000000000000000000 919 00000000000000000000000000000000 five-week 00000000000000000000000000000000 subscribed 00000000000000000000000000000000 Withrow 00100000000000000000000000000000 rudder 00000000000000000000000000000000 28-question 00000000000000000000000000000000 lashing 00000000000000000000000000000000 aces 00000000000000000000000000000000 Harmonia 00100000000000000000000000000000 4,750,000 00000000000000000000000000000000 Healthsource 00100000000000000000000000000000 Potash 00100000011010000100011010110000 75,075,000 00000000000000000000000000000000 40.86 00000000000000000000000000000000 34,215,000 00000000000000000000000000000000 56,565,000 00000000000000000000000000000000 4th 00000000000000000000000000000000 70,315,000 00000000000000000000000000000000 786,860,000 00000000000000000000000000000000 729.04 00000000000000000000000000000000 57.82 00000000000000000000000000000000 1,384,119 00000000000000000000000000000000 23.31 00000000000000000000000000000000 100-megabyte 00000000000000000000000000000000 voice-processing 00000000000000000000000000000000 drenching 00000000000000000000000000000000 Evren 00100000000000000000000000000000 Kenan 00100000000000000000000000000000 Ankara 00100000000000000000000000000000 Phi 00100000000110100000101001000000 Kappa 00100000000000010101010100101000 Wham 00100000000000000000000000000000 Bam 00100000000000000000000000000000 194.69 00000000000000000000000000000000 eclipsing 00000000000000000000000000000000 iffy 00000000000000000000000000000000 Opinions 00100000000110100011111101100011 convoy 00000000000000000101011000000001 school-sponsored 00000000000000000000000000000000 strongholds 00000000000000000000000000000000 subindustry 00000000000000000000000000000000 Test-preparation 00100000000000000000000000000000 all-in-all 00000000000000000000000000000000 Carried 00100000000001100001001000110010 Walmart 00100000000000000000000000000000 frothy 00000000000000000000000000000000 sobered 00000000111000100111010000110010 Salang 00100000000000000000000000000000 5,699 00000000000000000000000000000000 Unwilling 00100000000111100100011000110010 arithmetic 00000000000100000111111001100111 test-practice 00000000000000000000000000000000 Worksheets 00100000000000000000000000000000 unanswerable 00000000000000000000000000000000 three-sevenths 00000000000000000000000000000000 1,108 00000000000000000000000000000000 92.42 00000000000000000000000000000000 two-sevenths 00000000000000000000000000000000 IX 01000000000000000000000000000000 outgained 00000000000000000000000000000000 numeral 00000000000000000000000000000000 Placer 00100000000000000000100100101000 retentive 00000000000000000000000000000000 shards 00000000000000000000000000000000 severing 00000000000000000000000000000000 recession-inspired 00000000000000000000000000000000 alpha 00000000000011110010101010110000 ultrasonic 00000000000000000000000000000000 water-submersion 00000000000000000000000000000000 City-type 00100000000000000000000000000000 mountaintop 00000000000000000000000000000000 Lanzhou 00100000000000000000000000000000 Glaciology 00100000000000000000000000000000 Geocryology 00100000000000000000000000000000 half-century 00000000000000000000000000000000 non-core 00000000000000000000000000000000 civil-service 00000000000000000000000000000000 polar 00000000000000000000000000000000 Lonnie 00100000000000000000000000000000 6,799 00000000000000000000000000000000 evaporation 00000000000000000000000000000000 workbooks 00000000000000000000000000000000 billion-yen 00000000000000000000000000000000 1937-87 00000000000000000000000000000000 50-year 00000000000000000000000000000000 Ice 00100000000111111110001100100001 42-day 00000000000000000000000000000000 uniformly 00000000000000000000000000000000 skirmish 00000000000000000000000000000000 HOLD 01000000000111111110101110110010 Greenland 00100000000000000000000000000000 Telxon 00100000000110101010111100101000 Bufton 00100000000000000000000000000000 60-40 00000000000000000000000000000000 70-30 00000000000000000000000000000000 Southport 00100000000000000000000000000000 243.2 00000000000000000000000000000000 junctures 00000000000000000000000000000000 analytical 00001111111000000000101001001000 disguise 00000000110110111111110110110010 caribou 00000000000000000000000000000000 wolves 00000000000000000000000000000000 14.54 00000000000000000000000000000000 slow-spending 00000000000000000000000000000000 faster-spending 00000000000000000000000000000000 scorekeeping 00000000000000000000000000000000 rocket-motor 00000000000000000000000000000000 earnigs 00000000000000000000000000000000 space-station 00000000000000000000000000000000 11,820,000 00000000000000000000000000000000 510,000 00000000000000000000000000000000 Hamakua 00100000000000000000000000000000 370.58 00000000000000000000000000000000 fanned 00000000101111100111010000110010 467 00000000000000000000000000000000 back-on-terra-firma 00000000000000000000000000000000 great-grandchildren 00000000000000000000000000000000 slavery 00000000000011010111110010100111 Metro 00100000000011010111110110101000 aspersions 00000000000000000000000000000000 job-training 00000000000000000000000000000000 Coffee-shop 00100000000000000000000000000000 porous 00000000000000000000000000000000 alienates 00000000000000000000000000000000 right-wingers 00000000000000000000000000000000 abstinence 00000000000000000000000000000000 Aw 00100000000000000000000000000000 fellas 00000000000000000000000000000000 Singin 00100000000000000000000000000000 reallocate 00000000000000000000000000000000 Hollandale 00100000000000000000000000000000 30,537 00000000000000000000000000000000 high-rise-project 00000000000000000000000000000000 GHS 01000000000000000000000000000000 rusty 00000000000000000000000000000000 red-and-white 00000000000000000000000000000000 rodents 00000000000000000000000000000000 cockroaches 00000000000000000000000000000000 nonworking 00000000000000000000000000000000 patrolled 00000000000000000000000000000000 Dee 00100000000111110110110000001000 undergone 00000000000111110100010110110010 Producing 00100000000011000111110001000000 oil-finding 00000000000000000000000000000000 work-force 00000000000000000000000000000000 sporadically 00000000000000000000000000000000 Tex. 00100000000000000000000000000000 midcontinent 00000000000000000000000000000000 scouring 00000000000000000000000000000000 Gurtz 00100000000000000000000000000000 income-oriented 00000000000000000000000000000000 interest-rate-type 00000000000000000000000000000000 Bethesda 00100000000111010010101001101000 SHORT-TERM 01000000000000000000000000000000 MUNICIPALS 01000000000111101011111011100011 municipal-bond 00000000000000000000000000000000 no-brainer 00000000000000000000000000000000 Cashman 00100000000000000000000000000000 laddered 00000000000000000000000000000000 Westerly 00100000000000000000000000000000 BOND 01000000000000000000111110110000 lengthens 00000000000000000000000000000000 equity-like 00000000000000000000000000000000 DEFERRED 01000000000100010000011100010000 ANNUITIES 01000000000111010111111001100011 -were 00000000000000000000000000000000 Annuities 00100000000111010111111001100011 cheerleading 00000000000000000000000000000000 -especially 00000000000000000000000000000000 metabolism 00000000000000000000000000000000 endrocrine 00000000000000000000000000000000 intensively 00000000000000000000000000000000 toxicologist 00000000000000000000000000000000 forensic 00000000000000000000000000000000 14.28 00000000000000000000000000000000 sweating 00000000000000000000000000000000 expunged 00000000000000000000000000000000 cramps 00000000000000000000000000000000 sugary 00000000000000000000000000000000 reallocated 00000000000000000000000000000000 clinically 00000000000000000000000000000000 Diabetic 00100000000000000000000000000000 Medicines 00100000000110000110111001100011 Diabetes 00100000000101101101110010100111 23,403 00000000000000000000000000000000 animal-based 00000000000000000000000000000000 Fagershein 00100000000000000000000000000000 hypoglycemic 00000000000000000000000000000000 14.53 00000000000000000000000000000000 SharesBase 01000000000000000000000000000000 221-person 00000000000000000000000000000000 318.79 00000000000000000000000000000000 man-hours 00000000000000000000000000000000 melts 00000000000000000000000000000000 4.70 00000000000000000000000000000000 abdicate 00000000000000000000000000000000 bean 00000000000111000100011010110000 budgeteers 00000000000000000000000000000000 pork-barrelers 00000000000000000000000000000000 terminations 00000000000000000000000000000000 preservation 00000000000011000010001101001111 Strategists 00100000000010010010000010110011 340.36 00000000000000000000000000000000 1990-94 00000000000000000000000000000000 as-yet 00000000000000000000000000000000 Editorials 00100000000011100101110101100011 448 00000000000000000000000000000000 Constant 00100000000001101011000000010000 reimburses 00000000000000000000000000000000 Scenarios 00100000000111000000001010100011 sequestering 00000000000000000000000000000000 sterilize 00000000000000000000000000000000 0.54 00000000000000000000000000000000 decried 00000000000000000000000000000000 pollination 00000000000000000000111111111001 battlegroups 00000000000000000000000000000000 prohibitive 00000000000000000000000000000000 resurrects 00000000000000000000000000000000 Zero-Based 01000000000000000000000000000000 Budgeting 00100000000011110000110001000000 bean-counting 00000000000000000000000000000000 marginalia 00000000000000000000000000000000 Produce 00100000000111111111101110110010 permeating 00000000000000000000000000000000 14.26 00000000000000000000000000000000 idealized 00000000000010110010010100010000 Lovett 00100000000000000000000000000000 discrete 00000000000000000000000000000000 neutralizes 00000000000000000000000000000000 Spinney 00100000000000000000000000000000 condensed 00000000001000011101101001000000 Times-Mirror 01000000000000000000000000000000 steriles 00000000000000000000000000000000 Proceedings 00100000000111101111001001000111 pre-publication 00000000000000000000000000000000 Barbados 00100000000000000000000000000000 Supportive 00100000011011101011110000110010 Predictions 00100000000111111001010000100011 Malpede 00100000000000000000000000000000 1.5500 00000000000000000000000000000000 squabble 00000000000110110100110000100111 stormier 00000000000000000000000000000000 -Mrs 01000000000000000000000000000000 2.8896 00000000000000000000000000000000 2.9511 00000000000000000000000000000000 discount-borrowing 00000000000000000000000000000000 unpopularity 00000000000000000000000000000000 Californian 00100000000000000000000000000000 378.30 00000000000000000000000000000000 378.87 00000000000000000000000000000000 Harkin 00100000000000000000000000000000 crabby 00000000000000000000000000000000 do-gooders 00000000000000000000000000000000 hoodwinked 00000000000000000000000000000000 Pushing 00100000000111111000110101000000 mockingly 00000000000000000000000000000000 Emancipation 00100000000000000000000000000000 Proclamation 00100000000000000000000000000000 Parrino 00100000000000000000000000000000 1,745,000 00000000000000000000000000000000 3,027,330 00000000000000000000000000000000 commmon 00000000000000000000000000000000 voyage 00000000000110101000111101100111 Appalachian 00100000000000000000000000000000 44.2 00000000000000000000000000000000 109.66 00000000000000000000000000000000 dissuade 00000000010001111011111110110010 futures-exchange 00000000000000000000000000000000 Philippines-backed 00100000000000000000000000000000 U.S.-dollar 01000000000000000000000000000000 stock-index-futures 00000000000000000000000000000000 verged 00000000000000000000000000000000 21,687 00000000000000000000000000000000 upsetting 00000000000000000000000000000000 Chartered 00101111111000010000101001000000 morale-damaging 00000000000000000000000000000000 solves 00000000000000000000000000000000 healed 00000000000000000000000000000000 clearinghouse 00000000000000000000000000000000 amahs 00000000000000000000000000000000 Rory 00100000000000000000000000000000 Bullion 00100000000000000001011110110000 23.11 00000000000000000000000000000000 163.3 00000000000000000000000000000000 22.76 00000000000000000000000000000000 232.12 00000000000000000000000000000000 206.87 00000000000000000000000000000000 12.43 00000000000000000000000000000000 11.66 00000000000000000000000000000000 20.48 00000000000000000000000000000000 19.51 00000000000000000000000000000000 221.61 00000000000000000000000000000000 200.70 00000000000000000000000000000000 477.00 00000000000000000000000000000000 420.68 00000000000000000000000000000000 45.00 00000000000000000000000000000000 47.17 00000000000000000000000000000000 23.500 00000000000000000000000000000000 23.031 00000000000000000000000000000000 13.02 00000000000000000000000000000000 195.19 00000000000000000000000000000000 179.916 00000000000000000000000000000000 6.47 00000000000000000000000000000000 14.95 00000000000000000000000000000000 14.44 00000000000000000000000000000000 157.78 00000000000000000000000000000000 143.88 00000000000000000000000000000000 400.0 00000000000000000000000000000000 366.89 00000000000000000000000000000000 23.0 00000000000000000000000000000000 25.51 00000000000000000000000000000000 redeployment 00000000000000000000000000000000 novitiates 00000000000000000000000000000000 Norge 00100000000000000000000000000000 Erdolversorgungs 00100000000000000000000000000000 Wagg 00100000000000000000000000000000 99.625 00000000000000000000000000000000 virgins 00000000000000000000000000000000 Allegany 00100000000000000000000000000000 787.02 00000000000000000000000000000000 1.011 00000000000000000000000000000000 1996-2000 00000000000000000000000000000000 35.38 00000000000000000000000000000000 remarketings 00000000000000000000000000000000 drag-down 00000000000000000000000000000000 5.05 00000000000000000000000000000000 1989-89 00000000000000000000000000000000 33.2 00000000000000000000000000000000 Kyushu 00100000000000000000000000000000 16.03 00000000000000000000000000000000 96.95 00000000000000000000000000000000 11.71 00000000000000000000000000000000 Tap 00100000000111001110101110110010 Mandom 00100000000000000000000000000000 101.45 00000000000000000000000000000000 Lavaro 00100000000000000000000000000000 16.38 00000000000000000000000000000000 MNB 01000000000000000000000000000000 four-family 00000000000000000000000000000000 99.775 00000000000000000000000000000000 14.00 00000000000000000000000000000000 gametocide 00000000000000000000000000000000 interferes 00000000000000000000000000000000 Photoprotective 00100000000000000000000000000000 31.18 00000000000000000000000000000000 445.7 00000000000000000000000000000000 -subjects 00000000000000000000000000000000 511 00000000000000000000000000000000 469 00000000000000000000000000000000 63.25 00000000000000000000000000000000 Vacaville 00100000000000000000000000000000 135,000 00000000000000000000000000000000 6,420,268 00000000000000000000000000000000 dew-sodden 00000000000000000000000000000000 lubricating-oil 00000000000000000000000000000000 175.4 00000000000000000000000000000000 Lemont 00100000000000000000000000000000 Jolivet 00100000000000000000000000000000 Kenmore 00100000000000000000000000000000 Groupement 00100000000000000000000000000000 Foncier 00100000000000000000000000000000 Francais 00100000000000000000000000000000 Nouveaux 00100000000000000000000000000000 Constructeurs 00100000000000000000000000000000 2.76 00000000000000000000000000000000 barrel-a-day 00000000000000000000000000000000 256.18 00000000000000000000000000000000 6,499 00000000000000000000000000000000 9,999 00000000000000000000000000000000 24,999 00000000000000000000000000000000 153,000 00000000000000000000000000000000 Uno-Ven 01000000000000000000000000000000 fairway 00000000000000000000000000000000 84.7 00000000000000000000000000000000 Ariail 00100000000000000000000000000000 6.11 00000000000000000000000000000000 Fracturing 00100000000000000000000000000000 279.39 00000000000000000000000000000000 249.68 00000000000000000000000000000000 5.40 00000000000000000000000000000000 Rolled 00100000100101101001001000110010 35.23 00000000000000000000000000000000 airconditioner 00000000000000000000000000000000 Winning 00100000000011001111110001000000 153.93 00000000000000000000000000000000 Wiesbaden 00100000000000000000000000000000 Rhine-Westphalia 01000000000000000000000000000000 297 00000000000000000000000000000000 34,500 00000000000000000000000000000000 cathode 00000000000000000000000000000000 1.388 00000000000000000000000000000000 fifth-consecutive 00000000000000000000000000000000 745.7 00000000000000000000000000000000 Johanson 00100000000000000000000000000000 Backseat 00100000000000000000000000000000 malfunctions 00000000000000000000000000000000 Glasgow 00100000000000000000000000000000 9.63 00000000000000000000000000000000 market-system 00000000000000000000000000000000 Framatome 00100000000000000000000000000000 SEAQ 01000000000000000000000000000000 automated-quotation 00000000000000000000000000000000 price-reporting 00000000000000000000000000000000 non-firm 00000000000000000000000000000000 incentive-bonus 00000000000000000000000000000000 blackboard 00000000000000000000000000000000 EVERYONE 01000000000001001010010001110010 Pressures 00100000000111100110100100100111 order-imbalance 00000000000000000000000000000000 2.175 00000000000000000000000000000000 near-limit 00000000000000000000000000000000 9.671 00000000000000000000000000000000 grandstander 00000000000000000000000000000000 transact 00000000000000000000000000000000 Dieter 00100000000000000000000000000000 Bauernfeind 00100000000000000000000000000000 290,541 00000000000000000000000000000000 313,125 00000000000000000000000000000000 12,573,758 00000000000000000000000000000000 11,742,368 00000000000000000000000000000000 cocky 00000000000000000000000000000000 toxicity 00000000000010100101110000100001 29,700 00000000000000000000000000000000 AGREES 01000000000111100111010111000010 Gene-splicing 00100000000000000000000000000000 encapsulate 00000000000000000000000000000000 Morinaga 00100000000000000000000000000000 Aflatoxin 00100000000110011011110010100111 molds 00000000000000000000000000000000 peanut 00000000000101101100101010110000 Zygmunt 00100000000000000000000000000000 acronym 00000000000111110011101100100111 Confederations 00100000000000000000000000000000 social-affairs 00000000000000000000000000000000 barrier-free 00000000000000000000000000000000 unattainable 00000000000000000000000000000000 rebutted 00000000000000000000000000000000 rotating 00000000001001011101000000010000 Lumber 00100000000011010100011010110000 Gallitzin 00100000000000000000000000000000 116,000 00000000000000000000000000000000 1990-91 00000000000000000000000000000000 freshly 00000000000000000000000000000000 emasculation 00000000000000000000000000000000 four-foot-high 00000000000000000000000000000000 wrench 00000000000000000000000000000000 slab 00000000000000000000000000000000 13-hour 00000000000000000000000000000000 obviate 00000000000000000000000000000000 cloned 00000000000000000000000000000000 Oil-tool 00100000000000000000000000000000 somatostatin 00000000000000000000000000000000 competitions 00000000000000000000000000000000 calmed 00000000000000000000000000000000 squabbling 00000000000001001010111010100111 Burk 00100000000000000000000000000000 alfalfa 00000000000000000000000000000000 college-bowl 00000000000000000000000000000000 blowup 00000000000000000000000000000000 -forcing 00000000000000000000000000000000 Kelli 00100000000000000000000000000000 fuel-services 00000000000000000000000000000000 grader 00000000000000000000000000000000 Henson 00101111111010000001000010001000 rapeseeds 00000000000000000000000000000000 Caracas 00100000000001011111111001101000 quota-cheaters 00000000000000000000000000000000 Iran-Iraq 01000000000000000000000000000000 confidently 00000010101001000001001001110010 Subroto 00101111110000001110110010001000 opportune 00000000000000000000000000000000 teacher-cadet 00000000000000000000000000000000 chemist-turned-entrepreneur 00000000000000000000000000000000 Nordine 00100000000000000000000000000000 Ait-Laoussine 01000000000000000000000000000000 Algerian 00100000000100111100010100110000 gun-shy 00000000000000000000000000000000 oil-production 00000000000000000000000000000000 Querecho 00100000000000000000000000000000 rumble 00000000000000000000000000000000 burly 00000000000111100001000010010000 150-foot-tall 00000000000000000000000000000000 Folsom 00100000000000000000000000000000 ponying 00000000000000000000000000000000 half-interest 00000000000000000000000000000000 no-mistakes 00000000000000000000000000000000 Covey 00100000000000000000000000000000 cross-pollinated 00000000000000000000000000000000 southwestern 00000000000110110000110110101000 M.I.T.-trained 01000000000000000000000000000000 reproduced 00000000000000000000000000000000 drill-bit 00000000000000000000000000000000 Teacher 00100000000101101001011110110101 PTA 01000000000000000000000000000000 18-to-$19 00000000000000000000000000000000 roughnecks 00000000000000000000000000000000 roustabouts 00000000000000000000000000000000 mud-logger 00000000000000000000000000000000 Butch 00100000000000000000000000000000 McCarty 01000000000000000000000000000000 spur-of-the-moment 00000000000000000000000000000000 Cloudcroft 00100000000000000000000000000000 14,505 00000000000000000000000000000000 completions 00000000000000000000000000000000 992 00000000000000000000000000000000 rotary 00000000000000111000001000110000 933 00000000000000000000000000000000 offshore-rig 00000000000000000000000000000000 hauled 00000000000101010001001000110010 Wyo. 00100000000000000000000000000000 Bilbrey 00100000000000000000000000000000 15,000-foot 00000000000000000000000000000000 1-million-plus 00000000000000000000000000000000 Zel 00100000000000000000000000000000 Herring 00100000000000000000000000000000 Sandhills 00100000000000000000000000000000 Luncheon 00100000000000000110110001000111 Cafe 00100000000110001110010100000001 whips 00000000000000000000000000000000 hamburgers 00000000000111011101111001100011 grilled 00000000000000000000000000000000 jalapeno 00000000000000000000000000000000 pepper 00000000000111101100111010001000 Garret 00100000000000000000000000000000 baked 00000000000010010110101010110000 deoxyribonucleic 00000000000000000000000000000000 pudding 00000000000000000000000000000000 helix 00000000000000000000000000000000 greenhouse-produced 00000000000000000000000000000000 Literacy 00100000000000001110001101100001 Roustabouts 00100000000000000000000000000000 backhoe 00000000000000000000000000000000 unlocked 00000000000000000000000000000000 Arrested 00100000010111110100010000110010 Bioengineers 00100000000000000000000000000000 Whittier 00100000000000000000000000000000 Huerta 00100000000000000000000000000000 Puente 00100000000000000000000000000000 Arroyo 00101111111111110000110010001000 Rojas 00100000000000000000000000000000 Doris 00100000000000000000000000000000 Moreno 00100000000000000000000000000000 Azucena 00100000000000000000000000000000 Geno 00100000000000000000000000000000 Apicella 00100000000000000000000000000000 Terrell 00100000000000000000000000000000 Earlham 00100000000000000000000000000000 torpedo 00000001001100111111110110110010 20%-owned 00000000000000000000000000000000 IXL 01000000000000000000000000000000 cheerleaders 00000000000000000000000000000000 Matters 00100000000111101101101010100011 Pros 00100000000111101010000010110011 Theorists 00100000000000000000000000000000 Hurts 00100011000010000011000000010010 PLANTS 01000000000111101110100010001001 outperforms 00000000000000000000000000000000 CROSS-BRED 01000000000000000000000000000000 166,537 00000000000000000000000000000000 127,446 00000000000000000000000000000000 pro-selected 00000000000000000000000000000000 compensations 00000000000000000000000000000000 undiversifiable 00000000000000000000000000000000 forsaken 00000000000000000000000000000000 four-stock 00000000000000000000000000000000 dart 00000000000000011011010100101000 throwers 00000000000000000000000000000000 112,383 00000000000000000000000000000000 Hein 00100000000000000000000000000000 Tech 00100000000000000011010001000001 Lubbock 00100000000100011011101001101000 Dartboard 00100000000100111101000010110000 efficient-market 00000000000000000000000000000000 Dynascan 00100000000000000000000000000000 Likins 00100000000000000000000000000000 Lehigh 00100000000000000000000000000000 motion-control 00000000000000000000000000000000 Thefts 00100000000000000000000000000000 Jittery 00100000000011001111110000110010 BEING 01000000000000000011001001110010 TRAVEL 01000000000001000100000000100001 travel-agency 00000000000000000000000000000000 3,632 00000000000000000000000000000000 BURBANK 01000000000111001010101001101000 Reporting 00100000000000000000110001000000 deactivates 00000000000000000000000000000000 Willy 00101111111100011100101000101000 LUTHER 01001111111011000100011100001000 Telaction 00100000000000000000000000000000 temple 00000000001100111100000000001000 buzzer 00000000000000000000000000000000 medallions 00000000000000000000000000000000 14-hour 00000000000000000000000000000000 Reasonable 00100000000010100000000000010000 CONSUMER 01000000000011010001010000110000 collision-damage 00000000000000000000000000000000 home-shopping 00000000000000000000000000000000 Lag 00100000000101000111001010110111 Jets 00100000000110001100101001100011 YOUR 01000000000000000000010100000100 FLIGHT 01000000000111101000000000100001 20-hour 00000000000000000000000000000000 Finucane 00100000000000000000000000000000 Compromises 00100000000110101111111000100011 zombies 00000000000000000000000000000000 Galipault 00100000000000000000000000000000 Worthington 00100000000111111011001000001000 GOLF 01000000000000000110001100100001 BECOME 01000000000111101100010110110010 Simulated 00100000000000000000000000000000 17.12 00000000000000000000000000000000 base-price 00000000000000000000000000000000 Harte-Hanks 01000000000000000000000000000000 salubrious 00000000000000000000000000000000 dreamt 00000000000000000000000000000000 tax-reducing 00000000000000000000000000000000 inflation-created 00000000000000000000000000000000 confiscation 00000000000000000000000000000000 gravest 00000000000000000000000000000000 phenomena 00000000000000000000000000000000 Sigurd 00100000000000000000000000000000 betterment 00000000000000000000000000000000 television-related 00000000000000000000000000000000 O.P. 01000000000000000000000000000000 Leubert 00100000000000000000000000000000 Chyron 00100000000000000000000000000000 telesystems 00000000000000000000000000000000 horticultural-products 00000000000000000000000000000000 soil-nutrients 00000000000000000000000000000000 Grace-Sierra 01000000000000000000000000000000 Horticultural 00100000000000000000000000000000 rule-making 00000000000000000000000000000000 Tray 00100000000000000000000000000000 foward 00000000000000000000000000000000 securites 00000000000000000000000000000000 polices 00000000000000000000000000000000 dissident-shareholder 00000000000000000000000000000000 Odell 00100000000000000000000000000000 rapeseed 00000000000000000000000000000000 Fuqua 00100000000011000011000100101000 Drink 00100000000101011100110110110111 Carrier 00100000000111101111100001000101 price-increase 00000000000000000000000000000000 DPT 01000000000000000000000000000000 diphtheria 00000000000000000000000000000000 tetanus 00000000000000000000000000000000 allergic 00000000000000000000000000000000 Bordetella 00100000000000000000000000000000 Second-tier 00100000000000000000000000000000 poisonous 00000000000000000000000000000000 Italian-led 00100000000000000000000000000000 pluck 00000000000000000000000000000000 520 00000000000000000000000000000000 coli 00000000000000000000000000000000 nonvirulent 00000000000000000000000000000000 homologous 00000000000000000000000000000000 recombination 00000000000000000000000000000000 organism 00000000000000000000000000000000 Competes 00100000110011110110010000110010 mutant 00000000000000000000000000000000 Experiments 00100000000111001110001000100011 non-virulent 00000000000000000000000000000000 Selavo 00100000000000000000000000000000 Cartons 00100000000000000000000000000000 three-man 00000000000000000000000000000000 Academically 00100000000000000000000000000000 88-year 00000000000000000000000000000000 sterility 00000000000000000000000000000000 1796 00000000000000000000000000000000 Amschel 00100000000000000000000000000000 Bankhaus 00100000000000000000000000000000 bled 00000000000000000000000000000000 Wilhelm 00100000000000000000000000000000 Southbrook 00100000000000000000000000000000 palatial 00000000000000000000000000000000 Panama-based 00100000000000000000000000000000 Shirer 00100000000000000000000000000000 Rise 00100000000111111111111100110111 Fall 00100000000111111111011000110111 PORTING 01000000000000000000000000000000 POTABLES 01000000000000000000000000000000 Destruction 00100000000111001010111000001111 carting 00000000000000000000000000000000 tapestries 00000000000000000000000000000000 Document 00100000000111101010110011100111 honors 00000001100010001111000000010010 Scypher 00100000000000000000000000000000 uninterested 00000000000000000000000000000000 Stromeyer 00100000000000000000000000000000 6.51 00000000000000000000000000000000 decision-makers 00000000000000000000000000000000 aura 00000000000111010100111001100111 538,000 00000000000000000000000000000000 synthetics 00000000000000000000000000000000 Smuzynski 00100000000000000000000000000000 sideshow 00000000000000000000000000000000 detracts 00000000000000000000000000000000 Cup-Tote 01000000000000000000000000000000 Lesutis 00100000000000000000000000000000 flay 00000000000000000000000000000000 Defenders 00100000000111000010000010110011 coverup 00000000000000000000000000000000 Margolis 00100000000000000000000000000000 Yemma 00100000000000000000000000000000 unit- 00000000000000000000000000000000 homogenous 00000000000000000000000000000000 Sandip 00100000000000000000000000000000 Bhagat 00100000000000000000000000000000 Thermometer 00100000000000000000000000000000 vapors 00000000000000000000000000000000 thermometers 00000000000000000000000000000000 workroom 00000000000000000100111101100011 web 00000000000111100011001000111111 worker-safety 00000000000000000000000000000000 Speculative 00100000001000000010000000110000 pyramiding 00000000000000000000000000000000 Barabolak 00100000000000000000000000000000 tote 00000000000000000000000000000000 Nylev 00100000000000000000000000000000 Britoil 00100000000111100111001100101000 smothered 00000000000000000000000000000000 Townes 00100000000000000000000000000000 Coventry 00100000000000000000000000000000 unlocks 00000000000000000000000000000000 rolling-steel 00000000000000000000000000000000 tweezers 00000000000000000000000000000000 18.46 00000000000000000000000000000000 Gets 00100000000001111011000000010010 Misunderstanding 00100000000111101001101010100111 extremist 00000000000000000000000000000000 canyons 00000000000000000000000000000000 Utahans 00100000000000000000000000000000 Inventor 00100000000101000111110000110101 shaded 00000000000000000000000000000000 Claire 00100000000000000000000000000000 Standing 00100000000110111011000001000000 spilling 00000000000000000000000000000000 greening 00000000000111111100011100001111 achievement-test 00000000000000000000000000000000 Sammye 00100000000000000000000000000000 Meadows 00100000000111000101000000001000 Rushforth 00100000000000000000000000000000 Bryner 00100000000000000000000000000000 Heber 00100000000000000000000000000000 power-plant 00000000000000000000000000000000 dandy 00000000000000000000000000000000 Wasatch 00100000000000000000000000000000 Range 00100000000111111111011001000111 astounds 00000000000000000000000000000000 Lids 00100000000000000000000000000000 self-righteous 00000000000000000000000000000000 Vranian 00100000000000000000000000000000 braking 00000000000000001010110001000000 maniac 00000000000000000000000000000000 recyclable 00000000000000010001110110111001 Sotela 00100000000000000000000000000000 five-nation 00000000000000000000000000000000 courtesies 00000000000000000000000000000000 distate 00000000000000000000000000000000 Sandifer 00100000000000000000000000000000 student-athletes 00000000000000000000000000000000 More-detailed 00100000000000000000000000000000 Titled 00100000000010110101010000110010 199.8 00000000000000000000000000000000 pistils 00000000000000000000000000000000 225.7 00000000000000000000000000000000 minor-sport 00000000000000000000000000000000 extracurricular 00000000000000000000000000000000 135.2 00000000000000000000000000000000 pampered 00000000000000000000000000000000 jock 00000000000000000000000000000000 seven-figure 00000000000000000000000000000000 1,240 00000000000000000000000000000000 185.5 00000000000000000000000000000000 athlete-student 00000000000000000000000000000000 330.1 00000000000000000000000000000000 .what 00000000000000000000000000000000 Perestroika 00100000000101111111110010100111 ABUSE 01000000000111110100100010100111 teammates 00000000000000000000000000000000 collegiate 00000000000000000000000000000000 Graduate-student 00100000000000000000000000000000 SAT 01000000001110011110001000110010 Schultz 00101111111000110101000010001000 basketball-cutback 00000000000000000000000000000000 wooed 00000000000000000000000000000000 shuttles 00000000000000000000000000000000 Touches 00100001000111001111000000010010 woolly 00000000000000000000000000000000 Coatings 00100000000111101000101111001001 SONGsters 01000000000000000000000000000000 anti-intellectualism 00000000000000000000000000000000 59.2 00000000000000000000000000000000 Intellectual 00100000001000100000000000110000 nerd-and-geek 00000000000000000000000000000000 Fridman 00100000000000000000000000000000 graduate-student 00000000000000000000000000000000 inaugural 00000000000001110000010011010000 calculator-toting 00000000000000000000000000000000 shirt-pocket 00000000000000000000000000000000 Aptitude 00101111111010000101110000100001 chicken-mutilating 00000000000000000000000000000000 holler 00000000000000000000000000000000 freaks 00000000000000000000000000000000 nonconformists 00000000000000000000000000000000 studious 00000000000000000000000000000000 Genius 00100000000111101111101001100111 whizzes 00000000000000000000000000000000 EXCHANGE 01000000000000000000000100111101 Revenge 00100000000001100101110010100111 runny 00000000000000000000000000000000 ill-fitting 00000000000000000000000000000000 Escalante 00100000000000000000000000000000 344,354 00000000000000000000000000000000 Deliver 00100000000101011111101110110010 cane 00000000000110000111101110110000 matchmaking 00000000000000000000000000000000 Scholastic 00101111111100101100101010110000 Brendan 00100000000000000000000000000000 Barba 00100000000000000000000000000000 Moonachie 00100000000000000000000000000000 4.11 00000000000000000000000000000000 CRESTMONT 01000000000000000000000000000000 9.89 00000000000000000000000000000000 oil-industry 00000000000000000000000000000000 curtailing 00000000000100110011011101000000 air-quality 00000000000000000000000000000000 pollute 00000000000000000000000000000000 heavy-crude 00000000000000000000000000000000 light-crude 00000000000000000000000000000000 3.14 00000000000000000000000000000000 firings 00000000000110010110000010100111 gas-producing 00000000000000000000000000000000 Poole 00100000000000000000000000000000 400-day 00000000000000000000000000000000 Anadarko 00100000000101001111010100101000 SFX 01000000000000000000000000000000 grapples 00000000000000000000000000000000 methodology 00000000000100111001101001100111 comprehensiveness 00000000000000000000000000000000 authorship 00000000000000000000000000000000 unsigned 00000000000000000000000000000000 Ekonomicheskaya 00100000000000000000000000000000 Gazeta 00100000000000000000000000000000 manifesto 00000000000000000000000000000000 couching 00000000000000000000000000000000 radical-moderate 00000000000000000000000000000000 PROPERTY 01000000000111101001100000100001 Rigid 00100000000111010101000000010000 FINANCES 01000000000111101100101101100011 LABOR 01000000000000000000110110110000 state-supervised 00000000000000000000000000000000 centrally 00000000000111000111001001110010 blender 00000000000000000000000000000000 Wholesale 00100000000001010101010000110000 government-set 00000000000000000000000000000000 Inflation-adjusted 00100000000000000000000000000000 TRADE 01000000000001000000000000010001 decentralization 00000000001111110110011010100111 imperiled 00000000000000000000000000000000 vaguest 00000000000000000000000000000000 Gosplan 00100000000000000000000000000000 Material 00100000000000000001100000100001 Gossnab 00100000000000000000000000000000 Willing 00100000000111111100011000110010 walkie-talkie 00000000000000000000000000000000 Flick 00100000000000000000000000000000 Shock 00100000000110110111001010110111 prof 00000000000000000000000000000000 Physiology 00100000000000000000000000000000 Drybred 00100000000000000000000000000000 transit-association 00000000000000000000000000000000 rabid 00000000000011010011000010010000 not-so-favorite 00000000000000000000000000000000 miserly 00000000000000000000000000000000 unappealing 00000000000000000000000000000000 cynic 00000000000000000000000000000000 anti-heroes 00000000000000000000000000000000 Quoting 00100000000110111100001101000000 classifies 00000000000000000000000000000000 Filter 00100000000111111011110110110111 three-game 00000000000000000000000000000000 discount... 00000000000000000000000000000000 sweated 00000000000000000000000000000000 34,320 00000000000000000000000000000000 Passaic-Clifton 01000000000000000000000000000000 two-run 00000000000000000000000000000000 right-hander 00000000000000000000000000000000 Mutchin 00100000000000000000000000000000 4-1 00000000000000000000000000000000 Whitey 00100000000000000000000000000000 Lockman 00100000000000000000000000000000 Clint 00100000000000000000000000000000 Hartung 00100000000000000000000000000000 Scottish-born 00100000000000000000000000000000 estate... 00000000000000000000000000000000 stared 00000000000000000000000000000000 rocketing 00000000000000000000000000000000 leftfield 00000000000000000000000000000000 22.70 00000000000000000000000000000000 -telegraph 00000000000000000000000000000000 imputed 00000000000000000000000000000000 public-housing 00000000000000000000000000000000 -with 00000000000000000000000000000000 .270 00000000000000000000000000000000 corkscrews 00000000000000000000000000000000 wedding 00000000000111100010110000000001 slouch 00000000000000000000000000000000 prettier 00000000000000000000000000000000 Homer 00100000000000000000000000000000 ENG 01000000000000000000000000000000 Seed 00100000000000011110110110110111 college-bound 00000000000000000000000000000000 Fordham 00100000000000000000000000000000 Throw 00100000000011101110101110110010 crouched 00000000000000000000000000000000 Bertie 00100000000000000000000000000000 tassels 00000000000000000000000000000000 ethanol 00000000000000100111110000100001 Jeffersons 00100000000000000000000000000000 Augustines 00100000000000000000000000000000 Michelangelos 00100000000000000000000000000000 60.36 00000000000000000000000000000000 momentous 00000000000000000000000000000000 tassel 00001111111001110111110100100001 rehashing 00000000000000000000000000000000 diplomatically 00000000000000000000000000000000 old-timers 00000000000000000000000000000000 four-bagger 00000000000000000000000000000000 rendezvous 00000000000000000000000000000000 Jail 00100000000111101011110101010111 Descendants 00100000000111100010111000101111 erasures 00000000000000000000000000000000 395.4 00000000000000000000000000000000 389.6 00000000000000000000000000000000 Macfarlane 00100000000000000000000000000000 BBN 01000000000000000000000000000000 Solution 00100000000111111111111101100111 Pagurian 00100000000000000000000000000000 Mac-Laren 01000000000000000000000000000000 CB 01000000000000000000000000000000 77-year 00000000000000000000000000000000 under-performing 00000000000000000000000000000000 Selkirk 00100000000000000000000000000000 school-research 00000000000000000000000000000000 Root 00100000000100100111001010110111 368.5 00000000000000000000000000000000 340.7 00000000000000000000000000000000 50-state 00000000000000000000000000000000 77.2 00000000000000000000000000000000 Haney 00100000000000000000000000000000 Y.J. 01000000000000000000000000000000 scrimped 00000000000000000000000000000000 student-test 00000000000000000000000000000000 ninefold 00000000000000000000000000000000 Directed 00100000001110000101010000110010 71,895 00000000000000000000000000000000 Rents 00100000010100001111000000010010 Sa-Duk 01000000000000000000000000000000 54.9 00000000000000000000000000000000 IT'S 01000000000000000000000000000000 school-improvement 00000000000000000000000000000000 pollen-producing 00000000000000000000000000000000 rectifying 00000000000000000000000000000000 843 00000000000000000000000000000000 land-ownership 00000000000000000000000000000000 Highlights 00100000100010001111000000010010 penalize 00000000000110111011101110110010 confiscate 00000000000000000000000000000000 governmentset 00000000000000000000000000000000 similar-sized 00000000000000000000000000000000 housing-construction 00000000000000000000000000000000 landholdings 00000000000000000000000000000000 value-assessment 00000000000000000000000000000000 sterilization 00000000000101110001101101001111 Kongsberg 00100000001100001111111100101000 Vappenfabrikk 00100000000000000000000000000000 Southwide 00100000000000000000000000000000 Doubts 00100000000111101110111010101111 martyr 00000000000000000000000000000000 71%-controlled 00000000000000000000000000000000 blemish 00000000000000000000000000000000 BIRDS 01000000001000101111110101100011 reaffirm 00000000000100001100111110110010 showdown 00000000000011101110110000100111 Ilkka 00100000000000000000000000000000 net-profits 00000000000000000000000000000000 5.47 00000000000000000000000000000000 bald-faced 00000000000000000000000000000000 unamortized 00000000000000000000000000000000 just-completed 00000000000000000000000000000000 53-45 00000000000000000000000000000000 DeVille 01000000000000000000000000000000 Caprice 00100000000000000000000000000000 Cutlass 00100000000000100011010101010000 Ciera 00100000000000000000000000000000 Wagon 00100000000000110001111010110000 147,121 00000000000000000000000000000000 162,767 00000000000000000000000000000000 143,534 00000000000000000000000000000000 Wixom 00100000000000000000000000000000 school-district 00000000000000000000000000000000 Acclaim 00100000000000000000000000000000 Shadow 00100000000110111001100101100111 e-Estimated 01000000000000000000000000000000 20.07 00000000000000000000000000000000 17.25 00000000000000000000000000000000 semicircular 00000000000000000000000000000000 buffetting 00000000000000000000000000000000 Chardon 00100000000000000000000000000000 GP 01000000000000000000000000000000 2423.9 00000000000000000000000000000000 U.S.-U.K. 01000000000000000000000000000000 financer 00000000000000000000000000000000 sleight 00000000000000000000000000000000 Castleman 00100000000000000000000000000000 Denizens 00100000000000000000000000000000 mists 00000000000000000000000000000000 martini 00001111111110011111111010101000 non-wealthy 00000000000000000000000000000000 collegial 00000000000000000000000000000000 Waterhouse 00100000000111101110001110000011 head-hunting 00000000000000000000000000000000 Intra-European 01000000000000000000000000000000 colder 00000000000000000000000000000000 Hurter 00100000000000000000000000000000 Continential 00100000000000000000000000000000 chucked 00000000000000000000000000000000 32-year-old 00000000000000000000000000000000 twiddling 00000000000000000000000000000000 SYDNEY-Qintex 01000000000000000000000000000000 Hungerfords 00100000000000000000000000000000 betrayer 00000000000000000000000000000000 home-ownership 00000000000000000000000000000000 laurels 00000000000100000100111101100011 crane-safety 00000000000000000000000000000000 unstinting 00000000000000000000000000000000 fertilizing 00000000000000000000000000000000 projector 00000000000000000000000000000000 ill-gotten 00000000000000000000000000000000 Arseneault 00100000000000000000000000000000 73.8 00000000000000000000000000000000 Saints 00100000000000000000000000000000 fee-forfeiture 00000000000000000000000000000000 -considered 00000000000000000000000000000000 asset-forfeiture 00000000000000000000000000000000 margin-calls 00000000000000000000000000000000 buy-sell 00000000000000000000000000000000 Senate-House 01000000000000000000000000000000 backstop 00000000000000000000000000000000 unchallenged 00000000000000000000000000000000 NASDAQ 01000000000000000000000000100101 normalize 00000000000000000000000000000000 Stabilizing 00100000000001111111010001000000 amble 00000000000000000000000000000000 Disorderly 00100000000000000000000000000000 Guidelines 00100000000000000010111100100011 market-stabilizing 00000000000000000000000000000000 VISA 01000000000001100010000000100001 should... 00000000000000000000000000000000 Treasurers 00100000000000000000000000000000 prudence 00000000000111010011010010100111 394-21 00000000000000000000000000000000 electrical-safety 00000000000000000000000000000000 Ansco 00100000000000000000000000000000 Dycom 00100000000000000000000000000000 3,609,800 00000000000000000000000000000000 heighborhoods 00000000000000000000000000000000 2,633,700 00000000000000000000000000000000 bugless 00000000000000000000000000000000 Rash 00100000000111111111010101111111 errata 00000000000000000000000000000000 Microprocessor 00100000000000000010101000100001 plug-in 00000000000000000000000000000000 70-A21 01000000000000000000000000000000 toted 00000000000000000000000000000000 add-on 00000000000000000000000000000000 ballyhooed 00000000000000000000000000000000 spearhead 00000000000000000000000000000000 Corvette 00100000000000000000000000000000 super-fast 00000000000000000000000000000000 super-expensive 00000000000000000000000000000000 power-hungry 00000000000000000000000000000000 Unveiled 00100000101111111001010000110010 crams 00000000000000000000000000000000 transistors 00000000000010001000111001100011 sliver 00000000000000000000000000000000 Ballwin 00100000000000000000000000000000 servers 00000000000000000000000000000000 corporate-wide 00000000000000000000000000000000 8088 00000000000000000000000000000000 safeguarding 00000000000000000000000000000000 Anku 00100000000000000000000000000000 index-arbitrage-related 00000000000000000000000000000000 Zipser 00100000000000000000000000000000 two-pronged 00000000000000000000000000000000 Chavanne-Ketin 01000000000000000000000000000000 1.1650 00000000000000000000000000000000 heat-treatment 00000000000000000000000000000000 forgings 00000000000000000000000000000000 sensitives 00000000000000000000000000000000 large-diameter 00000000000000000000000000000000 custom-die 00000000000000000000000000000000 realign 00000000000101000100111110110010 226 00000000000000000000000000000000 Morrell 00100000000000000000000000000000 Beltway 00100000000111101001100011010000 soon-to-be-sold 00000000000000000000000000000000 ham-handed 00000000000000000000000000000000 Delbert 00100000000000000000000000000000 interest-rate-sensitive 00000000000000000000000000000000 Healthy 00100000000000010001100000010000 Rawl 00100000000000000000000000000000 53-floor 00000000000000000000000000000000 Grayson 00100000000000000000000000000000 Everglades 00100000000000000000000000000000 132-acre 00000000000000000000000000000000 432.78 00000000000000000000000000000000 532,000 00000000000000000000000000000000 5,377,000 00000000000000000000000000000000 5,441,000 00000000000000000000000000000000 Chong-sik 00100000000000000000000000000000 Parsons 00101111111110001011001000001000 17.97 00000000000000000000000000000000 designees 00000000000000000000000000000000 10-member 00000000000000000000000000000000 subset 00000000000000000000000000000000 24-a-share 00000000000000000000000000000000 Adley 00100000000000000000000000000000 Handelsman 00100000000000000000000000000000 sew 00000000000000000000000000000000 non-member 00000000000000000000000000000000 market-revision 00000000000000000000000000000000 meatpacking 00000000000100100000011010110000 bird's-eye 00000000000000000000000000000000 juggernaut 00000000000110011001101001100111 18.35 00000000000000000000000000000000 elevates 00000000000000000000000000000000 road-building 00000000000000000000000000000000 salutary 00000000000000000000000000000000 6.24 00000000000000000000000000000000 cost-efficiency 00000000000000000000000000000000 gluts 00000000000000000000000000000000 inadvertent 00000000000000000000000000000000 low-profitmargin 00000000000000000000000000000000 untried 00000000000000000000000000000000 unlisted 00000000000000000000000000000000 diminution 00000000000000000000000000000000 inaction 00000000000111111000110001100111 happenstance 00000000000000000000000000000000 deliberative 00000000000000000000000000000000 fiat 00000000000111100111011100101000 Nastro 00100000000000000000000000000000 332,000 00000000000000000000000000000000 1,784,400 00000000000000000000000000000000 1,810,700 00000000000000000000000000000000 Naguib 00100000000000000000000000000000 marbles 00000000000000000000000000000000 brutish 00000000000000000000000000000000 wickedly 00000000000000000000000000000000 Zaita 00100000000000000000000000000000 cripple-maker 00000000000000000000000000000000 rearranges 00000000000000000000000000000000 beggars 00000000000000000000000000000000 cadge 00000000000000000000000000000000 market-weighted 00000000000000000000000000000000 Kamel 00100000000000000000000000000000 Lanyi 00100000000000000000000000000000 shark 00000000000000001101010010110101 dope 00000000000000000000000000000000 creed 00000000000000000000000000000000 stimulant 00000000000000000000000000000000 Sufi 00100000000000000000000000000000 saintly 00000000000000000000000000000000 low-life 00000000000000000000000000000000 charlatans 00000000000000000000000000000000 pilote 00000000000000000000000000000000 dung 00000000000000000000000000000000 substance-abusing 00000000000000000000000000000000 restless 00000000000110110110011010010000 30-odd 00000000000000000000000000000000 apprehensive 00000000000101011111110000110010 fez-wearing 00000000000000000000000000000000 pashas 00000000000000000000000000000000 71.7 00000000000000000000000000000000 saga-like 00000000000000000000000000000000 Galsworthy 00100000000000000000000000000000 Babelists 00100000000000000000000000000000 dooming 00000000000000000000000000000000 disgrace 00000000000000000000000000000000 piasters 00000000000000000000000000000000 Mourning 00100000000000000000000000000000 pauper 00000000000000000000000000000000 muddled 00000000000000000000000000000000 shabby 00000000000000000000000000000000 siblings 00000000000000000000000000000000 94,425,000 00000000000000000000000000000000 mores 00000000000000000000000000000000 unsentimental 00000000000000000000000000000000 echoes 00000000111111100111000000010010 hawkers 00000000000000000000000000000000 coughs 00000000000000000000000000000000 spittle 00000000000000000000000000000000 throats 00000000000000000000000000000000 730.37 00000000000000000000000000000000 head-butting 00000000000000000000000000000000 whoring 00000000000000000000000000000000 hashish 00000000000000000000000000000000 ordained 00000000000000000000000000000000 Pere 00100000000000000000000000000000 Goriot 00100000000000000000000000000000 Nights 00100000000000000000111100011011 Marquez 00100000000000000000000000000000 familiarity 00000000000111010100110000100111 taut 00000000000000000000000000000000 Punishment 00100000000111111110100000111001 antihero 00000000000000000000000000000000 Raskolnikov 00100000000000000000000000000000 robbing 00000000000111100111001101000000 Theft 00100000000110111111100010100111 Nasser 00100000000000000000000000000000 monarchy 00000000000000000000000000000000 overthrown 00000000000000000000000000000000 1952 00000000000000000000000000000000 altruistic 00000000000011011100110100010000 475.35 00000000000000000000000000000000 squalor 00000000000000000000000000000000 hypocrites 00000000000000000000000000000000 hunts 00000000000111101011111110110011 pioneering 00000000000100100001000000010000 stream-of-consciousness 00000000000000000000000000000000 447.76 00000000000000000000000000000000 first-person 00000000000000000000000000000000 Faulkner 00100000000000000000000000000000 Fury 00100000000000000000000000000000 illuminates 00000000000000000000000000000000 elliptical 00000000000000000000000000000000 indirectness 00000000000000000000000000000000 pilloried 00000000000000000000000000000000 Veiling 00100000000000000000000000000000 Farren 00100000000000000000000000000000 445.23 00000000000000000000000000000000 7.08 00000000000000000000000000000000 addict 00000000000000000000000000000000 selfish 00000000000011010011011010010000 Cairenes 00100000000000000000000000000000 Horwitz 00100000000000000000000000000000 806 00000000000000000000000000000000 once-high-flying 00000000000000000000000000000000 1,120 00000000000000000000000000000000 525,546 00000000000000000000000000000000 455.63 00000000000000000000000000000000 48-month 00000000000000000000000000000000 retroactive 00000000000011100000111000110010 outranks 00000000000000000000000000000000 slush 00000000000000000000000000000000 pork-barreling 00000000000000000000000000000000 4.26 00000000000000000000000000000000 outdid 00000000000000000000000000000000 reasserts 00000000000000000000000000000000 performing-arts 00000000000000000000000000000000 revel 00000000000000000000000000000000 landscaping 00000000000000000000000000000000 prevalance 00000000000000000000000000000000 Mackinac 00100000000000000000000000000000 unimproved 00000000000000000000000000000000 intercepted 00000000000000000000000000000000 beret 00000000000000000000000000000000 rehabilitate 00000000000000000000000000000000 criminal-justice 00000000000000000000000000000000 motorcade 00000000000000000000000000000000 puff 00000000000000000000000000000000 approximates 00000000000000000000000000000000 belle 00000000000000000000000000000000 Carltons 00100000000000000000000000000000 Nadelmann 00100000000000000000000000000000 breeze 00000000000111110011011000000001 iteration 00000000000000000000000000000000 crimp 00000000000000000000000000000000 Dyke 00100000000000000000000000000000 pileup 00000000000000000000000000000000 24.6 00000000000000000000000000000000 unsurprising 00000000000000000000000000000000 Boss 00100000000111111110101110000001 Devastation 00100000000110000111111000001111 -Thailand 01000000000000000000000000000000 defense-suppression 00000000000000000000000000000000 full-size 00000000000000000000000000000000 337 00000000000000000000000000000000 27.75 00000000000000000000000000000000 Lukassen 00100000000000000000000000000000 McLean 01000000000111101101001000001000 six-fold 00000000000000000000000000000000 seven-fold 00000000000000000000000000000000 chateau 00000000000000000000000000000000 302,000 00000000000000000000000000000000 once-lucrative 00000000000000000000000000000000 videotapes 00000000000111111110010101100011 budget-cutting 00000000000000000000000000000000 venturesome 00000000000000000000000000000000 Hwang 00100000000000000000000000000000 80-second 00000000000000000000000000000000 Aalseth 00100000000000000000000000000000 Annapolis 00100000000000000000000000000000 400.4 00000000000000000000000000000000 realigning 00000000000000000000000000000000 braving 00000000000000000000000000000000 Visher 00100000000000000000000000000000 automates 00000000000000000000000000000000 farmwives 00000000000000000000000000000000 Williamsburg 00100000000000000000000000000000 Winger 00100000000000000000000000000000 Dynamic 00100000000010010000000010010000 tunnels 00000000000111010110010101100011 hardware-maintenance 00000000000000000000000000000000 stingier 00000000000000000000000000000000 Conger 00100000000000000000000000000000 military-electronics 00000000000000000000000000000000 Arch 00100000000110100001111100001000 Scurlock 00100000000000000000000000000000 pyrotechnic 00000000000000000000000000000000 strait-laced 00000000000000000000000000000000 Yasumichi 00100000000000000000000000000000 Internatonal 00100000000000000000000000000000 stake-holding 00000000000000000000000000000000 racy 00000000000000000000000000000000 Shady 00100000000000000000000000000000 money-lending 00000000000000000000000000000000 Smokers 00100000000000101100111000110011 rejoining 00000000000000000000000000000000 Davidge 00100000000000000000000000000000 subliminal 00000000000000000000000000000000 sarakin 00000000000000000000000000000000 54.75 00000000000000000000000000000000 hyenas 00000000000000000000000000000000 Acquired 00100000000011100100010000110010 Carisbrook 00100000000000000000000000000000 Calder 00100000000000000000000000000000 purple 00000000001010110010001000110000 Renoirs 00100000000000000000000000000000 connoisseur 00000000000000000000000000000000 corporate-owned 00000000000000000000000000000000 Kiyotaka 00100000000000000000000000000000 49.3 00000000000000000000000000000000 copper-rich 00000000000000000000000000000000 Stretching 00100000000101011101100001000000 silky 00000000000000000000000000000000 squeaking 00000000000000000000000000000000 gangsters 00000000000000000000000000000000 Nicklaus 00100000000000000000000000000000 gruff 00000000000000000000000000000000 upper-class 00000000000000000000000000000000 gala 00000000000000000000000000000000 Denenchofu 00100000000000000000000000000000 Drobnick 00100000000000000000000000000000 manor 00000000000101100001100000110000 outshines 00000000000000000000000000000000 portico 00000000000000000000000000000000 stained-glass 00000000000000000000000000000000 protector 00000000000000000000000000000000 Studio-City 01000000000000000000000000000000 behemoth 00000000000000000000000000000000 dovetails 00000000000000000000000000000000 3.0 00000000000000000000000000000000 Fathers 00100000000111100010110001100011 Founding 00100000000000010110010011010000 U.S.-Japanese 01000000000000000000000000000000 impresses 00000000000000000000000000000000 tobacco-industry 00000000000000000000000000000000 Lydia 00100000000000000000000000000000 Pilipino 00100000000000000000000000000000 Tagalog 00100000000000000000000000000000 Malay-based 00100000000000000000000000000000 better-off 00000000000000000000000000000000 declasse 00000000000000000000000000000000 Bien 00100000000000000000000000000000 Lumbera 00100000000000000000000000000000 Philippine-studies 00100000000000000000000000000000 Quezon 00100000000000000000000000000000 non-Tagalog 01000000000000000000000000000000 scriptwriter 00000000000000000000000000000000 Villanueva 00100000000000000000000000000000 lumberyard 00000000000000000000000000000000 free-choice 00000000000000000000000000000000 weekdays 00000000000000000000000000000000 top-four 00000000000000000000000000000000 trumpets 00000000000000000000000000000000 puppets 00000000000000000000000000000000 monkey 00000000000011011110110100000001 Kiko 00100000000000000000000000000000 Matsing 00100000000000000000000000000000 HEALTHDYNE 01000000000000000000000000000000 squinted 00000000000000000000000000000000 Topeka 00100000000011011111111010101000 Midwesco 00100000000000000000000000000000 Dynapert 00100000000000000000000000000000 Mallory 00100000000000000000000000000000 Capacitors 00100000000000000000000000000000 cleanliness 00000000000000000000000000000000 Archibald 00101111111010000100000100001000 19.75 00000000000000000000000000000000 Embedded 00100000001100011110010000110010 waddles 00000000000000000000000000000000 bounty 00000000000000000000000000000000 Rule 00100000000111101110001000110111 Line-item 00100000000000000000000000000000 Whiz 00100000000000111011011110110101 Whinney 00101111111111110111110001001000 formalizes 00000000000000000000000000000000 twice-daily 00000000000000000000000000000000 parent-company 00000000000000000000000000000000 754.4 00000000000000000000000000000000 633.8 00000000000000000000000000000000 warded 00000000000000000000000000000000 theatre 00000000000100000011000100000001 Cheez 00100000000000000000000000000000 denationalized 00000000000000000000000000000000 Jell-O 01000000000000000000000000000000 296.95 00000000000000000000000000000000 BLOCKBUSTER 01000000000001001011100100100001 ENTERTAINMENT 01000000000000100010010010110000 interactions 00000000000000000000000000000000 13.851 00000000000000000000000000000000 labor-funded 00000000000000000000000000000000 tax-revision 00000000000000000000000000000000 generalizations 00000000000000000000000000000000 investment-tax 00000000000000000000000000000000 money-making 00000000000000000000000000000000 shouldering 00000000000000000000000000000000 tax-reform 00000000000000000000000000000000 CSX 01000000000000000000000000000000 Breakey 00100000000000000000000000000000 Gil 00101111111111001011010100001000 Troutman 00100000000000000000000000000000 Painter 00100000000001100111011110110101 DSP 01000000000000000000000000000000 Motoyuki 00100000000000000000000000000000 Homma 00100000000000000000000000000000 inoperative 00000000000000000000000000000000 Hoe 00100000000111100111101010110111 Canadians 00100000000010000110111000110011 2,750 00000000000000000000000000000000 headline-grabbing 00000000000000000000000000000000 Mayumi 00100000000000000000000000000000 Takayama 00100000000000000000000000000000 200th 00000000000000000000000000000000 Breuners 00100000000000000000000000000000 Ivey 00100000000000000000000000000000 5.57 00000000000000000000000000000000 Persuading 00100000000000000100001101000000 tradition-bound 00000000000000000000000000000000 turmoils 00000000000000000000000000000000 up-scale 00000000000000000000000000000000 clothier 00000000000000000000000000000000 arcades 00000000000000000000000000000000 Eiji 00100000000000000000000000000000 Nakazato 00100000000000000000000000000000 Brauchli 00100000000000000000000000000000 Mathewson 00100000000000000000000000000000 commencing 00000000000000000000000000000000 secede 00000000000000000000000000000000 117.9 00000000000000000000000000000000 57.2 00000000000000000000000000000000 cardinals 00000000000000000000000000000000 generously 00000010110000000000010001110010 Pence 00100000000000000001000000001011 pope 00001111111111101010100000001000 're... 00000000000000000000000000000000 sightseeing 00000000000000000000000000000000 one-on-one 00000000000000000000000000000000 knitted 00000000001001110101101001000000 Telegraaf 00100000000000000000000000000000 36-store 00000000000000000000000000000000 pro-NATO 01000000000000000000000000000000 Tulane 00100000000011000111111000101000 6.98 00000000000000000000000000000000 Leish 00100000000000000000000000000000 Ghazel 00100000000000000000000000000000 Macaroni 00100000000000000000000000000000 Examination 00100000000101111000111001100111 regummed 00000000000000000000000000000000 perceptiveness 00000000000000000000000000000000 propelling 00000000000000000000000000000000 92.2 00000000000000000000000000000000 Tanii 00100000000000000000000000000000 consul 00000000000000000000000000000000 Matsushita-made 00100000000000000000000000000000 government... 00000000000000000000000000000000 biannual 00000000000000000000000000000000 cabal 00000000000000000000000000000000 156,000-square-yard 00000000000000000000000000000000 AK-47 01000000000000000000000000000000 Solzhenitsyn 00100000000000000000000000000000 long-banned 00000000000000000000000000000000 Gulag 00100000000000000000000000000000 Archipelago 00100000000000000000000000000000 11th-grade 00000000000000000000000000000000 sneaking 00000000000000000000000000000000 boa 00000000000000000000000000000000 constrictors 00000000000000000000000000000000 armpits 00000000000000000000000000000000 Snake 00100000000111111101111000000001 331,000 00000000000000000000000000000000 rapists 00000000000111001001111000110011 423 00000000000000000000000000000000 disaffiliation 00000000000000000000000000000000 interjects 00000000000000000000000000000000 313 00000000000000000000000000000000 less-than-robust 00000000000000000000000000000000 519 00000000000000000000000000000000 unmoved 00000000000000000000000000000000 hapless 00000000000000000000000000000000 175.2 00000000000000000000000000000000 1,141 00000000000000000000000000000000 249-166 00000000000000000000000000000000 notifications 00000000000000000000000000000000 Japanese-American 01000000000000000000000000000000 taunted 00000000000000000000000000000000 Dixiecrat 00100000000000000000000000000000 boyfriends 00000000000000000000000000000000 C'mon 00100000000000000000000000000000 18.69 00000000000000000000000000000000 back-to-back 00000000000000000000000000000000 206-199 00000000000000000000000000000000 223-178 00000000000000000000000000000000 CAMBREX 01000000000000000000000000000000 287-123 00000000000000000000000000000000 unexpended 00000000000000000000000000000000 Cohens 00100000000000000000000000000000 marine-research 00000000000000000000000000000000 273-121 00000000000000000000000000000000 22.61 00000000000000000000000000000000 Metzenbaums 00100000000000000000000000000000 44.375 00000000000000000000000000000000 47.50 00000000000000000000000000000000 phrasing 00000000000000000000000000000000 477.1 00000000000000000000000000000000 20.24 00000000000000000000000000000000 onus 00000000000000000000000000000000 856.3 00000000000000000000000000000000 20.38 00000000000000000000000000000000 Hubbell 00101111011000010100000010001000 4.14 00000000000000000000000000000000 331 00000000000000000000000000000000 unamended 00000000000000000000000000000000 post-Vietnam 01000000000000000000000000000000 Chicago-area 00100000000000000000000000000000 incentive-reduced 00000000000000000000000000000000 4.38 00000000000000000000000000000000 currents 00000000000000000000000000000000 27.95 00000000000000000000000000000000 25.78 00000000000000000000000000000000 516.9 00000000000000000000000000000000 859.2 00000000000000000000000000000000 95.57 00000000000000000000000000000000 91.21 00000000000000000000000000000000 -changed 00000000000000000000000000000000 overlay 00000000000000000000000000000000 Leighton 00101111111101100111000100001000 Lamos 00100000000000000000000000000000 Cluff 00100000000000000000000000000000 despairs 00000000000000000000000000000000 licentiousness 00000000000000000000000000000000 fiancee 00000000000000000000000000000000 condemns 00000000000000000000000000000000 novitiate 00000000000000000000000000000000 obdurate 00000000000000000000000000000000 ruler 00000000000111001101000110110101 all-cash 00000000000000000000000000000000 friar 00000000000000000000000000000000 intrigues 00000000000000000000000000000000 drop-in 00000000000000000000000000000000 rectangular 00000000000000000000000000000000 white-washed 00000000000000000000000000000000 Shakespearean 00100000000000000000000000000000 deprivation 00000000000000000000000000000000 Loney 00100000000000000000000000000000 Mariana 00100000000000000000000000000000 Annalee 00100000000000000000000000000000 dissolves 00000000000000000000000000000000 wronged 00000000000000000000000000000000 pimps 00000000000000000000000000000000 pre-existing 00000000000000000000000000000000 transvestites 00000000000000000000000000000000 rockers 00000000000000000000000000000000 porno-inspired 00000000000000000000000000000000 Loud 00100000000110110000011010010000 manacles 00000000000000000000000000000000 ankles 00000000000000000000000000000000 opportunist 00000000000000000000000000000000 Stehlin 00100000000000000000000000000000 Plaines 00100000000000000000000000000000 Jill 00100000000000000000000000000000 lasciviously 00000000000000000000000000000000 Pompey 00100000000000000000000000000000 Pruett 00100000000000000000000000000000 codpiece 00000000000000000000000000000000 indulges 00000000000000000000000000000000 thrusts 00000000000000000000000000000000 malefactors 00000000000000000000000000000000 Virginians 00100000000000000000000000000000 Audrey 00100000000000000000000000000000 minuses 00000000000000000000000000000000 demurs 00000000000000000000000000000000 Zeisler 00100000000000000000000000000000 unimaginative 00000000000000000000000000000000 congenial 00000000000000000000000000000000 Magnolias 00100000000000000000000000000000 Nina 00100000000000000000000000000000 Vance 00100000000000000000000000000000 subverted 00000000000000000000000000000000 transnational 00000000000000000000000000000000 capital-gains-cut 00000000000000000000000000000000 curl 00000000000000000000000000000000 Wage 00100000000000000000000101110001 relenting 00000000000000000000000000000000 100-member 00000000000000000000000000000000 unreliable 00000000000000100101001110010000 5-10 00000000000000000000000000000000 Monticello 00100000000000000000000000000000 amounting 00000000000000010001111000110010 94.7 00000000000000000000000000000000 adenocard 00000000000000000000000000000000 Vos 00100000000000000000000000000000 Bayonne 00100000000000000000000000000000 557.7 00000000000000000000000000000000 Million-dollar 00100000000000000000000000000000 dizziness 00000000000000000000000000000000 Nonrecurring 00100000000000101010010000010000 tachycardia 00000000000000000000000000000000 supraventricular 00000000000000000000000000000000 458.15 00000000000000000000000000000000 9.55 00000000000000000000000000000000 734.41 00000000000000000000000000000000 444.19 00000000000000000000000000000000 paroxysmal 00000000000000000000000000000000 478.28 00000000000000000000000000000000 real-estate-investment 00000000000000000000000000000000 Rosemont 00100000000000000000000000000000 536.94 00000000000000000000000000000000 440.99 00000000000000000000000000000000 536.04 00000000000000000000000000000000 452.75 00000000000000000000000000000000 128.7 00000000000000000000000000000000 nails 00000000000111001101111101100011 Buffets 00100000000000000000000000000000 Chartwell 00100000000000000000000000000000 5,350,000 00000000000000000000000000000000 interior-furnishings 00000000000000000000000000000000 Astec 00100000000000000000000000000000 paving-equipment 00000000000000000000000000000000 Barber-Greene 01000000000000000000000000000000 Telsmith 00100000000000000000000000000000 mobile-home 00000000000000000000000000000000 1,063,946 00000000000000000000000000000000 421,000 00000000000000000000000000000000 23.20 00000000000000000000000000000000 Youngstown 00100000000111111000101001101000 Portsmouth 00100000000110101100101001101000 155.6 00000000000000000000000000000000 Badly 00100000000100100000010001110010 cloudy 00000000000000000000000000000000 95,142 00000000000000000000000000000000 numbing 00000000000001100101110110010000 housing-assistance 00000000000000000000000000000000 Futures-related 00100000000000000000000000000000 kowtow 00000000000000000000000000000000 786 00000000000000000000000000000000 droped 00000000000000000000000000000000 Cambrex 00100000000000000000000000000000 trop 00000000000000000000000000000000 field-services 00000000000000000000000000000000 Precious-metals 00100000000000000000000000000000 373.48 00000000000000000000000000000000 wherein 00000000000000000000000000000000 Perito 00100000000000000000000000000000 Plotkin 00100000000000000000000000000000 Inez 00100000000000000000000000000000 637.7 00000000000000000000000000000000 Gutermann 00100000000000000000000000000000 138.4 00000000000000000000000000000000 food-safety 00000000000000000000000000000000 U.S.concerns 01000000000000000000000000000000 Doak 00100000000000000000000000000000 Shrum 00100000000000000000000000000000 more-stringent 00000000000000000000000000000000 Comission 00100000000000000000000000000000 KLUC-FM 01000000000000000000000000000000 7:53 00000000000000000000000000000000 patently 00000000000000000000000000000000 excretory 00000000000000000000000000000000 27.50 00000000000000000000000000000000 Concert 00100000000111101011111100100001 Earlier*/S 01000000000000000000000000000000 WXRK-FM 01000000000000000000000000000000 38.75 00000000000000000000000000000000 contemporaneous 00000000000000000000000000000000 So*/S 01000000000000000000000000000000 27.875 00000000000000000000000000000000 fining 00000000000000100111001101000000 RENAISSANCE 01000000000110010001100100100001 counterbidders 00000000000000000000000000000000 MANAGEMENT 01000000000000000000000111100001 designates 00000000000000000000000000000000 Bricklayers 00100000000000110001111000110011 67.125 00000000000000000000000000000000 2.18 00000000000000000000000000000000 sustainability 00000000000000000000000000000000 tri-jet 00000000000000000000000000000000 electronic-systems 00000000000000000000000000000000 Pentagon-related 00100000000000000000000000000000 Deliveries 00100000000111100010000100000111 Comeau 00100000000000000000000000000000 66.375 00000000000000000000000000000000 cross-purchase 00000000000000000000000000000000 innuendoes 00000000000000000000000000000000 Craftsmen 00100000000000000000000000000000 Orwellian 00100000000000000000000000000000 Nasty 00100000000010010000011010010000 statism 00000000000000000000000000000000 Shearman 00100000000000000000000000000000 709 00000000000000000000000000000000 2,022 00000000000000000000000000000000 aviators 00000000000000000000000000000000 insinuating 00000000000000000000000000000000 redistributionism 00000000000000000000000000000000 pro-ALPA 01000000000000000000000000000000 confict 00000000000000000000000000000000 rapidement 00000000000000000000000000000000 customer-driven 00000000000000000000000000000000 gratified 00000000000100101101110000110010 McArtor 01001111111100011010110010001000 349,900 00000000000000000000000000000000 Crewmembers 00100000000000000000000000000000 Handbook 00100000000000000000000000000000 let's-give-it-a-year 00000000000000000000000000000000 reconciles 00000000000000000000000000000000 Metzenbaum 00101111111111110100111010001000 9.77 00000000000000000000000000000000 9.70 00000000000000000000000000000000 402.4 00000000000000000000000000000000 18.68 00000000000000000000000000000000 223.4 00000000000000000000000000000000 170.75 00000000000000000000000000000000 6.74 00000000000000000000000000000000 YMCA 01000000000000000000000000000000 YWCA 01000000000000000000000000000000 317.3 00000000000000000000000000000000 14.66 00000000000000000000000000000000 34.35 00000000000000000000000000000000 Eisenhower 00101111110000100010100000001000 52.6 00000000000000000000000000000000 Coor 00100000000000000000000000000000 3.59 00000000000000000000000000000000 Choose 00100000000110110011001110110010 hissed 00000000000111000100110111000010 gray-beard 00000000000000000000000000000000 Consolidation 00100000000111001011101010100111 Bevmark 00100000000000000000000000000000 imput 00000000000000000000000000000000 statesman 00000000000011000111100100100001 hid 00000000000000000000000000000000 knuckles 00000000000000000000000000000000 several-year 00000000000000000000000000000000 frustratingly 00000000000000000000000000000000 grinning 00000000000000000000000000000000 rival-bashing 00000000000000000000000000000000 anti-Sony 01000000000000000000000000000000 back... 00000000000000000000000000000000 mire 00000000000000000000000000000000 back-dating 00000000000000000000000000000000 disembodied 00000000000011110000010000010000 Federico 00100000000000001111101001101000 bugging 00000000000010001010110001000000 phobias 00000000000000000000000000000000 willingly 00000011110101000000010001110010 backdated 00000000000000000000000000000000 depressions 00000000000000000000000000000000 Fifty-two 00100000000000000000000000000000 memorialization 00000000000000000000000000000000 adhered 00000000000000000000000000000000 then-client 00000000000000000000000000000000 Giving 00100000000111111010101101000000 telephone-company 00000000000000000000000000000000 biochemist 00000000000000000000000000000000 58-a-share 00000000000000000000000000000000 Cullowhee 00100000000000000000000000000000 warn-your-enemy 00000000000000000000000000000000 48-hour 00000000000000000000000000000000 genial 00000000000000000000000000000000 unopened 00000000000000000000000000000000 sometimes-tawdry 00000000000000000000000000000000 eight-acre 00000000000000000000000000000000 directorship 00000000000000000000000000000000 trace 00000001000100111111110110110010 Goodwills 00100000000000000000000000000000 Cleaning 00100000000011001110010110110111 Selman 00100000000000000000000000000000 eight-person 00000000000000000000000000000000 Donating 00100000000000000000000000000000 Nonprofit 00100000000000101100010000110000 City-based 00100000000000000000000000000000 Schoch 00100000000000000000000000000000 Conservancy 00100000000000000000000000000000 Rosalind 00100000000000000000000000000000 conservancy 00000000000000000000000000000000 properties.`` 00000000000000000000000000000000 Lys 00100000000000000000000000000000 varnish 00000000000000000000000000000000 vandalism 00000000000000000000000000000000 empathy 00000000000000000000000000000000 Artra 00100000000000000000000000000000 Northbrook 00100000000000000000000000000000 Slyke 00100000000000000000000000000000 ROGERS 01001111111101111010001000001000 Shepperd 00100000000000000000000000000000 Napolitan 00100000000000000000000000000000 bamboozled 00000000000000000000000000000000 ruse 00000000000000000000000000000000 Tigershark 00100000000000000000000000000000 hush 00000000000110011000010000110000 arbitrating 00000000000000000000000000000000 illegalities 00000000000000000000000000000000 rebuts 00000000000000000000000000000000 case... 00000000000000000000000000000000 0.55 00000000000000000000000000000000 52-page 00000000000000000000000000000000 hostility 00000000000101000111111010100111 MinHa 01000000000000000000000000000000 brother-in-law 00000000000000000000000000000000 pistol-packing 00000000000000000000000000000000 Safari 00100000000000000000000000000000 F-20s 00100000000000000000000000000000 Middlesex 00100000000000000000000000000000 high-class 00000000000000000000000000000000 1,050,000 00000000000000000000000000000000 up-to-date 00000000000000000000000000000000 C.K. 01000000000000000000000000000000 procure 00000000000000000000000000000000 Park-affiliated 00100000000000000000000000000000 Promotional 00100000000110100000000000110000 Kang 00100000000000000000000000000000 Oh-Hyun 01000000000000000000000000000000 off-off 00000000000000000000000000000000 out-of-pocket 00000000000000000000000000000000 dismaying 00000000000011110100011000010000 Handzlik 00100000000000000000000000000000 1,750,000 00000000000000000000000000000000 blackmailers 00000000000000000000000000000000 Bookin 00100000000000000000000000000000 Welko 00100000000000000000000000000000 350,000-square-foot 00000000000000000000000000000000 Amadou-Mahtar 01000000000000000000000000000000 WFAA-TV 01000000000000000000000000000000 Belo-Universal 01000000000000000000000000000000 Harrold 00100000000000000000000000000000 Lunday 00100000000000000000000000000000 probaby 00000000000000000000000000000000 913 00000000000000000000000000000000 Faber 00100000000000000000000000000000 6.62 00000000000000000000000000000000 462 00000000000000000000000000000000 Antoine 00100000000000000000000000000000 closures 00000000000010100110000010100111 housing-discrimination 00000000000000000000000000000000 counterbidder 00000000000000000000000000000000 Romain 00100000000000000000000000000000 antics 00000000000101101100111101100011 Fuentes 00100000000000000000000000000000 debt-coverage 00000000000000000000000000000000 payment-in-kind 00000000000000000000000000000000 148.9 00000000000000000000000000000000 'til 00000000000000000000000000000000 paced 00000000000110101111010000110010 anti-Western 01000000000000000000000000000000 high-paid 00000000000000000000000000000000 race-car 00000000000000000000000000000000 plant-modernization 00000000000000000000000000000000 496,116 00000000000000000000000000000000 third-selling 00000000000000000000000000000000 Toronto-area 00100000000000000000000000000000 Oreos 00100000000000000000000000000000 Ahoy 00100000000000000000000000000000 hot-cereals 00000000000000000000000000000000 Planter 00100000000000000000000000000000 pay-down 00000000000000000000000000000000 time-table 00000000000000000000000000000000 renege 00000000000000000000000000000000 Conceptually 00100000000000000000000000000000 cataclysmic 00000000000000000000000000000000 Gringo 00100000000000111001110000000001 50.161 00000000000000000000000000000000 354.4 00000000000000000000000000000000 47.013 00000000000000000000000000000000 28.461 00000000000000000000000000000000 15.87 00000000000000000000000000000000 24.213 00000000000000000000000000000000 161.080 00000000000000000000000000000000 966.471 00000000000000000000000000000000 147.874 00000000000000000000000000000000 657.517 00000000000000000000000000000000 health-expenditure 00000000000000000000000000000000 6.09 00000000000000000000000000000000 Cagliari 00100000000000000000000000000000 chopped 00000000000010101001001000110010 conceptions 00000000000000000000000000000000 744 00000000000000000000000000000000 Huppert 00100000000000000000000000000000 Nachman 00100000000000000000000000000000 Limiting 00100000000000001001011101000000 supplements 00000000000111110000110100100011 109.4 00000000000000000000000000000000 PolyGram 01000000000100100110110000100001 BV 01000000000000000000000000000000 Isabelle 00100000000000000000000000000000 Disappointments 00100000000111111100010000000011 13.57 00000000000000000000000000000000 thin-lipped 00000000000000000000000000000000 1,003,884 00000000000000000000000000000000 pre-market 00000000000000000000000000000000 PharmaKinetics 01000000000000000000000000000000 Sattig 00100000000000000000000000000000 urinary-tract 00000000000000000000000000000000 medical-practice 00000000000000000000000000000000 14.375 00000000000000000000000000000000 Whelan 00100000000000000000000000000000 Amalgamated 00100000000110111110100100110000 alligator 00000000000111101111101100100001 counter-demand 00000000000000000000000000000000 war-damaged 00000000000000000000000000000000 meandered 00000000000000000000000000000000 playful 00000000000000000000000000000000 shallow 00000000000101110110011010010000 repackage 00000000000000000000000000000000 high-coupon 00000000000000000000000000000000 9.95 00000000000000000000000000000000 99.58 00000000000000000000000000000000 95.33 00000000000000000000000000000000 retractable 00000000000000000000000000000000 Canner 00100000000000000000000000000000 300-113 00000000000000000000000000000000 Judah 00100000000000000000000000000000 Mannix 00100000000000000000000000000000 New-issue 00100000000000000000000000000000 war-rationed 00000000000000000000000000000000 empowering 00000000000000000000000000000000 Butowsky 00100000000000000000000000000000 Weitzen 00100000000000000000000000000000 Shalov 00100000000000000000000000000000 Wein 00100000000000000000000000000000 Passed 00100000100111111001010000110010 Established 00100000001111101100010000110010 95.6 00000000000000000000000000000000 Roselle 00100000000000000000000000000000 Kowalski 00100000000000000000000000000000 Chapin 00100000000000000000000000000000 Flattau 00100000000000000000000000000000 Klimpl 00100000000000000000000000000000 traduce 00000000000000000000000000000000 TOOK 01000000000000001011000000010010 SynOptics 01000000000000000000000000000000 inordinate 00000000000000000000000000000000 quadrennial 00000000000000000000000000000000 long-standing 00000000000000000000000000000000 Forty-five 00100000000000000000000000000000 DISTRICT 01000000000111101010110111100101 upholds 00000000000000000000000000000000 lawbreakers 00000000000000000000000000000000 profitting 00000000000000000000000000000000 Wiseguy 00100000000000000000000000000000 Pileggi 00100000000000000000000000000000 proscribed 00000000000000000000000000000000 McKENZIE 01000000000000000000000000000000 Soviet-accredited 00100000000000000000000000000000 Burchette 00100000000000000000000000000000 Ruckert 00100000000000000000000000000000 Rothwell 00100000000000000000000000000000 1,400-lawyer 00000000000000000000000000000000 McKenzie 01000000000000000000000000000000 Melling 00100000000000000000000000000000 ILLINOIS 01000000000000000111110001101000 75-lawyer 00000000000000000000000000000000 spiralled 00000000000000000000000000000000 DISNEY 01001111111000001100000001001000 SUES 01000000000000000000000000000000 claptrap 00000000000000000000000000000000 Bambi 00100000000000000000000000000000 Fantasia 00100000000000000000000000000000 CONFRONTATIONS 01000000000110011010110000100111 LOOM 01000000000001101101001010110111 bipartisanship 00000000000000000000000000000000 dissipates 00000000000000000000000000000000 golfs 00000000000000000000000000000000 MUST-SIGN 01000000000000000000000000000000 BILL 01000000000111101110110011100111 brinksmanship 00000000000000000000000000000000 budget-reconciliation 00000000000000000000000000000000 TURNS 01000000000111110001001000110010 small-time 00000000000000000000000000000000 unseating 00000000000000000000000000000000 socialize 00000000000000000000000000000000 PATIENCE 01000000000111110110110100100111 Incredulous 00100000000000000000000000000000 grill 00000000000000000000000000000000 PENTAGON 01000000000111101001110000100101 BALKS 01000000000000000000000000000000 traitor 00000000000000000000000000000000 ALLY 01000000000110000110111001100111 ORGAN-TRANSPLANT 01000000000000000000000000000000 DOCTORS 01000000000110000010111000110011 10-step 00000000000000000000000000000000 POLITICS 01000000000111101110010010100111 Hartigan 00100000000000000000000000000000 diversionary 00000000000000000000000000000000 airline-related 00000000000000000000000000000000 Waleson 00100000000000000000000000000000 Bentley 00100000000000000000000000000000 1,475,000 00000000000000000000000000000000 metal-processing 00000000000000000000000000000000 Traficant 00100000000000000000000000000000 copper-based 00000000000000000000000000000000 Brahms 00100000000000000000000000000000 10th-biggest 00000000000000000000000000000000 Purcell 00101111111011001110000010001000 271-147 00000000000000000000000000000000 Elfner 00100000000000000000000000000000 peppering 00000000000000000000000000000000 blacklist 00000000000000000000000000000000 anti-program-trading 00000000000000000000000000000000 non-arbitrage 00000000000000000000000000000000 Mnuchin 00100000000000000000000000000000 sincerity 00000000000000000000000000000000 index-trading 00000000000000000000000000000000 Wiess 00100000000000000000000000000000 Audubon 00100000000000000000000000000000 3rd-biggest 00000000000000000000000000000000 Keyes 00100000000000000000000000000000 Chipello 00100000000000000000000000000000 relicensing 00000000000000000000000000000000 Hillhaven 00100000000000000000000000000000 co-payments 00000000000000000000000000000000 10%-owned 00000000000000000000000000000000 NME 01000000000000000000000000000000 1720.5 00000000000000000000000000000000 10.97 00000000000000000000000000000000 17.70 00000000000000000000000000000000 fortified 00000000000000000000000000000000 35.25 00000000000000000000000000000000 2618.03 00000000000000000000000000000000 236.09 00000000000000000000000000000000 35678.49 00000000000000000000000000000000 25.01 00000000000000000000000000000000 2697.58 00000000000000000000000000000000 36.36 00000000000000000000000000000000 35714.85 00000000000000000000000000000000 refrained 00000000000000000000000000000000 145-150 00000000000000000000000000000000 Tokoi 00100000000000000000000000000000 11.90 00000000000000000000000000000000 2,230 00000000000000000000000000000000 3,450 00000000000000000000000000000000 703 00000000000000000000000000000000 1500 00000000000000000000000000000000 1482.62 00000000000000000000000000000000 reinsurer 00000000000000000000000000000000 6,475,000 00000000000000000000000000000000 358 00000000000000000000000000000000 321.5 00000000000000000000000000000000 health-and-benefits 00000000000000000000000000000000 compositional 00000000001011010000000000110000 co-presidents 00000000000000000000000000000000 Giraud 00100000000000000000000000000000 Maher 00100000000000000000000000000000 quartets 00000000000000000000000000000000 sapping 00000000000000000000000000000000 control-room 00000000000000000000000000000000 two-time-losers 00000000000000000000000000000000 35.6%-owned 00000000000000000000000000000000 disagreeable 00000000000110100101110110010000 Shostakovich 00100000000000000000000000000000 BIA-COR 01000000000000000000000000000000 Jager 00100000000000000000000000000000 Berol 00100000000000000000000000000000 Follow-up 00100000000000000000000000000000 geographical 00000000000000011010000000110000 43.2 00000000000000000000000000000000 627.7 00000000000000000000000000000000 767.9 00000000000000000000000000000000 79.2 00000000000000000000000000000000 funky 00000000000000000000000000000000 -about 00000000000000000000000000000000 Clow 00100000000000000000000000000000 snowdrift 00000000000000000000000000000000 cost-containment 00000000000000000000000000000000 freewheeling 00000000000000000000000000000000 no-walls-no-doors 00000000000000000000000000000000 Slides 00100000000001100010001000100011 U.B.U. 01000000000000000000000000000000 more-mainstream 00000000000000000000000000000000 communicating 00000000011001101110100001000000 non-New 01000000000000000000000000000000 intrigued 00000000001010101101110000110010 brilliance 00000000000000000000000000000000 Fertitta 00100000000000000000000000000000 Glenview 00100000000000000000000000000000 Godiva 00100000000000000000000000000000 Haagen-Dazs 01000000000000000000000000000000 visuals 00000000000000000000000000000000 Sealtest 00100000000000000000000000000000 non-fat 00000000000000000000000000000000 LINTAS 01000000000111000111101110110000 LAYOFFS 01000000000111001110000010100111 hither 00000000000000000000000000000000 Ceco 00100000000000000000000000000000 Lintas:Campbell-Ewald 01000000000000000000000000000000 yon 00000000000000000000000000000000 blissful 00000000000000000000000000000000 57.24 00000000000000000000000000000000 19.38 00000000000000000000000000000000 morsels 00000000000000000000000000000000 gunboats 00000000000000000000000000000000 tugboat 00000000000000000000000000000000 propagandize 00000000000000000000000000000000 oil-spill 00000000000000000000000000000000 Unleaded 00100000000111110011101110000111 .23 00000000000000000000000000000000 53.63 00000000000000000000000000000000 Lespinasse 00100000000000000000000000000000 bestirred 00000000000000000000000000000000 375-an-ounce 00000000000000000000000000000000 375.40 00000000000000000000000000000000 5.237 00000000000000000000000000000000 pocketbook 00000000000000000000000000000000 vagabond 00000000000000000000000000000000 1.142 00000000000000000000000000000000 Puccini 00100000000000000000000000000000 956 00000000000000000000000000000000 propagandizes 00000000000000000000000000000000 8,839 00000000000000000000000000000000 scale-down 00000000000000000000000000000000 Printing 00100000000011011011011010110000 A.S. 01000000000000000000000000000000 resonate 00000000000000000000000000000000 599.1 00000000000000000000000000000000 10.30 00000000000000000000000000000000 Propaganda 00100000000000110000001100100001 4.63 00000000000000000000000000000000 2.00 00000000000000000000000000000000 bite-sized 00000000000000000000000000000000 3.00 00000000000000000000000000000000 garbage-disposal 00000000000000000000000000000000 badge 00000000000000000000000000000000 be... 00000000000000000000000000000000 927,000 00000000000000000000000000000000 Hackel 00100000000000000000000000000000 Flow 00100000000100010000001010001111 Pricey 00100000000000111111000010010000 short-sale 00000000000000000000000000000000 61%-owned 00000000000000000000000000000000 Shorting 00100000000000000000000000000000 370.85 00000000000000000000000000000000 well-capitalized 00000000000000000000000000000000 shorted 00000000000000000000000000000000 Gundle 00100000000000000000000000000000 372.50 00000000000000000000000000000000 Remy 00100000000000000000000000000000 J.W. 01000000000000000000000000000000 Seligman 00100000000000000000000000000000 12-inches 00000000000000000000000000000000 CHW 01000000000000000000000000000000 Hazardous 00100000000000011000101010110000 700.2 00000000000000000000000000000000 287,209 00000000000000000000000000000000 200.6 00000000000000000000000000000000 Alisky 00100000000000000000000000000000 Brady-type 00100000000000000000000000000000 McPherson 01001111111011110001000010001000 still-outstanding 00000000000000000000000000000000 476 00000000000000000000000000000000 357.49 00000000000000000000000000000000 236 00000000000000000000000000000000 300.1 00000000000000000000000000000000 116.91 00000000000000000000000000000000 155.76 00000000000000000000000000000000 751.4 00000000000000000000000000000000 84.82 00000000000000000000000000000000 broncs 00000000000000000000000000000000 cancer-related 00000000000000000000000000000000 exquisite 00000000000000000000000000000000 retardants 00000000000000000000000000000000 Jaques 00100000000000000000000000000000 admiralty 00000000000000000000000000000000 Respiratory 00100000000001100101000000110000 eleven 00000000000000001111000011000000 Kelman 00100000000000000000000000000000 ANNOUNCED 01000000000000000001000111000010 nonevent 00000000000000000000000000000000 nuclear-armed 00000000000000000000000000000000 progressives 00000000000000000000000000000000 LAWSON 01001111111100010100010010001000 RESIGNED 01000000000101111110001000110010 cons 00000000000000000000000000000000 test-fired 00000000000000000000000000000000 intermediate-range 00000000000000000000000000000000 warheads 00000000000111110011100110001001 most-favored-nation 00000000000000000000000000000000 presenters 00000000000000000000000000000000 unrefrigerated 00000000000000000000000000000000 Tolls 00100000000000000000000000000000 Hocke 00100000000000000000000000000000 impropriety 00000000000111000111100010100111 mountainside 00000000000000000000000000000000 tuck 00000000000000000000000000000000 Hualien 00100000000000000000000000000000 enroute 00000000000000000000000000000000 sectarian 00000000000000000000000000000000 drearier 00000000000000000000000000000000 noconfidence 00000000000000000000000000000000 Detached 00100000000110101101101001000000 Terror 00100000000011101001110010100111 studentled 00000000000000000000000000000000 TRUSTS 01000000000010110111000100100011 darlings 00000000000000000000000000000000 Overbuilding 00100000000101011011111010100111 Cash-pressed 00100000000000000000000000000000 790.2 00000000000000000000000000000000 forgettable 00000000000000000000000000000000 489.9 00000000000000000000000000000000 405.9 00000000000000000000000000000000 785.1 00000000000000000000000000000000 725.6 00000000000000000000000000000000 direct-selling 00000000000000000000000000000000 693.4 00000000000000000000000000000000 429.9 00000000000000000000000000000000 461.1 00000000000000000000000000000000 338-44 00000000000000000000000000000000 ECONOMY 01000000000111111111111001000101 GREW 01000000000000001000001000110010 Expectations 00100000000111101111010000100011 dimming 00000000000000000000000000000000 AT* 01000000000000000000000000000000 big-business 00000000000000000000000000000000 costliest 00000000000000000000000000000000 1205.19 00000000000000000000000000000000 5.87 00000000000000000000000000000000 215.67 00000000000000000000000000000000 3425.60 00000000000000000000000000000000 129.22 00000000000000000000000000000000 131.04 00000000000000000000000000000000 luxuries 00000000000000000000000000000000 0.58 00000000000000000000000000000000 0.0047 00000000000000000000000000000000 smoke-filled 00000000000000000000000000000000 reclassification 00000000000000000000000000000000 downsized 00000000000001001010111001000000 photocopying 00000000000000000000000000000000 Conn.based 00100000000000000000000000000000 336.5 00000000000000000000000000000000 315.2 00000000000000000000000000000000 enlarging 00000000000000000000000000000000 797 00000000000000000000000000000000 short-wave 00000000000000000000000000000000 1.5930 00000000000000000000000000000000 indoors 00000000000000000000000000000000 4,350 00000000000000000000000000000000 Gwyn 00100000000000000000000000000000 Hacche 00100000000000000000000000000000 asset-valuation 00000000000000000000000000000000 cat-and-mouse 00000000000000000000000000000000 undergirded 00000000000000000000000000000000 boiled 00000000000000000000000000000000 he-goes-or-I-go 01000000000000000000000000000000 less-influential 00000000000000000000000000000000 innate 00000000000000000000000000000000 adamantly 00000000000000010001001001110010 conflicted 00000000000000000000000000000000 Worn 00100000000001110010110000110010 disparaged 00000000000000000000000000000000 1.6143 00000000000000000000000000000000 blow-up 00000000000000000000000000000000 rivalries 00000000000111010011111010100111 animosities 00000000000000000000000000000000 cacophony 00000000000000000000000000000000 free-floater 00000000000000000000000000000000 skirmishing 00000000000000000000000000000000 antipathies 00000000000000000000000000000000 cemented 00000000000000000000000000000000 straight-talking 00000000000000000000000000000000 bilking 00000000000000011001001101000000 sausage-grinder 00000000000000000000000000000000 self-described 00000000000000000000000000000000 nerd 00000000000000000000000000000000 failure-to-supervise 00000000000000000000000000000000 fallacy 00000000000000000000000000000000 cherishes 00000000000000000000000000000000 tinged 00000000000000000000000000000000 just-departed 00000000000000000000000000000000 recused 00000000000000000000000000000000 vagrant 00000000000000000000000000000000 divulge 00000000000111001110011110110010 mannerisms 00000000000000000000000000000000 Nieman 00100000000000000000000000000000 transcribe 00000000000000000000000000000000 princes 00000000000000000000000000000000 ponies 00000000000000000000000000000000 Indecon 00100000000000000000000000000000 Programming 00100000000111101010000100001001 self-reform 00000000000000000000000000000000 reformed 00000000000010111110101001000000 fascination 00000000000111110110110000100111 likening 00000000000000000000000000000000 Ornette 00100000000000000000000000000000 reprint 00000000111100111111110110110010 disseminate 00000000000000000000000000000000 competitively 00000001110000000000010001110010 62,372.95 00000000000000000000000000000000 20.988.12 00000000000000000000000000000000 Sutermeister 00100000000000000000000000000000 curse 00000000000000000000000000000000 Exhibit 00100000000111101001101000110111 Margler 00100000000000000000000000000000 McKinleyville 01000000000000000000000000000000 Ca. 00100000000000000000000000000000 48.5 00000000000000000000000000000000 523,000 00000000000000000000000000000000 Holyoke 00100000000000000000000000000000 Alysia 00100000000000000000000000000000 discrediting 00000000000000000000000000000000 cynically 00000000000000000000000000000000 15.27 00000000000000000000000000000000 74.5 00000000000000000000000000000000 9.12 00000000000000000000000000000000 empower 00000000000000000000000000000000 Covell 00100000000000000000000000000000 93.3 00000000000000000000000000000000 bins 00000000000000000000000000000000 waif 00000000000000000000000000000000 pots 00000000000000000000000000000000 Yastrow 00100000000000000000000000000000 Recycling 00100000010100000010110001000000 plastics-industry 00000000000000000000000000000000 Keough 00100000000000000000000000000000 142.02 00000000000000000000000000000000 reused 00000000000000000000000000000000 McToxics 01000000000000000000000000000000 Harman 00100000000000000000000000000000 startled 00000000000010101101110000110010 blurting 00000000000000000000000000000000 plates 00000000000000011111110101100011 reinvigorating 00000000000000000000000000000000 boils 00000000000011010100001000110010 appetizer 00000000000000000000000000000000 sock 00000000000000000000000000000000 infatuation 00000000000000000000000000000000 Gravelle 00100000000000000000000000000000 substracting 00000000000000000000000000000000 shortcoming 00000000000000000000000000000000 cheerleader 00000000000000000000000000000000 bomblets 00000000000000000000000000000000 Balances 00100000000100001010001100000011 disseminating 00000000000000000000000000000000 Comparing 00100000000110001111111101000000 6,773 00000000000000000000000000000000 5,773 00000000000000000000000000000000 4,773 00000000000000000000000000000000 taxfree 00000000000000000000000000000000 clincher 00000000000000000000000000000000 deducted 00000111100111010100010000110010 congressonal 00000000000000000000000000000000 home. 00000000000000000000000000000000 housing-loan 00000000000000000000000000000000 20.50 00000000000000000000000000000000 financial-market 00000000000000000000000000000000 Experience 00100000000111101011001110100111 coercive 00000000000001010100000110010000 then-market 00000000000000000000000000000000 databases 00000000000000000000000000000000 skirmishes 00000000000000000000000000000000 2.853 00000000000000000000000000000000 designations 00000000000000000000000000000000 kitschy 00000000000000000000000000000000 Roxani 00100000000000000000000000000000 financial-industrial 00000000000000000000000000000000 secondbiggest 00000000000000000000000000000000 treasury-management 00000000000000000000000000000000 288.9 00000000000000000000000000000000 194.50 00000000000000000000000000000000 31.22 00000000000000000000000000000000 103.05 00000000000000000000000000000000 6.22 00000000000000000000000000000000 946 00000000000000000000000000000000 17.64 00000000000000000000000000000000 13.67 00000000000000000000000000000000 Barberton 00100000000000000000000000000000 803.7 00000000000000000000000000000000 vaccine-related 00000000000000000000000000000000 FHA-insured 01000000000000000000000000000000 Stoeckel 00100000000000000000000000000000 HIGH-SCHOOL 01000000000000000000000000000000 geometric 00000000000000000000000000000000 Eishi 00100000000000000000000000000000 Wakabayashi 00100000000000000000000000000000 Strips 00100000000111101000010101100011 endorses 00000001100011100011000000010010 sketching 00000000000000000000000000000000 proscribes 00000000000000000000000000000000 Bidding 00100000000110101000110001000000 176-item 00000000000000000000000000000000 fearlast 00000000000000000000000000000000 Cosmopolitan 00100000001100001000101000110000 abridging 00000000000000000000000000000000 100.05 00000000000000000000000000000000 jazzy 00000000000000000000000000000000 9.94 00000000000000000000000000000000 12.78 00000000000000000000000000000000 95.53 00000000000000000000000000000000 5.355 00000000000000000000000000000000 dead-eyed 00000000000000000000000000000000 hustlers 00000000000000000000000000000000 14.13 00000000000000000000000000000000 laboriously 00000000000000000000000000000000 Protective 00100000000000100100101010110000 A.J.C. 01000000000000000000000000000000 Kitcat 00100000000000000000000000000000 Aitken 00100000000000000000000000000000 Walther 00100000000000000000000000000000 UH-60A 01000000000000000000000000000000 Blackhawk 00100000000000000000000000000000 MH-60K 01000000000000000000000000000000 KSI 01000000000000000000000000000000 Disc 00100000000010010100001000100001 PRIMERICA 01000000000110001101111100101000 98.8 00000000000000000000000000000000 169.9 00000000000000000000000000000000 683 00000000000000000000000000000000 502 00000000000000000000000000000000 deficit-ridden 00000000000000000000000000000000 4.06 00000000000000000000000000000000 photocopy 00000000000000000000000000000000 magicians 00000000000000000000000000000000 Erskine 00100000000000000000000000000000 108.625 00000000000000000000000000000000 magisterially 00000000000000000000000000000000 have... 00000000000000000000000000000000 588,300 00000000000000000000000000000000 1,774,326 00000000000000000000000000000000 Del.-based 00100000000000000000000000000000 earnings-per-share 00000000000000000000000000000000 longhaul 00000000000000000000000000000000 Calgon 00100000000000000000000000000000 Carbon 00100000000101100100101010110000 granular 00000000000000000000000000000000 ensconced 00000000000000000000000000000000 jugglers 00000000000000000000000000000000 boot 00000000000111111100110101010111 quartet 00000000000000000010110100000001 million-dollar 00000000000000000000000000000000 Surviving 00100000000000010101100011010000 rite 00000000000000011111110100100001 Trains 00100000000111001011101001100011 rendezvoused 00000000000000000000000000000000 humorist 00000000000000000000000000000000 scandal-tripped 00000000000000000000000000000000 resiliently 00000000000000000000000000000000 Garment 00100000000001011011111010110000 Pretend 00100000000111011100100110110010 67,000 00000000000000000000000000000000 franking 00000000000000000000000000000000 engagements 00000000000000000000000000000000 juxtapose 00000000000000000000000000000000 Atone 00100000000000000000000000000000 frequents 00000000000000000000000000000000 cabs 00000000000000000000000000000000 jostle 00000000000000000000000000000000 garden-shrub 00000000000000000000000000000000 Wick 00100000000000000000000000000000 R.L. 01000000000000000000000000000000 Host 00100000000111111111011100111111 'I've 01000000000000000000000000000000 Colson 00100000000000000000000000000000 Magruder 00100000000000000000000000000000 pulpit 00000000000111100000100011100111 Carstens 00100000000000000000000000000000 Trappist 00100000000000000000000000000000 tell-all 00000000000000000000000000000000 noticing 00000000000111010101110101000000 travails 00000000000111110011101000100011 Stena-Tiphook 01000000000000000000000000000000 psychoanalytic 00000000000000000000000000000000 mega-lawyer 00000000000000000000000000000000 masterfully 00000000000000000000000000000000 Declaring 00100000000110101001111010000010 glitterati 00000000000000000000000000000000 black-tie 00000000000000000000000000000000 Kirchberger 00100000000000000000000000000000 million-dollar-a-year 00000000000000000000000000000000 Helps 00100000000000001011010000110010 kayoed 00000000000000000000000000000000 wrondgoing 00000000000000000000000000000000 Dill 00100000000000000000000000000000 Bierbower 00100000000000000000000000000000 dangled 00000000000000000000000000000000 Gore 00101111111100010100101010001000 pity 00000000000011101101001010110111 Filmed 00100001110001110100010000110010 Excuses 00100000000111111010101110100011 Fawn 00100000000000000000000000000000 Abscam-indicted 00100000000000000000000000000000 Zombie 00100000000000000000000000000000 Massacre 00100000000111001101010001100111 Aunt 00100000000111110001111100001000 Bikini 00100000000111101000110000000001 shoplifting 00000000000000000000000000000000 felled 00000000000000000000000000000000 2.9622 00000000000000000000000000000000 co-defendant 00000000000000000000000000000000 burnishing 00000000000000000000000000000000 patriot 00000000000011011010001010110000 ferries 00000000000000000000000000000000 Involved 00100000000001001110010000110010 Bets 00100000000111001011111101100011 Studds 00100000000000000000000000000000 handily 00001000110000000000010001110010 2.8956 00000000000000000000000000000000 boozing 00000000000000000000000000000000 mogul 00000000000100000111110000110101 Become 00100000000111101100010110110010 Lobbyist 00100000000111000010011110110101 Gucci 00100000000101110110110000001000 Gulch 00100000000000000000000000000000 inhabited 00000000000000000000000000000000 Fernand 00100000000000010110000010011000 Germain 00100000000111110110111010001000 savings-and-loans 00000000000000000000000000000000 pseudo-lobbyists 00000000000000000000000000000000 seclusion 00000000000000000000000000000000 Misery 00100000000111101010110010100111 2.90-mark 00000000000000000000000000000000 scandal-tossed 00000000000000000000000000000000 scabs 00000000000000000000000000000000 Ehrlichman 00100000000000000000000000000000 2.20 00000000000000000000000000000000 good-hearted 00000000000000000000000000000000 32-nation 00000000000000000000000000000000 centenary 00000000000000000000000000000000 U.S.-dominated 01000000000000000000000000000000 Birns 00100000000000000000000000000000 Hemispheric 00100000000000000000000000000000 non-interventionist 00000000000000000000000000000000 Slay 00100000000000000000000000000000 341.20 00000000000000000000000000000000 Kind 00100000000111111111101010111111 Hearts 00100000000111011010111101100011 Coronets 00100000000000000000000000000000 murdering 00000000000000000000000000000000 Alec 00100000000001011100001000011000 intertitles 00000000000000000000000000000000 snubbed 00000000000000000000000000000000 90.20 00000000000000000000000000000000 detectives 00000000000011100100100000110011 Fish 00100000000111101101100000100001 Wanda 00100000000000000000000000000000 67.40 00000000000000000000000000000000 continual 00000000000000000000000000000000 plights 00000000000000000000000000000000 befall 00000000000000000000000000000000 coyote 00000000000000000000000000000000 Runner 00100000000111100101010010110101 slow-motion 00000000000000000000000000000000 blood-and-guts 00000000000000000000000000000000 steamroller 00000000000000000000000000000000 scriptwriters 00000000000000000000000000000000 cursing 00000000000000000000000000000000 petrified 00000000000000000000000000000000 PG-13 01000000000000000000000000000000 hundredweight 00000000000000000000000000000000 copious 00000000000000000000000000000000 gutter 00000000000000000000000000000000 crutch 00000000000000000000000000000000 errs 00000000000000000000000000000000 46.80 00000000000000000000000000000000 ALAMCO 01000000000000000000000000000000 Clarksburg 00100000000000000000000000000000 W.Va. 01000000000000000000000000000000 Hogs 00100000000110110101111001100011 64.2 00000000000000000000000000000000 electronics-product 00000000000000000000000000000000 ensembles 00000000000000000000000000000000 metal-working 00000000000000000000000000000000 547 00000000000000000000000000000000 turkey 00000000000111001110111101101000 Broiler 00100000000000000000000000000000 sunsets 00000000000000000000000000000000 Marder 00100000000000000000000000000000 Woolard 00100000000000000000000000000000 pre-split 00000000000000000000000000000000 117.375 00000000000000000000000000000000 84.75 00000000000000000000000000000000 Fallon 00100000000000000000000000000000 diversifed 00000000000000000000000000000000 8.46 00000000000000000000000000000000 FundTrust 01000000000000000000000000000000 26.54 00000000000000000000000000000000 24.05 00000000000000000000000000000000 639.9 00000000000000000000000000000000 tomatoes 00000000000111011100111001100011 Composer 00100000000111100010011110110101 Delors 00101111111110011110110010001000 cohesion 00000000000000000000000000000000 reintegrated 00000000000000000000000000000000 Heisbourg 00100000000000000000000000000000 less-creditworthy 00000000000000000000000000000000 lettuce 00000000000111110111101110110000 tramp 00000000000000000000000000000000 deserts 00000000000000000000000000000000 stick-and-carrot 00000000000000000000000000000000 realistically 00000000010000000000010001110010 Vedrine 00100000000000000000000000000000 rejuvenate 00000000000101010100111110110010 Gaelic 00100000000000000000000000000000 Thierry 00100000000000000000000000000000 Montbrial 00100000000000000000000000000000 Institutue 00100000000000000000000000000000 Soviet-German 01000000000000000000000000000000 Bismarckian 00100000000000000000000000000000 Maltese 00100000000000000000000000000000 denuclearized 00000000000000000000000000000000 speeded-up 00000000000000000000000000000000 Hammett 00100000000000000000000000000000 Dashiell 00100000000000000000000000000000 348.2 00000000000000000000000000000000 307.2 00000000000000000000000000000000 mail-processing 00000000000000000000000000000000 Selmer-Sande 01000000000000000000000000000000 1891 00000000000000000000000000000000 penetrating 00000000000011000110100001000000 12.44 00000000000000000000000000000000 87.9 00000000000000000000000000000000 Author 00100000000111111111010000110101 136-year-old 00000000000000000000000000000000 high-net 00000000000000000000000000000000 flattery 00000000000000000000000000000000 broadens 00000000000000000000000000000000 obligatto 00000000000000000000000000000000 high-net-worth 00000000000000000000000000000000 great-grandfather 00000000000000000000000000000000 F.A.O. 01000000000000000000000000000000 four-member 00000000000000000000000000000000 Bacon 00100000000111110000000000001000 538.5 00000000000000000000000000000000 388.5 00000000000000000000000000000000 Sparcstation 00100000000000000000000000000000 food-industry 00000000000000000000000000000000 C.B. 01000000000000000000000000000000 J.V. 01000000000000000000000000000000 Equifax 00100000001100011010111100101000 0.66 00000000000000000000000000000000 maninstays 00000000000000000000000000000000 Freshbake 00100000000000000000000000000000 Sieckman 00100000000000000000000000000000 319.75 00000000000000000000000000000000 Jansen 00100000000000000000000000000000 F.E. 01000000000000000000000000000000 already-tense 00000000000000000000000000000000 T.D. 01000000000000000000000000000000 shirk 00000000000000000000000000000000 Zemin 00100000000000000000000000000000 pure-voiced 00000000000000000000000000000000 biscuit 00000000000000000000000000000000 far-from-conciliatory 00000000000000000000000000000000 75-cents-an-hour 00000000000000000000000000000000 Sentences 00100000000100001100000001100111 evil-doers 00000000000000000000000000000000 lambastes 00000000000000000000000000000000 astrophysicist 00000000000000000000000000000000 Zhu 00101111111000000111000100001000 Qizhen 00100000000000000000000000000000 hashing 00000000000000000000000000000000 Codifying 00100000000000000000000000000000 36-minute 00000000000000000000000000000000 erythropoietin 00000000000000000000000000000000 Ortho 00100000000000000000000000000000 anemias 00000000000000000000000000000000 placebo 00000000000111011101110000000001 SHELTERS 01000000000111111110001100000011 CALLED 01000000000011010101010000110010 adminstrative 00000000000000000000000000000000 rites 00000000000000000000000000000000 stepchildren 00000000000000000000000000000000 four-man 00000000000000000000000000000000 Regulations 00100000000000000011111100100011 PRA 01000000000000000000000000000000 actuary 00000000000000000000000000000000 tax-deductions 00000000000000000000000000000000 High-Yield 01000000000000000000000000000000 0.63 00000000000000000000000000000000 6.26 00000000000000000000000000000000 mark-up 00000000000000000000000000000000 2,500-person 00000000000000000000000000000000 black-market 00000000000000000000000000000000 hack 00000000000000000000000000000000 state-plan 00000000000000000000000000000000 Glamorous 00100000000010101001000010010000 Greif 00100000000000000000000000000000 200-ruble 00000000000000000000000000000000 refitting 00000000000000000000000000000000 2%-3 00000000000000000000000000000000 turnkey 00000000000000000000000000000000 management... 00000000000000000000000000000000 reexamining 00000000000000000000000000000000 anachronism 00000000000000000000000000000000 officio 00000000000000000000000000000000 Lazzaroni 00100000000000000000000000000000 Dorgen 00100000000000000000000000000000 seat-for-the-secretary 00000000000000000000000000000000 turf-hungry 00000000000000000000000000000000 inflation-growth 00000000000000000000000000000000 avidly 00000000000000000000000000000000 tread 00000000000000000000000000000000 Feldstein 00101111111100011000001010001000 overstaffed 00000000000000000000000000000000 Bramalea 00100000000000000000000000000000 inside-the-beltway 00000000000000000000000000000000 gnawing 00000000000000000000000000000000 egregiously 00000000000000000000000000000000 junket 00000000000000000000000000000000 invading 00000000000111011001110101000000 McLeod 01000000000111111011010100001000 low-price 00000000000000000000000000000000 four-square 00000000000000000000000000000000 R.W. 01000000000000000000000000000000 dithering 00000000000000000000000000000000 blindly 00000000000000000000000000000000 bartering 00000000000000000000000000000000 dudgeon 00000000000000000000000000000000 Punching 00100000000000000000000000000000 tiniest 00000000000000000000000000000000 aptly 00000001101001000001001001110010 Epinalers 00100000000000000000000000000000 pottage 00000000000000000000000000000000 relished 00000000000000000000000000000000 whistled 00000000000000000000000000000000 gusto 00000000000000000000000000000000 televangelism 00000000000000000000000000000000 dichotomy 00000000000000000000000000000000 Eighty-three 00100000000000000000000000000000 H.G. 01000000000000000000000000000000 flabbiness 00000000000000000000000000000000 bitch 00000000000000000000000000000000 success... 00000000000000000000000000000000 standing-room-only 00000000000000000000000000000000 brazen 00000000000000000000000000000000 pinned 00000000000011010001001000110010 dissonance 00000000000000000000000000000000 confession 00000000000110001101111101100111 hang-tough 00000000000000000000000000000000 liars 00000000000000000000000000000000 peccadilloes 00000000000000000000000000000000 demeaned 00000000000000000000000000000000 0.85 00000000000000000000000000000000 slithered 00000000000000000000000000000000 huckstering 00000000000000000000000000000000 poohbah 00000000000000000000000000000000 BRAMALEA 01000000000000000000000000000000 780.6 00000000000000000000000000000000 disassemble 00000000000000000000000000000000 Bronfmans 00100000000000000000000000000000 Jeffery 00100000000000000000000000000000 Logsdon 00101111010101001100000010001000 Crowell 00100000000000000000000000000000 Weedon 00100000000000000000000000000000 -was 00000000000000000000000000000000 18-screen 00000000000000000000000000000000 -271,124 00000000000000000000000000000000 12.875 00000000000000000000000000000000 McDermid 01000000000000000000000000000000 ozone-damaging 00000000000000000000000000000000 27.2 00000000000000000000000000000000 unchlorinated 00000000000000000000000000000000 BASF 01000000000000000000000000000000 natural-gas-pipeline 00000000000000000000000000000000 Algonquin 00100000000000000000000000000000 Prohibition 00100000000111111100000001100111 Evian 00100000000000000000000000000000 beer-distribution 00000000000000000000000000000000 Sparkling 00100000001000011100011010010000 lemon-lime 00000000000000000000000000000000 non-flight 00000000000000000000000000000000 28-ounce 00000000000000000000000000000000 thumbs-down 00000000000000000000000000000000 Etudes 00100000000000000000000000000000 subsides 00000000000000000000000000000000 Bebop 00100000000000000000000000000000 MacSharry 01000000000000000000000000000000 Jules 00100000000000000000000000000000 vehement 00000000000000000000000000000000 improvised 00000000000000000000000000000000 exchanging 00000000000000110101111101000000 free-trade 00000000000000000000000000000000 Vassiliades 00100000000000000000000000000000 Sorbus 00100000000000000000000000000000 Energetic 00100000000001011000110100010000 Junk-fund 00100000000000000000000000000000 shortcut 00000000000101000101111010110111 ever-optimistic 00000000000000000000000000000000 bequeathed 00000000000000000000000000000000 Lighthouse 00100000000000000000000000000000 Verbatim 00100000000000000000000000000000 mendacity 00000000000000000000000000000000 emblematic 00000000000000000000000000000000 unlovely 00000000000000000000000000000000 1850 00000000000000000000000000000000 express... 00000000000000000000000000000000 free-speech 00000000000000000000000000000000 343 00000000000000000000000000000000 enlivening 00000000000000000000000000000000 fair-use 00000000000000000000000000000000 sanctity 00000000000000000000000000000000 theory-teaching 00000000000000000000000000000000 indispensability 00000000000000000000000000000000 Suppression 00100000000111101101101101001111 Responsible 00100000000011111110110000110010 biographers 00000000000000000000000000000000 memoranda 00000000001000100010001000100011 inscription 00000000000000000000000000000000 Robbers 00100000000000000000000000000000 Hindemith 00100000000000000000000000000000 Ninth 00100000000110101011100011010000 Strindberg 00100000000000000000000000000000 ascribed 00000000000011110101010000110010 polyrhythms 00000000000000000000000000000000 Holcomb 00100000000000000000000000000000 932 00000000000000000000000000000000 murderous 00000000000000000000000000000000 grammatical 00000000000000000000000000000000 chortled 00000000000000000000000000000000 alone... 00000000000000000000000000000000 analytic 00000000000000000000000000000000 pre-eminence 00000000000000000000000000000000 Arrest 00100000000111010101111010110111 derivation 00000000000000000000000000000000 is... 00000000000000000000000000000000 188.84 00000000000000000000000000000000 shallower 00000000000000000000000000000000 Coles 00100000000000000000000000000000 egotist... 00000000000000000000000000000000 treasure-trove 00000000000000000000000000000000 Hersey 00100000000000000000000000000000 Schweitzer 00100000000000000000000000000000 humanities 00000000000111111110001101100001 Prizes 00100000000110110000000001100011 Elecktra 00100000000000000000000000000000 Mattes 00100000000000000000000000000000 twindam 00000000000000000000000000000000 H.L. 01000000000000000000000000000000 primitives 00000000000000000000000000000000 bassoon 00000000000000000000000000000000 heroine 00000000000111111100111110000001 877,663 00000000000000000000000000000000 seeped 00000000000000000000000000000000 exerted 00000000000000000000000000000000 caricature 00000000000000000000000000000000 lightheartedly 00000000000000000000000000000000 Animal 00100000000011101101110000100001 vehemence 00000000000000000000000000000000 testifies 00000000000100100001101000110010 Caucus 00100000000011000011101100100101 unaccustomed 00000000000000000000000000000000 decisiveness 00000000000000000000000000000000 pastimes 00000000000000000000000000000000 Bashing 00100000000110100010110001000000 unimaginable 00000000000000000000000000000000 Rezneck 00100000000000000000000000000000 Radiation 00100000000010001001110000100001 Effects 00100000000111111101101110001111 NASA-Air 01000000000000000000000000000000 micro-electronic 00000000000000000000000000000000 dams 00000000000111101110010010001001 G.L. 01000000000000000000000000000000 Miklos 00100000000000000000000000000000 financeer 00000000000000000000000000000000 banded 00000000000000000000000000000000 Started 00100000000000001010001000110010 contrarian 00000000000010101000101000110000 44.875 00000000000000000000000000000000 52.25 00000000000000000000000000000000 142.4 00000000000000000000000000000000 521 00000000000000000000000000000000 twinned 00000000000000000000000000000000 8.18 00000000000000000000000000000000 234.5 00000000000000000000000000000000 241.9 00000000000000000000000000000000 859.5 00000000000000000000000000000000 930.2 00000000000000000000000000000000 95.9 00000000000000000000000000000000 315.8 00000000000000000000000000000000 280.7 00000000000000000000000000000000 3.54 00000000000000000000000000000000 worthiness 00000000000000000000000000000000 optical-products 00000000000000000000000000000000 Bolger 00101111111000010011100010001000 Yacos 00100000000000000000000000000000 855 00000000000000000000000000000000 72%-owned 00000000000000000000000000000000 28%-owned 00000000000000000000000000000000 Westboro 00100000000000000000000000000000 state-approved 00000000000000000000000000000000 82.50 00000000000000000000000000000000 government-bond 00000000000000000000000000000000 C&P 01000000000000000000000000000000 Salvatore 00100000000000000000000000000000 Barbera 00100000000000000000000000000000 scurrying 00000000000000000000000000000000 offhandedly 00000000000000000000000000000000 dissension 00000000000101001010111010100111 skirted 00000000000000000000000000000000 harrowing 00000000000000000000000000000000 market-jarring 00000000000000000000000000000000 SEC. 01000000000000000000000000000000 covets 00000000000000000000000000000000 Millie 00100000000000000000000000000000 Danube 00100000000000000000000000000000 lavender 00000000000000000000000000000000 jasmine 00000000000000000000000000000000 scents 00000000000110001001010101100011 wafting 00000000000001011001001000110010 aromas 00000000000000000000000000000000 28th 00000000000000000000000000000000 improviser 00000000000000000000000000000000 sub-minimum 00000000000000000000000000000000 Boga 00100000000000000000000000000000 unlock 00000000000000000000000000000000 fingerprints 00000000000000000000000000000000 Escudome 00100000000000000000000000000000 pop-out 00000000000000000000000000000000 vehicle-suspension 00000000000000000000000000000000 Detroit-to-Tokyo 01000000000000000000000000000000 Greenwald 00101111111101000110100010001000 Lada 00100000000000000000000000000000 Niva 00100000000000000000000000000000 take-it-or-leave 00000000000000000000000000000000 dark-blue 00000000000000000000000000000000 Kompakt 00100000000000000000000000000000 sported 00000000000000000000000000000000 exuded 00000000000000000000000000000000 bumps 00000000000000000000000000000000 34-page 00000000000000000000000000000000 cheetah 00000000000000000000000000000000 equates 00000000000000000000000000000000 grandly 00000000000000000000000000000000 Celica 00100000000000000000000000000000 hoods 00000000000000000000000000000000 545.3 00000000000000000000000000000000 four-stroke 00000000000000000000000000000000 Subaru 00100000000101111110111100101000 Inspire 00100000000101101111101110110010 fuel-economy 00000000000000000000000000000000 four-cylinder 00000000000000000000000000000000 securities-turnover 00000000000000000000000000000000 Odd 00100000000000010110110100010000 whimsy 00000000000000000000000000000000 Appell 00100000000000000000000000000000 motorcycle 00000000000011000100001000100001 Monkey 00100000000011011110110100000001 Gorilla 00100000000000000000000000000000 Guppy 00100000000000000000000000000000 Bongo 00100000000000000000000000000000 Autozam 00100000000000000000000000000000 microvan 00000000000000000000000000000000 Scrum 00100000000000000000000000000000 buglike 00000000000000000000000000000000 gentleness 00000000000000000000000000000000 warmheartedness 00000000000000000000000000000000 Caitlin 00100000000000000000000000000000 bubblelike 00000000000000000000000000000000 Sneaker 00100000000000000000000000000000 Kirschbaum 00100000000000000000000000000000 Leeza 00100000000000000000000000000000 Spider 00100000000000000000000000000000 Hijet 00100000000000000000000000000000 Regie 00101111111101011100101000101000 Usines 00101111111000001110110000011101 duffers 00000000000000000000000000000000 Megane 00100000000000000000000000000000 connote 00000000000000000000000000000000 feminine 00000000011111100101010010010000 grandeur 00000000000000000000000000000000 eyeglasses 00000000000000000000000000000000 Presence 00100000000111110111101110100111 hopping 00000000001110000110100001000000 seat-belt 00000000000000000000000000000000 tightener 00000000000000000000000000000000 wail 00000000000000000000000000000000 wagon 00000000000000110001111010110000 wood-grain 00000000000000000000000000000000 PAP 01000000000000010111110000100001 less-popular 00000000000000000000000000000000 pilgrimage 00000000000000000000000000000000 cockiness 00000000000000000000000000000000 uptempo 00000000000000000000000000000000 crowed 00000000000000000000000000000000 laid-back 00000000000000000000000000000000 disqualified 00000010001001010100010000110010 momentarily 00000000000000000000000000000000 infantile 00000000000000000000000000000000 incremental 00000000000000001110010100010000 retirement-savings 00000000000000000000000000000000 Schmidlin 00100000000000000000000000000000 food-shop 00000000000000000000000000000000 211.6 00000000000000000000000000000000 PWA-owned 01000000000000000000000000000000 lilting 00000000000000000000000000000000 A310-300s 00100000000000000000000000000000 747-100s 00000000000000000000000000000000 373.80 00000000000000000000000000000000 Callum 00100000000000000000000000000000 WAFA 01000000000000000000000000000000 anti-airline-takeover 00000000000000000000000000000000 quasi-xenophobic 00000000000000000000000000000000 emulated 00000000000000000000000000000000 incumbent-protection 00000000000000000000000000000000 Rain 00100000000011101111110010100111 attainable 00000000000000000000000000000000 bill-introduced 00000000000000000000000000000000 N.D. 01000000000000000000000000000000 twice-a-year 00000000000000000000000000000000 Hamilton-Dorgan 01000000000000000000000000000000 374.70 00000000000000000000000000000000 improvisational 00000000000000000000000000000000 WGBH 01000000000000000000000000000000 nose-dive 00000000000000000000000000000000 Rickel 00100000000000000000000000000000 two-family 00000000000000000000000000000000 affections 00000000000000000000000000000000 Time-Life 01000000000000000000000000000000 Comerica 00100000000000101100111100101000 pesticides.`` 00000000000000000000000000000000 It's 00100000000000000000000000000000 Moves 00100000000111100011001000100011 Sabhavasu 00100000000000000000000000000000 yank 00000001011100111111110110110010 carcinogen 00000000000000000000000000000000 Paradox 00100000000111001001111101100111 Pramual 00100000000000000000000000000000 bassist 00000000000000000000000000000000 Allow 00100000000111010011101110110010 lurching 00000000000000000000000000000000 9.82 00000000000000000000000000000000 roil 00000000000000000000000000000000 155.7 00000000000000000000000000000000 scribblers 00000000000000000000000000000000 richly 00000000000000000000000000000000 wistful 00000000000000000000000000000000 lurch 00000000000000000000000000000000 gridiron 00000000000000000000000000000000 8.64 00000000000000000000000000000000 glittery 00000000000000000000000000000000 Greed 00100000000111001111110010100111 Corruption 00100000000111110110100010100111 maul 00000000000000000000000000000000 Armen 00100000000000000000000000000000 Jens-Uwe 01000000000000000000000000000000 Die 00100000000101011101010110110010 Pantheon 00100000000000000000000000000000 S.I. 01000000000000000000000000000000 strangled 00000000000000000000000000000000 athlete-payoff 00000000000000000000000000000000 woebegone 00000000000000000000000000000000 signboards 00000000000000000000000000000000 Claus 00100000000000001000000001001000 Tomoshige 00100000000000000000000000000000 voluminous 00000000000000000000000000000000 ingeniously 00000000000000000000000000000000 mafiosi 00000000000000000000000000000000 Daley 00101111111010011001000010001000 insinuendo 00000000000000000000000000000000 Discrepancies 00100000000010101111111010100111 ex-player 00000000000000000000000000000000 tailback 00000000000000000000000000000000 Dubose 00100000000000000000000000000000 reprints 00000000000000000000000000000000 liaisons 00000000000000000000000000000000 flanker 00000000000000000000000000000000 Fryar 00100000000000000000000000000000 Steinkuhler 00100000000000000000000000000000 bulked-up 00000000000000000000000000000000 lineman 00000000000100001011011110110101 Huskers 00100000000000000000000000000000 ingestion 00000000000000000000000000000000 ticketed 00000000000000000000000000000000 Lefty 00100000000000000000000000000000 Driesell 00100000000000000000000000000000 tidbit 00000000000000000000000000000000 10-month-long 00000000000000000000000000000000 Abrupt 00100000000000010100010100010000 non-sales 00000000000000000000000000000000 Si 00100000000000000000000000000000 convenience-store 00000000000000000000000000000000 rearrange 00000000000000000000000000000000 on-campus 00000000000000000000000000000000 Weight 00100000000100001111110100100111 Watchers 00100000000000010010000010110011 Pritikin 00100000000000000000000000000000 quick-to-prepare 00000000000000000000000000000000 V.H. 01000000000000000000000000000000 Cerf 00100000000000000000000000000000 time-poor 00000000000000000000000000000000 Vroom 00100000000000000000000000000000 junk-fund 00000000000000000000000000000000 7-Eleven 01000000000000000000000000000000 debt-heavy 00000000000000000000000000000000 Clarinet 00100000000000000000000000000000 point-of-sale 00000000000000000000000000000000 Usery 00100000000000000000000000000000 mediate 00000000000000000000000000000000 Mara 00101111111000000110000100001000 eye-popping 00000000000000000000000000000000 No-Smoking 01000000000000000000000000000000 Sulaiman 00100000000000000000000000000000 sales... 00000000000000000000000000000000 Armored 00100000000111111010001010110000 thunderstorm 00000000000000000000000000000000 Shellpot 00100000000000000000000000000000 Bolstering 00100000000111001111011101000000 caked 00000000000000000000000000000000 Zaharah 00100000000000000000000000000000 moldy 00000000000000000000000000000000 mildewy 00000000000000000000000000000000 smelly 00000000000000000000000000000000 coin-cleaning 00000000000000000000000000000000 mutilated 00000000000000000000000000000000 mucked 00000000000000000000000000000000 tee 00000000000000000000000000000000 cement-mixing 00000000000000000000000000000000 heater 00000000000000000000000000000000 blowtorch 00000000000000000000000000000000 chute 00000000000000000000000000000000 sucks 00000000000000000000000000000000 Siti 00100000000000000000000000000000 rewrapped 00000000000000000000000000000000 conceiver 00000000000000000000000000000000 cement-truck 00000000000000000000000000000000 Fawcett 00100000000000000000000000000000 idiosyncratic 00000000000000000000000000000000 Truffaut 00100000000000000000000000000000 Fellini 00100000000000000000000000000000 Woody 00101111111111110010111000011000 delusion 00000000000000000000000000000000 sob 00000000000000000000000000000000 limply 00000000000000000000000000000000 Discos 00100000000000000000000000000000 Written 00100001000111110010110000110010 Benedek 00100000000000000000000000000000 Chill 00100000000100111101001010110111 good-looking 00000000000000000000000000000000 adoptive 00000000000000000000000000000000 paperback 00000000001010011000001010110000 child-as-required-yuppie-possession 00000000000000000000000000000000 motivating 00000000000000000000000000000000 brats 00000000000000000000000000000000 pained 00000000000000000000000000000000 cellists 00000000000000000000000000000000 not-so-subtly 00000000000000000000000000000000 Cheetham 00100000000000000000000000000000 Accused 00100000000111010011110000110010 literal-minded 00000000000000000000000000000000 encore 00000000000000000000000000000000 1.7600 00000000000000000000000000000000 unwed 00000000000001011010101000110000 Ohioan 00100000000000000000000000000000 warped 00000000000000000000000000000000 1.9000 00000000000000000000000000000000 most-likely-successor 00000000000000000000000000000000 glib 00000000000000000000000000000000 Ties 00100000000111001100110000100111 magnification 00000000000000000000000000000000 scamper 00000000000000000000000000000000 Swan 00100000001111001010001000110000 whimpers 00000000000000000000000000000000 Billions 00100000000111101111011000101111 cataloging 00000000000000000000000000000000 Lemmon 00100000000000000000000000000000 turgid 00000000000000000000000000000000 fluffy 00000000000000000000000000000000 sperm 00000000000011010000110000100001 coy 00000000000000000000000000000000 141.33 00000000000000000000000000000000 explores 00000000000000000000000000000000 Jean-Jacques 01000000000000000000000000000000 Annaud 00100000000000000000000000000000 Berri 00100000000000000000000000000000 orphan 00000000000100001010101000110000 cub 00000000000000000000000000000000 orphaned 00000000000000000000000000000000 child-parent 00000000000000000000000000000000 Coen 00100000000000000000000000000000 822.8 00000000000000000000000000000000 12.49 00000000000000000000000000000000 slow-growth 00000000000000000000000000000000 truck-refrigeration 00000000000000000000000000000000 handshake 00000000000000000000000000000000 INTEREST 01000000000000000000000110100111 3,102,935 00000000000000000000000000000000 3,420,936 00000000000000000000000000000000 provost 00000000000000000000000000000000 142.80 00000000000000000000000000000000 TA 01000000000000000000000000000000 raring 00000000000000000000000000000000 gallstone 00000000000000000000000000000000 disqualify 00000000000111000111111110110010 BioVentures 01000000000000000000000000000000 Rima 00100000000000000000000000000000 Cinzano 00100000000000000000000000000000 Amparano 00100000000000000000000000000000 142.95 00000000000000000000000000000000 139.75 00000000000000000000000000000000 Neurosciences 00100000000000000000000000000000 bioTechnology 01000000000000010011011010110000 Duplicating 00100000000000000000000000000000 extramural 00000000000000000000000000000000 escalation 00000000000111000100111001100111 Spectra 00100000000000111000110100101000 falsifying 00000000000001100011000110010000 subcommitee 00000000000000000000000000000000 p.m.-midnight 00000000000000000000000000000000 Playhouse 00100000000000000000000000000000 1927 00000000000000000000000000000000 8-10 00000000000000000000000000000000 chary 00000000000000000000000000000000 Perfect 00100000000000000000011010010000 1.8690 00000000000000000000000000000000 Aidan 00100000000000000000000000000000 Dennehy 00100000000000000000000000000000 Stockard 00100000000000000000000000000000 Channing 00100000000000000000000000000000 resonates 00000000000000000000000000000000 8-11 00000000000000000000000000000000 Julie 00100000000011111000001000011000 hierarchical 00000000000000000000000000000000 irk 00000000000000000000000000000000 AT&T-sponsored 01000000000000000000000000000000 ponderousness 00000000000000000000000000000000 trending 00000000000000000000000000000000 Jekyll 00100000000000000000000000000000 Brideshead 00100000000000000000000000000000 umbrellas 00000000000000000000000000000000 espresso 00000000000000000000000000000000 pre-Freudian 01000000000000000000000000000000 schizoid 00000000000000000000000000000000 Journey 00100000000110101101111101100111 Critical 00100000000000011000011000010000 defiance 00000000000111111010011001101111 9-10 00000000000000000000000000000000 A&E 01000000000000000000000000000000 one-acter 00000000000000000000000000000000 Prize-winning 00100000000000000000000000000000 Marsha 00100000000000000000000000000000 Playwrights 00100000000000000000000000000000 Peebles 00100000000000000000000000000000 intergenerational 00000000000000111110010100010000 Thursdays 00100000000000000000000000000000 2-23 00000000000000000000000000000000 Performances 00100000000111111111011010100111 toned 00000000000000000000000000000000 Arbitrage-related 00100000000000000000000000000000 hip 00000000000010000110011010010000 1:30-6 00000000000000000000000000000000 Breeder 00100000000000000000000000000000 less-than-brilliant 00000000000000000000000000000000 Polished 00100000000110000110011010010000 hooves 00000000000000000000000000000000 a.m.-1:30 00000000000000000000000000000000 Shiny 00100000000000000111011010010000 Nikes 00100000000000000000000000000000 moviestar 00000000000000000000000000000000 5-12 00000000000000000000000000000000 intimidate 00000000001011100111111110110010 earthy 00000000000000000000000000000000 Ku 00100000000000000000000000000000 Klux 00100000000000000000000000000000 Klan 00100000000000000000000000000000 Has 00100000000000000000010000010010 NOVA 01000000000111100010100100101000 caretaker 00000000000000000000000000000000 prying 00000000000000000000000000000000 supersede 00000000000100111001101110110010 stocked 00000000001101110110010000110010 Shaken 00100000000010010001110000110010 coincide 00000000000111000001010110110010 four-point 00000000000000000000000000000000 uttering 00000000000000000000000000000000 Three-month 00100000000000000000000000000000 T-bill 00100000000000000000000000000000 Competing 00100000000000010010101001000000 Treasurer 00100000000111111111111011101101 regimented 00000000000000000000000000000000 overrode 00000000000000000000000000000000 Tracking 00100000000111100010110001000000 Traveling 00100000000101101111000001000000 Abroad 00100000000000110100010001110010 refute 00000000000000000000000000000000 -at 00000000000000000000000000000000 movie-studio 00000000000000000000000000000000 theme-park 00000000000000000000000000000000 700-room 00000000000000000000000000000000 Provided 00100000000010010111010000110010 Course 00100000000111111111111110100001 invades 00000000000000000000000000000000 Aljian 00100000000000000000000000000000 98.6%-owned 00000000000000000000000000000000 heartened 00000000000000000000000000000000 DC-8-62 01000000000000000000000000000000 multi-spired 00000000000000000000000000000000 castle-like 00000000000000000000000000000000 themed 00000000000011111000000000010000 passages 00000000010011100111110101100011 351.2 00000000000000000000000000000000 succesful 00000000000000000000000000000000 midsummer 00000000000000000000000000000000 9.62 00000000000000000000000000000000 notched 00000000000000000000000000000000 governor-elect 00000000000000000000000000000000 whammy 00000000000000000000000000000000 visibly 00000000000000000000000000000000 Herzfeld 00101111101010101100000010001000 6.08 00000000000000000000000000000000 naturalized 00000000000000000000000000000000 Northampton 00100000000000000000000000000000 supercilious 00000000000000000000000000000000 beachfront 00000000000000000000000000000000 Ostrander 00100000000000000000000000000000 Fellowship 00100000000000000000000000000000 quintuple 00000000000000000000000000000000 50%-leveraged 00000000000000000000000000000000 Wickes 00100000000111111111111100101000 Horsehead 00100000000000000000000000000000 junk-market 00000000000000000000000000000000 Bernstein-Macaulay 01000000000000000000000000000000 Eden 00100000000100110110011010101000 paper-and-crayon 00000000000000000000000000000000 Yasuo 00100000000000000000000000000000 envy-quotient 00000000000000000000000000000000 peerless 00000000001011011000001000110000 Created 00100000000111101100010000110010 flaunts 00000000000000000000000000000000 redefining 00000000000000000000000000000000 congestive 00000000000000000000000000000000 non-horticultural 00000000000000000000000000000000 Mayhap 00100000000000000000000000000000 metaphorical 00000000000000000000000000000000 literal 00000000000000000000000000000000 HG 01000000000000000000000000000000 Luce 00101111111100100111000010001000 semantics 00000000000000000000000000000000 ignoramus 00000000000000000000000000000000 Varnell 00100000000000000000000000000000 Landscape 00100000000100101111101001100111 Strawberry 00100000000000000000000000000000 uncollaborated 00000000000000000000000000000000 recycle 00000000000000000000000000000000 artful 00000000000000000000000000000000 rudimentary 00000000000000000000000000000000 triangles 00000000000000000000000000000000 rectangles 00000000000000000000000000000000 once-closed 00000000000000000000000000000000 gridded 00000000000000000000000000000000 two-dimensional 00000000000000000000000000000000 3-D 01000000000000000000000000000000 kelly 00001111111100111111100010001000 amateurish 00000000000000000000000000000000 self-tilth 00000000000000000000000000000000 rhododendron 00000000000000000000000000000000 tulip 00000000000000000000000000000000 Commissioning 00100000000100110001111101000000 dollars... 00000000000000000000000000000000 whim 00000000000000000000000000000000 tablemodel 00000000000000000000000000000000 sheltering 00000000000000000000000000000000 microcosm 00000000000000000000000000000000 design... 00000000000000000000000000000000 serpentine 00000000000000000000000000000000 orchard... 00000000000000000000000000000000 50-by-50-foot 00000000000000000000000000000000 tartan 00000000000000000000000000000000 maquette 00000000000000000000000000000000 jury-rigged 00000000000000000000000000000000 rec 00000000000000000000000000000000 Barcalounger 00100000000000000000000000000000 requisitioned 00000000000000000000000000000000 rectilinear 00000000000000000000000000000000 French-speaking 00100000000000000000000000000000 geometry 00000000000000000000000000000000 right-angling 00000000000000000000000000000000 tartans 00000000000000000000000000000000 roomette 00000000000000000000000000000000 predicated 00000000000000000000000000000000 43-foot 00000000000000000000000000000000 cube 00000000000000000000000000000000 fishbowl 00000000000000000000000000000000 birdcage 00000000000000000000000000000000 cockatoos 00000000000000000000000000000000 plaid-floored 00000000000000000000000000000000 strawberries 00000000000000000000000000000000 Bosque 00100000000000000000000000000000 linden 00000000000100000100001000001000 Lindens 00100000000000000000000000000000 battalion 00000000000000000000000000000000 barbers 00000000000000000000000000000000 rosarians 00000000000000000000000000000000 orchardists 00000000000000000000000000000000 arborists 00000000000000000000000000000000 semi-skilled 00000000000000000000000000000000 gardenettes 00000000000000000000000000000000 windowless 00000000000000000000000000000000 lattice 00000000000000000000000000000000 Stygian 00100000000000000000000000000000 Consequence 00100000000111111010111000111111 photosynthesis 00000000000000000000000000000000 decking 00000000000000000000000000000000 Christmas-like 00100000000000000000000000000000 Gro-Lites 01000000000000000000000000000000 flouting 00000000000000000000000000000000 two-mile 00000000000000000000000000000000 riverside 00000000000110000100101001101000 Esplanade 00100000000000000000000000000000 Statue 00100000000110111101100101100111 riverfront 00000000000000000000000000000000 waterfall 00000000000000000000000000000000 rill 00000000000000000000000000000000 garden... 00000000000000000000000000000000 Lynden 00100000000000000000000000000000 Conservatory 00100000000000000000000000000000 Restoration 00100000000111101110101101001111 horticultural 00000000000000000000000000000000 Cooperative 00100000000000010000100000100001 obstruct 00000000000000000000000000000000 insure... 00000000000000000000000000000000 seawall 00000000000000000000000000000000 permeable 00000000000000000000000000000000 Palomino 00100000000000000000000000000000 Tilted 00100000000000000000000000000000 Arc 00100000000111100010101000110000 Flower 00100000000000110000101100100001 1883 00000000000000000000000000000000 Unhappily 00100000000000000000000000000000 gardeners 00000000000000000000000000000000 exerpts 00000000000000000000000000000000 Rails 00100000000000000000000000000000 disparity 00000000000111111110101000010111 1844 00000000000000000000000000000000 1914 00000000000000000000000000000000 omnipresent 00000000000000000000000000000000 impudent 00000000000000000000000000000000 noteholder 00000000000000000000000000000000 gold-based 00000000000000000000000000000000 Petruzzi 00100000000000000000000000000000 petulant 00000000000000000000000000000000 Fullerton 00100000000000000000000000000000 9.68 00000000000000000000000000000000 tripped 00000000000000000000000000000000 Clad 00100000001000011110010000110010 committee... 00000000000000000000000000000000 then-chairman 00000000000000000000000000000000 interruptions 00000000000000000000000000000000 anchored 00000000000000000000000000000000 2,200 00000000000000000000000000000000 policymaker 00000000000000000000000000000000 mailbox 00000000000000000000000000000000 unfamiliarity 00000000000000000000000000000000 Soho 00100000000000000000000000000000 clambered 00000000000000000000000000000000 direct-mail-mogul 00000000000000000000000000000000 unremittingly 00000000000000000000000000000000 mail-room 00000000000000000000000000000000 Belth 00100000000000000000000000000000 Imai 00100000000000000000000000000000 rationed 00000000000000000000000000000000 Ryukichi 00100000000000000000000000000000 Direct-mail 00100000000000000000000000000000 priori 00000000000000000000000000000000 Slosberg 00100000000000000000000000000000 directmail 00000000000000000000000000000000 smacks 00000000000000000000000000000000 brotherism 00000000000000000000000000000000 noticeable 00000000000000111000000000010000 duplications 00000000000000000000000000000000 Lincolnshire 00100000000000000000000000000000 tagged 00000000000000000000000000000000 Musical 00100000000000000000001100100001 plugging 00000000000000000000000000000000 Listen 00100000000111100111010110110010 Track 00100000000000101001001010110111 Vizeversa 00100000000000000000000000000000 partisans 00000000000000000000000000000000 pullouts 00000000000000000000000000000000 stickers 00000000000000000000000000000000 sparred 00000000000000000000000000000000 decorum 00000000000000000000000000000000 authored 00000000000000101111010000110010 gains-tax 00000000000000000000000000000000 Robb 00100000000000000000000000000000 one-out-of-three 00000000000000000000000000000000 superbly 00000000000000000000000000000000 capitalgains 00000000000000000000000000000000 Kazushige 00100000000000000000000000000000 1,642 00000000000000000000000000000000 3,372 00000000000000000000000000000000 refugee-assistance 00000000000000000000000000000000 alfresco 00000000000000000000000000000000 465,000 00000000000000000000000000000000 stock-taking 00000000000000000000000000000000 rotted 00000000000000000000000000000000 Regulator 00100000000000100111110000110101 SISAL 01000000000000000000000000000000 black-draped 00000000000000000000000000000000 liner 00000000000010100101111000000001 mourning 00000000000000000000000000000000 deported 00000001111001010100010000110010 Italians 00100000000111110110000110110011 Idris 00100000000000000000000000000000 Muammar 00100000000000000000000000000000 Inuit 00100000000000000000000000000000 Cree 00100000000000000000000000000000 Labrador 00100000000000000000000000000000 -players 00000000000000000000000000000000 streaked 00000000000000000000000000000000 Located 00100000000001001100010000110010 gas-one-tenth 00000000000000000000000000000000 councilors 00000000000000000000000000000000 Giulio 00100000000000000000000000000000 Andreotti 00100000000000000000000000000000 fresco 00000000000000000000000000000000 Camerino 00100000000000000000000000000000 Nuremberg 00100000000000110110000000100001 recharging 00000000000000000000000000000000 socket 00000000000000000000000000000000 876,706 00000000000000000000000000000000 Blood 00100000000000000000010000100001 patient-advocacy 00000000000000000000000000000000 finagled 00000000000000000000000000000000 Constitutional 00100000000000001100000000110000 bioequivalence-therapeutic-equivalence 00000000000000000000000000000000 bequests 00000000000000000000000000000000 admires 00000000000000000000000000000000 bloodstream 00000000000000000000000000000000 Reina 00100000000000000000000000000000 Berner 00100000000000000000000000000000 Lederer 00100000000000000000000000000000 Edelmann 00100000000000000000000000000000 Plews 00100000000000000000000000000000 135.6 00000000000000000000000000000000 Vivaldi-at-brunch 00100000000000000000000000000000 60-foot 00000000000000000000000000000000 inferno 00000000000000000000000000000000 grottoes 00000000000000000000000000000000 waterfalls 00000000000000000000000000000000 whisked 00000000000000000000000000000000 walkway 00000000000000000000000000000000 glide 00000000000000000000000000000000 habitat 00000000000101001100100000100001 illusionist 00000000000000000000000000000000 Siegfried 00100000000000000000000000000000 frolic 00000000000000000000000000000000 million-gallon 00000000000000000000000000000000 saltwater 00000000000000000000000000000000 nine-story 00000000000000000000000000000000 orchid-strewn 00000000000000000000000000000000 atrium 00000000000000000000000000000000 20,000-gallon 00000000000000000000000000000000 stingrays 00000000000000000000000000000000 angelfish 00000000000000000000000000000000 puffers 00000000000000000000000000000000 island-fantasy 00000000000000000000000000000000 -since 00000000000000000000000000000000 gamblers 00000000000111011001111000110011 castlelike 00000000000000000000000000000000 tournaments 00000000000000000000000000000000 Arthurian 00100000000000000000000000000000 amusement 00000000000011010110011010101000 movieland 00000000000000000000000000000000 5,000-room 00000000000000000000000000000000 117-acre 00000000000000000000000000000000 1787 00000000000000000000000000000000 11,795 00000000000000000000000000000000 75,500 00000000000000000000000000000000 307,000 00000000000000000000000000000000 95,400 00000000000000000000000000000000 unitary 00000000000000000000000000000000 Hotel-casino 00100000000000000000000000000000 Derchin 00100000000000000000000000000000 roulette 00000000000000000000000000000000 Lady 00100000000111101011110010110101 Luck 00100000000111110110111010100111 McCarran 01000000000000010111011000111001 gendarme 00000000000000000000000000000000 carnival 00000000000111101000111010101000 Articles 00100000000111100101110101100011 clowns 00000000000000000000000000000000 centurions 00000000000000000000000000000000 august 00000000000111101110111001100010 missionary 00000000000000000000000000000000 toga 00000000000000000000000000000000 displeased 00000000000000000000000000000000 Caesarean 00100000000000000000000000000000 Flamingo 00100000000000000000000000000000 Frontier 00100000000000000110100100100001 facelifts 00000000000000000000000000000000 persuades 00000000000000000000000000000000 pixie-like 00000000000000000000000000000000 Sanyo 00100000000100010000100100101000 mousetrap 00000000000000000000000000000000 Benninger 00100000000000000000000000000000 limitation 00000000000111110011100011000111 Kristin 00100000000000000000000000000000 Wet 00100000000000011110011010010000 Heffner 00100000000000000000000000000000 90s 00000000000000000000000000000000 in-room 00000000000000000000000000000000 fripperies 00000000000000000000000000000000 Casinos 00100000000000010000110001100011 revelers 00000000000000000000000000000000 naughtier 00000000000000000000000000000000 expansionists 00000000000000000000000000000000 mixers 00000000000000000000000000000000 Corners 00100000000000111011100100101111 intersection 00000000000000000000000000000000 lane 00001111111010000000000100001000 Dunes 00100000000000000000000000000000 Aladdin 00100000000000000000000000000000 snowbirds 00000000000000000000000000000000 more-discriminating 00000000000000000000000000000000 motels 00000000000110110111110001100011 room-rate 00000000000000000000000000000000 80%-plus 00000000000000000000000000000000 Rubeli 00100000000000000000000000000000 mega-resorts 00000000000000000000000000000000 facelift 00000000000100001011001011100111 inconvenient 00000000000000000000000000000000 lion's-head 00000000000000000000000000000000 buffets 00000000000000000000000000000000 Gluck 00100000000000000000000000000000 Quartet 00100000000000000010110100000001 politely 00000000101001000001001001110010 distractions 00000000000011101011110101100011 Vegans 00100000000000000000000000000000 SIDE 01000000000111100111001001100111 deliberating 00000000000000000000000000000000 Floral 00100000000000000000000000000000 capital-to-assets 00000000000000000000000000000000 D.N. 01000000000000000000000000000000 Confer 00100000000000000000000000000000 Kensetsu 00100000000000000000000000000000 Reconsideration 00100000000000000000000000000000 Takimura 00100000000000000000000000000000 Messiaen 00100000000000000000000000000000 Concurrence 00100000000000000000000000000000 Adjournment 00100000000000000000000000000000 Effect 00100000000111101111111110001111 Kimihide 00100000000000000000000000000000 Limitations 00100000000111111010100100100111 bait 00000000000111101111011000000001 CRs 01000000000000000000000000000000 eviscerating 00000000000000000000000000000000 loop 00000000000000000000000000000000 Clause 00100000000000000010110011100111 Labeling 00100000001010000010110001000000 blinked 00000000000000000000000000000000 countercultural 00000000000000000000000000000000 Dept. 00100000000000000000000000000000 usurpation 00000000000000000000000000000000 contorted 00000000000000000000000000000000 squelch 00000000000000000000000000000000 Battle-tested 00100000000000000000000000000000 treaty-negotiating 00000000000000000000000000000000 Unconstitutional 00100000000010110000110110010000 naysay 00000000000000000000000000000000 subconferences 00000000000000000000000000000000 junkholders 00000000000000000000000000000000 Weakens 00100000101110000011000000010010 Overbuilt 00100000000001011101101001000000 NORTHEAST 01000000000111111010001110101000 overbuilding 00000000000101011011111010100111 Foreclosures 00100000000111000110000010100111 425,000-square-foot 00000000000000000000000000000000 32-acre 00000000000000000000000000000000 Prussia 00100000000000000000000000000000 Helmsley-Spear 01000000000000000000000000000000 Receivables 00100000000111101000101111100011 SHOULD 01000000000000000001010110010010 recreate 00000000000000000000000000000000 Serkin 00100000000000000000000000000000 Nagy 00100000000000000000000000000000 Hundred 00100000000110101110000001010000 half-acre 00000000000000000000000000000000 Mediterranean-inspired 00100000000000000000000000000000 spacious 00000000000000000000000000000000 baths 00000000000000000000000000000000 intrusions 00000000000000000000000000000000 Exteriors 00100000000000000000000000000000 steel-reinforced 00000000000000000000000000000000 indestructibility 00000000000000000000000000000000 common-carrier 00000000000000000000000000000000 Brand-Name 01000000000000000000000000000000 Buildings 00100000000000000000110001100011 RESIDENTIAL 01000000000000001111010000110000 Weingarten-Siegel 01000000000000000000000000000000 Manalapan 00100000000000000000000000000000 Aaa 00100000000000000000000000000000 Allegro 00100000000000000000000000000000 Pointes 00100000000000000000000000000000 besuboru 00000000000000000000000000000000 Developer 00100000000011100011110000110101 Ara 00100000000000000000000000000000 entry-price 00000000000000000000000000000000 move-up 00000000000000000000000000000000 visualize 00000000000000000000000000000000 Quake 00100000000111111100101101100111 Jolt 00100000000100010101111010110111 PENNEY 01000000000001101011000001001000 CLUBS 01000000000000010110110001100011 curvy 00000000000000000000000000000000 skimpy 00000000000000000000000000000000 lumpier 00000000000000000000000000000000 misconception 00000000000000000000000000000000 Pacholik 00100000000000000000000000000000 conditioning... 00000000000000000000000000000000 ProBody 01000000000000000000000000000000 Spa 00100000000000000000000000000000 TOPAZ 01000000000000000000000000000000 Advice 00100000000111111011110100100111 Topaz 00100000000000000000000000000000 translucent 00000000000000000000000000000000 whitish 00000000000000000000000000000000 irradiation 00000000000000000000000000000000 audience-friendly 00000000000000000000000000000000 gemstone 00000000000000000000000000000000 aquamarine 00000000000000000000000000000000 jewelers 00000000000000000000000000000000 TRAVELS 01000000000111111100001000110010 Advent 00100000000110010101111000001111 MMG 01000000000000000000000000000000 Deleage 00100000000000000000000000000000 Favored 00100000001011101100010000110010 Family-owned 00100000000000000000000000000000 Matuschka 00100000000000000000000000000000 Gruppe 00100000000000000000000000000000 DIRECTORY 01000000000000011000001010110000 SUSPECT 01000000000001011110000110110010 saluting 00000000000000000000000000000000 ambassadors 00000000000000000000000000000000 DRACULA'S 01000000000000000000000000000000 BUSY 01000000000000010100011010010000 Transylvania 00100000000000000000000000000000 Unitours 00100000000000000000000000000000 off-season 00000000000000000000000000000000 MALAISE 01000000000111001010111010100111 revitalizing 00000000000000000000000000000000 Listeners 00100000000000000011110000110011 Argonne 00100000000000000000000000000000 celebrates 00000000000000000000000000000000 100th 00000000000000000000000000000000 hardcover 00000000000100100110101100100001 yearbook 00000000000000000000000000000000 bolsters 00000000000000000000000000000000 O'Hara 01000000000000000000000000000000 absorbers 00000000000000000000000000000000 22.26 00000000000000000000000000000000 99.771 00000000000000000000000000000000 8.457 00000000000000000000000000000000 8.387 00000000000000000000000000000000 98.518 00000000000000000000000000000000 1992-2000 00000000000000000000000000000000 triple-a 00000000000000000000000000000000 46,245,000 00000000000000000000000000000000 proliferated 00000000000000000000000000000000 116,385,000 00000000000000000000000000000000 obedient 00000000000000000000000000000000 12,915,000 00000000000000000000000000000000 1995-1999 00000000000000000000000000000000 1998-2011 00000000000000000000000000000000 2009-2011 00000000000000000000000000000000 372.14 00000000000000000000000000000000 1990-1995 00000000000000000000000000000000 securitiess 00000000000000000000000000000000 1989-88 00000000000000000000000000000000 8.54 00000000000000000000000000000000 Packers 00100000000100011100010000110011 Coupon 00100000000000010000010011000111 concertos 00000000000000000000000000000000 Skopbank 00100000000000000000000000000000 Hokkaido 00100000000000000000000000000000 Takushoku 00100000000000000000000000000000 Indentical 00100000000000000000000000000000 160.4 00000000000000000000000000000000 studded 00000000000000000000000000000000 Marche 00100000000000000000000000000000 sidestepped 00000000000000000000000000000000 Apart 00100000000000011001111100110010 stylishly 00000000000000000000000000000000 Joint-research 00100000000000000000000000000000 uncomplaining 00000000000000000000000000000000 Rindos 00100000000000000000000000000000 high-temperature 00000000000000000000000000000000 Chetta 00100000000000000000000000000000 underperformers 00000000000000000000000000000000 half-forgotten 00000000000000000000000000000000 summon 00000000000000000000000000000000 Mozart 00100000000101001000101100100001 Tatsunori 00100000000000000000000000000000 Galanter 00100000000000000000000000000000 Magnet 00100000000011011100100000100001 58.6 00000000000000000000000000000000 186.4 00000000000000000000000000000000 820.4 00000000000000000000000000000000 consolidates 00000000000000000000000000000000 Condominium 00100000000001001001111010110000 747.8 00000000000000000000000000000000 623.5 00000000000000000000000000000000 Fox-Meyer 01000000000000000000000000000000 Permian 00100000000000000000000000000000 Vacancies 00100000000000000000000001100011 Kuehler 00100000000000000000000000000000 fearsome 00000000000000000000000000000000 interprets 00000000000000000000000000000000 semiconductor-manufacturing 00000000000000000000000000000000 lithography 00000000000000000000000000000000 wavelengths 00000000000000000000000000000000 blurry 00000000000000000000000000000000 paintbrush 00000000000000000000000000000000 stimulus 00000000000000001001011000111001 straighter 00000000000101100100101100100001 brittle 00000000000000000000000000000000 Bendix 00100000000111101101000100101000 Collision 00100000000001000011001010110111 Avoidance 00100000000111111100111000111001 Recess 00100000000000011101010001100111 course-correction 00000000000000000000000000000000 advisories 00000000000000000000000000000000 stimulator 00000000000000000000000000000000 7.38 00000000000000000000000000000000 dictatorships 00000000000000000000000000000000 Bertin 00100000000000000000000000000000 Unigesco 00100000000000000000000000000000 toy-store 00000000000000000000000000000000 Levesque 00100000000000000000000000000000 Beaubien 00100000000000000000000000000000 Geoffrion 00100000000000000000000000000000 Doherty 00100000000000000000000000000000 Rating 00100000000011111111000011000111 catalogue 00000000000000000000000000000000 Yvon 00100000000000000000000000000000 Foreign-exchange 00100000000000000000000000000000 141.60 00000000000000000000000000000000 dollar-mark 00000000000000000000000000000000 r 00000000000000000000000000000000 369.10 00000000000000000000000000000000 368.24 00000000000000000000000000000000 7.125 00000000000000000000000000000000 Schenectady 00100000000000000000000000000000 128.6 00000000000000000000000000000000 Session 00100000000111111110010001100111 69.8 00000000000000000000000000000000 908.8 00000000000000000000000000000000 fractious 00000000000000000000000000000000 less-ambitious 00000000000000000000000000000000 Emboldened 00100000000101100001110000110010 stock-trader 00000000000000000000000000000000 Holliger 00100000000000000000000000000000 tradeoff 00000000000000000000000000000000 wishful 00000000000000000000000000000000 Candace 00100000000000000000000000000000 Schroeder 00101111111111011010100010001000 relent 00000000000000000000000000000000 oboist 00000000000000000000000000000000 133.1 00000000000000000000000000000000 Roeck 00100000000000000000000000000000 pre-strike 00000000000000000000000000000000 243.4 00000000000000000000000000000000 201.2 00000000000000000000000000000000 715.1 00000000000000000000000000000000 563.8 00000000000000000000000000000000 amputation 00000000000000000000000000000000 Playboy 00100000000110101111100100100001 reorganizes 00000000000000000000000000000000 Agoglia 00100000000000000000000000000000 film-makers 00000000000000000000000000000000 Grodnik 00100000000000000000000000000000 Matheson 00100000000000000000000000000000 thrift-accounting 00000000000000000000000000000000 357.5 00000000000000000000000000000000 10.83 00000000000000000000000000000000 48.7 00000000000000000000000000000000 130.2 00000000000000000000000000000000 227.3 00000000000000000000000000000000 dispositions 00000000000000000000000000000000 5.125 00000000000000000000000000000000 457.9 00000000000000000000000000000000 Hilder 00100000000000000000000000000000 once-sporadic 00000000000000000000000000000000 12-pack 00000000000000000000000000000000 market-by-market 00000000000000000000000000000000 238.3 00000000000000000000000000000000 226.5 00000000000000000000000000000000 Third-period 00100000000000000000000000000000 2.49 00000000000000000000000000000000 whacker 00000000000000000000000000000000 19.125 00000000000000000000000000000000 earlier-announced 00000000000000000000000000000000 Beneath 00100000001010100001000000001010 news-release 00000000000000000000000000000000 restarters 00000000000000000000000000000000 barroom 00000000000000000000000000000000 Insights 00100000000110001101110101100011 beer-industry 00000000000000000000000000000000 tiff 00000000000000000000000000000000 unforgiving 00000000000000000000000000000000 premium-beer 00000000000000000000000000000000 ceding 00000000000000000000000000000000 magnetically 00000000000000000000000000000000 84.15 00000000000000000000000000000000 35442.40 00000000000000000000000000000000 914 00000000000000000000000000000000 145.45 00000000000000000000000000000000 35587.85 00000000000000000000000000000000 bullishly 00000000000000000000000000000000 begining 00000000000000000000000000000000 1,380,000 00000000000000000000000000000000 9,756 00000000000000000000000000000000 2,290 00000000000000000000000000000000 16.20 00000000000000000000000000000000 4,290 00000000000000000000000000000000 1,520 00000000000000000000000000000000 2,680 00000000000000000000000000000000 W.A. 01000000000000000000000000000000 2640 00000000000000000000000000000000 5,810 00000000000000000000000000000000 8,550 00000000000000000000000000000000 2161.9 00000000000000000000000000000000 11,390,000 00000000000000000000000000000000 1751.9 00000000000000000000000000000000 12.10 00000000000000000000000000000000 212.5 00000000000000000000000000000000 498 00000000000000000000000000000000 follow-through 00000000000000000000000000000000 26.29 00000000000000000000000000000000 Purdue 00100000000000000000000000000000 thigh 00000000000101111100110000000001 tiremaker 00000000000000000000000000000000 645 00000000000000000000000000000000 Anti-Deficiency 01000000000000000000000000000000 inks 00000000000000000000000000000000 resins 00000000000111001111001111001001 State-controlled 00100000000000000000000000000000 woodwind 00000000000000000000000000000000 339 00000000000000000000000000000000 97-1 00000000000000000000000000000000 Currier 00100000000000000000000000000000 303-107 00000000000000000000000000000000 circumvents 00000000000000000000000000000000 standoff 00000000000111100100110000100111 Silvio 00100000000000000000000000000000 ardently 00000000000000000000000000000000 church-state 00000000000000000000000000000000 chutzpah 00000000000000000000000000000000 Spaghetti 00100000000000000000000000000000 dashes 00000000000000000000000000000000 one-term 00000000000000000000000000000000 incorporating 00000000000000111101111101000000 earmarking 00000000000000000000000000000000 idiomatic 00000000000000000000000000000000 Australia-based 00100000000000000000000000000000 6.65 00000000000000000000000000000000 Servifilm 00100000000000000000000000000000 Cinematografica 00100000000000000000000000000000 Madrid-based 00100000000000000000000000000000 Hachuel 00100000000000000000000000000000 Barcelona-based 00100000000000000000000000000000 four-fold 00000000000000000000000000000000 Tiempo 00100000000000000000000000000000 Interviu 00100000000000000000000000000000 Panorama 00100000000000000000000000000000 Asensio 00100000000000000000000000000000 non-brain 00000000000000000000000000000000 Customized 00100000000000111100101010110000 Grundfest 00101111111001101100110010001000 more-volatile 00000000000000000000000000000000 400-member 00000000000000000000000000000000 caskets 00000000000000000000000000000000 1,177,000 00000000000000000000000000000000 behavioral 00000000000000000000000000000000 Care-Unit 01000000000000000000000000000000 dependency 00000000000111101010100100100111 elaborating 00000000000000000000000000000000 851,000 00000000000000000000000000000000 business-communications 00000000000000000000000000000000 Kass-Pedone 01000000000000000000000000000000 795,900 00000000000000000000000000000000 497,400 00000000000000000000000000000000 106,100 00000000000000000000000000000000 10.375 00000000000000000000000000000000 12.125 00000000000000000000000000000000 -Tokyo 01000000000000000000000000000000 Pollack 00100000001101100100111010001000 Cambrian 00101111111101010111111010101000 Davidow 00100000000000000000000000000000 Wallingford 00100000000000000000000000000000 Nacchio 00100000000000000000000000000000 Orbe 00100000000000000000000000000000 Grais 00100000000000000000000000000000 60.5 00000000000000000000000000000000 JAILED 01000000010101110100010000110010 AFRICAN-AMERICAN 01000000000000000000000000000000 Novametrix 00100000000000000000000000000000 bail-jumping 00000000000000000000000000000000 Kennewick 00100000000000000000000000000000 Gorenstein 00100000000000000000000000000000 COURTS 01000000000011000010010110110011 URGED 01000000000001001101010000110010 Orleans-based 00100000000000000000000000000000 Complex 00100000000000000110000010010000 fast-track 00000000000000000000000000000000 Cadwell 00100000000000000000000000000000 Fitzsimmons 00100000000000000000000000000000 Lehn 00100000000000000000000000000000 Fink 00101111111001110000100010001000 disinfectants 00000000000000000000000000000000 stains 00000000000000000000000000000000 Minwax 00100000000000000000000000000000 Formby 00100000000000000000000000000000 Bridgers 00100000000000000000000000000000 Widely 00100000000000100111001001110010 19.62 00000000000000000000000000000000 19.65 00000000000000000000000000000000 muzzling 00000000000000000000000000000000 Dismissing 00100000000000101100001101000000 yet-to-be-formed 00000000000000000000000000000000 AP-Dow 01000000000000000000000000000000 397 00000000000000000000000000000000 C&D 01000000000000000000000000000000 2.4225 00000000000000000000000000000000 Announced 00100000000000000001000111000010 puppet 00000000000010101101011000110000 Katharina 00100000000000000000000000000000 Zimmer 00100000000101001111000100001000 73.97 00000000000000000000000000000000 74.20 00000000000000000000000000000000 Muzzling 00100000000000000000000000000000 limb 00000000000000000000000000000000 75.75 00000000000000000000000000000000 end-of-season 00000000000000000000000000000000 car-crash 00000000000000000000000000000000 7,839 00000000000000000000000000000000 33,270 00000000000000000000000000000000 steadiness 00000000000111000011111010100111 Sucre 00100000000000000000000000000000 Denrees 00100000000000000000000000000000 Jersey-Salem 01000000000000000000000000000000 AMI 01000000000000000000000000000000 Houlian 00100000000000000000000000000000 Lokey 00100000000000000000000000000000 Zukin 00100000000000000000000000000000 blindfold 00000000000000000000000000000000 Baa3 00100000000000000000000000000000 Euroissues 00100000000000000000000000000000 floundering 00000000000000000000000000000000 Torchmark 00100000000000000000000000000000 Upchurch 00100000000000000000000000000000 S.P. 01000000000000000000000000000000 Samford 00100000000000000000000000000000 common-share 00000000000000000000000000000000 926 00000000000000000000000000000000 Unitholders 00100000000000000000000000000000 cents-a-unit 00000000000000000000000000000000 2.025 00000000000000000000000000000000 medium-grade 00000000000000000000000000000000 Beghin 00100000000000000000000000000000 Corbehem 00100000000000000000000000000000 Feldemuehle 00100000000000000000000000000000 Kaysersberg 00100000000000000000000000000000 A.T.B. 01000000000000000000000000000000 anesthetized 00000000000000000000000000000000 213.2 00000000000000000000000000000000 non-Swedish 01000000000000000000000000000000 -what 00000000000000000000000000000000 329.2 00000000000000000000000000000000 roughhewn 00000000000000000000000000000000 antimissile 00000000000000000000000000000000 carrier-based 00000000000000000000000000000000 Conferees 00100000000000000100100110110011 Midgetman 00100000000110011010001010110000 radar-eluding 00000000000000000000000000000000 Bickford 00100000000000000000000000000000 B-2s 00100000000000000000000000000000 32.3 00000000000000000000000000000000 704.4 00000000000000000000000000000000 30.25 00000000000000000000000000000000 Kloner 00100000000000000000000000000000 Nervousness 00100000000101111110111010100111 tweaking 00000000000000000000000000000000 342.50 00000000000000000000000000000000 nine-point 00000000000000000000000000000000 30-stock 00000000000000000000000000000000 320.94 00000000000000000000000000000000 Magnetic 00100000000010110010101010110000 189.52 00000000000000000000000000000000 unconscious 00000000000000000000000000000000 Disappointment 00100000000110000110111010100111 twopoint 00000000000000000000000000000000 0.44 00000000000000000000000000000000 375.92 00000000000000000000000000000000 8,930,000 00000000000000000000000000000000 superefficient 00000000000000000000000000000000 Saito 00100000000000000000000000000000 Canon 00100000000111010000111100101000 laser-beam-printer 00000000000000000000000000000000 docile 00000000000001010101010010010000 Zosen 00100000000000000000000000000000 521.4 00000000000000000000000000000000 494.8 00000000000000000000000000000000 Courtis 00100000000000000000000000000000 yet-another 00000000000000000000000000000000 51.8 00000000000000000000000000000000 unconvinced 00000000000000000000000000000000 Arai 00100000000000000000000000000000 Chiappa 00100000000000000000000000000000 marathon 00000000000000010000011000101000 35th 00000000000000000000000000000000 outlast 00000000000000000000000000000000 57-month 00000000000000000000000000000000 29-inch 00000000000000000000000000000000 Cima 00100000000000000000000000000000 Cefiro 00100000000000000000000000000000 Endo 00100000000000000000000000000000 overworking 00000000000000000000000000000000 sassy 00000000000000000000000000000000 shipbuilders 00000000000000000000000000000000 Sasebo 00100000000000000000000000000000 unmatched 00000000000000000000000000000000 prescient 00000000000000000000000000000000 subjecting 00000000000000000000000000000000 current-generation 00000000000000000000000000000000 Hajime 00100000000000000000000000000000 pricecutting 00000000000000000000000000000000 32.9 00000000000000000000000000000000 534.3 00000000000000000000000000000000 464.7 00000000000000000000000000000000 ONEIDA 01000000000000000000000000000000 Announcement 00100000000111111011110001100111 electrician 00000000000000000000000000000000 inhuman 00000000000000000000000000000000 symptom-free 00000000000000000000000000000000 compile 00000000000000000000000000000000 syrup 00000000000001011111110100100001 Pizzo 00100000000000000000000000000000 IQ 01000000000000000000000000000000 Kushnick 00100000000000000000000000000000 Pediatric 00100000000000000000000000000000 foot-dragging 00000000000000000000000000000000 DDI 01000000000000000000000000000000 twitch 00000000000111100100101100100001 88.32 00000000000000000000000000000000 puzzles 00000000000000000000000000000000 AVON 01000000000110111011010100101000 RENT-A-CAR 01000000000000000000000000000000 TRUCK 01000000000000011000001000100001 243,677 00000000000000000000000000000000 Issuance 00100000000111111101101001001111 BIG 01000000000000000000101000010000 BOARD 01000000000011000001000101010101 PLANS 01000000000111111110101000110010 77.6 00000000000000000000000000000000 1199.32 00000000000000000000000000000000 216.49 00000000000000000000000000000000 3427.39 00000000000000000000000000000000 129.48 00000000000000000000000000000000 130.73 00000000000000000000000000000000 0.0002 00000000000000000000000000000000 SAID 01000000000111111111110011000010 FAILED 01000000000011001111101000110010 activate 00000000000000000000000000000000 electromagnets 00000000000000000000000000000000 militia 00000000000111001000101100100101 16-nation 00000000000000000000000000000000 whirlwinds 00000000000000000000000000000000 hillside 00000000000000000000000000000000 excavating 00000000000000000000000000000000 Ladislav 00100000000000000000000000000000 Adamec 00100000000000000000000000000000 ex-chief 00000000000000000000000000000000 Ceramics 00100000000010001011111010110000 harmless 00000000000111000110011010010000 11,586 00000000000000000000000000000000 14,099 00000000000000000000000000000000 37,820 00000000000000000000000000000000 44,796 00000000000000000000000000000000 painless 00000000000000000000000000000000 Failures 00100000000011011110000010100111 5,791 00000000000000000000000000000000 5,502 00000000000000000000000000000000 2,046 00000000000000000000000000000000 1,892 00000000000000000000000000000000 4,300 00000000000000000000000000000000 109.25 00000000000000000000000000000000 NICHOLS 01001111111101100110100010001000 INSTITUTE 01000000000010001001010001010101 Capistrano 00100000000000000000000000000000 ill-defined 00000000000000000000000000000000 purports 00000000000000000000000000000000 repond 00000000000000000000000000000000 Stateswest 00100000000000000000000000000000 372.1 00000000000000000000000000000000 336.4 00000000000000000000000000000000 swollen 00000000010000100101101001000000 crimped 00000000000000000000000000000000 catalog-clothing-merchandiser 00000000000000000000000000000000 84%-controlled 00000000000000000000000000000000 20.375 00000000000000000000000000000000 841.5 00000000000000000000000000000000 609 00000000000000000000000000000000 executive-office 00000000000000000000000000000000 Pollo 00100000000000000000000000000000 Loco 00100000000000000000000000000000 char-broiled 00000000000000000000000000000000 brain-wave 00000000000000000000000000000000 buy-now 00000000000000000000000000000000 pray-for-growth-later 00000000000000000000000000000000 Utter 00100000000010100101110110110010 less-junky 00000000000000000000000000000000 reborn 00000000000000000000000000000000 noncash 00000000000000000000000000000000 french 00000000000000001010100100110000 friers 00000000000000000000000000000000 envisions 00000101110010000011000000010010 cash-deferred 00000000000000000000000000000000 66.9 00000000000000000000000000000000 40.21 00000000000000000000000000000000 179,032 00000000000000000000000000000000 Maggie 00100000000000000000000000000000 read-my-lips 00000000000000000000000000000000 refashioning 00000000000000000000000000000000 excoriated 00000000000000000000000000000000 obstructionist 00000000000000000000000000000000 49-member 00000000000000000000000000000000 discomfit 00000000000000000000000000000000 Consensus 00100000000111100011111101100111 civilised 00000000000000000000000000000000 unflaky 00000000000000000000000000000000 Egad 00100000000000000000000000000000 contravened 00000000000000000000000000000000 Mahathir 00100000000100111011000001001000 Mohamad 00100000000000000000000000000000 offputting 00000000000000000000000000000000 Wain 00100000000000000000000000000000 sanctioning 00000000000000000000000000000000 Follow 00100000000001111110101110110010 Association-College 01000000000000000000000000000000 Double 00100000000111111110011011000000 dusted 00000000000000000000000000000000 462.89 00000000000000000000000000000000 132.1 00000000000000000000000000000000 4,348 00000000000000000000000000000000 1,074 00000000000000000000000000000000 454.86 00000000000000000000000000000000 452.23 00000000000000000000000000000000 guardedly 00000000000000000000000000000000 Annuity 00100000000001000100010010110000 one-house 00000000000000000000000000000000 large-business 00000000000000000000000000000000 seatbelt 00000000000000000000000000000000 Biogen 00100000000110100100111100101000 495,000 00000000000000000000000000000000 395,700 00000000000000000000000000000000 Informix 00100000000000000000000000000000 810,700 00000000000000000000000000000000 Cimflex 00100000000000000000000000000000 Teknowledge 00100000000000000000000000000000 494,100 00000000000000000000000000000000 207,000 00000000000000000000000000000000 Collagen 00100000000000000000000000000000 428,000 00000000000000000000000000000000 biomedical-products 00000000000000000000000000000000 Occupational-Urgent 01000000000000000000000000000000 354,000 00000000000000000000000000000000 superagent 00000000000000000000000000000000 Lotos 00100000000000000000000000000000 Teachers 00100000000011101100111000110011 dea 00000000000000000000000000000000 lastest 00000000000000000000000000000000 grimaced 00000000000000000000000000000000 outbidding 00000000000000000000000000000000 cellar 00000000000000000000000000000000 crows 00000000000000000000000000000000 Neinas 00100000000000000000000000000000 adman 00000000000000000000000000000000 Isacsson 00100000000000000000000000000000 Soaring 00100000000000100010010001000000 contented 00000000000000000000000000000000 Norodom 00100000000000000000000000000000 Wyman 00101111111010110101000100001000 nearly-30 00000000000000000000000000000000 16.09 00000000000000000000000000000000 athlete-s 00000000000000000000000000000000 aggressiveness 00000000000010110111111010100111 Lund 00100000000000000000000000000000 Multimedia 00100000000000000000000000000000 Grimes 00100000000000000000000000000000 hard-drinking 00000000000000000000000000000000 sniped 00000000000000000000000000000000 loudly 00000000101000000000010001110010 Rivals 00100000000111100001110000110011 expounding 00000000000000000000000000000000 bicameral 00000000000000000000000000000000 90-minute 00000000000000000000000000000000 scribbled 00000000000000000000000000000000 frighteningly 00000000000000000000000000000000 243 00000000000000000000000000000000 Albertville 00100000000000000000000000000000 still-raging 00000000000000000000000000000000 VCRs 01000000000000000000000000000000 much-watched 00000000000000000000000000000000 WBBM-TV 01000000000000000000000000000000 CBS-owned 01000000000000000000000000000000 triggers 00000001010110000011000000010010 Regular 00100000000000001010010000010000 pizazz 00000000001010011110011010100111 once-grumpy 00000000000000000000000000000000 gleefully 00000000000000000000000000000000 Tattingers 00100000000000000000000000000000 belly-flopped 00000000000000000000000000000000 amenable 00000000000101011100011000110010 Klinsky 00100000000000000000000000000000 WHEC-TV 01000000000000000000000000000000 deems 00000000000000000000000000000000 auto-maker 00000000000000000000000000000000 28.36 00000000000000000000000000000000 GM-Toyota 01000000000000000000000000000000 nutty 00000000000000000000000000000000 admen 00000000000000000000000000000000 94.5 00000000000000000000000000000000 tape-delay 00000000000000000000000000000000 o'clock 00000000000000000000011001011011 ratings-getter 00000000000000000000000000000000 outlandish 00000000000000000000000000000000 NBA 01000000000000000000000000000000 Variety 00100000000111111111111101111111 13.90 00000000000000000000000000000000 media-stock 00000000000000000000000000000000 Grippo 00100000000000000000000000000000 Riely 00100000000000000000000000000000 Bosses 00100000000111000101110000110011 sneaky 00000000000000000000000000000000 qualms 00000000000000000000000000000000 right-to-privacy 00000000000000000000000000000000 Janlori 00100000000000000000000000000000 unfathomable 00000000000000000000000000000000 recordkeeping 00000000000000000000000000000000 handheld 00000000000000000000000000000000 Hiltunen 00100000000000000000000000000000 INS 01000000000111111011110000100101 Connection 00100000000111111101100000110010 attache 00000000000000000000000000000000 gizmos 00000000000000000000000000000000 we-Japanese 01000000000000000000000000000000 spying 00000000000111100111110010100111 'Big 01000000000000000000000000000000 admissible 00000000000000000000000000000000 tapings 00000000000000000000000000000000 beep 00000000000000000000000000000000 Barton 00101111111010101000000100001000 derailing 00000000000000000000000000000000 Bonomo 00100000000000000000000000000000 Englishman 00100000000000000000000000000000 Chadha 00100000000000000000000000000000 squatted 00000000000000000000000000000000 Intercepting 00100000000000000000000000000000 Ear 00100000000101101111111001100111 rustlings 00000000000000000000000000000000 eavesdrop 00000000000000000000000000000000 sampling 00000000000110011001100101100111 print-out 00000000000000000000000000000000 capabilities. 00000000000000000000000000000000 descramblers. 00000000000000000000000000000000 radius 00000000000000000000000000000000 handset 00000000000000000000000000000000 up. 00000000000000000000000000000000 recorders. 00000000000000000000000000000000 stores. 00000000000000000000000000000000 manhood 00000000000000000000000000000000 long-dominant 00000000000000000000000000000000 Intervention 00100000000111100000110001100111 McGuire 01000000000000000000000000000000 Batch 00100000000111111110011000111111 single-job 00000000000000000000000000000000 chug 00000000000000000000000000000000 JH 01000000000000000000000000000000 Upgrades 00100000001010100010001000100011 costlier 00000000000000000000000000000000 serials 00000000000000000000000000000000 89.875 00000000000000000000000000000000 Considered 00100000000101111100010000110010 displace 00000000000000010111111110110010 lorded 00000000000000000000000000000000 supercharger 00000000000000000000000000000000 11.72 00000000000000000000000000000000 staked 00000000011111010001001000110010 Grabe 00100000000000000000000000000000 passionately 00000000000000000000000000000000 magnetic-tape 00000000000000000000000000000000 occupies 00001101010110000011000000010010 1.916 00000000000000000000000000000000 Bauser 00100000000000000000000000000000 cruiser 00000000000000000000000000000000 Archer 00101111111001101100000100001000 noncommittal 00000000000000000000000000000000 aegis 00000000000111100111111000010000 mixed-up 00000000000000000000000000000000 mazes 00000000000000000000000000000000 interconnect 00000000000000000000000000000000 multiplexer 00000000000000000000000000000000 compatability 00000000000000000000000000000000 synchronous 00000000000000000000000000000000 transmission-product 00000000000000000000000000000000 Alcatel 00100000000111000110111100101000 Sonet-based 00100000000000000000000000000000 feasted 00000000000000000000000000000000 reverberated 00000000000000000000000000000000 rip-roaring 00000000000000000000000000000000 Cromwell 00101111111111011111110001001000 dawns 00000000000000000000000000000000 1.637 00000000000000000000000000000000 seven-yen 00000000000000000000000000000000 desultory 00000000000000000000000000000000 Nusbaum 00100000000000000000000000000000 Gotshal 00100000000000000000000000000000 Manges 00101111111111011101110001001000 clusters 00000000000000000000000000000000 telltale 00000000000000000000000000000000 U.S.-Philippine 01000000000000000000000000000000 Polk 00101111111110110100111000001000 Wardwell 00100000000000000000000000000000 MURDER 01000000000101111111011010100111 THREAT 01000000000111111010111100100111 Harpo 00100000000000000000000000000000 Groucho 00100000000000000000000000000000 Spillane 00100000000000000000000000000000 implicate 00000000000000000000000000000000 obstructing 00000000000000000000000000000000 lackeys 00000000000000000000000000000000 conspirator 00000000000000000000000000000000 Griesa 00100000000000000000000000000000 TRUSTEE 01000000000111011111101010110101 tackling 00000000000110000111111101000000 MONITORED 01000000011010010001110000110010 conforming 00000000001010101010111000110010 intrauterine 00000000000010010010001011100001 timorous 00000000000000000000000000000000 then-Speaker 01000000000000000000000000000000 SALT 01000000001111110101100110101000 bankruptcy-reorganization 00000000000000000000000000000000 strident 00000000000000000000000000000000 Coffield 00100000000000000000000000000000 Ungaretti 00100000000000000000000000000000 Slavin 00100000000000000000000000000000 Macari 00100000000000000000000000000000 PHILADELPHIA 01000000000111101111111001101000 Ake 00100000000000000000000000000000 vice-president 00000000000000000000000000000000 corporate-securities 00000000000000000000000000000000 Mesirov 00100000000000000000000000000000 Cramer 00100000000000000000000000000000 Jamieson 00100000000000000000000000000000 Gerd 00100000000000000000000000000000 Krick 00100000000000000000000000000000 Lipps 00100000000000000000000000000000 unfunded 00000000000111110000010000110000 carbide-products 00000000000000000000000000000000 cutting-tools 00000000000000000000000000000000 distributer 00000000000000000000000000000000 venturing 00000000000111001101100001000000 43.6 00000000000000000000000000000000 29.1 00000000000000000000000000000000 Canberra 00100000000000000000000000000000 245.3 00000000000000000000000000000000 for... 00000000000000000000000000000000 ministerial 00000000000000000000000111000001 cardiac-drug 00000000000000000000000000000000 CANCER 01000000000000000110110010100111 SOCIETY'S 01000000000000000000000000000000 72.4 00000000000000000000000000000000 NonProfit 01000000000000101100010000110000 truck-rental 00000000000000000000000000000000 55.3 00000000000000000000000000000000 ASEAN 01000000000000000000000000000000 149.3 00000000000000000000000000000000 intravenous 00000000000000101010101000110000 bankrupty-law 00000000000000000000000000000000 health-maintenance 00000000000000000000000000000000 Steelmaking 00100000000000100000011010110000 introverted 00000000000000000000000000000000 8.328 00000000000000000000000000000000 8.347 00000000000000000000000000000000 blinkers 00000000000000000000000000000000 Intelsat 00100000000111000000110100101000 VI 01000000000000000000000000000000 three-ton 00000000000000000000000000000000 whistle 00000000000111111110101000100001 Winnetka 00100000000000000000000000000000 58.75 00000000000000000000000000000000 McGregor 01000000000000000000000000000000 Congolese 00100000000000000000000000000000 Salty 00100000000000000000000000000000 microcomputer-systems 00000000000000000000000000000000 Kildare 00100000000000000000000000000000 150,000-square-foot 00000000000000000000000000000000 55-acre 00000000000000000000000000000000 Phenix-Transmission 01000000000000000000000000000000 intrastate 00000000000000000000000000000000 correspond 00000000000000000000000000000000 178.8 00000000000000000000000000000000 McKee 01001111111101110100001000001000 Excision 00100000000000000000000000000000 Mantua 00100000000000000000000000000000 slurry 00000000000000000000000000000000 memory-chip 00000000000000000000000000000000 finalists 00000000000000000010000110110011 Conspicuous 00100000000000101001000010010000 mid-1991 00000000000000000000000000000000 395,000 00000000000000000000000000000000 Mangino 00100000000000000000000000000000 EniChem 01000000000000000000000000000000 Clyde 00101111111000000110010110011000 Sparc 00100000000110101010101000100001 879 00000000000000000000000000000000 creak 00000000000000000000000000000000 invalid 00000000000010110110110110010000 censor 00000000000000000000000000000000 Herbig 00100000000000000000000000000000 Kotobuki 00100000000000000000000000000000 Lawton 00101111111000110011100010011000 Langford 00100000000000000000000000000000 Tallahassee 00100000000000000000000000000000 industrialize 00000000000000000000000000000000 permeated 00000000000000000000000000000000 constructively 00000000000000000000000000000000 passively 00000000000000000000000000000000 neglecting 00000000000000000000000000000000 synthesize 00000000000000000000000000000000 Haruki 00100000000000000000000000000000 Owens 00101111111010111100111000001000 119.2 00000000000000000000000000000000 45.4 00000000000000000000000000000000 forthrightly 00000000000000000000000000000000 obeisance 00000000000000000000000000000000 Rebuilding 00100000000100000010110001000000 anti-abortionist 00000000000000000000000000000000 vacillation 00000000000000000000000000000000 sternly 00000000000000000000000000000000 Anti-abortion 00100000000000000000000000000000 rusticated 00000000000000000000000000000000 Hoc 00100000000000011101010000100101 abortion-funding 00000000000000000000000000000000 striven 00000000000000000000000000000000 Ziyang 00100000000000000000000000000000 agonize 00000000000000000000000000000000 agonizing 00000000000000000000000000000000 vacillate 00000000000000000000000000000000 hewed 00000000000000000000000000000000 sensitivities 00000000000000000000000000000000 loquacious 00000000000000000000000000000000 close-mouthed 00000000000000000000000000000000 curtness 00000000000000000000000000000000 amplify 00000000000000000000000000000000 headlong 00000000000000000000000000000000 affirming 00000000000000000000000000000000 inauguration 00000000000000000000000000000000 arsonist 00000000000000000000000000000000 anti-flag-burning 00000000000000000000000000000000 oblique 00000000000000000000000000000000 toughen 00000000001101100110111110110010 Ruberg 00100000000000000000000000000000 cul 00000000000000000000000000000000 sac 00000000000000000000000000000000 Crippling 00100000000001010100011000010000 African-Americans 01000000000000000000000000000000 immersed 00000000000000000000000000000000 plethora 00000000000000000000000000000000 paralyzing 00000000000000000000000000000000 Easter 00100000000000101010000000100001 Seal 00100000000100100000100110110111 Melbourne 00100000000100111011101001101000 63.5 00000000000000000000000000000000 DeScenza 01000000000000000000000000000000 196.2 00000000000000000000000000000000 150.2 00000000000000000000000000000000 192.1 00000000000000000000000000000000 293.7 00000000000000000000000000000000 5.13 00000000000000000000000000000000 Excerpts 00100000000100010011110110110010 baddebt 00000000000000000000000000000000 presides 00000000001001001011000000010010 baptism 00000000000000000000000000000000 parry 00001111100001011100000010001000 dismember 00000000000000000000000000000000 dodged 00000000000000000000000000000000 interloper 00000000000000000000000000000000 Links 00100000000100111110110000100111 Fairlawn 00100000000000000000000000000000 boned 00000000000000000000000000000000 detente 00000000000111100010110010100111 pushover 00000000000111111111111110011111 Skipping 00100000000000000000000000000000 sober-faced 00000000000000000000000000000000 wood-paneled 00000000000000000000000000000000 middle-management 00000000000000000000000000000000 sushi 00000000000000000000000000000000 aspired 00000000000110100001101000110010 dabbled 00000000000000000000000000000000 zoology 00000000000000000000000000000000 frogs 00000000000000000000000000000000 unassuming 00000000000000000000000000000000 62nd 00000000000000000000000000000000 16.88 00000000000000000000000000000000 33.625 00000000000000000000000000000000 capital-draining 00000000000000000000000000000000 reared 00000000000000000000000000000000 Porkapolis 00100000000000000000000000000000 chops 00000000000000000000000000000000 nonfat 00000000000000000000000000000000 two-product 00000000000000000000000000000000 pallor 00000000000000000000000000000000 carryforwards 00000000000000000000000000000000 Grigsby 00100000000000000000000000000000 don't-con-me 00000000000000000000000000000000 vest 00000000000111110110111000000001 unbiased 00000000000000000000000000000000 proxy-solicitation 00000000000000000000000000000000 O'Boyle 01000000000000000000000000000000 Muskegon 00100000000000000000000000000000 20-page 00000000000000000000000000000000 precondition 00000000000000000000000000000000 Yigal 00100000000000000000000000000000 Arens 00100000000000000000000000000000 Deciding 00100000000011111010111000110010 premediated 00000000000000000000000000000000 perpetrated 00000000000000000000000000000000 noncombatant 00000000000000000000000000000000 subnational 00000000000000000000000000000000 clandestine 00000000000000110100010000110000 Molotov 00100000000000000000000000000000 cocktails 00000000000110101011110101100011 offshoots 00000000000000000000000000000000 intifadah 00000000000000000000000000000000 classify 00000000000000000000000000000000 Gaza 00100000000011000010001000110000 Eagles 00100000000000110111110101100011 rollercoaster 00000000000000000000000000000000 languish 00000000000000000000000000000000 uneasiness 00000000000101001110111010100111 141.57 00000000000000000000000000000000 Kuan 00100000000000000000000000000000 mark-yen 00000000000000000000000000000000 204.8 00000000000000000000000000000000 370.20 00000000000000000000000000000000 368.25 00000000000000000000000000000000 upper-crust 00000000000000000000000000000000 Chisholm 00100000000000000000000000000000 unfavorably 00000000000000000000000000000000 asset-liability 00000000000000000000000000000000 performance-related 00000000000000000000000000000000 judgmental 00000000000000000000000000000000 1,296,800 00000000000000000000000000000000 15.31 00000000000000000000000000000000 4.82 00000000000000000000000000000000 262.4 00000000000000000000000000000000 applicability 00000000000110010111011000001111 257.5 00000000000000000000000000000000 formats 00000000000000000000000000000000 seven-month-old 00000000000000000000000000000000 highlighting 00000000000000000000000000000000 blanketed 00000000000000000000000000000000 Rosenbaum 00100000000000000000000000000000 13.18 00000000000000000000000000000000 12.57 00000000000000000000000000000000 Financials 00100000000000000000000000000000 Discover 00100000000110001011110110110010 40.50 00000000000000000000000000000000 late-summer 00000000000000000000000000000000 PERIOD 01000000000111101111101001000111 Mess 00100000000111110101101101100111 op-ed 00000000000000000000000000000000 Unused 00100000101001010000001000110000 Foreclosed 00100000000100001000101001000000 Encourage 00100000000101010011111110110010 pro-rata 00000000000000000000000000000000 Develop 00100000001111111111101110110010 renter 00000000000000000000000000000000 Padget 00100000000000000000000000000000 seekers 00000000000000010000110100100011 2,888,000 00000000000000000000000000000000 2,822,000 00000000000000000000000000000000 2,853,000 00000000000000000000000000000000 Mezzogiorno 00100000000000000000000000000000 369,000 00000000000000000000000000000000 stimulative 00000000000101010101000000010000 business-machines 00000000000000000000000000000000 4.45 00000000000000000000000000000000 62.75 00000000000000000000000000000000 Operating-profit 00100000000000000000000000000000 Dies 00100000000111011111000000010010 silenced 00000000000000000000000000000000 Kearns 00100000000000000000000000000000 sledding 00000000000000000000000000000000 372.9 00000000000000000000000000000000 12.05 00000000000000000000000000000000 126.68 00000000000000000000000000000000 scrambles 00000000000000000000000000000000 gauges 00000000000000000000000000000000 Unfilled 00100000000111111000000110110000 476.14 00000000000000000000000000000000 transportation-where 00000000000000000000000000000000 figures-order 00000000000000000000000000000000 half-year 00000000000000000000000000000000 37.875 00000000000000000000000000000000 Gettysburg 00100000000000000000000000000000 Reins 00100000000111100011000011000111 Lock 00100000000100110110010110110010 Owens-Illinois 01000000000000000000000000000000 Reding 00100000000000000000000000000000 Wrighting 00100000000000000000000000000000 Erithmatic 00100000000000000000000000000000 Rost 00100000000000000000000000000000 undisciplined 00000000000000000000000000000000 Peterborough 00100000000000000000000000000000 BELL 01000000000001001011001010110000 Parrott 00100000000000000000000000000000 ashes 00000000000000000000000000000000 railways 00000000000110100110000001111001 rationalization 00000000000000000000000000000000 purhasing 00000000000000000000000000000000 Fishery 00100000000000000000000000000000 hugs 00000000000000000000000000000000 misunderstandings 00000000000000000000000000000000 Mosher 00100000000000000000000000000000 Amen 00100000000000000000000000000000 cashier 00000000000000000000000000000000 Pockets 00100000000111100011111101100011 jingling 00000000000000000000000000000000 1,214 00000000000000000000000000000000 Sosuke 00100000000000000000000000000000 Uno 00100000000111101000110100101000 Tokuo 00100000000000000000000000000000 Yamashita 00100000000000000000000000000000 doctrines 00000000000000000000000000000000 vanguard 00000000000000100011010100101000 globalism 00000000000000000000000000000000 Ohmae 00100000000000000000000000000000 magnificent 00000000000000110101000010010000 Malibu 00100000000010011011101001101000 glint 00000000000000000000000000000000 goverment 00000000000000000000000000000000 934,242 00000000000000000000000000000000 carat 00000000000000000000000000000000 Martex 00100000000000000000000000000000 pounding 00000000011101101110100001000000 inhospitable 00000000000000000000000000000000 1738.1 00000000000000000000000000000000 Fabric 00100000000101011011111010110000 surf 00000000000010000100101100100001 coarse 00000000000000000000000000000000 treasure 00000000000111000100101100100001 Zacharias 00100000000000000000000000000000 Lewala 00100000000000000000000000000000 colonialists 00000000000000000000000000000000 swath 00000000000000000000000000000000 inland 00000000000111000010111000101000 Ghost 00100000000111010110110000000001 Jackals 00100000000000000000000000000000 roam 00000000000000000000000000000000 gemsbok 00000000000000000000000000000000 sprinklers 00000000000000000000000000000000 cricket 00000000000000000000000000000000 18-hole 00000000000000000000000000000000 quisling 00000000000000000000000000000000 Agencies 00100000000100000000100100100011 desert-battle 00000000000000000000000000000000 Mechanized 00100000000000000000000000000000 anteaters 00000000000000000000000000000000 whirring 00000000000000000000000000000000 ferris 00001111111110110000100010001000 wheellike 00000000000000000000000000000000 excavator 00000000000000000000000000000000 chews 00000000000000000000000000000000 conveyor 00000000000000000000000000000000 shuttling 00000000000000000000000000000000 criss-cross 00000000000000000000000000000000 artifical 00000000000000000000000000000000 jutting 00000000000000000000000000000000 around-the-clock 00000000000000000000000000000000 maintainence 00000000000000000000000000000000 battering 00000000000000000000000000000000 northward 00000000000000000000000000000000 jetty 00000000000000000000000000000000 rusting 00000000000000000000000000000000 junkyard 00000000000000000000000000000000 driftwood 00000000000000000000000000000000 broken-down 00000000000000000000000000000000 advert 00000000000000000000000000000000 then-president 00000000000000000000000000000000 ignominiously 00000000000000000000000000000000 Bewkes 00100000000000000000000000000000 excavators 00000000000000000000000000000000 Laboring 00100000000000000000000000000000 crevices 00000000000000000000000000000000 smuggle 00000000000111101100001110110010 poked 00000000000000000000000000000000 heel 00000000000000000000000000000000 Elianti 00100000000000000000000000000000 caterer 00000000000000000000000000000000 stashed 00000000000000000000000000000000 DISASTER 01000000000111100001101101100111 STATES 01000000000000000000000101110011 mentioning 00000000000111010011001101000000 Property-tax 00100000000000000000000000000000 P-5-39 00100000000000000000000000000000 overdraft 00000000000000000000000000000000 impetuous 00000000000000000000000000000000 Reimbursement 00100000000000000001011000111001 accrues 00000000000000000000000000000000 vortex 00000000000000000000000000000000 JUST 01000000000000001100001001110010 ACRES 01000000000000000000011100001011 redefined 00000000000000000000000000000000 Sidak 00100000000000000000000000000000 15-acre 00000000000000000000000000000000 adjoining 00000000000000000000000000000000 qualifies 00000000011001000010110000110010 home-mortgage 00000000000000000000000000000000 8940061 00000000000000000000000000000000 home-acquisition 00000000000000000000000000000000 VICTIMS 01000000000111101000001010110011 indemnification 00000000000000000000000000000000 89108 00000000000000000000000000000000 89-107 00000000000000000000000000000000 hurricane-hit 00000000000000000000000000000000 benefit-plan 00000000000000000000000000000000 REPORTS 01000000000100101011010000100011 PAYMENTS 01000000000111101111101100000011 UH 01000000000000000000000000000000 HUH 01000000000000000000000000000000 unconvincing 00000000000000000000000000000000 BE 01000000000100101111100010110010 MIDDLEMAN 01000000000111101100101010110101 8934014 00000000000000000000000000000000 chipping 00000000000000000000000000000000 Gephardt 00101111111100111000011010001000 Cardin 00100000000000000000000000000000 peep 00000000000000000000000000000000 coin-operated 00000000000000000000000000000000 amusements 00000000000110101011100000110000 ninth-circuit 00000000000000000000000000000000 Acorn 00100000000000001010010100101000 convinces 00000000000000000000000000000000 lambasted 00000000000000000000000000000000 niche-itis,`` 00000000000000000000000000000000 paring 00000000000101110101011101000000 unswaggering 00000000000000000000000000000000 heart-pounding 00000000000000000000000000000000 59.6 00000000000000000000000000000000 delver 00000000000000000000000000000000 Brendel 00100000000000000000000000000000 Germont 00100000000000000000000000000000 236.79 00000000000000000000000000000000 Italianate 00100000000000000000000000000000 lilt 00000000000000000000000000000000 teutonic 00000000000000000000000000000000 baritone 00000000000000000000000000000000 Provenza 00100000000000000000000000000000 Kindertotenlieder 00100000000000000000000000000000 next-door 00000000000000000000000000000000 Lyric 00100000000000000000000000000000 unswagged 00000000000000000000000000000000 bodes 00000000000000000000000000000000 Sills 00100000000000000000000000000000 belated 00000000000000000000000000000000 limpid 00000000000000000000000000000000 Helmuth 00100000000000000000000000000000 Messa 00100000000000000000000000000000 delves 00000000000000000000000000000000 unperformed 00000000000000000000000000000000 archive 00000000000000000000000000000000 operatic 00000000000000000000000000000000 Libera 00100000000000000000000000000000 reworked 00000000000000000000000000000000 Manzoni 00100000000000000000000000000000 Requiem 00100000000000000000000000000000 now-obscure 00000000000000000000000000000000 Raimondo 00100000000000000000000000000000 Boucheron 00100000000000000000000000000000 melodious 00000000000000000000000000000000 Confutatis 00100000000000000000000000000000 Teodulo 00100000000000000000000000000000 Mabellini 00100000000000000000000000000000 Lux 00100000000000000000000000000000 aeterna 00000000000000000000000000000000 intriguingly 00000000000000000000000000000000 Gaechinger 00100000000000000000000000000000 Kantorei 00100000000000000000000000000000 Gabriela 00100000000000000000000000000000 Benackova 00100000000000000000000000000000 radiant 00000000000000000000000000000000 expressive 00000000000000000000000000000000 plaza 00000000000000000101010100000001 compatriot 00000000000000000000000000000000 Dabney 00100000000000000000000000000000 fireplaces 00000000000000010111110001100011 Idrissa 00100000000000000000000000000000 Ouedraogo 00100000000000000000000000000000 Burkina 00100000000000000000000000000000 Faso 00100000000000000000000000000000 Sakura 00100000000000000000000000000000 143,000 00000000000000000000000000000000 Yaaba 00100000000000000000000000000000 Tolentino 00100000000000000000000000000000 Telerama 00100000000000000000000000000000 deals... 00000000000000000000000000000000 festivals 00000000000101111011110101100011 redound 00000000000000000000000000000000 Valladolid 00100000000000000000000000000000 cancels 00000000000000000000000000000000 heavy-machine 00000000000000000000000000000000 Tehran 00100000000111101110101101101000 pampers 00000000000000000000000000000000 Khomeini 00100000000001000000000001000111 non-clients 00000000000000000000000000000000 urine 00000000000010001110110000100001 Tateisi 00100000000000000000000000000000 Hector 00100000000000000000000000000000 Jimenez 00100000000000000000000000000000 376.8 00000000000000000000000000000000 Excelsior 00100000000000000000000000000000 mortgaged 00000000000101110101101001000000 rethinking 00000000000101011111010001000000 preparations 00000000000011000001110100011001 maestro 00000000000000000000000000000000 Benazir 00100000000000000000000000000000 bad-news 00000000000000000000000000000000 210.2 00000000000000000000000000000000 145.2 00000000000000000000000000000000 454.6 00000000000000000000000000000000 425.4 00000000000000000000000000000000 34.25 00000000000000000000000000000000 315 00000000000000000000000000000000 Marcello 00100000000000000000000000000000 88.5 00000000000000000000000000000000 156.6 00000000000000000000000000000000 4.99 00000000000000000000000000000000 756.3 00000000000000000000000000000000 Cattrall 00100000000000000000000000000000 236.74 00000000000000000000000000000000 increase-results 00000000000000000000000000000000 price-support 00000000000000000000000000000000 54.625 00000000000000000000000000000000 Acuvue 00100000000000000000000000000000 Hismanal 00100000000000000000000000000000 once-a-day 00000000000000000000000000000000 antihistamine 00000000000000000000000000000000 Eprex 00100000000000000000000000000000 Prepulsid 00100000000000000000000000000000 gastro-intestinal 00000000000000000000000000000000 sutures 00000000000000000000000000000000 big-souled 00000000000000000000000000000000 BBC 01000000000000000000000000000000 CG 01000000000000000000000000000000 TELV 01000000000000000000000000000000 WGP 01000000000000000000000000000000 Brunswig 00100000000000000000000000000000 Laserscope 00100000000000000000000000000000 1,656,870 00000000000000000000000000000000 1,455,000 00000000000000000000000000000000 201,870 00000000000000000000000000000000 Volpe 00100000000000000000000000000000 Welty 00100000000000000000000000000000 TeleVideo 01000000000000000000000000000000 1,853,735 00000000000000000000000000000000 credit-information 00000000000000000000000000000000 lump 00000000000000000100011110110001 56.13 00000000000000000000000000000000 mellowed 00000001111010010010110000110010 credit-ratings 00000000000000000000000000000000 television-viewing 00000000000000000000000000000000 Yellow-pages 00100000000000000000000000000000 credit-data 00000000000000000000000000000000 idosyncratic 00000000000000000000000000000000 Raikes 00100000000000000000000000000000 12,281 00000000000000000000000000000000 724,579 00000000000000000000000000000000 588,800 00000000000000000000000000000000 9,232 00000000000000000000000000000000 Buchanan 00101111111000001111100010001000 406,000 00000000000000000000000000000000 2,520 00000000000000000000000000000000 6,881 00000000000000000000000000000000 longterm 00000000000110011010000000110000 excorciate 00000000000000000000000000000000 option-related 00000000000000000000000000000000 TASTY 01000000000000000000000000000000 PROFITS 01000000000111101111110000000011 942,000 00000000000000000000000000000000 74,000 00000000000000000000000000000000 four-for-one 00000000000000000000000000000000 1,068,000 00000000000000000000000000000000 44.50 00000000000000000000000000000000 SHEDDING 01000000000111011001110001000000 GLITTER 01000000000000000000000000000000 Crabb 00100000000000000000000000000000 reclaimed 00000011101011010100010000110010 11.13 00000000000000000000000000000000 50,085 00000000000000000000000000000000 Kutney 00100000000000000000000000000000 56,900 00000000000000000000000000000000 Straub 00100000000000000000000000000000 Roling 00100000000000000000000000000000 McNeill 01000000000000000000000000000000 10.125 00000000000000000000000000000000 Medieval 00100000000011000000001000110000 eons 00000000000000000000000000000000 self-awareness 00000000000000000000000000000000 shimmered 00000000000000000000000000000000 flattering 00000000001011010101010010010000 creationist 00000000000000000000000000000000 eminent 00000000000000001101101000110000 dissolving 00000000000111110111111101000000 featherless 00000000000000000000000000000000 biped 00000000000000000000000000000000 one-in-a-million 00000000000000000000000000000000 Wonderful 00100000000010001100011010010000 improbability 00000000000000000000000000000000 1909 00000000000000000000000000000000 Rockies 00100000000111101100011001000101 240-page 00000000000000000000000000000000 frolicked 00000000000000000000000000000000 Doolittle 00100000000000000000000000000000 Walcott 00100000000000000000000000000000 ancestral 00000000000000000000000000000000 traditionalist 00000000000000000000000000000000 hardest-hit 00000000000000000000000000000000 fossils 00000000000000000000000000000000 shoehorned 00000000000000000000000000000000 Dakotas 00100000000000000000000000000000 reinterpretation 00000000000000000000000000000000 squashed 00000000000000000000000000000000 corresponded 00000000000000000000000000000000 trio 00000000000111011101100101100111 wondrous 00000000000000000000000000000000 beasties 00000000000000000000000000000000 lend-lease 00000000000000000000000000000000 Hallucigenia 00100000000000000000000000000000 descriptions 00000000000110101101100100101111 festooning 00000000000000000000000000000000 chelicerates 00000000000000000000000000000000 uniramous 00000000000000000000000000000000 appendages 00000000000000000000000000000000 prosoma 00000000000000000000000000000000 oddities 00000000000000000000000000000000 evidently 00000001001100000000001001110010 disaster-assistance 00000000000000000000000000000000 winnowing 00000000000000000000000000000000 fittest 00000000000000000000000000000000 mammalian 00000000000000000000000000000000 forerunners 00000000000000000000000000000000 lucked 00000000000000000000000000000000 extraterrestrial 00000000000000000000000000000000 merrily 00000000000000000000000000000000 carnivores 00000000000000000000000000000000 penises 00000000000000000000000000000000 Pikaia 00100000000000000000000000000000 exhilarating 00000000000000000000000000000000 existentialist 00000000000000000000000000000000 curiosity 00000000000100010110111010100111 boorish 00000000000000000000000000000000 Homo 00100000000000000000000000000000 sapiens 00000000000000000000000000000000 earthly 00000000000000000000000000000000 dominion 00000000000000000111000100101000 thematic 00000000000000000000000000000000 Gouldoid 00100000000000000000000000000000 paleontologically 00000000000000000000000000000000 Literary 00100000000001100000000000110000 codification 00000000000000000000000000000000 deliriously 00000000000000000000000000000000 land-idling 00000000000000000000000000000000 .to 00000000000000000000000000000000 clarifies 00000000000000000000000000000000 tax-fraud 00000000000000000000000000000000 Dalldorf 00100000000000000000000000000000 Beermann 00100000000000000000000000000000 bananas 00000000000110110100111001100011 Windy 00100000000001111000011010101000 nine-cent 00000000000000000000000000000000 Quentin 00101111111000001101100010011000 Kopp 00100000000000000000000000000000 earthquake-triggered 00000000000000000000000000000000 viaduct 00000000000000000000000000000000 99.60 00000000000000000000000000000000 99.64 00000000000000000000000000000000 Boatmen 00100000000111000101111110101000 99.821 00000000000000000000000000000000 9.275 00000000000000000000000000000000 99.555 00000000000000000000000000000000 99.661 00000000000000000000000000000000 Harriton 00100000000000000000000000000000 Linsey 00100000000000000000000000000000 Youngberg 00100000000000000000000000000000 back-pay 00000000000000000000000000000000 flashback 00000000000000000000000000000000 15,015,000 00000000000000000000000000000000 24,985,000 00000000000000000000000000000000 Lifland 00100000000000000000000000000000 2003-2008 00000000000000000000000000000000 overturning 00000000000000000000000000000000 86,525,000 00000000000000000000000000000000 7.05 00000000000000000000000000000000 6.85 00000000000000000000000000000000 suject 00000000000000000000000000000000 Hanwa 00100000000000000000000000000000 Two-part 00100000000000000000000000000000 Yamatane 00100000000000000000000000000000 Sanraku 00100000000000000000000000000000 Distribution 00100000000000000001001001100001 Miyoshi 00100000000000000000000000000000 Fokker 00100000000010001111111100101000 Minikes 00100000000000000000000000000000 Kirkendall 00100000000000000000000000000000 bugaboo 00000000000000000000000000000000 results-oriented 00000000000000000000000000000000 19,000 00000000000000000000000000000000 hassles 00000000000000000000000000000000 Paperwork 00100000000000000001111000111001 Gerardo 00100000000000000000000000000000 mounds 00000000000000000000000000000000 bulk-mail 00000000000000000000000000000000 riles 00001110001010000011000000010010 unscientific 00000000000000000000000000000000 12,275 00000000000000000000000000000000 TechDesign 01000000000000000000000000000000 telecommunication 00000000000000000000000000000000 238,000-circulation 00000000000000000000000000000000 pre-1933 00000000000000000000000000000000 30,180 00000000000000000000000000000000 car-leasing 00000000000000000000000000000000 irks 00000000011101110001000000010010 ENVIRONMENTAL 01000000000001000101000000110000 REGULATIONS 01000000000000000011111100100011 Reproduction 00100000000101011110011010100111 WITHHOLDING 01000000000110110000011100010000 pre-1917 00000000000000000000000000000000 one-newspaper 00000000000000000000000000000000 firm. 00000000000000000000000000000000 EMPLOYEE 01000000000000000000000000110101 MANUALS 01000000000111111000110100100011 Revising 00100000000101111011011101000000 Giguiere 00100000000000000000000000000000 Fresno 00100000000101001111101001101000 PENSION 01000000000000000001111110110000 PROFIT-SHARING 01000000000000000000000000000000 Yearly 00100000000001000101000101010000 mare 00000000000000000000000000000000 brood 00000000000000000000000000000000 RECORDS 01000000000010010110001000100011 senses 00000000000101101111000000010010 Jennie 00100000000000000000000000000000 Repertory 00100000000000000000000000000000 Default 00100000000111101111010101010111 Callas 00100000000000000000000000000000 horse-breeding 00000000000000000000000000000000 deconstructed 00000000000000000000000000000000 Galloway 00100000000000000000000000000000 42,455 00000000000000000000000000000000 iconoclastic 00000000000000000000000000000000 prize-winning 00000000000000000000000000000000 off-Broadway 01000000000000000000000000000000 anthology 00000000000000000000000000000000 Bertolt 00100000000000000000000000000000 Poetry 00100000001101100101110010100111 Maxim 00100000000000000000000000000000 bourgeois-bashing 00000000000000000000000000000000 Horses 00100000000010111101110101100011 Hers 00100000000000000000000000000000 Strehler 00100000000000000000000000000000 Ariane 00100000000000000000000000000000 Mnouchkine 00100000000000000000000000000000 Walking 00100000010111110110100001000000 antirealistic 00000000000000000000000000000000 proletarian 00000000000000000000000000000000 Chekhovian 00100000000000000000000000000000 humanism 00000000000000000000000000000000 penned 00000000000000000000000000000000 1904 00000000000000000000000000000000 allrightniks 00000000000000000000000000000000 dalliances 00000000000000000000000000000000 Wisely 00100000111001100001001001110010 samovars 00000000000000000000000000000000 languorous 00000000000000000000000000000000 beige 00000000001011110010001000110000 rumpled 00000000000000000000000000000000 boaters 00000000000000000000000000000000 poles 00000000000110100000111000110011 naturalistic 00000000000000000000000000000000 backfires 00000000000000000000000000000000 mannered 00000000000000000000000000000000 Sellars 00100000000000000000000000000000 manipulates 00000000000000000000000000000000 staircases 00000000000000000000000000000000 Stratas 00100000000000000000000000000000 precipices 00000000000000000000000000000000 gymnastic 00000000000000000000000000000000 owner-bred 00000000000000000000000000000000 spout 00000000000000000000000000000000 bon 00000000000000000000000000000000 mots 00000000000000000000000000000000 rat-a-tat-tat 00000000000000000000000000000000 pacing 00000000000000000000000000000000 Laugh 00100000000100110101010110110010 ideologies 00000000000000000000000000000000 richness 00000000000000000000000000000000 scuffle 00000000000000000000000000000000 ensemble 00000000001111110111111001100111 aural 00000000000000000000000000000000 collage 00000000000000000000000000000000 Debussy 00100000000000000000000000000000 Rachmaninoff 00100000000000000000000000000000 Ezra 00100000000000000000000000000000 ex-accountant 00000000000000000000000000000000 fondest 00000000000000000000000000000000 surmounting 00000000000000000000000000000000 cliche 00000000000000000000000000000000 illuminate 00000000000000000000000000000000 faxed 00000000000000000000000000000000 Classics 00100000000011001101110101100011 Vass 00100000000000000000000000000000 Lvovna 00100000000000000000000000000000 Strickland 00100000000000000000000000000000 long-suffering 00000000000000000000000000000000 Varvara 00100000000000000000000000000000 tiresome 00000000000000000000000000000000 whiner 00000000000000000000000000000000 amuse 00000000000000000000000000000000 Janice 00100000000000000000000000000000 Duclos 00100000000000000000000000000000 Marni 00100000000000000000000000000000 Zamislov 00100000000000000000000000000000 paralegal 00000000000000000000000000000000 hamming 00000000000000000000000000000000 seducing 00000000000000000000000000000000 Becca 00100000000000000000000000000000 Lish 00100000000000000000000000000000 bosom 00000000000000000000000000000000 MORGAN 01001111111111111000100000101000 STANLEY 01001111111000000110001001001000 STODGY 01000000001010011100011010010000 ungentlemanly 00000000000000000000000000000000 Nickle 00100000000000000000000000000000 Ind.-investment 00100000000000000000000000000000 three-hour 00000000000000000000000000000000 1917 00000000000000000000000000000000 F.J. 01000000000000000000000000000000 merger-acquisition 00000000000000000000000000000000 Slote 00100000000000000000000000000000 shrewdly 00000000000000000000000000000000 warmly 00000000011001100001001001110010 ensued 00000000000000000000000000000000 1984-1989 00000000000000000000000000000000 old-name 00000000000000000000000000000000 Kerensky 00100000000000000000000000000000 Revitalized 00100000000000000000000000000000 counteracted 00000000000000000000000000000000 dogging 00000000000000000000000000000000 profit-seeking 00000000000000000000000000000000 Coincident 00100000000000000000000000000000 593 00000000000000000000000000000000 518.7 00000000000000000000000000000000 sideline-business 00000000000000000000000000000000 244.2 00000000000000000000000000000000 repossesed 00000000000000000000000000000000 pre-Communist 01000000000000000000000000000000 shelling 00000000000000000000000000000000 79.1 00000000000000000000000000000000 Changes 00100000000111101111111000100011 HOBBY 01000000000111101110101100100001 HIS 01000000000000000000000000000100 two-hundredths 00000000000000000000000000000000 8.29 00000000000000000000000000000000 intimidated 00000000001100000001110000110010 RODE 01000000001101001011000000010010 oneyear 00000000000000000000000000000000 denomination 00000000000000000000000000000000 6.96 00000000000000000000000000000000 hundredth 00000000000111111111000101111111 HE 01000000000000000000001111110010 170,000 00000000000000000000000000000000 PepsiCola 01000000000000000000000000000000 minincomputer 00000000000000000000000000000000 Niche-itis 00100000000000000000000000000000 hideous 00000000000000000000000000000000 Mfg. 00100000000000000000000000000000 condensers 00000000000000000000000000000000 Plymouth 00100000000010010000001000110000 casualty-loss 00000000000000000000000000000000 divestiture-related 00000000000000000000000000000000 Munching 00100000000000000000000000000000 free-for-all 00000000000000000000000000000000 it'controlled 00000000000000000000000000000000 manned 00000000000001111001101001000000 Nicolas 00100000000000000000000000000000 Cage 00100000000100110100000000001000 carton 00000000000000000000000000000000 8:45 00000000000000000000000000000000 148-a-share 00000000000000000000000000000000 9:15 00000000000000000000000000000000 red-white-and-blue 00000000000000000000000000000000 sneakers 00000000001111001011110101100011 specialist-firm 00000000000000000000000000000000 tugging 00000000000000000000000000000000 crammed 00000001010011110110010000110010 late-day 00000000000000000000000000000000 last-second 00000000000000000000000000000000 Leaving 00100000000111111111101101000000 Domingo 00100000000000000000000000000000 3.21 00000000000000000000000000000000 16-month 00000000000000000000000000000000 Wigglesworth 00100000000000000000000000000000 1,224 00000000000000000000000000000000 Fending 00100000000000000000000000000000 Placido 00100000000000000000000000000000 FELLED 01000000000000000000000000000000 108.2 00000000000000000000000000000000 173.3 00000000000000000000000000000000 HUGO 01000000000011001011111100001000 Howson-Algraphy 01000000000000000000000000000000 241.7 00000000000000000000000000000000 bluebloods 00000000000000000000000000000000 individual-retirement-account 00000000000000000000000000000000 Thoroughbred 00100000000001011000001000110000 Ky.-based 00100000000000000000000000000000 tire-kickers 00000000000000000000000000000000 aghast 00000000000000000000000000000000 BALANCES 01000000000100001010001100000011 romancing 00000000000000000000000000000000 lookee-loos 00000000000000000000000000000000 unaltered 00000000000000000000000000000000 Karnak 00100000000000000000000000000000 Nile 00100000000000000000000000000000 galloping 00000000000000000000000000000000 gloats 00000000000111110100011111000010 45-acre 00000000000000000000000000000000 ungainly 00000000000000000000000000000000 big-risk 00000000000000000000000000000000 Mihalek 00100000000000000000000000000000 newsstand 00000000000000000000000000000000 stallion 00000000000000000000000000000000 taming 00000000000000000000000000000000 yearlings 00000000000000000000000000000000 544,681 00000000000000000000000000000000 395,374 00000000000000000000000000000000 elan 00000000000000000000000000000000 Glossy 00100000011110010000001000110000 racetracks 00000000000000000000000000000000 gush 00000000000000000000000000000000 limelight 00000000000111110110011110110011 high-society 00000000000000000000000000000000 schmoozing 00000000000000000000000000000000 Pedigrees 00100000000000000000000000000000 parimutuels 00000000000000000000000000000000 pageantry 00000000000000000000000000000000 Headley 00100000000000000000000000000000 fifth-generation 00000000000000000000000000000000 nags 00000000000000000000000000000000 MILEAGE 01000000000000001000111000111001 neophytes 00000000000000000000000000000000 filly 00000000000000000000000000000000 splints 00000000000000000000000000000000 racetrack 00000000000000000000000000000000 uncensored 00000000000000000000000000000000 menace 00000000000000000000000000000000 yearling 00000000000000000000000000000000 BUELL 01000000000000000000000000000000 Buell 00100000000000000000000000000000 stampings 00000000000000000000000000000000 Rosenberg 00101111111100101010100010001000 foreign-stock 00000000000000000000000000000000 2.39 00000000000000000000000000000000 884 00000000000000000000000000000000 897.2 00000000000000000000000000000000 profit-margin 00000000000000000000000000000000 10-point 00000000000000000000000000000000 uniformity 00000000000000000000000000000000 28.2 00000000000000000000000000000000 Trailer 00100000000001110100001000100001 attest 00000000000000000000000000000000 dullish 00000000000000000000000000000000 excutives 00000000000000000000000000000000 Cahoon 00100000000000000000000000000000 cocotte 00000000000000000000000000000000 OPPENHEIMER 01001111111110110111111010101000 PARTNERSHIP 01000000000110101111100011110101 36.25 00000000000000000000000000000000 67.7 00000000000000000000000000000000 multistate 00000000000000000000000000000000 725.8 00000000000000000000000000000000 595 00000000000000000000000000000000 389 00000000000000000000000000000000 less-developed-country 00000000000000000000000000000000 balkanized 00000000000000000000000000000000 540.9 00000000000000000000000000000000 503.1 00000000000000000000000000000000 Singleton 00101111111001101010110010001000 472.5 00000000000000000000000000000000 461.9 00000000000000000000000000000000 Ridder 00100000000111110101001111001011 ALBERTA 01000000000111100101101001101000 510.6 00000000000000000000000000000000 briefs 00001111111110011111101110110000 summarizing 00000001110010010000000000001010 tottering 00000000000000000000000000000000 136-page 00000000000000000000000000000000 then-Air 01000000000000000000000000000000 railcar 00000000000000000000000000000000 overcharges 00000000000111110011100010100111 erroneously 00000000000000000000000000000000 familiarize 00000000000000000000000000000000 self-policing 00000000000000000000000000000000 RIGHTS 01000000000100000010000100100111 rabbinical 00000000000000000000000000000000 acquistion 00000000000000000000000000000000 solid-state 00000000000000000000000000000000 Ordnance 00100000001100100000011010110000 TAXPAYERS 01000000000111101100111000110011 51.23 00000000000000000000000000000000 2611.68 00000000000000000000000000000000 CBI 01000000000000000000000000000000 1739.3 00000000000000000000000000000000 1099 00000000000000000000000000000000 recommendatons 00000000000000000000000000000000 payroll-tax 00000000000000000000000000000000 Inexplicably 00100000000000000000000000000000 58.97 00000000000000000000000000000000 35526.55 00000000000000000000000000000000 17.92 00000000000000000000000000000000 35544.47 00000000000000000000000000000000 aria 00000000000000000000000000000000 2681.22 00000000000000000000000000000000 Toshiyuki 00100000000000000000000000000000 Nishimura 00100000000000000000000000000000 midcapitalization 00000000000000000000000000000000 demand-related 00000000000000000000000000000000 highpriced 00000000000000000000000000000000 5,900 00000000000000000000000000000000 8,590 00000000000000000000000000000000 TDK 01000000000000000000000000000000 5,960 00000000000000000000000000000000 7,440 00000000000000000000000000000000 15.85 00000000000000000000000000000000 1507.37 00000000000000000000000000000000 Cutting 00100000000111011001011101000000 346 00000000000000000000000000000000 CDU 01000000000000000000000000000000 37-hour 00000000000000000000000000000000 544 00000000000000000000000000000000 710.5 00000000000000000000000000000000 543.5 00000000000000000000000000000000 Uneasiness 00100000000101001110111010100111 Ne 00100000000000000000000000000000 Creditbank 00100000000000000000000000000000 Extraordinary 00100000000000000000010100010000 2163.2 00000000000000000000000000000000 discimination 00000000000000000000000000000000 LaWare 01001111111110110010100010001000 one-country 00000000000000000000000000000000 3,437 00000000000000000000000000000000 37,000 00000000000000000000000000000000 sports-oriented 00000000000000000000000000000000 open-end 00000000000000000000000000000000 oblivion 00000000000000000000000000000000 monopolizing 00000000000000000000000000000000 awed 00000000000000000000000000000000 cable-programming 00000000000000000000000000000000 Nite 00100000000000000000000000000000 230,000 00000000000000000000000000000000 non-exclusive 00000000000000000000000000000000 realignments 00000000000000000000000000000000 intensifier 00000000000000000000000000000000 night-vision 00000000000000000000000000000000 discerning 00000000000000000000000000000000 Optic-Electronic 01000000000000000000000000000000 Turandot 00100000000000000000000000000000 near-monopolies 00000000000000000000000000000000 spruce 00000000000000000000000000000000 Terminal 00100000000110100100111000000001 Long-debated 00100000000000000000000000000000 Boheme 00100000000000000000000000000000 142.2 00000000000000000000000000000000 4.22 00000000000000000000000000000000 40.125 00000000000000000000000000000000 Karos 00100000000000000000000000000000 heavier-than-normal 00000000000000000000000000000000 free-travel 00000000000000000000000000000000 scales 00000000000110000110111110000011 OVERHAUL 01000000000111111111010100110111 grief 00000000000000001001110010100111 PENALTY 01000000000000000011000001100111 Turns 00100000000111110001001000110010 over-magazined 00000000000000000000000000000000 93.9 00000000000000000000000000000000 bevy 00000000000000000000000000000000 fullscale 00000000000000000000000000000000 everlasting 00000000000100011100110100010000 pitchmen 00000000000000000000000000000000 Miser 00100000000000000000000000000000 bulb 00000000000001010100001000100001 Teleflora 00100000000000000000000000000000 Bouquet 00100000000000000000000000000000 Linus 00100000000000000000000000000000 cast-proof 00000000000000000000000000000000 415.6 00000000000000000000000000000000 Sharing 00100000010000000010110001000000 Rejoins 00100000000000000000000000000000 fuzzier 00000000000000000000000000000000 92.9 00000000000000000000000000000000 smother 00000000000000000000000000000000 under-reported 00000000000000000000000000000000 1. 00000000000000000000000000000000 283.2 00000000000000000000000000000000 268.6 00000000000000000000000000000000 PROMOTION 01000000000111101111001001100001 Boy 00100000000111101110000010110101 Specially 00100000000111001111001001110010 NZI 01000000000000000000000000000000 shortterm 00000000000000000000000000000000 1988-return 00000000000000000000000000000000 fundamantal 00000000000000000000000000000000 louis 00000000000111100111000001001000 purpose... 00000000000000000000000000000000 good-quality 00000000000000000000000000000000 Grosse 00100000000000000000000000000000 Hasbrouk 00100000000000000000000000000000 Benz 00100000000000001000000000101001 840,000 00000000000000000000000000000000 35,000-to-$50,000 00000000000000000000000000000000 82,348 00000000000000000000000000000000 Sybil 00100000000000000000000000000000 110.4 00000000000000000000000000000000 248,279 00000000000000000000000000000000 188,726 00000000000000000000000000000000 323.2 00000000000000000000000000000000 305.7 00000000000000000000000000000000 1,120,317 00000000000000000000000000000000 Measurement 00100000000010101000100001100001 pro-consumption 00000000000000000000000000000000 motor-vehicle 00000000000000000000000000000000 Taxpayer 00100000000011111010111000100001 re-evaluating 00000000000000000000000000000000 shocker 00000000000000000000000000000000 Lillo 00100000000000000000000000000000 Diller 00100000000000000000000000000000 Bowne 00100000000000000000000000000000 Tassinari 00100000000000000000000000000000 Makoto 00100000000000000000000000000000 terminating 00000000000110101101011101000000 meat-hungry 00000000000000000000000000000000 801,835 00000000000000000000000000000000 orchestrating 00000000000111010001111101000000 Flush 00100000000101111101100000110010 Jumping 00100000000110100111100001000000 2141.7 00000000000000000000000000000000 retail-banking 00000000000000000000000000000000 20-bond 00000000000000000000000000000000 News-American 01000000000000000000000000000000 branching 00000000000000000000000000000000 dipping 00000000000001100011100001000000 car-parking 00000000000000000000000000000000 pungent 00000000000000000000000000000000 Bertrand 00100000000000000000000000000000 M.R. 01000000000000000000000000000000 d'Exploitation 01000000000000000000000000000000 Tabacs 00100000000000000000000000000000 Allumettes 00100000000000000000000000000000 now-evident 00000000000000000000000000000000 461.6 00000000000000000000000000000000 FFr27.68 01000000000000000000000000000000 billion-a 00000000000000000000000000000000 cafes 00000000000000000000000000000000 tabacs 00000000000000000000000000000000 Bucaramanga 00100000000000000000000000000000 G.O. 01000000000000000000000000000000 Belin 00100000000000000000000000000000 Match 00100000010111111111110110110010 Brown-tobacco 00100000000000000000000000000000 relaunch 00000000000000000000000000000000 Unsuspecting 00100000000000011101101000110000 slide-packs 00000000000000000000000000000000 55,500 00000000000000000000000000000000 Engraph 00100000000000000000000000000000 Vanguardia 00100000000000000000000000000000 AUDITS 01000000000111010010001000100011 Pardus 00100000000000000000000000000000 conforms 00000000000000000000000000000000 Relying 00100000000111110000100000110010 ENGRAPH 01000000000000000000000000000000 protester 00000000000000000000000000000000 Belz 00100000000000000000000000000000 Mandina 00100000000000000000000000000000 overruling 00000000000000000000000000000000 bottlenecks 00000000000111101100011000100011 21-year-old 00000000000000000000000000000000 Dodson 00100000000000000000000000000000 wrongfully 00000000010101100001001001110010 imprisoning 00000000000000000000000000000000 dear 00000000000001010010011010010000 INTENSIVE 01000000000000100100010100010000 state-directed 00000000000000000000000000000000 241 00000000000000000000000000000000 Wheeland 00100000000000000000000000000000 66.50 00000000000000000000000000000000 naivete 00000000000110001010111010100111 expanse 00000000000000000000000000000000 Beheading 00100000000000000000000000000000 stabbing 00000000000000000000000000000000 interchangeable 00000000000000000000000000000000 subpoenaed 00000100001011010100010000110010 Issak 00100000000000000000000000000000 Ochoa 00100000000000000000000000000000 4.27 00000000000000000000000000000000 Guns 00100000000110101111110101100011 horrific 00000000000000000000000000000000 painstakingly 00000000000000000000000000000000 Guevara 00100000000000000000000000000000 283.9 00000000000000000000000000000000 Che 00100000000000000000000000000000 Mutinies 00100000000000000000000000000000 wrack 00000000000000000000000000000000 Desperate 00100000000000100000011010010000 Movement 00100000000110111111101001100111 Mogadishu 00100000000000000000000000000000 Seventy 00100000000100111111000011000000 self-declared 00000000000000000000000000000000 Mareham 00100000000000000000000000000000 corn-buying 00000000000000000000000000000000 Aden 00100000000000000000000000000000 one-story 00000000000000000000000000000000 Andean 00100000000000000000000000000000 nationals 00000000000111111110100000110011 anarchy 00000000000000000000000000000000 3.89 00000000000000000000000000000000 Soviet-backed 00100000000000000000000000000000 Hammerton 00100000000000000000000000000000 humanist 00000000000000000000000000000000 Mariam 00100000000000000000000000000000 airfields 00000000000000000000000000000000 reverence 00000000000000000000000000000000 grandmothers 00000000000000000000000000000000 Ravenswood 00100000000000000000000000000000 Wollo 00100000000000000000000000000000 indecipherable 00000000000000000000000000000000 mythic 00000000000000000000000000000000 Dese 00100000000000000000000000000000 Assab 00100000000000000000000000000000 tete-a-tete 00000000000000000000000000000000 froze 00000000001111000101010000110010 313.2 00000000000000000000000000000000 Asmara 00100000000000000000000000000000 Trafficking 00100000000111110101011100100101 Davenport 00100000000000000000000000000000 Malta 00100000000000000000000000000000 bombardment 00000000000000000000000000000000 Soviet-supplied 00100000000000000000000000000000 shorthand 00000000000000000000000000000000 shipboard 00000000000000011101110000110000 Clintonville 00100000000000000000000000000000 Considering 00100000000010000000010101000000 tenuous 00000000000011000101110110010000 strategically 00000000100000101000000001110010 post-Barre 01000000000000000000000000000000 cash-and-stock 00000000000000000000000000000000 concomitantly 00000000000000000000000000000000 Sudan 00100000000110010100111101101000 Byzantine 00100000000000011101000010010000 Emperor 00100000000111100111111000000001 Selassie 00100000000000000000000000000000 covertly 00000000000000000000000000000000 ability... 00000000000000000000000000000000 Bainbridge 00100000000000000000000000000000 Surrender 00100000000100111111110110110010 Starve 00100001111101111101010110110010 Famine 00100000000111001011010010100111 Westview 00100000000000000000000000000000 Lisbon 00100000000000000000000000000000 Translant 00100000000000000000000000000000 Cucamonga 00100000000000000000000000000000 missile-launch 00000000000000000000000000000000 MX-missile 01000000000000000000000000000000 19.1 00000000000000000000000000000000 armored-vehicle 00000000000000000000000000000000 Analytic 00100000000000000000000000000000 Shalom 00100000000000000000000000000000 0.628394 00000000000000000000000000000000 3-a-share 00000000000000000000000000000000 Salaam 00100000000000000000000000000000 multisided 00000000000000000000000000000000 231,405 00000000000000000000000000000000 717,000 00000000000000000000000000000000 before-and-after 00000000000000000000000000000000 oil-price 00000000000000000000000000000000 corral 00000000000000000000000000000000 sidetrack 00000000000000000000000000000000 Africans 00100000000101111110010101101000 Herald-American 01000000000000000000000000000000 softens 00000000000000000000000000000000 Issam 00100000000000000000000000000000 Midsized 00100000001000111000001010110000 Khalifa 00100000000000000000000000000000 Al-Sabah 01000000000000000000000000000000 delicately 00000000000000000000000000000000 halfheartedly 00000000000000000000000000000000 doled 00000000000000000000000000000000 feminine-care 00000000000000000000000000000000 cheater 00000000000000000000000000000000 rata 00000000011000111101000101010000 slipshod 00000000000000000000000000000000 Franklin-Trout 01000000000000000000000000000000 Jo 00100000000000000000000000000000 cornerstones 00000000000000000000000000000000 Hornets 00100000000000000000000000000000 90.5 00000000000000000000000000000000 piglet 00000000000000000000000000000000 interestingly 00000000000000000000000000000000 Cols 00100000000000000000000000000000 Bleus 00100000000000000000000000000000 second-in-command 00000000000000000000000000000000 catbird 00000000000000000000000000000000 Regarded 00100000000101000010110000110010 platoon 00000000000111111111000110010000 108.8 00000000000000000000000000000000 barns 00000000000000000000000000000000 Pro-forma 00100000000000000000000000000000 286.6 00000000000000000000000000000000 entree 00000000000111101010110000100001 Owning 00100000000001010011111101000000 inflame 00000000000000000000000000000000 Serge 00100000000000000000000000000000 roomful 00000000000000000000000000000000 Chevenement 00100000000000000000000000000000 luxury-suite 00000000000000000000000000000000 modernizing 00000000000101101101011101000000 F18s 00100000000000000000000000000000 SUPREME 01000000000111111111110111100101 80-player 00000000000000000000000000000000 62,872 00000000000000000000000000000000 290,782 00000000000000000000000000000000 2,052.10 00000000000000000000000000000000 Halas 00100000000000000000000000000000 309,381 00000000000000000000000000000000 438,845 00000000000000000000000000000000 55.1 00000000000000000000000000000000 Swire 00100000000000000000000000000000 gas-tax-increasing 00000000000000000000000000000000 -presumably 00000000000000000000000000000000 McCaskey 01000000000000000000000000000000 often-disparaged 00000000000000000000000000000000 CAAC 01000000000000000000000000000000 renegotiating 00000000000000000000000000000000 361.5 00000000000000000000000000000000 11.79 00000000000000000000000000000000 A330-300s 00100000000000000000000000000000 Hung 00100000000100001001001000110010 Kai 00100000000000000101101100110010 fuel-efficient 00000000000000000000000000000000 Tristars 00100000000000000000000000000000 Fierce 00100000000000110000000000010000 passports 00000000000000000000000000000000 stopover 00000000000111001011001011100111 gas-tax 00000000000000000000000000000000 134,550 00000000000000000000000000000000 commensurate 00000000000000000000000000000000 long-canceled 00000000000000000000000000000000 reincorporated 00000000000000000000000000000000 quake-relief 00000000000000000000000000000000 lifeblood 00000000000000000000000000000000 Dragon 00100000000000000000000000000000 2.15-per-unit 00000000000000000000000000000000 9.84 00000000000000000000000000000000 scurry 00000000000000000000000000000000 steaks 00000000000000000000000000000000 Bonuses 00100000000111101110000100000011 -Hitachi 01000000000000000000000000000000 spandex 00000000000000000000000000000000 Veatch 00100000000000000000000000000000 jogs 00000000000000000000000000000000 headphones 00000000000000000000000000000000 jauntily 00000000000000000000000000000000 Minicar 00100000000000000000000000000000 swerve 00000000000000000000000000000000 16-hour 00000000000000000000000000000000 Simeon 00100000000000000000000000000000 steers 00000000000111001011000000010010 Cray* 00100000000000000000000000000000 stools 00000000000000000000000000000000 kneaded 00000000000000000000000000000000 masseuses 00000000000000000000000000000000 folksy 00000000000000000000000000000000 C-90 00100000000000000000000000000000 saunas 00000000000111111111111111101101 tubs 00000000000000000000000000000000 -twice 00000000000000000000000000000000 croissants 00000000000000000000000000000000 brie 00000000000000000000000000000000 mousse 00000000000000000000000000000000 torts 00000000000000000000000000000000 15-pound 00000000000000000000000000000000 O'Shea 01000000000000000000000000000000 acupuncturist 00000000000000000000000000000000 yoga 00000000000000000000000000000000 twangy 00000000000000000000000000000000 scented 00000000000000000000000000000000 15-minute 00000000000000000000000000000000 scavenger 00000000000000000000000000000000 post-earthquake 00000000000000000000000000000000 barley 00000000000111111110101110110000 color-coded 00000000000000000000000000000000 additionally 00000000000111111011101011101000 yellows 00000000000000000000000000000000 grimness 00000000000000000000000000000000 pillowcases 00000000000000000000000000000000 Renaissance-style 00100000000000000000000000000000 one-quarter-cent 00000000000000000000000000000000 stereos 00000000000000000000000000000000 brooch 00000000000000000000000000000000 unbroken 00000000000000000000000000000000 still-ticking 00000000000000000000000000000000 elbows 00000000000000000000000000000000 restricted-entry 00000000000000000000000000000000 reunite 00000000000000000000000000000000 pets 00000000000110011011110000110011 lampposts 00000000000000000000000000000000 Fillmore 00100000000000000000000000000000 cat 00000000000111110010010000000001 Prevention 00100000000000000011001001100001 Cruelty 00100000000000000000000000000000 quake-displaced 00000000000000000000000000000000 bygone 00000000000000000000000000000000 46,835 00000000000000000000000000000000 Daralee 00100000000000000000000000000000 Konowitch 00100000000000000000000000000000 animalcare 00000000000000000000000000000000 2160.1 00000000000000000000000000000000 1903 00000000000000000000000000000000 sincere 00000000000110100100110110010000 Financially 00100000000110000000000001110010 immorality 00000000000000000000000000000000 purse-snatchings 00000000000000000000000000000000 delectably 00000000000000000000000000000000 Lamar 00101111111001100100001000011000 leasable 00000000000000000000000000000000 end-zone 00000000000000000000000000000000 high-crime 00000000000000000000000000000000 insurability 00000000000000000000000000000000 poorer-quality 00000000000000000000000000000000 barren 00000000000000000000000000000000 2,500-per-job 00000000000000000000000000000000 halo 00000000000000000000000000000000 Bellows 00100000000000000000000000000000 Attwood 00100000000000000000000000000000 Vikings 00100000000000000000000000000000 Tons 00100000000000000000001100001011 Herschel 00100000000000000000000000000000 worthier 00000000000000000000000000000000 unobtrusive 00000000000000000000000000000000 6-to-8-foot-high 00000000000000000000000000000000 remote-controlled 00000000000000000000000000000000 attained 00000000110010010010110000110010 Shrubs 00100000000000000000000000000000 centimeters 00000000000111101011010100001011 non-fortress-like 00000000000000000000000000000000 Infrared 00100000000110011100101010110000 arsenide 00000000000000000000000000000000 Hurricanes 00100000000111110011110000110011 teammate 00000000000000000000000000000000 Chargers 00100000000000000000000000000000 crow 00001111111101000010100000001000 undefeated 00000000000000000000000000000000 panoramic 00000000000000000000000000000000 sub-station 00000000000000000000000000000000 well-trained 00000000000000000000000000000000 round-the-clock 00000000000000000000000000000000 31,777 00000000000000000000000000000000 Somebody 00100000000011001010010001110010 yarn 00000000001100110011111010110000 free-spending 00000000000000000000000000000000 pardoned 00000000000000000000000000000000 Combatting 00100000000000000000000000000000 Titus 00100000000000000000000000000000 ATHLONE 01000000000000000000000000000000 1,026.46 00000000000000000000000000000000 Grade 00100000000000011101100001000111 PGM 01000000000000000000000000000000 Hibernia 00100000000011010000110011000101 HIB 01000000000000000000000000000000 NU 01000000000000000000000000000000 high-capacity 00000000000000000000000000000000 EXBT 01000000000000000000000000000000 franchisor 00000000000000000000000000000000 RLLY 01000000000000000000000000000000 STSN 01000000000000000000000000000000 315,546 00000000000000000000000000000000 infamy 00000000000000000000000000000000 Destec 00100000000000000000000000000000 12.25 00000000000000000000000000000000 energy-cogeneration 00000000000000000000000000000000 weight-training 00000000000000000000000000000000 B'Gosh 01000000000000000000000000000000 well-meaning 00000000000000000000000000000000 expanding-profit 00000000000000000000000000000000 earnings-growth 00000000000000000000000000000000 perennially 00000000000000000000000000000000 Sportdom 00100000000000000000000000000000 Midco 00100000000000000000000000000000 refocuses 00000000000000000000000000000000 Understandably 00100000111100000000001001110010 Smaller-stock 00100000000000000000000000000000 regaining 00000000000110010100100101000000 Schoeppner 00100000000000000000000000000000 30-acre 00000000000000000000000000000000 Kruger 00100000000000000000000000000000 470.67 00000000000000000000000000000000 158.2 00000000000000000000000000000000 bustling 00000000000111101101000010010000 176.7 00000000000000000000000000000000 gallium 00000000000111111011001101110000 reaping 00000000000100100111111101000000 fine-tuned 00000000000000000000000000000000 unproven 00000000000000000000000000000000 Cowboys-owned 00100000000000000000000000000000 oink 00000000000000000000000000000000 hick 00000000000000000000000000000000 gallstones 00000000000000000000000000000000 125-a-share 00000000000000000000000000000000 stock-swap 00000000000000000000000000000000 Minitruck 00100000000000000000000000000000 limping 00000000000000000000000000000000 68,548 00000000000000000000000000000000 94,243 00000000000000000000000000000000 Tokuyama 00100000000000000000000000000000 Soda 00100000001011110011111010110000 bludgeoned 00000000000000000000000000000000 Anti-Jones 01000000000000000000000000000000 2,936 00000000000000000000000000000000 moribund 00000000000010100000101001000000 Merabank 00100000000100111000110100101000 Arizona-related 00100000000000000000000000000000 Examiners 00100000000000000111010010110011 valor 00000000000000000000000000000000 Danzig 00100000000000000000000000000000 sainthood 00000000000000000000000000000000 capital-assets 00000000000000000000000000000000 357.4 00000000000000000000000000000000 258.9 00000000000000000000000000000000 916.3 00000000000000000000000000000000 479.7 00000000000000000000000000000000 Bowls 00100000000000000000000000000000 ever-swelling 00000000000000000000000000000000 pastdue 00000000000000000000000000000000 gyrate 00000000000000000000000000000000 487.8 00000000000000000000000000000000 unceremoniously 00000000000000000000000000000000 boom-and-bust 00000000000000000000000000000000 debacles 00000000000000000000000000000000 H.R. 01000000000000000000000000000000 Modell 00100000000000000000000000000000 C.W. 01000000000000000000000000000000 cowardly 00000000000000000000000000000000 Foreclosure 00100000000000011001111000010000 Update 00100001100100111111110110110010 sanctuary 00000000000000000000000000000000 1,482 00000000000000000000000000000000 Maricopa 00100000000000000000000000000000 687 00000000000000000000000000000000 685,000 00000000000000000000000000000000 frail 00000000000001011100011010010000 contingencies 00000000000000000000000000000000 214.4 00000000000000000000000000000000 234.3 00000000000000000000000000000000 First-round 00100000000000000000000000000000 57.625 00000000000000000000000000000000 536,000 00000000000000000000000000000000 double-B-plus 01000000000000000000000000000000 disobey 00000000000000000000000000000000 Ariz.-based 00100000000000000000000000000000 80.50 00000000000000000000000000000000 Secured 00100000000000001011100110110000 immune-system 00000000000000000000000000000000 cultivates 00000000000000000000000000000000 6,379,884 00000000000000000000000000000000 long-tenured 00000000000000000000000000000000 chained 00000000000000000000000000000000 Eveready 00100000000000000000000000000000 Half-year 00100000000000000000000000000000 autoimmune 00000000000000000000000000000000 receptors 00000000000000000000000000000000 sidelining 00000000000000000000000000000000 21-yard 00000000000000000000000000000000 gushes 00000000000000000000000000000000 Wheaties-box 00100000000000000000000000000000 housekeeping 00000000000111011110001101100001 Tank 00100000000000001001011000000001 184.4 00000000000000000000000000000000 thaw 00000000000000000000000000000000 67.8 00000000000000000000000000000000 Baking 00100000001001101011111010110000 Katsive 00100000000000000000000000000000 scrounge 00000000000000000000000000000000 Shortageflation 00100000000000000000000000000000 scrimmage 00000000000000000000000000000000 Macchiarola 00100000000000000000000000000000 Geraldo 00101111111101110100001000011000 Finis 00100000000000000000000000000000 obsoleting 00000000000000000000000000000000 rave 00000000000000000000000000000000 Jerral 00100000000000000000000000000000 Falcons 00100000000000000000000000000000 pornographic 00000000000000000000000000000000 long-yardage 00000000000000000000000000000000 piracy 00000000000110101010000000100111 toll-tele-phone 00000000000000000000000000000000 emissaries 00000000000000000000000000000000 11.125 00000000000000000000000000000000 2-a-minute 00000000000000000000000000000000 bedridden 00000000000000000000000000000000 696 00000000000000000000000000000000 tape-recorded 00000000000000000000000000000000 hotlines 00000000000000000000000000000000 900-TELELAW 01000000000000000000000000000000 landlord-tenant 00000000000000000000000000000000 probate 00000000000000000000000000000000 CONVICTS 01000000000000000000000000000000 Karnsund 00100000000000000000000000000000 roost 00000000000111110000110110110010 Georg 00100000000000000000000000000000 Thema 00100000000000000000000000000000 hypothesized 00000000000000000000000000000000 popularize 00000000000000000000000000000000 SHEA 01001111111110010100111000001000 GOULD 01001111111100011001110000001000 Lancia 00100000000000000000000000000000 unconnected 00000000000000000000000000000000 Croma 00100000000000000000000000000000 gyrated 00000000000000000000000000000000 303.9 00000000000000000000000000000000 LePatner 01000000000000000000000000000000 professional-design 00000000000000000000000000000000 DISCIPLINARY 01000000000001000001000000110000 PROCEEDINGS 01000000000111101111001001000111 fecal 00000000000000000000000000000000 Non-lawyers 00100000000000000000000000000000 attorney-disciplinary 00000000000000000000000000000000 1.96 00000000000000000000000000000000 non-lawyers 00000000000000000000000000000000 derogation 00000000000000000000000000000000 DREXEL 01001111111111101110000000101000 BURNHAM 01001111111000000001011001001000 LAMBERT 01001111111111111110100001001000 TBWA 01000000000000000000000000000000 155.1 00000000000000000000000000000000 picturing 00000000000000000000000000000000 48.9 00000000000000000000000000000000 bottoms 00000000000111111101010101100011 festive 00000000000000000000000000000000 brunch 00000000000000000000000000000000 186.1 00000000000000000000000000000000 Hmong 00100000000000000000000000000000 trespasses 00000000000000000000000000000000 surrendering 00000000000000000000000000000000 Cadbury-Schweppes 01000000000000000000000000000000 Scania 00100000000000000000000000000000 Sunkist 00100000000000000000000000000000 deodorant 00000000000000000000000000000000 foiling 00000000000000000000000000000000 crying 00000000000111011011000001000000 six-county 00000000000000000000000000000000 Laotian 00100000000000000000000000000000 L.A 01000000000000000000000000000000 ridership 00000000000000000000000000000000 water-borne 00000000000000000000000000000000 hyper 00000000000011100100011010010000 transbay 00000000000000000000000000000000 Meselson 00100000000000000000000000000000 Meetings 00100000000111110111010000100111 crass 00000000000000000000000000000000 Shafer 00100000000000000000000000000000 quake-shocked 00000000000000000000000000000000 quake-inflicted 00000000000000000000000000000000 spores 00000000000000000000000000000000 runners-up 00000000000000000000000000000000 plaque 00000000000001110110111000000001 Kornfield 00100000000000000000000000000000 762.4 00000000000000000000000000000000 unaudited 00000000000111110111111100010000 814.1 00000000000000000000000000000000 354.7 00000000000000000000000000000000 5.01 00000000000000000000000000000000 686.7 00000000000000000000000000000000 371.1 00000000000000000000000000000000 453.4 00000000000000000000000000000000 149.5 00000000000000000000000000000000 Bureaucrat 00100000000111100001010010110101 all-important 00000000000000000000000000000000 123.8 00000000000000000000000000000000 237-seat 00000000000000000000000000000000 Bureaucrats 00100000000111001010100000110011 more-senior 00000000000000000000000000000000 98.3 00000000000000000000000000000000 debt-to-assets 00000000000000000000000000000000 equiment 00000000000000000000000000000000 Supermarket 00100000000000011001111010110000 Inwood 00100000000000000000000000000000 Dubinin 00100000000000000000000000000000 gunpoint 00000000000000000000000000000000 chased 00000000000111111001001000110010 marketwide 00000000000000000000000000000000 tax-evasion 00000000000000000000000000000000 occupations 00000000000111101110000010100011 Clearwater 00100000000110101011101001101000 strangles 00000000000000000000000000000000 1,124 00000000000000000000000000000000 grazed 00000000000000000000000000000000 loitering 00000000000000000000000000000000 burglarized 00000000000000000000000000000000 midlevel 00000000000000000000000000000000 8,385 00000000000000000000000000000000 Furillo 00100000000000000000000000000000 mull 00000000000000000000000000000000 quasi-public 00000000000000000000000000000000 scooter 00000000000000000000000000000000 hooliganism 00000000000000000000000000000000 tainted-meat 00000000000000000000000000000000 Increased 00100000000000000000011001000000 patrolling 00000000011100000110100001000000 tendentious 00000000000000000000000000000000 density 00000000000101101111100011100001 deterrence 00000000000111101111100110001001 criminology 00000000000000000000000000000000 ENFIELD 01000000000000000000000000000000 47.7 00000000000000000000000000000000 6.27 00000000000000000000000000000000 Dunton 00100000000000000000000000000000 confidants 00000000000000000000000000000000 Jeane 00100000000000000000000000000000 germs 00000000000000000000000000000000 Gang 00100000000111101010010100000001 11-month-old 00000000000000000000000000000000 think-tank 00000000000000000000000000000000 interagency 00000000000001010010010100010000 horsepower 00000000000000000101001001000111 Duffield 00100000000000000000000000000000 Astoria 00100000000000000000000000000000 self-starters 00000000000000000000000000000000 Gold-oriented 00100000000000000000000000000000 distilling 00000000000000000000000000000000 underperforms 00000000000000000000000000000000 pressman 00000000000000000000000000000000 Fixed-income 00100000000000000000000000000000 waged 00000000000101101100010000110010 21.71 00000000000000000000000000000000 remora 00000000000000000000000000000000 21.42 00000000000000000000000000000000 unsettlement 00000000000000000000000000000000 Portfolios 00100000000111101111101001101001 post-Oct 01000000000000000000000000000000 30.09 00000000000000000000000000000000 47.24 00000000000000000000000000000000 dullness 00000000000000000000000000000000 Closes 00100000010100000011000000010010 degenerate 00000000000000000000000000000000 ogling 00000000000000000000000000000000 third* 00000000000000000000000000000000 rippling 00000000000000000000000000000000 ducts 00000000000000000000000000000000 stratagems 00000000000000000000000000000000 tacking 00000000000000000000000000000000 Demonstrations 00100000000111100010101000100011 glues 00000000000000000000000000000000 third-biggest 00000000000000000000000000000000 Hypotheekkas 00100000000000000000000000000000 Antwerpsche 00100000000000000000000000000000 architecturally 00000000111100101000000001110010 Architecture 00100000000111110100001101100001 Creole 00100000000000000000000000000000 Coconuts 00100000000000000000000000000000 foot-tall 00000000000000000000000000000000 replica 00000000000000000000000000000000 battlements 00000000000000000000000000000000 quarrel 00000000000111100110110000100111 Solar-powered 00100000000000000000000000000000 glow 00000000000111111011011001000111 boringly 00000000000000000000000000000000 Virology 00100000000000000000000000000000 particle 00000000000000000000000000000000 once-stately 00000000000000000000000000000000 formaldehyde 00000000000000000000000000000000 10-square-mile 00000000000000000000000000000000 Appleseeds 00100000000000000000000000000000 Burgee 00100000000000000000000000000000 rambunctious 00000000000000000000000000000000 cadmium 00000000000000000000000000000000 5.19 00000000000000000000000000000000 bandied 00000000000000000000000000000000 abetted 00000000000000000000000000000000 Shaker 00100000000000000000000000000000 five-consecutive 00000000000000000000000000000000 fly-fishing 00000000000000000000000000000000 taps 00000000000000000000000000000000 admonishing 00000000000000000000000000000000 schoolmates 00000000000000000000000000000000 hydroelectric 00000000000000100101110000110000 solarheated 00000000000000000000000000000000 22:1 00000000000000000000000000000000 14-foot 00000000000000000000000000000000 operable 00000000000000000000000000000000 sealing 00000000001111010110100001000000 rubbed 00000000000000000000000000000000 beeswax 00000000000000000000000000000000 Jute 00100000000000000000000000000000 tacked-down 00000000000000000000000000000000 Microbiology 00100000000000000000000000000000 radio-station 00000000000000000000000000000000 Athenian 00100000000000000000000000000000 grove 00000000000000011010100010100101 Proverbs 00100000000000000000000000000000 lamps 00000000000000000000000000000000 ficus 00000000000000000000000000000000 triphosphorous 00000000000000000000000000000000 Civilized 00100000000000010101000010010000 bounding 00000000000000000000000000000000 Krupp 00100000000000000000000000000000 Hornaday 00100000000000000000000000000000 crystalline 00000000000000000000000000000000 geode 00000000000000000000000000000000 873.9 00000000000000000000000000000000 terrazzo 00000000000000000000000000000000 zinc-strip 00000000000000000000000000000000 BLOCK 01000000000110111111110110110010 acorns 00000000000000000000000000000000 Sasha 00100000000000000000000000000000 accusatory 00000000000000000000000000000000 Westerners 00100000000000010111111000110011 Eiffel 00100000000000000000000000000000 tows 00000000000000000000000000000000 Mathews 00101111110001001000000010001000 814.8 00000000000000000000000000000000 Balag 00100000000000000000000000000000 789,000 00000000000000000000000000000000 395.3 00000000000000000000000000000000 398.3 00000000000000000000000000000000 Improvements 00100000000111111111011000100011 overuse 00000000000000000000000000000000 bumbling 00000000000000000000000000000000 public-opinion 00000000000000000000000000000000 assemblages 00000000000000000000000000000000 misfortunes 00000000000000000000000000000000 crime-busting 00000000000000000000000000000000 textbook 00000000000000001010101000100001 ghastly 00000000000010100100011010010000 uneconomic 00000000000000000000000000000000 latches 00000000000000000000000000000000 dispatching 00000000000000000000000000000000 Historically 00100000000111011000001001110010 Lessner 00100000000000000000000000000000 Kinnear 00101111111100001100100010001000 Weapons 00100000000111101110000110001001 emulate 00000000000111011011111110110010 ex-Marine 01000000000000000000000000000000 defy 00000000001000111011111110110010 Lawful 00100000000000000000000000000000 heal 00000000000000000000000000000000 435 00000000000000000000000000000000 Reagan-like 00100000000000000000000000000000 95.1 00000000000000000000000000000000 Miringoff 00100000000000000000000000000000 Marist 00100000000000000000000000000000 assault-weapons 00000000000000000000000000000000 conundrum 00000000000000000000000000000000 affable 00000000000000000000000000000000 TRT 01000000000000000000000000000000 fancy'shvartzer 00000000000000000000000000000000 moustache 00000000000000000000000000000000 Shvartzer 00100000000000000000000000000000 no-confidence 00000000000000000000000000000000 Yiddish 00100000000000000000000000000000 primary-election 00000000000000000000000000000000 anti-Semitic 01000000000000000000000000000000 Anti-Semitic 01000000000000000000000000000000 unearthed 00000000000000000000000000000000 158,666 00000000000000000000000000000000 Marubeni 00100000000000000000000000000000 the'breakup 00000000000000000000000000000000 evaded 00000000000000000000000000000000 Maiorana 00100000000000000000000000000000 evades 00000000000000000000000000000000 car-care 00000000000000000000000000000000 deception 00000000000111011011110010100111 squeaky 00000000000000000000000000000000 Flavio 00100000000000000000000000000000 Marguerite 00100000000000000000000000000000 hanged 00000000000000000000000000000000 Blackfriar 00100000000000000000000000000000 Pavel 00100000000000000000000000000000 salesparson 00000000000000000000000000000000 exonerating 00000000000000000000000000000000 Opere 00100000000000000000000000000000 Religione 00100000000000000000000000000000 channeled 00000000110111000000010000110010 Kieran 00100000000000000000000000000000 truth-in-lending 00000000000000000000000000000000 Gellert 00100000000000000000000000000000 Erburu 00100000000000000000000000000000 waivered 00000000000000000000000000000000 bonnet 00000000000000000000000000000000 impounded 00000000011111000100010000110010 defense-equipment 00000000000000000000000000000000 670.3 00000000000000000000000000000000 Alun-Jones 01000000000000000000000000000000 Bertram 00100000000000000000000000000000 P.R. 01000000000000000000000000000000 1.1510 00000000000000000000000000000000 Shlenker 00100000000000000000000000000000 pay-per-view 00000000000000000000000000000000 Hawks 00100000000100010100110100000001 Braves 00100000000000000000000000000000 day-today 00000000000000000000000000000000 explosives 00000000000110110011011111001001 Stop-loss 00100000000000000000000000000000 Technik 00100000000000000000000000000000 Menomonee 00100000000000000000000000000000 safeguarded 00000000000000000000000000000000 tossers 00000000000000000000000000000000 Rolfes 00100000000000000000000000000000 trailers 00000000000111100101101111001001 campers 00000000000000000000000000000000 Frisbee 00100000000000000000000000000000 2,410 00000000000000000000000000000000 Vehicle 00100000000011000110001000100001 89.5 00000000000000000000000000000000 Wrist 00100000000110001000110000000001 Twist 00100000000111001100111010110101 large-ticket 00000000000000000000000000000000 resonated 00000000000000000000000000000000 427,300 00000000000000000000000000000000 RVs 01000000000000000000000000000000 trading-a 00000000000000000000000000000000 437.5 00000000000000000000000000000000 430.3 00000000000000000000000000000000 Bullish 00100000000000000001101010010000 product-design 00000000000000000000000000000000 screened 00000101001011010100010000110010 bangs 00000000000000000000000000000000 memorial 00000000000000001010000000100001 hyperventilating 00000000000000000000000000000000 overdosing 00000000000000000000000000000000 card-member 00000000000000000000000000000000 top-quality 00000000000000000000000000000000 confessing 00000000000000000000000000000000 digested 00000000000000000000000000000000 constraint 00000000000111110011100100100111 art-dealing 00000000000000000000000000000000 single-owner 00000000000000000000000000000000 preapproved 00000000000000000000000000000000 Matisse 00100000000000000000000000000000 fetched 00000000000010000110100100110010 soapbox 00000000000000000000000000000000 Pick 00100000000111000110010110110010 businesspeople 00000000000000000000000000000000 resulted... 00000000000000000000000000000000 scars 00000000000000000000000000000000 110.625 00000000000000000000000000000000 jails 00000000000101110111110001100011 coerces 00000000000000000000000000000000 -of 00000000000000000000000000000000 anti-prostitution 00000000000000000000000000000000 Changyi 00100000000000000000000000000000 copper-producing 00000000000000000000000000000000 103-nation 00000000000000000000000000000000 Biographical 00100000010000111010000000110000 Express-Buick 01000000000000000000000000000000 Leaning 00100000000111100111100001000000 Pisa 00100000000000000000000000000000 erupts 00000000000000000000000000000000 stonework 00000000000000000000000000000000 Prandini 00100000000000000000000000000000 treasuries 00000000000111111000100100000011 800-year-old 00000000000000000000000000000000 sadistic 00000000000000000000000000000000 Briksa 00100000000000000000000000000000 Junge 00100000000000000000000000000000 Welt 00100000000000000000000000000000 instigated 00000000000000000000000000000000 Sweating 00100000000000000000000000000000 televising 00000000000000000000000000000000 sauna 00000000000110001011001011100111 MP 01000000000000000000000000000000 pontificate 00000000000000000000000000000000 Debates 00100000000101010110111010100111 no-win 00000000000000000000000000000000 most-respected 00000000000000000000000000000000 Trud 00100000000000000000000000000000 mister 00000000000000000000000000000000 Russian-language 00100000000000000000000000000000 Fizkultura 00100000000000000000000000000000 dinosaur... 00000000000000000000000000000000 yells 00000000000000000000000000000000 Gutenberghus 00100000000000000000000000000000 longevity 00000000000000000000000000000000 Masillon 00100000000000000000000000000000 souled 00000000000000000000000000000000 Softer-than-expected 00100000000000000000000000000000 Mahatma 00100000000000000000000000000000 Victor-brand 00100000000000000000000000000000 mousetraps 00000000000000000000000000000000 storage-case 00000000000000000000000000000000 Housewares 00100000000011010011111010110000 Destinations 00100000000110101111110001100011 revved 00000000000000000000000000000000 on-time 00000000000000000000000000000000 Mohandas 00100000000000000000000000000000 Allies 00100000000111100110110000110011 tugged 00000000000000000000000000000000 abates 00000000000000000000000000000000 ensue 00000000000000000000000000000000 typifies 00000000000000000000000000000000 26,956 00000000000000000000000000000000 light-industrial 00000000000000000000000000000000 foreign-trading 00000000000000000000000000000000 Bleckner 00100000000000000000000000000000 1985-86 00000000000000000000000000000000 overwritten 00000000000000000000000000000000 machinery-trading 00000000000000000000000000000000 38.32 00000000000000000000000000000000 31.48 00000000000000000000000000000000 recentralized 00000000000000000000000000000000 clampdowns 00000000000000000000000000000000 ABM. 01000000000000000000000000000000 rescues 00000000000000000000000000000000 Masahiko 00100000000000000000000000000000 softy 00000000000000000000000000000000 Cuellar 00100000000000000000000000000000 capital-raising 00000000000000000000000000000000 infrastructural 00000000000000000000000000000000 clampdown 00000000000000000000000000000000 bottleneck 00000000000000000000000000000000 resales 00000000000000000000000000000000 stockpiling 00000000000000000000000000000000 Spill 00100000000101101001001010110111 Shows 00100000000010010011000000010010 Union. 00100000000000000000000000000000 Flaws 00100000000111110001111000100011 UNRESOLVED 01000000000000000100110110010000 linguine 00000000000000000000000000000000 tenderness 00000000000000000000000000000000 compensates 00000000000000000000000000000000 S.S. 01000000000000000000000000000000 corpse 00000000000000000000000000000000 Inlet 00100000000000000000000000000000 104.8 00000000000000000000000000000000 Defendants 00100000000111101111000110110011 truculence 00000000000000000000000000000000 shipper 00000000000000000000000000000000 Pollution 00100000000111011101000011100001 Grads 00100000000000101001111000110011 Find 00100000000111101010101110110010 Classes 00100000000000000100100100101111 RECENT 01000000000000000000101100010000 lawyering 00000000000000000000000000000000 Weitz 00100000000000000000000000000000 world-weary 00000000000000000000000000000000 mentors 00000000000000000000000000000000 cathodes 00000000000000000000000000000000 chauffeurs 00000000000000000000000000000000 simulated 00000000000000000000000000000000 aback 00000000000001010000010001110010 20-class 00000000000000000000000000000000 Hanks 00100000000000000000000000000000 Creates 00100001010000000011000000010010 Courthouse 00100000000000000000001111010101 CHILDREN 01000000000111101110111100110011 courthouses 00000000000000000000000000000000 Comics 00100000000000000000000000000000 State-owned 00100000000000000000000000000000 Designs 00100000011011000111000000010010 L-shaped 00100000000000000000000000000000 Teens 00100000000110000011110000110011 headsets 00000000000000000000000000000000 Rome-based 00100000000000000000000000000000 Charlene 00100000000000000000000000000000 Saunders 00101111111110101110110010001000 thrills 00000000000000000000000000000000 Cases 00100000000111100110100010100011 traumatic 00000000000000000111001010010000 Monterey 00100000000010110110011010101000 Rewarding 00100000001110010101010010010000 Gomel 00100000000000000000000000000000 PAYS 01000000000110001101000000010010 Ardmore 00100000000000000000000000000000 395,974 00000000000000000000000000000000 217,000 00000000000000000000000000000000 highway-construction 00000000000000000000000000000000 Burning 00100000001111010010110001000000 subversives 00000000000000000000000000000000 Dubbed 00100000000110110101010000110010 Dire 00100000000000000101001010010000 tailing 00000000000000000000000000000000 Disasters 00100000000111100101001010100011 Significance 00100000000111111101111000001111 disdaining 00000000000000000000000000000000 Sargent 00101111111010011000010000001000 Eurodebentures 00100000000000000000000000000000 nondurable 00000000000011110001010000110000 B-1 00100000000000000000000000000000 Hostess 00100000000000000000000000000000 members. 00000000000000000000000000000000 all-too-sincere 00000000000000000000000000000000 opportunism 00000000000111111010001101100001 Marchers 00100000000000000000000000000000 Reality 00100000000111111001110101100111 travel-related 00000000000000000000000000000000 endearing 00000000000000000000000000000000 Arms 00100000000000000000001010100001 stylish 00000000000101011101000010010000 Rohatyn 00101111111111100110101010001000 DeWitt 01000000000000000000000000000000 townhouse 00000000000000000000000000000000 film-maker 00000000000000000000000000000000 villains 00000000000000000000000000000000 stylist 00000000000000000000000000000000 prepping 00000000000000000000000000000000 pies 00000000000000000000000000000000 burgers 00000000000000000000000000000000 frosty 00000000000000000000000000000000 comestibles 00000000000000000000000000000000 appetizing 00000000000111111011001110010000 quantification 00000000000000000000000000000000 Nikons 00100000000000000000000000000000 Siebert 00101111111101000100111000001000 self-employment 00000000000000000000000000000000 radar. 00000000000000000000000000000000 youngish 00000000000000000000000000000000 semi-professional 00000000000000000000000000000000 Remarketers 00100000000000000000000000000000 fifteenfold 00000000000000000000000000000000 placid 00000000000111100000011000101000 872 00000000000000000000000000000000 specimens 00000000000000000000000000000000 1.175 00000000000000000000000000000000 bleed 00000000000000000000000000000000 eaters 00000000000000000000000000000000 pangs 00000000000000000000000000000000 Rascal 00100000000000000000000000000000 phase-out 00000000000000000000000000000000 1,570 00000000000000000000000000000000 well-run 00000000000000000000000000000000 forensics 00000000000000000000000000000000 19.72 00000000000000000000000000000000 incompetently 00000000000000000000000000000000 Patrician 00100000000000000000000000000000 risible 00000000000000000000000000000000 shadier 00000000000000000000000000000000 shrewder 00000000000000000000000000000000 suspense 00000000000101011010111010100111 mulitiplier 00000000000000000000000000000000 descends 00000000000000000000000000000000 precede 00000000000000000000000000000000 Standard-issue 00100000000000000000000000000000 flaky 00000000000000000000000000000000 snobbish 00000000000000000000000000000000 IBM-remarketer 01000000000000000000000000000000 Neanderthal 00100000000000000000000000000000 heavy-handedness 00000000000000000000000000000000 contemptible 00000000000000000000000000000000 dolt 00000000000000000000000000000000 High-definition 00100000000000000000000000000000 Lindsay 00101111111101111001000100001000 Lehne 00100000000000000000000000000000 Northwood 00100000000000000000000000000000 plasma 00000000000000000000000000000000 movie-quality 00000000000000000000000000000000 diameter 00000000000111011111111001101000 Tuesdays 00100000000000000000000000000000 electroluminescence 00000000000000000000000000000000 adaptable 00000000000000000000000000000000 Brazen 00100000000000000000000000000000 Randi 00100000000000000000000000000000 Flats 00100000000100100001110100100001 flat-panel 00000000000000000000000000000000 weaponsmaking 00000000000000000000000000000000 Brawley 00100000000000000000000000000000 Replacing 00100000000111100110001101000000 Tawana 00100000000000000000000000000000 pol 00000000000000000000000000000000 Thompson-CSF 01000000000000000000000000000000 persisting 00000000000000000000000000000000 Zvi 00100000000000000000000000000000 Yaniv 00100000000000000000000000000000 business-partners 00000000000000000000000000000000 snatch 00000000000000000000000000000000 373.40 00000000000000000000000000000000 simulations 00000000000000000000000000000000 5.1950 00000000000000000000000000000000 488.60 00000000000000000000000000000000 topicality 00000000000000000000000000000000 Chinchon 00100000000000000000000000000000 half-industrial 00000000000000000000000000000000 contemplation 00000000000000000000000000000000 Gilts 00100000000011001111110010100111 environmental-impact 00000000000000000000000000000000 retraced 00000000000000000000000000000000 DeVillars 01000000000000000000000000000000 McKim 01000000000000000000000000000000 Factoring 00100000000010101011111010110000 factored 00000001110001110010110000110010 Reykjavik 00100000000010011111111001101000 electronics-instruments 00000000000000000000000000000000 13,056 00000000000000000000000000000000 Kingsville 00100000000000000000000000000000 stab 00000000000000000000000000000000 214,000 00000000000000000000000000000000 fuel-storage 00000000000000000000000000000000 879,000 00000000000000000000000000000000 199,203 00000000000000000000000000000000 cannon 00000000000010101011010100101000 workhorse 00000000000000000000000000000000 30,841 00000000000000000000000000000000 jumpy 00000000000000000000000000000000 Calverley 00100000000000000000000000000000 1969-72 00000000000000000000000000000000 money-manager 00000000000000000000000000000000 Cabanne 00100000000000000000000000000000 ET 01000000000001111010010010110000 Siebel 00100000000000000000000000000000 impeding 00000000000000000000000000000000 crotchety 00000000000000000000000000000000 unlovable 00000000000000000000000000000000 1,460 00000000000000000000000000000000 Hazell 00100000000000000000000000000000 330,000 00000000000000000000000000000000 navies 00000000000000000000000000000000 1,030 00000000000000000000000000000000 lifeguards 00000000000000000000000000000000 Dress 00100000000111110100110110110111 Barn 00100000000000001010011000000001 cyclicals 00000000000000000000000000000000 bathing 00000000000000000000000000000000 woe 00000000000000000000000000000000 tans 00000000000000000000000000000000 carts 00000000000000000000000000000000 662 00000000000000000000000000000000 829 00000000000000000000000000000000 nun 00000000000000000000000000000000 347.16 00000000000000000000000000000000 325.50 00000000000000000000000000000000 192.12 00000000000000000000000000000000 361,376 00000000000000000000000000000000 inspirations 00000000000000000000000000000000 crusty 00000000000000000000000000000000 trodden 00000000000000000000000000000000 Lamson 00100000000000000000000000000000 Sessions 00100000000000010001000001100011 MassMutual 01000000000000000000000000000000 Stoneridge 00100000000010101001000100101000 22,750,000 00000000000000000000000000000000 persuasive 00000000000000100101010010010000 nonresidential 00000000000000101111010000110000 6,500,000 00000000000000000000000000000000 1,400,000 00000000000000000000000000000000 2,600,000 00000000000000000000000000000000 Colored 00100000000001100010101000110000 1,200,000 00000000000000000000000000000000 1,300,000 00000000000000000000000000000000 Tidewater 00100000000110011010111100101000 4,631,400 00000000000000000000000000000000 continuingly 00000000000000000000000000000000 134,750,000 00000000000000000000000000000000 132,620,000 00000000000000000000000000000000 non-AMT 01000000000000000000000000000000 137,550,000 00000000000000000000000000000000 500,004 00000000000000000000000000000000 ESL 01000000000000000000000000000000 Rainwater 00101111100100101100000010001000 Advancement 00100000000111100101111000001111 1,325,900 00000000000000000000000000000000 Hooks 00100000000000000000000000000000 5.84 00000000000000000000000000000000 1,351,662 00000000000000000000000000000000 Richmond-area 00100000000000000000000000000000 forefathers 00000000000000000000000000000000 a-Ex-dividend 01000000000000000000000000000000 Most-Favored 01000000000000000000000000000000 Kenmare 00100000000000000000000000000000 lockup 00000000000000000000000000000000 KinderCare 01000000000000000000000000000000 852,000 00000000000000000000000000000000 4.6875 00000000000000000000000000000000 72.7 00000000000000000000000000000000 culminating 00000000000000000000000000000000 ups-and-downs 00000000000000000000000000000000 1,014 00000000000000000000000000000000 6-a-share 00000000000000000000000000000000 spring-early 00000000000000000000000000000000 irrespective 00000000000000000000000000000000 237 00000000000000000000000000000000 totalling 00000000000000000000000000000000 Conviction 00100000000111100111111101100111 599.9 00000000000000000000000000000000 20.20 00000000000000000000000000000000 Andrzej 00100000000000000000000000000000 5.77 00000000000000000000000000000000 881,969 00000000000000000000000000000000 illegality 00000000000111110111100010100111 tonnages 00000000000000000000000000000000 marine-shipping 00000000000000000000000000000000 89,500-a-year 00000000000000000000000000000000 111.2 00000000000000000000000000000000 1,735 00000000000000000000000000000000 marine-transport 00000000000000000000000000000000 seasonality 00000000000000000000000000000000 33.9 00000000000000000000000000000000 614.5 00000000000000000000000000000000 497.1 00000000000000000000000000000000 falter 00000000000000000000000000000000 Latowski 00100000000000000000000000000000 111.9 00000000000000000000000000000000 74.8 00000000000000000000000000000000 outflank 00000000011010010111111110110010 wrestles 00000000000000000000000000000000 heavy-tracked 00000000000000000000000000000000 letter-writing 00000000000000000000000000000000 quashing 00000000000000000000000000000000 wallcoverings 00000000000000000000000000000000 lobster 00000000000000000000000000000000 irons 00000000000000000000000000000000 1,368 00000000000000000000000000000000 Geier 00100000000000000000000000000000 Tanks 00100000000110001110111001100011 19-year 00000000000000000000000000000000 councilwoman 00000000000000000000000000000000 war-like 00000000000000000000000000000000 lightning-fast 00000000000000000000000000000000 whipped 00000000000010111011001000110010 O'Dwyer's 01000000000000000000000000000000 Directory 00100000000000011000001010110000 McCaffrey 01000000000000000000000000000000 ballot-burning 00000000000000000000000000000000 Fires 00100000001011001111110101100011 then-minister 00000000000000000000000000000000 Brea 00100000000000000000000000000000 Hakuhodo 00100000000000000000000000000000 Keye 00100000000000000000000000000000 AYER 01000000000110110011000001001000 TALKS 01000000000111101111010000100111 Siano 00100000000000000000000000000000 Zwiren 00100000000000000000000000000000 Karo 00100000000000000000000000000000 Trusk 00100000000000000000000000000000 Lazarus 00100000000000000000000000000000 Pillsbury 00100000000111110110101100101000 board-level 00000000000000000000000000000000 Anti-union 00100000000000000000000000000000 Tagg 00100000000000000000000000000000 Cawdron 00100000000000000000000000000000 Shardlow 00100000000000000000000000000000 esprit 00000000000111110000110100101000 1,087 00000000000000000000000000000000 Lederberg 00100000000000000000000000000000 co-authored 00000000000000000000000000000000 magnanimous 00000000000000000000000000000000 Insofar 00100000000000000000000000000000 discomfited 00000000000000000000000000000000 intimidations 00000000000000000000000000000000 demagogues 00000000000000000000000000000000 company-sponsored 00000000000000000000000000000000 U.Cal-Davis 01000000000000000000000000000000 acquainted 00000000000000000000000000000000 Poag 00100000000000000000000000000000 biotech 00000000000000010010111010110000 Dutch-elm-disease 00100000000000000000000000000000 Strobel 00100000000101010101111110101000 Queenan 00100000000000000000000000000000 mistreat 00000000000000000000000000000000 anti-science 00000000000000000000000000000000 placated 00000000000000000000000000000000 Hubel 00100000000000000000000000000000 DeBakey 01000000000000000000000000000000 primarly 00000000000000000000000000000000 media-linked 00000000000000000000000000000000 Nobels 00100000000000000000000000000000 job-classification 00000000000000000000000000000000 354,600 00000000000000000000000000000000 Borie 00100000000000000000000000000000 Pic 00100000000000000000000000000000 ascendency 00000000000000000000000000000000 specialty-retail 00000000000000000000000000000000 seniority-list 00000000000000000000000000000000 wizards 00000000000000000000000000000000 pilot-seniority 00000000000000000000000000000000 mainlander 00000000000000000000000000000000 Islanders 00100000000000000000000000000000 Lodestar 00100000000000000000000000000000 Jet 00100000000110101010001010110000 Vacations 00100000000111000111101001100011 countering 00000000000101100111011101000000 Succasunna 00100000000000000000000000000000 461,200 00000000000000000000000000000000 Tiger-turned-Federal 01000000000000000000000000000000 Groused 00100000000000000000000000000000 disabled-workers 00000000000000000000000000000000 Gollich 00100000000000000000000000000000 toned-down 00000000000000000000000000000000 fowl 00000000000000000000000000000000 J.X. 01000000000000000000000000000000 charisma 00000000000011101101110010100111 answerable 00000000000000000000000000000000 end-tailed 00000000000000000000000000000000 trunk 00000000000110110110111000000001 distorts 00000111101110000011000000010010 haste 00000000000000000000000000000000 retracted 00000000000000000000000000000000 entails 00000000000000000000000000000000 citizenry 00000000000000000000000000000000 hurtling 00000000000000000000000000000000 109,000 00000000000000000000000000000000 buckshot 00000000000000000000000000000000 freefall 00000000000000000000000000000000 387.8 00000000000000000000000000000000 Oleg 00100000000000000000000000000000 decertified 00000000000000000000000000000000 Forecasts 00100000000111101101010000100011 Sanjay 00100000000000000000000000000000 Joshi 00100000000000000000000000000000 stockbuilding 00000000000000000000000000000000 Defending 00100000000111001001011101000000 1.5890 00000000000000000000000000000000 2.9495 00000000000000000000000000000000 1.5940 00000000000000000000000000000000 2.9429 00000000000000000000000000000000 20-day 00000000000000000000000000000000 141.95 00000000000000000000000000000000 141.35 00000000000000000000000000000000 AEI 01000000000000000000000000000000 366.50 00000000000000000000000000000000 program-dominated 00000000000000000000000000000000 40-a-share 00000000000000000000000000000000 106.6 00000000000000000000000000000000 2,664,098 00000000000000000000000000000000 givebacks 00000000000000000000000000000000 233,000 00000000000000000000000000000000 hangar 00000000000000000000000000000000 L.P 01000000000000000000000000000000 trundles 00000000000000000000000000000000 unionized 00000000000010011000101000110000 Lime 00100000000000000000000000000000 music-publishing 00000000000000000000000000000000 recorded-music 00000000000000000000000000000000 haulage 00000000000000000000000000000000 Sayre 00100000000000000000000000000000 Library 00100000000111111011010100000001 clannish 00000000000000000000000000000000 containerized-cargo 00000000000000000000000000000000 inter-city 00000000000000000000000000000000 cultural-reform 00000000000000000000000000000000 transportation-cost 00000000000000000000000000000000 freight-cost 00000000000000000000000000000000 freight-rate 00000000000000000000000000000000 McCullough 01000000000000000000000000000000 Less-than-truckload 00100000000000000000000000000000 Railroad-rate 00100000000000000000000000000000 rail-traffic 00000000000000000000000000000000 less-than-truckload 00000000000000000000000000000000 Truckers 00100000000111001100000110110011 bloodletting 00000000000000000000000000000000 trucker 00000000000000000000000000000000 Air-freight 00100000000000000000000000000000 hub-and-spoke 00000000000000000000000000000000 Hump 00100000000000000000000000000000 air-freight-forwarding 00000000000000000000000000000000 Kaisha 00100000000000000000000000000000 airlifted 00000000000000000000000000000000 Phase 00100000000111110110001000110111 MAC 01000000001001101100111110000010 Underseas 00100000000000000000000000000000 people-oriented 00000000000000000000000000000000 ex-employees 00000000000000000000000000000000 trenches 00000000000000000000000000000000 airmen 00000000000000000000000000000000 blitzes 00000000000000000000000000000000 Adjustment 00100000000111101001001000111001 Problem 00100000000111111111001101100111 complaint-resolution 00000000000000000000000000000000 gungho 00000000000000000000000000000000 6.44 00000000000000000000000000000000 forwards 00000000000001100100001000100001 53.25 00000000000000000000000000000000 mobilizing 00000000000111010101011101000000 reversals 00000000000000000000000000000000 Decide 00100000000111111110011110110010 panelists 00000000000000011101100110110011 fact-finder 00000000000000000000000000000000 arbitrates 00000000000000000000000000000000 single-adjudicator 00000000000000000000000000000000 cranks 00000000000000000000000000000000 soreheads 00000000000000000000000000000000 handbooks 00000000000000000000000000000000 Smith-Kline 01000000000000000000000000000000 memorandums 00000000000000000000000000000000 57.87 00000000000000000000000000000000 Job 00100000000111101111110000000001 Resolving 00100000000111000011011101000000 Grievances 00100000000111101011101000100011 Nonunion 00100000000001101000101000110000 half-empty 00000000000000000000000000000000 112.16 00000000000000000000000000000000 35486.38 00000000000000000000000000000000 hemorrhaged 00000000000000000000000000000000 101.98 00000000000000000000000000000000 35588.36 00000000000000000000000000000000 862 00000000000000000000000000000000 85-title 00000000000000000000000000000000 small-lot 00000000000000000000000000000000 35611.38 00000000000000000000000000000000 Dai-ichi 00100000000000000000000000000000 depot 00000000000111101100111110000010 2679.72 00000000000000000000000000000000 11.88 00000000000000000000000000000000 luckier 00000000000000000000000000000000 3717.46 00000000000000000000000000000000 647.33-point 00000000000000000000000000000000 1017.69 00000000000000000000000000000000 reservoirs 00000000000000000000000000000000 program-selling 00000000000000000000000000000000 6,050 00000000000000000000000000000000 42.60 00000000000000000000000000000000 Kyocera 00100000000111011100111100101000 5,440 00000000000000000000000000000000 7,580 00000000000000000000000000000000 1,920 00000000000000000000000000000000 2,070 00000000000000000000000000000000 Housings 00100000000000000000000000000000 constructions 00000000000000000000000000000000 furloughed 00000000000000000000000000000000 2,660 00000000000000000000000000000000 2,960 00000000000000000000000000000000 understaffs 00000000000000000000000000000000 tamper 00000000000000000000000000000000 1,730 00000000000000000000000000000000 2,010 00000000000000000000000000000000 bristles 00000000001110101000001000110010 2179.1 00000000000000000000000000000000 2176.9 00000000000000000000000000000000 2189 00000000000000000000000000000000 1,100-parcel-a-week 00000000000000000000000000000000 11-point 00000000000000000000000000000000 establshed 00000000000000000000000000000000 damn-the-torpedoes 00000000000000000000000000000000 1761.0 00000000000000000000000000000000 351.3 00000000000000000000000000000000 387.4 00000000000000000000000000000000 featureless 00000000000000000000000000000000 422.5 00000000000000000000000000000000 390-million 00000000000000000000000000000000 622 00000000000000000000000000000000 FXTV 01000000000000000000000000000000 mid-week 00000000000000000000000000000000 Trusthouse 00100000000000000000000000000000 Forte 00100000000000000000000000000000 Hillsdown 00100000000000000000000000000000 perk 00000000000000000000000000000000 vent 00000000000000000000000000000000 tormentors 00000000000000000000000000000000 imprison 00000000000000000000000000000000 Guerrillas 00100000000111101000101110110011 rewriting 00000000001110011111010001000000 regrettably 00000000000000000000000000000000 classification 00000000000010111101101001100111 coup-planning 00000000000000000000000000000000 MUTUAL 01000000000001001001111110110000 ARRIVED 01000000000010111110001000110010 Roaring 00100000000001000111100000010000 Twenties 00100000000111000011011010100111 gigantic 00000000000000011001000010010000 backed-up 00000000000000000000000000000000 advertising-backed 00000000000000000000000000000000 Rounding-off 00100000000000000000000000000000 0.272 00000000000000000000000000000000 Messerschmitt-Boelkow-Blohm 01000000000000000000000000000000 50.01 00000000000000000000000000000000 aparently 00000000000000000000000000000000 Hamburg 00100000001101100111111001101000 Professors 00100000000100101100111000110011 MBB 01000000000000000000000000000000 Seton 00100000000000000000000000000000 SIERRA 01000000000110110000001000110000 TUCSON 01000000000111110101001000101000 previous-month 00000000000000000000000000000000 arenas 00000000000111100110000010100011 20.39 00000000000000000000000000000000 Flights 00100000000111100100101001100011 vet 00000000000000000000000000000000 461.70 00000000000000000000000000000000 reasearch 00000000000000000000000000000000 Hurrican 00100000000000000000000000000000 5.52 00000000000000000000000000000000 personal-income 00000000000000000000000000000000 charismatic 00000000000000110001000010010000 MANUFACTURING 01000000000000000000011010110000 Londe 00100000000000000000000000000000 15.02 00000000000000000000000000000000 I.E.P. 01000000000000000000000000000000 dispatchers 00000000000000000000000000000000 868 00000000000000000000000000000000 Rolls 00100000100100001111000000010010 Royce 00100000100000001101111100001000 Rune 00100000000000000000000000000000 114.63 00000000000000000000000000000000 unfashionable 00000000000000000000000000000000 gutsy 00000000000000000000000000000000 Stroking 00100000000000000000000000000000 goatee 00000000000000000000000000000000 Swede 00100000000000000000000000000000 Characteristically 00100000000000000000000000000000 roly-poly 00000000000000000000000000000000 SKr1.5 01000000000000000000000000000000 Bfree 00100000000000000000000000000000 SKr29 01000000000000000000000000000000 SKr205 01000000000000000000000000000000 31.65 00000000000000000000000000000000 SKr20 01000000000000000000000000000000 SKr225 01000000000000000000000000000000 megabillion 00000000000000000000000000000000 Dunker 00100000000000000000000000000000 bylaws 00000000000111001101101000100011 Applying 00100000000111110010110101000000 2,048 00000000000000000000000000000000 Electrolux 00100000000010000000111100101000 multipled 00000000000000000000000000000000 twelvefold 00000000000000000000000000000000 Herslow 00100000000000000000000000000000 slow-startup 00000000000000000000000000000000 Berets 00100000000000000000000000000000 refunded 00000000100111000000010000110010 co-pilot 00000000000000000000000000000000 Kurtanjek 00100000000000000000000000000000 Booming 00100000000011011001100000010000 hinge 00000000000011010110110110110010 Swedes 00100000000000000000000000000000 flamed 00000000000000000000000000000000 fry 00001111111011001000110000101001 Belfast 00100000000000000000000000000000 400.3 00000000000000000000000000000000 31,000 00000000000000000000000000000000 million-franc 00000000000000000000000000000000 641.5 00000000000000000000000000000000 Grinevsky 00100000000000000000000000000000 LS400 01000000000000000000000000000000 asset-stripping 00000000000000000000000000000000 margins... 00000000000000000000000000000000 annum 00000000000000000000000000000000 Renta 00100000000000000000000000000000 Bissett 00100000000000000000000000000000 Polymerix 00100000000000000000000000000000 lumber-like 00000000000000000000000000000000 Enid 00100000000000000000000000000000 Acrylic 00100000000000000000000000000000 Polycast 00100000000000000000000000000000 Holewinski 00100000000000000000000000000000 coined 00000000000000000000000000000000 undergarment 00000000000000000000000000000000 boyish 00000000000000000000000000000000 Trimmer 00100000000000000000000000000000 Burrillville 00100000000000000000000000000000 Ebasco 00100000000000000000000000000000 disheveled 00000000000000000000000000000000 250-megawatt 00000000000000000000000000000000 then-dress 00000000000000000000000000000000 decontaminated 00000000000000000000000000000000 buds 00000000000000000000000000000000 Ludwigshafen 00100000000000000000000000000000 Greater 00100000000000000010001111000000 Stroup 00100000000000000000000000000000 500-store 00000000000000000000000000000000 stock-quote 00000000000000000000000000000000 Infotechnology 00100000000000000000000000000000 Bronston 00100000000000000000000000000000 peso 00000000000111111101001101000101 Barge 00100000000000001101111010110000 cotton-ginning 00000000000000000000000000000000 Buy-out 00100000000000000000000000000000 privatizing 00000000000000000000000000000000 Rodolfo 00100000000000000000000000000000 Romero 00100000000000000000000000000000 agrarian-reform 00000000000000000000000000000000 misjudgments 00000000000000000000000000000000 tackles 00000000000000000000000000000000 government-held 00000000000000000000000000000000 Dealing 00100000000111101001100000110010 demography 00000000000000000000000000000000 671 00000000000000000000000000000000 Bali 00100000000000000000000000000000 Leonardo 00100000000000000000000000000000 remade 00000000000000000000000000000000 materiel 00000000000000000000000000000000 neighbours 00000000000000000000000000000000 non-controlling 00000000000000000000000000000000 pussy-willow 00000000000000000000000000000000 cash-hungry 00000000000000000000000000000000 short-changing 00000000000000000000000000000000 trans-Pacific 01000000000000000000000000000000 Sprenger 00100000000000000000000000000000 LifeSpan 01000000000000000000000000000000 heavyweights 00000000000000000000000000000000 Durney 00100000000000000000000000000000 Steep 00100000000001000100100000010000 Tangible 00100000000010011000000000010000 12.375 00000000000000000000000000000000 VF 01000000000000000000000000000000 Pascale 00100000000000000000000000000000 Linsley 00100000000000000000000000000000 86.12 00000000000000000000000000000000 Publicly 00100000000100100111001001110010 469.6 00000000000000000000000000000000 Been 00100000000000101011100001110010 Bitten 00100000000000000000000000000000 Bug 00100000000111010101011000000001 refreshingly 00000000000000000000000000000000 hair-care 00000000000000000000000000000000 tampons 00000000000000000000000000000000 CEOs 01000000000000000000000000000000 contradicts 00000000000000000000000000000000 487 00000000000000000000000000000000 delights 00000000000000000000000000000000 anti-program 00000000000000000000000000000000 1,155 00000000000000000000000000000000 aspires 00000000000000000000000000000000 nonpriority 00000000000000000000000000000000 Mogan 00100000000000000000000000000000 pluri-party 00000000000000000000000000000000 Warners 00100000000000000000000000000000 168.50 00000000000000000000000000000000 21.625 00000000000000000000000000000000 30-Oct 01000000000000000000000000000000 pilot-management 00000000000000000000000000000000 150.00 00000000000000000000000000000000 fiefdoms 00000000000000000000000000000000 crafting 00000000000000000000000000000000 femininity 00000000000000000000000000000000 Hoy 00100000000000000000000000000000 bimonthly 00000000000000000000000000000000 two-minute 00000000000000000000000000000000 yen-support 00000000000000000000000000000000 Leibowitz 00100000000000000000000000000000 parenting 00000000000000000000000000000000 ad-supported 00000000000000000000000000000000 WEIRTON 01000000000000000000000000000000 STEEL 01000000000000000100011010110000 10.958 00000000000000000000000000000000 60.3 00000000000000000000000000000000 prepay 00000000000000000000000000000000 45%-owned 00000000000000000000000000000000 I... 00100000000000000000000000000000 3,513,072 00000000000000000000000000000000 Stream 00100000000110101011011001000111 forwarding 00000000000000000000000000000000 cheapens 00000000000000000000000000000000 68.42 00000000000000000000000000000000 62.36 00000000000000000000000000000000 Huntley 00101111110111110100001000001000 5.67 00000000000000000000000000000000 39.08 00000000000000000000000000000000 11.07 00000000000000000000000000000000 9.49 00000000000000000000000000000000 8.79 00000000000000000000000000000000 55%-owned 00000000000000000000000000000000 Hannibal 00100000000000000000000000000000 Bens 00100000000000000000000000000000 Run 00100000000111101110010110110010 Aniskovich 00100000000000000000000000000000 Rossi 00100000000000000000000000000000 low-base-price 00000000000000000000000000000000 26.48 00000000000000000000000000000000 263,684 00000000000000000000000000000000 9.9375 00000000000000000000000000000000 10.5625 00000000000000000000000000000000 6,727,042 00000000000000000000000000000000 Evanston 00100000000000000000000000000000 84.9 00000000000000000000000000000000 Sinopoli 00100000000000000000000000000000 remanded 00000000000000000000000000000000 REVISED 01000000000000000010001001000000 BID 01000000000111111111111111100111 property-loan 00000000000000000000000000000000 cede 00000000000000000000000000000000 HDTV-screen 01000000000000000000000000000000 215.48 00000000000000000000000000000000 3392.49 00000000000000000000000000000000 129.62 00000000000000000000000000000000 0.51 00000000000000000000000000000000 131.34 00000000000000000000000000000000 0.73 00000000000000000000000000000000 turn-ons 00000000000000000000000000000000 stagnated 00000000000000000000000000000000 249.5 00000000000000000000000000000000 222.8 00000000000000000000000000000000 Eldred 00100000000000000000000000000000 new-country 00000000000000000000000000000000 12,345 00000000000000000000000000000000 Pharmics 00100000000000000000000000000000 Amityville 00100000000000000000000000000000 mioxidil 00000000000000000000000000000000 chlorazepate 00000000000000000000000000000000 dipotassium 00000000000000000000000000000000 meclofenamate 00000000000000000000000000000000 sodium 00000000000111000110110000100001 trazadone 00000000000000000000000000000000 doxepin 00000000000000000000000000000000 diazepam 00000000000000000000000000000000 lorazapam 00000000000000000000000000000000 olefins 00000000000000000000000000000000 Superman 00100000000000000000000000000000 -those 00000000000000000000000000000000 Reeve 00100000000000000000000000000000 Jurors 00100000000110110010100110110011 Hershhenson 00100000000000000000000000000000 Pagones 00100000000000000000000000000000 Vadas 00100000000000000000000000000000 Ciporkin 00100000000000000000000000000000 Telectronics 00100000000000000000000000000000 antianemia 00000000000000000000000000000000 320,000 00000000000000000000000000000000 21-year 00000000000000000000000000000000 72.6 00000000000000000000000000000000 LEBANESE 01000000000001010001011000110000 APPROVED 01000000000001011001010000110010 power-sharing 00000000000000000000000000000000 League-sponsored 00100000000000000000000000000000 Taif 00100000000000000000000000000000 vanishing 00000000000110011100011010010000 mother-in-law 00000000000000000000000000000000 BRACED 01000000001011011110110000110010 Kill 00100000000110011111111110110010 girded 00000000000000000000000000000000 six-story 00000000000000000000000000000000 longshoreman 00000000000000000000000000000000 REQUIRED 01000000000010001000110000110010 stowed 00000000000000000000000000000000 38.375 00000000000000000000000000000000 more-powerful 00000000000000000000000000000000 Mojave 00100000000000000000000000000000 reprisals 00000000000000000000000000000000 Honduran 00100000000001010100010100110000 panties 00000000000000000000000000000000 11,450 00000000000000000000000000000000 Tegucigalpa 00100000000000000000101101101000 Arab-Israeli 01000000000000000000000000000000 telephone-access 00000000000000000000000000000000 780 00000000000000000000000000000000 Telephone-operations 00100000000000000000000000000000 federal-systems 00000000000000000000000000000000 Customer-access 00100000000000000000000000000000 brassieres 00000000000000000000000000000000 .50 00000000000000000000000000000000 barbs 00000000000000000000000000000000 knee-jerk 00000000000000000000000000000000 hardliner 00000000000000000000000000000000 Alurralde 00100000000000000000000000000000 Camry 00100000000101111010001010110000 delinquency 00000000000000000000000000000000 reassuringly 00000000000000000000000000000000 Eppelmann 00100000000000000000000000000000 Protestant 00100000000100001000101000110000 pastor 00000000000001000111110000110101 delinquencies 00000000000000000000000000000000 tart 00000000000000000000000000000000 Ronnie 00100000000000000000000000000000 Flippo 00100000000000000000000000000000 consumer-credit 00000000000000000000000000000000 45,000-$60,000 00000000000000000000000000000000 contrasting 00000000000000000000000000000000 out-of-touch 00000000000000000000000000000000 Gethsemane 00100000000000000000000000000000 leaflets 00000000000000000000000000000000 implements 00000000000000000000000000000000 ideologist 00000000000000000000000000000000 inexplicable 00000000000000000000000000000000 fusing 00000000000000000000000000000000 pragmatists 00000000000010110100100000110011 braids 00000000000000000000000000000000 Electrochemical 00100000000000000000000000000000 Asbestos 00100000000000000010010000100001 Sept.30 00100000000000000000000000000000 already-shaky 00000000000000000000000000000000 DOE 01000000000001011000010000001000 electrolysis-of-water 00000000000000000000000000000000 deficit-racked 00000000000000000000000000000000 dissociate 00000000000000000000000000000000 plant-and-equipment 00000000000000000000000000000000 structively 00000000000000000000000000000000 1,310 00000000000000000000000000000000 dissociating 00000000000000000000000000000000 quieting 00000000000000000000000000000000 quiescent 00000000000000000000000000000000 perturbed 00000000000000000000000000000000 spendthrifts 00000000000000000000000000000000 hock 00000000000000000000000000000000 nonentity 00000000000000000000000000000000 tenths 00000000000000000000000000000000 40.3 00000000000000000000000000000000 Turgut 00100000000000000000000000000000 Gur 00100000000000000000000000000000 Jepson 00100000000000000000000000000000 detecting 00000000000010001011111101000000 Sandia 00100000000000000000000000000000 non-NMS 01000000000000000000000000000000 411 00000000000000000000000000000000 spurious 00000000000001101011000110010000 Shimson 00100000000000000000000000000000 Gottesfeld 00100000000000000000000000000000 lithium 00000000000000000000000000000000 postage 00000000000000000010011100000111 Kann 00100000000000000000000000000000 Margie 00100000000000000000000000000000 99,385 00000000000000000000000000000000 1,327 00000000000000000000000000000000 93.7 00000000000000000000000000000000 255.8 00000000000000000000000000000000 stickier 00000000000000000000000000000000 humbled 00000000101010000001110000110010 Beethoven 00100000000000000000000000000000 semiconductor-depreciation 00000000000000000000000000000000 belied 00000000000000000000000000000000 35-member 00000000000000000000000000000000 wireline 00000000000000000000000000000000 phrases 00000000001110110111110101100011 mid-1979 00000000000000000000000000000000 Lesley 00100000000000000000000000000000 Sharps 00100000000000000000000000000000 Pixley 00100000000000000000000000000000 economize 00000000000000000000000000000000 overwrought 00000000000000000000000000000000 amongst 00000000000000000000000000000000 Scrap 00100000010101111111110110110010 unleashes 00000000000000000000000000000000 compiles 00000000010010110001000000010010 Bruch 00100000000000000000000000000000 de-stocking 00000000000000000000000000000000 fabricators 00000000000000000000000000000000 arch-rival 00000000000000000000000000000000 Rhona 00100000000000000000000000000000 bond-holders 00000000000000000000000000000000 Urs 00100000000000000000000000000000 Seiler 00100000000000000000000000000000 Junk-holders 00100000000000000000000000000000 Meats 00100000000111100111101110110000 fewer-than-expected 00000000000000000000000000000000 ideologues 00000000000000000000000000000000 timpani 00000000000000000000000000000000 Rama 00100000000000000000000000000000 Jerrico 00100000000000000000000000000000 fervente 00000000000000000000000000000000 fattening 00000000000000000000000000000000 pitting 00000000000000000111001101000000 44-cent-a-barrel 00000000000000000000000000000000 19.98 00000000000000000000000000000000 1.2345 00000000000000000000000000000000 3,800-man 00000000000000000000000000000000 Hanauer 00100000000000000000000000000000 Agitato 00100000000000000000000000000000 constitutional-law 00000000000000000000000000000000 sputtered 00000000000000000000000000000000 propulsive 00000000000000000000000000000000 wired 00000010010001001100010000110010 overtaxed 00000000000000000000000000000000 meanders 00000000000000000000000000000000 Multiflow 00100000000000000000000000000000 orchestral 00000000000000000000000000000000 styled 00000000000111100101101001000000 Computing 00100000000000000110000001100001 divvying 00000000000000000000000000000000 Applications 00100000000110100101010100100011 clobber 00000000000000000000000000000000 ants 00000000000000000000000000000000 rhapsody 00000000000000000000000000000000 saturate 00000000000000000000000000000000 atonal 00000000000000000000000000000000 1,880 00000000000000000000000000000000 Slatkin 00100000000000000000000000000000 Konopnicki 00100000000000000000000000000000 Safford 00100000000000000000000000000000 Operators 00100000000111011110010000110011 Symphony 00100000000000000111101100100001 price-skirmishing 00000000000000000000000000000000 -fell 00000000000000000000000000000000 two-for-one 00000000000000000000000000000000 99-cent 00000000000000000000000000000000 ineffectiveness 00000000000000000000000000000000 D'Agosto 01000000000000000000000000000000 quick-service 00000000000000000000000000000000 131,146 00000000000000000000000000000000 Simply 00100000000001000000001001110010 lyricism 00000000000000000000000000000000 compute 00000000000000000000000000000000 single-store 00000000000000000000000000000000 Franchisees 00100000000110010111110000110011 snail-like 00000000000000000000000000000000 offbeat 00000000000000000000000000000000 Paos 00100000000000000000000000000000 heartfelt 00000000000000000000000000000000 droopy-eyed 00000000000000000000000000000000 ballplayer 00000000000000000000000000000000 Shorted 00100000000000000000000000000000 Percussion 00100000000000000000000000000000 baseball-card 00000000000000000000000000000000 jersey 00000000000000000001011110000010 Vizas 00100000000000000000000000000000 Strings 00100000000111111000010101100011 Cobbs 00100000000000000000000000000000 U.S.S.R 01000000000000000000000000000000 espousal 00000000000000000000000000000000 stuffy 00000000000100100100011010010000 headlights 00000000000000000000000000000000 Machon 00100000000000000000000000000000 Papa 00100000000000000000000000000000 Merola 00100000000000000000000000000000 kudos 00000000000000000000000000000000 scandalized 00000000000000000000000000000000 kerchiefed 00000000000000000000000000000000 greenfield 00001111111100100011000010001000 1,275,000 00000000000000000000000000000000 16.68 00000000000000000000000000000000 MAKE 01000000000111111011101110110010 Lamle 00100000000000000000000000000000 transparently 00000000000000000000000000000000 rundown 00000000000000000000000000000000 4.065 00000000000000000000000000000000 4.060 00000000000000000000000000000000 peelback 00000000000000000000000000000000 gigue-like 00000000000000000000000000000000 Stop-Limit 01000000000000000000000000000000 Stop-limit 00100000000000000000000000000000 stop-limit 00000000000000000000000000000000 Market-If-Touched 01000000000000000000000000000000 Market-if-touched 00100000000000000000000000000000 buy-stop 00000000000000000000000000000000 marcato 00000000000000000000000000000000 Fill-Or-Kill 01000000000000000000000000000000 motif 00000000000000000000000000000000 drug-consuming 00000000000000000000000000000000 Bessemer 00100000000001010100111000101000 Championship 00100000000000011010001100100001 Not-Held 01000000000000000000000000000000 Not-held 00100000000000000000000000000000 One-Cancels-The-Other 01000000000000000000000000000000 instructing 00000000000000000000000000000000 Specific-Time 01000000000000000000000000000000 market-on-close 00000000000000000000000000000000 Stop-close-only 00100000000000000000000000000000 good-till-canceled 00000000000000000000000000000000 good-til-canceled 00000000000000000000000000000000 Coplandesque 00100000000000000000000000000000 Angrist 00100000000000000000000000000000 SIZING 01000000000000000000000000000000 737.5 00000000000000000000000000000000 accompanist 00000000000000000000000000000000 fireplace 00000000000000000000000000000000 high-beta 00000000000000000000000000000000 Sharpe 00100000000000000000000000000000 well-diversified 00000000000000000000000000000000 market-inspired 00000000000000000000000000000000 Quips 00100000000111110010011111000010 Uh-uh 00100000000000000000000000000000 Pencils 00100000001010011111110101100011 Concurrent 00100000000011111000010000110000 Kochis 00100000000000000000000000000000 predilection 00000000000000000000000000000000 Spinola 00100000000000000000000000000000 limited-production 00000000000000000000000000000000 lulled 00000000000000000000000000000000 2,379 00000000000000000000000000000000 disguises 00000000000000000000000000000000 distressingly 00000000000000000000000000000000 supersafe 00000000000000000000000000000000 intonation 00000000000000000000000000000000 fixed-dollar 00000000000000000000000000000000 mathematically 00000000000000000000000000000000 stomach-churning 00000000000000000000000000000000 eyeball 00000000000000000000000000000000 quantified 00000000000000000000000000000000 B-flat 00100000000000000000000000000000 185.7 00000000000000000000000000000000 diluting 00000000000111011011011101000000 BDO 01000000000000000000000000000000 deviations 00000000000000000000000000000000 Cammack 00100000000000000000000000000000 Poeme 00100000000000000000000000000000 darts 00000000000000000001001111001001 Chausson 00100000000000000000000000000000 planks 00000000000000000000000000000000 economic-development 00000000000000000000000000000000 past. 00000000000000000000000000000000 Two-income 00100000000000000000000000000000 flip-flopped 00000000000000000000000000000000 mishandling 00000000000000000000000000000000 Castro-Medellin 01000000000000000000000000000000 nexus 00000000000000000000000000000000 THROUGHOUT 01000000000001001101000000001010 democratized 00000000000000000000000000000000 expletive 00000000000000000000000000000000 stomped 00000000000000000000000000000000 tinkered 00000000000000000000000000000000 hips 00000000000111000100111101100011 Oil-related 00100000000000000000000000000000 Pru-Bache 01000000000000000000000000000000 Disgusted 00100000000000000000000000000000 Sock 00100000000000000000000000000000 outselling 00000000000000000000000000000000 grandmotherly 00000000000000000000000000000000 synthetic-leather 00000000000000000000000000000000 cold-weather 00000000000000000000000000000000 Nissans 00100000000000000000000000000000 discount-toy 00000000000000000000000000000000 incalculable 00000000000000000000000000000000 Pre-College 01000000000000000000000000000000 lawns 00000000000111101001010101100011 bushes 00000000000000000000000000000000 locale 00000000000000000000000000000000 lodgings 00000000000000000000000000000000 greens 00000000000111111011001110110011 blooming 00000000000000000000000000000000 7A 01000000000000000000000000000000 7B 01000000000000000000000000000000 bodacious 00000000000000000000000000000000 insupportable 00000000000000000000000000000000 JAMES 01001111111000000000000100011000 SCHWARTZ 01001111111101011011000010001000 lad 00000000000000000000000000000000 turquoise 00000000000000000000000000000000 wrestlers 00000000000000000000000000000000 196.8 00000000000000000000000000000000 conservatory 00000000000000000000000000000000 41,900 00000000000000000000000000000000 shingle 00000000000111011100110000000001 frittering 00000000000000000000000000000000 flat-out 00000000000000000000000000000000 gypsy 00000000000000000000000000000000 dumber 00000000000000000000000000000000 chimpanzees 00000000000000000000000000000000 greedier 00000000000000000000000000000000 swine 00000000000000000000000000000000 zlotys 00000000000000000000000000000000 Porche 00100000000000000000000000000000 rogues 00000000000000000000000000000000 351.5 00000000000000000000000000000000 scammed 00000000000000000000000000000000 320.4 00000000000000000000000000000000 undetected 00000000000000000000000000000000 Carballo 00100000000000000000000000000000 116.7 00000000000000000000000000000000 Registered 00100000000001101100010000110010 humongous 00000000000000000000000000000000 Surveying 00100000000000000000000000000000 consumer-advocacy 00000000000000000000000000000000 Schwarzenberger 00100000000000000000000000000000 impelled 00000000000000000000000000000000 Henrik 00100000000000000000000000000000 peddled 00000000000000000000000000000000 pool... 00000000000000000000000000000000 2,412 00000000000000000000000000000000 Dracula 00100000000000000000000000000000 smarting 00000000000000000000000000000000 slurs 00000000000000000000000000000000 drawl 00000000000000000000000000000000 pooch 00000000000000000000000000000000 Naumberg 00100000000000000000000000000000 Regaard 00100000000000000000000000000000 certification 00000000000000000010111000111001 competency 00000000000000000000000000000000 shoved 00000000100000101001001000110010 minimun 00000000000000000000000000000000 Book-of-the-Month 01000000000000000000000000000000 bad-expectations 00000000000000000000000000000000 diploma 00000000000000000000000000000000 240SX 01000000000000000000000000000000 Salerno-Sonnenberg 01000000000000000000000000000000 contentions 00000000000000000000000000000000 snooty 00000000000000000000000000000000 13,249 00000000000000000000000000000000 misused 00000000000000000000000000000000 Wearing 00100000000011001100100101000000 western-style 00000000000000000000000000000000 Nadja 00100000000000000000000000000000 defamation 00000000000000000000000000000000 Rearding 00100000000000000000000000000000 truths 00000000000000000000000000000000 Riyadh 00100000000000000000000000000000 proessional 00000000000000000000000000000000 witha 00000000000000000000000000000000 implausible 00000000000000000000000000000000 gas-station 00000000000000000000000000000000 ICM 01000000000000000000000000000000 tanned 00000000000000000000000000000000 disembark 00000000000000000000000000000000 Mercedes-Benzes 01000000000000000000000000000000 BMWs 01000000000000000000000000000000 Neiman-Marcus 01000000000000000000000000000000 marble-encased 00000000000000000000000000000000 Atrium 00100000000000000000000000000000 graze 00000000000000000000000000000000 melodies 00000000000000000000000000000000 croons 00000000000000000000000000000000 ratepayers 00000000000111101001111010110011 squat 00000000000000000000000000000000 fleeced 00000000000000000000000000000000 Law-enforcement 00100000000000000000000000000000 mingle 00000000000000000000000000000000 Kacy 00100000000000000000000000000000 aerodynamic 00000000000000000000000000000000 welter 00000000000111111100001000111111 yachts 00000000000110100111110001100011 low-lifes 00000000000000000000000000000000 bunco 00000000000000000000000000000000 Maggot 00100000000000000000000000000000 Con 00100000000000001101001000110000 breezes 00000000000000000000000000000000 lazily 00000000000000000000000000000000 Nightlife 00100000000000000000000000000000 ostentation 00000000000000000000000000000000 pug-nosed 00000000000000000000000000000000 547,000 00000000000000000000000000000000 pleasure-boat 00000000000000000000000000000000 Corvettes 00100000000000000000000000000000 swankier 00000000000000000000000000000000 multi-agency 00000000000000000000000000000000 17,699 00000000000000000000000000000000 tax-sheltered 00000000000000000000000000000000 Bible 00100000000111100110011000000001 September-October 01000000000000000000000000000000 slick-talking 00000000000000000000000000000000 snake-oil 00000000000000000000000000000000 Cho-Liang 01000000000000000000000000000000 Mintz 00100000000000000000000000000000 originate 00000000000000000000000000000000 sliver-like 00000000000000000000000000000000 hooks 00000000000000000000000000000000 big-bucks 00000000000000000000000000000000 generically 00000000000000000000000000000000 penny-ante 00000000000000000000000000000000 pen-and-pencil 00000000000000000000000000000000 oil-leasing 00000000000000000000000000000000 Shlomo 00100000000000000000000000000000 near-luxury 00000000000000000000000000000000 pedagogue 00000000000000000000000000000000 carted 00000001001100101001001000110010 indulge 00000000000000000000000000000000 Lompoc 00100000000000000000000000000000 Prison 00100000000001100110110101010111 Intech 00100000000000000000000000000000 Lido 00100000000000000000000000000000 virtuosos 00000000000000000000000000000000 transportable 00000000000000000000000000000000 Luehrs 00100000000000000000000000000000 WENT 01000000000011001100001000110010 223.7 00000000000000000000000000000000 toddler 00000000000000000000000000000000 Prestige 00100000000111111111110010100111 U. 00101111111001010011010100001000 annals 00000000000000000000000000000000 contemporaries 00000000000000000000000000000000 Tuitions 00100000000000000000000000000000 19,395 00000000000000000000000000000000 newborns 00000000000000000000000000000000 pizzas-with-everything 00000000000000000000000000000000 Sarasota 00100000000110101000101001101000 utmosts 00000000000000000000000000000000 deep-discount 00000000000000000000000000000000 Riepe 00100000000000000000000000000000 Ruffel 00100000000000000000000000000000 237.1 00000000000000000000000000000000 top-rated 00000000000000000000000000000000 Belatedly 00100000000000000000000000000000 instructive 00000000000011010011001110010000 obtainable 00000000000000000000000000000000 Hori 00100000000000000000000000000000 first-grader 00000000000000000000000000000000 773.94 00000000000000000000000000000000 691.09 00000000000000000000000000000000 Plugging 00100000000000000000000000000000 formulas 00000000000111101011011100100011 private-school 00000000000000000000000000000000 prescribes 00000000000000000000000000000000 before-tax 00000000000000000000000000000000 16,500 00000000000000000000000000000000 Kouji 00100000000000000000000000000000 prods 00000000000000000000000000000000 all-stock 00000000000000000000000000000000 mixes 00000000001111100111000000010010 benefactors 00000000000000000000000000000000 Yehudi 00100000000000000000000000000000 prepaid-tuition 00000000000000000000000000000000 17-city 00000000000000000000000000000000 manipulators 00000000000000000000000000000000 alluring 00000000000000000000000000000000 268.98 00000000000000000000000000000000 Alternatives 00100000000111101011001110100011 Issuing 00100000000000111111111101000000 die-hards 00000000000000000000000000000000 Prepayments 00100000000000000000000000000000 Sponsors 00100000000110010010000010110011 indexed 00000000000001010101101001000000 Putka 00100000000000000000000000000000 eduction 00000000000000000000000000000000 Finn 00101111111100000011001000001000 AMONG 01000000000000000001100000001010 CATFISH 01000000000111001000101100100001 watery 00000000010011011000001000110000 Humphreys 00100000000000000000000000000000 Rexinger 00100000000000000000000000000000 Isola 00100000000000000000000000000000 enterprising 00000000000000000000000000000000 quarter-inch 00000000000000000000000000000000 fingerlings 00000000000000000000000000000000 one-pound-or-so 00000000000000000000000000000000 food-fish 00000000000000000000000000000000 live-hauled 00000000000000000000000000000000 whiskery 00000000000000000000000000000000 shambles 00000000000000000000000000000000 live-haulers 00000000000000000000000000000000 hulk 00000000000000000000000000000000 fouled 00000000000000000000000000000000 full-bodied 00000000000000000000000000000000 12.68 00000000000000000000000000000000 33.875 00000000000000000000000000000000 brawny 00000000000000000000000000000000 dubiously 00000000000000000000000000000000 Mail-order 00100000000000000000000000000000 squelched 00000000000000000000000000000000 evangelists 00000000000111110110000100100011 hiders 00000000000000000000000000000000 used-car 00000000000000000000000000000000 masons 00000000000000000000000000000000 roofers 00000000000000000000000000000000 Afterwards 00100000000000000000000000000000 Rodman 00100000000000000000000000000000 gaped 00000000000000000000000000000000 Deductions 00100000000111111101001100000011 crab 00000000000000000000000000000000 ferret 00000000000000000000000000000000 form-letter 00000000000000000000000000000000 Unreported 00100000001000110000011100010000 Stalinism 00100000000000000000000000000000 payer 00000000000000000000000000000000 Passport 00100000000111010101010000000001 80.53 00000000000000000000000000000000 d-Percent 01000000000000000000000000000000 Itzhak 00100000000000000000000000000000 undergirding 00000000000000000000000000000000 Defining 00100000000000011111011101000000 Impetus 00100000000111001011101100100111 direct-seller 00000000000000000000000000000000 noncompliant 00000000000000000000000000000000 well-lighted 00000000000000000000000000000000 1,647 00000000000000000000000000000000 16,746 00000000000000000000000000000000 6,805 00000000000000000000000000000000 5,088 00000000000000000000000000000000 Rubins 00100000000000000000000000000000 65,619 00000000000000000000000000000000 tax-compliance 00000000000000000000000000000000 independent-contractor 00000000000000000000000000000000 innuendo 00000000000000000000000000000000 56,000 00000000000000000000000000000000 misclassified 00000000000000000000000000000000 tipsters 00000000000000000000000000000000 Aoyama 00100000000000000000000000000000 miscreant 00000000000000000000000000000000 drywall 00000000000000000000000000000000 receptionists 00000000000000000000000000000000 cruise-ship 00000000000000000000000000000000 deckhands 00000000000000000000000000000000 Off-Track 01000000000000000000000000000000 Revenue-short 00100000000000000000000000000000 pursuers 00000000000000000000000000000000 delinquents 00000000000000000000000000000000 roundly 00000000000000000000000000000000 Betting 00100000000111111010110101000000 1,222 00000000000000000000000000000000 3,175 00000000000000000000000000000000 high-income 00000000000000000000000000000000 combed 00000000000000000000000000000000 tax-department 00000000000000000000000000000000 computer-matching 00000000000000000000000000000000 Zama 00100000000000000000000000000000 Schmedel 00100000000000000000000000000000 Privileged 00100000000010000101000010010000 town-watching 00000000000000000000000000000000 trend-setters 00000000000000000000000000000000 proficiency 00000000000010000110110000100001 socioeconomically 00000000000000000000000000000000 disadvantaged 00000000000001111010101000110000 Antoni 00100000000000000000000000000000 Neanderthals 00100000000000000000000000000000 racial-minority 00000000000000000000000000000000 THOSE 01000000000000000010000011000000 DELIGHT 01000000000111100010110101100111 misfortune 00000000000000000000000000000000 Desperately 00100000001100000001001001110010 upped 00000000000000000000000000000000 blurt 00000000000000000000000000000000 grand-prize 00000000000000000000000000000000 less-conservative 00000000000000000000000000000000 economic-crime 00000000000000000000000000000000 overdrawn 00000000000000000000000000000000 frailties 00000000000000000000000000000000 10:08 00000000000000000000000000000000 tales 00000000000100100101110101100011 boogieman 00000000000000000000000000000000 McMahon 01001111111010111101001000001000 Signet 00100000001110101001000100101000 Barasch 00100000000000000000000000000000 in-crowd 00000000000000000000000000000000 SH 01000000000000000000000000000000 Adamski 00100000000000000000000000000000 financial-crimes 00000000000000000000000000000000 embellish 00000000000000000000000000000000 larceny 00000000000000000000000000000000 longed-for 00000000000000000000000000000000 mitigation 00000000000000000000000000000000 pinging 00000000000000000000000000000000 deceive 00000000001000100111111110110010 majoring 00000000000000000000000000000000 Andreassen 00100000000000000000000000000000 garbage-incinerator 00000000000000000000000000000000 marquees 00000000000000000000000000000000 business-venture 00000000000000000000000000000000 bunko-forgery 00000000000000000000000000000000 Born-again 00100000000000000000000000000000 do-gooder 00000000000000000000000000000000 neon 00000000000011001010001000110000 Scam 00100000000111011100101101100111 Lynes 00100000000000000000000000000000 Deane 00100000000000000000000000000000 peddler 00000000000000000000000000000000 Garish 00100000000000000000000000000000 Powder 00100000000111001110111000000001 Trinen 00100000000000000000000000000000 penny-brokerage 00000000000000000000000000000000 apprised 00000000000000000000000000000000 ingratiate 00000000000000000000000000000000 Terree 00100000000000000000000000000000 Bowers 00100000000000000000000000000000 major-frauds 00000000000000000000000000000000 flim-flam 00000000000000000000000000000000 Elvekrog 00100000000000000000000000000000 enticingly 00000000000000000000000000000000 Seger-Elvekrog 01000000000000000000000000000000 investment-counseling 00000000000000000000000000000000 money-retirees 00000000000000000000000000000000 underworld 00000000000000000000000000000000 84.29 00000000000000000000000000000000 Jerald 00100000000000000000000000000000 Jellison 00100000000000000000000000000000 THREE 01000000000111101011111001010000 Brannigan 00100000000000000000000000000000 455,000 00000000000000000000000000000000 not-quite-mainstream 00000000000000000000000000000000 Tanaka 00101111111010100110101010001000 FOX 01000000000100111010010000001000 HUNTING 01000000011000000010110001000000 unspeakable 00000000000000000000000000000000 inedible 00000000000000000000000000000000 Kitada 00100000000000000000000000000000 Kakuei 00100000000000000000000000000000 Satoko 00100000000000000000000000000000 kingmaker 00000000000000000000000000000000 incomprehensible 00000000000000000000000000000000 Hayasaka 00100000000000000000000000000000 gibberish 00000000000000000000000000000000 fox 00000000000100111010010000001000 standbys 00000000000000000000000000000000 Shigezo 00100000000000000000000000000000 festooned 00000000000000000000000000000000 Shorn 00100000000000000000000000000000 whistles 00000000000000000000000000000000 grouped 00000011010001001100010000110010 death-benefit 00000000000000000000000000000000 stipulate 00000000000000000000000000000000 beast 00000000000111111110001101100111 Smart 00100000000100001000011010010000 Sounds 00100000001011101000001000110010 5,760 00000000000000000000000000000000 dodge 00000000000011000011111100001000 seamier 00000000000000000000000000000000 permanent-insurance 00000000000000000000000000000000 gilding 00000000000000000000000000000000 lily 00000000000101001101111100001000 effrontery 00000000000000000000000000000000 simplest 00000000000000010111010011010000 Spaull 00100000000000000000000000000000 RIT 01000000000000000000000000000000 beg 00000000000101011010100110110010 Hugely 00100000000000000000000000000000 62.70 00000000000000000000000000000000 Projecting 00100000000101100001110101000000 Pfiefer 00100000000000000000000000000000 actuarial 00000000000000110010010100010000 Tillinghast 00100000000000000000000000000000 back-yard 00000000000000000000000000000000 barbecue 00000000000010010111101100100001 Dominici 00100000000000000000000000000000 cronyism 00000000000000000000000000000000 living-benefits 00000000000000000000000000000000 Security-Connecticut 01000000000000000000000000000000 20-stocks 00000000000000000000000000000000 attarcks 00000000000000000000000000000000 dimensions 00000000000111101000000100101111 policyholder 00000000000000000000000000000000 resembling 00000000000000000110000000001010 low-load 00000000000000000000000000000000 Insureres 00100000000000000000000000000000 president-engineering 00000000000000000000000000000000 792 00000000000000000000000000000000 Id 00100000000000000000000000000000 cringed 00000000000000000000000000000000 871 00000000000000000000000000000000 pipsqueak 00000000000000000000000000000000 292.32 00000000000000000000000000000000 Stumpf 00100000000000000000000000000000 244.6 00000000000000000000000000000000 gun-carrying 00000000000000000000000000000000 10:33 00000000000000000000000000000000 telecines 00000000000000000000000000000000 stanch 00000000000000000000000000000000 then-pending 00000000000000000000000000000000 6,256 00000000000000000000000000000000 Oberhausen 00100000000000000000000000000000 Sintel 00100000000000000000000000000000 5.37 00000000000000000000000000000000 347.13 00000000000000000000000000000000 crunched 00000000000000000000000000000000 Audiovisual 00100000000000000000000000000000 oomph 00000000000000000000000000000000 VandenBerg 01000000000000000000000000000000 stocks-index 00000000000000000000000000000000 unwinding 00000000000000000000000000000000 5,273 00000000000000000000000000000000 9,023 00000000000000000000000000000000 8,524 00000000000000000000000000000000 Leopold 00100000000000000000000000000000 profess 00000000000000000000000000000000 self-criticism 00000000000000000000000000000000 Ricken 00100000000000000000000000000000 despise 00000000000000000000000000000000 refile 00000000000000000000000000000000 AON 01000000000000000000000000000000 5,651 00000000000000000000000000000000 263.07 00000000000000000000000000000000 lotter 00000000000000000000000000000000 Cities-ABC 01000000000000000000000000000000 Agin 00100000000000000000000000000000 382.81 00000000000000000000000000000000 14,580,000 00000000000000000000000000000000 TRC 01000000000000000000000000000000 Metatrace 00100000000000000000000000000000 oiler 00000000000000000000000000000000 Joerg 00100000000000111101100010011000 Saull 00100000000000000000000000000000 afire 00000000000000000101111100110010 -complicated 00000000000000000000000000000000 8,355 00000000000000000000000000000000 35mm 00000000000000000000000000000000 sensitize 00000000000000000000000000000000 sheetrock 00000000000000000000000000000000 untreated 00000000000000000000000000000000 Compensation 00100000000101000010001000111001 middle-age 00000000000000000000000000000000 Hirschfeld 00100000000000000000000000000000 Mental 00100000000101000101000000110000 stress-producing 00000000000000000000000000000000 stress-provoking 00000000000000000000000000000000 Mid-sized 00100000000000000000000000000000 burnout 00000000000101000101110010100111 stressors 00000000000000000000000000000000 Rohrer 00100000000000000000000000000000 Hibler 00100000000000000000000000000000 Replogle 00100000000000000000000000000000 Cheap 00100000000011100101011010010000 Fares 00100000000000001001000100000011 Spend 00100000001110111111001110110010 Aloft 00100000000000111011111100110010 ISN'T 01000000000000000000000000000000 TRUE 01000000000011000100010110010000 90-year 00000000000000000000000000000000 picky 00000000000000000000000000000000 CCD 01000000000000000000000000000000 HD 01000000000000000000000000000000 DC-9 01000000000000000000000000000000 'T- 01000000000000000000000000000000 Season 00100000000111101110001000100111 Jolly 00100000000000000000000000000000 Kringle 00100000000000000000000000000000 Burnsville 00100000000000000000000000000000 sky-high 00000000000000000000000000000000 Spouse 00100000000111100111010010110101 Name 00100000000111111110111010110111 knotty 00000000000000000000000000000000 Marlo 00100000000000000000000000000000 Donahue 00100000000000000000000000000000 Eleven 00100000000000001111000011000000 business-class 00000000000000000000000000000000 bated 00000000000000000000000000000000 abusing 00000000000000000000000000000000 whimsically 00000000000000000000000000000000 Porsche-like 00100000000000000000000000000000 Wolfson 00100000000000000000000000000000 Vacation 00100000000000011110000000100001 HURRICANE 01000000000100100101100100100001 Zicklin 00100000000000000000000000000000 downed 00000000000000000000000000000000 coconuts 00000000000000000000000000000000 cottage 00000000000010001000101100100001 avenge 00000000000000000000000000000000 THAT 01000000000000000000000101000010 one-way 00000000000000000000000000000000 3,481,887 00000000000000000000000000000000 Compassion 00100000000111111100110010100111 advance-purchase 00000000000000000000000000000000 hurricane-stricken 00000000000000000000000000000000 455,410 00000000000000000000000000000000 squandering 00000000000000000000000000000000 Yachtsman 00100000000000000000000000000000 pong 00000000000000000000000000000000 Grill 00100000000000000000000000000000 Jacuzzi 00100000000000000000000000000000 75.41 00000000000000000000000000000000 Bit 00100000000111111111110001111111 SENIOR 01000000000110100111101001110000 CITIZENS 01000000000111111111100000110011 180.3 00000000000000000000000000000000 108-year-old 00000000000000000000000000000000 Lansing 00100000000110100001101001101000 Else 00100000000111100101000101001000 NATION'S 01000000000000000000000000000000 clergy 00000000000111010101100110110011 oilfield 00000000000000000000000000000000 Depression-era 00100000000000000000000000000000 151.8 00000000000000000000000000000000 Imagine 00100000000110110110100110110010 4,930 00000000000000000000000000000000 Eliminating 00100000000110001001011101000000 cutters 00000000000000000000000000000000 earnings-limit 00000000000000000000000000000000 Reconciliation 00100000000000000011111111111001 bolt 00000000000111111001111100001000 Hastert 00100000000000000000000000000000 -4.8 00000000000000000000000000000000 fright 00000000000010001010111010100111 eighth-floor 00000000000000000000000000000000 garments 00000000000110100110111001100011 fur-making 00000000000000000000000000000000 attention... 00000000000000000000000000000000 reinvigorated 00000000000000000000000000000000 whooosh 00000000000000000000000000000000 working-girl 00000000000000000000000000000000 rubber-stamp 00000000000000000000000000000000 Jindo 00100000000000000000000000000000 Tadahiko 00100000000000000000000000000000 High-end 00100000000000000000000000000000 middle-priced 00000000000000000000000000000000 Smedes 00100000000000000000000000000000 five-block 00000000000000000000000000000000 overdependence 00000000000000000000000000000000 Inspired 00100000000111100111010000110010 muffs 00000000000000000000000000000000 flings 00000000000000000000000000000000 dyed 00000000000000000000000000000000 Jeeps 00100000000000000000000000000000 eel 00000000000000000000000000000000 raccoon-skin 00000000000000000000000000000000 collars 00000000000000000000000000000000 pictured 00000000000000000000000000000000 filched 00000000000000000000000000000000 kalega 00000000000000000000000000000000 rustlers 00000000000000000000000000000000 coed 00000000000000000000000000000000 65-year-old 00000000000000000000000000000000 Raphael 00100000000000000000000000000000 lambskin 00000000000000000000000000000000 fur-and-leather 00000000000000000000000000000000 overstating 00000000000000000000000000000000 Antonovich 00100000000000000000000000000000 Fur 00100000001010001011111010110000 Vault 00100000000101110010100110110111 Aftereffects 00100000000000000000000000000000 Warm 00100000001000000100011010010000 winters 00000000000000000000000000000000 landscapers 00000000000000000000000000000000 furrier 00000000000000000000000000000000 -didn't 00000000000000000000000000000000 snappy 00000000000000000000000000000000 vending 00000000000110010101010000110000 ARA 01000000000000000000000000000000 22,925 00000000000000000000000000000000 Hepatitis 00100000000111111101110000100001 Provato 00100000000000000000000000000000 arms-reduction 00000000000000000000000000000000 3648.82 00000000000000000000000000000000 hundred-thousand-share 00000000000000000000000000000000 flex-time 00000000000000000000000000000000 gamma 00000000000000000000000000000000 globulin 00000000000000000000000000000000 flu-like 00000000000000000000000000000000 22,336 00000000000000000000000000000000 Brave 00100000000010110010011010010000 gleaned 00000000000000110001100100110010 subtlety 00000000000000000000000000000000 narcotraficantes 00000000000000000000000000000000 overleveraged 00000000000000000000000000000000 Credibility 00100000000111101111110100100111 hinterlands 00000000000000000000000000000000 Poulin 00100000000000000000000000000000 Lend 00100000001011101111001110110010 bylines 00000000000000000000000000000000 Reward 00100000000111111010110010110111 COCA-COLA 01000000000000000000000000000000 Arboretum 00100000000000000000000000000000 Loran 00100000000000000000000000000000 786,100 00000000000000000000000000000000 regimen 00000000000000000000000000000000 Evidently 00100001001100000000001001110010 money-supply 00000000000000000000000000000000 paramount 00000000000111110111111000101000 courtesan 00000000000000000000000000000000 2.9428 00000000000000000000000000000000 drumroll 00000000000000000000000000000000 1,695,000 00000000000000000000000000000000 building-society 00000000000000000000000000000000 16.22 00000000000000000000000000000000 quick-fix 00000000000000000000000000000000 taller 00000000000000000000000000000000 70.5-point 00000000000000000000000000000000 two-foot 00000000000000000000000000000000 486tm 00000000000000000000000000000000 information-technology 00000000000000000000000000000000 jockeys 00000000000101000111000111110011 LSX 01000000000000000000000000000000 16,250 00000000000000000000000000000000 ISC 01000000000000000000000000000000 fern-like 00000000000000000000000000000000 trunks 00000000000000000000000000000000 bank-branch 00000000000000000000000000000000 stubby 00000000000000000000000000000000 44.7 00000000000000000000000000000000 long-necked 00000000000000000000000000000000 erembal 00000000000000000000000000000000 930 00000000000000000000000000000000 566 00000000000000000000000000000000 doll-sized 00000000000000000000000000000000 SSI 01000000000000000000000000000000 50,400 00000000000000000000000000000000 250.80 00000000000000000000000000000000 3,855.60 00000000000000000000000000000000 Beneficiaries 00100000000111101010001010110011 9,360 00000000000000000000000000000000 6,840 00000000000000000000000000000000 6,480 00000000000000000000000000000000 Health-care 00100000000000000000000000000000 Pitcoff 00100000000000000000000000000000 Medical-supply 00100000000000000000000000000000 Becton 00100000000000000000000000000000 Dickinson 00101111111111000110111000001000 syringe 00000000000110111000000001000111 Fuller 00101111111010011000001000001000 weak-kneed 00000000000000000000000000000000 spurning 00000000000110011001001101000000 283-132 00000000000000000000000000000000 Bosco 00100000000000000000000000000000 190.1 00000000000000000000000000000000 Sidoti 00100000000000000000000000000000 wanes 00000000000000000000000000000000 Cycads 00100000000000000000000000000000 31,143 00000000000000000000000000000000 botany 00000000000000000000000000000000 58.2 00000000000000000000000000000000 enrollments 00000000000111101110110001000001 334,000 00000000000000000000000000000000 1,809,300 00000000000000000000000000000000 1,838,200 00000000000000000000000000000000 46,995 00000000000000000000000000000000 150.8 00000000000000000000000000000000 rustling 00000000000000000000000000000000 2.94 00000000000000000000000000000000 Avena 00100000000000000000000000000000 Steinkrauss 00100000000000000000000000000000 deterrant 00000000000000000000000000000000 89.75 00000000000000000000000000000000 palm-tree 00000000000000000000000000000000 teenagers 00000000000000000000000000000000 roll-out 00000000000000000000000000000000 shovel 00000000000000000000000000000000 Palmolive 00100000000001010100010000101000 awoke 00000000000000000000000000000000 60.2 00000000000000000000000000000000 Purloined 00100000000000000000000000000000 Erle 00100000000000000000000000000000 217.5 00000000000000000000000000000000 191.1 00000000000000000000000000000000 intracompany 00000000000000000000000000000000 Qualls 00100000000000000000000000000000 Billerica 00100000000000000000000000000000 FDA-approved 01000000000000000000000000000000 sealants 00000000000000000000000000000000 bonding 00000000000000101101110000100001 fluoride 00000000000000000000000000000000 benchmarks 00000000000000000000000000000000 anti-lock 00000000000000000000000000000000 half-owned 00000000000000000000000000000000 Wyly 00100000000000000000000000000000 Buster 00100000000000000000000000000000 587 00000000000000000000000000000000 8.81 00000000000000000000000000000000 depreciable 00000000000000000000000000000000 20%-a-year 00000000000000000000000000000000 Industriali 00100000000000000000000000000000 Riunite 00100000000000000000000000000000 26.81 00000000000000000000000000000000 J.E. 01000000000000000000000000000000 side-by-side 00000000000000000000000000000000 stolid 00000000000000000000000000000000 Olds 00100000000000000000000110000000 fickleness 00000000000000000000000000000000 Seth 00100000000000000000000000000000 collectivizers 00000000000000000000000000000000 Agoura 00100000000000000000000000000000 auto-market 00000000000000000000000000000000 Cedergren 00100000000000000000000000000000 Indexed 00100000000001010101101001000000 Kartalia 00100000000000000000000000000000 ANB 01000000000000000000000000000000 Plain-vanilla 00100000000000000000000000000000 well-educated 00000000000000000000000000000000 custodial 00000000000001111000010000110000 toaster 00000000000000000000000000000000 hyper-trader 00000000000000000000000000000000 Cyprus 00100000000010100011000100101000 convertibles 00000000000101110111110101100011 discrepencies 00000000000000000000000000000000 Zumbrunn 00100000000000000000000000000000 slighty 00000000000000000000000000000000 RISK 01000000000111111111010101100111 MANAGER 01000000000000010010101000110101 REPLICATION 01000000000000000000000000000000 Salerno 00100000000000000000000000000000 TILT 01000000000101100101001010110111 overweighted 00000000000000000000000000000000 underweighted 00000000000000000000000000000000 sisters 00000000000000011101011100110011 SPECIALIZED 01000000000011000100101010110000 Indexes 00100000000000001000101001110011 predictor 00000000000000000000000000000000 523,920,214 00000000000000000000000000000000 547,347,585 00000000000000000000000000000000 53,496,665 00000000000000000000000000000000 51,911,566 00000000000000000000000000000000 461,539,056 00000000000000000000000000000000 36,015,194 00000000000000000000000000000000 mid-December 01000000000000000000000000000000 mid-July 01000000000000000000000000000000 Fluctuation 00100000000111011011111010100111 arbitraging 00000000000000000000000000000000 TB 01000000000000000000000000000000 5.82 00000000000000000000000000000000 12,822,563 00000000000000000000000000000000 K-H 01000000000000000000000000000000 Fruehauf 00100000000111000000111100101000 577.3 00000000000000000000000000000000 3,383,477 00000000000000000000000000000000 5,267,238 00000000000000000000000000000000 7,592,988 00000000000000000000000000000000 12,017,724 00000000000000000000000000000000 1,425,035 00000000000000000000000000000000 2,387,226 00000000000000000000000000000000 4,469,167 00000000000000000000000000000000 5,088,774 00000000000000000000000000000000 67,972 00000000000000000000000000000000 183,467 00000000000000000000000000000000 3,820,634 00000000000000000000000000000000 3,363,949 00000000000000000000000000000000 552,302 00000000000000000000000000000000 2,157,656 00000000000000000000000000000000 445,645 00000000000000000000000000000000 141,903 00000000000000000000000000000000 Iberian 00100000000000000000000000000000 73,100 00000000000000000000000000000000 255,923 00000000000000000000000000000000 Pitiful 00100000000000000000000000000000 Helpless 00100000000000000000000000000000 opining 00000000000000000000000000000000 greener 00000000011001110100000000001000 Terrorism 00100000000110100011110010100111 Narcotics 00100000000000110010111010110000 overthrowing 00000000000000000000000000000000 German-made 00100000000000000000000000000000 Saturn 00100000000000001100110100101000 narcokleptocrat 00000000000000000000000000000000 color-coding 00000000000000000000000000000000 cucumber 00000000000101100110101100100001 oddity 00000000000000000000000000000000 94,543 00000000000000000000000000000000 pre-reform 00000000000000000000000000000000 outlasted 00000000000000000000000000000000 state-produced 00000000000000000000000000000000 collectives 00000000000000000000000000000000 descended 00000000000000000000000000000000 exploiter 00000000000000000000000000000000 Warned 00100000000111011111110111000010 rejoined 00000000000000000000000000000000 commend 00000000000100011010100110110010 motorbike 00000000000000000000000000000000 tins 00000000000000000000000000000000 tire-patching 00000000000000000000000000000000 WARS 01000000000111101101001111111001 Chans 00100000000000000000000000000000 Bethle 00100000000000000000000000000000 daybreak 00000000000000000000000000000000 unroll 00000000000000000000000000000000 general-practice 00000000000000000000000000000000 squeezes 00000000000000000000000000000000 bathtub 00000000000000000000000000000000 Claws 00100000000000000000000000000000 optimistically 00001110011000000000010001110010 Engines 00100000000111110100101001100011 import-export 00000000000000000000000000000000 Kalison 00100000000000000000000000000000 Jeanene 00100000000000000000000000000000 158,863 00000000000000000000000000000000 37,860 00000000000000000000000000000000 Appointed 00100000000111000010010000110010 electrified 00000000000000000000000000000000 audacity 00000000000000000000000000000000 Manger 00100000000000000000000000000000 41-lawyer 00000000000000000000000000000000 tax-collection 00000000000000000000000000000000 Thanh 00100000000000000000000000000000 Hoa 00100000000000000000000000000000 stormed 00000000000011110001001000110010 well-defined 00000000000000000000000000000000 Huy 00100000000000000000000000000000 Thiep 00100000000000000000000000000000 MERGER 01000000000111101010100011001111 veiled 00000000000011000101000000010000 Duy 00100000000000000000000000000000 Billionaire 00100000000000011010011110110101 2,303,328 00000000000000000000000000000000 69,980 00000000000000000000000000000000 JERSEY 01000000000000000001011110000010 MacDougall 01000000000000000000000000000000 hem 00000000000000000000000000000000 doi 00000000000000000000000000000000 moi 00000000000000000000000000000000 general-director 00000000000000000000000000000000 unhusked 00000000000000000000000000000000 Petro 00100000000111101001011000110000 poor-quality 00000000000000000000000000000000 ignite 00000000001001101111101110110010 property- 00000000000000000000000000000000 casualty-insurance 00000000000000000000000000000000 Cut 00100000000111010010010110110010 actives 00000000000000000000000000000000 liberating 00000000000000000000000000000000 Sr 00100000000000000000000000000000 258.4 00000000000000000000000000000000 408 00000000000000000000000000000000 VGA 01000000000000000000000000000000 adapter 00000000000000000000000000000000 EGA 01000000000000000000000000000000 EGA-VGA 01000000000000000000000000000000 3.5-inch 00000000000000000000000000000000 citya 00000000000000000000000000000000 wafer 00000000000000000000000000000000 embryonic 00000000000000000000000000000000 Esnard 00100000000000000000000000000000 capital-boosting 00000000000000000000000000000000 Consob 00100000000000000000000000000000 180.9 00000000000000000000000000000000 331.8 00000000000000000000000000000000 273.9 00000000000000000000000000000000 5.23 00000000000000000000000000000000 240.8 00000000000000000000000000000000 923 00000000000000000000000000000000 65.9 00000000000000000000000000000000 899.8 00000000000000000000000000000000 807.5 00000000000000000000000000000000 18.73 00000000000000000000000000000000 15.09 00000000000000000000000000000000 Brest 00100000000000000000000000000000 negated 00001101101011010100010000110010 commercial-products 00000000000000000000000000000000 84.4 00000000000000000000000000000000 182.1 00000000000000000000000000000000 stock-specialist 00000000000000000000000000000000 14-judge 00000000000000000000000000000000 nine-months 00000000000000000000000000000000 Delmont 00100000000000000000000000000000 long-familiar 00000000000000000000000000000000 jet-engine 00000000000000000000000000000000 755.9 00000000000000000000000000000000 838.3 00000000000000000000000000000000 sputter 00000000000000000000000000000000 sprawl 00000000000000000000000000000000 similiar 00000000000000000000000000000000 non-dischargable 00000000000000000000000000000000 Manufacturer 00100000000111100010100001110101 decribed 00000000000000000000000000000000 Airborne 00100000000000001110001010110000 wage-discrimination 00000000000000000000000000000000 engages 00000000000000000000000000000000 356.1 00000000000000000000000000000000 Insitutional 00100000000000000000000000000000 institutional-type 00000000000000000000000000000000 85.49 00000000000000000000000000000000 116.56 00000000000000000000000000000000 154.05 00000000000000000000000000000000 3,288,453 00000000000000000000000000000000 infancy 00000000000000000000000000000000 Mohamed 00100000000000000000000000000000 pullet-roofed 00000000000000000000000000000000 Ismail 00100000000000000000000000000000 gasp 00000000000000000000000000000000 1984-85 00000000000000000000000000000000 457 00000000000000000000000000000000 replenish 00000000000101100100111110110010 AUTO 01000000000000000000001110110000 376.36 00000000000000000000000000000000 property-price 00000000000000000000000000000000 Perimeter 00100000000000000000000000000000 pro-Iranian 01000000000000000000000000000000 Petroliam 00100000000000000000000000000000 Nasional 00100000000000000000000000000000 Hashidate 00100000000000000000000000000000 Secrecy 00100000001011100110011010100111 foregone 00000000000000000000000000000000 Malays 00100000000000000000000000000000 UMNO 01000000000000000000000000000000 auto-dealer 00000000000000000000000000000000 knell 00000000000000000000000000000000 choir 00000000000111101110010100000001 symbolizes 00000000000000000000000000000000 novice 00000000000000000000000000000000 whirl 00000000000000000000000000000000 grassroots 00000000000000000000000000000000 Passaic 00100000000000000000000000000000 Reagan-Republican 01000000000000000000000000000000 governorship 00000000000000000000000000000000 torment 00000000000100001001001010110111 bulwark 00000000000000000000000000000000 SMYRNA 01000000000000000000000000000000 Sidley-Ashurst 01000000000000000000000000000000 Courter... 00100000000000000000000000000000 women's-rights 00000000000000000000000000000000 Schimberg 00100000000000000000000000000000 leotards 00000000000000000000000000000000 beefy 00000000000000000000000000000000 sardonically 00000000000000000000000000000000 solicitors 00000000000000000000000000000000 Rutgers 00100000000000000000000000000000 Eagleton 00101111111100010000111010001000 Eagleton-Newark 01000000000000000000000000000000 Ledger 00100000000000000000000000000000 6.53 00000000000000000000000000000000 I'm-coming-down-your-throat 00100000000000000000000000000000 Italian-American 01000000000000000000000000000000 methodically 00000000000000000000000000000000 tycoons 00000000000000000000000000000000 Kathy 00100000000000000000000000000000 Stanwick 00100000000000000000000000000000 Traynor 00100000000000000000000000000000 aggravates 00001011011010000011000000010010 mean-spirited 00000000000000000000000000000000 rightward 00000000000000000000000000000000 hawkish 00000000000000000000000000000000 anti-tax 00000000000000000000000000000000 Fluent 00100000000000000000000000000000 Asbury 00100000000000000000000000000000 founders 00000000000111001110101010110011 rematch 00000000000000000000000000000000 political-action 00000000000000000000000000000000 pro-consumer 00000000000000000000000000000000 pro-environment 00000000000000000000000000000000 sync 00000000001000110101100000110010 toxic-waste-dump 00000000000000000000000000000000 Monmouth 00100000000000000000000000000000 freeholders 00000000000000000000000000000000 savors 00000000000000000000000000000000 Exodus 00100000000111100100111001100111 Hard-hitting 00100000000000000000000000000000 retools 00000000000000000000000000000000 Appealing 00100000000111101110001110010000 Ozzie 00100000000000000000000000000000 Harriet 00100000000000000000000000000000 Grateful 00100000000111010011110110010000 Dead 00100000000010001001110110010000 lyric 00000000000000000000000000000000 memoirs 00000000000110010011111101100011 alma 00001111111011111111000000110000 mater 00001111111100000000100011111001 forcefulness 00000000000000000000000000000000 divides 00000000000000000000000000000000 Crisp 00100000000000000000000000000000 nephew 00000000000111111110111110000001 editor-in-chief 00000000000000000000000000000000 bagpipe 00000000000000000000000000000000 109.73 00000000000000000000000000000000 devout 00000000000000000000000000000000 Wames 00100000000000000000000000000000 Kron 00100000000000000000000000000000 Patty 00100000000000000000000000000000 pleases 00000000000000000000000000000000 jubilant 00000000000000000000000000000000 Popkin 00101111111010001110110010001000 Woodworth 00100000000000000000000000000000 Ducky 00100000000000000000000000000000 competitve 00000000000000000000000000000000 ascent 00000000010101000111111001100111 newsweekly 00000000000000000000000000000000 2691.19 00000000000000000000000000000000 classical-music 00000000000000000000000000000000 14,560,000 00000000000000000000000000000000 unveils 00000000000000000000000000000000 Patsy 00100000000000000000000000000000 Buckles 00100000000000000000000000000000 Skiing 00100000000111000000101100100001 daring 00000000000011111011010010010000 outgrown 00000000000000000000000000000000 dropper 00000000000000000000000000000000 FIRMS 01000000000110000100010011110011 gliding 00000000000000000000000000000000 sun-drenched 00000000000000000000000000000000 Lantz 00100000000000000000000000000000 BRITISH 01000000000000000000100100110000 tot 00000000000000000000000000000000 Jeffry 00100000000000000000000000000000 snowsuit 00000000000000000000000000000000 unsubstantiated 00000000000000000000000000000000 vitiate 00000000000000000000000000000000 know'til 00000000000000000000000000000000 hot-dog 00000000000000000000000000000000 twenties 00000000000111000011011010100111 thirties 00000000000111101100110000010111 Kathe 00100000000000000000000000000000 brushoff 00000000000000000000000000000000 LaBella 01000000000000000000000000000000 Taos 00100000000000000000000000000000 shuttle-busing 00000000000000000000000000000000 playland 00000000000000000000000000000000 pan 00000000000111111010110101001000 dad 00000000000111101110011110000001 sitter 00000000000000000000000000000000 time-strapped 00000000000000000000000000000000 Borgeson 00100000000000000000000000000000 warm-weather 00000000000000000000000000000000 Katonah 00100000000000000000000000000000 overcrowded 00000000000110011010101000110000 Aftershocks 00100000000000000000000000000000 Brisk 00100000000000001111100000010000 wrought 00000000000000000000000000000000 60,000-odd 00000000000000000000000000000000 5:04 00000000000000000000000000000000 pre-game 00000000000000000000000000000000 upper-deck 00000000000000000000000000000000 newsies 00000000000000000000000000000000 laughingly 00000000000000000000000000000000 Riklis 00101111111101111001000000001000 microphones 00000000000000000000000000000000 spied 00000000000000000000000000000000 credential 00000000000000000000000000000000 Dictates 00100000001111010011000000010010 withstanding 00000000000000000000000000000000 disturbance 00000000000000000000000000000000 girder 00000000000000000000000000000000 Meshulam 00100000000000000000000000000000 failings 00000000000000000000000000000000 still-daylighted 00000000000000000000000000000000 Scale 00100000000111110011011001000111 7.0 00000000000000000000000000000000 5:40 00000000000000000000000000000000 aforethought 00000000000000000000000000000000 relation-back 00000000000000000000000000000000 bulldozed 00000000000000000000000000000000 lugging 00000000000000011101111101000000 natured 00000000000111111111111011000001 bemused 00000000000000000000000000000000 Booths 00100000000000000000000000000000 GANNETT 01000000000111111101011100101000 Erroll 00100000000000000000000000000000 half-block 00000000000000000000000000000000 six-mile 00000000000000000000000000000000 Sandor 00100000000000000000000000000000 Garpian 00100000000000000000000000000000 randomness 00000000000000000000000000000000 cold-cuts 00000000000000000000000000000000 142.84 00000000000000000000000000000000 snoring 00000000000000000000000000000000 71,309 00000000000000000000000000000000 horrifying 00000000001001010101010010010000 nameless 00000000000000000000000000000000 3.2-acre 00000000000000000000000000000000 arable 00000000000000000000000000000000 half-staff 00000000000000000000000000000000 Bart 00100000000000000000000000000000 Giamatti 00100000000000000000000000000000 ruins 00000000000000000000000000000000 dullest 00000000000000000000000000000000 one-sided 00000000000000000000000000000000 Detroit-over-San 01000000000000000000000000000000 rainout 00000000000000000000000000000000 zenith 00000000000101100011000100101000 less-intrusive 00000000000000000000000000000000 sofas 00000000000000000000000000000000 827.9 00000000000000000000000000000000 804.3 00000000000000000000000000000000 Racketeering 00100000000010100001000000110000 three-bedroom 00000000000000000000000000000000 highly-confident 00000000000000000000000000000000 Solow 00100000000000000000000000000000 falloff 00000000000000000000000000000000 Payout 00100000000111101111100011000111 syndications 00000000000111110101000010000001 Fleischer 00101111111111000010100010001000 Monday-morning 00100000000000000000000000000000 quarterbacks 00000000000000000000000000000000 Severence 00100000000000000000000000000000 Hope 00100000000111111110000110110010 Takanori 00100000000000000000000000000000 Mizuno 00100000000000000000000000000000 874 00000000000000000000000000000000 prior-notice 00000000000000000000000000000000 sweatshirts 00000000000000000000000000000000 Organized 00100000000010001001101001000000 981.2 00000000000000000000000000000000 35.875 00000000000000000000000000000000 nursery 00000000000111010001111010110000 hot-rolled 00000000000000000000000000000000 coil 00000000000000000000000000000000 Luerssen 00100000000000000000000000000000 204.5 00000000000000000000000000000000 5.76 00000000000000000000000000000000 164 00000000000000000000000000000000 Colleagues 00100000000111111110110000110011 earthquake-resistant 00000000000000000000000000000000 aftershock-resistant 00000000000000000000000000000000 Oz 00100000000000000000000000000000 price-determination 00000000000000000000000000000000 unlinked 00000000000000000000000000000000 coursed 00000000000000000000000000000000 Wizard 00100000000110100001100101100111 1983-85 00000000000000000000000000000000 aftershock-damping 00000000000000000000000000000000 Dicks 00100000000000000000000000000000 property-liability 00000000000000000000000000000000 micro-liquidity 00000000000000000000000000000000 real-time 00000000000000000000000000000000 shock-damping 00000000000000000000000000000000 Peake 00100000000000000000000000000000 SEE 01000000000111111110100110110010 stutter 00000000000000000000000000000000 Mistake 00100000000111001111101010110111 vane 00000000000000000000000000000000 nutshell 00000000000000000000000000000000 heavier-than-usual 00000000000000000000000000000000 urban-development 00000000000000000000000000000000 Office. 00100000000000000000000000000000 Rock'n 00100000000000000000000000000000 126.15 00000000000000000000000000000000 torch 00000000000000000000000000000000 566.54 00000000000000000000000000000000 Neuhaus 00100000000000000000000000000000 nastier 00000000000000000000000000000000 embezzled 00000000000000000000000000000000 Sigma 00100000000000000000000000000000 navigate 00000000000000000000000000000000 sparkplugs 00000000000000000000000000000000 double-bladed 00000000000000000000000000000000 land-use 00000000000000000000000000000000 acetylene 00000000000000000000000000000000 lightened 00000000000000000000000000000000 in-and-outer 00000000000000000000000000000000 Nokomis 00100000000000000000000000000000 done-and 00000000000000000000000000000000 Low 00100000000011000011011100010000 Perk 00100000000000000000000000000000 Small-company 00100000000000000000000000000000 big-company 00000000000000000000000000000000 recession-wary 00000000000000000000000000000000 blackest 00000000000000000000000000000000 firehoops 00000000000000000000000000000000 Mariel 00100000000000000000000000000000 Clemensen 00100000000000000000000000000000 sweeteners 00000000000000000000000000000000 kickers 00000000000000000000000000000000 seven-eighths 00000000000000000000000000000000 7.955 00000000000000000000000000000000 8.032 00000000000000000000000000000000 7.937 00000000000000000000000000000000 8.007 00000000000000000000000000000000 7.56 00000000000000000000000000000000 Cuyahoga 00100000000000000000000000000000 Flottl 00100000000000000000000000000000 7.22 00000000000000000000000000000000 semi-obscure 00000000000000000000000000000000 Away 00100000000000000001111100110010 bloods 00000000000000000000000000000000 Georgette 00100000000000000000000000000000 government-subsidized 00000000000000000000000000000000 current-coupon 00000000000000000000000000000000 long-dated 00000000000000000000000000000000 short-dated 00000000000000000000000000000000 9.42 00000000000000000000000000000000 crank 00000000101010010110010110110010 10.09 00000000000000000000000000000000 12.94 00000000000000000000000000000000 95.72 00000000000000000000000000000000 7.02 00000000000000000000000000000000 PANHANDLER 01000000000000000000000000000000 Hoboken 00100000000000000000000000000000 3.83 00000000000000000000000000000000 Astor 00100000000000000000000000000000 vanishes 00000000000000000000000000000000 panhandler 00000000000000000000000000000000 dribble 00000000000000000000000000000000 intake 00000000000000000001101101001111 devoured 00000000000000000000000000000000 high-living 00000000000000000000000000000000 Philanthropic 00100000000000000000000000000000 BBB 01000000000000000000000000000000 involuntarily 00000000000000000000000000000000 ripoffs 00000000000000000000000000000000 friendships 00000000000000000000000000000000 kitty 00000000000000000000000000000000 misspent 00000000000000000000000000000000 droppers 00000000000000000000000000000000 Lucullan 00100000000000000000000000000000 Shelton 00100000000000000000000000000000 Forfeiture 00100000000010000101101101001111 Arthritis 00100000000011100010101000110000 bone-marrow 00000000000000000000000000000000 Elle 00100000000111100000110100101000 raiser 00000000000001110000011010000111 We've 00100000000000000000000000000000 first-amendment 00000000000000000000000000000000 drumming 00000000000000000000000000000000 loss-expense 00000000000000000000000000000000 namedropper 00000000000000000000000000000000 miscreants 00000000000000000000000000000000 2,809 00000000000000000000000000000000 cunning 00000000000000000000000000000000 pathologically 00000000000000000000000000000000 innately 00000000000000000000000000000000 name-dropper 00000000000000000000000000000000 inveterate 00000000000000000000000000000000 Stretch 00100000000011101011001010110111 pithy 00000000000000000000000000000000 Nomenklatura 00100000000000000000000000000000 incriminating 00000000000000000000000000000000 12,591 00000000000000000000000000000000 Drunk 00100000000000110100011010010000 hunker 00000000000000000000000000000000 lynch-mob 00000000000000000000000000000000 742 00000000000000000000000000000000 staf 00000000000000000000000000000000 Overhead 00100000000000000011011100000111 cow 00000000000100011110101000100001 Collectively 00100000101100000000001001110010 Imelda 00100000000000000000000000000000 flight-attendants 00000000000000000000000000000000 enforces 00000000000000000000000000000000 all-employee 00000000000000000000000000000000 hello 00000000000000000000000000000000 already-reluctant 00000000000000000000000000000000 190.125 00000000000000000000000000000000 923,500 00000000000000000000000000000000 January-June 01000000000000000000000000000000 desist 00000000000000000000000000000000 relented 00000000000000000000000000000000 undecided 00000000000111100100110110010000 Indemnity 00100000000000001000010010110000 145.4 00000000000000000000000000000000 520,000 00000000000000000000000000000000 3,524,000 00000000000000000000000000000000 1,640,000 00000000000000000000000000000000 slacks 00000000000000000000000000000000 Pemberton 00100000000000000000000000000000 low-sulphur 00000000000000000000000000000000 troublemakers 00000000000000000000000000000000 anti-hooligan 00000000000000000000000000000000 Marginal 00100000000010100000011100010000 gored 00000000000000000000000000000000 righted 00000000000000000000000000000000 bilges 00000000000000000000000000000000 minted 00000000000000000000000000000000 workdays 00000000000111010110110100100111 134,000 00000000000000000000000000000000 593.5 00000000000000000000000000000000 50-story 00000000000000000000000000000000 Scandalios 00100000000000000000000000000000 vacate 00000000000000000000000000000000 WALL 01000000000111111111011110101000 STREET 01000000000000000000100010101000 SHAKE 01000000001111010110010110110010 sequined 00000000000000000000000000000000 Newspeak 00100000000000000000000000000000 heretical 00000000000000000000000000000000 backside 00000000000000000000000000000000 mellifluous 00000000000000000000000000000000 Sardi 00100000000000000000000000000000 panjandrums 00000000000000000000000000000000 340,000 00000000000000000000000000000000 Trotting 00100000010011010110100001000000 Minnelli 00100000000000000000000000000000 CONTROL 01000000000000100010110000101111 swore 00000000000000000000000000000000 DJ 01000000000000000000000000000000 connotations 00000000000000000000000000000000 matron 00000000000000000000000000000000 dignified 00000000000000000000000000000000 agro-industry 00000000000000000000000000000000 Katzenjammer 00100000000000000000000000000000 grouses 00000000000000000000000000000000 name-drops 00000000000000000000000000000000 government-plus 00000000000000000000000000000000 lessers 00000000000000000000000000000000 dabble 00000000000000000000000000000000 fishery 00000000000000000000000000000000 grievous 00000000000000000000000000000000 frontend 00000000000000000000000000000000 no-loads 00000000000000000000000000000000 exit-load 00000000000000000000000000000000 shorn 00000000000000000000000000000000 DATA 01000000000100001100001010111001 betters 00000000000010000100111101100011 downtrodden 00000000000100100111000010010000 Bettner 00100000000000000000000000000000 debt-service 00000000000000000000000000000000 Wiegers 00100000000000000000000000000000 325,000 00000000000000000000000000000000 Perozo 00100000000000000000000000000000 droppable 00000000000000000000000000000000 921.6 00000000000000000000000000000000 845.7 00000000000000000000000000000000 earlier-period 00000000000000000000000000000000 205.3 00000000000000000000000000000000 tumbledown 00000000000000000000000000000000 indenture 00000000000000000000000000000000 disbursement 00000000000000000000000000000000 auto-strop 00000000000000000000000000000000 Gaisman 00100000000000000000000000000000 hairdresser 00000000000000000000000000000000 duds 00000000000000000000000000000000 Blount 00100000000000000000000000000000 sniffing 00000000000111010110100001000000 Winton 00100000000000000000000000000000 Ritz 00100000000110011000000000001000 Purple 00100000001010110010001000110000 28.53 00000000000000000000000000000000 cubs 00000000000000010111110000100101 beholden 00000000000000000000000000000000 inattention 00000000000000000000000000000000 Caddyshack 00100000000000000000000000000000 Longtime 00100000000000000100101001110000 Bookman 00100000000000000000000000000000 chimes 00000000000110100101111000000001 detractors 00000000000000010000000010110011 hot-tempered 00000000000000000000000000000000 bully 00000000000011111000100110110111 enthusiast 00000000000000000000000000000000 subterfuge 00000000000000000000000000000000 Thrice 00100000000000000000000000000000 on-set 00000000000000000000000000000000 Basinger 00100000000000000000000000000000 Non-Proliferation 01000000000000000000000000000000 Bruckheimer 00100000000000000000000000000000 shepherded 00000000000000000000000000000000 bristle 00000000000000000000000000000000 unreadable 00000000000000000000000000000000 pals 00000000000000000000000000000000 heavy-water 00000000000000000000000000000000 fumpered 00000000000000000000000000000000 schmumpered 00000000000000000000000000000000 Drexel-underwritten 00100000000000000000000000000000 barreling 00000000000000000000000000000000 kernel 00000000000111111110100110111111 naturalist 00000000000000000000000000000000 dwarfs 00000000000000000000000000000000 Vyquest 00100000000000000000000000000000 Candu 00100000000000000000000000000000 DiLoreto 01000000000000000000000000000000 Rwanda 00100000000000000000000000000000 gorillas 00000000000000000000000000000000 co-produce 00000000000000000000000000000000 TRS-80 01000000000000000000000000000000 Gilbraltar 00100000000000000000000000000000 assiduously 00000000000000000000000000000000 Recruited 00100001000101000101010000110010 Driver 00100000000111101111111000100001 Shampoo 00100000011101101011111010110000 Filmworks 00100000000000000000000000000000 Midnight 00100000000111111010010000101000 clinkers 00000000000000000000000000000000 Billie 00100000000000000000000000000000 VisionQuest 01000000000000000000000000000000 Clue 00100000000111111010111100010111 Clan 00100000000000000000000000000000 Cave 00100000000100111110000000001000 ingrates 00000000000000000000000000000000 Goliath 00100000000000000000000000000000 AP 01000000000000000000000000000000 small-fry 00000000000000000000000000000000 single-D 01000000000000000000000000000000 indemnify 00000000000101011011101110110010 16.625 00000000000000000000000000000000 Politrick 00100000000000000000000000000000 precedents 00000000000011100010001000100011 Puttnam 00101111111100001110110010001000 PITCH 01000000000100110101111010110111 alchemists 00000000000000000000000000000000 homeequity 00000000000000000000000000000000 time-shares 00000000000000000000000000000000 death-backed 00000000000000000000000000000000 deftly 00000000000000000000000000000000 unhocked 00000000000000000000000000000000 Addiss 00100000000000000000000000000000 forfeitable 00000000000000000000000000000000 Czeslaw 00100000000000000000000000000000 Asset-backed 00100000000000000000000000000000 outperforming 00000000000000000000000000000000 127.03 00000000000000000000000000000000 relative-performance 00000000000000000000000000000000 derby 00000000000001000000101100100001 high-tax 00000000000000000000000000000000 time-share 00000000000000000000000000000000 investment-management 00000000000000000000000000000000 Evaluating 00100000000111110110010101000000 bond-insurance 00000000000000000000000000000000 knack 00000000000111111000001111100111 Gregoire 00100000000000000000000000000000 eyeballs 00000000000000000000000000000000 overeager 00000000000000000000000000000000 defensively 00000000000000000000000000000000 Nope 00100000000000000000000000000000 personification 00000000000000000000000000000000 Unprovable 00100000000000000000000000000000 Highly 00100000000000110000000001110010 Probable 00100000000011101000000000010000 Theory 00100000000111011111111101100111 above-normal 00000000000000000000000000000000 frauds 00000000000110000111100010100111 Hannah 00100000000000000000000000000000 FORCE 01000000000000101010010001010111 one-word 00000000000000000000000000000000 Diversify 00100000000110010010111110110010 Erdos 00100000000000000000000000000000 squalls 00000000000000000000000000000000 7-28 00000000000000000000000000000000 951 00000000000000000000000000000000 extrapolated 00000000000000000000000000000000 hens 00000000000000000000000000000000 sober 00000000011011100101010010010000 better-safe-than 00000000000000000000000000000000 Lyle 00101111111111000101110001001000 parameters 00000000000000000000000000000000 quality-conscious 00000000000000000000000000000000 agressive 00000000000000000000000000000000 Respondents 00100000000000000000000110110011 3-6 00000000000000000000000000000000 ultra-safe 00000000000000000000000000000000 humiliating 00000000000000000000000000000000 once-devoted 00000000000000000000000000000000 297,446 00000000000000000000000000000000 2,204.62 00000000000000000000000000000000 12,283,217 00000000000000000000000000000000 11,429,243 00000000000000000000000000000000 assisted-living 00000000000000000000000000000000 purchase-and-lease 00000000000000000000000000000000 easy-to-use 00000000000000000000000000000000 VALLEY 01000000000000000000000010100101 all-day 00000000000000000000000000000000 Noel 00101111111000011011010100001000 less-advanced 00000000000000000000000000000000 Cleave 00100000000000000000000000000000 pirated 00000000000000000000000000000000 amplifier 00000000000000000000000000000000 cryptographers 00000000000000000000000000000000 encrypting 00000000000000000000000000000000 Epp 00100000000000000000000000000000 small-office 00000000000000000000000000000000 Micronyx 00100000000000000000000000000000 redistributing 00000000000000000000000000000000 Notwithstanding 00100000000010001000001001110010 Jacques-Francois 01000000000000000000000000000000 some... 00000000000000000000000000000000 28.625 00000000000000000000000000000000 4.31 00000000000000000000000000000000 10.01 00000000000000000000000000000000 463.06 00000000000000000000000000000000 Grid 00100000000000000000000000000000 460.33 00000000000000000000000000000000 Eppler 00100000000000000000000000000000 18.11 00000000000000000000000000000000 761.38 00000000000000000000000000000000 486.74 00000000000000000000000000000000 537.91 00000000000000000000000000000000 458.52 00000000000000000000000000000000 545.96 00000000000000000000000000000000 1.97 00000000000000000000000000000000 937 00000000000000000000000000000000 1,435 00000000000000000000000000000000 629 00000000000000000000000000000000 Shahal 00100000000000000000000000000000 Strongly 00100010000000000000010001110010 Autodesk 00100000000000000000000000000000 12.82 00000000000000000000000000000000 flat-to-lower 00000000000000000000000000000000 944,000 00000000000000000000000000000000 Nutmeg 00100000000000000000000000000000 first-base 00000000000000000000000000000000 new-mown 00000000000000000000000000000000 self-indulgent 00000000000000000000000000000000 Tigers 00100000000000110110110100000001 symmetrical 00000000000000000000000000000000 friendliness 00000000010101000101110010100111 electroreality 00000000000000000000000000000000 ratifying 00000000000000000000000000000000 occurrence 00000000000000000000000000000000 historicized 00000000000000000000000000000000 postcards 00000000000000000000000000000000 trivia 00000000000101000111110010100111 lanzador 00000000000000000000000000000000 Homerun 00100000000000000000000000000000 jonron 00000000000000000000000000000000 reverberate 00000000000000000000000000000000 surfers 00000000000000000000000000000000 wipeout 00000000000000000000000000000000 representations 00000000000000000000000000000000 Magic 00100000000111000011110000000001 short-circuited 00000000000000000000000000000000 crevasses 00000000000000000000000000000000 crevasse 00000000000000000000000000000000 eyewitness 00000000000000000000000000000000 raced 00000000000100111011001000110010 tragedies 00000000000000000000000000000000 Intergraph 00100000000000000000000000000000 hotdog 00000000000000000000000000000000 deformed 00000000000000000000000000000000 terra 00000000011000001111000100001000 firma 00000000000000000000000000000000 translating 00000000000000000000000000000000 Walkmen 00100000000000000000000000000000 Watchmen 00100000000000000000000000000000 piglets 00000000000000000000000000000000 magnetized 00000000000000000000000000000000 nucleus 00000000000000000000000000000000 blacked 00000000000000000000000000000000 plume 00000000000000000000000000000000 Darkness 00100000001011100101110010100111 blacked-out 00000000000000000000000000000000 Translation 00100000000010001001100101100111 ganglion 00000000000000000000000000000000 firefighting 00000000000000000000000000000000 tv 00000000000000000000000000000000 McLuhan 01000000000000000000000000000000 76-page 00000000000000000000000000000000 MC68030 01000000000000000000000000000000 ISRAEL 01000000000111100101111101101000 red-faced 00000000000000000000000000000000 exhibiting 00000000000000000000000000000000 inequitable 00000000000000000000000000000000 reverse-engineering 00000000000000000000000000000000 Kasten 00100000000000000000000000000000 earlier-the 00000000000000000000000000000000 MC88200 01000000000000000000000000000000 overheated 00000000000010011010101000110000 market-driven 00000000000000000000000000000000 MISUSE 01000000000111110011011001101111 coddled 00000000000000000000000000000000 JAPAN'S 01000000000000000000000000000000 semi-private 00000000000000000000000000000000 disfavor 00000000000000000000000000000000 re-emphasize 00000000000000000000000000000000 penalizes 00000000010101110001000000010010 plenum 00000000000111011001000100101000 Sino-foreign 00100000000000000000000000000000 inter-company 00000000000000000000000000000000 Jiangsu 00100000000000000000000000000000 Zhejiang 00100000000000000000000000000000 McCaughey 01000000000000000000000000000000 breadbasket 00000000000000000000000000000000 shopkeepers 00000000000000000000000000000000 buyings 00000000000000000000000000000000 Tack 00100000000101001001111010110111 anti-tax-shelter 00000000000000000000000000000000 Charitable 00100000000101100000000000110000 itemize 00000000000000000000000000000000 Reverse 00100000001111111111110110110010 heavy-industry 00000000000000000000000000000000 Groom 00100000000000000000000000000000 REACTOR 01000000000111101110110010001001 legislating 00000000000000000000000000000000 court-reporting 00000000000000000000000000000000 tuxedo-rental 00000000000000000000000000000000 fast-approaching 00000000000000000000000000000000 videoconferencing 00000000000000000000000000000000 tax-give-away 00000000000000000000000000000000 third-ranking 00000000000000000000000000000000 barnyard 00000000000000000000000000000000 Swiss-cheese 00100000000000000000000000000000 pro-investment 00000000000000000000000000000000 mindset 00000000000000000000000000000000 Huard 00100000000000000000000000000000 Charls 00100000000000000000000000000000 NUCLEAR 01000000000000000001110000110000 omission 00000000000010000111111001100111 contemplates 00000000000000000000000000000000 distances 00000000000100011111001000100011 Antique 00100000000000110000001000110000 AUSTIN 01000000000111100110101001101000 Showing 00100000000000000000110101000000 read-only 00000000000000000000000000000000 passive-loss 00000000000000000000000000000000 unasked 00000000000000000000000000000000 programmable 00000000000000000000000000000000 tax-and-budget 00000000000000000000000000000000 erasable 00000000000000000000000000000000 30th 00000000000000000000000000000000 reunion 00000000000000001100110100000001 Mimi 00100000000000000000000000000000 moans 00000000000000000000000000000000 non-volatile 00000000000000000000000000000000 638,000 00000000000000000000000000000000 569,000 00000000000000000000000000000000 Load 00100000000010001000010011000111 67.1 00000000000000000000000000000000 66.6 00000000000000000000000000000000 215,845 00000000000000000000000000000000 4-kilobit 00000000000000000000000000000000 audiocassettes 00000000000000000000000000000000 Foresight 00100000000000000000000000000000 servile 00000000000000000000000000000000 champ 00000000000111101100101100100001 weep 00000000000000000000000000000000 100,980 00000000000000000000000000000000 floppy-disk 00000000000000000000000000000000 titanate 00000000000000000000000000000000 ECONOMIC 01000000000000000011000000110000 burlesque 00000000000000000000000000000000 Champ 00100000000111101100101100100001 zirconate 00000000000000000000000000000000 Spenser 00100000000000000000000000000000 blessings 00000000000000000000000000000000 Waterloo 00100000000000000000000000000000 hard-boiled 00000000000000000000000000000000 roars 00000000000000000000000000000000 a.k.a 00000000000000000000000000000000 Fleetwood 00100000000000000000000000000000 bride 00000000000111100110000100000001 Loring 00100000000000000000000000000000 Goodbye 00100000000001000010010001110010 houseman 00000000000000000000000000000000 lovebirds 00000000000000000000000000000000 patter 00000000000000000000000000000000 cameo 00000000000000000000000000000000 data-storing 00000000000000000000000000000000 Ohls 00100000000000000000000000000000 Memory 00100000000000010100010000100001 bothersome 00000000000000000000000000000000 anachronisms 00000000000000000000000000000000 Non-executive 00100000000000000000000000000000 Tequila 00100000000000000000000000000000 Sunrise 00100000000001111000110100101000 re-creating 00000000000000000000000000000000 Ko 00100000000000000000000000000000 Szeto 00100000000000000000000000000000 flight-to-quality 00000000000000000000000000000000 Printed 00100000001011000101101001000000 Customer 00100000000000000001111000100001 treatises 00000000000000000000000000000000 management-services 00000000000000000000000000000000 groundbreakers 00000000000000000000000000000000 Susumu 00100000000000000000000000000000 Ohara 00100000000000000000000000000000 Shinbun 00100000000000000000000000000000 Kenney 00101111111101110000000010001000 BetaWest 01000000000000000000000000000000 consumer-telephone 00000000000000000000000000000000 business-telephone 00000000000000000000000000000000 618.9 00000000000000000000000000000000 599.4 00000000000000000000000000000000 12.1 00000000000000000000000000000000 MacAllister 01001111111000010101000100001000 664.3 00000000000000000000000000000000 747.7 00000000000000000000000000000000 71.25 00000000000000000000000000000000 network-services 00000000000000000000000000000000 177.4 00000000000000000000000000000000 144.1 00000000000000000000000000000000 Network-access 00100000000000000000000000000000 618.6 00000000000000000000000000000000 148,000 00000000000000000000000000000000 100.625 00000000000000000000000000000000 131.3 00000000000000000000000000000000 nonregulated 00000000000000000000000000000000 private-line 00000000000000000000000000000000 three-month-old 00000000000000000000000000000000 AGS 01000000000000000000000000000000 non-regulated 00000000000000000000000000000000 81.125 00000000000000000000000000000000 non-telephone 00000000000000000000000000000000 Monteith 00100000000000000000000000000000 Shinpan 00100000000000000000000000000000 Innovative 00100000000011000000110100010000 423.9 00000000000000000000000000000000 394.4 00000000000000000000000000000000 333.3 00000000000000000000000000000000 314 00000000000000000000000000000000 85.50 00000000000000000000000000000000 83.3 00000000000000000000000000000000 298 00000000000000000000000000000000 a-Includes 01000000000000000000000000000000 88.7 00000000000000000000000000000000 commonstock 00000000000000000000000000000000 stock-margin 00000000000000000000000000000000 b-Includes 01000000000000000000000000000000 FiberCom 01000000000000000000000000000000 552 00000000000000000000000000000000 48.375 00000000000000000000000000000000 Petrofina 00100000000111111010001010101000 Fina 00100000000000000000000000000000 711.9 00000000000000000000000000000000 696.1 00000000000000000000000000000000 Naji 00100000000000000000000000000000 319 00000000000000000000000000000000 19.93 00000000000000000000000000000000 38.1 00000000000000000000000000000000 Gero 00100000000000000000000000000000 Varo 00100000000000010100111100101000 Hatchett 00100000000000000000000000000000 462.2 00000000000000000000000000000000 spookiest 00000000000000000000000000000000 Clothestime 00100000000100011010111100101000 Amtran 00100000000000000000000000000000 non-auto 00000000000000000000000000000000 genie 00000000000000000000000000000000 Turk 00100000000000000000000000000000 middle-ground 00000000000000000000000000000000 bi-polar 00000000000000000000000000000000 4,695 00000000000000000000000000000000 Catalog 00100000000001001011111010110000 pre-Christmas 01000000000000000000000000000000 Popolare 00100000000000000000000000000000 Enthusiast 00100000000000000000000000000000 cellars 00000000000000000000000000000000 Wish 00100000000011011110000110110010 14.70 00000000000000000000000000000000 linkup 00000000000000000000000000000000 13.26 00000000000000000000000000000000 Suckow 00100000000000000000000000000000 Locker 00100000000000111001111010110000 A.-controlled 00100000000000000000000000000000 'You 01000000000000000000000000000000 perversities 00000000000000000000000000000000 undeserved 00000000000000000000000000000000 stormy 00000000000000000011011010010000 renown 00000000000000000000000000000000 rubber-necking 00000000000000000000000000000000 Crash 00100000000111111111010001100111 fascists 00000000000000000000000000000000 forbearance 00000000000000000000000000000000 vagabonds 00000000000000000000000000000000 murderers 00000000000001101000100000110011 McFarlan 01000000000000000000000000000000 aimlessly 00000000000000000000000000000000 dried-out 00000000000000000000000000000000 Fate 00100000000111011110111000001111 flower-bordered 00000000000000000000000000000000 207.4 00000000000000000000000000000000 thistles 00000000000000000000000000000000 283.3 00000000000000000000000000000000 pears 00000000000000000000000000000000 ANSA 01000000000000000000000000000000 perfumed 00000000000000000000000000000000 happiness 00000000000101101010110010100111 Venetoen 00100000000000000000000000000000 scowl 00000000000000000000000000000000 travelogues 00000000000000000000000000000000 interest-deferred 00000000000000000000000000000000 Viaje 00100000000000000000000000000000 Alcarria 00100000000000000000000000000000 scrounged 00000000000000000000000000000000 inns 00000000000111100101111011101001 Hive 00100000000000000000000000000000 Cattolica 00100000000000000000000000000000 sardonic 00000000000000000000000000000000 Dona 00100000000000000000000000000000 encrusted 00000000000000000000000000000000 filth 00000000000000000000000000000000 Ecco 00100000000000000000000000000000 Assicurazioni 00100000000000000000000000000000 excerpt 00000000000111111111100100110111 Alonso 00100000000000000000000000000000 11-week 00000000000000000000000000000000 manuscript 00000000000111110000000001100111 Cepeda 00100000000000000000000000000000 Rest 00100000000111111111111100001111 exemplary 00000000000010111100110100010000 Senorita 00100000000000000000000000000000 Elvira 00100000000000000000000000000000 4.01 00000000000000000000000000000000 hemispheric 00000000000000000000000000000000 Undoubtedly 00100000011001000000001001110010 nonintervention 00000000000000000000000000000000 assertive 00000000000000000000000000000000 McGee 01001111101001011100000010001000 Hoenlein 00100000000000000000000000000000 adventurism 00000000000000000000000000000000 Volio 00100000000000000000000000000000 categorically 00000000000000000000000000000000 wrist 00000000000110001000110000000001 unpunished 00000000000000000000000000000000 Unemployed 00100000000101001010101000110000 Wozniak 00100000000000000000000000000000 festivity 00000000000000000000000000000000 Bracknell 00100000000000000000000000000000 anti-Sandinista 01000000000000000000000000000000 sensing 00000000000110100001111010000010 meteorological 00000000000000000000000000000000 unblock 00000000000000000000000000000000 retraining 00000000000000010110001101100001 Fundamentalists 00100000000010011110100000110011 largess 00000000000000000000000000000000 non-Russian 01000000000000000000000000000000 Fittingly 00100000000000000000000000000000 Hondurans 00100000000000000000000000000000 legitimized 00000000000000000000000000000000 hobbyists 00000000000000000000000000000000 superpowers 00000000000000010000000110110011 Meteorological 00100000000000000000000000000000 Recovering 00100000000111111011100001000000 radiophonic 00000000000000000000000000000000 Esteli 00100000000000000000000000000000 Y-MP 01000000000000000000000000000000 entrenchment 00000000000000000000000000000000 75.5 00000000000000000000000000000000 much-heralded 00000000000000000000000000000000 Ricans 00100000000000000000000000000000 furrows 00000000000000000000000000000000 Daremblum 00100000000000000000000000000000 Nacion 00100000000000000000000000000000 Suites 00100000000000001111100100001001 61.4 00000000000000000000000000000000 58.8 00000000000000000000000000000000 Harrah 00100000000000000000000000000000 433.5 00000000000000000000000000000000 422.1 00000000000000000000000000000000 3.86 00000000000000000000000000000000 advancements 00000000000000000000000000000000 Sokol 00100000000000000000000000000000 95.25 00000000000000000000000000000000 commencement 00000000000000000000000000000000 Advertiser 00100000000000011001100000110101 Calls 00100000000000000000000110110010 WWOR 01000000000000000000000000000000 Tokai 00100000000000000000000000000000 nesting 00000000000000000000000000000000 co-venture 00000000000000000000000000000000 Saturdays 00100000000111100011101001100010 weeknights 00000000000000000000000000000000 GROWTH 01000000000111100000001010100111 APPEARS 01000000000000010001101000110010 matryoshka 00000000000000000000000000000000 KTXL 01000000000000000000000000000000 Armenia 00100000000110010101011101101000 324 00000000000000000000000000000000 Zeiger 00100000000000000000000000000000 seaport 00000000000000000000000000000000 Alberto 00100000000000011100001000011000 Paracchini 00100000000000000000000000000000 Shelley 00101111111101001110000100001000 cooly 00000000000000000000000000000000 BankWatch 01000000000000000000000000000000 caters 00000000000010100001101000110010 616 00000000000000000000000000000000 Suffering 00100000000101111101100001000000 counter-trade 00000000000000000000000000000000 4.46 00000000000000000000000000000000 Comvik 00100000000000000000000000000000 Kinnevik 00100000000000000000000000000000 Arfeen 00100000000000000000000000000000 Turkmenia 00100000000000000000000000000000 21.23 00000000000000000000000000000000 pigsty 00000000000000000000000000000000 Uzbekistan 00100000000000000000000000000000 12.48 00000000000000000000000000000000 Tadzhikistan 00100000000000000000000000000000 Camel 00100000000110011100100000100001 Sheehy 00101111111001100000001010001000 flotations 00000000000000000000000000000000 blades 00000000000010110111101001100011 Playskool 00100000000000000000000000000000 Hassenfeld 00100000000000000000000000000000 2.41-to-1 00000000000000000000000000000000 Scrabble 00100000000110110010001101100001 992.7 00000000000000000000000000000000 carpentry 00000000000000000000000000000000 524.5 00000000000000000000000000000000 539.4 00000000000000000000000000000000 encompassed 00000000000000000000000000000000 Whaler 00100000000000000000000000000000 Acton 00100000000111111000000101001000 Azerbaijan 00100000000110011110110001101000 734.8 00000000000000000000000000000000 650.9 00000000000000000000000000000000 dictating 00000000000000000000000000000000 1.5-mile 00000000000000000000000000000000 band-wagon 00000000000000000000000000000000 55-a-share 00000000000000000000000000000000 wrenched 00000000000000000000000000000000 spearheading 00000000000000000000000000000000 deadliest 00000000000000000000000000000000 Sorting 00100000011011101110100001000000 jackhammers 00000000000000000000000000000000 2.79-to-1 00000000000000000000000000000000 wheeled 00000000010101110101101001000000 snafus 00000000000000000000000000000000 Arrington 00100000000000000000000000000000 Spokespersons 00100000000000000000000000000000 three-stage 00000000000000000000000000000000 lighter-than-normal 00000000000000000000000000000000 tremblor 00000000000000000000000000000000 encasing 00000000000000000000000000000000 black-majority 00000000000000000000000000000000 186,000 00000000000000000000000000000000 Gods 00100000000111111011011110110011 Crusade 00100000000111110100000001100111 estuarian 00000000000000000000000000000000 multiple-column 00000000000000000000000000000000 viaducts 00000000000000000000000000000000 Burch 00100000000000000000000000000000 Bachtold 00100000000000000000000000000000 stock-for-debt 00000000000000000000000000000000 quarreling 00000000000000000000000000000000 Biedermann 00100000000000000000000000000000 7.47 00000000000000000000000000000000 white-majority 00000000000000000000000000000000 Urals 00100000000000000000000000000000 stand-by 00000000000000000000000000000000 837.5 00000000000000000000000000000000 inpenetrable 00000000000000000000000000000000 freemarket 00000000000000000000000000000000 Wieslawa 00100000000000000000000000000000 seeded 00000000000000000000000000000000 Doing 00100000000111011101000101000000 bookkeeper 00000000000000000000000000000000 credit-backing 00000000000000000000000000000000 secretarial 00000000000000000000000000000000 Amerman 00100000000000000000000000000000 proofreading 00000000000000000000000000000000 long-rumored 00000000000000000000000000000000 Shupe 00100000000000000000000000000000 Muffin 00100000000000000000000000000000 Turtle 00100000000000000000000000000000 877.6 00000000000000000000000000000000 702.4 00000000000000000000000000000000 Actively 00100000000000010111001001110010 Mainly 00100000000110001011000001110010 giggle 00000000000000000000000000000000 one-issue 00000000000000000000000000000000 opinion-makers 00000000000000000000000000000000 mattered 00000000000000000000000000000000 emigrated 00000000000000000000000000000000 Unificationism 00100000000000000000000000000000 7.17 00000000000000000000000000000000 Pro-life 00100000000000000000000000000000 wavered 00000000000000000000000000000000 tavern 00000000000111110001111010110000 automobile-parts 00000000000000000000000000000000 Amusing 00100000000011000110110110010000 counseled 00000000000000000000000000000000 veto-proof 00000000000000000000000000000000 standout 00000000000000000000000000000000 pacified 00000000000000000000000000000000 Divide 00100000000100011110101110110010 religions 00000000000000000000000000000000 Darla 00100000000000000000000000000000 dieting 00000000000000000000000000000000 evened 00000000000000000000000000000000 Moonie 00100000000000000000000000000000 non-`` 00000000000000000000000000000000 Caldwell 00100000000000000000000000000000 appeased 00000000000000000000000000000000 piroghi 00000000000000000000000000000000 gloat 00000000000000000000000000000000 glee 00000000000110111001110000000001 trimesters 00000000000000000000000000000000 unpolarizing 00000000000000000000000000000000 pre-empted 00000000000000000000000000000000 Religion 00100000000101101011110010100111 140.1 00000000000000000000000000000000 loadings 00000000000000000000000000000000 Goncharov 00100000000000000000000000000000 Overnite 00100000000000000000000000000000 427.7 00000000000000000000000000000000 3.98 00000000000000000000000000000000 456.4 00000000000000000000000000000000 402.7 00000000000000000000000000000000 4.49 00000000000000000000000000000000 search-and-examination 00000000000000000000000000000000 Gogol 00100000000000000000000000000000 Sovietized 00100000000000000000000000000000 second-guessing 00000000000000000000000000000000 state-level 00000000000000000000000000000000 MARK 01000000000111101010111100001000 RESOURCES 01000000000001100010001101001001 dreary 00000000000000000000000000000000 Disposition 00100000000111111110101001001111 reverberations 00000000000000000000000000000000 carves 00000000000000000000000000000000 inexhaustible 00000000000000000000000000000000 blandness 00000000000000000000000000000000 co-editor 00000000000000000000000000000000 Halpern 00100000000000000000000000000000 9.664 00000000000000000000000000000000 triple-B-minus 01000000000000000000000000000000 19912000 00000000000000000000000000000000 1991-1996 00000000000000000000000000000000 1997-2000 00000000000000000000000000000000 50,005,000 00000000000000000000000000000000 1990-2000 00000000000000000000000000000000 9.76 00000000000000000000000000000000 11,775,000 00000000000000000000000000000000 13,865,000 00000000000000000000000000000000 Italiana 00101111111011110100100001001000 9.13 00000000000000000000000000000000 101.90 00000000000000000000000000000000 16.59 00000000000000000000000000000000 co-publisher 00000000000000000000000000000000 Allendale 00100000000000000000000000000000 baring 00000000000011000111011000101000 Westdeutsche 00100000000000000000000000000000 sensual 00000000000000000000000000000000 8.80 00000000000000000000000000000000 17-member 00000000000000000000000000000000 Melton 00100000000000000000000000000000 computer-edited 00000000000000000000000000000000 Filtered 00100000000000000000000000000000 Dyson 00101111111111111100001000001000 sinful 00000000000000000000000000000000 wade 00001111111110101110000100001000 co-edited 00000000000000000000000000000000 Anterior 00100000000000000000000000000000 Paragon 00100000000000000000000000000000 districting 00000000000000000000000000000000 beeps 00000000000000000000000000000000 art-nouveau 00000000000000000000000000000000 Semmel 00100000000000000000000000000000 presenter 00000000000000000000000000000000 unrolls 00000000000000000000000000000000 three-to-five 00000000000000000000000000000000 'Who 01000000000000000000000000000000 Newswire 00100000000000000000000000000000 Guests 00100000000110110111110000110011 Agenda 00100000000111111110101001100111 selects 00000000000000000000000000000000 evoking 00000000000110110111001101000000 Salton 00100000000000000000000000000000 actionable 00000000000000000000000000000000 Yosi 00100000000000000000000000000000 curses 00000000000000000000000000000000 McGraw 01001111111101110001000100001000 thesaurus 00000000000000000000000000000000 I.B.M. 01000000000000000000000000000000 catered 00000000000000000000000000000000 get-togethers 00000000000000000000000000000000 Chantilly 00100000000000000000000000000000 1,800-a-year 00000000000000000000000000000000 Homebrew 00100000000000000000000000000000 abstracts 00000000000000000000000000000000 coded 00000000000000000000000000000000 three-to-five-page 00000000000000000000000000000000 1206.26 00000000000000000000000000000000 inter-office 00000000000000000000000000000000 interconnected 00000000000000000000000000000000 thousand-person 00000000000000000000000000000000 soirees 00000000000000000000000000000000 extravagant 00000000000010111000110100010000 party-giving 00000000000000000000000000000000 refine 00000000000000000000000000000000 404,294 00000000000000000000000000000000 196,785 00000000000000000000000000000000 guideposts 00000000000000000000000000000000 69,105 00000000000000000000000000000000 deserved 00000000000110111011000000010010 eloquence 00000000000000000000000000000000 666,666 00000000000000000000000000000000 corporate-bond 00000000000000000000000000000000 waitress 00000000000000000000000000000000 DILLARD 01000000000100101010110000001000 DEPARTMENT 01000000000000000000001110010101 folkish 00000000000000000000000000000000 chirpy 00000000000000000000000000000000 166.4 00000000000000000000000000000000 Samovar 00100000000000000000000000000000 city-wide 00000000000000000000000000000000 247.6 00000000000000000000000000000000 458.8 00000000000000000000000000000000 unneeded 00000000000000000000000000000000 9.03 00000000000000000000000000000000 SANTA 01000000000111101110101101110000 FE 01000000000000010000000001001000 at-large 00000000000000000000000000000000 PIPELINE 01000000000100000001111010110000 refined-petroleum-products 00000000000000000000000000000000 LIES 01000000001000100110001000110010 LOW 01000000000011000011011100010000 FALTERS 01000000000000000000000000000000 wither 00000000000000000000000000000000 Peres 00101111111110000000110010001000 renunciation 00000000000000000000000000000000 sprang 00000000000010101100001000110010 carving 00000000000011011110100001000000 Jibril 00100000000000000000000000000000 DARMAN'S 01000000000000000000000000000000 MANEUVERS 01000000000111101110110100100011 deficitcutting 00000000000000000000000000000000 miscommunication 00000000000000000000000000000000 ridicules 00000000000000000000000000000000 dissipate 00000000000000000000000000000000 paragraphing 00000000000000000000000000000000 stitched 00000000000000000000000000000000 breakthroughs 00000000000111100010011000100011 COOPERATION 01000000000111100101111010100111 WANES 01000000000000000000000000000000 Villages 00100000000110111011110001100011 BOTH 01000000000000001011011011000000 SIDES 01000000000000000100100111110011 feasts 00000000000000000000000000000000 TOPIC 01000000000111101001111101100111 Chekovian 00100000000000000000000000000000 computer-distributed 00000000000000000000000000000000 CONSERVATIVES 01000000000111101111010110110011 EXPECT 01000000000111111101000110110010 Uhlmann 00100000000000000000000000000000 Breger 00100000000000000000000000000000 Toensing 00100000000000000000000000000000 smokes 00000001011010000011000000010010 Him 00100000000000000101010001110010 Capri 00100000000000000000000000000000 ultra-thin 00000000000000000000000000000000 MC 01000000000000000000000000000000 SHIPPING 01000000001001000010110001000000 charter-shipping 00000000000000000000000000000000 church-owned 00000000000000000000000000000000 yachting 00000000000000000000000000000000 show-piece 00000000000000000000000000000000 hatbox 00000000000000000000000000000000 navigator 00000000000000000000000000000000 1,298 00000000000000000000000000000000 Stars 00100000000110101001110101100011 Stripes 00100000000100101101111101100011 fallow 00000000000000000000000000000000 Vittoria 00100000000000000000000000000000 dreaming 00000000000101011110100001000000 catamaran 00000000000000000000000000000000 90-foot 00000000000000000000000000000000 monohull 00000000000000000000000000000000 Fay 00101111111101000101001000001000 sportsmen 00000000000000000000000000000000 Hurst 00100000000000000000000000000000 smelt 00000000000000000000000000000000 four-mile 00000000000000000000000000000000 farmsteads 00000000000000000000000000000000 Atchinson 00100000000000000000000000000000 8th 00000000000000000000000000000000 appraisers 00000000000000000000000000000000 100-foot-long 00000000000000000000000000000000 Daugherty 00100000000000000000000000000000 Hiram 00100000000000000000000000000000 Kiev 00100000000000000000000000000000 restorer 00000000000000000000000000000000 trendsetter 00000000000000000000000000000000 Stanton 00101111111101101010000100001000 faulted 00000000001000101101010000110010 workmen 00000000000000000000000000000000 Sommer 00100000000000000000000000000000 Tinseltown 00100000000000000000000000000000 freakishly 00000000000000000000000000000000 Lekberg 00100000000000000000000000000000 minutiae 00000000000000000000000000000000 370.60 00000000000000000000000000000000 5.133 00000000000000000000000000000000 491.10 00000000000000000000000000000000 1.2795 00000000000000000000000000000000 stoppages 00000000000000000010100001010111 delving 00000000000000000000000000000000 Melvin 00101111111000100100001000011000 Torts 00100000000000000000000000000000 Suits 00100000000111111011110000100011 local-government 00000000000000000000000000000000 ironclad 00000000000000000000000000000000 Premiere 00100000000011001100100101100111 president-elect 00000000000000000000000000000000 6,000-member 00000000000000000000000000000000 daze 00000000000000000000000000000000 omissions 00000000000000000000000000000000 archness 00000000000000000000000000000000 50.38 00000000000000000000000000000000 99.93 00000000000000000000000000000000 publicity-conscious 00000000000000000000000000000000 code-related 00000000000000000000000000000000 Ignazio 00100000000000000000000000000000 melds 00000000000000000000000000000000 Distributed 00100000000011000000110000110010 profiled 00000000000000000000000000000000 prodigy 00000000000000000000000000000000 inaugurated 00000000000000000000000000000000 strewn 00000000000000000000000000000000 town-house 00000000000000000000000000000000 1845 00000000000000000000000000000000 committes 00000000000000000000000000000000 Start-up 00100000000000000000000000000000 Vauxhill 00100000000000000000000000000000 defection 00000000000110100111111000001111 rivaling 00000000000000000000000000000000 Amhowitz 00100000000000000000000000000000 UK 01000000000000000000000000000000 drug-policy 00000000000000000000000000000000 then-City 01000000000000000000000000000000 incarcerate 00000000000000000000000000000000 143,800 00000000000000000000000000000000 Isikoff 00100000000000000000000000000000 97.70 00000000000000000000000000000000 federal-local 00000000000000000000000000000000 disaster-prone 00000000000000000000000000000000 specifies 00000000000000000000000000000000 dusting 00000000000000000000000000000000 Preparedness 00100000000000000000000000000000 Self-sufficiency 00100000000000000000000000000000 immigrated 00000000000000000000000000000000 Absorbed 00100000001011001100010000110010 Tips 00100000000111101010110101100011 Pantyhose 00100000000000000000000000000000 slings 00000000000000000000000000000000 removable 00000000000000000000000000000000 non-Hispanic 01000000000000000000000000000000 Prompted 00100000000000010111010000110010 equipping 00000000000000000000000000000000 -unlike 00000000000000000000000000000000 Keatingland 00100000000000000000000000000000 16-story 00000000000000000000000000000000 isolates 00000000011010110001000000010010 walkie-talkies 00000000000000000000000000000000 public-address 00000000000000000000000000000000 7.33 00000000000000000000000000000000 sighed 00000000000000000000000000000000 delved 00000000000000000000000000000000 10.93 00000000000000000000000000000000 Empty 00100000000000010011110100010000 precautionary 00000000000000000000000000000000 50.45 00000000000000000000000000000000 wrested 00000000000000000000000000000000 brace 00001111111000000100101000101000 promise... 00000000000000000000000000000000 negligently 00000000000000000000000000000000 Abbe 00100000000000000000000000000000 FHLBB 01000000000000000000000000000000 MAITRE'D 01000000000000000000000000000000 CLAIMS 01000000000111101110110000100011 the... 00000000000000000000000000000000 95.22 00000000000000000000000000000000 heist 00000000000000000000000000000000 Kary 00100000000000000000000000000000 pols 00000000000000000000000000000000 svelte-looking 00000000000000000000000000000000 svelte 00000000000001110011000010010000 cripples 00000000000000000000000000000000 vases 00000000000000000000000000000000 Revision 00100000000110010111101010100111 bank-fraud 00000000000000000000000000000000 Ohio-chartered 00100000000000000000000000000000 seven-month 00000000000000000000000000000000 ALCEE 01000000000000000000000000000000 astounded 00000000000000000000000000000000 key-someone 00000000000000000000000000000000 acquittal 00000000000000000000000000000000 RICHMOND 01000000000111111111101001101000 RESIGNATIONS 01000000000101011111111000001111 Browder 00100000000000000000000000000000 Jacqueline 00100000000000000000000000000000 Epps 00100000000000000000000000000000 OBrion 01000000000000000000000000000000 NOTES 01000000000111111111111010000111 Hargrave 00100000000000000000000000000000 Devans 00100000000000000000000000000000 Boorstyn 00100000000000000000000000000000 McCutchen 01000000000000000000000000000000 Enersen 00100000000000000000000000000000 Watch 00100000001111101110101110110010 28.125 00000000000000000000000000000000 newspaper-industry 00000000000000000000000000000000 ginseng 00000000000000000000000000000000 subsistence 00000000000000000000000000000000 handstands 00000000000000000000000000000000 Ochs 00100000000000000000000000000000 Waldman 00100000000000000000000000000000 color-printing 00000000000000000000000000000000 built-from-kit 00000000000000000000000000000000 Appert 00100000000000000000000000000000 Level 00100000000111101100111001000111 34.9 00000000000000000000000000000000 34.5 00000000000000000000000000000000 encouragingly 00000000000000000000000000000000 subtraction 00000000000000000000000000000000 outleaped 00000000000000000000000000000000 brokerage-house 00000000000000000000000000000000 Garnett 00100000000000000000000000000000 bat-roost 00000000000000000000000000000000 cinch 00000000000000000000000000000000 136,800 00000000000000000000000000000000 Mateyo 00100000000000000000000000000000 councilman 00000000000000100111011110110101 198.1 00000000000000000000000000000000 honorariums 00000000000000000000000000000000 Gaining 00100000000000001000100101000000 1,235 00000000000000000000000000000000 220.45 00000000000000000000000000000000 Adlai 00100000000000000000000000000000 Goldwater 00100000000000000000000000000000 stickler 00000000000000000000000000000000 bank-baiting 00000000000000000000000000000000 Patman 00100000000000000000000000000000 vices 00000000000000000000000000000000 D'Amato 01000000000111000000111010001000 BANCORP 01000000000000001011010001001000 Alfonse 00100000000000000000000000000000 blackjack 00000000000000000000000000000000 535 00000000000000000000000000000000 tenaciously 00000000000000000000000000000000 no-no 00000000000000000000000000000000 corroborate 00000000000000000000000000000000 DiLorenzo 01000000000000000000000000000000 mid-to-late 00000000000000000000000000000000 majority-party 00000000000000000000000000000000 incumbency 00000000000111101010011110100001 intersections 00000000000000000000000000000000 Republican-governor 00100000000000000000000000000000 cross-state 00000000000000000000000000000000 econometric 00000000000000101011000000110000 benefactor 00000000000000000000000000000000 Zupan 00100000000000000000000000000000 finite 00000000000000000000000000000000 67-31 00000000000000000000000000000000 Reversing 00100000000111111110001101000000 191.2 00000000000000000000000000000000 EDA 01000000000000000000000000000000 stockyards 00000000000000000000000000000000 apprehension 00000000000110001110111010100111 Seldom 00100000000101100000001001110010 Seville 00100000000000000000000000000000 620.5 00000000000000000000000000000000 redistricting 00000000000000000000000000000000 Watching 00100000000111000001110101000000 grimace 00000000000000000000000000000000 labors 00000000000000000000000000000000 anguished 00000000000000000000000000000000 darker 00000000000000000000000000000000 trekked 00000000000000000000000000000000 Eliminate 00100000000111001111111110110010 revels 00000000000000000000000000000000 busload 00000000000000000000000000000000 winking 00000000000000000000000000000000 epiphany 00000000000000000000000000000000 confreres 00000000000000000000000000000000 undid 00000000000000000000000000000000 Hasidic 00100000000000000000000000000000 disposes 00000000000000000000000000000000 impound 00000000000000000000000000000000 foxes 00000000000000000000000000000000 straitjacket 00000000000000000000000000000000 earthquake-ravaged 00000000000000000000000000000000 45-member 00000000000000000000000000000000 0.30 00000000000000000000000000000000 tallied 00000000000000000000000000000000 Binghamton 00100000000000000000000000000000 downpayments 00000000000000000000000000000000 tallies 00000000000000000000000000000000 inputs 00000000000000000000000000000000 off-line 00000000000000000000000000000000 Securities-trading 00100000000000000000000000000000 global-funds 00000000000000000000000000000000 Mundo 00100000000000000000000000000000 twotiered 00000000000000000000000000000000 Rusty 00100000000000000000000000000000 facades 00000000000000000000000000000000 Noticias 00100000000000000000000000000000 subterranean 00000000000000000000000000000000 131.64 00000000000000000000000000000000 3411.08 00000000000000000000000000000000 Uruguay 00100000000000011010101000110000 fissures 00000000000000000000000000000000 facings 00000000000000000000000000000000 Beaux 00100000000000000000000000000000 skirts 00000000001101101111000000010010 wreaking 00000000000000000000000000000000 shattering 00000000000111101101010001000000 picturesquely 00000000000000000000000000000000 scratched 00000000000000000000000000000000 fender 00000000000000000000000000000000 highway-relief 00000000000000000000000000000000 diminishes 00000000000000000000000000000000 800-462-9029 00000000000000000000000000000000 pandemonium 00000000000000000000000000000000 overflow 00000000000000000011111001100111 flotilla 00000000000000000000000000000000 predawn 00000000000000000000000000000000 all-too-familiar 00000000000000000000000000000000 215.35 00000000000000000000000000000000 5.86 00000000000000000000000000000000 Sann 00100000000000000000000000000000 Recall 00100000000111001011110110110010 anti-Somoza 01000000000000000000000000000000 Laos 00100000000000000000000000000000 Encouraging 00100000000000000011110101000000 Tse-tung 00100000000000000000000000000000 1236.66 00000000000000000000000000000000 overseers 00000000000000000000000000000000 135,860,000 00000000000000000000000000000000 conscript 00000000000000000000000000000000 malaria 00000000000000000000000000000000 malnourishment 00000000000000000000000000000000 unsurpassed 00000000000000000000000000000000 tyranny 00000000000000000000000000000000 utopians 00000000000000000000000000000000 PARENT 01000000000111111100010000110101 Cambodians 00100000000000000000000000000000 Surgical 00100000000000001100101010110000 Pol 00100000000000000000000000000000 Pot 00100000000110001101100101100111 holed 00000000000000000000000000000000 Thai-Cambodian 01000000000000000000000000000000 Policies 00100000000111111100111100100011 Indochina 00100000000000000000000000000000 Fight 00100000000111111101110010110111 Valery 00100000000000000000000000000000 tangoed 00000000000000000000000000000000 rearm 00000000000000000000000000000000 Laurance 00100000000000000000000000000000 redrawn 00000000000000000000000000000000 AIR'S 01000000000000000000000000000000 procreation 00000000000000000000000000000000 Lobsenz 00100000000000000000000000000000 small-incision 00000000000000000000000000000000 88.1 00000000000000000000000000000000 pinstripe-suited 00000000000000000000000000000000 half-share 00000000000000000000000000000000 hightailing 00000000000000000000000000000000 chauffeur-driven 00000000000000000000000000000000 limousines 00000000000000000000000000000000 carpetbaggers 00000000000000000000000000000000 twang 00000000000000000000000000000000 299 00000000000000000000000000000000 Crosse 00100000000000000000000000000000 xenophobic 00000000000000000000000000000000 774,000 00000000000000000000000000000000 swagger 00000000000000000000000000000000 deprogrammings 00000000000000000000000000000000 GERMANY'S 01000000000000000000000000000000 Barlow 00100000000000000000000000000000 outlanders 00000000000000000000000000000000 parasites 00000000000000000000000000000000 most-jingoistic 00000000000000000000000000000000 hails 00000000000000000000000000000000 97.2 00000000000000000000000000000000 Carolinians 00100000000000000000000000000000 Ohioans 00100000000000000000000000000000 out-of-staters 00000000000000000000000000000000 distinctiveness 00000000000000000000000000000000 Klineberg 00100000000000000000000000000000 iced-tea 00000000000000000000000000000000 Cliffs 00100000000000100110100010100101 dock-siders 00000000000000000000000000000000 paddleball 00000000000000000000000000000000 Buksbaum 00100000000000000000000000000000 stereotypical 00000000000000000000000000000000 Pro 00100000011111001010010000010000 tear-jerking 00000000000000000000000000000000 F.S.B. 01000000000000000000000000000000 anthem 00000000000000000000000000000000 Perelman 00101111111101111000001010001000 Texasness 00100000000000000000000000000000 outsell 00000000000000000000000000000000 burnouts 00000000000000000000000000000000 Galles 00100000000000000000000000000000 buddies 00000000000000000000000000000000 Morino 00100000000000000000000000000000 Defections 00100000000111101010000010100111 lifestyle 00000000000000000000000000000000 ad-agency 00000000000000000000000000000000 most-strident 00000000000000000000000000000000 anti-outsider 00000000000000000000000000000000 Commercials 00100000000101001111110101100011 heart-rending 00000000000000000000000000000000 chest-swelling 00000000000000000000000000000000 ain't-it-great-to-be-a-Texan 01000000000000000000000000000000 Independents 00100000000111110100111000110011 introductory 00000000000001101110010100010000 Alamo 00100000000000000000000000000000 fajitas 00000000000000000000000000000000 mince 00000000000000000000000000000000 sniff 00000000000000000000000000000000 howdy 00000000000000000000000000000000 y'all 00000000000000000000000000000000 cowboy 00000000000000100001101100100001 Duquesne 00100000000000000000000000000000 3436.58 00000000000000000000000000000000 Waring 00100000000000000000000000000000 LaRosa 01000000000000000000000000000000 MEDIA 01000000000000000011001010110000 POLICY 01000000000110001000000011111001 MacNamara 01001111110111110101001000001000 Clapp 00100000000000000000000000000000 385 00000000000000000000000000000000 14.4 00000000000000000000000000000000 micoprocessors 00000000000000000000000000000000 Poyner 00100000000000000000000000000000 Vegetables 00100000000111001010111001100011 Gunmen 00100000000000001100100000110011 78,600 00000000000000000000000000000000 foreign-car 00000000000000000000000000000000 African-controlled 00100000000000000000000000000000 Centrale 00100000000000000000000000000000 Transol 00100000000000000000000000000000 Koreagate 00100000000000000000000000000000 35.125 00000000000000000000000000000000 Watergate-beleaguered 00100000000000000000000000000000 Transatlantic 00100000000001001000001010110000 Hennessy 00101111111001101000100010001000 KRENZ 01000000000000000000000000000000 319,000 00000000000000000000000000000000 114.2 00000000000000000000000000000000 112.2 00000000000000000000000000000000 323.4 00000000000000000000000000000000 357.2 00000000000000000000000000000000 3.48 00000000000000000000000000000000 IranU.S 01000000000000000000000000000000 Tribunal 00100000000100101111000001010101 8.88 00000000000000000000000000000000 Transformers 00100000000000000000000000000000 ENGLAND 01000000000000010101011110000010 CRITICAL 01000000000000011000011000010000 pickles 00000000000000000000000000000000 52.50 00000000000000000000000000000000 Periods 00100000000111100101101001000111 Westburne 00100000000000000000000000000000 21.98 00000000000000000000000000000000 relocating 00000000000000000000000000000000 201,028 00000000000000000000000000000000 quake-prone 00000000000000000000000000000000 razed 00000000000000000000000000000000 publicity-seeking 00000000000000000000000000000000 Grubb 00101111111100101111111010101000 Residential 00100000000000001111010000110000 little-publicized 00000000000000000000000000000000 anticult 00000000000000000000000000000000 state-funded 00000000000000000000000000000000 elswehere 00000000000000000000000000000000 413 00000000000000000000000000000000 earthquake-proof 00000000000000000000000000000000 NATIONWIDE 01000000000000000001000001000111 1973-75 00000000000000000000000000000000 708,000 00000000000000000000000000000000 25-cent-a-share 00000000000000000000000000000000 reapportion 00000000000000000000000000000000 1937-40 00000000000000000000000000000000 Thermal 00100000000101011100101010110000 technology-licensing 00000000000000000000000000000000 drop-out 00000000000000000000000000000000 Guerrilla 00100000000000010001011000110000 one-sixth 00000000000000000000000000000000 129.91 00000000000000000000000000000000 stock-appreciation 00000000000000000000000000000000 471.6 00000000000000000000000000000000 178.0 00000000000000000000000000000000 515.4 00000000000000000000000000000000 63,971 00000000000000000000000000000000 sauerkraut 00000000000000000000000000000000 61,493 00000000000000000000000000000000 Laundered 00100000000000000000000000000000 US116.7 01000000000000000000000000000000 Harbanse 00100000000000000000000000000000 Vancouver-based 00100000000000000000000000000000 interprovincial 00000000000000000000000000000000 Territories 00100000000000111100101111100011 investor-owned 00000000000000000000000000000000 279.8 00000000000000000000000000000000 4.88 00000000000000000000000000000000 CoastAmerica 01000000000000000000000000000000 Mid 00100000000111111000110110101000 830.5 00000000000000000000000000000000 301.9 00000000000000000000000000000000 582.6 00000000000000000000000000000000 Surety 00100000000000000000000000000000 309.3 00000000000000000000000000000000 RTC-appointed 01000000000000000000000000000000 smokehouse 00000000000000000000000000000000 125.7 00000000000000000000000000000000 10,300 00000000000000000000000000000000 31.8 00000000000000000000000000000000 1928-33 00000000000000000000000000000000 l'Ouest 01000000000000000000000000000000 Africaine 00100000000000000000000000000000 101.5 00000000000000000000000000000000 WARNED 01000000000111011111110111000010 optical-disk 00000000000000000000000000000000 laser-read 00000000000000000000000000000000 videodisks 00000000000000000000000000000000 videodisk 00000000000000000000000000000000 optically 00000000000000000000000000000000 Fiedler 00100000000000000000000000000000 7,400 00000000000000000000000000000000 663,000 00000000000000000000000000000000 0.76 00000000000000000000000000000000 35374.22 00000000000000000000000000000000 841 00000000000000000000000000000000 645-293 00000000000000000000000000000000 170.65 00000000000000000000000000000000 35544.87 00000000000000000000000000000000 0.86 00000000000000000000000000000000 2665.66 00000000000000000000000000000000 Sentiment 00100000000111100110111010100111 Murai 00100000000000000000000000000000 Tustin 00100000000000000000000000000000 415.8 00000000000000000000000000000000 rotated 00000000111001110010110000110010 1,930 00000000000000000000000000000000 13.64 00000000000000000000000000000000 4,170 00000000000000000000000000000000 Eisai 00100000000000000000000000000000 Enhancements 00100000000111111110001010100011 2,610 00000000000000000000000000000000 2,940 00000000000000000000000000000000 2,490 00000000000000000000000000000000 hailing 00000000000000000000000000000000 Kumagai-Gumi 01000000000000000000000000000000 1,490 00000000000000000000000000000000 2,890 00000000000000000000000000000000 788 00000000000000000000000000000000 despicable 00000000000000000000000000000000 Mugabe 00100000000000000000000000000000 861 00000000000000000000000000000000 2189.3 00000000000000000000000000000000 1772.1 00000000000000000000000000000000 382.9 00000000000000000000000000000000 theocracy 00000000000000000000000000000000 building-related 00000000000000000000000000000000 10.44 00000000000000000000000000000000 Storehouse 00100000000101001011101100101000 abounding 00000000000000000000000000000000 10.13 00000000000000000000000000000000 21.33 00000000000000000000000000000000 coast-to-coast 00000000000000000000000000000000 name-calling 00000000000000000000000000000000 ticked 00000000000000000000000000000000 Iranians 00100000000111101110101110110011 messiah 00000000000000000000000000000000 Rafsanjani 00101111111011011000001010001000 hatchet 00000000000000000000000000000000 Alameda 00100000000000000000000000000000 211,666 00000000000000000000000000000000 reshape 00000000000101100110111110110010 Opportunities 00100000000010001001101110100011 accessory 00000000000000000000000000000000 cottages 00000000000000000000000000000000 home-sharing 00000000000000000000000000000000 sale-lease-back 00000000000000000000000000000000 650,000 00000000000000000000000000000000 temporal 00000000000000000000000000000000 militias 00000000000000001000100000110011 SURGED 01000000000000000101000100110010 management-pilots 00000000000000000000000000000000 squandered 00000000000000000000000000000000 molding 00000000000000000000000000000000 Borrowed 00100000000001000100010000110010 1263.51 00000000000000000000000000000000 15.64 00000000000000000000000000000000 215.42 00000000000000000000000000000000 3398.65 00000000000000000000000000000000 130.13 00000000000000000000000000000000 0.23 00000000000000000000000000000000 130.46 00000000000000000000000000000000 0.0015 00000000000000000000000000000000 renewals 00000000000000000000000000000000 Testament-style 00100000000000000000000000000000 AFTERSHOCKS 01000000000000000000000000000000 RATTLED 01000000000000000000000000000000 5.0 00000000000000000000000000000000 still-limited 00000000000000000000000000000000 razing 00000000000000000000000000000000 837 00000000000000000000000000000000 Guildford 00100000000000000000000000000000 Irishmen 00100000000000000000000000000000 Englishwoman 00100000000000000000000000000000 Pascual 00100000000000000000000000000000 authoritative 00000000000000000000000000000000 Lutheran 00100000000000000000000000000000 conferred 00000001110011110110010000110010 Greifswald 00100000000000000000000000000000 Jiri 00100000000000000000000000000000 Hajak 00100000000000000000000000000000 Syrian-backed 00100000000000000000000000000000 Vaclav 00100000000000000000000000000000 Havel 00100000000000000000000000000000 furthering 00000000000000000000000000000000 unerringly 00000000000000000000000000000000 Christianity 00100000000000000000000000000000 Explosions 00100000000110110101100110001001 touchdown 00000000000000000000000000000000 Rebel 00100000000001110001011000110000 artillerists 00000000000000000000000000000000 airlifting 00000000000000000000000000000000 shrouded 00000000000000000000000000000000 Khost 00100000000000000000000000000000 Assad 00101111110000001010110110001000 jurist 00000000000000000000000000000000 disassociate 00000000000000000000000000000000 1.5990 00000000000000000000000000000000 Fog 00100000000101010000110000000001 141.93 00000000000000000000000000000000 40,800 00000000000000000000000000000000 Beame 00100000000000000000000000000000 commonality 00000000000000000000000000000000 decelerated 00000000000000000000000000000000 sale-purchase 00000000000000000000000000000000 Altair 00100000000000000000000000000000 psychologically 00000000010101101000000001110010 pro-mark 00000000000000000000000000000000 Jupiter-bound 00100000000000000000000000000000 367.10 00000000000000000000000000000000 366.85 00000000000000000000000000000000 1954 00000000000000000000000000000000 Excluded 00100100100111010100010000110010 home-care 00000000000000000000000000000000 Szuros 00100000000000000000000000000000 5.44 00000000000000000000000000000000 evangelist-industrialist 00000000000000000000000000000000 diversifications 00000000000000000000000000000000 torch-lit 00000000000000000000000000000000 roughed 00000000000000000000000000000000 lifes 00000000000000000000000000000000 anti-Stalinist 01000000000000000000000000000000 Myung 00100000000000000000000000000000 preparer 00000000000000000000000000000000 8%-10 00000000000000000000000000000000 goblins 00000000000000000000000000000000 home-computer 00000000000000000000000000000000 Symbol:HRB 01000000000000000000000000000000 Preparation 00100000000111111111011100111001 899.6 00000000000000000000000000000000 145,954 00000000000000000000000000000000 commemorated 00000000000000000000000000000000 PUTS 01000000000010000011000000010010 CALLS 01000000000000000000000110110010 PATOIS 01000000000000000000000000000000 chafed 00000000010101011110001000110010 livestock-dealing 00000000000000000000000000000000 all-options 00000000000000000000000000000000 beginnings 00000000000101000111111000001111 lunchroom 00000000000000000000000000000000 Puts 00100000000010000011000000010010 Rescue 00100000000000001000011110110111 minimum-fee 00000000000000000000000000000000 Helm 00100000000110010111111000001111 snarls 00000000000000000000000000000000 orthodoxy 00000000000000000000000000000000 BATTLED 01000000000111000101010000110010 setters 00000000000000000101000011100111 health-care-product 00000000000000000000000000000000 Cichan 00100000000000000000000000000000 730.1 00000000000000000000000000000000 679.5 00000000000000000000000000000000 52.75 00000000000000000000000000000000 106.7 00000000000000000000000000000000 Cecelia 00100000000000000000000000000000 stock-selection 00000000000000000000000000000000 monomer 00000000000000000000000000000000 105.2 00000000000000000000000000000000 8.525 00000000000000000000000000000000 8.425 00000000000000000000000000000000 9.87 00000000000000000000000000000000 97-nation 00000000000000000000000000000000 trade-liberalizing 00000000000000000000000000000000 world-commerce 00000000000000000000000000000000 Zhaoxing 00100000000000000000000000000000 Nationalist 00100000000101000001011000110000 Chiang 00101111110100101100100000001000 Kai-shek 00100000000000000000000000000000 Nationalists 00100000000111111110000110110011 preclearance 00000000000000000000000000000000 Jiotto 00100000000000000000000000000000 Caspita 00100000000000000000000000000000 213,000 00000000000000000000000000000000 Caspita-brand 00100000000000000000000000000000 COMMUTERS 01000000000000000000000000000000 960,000 00000000000000000000000000000000 Sonia 00100000000000000000000000000000 estranged 00000000000000000000000000000000 NTSB 01000000000000000000000000000000 Ripper 00100000000000000000000000000000 libeled 00000000000000000000000000000000 451 00000000000000000000000000000000 130-unit 00000000000000000000000000000000 34-floor 00000000000000000000000000000000 386,000 00000000000000000000000000000000 Chernobyl-type 00100000000000000000000000000000 reassessing 00000000000000000000000000000000 Viktor 00100000000000000000000000000000 Sidorenko 00100000000000000000000000000000 Kursk 00100000000000000000000000000000 Smolensk 00100000000000000000000000000000 Byelorussia 00100000000000000000000000000000 AREA 01000000000111101110011001100111 BAY 01000000000000000001010010100101 Beng 00100000000000000000000000000000 preflight 00000000000000000000000000000000 dispersing 00000000000000000000000000000000 U.N.-backed 01000000000000000000000000000000 Anti-Ballistic 01000000000000000000000000000000 Oxford 00100000000100000111111000101000 Superstitions 00100000000000000000000000000000 Kaitaia 00100000000000000000000000000000 phone-company 00000000000000000000000000000000 lower-volume 00000000000000000000000000000000 PTL 01000000000000000000000000000000 82-day 00000000000000000000000000000000 161-day 00000000000000000000000000000000 Comanche 00100000000000000000000000000000 Pro-Iranian 01000000000000000000000000000000 ADMITTED 01000000000011101001110111000010 Jeep-Eagle 01000000000000000000000000000000 20. 00000000000000000000000000000000 proportional 00000000000000000000000000000000 non-Jewish 01000000000000000000000000000000 championing 00000000000000000000000000000000 4,320 00000000000000000000000000000000 SHEVARDNADZE 01001111111111100000110010001000 non-recourse 00000000000000000000000000000000 143,178 00000000000000000000000000000000 162,190 00000000000000000000000000000000 142,117 00000000000000000000000000000000 r-Revised 01000000000000000000000000000000 LOTUS 01000000000100110010100100101000 DEVELOPMENT 01000000000011000000101001100001 71.6 00000000000000000000000000000000 482.3 00000000000000000000000000000000 393.1 00000000000000000000000000000000 kidnappers 00000000000111000110011110110011 captives 00000000000000000000000000000000 VIACOM 01000000000111101001010100101000 lease-rental 00000000000000000000000000000000 909 00000000000000000000000000000000 150,000-barrel-a-day 00000000000000000000000000000000 octane 00000000000000000000000000000000 disclaims 00000000000000000000000000000000 dismantling 00000000000100101111010001000000 refurbish 00000000000000000000000000000000 feedstock 00000000000000000000000000000000 19.8 00000000000000000000000000000000 Braking 00100000000000001010110001000000 Engineered 00100000000100100001101001000000 Fabrics 00100000000000000011011111001001 RTS 01000000000000000000000000000000 ALQ-178 01000000000000000000000000000000 Rapport 00100000000000000000000000000000 35500.64 00000000000000000000000000000000 295.7 00000000000000000000000000000000 293.9 00000000000000000000000000000000 36.4 00000000000000000000000000000000 528.4 00000000000000000000000000000000 549.9 00000000000000000000000000000000 Bookings 00100000000000000000010100011001 432 00000000000000000000000000000000 EMPIRE 01000000000111110000100100100001 PENCIL 01000000000110101100110000000001 Empire-Berol 01000000000000000000000000000000 fiscal-third 00000000000000000000000000000000 557,000 00000000000000000000000000000000 Cartridge 00100000000000000000000000000000 cartridges 00000000000000000000000000000000 750th 00000000000000000000000000000000 232.6 00000000000000000000000000000000 682.7 00000000000000000000000000000000 614.6 00000000000000000000000000000000 Echelon 00100000000000000000000000000000 63.79 00000000000000000000000000000000 steam-generating 00000000000000000000000000000000 Energie 00100000000000000000000000000000 Verfahrenstechnik 00100000000000000000000000000000 Baltimore-Washington 01000000000000000000000000000000 Kaolin 00100000000000000000000000000000 Unimin 00100000000000000000000000000000 446,000 00000000000000000000000000000000 unincorporated 00000000000000000000000000000000 self-explanatory 00000000000000000000000000000000 stock-holding 00000000000000000000000000000000 househld 00000000000000000000000000000000 asseet 00000000000000000000000000000000 Primary 00100000000000000110010011010000 Durables 00100000000100101110010011001001 Automobiles 00100000000110101111111001100011 checking-account 00000000000000000000000000000000 Excludes 00100000001001100001000000010010 Unincorporated 00100000000000000000000000000000 proprietorships 00000000000000000000000000000000 charred 00000000010011100101101001000000 50.8 00000000000000000000000000000000 less-binding 00000000000000000000000000000000 918.4 00000000000000000000000000000000 806.7 00000000000000000000000000000000 music-entertainment 00000000000000000000000000000000 book-publishing 00000000000000000000000000000000 aloud 00000000000000000000000000000000 California-backed 00100000000000000000000000000000 120.1 00000000000000000000000000000000 89.2 00000000000000000000000000000000 Impasse 00100000000111111011101000100111 Till 00100000000000010110000000101010 evens 00000000000000000000000000000000 devouring 00000000000000000000000000000000 Tremendae 00100000000000000000000000000000 effete 00000000000000000000000000000000 Tyrannosaurus 00100000000000000000000000000000 Cretaceous 00100000000000000000000000000000 Reproduced 00100000000000000000000000000000 meat-processing 00000000000000000000000000000000 deriving 00000000000000000000000000000000 608,413 00000000000000000000000000000000 shuttering 00000000000000000000000000000000 Briarcliff 00100000000000000000000000000000 Manor 00100000000101100001100000110000 white-walled 00000000000000000000000000000000 linear 00000000000100010000101100101000 rumbles 00000000000000000000000000000000 35564.43 00000000000000000000000000000000 scurries 00000000000000000000000000000000 Reformed 00100000000010111110101001000000 saucers 00000000000000000000000000000000 wastepaper 00000000000000000000000000000000 squeegee 00000000000000000000000000000000 storeroom 00000000000000000000000000000000 Bran 00100000000000000000000000000000 D.,Calif. 01000000000000000000000000000000 trembling 00000000000000000000000000000000 Johannesburg 00100000000100100011111001101000 storming 00000000000000000000000000000000 IMSAI 01000000000000000000000000000000 Oat 00100000000000110111101110110000 Dutch-descended 00100000000000000000000000000000 26-7 00000000000000000000000000000000 Original 00100000000000000000010011010000 card-carrying 00000000000000000000000000000000 loony 00000000000100100110011000110000 unhindered 00000000000000000000000000000000 theologians 00000000000000000000000000000000 Johan 00100000000000000000000000000000 Fifteenth 00100000000101111011100011010000 crawls 00000000000000000000000000000000 planter 00000000000000000000000000000000 U.N.-supervised 01000000000000000000000000000000 sunflowers 00000000000000000000000000000000 townhouses 00000000000000000000000000000000 Alida 00100000000000000000000000000000 Willem 00100000000000000000000000000000 Heerden 00100000000000000000000000000000 Morfey 00100000000000000000000000000000 slave 00000000000110111110101001000000 comforts 00000000000000000000000000000000 sincerely 00000000000000000000000000000000 Pieter 00100000000000000000000000000000 Bruwer 00100000000000000000000000000000 scribe 00000000000000000000000000000000 pamphleteer 00000000000000000000000000000000 8,100 00000000000000000000000000000000 Afrikanerdom 00100000000000000000000000000000 reside 00000000000000000000000000000000 Weeds 00100000000110100111110010100111 storefronts 00000000000000000000000000000000 shantytown 00000000000000000000000000000000 whitewalled 00000000000000000000000000000000 650-or-so 00000000000000000000000000000000 67,400 00000000000000000000000000000000 Impossible 00100000000111101101011110010000 Conradie 00100000000000000000000000000000 Rudi 00100000000000000000000000000000 Dyk 00100000000000000000000000000000 B.C.-based 01000000000000000000000000000000 nuclear-weapons 00000000000000000000000000000000 apologizes 00000000000000000000000000000000 Okay 00100000000111110011110110010000 immediate-response 00000000000000000000000000000000 droplets 00000000000000000000000000000000 overcommitted 00000000000000000000000000000000 prune 00000000000000000000000000000000 thought-out 00000000000000000000000000000000 GET 01000000000111111010101110110010 RID 01000000000000000000111000101111 DOGS 01000000000000101111110101100011 Sell 00100000000111111110001110110010 WATCH 01000000001111101110101110110010 DISAPPOINTMENTS 01000000000111111100010000000011 ingenuity 00000000000000000000000000000000 cautionary 00000000000101011101000000010000 Substituting 00100000000111100001111101000000 BEWARE 01000000000111101111001000101111 HEAVY 01000000000000000010011100010000 DEBT 01000000000000000000000010110001 stooges 00000000000000000000000000000000 Bailard 00100000000000000000000000000000 SELL 01000000000111111110001110110010 WHISPER 01000000000000000000000000000000 COMPARE 01000000000111001011011110110010 brewed 00000000000000000000000000000000 RATIOS 01000000000111111010111001000111 WITH 01000000000000000000001000001010 PROSPECTS 01000000000111111111111100111001 slavishly 00000000000000000000000000000000 EXAMINE 01000000000111011110011110110010 Braumeisters 00100000000000000000000000000000 spokeman 00000000000000000000000000000000 Oswald 00100000000000000000000000000000 Eiszner 00100000000000000000000000000000 Shipley 00100000000000000000000000000000 rocket-like 00000000000000000000000000000000 ruinous 00000000000000000000000000000000 234.4 00000000000000000000000000000000 foreign-country 00000000000000000000000000000000 Tillery 00100000000000000000000000000000 0.92 00000000000000000000000000000000 well-regarded 00000000000000000000000000000000 Lech 00100000000000000000000000000000 Crowley 00101111111111011001001000001000 Beise 00100000000000000000000000000000 Walesa 00100000000000110000111010001000 ex-president 00000000000000000000000000000000 4.23 00000000000000000000000000000000 3.91 00000000000000000000000000000000 P* 00100000000000000000000000000000 17.47 00000000000000000000000000000000 71.36 00000000000000000000000000000000 833 00000000000000000000000000000000 Babel 00100000000000000000000000000000 dumbest 00000000000000000000000000000000 ad-hoc 00000000000000000000000000000000 Cost-effective 00100000000000000000000000000000 Piszczalski 00100000000000000000000000000000 hooking 00000000000000000000000000000000 hookups 00000000000000000000000000000000 computer-integrated 00000000000000000000000000000000 Hillsboro 00100000000000000000000000000000 luster 00000000000100100111110100100111 panacea 00000000000000000000000000000000 banish 00000000000000000000000000000000 GROWING 01000000000000000001010001000000 interfered 00000000010110110110010000110010 Artzt 00100000000000000000000000000000 31-cent 00000000000000000000000000000000 hulking 00000000000000000000000000000000 mare-COOR 01000000000000000000000000000000 967,809 00000000000000000000000000000000 6,320 00000000000000000000000000000000 808.3 00000000000000000000000000000000 enticing 00000000000000000000000000000000 bargelike 00000000000000000000000000000000 commissioning 00000000000100110001111101000000 stewardship 00000000000000000000000000000000 foundered 00000000101001000110001000110010 double-wing 00000000000000000000000000000000 807.6 00000000000000000000000000000000 Merkurs 00100000000000000000000000000000 15,261 00000000000000000000000000000000 downhill 00000000000000000000000000000000 Hoot 00100000000000000000000000000000 McInerney 01000000000000000000000000000000 Lincoln-Mercury-Merkur 01000000000000000000000000000000 4,600 00000000000000000000000000000000 SWUNG 01000000000000010101101000110010 20.25 00000000000000000000000000000000 Canada-U.S. 01000000000000000000000000000000 Chicago-Montreal 01000000000000000000000000000000 398,000 00000000000000000000000000000000 407.9 00000000000000000000000000000000 433.2 00000000000000000000000000000000 131.01 00000000000000000000000000000000 52.1 00000000000000000000000000000000 earring 00000000000000000000000000000000 resort-casino 00000000000000000000000000000000 299,000 00000000000000000000000000000000 34-a-share 00000000000000000000000000000000 Lynne 00100000000000000000000000000000 934.7 00000000000000000000000000000000 6.23 00000000000000000000000000000000 PLASTIC 01000000000000100010101010110000 PENCILS 01000000001010011111110101100011 CODE-NAMED 01000000000000000000000000000000 E-71 00100000000000000000000000000000 hush-hush 00000000000000000000000000000000 five-and-dime 00000000000000000000000000000000 Shelbyville 00100000000000000000000000000000 A.D.L. 01000000000000000000000000000000 981.7 00000000000000000000000000000000 food-services 00000000000000000000000000000000 coextrude 00000000000000000000000000000000 sheaths 00000000000000000000000000000000 graphite-plastic 00000000000000000000000000000000 cores 00000000000000000000000000000000 eraser-fitted 00000000000000000000000000000000 sharpens 00000000000000000000000000000000 slivered 00000000000000000000000000000000 cleanly 00000000000000000000000000000000 constrains 00000000000000000000000000000000 3-type 00000000000000000000000000000000 draftsmen 00000000000000000000000000000000 Eagle-Berol 01000000000000000000000000000000 Legislating 00100000000000000000000000000000 128.1 00000000000000000000000000000000 134.2 00000000000000000000000000000000 68.4 00000000000000000000000000000000 67.9 00000000000000000000000000000000 188.7 00000000000000000000000000000000 155.3 00000000000000000000000000000000 53.75 00000000000000000000000000000000 overpurchase 00000000000000000000000000000000 375.9 00000000000000000000000000000000 yield-management 00000000000000000000000000000000 optimum 00000000000000000000000000000000 Wheeling-Pittsburgh 01000000000000000000000000000000 60-inch 00000000000000000000000000000000 Allenport 00100000000000000000000000000000 143.4 00000000000000000000000000000000 Plastow 00100000000000000000000000000000 finery 00000000000000000000000000000000 146.3 00000000000000000000000000000000 cutouts 00000000001001101011110101100011 CB-radio-style 01000000000000000000000000000000 Sausalito 00100000000000000000000000000000 liveliest 00000000000000000000000000000000 teemed 00000000000000000000000000000000 first-hand 00000000000000000000000000000000 Daylight 00100000000000000000000000000000 initials 00000000000000000000000000000000 11:54 00000000000000000000000000000000 JCKC 01000000000000000000000000000000 Wow 00100000000011101000110100101000 Beat 00100000000111000110101110110010 BEAT 01000000000111000110101110110010 1210.70 00000000000000000000000000000000 297.1 00000000000000000000000000000000 JKD 01000000000000000000000000000000 glanced 00000000000000000000000000000000 25.96 00000000000000000000000000000000 mouthed 00000000000000000000000000000000 Earth-quake 00100000000000000000000000000000 12:06 00000000000000000000000000000000 HRH 01000000000000000000000000000000 Endless 00100000000001000110110100010000 shower 00000000000100111101111000000001 evil-looking 00000000000000000000000000000000 12:07 00000000000000000000000000000000 ONEZIE 01000000000000000000000000000000 Hustead 00100000000000000000000000000000 Towing 00100000000000000000000000000000 12:15 00000000000000000000000000000000 DHAWK 01000000000000000000000000000000 187.1 00000000000000000000000000000000 three-story 00000000000000000000000000000000 12:38 00000000000000000000000000000000 DAYAC 01000000000000000000000000000000 Alcatraz 00100000000000000000000000000000 Oakland-Berkeley 01000000000000000000000000000000 12:48 00000000000000000000000000000000 LMEYER 01000000000000000000000000000000 pier 00000000000000011001110110110000 hairline 00000000000000000000000000000000 Ruined 00100000001111011101101001000000 1:00 00000000000000000000000000000000 HEYNOW 01000000000000000000000000000000 Matamoros 00100000000000000000000000000000 Spreads 00100000000100000111001000100011 stilts 00000000000000000000000000000000 Richmond-San 01000000000000000000000000000000 265,000-square-foot 00000000000000000000000000000000 SQUIBB 01000000000011111100111100101000 RD 01000000000000000000000000000000 typed 00000000000000000000000000000000 1:20 00000000000000000000000000000000 DGAULT 01000000000000000000000000000000 BRISTOL-MYERS 01000000000000000000000000000000 57.9 00000000000000000000000000000000 swarms 00000000000000000000000000000000 -had 00000000000000000000000000000000 SAMURAI 01000000000010001110111000000001 numb 00000000000000000000000000000000 MACPOST 01000000000000000000000000000000 Downtown 00100000000000101000001000110000 17.39 00000000000000000000000000000000 Co-op 00100000000000000000000000000000 quivers 00000000000000000000000000000000 Stinson 00100000000000000000000000000000 rougher 00000000000000000000000000000000 oozing 00000000000000000000000000000000 Puritan 00100000000000000000000000000000 4:02 00000000000000000000000000000000 SHIBUMI 01000000000000000000000000000000 UCSF 01000000000000000000000000000000 triage 00000000000000000000000000000000 KIM 01001111111000101000010100001000 Cupboard 00100000000000000000000000000000 scooted 00000000000000000000000000000000 nixed 00000000000000000000000000000000 shivering 00000000000100000111000001000000 JROE 01000000000000000000000000000000 Sunset 00100000000111101000101100100001 6:50 00000000000000000000000000000000 CAROLG 01000000000000000000000000000000 flimsy 00000000000000000000000000000000 lunged 00000000000000000000000000000000 7:13 00000000000000000000000000000000 CALLIOPE 01000000000000000000000000000000 embarrassingly 00000000000000000000000000000000 8.16 00000000000000000000000000000000 8:01 00000000000000000000000000000000 HLR 01000000000000000000000000000000 215.04 00000000000000000000000000000000 freaked 00000000000000000000000000000000 Kitchen 00100000000101101111111000000001 slithering 00000000000000000000000000000000 9:31 00000000000000000000000000000000 9:38 00000000000000000000000000000000 FIG 01000000000000000000000000000000 9:53 00000000000000000000000000000000 PANDA 01000000000000000000000000000000 Flesh 00100000000111101111000010110111 95.8 00000000000000000000000000000000 market:8.60 00000000000000000000000000000000 3425.22 00000000000000000000000000000000 CHG 01000000000000000000000000000000 logging 00000000001001111010110001000000 constricting 00000000001000011111010001000000 6.94 00000000000000000000000000000000 23-5 00000000000000000000000000000000 CLOSE 01000000000111111010110110110010 COUNTRY 01000000000111111111101111000101 129.24 00000000000000000000000000000000 laissez-faire 00000000000000000000000000000000 deregulaton 00000000000000000000000000000000 2170.1 00000000000000000000000000000000 1758.5 00000000000000000000000000000000 643.4 00000000000000000000000000000000 ISSUE 01000000000111101111101000110111 451.6 00000000000000000000000000000000 554 00000000000000000000000000000000 252.5 00000000000000000000000000000000 10.98 00000000000000000000000000000000 754 00000000000000000000000000000000 130.76 00000000000000000000000000000000 318.7 00000000000000000000000000000000 Helaba 00100000000000000000000000000000 35107.56 00000000000000000000000000000000 0.0115 00000000000000000000000000000000 505-455 00000000000000000000000000000000 sufficed 00000000000000000000000000000000 2642.88 00000000000000000000000000000000 135.09 00000000000000000000000000000000 35242.65 00000000000000000000000000000000 communal 00000000000000000000000000000000 characterless 00000000000000000000000000000000 rotate 00000000000000000000000000000000 large-volume 00000000000000000000000000000000 905 00000000000000000000000000000000 6.34 00000000000000000000000000000000 bargain-hunters 00000000000000000000000000000000 2,840 00000000000000000000000000000000 1,980 00000000000000000000000000000000 1,263,000 00000000000000000000000000000000 Originally 00100000000000000101001001110010 Alberg 00100000000000000000000000000000 971,000 00000000000000000000000000000000 multi-family 00000000000000000000000000000000 1,022,000 00000000000000000000000000000000 1,296,000 00000000000000000000000000000000 overstatement 00000000000100001100111001100111 102.5 00000000000000000000000000000000 87.1 00000000000000000000000000000000 18.125 00000000000000000000000000000000 marketmaking 00000000000000000000000000000000 Defect 00100000000111101001101010110111 Premarin 00100000000000000000000000000000 estrogen-replacement 00000000000000000000000000000000 102.25 00000000000000000000000000000000 healthcare 00000000000000100001100000110000 Christian-Democratic 01000000000000000000000000000000 1523.22 00000000000000000000000000000000 614 00000000000000000000000000000000 angina 00000000000000000000000000000000 Monorail 00100000000000000000000000000000 Piccolino 00100000000000000000000000000000 nearer 00000000000000000000000000000000 coronary 00000000000000000010101011100001 67.75 00000000000000000000000000000000 743.7 00000000000000000000000000000000 dermatological 00000000000000000000000000000000 anti-infectives 00000000000000000000000000000000 Significantly 00100000000000001000010001110010 Stay 00100000000110011101010110110010 74.125 00000000000000000000000000000000 krona 00000000000000000000000000000000 Crossair 00100000000000000000000000000000 340B 01000000000000000000000000000000 gems 00000000000000000000000000000000 miserably 00000000000000000000000000000000 Lost 00100000000000000100010000110010 Lot 00100000000111111111111001111111 Gentility 00100000000000000000000000000000 280.5 00000000000000000000000000000000 irreplaceable 00000000000000000000000000000000 indeterminable 00000000000000000000000000000000 1772.6 00000000000000000000000000000000 centering 00000000000000000000000000000000 historichomes 00000000000000000000000000000000 stereotypically 00000000000000000000000000000000 epic 00000000000000000100001100100001 insensitive 00000000000111101010011110010000 Depicting 00100001011010010000000000001010 2189.7 00000000000000000000000000000000 contrived 00000000000000000000000000000000 aristocratic 00000000000000000000000000000000 faux 00000000000000000000000000000000 Charlestonians 00100000000000000000000000000000 Spotted 00100010010101000101010000110010 Kikkoman 00100000000000000000000000000000 Bankcard 00100000000000000000000000000000 Avianca 00100000000000000000000000000000 2,060 00000000000000000000000000000000 aspire 00000000000000000000000000000000 easy-to-read 00000000000000000000000000000000 chimney 00000000000000000000000000000000 Hernandez 00101111111000110010000100001000 Galicia 00100000000000000000000000000000 fester 00000000000000000000000000000000 graft-riddled 00000000000000000000000000000000 4,440 00000000000000000000000000000000 subcontracting 00000000000000000000000000000000 1,770 00000000000000000000000000000000 technocrats 00000000000000000000000000000000 Brawls 00100000000000000000000000000000 Leftist 00100000000000010101011000110000 Cuauhtemoc 00100000000000000000000000000000 Cardenas 00101111111101110000101010001000 nationalism 00000000000111101111010010100111 Hakko 00100000000000000000000000000000 drains 00000000000000000000000000000000 graft 00000000000010001001110010100111 Kyowa 00100000000000000000000000000000 pro-enterprise 00000000000000000000000000000000 laborer 00000000000000000000000000000000 union-owned 00000000000000000000000000000000 roughneck 00000000000000000000000000000000 9,800 00000000000000000000000000000000 non-union 00000000000000000000000000000000 transitory 00000000000000000000000000000000 thrilled 00000000001110101101110000110010 retaking 00000000000000000000000000000000 Robles 00100000000000000000000000000000 subdirector 00000000000000000000000000000000 3-Day-Old 01000000000000000000000000000000 capriciousness 00000000000000000000000000000000 Velasco 00100000000000000000000000000000 Taming 00100000000000000000000000000000 936 00000000000000000000000000000000 Teijin 00100000000000000000000000000000 Heberto 00100000000000000000000000000000 outward-looking 00000000000000000000000000000000 interdependence 00000000000000000000000000000000 Couple 00100000000111111111101001111111 Counseling 00100000000110000000101101100001 Grows 00100000000001101000001000110010 Defuse 00100000000110011011111110110010 Stress 00100000000111101110001010110111 Whisper 00100000000000000000000000000000 YEARS 01000000000000000000000000111011 resented 00000000000000000000000000000000 Ploys 00100000000000000000000000000000 temperament 00000000000111010111110010100111 dual-career 00000000000000000000000000000000 'I'm 01000000000000000000000000000000 Marjorie 00100000000000000000000000000000 10.40 00000000000000000000000000000000 Relationships 00100000000111100000010000100111 detoxification 00000000000000000000000000000000 purging 00000000000000000000000000000000 1,480 00000000000000000000000000000000 Maeda 00100000000000000000000000000000 Tobishima 00100000000000000000000000000000 sodas 00000000000000000000000000000000 Ricca 00100000000000000000000000000000 2,472 00000000000000000000000000000000 Floss 00100000000000000000000000000000 604.72 00000000000000000000000000000000 274,475 00000000000000000000000000000000 24,891 00000000000000000000000000000000 team-management 00000000000000000000000000000000 Fallout 00100000000110100011001100100111 Beware 00100000000111101111001000101111 Dishonesty 00100000000000000000000000000000 spawns 00000000000000000000000000000000 Shealy 00100000000000000000000000000000 Co-author 00100000000000000000000000000000 Hollinger 00100000000000000000000000000000 Pilferage 00100000000000000000000000000000 tell-tale 00000000000000000000000000000000 expense-account 00000000000000000000000000000000 fudging 00000000000000000000000000000000 sap 00000000000000000000000000000000 Consultant 00100000000111101000011110110101 Southlake 00100000000000000000000000000000 Duston 00100000000000000000000000000000 disciplining 00000000000000000000000000000000 Distributing 00100000000011001111111101000000 midsize 00000000000000011111100100110000 Sirota 00100000000000000000000000000000 Alper 00100000000000000000000000000000 Pfau 00100000000000000000000000000000 640,000 00000000000000000000000000000000 domestic-demand 00000000000000000000000000000000 28.55 00000000000000000000000000000000 6.63 00000000000000000000000000000000 Erensel 00100000000000000000000000000000 Okasan 00100000000000000000000000000000 appraise 00000000000000000000000000000000 230-a-share 00000000000000000000000000000000 20%-plus 00000000000000000000000000000000 Valente 00100000000000000000000000000000 preadmission 00000000000000000000000000000000 hospitalizations 00000000000100111000111001100011 Relatively 00100000000100001100000001110010 bodegas 00000000000000000000000000000000 2687.53 00000000000000000000000000000000 ambulatory 00000000000000000000000000000000 Rahill 00100000000000000000000000000000 milks 00000000000000000000000000000000 napkin 00000000000000000000000000000000 paperwork 00000000000000000001111000111001 Utilization 00100000000000000110110011000111 discotheque 00000000000000000000000000000000 Trucks 00100000000110101110111001100011 reduced-fat 00000000000000000000000000000000 Bapilly 00100000000000000000000000000000 157.8 00000000000000000000000000000000 35586.60 00000000000000000000000000000000 pooling 00000000001101011111010001000000 entailed 00000000000000000000000000000000 2.5-ton 00000000000000000000000000000000 4.2-ton 00000000000000000000000000000000 Rover 00100000000000001001010100101000 truck-building 00000000000000000000000000000000 Vehicles 00100000000000000001101001100011 Industriels 00100000000000000000000000000000 16%-owned 00000000000000000000000000000000 Doorne 00100000000000000000000000000000 35689.98 00000000000000000000000000000000 unpleasantness 00000000000000000000000000000000 35670 00000000000000000000000000000000 unresponsive 00000000000000000000000000000000 23.53 00000000000000000000000000000000 10-fold 00000000000000000000000000000000 35585.52 00000000000000000000000000000000 longer-run 00000000000000000000000000000000 disqualification 00000000000000000000000000000000 plausibly 00000000000000000000000000000000 creamier 00000000000000000000000000000000 sundry 00000000000000000000000000000000 stew 00000000000000000000000000000000 higher-fat 00000000000000000000000000000000 unpolitical 00000000000000000000000000000000 894 00000000000000000000000000000000 guessing 00000000000111100000110101100111 price-level 00000000000000000000000000000000 price-stability 00000000000000000000000000000000 155.4 00000000000000000000000000000000 44.6 00000000000000000000000000000000 124.2 00000000000000000000000000000000 most-contentious 00000000000000000000000000000000 Strict 00100000000010101001000000010000 reawakening 00000000000000000000000000000000 lassitude 00000000000000000000000000000000 Hickman 00100000000000000000000000000000 compatriots 00000000000000000000000000000000 Halva-Neubauer 01000000000000000000000000000000 Furman 00101111111111001011110000101000 semiliterate 00000000000000000000000000000000 foe 00000000000110001111101001100111 seven-point 00000000000000000000000000000000 Embryo 00100000000000000000000000000000 trimester 00000000000111111111011110010111 RESEARCHERS 01000000000000000110000010110011 Rogin 00100000000000000000000000000000 FOOD 01000000000000001111111010110000 25.125 00000000000000000000000000000000 prognosis 00000000000000000000000000000000 410.4 00000000000000000000000000000000 mobilization 00000000000000000000000000000000 Jacki 00100000000000000000000000000000 Ragan 00100000000000000000000000000000 pro-abortion 00000000000000000000000000000000 Spaulding 00100000000000000000000000000000 Michelman 00100000000000000000000000000000 31.7 00000000000000000000000000000000 medical-assistance 00000000000000000000000000000000 pre-natal 00000000000000000000000000000000 neonatal 00000000001011010010101000110000 care. 00000000000000000000000000000000 spousal 00000000000000000000000000000000 required. 00000000000000000000000000000000 emergency. 00000000000000000000000000000000 mother. 00000000000000000000000000000000 tissue. 00000000000000000000000000000000 MOST 01000000000111101011101011000000 fangs 00000000000000000000000000000000 Trained 00100000000001110100010000110010 pur-poises 00000000000000000000000000000000 Marrill 00100000000000000000000000000000 Pederson 00100000000000000000000000000000 knitwear 00000000000000000000000000000000 Tastes 00100000000100101001111101100011 54.6 00000000000000000000000000000000 U.S.-Mexico 01000000000000000000000000000000 196.7 00000000000000000000000000000000 P-3 00100000000000000000000000000000 three-day-old 00000000000000000000000000000000 large-size 00000000000000000000000000000000 retroactively 00000001111000010000010001110010 366.79 00000000000000000000000000000000 1983-1987 00000000000000000000000000000000 Arkansas-based 00100000000000000000000000000000 Mississippian 00100000000000000000000000000000 Klatman 00100000000000000000000000000000 21.03 00000000000000000000000000000000 value-boosting 00000000000000000000000000000000 11.91 00000000000000000000000000000000 28-pence 00000000000000000000000000000000 greenback 00000000000000000000000000000000 Pacitti 00100000000000000000000000000000 Concocts 00100000000000000000000000000000 unfold 00000000000000000000000000000000 lower-growth 00000000000000000000000000000000 higher-multiple 00000000000000000000000000000000 Cinema 00100000000000000110010001001000 ocean-shipping 00000000000000000000000000000000 officals 00000000000000000000000000000000 142.40 00000000000000000000000000000000 hell-bent 00000000000000000000000000000000 1.5885 00000000000000000000000000000000 Sacremento 00100000000000000000000000000000 emergency-medical 00000000000000000000000000000000 foodstuff 00000000000000000000000000000000 apparat 00000000000000000000000000000000 10:45 00000000000000000000000000000000 motor-home 00000000000000000000000000000000 north-south 00000000000000000000000000000000 coastline 00000000000000000000000000000000 proof-of-purchases 00000000000000000000000000000000 kinked 00000000000000000000000000000000 FALL 01000000000111111111011000110111 Rail-transit 00100000000000000000000000000000 26-point 00000000000000000000000000000000 befell 00000000000000000000000000000000 Terminals 00100000000111101110101001100011 Runways 00100000000000100111110001100011 Stockton 00100000000000000000000000000000 unusable 00000000000000000000000000000000 sprinkler 00000000000000000000000000000000 Stapleton 00100000000000000000000000000000 rerouted 00000000000000000000000000000000 Burlingame 00100000000000000000000000000000 Weinroth 00100000000000000000000000000000 vineyards 00000000010111001011110101100011 788.8 00000000000000000000000000000000 three-to-five-year 00000000000000000000000000000000 BALLOT 01000000000111100010000001100111 Laphroaig 00100000000000000000000000000000 single-malt 00000000000000000000000000000000 Buckingham 00100000000000000000000000000000 Wile 00100000000000000000000000000000 Cutty 00100000000000000000000000000000 Sark 00100000000000000000000000000000 Lavin 00100000000000000000000000000000 Peak 00100000000110001011011010100111 Vineyards 00100000010111001011110101100011 distillery 00000000000000000000000000000000 174.5 00000000000000000000000000000000 language-housekeeper 00000000000000000000000000000000 Neill 00100000000000000000000000000000 Junor 00100000000000000000000000000000 WoodMac 01000000000000000000000000000000 Tanqueray 00100000000000000000000000000000 development... 00000000000000000000000000000000 ISSUES 01000000000110100000001011100011 white-spirit 00000000000000000000000000000000 white-spirits 00000000000000000000000000000000 35.4 00000000000000000000000000000000 315.5 00000000000000000000000000000000 223.2 00000000000000000000000000000000 off-year 00000000000000000000000000000000 last-ditch 00000000000000000000000000000000 307.9 00000000000000000000000000000000 Boddington 00100000000000000000000000000000 Heineken 00100000000000000000000000000000 Stella 00100000000000000000000000000000 Artois 00100000000000000000000000000000 steakhouse 00000000000000000000000000000000 Keg 00100000000000000000000000000000 Focusing 00100000000111111100100000110010 364.1 00000000000000000000000000000000 Dewar 00100000000000000000000000000000 honorary 00000000000000000000000000000000 Cast 00100000000110001010010110110010 NEWHALL 01000000000010011100110100101000 LAND 01000000000101100101100000100001 FARMING 01000000000000101000001100100001 Valencia 00100000000000000000000000000000 122.4 00000000000000000000000000000000 coming-out 00000000000000000000000000000000 closet-sized 00000000000000000000000000000000 number-crunchers 00000000000000000000000000000000 poaching 00000000001001101010110001000000 nimble 00000000000000000000000000000000 Glorioso 00100000000000000000000000000000 water-cooled 00000000000000000000000000000000 extraordinary... 00000000000000000000000000000000 3090s 00000000000000000000000000000000 knockout 00000000000000011000110000000001 Scotch 00100000000110100000101100100001 faster-growing 00000000000000000000000000000000 J&B 01000000000000000000000000000000 bank-teller 00000000000000000000000000000000 unplug 00000000000000000000000000000000 guzzle 00000000000000000000000000000000 outgrew 00000000000000000000000000000000 pre-signed 00000000000000000000000000000000 super-charger 00000000000000000000000000000000 leans 00000000000110101100001000110010 hormone-treated 00000000000000000000000000000000 Pitman 00100000000000000000000000000000 NAS 01000000000000000000000000000000 NH 01000000000000000000000000000000 large-city 00000000000000000000000000000000 limited-edition 00000000000000000000000000000000 Prudence 00100000000111010011010010100111 Sergiusz 00100000000000000000000000000000 Grabowiec 00100000000000000000000000000000 unit-price 00000000000000000000000000000000 seventh-consecutive 00000000000000000000000000000000 DALIS 01000000000000000000000000000000 FAKE 01000000000001110010011010010000 CASE 01000000000111111111100001100111 0.0085 00000000000000000000000000000000 Madson 00100000000000000000000000000000 Slobodin 00100000000000000000000000000000 best-run 00000000000000000000000000000000 WLF 01000000000000000000000000000000 coupling 00000000000000000000000000000000 savor 00000000000000000000000000000000 Costs 00100000000111101111101000000011 415.9 00000000000000000000000000000000 6.59 00000000000000000000000000000000 360.1 00000000000000000000000000000000 Mode 00100000000100001111101001100111 Ill-considered 00100000000000000000000000000000 P.J. 01000000000000000000000000000000 Subsidizing 00100000000000000101011101000000 Odd-year 00100000000000000000000000000000 ecologically 00000000000000000000000000000000 Palms 00100000000000000000000000000000 ratcheting 00000000000000000000000000000000 Junk-bond 00100000000000000000000000000000 453,000 00000000000000000000000000000000 Private-property 00100000000000000000000000000000 beach-house 00000000000000000000000000000000 barrier-island 00000000000000000000000000000000 Y. 00101111111111100101101011011000 Lerman 00100000000000000000000000000000 statistically 00000000000001101000000001110010 equitably 00000000000000000000000000000000 Summarizing 00100001110010010000000000001010 Prenatal 00100000000001110001100000110000 tradedistorting 00000000000000000000000000000000 58.64 00000000000000000000000000000000 female-headed 00000000000000000000000000000000 12,092 00000000000000000000000000000000 31.6 00000000000000000000000000000000 scotches 00000000000000000000000000000000 41.5 00000000000000000000000000000000 Confirming 00100000000110000001111010000010 mass-murderer 00000000000000000000000000000000 death-sentence 00000000000000000000000000000000 27,225 00000000000000000000000000000000 32,191 00000000000000000000000000000000 BUNDY'S 01000000000000000000000000000000 recalculated 00000000000000000000000000000000 Nofzinger 00100000000000000000000000000000 rumbled 00000000000000000000000000000000 J.R. 01000000000000000000000000000000 American-developed 00100000000000000000000000000000 Schieffelin 00100000000000000000000000000000 TED 01001111111000010000101000011000 Investigating 00100000000111110100010101000000 Tobias 00100000000000000000000000000000 planets 00000000000000000000000000000000 lifeless 00000000000000000000000000000000 comets 00000000000000000000000000000000 asteroids 00000000000000000000000000000000 lodge 00000000000101111001100010100101 Lyn 00100000000000000000000000000000 geysers 00000000000000000000000000000000 sulfurous 00000000000000000000000000000000 Torrence 00100000000000000000000000000000 polluting 00000000000000000000000000000000 12:54 00000000000000000000000000000000 Commander 00100000000101111111110000110101 Fly 00100000000001011101010110110010 polymeric 00000000000000000000000000000000 demolition 00000000000000000000000000000000 Benny 00101111111010010000001000011000 Chin 00100000000111111000111110000001 proprieter 00000000000000000000000000000000 gene-copying 00000000000000000000000000000000 stucco 00000000000000000000000000000000 gravitational 00000000000000000000000000000000 infiltrate 00000000000000000000000000000000 anti-Galileo 01000000000000000000000000000000 CONVICTION 01000000000111100111111101100111 referenda 00000000000000000000000000000000 Venus 00100000000000000000000000000000 beta-thalassemia 00000000000000000000000000000000 CRIMINAL 01000000000000000001000000110000 deleterious 00000000000000000000000000000000 18,136 00000000000000000000000000000000 reorganization-plan 00000000000000000000000000000000 telescope 00000000000111011101100011010000 faintest 00000000000000000000000000000000 galaxies 00000000000000000000000000000000 reiterates 00000000000000000000000000000000 high-rolling 00000000000000000000000000000000 CLAIMANTS 01000000000111110101100110110011 citizen-sparked 00000000000000000000000000000000 SHIELD 01000000000000001000110100100001 DALKON 01000000000111100010001000110000 business-judgment 00000000000000000000000000000000 Gitter 00100000000000000000000000000000 HEARS 01000000110101100011000000010010 leniency 00000000000000000000000000000000 SEEKING 01000000000011001110111000110010 oil-recycling 00000000000000000000000000000000 Greaney 00100000000000000000000000000000 YORK'S 01000000000000000000000000000000 tight-lipped 00000000000000000000000000000000 Liman 00101111111111100000001010001000 deliberation 00000000000000000000000000000000 Milbank 00100000000000000000000000000000 Tweed 00100000000000000000000000000000 Hadley 00100000000000000000000000000000 McCloy 01000000000000000000000000000000 unintentionally 00000000000000000000000000000000 Repeat 00100000000101111111110110110010 15-month 00000000000000000000000000000000 5,400 00000000000000000000000000000000 JOIN 01000000000111101111111110110010 odd-year 00000000000000000000000000000000 redirected 00000000000000000000000000000000 anemia 00000000000100011011110010100111 mated 00000000000000000000000000000000 GRAB 01000000000000011110101110110010 then-prevailing 00000000000000000000000000000000 Aldrich 00100000000000000000000000000000 Waltch 00100000000000000000000000000000 uterus 00000000000000000000000000000000 emptied 00000000000000000000000000000000 spinoffs 00000000000000000000000000000000 Spirited 00100000000110000111000010010000 Reichmanns 00100000000000000000000000000000 Closing 00100000000111101111111001110111 Stirs 00100101101110000011000000010010 less-rigorous 00000000000000000000000000000000 Schloss 00100000000000000000000000000000 slop 00000000000000000000000000000000 Canellos 00100000000000000000000000000000 33-point 00000000000000000000000000000000 spigots 00000000000000000000000000000000 school-lunch 00000000000000000000000000000000 transfusions 00000000000111110111100110001001 emergency-relief 00000000000000000000000000000000 20.625 00000000000000000000000000000000 caseload 00000000000111100000011000100001 money-wise 00000000000000000000000000000000 Suchocki 00100000000000000000000000000000 Drinker 00100000000000000000000000000000 vouchers 00000000000000000100110100100011 community-development 00000000000000000000000000000000 medical-airlift 00000000000000000000000000000000 Letterman 00100000000000000000000000000000 Volland 00100000000000000000000000000000 one-page 00000000000000000000000000000000 Maple 00100000001111110010001000110000 Mulrooney 00100000000000000000000000000000 Larson 00100000000000000000000000000000 McGinley 01000000000000000000000000000000 FARMERS 01000000000001001110111000110011 REAP 01000000000111001111101110110010 drought-ravaged 00000000000000000000000000000000 Beef 00100000000111101111010110110111 non-public 00000000000000000000000000000000 clump 00000000000000000000000000000000 Pankyo 00100000000000000000000000000000 Stokely 00100000000000000000000000000000 peas 00000000000000000000000000000000 VITRO 01000000000011001010111100101000 fertilization 00000000000100111111101111100001 Costly 00100000000000000100110010010000 19.94 00000000000000000000000000000000 proliferate 00000000000000000000000000000000 hope... 00000000000000000000000000000000 vitro 00000000000011001010111100101000 MOVES 01000000000111100011001000100011 Lowry 00100000000000000000000000000000 WORLD 01000000000111010100111011000101 ODDITIES 01000000000000000000000000000000 CD-ROM 01000000000000000000000000000000 belch 00000000000000000000000000000000 ARTY 01000000000000000000000000000000 Hockney 00100000000000000000000000000000 27.125 00000000000000000000000000000000 Emmerich 00100000000000000000000000000000 teased 00000000000000000000000000000000 PACS 01000000000111101100010000110011 GIVE 01000000000111110011101110110010 39.75 00000000000000000000000000000000 duet 00000000000110000000111101100111 Latest 00100000000000000010000011010000 Roskind 00100000000000000000000000000000 CHRISTMAS 01000000000000000000000000100001 SHOPPERS 01000000000001101100111000110011 11th-hour 00000000000000000000000000000000 Honeybee 00100000000000000000000000000000 polymerase 00000000000000000000000000000000 Guarana 00100000000000000000000000000000 Amcap 00100000000000000000000000000000 ginger 00000000000000000000000000000000 ale 00001111111111111110011010110000 cherries 00000000000000000000000000000000 Amenities 00100000000111110100001010100011 Parkshore 00100000000000000000000000000000 counselor 00000000000110111101010110110101 Shugart 00100000000000000000000000000000 Places 00100000000111101111000010100011 Almanac 00100000000010010001011001100111 soot-stained 00000000000000000000000000000000 Yuba 00100000000000000000000000000000 Unamused 00100000000000000000000000000000 Kiss 00100000000110101011001010110111 almanac 00000000000010010001011001100111 dethroned 00000000000000000000000000000000 Poppenberg 00100000000000000000000000000000 Atlantans 00100000000000000000000000000000 Co-authors 00100000000000000000000000000000 infertile 00000000000000000000000000000000 Gloucester 00100000000000000000000000000000 Asheville 00100000000000000000000000000000 pretensions 00000000000000000000000000000000 Anaheim-Santa 01000000000000000000000000000000 Nassau-Suffolk 01000000000000000000000000000000 dignify 00000000000000000000000000000000 Hemmer 00100000000000000000000000000000 mastermind 00000000000000000000000000000000 74,351 00000000000000000000000000000000 2.52 00000000000000000000000000000000 76.4 00000000000000000000000000000000 54.875 00000000000000000000000000000000 ALQ-135 01000000000000000000000000000000 190.3 00000000000000000000000000000000 Tactical 00100000000000101101110000110000 Fighter 00100000000001010010001010110000 Backlog 00100000000111100011000101100111 352.9 00000000000000000000000000000000 210.3 00000000000000000000000000000000 5.03 00000000000000000000000000000000 208.8 00000000000000000000000000000000 7.06 00000000000000000000000000000000 frittered 00000000000000000000000000000000 Magleby 00100000000000000000000000000000 product-launch 00000000000000000000000000000000 implantation 00000000000000000000000000000000 32.50 00000000000000000000000000000000 153.9 00000000000000000000000000000000 116.8 00000000000000000000000000000000 salable 00000000000000000000000000000000 upgrades 00000000001010100010001000100011 manufacturing-cost 00000000000000000000000000000000 MVL 01000000000000000000000000000000 outsold 00000000000000000000000000000000 four-to-one 00000000000000000000000000000000 dishwashers 00000000000000000000000000000000 Kurlak 00100000000000000000000000000000 mopping 00000000000000000000000000000000 tiles 00000000000000000000000000000000 eyeballing 00000000000000000000000000000000 calibrated 00000000000000000000000000000000 458 00000000000000000000000000000000 PHOTOGRAPH 01000000000111101011001000111111 blackouts 00000000000000000000000000000000 hosannas 00000000000000000000000000000000 tremulous 00000000000000000000000000000000 price-conscious 00000000000000000000000000000000 shutoff 00000000000000000000000000000000 snake 00000000000111111101111000000001 just-in-time 00000000000000000000000000000000 Dobi 00100000000000000000000000000000 arises 00000000001100000110001000110010 self-diagnostic 00000000000000000000000000000000 Livermore 00100000000000000000000000000000 show-stoppers 00000000000000000000000000000000 150-plus 00000000000000000000000000000000 one-square-mile 00000000000000000000000000000000 Mansfield 00100000000000000000000000000000 Telescope 00100000000111011101100011010000 emitted 00000000000000000000000000000000 farthest 00000000000000000000000000000000 contribued 00000000000000000000000000000000 Egg-industry 00100000000000000000000000000000 recession-sensitive 00000000000000000000000000000000 COLLECTING 01000000000010101111111101000000 Misa 00100000000000000000000000000000 tarred 00000000000000000000000000000000 sanitize 00000000000000000000000000000000 forbidden 00000000001101000101101001000000 liquified 00000000000000000000000000000000 bakers 00000000000000000000000000000000 preparers 00000000000000000000000000000000 eclairs 00000000000000000000000000000000 30-pound 00000000000000000000000000000000 cylinder 00000000000000100101111000000001 perforated 00000000000000000000000000000000 R2-D2 01000000000000000000000000000000 3,390 00000000000000000000000000000000 BRANDS 01000000000110101110001010101000 Chickens 00100000000110100001110101100011 Hens 00100000000000000000000000000000 unclean 00000000000000000000000000000000 sanitized 00000000000000000000000000000000 folio 00000000000000000000000000000000 Kings 00100000000101001010001000110000 Guzewich 00100000000000000000000000000000 Decatur 00100000000000000000000000000000 UEP 01000000000000000000000000000000 battleground 00000000000111101110001101100111 egg-processing 00000000000000000000000000000000 post-bankruptcy 00000000000000000000000000000000 Inspection 00100000000000001110111001100111 more-pressing 00000000000000000000000000000000 Vining 00100000000000000000000000000000 Foiled 00100000000000000000000000000000 Adsi 00100000000000000000000000000000 40,424 00000000000000000000000000000000 chanteuse 00000000000000000000000000000000 passably 00000000000000000000000000000000 coming-of-age 00000000000000000000000000000000 infused 00000000000000000000000000000000 sentimentality 00000000000000000000000000000000 bluesy 00000000000000000000000000000000 wows 00000000000000000000000000000000 sensuality 00000000000000000000000000000000 cinematographer 00000000000000000000000000000000 Yeast 00100000000000000000000000000000 slyly 00000000000000000000000000000000 Equivalents 00100000000000000000101001101001 Fassbinder 00100000000000000000000000000000 Scorsese 00100000000000000000000000000000 Temptation 00100000000111011101111100100111 Christ 00100000000111101000000001000111 banquet-hall 00000000000000000000000000000000 musicianship 00000000000000000000000000000000 Feelings 00100000000111111101111101100011 condescension 00000000000011100001110010100111 heelsthe 00000000000000000000000000000000 Adapted 00100000000111101000110000110010 brotherly 00000000000000000000000000000000 single-lot 00000000000000000000000000000000 Sabre 00100000000011001100100000100001 time-hotels 00000000000000000000000000000000 disparage 00000000000000000000000000000000 Halis 00100000000000000000000000000000 tuxedos 00000000000000000000000000000000 gig 00000000000000000000000000000000 Plump 00100000000000000000000000000000 grovels 00000000000000000000000000000000 bookers 00000000000000000000000000000000 off-hours 00000000000000000000000000000000 cardigan 00000000000000000000000000000000 fancies 00000000000000000000000000000000 canny 00000000000000000000000000000000 consoles 00000000000000000000000000000000 Heady 00100000000000110010011010010000 sadder 00000000000000000000000000000000 chisel 00000000000000000000000000000000 Lie 00100000100101111101010110110010 tweety-bird 00000000000000000000000000000000 Lescaze 00100000000000000000000000000000 prancing 00000000000000000000000000000000 angora 00000000000000000000000000000000 clingy 00000000000000000000000000000000 VIDEO 01000000000000001000001010110000 TIP 01000000000100101001001010110111 Mob 00100000000000001101010000000001 Demme 00100000000000000000000000000000 delightful 00000000000000100011000010010000 Gene-Spliced 01000000000000000000000000000000 magnetism 00000000000000000000000000000000 Round 00100000000111101011111000111111 agriproducts 00000000000000000000000000000000 3M 01000000000000000000000000000000 115,000-square-foot 00000000000000000000000000000000 Milstar 00100000000000000000000000000000 Denis 00101111111000101011100010011000 alloys 00000000000000000000000000000000 Anatol 00100000000000000000000000000000 impersonator 00000000000000000000000000000000 3,950 00000000000000000000000000000000 421 00000000000000000000000000000000 6.71 00000000000000000000000000000000 equips 00000000000000000000000000000000 restate 00000000000101001100111110110010 payables 00000000000000000000000000000000 Loughman 00100000000000000000000000000000 underdressed 00000000000000000000000000000000 commandant 00000000000000000000000000000000 Jewel 00100000000111110111011111111001 Lafontant 00100000000000000000000000000000 Insilco 00100000000101011100111100101000 overdressed 00000000000000000000000000000000 well-operated 00000000000000000000000000000000 wept 00000000000000000000000000000000 launder 00000000000000000000000000000000 Formerly 00100000000000001110011010000010 Benda 00100000000000000000000000000000 Pryce 00100000000000000000000000000000 Money-market 00100000000000000000000000000000 OIL 01000000000000000001001110110000 amours 00000000000000000000000000000000 190.58point 00000000000000000000000000000000 Rachwalski 00100000000000000000000000000000 Maturities 00100000000111101001101001000111 COMPANY 01000000000111101111111000000101 deux 00000000000000000000000000000000 quadruples 00000000000000000000000000000000 318.6 00000000000000000000000000000000 Marseillaise 00100000000000000000000000000000 Wight 00100000000000000000000000000000 Gates-Warren 01000000000000000000000000000000 Concorde 00100000000000000000000000000000 USO 01000000000000000000000000000000 Cracking 00100000001111101110100001000000 24th-largest 00000000000000000000000000000000 Persky 00100000000000000000000000000000 one-woman 00000000000000000000000000000000 Saran 00100000000000000000000000000000 media-related 00000000000000000000000000000000 space-buying 00000000000000000000000000000000 Euroconvertible 00100000000000000000000000000000 Gaulle 00100000000000000000000000000000 Staffers 00100000000000001000000010110011 ultramodern 00000000000000000000000000000000 Plaster 00100000000100101000010110000000 jiggling 00000000000000000000000000000000 conditioner 00000000000011111111011001010111 Aqua 00100000000000000000000000000000 hairspray 00000000000000000000000000000000 movie-like 00000000000000000000000000000000 BOZELL 01000000000111110011110000101000 UCLA 01000000000000000000000000000000 sold-out 00000000000000000000000000000000 BEER 01000000000000111011111010110000 Parallel 00100000000000000110101001000000 Amber 00100000000000001110001000110000 Amstel 00100000000000000000000000000000 tasting 00000000000000000000000000000000 Photograph 00100000000111101011001000111111 callipygous 00000000000000000000000000000000 emulating 00000000000000000000000000000000 tributes 00000000000111110100101110100011 Coupes 00100000000000000000000000000000 antiSony 01000000000000000000000000000000 Gale 00100000000000000000000000000000 Wesleyan 00100000000000000000000000000000 obfuscate 00000000000000000000000000000000 migrations 00000000000000000000000000000000 casuistry 00000000000000000000000000000000 Jolas 00100000000000000000000000000000 designating 00000000000000000000000000000000 Remembrance 00100000000000000000000000000000 Anniversary 00100000000000000000011101000111 Genocide 00100000000000000000000000000000 1915-1923 00000000000000000000000000000000 warring 00000000000100101101011000110000 Collector 00100000000011010010011110110101 indecisiveness 00000000000000000000000000000000 quibbling 00000000000000000000000000000000 fanny 00000000000000000000000000000000 wiggled 00000000000000000000000000000000 anti-Turkish 01000000000000000000000000000000 Judeo-Christian 01000000000000000000000000000000 S.p.A. 01000000000000000000000000000000 single-cell 00000000000000000000000000000000 Kurds 00100000000111011110100000110011 extermination 00000000000000000000000000000000 all-black 00000000000000000000000000000000 dustbin 00000000000000000000000000000000 patronized 00000000000000000000000000000000 embittered 00000000011111100001110000110010 Dismantle 00100000011110111011111110110010 pillorying 00000000000000000000000000000000 buzzsaw 00000000000000000000000000000000 breathlessly 00000000000000000000000000000000 averts 00000011011010000011000000010010 18-story 00000000000000000000000000000000 wailing 00000000000000000000000000000000 phoney 00000000000000000000000000000000 baloney 00000000000011110101110010100111 Chalmers 00101111111101100101000100001000 non-edible 00000000000000000000000000000000 gentlelady 00000000000000000000000000000000 theologian 00000000000110001011011110110101 gentleladies 00000000000000000000000000000000 Pichia 00100000000000000000000000000000 neighbhorhoods 00000000000000000000000000000000 Rainier 00100000000110000011000100101000 Innocent 00100000000001100001110110010000 pastoris 00000000000000000000000000000000 crossfire 00000000000000000000000000000000 Decent 00100000000000000100101010010000 Bricktop 00100000000000000000000000000000 derriere 00000000000000000000000000000000 infested 00000000000000000000000000000000 Establishing 00100000000011101111111101000000 famously 00000000000000000000000000000000 chicanery 00000000000000000000000000000000 precariously 00000000000000000000000000000000 breasts 00000000000111100100110101100011 Panglossian 00100000000000000000000000000000 paeans 00000000000000000000000000000000 coasters 00000000000000000000000000000000 Corresponding 00100000000000001100100000010000 bravest 00000000000000000000000000000000 Tobin 00100000000000000000000000000000 68.9 00000000000000000000000000000000 Result 00100000000111111111111011111111 littered 00000000000000000000000000000000 lemons 00000000000000000000000000000000 shielding 00000000000000000000000000000000 craning 00000000000000000000000000000000 swiveling 00000000000000000000000000000000 meaner 00000000000000000000000000000000 icon 00000000000000000000000000000000 517 00000000000000000000000000000000 Left-stream 00100000000000000000000000000000 Radical 00100000000000010001000000010000 Pollin 00100000000000000000000000000000 Riverside 00100000000110000100101001101000 Norimasa 00100000000000000000000000000000 pliant 00000000000000000000000000000000 empires 00000000000000000000000000000000 obediently 00000000000000000000000000000000 assists 00000000000000000000000000000000 deflationary 00000000000000000000000000000000 Attacks 00100000000111101111100100100111 peering 00000000000000000000000000000000 West... 00100000000000000000000000000000 Morcott 00100000000000000000000000000000 classless 00000000000000000000000000000000 Southwood 00100000000000000000000000000000 198.41 00000000000000000000000000000000 169.28 00000000000000000000000000000000 Governments 00100000000111001000100001110011 Sudol 00100000000000000000000000000000 totter 00000000000000000000000000000000 Capitalism 00100000000111101110110010100111 inequity 00000000000000000000000000000000 ground-cargo 00000000000000000000000000000000 air-cargo 00000000000000000000000000000000 Simat 00100000000000000000000000000000 Helliesen 00100000000000000000000000000000 Eichner 00100000000000000000000000000000 drive-train 00000000000000000000000000000000 Toyko 00100000000000000000000000000000 40.7 00000000000000000000000000000000 freighters 00000000000000000000000000000000 Combis 00100000000000000000000000000000 toeholds 00000000000000000000000000000000 Kenton 00100000000000000000000000000000 gas-derived 00000000000000000000000000000000 Pacific-listed 00100000000000000000000000000000 carpenters 00000000000000000000000000000000 glucose 00000000000000000000000000000000 accomodate 00000000000000000000000000000000 corrects 00000000000000000000000000000000 flashlight 00000000000000000000000000000000 Tie-vole-ee 00100000000000000000000000000000 Navin 00100000000000000000000000000000 whoosh 00000000000000000000000000000000 Single-cell 00100000000000000000000000000000 wingbeat 00000000000000000000000000000000 streaming 00000000000000000000000000000000 floats 00000000000000000000000000000000 Call-In 01000000000000000000000000000000 palamedes 00000000000000000000000000000000 130.875 00000000000000000000000000000000 101.75 00000000000000000000000000000000 inky-brown 00000000000000000000000000000000 pea 00000000000000000000000000000000 hurled 00000000001000101001001000110010 4.84-a-share 00000000000000000000000000000000 scarlet 00000000000000000000000000000000 lantana 00000000000000000000000000000000 event-driven 00000000000000000000000000000000 horoscopes 00000000000000000000000000000000 Nac 00100000000000000000000000000000 blossoms 00000000000000000000000000000000 62.50 00000000000000000000000000000000 spoonbills 00000000000000000000000000000000 cement-makers 00000000000000000000000000000000 Calmat 00100000000111000101011100101000 29.25 00000000000000000000000000000000 innumerable 00000000000000000000000000000000 Andrea 00100000000000000000000000000000 61.875 00000000000000000000000000000000 tutorials 00000000000000000000000000000000 Salk 00100000000000000000000000000000 33.375 00000000000000000000000000000000 Maxxam 00100000000001111001010100101000 Tosco 00100000001101101111111100101000 quadrupeds 00000000000000000000000000000000 31.875 00000000000000000000000000000000 19.625 00000000000000000000000000000000 alligators 00000000000000000000000000000000 Deer 00100000000010010110011010101000 front-runner 00000000000000000000000000000000 sustaining 00000000000011000111111101000000 prairies 00000000000000000000000000000000 undercapitalized 00000000000000000000000000000000 redevelop 00000000000000000000000000000000 mild-mannered 00000000000000000000000000000000 Hunterdon 00100000000000000000000000000000 money-saving 00000000000000000000000000000000 marshes 00000000000000000000000000000000 double-coupon 00000000000000000000000000000000 shaves 00000000000000000000000000000000 artery-clogging 00000000000000000000000000000000 tasty 00000000000000000000000000000000 coverts 00000000000000000000000000000000 image-building 00000000000000000000000000000000 molecularly 00000000000000000000000000000000 switchers 00000000000000000000000000000000 multibillion-yen 00000000000000000000000000000000 Huff 00101111111110011011001000001000 alluvial 00000000000000000000000000000000 Slims 00100000000000000000000000000000 goose 00000000000000000000000000000000 conveys 00000000000000000000000000000000 whooper 00000000000000000000000000000000 Uninhibited 00100000000001011011000110010000 Loyalty 00100000000101101111110100100111 utilitarian 00000000000000000000000000000000 trash-bag 00000000000000000000000000000000 Underwear 00100000010101101011111010110000 gunner 00000000000000000000000000000000 double-breasted 00000000000000000000000000000000 Minato-Mirai 01000000000000000000000000000000 conveniently 00000000000000000000000000000000 Higher-income 00100000000000000000000000000000 capriciously 00000000000000000000000000000000 Ragu 00100000000000000000000000000000 Aransas 00100000000000000000000000000000 Prego 00100000000000000000000000000000 absorbent 00000000000000000000000000000000 Pampers 00100000000000000000000000000000 Huggies 00100000000000000000000000000000 landowner 00000000000000000000000000000000 soups 00000000000000000000000000000000 'All 01000000000000000000000000000000 disloyalty 00000000000000000000000000000000 instill 00000000000000000000000000000000 fervent 00000000000000000000000000000000 direct-marketing 00000000000000000000000000000000 Clayt 00100000000000000000000000000000 Wilhite 00100000000000000000000000000000 Peeking 00100000000000000000000000000000 non-user 00000000000000000000000000000000 attachment 00000000000000000000000000000000 Blackjack 00100000000000000000000000000000 Reider 00100000000000000000000000000000 makeshift 00000000000000000000000000000000 claims-processing 00000000000000000000000000000000 personal-property 00000000000000000000000000000000 homeowner 00000000000111100100111000100001 Franciso 00100000000000000000000000000000 property-claim 00000000000000000000000000000000 Roads 00100000000111111110111001100011 Highways 00100000000110111110111001100011 Jutting 00100000000000000000000000000000 Earthquake-related 00100000000000000000000000000000 Yankus 00100000000000000000000000000000 59.50 00000000000000000000000000000000 atolls 00000000000000000000000000000000 75.875 00000000000000000000000000000000 damned 00000000000011011011011010010000 ramshackle 00000000000000000000000000000000 Picoult 00100000000000000000000000000000 Orin 00101111111000001101110110011000 seacoast 00000000000000000000000000000000 domes 00000000000000000000000000000000 Motorfair 00100000000000000000000000000000 wayside 00000000000000000000000000000000 fetches 00000000000000000000000000000000 39,400 00000000000000000000000000000000 highest-priced 00000000000000000000000000000000 Jaguars 00100000000000000000000000000000 hand-crafted 00000000000000000000000000000000 armory 00000000000111011001001010000001 Mossoviet 00100000000000000000000000000000 paging 00000000000000011010100001100001 2.78 00000000000000000000000000000000 necktie 00000000000000000000000000000000 Clendenin 00100000000000000000000000000000 481 00000000000000000000000000000000 402,000 00000000000000000000000000000000 62.3 00000000000000000000000000000000 Shima 00100000000000000000000000000000 a-reflects 00000000000000000000000000000000 b-reflects 00000000000000000000000000000000 c-reflects 00000000000000000000000000000000 castigated 00000011011101000101010000110010 stoking 00000000000000000000000000000000 pardon 00000000000110100101111010110111 rose-gold 00000000000000000000000000000000 FREDERICK'S 01000000000000000000000000000000 HOLLYWOOD 01000000000000100111110001101000 boutique-store 00000000000000000000000000000000 defaulters 00000000000000000000000000000000 48.6 00000000000000000000000000000000 199.7 00000000000000000000000000000000 Greenwood 00101111111011000101001000001000 Arteries 00100000000110101101110010100111 Boettcher 00101111111000011111111010101000 stabilizes 00000000000000000000000000000000 coddling 00000000000000000000000000000000 hard-earned 00000000000000000000000000000000 Lawless 00100000000000000000000000000000 bull-market 00000000000000000000000000000000 cash-equivalent 00000000000000000000000000000000 coax 00000000000000000000000000000000 stippled 00000000000000000000000000000000 shriveled 00000000000000000000000000000000 retail-volume 00000000000000000000000000000000 buy-backs 00000000000000000000000000000000 inadvertently 00000000110001000001001001110010 250.2 00000000000000000000000000000000 shimmering 00000000000000000000000000000000 zig-zag 00000000000000000000000000000000 Elrick 00100000000000000000000000000000 Lavidge 00100000000000000000000000000000 shatters 00000000000000000000000000000000 skimmers 00000000000000000000000000000000 1989-83 00000000000000000000000000000000 1989-84 00000000000000000000000000000000 Societa 00100000000000000000000000000000 Azioni 00100000000000000000000000000000 Manaifatturiera 00100000000000000000000000000000 101.60 00000000000000000000000000000000 9.07 00000000000000000000000000000000 8.74 00000000000000000000000000000000 0.36 00000000000000000000000000000000 undated 00000000000000000000000000000000 Merill 00100000000000000000000000000000 35.5 00000000000000000000000000000000 Keihin 00100000000000000000000000000000 Seiren 00100000000000000000000000000000 Leu 00100000000011000001111101010101 3.865 00000000000000000000000000000000 3.846 00000000000000000000000000000000 Aegon 00100000000000000000000000000000 7.86 00000000000000000000000000000000 AMRO 01000000000000000000000000000000 98.481 00000000000000000000000000000000 87.026 00000000000000000000000000000000 85.60 00000000000000000000000000000000 FAMILY 01000000000111100011111100000001 85.339 00000000000000000000000000000000 investment-newsletter 00000000000000000000000000000000 stock-registration 00000000000000000000000000000000 anti-fraud 00000000000000000000000000000000 nothin 00000000000000000000000000000000 Kimberly 00101111111000101010111000011000 chuckling 00000000000000000000000000000000 face-amount 00000000000000000000000000000000 consenting 00000000000000000000000000000000 injunctions 00000000000100010011101000100011 10-to-1 00000000000000000000000000000000 second-deadliest 00000000000000000000000000000000 Pickin 00100000000000000000000000000000 once-fashionable 00000000000000000000000000000000 dissipated 00000000000000000000000000000000 cornices 00000000000000000000000000000000 trout 00000000000010000100000000001000 thump-thump 00000000000000000000000000000000 junction 00000000000001111110100010100101 PETS 01000000000110011011110000110011 125-billion-a-year 00000000000000000000000000000000 Sweezey 00100000000000000000000000000000 hardship 00000000000111100010101101100111 impassible 00000000000000000000000000000000 remedied 00000000000000000000000000000000 Corp.-Toyota 01000000000000000000000000000000 Corollas 00100000000000000000000000000000 Prizms 00100000000000000000000000000000 tap-tap 00000000000000000000000000000000 Fienberg 00100000000000000000000000000000 steaming 00000000000000000000000000000000 generator 00000000000000010110111000000001 wiggling 00000000000000000000000000000000 sunken 00000000000000000000000000000000 dial-tone 00000000000000000000000000000000 on-ramps 00000000000000000000000000000000 57.4 00000000000000000000000000000000 VISUALIZING 01000000000000000000000000000000 DRI 01000000000000000000000000000000 Stacy 00100000000000000000000000000000 Kotman 00100000000000000000000000000000 constructon 00000000000000000000000000000000 negligibly 00000000000000000000000000000000 public-policy 00000000000000000000000000000000 connotation 00000000000000000000000000000000 crackle 00000000000000000000000000000000 37,300 00000000000000000000000000000000 worker-compensation 00000000000000000000000000000000 Gargantuan 00100000000000000000000000000000 Atop 00100000000000111101000000001010 pejorative 00000000000000000000000000000000 foot-thick 00000000000000000000000000000000 peck 00001111111100011010111000001000 government-business 00000000000000000000000000000000 four-square-block 00000000000000000000000000000000 seawater 00000000000000000000000000000000 fizzes 00000000000000000000000000000000 rupturing 00000000000000000000000000000000 Onlookers 00100000000000000000000000000000 hereabouts 00000000000000000000000000000000 nozzles 00000000000000000000000000000000 onlookers 00000000000000000000000000000000 barricades 00000000011101100111110101100011 helmeted 00000000000000000000000000000000 firemen 00000000000000000000000000000000 Evelyn 00101111111011011000001000011000 Boccone 00100000000000000000000000000000 PRINCE 01000000000111111011111100001000 HENRI 01000000000111101110001000011000 seisho 00000000000000000000000000000000 hereditary 00000000000000000000000000000000 thrift-overhaul 00000000000000000000000000000000 surtaxes 00000000000000000000000000000000 pharmacists 00000000000010000000111000110011 redfish 00000000000000000000000000000000 Gilgore 00100000000000000000000000000000 rambled 00000000000000000000000000000000 seatrout 00000000000000000000000000000000 Fabbri 00100000000000000000000000000000 recuperation 00000000000000000000000000000000 multipart 00000000000000000000000000000000 do-or-die 00000000000000000000000000000000 speckled 00000000000000000000000000000000 wind-swept 00000000000000000000000000000000 wide-scale 00000000000000000000000000000000 12-county 00000000000000000000000000000000 655 00000000000000000000000000000000 scrub 00000000000000000000000000000000 mortgagebacked 00000000000000000000000000000000 10.08 00000000000000000000000000000000 95.75 00000000000000000000000000000000 5.315 00000000000000000000000000000000 grassy 00000000000000000000000000000000 ridges 00000000000000000000000000000000 lagoons 00000000000000000000000000000000 milky 00000000000001100111010011010000 enclosing 00000000000000000000000000000000 canine 00000000000000000000000000000000 26-man 00000000000000000000000000000000 321-99 00000000000000000000000000000000 ignoble 00000000000000000000000000000000 culminates 00000000000000000000000000000000 iron-handed 00000000000000000000000000000000 harshness 00000000000100100111011000001111 characteristically 00000000000000000000000000000000 warmer 00000000000000011001001111000000 bays 00001111111001000100001000001000 BLOOD 01000000000000000000010000100001 Mittag 00100000000000000000000000000000 Aggie 00100000000000000000000000000000 Hermann 00101111111011101000000100001000 1937 00000000000000000000000000000000 hand-picked 00000000000000000000000000000000 strikingly 00000000000000000000000000000000 hewn 00000000000000000000000000000000 husky 00000000000111110000011000101000 Protestantism 00100000000000000000000000000000 feline 00000000000000000000000000000000 11.01 00000000000000000000000000000000 Bonn-sponsored 00100000000000000000000000000000 Cologne 00100000000000000000000000000000 allied 00000000000001001110000100101000 signify 00000000000000000000000000000000 10.11 00000000000000000000000000000000 reform-minded 00000000000000000000000000000000 Modrow 00100000000000000000000000000000 Schabowski 00100000000000000000000000000000 congratulatory 00000000000000000000000000000000 telegram 00000000000111000010001011100111 Unity 00100000000111110001110010100111 hodgepodge 00000000000000000000000000000000 pro-Gorbachev 01000000000000000000000000000000 tampering 00000000000101110110110000100111 O'Loughlin 01000000000000000000000000000000 Erasing 00100000000000000000000000000000 reordering 00000000000000000000000000000000 statehood 00000000000000000000000000000000 7.34 00000000000000000000000000000000 Unloved 00100000000000000000000000000000 Ulbricht 00100000000000000000000000000000 99.80 00000000000000000000000000000000 compliments 00000000000000000000000000000000 Romania 00100000000111110100111101101000 less-self-confident 00000000000000000000000000000000 Czechoslovaks 00100000000000000000000000000000 Bulgarians 00100000000000000000000000000000 summaries 00000000000000000000000000000000 aimless 00000000000000000000000000000000 Herrman 00100000000000000000000000000000 Gingerly 00100000000000000000000000000000 whispered 00000000000000000000000000000000 socialists 00000000000111111100011110110011 cleanse 00000000000000000000000000000000 pastors 00000000000011000000111000110011 utopia 00000000000000000000000000000000 5.38 00000000000000000000000000000000 Imprisoned 00100001010101110100010000110010 typified 00000000000000000000000000000000 warrior 00000000000001001000110000000001 rankled 00000000000000000000000000000000 steadfast 00000000000000000000000000000000 95.39 00000000000000000000000000000000 comrade 00000000000000000000000000000000 segmented 00000000000000000000000000000000 Slower 00100000000000101000001111000000 non-dairy-creamer 00000000000000000000000000000000 Chongju 00100000000000000000000000000000 Doosan 00100000000000000000000000000000 roasted 00000000000000000000000000000000 nondairy 00000000000000000000000000000000 creamer 00000000000000000000000000000000 150.7 00000000000000000000000000000000 Taster 00100000000000000000000000000000 willingess 00000000000000000000000000000000 Ke 00100000000000000000000000000000 Zaishuo 00100000000000000000000000000000 Chinese-British 01000000000000000000000000000000 Liaison 00100000000110010110110000100111 fait 00000000000000000000000000000000 accompli 00000000000000000000000000000000 Rafi 00100000000000000000000000000000 Har-Lev 01000000000000000000000000000000 Sheraton-Pan 01000000000000000000000000000000 409,000 00000000000000000000000000000000 Karches 00100000000000000000000000000000 401-18 00000000000000000000000000000000 moat 00000000000000000000000000000000 Leng 00100000000000000000000000000000 Chye 00100000000000000000000000000000 dishonestly 00000000000000000000000000000000 Heatherington 00100000000000000000000000000000 Queks 00100000000000000000000000000000 Leong 00100000000000000000000000000000 Tissues 00100000000111100111001010100011 Mongolia 00100000000000000000000000000000 20-mile 00000000000000000000000000000000 catheters 00000000000000000000000000000000 co-developers 00000000000000000000000000000000 jokingly 00000000000000000000000000000000 advanced-ceramics 00000000000000000000000000000000 Chien-Min 01000000000000000000000000000000 sandpaper 00000000000000000000000000000000 190,000 00000000000000000000000000000000 Hempel 00100000000000000000000000000000 WAVE 01000000000111110111101000111111 Browne 00101111111000011101001000001000 Brachfeld 00100000000000000000000000000000 Tirello 00100000000000000000000000000000 presages 00000000000000000000000000000000 Marver 00100000000000000000000000000000 Verde 00100000000000000000000000000000 thrives 00000000000000000000000000000000 SunCor 01000000000100101001111000101000 Malapai 00100000000000000000000000000000 Dorado 00100000000000000000000000000000 inking 00000000000000000000000000000000 Saalfeld 00100000000000000000000000000000 rollup 00000000000000000000000000000000 ensnarled 00000000000000000000000000000000 parachuting 00000000000000000000000000000000 commends 00000000000000000000000000000000 gunslinging 00000000000000000000000000000000 Graphic 00100000000000110010101010110000 Takagi 00100000000000000000000000000000 Jotaro 00100000000000000000000000000000 alumnus 00000000000000000000000000000000 stonewalled 00000000000000000000000000000000 cratering 00000000000000000000000000000000 takeover-proof 00000000000000000000000000000000 13D 01000000000000000000000000000000 Helane 00100000000000000000000000000000 Becker 00101111111100001100001000001000 airfare 00000000000000000000000000000000 pummel 00000000000000000000000000000000 Kaul 00101111110010111100000010001000 takeover-threat 00000000000000000000000000000000 industrial-production 00000000000000000000000000000000 19.60 00000000000000000000000000000000 1,103.11 00000000000000000000000000000000 200.2 00000000000000000000000000000000 Amiga 00100000000000000000000000000000 341.76 00000000000000000000000000000000 320.54 00000000000000000000000000000000 189.32 00000000000000000000000000000000 314,000 00000000000000000000000000000000 231,000 00000000000000000000000000000000 CNA 01000000000000000000000000000000 heavy-construction 00000000000000000000000000000000 Ameron 00100000000000000000000000000000 CRS 01000000000000000000000000000000 Sirrine 00100000000000000000000000000000 Greiner 00100000000000000000000000000000 Lafarge 00100000001100101010111100101000 Southdown 00100000000111001101111100101000 Eljer 00100000000000000000000000000000 14-point 00000000000000000000000000000000 191 00000000000000000000000000000000 5.10 00000000000000000000000000000000 five-session 00000000000000000000000000000000 2.91 00000000000000000000000000000000 378.07 00000000000000000000000000000000 12,500,000 00000000000000000000000000000000 748 00000000000000000000000000000000 621 00000000000000000000000000000000 cocoa-trading 00000000000000000000000000000000 Simple 00100000000000001010011010010000 indefinite 00000000000000101010010100010000 TIRED 01000000001111101011110000110010 10-week 00000000000000000000000000000000 Windflower 00100000000000000000000000000000 Vax 00100000000010011000010000110000 system-management 00000000000000000000000000000000 38-cents-a-share 00000000000000000000000000000000 596.8 00000000000000000000000000000000 self-tender 00000000000000000000000000000000 odd-lot 00000000000000000000000000000000 Tendered 00100000100111110100010000110010 61.125 00000000000000000000000000000000 73.6 00000000000000000000000000000000 Duffus 00100000000000000000000000000000 megawatt 00000000000000000000000000000000 Surplus 00100000000110101101100000100111 Generating 00100000000000010011110001000000 75.3 00000000000000000000000000000000 345.5 00000000000000000000000000000000 311.6 00000000000000000000000000000000 1,027 00000000000000000000000000000000 Dunlaevy 00100000000000000000000000000000 Maumee 00100000000000000000000000000000 22,300 00000000000000000000000000000000 0.37 00000000000000000000000000000000 Hoses 00100000000000000000000000000000 spring-brake 00000000000000000000000000000000 piston-brake 00000000000000000000000000000000 456.2 00000000000000000000000000000000 422 00000000000000000000000000000000 Giancarlo 00100000000000000000000000000000 Parretti 00100000000000000000000000000000 13.79 00000000000000000000000000000000 TRIMMING 01000000000111001101011101000000 76.66 00000000000000000000000000000000 Hammacher 00100000000000000000000000000000 Geneva-based 00100000000000000000000000000000 lira 00000000000111001000011000010111 Milan-based 00100000000000000000000000000000 181.9 00000000000000000000000000000000 Lucisano 00100000000000000000000000000000 16.66 00000000000000000000000000000000 Calisto 00100000000000000000000000000000 Tanzi 00100000000000000000000000000000 23.34 00000000000000000000000000000000 smelled 00000000000000000000000000000000 1-800-453-9000 00000000000000000000000000000000 Moffett 00100000000000000000000000000000 watchword 00000000000000000000000000000000 835 00000000000000000000000000000000 876 00000000000000000000000000000000 3.34 00000000000000000000000000000000 4.0775 00000000000000000000000000000000 Kuse 00100000000000000000000000000000 thirst 00000000000000000000000000000000 temblor-prone 00000000000000000000000000000000 earthquake-trained 00000000000000000000000000000000 loss-recovery 00000000000000000000000000000000 sheriffs 00000000000000000000000000000000 2,480 00000000000000000000000000000000 cots 00000000000000000000000000000000 pints 00000000000000000000000000000000 Type-O 01000000000000000000000000000000 Huricane 00100000000000000000000000000000 Einar 00100000000000000000000000000000 Borrowers 00100000000111001111110000110011 Strokes 00100000000110010000010101100011 137.20 00000000000000000000000000000000 revalued 00000000000000000000000000000000 trauma 00000000000101001100110000000001 nontraditional 00000000000000000000000000000000 486.30 00000000000000000000000000000000 modems 00000000000000000000000000000000 bristled 00000000000000000000000000000000 Moral 00100000000111000000000000110000 bona 00000000000111111011001100010000 fide 00000000000000000110001100010000 humid 00000000000000000000000000000000 courageous 00000000000011100101000010010000 Japan-U.S 01000000000000000000000000000000 38.3 00000000000000000000000000000000 less-than-successful 00000000000000000000000000000000 Taber 00100000000000000000000000000000 salicylic 00000000000000000000000000000000 methyl 00000000000000000000000000000000 salicylate 00000000000000000000000000000000 aspirin 00000000000000001010010000100001 salicylates 00000000000000000000000000000000 51.2 00000000000000000000000000000000 515.1 00000000000000000000000000000000 MK-Ferguson 01000000000000000000000000000000 Idaho-based 00100000000000000000000000000000 97.8 00000000000000000000000000000000 8.96 00000000000000000000000000000000 nightclubs 00000000000000000000000000000000 harassing 00000000000000000000000000000000 Dorena 00100000000000000000000000000000 claudication 00000000000000000000000000000000 reproval 00000000000000000000000000000000 complainant 00000000000000000000000000000000 Dryden 00100000000000000000000000000000 begged 00000000000001101101010000110010 forgiveness 00000000000111101111111000111001 Schlemmer 00100000000000000000000000000000 1.23-a-pound 00000000000000000000000000000000 80.6 00000000000000000000000000000000 24.1 00000000000000000000000000000000 85.8 00000000000000000000000000000000 commercial-credit 00000000000000000000000000000000 mortgage-banking 00000000000000000000000000000000 279.0 00000000000000000000000000000000 248.2 00000000000000000000000000000000 Benj 00100000000000000000000000000000 84,500 00000000000000000000000000000000 coincides 00000000000000000000000000000000 4,800 00000000000000000000000000000000 Shuwa 00100000000101001100111100101000 repayable 00000000000000000000000000000000 1.1960 00000000000000000000000000000000 210.8 00000000000000000000000000000000 Exclusive 00100000000000010101010100010000 415.3 00000000000000000000000000000000 390.5 00000000000000000000000000000000 Larkin 00100000000000000000000000000000 redoubt 00000000000000000000000000000000 13-nation 00000000000000000000000000000000 Fudosan 00100000000000000000000000000000 ADIA 01000000000000000000000000000000 ADVANCED 01000000000000000011101010110000 MICRO 01000000000000010010011010110000 DEVICES 01000000000111101101011001001001 AMDAHL 01000000000111011011011100101000 BUILDING 01000000000111010010110001000000 MAINTENANCE 01000000000000000011000001100001 PRESIDENT 01001111110110110111111000001101 COS. 01000000000000000000000000000000 container-ship 00000000000000000000000000000000 Route 00100000000111001110011000000001 overpass 00000000000000000000000000000000 ANACOMP 01000000000000000000000000000000 Xidex 00100000000000000000000000000000 microfilm 00000000000000000000000000000000 637 00000000000000000000000000000000 ANTHEM 01000000000000000000000000000000 ELECTRONICS 01000000000000000111011010110000 blighted 00000000000000000000000000000000 APPLIED 01000000000111100000110000110010 MATERIALS 01000000000000000001000111001001 independent-minded 00000000000000000000000000000000 functional 00000000010000011010000000110000 ATARI 01000000000000100011111100101000 BANKAMERICA 01000000000111100011001100101000 BECHTEL 01000000000001010011010100101000 Backup 00100000000000000110100000100001 hand-carried 00000000000000000000000000000000 BIO-RAD 01000000000000000000000000000000 LABORATORIES 01000000000010000001001011101001 clinical-products 00000000000000000000000000000000 BORLAND 01000000000111001100111000101000 53rd 00000000000000000000000000000000 BUSINESSLAND 01000000000111010100111100101000 CARTER 01001111111000001100100000001000 HAWLEY 01001111111111000000010000101000 HALE 01001111111000111000111000001000 Seimei 00100000000000000000000000000000 CHEVRON 01000000000111110111011100101000 Ramone 00100000000000000000000000000000 CLOROX 01000000000011101100111100101000 Kingsford 00100000000000000000000000000000 Expects 00100000000111111100101000110010 COHERENT 01000000001111000001000000010000 159 00000000000000000000000000000000 CONSOLIDATED 01000000000000000000000100101000 FREIGHTWAYS 01000000000000000000000000000000 CF 01000000000000000000000000000000 COOPER 01001111111100101011110000001000 DAYTON 01001111111110101000101000101000 HUDSON 01001111111001010011010001001000 countertop 00000000000000000000000000000000 abashed 00000000000000000000000000000000 attuned 00000000000000000000000000000000 DIASONICS 01000000000000111111111100101000 Versicherung 00100000000000000000000000000000 stockroom 00000000000000000000000000000000 DIGITAL 01000000000010001010100100101000 EQUIPMENT 01000000000101100000001001001001 DREYER'S 01000000000000000000000000000000 GRAND 01000000000000000000010110110000 ICE 01000000000111111110001100100001 CREAM 01000000000000000001010100000001 Colonia 00100000000000000000000000000000 EVEREX 01000000000000000000000000000000 fiber-end 00000000000000000000000000000000 377 00000000000000000000000000000000 EXXON 01000000000111101100011100101000 FORD 01000000000111101101011000101000 MOTOR 01000000000000000010100001001000 92.4 00000000000000000000000000000000 satellite-assembly 00000000000000000000000000000000 GAP 01000000000110101001100000100111 GENENTECH 01000000000111011011001100101000 334.8 00000000000000000000000000000000 F.H. 01000000000000000000000000000000 Quatre 00100000000000000000000000000000 MOTORS 01000000000000011110010001001000 123.6 00000000000000000000000000000000 750-car-a-day 00000000000000000000000000000000 GOLDEN 01000000000101000010001000110000 WEST 01000000000111110000101110101000 HEWLETT-PACKARD 01000000000000000000000000000000 HEXCEL 01000000000000000000000000000000 bunches 00000000000000000000000000000000 HOMESTAKE 01000000000110100011000100101000 MINING 01000000000000000011011010110000 miner 00000000000100101110010010110101 432.6 00000000000000000000000000000000 HOMESTEAD 01000000000110110011100100100001 Millbrae 00100000000000000000000000000000 562 00000000000000000000000000000000 INMAC 01000000000000000000000000000000 power-surge 00000000000000000000000000000000 Braye 00100000000000000000000000000000 uninterruptable 00000000000000000000000000000000 INTEL 01000000000111100100011100101000 BUSINESS 01000000000100100000100010100001 MACHINES 01000000000011001111011010101001 Almaden 00100000000000000000000000000000 KAISER 01000000000110101010111000101000 ALUMINUM 01000000000000001100011010110000 28-story 00000000000000000000000000000000 LOCKHEED 01000000000110101111011100101000 cholesterol-rich 00000000000000000000000000000000 Missiles 00100000000111101110010110001001 submarine-based 00000000000000000000000000000000 LONGS 01000000000000000000000000000000 LOGIC 01000000000110110011101001100111 Via 00100000000000000110011010000010 MEASUREX 01000000000000000000000000000000 SEMICONDUCTOR 01000000000000000101011010110000 Piping 00100000000100110011111010110000 waste-treatment 00000000000000000000000000000000 NORDSTROM 01000000001111011010111100101000 59-store 00000000000000000000000000000000 ORACLE 01000000000110001100100100101000 584 00000000000000000000000000000000 GAS 01000000000001000010011010110000 substations 00000000000000000000000000000000 Landing 00100000000000000111100000100001 residences 00000000000110000111110001100011 69,000 00000000000000000000000000000000 reconnect 00000000000000000000000000000000 TELESIS 01000000000010000111110110101000 GROUP 01000000000110100100101101110101 PROCTER 01001111111111110111111010101000 GAMBLE 01001111111111111011110001001000 120.8 00000000000000000000000000000000 RAYCHEM 01000000011010101010111100101000 ROSS 01001111111000001010111000001000 SAFEWAY 01000000000000011101000100101000 CHARLES 01001111111000000001100110011000 SCHWAB 01001111111100111100110000001000 SEAGATE 01000000000110100000100100101000 TRANSPLANT 01000000000000000110101011100001 SOUTHERN 01000000000000000000110110101000 TRANSPORTATION 01000000000010001001110110110000 SUN 01000000000111101111011000101000 MICROSYSTEMS 01000000000000010000100001001000 TANDEM 01000000000000011100100100101000 TRANSAMERICA 01000000000111100010111100101000 pyramid-shaped 00000000000000000000000000000000 VARIAN 01000000000000000010110000001000 VLSI 01000000000000000000000000000000 171.9 00000000000000000000000000000000 WATKINS-JOHNSON 01000000000000000000000000000000 292 00000000000000000000000000000000 WELLS 01001111111010101100010000001000 FARGO 01001111111101010011111010101000 inoperable 00000000000000000000000000000000 WYSE 01000000000110101100100100101000 3COM 01000000000000000000000000000000 substandard 00000000000000000000000000000000 Vie 00100000000111111000000110110010 tragically 00000000000000000000000000000000 well-traveled 00000000000000000000000000000000 Wickliffe 00100000000000000000000000000000 affinities 00000000000000000000000000000000 Moselle 00100000000000000000000000000000 Supervisor 00100000000111100111011110110101 Rhin 00100000000000000000000000000000 calamitous 00000000000000000000000000000000 mid-1940s 00000000000000000000000000000000 horizontally 00000000000000000000000000000000 10.95 00000000000000000000000000000000 bumper-to-bumper 00000000000000000000000000000000 thespian 00000000000000000000000000000000 biophysicist 00000000000000000000000000000000 revolve 00000000000000000000000000000000 22.82 00000000000000000000000000000000 nervy 00000000000000000000000000000000 cash-or-shares 00000000000000000000000000000000 multi-column 00000000000000000000000000000000 bilingual 00000000000001001000000000110000 Funded 00100000010001000001110000110010 documentaries 00000000000000000000000000000000 pay-and-benefit 00000000000000000000000000000000 docudramas 00000000000000000000000000000000 Uzi 00100000000000000000000000000000 Preferred 00100000000000000010110101010000 Coupled 00100000000111111011100000110010 Jelinski 00100000000000000000000000000000 Heston 00100000000000000000000000000000 Charlton 00100000000000000000000000000000 MRI 01000000000000000000000000000000 carping 00000000000000000000000000000000 Beazer 00100000000100001011110000001000 Koppers 00100000000100100010101100101000 142.5 00000000000000000000000000000000 224.5 00000000000000000000000000000000 114.7 00000000000000000000000000000000 180.7 00000000000000000000000000000000 92.6 00000000000000000000000000000000 75.6 00000000000000000000000000000000 29.90 00000000000000000000000000000000 24.68 00000000000000000000000000000000 CalTech 01000000000000000000000000000000 Seismographic 00100000000000000000000000000000 20-to-30-mile 00000000000000000000000000000000 rupture 00000000000000000000000000000000 hopscotched 00000000000000000000000000000000 L'Heureux 01000000000000000000000000000000 Segar 00100000000000000000000000000000 geosciences 00000000000000000000000000000000 liquefies 00000000000000000000000000000000 quilt 00000000000000000000000000000000 seismographic 00000000000000000000000000000000 creditworthy 00000000000000000000000000000000 pre-1950s 00000000000000000000000000000000 unreinforced 00000000000000000000000000000000 Elton 00100000000000000000000000000000 sheared 00000000000000000000000000000000 Reinforcing 00100000000010110101011101000000 faultlines 00000000000000000000000000000000 Calaveras 00100000000000000000000000000000 proxies 00000000000101101100110100011001 merchandised 00000000000000000000000000000000 DIET 01000000000101101010010000000001 Indies 00100000000000000000000000000000 non-caffeine 00000000000000000000000000000000 STRUGGLED 01000000001010101011101000110010 glass-strewn 00000000000000000000000000000000 HONECKER 01001111111101011100110010001000 WAS 01000000000000000000100000010010 gall-bladder 00000000000000000000000000000000 hard-liner 00000000000000000000000000000000 HUNGARY 01000000000111110000111101101000 ADOPTED 01000000000110011001010000110010 21-member 00000000000000000000000000000000 Biederman 00100000000000000000000000000000 Fitzwilliam 00100000000111100000101001101000 377.60 00000000000000000000000000000000 unhelpful 00000000000000000000000000000000 Likud 00100000000010000010001110101000 Castro-led 00100000000000000000000000000000 colonies 00000000000000000000000000000000 embargoes 00000000000000000000000000000000 three-week-old 00000000000000000000000000000000 72-hour 00000000000000000000000000000000 Homart 00100000000000000000000000000000 disallowed 00000001010011010100010000110010 Kohut 00100000000000000000000000000000 Barkley 00100000000000000000000000000000 3.29 00000000000000000000000000000000 94.625 00000000000000000000000000000000 14.60 00000000000000000000000000000000 12.76 00000000000000000000000000000000 3.44 00000000000000000000000000000000 14.85 00000000000000000000000000000000 11.41 00000000000000000000000000000000 13.34 00000000000000000000000000000000 12.38 00000000000000000000000000000000 bad-law 00000000000000000000000000000000 11-member 00000000000000000000000000000000 Nomination 00100000000111111111000001100111 Shook 00100000001010001001001000110010 nastiest 00000000000000000000000000000000 verve 00000000000000000000000000000000 subtitle 00000000000000000000000000000000 demonized 00000000000000000000000000000000 piquant 00000000000000000000000000000000 hard-wire 00000000000000000000000000000000 devious 00000000000000000000000000000000 preventative 00000000000000000000000000000000 attackers 00000000000000000000000000000000 Neas 00100000000000000000000000000000 Norm 00100000000111100000110011100111 imaginary 00000000000000000000000000000000 horribles 00000000000000000000000000000000 emoted 00000000000000000000000000000000 Dworkin 00100000000000000000000000000000 DIAPER 01000000000000100101011010110000 Hurwitt 00100000000000000000000000000000 anti-Bork 01000000000000000000000000000000 successively 00000000001111001000010001110010 Demographics 00100000000110001011111101100011 converged 00000000000000000000000000000000 demonizing 00000000000000000000000000000000 Pozen 00100000000000000000000000000000 battlefield 00000000000111110011100000100001 percenter 00000000000000000000000000000000 reportorial 00000000000000000000000000000000 Bickel 00100000000000000000000000000000 majoritarian 00000000000000000000000000000000 transient 00000000000000000000000000000000 Wilcox 00101111111100111101110001001000 judicially 00000000000000000000000000000000 cohere 00000000000000000000000000000000 reflective 00000000000000000000000000000000 Griswold 00100000000000000000000000000000 degrading 00000000000000000000000000000000 fondness 00000000000000000000000000000000 flashier 00000000000011011000001000110000 Picassos 00100000000000000000000000000000 Impressionists 00100000000000000000000000000000 hardbound 00000000000000000000000000000000 Labs 00100000000110100100110001100011 Mirabello 00100000000000000000000000000000 Bockius 00100000000000000000000000000000 Oman 00100000000111111001011101101000 receptivity 00000000000000000000000000000000 art-acquisition 00000000000000000000000000000000 arrow 00000000000111111001110100100001 cash-up-front 00000000000000000000000000000000 super-absorbent 00000000000000000000000000000000 Coe 00100000000000000000000000000000 squeaky-clean 00000000000000000000000000000000 MRI-type 01000000000000000000000000000000 Askin 00100000000000000000000000000000 auction-house 00000000000000000000000000000000 waives 00000000000000000000000000000000 old-guard 00000000000000000000000000000000 ironfist 00000000000000000000000000000000 Freie 00100000000000000000000000000000 Jugend 00100000000000000000000000000000 despairing 00000000000000000000000000000000 arthritic 00000000000000000000000000000000 Abandoning 00100000000111100001011101000000 custom-made 00000000000000000000000000000000 Cartoonists 00100000000000000000000000000000 mocked 00000000000000000000000000000000 embassies 00000000000111000101110001100011 halogen 00000000000000000000000000000000 5.2180 00000000000000000000000000000000 celebrations 00000000001000110111110101100011 Hyde-to-Jekyll 01000000000000000000000000000000 half-states 00000000000000000000000000000000 Pilsudski 00100000000000000000000000000000 interwar 00000000000000000000000000000000 nonsocialist 00000000000000000000000000000000 Wilsonian 00100000000000000000000000000000 rediscover 00000000000000000000000000000000 willy-nilly 00000000000000000000000000000000 succumbing 00000000000000000000000000000000 apologized 00000000000111100011101000110010 chanting 00000000000000000000000000000000 Gorby 00100000000000000000000000000000 admirably 00000100110000000000010001110010 Politically 00100000000100000000000001110010 kindness 00000000000000000000000000000000 Shlaes 00100000000000000000000000000000 INSURERS 01000000000000000010100001110011 FACING 01000000000000000100010101000000 anti-inflation 00000000000000000000000000000000 213.97 00000000000000000000000000000000 0.57 00000000000000000000000000000000 3371.36 00000000000000000000000000000000 129.90 00000000000000000000000000000000 0.18 00000000000000000000000000000000 130.36 00000000000000000000000000000000 0.39 00000000000000000000000000000000 0.0182 00000000000000000000000000000000 Trevor 00100000000000000000000000000000 impressively 00000000000000000000000000000000 then-current 00000000000000000000000000000000 140.97 00000000000000000000000000000000 liquidity-enhancing 00000000000000000000000000000000 Pincus 00100000000111111010001001001000 militate 00000000000010001001010110110010 368.70 00000000000000000000000000000000 368.15 00000000000000000000000000000000 20.85 00000000000000000000000000000000 unhurt 00000000000000000000000000000000 20.56 00000000000000000000000000000000 54.58 00000000000000000000000000000000 60.6 00000000000000000000000000000000 composition 00000000000111110011111000001111 near-market 00000000000000000000000000000000 1.2645 00000000000000000000000000000000 14.27 00000000000000000000000000000000 Terminator 00100000000000000000000000000000 subsumed 00000000000000000000000000000000 neophyte 00000000000000000000000000000000 unsubordinated 00000000000000000000000000000000 Admistration 00100000000000000000000000000000 teens 00000000000110000011110000110011 judicious 00000000000000000000000000000000 Rejection 00100000000111110111111101001111 heartbeat 00000000000111010101110010100111 pancreas 00000000000000000000000000000000 metabolized 00000000000000000000000000000000 fungus 00000000000000000000000000000000 no-more-nonsense 00000000000000000000000000000000 Transplantation 00100000000000000000000000000000 life-saving 00000000000000000000000000000000 reshuffled 00000000000000000000000000000000 immunologist 00000000000000000000000000000000 anti-rejection 00000000000000000000000000000000 capital-market 00000000000000000000000000000000 nausea 00000000000010010111110010100111 dosage 00000000000000000111100011100001 Babcock 00101111111100011111111010101000 Man-Made 01000000000000000000000000000000 electrocardiogram 00000000000000000000000000000000 rehash 00000000000000000000000000000000 Mogavero 00100000000000000000000000000000 inhumane 00000000000000000000000000000000 spillover 00000000000000000000000000000000 altruism 00000000000000000000000000000000 co-exist 00000000000000000000000000000000 latter-day 00000000000000000000000000000000 scalawags 00000000000000000000000000000000 ice-baggers 00000000000000000000000000000000 toss 00000000001100101110101110110010 rote 00000000000000000000000000000000 economic-efficiency 00000000000000000000000000000000 Signed 00100000000111101001010000110010 Honors 00100001100010001111000000010010 detached 00000000000110101101101001000000 fervently 00000000000000000000000000000000 Galax 00100000000000000000000000000000 anti-profiteering 00000000000000000000000000000000 Piscataway 00100000000000000000000000000000 thrashed 00000000000000000000000000000000 DyDee 01000000000000000000000000000000 Potts 00100000000000000000000000000000 Karim 00100000000000000000000000000000 beware 00000000000111101111001000101111 Scambio 00100000000000000000000000000000 tornadoes 00000000000000000000000000000000 Alicia 00100000000000000000000000000000 Mongan 00100000000000000000000000000000 dazzled 00000000000000000000000000000000 noteworthy 00000000000001010101110110010000 subscribing 00000000000000000000000000000000 patronize 00000000000000000000000000000000 post-Hugo 01000000000000000000000000000000 revivals 00000000000000000000000000000000 Bleacher 00100000000000000000000000000000 Bums 00100000000000000000000000000000 Wrigley 00100000000000000000000000000000 bleachers 00000000000000000000000000000000 spitting 00000000010111010110100001000000 Revivals 00100000000000000000000000000000 troupes 00000000000000000000000000000000 non-family 00000000000000000000000000000000 Families 00100000000111101111111100110011 Elena 00100000000000000000000000000000 falseness 00000000000000000000000000000000 vanity 00000000000111101000010000001000 gravel-chewing 00000000000000000000000000000000 Pate 00100000001101110100000000001000 lendable 00000000000000000000000000000000 zounds 00000000000000000000000000000000 1666 00000000000000000000000000000000 bullhorn 00000000000000000000000000000000 no-nonsense 00000000000000000000000000000000 16-inch 00000000000000000000000000000000 iambic 00000000000000000000000000000000 pentameter 00000000000000000000000000000000 pettiness 00000000000000000000000000000000 slimmed 00000000100100101001001000110010 Thatcherite 00100000000000000000000000000000 aristocracy 00000000000000000000000000000000 sycophants 00000000000000000000000000000000 syllable 00000000000000000000000000000000 rhyming 00000000000000000000000000000000 couplets 00000000000000000000000000000000 Americanized 00100000000000000000000000000000 Darlow 00100000000000000000000000000000 berated 00000000000000000000000000000000 all-night 00000000000000000000000000000000 Compton 00100000000100110000010000001000 Spago 00100000000000000000000000000000 300-year-old 00000000000000000000000000000000 Steinbeck 00100000000000000000000000000000 Closer 00100000000000100000111000110010 hard-nosed 00000000000000000000000000000000 boardrooms 00000000000000000000000000000000 blood-filled 00000000000000000000000000000000 silences 00000000000000000000000000000000 menacing 00000000000000000000000000000000 stares 00000000001000101000001000110010 reverential 00000000000000000000000000000000 Silences 00100000000000000000000000000000 gestured 00000000000000000000000000000000 onstage 00000000000000000000000000000000 Conduits 00100000000000000000000000000000 dissection 00000000000000000000000000000000 sly 00000000000010011100011010010000 grins 00000000111111001111000000010010 grimaces 00000000000000000000000000000000 sputtering 00000000000000000000000000000000 linebackers 00000000000000000000000000000000 disco 00000000000000000000000000000000 Hollis 00101111111110111100001000001000 boxer 00000000000111111000000000001000 liveried 00000000000000000000000000000000 eldest 00000000000000000000000000000000 misbegotten 00000000000000000000000000000000 homecoming 00000000000000000000000000000000 Arney 00100000000000000000000000000000 Moira 00100000000000000000000000000000 Colleen 00100000000000000000000000000000 Dewhurst 00100000000000000000000000000000 overpower 00000000000000000000000000000000 in-law 00000000000000000000000000000000 ancestry 00000000000000000000000000000000 Halsted 00100000000000000000000000000000 troupe 00000000000100111100110100000001 211 00000000000000000000000000000000 one-set 00000000000000000000000000000000 Salesman 00100000000111110111101110110101 Loman 00100000000000000000000000000000 inhibited 00000000000000000000000000000000 Bonecrusher 00100000000111111011000110010000 Hacksaw 00100000000000000000000000000000 mercurial 00000000000000000000000000000000 Malkovich 00100000000000000000000000000000 Chronicles 00100000000000000000000000000000 Glenne 00100000000000000000000000000000 Headly 00100000000000000000000000000000 crumbles 00000000000000000000000000000000 10,450,000 00000000000000000000000000000000 463.28 00000000000000000000000000000000 453.05 00000000000000000000000000000000 4,343 00000000000000000000000000000000 147.6 00000000000000000000000000000000 1,271 00000000000000000000000000000000 811 00000000000000000000000000000000 jockeying 00000000000000000000000000000000 379.46 00000000000000000000000000000000 Insurance-related 00100000000000000000000000000000 3.11 00000000000000000000000000000000 Fox-Pitt 01000000000000000000000000000000 Kelton 00100000000000000000000000000000 462,900 00000000000000000000000000000000 137,200 00000000000000000000000000000000 517,500 00000000000000000000000000000000 455.29 00000000000000000000000000000000 Rales 00101111111011001000000000001000 computer-dependent 00000000000000000000000000000000 Stork 00100000000000000000000000000000 335,700 00000000000000000000000000000000 excused 00000000000000000000000000000000 Killion 00100000000000000000000000000000 Containment 00100000000000000000011111111001 Compounding 00100000000111101110100000001010 Finanziario 00100000000000000000000000000000 smidgins 00000000000000000000000000000000 Velcro 00100000000000000000000000000000 PIR 01000000000000000000000000000000 736 00000000000000000000000000000000 51%-held 00000000000000000000000000000000 append 00000000000000000000000000000000 Denied 00100000000011010001110111000010 surest 00000000000000000000000000000000 jogger 00000000000000000000000000000000 telephoning 00000000000000000000000000000000 ridiculed 00000000000000000000000000000000 fastened 00000000000000000000000000000000 counter-argument 00000000000000000000000000000000 59-dealer 00000000000000000000000000000000 Feess 00100000000000000000000000000000 Payola 00100000000000000000000000000000 44-year-old 00000000000000000000000000000000 E-2C 01000000000000000000000000000000 Sorenson 00100000000000000000000000000000 Plane 00100000000111101111001001000101 Malec 00100000000000000000000000000000 strobe 00000000000000000000000000000000 co-managed 00000000000000000000000000000000 Mutual-fund 00100000000000000000000000000000 38.9 00000000000000000000000000000000 147,300-share 00000000000000000000000000000000 Tea 00100000000011010101101100100001 RIVER 01000000000000000000100010100101 RUN 01000000000111101110010110110010 30.88 00000000000000000000000000000000 28.375 00000000000000000000000000000000 1,062 00000000000000000000000000000000 Kinji 00100000000000000000000000000000 1,143 00000000000000000000000000000000 INTEREST-RATE 01000000000000000000000000000000 PLAYER 01000000000111101111111010110101 peacemaker 00000000000000000000000000000000 125,075 00000000000000000000000000000000 28.43 00000000000000000000000000000000 28.15 00000000000000000000000000000000 bullishness 00000000000000000000000000000000 Stoecklin 00100000000000000000000000000000 Pae 00100000000000000000000000000000 over-leveraged 00000000000000000000000000000000 state-court 00000000000000000000000000000000 W.G. 01000000000000000000000000000000 Beebe 00100000000000000000000000000000 mortgage-securities 00000000000000000000000000000000 abounds 00000000000000000000000000000000 Iaciofano 00100000000000000000000000000000 elapsed 00000000000000000000000000000000 TIMES 01000000000000000000000010011011 SQUARE 01000000000000010010010101010000 co-sponsoring 00000000000000000000000000000000 adhere 00000000000110010111010110110010 Tese 00100000000000000000000000000000 business-related 00000000000000000000000000000000 VA-backed 01000000000000000000000000000000 EXPANDS 01000000001110000011000000010010 tsunami 00000000000000000000000000000000 El-Abed 01000000000000000000000000000000 Semmelman 00100000000000000000000000000000 CANADIAN 01000000000000000000000100110000 AMBASSADOR 01000000000111111000001100100111 57.6 00000000000000000000000000000000 Scheetz 00100000000000000000000000000000 Stikeman 00100000000000000000000000000000 Canadian-U.S. 01000000000000000000000000000000 QUOTABLE 01000000000000000000000000000000 syndciated 00000000000000000000000000000000 pronouncements 00000000000111111001101000100011 YOM 01000000000000000000000000000000 KIPPUR 01000000000000000000000000000000 EGYPT 01000000000111111011111101101000 CRASHED 01000000000110100110001000110010 holiest 00000000000000000000000000000000 far-afield 00000000000000000000000000000000 sedate 00000000000000000000000000000000 irresistable 00000000000000000000000000000000 unorthodox 00000000000000010100110100010000 embargos 00000000000000000000000000000000 Secondary 00100000000111111010111110110000 relabeling 00000000000000000000000000000000 car-happy 00000000000000000000000000000000 oil-consuming 00000000000000000000000000000000 Shortage 00100000000110110111101010100111 mile-long 00000000000000000000000000000000 Makwah 00100000000000000000000000000000 5-a-barrel 00000000000000000000000000000000 35-cents-a-gallon 00000000000000000000000000000000 Ace 00100000000110100011011100100001 35.9 00000000000000000000000000000000 14-month 00000000000000000000000000000000 Tarnopol 00100000000000000000000000000000 Mattone 00100000000000000000000000000000 Michaelcheck 00100000000000000000000000000000 stockbrokerage 00000000000000100100000010110000 Jersey-based 00100000000000000000000000000000 Reeves 00101111111001111100001000001000 Distiller 00100000000111100101100001110101 McCartin 01000000000000000000000000000000 Showdown 00100000000011101110110000100111 diseased 00000000000000000000000000000000 137.5 00000000000000000000000000000000 144.35 00000000000000000000000000000000 Industriale 00100000000000000000000000000000 19931999 00000000000000000000000000000000 TESTS 01000000000101101010001000100011 7.081 00000000000000000000000000000000 7.145 00000000000000000000000000000000 88.35 00000000000000000000000000000000 co-host 00000000000000000000000000000000 verbally 00000000000000000000000000000000 self-destructed 00000000000000000000000000000000 2,800-year-old 00000000000000000000000000000000 double-A-1 01000000000000000000000000000000 SP1-plus 01000000000000000000000000000000 Purepac 00100000000000000000000000000000 55.8 00000000000000000000000000000000 7.26 00000000000000000000000000000000 1989-82 00000000000000000000000000000000 42.3 00000000000000000000000000000000 Hanshin 00100000000000000000000000000000 Toyobo 00100000000000000000000000000000 5000 00000000000000000000000000000000 Sammi 00100000000000000000000000000000 Suh 00100000000000000000000000000000 Mouth 00100000000111101101011110000001 15.44 00000000000000000000000000000000 non-call 00000000000000000000000000000000 96.808 00000000000000000000000000000000 99.691 00000000000000000000000000000000 99.672 00000000000000000000000000000000 doubleA-2 01000000000000000000000000000000 Cosmetic 00100000000001111010000000110000 drug-approval 00000000000000000000000000000000 off-the-record 00000000000000000000000000000000 Ashok 00100000000000000000000000000000 gratuity 00000000000000000000000000000000 60%-owned 00000000000000000000000000000000 8.903 00000000000000000000000000000000 manipulating 00000000000111010111011101000000 manipulations 00000000000000000000000000000000 finagling 00000000000111111011101011100011 traduced 00000000000000000000000000000000 across-the-board-cuts 00000000000000000000000000000000 sophisticates 00000000000000000000000000000000 unserious 00000000000000000000000000000000 FreudToy 01000000000000000000000000000000 Ask 00100000000111011010100110110010 Lasorda 00100000000000000000000000000000 PAC 01000000000000010001111110110000 bursting 00000000000000000000000000000000 17.20 00000000000000000000000000000000 pillow 00000000000000000000000000000000 leafy 00000000000000000000000000000000 honorable 00000000001001011000110100010000 dickered 00000000000000000000000000000000 log-rolled 00000000000000000000000000000000 colossus 00000000000000000000000000000000 637.5 00000000000000000000000000000000 9.617 00000000000000000000000000000000 98.523 00000000000000000000000000000000 675 00000000000000000000000000000000 81%-controlled 00000000000000000000000000000000 mummies 00000000000000000000000000000000 genital 00000000000000000000000000000000 warts 00000000000000000000000000000000 obliterated 00000000000000000000000000000000 bourses 00000000000100100000110011100011 34996.08 00000000000000000000000000000000 smothering 00000000000000000000000000000000 19.30 00000000000000000000000000000000 35015.38 00000000000000000000000000000000 broader-based 00000000000000000000000000000000 10.78 00000000000000000000000000000000 2642.64 00000000000000000000000000000000 brisker 00000000000000000000000000000000 821-201 00000000000000000000000000000000 Smithson 00100000000000000000000000000000 dioxins 00000000000000000000000000000000 Cayman 00100000001110010000001000110000 foolhardy 00000000000010101011110110010000 NKK 01000000000000000000000000000000 705 00000000000000000000000000000000 2,080 00000000000000000000000000000000 2,760 00000000000000000000000000000000 2135.5 00000000000000000000000000000000 61.5-point 00000000000000000000000000000000 1730.7 00000000000000000000000000000000 643.3 00000000000000000000000000000000 24.95 00000000000000000000000000000000 Turnbull 00100000000000000000000000000000 6.18 00000000000000000000000000000000 Credito 00100000000000000000000000000000 Sherblom 00100000000000000000000000000000 966 00000000000000000000000000000000 Espanol 00100000000000000000000000000000 291 00000000000000000000000000000000 261 00000000000000000000000000000000 Racal 00100000000001111101000100101000 218 00000000000000000000000000000000 toxicology 00000000000000000000000000000000 29,400 00000000000000000000000000000000 kilowatt 00000000000000110010010101010000 Hokuriku 00100000000000000000000000000000 Cogeneration 00100000000001100000011010110000 waste-water 00000000000000000000000000000000 bio-analytical 00000000000000000000000000000000 Kucharski 00100000000000000000000000000000 8.77 00000000000000000000000000000000 Lexington-based 00100000000000000000000000000000 101.80 00000000000000000000000000000000 paper-manufacturing 00000000000000000000000000000000 stock-options 00000000000000000000000000000000 Cowen 00100000000000000000000000000000 married-put 00000000000000000000000000000000 CNCA 01000000000000000000000000000000 Defaults 00100000000111101000010000000011 Wildbad 00100000000000000000000000000000 disadvantages 00000000000111111100101110100011 gain. 00000000000000000000000000000000 Hopes 00100000000111111010101000110010 VOLUME 01000000000111101100001110000111 73,803 00000000000000000000000000000000 1,749,000 00000000000000000000000000000000 0.6287 00000000000000000000000000000000 32.4 00000000000000000000000000000000 amalgamate 00000000000000000000000000000000 1989-87 00000000000000000000000000000000 1989-86 00000000000000000000000000000000 Sonora 00100000000000000000000000000000 amalgamations 00000000000000000000000000000000 detector 00000000000010001011011000000001 1989-85 00000000000000000000000000000000 underlie 00000000000000000000000000000000 birthdays 00000000000000000000000000000000 noncompetitively 00000000000000000000000000000000 decommissoned 00000000000000000000000000000000 82.6 00000000000000000000000000000000 30.41 00000000000000000000000000000000 41.18 00000000000000000000000000000000 22,985,000 00000000000000000000000000000000 Archey 00100000000000000000000000000000 entry-level 00000000000000000000000000000000 optical-storage 00000000000000000000000000000000 fomenting 00000000000000000000000000000000 snazzy 00000000000000000000000000000000 4,995 00000000000000000000000000000000 6,495 00000000000000000000000000000000 Optical-storage 00100000000000000000000000000000 edit 00000000000000000000000000000000 more-established 00000000000000000000000000000000 Sprecher 00100000000000000000000000000000 Gustavus 00100000000000000000000000000000 Adolphus 00100000000000000000000000000000 Amaral 00100000000000000000000000000000 Freeberg 00100000000000000000000000000000 19.4 00000000000000000000000000000000 75.7 00000000000000000000000000000000 34.3 00000000000000000000000000000000 203.2 00000000000000000000000000000000 Esber 00100000000000000000000000000000 Government-Sponsored 01000000000000000000000000000000 feedback 00000000000101110111110100100111 Multimate 00100000000000000000000000000000 Framework 00100000000111010011101001100111 15,845,000 00000000000000000000000000000000 6.35 00000000000000000000000000000000 62.2 00000000000000000000000000000000 Tredegar 00100000000000000000000000000000 613.7 00000000000000000000000000000000 521.2 00000000000000000000000000000000 69.2 00000000000000000000000000000000 168.7 00000000000000000000000000000000 2001-2005 00000000000000000000000000000000 intitiative 00000000000000000000000000000000 590.7 00000000000000000000000000000000 575.1 00000000000000000000000000000000 174.8 00000000000000000000000000000000 dibenzofurans 00000000000000000000000000000000 147.5 00000000000000000000000000000000 contradicting 00000000000000000000000000000000 49.375 00000000000000000000000000000000 crude-steel 00000000000000000000000000000000 1,616,000 00000000000000000000000000000000 14,789,000 00000000000000000000000000000000 Terrence 00100000000000000000000000000000 Ringer 00100000000000000000000000000000 6.56 00000000000000000000000000000000 8.87 00000000000000000000000000000000 Lamphere 00100000000000000000000000000000 Loose 00100000000000100010011010010000 Laboratorium 00100000000000000000000000000000 silvery 00000000000000000000000000000000 391 00000000000000000000000000000000 two-door 00000000000000000000000000000000 compact-car 00000000000000000000000000000000 60-month 00000000000000000000000000000000 394 00000000000000000000000000000000 single-engine 00000000000000000000000000000000 turboprops 00000000000000000000000000000000 379 00000000000000000000000000000000 F.A. 01000000000000000000000000000000 Starke 00100000000000000000000000000000 non-enforcement 00000000000000000000000000000000 321,000 00000000000000000000000000000000 Shrinking 00100000000110001101010001000000 Croix 00100000000000000000000000000000 6.056 00000000000000000000000000000000 Criterion 00100000000000010010011000100001 Melinda 00100000000000000000000000000000 coiffed 00000000000000000000000000000000 recites 00000000000000000000000000000000 Onstage 00100000000000000000000000000000 chandelier 00000000000000000000000000000000 lifesize 00000000000000000000000000000000 reproduction 00000000000101011110011010100111 51.81 00000000000000000000000000000000 101.225 00000000000000000000000000000000 TNN 01000000000000000000000000000000 interrogators 00000000000000000000000000000000 Lichtenstein 00100000000000000000000000000000 unnumbered 00000000000000000000000000000000 Incorporated 00100000001011011110010000110010 8.34 00000000000000000000000000000000 Okobank 00100000000000000000000000000000 21.88 00000000000000000000000000000000 Abel 00100000000000000000000000000000 Johnson-era 00100000000000000000000000000000 Teodorani 00100000000000000000000000000000 Offensive 00100000000011000011001100100111 Album 00100000000100101000001000100111 Elvador 00100000000000000000000000000000 Otros 00100000000000000000000000000000 Ambigua 00100000000000000000000000000000 Overtega 00100000000000000000000000000000 podiatrist 00000000000000000000000000000000 now-deceased 00000000000000000000000000000000 Engler 00100000000000000000000000000000 impersonations 00000000000000000000000000000000 Bargen 00100000000000000000000000000000 ramrod-stiff 00000000000000000000000000000000 23.65 00000000000000000000000000000000 self-righteousness 00000000000000000000000000000000 patriotism 00000000000111111011110010100111 brimstone 00000000000000000000000000000000 teary-eyed 00000000000000000000000000000000 emotionalism 00000000000000000000000000000000 far-right 00000000000000000000000000000000 interrogator 00000000000000000000000000000000 Zach 00100000000000000000000000000000 Grenier 00100000000000000000000000000000 maddeningly 00000000000000000000000000000000 officious 00000000000000000000000000000000 aw 00000000000000000000000000000000 shucks 00000000000000000000000000000000 knitting 00000000000110011000001010110000 pearls 00000000000000000000000000000000 imitating 00000000000000000000000000000000 dispensing 00000000000100001010110001000000 jabs 00000000000000000000000000000000 flunky 00000000000000000000000000000000 meteoric 00000000000000111100100000010000 playfulness 00000000000000000000000000000000 deplores 00000000000000000000000000000000 circumlocution 00000000000000000000000000000000 self-important 00000000000000000000000000000000 Kilty 00100000000000000000000000000000 intentioned 00000000000000000000000000000000 emphaticize 00000000000000000000000000000000 hides 00000001001101001111000000010010 rammed 00000000000000000000000000000000 scape 00000000000000000000000000000000 Pentagonese 00100000000000000000000000000000 monetary-stroke-military 00000000000000000000000000000000 Ambiguan 00100000000000000000000000000000 paddle 00000000000000000000000000000000 intones 00000000000100000011010111000010 Publicity 00100000000110100110111010100111 Paschi 00100000000000000000000000000000 sharpness 00000000000000000000000000000000 494.50 00000000000000000000000000000000 Birk 00100000000000000000000000000000 Aliber 00100000000000000000000000000000 83.4 00000000000000000000000000000000 spill-related 00000000000000000000000000000000 Rehfeld 00100000000000000000000000000000 444 00000000000000000000000000000000 displacing 00000000000000000000000000000000 grandees 00000000000000000000000000000000 Gutfreund-Postel 01000000000000000000000000000000 imbroglio 00000000000111101000100011100111 dei 00000000000000000000000000000000 chimneys 00000000000000000000000000000000 tempts 00000000000000000000000000000000 Luxurious 00100000000000000000000000000000 Chugoku 00100000000000000000000000000000 22-foot 00000000000000000000000000000000 Kiki 00100000000000000000000000000000 terrace 00000000000000000000000000000000 flagrante 00000000000000000000000000000000 excavated 00000000000000000000000000000000 hoisting 00000000000000000000000000000000 neighborly 00000000000000000000000000000000 Diesel 00100000000000110010001010110000 bearded 00000000000101101101001000110000 Teito 00100000000000000000000000000000 your... 00000000000000000000000000000000 bellow 00000000000000000000000000000000 bland 00000000000000101100011010010000 handpicked 00000000000000111110101001000000 frocks 00000000000000000000000000000000 Keio 00100000000000000000000000000000 disgorgement 00000000000000000000000000000000 dissimilar 00000000000000000000000000000000 long-term-oriented 00000000000000000000000000000000 cursed 00000000000000000000000000000000 reddened 00000000000000000000000000000000 pale-blue 00000000000000000000000000000000 slits 00000000000000000000000000000000 Belmonts 00100000000000000000000000000000 Warburgs 00100000000000000000000000000000 Lehmans 00100000000000000000000000000000 Baches 00100000000000000000000000000000 Schiffs 00100000000000000000000000000000 probity 00000000000000000000000000000000 extraction 00000000000000000000000000000000 heaves 00000000000000000000000000000000 cuckoos 00000000000000000000000000000000 Loathing 00100000000000000000000000000000 Boardrooms 00100000000000000000000000000000 decorators 00000000000000000000000000000000 nouveau 00000000000000000000000000000000 riche 00000000000000000000000000000000 tawdry 00000000000000000000000000000000 t'aint 00000000000000000000000000000000 slammer 00000000000000000000000000000000 absolving 00000000000000000000000000000000 Pinky 00100000000000000000000000000000 Luxembourg-based 00100000000000000000000000000000 seamy 00000000000000000000000000000000 turn-of-the-century 00000000000000000000000000000000 palazzi 00000000000000000000000000000000 noblemen 00000000000000000000000000000000 piker 00000000000000000000000000000000 Fiske 00100000000000000000000000000000 raptors 00000000000000000000000000000000 10.62 00000000000000000000000000000000 declaratory 00000000000000000000000000000000 6,744,600 00000000000000000000000000000000 122,700 00000000000000000000000000000000 656.5 00000000000000000000000000000000 558 00000000000000000000000000000000 petite 00000000000000000000000000000000 speedup 00000000000000000000000000000000 kindled 00000000000000000000000000000000 Outreach 00100000000000000000000000000000 203.5 00000000000000000000000000000000 528.3 00000000000000000000000000000000 radar-threat 00000000000000000000000000000000 K-resin 00100000000000000000000000000000 mid-1995 00000000000000000000000000000000 Robotics 00100000000000000000000000000000 1,075,000 00000000000000000000000000000000 667 00000000000000000000000000000000 charge-offs 00000000000000000000000000000000 9.192 00000000000000000000000000000000 Stoecker 00100000000000000000000000000000 rationalizing 00000000000000000000000000000000 196.1 00000000000000000000000000000000 195.4 00000000000000000000000000000000 184.9 00000000000000000000000000000000 1,531,000 00000000000000000000000000000000 1,458,000 00000000000000000000000000000000 1,979,000 00000000000000000000000000000000 466,000 00000000000000000000000000000000 323,000 00000000000000000000000000000000 288,000 00000000000000000000000000000000 trills 00000000000000000000000000000000 Imported 00100000000011100001101001000000 Voluntary 00100000000110010001000000010000 Restraint 00100000000111001000110001100111 semifinished 00000000000000000000000000000000 1.465 00000000000000000000000000000000 10.33 00000000000000000000000000000000 424.3 00000000000000000000000000000000 Comeback 00100000000111010011101010100111 Cluggish 00100000000000000000000000000000 exude 00000000011101101111101110110010 spewed 00000000000000000000000000000000 Olissa 00100000000000000000000000000000 footnotes 00000000000000000000000000000000 Metschan 00100000000000000000000000000000 breezier 00000000000000000000000000000000 slumps 00000000000001000000011110000011 Palmatier 00100000000000000000000000000000 Minden 00100000000000000000000000000000 appraised 00000000000000000000100111000010 decorator 00000000000000000000000000000000 wellrun 00000000000000000000000000000000 career-risking 00000000000000000000000000000000 obscured 00000000111110000001110000110010 Wendler 00100000000000000000000000000000 Christiansen 00100000000000000000000000000000 Meta 00100000000000000000000000000000 VS 01000000000000000000000000000000 spook 00000000000000000000000000000000 Eastate 00100000000000000000000000000000 discouragement 00000000000000000000000000000000 Petre 00100000000000000000000000000000 Discouragement 00100000000000000000000000000000 overcollateralized 00000000000000000000000000000000 Durcan 00100000000000000000000000000000 laid-off 00000000000000000000000000000000 Hellman 00100000000000000000000000000000 Framingham 00100000000110110111101001101000 Hired 00100000101111101100010000110010 rejections 00000000000000000000000000000000 negativism 00000000000000000000000000000000 800-acre 00000000000000000000000000000000 water-purification 00000000000000000000000000000000 ammonia 00000000000000000000000000000000 urea 00000000000000000000000000000000 23.125 00000000000000000000000000000000 billowing 00000000000000000000000000000000 local-exchange 00000000000000000000000000000000 728.8 00000000000000000000000000000000 496.7 00000000000000000000000000000000 504.5 00000000000000000000000000000000 37.2 00000000000000000000000000000000 64.125 00000000000000000000000000000000 unaccounted 00000000000000000000000000000000 42.375 00000000000000000000000000000000 Schellke 00100000000000000000000000000000 PrimeTime 01000000000000000000000000000000 Reach 00100000000111111011001110110010 subsidization 00000000000000000000000000000000 Dragging 00100000011111101110100001000000 55.875 00000000000000000000000000000000 223.3 00000000000000000000000000000000 191.4 00000000000000000000000000000000 D.H. 01000000000000000000000000000000 Ds 00100000000000000000000000000000 bulkheads 00000000000000000000000000000000 torque 00000000000000000000000000000000 property-tax-cutting 00000000000000000000000000000000 aft 00000000000000000000000000000000 keel 00000000000101011000000000001000 793 00000000000000000000000000000000 11.08 00000000000000000000000000000000 Sobey 00100000000000000000000000000000 deviant 00000000000000000000000000000000 SHEARSON 01001111111111111111000000101000 LEHMAN 01001111111000000000111001001000 HUTTON 01001111111111111111000001001000 darned 00000000000000000000000000000000 60%-held 00000000000000000000000000000000 2.48 00000000000000000000000000000000 58.3 00000000000000000000000000000000 29.5 00000000000000000000000000000000 prepaying 00000000000000000000000000000000 scalp 00000000000000000000000000000000 21.18 00000000000000000000000000000000 49.5 00000000000000000000000000000000 83.3125 00000000000000000000000000000000 madman 00000000000000000000000000000000 Nidal 00101111111010111110110000011101 stash 00000000000000000000000000000000 375,000 00000000000000000000000000000000 342,122 00000000000000000000000000000000 280,000 00000000000000000000000000000000 37.7 00000000000000000000000000000000 Abu 00101111111101000011001101110000 Friendly 00100000000000100001001100010000 Skies 00100000000100100100111101100011 Conceivably 00100001101100000000001001110010 Bekaa 00100000000000000000000000000000 Coatedboard 00100000000000000000000000000000 Buckhead 00100000000000000000000000000000 Kadonada 00100000000000000000000000000000 hideouts 00000000000000000000000000000000 strafe 00000000000000000000000000000000 Bolduc 00100000000000000000000000000000 first-nine-month 00000000000000000000000000000000 Colonel 00100000000111101010010000110101 Intense 00100000000000000000110100010000 cigars 00000000000000000000000000000000 Aldomet 00100000000000000000000000000000 Indocin 00100000000000000000000000000000 75.25 00000000000000000000000000000000 open-year 00000000000000000000000000000000 Prescription-drug 00100000000000000000000000000000 heebie-jeebies 00000000000000000000000000000000 lipid 00000000000000000000000000000000 Dilzem 00100000000000000000000000000000 Halls 00100000001001000111110101100011 Rolaids 00100000000000000000000000000000 Lubriderm 00100000000000000000000000000000 Confectionery 00100000000000000000000000000000 Certs 00100000000000000000000000000000 Zeal 00100000000101010111110100100111 Clorets 00100000000000000000000000000000 109.50 00000000000000000000000000000000 deploring 00000000000000000000000000000000 renegotiation 00000000000000000000000000000000 Hybritech 00100000000000000000000000000000 1.045 00000000000000000000000000000000 940.6 00000000000000000000000000000000 second-guessed 00000000000000000000000000000000 7.649 00000000000000000000000000000000 drug-sales 00000000000000000000000000000000 Cardiac 00100000000001110000000000110000 Pacemakers 00100000000000000000000000000000 medical-instrument 00000000000000000000000000000000 Ajax 00100000000000000000000000000000 cleanser 00000000000000000000000000000000 Bonita 00100000000000000000000000000000 Kendall 00101111111111111001001000001000 malcontent 00000000000000000000000000000000 Confiding 00100000000000000000000000000000 CIT 01000000000000000000000000000000 crisper 00000000000000000000000000000000 Beantown 00100000000000000000000000000000 scribes 00000000000000000000000000000000 invective 00000000000000000000000000000000 pro-Noriega 01000000000000000000000000000000 Pee 00100000000000000000000000000000 Wee 00100000000000000000000000000000 Patriots 00100000000000000000000000000000 Wamre 00100000000000000000000000000000 Mulvoy 00100000000000000000000000000000 adorn 00000000000000000000000000000000 Taste 00100000000111111110010000000001 micromanage 00000000000000000000000000000000 diarrhea 00000000000000000000000000000000 chit 00000000000000000000000000000000 coat... 00000000000000000000000000000000 renderings 00000000000000000000000000000000 reprinted 00000000000000000000000000000000 pervert 00000000000000000000000000000000 Abe 00100000000100101100100100001000 Bella 00100000000000000000000000000000 screams 00000000000000000000000000000000 hysterically 00000000000000000000000000000000 visages 00000000000000000000000000000000 Howie 00100000000000000000000000000000 Statehouse 00100000000000000000000000000000 hacks 00000000000000000000000000000000 nepotism 00000000000000000000000000000000 forehead 00000000000000000000000000000000 chinless 00000000000000000000000000000000 Shaughnessy 00100000000000000000000000000000 Deeply 00100000000010000000000001110010 leakers 00000000000000000000000000000000 Kissing 00100000000000000000000000000000 Good-bye 00100000000000000000000000000000 Enormous 00100000000000000100010100010000 hunter-gatherers 00000000000000000000000000000000 mammoths 00000000000000000000000000000000 caves 00000000000000000000000000000000 terrestrial 00000000000000000000000000000000 Dominant 00100000000000011100011000010000 capitalist-exploiters-greedy-American-consumers-global 01000000000000000000000000000000 Jocelyn 00100000000000000000000000000000 Tomkin 00100000000000000000000000000000 Astronomy 00100000000111011010001101100001 tax-collecting 00000000000000000000000000000000 120,000-employee 00000000000000000000000000000000 Customarily 00100000001101100000001001110010 top-notch 00000000000000000000000000000000 Maj. 00100000000000000000000000000000 Moises 00100000000000000000000000000000 abortive 00000000000000000000000000000000 gunshot 00000000000000000000000000000000 skull 00000000000000000000000000000000 Battalion-2000 00100000000000000000000000000000 Leaping 00100000000111111010010001000000 crematoriums 00000000000000000000000000000000 sleeps 00000000000000000000000000000000 actuaries 00000000000000000000000000000000 Vicky 00100000000000000000000000000000 Amado 00100000000000000000000000000000 Norma 00100000000000000000000000000000 coup-makers 00000000000000000000000000000000 congratulate 00000000000000011010100110110010 brutal-and 00000000000000000000000000000000 efficient-in 00000000000000000000000000000000 byzantine 00000000000000011101000010010000 spy-in-training 00000000000000000000000000000000 savagely 00000000000000000000000000000000 befriended 00000000000000000000000000000000 7.0808 00000000000000000000000000000000 well-born 00000000000000000000000000000000 Anastasio 00100000000000000000000000000000 Juge 00100000000000000000000000000000 Doc 00100000000000000000000000000000 Duvalier 00100000000101010110100000001000 Japanese-supplied 00100000000000000000000000000000 shortened 00000000000001010010111001000000 excuses 00000000000111111010101110100011 throne 00000000000111110110100001100111 hand-sized 00000000000000000000000000000000 engraved 00000000000000000000000000000000 Guardia 00101111111000000110010000011101 240-a-share 00000000000000000000000000000000 Chorrillos 00100000000000000000000000000000 half-brother 00000000000000000000000000000000 Hurtado 00100000000000000000000000000000 7.0826 00000000000000000000000000000000 pockmarked 00000000000000000000000000000000 Pina 00100000000000000000000000000000 cadets 00000000000000000000000000000000 repudiation 00000000000000000000000000000000 well-off 00000000000000000000000000000000 French-modeled 00100000000000000000000000000000 French-made 00100000000000000000000000000000 militarism 00000000000000000000000000000000 Darien 00100000000000000000000000000000 Ayala 00100000000000000000000000000000 Residents 00100000000000000000100000110011 residue 00000000000000000000000000000000 sowed 00000000000000000000000000000000 turnarounds 00000000000000000000000000000000 plantations 00000000000000000000000000000000 Bocas 00100000000000000000000000000000 Toros 00100000000000000000000000000000 already-strained 00000000000000000000000000000000 Satisfying 00100000000000100101110110110010 PX 01000000000000000000000000000000 no-strike 00000000000000000000000000000000 Capt. 00100000000000000000000000000000 super-spy 00000000000000000000000000000000 sprinkled 00000000000000000000000000000000 mistresses 00000000000000000000000000000000 splashed 00000000011010110110010000110010 handbills 00000000000000000000000000000000 banana-exporting 00000000000000000000000000000000 sweatshirt 00000000000001100110111000000001 nurture... 00000000000000000000000000000000 counter-intelligence 00000000000000000000000000000000 Gulick 00100000000000000000000000000000 public... 00000000000000000000000000000000 studiousness 00000000000000000000000000000000 721 00000000000000000000000000000000 inseparable 00000000000000000000000000000000 slogs 00000000000000000000000000000000 scotched 00000000000000000000000000000000 scold 00000000000000000000000000000000 sergeants 00000000000000000000000000000000 470th 00000000000000000000000000000000 12.9375 00000000000000000000000000000000 jar 00000000000000000000000000000000 Stansfield 00100000000000000000000000000000 79.18 00000000000000000000000000000000 Britta 00100000000000000000000000000000 232.4 00000000000000000000000000000000 reindicting 00000000000000000000000000000000 pal 00000000000000000000000000000000 employee-owned 00000000000000000000000000000000 Firearms 00100000000000000000000000000000 scalps 00000000000000000000000000000000 arsenic 00000000000000000000000000000000 de-facto 00000000000000000000000000000000 chewing 00000000001001101110100001000000 187.4 00000000000000000000000000000000 Aswara 00100000000000000000000000000000 orgy 00000000000000000000000000000000 117.7 00000000000000000000000000000000 Ardito 00100000000000000000000000000000 784.5 00000000000000000000000000000000 summarized 00000000000000000000000000000000 redeploy 00000000000000000000000000000000 Elliot 00101111111000010001000010011000 848.7 00000000000000000000000000000000 Diaz 00101111111111110101000100001000 Herrera 00100000000000000000000000000000 plaintively 00000000000000000000000000000000 knock-out 00000000000000000000000000000000 200.3 00000000000000000000000000000000 UPJOHN 01000000000101101110111100101000 129.3 00000000000000000000000000000000 272 00000000000000000000000000000000 105,000 00000000000000000000000000000000 83.6 00000000000000000000000000000000 84.1 00000000000000000000000000000000 M.W. 01000000000000000000000000000000 142.3 00000000000000000000000000000000 Honiss 00100000000000000000000000000000 Attridge 00100000000000000000000000000000 Omnibank 00100000000000000000000000000000 31.125 00000000000000000000000000000000 Isoda 00100000000000000000000000000000 Tockman 00100000000000000000000000000000 epidemiologist 00000000000111101111010100110101 Hygiene 00100000000000000000000000000000 Measured 00100000000111000001110000110010 Devesa 00100000000000000000000000000000 Blot 00100000000000000000000000000000 high-heeled 00000000000000000000000000000000 35-44 00000000000000000000000000000000 stock-exchange 00000000000000000000000000000000 Smoking 00100000000001000110010000100001 adolescents 00000000000000000000000000000000 clouding 00000000000000000000000000000000 addictive 00000000000101011010101000110000 Stjernsward 00100000000000000000000000000000 Non-smoking 00100000000000000000000000000000 Merryman 00100000000000000000000000000000 age-specific 00000000000000000000000000000000 mortgaged-backed 00000000000000000000000000000000 Undaunted 00100000000111110001111011101000 environmentalist 00000000000000000000000000000000 government-relations 00000000000000000000000000000000 lamp 00000000000000000000000000000000 profit-driven 00000000000000000000000000000000 taxicab 00000000000000000000000000000000 Exhausted 00100011100011010100010000110010 448.49 00000000000000000000000000000000 453.57 00000000000000000000000000000000 Rothe 00100000000000000000000000000000 Arbitraging 00100000000000000000000000000000 supremacy 00000000000000000000000000000000 4,345 00000000000000000000000000000000 1,174 00000000000000000000000000000000 Kristiansen 00100000000000000000000000000000 character-recognition 00000000000000000000000000000000 177.3 00000000000000000000000000000000 thirdquarter 00000000000000000000000000000000 Wilpers 00100000000000000000000000000000 burials 00000000000000000000000000000000 differentiating 00000000000000000000000000000000 indignity 00000000000000000000000000000000 Saving 00100000001111110010110001000000 Enzor 00100000000000000000000000000000 microbe 00000000000000000000000000000000 sanitationists 00000000000000000000000000000000 hygiene 00000000000000000000000000000000 washable 00000000000000000000000000000000 Koji 00100000000000000000000000000000 sepsis 00000000000000000000000000000000 promulgated 00000000000000000000000000000000 expectancy 00000000000000000000000000000000 public-health 00000000000000000000000000000000 Silent 00100000000000101000110110010000 hysterical 00000000000000000000000000000000 uninhabitable 00000000000000000000000000000000 apocalyptic 00000000000001110010010100010000 Commoner 00100000000000000000000000000000 Dubois 00100000000000000000000000000000 out-of-repair 00000000000000000000000000000000 overdosed 00000000000000000000000000000000 systematically 00000010010101000000010001110010 depletes 00000000000000000000000000000000 incineration 00000000000000000000000000000000 heretofore 00000000100100101000000001110010 Alpharetta 00100000000000000000000000000000 Overreacting 00100000000110100110011000110010 blue-ribbon 00000000000000000000000000000000 prescriptive 00000000000000000000000000000000 underreacting 00000000000000000000000000000000 non-objective 00000000000000000000000000000000 556.5 00000000000000000000000000000000 interrelated 00000000000000000000000000000000 inextricably 00000000000000000000000000000000 Lovejoy 00100000000000000000000000000000 39.9 00000000000000000000000000000000 soft-drinks 00000000000000000000000000000000 324.9 00000000000000000000000000000000 Burry 00100000000000000000000000000000 93.8 00000000000000000000000000000000 2.97 00000000000000000000000000000000 25-million-share 00000000000000000000000000000000 801.21 00000000000000000000000000000000 269.3 00000000000000000000000000000000 241.6 00000000000000000000000000000000 winery 00000000000111010000110100000001 jewelery 00000000000000000000000000000000 DeVon 01000000000000000000000000000000 Jewelery 00100000000000000000000000000000 twelve 00000000000110101111000011000000 synonymous 00000000000110110101100000110010 crime-infested 00000000000000000000000000000000 vitreous-china 00000000000000000000000000000000 1881 00000000000000000000000000000000 Alf 00100000000000000000000000000000 Karate 00100000000000011101001000110000 Chipmunks 00100000000000000000000000000000 counterprogram 00000000000000000000000000000000 jovial 00000000000000000000000000000000 internationalists 00000000011011000101110010100111 Tartikoff 00100000000000000000000000000000 mid-season 00000000000000000000000000000000 Chino 00100000000000000000000000000000 Yoshitoki 00100000000000000000000000000000 204.3 00000000000000000000000000000000 Romanesque 00100000000000000000000000000000 Kueneke 00100000000000000000000000000000 Nickelodeon 00100000000000000000000000000000 Doi 00100000000000000000000000000000 Saved 00100000000100011100010000110010 Animated 00100000000000101000110100010000 elongate 00000000000000000000000000000000 623 00000000000000000000000000000000 619.8 00000000000000000000000000000000 Incrementally 00100000000000000000000000000000 187.8 00000000000000000000000000000000 abominable 00000000000000000000000000000000 Sadakane 00100000000000000000000000000000 Wallace 00101111111000101010000100001000 Prab 00100000000000000000000000000000 Viewpoint 00100000000110100101001001100111 speedier 00000000000000110100001111000000 misquotation 00000000000000000000000000000000 Deaths 00100000000111101111000001100011 quicksand 00000000000000000000000000000000 hampers 00000000000000000000000000000000 overblown 00000000000000000000000000000000 colon-cancer 00000000000000000000000000000000 Moertel 00100000000000000000000000000000 Minn 00100000000000000000000000000000 hormones 00000000001100110111110101100011 centralize 00000000000000000000000000000000 front-running 00000000000000000000000000000000 180-foot-tall 00000000000000000000000000000000 lower-emission 00000000000000000000000000000000 transacted 00000000000000000000000000000000 Colucci 00100000000000000000000000000000 mixtures 00000000000000000000000000000000 McHenry 01000000000000000000000000000000 alternative-fueled 00000000000000000000000000000000 clean-fuels 00000000000000000000000000000000 scandal-ridden 00000000000000000000000000000000 cease-and-desist 00000000000000000000000000000000 comprehensively 00000000000000000000000000000000 Junk-Bond 01000000000000000000000000000000 48,100 00000000000000000000000000000000 government-insured 00000000000000000000000000000000 oversimplified 00000000000000000000000000000000 Flanked 00100000000000000000000000000000 spiffy 00000000000000000000000000000000 Haden 00100000000000000000000000000000 775 00000000000000000000000000000000 pre-bankruptcy 00000000000000000000000000000000 HOPES 01000000000111111010101000110010 SIMPLIFYING 01000000000000000000000000000000 still-uncalculated 00000000000000000000000000000000 masterpiece 00000000000010111110101000100001 flim-flammery 00000000000000000000000000000000 Lucille 00100000000000000000000000000000 staring 00000000010111000110100001000000 Samengo-Turner 01000000000000000000000000000000 RAVAGES 01000000000000000000000000000000 hurricane-wracked 00000000000000000000000000000000 Amending 00100000000000000000000000000000 DELAYS 01000000000111100011011000100011 Returns 00100000000111100100001100000011 endeavors 00000000000111110000001010100011 89-136 00000000000000000000000000000000 Fiscal-year 00100000000000000000000000000000 Excise-tax 00100000000000000000000000000000 Extensions 00100000000110110010001000100011 employment-tax 00000000000000000000000000000000 folders 00000000000000000000000000000000 ONE-DAY 01000000000000000000000000000000 JAUNTS 01000000000000000000000000000000 temps 00000000000000000000000000000000 USED-CAR 01000000000000000000000000000000 BUYERS 01000000000111101101100000110011 understating 00000000000000000000000000000000 Estimating 00100000000111000001111010000010 OWNER 01000000000011111111110000110101 5498 00000000000000000000000000000000 decedent 00000000000000000000000000000000 executor 00000000000000000000000000000000 Procedure 00100000000111011101000011100111 89-52 00000000000000000000000000000000 BIGGER 01000000000000000110001111000000 THAN 01000000000000000000001110000010 BREADBOX 01000000000000000000000000000000 hoarder 00000000000000000000000000000000 distrust 00000000000111110110110101100111 caches 00000000000000000000000000000000 Damonne 00100000000000000000000000000000 hardworking 00000000000000000000000000000000 reclusive 00000000000110011101000010010000 84-year-old 00000000000000000000000000000000 124,732 00000000000000000000000000000000 1982-84 00000000000000000000000000000000 52,012 00000000000000000000000000000000 Tupperware 00100000000001101000110100101000 breadbox 00000000000000000000000000000000 obelisk 00000000000000000000000000000000 1974-81 00000000000000000000000000000000 pinching 00000000000000000000000000000000 remorseful 00000000000000000000000000000000 stepmother 00000000000000000000000000000000 ex-employer 00000000000000000000000000000000 26,350 00000000000000000000000000000000 46,892 00000000000000000000000000000000 mounts 00000000000000000000000000000000 tortuous 00000000000000000000000000000000 picture-postcard 00000000000000000000000000000000 vista 00000000000111101101010100101000 glade 00000000000000000000000000000000 aspens 00000000000000000000000000000000 azure 00000000000000000000000000000000 Indian-summer 00100000000000000000000000000000 trudge 00000000000000000000000000000000 Sandwiched 00100000000000000000000000000000 pedaling 00000000000000000000000000000000 seven-bedroom 00000000000000000000000000000000 well-polished 00000000000000000000000000000000 warren 00001111111000000001000100001000 amazingly 00000000000000000000000000000000 overrun 00000000001011100001110000110010 Fiala 00100000000000000000000000000000 hilly 00000000000000000000000000000000 all-terrain 00000000000000000000000000000000 Bikers 00100000000000000000000000000000 fitness-promoting 00000000000000000000000000000000 Perch 00100000000000000000000000000000 landscapes 00000000000000000000000000000000 Sierras 00100000000000000000000000000000 Seaboard 00100000000000000000000000000000 dimes 00000000000000000000000000000000 bicyclist 00000000000000000000000000000000 spyglass 00000000000000000000000000000000 penny-pinching 00000000000000000000000000000000 unsuspecting 00000000000000011101101000110000 public-land 00000000000000000000000000000000 hiking 00000000000101010110100001000000 consigns 00000000000000000000000000000000 treasured 00000000000000000000000000000000 lenient 00000000000000001110010010010000 multiple-use 00000000000000000000000000000000 Trail 00100000000010101001001010110111 trade-in 00000000000000000000000000000000 evocative 00000000001000010101000010010000 steadying 00000000000000000000000000000000 terrain-marring 00000000000000000000000000000000 off-road 00000000000000000000000000000000 inventing 00000000000000000000000000000000 Coan 00100000000000000000000000000000 cyclists 00000000000000000000000000000000 dolledup 00000000000000000000000000000000 acquiesced 00000000000000000000000000000000 Canoga 00100000000000000000000000000000 backpackers 00000000000000000000000000000000 Off-Road 01000000000000000000000000000000 Bicyclists 00100000000000000000000000000000 Blumenthal 00101111111101001010000010001000 Bicycling 00100000000000000000000000000000 biker 00000000000000000000000000000000 ranger 00000000000000100011100100100001 hunted 00000000000101011110001000110010 renegade 00000000000000000000000000000000 Hasenauer 00100000000000000000000000000000 metallurgy 00000000000000000000000000000000 multi-gear 00000000000000000000000000000000 terrain 00000000000111101001001001100111 thin-tired 00000000000000000000000000000000 dwellers 00000000000000000000000000000000 Crested 00100000000000000000000000000000 Butte 00100000000000000000000000000000 Underwoods 00100000000000000000000000000000 jamboree 00000000000000000000000000000000 paperboy 00000000000000000000000000000000 Golar 00100000000000000000000000000000 Gotaas-Larsen 01000000000000000000000000000000 noncumulative 00000000000000000000000000000000 Shared 00100000010011010001110000110010 Smetek 00100000000000000000000000000000 Fitzwilliams 00100000000000000000000000000000 repossess 00000000000000000000000000000000 corporate-earnings 00000000000000000000000000000000 Ismaili 00100000000000000000000000000000 pre-eminent 00000000000000000000000000000000 CSV 01000000000000000000000000000000 Homeowner 00100000000111100100111000100001 Skoal 00100000000000000000000000000000 Daze 00100000000000000000000000000000 revenge 00000000000001100101110010100111 -George 01000000000000000000000000000000 Spaced 00100000000000000000000000000000 Kafaroff 00100000000000000000000000000000 Repression 00100000000101001011111010100111 emote 00000000000000000000000000000000 siphoning 00000000000000000000000000000000 wood-product 00000000000000000000000000000000 166.8 00000000000000000000000000000000 144.9 00000000000000000000000000000000 469.8 00000000000000000000000000000000 410.3 00000000000000000000000000000000 6.95 00000000000000000000000000000000 789 00000000000000000000000000000000 Carole 00100000000000000000000000000000 episodic 00000000000000000000000000000000 13-point 00000000000000000000000000000000 36.3 00000000000000000000000000000000 disavowed 00000000000000000000000000000000 frumpy 00000000000000000000000000000000 rigorously 00000000000000000000000000000000 393.4 00000000000000000000000000000000 806.8 00000000000000000000000000000000 880.9 00000000000000000000000000000000 852 00000000000000000000000000000000 margin-the 00000000000000000000000000000000 502.1 00000000000000000000000000000000 Elections 00100000000111101001010001100111 Vishwanath 00100000000000000000000000000000 Pratap 00100000000000000000000000000000 statisticians 00000000000001010010000010110011 Indira 00100000000000000000000000000000 unrivaled 00000000000000000000000000000000 indignation 00000000000000000000000000000000 Bhabani 00100000000000000000000000000000 Gupta 00100000000000000000000000000000 Versicherungs 00100000000000000000000000000000 liberalizations 00000000000000000000000000000000 Lok 00100000000000000000000000000000 Sabha 00100000000000000000000000000000 separatist 00000000000000101101011000110000 Sikhs 00100000000111111100000110110011 clinched 00000000000000000000000000000000 Bangladesh 00100000000111000101011101101000 chipped 00000000000000000000000000000000 precincts 00000000000000000000000000000000 Chimanbhai 00100000000000000000000000000000 parliamentarian 00000000000000000000000000000000 autumns 00000000000000000000000000000000 flared 00000000001110000110001000110010 zestfully 00000000000000000000000000000000 Unease 00100000000100001110111010100111 111,000 00000000000000000000000000000000 disintegrated 00000000000000000000000000000000 FH-77B 01000000000000000000000000000000 155-mm 00000000000000000000000000000000 Outhwaite 00100000000000000000000000000000 Olof 00100000000000000000000000000000 Palme 00100000000000000000000000000000 Innis-Maggiore-Olson 01000000000000000000000000000000 facsimiles 00000000000000000000000000000000 remittances 00000000000000000000000000000000 auditor-general 00000000000000000000000000000000 Krishnaswami 00100000000000000000000000000000 apprehensions 00000000000000000000000000000000 9. 00000000000000000000000000000000 Pontiac-Cadillac 01000000000000000000000000000000 Bribe 00100000000111101101001101000111 oil-rig 00000000000000000000000000000000 8.685 00000000000000000000000000000000 880,500 00000000000000000000000000000000 86,500 00000000000000000000000000000000 2.3125 00000000000000000000000000000000 2.4375 00000000000000000000000000000000 pre-noon 00000000000000000000000000000000 amps 00000000000000000000000000000000 Leuzzi 00100000000000000000000000000000 hiatus 00000000000000000000000000000000 Lackluster 00100000000000001001100000010000 170,262 00000000000000000000000000000000 dealer-led 00000000000000000000000000000000 654.5 00000000000000000000000000000000 Pre-refunded 00100000000000000000000000000000 escrowed 00000000000000000000000000000000 144.4 00000000000000000000000000000000 Tentative 00100000000000001001001100010000 reoffering 00000000000000000000000000000000 97.85 00000000000000000000000000000000 11-2 00000000000000000000000000000000 stewards 00000000000000000000000000000000 64-35 00000000000000000000000000000000 301-year-old 00000000000000000000000000000000 Opositora 00100000000000000000000000000000 Electoral 00100000001110100000000000110000 5.36 00000000000000000000000000000000 829.9 00000000000000000000000000000000 -mortgage-backed 00000000000000000000000000000000 383-30 00000000000000000000000000000000 Activities 00100000000111101111101100100011 Obey 00100000001010111111110110110010 inasmuch 00000000000000000000000000000000 impassiveness 00000000000000000000000000000000 tri-colored 00000000000000000000000000000000 starch 00000000000000000000000000000000 365 00000000000000000000000000000000 veering 00000000000000000000000000000000 disinflationary 00000000000000000000000000000000 APMS 01000000000000000000000000000000 Dinsa 00100000000000000000000000000000 handcuffed 00000000000000000000000000000000 0.14 00000000000000000000000000000000 14.11 00000000000000000000000000000000 14.24 00000000000000000000000000000000 soybean-meal 00000000000000000000000000000000 A-1 00100000000000000000000000000000 coffeehouse 00000000000000000000000000000000 origins 00000000000110101000111101100011 doormen 00000000000000000000000000000000 Legitimate 00100000000110000001000000010000 Poachers 00100000000000000000000000000000 Constance 00100000000000000000000000000000 thundered 00000000000000000000000000000000 wryly 00000000000000000000000000000000 mite 00000000000000000000000000000000 conservationists 00000000000000000000000000000000 puppies 00000000000000101000111001100011 BLAST 01000000000111110001001010110111 Evil 00100000000001000010101000110000 red-frocked 00000000000000000000000000000000 pens 00000000000110101100111001100011 BENEFITS 01000000000111101110101100000011 fades 00000000000000000000000000000000 deleting 00000000000000000000000000000000 health-coverage 00000000000000000000000000000000 medical-leave 00000000000000000000000000000000 employer-paid 00000000000000000000000000000000 employerpaid 00000000000000000000000000000000 Christine 00100000111001101100001000011000 JUMPING 01000000000110100111100001000000 GUN 01000000000111101000010000000001 centimeter 00000000000000000000000000000000 apologetically 00000000000000000000000000000000 PRISON-SHOP 01000000000000000000000000000000 BLUES 01000000000111101111101101000001 prisoner-made 00000000000000000000000000000000 REPAIR 01000000000000001011011110110111 SHOPS 01000000000011101111110001100011 SCRAP 01000000010101111111110110110010 auto-repair 00000000000000000000000000000000 auto-emission 00000000000000000000000000000000 non-warranty 00000000000000000000000000000000 Hathcock 00100000000000000000000000000000 McKay 01001111111111101000001010001000 Innovation 00100000000001001111110010100111 nozzle 00000000000000000000000000000000 delousing 00000000000000000000000000000000 feel-good 00000000000000000000000000000000 poisoned 00000000000000000000000000000000 Euronotes 00100000000000000000000000000000 recaptilization 00000000000000000000000000000000 Kanjorski 00100000000000000000000000000000 Mfume 00100000000000000000000000000000 Kweisi 00100000000000000000000000000000 McMillen 01000000000000000000000000000000 Soviet-controlled 00100000000000000000000000000000 ointment 00000000000000000000000000000000 Yuli 00100000000000000000000000000000 Vorontsov 00100000000000000000000000000000 SCUD 01000000000000000000000000000000 yttrium-containing 00000000000000000000000000000000 T-72 00100000000000000000000000000000 Dolphin 00100000000000000000000000000000 Reinforced 00100000000100100111010000110010 Motorized 00100000000101011000001000110000 Brigade 00100000000001010111101001100111 Vento 00100000000000000000000000000000 abilities 00000000000111110111011101100011 FROG-7B 01000000000000000000000000000000 An-12 00100000000000000000000000000000 MiG-23BN 01000000000000000000000000000000 liquid-nitrogen 00000000000000000000000000000000 814 00000000000000000000000000000000 F16s 00100000000000000000000000000000 Sukhoi 00100000000000000000000000000000 SU-27 01000000000000000000000000000000 fighter-bombers 00000000000000000000000000000000 conscripts 00000000000000000000000000000000 indoctrinated 00000000000000000000000000000000 asbestos-disease 00000000000000000000000000000000 KHAD 01000000000000000000000000000000 symbolized 00000000000000000000000000000000 Shi'ite 00100000000000000000000000000000 Sultan 00100000000111011110100000001000 Keshtmand 00100000000000000000000000000000 Zia 00101111110000001001010110001000 ostentatiously 00000000000000000000000000000000 McCollum 01000000000000000000000000000000 Border 00100000000111110011111000000001 Guards 00100000000010100101000110001001 ethnically 00000000000000000000000000000000 Afghans 00100000000111101111001110110011 bloody-minded 00000000000000000000000000000000 UNR 01000000000000000000000000000000 Gulbuddin 00100000000000000000000000000000 Hekhmatyar 00100000000000000000000000000000 Dec 00100000000000000000000000000000 63.875 00000000000000000000000000000000 essentials 00000000000000000000000000000000 Experienced 00100000010011101100010000110010 siege 00000000001111011110011010100111 ripens 00000000000000000000000000000000 Jalalabad 00100000000000000000000000000000 minefields 00000000000000000000000000000000 defenseless 00000000000000000000000000000000 re-supplied 00000000000000000000000000000000 Stingers 00100000000000000000000000000000 anti-aircraft 00000000000000000000000000000000 incoherent 00000000000000000000000000000000 cutoff 00000000000111001000100101100111 Creation 00100000000111110100111000001111 Klass 00100000000000000000000000000000 disciples 00000000000000000000000000000000 withering 00000000001010011111010001000000 vine 00000000000000000000000000000000 Reaganauts 00100000000000000000000000000000 138.625 00000000000000000000000000000000 around... 00000000000000000000000000000000 national-priority 00000000000000000000000000000000 weariness 00000000000000000000000000000000 tranquility 00000000000000000000000000000000 receding 00000000000001101101100001000000 backer 00001111111110000011101000101000 nonlethal 00000000000000000000000000000000 impenetrable 00000000000000000000000000000000 strategic-arms 00000000000000000000000000000000 Comedy 00100000000000100110101000100001 anti-ballistic-missile 00000000000000000000000000000000 credulity 00000000000000000000000000000000 shying 00000000000000000000000000000000 drumbeating 00000000000000000000000000000000 arming 00000000000000000000000000000000 anti-communist 00000000000000000000000000000000 presiding 00000000000110110010111010100111 Homosexuals 00100000000101011100111000110011 unread 00000000000000000000000000000000 disgusting 00000000000000000000000000000000 unguided 00000000000000000000000000000000 Stoddard 00101111111101101110000010001000 infelicitous 00000000000000000000000000000000 per-subscriber 00000000000000000000000000000000 humaneness 00000000000000000000000000000000 indulgences 00000000000000000000000000000000 idiocy 00000000000000000000000000000000 invidious 00000000000000000000000000000000 anti-homosexual 00000000000000000000000000000000 screed 00000000000000000000000000000000 Mudd 00100000000000000000000000000000 dared 00000000000000101011101000110010 non-Indian 01000000000000000000000000000000 we're-all-in-this-together 00000000000000000000000000000000 blemishes 00000000000000000000000000000000 707-pence 00000000000000000000000000000000 discs 00000000000000000000000000000000 Weapon 00100000000100111101111101100111 power-transmission 00000000000000000000000000000000 48-year 00000000000000000000000000000000 soy 00000000000000000000000000000000 Lethal 00100000001000000101010010010000 gleaming 00000000000000000000000000000000 exhibitors 00000000000000000000000000000000 air-conditioner 00000000000000000000000000000000 missile-guidance 00000000000000000000000000000000 high-purity 00000000000000000000000000000000 halogenated 00000000000000000000000000000000 hydrocarbon 00000000000000000000000000000000 Masaaki 00100000000000000000000000000000 decentralizing 00000000000000000000000000000000 Leninskoye 00100000000000000000000000000000 Zamya 00100000000000000000000000000000 tree-farming 00000000000000000000000000000000 grossing 00000000000000000000000000000000 Cataracts 00100000000000000000000000000000 tribes 00000000000101101000100000110011 inhabit 00000000000000000000000000000000 4,800-acre 00000000000000000000000000000000 Departmentstore 00100000000000000000000000000000 international-operations 00000000000000000000000000000000 5.56 00000000000000000000000000000000 712 00000000000000000000000000000000 Dada 00100000000000000000000000000000 Symbolist 00100000000000000000000000000000 Ventes 00100000000000000000000000000000 Horta 00100000000000000000000000000000 sabers-along 00000000000000000000000000000000 initiation 00000000000000000000000000000000 pro-forma 00000000000000000000000000000000 pre-sale 00000000000000000000000000000000 top-drawer 00000000000000000000000000000000 Vivien 00100000000000000000000000000000 Antwerp 00100000000000000000000000000000 scribbling 00000000000000000000000000000000 auction-fee 00000000000000000000000000000000 Stefan 00100000000000000000000000000000 Ending 00100000000000000110010100110010 Duty 00100000000110001111110100100111 Crispin 00100000000000000000000000000000 Tickell 00100000000000000000000000000000 437.7 00000000000000000000000000000000 436.3 00000000000000000000000000000000 63.1 00000000000000000000000000000000 Charges 00100000000111101101110000100011 54.1 00000000000000000000000000000000 Ellmann 00100000000000000000000000000000 stock-appreciation-based 00000000000000000000000000000000 mass-merchandise 00000000000000000000000000000000 Superconductors 00100000000000011110111001100011 check-kiting 00000000000000000000000000000000 Calderwood 00100000000000000000000000000000 jumpiness 00000000000000000000000000000000 ever-faster 00000000000000000000000000000000 capital-formation 00000000000000000000000000000000 prognosticators 00000000000000000000000000000000 lemmings 00000000000000000000000000000000 eye-blink 00000000000000000000000000000000 fruitbowl 00000000000000000000000000000000 weightings 00000000000000000000000000000000 McLelland 01000000000000000000000000000000 Rubega 00100000000000000000000000000000 fro 00000000000000000000000000000000 non-retail 00000000000000000000000000000000 Shearon 00100000000000000000000000000000 226,570,380 00000000000000000000000000000000 gorilla 00000000000000000000000000000000 Presumably 00100000010100000000001001110010 value-oriented 00000000000000000000000000000000 Delphi 00100000000000000000000000000000 Arnott 00100000000000000000000000000000 50-point 00000000000000000000000000000000 voracious 00000000000000000000000000000000 1936 00000000000000000000000000000000 Keynes 00100000000000000000000000000000 maxims 00000000000000000000000000000000 antisocial 00000000000000000000000000000000 fetish 00000000000000000000000000000000 high-backed 00000000000000000000000000000000 well-received 00000000000000000000000000000000 spaceborn 00000000000000000000000000000000 expunge 00000000000000000000000000000000 imperious 00000000000110111100110100010000 lingo 00000000000000000000000000000000 bombarding 00000000000000000000000000000000 Physics 00100000000000001011001101100001 record-tying 00000000000000000000000000000000 sweaty 00000000000000000000000000000000 Worms 00100000000011100011110101100011 Killers 00100000000000000000000000000000 optimist 00000000000111111001101000100111 French-franc 00100000000000000000000000000000 Activists 00100000000100000001000010110011 malfunction 00000000000000000000000000000000 space-shuttle 00000000000000000000000000000000 6.19 00000000000000000000000000000000 6.66 00000000000000000000000000000000 Chaos 00100000000101100111111010100111 pi 00000000000000000000000000000000 axiomatic 00000000000000000000000000000000 blur 00000000000000000000000000000000 rapidity 00000000000000000000000000000000 statutorily 00000000000000000000000000000000 3.71 00000000000000000000000000000000 Peduzzi 00100000000000000000000000000000 Polysilicon 00100000000000000000000000000000 radioactivity 00000000000000000000000000000000 Appalled 00100000000001001101110000110010 errand 00000000000000000000000000000000 Hearing 00100000000111110101001011100111 fourth-level 00000000000000000000000000000000 lawfully 00000000000000000000000000000000 criminal-law 00000000000000000000000000000000 Propylene 00100000000000000000000000000000 overzealousness 00000000000000000000000000000000 Arguably 00100000000111000000001001110010 After-the-fact 00100000000000000000000000000000 undeniable 00000000000101010100110100010000 specificity 00000000000000000000000000000000 overgeneralization 00000000000000000000000000000000 industrial-gases 00000000000000000000000000000000 fixation 00000000000000000000000000000000 commission... 00000000000000000000000000000000 culpable 00000000000000000000000000000000 law-making 00000000000000000000000000000000 fact-bound 00000000000000000000000000000000 under-inclusion 00000000000000000000000000000000 overinclusion 00000000000000000000000000000000 RICO-forfeiture 01000000000000000000000000000000 one-sentence 00000000000000000000000000000000 criminalize 00000000000000000000000000000000 breaches 00000000000110111101100100101111 sweepingly 00000000000000000000000000000000 moralistic 00000000001000011100110100010000 line-drawing 00000000000000000000000000000000 openended 00000000000000000000000000000000 123.9 00000000000000000000000000000000 laboratory-services 00000000000000000000000000000000 taxlow 00000000000000000000000000000000 graphite 00000000000000000000000000000000 specialty-material 00000000000000000000000000000000 Samsung-Corning 01000000000000000000000000000000 antifreeze 00000000000000000000000000000000 11:13 00000000000000000000000000000000 60.25-point 00000000000000000000000000000000 Computer-guided 00100000000000000000000000000000 Nervous 00100000000100100111110000110010 Alisarda 00100000000000000000000000000000 Decliners 00100000000101111100101001110011 931 00000000000000000000000000000000 24.50 00000000000000000000000000000000 Ziebarth 00100000000000000000000000000000 buckling 00000000000000000000000000000000 expirations 00000000000000000000000000000000 Laux 00100000000000000000000000000000 lesser-developed-country 00000000000000000000000000000000 chemicals-industry 00000000000000000000000000000000 kickback 00000000000000000001100111001111 M.E. 01000000000000000000000000000000 341.16 00000000000000000000000000000000 188.89 00000000000000000000000000000000 worst-performing 00000000000000000000000000000000 trading-oriented 00000000000000000000000000000000 Sardinia 00100000000000000000000000000000 ducking 00000000000000000000000000000000 repaying 00000000000011110101011101000000 Dravo 00100000000110010101011100101000 Intertan 00100000000010000011101100101000 375.16 00000000000000000000000000000000 16,800,000 00000000000000000000000000000000 885,800 00000000000000000000000000000000 501,200 00000000000000000000000000000000 454,100 00000000000000000000000000000000 331,400 00000000000000000000000000000000 29,000 00000000000000000000000000000000 Satisfaction 00100000000111100100001110100111 ennumerated 00000000000000000000000000000000 LIBERTY 01000000000111111100100100100001 16.50 00000000000000000000000000000000 biases 00000000000000000000000000000000 demand... 00000000000000000000000000000000 Braitman 00100000000000000000000000000000 street... 00000000000000000000000000000000 discernible 00000000000000000000000000000000 rollovers 00000000000000000000000000000000 shortest 00000000000000000000000000000000 large-denomination 00000000000000000000000000000000 yearend 00000000000000000000000000000000 unwavering 00000000000000000000000000000000 Baily 00100000000000000000000000000000 IMF-guided 01000000000000000000000000000000 reschedulable 00000000000000000000000000000000 microeconomics 00000000000000000000000000000000 authorizations 00000000000000000000000000000000 quasi-governmental 00000000000000000000000000000000 shortchanged 00000000000000000000000000000000 burden-sharing 00000000000000000000000000000000 IMF-approved 01000000000000000000000000000000 Upping 00100000000000000000000000000000 Malpass 00100000000000000000000000000000 prearranged 00000000000110101011000110010000 applelike 00000000000000000000000000000000 Cinemax 00100000000000000000000000000000 Kagan 00101111111001010000110010001000 Carmel 00100000000101000111101001101000 mismeasurements 00000000000000000000000000000000 pay-television 00000000000000000000000000000000 Linking 00100011000010010000000000001010 Bratislava 00100000000000000000000000000000 deflators 00000000000000000000000000000000 ex-investment 00000000000000000000000000000000 309,500 00000000000000000000000000000000 estimators 00000000000000000000000000000000 condoms 00000000000110111001111001100011 uninfected 00000000000000000000000000000000 140.95 00000000000000000000000000000000 1.8435 00000000000000000000000000000000 nonbusiness 00000000000000000000000000000000 expedients 00000000000000000000000000000000 Goloven 00100000000000000000000000000000 foggy 00000000000000000000000000000000 currencny 00000000000000000000000000000000 bewildering 00000000000000000000000000000000 incessantly 00000000000000000000000000000000 142.55 00000000000000000000000000000000 142.25 00000000000000000000000000000000 1948-89 00000000000000000000000000000000 injects 00000000000000000000000000000000 finanicial 00000000000000000000000000000000 367.40 00000000000000000000000000000000 366.55 00000000000000000000000000000000 83,206 00000000000000000000000000000000 irrevocable 00000000000000000000000000000000 record-breaking 00000000000000000000000000000000 68-week 00000000000000000000000000000000 12.66 00000000000000000000000000000000 13.9 00000000000000000000000000000000 904,000 00000000000000000000000000000000 1962-63 00000000000000000000000000000000 Handy 00100000000011100100111010000000 Butter-Nut 01000000000000000000000000000000 Tender 00100000000000000000001100010000 Leaf 00100000000000001001110100100001 coffee-roasting 00000000000000000000000000000000 MACMILLAN 01000000000111111110101100101000 BLOEDEL 01000000000000100001101000101000 NEWSPAPERS 01000000000111001100110001100011 Highlander 00100000000000000000000000000000 investment-bank 00000000000000000000000000000000 flux 00000000000111110110000010100011 MicroGeneSys 01000000000000000000000000000000 VaxSyn 01000000000000000000000000000000 HIV-1 01000000000000000000000000000000 morsel 00000000000000000000000000000000 innoculating 00000000000000000000000000000000 thesis 00000000000111111000111101100111 amiss 00000000000000000000000000000000 numerator 00000000000000000000000000000000 RobertsCorp 01000000000000000000000000000000 8.483 00000000000000000000000000000000 8.1255 00000000000000000000000000000000 72-franc 00000000000000000000000000000000 whipsawing 00000000000000000000000000000000 10.16 00000000000000000000000000000000 polyvinyl 00000000000000000000000000000000 60.7 00000000000000000000000000000000 601.3 00000000000000000000000000000000 Polyvinyl 00100000000000000000000000000000 overtaken 00000000000000000000000000000000 PVC 01000000000000000000000000000000 vinyl-products 00000000000000000000000000000000 64.1 00000000000000000000000000000000 taper 00000000000000000000000000000000 49.125 00000000000000000000000000000000 Edzard 00100000000000000000000000000000 Morelli 00100000000000000000000000000000 Tribune-Democrat 01000000000000000000000000000000 ENDED 01000000000000000010010100110010 Spooked 00100000010110100001110000110010 delectable 00000000000000000000000000000000 zigzags 00000000000000000000000000000000 ORTEGA 01001111111101100000110010001000 316 00000000000000000000000000000000 Alistair 00100000000000000000000000000000 12.60 00000000000000000000000000000000 C-S 01000000000000000000000000000000 107,100 00000000000000000000000000000000 Leumi 00100000000000000000000000000000 probabilities 00000000000000000000000000000000 JAGRY 01000000000000000000000000000000 Luxury 00100000000011010000001010110000 44.9 00000000000000000000000000000000 Averae 00100000000000000000000000000000 Ordinary 00100000000000000001101000110000 182.9 00000000000000000000000000000000 11-a-share 00000000000000000000000000000000 electronic-measuring 00000000000000000000000000000000 Barret 00100000000000000000000000000000 9.482 00000000000000000000000000000000 7.567 00000000000000000000000000000000 Positive 00100000000000000100001010010000 120.6 00000000000000000000000000000000 626.3 00000000000000000000000000000000 outstrip 00000000000000000000000000000000 176.4 00000000000000000000000000000000 78.625 00000000000000000000000000000000 73.50 00000000000000000000000000000000 association... 00000000000000000000000000000000 reduced-instruction 00000000000000000000000000000000 RISC-based 01000000000000000000000000000000 supermainframe 00000000000000000000000000000000 generalpurpose 00000000000000000000000000000000 UAL'S 01000000000000000000000000000000 SKIDDED 01000000000000010001000100110010 then-senior 00000000000000000000000000000000 Cuddeford 00100000000000000000000000000000 214.54 00000000000000000000000000000000 3377.43 00000000000000000000000000000000 franc-denominated 00000000000000000000000000000000 129.97 00000000000000000000000000000000 0.0018 00000000000000000000000000000000 O'Rourke 01000000000000000000000000000000 melt-textured 00000000000000000000000000000000 62-a-share 00000000000000000000000000000000 GDL 01000000000000000000000000000000 Valparaiso 00100000000000000000000000000000 Geoffrie 00100000000000000000000000000000 101,000 00000000000000000000000000000000 selloff 00000000000000000000000000000000 perversion 00000000000000000000000000000000 wholesaling 00000000000000000000000000000000 130.1 00000000000000000000000000000000 322.7 00000000000000000000000000000000 124.5 00000000000000000000000000000000 newspaper-delivery 00000000000000000000000000000000 Walbrecher 00100000000000000000000000000000 Polsky 00100000000000000000000000000000 lymph 00000000000000000000000000000000 rearrangement 00000000000000000000000000000000 diagnosing 00000000000000000000000000000000 biopsies 00000000000000000000000000000000 Wyndham 00100000000000000000000000000000 six-year-old 00000000000000000000000000000000 Frucher 00100000000000000000000000000000 Diagnostic 00100000000010000010101010110000 MetWest 01000000000000000000000000000000 Tarzana 00100000000000000000000000000000 synergies 00000000000100110011111010100111 Beigel 00100000000000000000000000000000 Couch-potato 00100000000000000000000000000000 Clothes 00100000000110001111110101100011 Seahorse 00100000000000000000000000000000 ever-growing 00000000000000000000000000000000 Flaherty 00100000000000000000000000000000 zappers 00000000000000000000000000000000 Formed 00100000001011100000010000110010 weds 00000000000000000000000000000000 dewatering 00000000000000000000000000000000 1st 00000000000000000000000000000000 redial 00000000000000000000000000000000 Folcroft 00100000000000000000000000000000 Billing 00100000000001010010110001000000 click 00000000000000000000000000000000 Jovi 00100000000000000000000000000000 topical 00000000000011000111101011100001 900-interactive 00000000000000000000000000000000 Callers 00100000000000100110111000110011 MacLellan 01000000000000000000000000000000 punt 00000000000111001111100000001011 thanking 00000000000000000000000000000000 Jackets 00100000000001100111110101100011 On-Line 01000000000000000000000000000000 couponing 00000000000000000000000000000000 Agnelli-related 00100000000000000000000000000000 Peg 00100000101100111111110110110010 Someday 00100001010100000000001001110010 45.75 00000000000000000000000000000000 Montle 00100000000000000000000000000000 STRUCK 01000000001111001001001000110010 30-foot 00000000000000000000000000000000 8.467 00000000000000000000000000000000 Tarwhine 00100000000000000000000000000000 Psychiatric 00100000000000010001100000110000 parley 00000000000000000000000000000000 readmit 00000000000000000000000000000000 explusion 00000000000000000000000000000000 psychiatry 00000000000000000000000000000000 11.75-a-share 00000000000000000000000000000000 Galbani 00100000000000000000000000000000 diGenova 01000000000000000000000000000000 flag-burner 00000000000000000000000000000000 expel 00000000000000000000000000000000 Soviet-Israeli 01000000000000000000000000000000 95-37 00000000000000000000000000000000 abstentions 00000000000000000000000010111011 36.13 00000000000000000000000000000000 commandos 00000000000000000000000000000000 slayings 00000000000000000000000000000000 44.08 00000000000000000000000000000000 endangered-species 00000000000000000000000000000000 51.65 00000000000000000000000000000000 extraditions 00000000000000000000000000000000 Colombians 00100000000000010001011000110011 Tobruk 00100000000000000000000000000000 Slovenian 00100000000000000000000000000000 282.08 00000000000000000000000000000000 293.29 00000000000000000000000000000000 43.7 00000000000000000000000000000000 information-display 00000000000000000000000000000000 615,000 00000000000000000000000000000000 128.19 00000000000000000000000000000000 reformulation 00000000000000000000000000000000 Fuji-apple 00100000000000000000000000000000 TXO 01000000000000000000000000000000 ray 00001111111000000011010100001000 25,000-member 00000000000000000000000000000000 immigrant 00000000000100100010101000110000 25-point 00000000000000000000000000000000 downdraft 00000000000000000000000000000000 11:15 00000000000000000000000000000000 130.25 00000000000000000000000000000000 onepage 00000000000000000000000000000000 uncalled 00000000000000000000000000000000 39.31 00000000000000000000000000000000 47.46 00000000000000000000000000000000 inexcusable 00000000000000000000000000000000 DiLeo 01000000000000000000000000000000 quandary 00000000000000000000000000000000 Forstmann 00100000000111101010111000101000 re-emerge 00000000000000000000000000000000 46.02 00000000000000000000000000000000 106.2 00000000000000000000000000000000 55.59 00000000000000000000000000000000 stoned 00000000000000000000000000000000 entranced 00000000000000000000000000000000 gratitude 00000000000111111100011100111001 four-week 00000000000000000000000000000000 20-city 00000000000000000000000000000000 synthesizers 00000000000000000000000000000000 collaborators 00000000000110010011110000110011 spaceships 00000000000000000000000000000000 emperor 00000000000111100111111000000001 265.79 00000000000000000000000000000000 Softly 00100000000000000000000000000000 shaggy 00000000000000000000000000000000 variously 00000000000000000000000000000000 108.28 00000000000000000000000000000000 monophonic 00000000000000000000000000000000 hypnotic 00000000000000000000000000000000 tonal 00000000000000000000000000000000 unthreatening 00000000000000000000000000000000 unvaryingly 00000000000000000000000000000000 soporific 00000000000000000000000000000000 unflaggingly 00000000000000000000000000000000 117.94 00000000000000000000000000000000 unmelodic 00000000000000000000000000000000 E-Z 01000000000000000000000000000000 dictum 00000000000000000000000000000000 unabatingly 00000000000000000000000000000000 62.04 00000000000000000000000000000000 simplicities 00000000000000000000000000000000 octave 00000000000000000000000000000000 ragtime 00000000000000000000000000000000 chord 00000000000000000000000000000000 progressions 00000000000000000000000000000000 Opening 00100000000111101111100001110111 Glassworks 00100000000000000000000000000000 straying 00000000000000000000000000000000 octaves 00000000000000000000000000000000 65.53 00000000000000000000000000000000 pianistic 00000000000000000000000000000000 bravura 00000000000000000000000000000000 arpeggios 00000000000000000000000000000000 ticklish 00000000000000000000000000000000 Sutra 00100000000000000000000000000000 improvisatory 00000000000000000000000000000000 riff 00000000000000000000000000000000 modulate 00000000000000000000000000000000 filigree 00000000000000000000000000000000 Contrasts 00100000000000011011100000110010 Knee 00100000000111000101110000000001 interlude 00000000000000000000000000000000 Einstein 00101111111111101100000101001000 toccata 00000000000000000000000000000000 left-hand 00000000000000000000000000000000 Mice 00100000000111111001110101100011 crosses 00000110010110000011000000010010 resonant 00000000000000000000000000000000 leitmotif 00000000000000000000000000000000 indeterminate 00000000000000000000000000000000 charmingly 00000000000000000000000000000000 tellingly 00000000000000000000000000000000 Glasswork 00100000000000000000000000000000 Martyn 00100000000000000000000000000000 Divine 00100000001010100101110110110010 Lucinda 00100000000000000000000000000000 Childs 00100000000000000000000000000000 Metamorphosis 00100000000000000000000000000000 Errol 00100000000000000000000000000000 eeriness 00000000000000000000000000000000 two-note 00000000000000000000000000000000 Served 00100000000111011110001000110010 Admirers 00100000000010111010000010110011 Kostelanetz 00100000000000000000000000000000 encyclopedic 00000000000000000000000000000000 weighty 00000000000000000000000000000000 Well-Tempered 01000000000000000000000000000000 Clavier 00100000000000000000000000000000 claustrophobic 00000000000000000000000000000000 315.12 00000000000000000000000000000000 overlays 00000000000000000000000000000000 bombast 00000000000000000000000000000000 yearn 00000000000111101010000110110010 astringency 00000000000000000000000000000000 neoclassical 00000000000000000000000000000000 156.12 00000000000000000000000000000000 171.04 00000000000000000000000000000000 Berg 00101111111100000010000010001000 Webern 00100000000000000000000000000000 retrospect 00000000000111111111011011010111 concision 00000000000000000000000000000000 Spiegelman 00100000000000000000000000000000 forbidding-looking 00000000000000000000000000000000 unrecoverable 00000000000000000000000000000000 212.1 00000000000000000000000000000000 47.9 00000000000000000000000000000000 5.17 00000000000000000000000000000000 beatific 00000000000000000000000000000000 excursus 00000000000000000000000000000000 informs 00000000000000000000000000000000 Congress's 00100000000000000000000000000000 Buccaneers 00100000000000000000000000000000 buttresses 00000000000000000000000000000000 54.51 00000000000000000000000000000000 55.10 00000000000000000000000000000000 facetiously 00000000000000000000000000000000 tippling 00000000000000000000000000000000 cower 00000000000000000000000000000000 hairyknuckled 00000000000000000000000000000000 McManus 01000000000000000000000000000000 Surrey 00100000000000000000000000000000 high-toned 00000000000000000000000000000000 topless 00000000000000000000000000000000 impugn 00000000000000000000000000000000 101-year-old 00000000000000000000000000000000 rested 00000000000000000000000000000000 hard-to-fault 00000000000000000000000000000000 283 00000000000000000000000000000000 hullabaloo 00000000000000000000000000000000 quirks 00000000000000000000000000000000 frequency,`` 00000000000000000000000000000000 lumping 00000000000000000000000000000000 smaller-than-average 00000000000000000000000000000000 103.98 00000000000000000000000000000000 352.7 00000000000000000000000000000000 Sainte-Chapelle 01000000000000000000000000000000 ant 00000000000000000000000000000000 contemporize 00000000000000000000000000000000 Ad-Unit 01000000000000000000000000000000 Boulet 00100000000000000000000000000000 Dru 00100000000000000000000000000000 Dupuy 00100000000000000000000000000000 107.87 00000000000000000000000000000000 WCRS-Eurocom 01000000000000000000000000000000 delicacy 00000000000000000000000000000000 Northlich 00100000000000000000000000000000 Stolley 00100000000000000000000000000000 LaWarre 01000000000000000000000000000000 foodservice 00000000000000000000000000000000 Novick 00100000000000000000000000000000 infuriate 00000000000000000000000000000000 501.61 00000000000000000000000000000000 486.1 00000000000000000000000000000000 reauthorize 00000000000000000000000000000000 dual-trading 00000000000000000000000000000000 tell... 00000000000000000000000000000000 246.60 00000000000000000000000000000000 Posh 00100000001000111000001000110000 Showrooms 00100000000111111110110000001001 Specifications 00100000000111010111011100100011 ashtrays 00000000000000000000000000000000 Ferron 00100000000000000000000000000000 Dictation 00100000000000000000000000000000 Device 00100000000111101100000011100111 Saga 00100000000111001100101101100111 Lesson 00100000000111010111111101100111 DON'T 01000000000000000000000000000000 248.91 00000000000000000000000000000000 16.02 00000000000000000000000000000000 Blocked 00100000010000010100010000110010 paperclip 00000000000000000000000000000000 researches 00000000001011011101000000010010 micro 00000000000000010010011010110000 abandonment 00000000000111111110001000001111 Summerland 00100000000000000000000000000000 mirrored 00000000011100000001010000110010 follower 00000000000000000000000000000000 leading-edge 00000000000000000000000000000000 innovator 00000000000111000011111001100111 TRIAD 01000000000000000001100110101000 Conrades 00100000000000000000000000000000 Branching 00100000000000000000000000000000 DAY 01000000000111111111111000010111 sycamore 00000000000000000000000000000000 11.11 00000000000000000000000000000000 Steamship 00100000000000000000000000000000 steel-toothed 00000000000000000000000000000000 underside 00000000000000000000000000000000 four-inch 00000000000000000000000000000000 prongs 00000000000000000000000000000000 wonderbars 00000000000000000000000000000000 Blaggs 00100000000000000000000000000000 Parkersburg 00100000000000000000000000000000 Stoner 00100000000000000000000000000000 Temper 00100000000111000110110010110111 STUBBED 01000000000000000000000000000000 bruised 00000000000100010101101001000000 shins 00000000000000000000000000000000 Geste 00100000000000000000000000000000 Goshen 00100000000000000000000000000000 Bedfellows 00100000000000000000000000000000 recessed 00000000000000000000000000000000 Scarsdale 00100000000000000000000000000000 NavforJapan 01000000000000000000000000000000 Montpelier 00100000000000000000000000000000 1941 00000000000000000000000000000000 babel 00000000000000000000000000000000 co-edits 00000000000000000000000000000000 shrines 00000000000000000000000000000000 relics 00000000000000000000000000000000 Forrestal 00100000000000000000000000000000 moaning 00000000000000000000000000000000 frogmen 00000000000000000000000000000000 meanest 00000000000000000000000000000000 ayatollah 00000000000110011011111100001000 Deployment 00100000000111101011111101001111 fooled 00000000110010000001110000110010 81.8 00000000000000000000000000000000 deployable 00000000000000000000000000000000 shoelaces 00000000000000000000000000000000 C-5B 01000000000000000000000000000000 KC-10 01000000000000000000000000000000 prepositioning 00000000000000000000000000000000 ruffled 00000000001011100101101001000000 Zagros 00100000000000000000000000000000 feathers 00000000000000000000000000000000 asses 00000000000000000000000000000000 zilch 00000000000000000000000000000000 baksheesh 00000000000000000000000000000000 potentates 00000000000000000000000000000000 unambiguous 00000000000000000000000000000000 silted 00000000000000000000000000000000 1,244 00000000000000000000000000000000 jillions 00000000000000000000000000000000 land-based 00000000000000000000000000000000 admiral 00000000000000100010101100100101 convoys 00000000000000000000000000000000 Questions 00100000000101101100100010101111 Caleb 00100000000000000000000000000000 clanking 00000000000000000000000000000000 Marley 00100000000000000000000000000000 despots 00000000000000000000000000000000 600-ship 00000000000000000000000000000000 crawling 00000000000000000000000000000000 banshees 00000000000000000000000000000000 howling 00000000000110110111000001000000 Gives 00100000000110000001000000010010 willies 00000000000000000000000000000000 -offer 00000000000000000000000000000000 grander 00000000000000000000000000000000 Anointing 00100000000000000000000000000000 baroque 00000000000000000000000000000000 Mattia 00100000000000000000000000000000 go-go 00000000000000000000000000000000 Neapolitan 00100000000000000000000000000000 pre-18th-century 00000000000000000000000000000000 I.M. 01000000000000000000000000000000 Pei 00100000000000000000000000000000 plucked 00000000000000000000000000000000 dispensation 00000000000000000000000000000000 Gorce 00100000000000000000000000000000 fling 00000000000000000000000000000000 masterpieces 00000000000000000000000000000000 Chevrolets 00100000000000000000000000000000 goldbanded 00000000000000000000000000000000 Moritz 00100000000000000000000000000000 hauteur 00000000000000000000000000000000 50-year-old 00000000000000000000000000000000 chain-smoking 00000000000000000000000000000000 dynamo 00000000000000000000000000000000 Opel 00100000000000000000000000000000 Paintings 00100000000001101101110101100011 Divesting 00100000000000000000000000000000 Embittered 00100000011111100001110000110010 epitomize 00000000000000000000000000000000 ilk 00000000000000000000000000000000 laments 00000000000111111110011111000010 Wildenstein 00100000000000000000000000000000 jurists 00000000000000000000000000000000 freespender 00000000000000000000000000000000 Math 00100000000011011111001101100001 Jansz. 00100000000000000000000000000000 Uyl 00100000000000000000000000000000 343,333 00000000000000000000000000000000 gloated 00000000000000000000000000000000 phoning 00000000000000000000000000000000 gloating 00000000000000000000000000000000 docket 00000000000111101110011001000101 sociological 00000000000000000000000000000000 Wilderness 00100000000000100010110000000001 Battista 00100000000000000000000000000000 Tiepolo 00100000000000000000000000000000 1744 00000000000000000000000000000000 strove 00000000000000000000000000000000 cornucopia 00000000000000000000000000000000 insubstantial 00000000000000000000000000000000 -33 00000000000000000000000000000000 Antiques 00100000000000000000000000000000 Medicis 00100000000000000000000000000000 thrift-institution 00000000000000000000000000000000 puzzlement 00000000000000000000000000000000 obliquely 00000000000000000000000000000000 Govern 00100000000010011110101110110010 storing 00000000000001000111111101000000 dehumidified 00000000000000000000000000000000 safekeeping 00000000000000000000000000000000 below-market 00000000000000000000000000000000 lavished 00000000000000000000000000000000 provenance 00000000000000000000000000000000 Wiener 00100000000000000000000000000000 Appraisers 00100000000000000000000000000000 modish 00000000000000000000000000000000 hyperactive 00000000000010011101000010010000 contemptuous 00000000011001101011110000110010 Impressionist 00100000000000011110101100100001 downstream 00000000000000001101011010100001 sleeper 00000000000101101011100000100001 Shorter 00100000000000100100001111000000 artworks 00000000000000000000000000000000 impulsively 00000000000000000000000000000000 Knuettel 00100000000000000000000000000000 prudently 00000000000000000000000000000000 art-world 00000000000000000000000000000000 Theran 00100000000000000000000000000000 pawning 00000000000000000000000000000000 pupil 00000000000000000000000000000000 fine-arts 00000000000000000000000000000000 appraiser 00000000000000000000000000000000 Frequently 00100000000111100000001001110010 quarter-of-a-century 00000000000000000000000000000000 Zimet 00100000000000000000000000000000 Davids 00100000000000000000000000000000 Heem 00100000000000000000000000000000 opulence 00000000000000000000000000000000 Gatsby 00100000000000000000000000000000 Brinkman 00100000000000000000000000000000 busies 00000000000000000000000000000000 tuxedo 00000000000000000000000000000000 dabs 00000000000000000000000000000000 brim 00000000000000000000000000000000 inlay 00000000000000000000000000000000 hardwood 00000000000000000000000000000000 oriental 00000000000001000000001000110000 top-heavy 00000000000000000000000000000000 leatherbound 00000000000000000000000000000000 implores 00000000000000000000000000000000 splendor 00000000000000000000000000000000 return. 00000000000000000000000000000000 CREATIVE 01000000000001001010000000110000 conglomerates 00000000000111111111110001100011 Principles 00100000000111111101011100100011 pupils 00000000000101100001011100110011 Accountants 00100000000111100110111000110011 seven-member 00000000000000000000000000000000 permissive 00000000000011110110010010010000 unequivocally 00000000000000000000000000000000 overrule 00000000000000000000000000000000 Keepers 00100000000000000000000000000000 filberts 00000000000000000000000000000000 rile 00000000000000000000000000000000 disengage 00000000000000000000000000000000 353,500 00000000000000000000000000000000 405,000 00000000000000000000000000000000 228,000 00000000000000000000000000000000 demagogic 00000000000000000000000000000000 256,000 00000000000000000000000000000000 storability 00000000000000000000000000000000 Locally 00100000001100100001001001110010 Simulation 00100000000000001101100001100001 Edita 00100000000000000000000000000000 simulator 00000000000000000000000000000000 incisions 00000000000000000000000000000000 sonar 00000000000000000000000000000000 UnionFed 01000000000000000000000000000000 scrutinize 00000000000001010111111110110010 truant 00000000000000000000000000000000 Parental 00100000000010100101000000110000 48.2 00000000000000000000000000000000 aircraft-electronics 00000000000000000000000000000000 airborne-radar 00000000000000000000000000000000 123.7 00000000000000000000000000000000 pre-kindergarten 00000000000000000000000000000000 137.2 00000000000000000000000000000000 bikini 00000000000111101000110000000001 Vahid 00100000000000000000000000000000 Fathi 00100000000000000000000000000000 Prescott 00100000000111011011110000101000 Turben 00101111111111111101110001001000 child-development 00000000000000000000000000000000 Bourke 00100000000000000000000000000000 329,600 00000000000000000000000000000000 55.375 00000000000000000000000000000000 strikeout 00000000000000000000000000000000 7.422 00000000000000000000000000000000 megadrop 00000000000000000000000000000000 Weakening 00100000000001000111010001000000 shred 00000000000000000000000000000000 pocketing 00000000000000000000000000000000 2100 00000000000000000000000000000000 Generalizations 00100000000000000000000000000000 LeFrere 01000000000000000000000000000000 cave-in 00000000000000000000000000000000 psyche 00000000000111101000011000100001 reneging 00000000000000000000000000000000 fluff 00000000000000000000000000000000 overreaction 00000000000000000000000000000000 Sakowitz 00100000000000000000000000000000 greater-fool 00000000000000000000000000000000 schoolteachers 00000000000000000000000000000000 reticent 00000000000000000000000000000000 Financo 00100000000000000000000000000000 self-definition 00000000000000000000000000000000 irksome 00000000000000000000000000000000 hone 00000000000000000000000000000000 pomological 00000000000000000000000000000000 EQUITY 01000000000000000000011010100001 3-0 00000000000000000000000000000000 capricious 00000000000000000000000000000000 prejudicial 00000000000001110110010010010000 MEDUSA 01000000000000000000000000000000 INCOME 01000000000111111111010101000111 REALTY 01000000000010001010010010110000 12-cent-a-share 00000000000000000000000000000000 rebuilt 00000000111001010100010000110010 commotion 00000000000000000000000000000000 188.5 00000000000000000000000000000000 Hillman 00100000000000000000000000000000 Panny 00100000000000000000000000000000 illusions 00000000000000000000000000000000 extravagance 00000000000000000000000000000000 Gadsden 00100000000000000000000000000000 convenience-food 00000000000000000000000000000000 Bakery 00100000000100011011111010110000 1,843,000 00000000000000000000000000000000 1,802,000 00000000000000000000000000000000 Selwyn 00100000000000000000000000000000 double-crossed 00000000000000000000000000000000 Ermanno 00100000000000000000000000000000 Pascutto 00100000000000000000000000000000 potentialities 00000000000000000000000000000000 compiler 00000000000000000000000000000000 Larchmont 00100000000000000000000000000000 1,200-year-old 00000000000000000000000000000000 exposition 00000000000000000000000000000000 Pierluigi 00100000000000000000000000000000 Beggiato 00100000000000000000000000000000 hoteliers 00000000000000000000000000000000 expo 00000000000000000000000000000000 Krakow 00100000000000000000000000000000 Bogdan 00100000000000000000000000000000 Gumkowski 00100000000000000000000000000000 LOT 01000000000111111111111001111111 Orbis 00100000000000000000000000000000 Trans-Mediterranean 01000000000000000000000000000000 9,500 00000000000000000000000000000000 NUM 01000000000000000000000000000000 7,800 00000000000000000000000000000000 35-nation 00000000000000000000000000000000 Sofia 00100000000000000000000000000000 fouling 00000000000000000000000000000000 latent 00000000001110011010000000110000 Klaus 00100000000000000000000000000000 Toepfer 00100000000000000000000000000000 Estonian-language 00100000000000000000000000000000 Hasse 00100000000000000000000000000000 Olsson 00101111000011001100000010001000 self-expression 00000000000000000000000000000000 Estonia 00100000000000000000000000000000 Bonniers 00100000000000000000000000000000 Estonian 00100000000000000000000000000000 equated 00000000000000000000000000000000 under-secretary 00000000000000000000000000000000 half-way 00000000000000000000000000000000 Xiaoqing 00100000000000000000000000000000 4,555 00000000000000000000000000000000 Shandong 00100000000000000000000000000000 urgent 00000000000001000001110100010000 Potala 00100000000000000000000000000000 Grocery 00100000000000011101010000110000 spices 00000000000000000000000000000000 seasonings 00000000000000000000000000000000 Erskin 00100000000000000000000000000000 1,035,000 00000000000000000000000000000000 Seifert 00100000000000000000000000000000 Valu 00100000000001001100010010110101 Tu 00100000000000000000000000000000 Pyo 00100000000000000000000000000000 perishables 00000000000000000000000000000000 antidote 00000000000000000000000000000000 Yoon 00100000000000000000000000000000 Kwon 00100000000000000000000000000000 Kwang 00100000000000000000000000000000 Ok 00100000000000000000000000000000 Kyong 00100000000000000000000000000000 LeMans 01000000000000000000000000000000 jaunts 00000000000000000000000000000000 construction-oriented 00000000000000000000000000000000 near-unanimous 00000000000000000000000000000000 Jeep-like 00100000000000000000000000000000 Korando 00100000000000000000000000000000 blasphemous 00000000000000000000000000000000 scrappy 00000000000000000000000000000000 No.3 00100000000000000000000000000000 peppy 00000000000000000000000000000000 Festiva 00100000000000000000000000000000 5,700 00000000000000000000000000000000 econobox 00000000000000000000000000000000 lowest-priced 00000000000000000000000000000000 Loans 00100000000111101111101111100011 Lemans 00100000000000000000000000000000 auto-making 00000000000000000000000000000000 Bulseco 00100000000000000000000000000000 Robie 00100000000000000000000000000000 metaphysical 00000000000000000000000000000000 bailing 00000000000111111000100001000000 CVB 01000000000000000000000000000000 Tryon 00100000000000000000000000000000 SOFT 01000000000010100010101010110000 CONTACT 01000000000110011110110000100111 LENSES 01000000000001100101111001100011 WON 01000000001111101001010000110010 openers 00000000000000000000000000000000 cornflake-size 00000000000000000000000000000000 39,300 00000000000000000000000000000000 softies 00000000000000000000000000000000 sublicense 00000000000000000000000000000000 Wichterle 00100000000000000000000000000000 bailiff 00000000000000000000000000000000 64,000 00000000000000000000000000000000 bootlegged 00000000000000000000000000000000 unlicensed 00000000000000000000000000000000 258,000 00000000000000000000000000000000 wree 00000000000000000000000000000000 accesory 00000000000000000000000000000000 Husky 00100000000111110000011000101000 313,800 00000000000000000000000000000000 Martek 00100000000000000000000000000000 Monster 00100000000111100101010000000001 office-supplies 00000000000000000000000000000000 discounter 00000000000000000000000000000000 Krasnow 00100000000000000000000000000000 nerve-racking 00000000000000000000000000000000 Hand-holding 00100000000000000000000000000000 Officers 00100000000111101110101010110011 79-cents-a-pound 00000000000000000000000000000000 Suncor 00100000000100101001111000101000 Kline 00100000000000000000000000000000 Hadhazy 00100000000000000000000000000000 Econometric 00100000000000101011000000110000 hesitating 00000000000000000000000000000000 Behrendt 00100000000000000000000000000000 Debt-free 00100000000000000000000000000000 computer-products 00000000000000000000000000000000 816,000 00000000000000000000000000000000 Delayed 00100000010001010100010000110010 Anctil 00100000000000000000000000000000 Stratus 00100000000111001100100100101000 mutts 00000000000000000000000000000000 non-event 00000000000000000000000000000000 Bollinger 00100000000000000000000000000000 Lett 00100000000000000000000000000000 Wetzel 00100000000000000000000000000000 income-producing 00000000000000000000000000000000 36.2 00000000000000000000000000000000 41.1 00000000000000000000000000000000 117.2 00000000000000000000000000000000 6.02 00000000000000000000000000000000 6.69 00000000000000000000000000000000 26.02 00000000000000000000000000000000 Reda 00100000000000000000000000000000 Pump 00100000001010110110010110110010 Oilwell 00100000000000000000000000000000 802 00000000000000000000000000000000 791 00000000000000000000000000000000 passenger-restraint 00000000000000000000000000000000 threefold 00000000000000000000000000000000 3.22 00000000000000000000000000000000 tragicomic 00000000000000000000000000000000 monologue 00000000000000000000000000000000 unheroic 00000000000000000000000000000000 self-deceived 00000000000000000000000000000000 458.32 00000000000000000000000000000000 sixties 00000000000110011100110000000001 Britannia 00100000000000000000000000000000 Kazuo 00100000000000000000000000000000 457.52 00000000000000000000000000000000 4.58 00000000000000000000000000000000 homage 00000000000000000000000000000000 morals 00000000000110010111110010100111 snobbery 00000000000000000000000000000000 blindness 00000000000000000000000000000000 role-playing 00000000000000000000000000000000 locutions 00000000000000000000000000000000 Darlington 00100000000000000000000000000000 mulls 00000000000000000000000000000000 McClements 01000000000000000000000000000000 pious 00000000000000000000000000000000 cant 00000000000000000000000000000000 subverts 00000000000000000000000000000000 dutiful 00000000000000000000000000000000 conflation 00000000000000000000000000000000 realms 00000000000000000000000000000000 467.22 00000000000000000000000000000000 crushes 00000000000000000000000000000000 Oxfordshire 00100000000000000000000000000000 Cornwall 00100000000000000000000000000000 Ate 00100000000111011011000000010010 self-portrait 00000000000000000000000000000000 credo 00000000000000000000000000000000 immodest 00000000000000000000000000000000 adjective 00000000000000000000000000000000 calmness 00000000000000000000000000000000 Magnus 00100000000000000000000000000000 demonstrativeness 00000000000000000000000000000000 ill-mannered 00000000000000000000000000000000 banter 00000000000000000000000000000000 comically 00000000000000000000000000000000 crucially 00000000000000000000000000000000 inhabits 00000000000000000000000000000000 command-and-control 00000000000000000000000000000000 butlers 00000000000000000000000000000000 pantry 00000000000000000000000000000000 Versailles 00100000000000000000000000000000 39-cents-a-pound 00000000000000000000000000000000 72-yearold 00000000000000000000000000000000 sorrow 00000000000000000000000000000000 grotesque 00000000000000000000000000000000 repellent 00000000000000000000000000000000 fallible 00000000000000000000000000000000 reciprocity 00000000000111110011011000111001 abundantly 00000000000000000000000000000000 E.M. 01000000000000000000000000000000 aplomb 00000000000000000000000000000000 filial 00000000000000000000000000000000 Democratization 00100000000111100101110010100111 anti-Semitism 01000000000000000000000000000000 overbreadth 00000000000000000000000000000000 impatience 00000000000100101010110000100111 least-cost 00000000000000000000000000000000 problematics 00000000000000000000000000000000 embodies 00000000000000000000000000000000 hereafter 00000000000000000000000000000000 seashore 00000000000000000000000000000000 lordship 00000000000000000000000000000000 quota-trained 00000000000000000000000000000000 rueful 00000000000000000000000000000000 Minerva 00100000000000000000000000000000 virtuosity 00000000000000000000000000000000 movingly 00000000000000000000000000000000 Locke 00101111111110110001000010001000 mow 00000000000000000000000000000000 pricier 00000000000000000000000000000000 Waukesha 00100000000000000000000000000000 AGA 01000000000000000000000000000000 price-based 00000000000000000000000000000000 Stanislav 00100000000000000000000000000000 quantity-based 00000000000000000000000000000000 tastier 00000000000000000000000000000000 Bailiffs 00100000000000000000000000000000 minimized 00000000000000000000000000000000 Boeings 00100000000000000000000000000000 hounded 00000000000000000000000000000000 Least-cost 00100000000000000000000000000000 Soviet-built 00100000000000000000000000000000 Tupolev 00100000000000000000000000000000 204s 00000000000000000000000000000000 Unlikely 00100000000111100101011000110010 spunky 00000000000110110011000010010000 crew-rest 00000000000000000000000000000000 Tankers 00100000000110101110100000110011 Latvian 00100000000000000000000000000000 Ventspils 00100000000000000000000000000000 gas-guzzling 00000000000000000000000000000000 marketization 00000000000000000000000000000000 bartered 00000000000000000000000000000000 resells 00000000000000000000000000000000 Sheremetyevo 00100000000000000000000000000000 Duty-free 00100000000000000000000000000000 Pulkova 00100000000000000000000000000000 Soviet-Finnish 01000000000000000000000000000000 Tashkent 00100000000000000000000000000000 Sochi 00100000000000000000000000000000 computer-assembly 00000000000000000000000000000000 Georgian 00100000000000000000000000000000 Tbilisi 00100000000000000000000000000000 Market-based 00100000000000000000000000000000 w*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x* 00000000000000000000000000000000 York-Moscow 01000000000000000000000000000000 578 00000000000000000000000000000000 Raisa 00100000000000000000000000000000 Haughey 00101111111011010000000010001000 landfall 00000000000000000000000000000000 thirsty 00000000000000000000000000000000 Advances 00100000000111101001111000100011 hop 00000000000101101011001010110111 Moscow-Shannon 01000000000000000000000000000000 ferrying 00000000000000000000000000000000 blarney 00000000000000000000000000000000 high-standard 00000000000000000000000000000000 Equipped 00100000000111110001100000110010 beams 00000000000001001111000000010010 once-staid 00000000000000000000000000000000 manifestos 00000000000000000000000000000000 debt-for-environment 00000000000000000000000000000000 Eager 00100000000111101000011000110010 direct-steelmaking 00000000000000000000000000000000 steelmaking 00000000000000100000011010110000 continously 00000000000000000000000000000000 60.9 00000000000000000000000000000000 39.6 00000000000000000000000000000000 suffice 00000000000000010111010110110010 Darth 00100000000000000000000000000000 Vadar 00100000000000000000000000000000 Crawfordsville 00100000000000000000000000000000 40-million-ton-a-year 00000000000000000000000000000000 pollution-reduction 00000000000000000000000000000000 high-profit 00000000000000000000000000000000 harassed 00000000011100000001110000110010 management-research 00000000000000000000000000000000 Corey 00100000000000000000000000000000 Cementing 00100000000000000000000000000000 502,000 00000000000000000000000000000000 redesigning 00000000000000000000000000000000 aluminum-makers 00000000000000000000000000000000 energy-efficient 00000000000000000000000000000000 suburbia 00000000000000000000000000000000 steel-hungry 00000000000000000000000000000000 offsets 00000000000000000000000000000000 differentiate 00000000001101101111001110110010 higher-profit 00000000000000000000000000000000 capital-improvement 00000000000000000000000000000000 electrogalvanizing 00000000000000000000000000000000 QE 01000000000000000000000000000000 lifeboat 00000000000000000000000000000000 Rim 00100000000011000111110110101000 Nucor-like 00100000000000000000000000000000 Projected 00100000000000000101001001000000 reforestation 00000000000000000000000000000000 Disputada 00100000000000000000000000000000 slog 00000000000000000000000000000000 panning 00000000000000000000000000000000 Ellman 00100000000000000000000000000000 75-day 00000000000000000000000000000000 Calvert 00100000000000000000000000000000 plotted 00000000000100011000110000110010 Labe 00100000000000000000000000000000 distributorship 00000000000000000000000000000000 bullied 00000000000000000000000000000000 Kayton 00100000000000000000000000000000 lost-profits 00000000000000000000000000000000 acidified 00000000011111100101101001000000 Testimony 00100000000111101101101000100011 877 00000000000000000000000000000000 15-cents-a-share 00000000000000000000000000000000 14.31 00000000000000000000000000000000 computes 00000000000000000000000000000000 Djurdjevic 00100000000000000000000000000000 Annex 00100000000000000000000000000000 Bardagy 00100000000000000000000000000000 Comdisco 00100000000000000000000000000000 doubtless 00000000000000000000000000000000 3.17 00000000000000000000000000000000 39.68 00000000000000000000000000000000 unifier 00000000000000000000000000000000 muscled 00000000000000000000000000000000 Darrell 00100000000000000000000000000000 57.125 00000000000000000000000000000000 bottler 00000000000110110011100000100001 soils 00000000000000000000000000000000 Snack-food 00100000000000000000000000000000 Same-store 00100000000000000000000000000000 price-value 00000000000000000000000000000000 tacos 00000000000000000000000000000000 store-sales 00000000000000000000000000000000 Four-fifths 00100000000000000000000000000000 grilled-chicken 00000000000000000000000000000000 extorted 00000000000000000000000000000000 technical-services 00000000000000000000000000000000 businesswoman 00000000000000000000000000000000 B.B. 01000000000000000000000000000000 80-page 00000000000000000000000000000000 provincially 00000000000000000000000000000000 nitrogen 00000000000110001100111111001001 lowest-cost 00000000000000000000000000000000 freshness 00000000000111011001110010100111 Norms 00100000000101010011011100100011 Fosset 00100000000000000000000000000000 woodchucks 00000000000000000000000000000000 lewdness 00000000000000000000000000000000 watchman 00000000000000000000000000000000 OCC 01000000000000000000000000000000 Sabina 00100000000000000000000000000000 Bochniarz 00100000000000000000000000000000 purrs 00000000000000000000000000000000 bustle 00000000000000000000000000000000 decadent 00000000000000000000000000000000 infiltrating 00000000000000000000000000000000 sneak 00000000100010010110010110110010 therapists 00000000000000000000000000000000 upper-level 00000000000000000000000000000000 rubfests 00000000000000000000000000000000 Zbigniew 00100000000000000000000000000000 rubdowns 00000000000000000000000000000000 dimly 00000000000011000111001001110010 stressed-out 00000000000000000000000000000000 clothed 00000000000000000000000000000000 J.F. 01000000000000000000000000000000 O'Reilly 01000000000000000000000000000000 swears 00000000000000000000000000000000 balm 00000000000000000000000000000000 532 00000000000000000000000000000000 kneading 00000000000000000000000000000000 lightheaded 00000000000000000000000000000000 Minnie 00100000000000000000000000000000 Morey 00100000000000000000000000000000 degradation 00000000001001100110011010100111 degraded 00000000000000000000000000000000 plies 00000000000000000000000000000000 grumbled 00000000000000000000000000000000 Mechanisms 00100000000111111110011100100011 Czechs 00100000000000000000000000000000 bodyworkers 00000000000000000000000000000000 reinvigoration 00000000000000000000000000000000 chaste 00000000000000000000000000000000 Harms 00100000000000000000000000000000 Hungarians 00100000000000000110000110110011 Ecological 00100000000101011000000000110000 unbeknownst 00000000000000000000000000000000 escorts 00000000000111100101100110001001 coaxing 00000000000000000000000000000000 Silesia 00100000000000000000000000000000 hippie 00000000000000000000000000000000 democratize 00000000000000000000000000000000 touch-starved 00000000000000000000000000000000 straddling 00000000000000000000000000000000 recliner 00000000000000000000000000000000 padding 00000000000000000000000000000000 odd-looking 00000000000000000000000000000000 contraption 00000000000000000000000000000000 Inquisition 00100000000000000000000000000000 On-Site 01000000000000000000000000000000 30.9 00000000000000000000000000000000 massaging 00000000000000000000000000000000 natural-foods 00000000000000000000000000000000 Paramedics 00100000000000000000000000000000 injustices 00000000000000000000000000000000 Aldridge 00100000000000000000000000000000 Whole 00100000000000000001100011010000 swearing-in 00000000000000000000000000000000 post-June 01000000000000000000000000000000 property-sector 00000000000000000000000000000000 32-story 00000000000000000000000000000000 Shui 00100000000000000000000000000000 guarantor 00000000000000000000000000000000 matured 00000000000000000000000000000000 loan-management 00000000000000000000000000000000 Creditors 00100000000111111111010000110011 domineering 00000000000000000000000000000000 13.63 00000000000000000000000000000000 scowls 00000000000000000000000000000000 192 00000000000000000000000000000000 4.40 00000000000000000000000000000000 165.1 00000000000000000000000000000000 Six-year-old 00100000000000000000000000000000 Margo 00101111111001000101100010011000 161.3 00000000000000000000000000000000 Hood 00100000010111101110000000001000 hypermarkets 00000000000000000000000000000000 warehouse-type 00000000000000000000000000000000 Waldenbooks 00100000000000000000000000000000 Mountains 00100000000111111101110101100011 4.54 00000000000000000000000000000000 Stations 00100000000111101011110100001001 Chaseman 00100000000000000000000000000000 electronic-data 00000000000000000000000000000000 WayMar 01000000000000000000000000000000 Quotrons 00100000000000000000000000000000 foul-up 00000000000000000000000000000000 annoying 00000000000000000000000000000000 11:08 00000000000000000000000000000000 324.75 00000000000000000000000000000000 224.75 00000000000000000000000000000000 blooper 00000000000000000000000000000000 blunders 00000000000000000000000000000000 newswire 00000000000000000000000000000000 layoff 00000000000111110101001101001111 Literally 00100001001001000000001001110010 Machelle 00100000000000000000000000000000 cuff 00000000000000000000000000000000 foothills 00000000000000000000000000000000 walloping 00000000000000000000000000000000 unawares 00000000000000000000000000000000 punchers 00000000000000000000000000000000 pummeling 00000000000000000000000000000000 swat 00000000000000100100101100100001 disabling 00000000000000000000000000000000 Guys 00100000000111101110000100110011 minting 00000000000000000000000000000000 Legittino 00100000000000000000000000000000 fractions 00000000000000000000000000000000 323.85 00000000000000000000000000000000 170.6 00000000000000000000000000000000 15.65 00000000000000000000000000000000 17.7 00000000000000000000000000000000 bragging 00000000000000000000000000000000 railbikes 00000000000000000000000000000000 Duracell 00100000000000000000000000000000 appliance-controls 00000000000000000000000000000000 commercial-switch 00000000000000000000000000000000 stratified 00000000000000000000000000000000 untradeable 00000000000000000000000000000000 Gypsum 00100000000110111010010010110000 M.D.C. 01000000000000000000000000000000 Micropolis 00100000000000000000000000000000 tonic 00000000000000000000000000000000 grenades 00000000000000000000000000000000 Whipsawed 00100000000000000000000000000000 heartstopping 00000000000000000000000000000000 376 00000000000000000000000000000000 473.29 00000000000000000000000000000000 electronic-publishing 00000000000000000000000000000000 16.56 00000000000000000000000000000000 truck-fleet 00000000000000000000000000000000 caveats 00000000000000000000000000000000 nest-egg 00000000000000000000000000000000 Mar 00100000000000000000000000000000 Wedbush 00100000000000000000000000000000 out-trade 00000000000000000000000000000000 out-smart 00000000000000000000000000000000 dollar-cost 00000000000000000000000000000000 Actual 00100000000000000100000100010000 Gehl 00100000000000000000000000000000 1,450,635 00000000000000000000000000000000 549,365 00000000000000000000000000000000 3,111,000 00000000000000000000000000000000 2,425,000 00000000000000000000000000000000 Inefficient-Market 01000000000000000000000000000000 nosediving 00000000000000000000000000000000 befitting 00000000000000000000000000000000 Waltana 00100000000000000000000000000000 107.50 00000000000000000000000000000000 big-league 00000000000000000000000000000000 axles 00000000000000000000000000000000 friendlier 00000000000000000000000000000000 78.50 00000000000000000000000000000000 75.625 00000000000000000000000000000000 87.375 00000000000000000000000000000000 Neidl 00100000000000000000000000000000 Mattis 00100000000000000000000000000000 gracious 00000000000000000000000000000000 275-a-share 00000000000000000000000000000000 F.C 01000000000000000000000000000000 adversarial 00000000001011011000110100010000 Lustgarten 00100000000000000000000000000000 little-feared 00000000000000000000000000000000 truck-parts 00000000000000000000000000000000 417 00000000000000000000000000000000 trusting 00000000000000000000000000000000 840.4 00000000000000000000000000000000 another... 00000000000000000000000000000000 8-to-5 00000000000000000000000000000000 864.1 00000000000000000000000000000000 robe 00000000000000000000000000000000 co-defendants 00000000000000000000000000000000 Franklyn 00100000000000000000000000000000 INTER-TEL 01000000000000000000000000000000 parole 00000000000111000101011000111001 halfway 00000000000111000101100001000000 outburst 00000000000000000000000000000000 fulfillment 00000000000000000000000000000000 pre-sentencing 00000000000000000000000000000000 TEAMSTERS 01000000000000001101110100110000 ELECTIONS 01000000000111101001010001100111 Lacey 00100000000000000000000000000000 Multiples 00100000000111111101011001101111 JUDGE'S 01000000000000000000000000000000 COMMENTS 01000000000111111111101000100011 Rolfe 00100000000000000000000000000000 misquoting 00000000000000000000000000000000 Bartholow 00100000000000000000000000000000 judicial-conduct 00000000000000000000000000000000 sidestepping 00000000000000000000000000000000 bench... 00000000000000000000000000000000 JUDICIARY 01000000000111111101010101010001 COMMITTEE 01000000000000000000100001010101 specialty-chemical 00000000000000000000000000000000 death-row 00000000000000000000000000000000 post-conviction 00000000000000000000000000000000 habeas 00000000000000000000000000000000 state-provided 00000000000000000000000000000000 Legion 00100000000000000000000000000000 backlots 00000000000000000000000000000000 789.87 00000000000000000000000000000000 526.79 00000000000000000000000000000000 Wholesalers 00100000000111001100010000110011 Molly 00100000000000101001111000011000 100.5 00000000000000000000000000000000 art-auction 00000000000000000000000000000000 Feigen 00100000000000000000000000000000 Lorinda 00100000000000000000000000000000 Roulet 00100000000000000000000000000000 consigned 00000000000000000000000000000000 biggie 00000000000000000000000000000000 1.98 00000000000000000000000000000000 high-sulfur 00000000000000000000000000000000 one-size-fits-all 00000000000000000000000000000000 1905 00000000000000000000000000000000 Period 00100000000111101111101001000111 47.85 00000000000000000000000000000000 Self 00100000000000111110101100100001 Yo 00100000000000000000000000000000 impressionists 00000000000000000000000000000000 juicy 00000000000000000000000000000000 Rue 00100000000000000000000000000000 Mosnier 00100000000000000000000000000000 Decorated 00100000011110110110010000110010 1878 00000000000000000000000000000000 Manet 00100000000000000000000000000000 Goldschmidt 00100000000000000000000000000000 316,400 00000000000000000000000000000000 Trunk 00100000000110110110111000000001 modular 00000000000000000000000000000000 Arles 00100000000000000000000000000000 one-owner 00000000000000000000000000000000 d'Harnoncourt 01000000000000000000000000000000 roses 00000000011111001011110101100011 Donations 00100000000111100110111100000011 Able 00100000000011010000011000110010 patrimony 00000000000000000000000000000000 Burge 00100000000000000000000000000000 out-of-town 00000000000000000000000000000000 tryouts 00000000000000000000000000000000 whistle-stop 00000000000000000000000000000000 executors 00000000000000000000000000000000 warmup 00000000000000000000000000000000 paddles 00000000000000000000000000000000 Designer 00100000000000011000100100100001 19%-owned 00000000000000000000000000000000 Big-bucks 00100000000000000000000000000000 acetate 00000000000000000000000000000000 Desmond 00100000000000000000000000000000 Lefevre 00100000000000000000000000000000 Zey 00100000000000000000000000000000 crazee 00000000000000000000000000000000 shrieked 00000000000000000000000000000000 beanstalk 00000000000000000000000000000000 Baskets 00100000000111001011100100101111 precedes 00000000000000000000000000000000 censured 00000011111001010100010000110010 notifies 00000000000000000000000000000000 swearing 00000000000000000000000000000000 1850s 00000000000000000000000000000000 Pennell 00100000000000000000000000000000 Bourke-White 01000000000000000000000000000000 Thiebaud 00100000000000000000000000000000 11150 00000000000000000000000000000000 1970-85 00000000000000000000000000000000 sculptors 00000000000000000000000000000000 crisp 00000000000000000000000000000000 Aycock 00100000000000000000000000000000 20Dec 01000000000000000000000000000000 Barbier-Mueller 01000000000000000000000000000000 Collection 00100000000111111110000101100111 Caroline 00100000000000000000000000000000 culled 00000000000000000000000000000000 bestiary 00000000000000000000000000000000 raiment 00000000000000000000000000000000 Ghanaian 00100000000000000000000000000000 82nd 00000000000000000000000000000000 Ave 00100000000000000000000000000000 Cavin-Morris 01000000000000000000000000000000 Maanen 00100000000000000000000000000000 marble-columned 00000000000000000000000000000000 self-taught 00000000000000000000000000000000 Helmet 00100000000000000000000000000000 Shaped 00100000001001001100010000110010 Skulls 00100000000000000000000000000000 19-Nov 01000000000000000000000000000000 14-ship 00000000000000000000000000000000 dignitaries 00000000000000000000000000000000 six-week 00000000000000000000000000000000 premieres 00000000000000000000000000000000 Noces 00100000000000000000000000000000 Bronislava 00100000000000000000000000000000 Nijinska 00100000000000000000000000000000 Pantages 00100000000000000000000000000000 Present 00100000000010000101110110110010 TWO-A-DAY 01000000000000000000000000000000 2,050 00000000000000000000000000000000 socialistic 00000000000000000000000000000000 Heiwado 00100000000000000000000000000000 rock-scored 00000000000000000000000000000000 Sixties 00100000000110011100110000000001 494.4 00000000000000000000000000000000 24-Dec 01000000000000000000000000000000 581-7907 00000000000000000000000000000000 Mussorgsky 00100000000000000000000000000000 Godunov 00100000000000000000000000000000 Treasures 00100000000000000000000000000000 Morozov 00100000000000000000000000000000 Kirov 00100000000000000000000000000000 mezzo 00000000000000000000000000000000 Irina 00100000000000000000000000000000 Bogacheva 00100000000000000000000000000000 princess 00000000000111110010101100100001 3rdand 00000000000000000000000000000000 236-6510 00000000000000000000000000000000 canto 00000000000000000000000000000000 Gimenez 00100000000000000000000000000000 555.6 00000000000000000000000000000000 Stevie 00100000000000000000000000000000 10,873 00000000000000000000000000000000 crowning 00000000000000000000000000000000 inadvertence 00000000000000000000000000000000 UIC 01000000000000000000000000000000 Pavillion 00100000000000000000000000000000 Cobo 00100000000000000000000000000000 bin 00000000000000000000000000000000 Palumbo 00100000000000000000000000000000 Landover 00100000000111100001101001101000 Centrum 00100000000000000000000000000000 Boutwell 00100000000000000000000000000000 Sundome 00100000000000000000000000000000 Tingley 00100000000000000000000000000000 McNichols 01000000000000000000000000000000 nabbing 00000000000000000000000000000000 Erma 00100000000000000000000000000000 Bombeck 00100000000000000000000000000000 DTH 01000000000000000000000000000000 Herald-Post 01000000000000000000000000000000 Gazette 00100000000000000000000000000000 Hussman 00100000000000000000000000000000 Syndicates 00100000000000111010000100100011 Calling 00100000000111101111110101000000 222,000 00000000000000000000000000000000 370,000 00000000000000000000000000000000 clerk-turned 00000000000000000000000000000000 90,552 00000000000000000000000000000000 Features 00100000001111000111000000010010 cartoonists 00000000000000000000000000000000 13-12 00000000000000000000000000000000 Universal-Morning 01000000000000000000000000000000 Creators 00100000000111100101111101100011 Schwartzman 00100000000000000000000000000000 negotiates 00000010000110000011000000010010 Insurance-industry 00100000000000000000000000000000 preclinical 00000000000000000000000000000000 insurance-reform 00000000000000000000000000000000 Style 00100000000111001101001001100111 dishonest 00000000000000000000000000000000 Prop 00100000000110110110010110110010 historical-claims 00000000000000000000000000000000 auto-insurance 00000000000000000000000000000000 territorial 00000000000100110000000000110000 Insurance-reform 00100000000000000000000000000000 Rosenfield 00100000000000000000000000000000 Revolt 00100000000111110001101010100111 100-acre 00000000000000000000000000000000 296,187 00000000000000000000000000000000 1,402,000 00000000000000000000000000000000 626 00000000000000000000000000000000 31.375 00000000000000000000000000000000 retooling 00000000000000000000000000000000 incentive-buoyed 00000000000000000000000000000000 per-store 00000000000000000000000000000000 4.59 00000000000000000000000000000000 hiccup 00000000000000000000000000000000 now-shuttered 00000000000000000000000000000000 51,000 00000000000000000000000000000000 BRIDGEPORT 01000000000101100111101001101000 gore 00001111111100010100101010001000 bi-monthly 00000000000000000000000000000000 epicurean 00000000000000000000000000000000 370.8 00000000000000000000000000000000 Pennington 00100000000000000000000000000000 Armageddon 00100000000101100001110010100111 manic 00000000011000011010000000110000 Shivers 00100000000000000000000000000000 pershare 00000000000000000000000000000000 innovated 00000000000000000000000000000000 191.3 00000000000000000000000000000000 217.9 00000000000000000000000000000000 Ignoring 00100000000111101111011101000000 Affordable 00100000000111001101001110010000 Cranston-D'Amato 01000000000000000000000000000000 erases 00000000000000000000000000000000 foldability 00000000000000000000000000000000 locomotive 00000000000111001100100000100001 loan-to-value 00000000000000000000000000000000 23,625 00000000000000000000000000000000 partake 00000000000000000000000000000000 Intecknings 00100000000000000000000000000000 Igaras 00100000000000000000000000000000 Desarrollo 00100000000000000000000000000000 impostor 00000000000000000000000000000000 charlatan 00000000000000000000000000000000 Vt 00100000000000000000000000000000 riddle 00000000000101000100000000001000 Jurgen 00100000000000000000000000000000 Brauer 00100000000000000000000000000000 Faculty 00100000000001000001000010000001 Chesapeake 00100000000111001010011010101000 1.8665 00000000000000000000000000000000 wall-paneling 00000000000000000000000000000000 1.87-mark 00000000000000000000000000000000 1.8305 00000000000000000000000000000000 Federal-Mogul 01000000000000000000000000000000 140.73 00000000000000000000000000000000 1.8480 00000000000000000000000000000000 1.8735 00000000000000000000000000000000 23.50 00000000000000000000000000000000 pfennig 00000000000000000000000000000000 1.8560 00000000000000000000000000000000 Croonen 00100000000000000000000000000000 DG 01000000000000000000000000000000 Heiko 00100000000000000000000000000000 tramping 00000000000000000000000000000000 565,000 00000000000000000000000000000000 366.27 00000000000000000000000000000000 Mogul 00100000000100000111110000110101 246.9 00000000000000000000000000000000 bankrolling 00000000000000000000000000000000 Marckesano 00100000000000000000000000000000 absolve 00000000000000000000000000000000 16.97 00000000000000000000000000000000 gagged 00000000000000000000000000000000 cabinet-level 00000000000000000000000000000000 ruminations 00000000000000000000000000000000 non-airline 00000000000000000000000000000000 303.7 00000000000000000000000000000000 foreign-ownership 00000000000000000000000000000000 263.2 00000000000000000000000000000000 midsized-car 00000000000000000000000000000000 APV 01000000000000000000000000000000 minivan 00000000000000110100001000100001 factory-modernization 00000000000000000000000000000000 car-market 00000000000000000000000000000000 GM-10 01000000000000000000000000000000 92-day 00000000000000000000000000000000 752.9 00000000000000000000000000000000 60-to-65-day 00000000000000000000000000000000 Minero 00100000000000000000000000000000 51.5 00000000000000000000000000000000 36.8 00000000000000000000000000000000 510.1 00000000000000000000000000000000 462.9 00000000000000000000000000000000 Merlo 00100000000000000000000000000000 curtailment 00000000000000000000000000000000 Ketchikan 00100000000000000000000000000000 838 00000000000000000000000000000000 104.1 00000000000000000000000000000000 len 00000000000000000000000000000000 135.3 00000000000000000000000000000000 33.8 00000000000000000000000000000000 471.1 00000000000000000000000000000000 weather-related 00000000000000000000000000000000 groused 00000000000000000000000000000000 Garanti 00100000000000000000000000000000 242.8 00000000000000000000000000000000 134.9 00000000000000000000000000000000 558.50 00000000000000000000000000000000 62.6 00000000000000000000000000000000 102,000 00000000000000000000000000000000 Aktiebolaget 00100000000000000000000000000000 dynamically 00000000000000000000000000000000 Finnerty 00100000000000000000000000000000 shades 00000000000111111011000100101111 456.08 00000000000000000000000000000000 Handelsbanken 00100000000000000000000000000000 tagline 00000000000000000000000000000000 artsy 00000000000000000000000000000000 Lermer 00100000000000000000000000000000 airline-interior 00000000000000000000000000000000 despondency 00000000000000000000000000000000 Takashima 00101111001000010100000010001000 accounting-rules 00000000000000000000000000000000 Resnick 00100000000000000000000000000000 posh 00000000001000111000001000110000 self-control 00000000000000000000000000000000 modesty 00000000000000000000000000000000 foreground 00000000000000000000000000000000 3.42 00000000000000000000000000000000 Vadim 00100000000000000000000000000000 Medvedev 00100000000000000000000000000000 hand-tooled 00000000000000000000000000000000 Laptev 00100000000000000000000000000000 Damon 00100000000111111000101100101000 Darlin 00100000000000000000000000000000 assignments 00000000000010000011110100100011 outback 00000000000000000000000000000000 Tee 00100000000000000000000000000000 Hee 00101111111101011000000000001000 Non-`` 00100000000000000000000000000000 Arcata 00100000000000000000000000000000 destitute 00000000000011101011110110010000 rejoice 00000000000000000000000000000000 toiled 00000000000000000000000000000000 bullock 00001111111110001110000010001000 manufacturing-sector 00000000000000000000000000000000 harvests 00000000000011001110010100000111 Overturf 00100000000000000000000000000000 Oceanside 00100000000000000000000000000000 Sunburst 00100000000000000000000000000000 R.E. 01000000000000000000000000000000 Kennington 00100000000000000000000000000000 Paster 00100000000000000000000000000000 Shuttle 00100000000000010001100011010000 Rocketdyne 00100000000000000000000000000000 Marvis 00100000000000000000000000000000 management-union 00000000000000000000000000000000 yeterday 00000000000000000000000000000000 Arbs 00100000000111111111100110110011 Gainers 00100000000101101110101001110011 94.50 00000000000000000000000000000000 63.375 00000000000000000000000000000000 extracts 00000000000000000000000000000000 ox 00000000000000000000000000000000 Executed 00100000100100001100010000110010 lockhold 00000000000000000000000000000000 pesticide-reform 00000000000000000000000000000000 two-year-long 00000000000000000000000000000000 hightops 00000000000000000000000000000000 yell 00000000000000000000000000000000 wolf 00001111111000111011000010001000 Maddox 00100000000000000000000000000000 malleable 00000000000000000000000000000000 Dilenschneider 00100000000000000000000000000000 skillfully 00000000000000000000000000000000 Walsifer 00100000000000000000000000000000 Colts 00100000000000000000000000000000 Influential 00100000000010000000110100010000 RTC-owned 01000000000000000000000000000000 self-help 00000000000000000000000000000000 Cooke 00101111111111111001110001001000 Lynchburg 00100000000000000000000000000000 porches 00000000000000000000000000000000 working-capital 00000000000000000000000000000000 Schumer 00101111111111101011111010001000 remiss 00000000000000000000000000000000 800-number 00000000000000000000000000000000 800-line 00000000000000000000000000000000 Truckee 00100000000000000000000000000000 Taped 00100000000000100101101001000000 lifeline 00000000000000000000000000000000 Roses 00100000011111001011110101100011 revisited 00000000000000000000000000000000 Whiskey 00100000000101110011111010110000 easy-to-film 00000000000000000000000000000000 Nikka 00100000000000000000000000000000 Example 00100000000111111111111111101000 straightening 00000000000000000000000000000000 Cathleen 00100000000000000000000000000000 ARNOLD 01001111111000000000110100001000 allying 00000000000000000000000000000000 Verret 00100000000000000000000000000000 EDUCATION 01000000000111101111101101100001 142-page 00000000000000000000000000000000 I.W. 01000000000000000000000000000000 1,118 00000000000000000000000000000000 publishable 00000000000000000000000000000000 issues... 00000000000000000000000000000000 home-team 00000000000000000000000000000000 bourbons 00000000000000000000000000000000 timberland 00000000000110101011100000100001 Reuschel 00100000000000000000000000000000 left-field 00000000000000000000000000000000 Kishimoto 00100000000000000000000000000000 salted 00000000000000000000000000000000 salve 00000000000000000000000000000000 red-haired 00000000000000000000000000000000 1-for-17 00000000000000000000000000000000 A-men 00100000000000000000000000000000 Nos. 00100000000000000000000000000000 six-shooter 00000000000000000000000000000000 Right-hander 00100000000000000000000000000000 ledger 00000000000000000000000000000000 winningest 00000000000000000000000000000000 21-9 00000000000000000000000000000000 split-fingered 00000000000000000000000000000000 split-finger 00000000000000000000000000000000 ex-hurler 00000000000000000000000000000000 dives 00000000000111101111011110000011 lunging 00000000000000000000000000000000 downshoot 00000000000000000000000000000000 stat 00000000000000000000000000000000 rooters 00000000000000000000000000000000 Subway 00100000000010001000001010110000 conveyance 00000000000000000000000000000000 Desire 00100000000111111001111100100111 Partisans 00100000000000000000000000000000 combatants 00000000000000000000000000000000 49,000-plus 00000000000000000000000000000000 booed 00000000000000000000000000000000 emblems 00000000000000000000000000000000 27,500 00000000000000000000000000000000 septuagenarian 00000000000000000000000000000000 apathy 00000000000000000000000000000000 uniquely 00000000000100101000000001110010 springs 00000000000000101000100010100101 Yankees-Mets 01000000000000000000000000000000 hey 00000000000111111100111011101000 uniformed 00000000000101101001011000110000 suicidal 00000000000000000000000000000000 bifurcate 00000000000000000000000000000000 bonnets 00000000000000000000000000000000 twiggy-looking 00000000000000000000000000000000 second-year 00000000000000000000000000000000 afield 00000000000000000000000000000000 ditto 00000000000000000000000000000000 three-run 00000000000000000000000000000000 homered 00000000000000000000000000000000 Bashers 00100000000000000000000000000000 power-hitter 00000000000000000000000000000000 co-hero 00000000000000000000000000000000 hot-cold 00000000000000000000000000000000 smoked 00000000001111000100010000110010 3-for-3 00000000000000000000000000000000 inroads 00000000000000000001010100100111 groove 00000000000000000000000000000000 3-4-5 00000000000000000000000000000000 5-for-24 00000000000000000000000000000000 ribbies 00000000000000000000000000000000 Dusty 00100000010110010000001000110000 slugger 00000000000000000000000000000000 93.1 00000000000000000000000000000000 75.8 00000000000000000000000000000000 antebellum 00000000000000000000000000000000 registers 00000000000000000000000000000000 Sanjiv 00100000000000000000000000000000 Liqueur 00100000000000000000000000000000 149.6 00000000000000000000000000000000 439.3 00000000000000000000000000000000 264.6 00000000000000000000000000000000 289.7 00000000000000000000000000000000 Fibreboard 00100000000000000000000000000000 4.19 00000000000000000000000000000000 tuning 00000000000101000111000001000000 814,000 00000000000000000000000000000000 account-churning 00000000000000000000000000000000 novelty 00000000000111110010110000000001 522.3 00000000000000000000000000000000 woken 00000000000000000000000000000000 499.4 00000000000000000000000000000000 finessed 00000000000000000000000000000000 grafted 00000000000000000000000000000000 Street-inspired 00100000000000000000000000000000 less-than-alarming 00000000000000000000000000000000 Finsbury 00100000000000000000000000000000 2076.8 00000000000000000000000000000000 157.1 00000000000000000000000000000000 good-humored 00000000000000000000000000000000 d'Amiante 01000000000000000000000000000000 DRG 01000000000000000000000000000000 pasted 00000000000000000000000000000000 Seconds 00100000000000000000011100011011 7,500-share 00000000000000000000000000000000 Koizumi 00100000000000000000000000000000 forlorn 00000000000000000000000000000000 141.1 00000000000000000000000000000000 heaters 00000000000000000000000000000000 13.27 00000000000000000000000000000000 Fundamentally 00100000001010000000000001110010 dangerous... 00000000000000000000000000000000 .fundamentally 00000000000000000000000000000000 weak... 00000000000000000000000000000000 still... 00000000000000000000000000000000 poised... 00000000000000000000000000000000 Smirnoff 00100000000000000000000000000000 2029.7 00000000000000000000000000000000 Heublein 00100011111100110100110000001000 UNIFIRST 01000000000000000000000000000000 Rapatee 00100000000000000000000000000000 Nitze 00100000000000000000000000000000 Notable 00100000000000100100000010010000 Quotable 00100000000000000000000000000000 Bellas 00100000000000000000000000000000 Tremdine 00100000000000000000000000000000 Distilled 00100000000000000000000000000000 deflate 00000000000000000000000000000000 airline-acquisition 00000000000000000000000000000000 13.39 00000000000000000000000000000000 manning 00001111111100100000111000001000 11,700 00000000000000000000000000000000 right-to-work 00000000000000000000000000000000 Renton 00100000000000000000000000000000 59.8 00000000000000000000000000000000 FRANKFURT 01000000000111001100011001101000 157.2 00000000000000000000000000000000 management-employee 00000000000000000000000000000000 Insam 00100000000000000000000000000000 Liechtenstein 00100000000100000111111001101000 firewater 00000000000000000000000000000000 1657.61 00000000000000000000000000000000 bluest 00000000000000000000000000000000 642.2 00000000000000000000000000000000 recovers 00000000000000000000000000000000 Attracted 00100000000001110111010000110010 PARIS 01000000000111111101111001101000 CAC 01000000000000000000000000000000 523.6 00000000000000000000000000000000 Vigier 00100000000000000000000000000000 Dupont 00100000000110101000000000001000 mid-conversation 00000000000000000000000000000000 9.92 00000000000000000000000000000000 233.6 00000000000000000000000000000000 non-accruing 00000000000000000000000000000000 trading-related 00000000000000000000000000000000 474.1 00000000000000000000000000000000 232.8 00000000000000000000000000000000 Nonperformers 00100000000000000000000000000000 230.8 00000000000000000000000000000000 remnants 00000000000000000000000000000000 RepublicBank 01000000000111101001100001101000 76.9 00000000000000000000000000000000 169.4 00000000000000000000000000000000 310.9 00000000000000000000000000000000 185.1 00000000000000000000000000000000 167.9 00000000000000000000000000000000 low-yielding 00000000000000000000000000000000 inter-bank 00000000000000000000000000000000 548.9 00000000000000000000000000000000 469.4 00000000000000000000000000000000 4.13 00000000000000000000000000000000 warranted 00000000010010010010110000110010 104.75 00000000000000000000000000000000 18.875 00000000000000000000000000000000 Feniger 00100000000000000000000000000000 U.S.-Canadian 01000000000000000000000000000000 herring 00000000000000000000000000000000 Sangyo 00100000000000000000000000000000 Crosbie 00100000000000000000000000000000 contradiction 00000000000110100101111101100111 fish-export 00000000000000000000000000000000 Idle 00100000001100100101110110110010 Character 00100000000111111111110000000001 Richstone 00100000000000000000000000000000 Telecussed 00100000000000000000000000000000 intercept 00000000000000000000000000000000 'Cause 01000000000000000000000000000000 Emmons 00100000000000000000000000000000 marrow 00000000000111010010100110001001 open-bank 00000000000000000000000000000000 tax-advantaged 00000000000000000000000000000000 paves 00001110010110000011000000010010 trillion-plus 00000000000000000000000000000000 Disposti 00100000000000000000000000000000 314.6 00000000000000000000000000000000 296.6 00000000000000000000000000000000 underwritings 00000000000111100111001011100011 462.8 00000000000000000000000000000000 Asset-management 00100000000000000000000000000000 580.4 00000000000000000000000000000000 478.9 00000000000000000000000000000000 Omega 00100000000000000000000000000000 444.9 00000000000000000000000000000000 450.7 00000000000000000000000000000000 Schweiz 00100000000000000000000000000000 Selig 00100000000000000000000000000000 76-story 00000000000000000000000000000000 goosey 00000000000000000000000000000000 fiddling 00000000000000000000000000000000 pre-set 00000000000000000000000000000000 Computations 00100000000000000000000000000000 Synchronized 00100000000000000000000000000000 difference... 00000000000000000000000000000000 synchronize 00000000000000000000000000000000 urgings 00000000000101110011101000100011 Freund 00100000000000000000000000000000 UNIFIED 01000000000011000001000010010000 EUROPE 01000000000111111111011101101000 relocations 00000000000000000000000000000000 CLUBBING 01000000000000000000000000000000 FAN 01000000000111101000010100000001 Sewing 00100000000000010101010000110000 heckled 00000000000000000000000000000000 Martinsville 00100000000000000000000000000000 Phillies 00100000000000000000000000000000 9-8 00000000000000000000000000000000 accreted 00000000000000000000000000000000 taunting 00000000000000000000000000000000 jaw 00000000000000000000000000000000 negligent 00000000000111111100000110010000 PROPOSALS 01000000000111101110101000100011 ARISE 01000000000111001101010110110010 technologist 00000000000000000000000000000000 bedside 00000000000000000000000000000000 618 00000000000000000000000000000000 Hewitt 00100000011000010010110000001000 advancement 00000000000111100101111000001111 MRA 01000000000000000000000000000000 Staffing 00100000000000001101100011100001 TREATING 01000000000101000001111101000000 EMPLOYEES 01000000000000000010000000110011 Hay 00100000000000001110000000001000 SPRUCING 01000000000000000000000000000000 DIGS 01000000011101001111000000010010 carpeted 00000000000000000000000000000000 blinds 00000000000000000000000000000000 CURBING 01000000000000111111011101000000 WAGE 01000000000000000000000101110001 BOOSTS 01000000000000000000000010000011 labor-shortage 00000000000000000000000000000000 TEMPORARY 01000000001000000001000000010000 educations 00000000000000000000000000000000 Temporary 00100000001000000001000000010000 2,508 00000000000000000000000000000000 HOME-SALE 01000000000000000000000000000000 LOSSES 01000000000111101111100000000011 439 00000000000000000000000000000000 sales-loss 00000000000000000000000000000000 depreciated 00000000000000000000000000000000 prepurchase 00000000000000000000000000000000 reactionary 00000000000000000000000000000000 Sombrotto 00100000000000000000000000000000 century... 00000000000000000000000000000000 88-points 00000000000000000000000000000000 416.3 00000000000000000000000000000000 rationality 00000000000000000000000000000000 Chains 00100000000111100001000001110101 Ruffled 00100000001011100101101001000000 FAST-FOOD 01000000000000000000000000000000 hatch 00000000000101101100111010001000 grocery-store 00000000000000000000000000000000 home-delivered 00000000000000000000000000000000 takeout 00000000000000000000000000000000 NPD 01000000000000000000000000000000 Popeye 00100000000000000000000000000000 McChicken 01000000000000000000000000000000 char-grilled 00000000000000000000000000000000 home-delivery 00000000000000000000000000000000 stay-at-home 00000000000000000000000000000000 Soft-Sell 01000000000000000000000000000000 Spots 00100000000111101101110101100011 un-advertising 00000000000000000000000000000000 Traveler 00100000000011000110010010110101 un-advertisers 00000000000000000000000000000000 market... 00000000000000000000000000000000 Rittlemann 00100000000000000000000000000000 Floodlights 00100000000000000000000000000000 Pretty 00100000000000001100000001110010 Structures 00100000000111000000110100100011 fundraisers 00000000000000000000000000000000 Retailer 00100000000111100100100001110101 Sees 00100001000111100011000000010010 Pitfalls 00100000000111110100011000100011 noncorrosive 00000000000000000000000000000000 nonchlorinated 00000000000000000000000000000000 major-league 00000000000000000000000000000000 Beairsto 00100000000000000000000000000000 TIGRs 01000000000000000000000000000000 philosophically 00000000000000000000000000000000 NEATNESS 01000000000000000000000000000000 Scanner 00100000000000000000000000000000 endorsers 00000000000000000000000000000000 believable 00000000000000000000000000000000 Garner 00100000000111110000100110110111 persuasiveness 00000000000000000000000000000000 Storyboard 00100000000010010101100100001001 reinvent 00000000000000000000000000000000 Antonia 00100000000000000000000000000000 Koop 00100000000000000111111010001000 burlap 00000000000000000000000000000000 disease-resistant 00000000000000000000000000000000 multifaceted 00000000000000000000000000000000 network-wide 00000000000000000000000000000000 er 00000000000000000000000000000000 anti-recession 00000000000000000000000000000000 wish-list 00000000000000000000000000000000 Celanese 00100000000000110101111100101000 656 00000000000000000000000000000000 Indirect 00100000000001010000010100010000 weeping 00000000000000000000000000000000 meringues 00000000000000000000000000000000 pernicious 00000000000000000000000000000000 156,000 00000000000000000000000000000000 Sheila 00100000000000000000000000000000 treads 00000000000000000000000000000000 Bandow 00100000000000000000000000000000 Wishes 00100000000111000010101000110010 intergovernmental 00000000000000111011000000110000 unanimity 00000000000000000000000000000000 Setting 00100000000011111110100001000000 Diplomatic 00100000000010000000000000110000 crewcut 00000000000000000000000000000000 marshal 00000000000000101001111100001000 procession 00000000000000000000000000000000 ceremonies 00000000000001110010001000100011 union-bidder 00000000000000000000000000000000 appreciating 00000000000000000000000000000000 Lots 00100000000111101001111000101111 signalling 00000000000000000000000000000000 tightness 00000000000111101001001010100111 margined 00000000000000000000000000000000 jeopardized 00000000010100000001110000110010 reining 00000000000000000000000000000000 meddle 00000000000000000000000000000000 fundamentalism 00000000000111101001101100100101 anti-debt 00000000000000000000000000000000 scarcity 00000000000111101010101101001111 dealmakers 00000000000000000000000000000000 tiger 00000000000010000100111000101000 initiatiors 00000000000000000000000000000000 lustily 00000000000000000000000000000000 rhetorical 00000000000000000000000000000000 parades 00000000000000000000000000000000 Jarrell 00100000000000000000000000000000 618.69 00000000000000000000000000000000 35087.38 00000000000000000000000000000000 664.83 00000000000000000000000000000000 35133.83 00000000000000000000000000000000 435.11 00000000000000000000000000000000 34903.80 00000000000000000000000000000000 precipitating 00000000000000000000000000000000 34468.69 00000000000000000000000000000000 2600.88 00000000000000000000000000000000 941-105 00000000000000000000000000000000 526.2 00000000000000000000000000000000 574.7 00000000000000000000000000000000 100.96 00000000000000000000000000000000 3655.40 00000000000000000000000000000000 blood-cell 00000000000000000000000000000000 silicone 00000000000000000000000000000000 moneymakers 00000000000000000000000000000000 Isao 00100000000000000000000000000000 Ushikubo 00100000000000000000000000000000 Toyo 00100000000000000000000000000000 Masato 00100000000000000000000000000000 replaster 00000000000000000000000000000000 Jakarta 00100000000000000000000000000000 Yeung 00100000000000000000000000000000 HK 01000000000000000000000000000000 180.60 00000000000000000000000000000000 2601.70 00000000000000000000000000000000 473.9 00000000000000000000000000000000 Chenevix-Trench 01000000000000000000000000000000 Ordinaries 00100000000000000000000000000000 1601.5 00000000000000000000000000000000 Hinzack 00100000000000000000000000000000 Burdett 00100000000000000000000000000000 Buckeridge 00100000000000000000000000000000 sheep-like 00000000000000000000000000000000 bluechip 00000000000000000000000000000000 gelatin 00000000000000000000000000000000 1738.7 00000000000000000000000000000000 Tannenbaum 00100000000000000000000000000000 steepest 00000000000010101010000011010000 vitality 00000000000110101111011000001111 deplete 00000000000000000000000000000000 wish-lists 00000000000000000000000000000000 Toxics 00100000000000000000000000000000 Interestingly 00100000000000000000000000000000 presuming 00000000000000000000000000000000 greenhouse-effect 00000000000000000000000000000000 Pepperdine 00100000000000000000000000000000 Greenback 00100000000000000000000000000000 anti-toxic 00000000000000000000000000000000 apple-pie 00000000000000000000000000000000 anti-scientific 00000000000000000000000000000000 anti-pocketbook 00000000000000000000000000000000 rubric 00000000000000000000000000000000 futureeither 00000000000000000000000000000000 exhilaration 00000000000000000000000000000000 disbelief 00000000000000000000000000000000 big-stock 00000000000000000000000000000000 Baim 00100000000000000000000000000000 Promises 00100000000111100010101000110010 164.78-point 00000000000000000000000000000000 Transports 00100000000000000000000000000000 pawns 00000000000000000000000000000000 narrowness 00000000000000000000000000000000 whistling 00000000000000000000000000000000 credence 00000000000001110111110100100111 pre-trading 00000000000000000000000000000000 Lyman 00100000000000000000000000000000 27-point 00000000000000000000000000000000 groped 00000000000000000000000000000000 10:15 00000000000000000000000000000000 Machold 00100000000000000000000000000000 Greedily 00100000000000000000000000000000 Fagenson 00100000000000000000000000000000 .Not 01000000000000000000000000000000 glum 00000000000000000000000000000000 queenside 00000000000000000000000000000000 5.74 00000000000000000000000000000000 yelped 00000000000000000000000000000000 Grinned 00100000000000000000000000000000 Griffith 00101111111110001110100010001000 deviated 00000000000000000000000000000000 Gambit 00100000000000000000000000000000 Spitzenburg 00100000000000000000000000000000 Rosenau 00100000000000000000000000000000 figurative 00000000000000000000000000000000 savior 00000000000000000000000000000000 Specialists 00100000000000000010000010110011 Valero 00100000000000000000000000000000 program-related 00000000000000000000000000000000 soulmates 00000000000000000000000000000000 Christic 00100000000000000000000000000000 smelling 00000000000010000110100001000000 anti-defense 00000000000000000000000000000000 politico-plaintiffs 00000000000000000000000000000000 mischievous 00000000000000000000000000000000 6-4 00000000000000000000000000000000 six-hour 00000000000000000000000000000000 weasling 00000000000000000000000000000000 Leery 00100000000101101011110000110010 615 00000000000000000000000000000000 federal-formula 00000000000000000000000000000000 Enjoying 00100000000111101111000101000000 movie-production 00000000000000000000000000000000 coca 00000000000110100111101110110000 denude 00000000000000000000000000000000 crouch 00000000000000000000000000000000 shuffled 00000000000000000000000000000000 sized 00000000001010011101101001000000 2,720,675 00000000000000000000000000000000 306,000 00000000000000000000000000000000 Sejm 00100000000000000000000000000000 Trojan 00100000000000000000000000000000 atrocities 00000000000000000000000000000000 1,376 00000000000000000000000000000000 13-pound 00000000000000000000000000000000 Esopus 00100000000000000000000000000000 over-optimistic 00000000000000000000000000000000 168.1 00000000000000000000000000000000 132.6 00000000000000000000000000000000 bond-market 00000000000000000000000000000000 Consistently 00100000001000000001001001110010 dispatches 00000000000000000000000000000000 0.70 00000000000000000000000000000000 snidely 00000000000000000000000000000000 passivity 00000000000000000000000000000000 600-point 00000000000000000000000000000000 watchful 00000000000000000000000000000000 7.36 00000000000000000000000000000000 96.15 00000000000000000000000000000000 5.245 00000000000000000000000000000000 98.30 00000000000000000000000000000000 Bishops 00100000000100100010100110110101 10.12 00000000000000000000000000000000 12.74 00000000000000000000000000000000 Remic-related 00100000000000000000000000000000 Rebounding 00100000000101111011100001000000 Tax-exempts 00100000000000000000000000000000 Professionals 00100000000000011111000010110011 wrung 00000000000000000000000000000000 Triborough 00100000000000000000000000000000 Tunnel 00100000000000101010111000000001 2027 00000000000000000000000000000000 Mazzera 00100000000000000000000000000000 dessert-menu 00000000000000000000000000000000 47%-controlled 00000000000000000000000000000000 61.41 00000000000000000000000000000000 349.9 00000000000000000000000000000000 250.17 00000000000000000000000000000000 178.61 00000000000000000000000000000000 29.62 00000000000000000000000000000000 26.68 00000000000000000000000000000000 423.3 00000000000000000000000000000000 leisure-oriented 00000000000000000000000000000000 184.74 00000000000000000000000000000000 106.06 00000000000000000000000000000000 renting 00000000000001111101111101000000 Slider 00100000000000000000000000000000 earth-moving 00000000000000000000000000000000 compaction 00000000000000000000000000000000 forklifts 00000000000000000000000000000000 Brophy 00100000000000000000000000000000 955,000 00000000000000000000000000000000 2.43 00000000000000000000000000000000 2.71 00000000000000000000000000000000 Ludlum 00100000000000000000000000000000 steels 00000000000111111001111011100011 108.6 00000000000000000000000000000000 4.81 00000000000000000000000000000000 3.76 00000000000000000000000000000000 dark-squared 00000000000000000000000000000000 7-a-share 00000000000000000000000000000000 78.6 00000000000000000000000000000000 venal 00000000000000000000000000000000 under-serviced 00000000000000000000000000000000 NGL 01000000000000000000000000000000 6,930,000 00000000000000000000000000000000 5,500,000 00000000000000000000000000000000 19-to-$21 00000000000000000000000000000000 154.3 00000000000000000000000000000000 560,839 00000000000000000000000000000000 31.50 00000000000000000000000000000000 typewriters 00000000000111110111111111001001 positional 00000000000000000000000000000000 Trendy 00100000001001010000001000110000 cinematography 00000000000000000000000000000000 Stadiums 00100000000110011111110101100011 colorization 00000000000000000000000000000000 Mednis 00100000000000000000000000000000 Edmar 00100000000000000000000000000000 DeMoulin 01000000000000000000000000000000 resurging 00000000000000000000000000000000 T-Max 01000000000000000000000000000000 3200 00000000000000000000000000000000 Photofinishing 00100000000001110011111010110000 Newsletter 00100000000000000001001101000001 snare 00000000000000000000000000000000 Gala 00100000000000000000000000000000 medalist 00000000000000000000000000000000 Griffith-Joyner 01000000000000000000000000000000 Slated 00100000000010010110111000110010 speciality 00000000000111110101010000110000 DiCara 01000000000000000000000000000000 offside 00000000000000000000000000000000 archival 00000000000000000000000000000000 rook 00000000000000000000000000000000 Crisman 00100000000000000000000000000000 Cleo 00100000000000000000000000000000 Hauser 00100000000000000000000000000000 photographer 00000000000111001010011110110101 Stouffer 00100000000000000000000000000000 latched 00000000000100100000100000110010 On-Broadway 01000000000000000000000000000000 Dayna 00100000000000000000000000000000 Brunsdon 00100000000000000000000000000000 wow 00000000000011101000110100101000 plunking 00000000000000000000000000000000 Black-and-white 00100000000000000000000000000000 photofinishers 00000000000000000000000000000000 Intent 00100000000111111111110100100111 second-rate 00000000000000000000000000000000 enlargers 00000000000000000000000000000000 darkroom 00000000000000000000000000000000 hobbies 00000000000101110101110010100111 Brightman 00100000000000000000000000000000 castling 00000000000000000000000000000000 quantum 00000000000000001011010100101000 leaps 00000000000111111100011110000011 150th 00000000000000000000000000000000 DeBat 01000000000000000000000000000000 Photographers 00100000000111101101111000110011 Leser 00100000000000000000000000000000 94.9 00000000000000000000000000000000 88.3 00000000000000000000000000000000 23.6 00000000000000000000000000000000 279.1 00000000000000000000000000000000 261.3 00000000000000000000000000000000 Agip 00100000000000000000000000000000 five-course 00000000000000000000000000000000 ineffably 00000000000000000000000000000000 Sicilian 00100000000000000000000000000000 222.3 00000000000000000000000000000000 215.3 00000000000000000000000000000000 Dating 00100000000000001111100001000000 Underlying 00100000000000100000000100010000 M2 00100000000000000000000000000000 precursory 00000000000000000000000000000000 foreign-trade 00000000000000000000000000000000 computer-based 00000000000000000000000000000000 wage-floor 00000000000000000000000000000000 133.4 00000000000000000000000000000000 Barilla 00100000000000000000000000000000 CENTRUST 01000000000110001000110100101000 AVOIDED 01000000110000010100010000110010 neige 00000000000000000000000000000000 kryptonite 00000000000000000000000000000000 wholesale-store 00000000000000000000000000000000 214.73 00000000000000000000000000000000 3393.51 00000000000000000000000000000000 130.16 00000000000000000000000000000000 0.0055 00000000000000000000000000000000 fearless 00000000000000000000000000000000 oeufs 00000000000000000000000000000000 .9.82 00000000000000000000000000000000 rate-mortgages 00000000000000000000000000000000 pollinating 00000000000000000000000000000000 hazelnut 00000000000000000000000000000000 8086 00000000000000000000000000000000 minisupercomputers 00000000000000000000000000000000 parallel-computing 00000000000000000000000000000000 berries 00000000000000000000000000000000 gauze 00000000000000000000000000000000 Sterile 00100000000000000000000000000000 148.5 00000000000000000000000000000000 ACCO 01000000000000000000000000000000 68.3 00000000000000000000000000000000 Hardware 00100000000011101000111010110000 Nalcor 00100000000000000000000000000000 Weslock 00100000000000000000000000000000 JPI 01000000000000000000000000000000 collectability 00000000000000000000000000000000 Biscuit 00100000000000000000000000000000 McVities 01000000000000000000000000000000 biscuits 00000000000000000000011011101001 confectionery 00000000000000000000000000000000 Marxist-dominated 00100000000000000000000000000000 overburdened 00000000000000000000000000000000 protein-1 00000000000000000000000000000000 belittle 00000000000000000000000000000000 5.8125 00000000000000000000000000000000 Afrika 00100000000000000000000000000000 Korps 00100000000000000000000000000000 U.N.-monitored 01000000000000000000000000000000 redress 00000000000111000010110010110111 O'Linn's 01000000000000000000000000000000 Weasel 00100000000000000110110110110111 late-in-the-day 00000000000000000000000000000000 l987 00000000000000000000000000000000 471.60 00000000000000000000000000000000 9.60 00000000000000000000000000000000 491.50 00000000000000000000000000000000 price-supporting 00000000000000000000000000000000 20.59 00000000000000000000000000000000 anyhow 00000000000000000000000000000000 Taiwan-born 00100000000000000000000000000000 1.2745 00000000000000000000000000000000 underwhelmed 00000000000000000000000000000000 Bent 00100000000110110100100000110010 10,004 00000000000000000000000000000000 13,575 00000000000000000000000000000000 89,300 00000000000000000000000000000000 1.2965 00000000000000000000000000000000 0.22 00000000000000000000000000000000 74.48 00000000000000000000000000000000 cotton-growing 00000000000000000000000000000000 Colder 00100000000000000000000000000000 13.97 00000000000000000000000000000000 14.22 00000000000000000000000000000000 FARM 01000000000000000111010000110000 millon 00000000000000000000000000000000 grandmasters 00000000000000000000000000000000 gaseous 00000000000000000000000000000000 vented 00000000000000000000000000000000 suppressants 00000000000000000000000000000000 Whirpool 00100000000000000000000000000000 rented 00000000000110001101101001000000 38.875 00000000000000000000000000000000 whippings 00000000000000000000000000000000 weakling 00000000000000000000000000000000 SES 01000000000000000000000000000000 Deminex 00100000000000000000000000000000 OEL 01000000000000000000000000000000 Hispanoil 00100000000000000000000000000000 Hudbay 00100000000000000000000000000000 Inpex 00100000000000000000000000000000 Lasmo 00100000000000000000000000000000 Sunda 00100000000000000000000000000000 TCR 01000000000000000000000000000000 Sumat 00100000000000000000000000000000 Warrior 00100000000001001000110000000001 Pertamina 00100000000000000000000000000000 Indonesian 00100000000001100100010100110000 Forrest 00100000000000000000000000000000 curly 00000000000000000000000000000000 18.625 00000000000000000000000000000000 9.05 00000000000000000000000000000000 borer 00000000000000000000000000000000 surfaces 00000000000110001110010101100011 98-pound 00000000000000000000000000000000 37.375 00000000000000000000000000000000 Electro-Optics 01000000000000000000000000000000 creamy 00000000000010111011011010010000 Danbury 00100000000110010111101001101000 electro-optical 00000000000000000000000000000000 PerkinElmer 01000000000000000000000000000000 Electro-Optical 01000000000000000000000000000000 infrared 00000000000110011100101010110000 41,000 00000000000000000000000000000000 23-day 00000000000000000000000000000000 redistribute 00000000000000000000000000000000 strode 00000000000000000000000000000000 sighing 00000000000000000000000000000000 brandished 00000000000000000000000000000000 unlit 00000000000000000000000000000000 Shopkorn 00100000000000000000000000000000 non-encapsulating 00000000000000000000000000000000 gooseberry 00000000000000000000000000000000 cataclysms 00000000000000000000000000000000 survivable 00000000000110110110010010010000 Adrian 00100000001000000001000010011000 Sween 00100000000000000000000000000000 141.8 00000000000000000000000000000000 backslapping 00000000000000000000000000000000 eyed 00000001111101000101010000110010 647 00000000000000000000000000000000 pell-mell 00000000000000000000000000000000 Proctor 00101111111100011101110001001000 114.5 00000000000000000000000000000000 Batterymarch 00100000000000000000000000000000 2600 00000000000000000000000000000000 symbolically 00000000000000000000000000000000 Ava 00100000000000000000000000000000 Holzfaster 00100000000000000000000000000000 farm-supply 00000000000000000000000000000000 Ogallala 00100000000000000000000000000000 Fines 00100000000111110111110000100011 Bellevue 00100000000110100101101001101000 NP 01000000000000000000000000000000 Kan.-based 00100000000000000000000000000000 19.9 00000000000000000000000000000000 possiblity 00000000000000000000000000000000 payoffs 00000000000111100111001100000011 countdown 00000000000000000000000000000000 formalities 00000000000000000000000000000000 sherbet 00000000000000000000000000000000 anti-social 00000000000000000000000000000000 low-profile 00000000000000000000000000000000 insurrection 00000000000000000000000000000000 economic-restructuring 00000000000000000000000000000000 Olav 00100000000000000000000000000000 V 00100000000000000000000000000000 non-Socialist 01000000000000000000000000000000 Gro 00100000000000000000000000000000 Brundtland 00100000000000000000000000000000 19-member 00000000000000000000000000000000 Syse 00100000000000000000000000000000 165-member 00000000000000000000000000000000 U.S.-supplied 01000000000000000000000000000000 Cornel 00100000000000000000000000000000 Wilde 00100000000000000000000000000000 Danilo 00100000000000000000000000000000 Kis 00100000000000000000000000000000 Yugoslav-born 00100000000000000000000000000000 essayist 00000000000000000000000000000000 kiwi 00000000000000000000000000000000 foldable 00000000000000000000000000000000 mega-stadium 00000000000000000000000000000000 Foy 00100000000000000000000000000000 Toe 00100000000110000101111010110111 Schoeneman 00100000000000000000000000000000 Laurent 00101111111010101000000101001000 53.875 00000000000000000000000000000000 pathlogy 00000000000000000000000000000000 employment-services 00000000000000000000000000000000 infinitely 00000000000000000000000000000000 Antony 00100000000000000000000000000000 solidified 00000000000000000000000000000000 39.4 00000000000000000000000000000000 wonderland 00000000000000000000000000000000 non-Manpower 01000000000000000000000000000000 18.49 00000000000000000000000000000000 18.98 00000000000000000000000000000000 9-5 00000000000000000000000000000000 underachiever 00000000000000000000000000000000 computer-room 00000000000000000000000000000000 vibration-control 00000000000000000000000000000000 815,000 00000000000000000000000000000000 201.7 00000000000000000000000000000000 Mirek 00100000000000000000000000000000 23.00 00000000000000000000000000000000 stagnating 00000000000000000000000000000000 evangelical 00000000001100010000001000110000 20.8 00000000000000000000000000000000 PG&E 01000000000000000000000000000000 drunken 00000000000001111010010000010000 Muniz 00100000000000000000000000000000 Gell 00100000000000000000000000000000 Hartmarx 00101111111110011010111100101000 Right-to-Die 01000000000000000000000000000000 Appeal 00100000000111111111111010110111 Waters 00100000000110000110000000001000 eight-hour 00000000000000000000000000000000 amphobiles 00000000000000000000000000000000 Wankui 00100000000000000000000000000000 dance-committee 00000000000000000000000000000000 compounds 00000000000111011011110100100011 perky 00000000000000000000000000000000 anchorwoman 00000000000000000000000000000000 Nestled 00100000000000000000000000000000 mega-welfare 00000000000000000000000000000000 cradle-to-grave 00000000000000000000000000000000 redundant 00000000000000001011000110010000 glaring 00000000000001000111000010010000 Subsidies 00100000000111100101001100000011 Throwing 00100000011111110110100001000000 downstairs 00000000000000000000000000000000 buns 00000000000000000000000000000000 Patrol 00100000000000001010100110110111 Breakfast 00100000000010111010000000100001 greets 00000000000000000000000000000000 Happily 00100001101100000000010001110010 Donning 00100000000000000000000000000000 denims 00000000000000000000000000000000 steel-making 00000000000000000000000000000000 orange-flavored 00000000000000000000000000000000 cafeterias 00000000000110000101011001101001 Scraps 00100000000000000000000000000000 slop-bucket 00000000000000000000000000000000 blood-red 00000000000000000000000000000000 peppers 00000000000000000000000000000000 NetWare 01000000000000000000000000000000 Yuan 00100000000000000011100000001011 Changyong 00100000000000000000000000000000 Teams 00100000000010101001110101100011 Ollari 00100000000000000000000000000000 Shanyun 00100000000000000000000000000000 Jihong 00100000000000000000000000000000 apron 00000000000000000000000000000000 five-by-eight-inch 00000000000000000000000000000000 sweets 00000000000000000000000000000000 whitewashed 00000000000000000000000000000000 bookcase 00000000000000000000000000000000 Xia 00100000000000000000000000000000 Huaqiong 00100000000000000000000000000000 mobility 00000000000011110111111010100111 Catania 00100000000000000000000000000000 Xiangyang 00100000000000000000000000000000 Elementary 00100000000001111101000100110000 one-company 00000000000000000000000000000000 all-powerful 00000000000000000000000000000000 wanders 00000000000000000000000000000000 restlessly 00000000000000000000000000000000 greet 00000000000000000000000000000000 Inevitably 00100000001100000000001001110010 five-story 00000000000000000000000000000000 second-floor 00000000000000000000000000000000 leafing 00000000000000000000000000000000 Inspects 00100000000000000000000000000000 Operation 00100000000111101111010000001001 Furnace 00100000000000000101111000000001 Yongjian 00100000000000000000000000000000 organizes 00000000000000000000000000000000 outdoors 00000000000110101010101100100001 promenade 00000000000000000000000000000000 Jinshajiang 00100000000000000000000000000000 eight-piece 00000000000000000000000000000000 plods 00000000000000000000000000000000 slender 00000000000111100111000010010000 well-rehearsed 00000000000000000000000000000000 three-step 00000000000000000000000000000000 cheek-to-cheek 00000000000000000000000000000000 oddest 00000000000000000000000000000000 follies 00000000000101011111011000001111 straw-and-mud 00000000000000000000000000000000 revisionists 00000000000000000000000000000000 settlers 00000000000100000000111000110011 Zhijie 00100000000000000000000000000000 filtered 00000000000000000000000000000000 warmth 00000000000101100111110010100111 recuperate 00000000000000000000000000000000 500-bed 00000000000000000000000000000000 cremation 00000000000000000000000000000000 smoothest 00000000000000000000000000000000 Desheng 00100000000000000000000000000000 smock 00001111111011100100000000001000 maternity 00000000000011100101000000110000 NW 01000000000000000000000000000000 BCS 01000000000000000000000000000000 U.LLO 01000000000000000000000000000000 1.33 00000000000000000000000000000000 250-branch 00000000000000000000000000000000 ninth-largest 00000000000000000000000000000000 consortium-ownership 00000000000000000000000000000000 endeavoring 00000000000000000000000000000000 joked 00000000000110010111110111000010 products... 00000000000000000000000000000000 Northwestern 00100000000000100111111000101000 Salwen 00100000000000000000000000000000 Proxmire 00101111111100111010111010001000 intraocular 00000000000000000000000000000000 ill-timed 00000000000000000000000000000000 Producer-Price 01000000000000000000000000000000 innocuous 00000000000000000000000000000000 obstinate 00000000000000000000000000000000 Hibben 00100000000000000000000000000000 binder 00000000000111100001001000001000 1975-80 00000000000000000000000000000000 decapitalize 00000000000000000000000000000000 Generalized 00100000000000000000000000000000 inflation-fuels-growth 00000000000000000000000000000000 instruct 00000000000000000000000000000000 needle-like 00000000000000000000000000000000 373.8 00000000000000000000000000000000 Indio 00100000000000000000000000000000 paraphrase 00000000000000000000000000000000 tattered 00000000000000000000000000000000 46.25 00000000000000000000000000000000 Dowie 00100000000000000000000000000000 482.39 00000000000000000000000000000000 34633.63 00000000000000000000000000000000 611.62 00000000000000000000000000000000 Yoshiro 00100000000000000000000000000000 Inoue 00100000000000000000000000000000 Flemings 00100000000000000000000000000000 flat-headed 00000000000000000000000000000000 unmaterialized 00000000000000000000000000000000 Connoisseur 00100000000000000000000000000000 unavoidable 00000000000000000000000000000000 Hiroaki 00100000000000000000000000000000 Storm 00100000000111101010101101100111 ficials 00000000000000000000000000000000 139.95 00000000000000000000000000000000 320.97 00000000000000000000000000000000 35116.02 00000000000000000000000000000000 Ohira 00100000000000000000000000000000 2782.30 00000000000000000000000000000000 2736 00000000000000000000000000000000 2093 00000000000000000000000000000000 Niem 00100000000000000000000000000000 Schuler 00100000000000000000000000000000 Govette 00100000000000000000000000000000 108-point 00000000000000000000000000000000 420.81 00000000000000000000000000000000 allnight 00000000000000000000000000000000 wallops 00000000000000000000000000000000 forecaster 00000000000001101111101110110101 jaded 00000000000000000000000000000000 gobbling 00000000000000000000000000000000 decoy 00000000000000000000000000000000 decoys 00000000000000000000000000000000 misinformation 00000000000000000000000000000000 standing-room 00000000000000000000000000000000 Monitors 00100000000001000111000000010010 arbitrageurs 00000000000000000000000000000000 1,430,000 00000000000000000000000000000000 12,470,000 00000000000000000000000000000000 Stuecker 00100000000000000000000000000000 Preferences 00100000000111011011011100100011 glass-container 00000000000000000000000000000000 rainstorm 00000000000000000000000000000000 100-point-plus 00000000000000000000000000000000 Loughlin 00100000000000000000000000000000 steepness 00000000000000000000000000000000 pausing 00000000000000000000000000000000 edginess 00000000000000000000000000000000 wind-driven 00000000000000000000000000000000 unexecuted 00000000000000000000000000000000 index-futures 00000000000000000000000000000000 blush 00000000000111100000011000110111 Burzon 00100000000000000000000000000000 100-point-equivalency 00000000000000000000000000000000 withing 00000000000000000000000000000000 98.625 00000000000000000000000000000000 .125 00000000000000000000000000000000 whispers 00000000000010000011010111000010 56.625 00000000000000000000000000000000 nosedived 00000000000000000000000000000000 22-rated 00000000000000000000000000000000 forlornly 00000000000000000000000000000000 floundered 00000000011001000110001000110010 ever-anxious 00000000000000000000000000000000 calamities 00000000000000000000000000000000 sparring 00000000000000000000000000000000 then-Treasury 01000000000000000000000000000000 agreed-on 00000000000000000000000000000000 voicing 00000000000000000000000000000000 151.2 00000000000000000000000000000000 PhacoFlex 01000000000000000000000000000000 market-timing 00000000000000000000000000000000 cheek-to-jowl 00000000000000000000000000000000 222.15 00000000000000000000000000000000 acquisition-minded 00000000000000000000000000000000 quake-torn 00000000000000000000000000000000 52%-36 00000000000000000000000000000000 Dolphins 00100000000000000000000000000000 break-down 00000000000000000000000000000000 applicant 00000000000111010111111001100111 retail-based 00000000000000000000000000000000 Robeson 00100000000000000000000000000000 Adelman 00101111111100000101000010001000 crafty 00000000000000000000000000000000 Frazier 00100000000000000000000000000000 dominoes 00000000000000000000000000000000 5.12 00000000000000000000000000000000 disorganized 00000000000100101011011010010000 3:55 00000000000000000000000000000000 Gathered 00100000010000001100010000110010 cash-squeeze 00000000000000000000000000000000 allout 00000000000000000000000000000000 overburden 00000000000000000000000000000000 thereabouts 00000000000000000000000000000000 stock-optioned 00000000000000000000000000000000 flop 00000000000110011111101010110111 co-lead 00000000000000000000000000000000 collaborative 00000000000000000100100000100001 front-loaded 00000000000000000000000000000000 zippo 00000000000000000000000000000000 Sesit 00100000000000000000000000000000 6.81 00000000000000000000000000000000 units-Texas 01000000000000000000000000000000 regressive 00000000000000000000000000000000 139.30 00000000000000000000000000000000 1.8720 00000000000000000000000000000000 140.90 00000000000000000000000000000000 1.8535 00000000000000000000000000000000 state-registered 00000000000000000000000000000000 TREND-SETTER 01000000000000000000000000000000 Naperville 00100000000000000000000000000000 Clay 00100000000101111010000000001000 1.9140 00000000000000000000000000000000 144.80 00000000000000000000000000000000 chagrin 00000000000110111000111101100011 1.8895 00000000000000000000000000000000 city-owned 00000000000000000000000000000000 Rotondo 00100000000000000000000000000000 Witten 00100000000000000000000000000000 1.70-to-1.90 00000000000000000000000000000000 120-140 00000000000000000000000000000000 uptrend 00000000000000000000000000000000 Gilles 00100000000000000000000000000000 Bazy-Sire 01000000000000000000000000000000 1.8650-1.8850 00000000000000000000000000000000 142-143.50 00000000000000000000000000000000 363.30 00000000000000000000000000000000 368.27 00000000000000000000000000000000 2.81 00000000000000000000000000000000 365.46 00000000000000000000000000000000 print-shop 00000000000000000000000000000000 INDEX 01000000000000000000011110000111 JUNK 01000000000000010000000110110000 High-yielding 00100000000000000000000000000000 LEVERAGED 01000000000111101010111100010000 BUY-OUT 01000000000000000000000000000000 MARGIN 01000000000000000001100011000111 OPTIONS 01000000000110101110001111100011 PORTFOLIO 01000000000111101111000010000001 Rolodex 00100000000000000000000000000000 STOCK-INDEX 01000000000000000000000000000000 FUTURES 01000000000111111110011110110000 encompasses 00000000000000000000000000000000 Circuit-breaker 00100000000000000000000000000000 speeded 00000000000000000000000000000000 cascaded 00000000000000000000000000000000 intermarket 00000000000100111010000000110000 uncorrected 00000000000000000000000000000000 333.65 00000000000000000000000000000000 Pautsch 00100000000000000000000000000000 CST 01000000000000000000000000000000 Sporadic 00100000000001011000000000010000 312 00000000000000000000000000000000 Fri 00100000000000000000000000000000 offi 00000000000000000000000000000000 cials 00000000000000000000000000000000 cross-margining 00000000000000000000000000000000 ascertain 00000000000000000000000000000000 margining 00000000000000000000000000000000 shills 00000000000000000000000000000000 risk-fraught 00000000000000000000000000000000 708 00000000000000000000000000000000 political-reform 00000000000000000000000000000000 66,100 00000000000000000000000000000000 area-code 00000000000000000000000000000000 denials 00000000000000000000000000000000 13,400 00000000000000000000000000000000 359,100 00000000000000000000000000000000 imploring 00000000000000000000000000000000 film-processing 00000000000000000000000000000000 voter-registration 00000000000000000000000000000000 0.0003 00000000000000000000000000000000 Watt 00101111111111000000001010001000 uncontested 00000000000000000000000000000000 160-page 00000000000000000000000000000000 second-guess 00000000000000000000000000000000 Countered 00100000010111110110010000110010 Final-hour 00100000000000000000000000000000 108.1 00000000000000000000000000000000 12th-worst 00000000000000000000000000000000 156.83 00000000000000000000000000000000 employee-management 00000000000000000000000000000000 3:07 00000000000000000000000000000000 100-point 00000000000000000000000000000000 guidepost 00000000000000000000000000000000 114.76 00000000000000000000000000000000 inter-exchange 00000000000000000000000000000000 camped 00000000000000000000000000000000 build-up 00000000000000000000000000000000 demoralized 00000000001100011101101001000000 confidence-crusher 00000000000000000000000000000000 intercom 00000000000000000000000000000000 hunch 00000000000111111000110000000001 DOLLARS 01000000000000000000101000001011 Drop 00100000000111111111001100110111 harp 00000000000000000000000000000000 Yass 00100000000000000000000000000000 Susquehanna 00100000000000000000000000000000 de-linkage 00000000000000000000000000000000 dealer-community 00000000000000000000000000000000 Inject 00100000010111101111101110110010 blood-letting 00000000000000000000000000000000 leeches 00000000000000000000000000000000 and... 00000000000000000000000000000000 air-charter 00000000000000000000000000000000 707s 00000000000000000000000000000000 LJH 01000000000000000000000000000000 million-square-foot 00000000000000000000000000000000 hotel-restaurant 00000000000000000000000000000000 BALLOTS 01000000000001100111000001100011 Richland 00100000000000000000000000000000 Bigg 00100000000000000000000000000000 hypermarket 00000000000000000000000000000000 rot 00000000000000000000000000000000 psychotic 00000000000000000000000000000000 steel-ingot 00000000000000000000000000000000 254,280 00000000000000000000000000000000 274,963 00000000000000000000000000000000 12,006,883 00000000000000000000000000000000 11,141,711 00000000000000000000000000000000 peppered 00000000000000000000000000000000 NOVEMBER 01000000000111101111111001100010 Bogle 00100000000000000000000000000000 Bajakian 00100000000000000000000000000000 croak 00000000000000000000000000000000 infuriated 00000000011100101101110000110010 walk-in 00000000000000000000000000000000 thrips 00000000000000000000000000000000 Sector 00100000000111111011101100001001 lesson... 00000000000000000000000000000000 fiscal-first-quarter 00000000000000000000000000000000 yearearlier 00000000000000000000000000000000 Ripples 00100000000111001001010101100011 352-mile 00000000000000000000000000000000 nonstops 00000000000000000000000000000000 Palmdale 00100000000000000000000000000000 humanizing 00000000000000000000000000000000 737-300 00000000000000000000000000000000 Cyrus 00101111111000111110001100011000 57.375 00000000000000000000000000000000 1069 00000000000000000000000000000000 pro-family 00000000000000000000000000000000 767-300 00000000000000000000000000000000 wide-body 00000000000000000000000000000000 medium-haul 00000000000000000000000000000000 PW4060 01000000000000000000000000000000 O'Brian 01000000000000000000000000000000 coliseum 00000000000011111010111000000001 Landrieu 00100000000000000000000000000000 C.S. 01000000000000000000000000000000 50.1%-owned 00000000000000000000000000000000 31.05 00000000000000000000000000000000 Picus 00100000000000000000000000000000 CONCORDE 01000000000000000000000000000000 Electrosurgery 00100000000000000000000000000000 2.016 00000000000000000000000000000000 64-inch 00000000000000000000000000000000 5,782 00000000000000000000000000000000 5,824 00000000000000000000000000000000 53.4 00000000000000000000000000000000 Joy 00100000000111101010010000001000 mildew 00000000000000000000000000000000 impacts 00000000000111111001001110001111 fracture 00000000000000000000000000000000 pervade 00000000000000000000000000000000 exited 00000000000000000000000000000000 troughs 00000000000000000000000000000000 fluctuates 00000000000000000000000000000000 Benchmark 00100000000111111111011000010000 Calculating 00100000000111011111011101000000 sloshing 00000000000000000000000000000000 spiraled 00000000000000000000000000000000 haggle 00000000000000000000000000000000 doubter 00000000000000000000000000000000 chemical-industry 00000000000000000000000000000000 plant-expansion 00000000000000000000000000000000 deflected 00000000000000000000000000000000 straight-from-the-shoulder 00000000000000000000000000000000 drawn-out 00000000000000000000000000000000 restarting 00000000000000000000000000000000 trade-group 00000000000000000000000000000000 imponderable 00000000000000000000000000000000 business-interruption 00000000000000000000000000000000 dickering 00000000000000000000000000000000 Semegran 00100000000000000000000000000000 Propane 00100000000010110101010000110000 network-buying 00000000000000000000000000000000 Erickson 00101111111101100100001000001000 spot-television 00000000000000000000000000000000 re-examination 00000000000000000000000000000000 Chrisanthopoulos 00100000000000000000000000000000 finalizing 00000000000000000000000000000000 Triggering 00100000000111100111111101000000 ANGELES 01001111111100101000000100011101 LOS 01001111111011010111101101110000 0.48 00000000000000000000000000000000 Korean-U.S. 01000000000000000000000000000000 Negotiators 00100000000000100110100110110011 1%-a-year 00000000000000000000000000000000 stringently 00000000000000000000000000000000 Minolta 00100000000000000000000000000000 Measuring 00100000000010110010110001000000 tablespoons 00000000000000000000000000000000 WINSTON-SALEM 01000000000000000000000000000000 spoonfuls 00000000000000000000000000000000 washload 00000000000000000000000000000000 soapsuds 00000000000000000000000000000000 mortgage-based 00000000000000000000000000000000 mites 00000000000000000000000000000000 watcher 00000000000000000000000000000000 demolish 00000000000000000000000000000000 Superconcentrates 00100000000000000000000000000000 powders 00000000000000000000000000000000 Bleach 00100000000000000000000000000000 softener 00000000000000000000000000000000 pouches 00000000000000000000000000000000 less-established 00000000000000000000000000000000 Jergens 00100000000000000000000000000000 hand-lotion 00000000000000000000000000000000 product-testing 00000000000000000000000000000000 payment... 00000000000000000000000000000000 betwen 00000000000000000000000000000000 tackled 00000010101101000101010000110010 fiscal-year 00000000000000000000000000000000 newspaper-publishing 00000000000000000000000000000000 maggots 00000000000000000000000000000000 Buente 00100000000000000000000000000000 haberdashery 00000000000000000000000000000000 Luxco 00100000000000000000000000000000 operationally 00000000000000000000000000000000 Marcy 00100000000000000000000000000000 overexpansion 00000000000000000000000000000000 mid-1987 00000000000000000000000000000000 Refiners 00100000000110101100010000110011 milder 00000000000000000000000000000000 Coordinating 00100000000111110110010110110000 align 00000000000000000000000000000000 government-mandated 00000000000000000000000000000000 L.M. 01000000000000000000000000000000 unhealed 00000000000000000000000000000000 feuded 00000000000000000000000000000000 284 00000000000000000000000000000000 detests 00000000000000000000000000000000 newborn 00000000000010001010101000110000 Vagabonds 00100000000000000000000000000000 representives 00000000000000000000000000000000 nightmares 00000000000101001101111101100011 Holderbank 00100000000000000000000000000000 Glaris 00100000000000000000000000000000 VICTORIES 01000000000111000001111000100011 Dundee 00101111111100111000010000101000 87.2 00000000000000000000000000000000 drought-induced 00000000000000000000000000000000 Pharaoh 00100000000000000000000000000000 Wanders 00100000000000000000000000000000 drought-stunted 00000000000000000000000000000000 4-a-bushel 00000000000000000000000000000000 4.0675 00000000000000000000000000000000 Basse 00100000000000000000000000000000 AgResource 01000000000000000000000000000000 CBOT 01000000000000000000000000000000 Unseasonably 00100000000000000000000000000000 Beckwith 00100000000000000000000000000000 panhandle 00000000000111111001001010101000 exams 00000000001111100010001000100011 pivot 00000000000000000000000000000000 Feltes 00100000000000000000000000000000 Juice 00100000000011101010000010100101 90-pound 00000000000000000000000000000000 146.6 00000000000000000000000000000000 breast-cancer 00000000000000000000000000000000 4.95 00000000000000000000000000000000 1.3210 00000000000000000000000000000000 dollar-priced 00000000000000000000000000000000 harvesting 00000000000001111010110001000000 Hinton 00100000000000000000000000000000 Stotler 00100000000000000000000000000000 20.89 00000000000000000000000000000000 buoyancy 00000000000000000000000000000000 predator 00000000000000000000000000000000 Colombatto 00100000000000000000000000000000 pharaohs 00000000000000000000000000000000 Holliday 00100000000000000000000000000000 Cosmopulos 00100000000000000000000000000000 NOT-GUILTY 01000000000000000000000000000000 PLEA 01000000000110100111001011100111 Abrahams 00100000000000000000000000000000 KOREAN 01000000000000000001010100110000 AGENCY 01000000000000001000010000100101 Cheil 00100000000000000000000000000000 1,848,000 00000000000000000000000000000000 computer-data-storage 00000000000000000000000000000000 81.5 00000000000000000000000000000000 Operationally 00100000000000000000000000000000 161.8 00000000000000000000000000000000 Walden 00100000000000000000000000000000 10-K 01000000000000000000000000000000 10K 01000000000000000000000000000000 86.2 00000000000000000000000000000000 Gelles 00100000000000000000000000000000 tallying 00000000000000000000000000000000 adjourned 00000001011011010100010000110010 89.7 00000000000000000000000000000000 Groton 00100000000000000000000000000000 Upsala 00100000000000000000000000000000 make-work 00000000000000000000000000000000 hyaluronic 00000000000000000000000000000000 rooster-comb 00000000000000000000000000000000 first-phase 00000000000000000000000000000000 unsteadiness 00000000000000000000000000000000 decontrol 00000000000000000000000000000000 Improved 00100000000000000010011001000000 revolutionized 00000000000000000000000000000000 capitulated 00000000000000000000000000000000 2,735 00000000000000000000000000000000 404.1 00000000000000000000000000000000 383.8 00000000000000000000000000000000 Kassan 00100000000000000000000000000000 flippant 00000000000000000000000000000000 vehicle-making 00000000000000000000000000000000 Lakewood 00100000000110100100101001101000 no-layoff 00000000000000000000000000000000 snowstorm 00000000000000000000000000000000 blasting 00000000000000000000000000000000 insensitivity 00000000000000000000000000000000 reassignments 00000000000000000000000000000000 Firebird 00100000000000000000000000000000 Camaro 00100000000110000100000001000111 Folks 00100000000111101111000100110011 Therese 00100000000000000000000000000000 Shrieves 00100000000000000000000000000000 flex 00000000000000000000000000000000 141.9 00000000000000000000000000000000 formulations 00000000000000000000000000000000 Featherston 00100000000000000000000000000000 two-seater 00000000000000000000000000000000 romp 00000000000111000100110000100111 union-management 00000000000000000000000000000000 801.6 00000000000000000000000000000000 Nymark 00100000000000000000000000000000 net-benefit 00000000000000000000000000000000 Jodi 00100000000000000000000000000000 Harvie 00100000000000000000000000000000 Viren 00100000000000000000000000000000 Isaly 00100000000000000000000000000000 bio-research 00000000000000000000000000000000 Grossner 00100000000000000000000000000000 fungi 00000000000000000000000000000000 flammable 00000000000000000000000000000000 preferred-dividend 00000000000000000000000000000000 over-allotments 00000000000000000000000000000000 stiffening 00000000000000000000000000000000 94.8 00000000000000000000000000000000 149.9 00000000000000000000000000000000 anti-cholesterol 00000000000000000000000000000000 Vasotec 00100000000000000000000000000000 Primaxin 00100000000000000000000000000000 Pepcid 00100000000000000000000000000000 anti-ulcer 00000000000000000000000000000000 311.8 00000000000000000000000000000000 171.4 00000000000000000000000000000000 87.7 00000000000000000000000000000000 sharp-rising 00000000000000000000000000000000 Capoten 00100000000000000000000000000000 Bristol-Meyers 01000000000000000000000000000000 ScheringPlough 01000000000000000000000000000000 94.4 00000000000000000000000000000000 Feldene 00100000000000000000000000000000 216.8 00000000000000000000000000000000 Butane 00100000000000000000000000000000 Xanax 00100000000000000000000000000000 tranquilizer 00000000000000000000000000000000 Halcion 00100000000000000000000000000000 sedative 00000000000000000000000000000000 tranquilizing 00000000000000000000000000000000 hair-growing 00000000000000000000000000000000 Rogaine 00100000001001111001110010100111 customs-clearance 00000000000000000000000000000000 47.2 00000000000000000000000000000000 botanical 00000000000000000000000000000000 memoir 00000000000000000000000000000000 Arrangements 00100000000111100100010000100111 peopled 00000000001010100001110000110010 eccentrics 00000000000000000000000000000000 oddballs 00000000000000000000000000000000 sexpot 00000000000000000000000000000000 hell-kitten 00000000000000000000000000000000 mediocrity 00000000000000000000000000000000 descents 00000000000000000000000000000000 13.3 00000000000000000000000000000000 glamorized 00000000000000000000000000000000 nonflammable 00000000000000000000000000000000 Snezak 00100000000000000000000000000000 hallways 00000000000000000000000000000000 Syrians 00100000000000000000000000000000 horde 00000000000000000000000000000000 friezes 00000000000000000000000000000000 Pompeii 00100000000000000000000000000000 discombobulation 00000000000000000000000000000000 inwardly 00000000000000000000000000000000 conjecture 00000000000000000000000000000000 human-generated 00000000000000000000000000000000 heathen 00000000000000000000000000000000 Sharp-witted 00100000000000000000000000000000 memorialist 00000000000000000000000000000000 Truman 00101111111000100110101010001000 Capote 00100000000000000000000000000000 bitchy 00000000000000000000000000000000 bark-nibbling 00000000000000000000000000000000 130.6 00000000000000000000000000000000 realigned 00000000000000000000000000000000 bedrooms 00000000000000000000000000000000 uncles 00000000000000000000000000000000 Gabe 00100000000000000000000000000000 rotten 00000000000000100111011010010000 rhymed 00000000000000000000000000000000 strangeness 00000000000000000000000000000000 baker 00001111111100100001001010001000 stratosphere 00000000000000000000000000000000 disliked 00000000000000000000000000000000 lugged 00000000000000000000000000000000 work-in-progress 00000000000000000000000000000000 Philosophy 00100000000110101011101001100111 delightfully 00000000000000000000000000000000 saucy 00000000000000000000000000000000 countervailing 00000000000001011000000000110000 flirtation 00000000000000000000000000000000 quaintly 00000000000000000000000000000000 out-of-synch 00000000000000000000000000000000 riffing 00000000000000000000000000000000 operas 00000000000100011111010101100011 drug-seeking 00000000000000000000000000000000 part-owner 00000000000000000000000000000000 21-square-mile 00000000000000000000000000000000 intercorporate 00000000000000000000000000000000 highest-ranking 00000000000000000000000000000000 saluted 00000000000000000000000000000000 comeuppance 00000000000111100011101110100111 48.125 00000000000000000000000000000000 personalize 00000000000000000000000000000000 sunburn 00000000000000000000000000000000 lopped 00000000000000000000000000000000 120.75 00000000000000000000000000000000 Trumped 00100000000000000000000000000000 once-desirable 00000000000000000000000000000000 Faith 00100000000111110010001110100111 earthlings 00000000000000000000000000000000 Garrick-Aug 01000000000000000000000000000000 VAX9000 01000000000000000000000000000000 11.56 00000000000000000000000000000000 Spear 00100000000111100110010000101000 plaguing 00000000000000000010010101000000 Avenues 00100000000111111011001110100011 foaming 00000000000000000000000000000000 up-and-coming 00000000000000000000000000000000 PCST 01000000000000000000000000000000 722 00000000000000000000000000000000 Risks 00100000000111101011011000100011 insulator 00000000000000000000000000000000 Precision 00100000000111010010101010110000 Castparts 00100000000000000000000000000000 PCP 01000000000000000000000000000000 castings 00000000000000000000000000000000 RBSPr 01000000000000000000000000000000 Telephones 00100000000111011110111001100011 Polyurethane 00100000000000000000000000000000 anniversaries 00000000000000000000000000000000 83-year-old 00000000000000000000000000000000 3.02 00000000000000000000000000000000 Thurgood 00100000000000000000000000000000 just-picked 00000000000000000000000000000000 80s 00000000000000000000000000000000 frustrations 00000000000110101100111101100011 eke 00000000000000000000000000000000 mid-1960s 00000000000000000000000000000000 shields 00001111111001101001000000001000 Gases 00100000000110010011011111001001 ruefully 00000000000000000000000000000000 revisits 00000000000000000000000000000000 dissenter 00000000000000000000000000000000 81-year-old 00000000000000000000000000000000 veterinarians 00000000000000000000000000000000 periodontal 00000000000000000000000000000000 impassioned 00000000000000000000000000000000 A.E. 01000000000000000000000000000000 clean-bank 00000000000000000000000000000000 Acquirers 00100000000111101001100000110011 Pitman-Moore 01000000000000000000000000000000 banishment 00000000000000000000000000000000 beached 00000000000000000000000000000000 whales 00000000000000000000000000000000 branch-by-branch 00000000000000000000000000000000 30.5 00000000000000000000000000000000 949 00000000000000000000000000000000 989 00000000000000000000000000000000 80-nation 00000000000000000000000000000000 soundings 00000000000000000000000000000000 UniHealth 01000000000000000000000000000000 Pricor 00100000000000000000000000000000 de-emphasize 00000000000000000000000000000000 mass-circulation 00000000000000000000000000000000 circulations 00000000000000000000000000000000 hyper-competitive 00000000000000000000000000000000 361.8 00000000000000000000000000000000 wean 00000000000000000000000000000000 tacky 00000000000000000000000000000000 Giveaways 00100000000000000000000000000000 Drexler 00100000000000000000000000000000 reliant 00000000000111100000100000110010 soars 00000000000000000000000000000000 punchy 00000000000000000000000000000000 hourlong 00000000000000000000000000000000 head-to-head 00000000000000000000000000000000 co-anchored 00000000000000000000000000000000 signatories 00000000000000000000000000000000 thin-walled 00000000000000000000000000000000 thick-walled 00000000000000000000000000000000 bulky 00000000000000000000000000000000 investigative-reporting 00000000000000000000000000000000 Headline 00100000000111010011111101100111 repositioning 00000000000000000000000000000000 channel-zapping 00000000000000000000000000000000 grazers 00000000000000000000000000000000 junkies 00000000000000000000000000000000 molded 00000000000000000000000000000000 Daybreak 00100000000000000000000000000000 Daywatch 00100000000000000000000000000000 Newsnight 00100000000000000000000000000000 more-distinctive 00000000000000000000000000000000 summer-holiday 00000000000000000000000000000000 world-affairs 00000000000000000000000000000000 differentiated 00000000000000000000000000000000 Crossfire 00100000000000000000000000000000 cable-television-equipped 00000000000000000000000000000000 Shaw-Crier 01000000000000000000000000000000 newcasts 00000000000000000000000000000000 two-time 00000000000000000000000000000000 Huntley-Brinkley 01000000000000000000000000000000 award-winning 00000000000000000000000000000000 branded 00000000001110010001101001000000 McCracken 01000000000000000000000000000000 MacNeil-Lehrer 01000000000000000000000000000000 NewsHour 01000000000000000000000000000000 indispensable 00000000000011100101001110010000 less-experienced 00000000000000000000000000000000 cable-TV-system 01000000000000000000000000000000 general-interest 00000000000000000000000000000000 long-format 00000000000000000000000000000000 Stengel 00100000000000000000000000000000 Herwick 00100000000000000000000000000000 Phosphate 00100000000000000000000000000000 Backs 00100000010100100111000000010010 Phosphates 00100000000000000000000000000000 Vihon 00100000000000000000000000000000 numbering 00000000000000000000000000000000 moot 00000000000010001011110110010000 dockets 00000000000000000000000000000000 McIntosh 01000000000000000000000000000000 appellate-court 00000000000000000000000000000000 asbestosis 00000000000000000000000000000000 prudential 00000000000111001001111000101000 Mil-Spec 01000000000000000000000000000000 Kurth 00100000000000000000000000000000 Rolm 00100000000000111100111100101000 booby 00000000000000000000000000000000 peremptory 00000000000000000000000000000000 SOUTH 01000000000010000010000110101000 AFRICA 01000000000101111101110101101000 FREED 01000001100011010100010000110010 brandishing 00000000000000000000000000000000 depots 00000000000000000000000000000000 vicitims 00000000000000000000000000000000 purge 00000000000111001101001010110111 anti-party 00000000000000000000000000000000 exploiters 00000000000000000000000000000000 student-led 00000000000000000000000000000000 Zaire 00100000000110110100111101101000 Mobutu 00100000000000000000000000000000 Angolan 00100000000110000101011000110000 Savimbi 00100000000000000000000000000000 Zairean 00100000000000000000000000000000 Baghdad 00100000000111100010101101101000 mediators 00000000000000000000000000000000 Texas-Louisiana 01000000000000000000000000000000 low-lying 00000000000000000000000000000000 subconscious 00000000000000000000000000000000 Sisk 00100000000000000000000000000000 R.B. 01000000000000000000000000000000 withholdings 00000000000000000000000000000000 grimmest 00000000000000000000000000000000 145.21 00000000000000000000000000000000 unquestionably 00000001111001000000001001110010 Dongen 00100000000000000000000000000000 Wholesaler-Distributors 01000000000000000000000000000000 omen 00000000000000000000000000000000 32.82 00000000000000000000000000000000 Producer 00100000000111101111000001110101 mesothelioma 00000000000000000000000000000000 485,000 00000000000000000000000000000000 watered 00000000110110101001001000110010 2,050-passenger 00000000000000000000000000000000 tradeable 00000000000000000000000000000000 participations 00000000000000000000000000000000 hounding 00000000000000000000000000000000 antsy 00000000000000000000000000000000 Branches 00100000000000000011000001100011 useless 00000000000110100111110110010000 cheeses 00000000000000000000000000000000 nibble 00000000000000000000000000000000 three-hour-show 00000000000000000000000000000000 Hime 00100000000000000000000000000000 Lawyer 00100000000111101111111110110101 Bet 00100000000111111110011010110111 invaders 00000000000000000000000000000000 cheesy 00000000000000000000000000000000 knock-offs 00000000000000000000000000000000 semi-celebrities 00000000000000000000000000000000 grammar-school 00000000000000000000000000000000 on-air 00000000000000000000000000000000 pretending 00000000000000000000000000000000 flatout 00000000000000000000000000000000 clamored 00000000000000000000000000000000 Cacao 00100000000000000000000000000000 showgirls 00000000000000000000000000000000 Topping 00100000000111101101001101000000 Gottschalk 00100000000000000000000000000000 slanted 00000000000000000000000000000000 frying 00000000000000000000000000000000 pancakes 00000000000000000000000000000000 protectionist 00000000000010010001000000010000 Mega-hits 00100000000000000000000000000000 pan-European 01000000000000000000000000000000 three-hour-long 00000000000000000000000000000000 Eurovision 00100000000000000000000000000000 Contest 00100000000111111111110010110111 soft-rock 00000000000000000000000000000000 Jeux 00100000000000000000000000000000 Sans 00100000000000000000000000000000 Frontieres 00100000000000000000000000000000 dart-throwing 00000000000000000000000000000000 snooker 00000000000000000000000000000000 marathons 00000000000000000000000000000000 knock-off 00000000000000000000000000000000 Chateauvallon 00100000000000000000000000000000 Schwarzwaldklinik 00100000000000000000000000000000 Piovra 00100000000000000000000000000000 Octopus 00100000000100100111100100100001 Palermo 00100000000000000000000000000000 mini-series 00000000000000000000000000000000 Juncal 00100000000000000000000000000000 bullfighter 00000000000000000000000000000000 Wenham 00100000000000000000000000000000 home-produced 00000000000000000000000000000000 tampers 00000000000000000000000000000000 cheap-to-make 00000000000000000000000000000000 expensive-to-produce 00000000000000000000000000000000 Australian-American 01000000000000000000000000000000 baffling 00000000000000000000000000000000 Reef 00100000000000000000000000000000 Skippy 00100000000000000000000000000000 Creator 00100000000101010111111000001111 Grishaw-Mueller 01000000000000000000000000000000 Colby 00100000000000000000000000000000 Carrington 00101111111101011000000101001000 Carlta 00100000000000000000000000000000 Vitzhum 00100000000000000000000000000000 Gillers 00100000000000000000000000000000 Eurodynamics 00100000000000000000000000000000 once-balkanized 00000000000000000000000000000000 Seltzer 00100000000000000000000000000000 Dowty 00100000000000000000000000000000 tight-fisted 00000000000000000000000000000000 Plessey 00100000000111101000111100101000 Messerschmitt-Boelkow 01000000000000000000000000000000 Blohm 00100000000110011011000001001000 Aerospatiale 00100000000000000000000000000000 Rapier 00100000000000000000000000000000 Computer-generated 00100000000000000000000000000000 Crotale 00100000000000000000000000000000 Canadian-dollar 00100000000000000000000000000000 Feick 00100000000000000000000000000000 Edmonton 00100000000110010011101001101000 fast-shrinking 00000000000000000000000000000000 integrated-steel 00000000000000000000000000000000 Ryerson 00100000000000000000000000000000 shipping-rate 00000000000000000000000000000000 intergrated-steel 00000000000000000000000000000000 steel-service-center 00000000000000000000000000000000 Predicting 00100000000111111110110101000000 75.50 00000000000000000000000000000000 reassurances 00000000000000000000000000000000 defies 00000000000000000000000000000000 typefaces 00000000000000000000000000000000 rebelled 00000000000000000000000000000000 Warnock 00100000000000000000000000000000 pre-tested 00000000000000000000000000000000 microchannel 00000000000000000000000000000000 Slick 00100000000110011000011010010000 Users 00100000000111100000010000110011 laggards 00000000000000000000000000000000 integrated-circuit 00000000000000000000000000000000 Semifinished 00100000000000000000000000000000 Ever-more 00100000000000000000000000000000 obsoleted 00000000000000000000000000000000 server 00000000000000000000000000000000 Drain 00100000000110100011001010110111 IOWA 01000000000111111111110001101000 MAKING 01000000000111111111111101000000 midwestern 00000000000000111101000100110000 bluish 00000000000000000000000000000000 Maintain 00100000000111110111111110110010 THANKS 01000000000111110101111000110010 noninstitutionalized 00000000000000000000000000000000 Careers 00100000000111101101011101100011 Count 00100000000111101100001000110111 Well-to-Do 01000000000000000000000000000000 MANY 01000000000001001001001011000000 AFFLUENT 01000000000001000110101000110000 discolored 00000000000000000000000000000000 Two-thirds 00100000000000000000000000000000 super-rich 00000000000000000000000000000000 775,000 00000000000000000000000000000000 twothirds 00000000000000000000000000000000 Thirty-five 00100000000000000000000000000000 NUMBER 01000000000111111111111010111111 Per-capita 00100000000000000000000000000000 divvied 00000000000000000000000000000000 16,489 00000000000000000000000000000000 15,472 00000000000000000000000000000000 11,116 00000000000000000000000000000000 23,059 00000000000000000000000000000000 rhymes 00000000000000000000000000000000 Willson 00100000000000000000000000000000 kindred 00000000000000000000000000000000 fanciest 00000000000000000000000000000000 market-research 00000000000000000000000000000000 Spruill 00100000000000000000000000000000 unjustly 00000000000000000000000000000000 Manske 00100000000000000000000000000000 Pocket 00100000000111100111010000000001 Billiards 00100000000000000000000000000000 suit-and-tie 00000000000000000000000000000000 rowdy 00000000000000000000000000000000 Introducing 00100000000011010011111101000000 Councilwoman 00100000000000000000000000000000 Reinker 00100000000000000000000000000000 Councilman 00100000000000100111011110110101 Haole 00100000000000000000000000000000 redone 00000000000000000000000000000000 37.3 00000000000000000000000000000000 tucking 00000000000000000000000000000000 brah 00000000000000000000000000000000 bruddah 00000000000000000000000000000000 Sorry 00100000000000101111110000110010 9:30-10 00000000000000000000000000000000 parted 00000000000000000000000000000000 deli 00000000000000000000000000000000 Borscht 00100000000000000000000000000000 instinctively 00000000000000000000000000000000 vernacular 00000000000000000000000000000000 shvartze 00000000000000000000000000000000 mustache 00000000000111100100010010110101 inward 00000000000000011011111100110010 outward 00000000001000010011001100100111 underdog 00000000000000000000000000000000 minstrel 00000000000000000000000000000000 underemployed 00000000000000000000000000000000 gentile 00000000000000000000000000000000 zealot 00000000000000000000000000000000 blade 00000000000010101100001000100001 Pre-trial 00100000000000000000000000000000 prattle 00000000000000000000000000000000 co-existence 00000000000000000000000000000000 intolerance 00000000000000000000000000000000 high-performing 00000000000000000000000000000000 passe 00000000000000000000000000000000 genre 00000000000111101100111101100111 Creations 00100000000110001101111101100011 Bostonians 00100000000000000000000000000000 shoe-horn 00000000000000000000000000000000 Redgrave 00100000000000000000000000000000 Karin 00100000000000000000000000000000 Maggart 00100000000000000000000000000000 disapproving 00000000000000000000000000000000 accents 00000000000000000000000000000000 Abie 00100000000000000000000000000000 assimilated 00000000000000000000000000000000 plagiarism 00000000000000010111100010100111 Birney 00101111111111110001110001001000 bubbles 00000000000000000000000000000000 didactic 00000000000000000000000000000000 Lear 00101111111110000010010000001000 enlighten 00000000000000000000000000000000 overplanted 00000000000000000000000000000000 incompatibility 00000000000000000000000000000000 preachiness 00000000000000000000000000000000 standup 00000000000000000000000000000000 meting 00000000000000000000000000000000 routines 00000000000000000000000000000000 trade-ethnic 00000000000000000000000000000000 Catholic-Jewish 01000000000000000000000000000000 Carmelite 00100000000000000000000000000000 Auschwitz 00100000000000000000000000000000 interrupt 00000000000110001011111110110010 shtik 00000000000000000000000000000000 shmaltzy 00000000000000000000000000000000 60-year 00000000000000000000000000000000 economy... 00000000000000000000000000000000 indices 00000000000000000000000000000000 country... 00000000000000000000000000000000 Amperex 00100000000000000000000000000000 Markrud 00100000000000000000000000000000 87-7 00000000000000000000000000000000 trimmer 00000000000000000000000000000000 acquiesce 00000000000000000000000000000000 objectively 00000010010000000000010001110010 soon-to-expire 00000000000000000000000000000000 chillingly 00000000000000000000000000000000 physician-reimbursement 00000000000000000000000000000000 completed-contract 00000000000000000000000000000000 Prevent 00100000000011110111111110110010 uninitiated 00000000000000000000000000000000 Curb 00100000000111100010111110110010 Raise 00100000000110111111001110110010 Forecasting 00100000000000001000110001000000 Aromatiques 00100000000000000000000000000000 Elkins 00100000000000000000000000000000 Withhold 00100000001111001111101110110010 semimonthly 00000000000000000000000000000000 Restrict 00100000000001011010111110110010 air-passenger 00000000000000000000000000000000 3-a-person 00000000000000000000000000000000 Removal 00100000000111111111111101001111 pre-try 00000000000000000000000000000000 airline-landing 00000000000000000000000000000000 Airports 00100000000111101111010001100011 semi-liquefied 00000000000000000000000000000000 Increases 00100000000111101111101010000011 Direction 00100000000111111011001001100111 Patterns 00100000000100000001111100100011 captioned 00000000000000000000000000000000 Reva 00100000000000000000000000000000 BULL 01000000000111111110111110110000 shoring 00000000000000000000000000000000 INFORMATION 01000000000110001011100010111001 low-grade 00000000000000000000000000000000 Ba-2 00100000000000000000000000000000 L.F. 01000000000000000000000000000000 obey 00000000001010111111110110110010 2450 00000000000000000000000000000000 Sort 00100000000111111111110110111111 headcount-control 00000000000000000000000000000000 Swaine 00101111111111010111101001001000 clocked 00000000000000000000000000000000 Cravath 00100000000111100011110000101000 manifestation 00000000000111110101001000111111 recurrent 00000000000110110001000000010000 Valais 00100000000000000000000000000000 Thirties 00100000000111101100110000010111 nibbling 00000000000000000000000000000000 pricked 00000000000000000000000000000000 Woodside 00100000000000000000000000000000 elucidative 00000000000000000000000000000000 C-Span 01000000000000000000000000000000 heaping 00000000000000000000000000000000 loaves 00000000000000000000000000000000 bilious 00000000000000000000000000000000 court... 00000000000000000000000000000000 Absolute 00100000000000001101010100010000 criterion 00000000000000010010011000100001 doth 00000000000000000000000000000000 demographically 00000000000000000000000000000000 34.625 00000000000000000000000000000000 trust.. 00000000000000000000000000000000 quasi-parliamentary 00000000000000000000000000000000 incompetency 00000000000000000000000000000000 Tail 00100000000010101010111000000001 Gunner 00100000000000000000000000000000 Weber 00101111110100100000000010001000 Renewed 00100000000000010101010001000000 precludes 00000000000010110001000000010010 Palmingiano 00100000000000000000000000000000 308 00000000000000000000000000000000 retry 00000000000000000000000000000000 unconstitutionally 00000000000000000000000000000000 concur 00000000000000000000000000000000 Drawing 00100000000101001110100001000000 Spalsbury 00100000000000000000000000000000 Estes 00100000000000000000000000000000 triskaidekaphobia 00000000000000000000000000000000 10-2 00000000000000000000000000000000 Ricardo 00100000000000000000000000000000 spanned 00000000000000000000000000000000 1962-85 00000000000000000000000000000000 jinxed 00000000000000000000000000000000 unlucky 00000000000000000000000000000000 you-know-what 00000000000000000000000000000000 1940-1987 00000000000000000000000000000000 delicious 00000000000000000000000000000000 cradle 00000000000111010001100101100111 14.90 00000000000000000000000000000000 467.29 00000000000000000000000000000000 16.18 00000000000000000000000000000000 46.12-point 00000000000000000000000000000000 167.7 00000000000000000000000000000000 single-day 00000000000000000000000000000000 college-educated 00000000000000000000000000000000 thrived 00000000000000000000000000000000 fundamantalist 00000000000000000000000000000000 bargain-hunt 00000000000000000000000000000000 449.33 00000000000000000000000000000000 9.31 00000000000000000000000000000000 462.98 00000000000000000000000000000000 Methodists 00100000000000000000000000000000 27.50-a-share 00000000000000000000000000000000 8.11 00000000000000000000000000000000 8.37 00000000000000000000000000000000 9.91 00000000000000000000000000000000 scooping 00000000000000000000000000000000 Rightly 00100010001001000001001001110010 daunted 00000000000000000000000000000000 752 00000000000000000000000000000000 27.97 00000000000000000000000000000000 discerns 00000000000000000000000000000000 re-emergence 00000000000000000000000000000000 overlaid 00000000000000000000000000000000 severest 00000000000000000000000000000000 Presbyterians 00100000000000000000000000000000 mortis 00000000000000000000000000000000 16-year-olds 00000000000000000000000000000000 701 00000000000000000000000000000000 urinary 00000000000000000000000000000000 Episcopalians 00100000000000000000000000000000 1872 00000000000000000000000000000000 Kaufhaus 00100000000000000000000000000000 management-controlled 00000000000000000000000000000000 vote-diluting 00000000000000000000000000000000 Koninklijke 00100000000000000000000000000000 hatred 00000000001100011110011010100111 Politicians 00100000000110111100111000110011 singly 00000000000000000000000000000000 semi-public 00000000000000000000000000000000 mum 00000000000000000000000000000000 eerily 00000000000000000000000000000000 gimmick-ridden 00000000000000000000000000000000 repetition 00000000000000000000000000000000 be-that 00000000000000000000000000000000 maneuverings 00000000000000000000000000000000 adminstration 00000000000000000000000000000000 reconciling 00000000000000000000000000000000 left-leaning 00000000000000000000000000000000 B&H 01000000000000000000000000000000 CSS 01000000000000000000000000000000 Knowledgeware 00100000000000000000000000000000 1990A 01000000000000000000000000000000 55,730,000 00000000000000000000000000000000 68,230,000 00000000000000000000000000000000 36.23 00000000000000000000000000000000 Facility 00100000000111101111011010001001 Dawkins 00100000000000000000000000000000 Strand 00100000000000000000000000000000 Yost 00100000000000000000000000000000 anti-war-related 00000000000000000000000000000000 78-year-old 00000000000000000000000000000000 Ashwood 00100000000000000000000000000000 Regency 00100000001101101001000100101000 Showalter 00100000000000000000000000000000 calmly 00000000000000000000000000000000 Discount 00100000000111110010010011000111 Scwhab 00100000000000000000000000000000 Helfman 00100000000000000000000000000000 multi-million 00000000000000000000000000000000 TC 01000000000000000000000000000000 Maserati 00100000000000000000000000000000 gloaters 00000000000000000000000000000000 Berrigan 00100000000000000000000000000000 bitten 00000000000000000000000000000000 clipboard-sized 00000000000000000000000000000000 consorting 00000000000000000000000000000000 Sophisticated 00100000000100000001010010010000 munchkin 00000000000000000000000000000000 skimp 00000000000000000000000000000000 briefcases 00000000000000000000000000000000 scolded 00000000000000000000000000000000 misleadingly 00000000000000000000000000000000 ambitiously 00000000000000000000000000000000 Palmtops 00100000000000000000000000000000 AA 01000000000000000000000000000000 chaps 00000000000000000000000000000000 palmtop 00000000000000000000000000000000 Grail 00100000000000000000000000000000 Laptops 00100000000010101000111001100011 Amitai 00100000000000000000000000000000 Purdy 00101111111001101101000100001000 gadget 00000000000000000000000000000000 opening-hour 00000000000000000000000000000000 inevitability 00000000000000000000000000000000 center-stage 00000000000000000000000000000000 test-tube 00000000000000000000000000000000 Canion 00100000000000000000000000000000 MinisPort 01000000000000000000000000000000 two-inch 00000000000000000000000000000000 floppies 00000000000000000000000000000000 uncombed 00000000000000000000000000000000 Talsky 00100000000000000000000000000000 Lempesis 00100000000000000000000000000000 DataQuest 01000000000111011101101000101000 modem 00000000000000000000000000000000 T-1000 00100000000000000000000000000000 T-1600 00100000000000000000000000000000 69.7 00000000000000000000000000000000 purges 00000000000000000000000000000000 46.7 00000000000000000000000000000000 electronic-warfare 00000000000000000000000000000000 Avco 00100000000000000000000000000000 90.1 00000000000000000000000000000000 Plunge 00100000000111111010101100110111 Twenty-four 00100000000000000000000000000000 unmasks 00000000000000000000000000000000 Angry 00100000000010011010110100010000 5.625 00000000000000000000000000000000 Navistar 00100000000100110011010100101000 braved 00000000000000000000000000000000 14.125 00000000000000000000000000000000 ended... 00000000000000000000000000000000 Finnie 00100000000000000000000000000000 action-adventure 00000000000000000000000000000000 Nightwatch 00100000000000000000000000000000 fractioning 00000000000000000000000000000000 Arsenio 00100000000000000000000000000000 Appleseed 00100000000000000000000000000000 383.9 00000000000000000000000000000000 memorialized 00000000000000000000000000000000 ubiquity 00000000000000000000000000000000 savored 00000000000000000000000000000000 configurations 00000000000000000000000000000000 siphon 00000000000000000000000000000000 irrepressible 00000000000000000000000000000000 strangely 00000000000000000000000000000000 one-person 00000000000000000000000000000000 Akers 00101111111000111010000010001000 Sharply 00100000000011101000010001110010 sustenance 00000000000000000000000000000000 8.820 00000000000000000000000000000000 anti-nausea 00000000000000000000000000000000 retrench 00000000000000000000000000000000 debt... 00000000000000000000000000000000 reigniting 00000000000000000000000000000000 go-around 00000000000000000000000000000000 skidding 00000000000000000000000000000000 Bogner 00100000000000000000000000000000 NSA 01000000000000000000000000000000 pigments 00000000000000000000000000000000 Ravitz 00100000000000000000000000000000 107.8 00000000000000000000000000000000 Centel 00100000000111110101111100101000 99.943 00000000000000000000000000000000 9.008 00000000000000000000000000000000 8.78 00000000000000000000000000000000 product-liability 00000000000000000000000000000000 afoot 00000000000000000000000000000000 PSA 01000000000000000000000000000000 10.72 00000000000000000000000000000000 1,350,000 00000000000000000000000000000000 Two-Way 01000000000000000000000000000000 C.E. 01000000000000000000000000000000 bedding 00000000000000000000000000000000 cohorts 00000000000000000000000000000000 D.s 00101111111011011011001100001000 slickly 00000000000000000000000000000000 Turned 00100000000111001001001000110010 blabs 00000000000000000000000000000000 perfidious 00000000000000000000000000000000 innocently 00000000000000000000000000000000 loutish 00000000000000000000000000000000 kelp 00000000000000000000000000000000 hurries 00000000000000000000000000000000 conspicuously 00000001001001000001001001110010 canary-colored 00000000000000000000000000000000 Porsche 00100000000111011101111100101000 beat-up 00000000000000000000000000000000 pliers 00000000000000000000000000000000 ignition 00000000000000000000000000000000 Twenty-one 00100000000000000000000000000000 anomalies 00000000000000000000000000000000 graphic 00000000000000110010101010110000 Thatcherian 00100000000000000000000000000000 Yuppily 00100000000000000000000000000000 palatable 00000000000011001011001110010000 inflates 00000000000000000000000000000000 pony-tailed 00000000000000000000000000000000 laundromat 00000000000000000000000000000000 punky 00000000000000000000000000000000 dupes 00000000000000000000000000000000 piranha 00000000000000000000000000000000 Dieppe 00100000000000000000000000000000 inconsiderable 00000000000000000000000000000000 quid 00000000000000000000000000000000 volley 00000000000000000000000000000000 flog 00000000000000000000000000000000 Yank-oriented 00100000000000000000000000000000 automotive-parts 00000000000000000000000000000000 discreetly 00000000000000000000000000000000 antecedents 00000000000000000000000000000000 white-coated 00000000000000000000000000000000 trading-room 00000000000000000000000000000000 minded 00000000000101100111000010010000 resemblances 00000000000000000000000000000000 Joanna 00100000000000000000000000000000 Kanska 00100000000000000000000000000000 Conreid 00100000000000000000000000000000 Hodge 00100000000000000000000000000000 Farentino 00100000000000000000000000000000 Rolf 00100000000000000000000000000000 Saxon 00101111111011011011001000001000 Noonan 00100000000000000000000000000000 Dorian 00100000000000000000000000000000 Healy 00101111111111111100110010001000 Akerfeldt 00100000000000000000000000000000 blank-faced 00000000000000000000000000000000 backflips 00000000000000000000000000000000 explodes 00000000000000000000000000000000 microchips 00000000000100001010111001100011 non-insurance 00000000000000000000000000000000 20.71 00000000000000000000000000000000 propsed 00000000000000000000000000000000 very-highly 00000000000000000000000000000000 Dismal 00100000000001010011100000010000 160,510 00000000000000000000000000000000 Domestically 00100000000000111111111001100011 86,555 00000000000000000000000000000000 Wink 00100000000000000000000000000000 fledging 00000000000000000000000000000000 month-end 00000000000000000000000000000000 19-year-olds 00000000000000000000000000000000 rocket-propulsion 00000000000000000000000000000000 Borten 00100000000000000000000000000000 electro-optics 00000000000000000000000000000000 Szabad 00100000000000000000000000000000 Barnabas 00100000000000000000000000000000 Bueky 00100000000000000000000000000000 Mayland 00100000000000000000000000000000 computer-science 00000000000000000000000000000000 stripe 00000000000000000000000000000000 Newsstands 00100000000000000000000000000000 livelier 00000000000000000000000000000000 tongues 00000000000000000000000000000000 Belorussian 00100000000000000000000000000000 Kazakh 00100000000000000000000000000000 Kirghiz 00100000000000000000000000000000 rename 00000000000000000000000000000000 Geza 00100000000000000000000000000000 Szocs 00100000000000000000000000000000 frequencies 00000000000000000000000000000000 messengers 00000000000111011101010101100011 Nagykanizsa 00100000000000000000000000000000 Nyiregyhaza 00100000000000000000000000000000 40-minute 00000000000000000000000000000000 Newsreel 00100000000000000000000000000000 35-minute 00000000000000000000000000000000 lighthearted 00000000000000000000000000000000 intersperses 00000000000000000000000000000000 Proposals 00100000000111101110101000100011 government-operated 00000000000000000000000000000000 influenza 00000000000000000000000000000000 flare 00000000000111110010011000110111 politic 00000000000000000000000000000000 mutate 00000000000000000000000000000000 afflict 00000000000000000000000000000000 aspersion 00000000000000000000000000000000 smallpox 00000000000000000000000000000000 Granny 00100000000000000000000000000000 inferred 00000000000000000000000000000000 evokes 00000000000000000000000000000000 wastrel 00000000000000000000000000000000 self-discipline 00000000000000000000000000000000 curing 00000000000000000000000000000000 second-by-second 00000000000000000000000000000000 squiggly 00000000000000000000000000000000 emptying 00000000000000000000000000000000 bedpans 00000000000000000000000000000000 tutoring 00000000000000000000000000000000 librarians 00000000000000000000000000000000 voucher 00000000000000000000000000000000 Mind 00100000000111111110110101010111 unskilled 00000000001010001000101000110000 18-year-olds 00000000000000000000000000000000 devotees 00000000000000000000000000000000 Opposition 00100000000111101011001100100111 military-service 00000000000000000000000000000000 stove 00000000000000000000000000000000 expansionism 00000000000000000000000000000000 nouvelle 00000000000000000000000000000000 leftovers 00000000000000000000000000000000 work-study 00000000000000000000000000000000 palate 00000000000000000000000000000000 engorgement 00000000000000000000000000000000 VISTA 01000000000111101101010100101000 Volunteer 00100000000000000000100110110111 Grandparent 00100000000000000000000000000000 Companion 00100000000000010011110000000001 spoil 00000000000000000000000000000000 broth 00000000000000000000000000000000 unwholesome 00000000000000000000000000000000 glop 00000000000000000000000000000000 scholarships 00000000010110100111110101100011 Tymnet 00100000000000000000000000000000 menial 00000000000000000000000000000000 labor-saving 00000000000000000000000000000000 overpay 00000000000000000000000000000000 exert 00000000001111101111101110110010 generalized 00000000000000000000000000000000 ill-disposed 00000000000000000000000000000000 endow 00000000000000000000000000000000 Points 00100000000000000000000001011011 exhort 00000000000000000000000000000000 volunteerism 00000000000000000000000000000000 knee-socked 00000000000000000000000000000000 progenitors 00000000000000000000000000000000 dissected 00000000000000000000000000000000 Slovakia 00100000000000000000000000000000 Bedminster 00100000000000000000000000000000 prerequisite 00000000000000000000000000000000 McCurdy 01000000011101010000111010001000 cyanide-laced 00000000000000000000000000000000 Mikulski 00100000000000000000000000000000 Entering 00100000000101011111111101000000 YES 01000000000111110011111011101000 flinch 00000000000000000000000000000000 re-energized 00000000000000000000000000000000 abomination 00000000000000000000000000000000 Elements 00100000000111100111100100101111 regimentation 00000000001001011110011010100111 compulsory 00000000000000101101000000010000 Part-time 00100000000000000000000000000000 management-labor 00000000000000000000000000000000 barracks 00000000000111111111101010001001 Middle-class 00100000000000000000000000000000 cross-section 00000000000000000000000000000000 Encouragement 00100000000110010111110100100111 compulsion 00000000000000000000000000000000 Compelled 00100000000000011100011000110010 unenforceable 00000000000000000000000000000000 refusers 00000000000000000000000000000000 volunteering 00000000000101010111000001000000 tutored 00000000000000000000000000000000 stipends 00000000000000000000000000000000 Full-time 00100000000000000000000000000000 Non-residential 00100000000000000000000000000000 Evaluations 00100000000011110010001000100011 challengeable 00000000000000000000000000000000 unprecedentedly 00000000000000000000000000000000 behaviors 00000000000000000000000000000000 reoriented 00000000000000000000000000000000 dune-grass 00000000000000000000000000000000 Strictly 00100000000101011000000001110010 incurring 00000000000001100100100101000000 Mean 00100000000111101000100110110010 undertones 00000000000000000000000000000000 portrayals 00000000000000000000000000000000 reticence 00000000000000000000000000000000 Massive 00100000000000001000100000010000 631,163 00000000000000000000000000000000 render 00000000000111011011101110110010 g-10.06.89 00000000000000000000000000000000 NAV:22.15 01000000000000000000000000000000 z-Not 01000000000000000000000000000000 breaths 00000000000000000000000000000000 Resist 00100000000011010011111110110010 massacres 00000000000000000000000000000000 pat 00001111111001010110010000011000 closedown 00000000000000000000000000000000 learns 00000000000111010100110111000010 rekindled 00000000100000100111010000110010 Aubrey 00101111111100101111110110011000 Lanston 00100000000000000000000000000000 put-option 00000000000000000000000000000000 praiseworthy 00000000000000000000000000000000 European-American 01000000000000000000000000000000 fork 00000000000000000000000000000000 Malek 00100000000000000000000000000000 Ubberroth 00100000000000000000000000000000 cross-market 00000000000000000000000000000000 CDT 01000000000000000000000000000000 2:45 00000000000000000000000000000000 Sidecar 00100000000000000000000000000000 well-drilled 00000000000000000000000000000000 then-biggest 00000000000000000000000000000000 remake 00000001101100111111110110110010 Sporkin 00100000000000000000000000000000 barnacles 00000000000000000000000000000000 Arguing 00100000000111111011111010000010 marketplaces 00000000000000000000000000000000 super-regulator 00000000000000000000000000000000 unify 00000000000111100100111110110010 sops 00000000011001101100110000110010 interventionists 00000000000000000000000000000000 Establish 00100000000111011111101110110010 Unify 00100000000111100100111110110010 trade-clearing 00000000000000000000000000000000 risk-taking 00000000000000000000000000000000 Transfer 00100000000111010111110110110010 stock-related 00000000000000000000000000000000 Opposed 00100000000111111000110000110010 Create 00100000000110111111101110110010 counterespionage 00000000000000000000000000000000 DIED 01000000000110111110001000110010 Fas-antigen 00100000000000000000000000000000 deadlock 00000000000110110110110000100111 pinball-parlor 00000000000000000000000000000000 Japanese-style 00100000000000000000000000000000 infiltrated 00000001101101000101010000110010 Tsuruo 00100000000000000000000000000000 U.N.-sponsored 01000000000000000000000000000000 parakeets 00000000000000000000000000000000 orchids 00000000000000000000000000000000 Lyster 00100000000000000000000000000000 frigate 00000000000111101001011001000101 affinity 00000000000000000000000000000000 high-interest-rate 00000000000000000000000000000000 Co-operative 00100000000000000000000000000000 harnessing 00000000000000000000000000000000 non-staple 00000000000000000000000000000000 yuan 00000000000000000011100000001011 priests 00000000000110101000100000110011 400th 00000000000000000000000000000000 patriarchate 00000000000000000000000000000000 15th-century 00000000000000000000000000000000 Uspensky 00100000000000000000000000000000 crowned 00000000000000000000000000000000 34-foot-tall 00000000000000000000000000000000 Buddha 00100000000000000000000000000000 Sik 00100000000000000000000000000000 Wan 00100000000000000000000000000000 Po 00100000000000010011001011000000 Monastery 00100000000000000000000000000000 frustrate 00000000001111100111111110110010 preschool 00000000000000000000000000000000 Replied 00100000000111101010010111000010 underselling 00000000000000000000000000000000 wrathful 00000000000000000000000000000000 undersold 00000000000000000000000000000000 keychain 00000000000000000000000000000000 non-defense 00000000000000000000000000000000 Rubik 00100000000000000000000000000000 Cube 00100000000000000000000000000000 grind 00000000001010011110010110110010 Capetronic 00100000000000000000000000000000 teddy 00000000000010100000001000011000 brightly 00000000000000000000000000000000 fire-engine 00000000000000000000000000000000 fairs 00000000000000000000000000000000 Recalls 00100000000111111111011111000010 skirmished 00000000000000000000000000000000 strong-arm 00000000000000000000000000000000 debilitating 00000000001101011101000000010000 Tenney 00100000000000000000000000000000 U.S.-grown 01000000000000000000000000000000 34,602 00000000000000000000000000000000 Exeter 00100000000000000000000000000000 AIDS-research 01000000000000000000000000000000 156.82 00000000000000000000000000000000 9.69 00000000000000000000000000000000 pecks 00000000000000000000000000000000 neoprene 00000000000000000000000000000000 zillion 00000000000000000000000000000000 Clarendon 00100000000000000000000000000000 1,234,100 00000000000000000000000000000000 Wollaeger 00100000000000000000000000000000 toy-making 00000000000000000000000000000000 10-store 00000000000000000000000000000000 creditworthiness 00000000000000000000000000000000 23.57 00000000000000000000000000000000 Statements 00100000000110101101101000100011 arousing 00000000000000000000000000000000 connector 00000000000000000000000000000000 Miyata 00100000000000000000000000000000 vicissitudes 00000000000111000111011000001111 Varese 00100000000000000000000000000000 pawing 00000000000000000000000000000000 T-37 00100000000000000000000000000000 T34C 01000000000000000000000000000000 MB-339 01000000000000000000000000000000 tandem-trainer 00000000000000000000000000000000 tandem-seat 00000000000000000000000000000000 19-day 00000000000000000000000000000000 metalworkers 00000000000000000000000000000000 Frenchman 00100000000000000000000000000000 job-rating 00000000000000000000000000000000 stoke 00000000000000000000000000000000 Simultaneously 00100001001000000000010001110010 pervaded 00000000000000000000000000000000 7-11 00000000000000000000000000000000 Bloomingdales 00100000000000000000000000000000 cures 00000000000000000000000000000000 Penniman 00100000000000000000000000000000 Crisanti 00100000000000000000000000000000 Maffei 00100000000000000000000000000000 Abbett 00100000000000000000000000000000 creamed 00000000000000000000000000000000 well-structured 00000000000000000000000000000000 'What 01000000000000000000000000000000 law. 00000000000000000000000000000000 readjustment 00000000000000000000000000000000 speculative-grade 00000000000000000000000000000000 eying 00000000000000000000000000000000 8,500,000 00000000000000000000000000000000 higher-quality 00000000000000000000000000000000 Lowenstein 00100000000000000000000000000000 gobbled 00000000000000000000000000000000 ticker 00000000000000000000000000000000 impacted 00000000000000000000000000000000 one-by-one 00000000000000000000000000000000 trickery 00000000000000000000000000000000 fogged 00000000000000000000000000000000 smokescreens 00000000000000000000000000000000 anti-airline 00000000000000000000000000000000 Congratulations 00100000000000000000000000000000 existance 00000000000000000000000000000000 thankfully 00000000000000000000000000000000 binges 00000000000000000000000000000000 liaison 00000000000110010110110000100111 underpriced 00000000000010011101101001000000 foreign-loan 00000000000000000000000000000000 60.4 00000000000000000000000000000000 misadventure 00000000000000000000000000000000 pseudosocialism 00000000000000000000000000000000 conservative-communist 00000000000000000000000000000000 --/-- 00000000000000000000000000000000 carcass 00000000000000000000000000000000 post-electoral 00000000000000000000000000000000 hagglings 00000000000000000000000000000000 miscegenation 00000000000000000000000000000000 Constantine 00100000000000000000000000000000 car-development 00000000000000000000000000000000 quaint 00000000000001100011011010010000 pro-Soviet 01000000000000000000000000000000 Euro-Communist 01000000000000000000000000000000 Hellenic 00100000000000000000000000000000 precursor 00000000000000000000000000000000 ostensible 00000000000000000000000000000000 mop-up 00000000000000000000000000000000 catharsis 00000000000000000000000000000000 parte 00000000000000000000000000000000 long-bubbling 00000000000000000000000000000000 bank-looting 00000000000000000000000000000000 accuser 00000000000000000000000000000000 self-confessed 00000000000000000000000000000000 embezzler 00000000000000000000000000000000 residing 00000000000000000000000000000000 forthright 00000000000110010101000010010000 734,000 00000000000000000000000000000000 eluding 00000000000000000000000000000000 drachmas 00000000000000000000000000000000 circumstantial 00000000000000000000000000000000 clinching 00000000000000000000000000000000 EYP 01000000000000000000000000000000 OKing 01000000000000000000000000000000 U.S.based 01000000000000000000000000000000 chums 00000000000000000000000000000000 unwittingly 00000000000000000000000000000000 platter 00000000000110110001100101100111 traipse 00000000000000000000000000000000 jinks 00000000000000000000000000000000 ousting 00000000000000000000000000000000 thwarting 00000000000101000111111101000000 well-respected 00000000000000000000000000000000 scandal-stench 00000000000000000000000000000000 seals 00000000000111001111010101100011 harshest 00000000000000000000000000000000 Crucial 00100000000000111000011000010000 Mohammed 00100000000000000011000010011000 auto-sales 00000000000000000000000000000000 wild-eyed 00000000000000000000000000000000 lash-up 00000000000000000000000000000000 hamstring 00000000000000000000000000000000 conservative-led 00000000000000000000000000000000 glaringly 00000000000000000000000000000000 clarity 00000000000111100011100000100001 rectification 00000000000000000000000000000000 slingers 00000000000000000000000000000000 raked 00000000000000000000000000000000 MOVED 01000000000111001111001000110010 mapped 00000000000000000000000000000000 Prospects 00100000000111111111111100111001 management-pilot 00000000000000000000000000000000 Gruber 00100000000000000000000000000000 251,170,000 00000000000000000000000000000000 1406.29 00000000000000000000000000000000 78.06 00000000000000000000000000000000 211.96 00000000000000000000000000000000 7.29 00000000000000000000000000000000 3421.29 00000000000000000000000000000000 129.87 00000000000000000000000000000000 129.25 00000000000000000000000000000000 1.8740 00000000000000000000000000000000 0.0343 00000000000000000000000000000000 concurrently 00000000000000000000000000000000 63.50 00000000000000000000000000000000 17.37 00000000000000000000000000000000 counterbalanced 00000000000000000000000000000000 pertains 00000000000000000000000000000000 long-troubled 00000000000000000000000000000000 Grannon 00100000000000000000000000000000 Chimicles 00100000000000000000000000000000 Milberg 00100000000000000000000000000000 Bershad 00100000000000000000000000000000 Specthrie 00100000000000000000000000000000 Lerach 00100000000000000000000000000000 ORDERED 01000001000011000101010000110010 once-promising 00000000000000000000000000000000 trebled 00000000000000000000000000000000 125,849 00000000000000000000000000000000 1,500,000 00000000000000000000000000000000 Finley 00101111111011100111110000101000 Kumble 00101111111100001101101001001000 Wagner 00101111111111111010111000001000 Underberg 00100000000000000000000000000000 Pappas 00100000000000000000000000000000 260,000 00000000000000000000000000000000 Shepard 00100000000000000000000000000000 requisition 00000000000000000000000000000000 HOUSTON-CALGARY 01000000000000000000000000000000 ALLIANCE 01000000000111101011011001100111 precocious 00000000000000000000000000000000 assembly-line 00000000000000000000000000000000 energy-industry 00000000000000000000000000000000 fair-trade-related 00000000000000000000000000000000 585-lawyer 00000000000000000000000000000000 80-lawyer 00000000000000000000000000000000 Saville 00100000000000000000000000000000 SIGNAL 01000000000111100111011010110111 retardant 00000000000000000000000000000000 COUNSEL 01000000000000001110001000110101 JOINS 01000001000001100011000000010010 Entrepreneurs 00100000000110001000111000110011 500-lawyer 00000000000000000000000000000000 Foerster 00100000000000000000000000000000 mass-media 00000000000000000000000000000000 RICHARD 01001111111000000010100110011000 MAGURNO 01000000000000000000000000000000 bogging 00000000000000000000000000000000 200-lawyer 00000000000000000000000000000000 31. 00000000000000000000000000000000 holiday-season 00000000000000000000000000000000 IIGS 01000000000000000000000000000000 expectant 00000000000000000000000000000000 million-mark 00000000000000000000000000000000 74.9 00000000000000000000000000000000 25.1 00000000000000000000000000000000 buster 00000000000000000000000000000000 Eating 00100000000011001110100001000000 service-oriented 00000000000000000000000000000000 839 00000000000000000000000000000000 irregular 00000000000000000000000000000000 8.734 00000000000000000000000000000000 9.934 00000000000000000000000000000000 18.819 00000000000000000000000000000000 780,000 00000000000000000000000000000000 Telemedia 00100000000000000000000000000000 milion 00000000000000000000000000000000 230.5 00000000000000000000000000000000 190.4 00000000000000000000000000000000 413,000 00000000000000000000000000000000 billet 00000000111101100100000000001000 coasts 00000000000000000011000010101000 order-taker 00000000000000000000000000000000 100-year-old 00000000000000000000000000000000 red-tipped 00000000000000000000000000000000 fencing 00000000000000000000000000000000 barbed 00000000000000000000000000000000 Interlake 00100000000000000000000000000000 Donaldsonville 00100000000000000000000000000000 mothballing 00000000000000000000000000000000 75-cent 00000000000000000000000000000000 laminated 00000000000000000000000000000000 human-sounding 00000000000000000000000000000000 15-second 00000000000000000000000000000000 per-ad 00000000000000000000000000000000 tone-generating 00000000000000000000000000000000 bank-credit 00000000000000000000000000000000 mealy 00000000000000000000000000000000 non-Mexican 01000000000000000000000000000000 577 00000000000000000000000000000000 604 00000000000000000000000000000000 mega-mergers 00000000000000000000000000000000 Suitors 00100000000111101100111001110011 expansion-minded 00000000000000000000000000000000 debt-happy 00000000000000000000000000000000 InterMedia 01000000000000000000000000000000 Berland 00100000000000000000000000000000 observatory 00000000000000000000000000000000 weeked 00000000000000000000000000000000 commerical 00000000000000000000000000000000 Vitro-Anchor 01000000000000000000000000000000 well-financed 00000000000000000000000000000000 Tomilson 00100000000000000000000000000000 junkbond-financed 00000000000000000000000000000000 27-a-share 00000000000000000000000000000000 Vernitron 00100000000000000000000000000000 worst-hit 00000000000000000000000000000000 Century-Fox 01000000000000000000000000000000 Twentieth 00100000000111111101111100001000 junkbond 00000000000000000000000000000000 waking 00000000010100000110100001000000 Vantage 00100000000001010011001100100111 counter-cyclical 00000000000000000000000000000000 see-through 00000000000000000000000000000000 Keck 00100000000000000000000000000000 42,000 00000000000000000000000000000000 self-fulfilling 00000000000000000000000000000000 prophecy 00000000000000000000000000000000 beltway 00000000000111101001100011010000 Vacancy 00100000000000011000010011000111 mid-20 00000000000000000000000000000000 flattening 00000000000000000000000000000000 Leinberger 00100000000000000000000000000000 athletic-shoe 00000000000000000000000000000000 powerboat 00000000000000000000000000000000 marine-related 00000000000000000000000000000000 interceded 00000000000000000000000000000000 anti-racketeering 00000000000000000000000000000000 question... 00000000000000000000000000000000 Lifestyles 00100000000000000000000000000000 fending 00000000000000000000000000000000 belatedly 00000000000000000000000000000000 13,433 00000000000000000000000000000000 Cat 00100000000111110010010000000001 Cay 00100000000000000000000000000000 Abney 00100000000000000000000000000000 1,450 00000000000000000000000000000000 venues 00000000000000000000000000000000 shootings 00000000000000000000000000000000 Yeh 00100000000000000000000000000000 497.34 00000000000000000000000000000000 Hu 00101111111000110010100000001000 Scully 00100000000000000000000000000000 Avoiding 00100000000110011111111101000000 15.92 00000000000000000000000000000000 11.28 00000000000000000000000000000000 Perfecta 00100000000000000000000000000000 Kader 00100000000000000000000000000000 Worries 00100000000111101111011010101111 Worlds 00100000000111011111000100101111 Successful 00100000000000000001000010010000 heavens 00000000000000000000000000000000 Teenage 00100000000000000000000000000000 Mutant 00100000000000000000000000000000 Brenmor 00100000000000000000000000000000 super-user 00000000000000000000000000000000 Orondo 00100000000000000000000000000000 Introduced 00100000000111011001010000110010 mid-1988 00000000000000000000000000000000 15-centimeter-tall 00000000000000000000000000000000 turtles 00000000000000000000000000000000 parts-engineering 00000000000000000000000000000000 reptilian 00000000000000000000000000000000 fast-selling 00000000000000000000000000000000 overstrained 00000000000000000000000000000000 industrialization 00000000000000000000000000000000 harder-line 00000000000000000000000000000000 Hodgson 00100000000000000000000000000000 Siedenburg 00100000000000000000000000000000 humility 00000000000000000000000000000000 679,000 00000000000000000000000000000000 671,000 00000000000000000000000000000000 buffing 00000000000000000000000000000000 filter 00000000000111111011110110110111 Syndication 00100000000011110010100001100001 now-scuttled 00000000000000000000000000000000 program-maker 00000000000000000000000000000000 privy 00000000000000000000000000000000 uninhibited 00000000000001011011000110010000 lapse 00000000000111111010011000110111 vociferous 00000000000000000000000000000000 Studio 00100000000110100111000100000001 talks-including 00000000000000000000000000000000 Fries 00100000000111111111001010101000 unshackled 00000000000000000000000000000000 Trinitron 00100000000000000000000000000000 J.B. 01000000000000000000000000000000 atrun 00000000000000000000000000000000 decrying 00000000000000000000000000000000 Time-Warner 01000000000000000000000000000000 Lilley 00100000000000000000000000000000 Fin-syn 00100000000000000000000000000000 convolutions 00000000000000000000000000000000 descriptive 00000000000000000000000000000000 Moonlighting 00100000000000000000000000000000 tantalizingly 00000000000000000000000000000000 D-Mass. 01000000000000000000000000000000 Sony-Columbia 01000000000000000000000000000000 series. 00000000000000000000000000000000 findings. 00000000000000000000000000000000 intervenes 00000000000000000000000000000000 comprise. 00000000000000000000000000000000 agree. 00000000000000000000000000000000 balk. 00000000000000000000000000000000 contract-steering 00000000000000000000000000000000 ex-member 00000000000000000000000000000000 142.7 00000000000000000000000000000000 Earning 00100000000111101000100101000000 771.4 00000000000000000000000000000000 784.9 00000000000000000000000000000000 747.3 00000000000000000000000000000000 Maximum 00100000000001101100011100010000 S.Grove 01000000000000000000000000000000 book-to-bill 00000000000000000000000000000000 367.1 00000000000000000000000000000000 reunited 00000000000000000000000000000000 hoisted 00000000000000000000000000000000 rickety 00000000000000000000000000000000 scarves 00000000000000011001010101100011 four-room 00000000000000000000000000000000 Elias 00101111111111000010000100001000 Motsoaledi 00100000000000000000000000000000 unionist 00000000000000000000000000000000 fairy 00000000000001001010101100100001 humiliation 00000000000110011110011010100111 well-wishers 00000000000000000000000000000000 tooted 00000000000000000000000000000000 dapper 00000000000000000000000000000000 fists 00000000000000000000000000000000 87-store 00000000000000000000000000000000 Zambia 00100000000111110001011101101000 unconditional 00000000000000000000000000000000 rebirth 00000000000000000000000000000000 Cassim 00100000000000000000000000000000 Saloojee 00100000000000000000000000000000 Anglican 00100000000000000101011000110000 Deafening 00100000000000000000000000000000 chants 00000000000110111101010101100011 half-measure 00000000000000000000000000000000 Africanist 00100000000000000000000000000000 Burned 00100000000101001100010000110010 disillusionment 00000000000111011010111010100111 agitation 00000000000000000000000000000000 1,657,736 00000000000000000000000000000000 Mokaba 00100000000000000000000000000000 Mlangeni 00100000000000000000000000000000 pandering 00000000000000000000000000000000 backhome 00000000000000000000000000000000 discount-coupon 00000000000000000000000000000000 conjure 00000000000000000000000000000000 M*A*S*H 01000000000000000000000000000000 pointers 00000000000000000000000000000000 anti-U.S. 01000000000000000000000000000000 Gregg 00101111111011111100001000001000 vandalized 00000000000000000000000000000000 unapproved 00000000000000000000000000000000 Panmunjom 00100000000000000000000000000000 palpable 00000000000000000000000000000000 frictions 00000000000000000000000000000000 revaluation 00000000000110001001101010100111 interior-decorating 00000000000000000000000000000000 94.6 00000000000000000000000000000000 1,342,264 00000000000000000000000000000000 data-service 00000000000000000000000000000000 new-telephone-line 00000000000000000000000000000000 338.9 00000000000000000000000000000000 120.2 00000000000000000000000000000000 agreeement 00000000000000000000000000000000 unethically 00000000000000000000000000000000 dishonorable 00000000000000000000000000000000 knowingly 00000000100001000001001001110010 fulfilment 00000000000000000000000000000000 betrayal 00000000000000000000000000000000 nurturing 00000000000000000000000000000000 reposed 00000000000000000000000000000000 inducements 00000000000111101111001100000011 Altama 00100000000000000000000000000000 DuCharme 01000000000000000000000000000000 16.125 00000000000000000000000000000000 disastrously 00000000011001101000000001110010 first-mortgage 00000000000000000000000000000000 foreign-bank 00000000000000000000000000000000 Microlog 00100000000000000000000000000000 Whampoa 00100000000000000000000000000000 three-point 00000000000000000000000000000000 gnaw 00000000000000000000000000000000 13.73 00000000000000000000000000000000 dynamos 00000000000000000000000000000000 government-assisted 00000000000000000000000000000000 slough 00000000000000000000000000000000 Brezinski 00100000000000000000000000000000 Hartman 00101111001110101100000010001000 58.7 00000000000000000000000000000000 cookbooks 00000000000000000000000000000000 custom-designed 00000000000000000000000000000000 top-secret 00000000000000000000000000000000 recapitalized 00000000000000101010001001000000 Abboud 00101111111100100011110010001000 MCorp 01000000000111000000101100101000 Equimark 00100000001001001111111100101000 Steinhart 00100000000000000000000000000000 asset-quality 00000000000000000000000000000000 multibank 00000000000000000000000000000000 45th 00000000000000000000000000000000 Inter-American 01000000000000000000000000000000 atrocity 00000000000000000000000000000000 Luz 00100000000000000000000000000000 Soler 00100000000000000000000000000000 terrify 00000000000000000000000000000000 torchbearer 00000000000000000000000000000000 battalions 00000000000000000000000000000000 crudest 00000000000000000000000000000000 bullying 00000000001101101010110001000000 Borge 00100000000000000000000000000000 proteges 00000000000100110011110000110011 drug-financed 00000000000000000000000000000000 M-19 00100000000000000000000000000000 Merkel 00100000000000000000000000000000 Abello 00100000000000000000000000000000 fourth-ranking 00000000000000000000000000000000 Virgilia 00100000000000000000000000000000 Leonidas 00100000000000000000000000000000 Paz 00100000000000000000000000000000 Zamora 00100000000000000000000000000000 international-money-markets 00000000000000000000000000000000 government-securities 00000000000000000000000000000000 90.625 00000000000000000000000000000000 21.875 00000000000000000000000000000000 Brasil 00100000000000000000000000000000 multimillion-pound-per-year 00000000000000000000000000000000 Ladies 00100000000000110010011100110011 fluoropolymer 00000000000000000000000000000000 Teflon 00100000000000000000000000000000 328,000 00000000000000000000000000000000 2,204,000 00000000000000000000000000000000 2,156,000 00000000000000000000000000000000 1,837,800 00000000000000000000000000000000 1,839,600 00000000000000000000000000000000 Marlene 00100000000000000000000000000000 Solomonic 00100000000000000000000000000000 furnishing 00000000000000000000000000000000 loathes 00000000000000000000000000000000 Lousy 00100000000000000001001010010000 high-security 00000000000000000000000000000000 Moines-based 00100000000000000000000000000000 browsing. 00000000000000000000000000000000 Stressed-out 00100000000000000000000000000000 browse 00000000000000000000000000000000 trendiest 00000000000000000000000000000000 numbingly 00000000000000000000000000000000 Rauh 00100000000000000000000000000000 focus-group 00000000000000000000000000000000 purposefully 00000000000000000000000000000000 Stillerman 00100000000000000000000000000000 remodeled 00000000000000000000000000000000 center-aisle 00000000000000000000000000000000 Cyd 00100000000000000000000000000000 Celnicker 00100000000000000000000000000000 Hannover 00100000000000000000000000000000 Complaints 00100000000110101011101000100011 Ress 00100000000000000000000000000000 spritzers 00000000000000000000000000000000 blouse 00000000000000000000000000000000 Nordstrom 00100000001111011010111100101000 prices... 00000000000000000000000000000000 sectional 00000000000000000000000000000000 reciprocal 00000000001000011101000000010000 Edith 00100000000000000000000000000000 pomologist 00000000000000000000000000000000 sectorial 00000000000000000000000000000000 Jean-Pascal 01000000000000000000000000000000 Delamuraz 00100000000000000000000000000000 general-insurance 00000000000000000000000000000000 tri-state 00000000000000000000000000000000 financial-related 00000000000000000000000000000000 Chore 00100000000000000000000000000000 brighter 00000000000000100001001111000000 Highest 00100000000000011010000011010000 Coming 00100000000111101111100001000000 Potter 00101111111000000100001000001000 president-U.S. 01000000000000000000000000000000 Richman 00101111111001110101000010001000 Shoe 00100000011100001011111010110000 113.2 00000000000000000000000000000000 Sportswear 00100000000011110011111010110000 776,470 00000000000000000000000000000000 24,405 00000000000000000000000000000000 Samurai 00100000000010001110111000000001 earlier-expressed 00000000000000000000000000000000 diesels 00000000000000000000000000000000 high-horsepower 00000000000000000000000000000000 accruals 00000000000000000000000000000000 Tumazos 00100000000000000000000000000000 Sparrows 00100000000000000000000000000000 steelworkers 00000000000000100010001010101000 incongruity 00000000000000000000000000000000 Doctor 00100000000111101101110010110101 jailhouse 00000000000000000000000000000000 Solved 00100001000010010010110000110010 Riddle 00100000000101000100000000001000 Rare 00100000000001000000011010010000 lesbians 00000000000000000000000000000000 fulfills 00001001011010000011000000010010 medical-support 00000000000000000000000000000000 Ferrier 00100000000000000000000000000000 desperation 00000000000111110011110010100111 discreet 00000000001010000101010010010000 cliques 00000000000000000000000000000000 Groff 00100000000000000000000000000000 Boeskys 00100000000000000000000000000000 Millkens 00100000000000000000000000000000 Icahns 00100000000000000000000000000000 self-seeking 00000000000000000000000000000000 woeful 00000000000000000000000000000000 Sandro 00100000000000000000000000000000 Dana-Farber 01000000000000000000000000000000 reflex 00000000000000000000000000000000 30.75 00000000000000000000000000000000 760 00000000000000000000000000000000 reroofing 00000000000000000000000000000000 reinforced-fiberglass 00000000000000000000000000000000 boat-building 00000000000000000000000000000000 plastic-body 00000000000000000000000000000000 Cuckoo 00100000000000000000000000000000 Regains 00100000000000000000000000000000 Campuses 00100000000100011100111000110011 Fare 00100000000000000000001111110111 serpent 00000000000100100110111000000001 1971-1974 00000000000000000000000000000000 Hebert 00100000000000000000000000000000 buoys 00000000000000000000000000000000 unequaled 00000000000000000000000000000000 sign-carrying 00000000000000000000000000000000 L.C. 01000000000000000000000000000000 Gallen 00100000000000000000000000000000 gears 00000000000011100111000000010010 57,500 00000000000000000000000000000000 176,470 00000000000000000000000000000000 Lal 00100000000000000000000000000000 Advani 00100000000000000000000000000000 opposition-party 00000000000000000000000000000000 Kamal 00100000000000000000000000000000 Kant 00100000000000000000000000000000 Seidler 00100000000000000000000000000000 seesawing 00000000000000000000000000000000 Broadcasts 00100000000101000101110101100011 debuted 00000000000000000000000000000000 illiterate 00000000000000000000000000000000 blatantly 00000000010100101000000001110010 Ajit 00100000000000000000000000000000 Ratner 00100000000000000000000000000000 Probhat 00100000000000000000000000000000 Chandra 00100000000000000000000000000000 Chatterji 00100000000000000000000000000000 scandal-plagued 00000000000000000000000000000000 Paradise 00100000000110101110101100100001 Pa.-based 00100000000000000000000000000000 Briton 00100000000000000000000000000000 332.5 00000000000000000000000000000000 Pie 00100000000000000001011000000001 Italia 00100000000000000000000000000000 Callender 00100000000000000000000000000000 site-development 00000000000000000000000000000000 reserve-draining 00000000000000000000000000000000 subtly 00000000110101000000010001110010 surfeit 00000000000000000000000000000000 McGroarty 01000000000000000000000000000000 eased... 00000000000000000000000000000000 much-revised 00000000000000000000000000000000 casino-company 00000000000000000000000000000000 1.5463 00000000000000000000000000000000 143.60 00000000000000000000000000000000 144.60 00000000000000000000000000000000 credit-softening 00000000000000000000000000000000 Vowing 00100000000010101010111000110010 363.40 00000000000000000000000000000000 363.35 00000000000000000000000000000000 COASTAL 01000000000000010111110110101000 580.6 00000000000000000000000000000000 136.28 00000000000000000000000000000000 34795.05 00000000000000000000000000000000 445.02 00000000000000000000000000000000 35000 00000000000000000000000000000000 145.96 00000000000000000000000000000000 34941.01 00000000000000000000000000000000 857-161 00000000000000000000000000000000 13.07 00000000000000000000000000000000 36.89 00000000000000000000000000000000 2623.60 00000000000000000000000000000000 Masami 00100000000000000000000000000000 Okuma 00100000000000000000000000000000 Yukio 00100000000000000000000000000000 Itagaki 00100000000000000000000000000000 Kokusai 00100000000000000000000000000000 903 00000000000000000000000000000000 1,010 00000000000000000000000000000000 2,830 00000000000000000000000000000000 2,470 00000000000000000000000000000000 Seiyu 00100000000000000000000000000000 2,710 00000000000000000000000000000000 Daiei 00100000000000000000000000000000 2,980 00000000000000000000000000000000 4,720 00000000000000000000000000000000 1,510 00000000000000000000000000000000 1,130 00000000000000000000000000000000 2,820 00000000000000000000000000000000 projectors 00000000000000000000000000000000 1,550 00000000000000000000000000000000 2,270 00000000000000000000000000000000 2237.8 00000000000000000000000000000000 1817.7 00000000000000000000000000000000 437.4 00000000000000000000000000000000 503.2 00000000000000000000000000000000 base-rate 00000000000000000000000000000000 437 00000000000000000000000000000000 Revised 00100000000000000010001001000000 Isosceles 00100000000000000000000000000000 Argyll 00100000000000001111010100101000 Tesco 00100000000000000000000000000000 Sainsbury 00100000000000000000000000000000 Telecommuncations 00100000000000000000000000000000 misjudged 00000000000000000000000000000000 Blaming 00100000000111101000001101000000 softdrink 00000000000000000000000000000000 cherry-flavored 00000000000000000000000000000000 sizzle 00000000000000000000000000000000 ducklings 00000000000000000000000000000000 swans 00000000000000000000000000000000 Michelob 00100000000000000000000000000000 beer-related 00000000000000000000000000000000 Tamara 00100000000001110011010100001000 wordplay 00000000000000000000000000000000 Amdec 00100000000000000000000000000000 1924 00000000000000000000000000000000 goodbye 00000000000001000010010001110010 Convict 00100000000101101000100110110111 1830-1930 00000000000000000000000000000000 Consisting 00100000000001011010101000101111 tantalizing 00000000000000000000000000000000 Gevergeyeva 00100000000000000000000000000000 curtain 00000000000000011001110100100001 undersubscription 00000000000000000000000000000000 Levki 00100000000000000000000000000000 Gevergeyev 00100000000000000000000000000000 bibles 00000000000000000000000000000000 atheist 00000000000000000000000000000000 vestments 00000000000000000000000000000000 26-room 00000000000000000000000000000000 sequestered 00001011101011010100010000110010 Bolsheviks 00100000000000000000000000000000 Ostrovsky 00100000000000000000000000000000 prodigiously 00000000000000000000000000000000 deprivations 00000000000000000000000000000000 imagines 00000000000000000000000000000000 devotedly 00000000000000000000000000000000 perished 00000000000000000000000000000000 Siege 00100000001111011110011010100111 German-born 00100000000000000000000000000000 Andrei 00100000000000000000000000000000 Roller 00100000010101101010101010110000 1805-91 00000000000000000000000000000000 Bucknell 00100000000000000000000000000000 illuminating 00000000000000000011001001111001 manmade-fiber 00000000000000000000000000000000 1890 00000000000000000000000000000000 1892 00000000000000000000000000000000 Raymonda 00100000000000000000000000000000 1897 00000000000000000000000000000000 derailed 00001110001011010100010000110010 ambiance 00000000000000000000000000000000 fountainhead 00000000000000000000000000000000 balletic 00000000000000000000000000000000 classicism 00000000000000000000000000000000 choreography 00000000000000000000000000000000 ballerinas 00000000000000000000000000000000 Mathilde 00100000000000000000000000000000 Ahlerich 00100000000000000000000000000000 engagement 00000000000111110011111001100111 Hesse-Darmstadt 01000000000000000000000000000000 Isadora 00100000000000000000000000000000 self-professed 00000000000000000000000000000000 enchanting 00000000000000000000000000000000 1910 00000000000000000000000000000000 reclining 00000000000000000000000000000000 chaise 00000000000000000000000000000000 longue 00000000000000000000000000000000 balcony 00000000000000000000000000000000 Diaghilev 00100000000000000000000000000000 Ballets 00100000000000000000000000000000 Russes 00100000000000000000000000000000 Balanchine 00100000000000000000000000000000 teenager 00000000000000000000000000000000 ruthlessly 00000000000000000000000000000000 Feodor 00100000000000000000000000000000 Lopukhov 00100000000000000000000000000000 post-Revolutionary 01000000000000000000000000000000 indisputable 00000000000000000000000000000000 Miscellaneous 00100000000001101111010000110000 Pavlova 00100000000000000000000000000000 slipper 00000000000000000000000000000000 1830 00000000000000000000000000000000 well-illustrated 00000000000000000000000000000000 Saratoga 00100000000000000000000000000000 spokewoman 00000000000000000000000000000000 French-government-owned 00100000000000000000000000000000 82.7 00000000000000000000000000000000 Angers 00100000000000000000000000000000 31.55 00000000000000000000000000000000 69.4 00000000000000000000000000000000 externally 00000000000000000000000000000000 breakneck 00000000000000000000000000000000 full-range 00000000000000000000000000000000 derive 00000000000000000000000000000000 billion-franc 00000000000000000000000000000000 independant 00000000000000000000000000000000 disarmingly 00000000000000000000000000000000 originality 00000000000000000000000000000000 vocation 00000000000111011001101001100111 front-desk 00000000000000000000000000000000 crusader 00000000000000000000000000000000 Milt 00100000000000000000000000000000 soup-to-nuts 00000000000000000000000000000000 cerebral 00000000000000000000000000000000 Ecole 00100000000000000000000000000000 d'Administration 01000000000000000000000000000000 aikido 00000000000000000000000000000000 unfocussed 00000000000000000000000000000000 banalization 00000000000000000000000000000000 Lorenz 00100000000000000000000000000000 scarcest 00000000000000000000000000000000 unaccompanied 00000000000000000000000000000000 singles 00000000000110110010101100100001 billfold 00000000000000000000000000000000 homicide 00000000000000000000000000000000 Cochrane 00100000000000000000000000000000 Raful 00100000000000000000000000000000 Thorne 00100000000000000000000000000000 Splits 00100000000000110110000010100111 112.50 00000000000000000000000000000000 ripoff 00000000000000000000000000000000 Reinisch 00100000000000000000000000000000 8,700 00000000000000000000000000000000 pro-shareholder 00000000000000000000000000000000 Silberberg 00100000000000000000000000000000 Advises 00100000001000100011000000010010 Metz 00101111111100111010101010001000 underwiters 00000000000000000000000000000000 Scotia-McLeod 01000000000000000000000000000000 63.8 00000000000000000000000000000000 W.H. 01000000000000000000000000000000 destroyer 00000000000100100101111000000001 DDG-51 01000000000000000000000000000000 Arleigh 00100000000000000000000000000000 drug-trafficking 00000000000000000000000000000000 Exocet 00100000000000000000000000000000 superstructure 00000000000000000000000000000000 sensibly 00000110011000000000010001110010 Aegis-class 00100000000000000000000000000000 Snoozing 00100000000000000000000000000000 Adi 00100000000000000000000000000000 Diary 00100000000111100110110000000001 Thirteen 00100000000101111111000011000000 Leisire 00100000000000000000000000000000 rough-cut 00000000000000000000000000000000 unretouched 00000000000000000000000000000000 diary 00000000000111100110110000000001 lice 00000000000000000000000000000000 mushroom 00000000000000100011110110110111 high-gloss 00000000000000000000000000000000 footnoted 00000000000000000000000000000000 insta-book 00000000000000000000000000000000 Taconic 00100000000000000000000000000000 REPLIGEN 01000000000000000000000000000000 pizzerias 00000000000000000000000000000000 Words 00100000000111101111000110100011 Beady 00100000000000000000000000000000 flexing 00000000000000000000000000000000 synonyms 00000000000000000000000000000000 Numbers 00100000000111101110100000100011 raison 00000000000000000000000000000000 d'etre 00000000000000000000000000000000 Horseman 00100000000000000000000000000000 reinman 00000000000000000000000000000000 20.83 00000000000000000000000000000000 kitchen-sink 00000000000000000000000000000000 aureus 00000000000000000000000000000000 reserve-building 00000000000000000000000000000000 staphylococcus 00000000000000000000000000000000 Fourteen 00100000000101001111000011000000 smaller-size 00000000000000000000000000000000 42-million 00000000000000000000000000000000 sweetening 00000000000000000000000000000000 5.375 00000000000000000000000000000000 6.375 00000000000000000000000000000000 quite-comfortable 00000000000000000000000000000000 68-ounce 00000000000000000000000000000000 electrosurgical 00000000000000000000000000000000 overshadows 00000000000000000000000000000000 Lectec 00100000000000000000000000000000 tinges 00000000000000000000000000000000 Subverts 00100000000000000000000000000000 Weimar 00100000000000000000000000000000 Eisenach 00100000000000000000000000000000 Erfurt 00100000000000000000000000000000 boom-boxes 00000000000000000000000000000000 anti-pollution 00000000000000000000000000000000 Napkins 00100000000000000000000000000000 unacceptably 00000000000101101100000001110010 Weckel 00100000000000000000000000000000 shortcuts 00000000000000000000000000000000 paradises 00000000000000000000000000000000 etch 00000000000000000000000000000000 Karel 00100000000000000000000000000000 Micronite 00100000000000000000000000000000 325,000-a-year 00000000000000000000000000000000 502,613 00000000000000000000000000000000 slippery 00000000000000000000000000000000 Gian 00100000000000000000000000000000 Fulgoni 00100000000000000000000000000000 Drug-industry 00100000000000000000000000000000 Erling 00100000000000000000000000000000 Refsum 00100000000000000000000000000000 ex-Beecham 01000000000000000000000000000000 duplicative 00000000000000000000000000000000 Tatman 00100000000000000000000000000000 sanitation-control 00000000000000000000000000000000 home-nursing 00000000000000000000000000000000 brine 00000000000000000000000000000000 nursing-homes 00000000000000000000000000000000 electronicmedical-equipment 00000000000000000000000000000000 361.3 00000000000000000000000000000000 295.6 00000000000000000000000000000000 2.13 00000000000000000000000000000000 rollout 00000000000000000000000000000000 Sprite 00100000000000000000000000000000 rainy 00000000000000000000000000000000 mushroom-processing 00000000000000000000000000000000 Minute 00100000000111111010011000010111 Maid 00100000000001000110000000100001 96-ounce 00000000000000000000000000000000 966.6 00000000000000000000000000000000 809.2 00000000000000000000000000000000 6.72 00000000000000000000000000000000 symphony 00000000000000000111101100100001 50-cent-a-share 00000000000000000000000000000000 5.06 00000000000000000000000000000000 E-Systems 01000000000000000000000000000000 inured 00000000001001101100110000110010 metal-benders 00000000000000000000000000000000 modifying 00000000000111101101011101000000 EP-3E 01000000000000000000000000000000 reconnaissance 00000000000000000000000000000000 swallows 00000000000000000000000000000000 brokerage-by-brokerage 00000000000000000000000000000000 hastens 00000000000000000000000000000000 Blechman 00100000000000000000000000000000 Forecast 00100000000111110101011010110111 unsatisfactory 00000000000010011011000110010000 LeRoy 01000000000000000000000000000000 Haugh 00100000000000000000000000000000 1.33-a-share 00000000000000000000000000000000 July-September 01000000000000000000000000000000 food-poisoning 00000000000000000000000000000000 Merlis 00100000000000000000000000000000 unpleasantly 00000000000000000000000000000000 2.96 00000000000000000000000000000000 Masse 00100000001000000001110100100001 Radio-television 00100000000000000000000000000000 Shintaro 00100000000000000000000000000000 Aboff 00100000000000000000000000000000 eschew 00000000000000000000000000000000 Confucian 00100000000000000000000000000000 74-page 00000000000000000000000000000000 typewritten 00000000000000000000000000000000 bureacratic 00000000000000000000000000000000 translators 00000000000000000000000000000000 sub-underwriting 00000000000000000000000000000000 Prometrix 00100000000000000000000000000000 backtracking 00000000000000000000000000000000 state-subsidized 00000000000000000000000000000000 Distorts 00100111101110000011000000010010 22.95 00000000000000000000000000000000 coasted 00000000000000000000000000000000 food-production 00000000000000000000000000000000 Gingl 00100000000000000000000000000000 reconciled 00000000011010101101110000110010 Sludge 00100000000111100101110000100001 workman 00000000000000000000000000000000 contexts 00000000000000000000000000000000 unthinkingly 00000000000000000000000000000000 Populares 00100000000000000000000000000000 Hippie 00100000000000000000000000000000 Confused 00100000000010010101110000110010 disoriented 00000000000000000000000000000000 obfuscations 00000000000000000000000000000000 visionary 00000000000111011101000010010000 Subsistencias 00100000000000000000000000000000 deep-rooted 00000000000000000000000000000000 suspicions... 00000000000000000000000000000000 litigate 00000000000000000000000000000000 sub-underwriters 00000000000000000000000000000000 Ought 00100000000110000001101000110010 Quaid 00100000000000000000000000000000 months-long 00000000000000000000000000000000 Touted 00100000000001000010110000110010 bashes 00000000000000000000000000000000 anti-alcohol 00000000000000000000000000000000 Killer 00100000000100100100001100100001 potty 00000000000000000000000000000000 slander 00000000000000000000000000000000 spoof 00000000000000000000000000000000 8.025 00000000000000000000000000000000 8.067 00000000000000000000000000000000 7.989 00000000000000000000000000000000 8.076 00000000000000000000000000000000 7.66 00000000000000000000000000000000 Compania 00100000000000000000000000000000 often-criticized 00000000000000000000000000000000 Aguirre-Sacasa 01000000000000000000000000000000 9.41 00000000000000000000000000000000 NT&SA-run 01000000000000000000000000000000 6.634 00000000000000000000000000000000 time-tested 00000000000000000000000000000000 1993-1999 00000000000000000000000000000000 526.4 00000000000000000000000000000000 discount-rate 00000000000000000000000000000000 yen-bond 00000000000000000000000000000000 noncommercial 00000000000000000000000000000000 5.475 00000000000000000000000000000000 0.04 00000000000000000000000000000000 7.07 00000000000000000000000000000000 Support 00100000000111111111010010110111 13.23 00000000000000000000000000000000 inward-looking 00000000000000000000000000000000 untarnished 00000000000000000000000000000000 waggishly 00000000000000000000000000000000 Shahon 00100000000000000000000000000000 parastatals 00000000000000000000000000000000 car-parts 00000000000000000000000000000000 price-valuation 00000000000000000000000000000000 relatonship 00000000000000000000000000000000 rectify 00000000000000000000000000000000 Sperling 00101111110001111000000010001000 Bath 00100000000000111100100000100001 Horace 00100000000000000000000000000000 Foodmaker 00100000000110011110111100101000 476.3 00000000000000000000000000000000 lateral 00000000000000000000000000000000 Situation 00100000000111111111101101100111 Room 00100000000110101010110100100111 teleconferences 00000000000000000000000000000000 formalized 00000000000000000000000000000000 Oval 00100000000000010010110101010001 bureauracy 00000000000000000000000000000000 joking 00000000000000000000000000000000 Unflattering 00100000000000000000000000000000 inferiority 00000000000000000000000000000000 hubris 00000000000000000000000000000000 translates 00000000000100101100001000110010 Sweathouse 00100000000000000000000000000000 smarts 00000000000000000000000000000000 Gertrude 00100000000000000000000000000000 downsize 00000000000000000000000000000000 wallowed 00000000000000000000000000000000 metropolis 00000000000000000000000000000000 deflecting 00000000000000000000000000000000 Chardonnay-sipping 00100000000000000000000000000000 windy 00000000000001111000011010101000 flea-infested 00000000000000000000000000000000 300-foot 00000000000000000000000000000000 redwoods 00000000000000000000000000000000 Barbary 00100000000000000000000000000000 surrounds 00000000011001110001000000010010 Weather 00100000000111101111000001111001 ghetto 00000000000111000010110000000001 Boxy 00100000000000000000000000000000 skyscrapers 00000000000000000000000000000000 gluttony 00000000000000000000000000000000 sobriquet 00000000000000000000000000000000 Stomach 00100000000111101011010000000001 exhume 00000000000000000000000000000000 terrors 00000000000000000000000000000000 souvenirs 00000000000000000000000000000000 obscenities 00000000000000000000000000000000 vomit 00000000000000000000000000000000 unearthly 00000000000000000000000000000000 implanting 00000000000000000000000000000000 military-style 00000000000000000000000000000000 Padres 00100000000000000000000000000000 Full 00100000000000000100011100010000 balmy 00000000000000000000000000000000 sun-kissed 00000000000000000000000000000000 business-like 00000000000000000000000000000000 spy-chaser 00000000000000000000000000000000 booing 00000000000000000000000000000000 supporter 00000000000111100101101100111111 seven-inning 00000000000000000000000000000000 seventh-inning 00000000000000000000000000000000 retch 00000000000000000000000000000000 Wave 00100000000111110111101000111111 streaks 00000000000000000000000000000000 hardier 00000000000000000000000000000000 Marco 00100000000000000000000000000000 Hank 00100000000000000000000000000000 civilize 00000000000000000000000000000000 tofu 00000000000000000000000000000000 diaper-changing 00000000000000000000000000000000 no-drinking 00000000000000000000000000000000 immature 00000000000000000000000000000000 Auckland 00100000000000000000000000000000 greenish 00000000000000000000000000000000 sneers 00000000000000000000000000000000 annulled 00000000000000000000000000000000 augmenting 00000000000000000000000000000000 MacGyver 01000000000000000000000000000000 penknife 00000000000000000000000000000000 U.N.C.L.E 01000000000000000000000000000000 Godot 00100000000000000000000000000000 persuasions 00000000000000000000000000000000 Isolating 00100000000000000000000000000000 grumbling 00000000000111101100011010101111 Roma 00101111111011100010101010001000 barbecued 00000000000000000000000000000000 Autorapido 00100000000000000000000000000000 McDLT 01000000000000000000000000000000 tentacles 00000000000000000000000000000000 enviably 00000000000000000000000000000000 should-be 00000000000000000000000000000000 iron-rod 00000000000000000000000000000000 Amador 00100000000000000000000000000000 causeway 00000000000000000000000000000000 bunker 00001111111001110110000000001000 pre-kidnap 00000000000000000000000000000000 saber 00000000000000000000000000000000 unseat 00000000011011010111111110110010 treaties 00000000000110101100010000100111 Miraflores 00100000000000000000000000000000 Locks 00100000001000011111000000010010 51-mile 00000000000000000000000000000000 pathway 00000000000000000000000000000000 frowned 00000000000000000000000000000000 Phoenicians 00100000000000000000000000000000 sail 00000000000010010110010110110010 Kempe 00100000000000000000000000000000 G.P. 01000000000000000000000000000000 nurture 00000000011100111111110110110010 grudge 00000000000000000000000000000000 deposition 00000000000110101111001011100111 publishing-group 00000000000000000000000000000000 434,000 00000000000000000000000000000000 Amateur 00100000000000000111101000110000 budget-strapped 00000000000000000000000000000000 re-oriented 00000000000000000000000000000000 less-perfectly 00000000000000000000000000000000 Gershman 00100000000000000000000000000000 multipartisan 00000000000000000000000000000000 Wedged 00100000000000000000000000000000 totalitarian 00000000000000101001011000110000 Fragua 00100000000000000000000000000000 amateurism 00000000000000000000000000000000 impugning 00000000000000000000000000000000 spy-chasing 00000000000000000000000000000000 pests 00000000000000000000000000000000 Chromosome 00100000000000000011111100010000 Sabena 00100000000001100100110100101000 8.019 00000000000000000000000000000000 magnesium 00000000000000000000000000000000 weevils 00000000000000000000000000000000 pathology 00000000000000000000000000000000 blood-forming 00000000000000000000000000000000 aberrations 00000000000000000000000000000000 fumigant 00000000000000000000000000000000 respirators 00000000000000000000000000000000 tetrachloride 00000000000000000000000000000000 disulfide 00000000000000000000000000000000 crunching 00000000000000000000000000000000 Sequester 00100000000000000000000000000000 cupboard 00000000000000000000000000000000 provisionally 00000000000000000000000000000000 shrieks 00000000000000000000000000000000 sharpener 00000000000000000000000000000000 little-understood 00000000000000000000000000000000 exempts 00000000000100110001000000010010 Salaries 00100000000111100110100100000011 quirk 00000000000000000000000000000000 111.6 00000000000000000000000000000000 Moses 00100000000111110001000100001000 hospices 00000000000000000000000000000000 undergraduates 00000000000000000000000000000000 ails 00000000000000000000000000000000 Cogan 00100000000000000000000000000000 Kika 00100000000000000000000000000000 Mindy 00100000000000000000000000000000 Minsk 00100000000000000000000000000000 Terence 00101111111000000101110110011000 drought-shriveled 00000000000000000000000000000000 Outlook 00100000000111111101111100111001 Kazakhstan 00100000000000000000000000000000 Adjust 00100000000111110010001110110010 2.064 00000000000000000000000000000000 Turn 00100000000111111110010110110010 frost 00000000000111001110000000001000 7-for-1 00000000000000000000000000000000 Tech-Sym 01000000000000000000000000000000 multiple-state 00000000000000000000000000000000 memory-expansion 00000000000000000000000000000000 upwards 00000000000000000000000000000000 buffetted 00000000000000000000000000000000 clubby 00000000000000000000000000000000 grain-trading 00000000000000000000000000000000 non-stop 00000000000000000000000000000000 Bannister 00100000000000000000000000000000 wad-working 00000000000000000000000000000000 Money-making 00100000000000000000000000000000 Leiby 00100000000000000000000000000000 Hering 00100000000000000000000000000000 acknowledgment 00000000000000000000000000000000 nudging 00000000000000000000000000000000 Snecma 00100000000000000000000000000000 catsup 00000000000000000000000000000000 Reasoning 00100000000110111011111101100111 37.4 00000000000000000000000000000000 S&P-down 01000000000000000000000000000000 52.3 00000000000000000000000000000000 1,024 00000000000000000000000000000000 fourfold 00000000000000000000000000000000 stockpickers 00000000000000000000000000000000 underperformance 00000000000000000000000000000000 Well-Seasoned 01000000000000000000000000000000 outguess 00000000000000000000000000000000 non-interstate 00000000000000000000000000000000 Forecaster 00100000000001101111101110110101 overinvested 00000000000000000000000000000000 outslugged 00000000000000000000000000000000 skew 00000000000000000000000000000000 small-cap 00000000000000000000000000000000 Values 00100000000111101000001000100011 computed 00000000000000000000000000000000 believers 00000000000000111100100000110011 Vitale 00100000000000000000000000000000 8.0087 00000000000000000000000000000000 Billock 00100000000000000000000000000000 Syferd 00100000000000000000000000000000 Eckhardt 00100000000000000000000000000000 FRANKENBERRY 01000000000000000000000000000000 LINK-UP 01000000000000000000000000000000 Sausage 00100000000000000000000000000000 miles-per-hour 00000000000000000000000000000000 handing 00000000000110011010100001000000 Sirowitz 00100000000000000000000000000000 Jericho 00100000000000000000000000000000 Plate 00100000000110011110111000000001 hammerlock 00000000000100101011001011100111 like-minded 00000000000000000000000000000000 Stalinists 00100000000000000000000000000000 Fatalities 00100000000110100011101001100011 Dashitchev 00100000000000000000000000000000 482.19 00000000000000000000000000000000 916 00000000000000000000000000000000 274,000 00000000000000000000000000000000 3,650,000 00000000000000000000000000000000 418,200 00000000000000000000000000000000 3,450,000 00000000000000000000000000000000 triple-Crated 01000000000000000000000000000000 Polypropylene 00100000000110000100011010110000 clamshells 00000000000000000000000000000000 41.50 00000000000000000000000000000000 mausoleum 00000000000000000000000000000000 rebuffing 00000000000000000000000000000000 gluey 00000000000000000000000000000000 clay 00000000000101111010000000001000 dank 00000000000000000000000000000000 shack 00000000000001011011100100001001 gray-black 00000000000000000000000000000000 grime 00000000000000000000000000000000 rambles 00000000000000000000000000000000 incoherence 00000000000000000000000000000000 pant 00000000000000000000000000000000 gunmetal-gray 00000000000000000000000000000000 8.395 00000000000000000000000000000000 diagnose 00000000000000000000000000000000 abscess 00000000000000000000000000000000 softball 00000000000000000000000000000000 sewage-polluted 00000000000000000000000000000000 softly 00000000000000000000000000000000 earthquake-stricken 00000000000000000000000000000000 blacker 00000000000000000000000000000000 year-old 00000000000000000000000000000000 picture-taking 00000000000000000000000000000000 unbelievably 00000000000000000000000000000000 bloom 00001111111100110101110010001000 benignant 00000000000000000000000000000000 molasses 00000000000000000000000000000000 Tallahatchie 00100000000000000000000000000000 Yalobusha 00100000000000000000000000000000 Gilt 00100000000111010010111110110000 Braggadocio 00100000000000000000000000000000 50%-plus 00000000000000000000000000000000 L.T. 01000000000000000000000000000000 Simes 00100000000000000000000000000000 dryly 00000000000000000000000000000000 Alstyne 00100000000000000000000000000000 CBS-TV 01000000000000000000000000000000 grubby 00000000000000000000000000000000 1,685 00000000000000000000000000000000 dumpster 00000000000000000000000000000000 caste 00000000000000000000000000000000 land-owning 00000000000000000000000000000000 complacently 00000000000000000000000000000000 hardscrabble 00000000000000000000000000000000 1980-84 00000000000000000000000000000000 fraying 00000000011010000110100001000000 1,954 00000000000000000000000000000000 Papasan 00100000000000000000000000000000 diplomas 00000000000000000000000000000000 photographing 00000000000000000000000000000000 Dust 00100000000111010111111000000001 Okies 00100000000000000000000000000000 prowled 00000000000000000000000000000000 Sharecropping 00100000000000000000000000000000 sharecropper 00000000000000000000000000000000 uncompensated 00000000000111110001100000110000 Reconstruction 00100000000000000010101101001111 still-continuing 00000000000000000000000000000000 Wyche 00100000000000000000000000000000 Breaux 00100000000000000000000000000000 gut-Democratic 01000000000000000000000000000000 Thad 00100000000000000000000000000000 Cochran 00100000000000000000000000000000 crosscurrents 00000000000000000000000000000000 retargeting 00000000000000000000000000000000 federal-state-local 00000000000000000000000000000000 bypassed 00000000000000000000000000000000 computer-age 00000000000000000000000000000000 Vaughn 00100000000000000000000000000000 Tiptonville 00100000000000000000000000000000 Chengdu 00100000000000000000000000000000 Reorganizing 00100000000110110101011101000000 Second-quarter 00100000000000000000000000000000 mid-1989 00000000000000000000000000000000 Shenzhen 00100000000111110100110001101000 208,992 00000000000000000000000000000000 metal-coil 00000000000000000000000000000000 AMCA 01000000000000000000000000000000 McGinty 01000000000000000000000000000000 MINORITY 01000000000000000000101000110000 technologically-improved 00000000000000000000000000000000 Stanger 00101111111000110100111000001000 Shrewsbury 00100000000000000000000000000000 syndicators 00000000000010001100010000110011 355.3 00000000000000000000000000000000 241.3 00000000000000000000000000000000 plunked 00000001000100101001001000110010 159.8 00000000000000000000000000000000 102.3 00000000000000000000000000000000 Kaneb 00100000000110001001000100101000 UDC 01000000000000000000000000000000 pulchritude 00000000000000000000000000000000 much-respected 00000000000000000000000000000000 fast-rising 00000000000000000000000000000000 Lea 00100000000000000000000000000000 Industri 00100000000000000000000000000000 8.3875 00000000000000000000000000000000 takings 00000000000111111011011000111001 Haber 00100000000000000000000000000000 Comer 00100000000000000000000000000000 drug-making 00000000000000000000000000000000 biochemical 00000000000000000000000000000000 Soichiro 00100000000000000000000000000000 RECRUITING 01000000001001110010110001000000 trickling 00000000000110001101100001000000 genetics 00000000000101100111100101100001 Biochemical 00100000000000000000000000000000 67.5 00000000000000000000000000000000 RNA-based 01000000000000000000000000000000 flicker 00000000000000000000000000000000 millionths-of-a-second 00000000000000000000000000000000 masers 00000000000000000000000000000000 Honored 00100000000001101101110000110010 ions 00000000000000000000000000000000 Dehmelt 00100000000000000000000000000000 tenet 00000000000000000000000000000000 mid-1950s 00000000000000000000000000000000 double-helix 00000000000000000000000000000000 bead-like 00000000000000000000000000000000 secluded 00000000000000000000000000000000 necklace-like 00000000000000000000000000000000 anti-morning-sickness 00000000000000000000000000000000 copy-cat 00000000000000000000000000000000 protein-making 00000000000000000000000000000000 biochemists 00000000000000000000000000000000 Recruiter 00101111111111101100011000110101 cutting-and-pasting 00000000000000000000000000000000 enzyme-like 00000000000000000000000000000000 splicing 00000000000000000000000000000000 self-splicing 00000000000000000000000000000000 exemplar 00000000000000000000000000000000 ribonucleic 00000000000000000000000000000000 six-week-old 00000000000000000000000000000000 Ribozymes 00100000000000000000000000000000 RNAs 01000000000000000000000000000000 cleave 00000000000000000000000000000000 inactivate 00000000000000000000000000000000 ribozyme 00000000000000000000000000000000 disrupts 00000000000000000000000000000000 inactivated 00000000000000000000000000000000 126.7 00000000000000000000000000000000 6.14 00000000000000000000000000000000 54.7 00000000000000000000000000000000 170.9 00000000000000000000000000000000 counter-measures 00000000000000000000000000000000 120.3 00000000000000000000000000000000 ground-launched 00000000000000000000000000000000 air-launched 00000000000000000000000000000000 391.9 00000000000000000000000000000000 362.3 00000000000000000000000000000000 5.98 00000000000000000000000000000000 Sean 00100000000000001101010110011000 Klauer 00100000000000000000000000000000 Mattison 00100000000000000000000000000000 flatish 00000000000000000000000000000000 434.4 00000000000000000000000000000000 Bouncing 00100000000111010011100001000000 mini-doll 00000000000000000000000000000000 docks 00000000000000000000000000000000 Viewmaster-Ideal 01000000000000000000000000000000 driftnet 00000000000000000000000000000000 Dynoriders 00100000000000000000000000000000 Oopsie 00100000000000000000000000000000 Licks 00100000000000000000000000000000 Hovercraft 00100000000111010011101001100011 radio-controlled 00000000000000000000000000000000 Minnetonka 00100000000110111010111100101000 267.5 00000000000000000000000000000000 de-emphasis 00000000000000000000000000000000 Sega 00100000000000000000000000000000 Connectables 00100000000000000000000000000000 Ring 00100000000110101111001010110111 Raiders 00100000000111101011110000110011 Kooten 00100000000000000000000000000000 Pettis 00100000000000000000000000000000 Polian 00100000000000000000000000000000 Neb 00100000000000000000000000000000 non-option 00000000000000000000000000000000 stock-basket 00000000000000000000000000000000 market-basket 00000000000000000000000000000000 Teeter 00101111111101001101000010001000 hijacked 00000000000000000000000000000000 Rector 00100000000000000000000000000000 multitudes 00000000000000000000000000000000 Lobbyists 00100000000010010110000010110011 Mailings 00100000000010000101110101100011 Fisheries 00100000000111000110010010110000 Sixteen 00100000000111111111000011000000 Shays 00100000000000000000000000000000 Shrewd 00100000000000100101000010010000 Start 00100000000111101001110110110010 median-family 00000000000000000000000000000000 dependent-care 00000000000000000000000000000000 Vogue 00100000000110011111111001101000 Cashiering 00100000000000000000000000000000 gentrified 00000000000000000000000000000000 saber-rattling 00000000000000000000000000000000 Conservationists 00100000000000000000000000000000 534,000 00000000000000000000000000000000 union-represented 00000000000000000000000000000000 revelation 00000000000110110000111101100111 convertibility 00000000000000000000000000000000 inflexible 00000000000111111100110100010000 ever-increasing 00000000000000000000000000000000 assigning 00000000000100001011111101000000 tradesmen 00000000000000000000000000000000 Keeling 00100000000000000000000000000000 nonunionized 00000000000000000000000000000000 Impressions 00100000000110111101111101100011 Absenteeism 00100000000111111111111100000111 Uchida 00100000000000000000000000000000 toting 00000000000000000000000000000000 trustworthy 00000000000000000000000000000000 Quieter 00100000000000101100001111000000 even-tempered 00000000000000000000000000000000 media-conscious 00000000000000000000000000000000 Chilver 00100000000000000000000000000000 Germany-based 00100000000000000000000000000000 entertainer 00000000001100110011100000110101 Merv 00101111111011001101001010011000 forte 00000000000000000000000000000000 Orens 00100000000000000000000000000000 boyhood 00000000000000000000000000000000 719,000 00000000000000000000000000000000 tactful 00000000000000000000000000000000 sandy-haired 00000000000000000000000000000000 grandstanding 00000000000000000000000000000000 repatriation 00000000000000000000000000000000 Tyson-Spinks 01000000000000000000000000000000 boxing 00000000000000010010001100100001 Mercer-Meidinger-Hansen 01000000000000000000000000000000 once-mighty 00000000000000000000000000000000 bypassing 00000000000000000000000000000000 618,000 00000000000000000000000000000000 neglects 00000000000000000000000000000000 Clays 00100000000000000000000000000000 1,161 00000000000000000000000000000000 896 00000000000000000000000000000000 1,681 00000000000000000000000000000000 4,451 00000000000000000000000000000000 propellers 00000000000000000000000000000000 incapacitated 00000000000000000000000000000000 expectancies 00000000000000000000000000000000 Wiesenthal 00100000000000000000000000000000 Broadly 00100000000110101000010001110010 Entitlements 00100000000000000000000000000000 Losing 00100000000000000100100101000000 Oi 00100000000000000000000000000000 muddy 00000000000000000000000000000000 waist 00000000000000000000000000000000 signers 00000000000000000000000000000000 vagueness 00000000000000000000000000000000 Believe 00100000000111101111100110110010 demurrer 00000000000000000000000000000000 queue 00000000000000000000000000000000 238,140 00000000000000000000000000000000 drafters 00000000000011001010000010110011 injunctive 00000000000000000000000000000000 craftsmanship 00000000000000000000000000000000 near-total 00000000000000000000000000000000 court-supervised 00000000000000000000000000000000 consent-decree 00000000000000000000000000000000 small-equipment 00000000000000000000000000000000 thorny 00000000000000101100011000010000 Avoids 00100001010100000011000000010010 explored 00000101010111010100010000110010 monopolistic 00000000000000000000000000000000 much-needed 00000000000000000000000000000000 presaging 00000000000000000000000000000000 revenue-law 00000000000000000000000000000000 penalty-free 00000000000000000000000000000000 repealing 00000000000000000000000000000000 geothermal 00000000000010001001000100101000 ocean-thermal 00000000000000000000000000000000 Permanent 00100000000010000001000000010000 Imposition 00100000000111000101011000001111 3-per-passenger 00000000000000000000000000000000 Reinstatement 00100000000111111011101101001111 cent-per-barrel 00000000000000000000000000000000 spill-cleanup 00000000000000000000000000000000 Winn 00100000000000000000000000000000 Elsevier 00100000000001001111111100101000 Data-destroying 00100000000000000000000000000000 infesting 00000000000000000000000000000000 Nazi-occupied 00100000000000000000000000000000 Thirty-four 00100000000000000000000000000000 exploitative 00000000000000000000000000000000 price-gouging 00000000000000000000000000000000 Rooker 00100000000000000000000000000000 reliability 00000000000111111110100011100001 vaccine-vendor 00000000000000000000000000000000 Dispatch 00100000000111000111100110110111 ASP 01000000000000000000000000000000 Certus 00100000000000000000000000000000 Ware 00100000000000000000000000000000 Tippett 00100000000000000000000000000000 visionaries 00000000000101001100010000110011 Viruscan 00100000000000000000000000000000 Meyerson 00100000000000000000000000000000 edits 00000000000000000000000000000000 compassionate 00000000001111100101010010010000 clamoring 00000000000110011110110000110010 Humanity 00100000000111001001110010100111 may... 00000000000000000000000000000000 gradations 00000000000000000000000000000000 circumspection 00000000000000000000000000000000 inconveniences 00000000000000000000000000000000 miseries 00000000000000000000000000000000 dogmatically 00000000000000000000000000000000 liberate 00000000000000000000000000000000 dungeons 00000000000000000000000000000000 melee 00000000000000000000000000000000 Red-Green 01000000000000000000000000000000 germaneness 00000000000000000000000000000000 congressional-item 00000000000000000000000000000000 vote-begging 00000000000000000000000000000000 perplexed 00000000000000000000000000000000 roams 00000000000000000000000000000000 class-warrior 00000000000000000000000000000000 hindsight 00000000000111000111111001101000 Pop 00100000000001000100110110110111 spike 00000000000100111001101010100111 ascend 00000000000000000000000000000000 sliding-rate 00000000000000000000000000000000 theoretically 00000000110100000000001001110010 sanctify 00000000000000000000000000000000 reintroduces 00000000000000000000000000000000 pre-1986 00000000000000000000000000000000 progressivity 00000000000000000000000000000000 disfavored 00000000000000000000000000000000 white-shoe 00000000000000000000000000000000 buccaneers 00000000000000000000000000000000 coalitions 00000000000000111110000100100011 60%-plus 00000000000000000000000000000000 flagpole 00000000000000000000000000000000 757s 00000000000000000000000000000000 narrow-bodied 00000000000000000000000000000000 Rothmeier 00100000000000000000000000000000 chafing 00000000000000000000000000000000 end-of-year 00000000000000000000000000000000 horticulturist 00000000000000000000000000000000 sages 00000000000000000000000000000000 Rippe 00100000000000000000000000000000 152 00000000000000000000000000000000 598.7 00000000000000000000000000000000 FACES 01000000000001000011000000010010 grouse 00000000000000000000000000000000 Anytime 00100000000000001110000000101010 catastrophic-health 00000000000000000000000000000000 GERMAN 01000000000000000000000010101000 TURMOIL 01000000000110101011111010100111 swamping 00000000000000000000000000000000 FED 01000000000111101111110000100101 FEARS 01000000000111101110101010101111 COUP 01000000000000001000111010110101 REBUFF 01000000000000000000000000000000 FINAL 01000000000000010000000011010000 IRONY 01000000000111101011110000001111 Heartburn 00100000000000000000000000000000 ROSTY'S 01000000000000000000000000000000 REFLECTIONS 01000000000000000000000000000000 ponders 00000000000000000000000000000000 SOVIET 01000000000000001000110100110000 GLASNOST 01000000000110101111110010100111 B'nai 00100000000000000000000000000000 B'rith 00100000000000000000000000000000 Riga 00100000000000000000000000000000 Vilnius 00100000000000000000000000000000 GENERIC-DRUG 01000000000000000000000000000000 FRAUDS 01000000000110000111100010100111 Phamaceutical 00100000000000000000000000000000 double-checking 00000000000000000000000000000000 Wyden 00100000000000000000000000000000 Sikorski 00100000000000000000000000000000 Sigourney 00100000000000000000000000000000 Wendell 00100000000000000101100010011000 lectern 00000000000000000000000000000000 assails 00000000000000000000000000000000 vampirism 00000000000000000000000000000000 Improprieties 00100000000101000111100010100111 intercede 00000000000000000000000000000000 countercharges 00000000000000000000000000000000 Cirona 00100000000000000000000000000000 Dawn 00100000000111101100010000101000 bubbled 00000000000000000000000000000000 devour 00000000000000000000000000000000 fanning 00000000000000000000000000000000 overhyped 00000000000000000000000000000000 Rotenberg 00100000000000000000000000000000 31,000-member 00000000000000000000000000000000 Belisle 00100000000000000000000000000000 Datacrime 00100000000000000000000000000000 wipes 00000000000000000000000000000000 variant 00000000000000000000000000000000 COM 01000000000110101010010010110000 social-welfare 00000000000000000000000000000000 1,168 00000000000000000000000000000000 1,280 00000000000000000000000000000000 Westphalia 00100000000000000000000000000000 1,514 00000000000000000000000000000000 EXE 01000000000000000000000000000000 Corp.-compatible 00100000000000000000000000000000 operating-system 00000000000000000000000000000000 Infection 00100000000110111010110010100111 Repairing 00100000000000100111111101000000 Viruses 00100000000111111010111001100011 intimidates 00000000000000000000000000000000 catchy 00000000000000000000000000000000 North-Rhine 01000000000000000000000000000000 Greenbelt 00100000000000000000000000000000 resembled 00000000000000000000000000000000 eradicated 00000000000000000000000000000000 CGP 01000000000000000000000000000000 ANP 01000000000000000000000000000000 Lurgi 00100000000000000000000000000000 apple-industry 00000000000000000000000000000000 342-million 00000000000000000000000000000000 energy-hungry 00000000000000000000000000000000 Vt.-based 00100000000000000000000000000000 anti-foreigner 00000000000000000000000000000000 helluva 00000000000000000000000000000000 Medicaid-covered 00100000000000000000000000000000 commands 00000000000011111111000000010010 70-75 00000000000000000000000000000000 loyalists 00000000000011000001010110110101 8.86 00000000000000000000000000000000 99.869 00000000000000000000000000000000 9.267 00000000000000000000000000000000 88.4 00000000000000000000000000000000 1990-2005 00000000000000000000000000000000 1989-81 00000000000000000000000000000000 9.09 00000000000000000000000000000000 Cassa 00100000000000000000000000000000 Risparmio 00100000000000000000000000000000 delle 00000000000000000000000000000000 Provincie 00100000000000000000000000000000 Lombarde 00100000000000000000000000000000 CARIPLO 01000000000000000000000000000000 Kagakushi 00100000000000000000000000000000 Kogyo 00100000000000000000000000000000 Sankai 00100000000000000000000000000000 Fixing 00100000011110000010110001000000 Exercise 00100000000110110111110110110010 Definitive 00100000000000010001001100010000 misusing 00000000000000000000000000000000 retrace 00000000000000000000000000000000 98-count 00000000000000000000000000000000 Mattox 00100000000000000000000000000000 ISO 01000000000000000000000000000000 ACTING 01000000000001000000000001000000 ATTORNEY 01000000000000001110110000110101 Benito 00100000000000000000000000000000 enigma 00000000000000000000000000000000 Dewey 00101111111011110000000100001000 Bushby 00100000000000000000000000000000 Morvillo 00100000000000000000000000000000 Abramowitz 00100000000000000000000000000000 MYERSON 01001111111101100110111000001000 KUHN 01001111111100110001110001001000 Nessen 00100000000000000000000000000000 Kamin 00100000000000000000000000000000 Killelea 00100000000000000000000000000000 Waffen 00100000000000000000000000000000 dashing 00000000000000000000000000000000 Nevermind 00100000000000000000000000000000 neckline 00000000000000000000000000000000 giggling 00000000000000000000000000000000 left-of-center 00000000000000000000000000000000 consumerism 00000000000000000000000000000000 diehards 00000000000000000000000000000000 PERFORMANCE 01000000000111101101011010100111 divorcee 00000000000000000000000000000000 leopard-trimmed 00000000000000000000000000000000 hesitates 00000000000000000000000000000000 uncontrollably 00000000000000000000000000000000 Pollak 00100000000000000000000000000000 Compulsive 00100000000000000000000000000000 Miriam 00100000001010101101111000011000 80-year-old 00000000000000000000000000000000 gregarious 00000000000000000000000000000000 Knowing 00100000000111001101111010000010 Equestrian 00100000000000000000000000000000 brunette 00000000000000000000000000000000 Paini 00100000000000000000000000000000 gazing 00000000011110000110100001000000 burnt-orange 00000000000000000000000000000000 crocodile 00001111111011000100110100101000 nattily 00000000000000000000000000000000 Guess 00100000000101011110000110110010 Baden-Wuerttemburg 01000000000000000000000000000000 darting 00000000000000000000000000000000 ultra-right 00000000000000000000000000000000 miniskirt 00000000000000000000000000000000 hot-pink 00000000000000000000000000000000 Erin 00100000000000000000000000000000 Harkess 00100000000000000000000000000000 spraining 00000000000000000000000000000000 frowns 00000000000000000000000000000000 Melrose 00100000000000000000000000000000 Jeri 00100000000000000000000000000000 13-year-old 00000000000000000000000000000000 super-regionals 00000000000000000000000000000000 Winston-Salem 01000000000000000000000000000000 Eichof 00100000000000000000000000000000 34.85 00000000000000000000000000000000 45.48 00000000000000000000000000000000 Stockholder 00100000000001000000111100010000 3.32 00000000000000000000000000000000 938.6 00000000000000000000000000000000 Brauerei 00100000000000000000000000000000 49.50 00000000000000000000000000000000 Dominican 00100000000011001101011000110000 Felice 00100000000000000000000000000000 non-interest-bearing 00000000000000000000000000000000 Interest-rate 00100000000000000000000000000000 costcutting 00000000000000000000000000000000 338.2 00000000000000000000000000000000 324.4 00000000000000000000000000000000 basis-point 00000000000000000000000000000000 Solutions 00100000000111100111001110100011 installment-loan 00000000000000000000000000000000 33-basis 00000000000000000000000000000000 37.125 00000000000000000000000000000000 spread-sensitive 00000000000000000000000000000000 Adair 00100000000000000000000000000000 big-deposit 00000000000000000000000000000000 higher-rate 00000000000000000000000000000000 Puglisi 00100000000000000000000000000000 4.09 00000000000000000000000000000000 733 00000000000000000000000000000000 296 00000000000000000000000000000000 midwest 00000000000111101110001110101000 510 00000000000000000000000000000000 31.15 00000000000000000000000000000000 34.75 00000000000000000000000000000000 strives 00000000000000000000000000000000 extra-nasty 00000000000000000000000000000000 acreage 00000000000011100011011000100001 Brascade 00100000000000000000000000000000 customs-cleared 00000000000000000000000000000000 7.76 00000000000000000000000000000000 17.05 00000000000000000000000000000000 24.29 00000000000000000000000000000000 4.78 00000000000000000000000000000000 3.88 00000000000000000000000000000000 8.67 00000000000000000000000000000000 Auto-parts 00100000000000000000000000000000 Pike 00101111111110111011001000001000 5.55 00000000000000000000000000000000 4.37 00000000000000000000000000000000 Adjusted 00100000000010110110110000110010 23.28 00000000000000000000000000000000 Hondas 00100000000000000000000000000000 breaching 00000000000000000000000000000000 ex-officers 00000000000000000000000000000000 Lackland 00100000000000000000000000000000 Ministries 00100000000100011010000100100011 Massey-Ferguson 01000000000000000000000000000000 Italian-based 00100000000000000000000000000000 Fenn 00100000000000000000000000000000 EuroBelge 01000000000000000000000000000000 Korean-American 01000000000000000000000000000000 steadfastness 00000000000000000000000000000000 Eighth 00100000000111000011100011010000 U.S.-Korean 01000000000000000000000000000000 Bureaucratic 00100000001010100000000000110000 arresting 00000000000000011111110001000000 democracy-free 00000000000000000000000000000000 infraction 00000000000000000000000000000000 Chun 00101111111000001000100110001000 Doo 00101111111010000010011100100101 Hwan 00101111111101111101101100010101 COLGATE-PALMOLIVE 01000000000000000000000000000000 31.57 00000000000000000000000000000000 355.39 00000000000000000000000000000000 333.57 00000000000000000000000000000000 0.83 00000000000000000000000000000000 196.98 00000000000000000000000000000000 160,120,000 00000000000000000000000000000000 164,070,000 00000000000000000000000000000000 IMO 01000000000111011110111100101000 Thiokol 00101111111010111011010001001000 MGM-UA 01000000000000000000000000000000 Rowan 00100000000000000000000000000000 Bairnco 00100000000000000000000000000000 yearago 00000000000000000000000000000000 Anthem 00100000000000000000000000000000 Nettleton 00101111111011010111110001001000 0.67 00000000000000000000000000000000 395.01 00000000000000000000000000000000 KMW 01000000000000000000000000000000 5.25-a-share 00000000000000000000000000000000 Yale-New 01000000000000000000000000000000 drinkers 00000000000111010100010000110011 guzzles 00000000000000000000000000000000 18%-owned 00000000000000000000000000000000 fizzy 00000000000000000000000000000000 Pure 00100000000001000010011010010000 45.6 00000000000000000000000000000000 flour-milling 00000000000000000000000000000000 processed-meat 00000000000000000000000000000000 RFM 01000000000000000000000000000000 39.125 00000000000000000000000000000000 billion-peso 00000000000000000000000000000000 miscues 00000000000000000000000000000000 freer-spending 00000000000000000000000000000000 Soft-drink 00100000000000000000000000000000 Soft 00100000000010100010101010110000 fruit-juice 00000000000000000000000000000000 marketing-and-distribution 00000000000000000000000000000000 eclipsed 00000000000100100001110000110010 Benigno 00101111111100100100101100011000 7-Up 01000000000000000000000000000000 ornery 00000000000000000000000000000000 216.3 00000000000000000000000000000000 212.7 00000000000000000000000000000000 26.125 00000000000000000000000000000000 uncoated 00000000000000000000000000000000 441 00000000000000000000000000000000 121.7 00000000000000000000000000000000 4.79 00000000000000000000000000000000 35.1 00000000000000000000000000000000 318.4 00000000000000000000000000000000 273.7 00000000000000000000000000000000 96.8 00000000000000000000000000000000 911.9 00000000000000000000000000000000 798.7 00000000000000000000000000000000 Lewiston 00100000000000000000000000000000 Cloquet 00100000000000000000000000000000 Parkland 00100000000000000000000000000000 Canning 00100000000000000000000000000000 droop 00000000000000000000000000000000 stupendously 00000000000000000000000000000000 Sensing 00100000000110100001111010000010 accumulator 00000000000000000000000000000000 out-of-favor 00000000000000000000000000000000 Rockville 00100000000111101000101001101000 Bessie 00100000000000000000000000000000 helmsman 00000000000000000000000000000000 first-floor 00000000000000000000000000000000 BS 01000000000000000000000000000000 5.49 00000000000000000000000000000000 311,734 00000000000000000000000000000000 mailgrams 00000000000000000000000000000000 eleventh 00000000000000000100000011010000 Balking 00100000000000000000000000000000 gasping 00000000000000000000000000000000 766 00000000000000000000000000000000 Streeters 00100000000000000001100010101000 El-Sadr 01000000000000000000000000000000 Manhattan-based 00100000000000000000000000000000 Wafaa 00100000000000000000000000000000 emphatic 00000000000000000000000000000000 ostrich 00000000000000000000000000000000 Morse 00100000011000101000010000001000 TWX 01000000000000000000000000000000 gambles 00000000000000000000000000000000 layering 00000000000000000000000000000000 Kheel 00100000000000000000000000000000 Evans-Black 01000000000000000000000000000000 entreaties 00000000000000000000000000000000 Liggett 00100000000001100101010100101000 cropping 00000000000000000000000000000000 arduous 00000000000000000000000000000000 400,000-a-year 00000000000000000000000000000000 Unwanted 00100000000001110000010100010000 blindsided 00000000000000000000000000000000 Telex 00100000000001101110111100101000 35%-to-40 00000000000000000000000000000000 875.9 00000000000000000000000000000000 junked 00000000000000000000000000000000 business-services 00000000000000000000000000000000 son-of-exchange 00000000000000000000000000000000 EasyLink 01000000000000000000000000000000 lower-middle-class 00000000000000000000000000000000 distresses 00000000000000000000000000000000 sketched 00000000110000101001001000110010 Turning 00100000000111111101100001000000 dunk 00000000000000000000000000000000 stinks 00000000000000000000000000000000 Chemfix 00100000000000000000000000000000 once-popular 00000000000000000000000000000000 Dedication 00100000000111010101111100100111 hinders 00000000000000000000000000000000 blobby 00000000000000000000000000000000 FEAR 01000000000111101110000110110010 Arne 00100000000000000000000000000000 Loopholes 00100000000111110110101110100011 stupidity 00000000000111000111110010100111 decease 00000000000000000000000000000000 Belzberg 00100000000001010000000000001000 howls 00000000000000000000000000000000 clumsily 00000000000000000000000000000000 Schmolka 00100000000000000000000000000000 Berson 00100000000000000000000000000000 Retiree 00100000000000011110111000100001 company-arranged 00000000000000000000000000000000 Geld 00100000000000000000000000000000 Meidinger 00100000000000000000000000000000 benefits-consulting 00000000000000000000000000000000 SOME 01000000000000000000001011000000 PHYSICIANS 01000000000100111100111000110011 over-50 00000000000000000000000000000000 flooring 00000000000000000000000000000000 Kanan 00100000000000000000000000000000 Nalick 00100000000000000000000000000000 gynecologic 00000000000000000000000000000000 oncology 00000000000111101011110110111001 Samaritan 00100000000111110111011011000001 Challenger 00100000000001001010000000001000 ovarian 00000000000000000000000000000000 Hoff 00100000000000000000000000000000 Therapy 00100000000011100110011010100111 Naren 00100000000000000000000000000000 Kapadia 00100000000000000000000000000000 oncologist 00000000000000000000000000000000 Waukegan 00100000000000000000000000000000 CONTAIN 01000000000000110001101110110010 Nary 00100000000000000000000000000000 homemakers 00000000000000000000000000000000 homebound 00000000000000000000000000000000 Slow 00100000000100000101110110110010 HOSPITALS 01000000000111111010110001100011 wards 00000000000000000000000000000000 Margret 00100000000000000000000000000000 Amatayakul 00100000000000000000000000000000 945 00000000000000000000000000000000 815 00000000000000000000000000000000 12.19 00000000000000000000000000000000 dyes 00000000000000000000000000000000 aircraft-engine 00000000000000000000000000000000 Power-generation 00100000000000000000000000000000 outplacement 00000000000001010100000010110000 juniors 00000000000000000000000000000000 FRINGE-BENEFIT 01000000000000000000000000000000 Wierton 00100000000000000000000000000000 contractually 00000000000000000000000000000000 fabricating 00000000000000001011100001100001 Prothro 00100000000000000000000000000000 stain-resistant 00000000000000000000000000000000 176.8 00000000000000000000000000000000 172.8 00000000000000000000000000000000 LONG-TERM 01000000000000000000000000000000 corporate-tax 00000000000000000000000000000000 Medibank 00100000000000000000000000000000 health-insurance 00000000000000000000000000000000 yet... 00000000000000000000000000000000 Salazar 00100000000000000000000000000000 Tijuana 00100000001100000111111001101000 Sony-owned 00100000000000000000000000000000 1,063 00000000000000000000000000000000 Seitz 00100000000000000000000000000000 six-week-long 00000000000000000000000000000000 re-education 00000000000000000000000000000000 Ten-year-old 00100000000000000000000000000000 372,949 00000000000000000000000000000000 368.3 00000000000000000000000000000000 Zehnder 00100000000000000000000000000000 M-1 00100000000000000000000000000000 9.85 00000000000000000000000000000000 concealment 00000000000111010111100010100111 False 00100000000000000001000110010000 recur 00000000000000000000000000000000 14.55 00000000000000000000000000000000 24.45 00000000000000000000000000000000 infringements 00000000000000000000000000000000 Belzbergs 00100000000111100111001110110011 brightener 00000000000000000000000000000000 whiteness 00000000000000000000000000000000 Pucik 00100000000000000000000000000000 securities-based 00000000000000000000000000000000 Ultra 00100000000010101101111100001000 Chicopee 00100000000000000000000000000000 Evenflo 00100000000000000000000000000000 Amer 00100000000000000000000000000000 diagramming 00000000000000000000000000000000 CALFED 01000000000010111110111100101000 Vegas-based 00100000000000000000000000000000 58.1 00000000000000000000000000000000 2,360,000 00000000000000000000000000000000 22.60 00000000000000000000000000000000 702,750 00000000000000000000000000000000 22.7 00000000000000000000000000000000 XYVISION 01000000000000000000000000000000 Jeopardy 00100000000111111010110101010111 game-show 00000000000000000000000000000000 Springdale 00100000000000000000000000000000 by-products 00000000000000000000000000000000 Farms 00100000000001001001100000101001 THF 01000000000000000000000000000000 West-End 01000000000000000000000000000000 clashing 00000000000000000000000000000000 Sedona 00100000000000000000000000000000 eye-to-eye 00000000000000000000000000000000 10,125 00000000000000000000000000000000 125-day 00000000000000000000000000000000 LaMacchia 01000000000000000000000000000000 coverings 00000000000000000000000000000000 Halloran 00100000000000000000000000000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/data/ppa/devset0100644 0000000 0000000 00000403245 14523004075 027044 0ustar00rootroot0000000 0000000 40000 set stage for increase N 40002 advanced 1 to 75 V 40002 climbed 2 to 32 V 40002 firmed 7 to 37 V 40003 rose 3 to 86 V 40003 gained 1 to 102 V 40003 added 3 to 59 V 40003 advanced 7 to 62 V 40004 rose 3 to 123 V 40006 was performer among groups N 40006 rose 3 to 33 V 40006 gained 1 to 44 V 40006 added 3 to 18 V 40006 climbed 3 to 39 V 40007 rose 5 to 34 V 40007 gained 1 to 25 V 40007 rose 1 to 22 V 40007 added 1 to 15 V 40008 climbed 1 to 58 V 40008 added 1 to 40 V 40009 advanced 3 to 28 V 40009 gained 3 to 1 V 40010 fell 3 to 19 V 40010 slipped 5 to 44 V 40010 restore service to areas V 40011 added 1 to 65 V 40012 shut pipeline in area N 40013 rose 1 to 49 V 40013 eased 1 to 19 V 40014 reported damage to facilities N 40015 eased 1 to 31 V 40015 lost 1 to 81 V 40016 eased 3 to 22 V 40016 slid 3 to 24 V 40016 dropped 1 to 21 V 40016 fell 5 to 29 V 40018 offered 300 for UAL V 40020 rising 3 to 74 V 40021 withdrew offer of 120 N 40023 added 1 to 65 V 40024 repeated recommendation on stock N 40024 raised estimate by cents V 40025 advanced 5 to 63 V 40026 dropped 3 to 36 V 40027 lowered estimates on company N 40031 rose 1 to 22 V 40033 posted jump in profit V 40033 reflecting strength in businesses N 40038 disclosed information about performance N 40039 reflecting effect of change N 40040 suspend operations for period V 40042 produces gold at cost V 40043 write value of mine N 40043 write value by dollars V 40046 selling software for use V 40050 require assistance from software V 40051 reported loss in quarter V 40055 had earnings of million N 40055 had earnings in quarter V 40055 including loss from operations N 40056 included charge for payments N 40059 give price in range N 40060 buys shares at price V 40061 representing % of shares N 40061 established range for buy-back V 40065 rose 1 to 61.125 V 40066 slipped % despite gain V 40074 buy steam from station V 40079 had loss of million N 40081 paid dividends of million N 40081 exchanged stock for debt V 40083 attributed improvement to earnings V 40084 restructured debt under agreement V 40086 launching restructuring of business N 40086 took charge for quarter V 40087 close 40 of facilities N 40087 cut jobs from payroll V 40090 sell businesses to Inc. V 40092 took charge of million N 40092 took charge in quarter V 40096 buy % of Finanziaria N 40097 pay lira for station V 40098 's sort of situation N 40098 protects companies from creditors V 40099 draws % of viewers N 40099 has debt of lire N 40100 take % of Odeon N 40108 provided number for people V 40110 issued edition around noon V 40112 supply services to Center V 40113 estimated value of contract N 40113 estimated value at million V 40113 selected bidder for negotiations V 40115 reopen negotiations on contract N 40116 requested briefing by NASA N 40117 climbed % to million V 40126 hurt margins for products N 40127 see relief in costs V 40127 offset drop in prices N 40129 had shares on average V 40133 establishing reserve of million N 40135 check soundness of buildings N 40136 has beds at disposal V 40137 forked 150,000 of money N 40137 forked 150,000 for purposes V 40139 sending them to Francisco V 40140 recommended month by officer V 40148 resisting pressure for rise N 40155 approved formation of company N 40155 pursue activities under law V 40157 generated million in profit N 40158 meeting requirements under law N 40160 consolidate Bank into institution V 40161 save million in costs N 40162 completed acquisition of publisher N 40165 told staff of Ms. N 40171 been target of lobbyists N 40174 keep watch on content N 40179 gets mail in month N 40181 took Ms. with acquisition V 40182 owns % of Matilda N 40183 pumped 800,000 into Matilda V 40191 sold summer to Group V 40191 sell interest in Woman N 40191 sell interest to Lang V 40193 be entry into magazines N 40196 saw losses in circulation N 40204 named Taber as publisher V 40205 retain post as publisher N 40206 finance buy-back of interest N 40209 have enough on plate V 40210 is plenty of work N 40211 cleared purchase of unit N 40211 have impact on consumers N 40213 hold share of market N 40214 removing matter from jurisdiction V 40215 posted income of million N 40215 continuing rebound from losses N 40216 posted loss of million N 40218 gained 2.25 to 44.125 V 40220 totaling million over years V 40225 issued letter of reproval N 40225 forbidding discrimination against employees N 40226 write letters of apology N 40228 accept resolution of matter N 40230 file complaint with Committee V 40233 are carriers in Southwest V 40236 have value of million N 40237 owns % of Mesa N 40240 reported jump in profit N 40246 contributed million to net V 40248 reported net of million N 40249 post loss of million N 40249 adding million in reserves N 40250 has billion of assets N 40250 had income in quarter N 40251 report earnings for quarter N 40255 take total of million N 40256 announced offering of % N 40258 had income of million N 40259 report milllion in charges N 40259 report milllion for quarter V 40259 reflecting settlement of contracts N 40260 take charge against operations N 40262 owns reserves in Southwest N 40263 negotiated agreement with creditors N 40267 make repayments in installments V 40274 included gain of million N 40280 taking redoubt in delegation N 40281 gives victory in elections N 40282 won % of vote N 40283 was embarrassment for Republicans V 40285 carried all but one N 40287 called companies with facilities N 40287 called companies in bid V 40288 reached all of companies N 40295 had damage to headquarters V 40296 had damage to track V 40297 work ship with delays V 40305 had power at headquarters V 40307 had damage at buildings V 40312 conducting business from lot V 40318 had damage to headquarters N 40318 closed two of buildings N 40328 had damage in stockroom V 40334 including operation in Alto N 40337 had damage at headquarters V 40340 was production of models N 40341 assessing damage to suppliers N 40341 handle shipments to plant N 40343 be suspension of manufacturing N 40343 be suspension for period V 40345 has employees in area V 40347 were injuries among workers V 40349 had damage beyond trouble N 40351 expects impact on business N 40355 doing business in protectors N 40358 resume operations over days V 40360 opened center for service N 40360 opened center as part V 40361 had damage to building N 40366 had damage at plant V 40369 halted manufacturing at plants V 40371 was damage to stores N 40379 caused delay in release N 40379 sustained damage to buildings N 40381 manufactures drives for computers N 40384 transporting products to stores V 40385 had damage to building V 40388 be damage to some N 40389 had damage to tracks N 40390 restored lines between Francisco V 40398 assessing damage at plant N 40398 is furnaces for production N 40403 began task of trying N 40404 blaming disaster on construction V 40406 raise questions about ability N 40407 connect Oakland with Francisco V 40407 build stretch of highway N 40409 bring double-decking to freeways V 40410 add deck for pools N 40410 add deck above median V 40411 fight introduction of double-decking N 40413 measured 6.1 on scale N 40416 withstand temblor of 7.5 N 40418 attributed destruction to reinforcement V 40420 lacked number of ties N 40421 uses variation of design N 40422 caused core of columns N 40424 tie decks of freeway N 40424 tie decks to columns V 40429 Given history of Area N 40430 defended work on Freeway N 40432 had earthquake of duration N 40433 wrapping columns in blankets V 40437 rejected offer of 8 N 40438 urged holders of debt N 40440 began lawsuit in Court V 40443 reignite talks between Co. N 40450 acquire control of company N 40451 buy shares for 4 V 40452 given control of % N 40453 receive share of stock N 40454 recommend plan to board V 40455 exploring development of plan N 40455 boost value of company N 40455 boost value for holders V 40456 holds % of Merchants N 40456 retained bank for advice V 40457 provide him with information V 40460 project image of House N 40461 want repeat of charges N 40462 got briefing of day N 40462 got briefing at a.m. V 40463 taken calls from President V 40463 made statement of concern N 40463 received report from Agency N 40465 be carping about performance N 40465 took hit for reaction V 40468 reported jump in profit N 40468 reported jump for year V 40471 rated 6.9 on scale N 40472 was 10 to times N 40479 was miles from epicenter N 40481 drive piles on it V 40482 cited example of district N 40485 got lots of buildings N 40486 leaving wedge of floor N 40486 leaving wedge of floor N 40490 do something about it V 40491 release tension along faultlines N 40497 market version of brand N 40497 beginning week in Charlotte V 40500 surrounding change of formula N 40500 clutter name with extension V 40503 increase volume of brand N 40504 limited growth throughout industry V 40505 leads Pepsi in share V 40505 trails Pepsi in sales V 40508 studying possibility for year V 40511 picked way through streets V 40512 finding survivors within steel V 40513 caused billions of dollars N 40513 caused billions along miles V 40515 played Tuesday in Park V 40517 oversaw building of Wall N 40518 following surgery in August N 40519 ruled sharing of power N 40522 ending domination in country N 40522 regulating elections by summer N 40522 establishing office of president N 40523 renamed Republic of Hungary N 40526 launched probe on flight V 40528 return Monday to California V 40529 urged patience over demands N 40530 follow hint of weakening N 40532 marked decline in rate N 40533 rose % to 13,120 V 40535 risk conflict with U.S. N 40535 risk conflict over plan V 40538 oppose seating as delegate N 40539 told summit in Lumpur N 40542 giving role in government N 40543 following murder of justice N 40544 claimed responsibility for slaying N 40546 named president of Properties N 40548 appointed president of Systems N 40550 slipped % from quarter V 40551 broke streak of quarters N 40557 earn 14.85 for year V 40558 acquire % of Inc N 40559 dilute earnings per share N 40561 blamed drop on factors V 40561 made exports from U.S. N 40561 made exports from U.S. N 40562 was increase in costs N 40572 Given frustration with victories N 40575 whipping conglomerate of groups N 40575 whipping conglomerate into force V 40578 mind credentials for ground N 40580 engaged nominee in contest V 40580 stretch Constitution in area V 40582 painted picture of reading N 40582 reading prejudices into Constitution V 40585 punish them in elections V 40591 travel journey with trail V 40593 swallowed case for culture N 40595 discover it in Bickel V 40597 leaves decisions in democracy N 40597 leaves decisions to executives V 40601 apply right to abortion V 40603 allow happening like circus N 40605 taking risk on outcome N 40606 receive minimum of million N 40606 receive minimum for collection V 40608 resembles underwriting by bank N 40610 sell securities at price V 40613 earned % of total N 40614 taking chunk of proceeds N 40615 guarantee seller of work N 40617 has interest in property V 40619 have level of interest N 40622 keep collection from house V 40622 handled sales for family N 40622 handled sales over years V 40623 was question of considerations N 40624 made money on Street V 40624 become part of business N 40625 offered loan of million N 40625 offered loan to businessman V 40625 purchase Irises for million V 40626 was bid in history N 40627 has painting under key V 40629 be lot of art N 40629 be lot for sale V 40631 receive portion of proceeds N 40632 take commission on amount V 40634 announcing plans for auction N 40634 estimated value in excess V 40636 's estimate for collection N 40637 put collection on block V 40638 owns % of Christie N 40641 has problem with houses N 40642 put light on things V 40645 lay half for this V 40646 snatched collection from bidders V 40647 gets commission from buyer V 40648 reforming country in crisis N 40652 be version of Honecker N 40653 followed path as Honecker N 40654 is member of Politburo N 40655 get reunification on ground V 40656 make efforts at reform N 40657 abandoning reason with it N 40659 need bit of time N 40661 find refugees at gates V 40663 close border to Czechoslovakia N 40663 install lights in spots V 40664 turn itself into Albania V 40665 kept police off backs N 40665 kept police at celebrations V 40669 recall ideals of period N 40669 recall ideals in country V 40671 is land of socialism N 40673 been ideology of socialism N 40675 runs risk of disintegrating N 40676 increases trade with Germany N 40676 convert itself into annex V 40677 's logic at work V 40677 prove failure in experiment V 40677 uses people as controls V 40680 greeted Gorbachev at airport V 40685 were result of actions N 40690 is editor of Street N 40691 FACING billions of dollars N 40693 expecting disruption in shipments N 40694 singled stocks of companies N 40696 raise tags of deals N 40699 sank % in September V 40700 following decline in August N 40701 buy billion of shares N 40705 seeking terms in bid V 40707 fell 6.25 to 191.75 V 40709 gained 4.92 to 2643.65 V 40711 including sale of units N 40712 cited turmoil in markets N 40713 removes it from business V 40715 post loss because sales N 40716 reach accord with Motors N 40716 reach accord within month V 40717 refinance Tower for million V 40718 find buyer for building N 40719 put division for sale V 40719 setting scramble among distillers V 40729 triggered round of sales N 40729 triggered round in trade V 40729 expect impact of quake N 40731 show resilience in face V 40732 predict climb for unit N 40736 injected reserves into system V 40736 avert repeat of debacle N 40738 keep liquidity at level V 40743 dropped points in trading V 40746 detract attention from transactions V 40747 show uptick in inflation N 40748 show rise in inflation N 40749 rose 1.30 to 368.70 V 40755 reach Francisco by telephone V 40757 shot cents to 20.85 V 40761 shut operations as precaution V 40764 ending day at 20.56 V 40771 have impact on markets V 40774 declined cents to 1.2645 V 40776 take two to months N 40776 produce copper in quantities V 40781 are suppliers of copper N 40781 buying copper on market V 40782 bought copper in London V 40784 switch concentration to side V 40785 dropped % from August V 40794 bought tons of sugar N 40796 slipped % to million V 40797 signal supplies of beef N 40799 fatten cattle for slaughter V 40804 prevent rejection of organs N 40807 been obstacle in transplants N 40808 using drug in February V 40813 consider it like one V 40814 is times than drug N 40816 made penalty for success N 40817 takes years to years N 40818 expand program beyond University V 40818 performs transplants in world N 40819 cut stays by % V 40819 reduce number of tests N 40819 monitor dosage of drugs N 40821 had stake in drug N 40822 known effect of drug N 40827 Allowing prices for necessities N 40827 shorten lines at stores N 40828 place value on them V 40830 receive relief for family N 40830 receive relief at prices V 40832 coordinate allocation of resources N 40835 take advantage of situation N 40835 face people of Carolina N 40837 deserves A for efforts V 40838 gets A for recital V 40839 Give him for failure V 40839 understand ethics of equity N 40843 alter distribution of income N 40843 alter distribution in favor V 40850 discourage preparedness in form N 40853 donating food to people V 40853 be any of us N 40865 ship goods to Houston V 40868 are accomplishment for him N 40872 considering value of time N 40873 have question for Laband V 40876 be season for revivals N 40879 remains center of movement N 40880 offering version of Moliere N 40880 offering version through 4 V 40881 is comedy about Alceste N 40881 sees vanity in everyone V 40885 remained house in 1666 N 40888 have look at Falls V 40889 see corruption of Paris N 40890 took adaptation by Bartlett N 40891 slimmed cast of characters N 40891 slimmed cast to six V 40891 set them in world V 40892 transfers setting to Hollywood V 40895 Americanized it with help V 40899 opened season with Pinter V 40900 use silences to exclusion V 40907 is dissection of isolation N 40912 held sway until death V 40913 concerns homecoming with wife N 40915 overpower each of men N 40916 leaving Ruth in chair V 40918 buy piece of estate N 40921 stage Death of Salesman N 40923 turn subscribers beyond 13,000 N 40925 support construction of theater N 40928 compares importance of Steppenwolf N 40928 compares importance with Theater V 40932 be legacy to theater N 40934 enduring days of selling N 40935 jumped % to 463.28 V 40937 rose % to 453.05 V 40944 beat 1,271 to 811 N 40948 assess impact of deaths N 40950 follows stocks for Kelton V 40953 expected damage from hurricane N 40953 be catalyst for rates N 40958 fell 1 to 32 V 40959 rose 1 to 51 V 40960 jumped 2 to 59 V 40962 jumped 4.15 to 529.32 V 40962 climbed 1.72 to 455.29 V 40963 provides services for businesses V 40964 rose 3 to 21 V 40965 jumping 1 to 9 V 40966 added 7 to 16 V 40970 gained 1 to 48 V 40970 rose 3 to 10 V 40971 added 3 to 33 V 40972 slipped 1 to 17 V 40974 gained 1 to 16 V 40976 advanced 7 to 1 V 40979 expects trading at company N 40980 gained 7 to 15 V 40980 reporting loss for quarter N 40981 earned million in quarter V 40982 added 3 to 10 V 40984 rose 1 to 50 V 40986 regarding usability of batches N 40987 extended offer to 27 V 40988 match bid by S.A. N 40995 called Bradley of Jersey N 40996 dealt setback to proposal V 40997 has it in mind V 41000 persuade 10 of senators N 41000 support him on grounds V 41001 append gains to bill V 41002 Denied vote on substance N 41005 be way to victory N 41008 telephoning office of Darman N 41012 represents expectations about value N 41013 have impact on value V 41022 knocked value of stock N 41022 caused convulsions around world V 41028 followed assurances from Darman N 41033 be consideration of increases N 41034 permit vote on gains N 41036 is game in town N 41038 is president of Inc. N 41039 obtained plea from person V 41042 faces maximum of years N 41044 indicted year as part V 41047 had change in earnings N 41049 compares profit with estimate V 41049 have forecasts in days V 41051 awarded contract for acquisition N 41052 won contract for equipment N 41053 received contract for programming N 41054 awarded contract for improvements N 41055 issued contract for changes N 41056 issued billion in bonds N 41056 issued billion in offering V 41057 replace bonds with rate N 41058 save million in payments N 41059 is part of strategy N 41060 issue total of billion N 41064 following agreement with Bank N 41064 borrowing term from bank V 41068 pouring million into one V 41071 add Fund to list V 41073 trail market as whole N 41075 bought shares in purchases V 41078 received dividend of cents N 41079 sold majority of shares N 41079 sold majority in August V 41080 got 30.88 for stock V 41082 leaving himself with shares V 41083 Including sale of stock N 41083 sold % of stake N 41088 tops portion of table N 41089 doubled holdings in company N 41090 bought shares for 125,075 V 41091 is president of Co. N 41091 keeps account at firm V 41091 recommended stock as buy V 41092 had recommendation on stock N 41092 had recommendation for years V 41094 paid average of 28.43 N 41094 paid average for share V 41096 bought shares at prices V 41103 is adviser to individuals N 41105 reached week in Cincinnati V 41105 end battle for maker N 41106 sued pany in 1981 V 41106 installing carpets in office V 41108 lost million in earnings N 41110 anticipate litigation over syndrome N 41116 was fumes from adhesive N 41117 adding maker as defendant V 41124 condemn buildings in area N 41128 putting letter of credit N 41130 transform area from thoroughfare V 41132 EXPANDS role of courts N 41137 review process in country N 41142 joined firm of Scheetz N 41142 joined firm as consultant V 41143 advising office on matters V 41144 marked turn toward conservatism N 41144 proclaimed shift in direction N 41146 apply labels to term V 41155 cut supplies to Europe N 41163 supply Dutch with oil V 41166 were result of confusion N 41166 was comfort for drivers V 41167 became fact of life N 41172 include dividends on holdings N 41173 paid million before million V 41176 includes months of 12 N 41177 saw paychecks over year V 41178 reported earnings for quarter N 41179 defended salaries at Stearns N 41182 paid million before dividends N 41182 paid million for months V 41186 taking chairmanship of group N 41186 taking chairmanship from Carey V 41187 remain member of board N 41190 take role in management N 41191 joined Grenfell as executive V 41192 advised Guinness on bid V 41198 's coincidence about departures N 41199 rose % to million V 41205 yield % in 2004 N 41205 yield % in 2008 V 41205 yield % in 2018 V 41205 yield % in 2019 V 41207 priced Monday by group V 41213 received rating from Moody V 41225 brings issuance to billion V 41226 indicating coupon at par N 41227 buy shares at premium V 41228 indicating coupon at par N 41229 buy shares at premium V 41231 buy shares at premium V 41244 named officer to posts V 41244 elected him to board V 41245 is one of number N 41246 was subject of inquiry N 41247 filed information with FDA V 41248 recalling one of drugs N 41256 running company on basis V 41257 selected him for posts V 41258 restore sense of integrity N 41263 manipulating accounts for years V 41271 reduce spending in fashion V 41273 chop talk about presidency N 41277 was decision in presidency N 41277 fight war on side V 41280 was one of bills N 41283 want guarantee from leadership N 41283 get vote on bills N 41285 taking responsibility for votes N 41285 concealing them in truck V 41286 have nostalgia as anyone N 41292 was the in years N 41293 hit peak of 1,150,000 N 41293 hit peak in 1987 V 41294 auctioned dollars of bonds N 41295 was % for equivalent V 41296 redeem million of bonds N 41298 buy shares in company N 41298 buy shares at price V 41300 are % of shares N 41301 Noting approval of treatment N 41303 remove mood from market V 41307 came day after drop N 41307 fell 647.33 in response V 41308 rose points to 35015.38 V 41309 rose 41.76 to 2642.64 V 41311 outnumbered decliners with 103 V 41318 are concerns on horizon V 41319 keeping eye on Street V 41325 keep dollar in check V 41326 rose 19 to yen V 41326 gained 17 to 735 V 41327 rose 130 to 2,080 V 41328 gained 80 to 2,360 V 41329 fell points to 2135.5 V 41330 was half-hour before close N 41331 fell 29.6 to 1730.7 V 41335 hit market in midafternoon V 41336 manages trading for concern V 41341 avoided losses despite report V 41344 rose 20 to pence V 41345 finished 22 at 400 V 41346 rose 5 to 204 V 41346 rose 25 to 12.75 V 41347 raised stake in maker N 41349 eased 4 to 47 V 41350 announced plunge in profit N 41352 dropped 11 to 359 V 41352 rose 17 to 363 V 41353 was talk of sale N 41355 attributed action in them N 41355 attributed action to positioning V 41356 fell 8 to 291 V 41356 was 4 at 261 V 41357 fell 20 to 478 V 41358 fell 1 to 124 V 41359 declined 12 to 218 V 41360 posted rises in Stockholm V 41364 recovered one-third to one-half N 41364 posting gains of % N 41365 are trends on markets N 41369 include construction of plant N 41370 completed sale of division N 41371 paid million in cash N 41371 paid million to Unitrode V 41373 spend million on facilities V 41378 made lot of investors N 41378 buy sort of insurance N 41382 buying option on stock N 41384 sell number of shares N 41384 sell number at price V 41387 is type of insurance N 41395 match loss on stock N 41395 match loss on stock N 41396 establishes price for stock N 41397 sells stock at loss V 41397 sells put at profit V 41399 handle transactions through Corp. V 41402 reduce cost by amount V 41403 exceed % of investment N 41415 realize profit on puts N 41415 realize profit after suspension V 41422 buy shares at price V 41423 gives buffer against decline N 41424 reduces cost of stock N 41424 reduces cost by amount V 41427 exclude effect of commissions N 41429 streamline version in advance V 41437 keep provision in version V 41438 send version of measure N 41438 send version to Bush V 41439 took effect under law V 41442 reported volume as record V 41443 raised billion in capital N 41443 raised billion during quarter V 41446 giving factor of 0.6287 N 41448 amalgamate four of companies N 41450 increase stake in Corp. N 41452 require approval by shareholders N 41453 named director of National N 41458 caused turmoil in markets N 41463 had effect on Street N 41464 close points at 2638.73 V 41465 raises issues about decline N 41466 raises questions about problems N 41467 drew parallel to 1987 N 41470 was the in string N 41472 called figures after months V 41474 reinforced view of analysts N 41476 's improvement over year N 41477 slipping % to billion V 41478 leaped % to billion V 41479 revised figure from deficit V 41481 feeds appetite in country N 41483 increased price of products N 41486 curb demand for imports N 41487 foresee progress in exports N 41496 took step in effort V 41496 spur sales of machine N 41497 remedy couple of drawbacks N 41497 lowering price for machine N 41497 lowering price by 1,500 V 41497 chooses drive as alternative V 41498 is device of choice N 41499 founded Next in hopes V 41499 fomenting revolution in way N 41504 buying numbers for purposes V 41505 buy computer without device N 41505 buy computer for 4,995 V 41506 outfit computer with drive V 41506 supply one at cost V 41507 purchase system through Inc. V 41511 handle amounts of data N 41511 edit clips with computer V 41513 is dealer to corporations N 41513 purchase drives with machines V 41514 signal retreat from storage N 41514 play role in decade N 41518 increase sales on campuses N 41523 distributing software for it N 41526 introduce version of program N 41526 introduce version in 1990 V 41527 offer version of computer N 41528 offers computers with displays N 41529 have model under development V 41530 named president of operator N 41534 slid % to million V 41535 had income of million N 41536 had loss of million N 41537 had profit of million N 41539 attributed decline to revenue V 41539 upgrade inventories to 1.1 V 41541 saw hints of delay N 41546 ship products during quarters V 41550 start shipments of product N 41551 stem all of ink N 41554 are guide to levels N 41584 fell % from quarter V 41588 included million from businesses N 41590 rose % in quarter V 41595 included million from operations N 41598 jumped % in quarter V 41600 reflect million in dividends N 41603 had counterpart in quarter V 41604 rose % to billion V 41607 raise ownership of partnership N 41609 offered share for unit V 41612 projecting surplus for year V 41613 include receipts from sale N 41616 brought output for months N 41616 brought output to tons V 41617 gained measure of control N 41622 was president of division N 41622 was president of Inc N 41623 named chairman of board N 41625 invest million in Recognition V 41626 increase ownership of shares N 41627 increase stake in Recognition N 41627 increase stake to % V 41629 obtained commitment from Bank N 41629 convert million in debt N 41629 convert million to loan V 41631 attributed loss to revenue V 41632 indicted October on charges V 41632 win million in contracts N 41633 put agreement with Prospect N 41633 put agreement to vote V 41634 rose cents to 6.625 V 41635 slipped cents to 10.50 V 41636 offer rebates on Beretta N 41637 idle plants for total V 41638 make line at Chevrolet N 41638 fell % during October V 41639 offering rebate on Corsica N 41641 get financing at rates V 41642 submitted offer to directors V 41643 discuss details of proposal N 41645 confirmed receipt of offer N 41646 rejected proposal by StatesWest N 41647 has stake in Mesa N 41647 operates turboprops among cities V 41648 connecting cities in California N 41651 was officer of FirstSouth N 41651 receive sentence of years N 41655 report interest as income V 41656 was part of effort N 41656 hide condition from regulators V 41658 conceal agreements with Taylor N 41660 approached Mastergate with trepidation V 41663 takes sweep of scandals N 41670 confiscated one of properties N 41670 owes millions in taxes N 41674 sell assets of MPI N 41676 distinguish it from Tet V 41678 handling this for Slaughter V 41679 carry impersonations of figures N 41680 mixing brand of patriotism N 41680 is fire as senator V 41680 playing succession of lawyers N 41680 has demeanor of Bush N 41680 has demeanor in portrayal V 41683 has fun with language V 41684 subtitled play on words N 41685 describes flunky as one V 41685 handling appeals at Bureau V 41694 set office of chairman N 41694 elected Johnson as chairman V 41695 been director at Hutton N 41695 was president of Strategies N 41697 take responsibility for areas N 41698 been consultant on strategy N 41698 been consultant for years V 41699 faces number of challenges N 41699 faces number with restructuring V 41700 's shortage of things N 41701 moved date of retirement N 41701 accommodate election as director N 41703 operates market for loans N 41703 buying loans from lenders V 41703 packaging some into securities V 41703 keeping rest in portfolio V 41704 describes displacing of grandees N 41708 broke toe in dark V 41709 weighing quarter of ton N 41713 left environment for duplex V 41713 prevent hoisting of trees N 41713 hit both with lawsuit V 41714 console them for traumas V 41719 been head of company N 41719 been head for years V 41719 sold it to Phibro V 41725 surrounding changing of guard N 41730 prefers nests of birds N 41734 entitled Loathing in Boardrooms N 41742 share wealth with decorators V 41743 demand place on boards N 41747 t'aint enough of it N 41753 endowed weddings to noblemen N 41758 is president of Counsel N 41759 raised stake in Corp. N 41760 hold shares of Lockheed N 41764 credited story in News N 41767 speed cuts with U.S. N 41767 recorded narrowing in surplus N 41768 jumped % in August V 41771 do trade than pair N 41771 arrange acceleration of cuts N 41772 requested speedup of cuts N 41775 reach agreement by December V 41776 kindled interest among companies V 41777 organizing missions to states N 41779 try trips on businessmen V 41781 opened offices in Diego V 41781 bringing number of offices N 41781 bringing number to 27 V 41782 has offices in Canada V 41785 received order from Ministry V 41786 provide system for fleet N 41789 supply country with systems V 41791 receive shares for each V 41795 extended period of warrants N 41797 purchase share of stock N 41797 purchase share for 2.25 V 41799 lay % of force N 41801 sell 53 of offices N 41803 record gains of million N 41803 record gains from sale V 41804 realize gains before end V 41807 expects rate of increase N 41812 close offices in Chicago N 41814 described restructuring as effort V 41815 rose % in August V 41819 fell % from year V 41825 represented % of consumption N 41826 totaling yen in August N 41829 reading stories in press V 41829 reporting Comeback at Wang N 41830 are matters of debate N 41831 selling products of company N 41836 's lot of work N 41838 lost ground to computers N 41839 funded employment by borrowing V 41840 reported ink for quarter V 41840 provided answers to questions N 41841 avoid discussions of finances N 41844 poses problem for salesman N 41845 become experts on report N 41847 consider products on merits V 41847 assuage fears about finances N 41852 report loss for quarter N 41854 jeopardizes credibility in time V 41854 be problem for run V 41855 held positions at Polaroid N 41860 supervises network of computers N 41863 convincing president in charge N 41869 is one of assets N 41870 is analyst with Group N 41871 left company in July V 41871 sell products to Kodak V 41871 muster support from allies V 41874 sell VS to customer V 41875 left Wang for Inc. V 41879 sold system to maker V 41881 take risk with Wang V 41886 is president of Inc. N 41888 have pride in job V 41899 warned salespeople about negativism V 41900 watch us for message V 41901 Look customer in eye V 41902 rose % on strength V 41905 had profit of million N 41910 had results against million V 41914 reported gains to levels N 41914 reported gains for quarter V 41922 rose % to million V 41925 rose 1.25 to 64.125 V 41927 sell service to customers V 41927 reported jump in earnings N 41930 sees improvements in margins N 41931 take it to range V 41932 fell 2.625 to 42.375 V 41934 attributed that to plan V 41936 improve share of market N 41937 match that of AT&T N 41946 reported increase in number N 41946 added customers with total V 41947 fell cents to 55.875 V 41952 fell cents to 29 V 41956 extending contract with Co. N 41956 provide parts for jetliners N 41957 supply shipsets for planes V 41958 include edges for wings N 41959 delivered 793 of shipsets N 41959 delivered 793 to Boeing V 41963 accepted position of chairman N 41966 has interests in estate N 41967 been president of Balcor N 41968 takes responsibility for management N 41971 posted loss of million N 41972 had earnings of million N 41973 had loss of million N 41973 had loss after earnings V 41974 increased reserves by million V 41974 raising reserves to million V 41975 had profit of million N 41976 followed round of increases N 41976 reflecting decline in market N 41977 took charge of million N 41978 were losers in collapse N 41983 resurrect package at 250 V 41984 buy 250,000 at 83.3125 V 41988 left jobs at Airlines N 41988 left jobs with combined V 41989 was 575,000 with bonus N 41990 changed jobs at ones V 41990 stash kind of money N 41991 lure him from Airlines V 41991 paid salary of 342,122 N 41991 paid salary with bonus V 41992 buy 150,000 at 69 V 41998 succeeds Sherman in positions V 42001 was difference of opinion N 42006 bought 112,000 of shares N 42006 bought 112,000 in transaction V 42008 represents % of shares N 42011 reported increase in earnings N 42014 lead industry with performance V 42024 be year in history N 42029 had growth in quarter N 42033 attributed results to gains V 42038 offset decline in sales N 42038 fuel increase in sales N 42039 led growth in division N 42045 attributed growth to sales V 42048 was result of savings N 42049 took analysts by surprise V 42050 includes brands as detergent N 42051 estimated margins at % V 42056 Improving profitability of operations N 42056 is priority in company N 42057 sold business in 1988 V 42058 elected director of company N 42058 has interests in stations N 42058 increasing number of seats N 42058 increasing number to five V 42060 is projects at Inc. N 42061 have look with fixtures V 42063 poured ridicule on drawings V 42063 replaced photos in pages V 42069 been roommate for years V 42074 buying masks for kids V 42075 is result of activity N 42077 enjoy climate over term N 42081 blame it on hunter-gatherers V 42082 announce end of episode N 42084 lock us into scenario V 42087 restructure itself like corporation V 42089 create position of officer N 42090 bring accountability to agency V 42099 appoint servants from agency V 42099 scour world for officer V 42100 attract candidates from sector N 42101 spend years of life N 42104 were signature of adversary N 42106 monitoring parlors in City N 42109 collecting names of those N 42109 congratulate them during time V 42112 is chapter in relationship N 42113 following indictment on charges N 42113 is legacy of relationship N 42115 was one of convenience N 42124 remove him from power V 42126 mastered art of survival N 42129 made it through 1988 V 42130 maintain grip of throne N 42131 abandon command for exile V 42132 left him without way V 42135 is weapon against gringos N 42136 discovered the in 1959 V 42138 advance career of officer N 42138 relayed reports on tendencies N 42140 was experience for the N 42141 Born son of maid N 42142 gained admission to academy N 42145 had uniform with buttons N 42145 had uniform in country V 42145 was cult of militarism N 42145 were elite with privileges N 42148 monitoring opponents in region N 42148 tracking influence in unions N 42149 was one of contributors N 42150 was priority for leader N 42152 been 300 to 400 N 42156 gained cache of information N 42160 splashed information on handbills V 42165 was expert at bribing N 42166 revealed himself as officer V 42167 visiting prisoners in cells N 42167 visiting prisoners at headquarters V 42173 interpreted studiousness as sign V 42174 defeat attempt against him N 42178 calling him in tribute V 42178 milk services of Cuba N 42178 ran reports about Noriega N 42178 ran reports in 1977 V 42179 put stock in information V 42182 drew list of options N 42184 scold dictator on ties V 42186 became threat in 1976 V 42186 buying recordings of conversations N 42187 included wiretaps of phone N 42188 caught him with hands V 42189 cutting Noriega from payroll V 42190 get it from characters V 42192 sold information on recordings N 42192 sold information to Cubans V 42193 cancel contract with rent-a-colonel N 42193 cancel contract at beginning V 42195 indicted Panamanians on charges V 42195 running arms to rebels V 42195 overthrow government of Somoza N 42200 arrest him on charges V 42201 was Friday in June N 42204 received message from commander V 42205 postpone visit to Washington N 42208 charge Noriega on allegations V 42210 granted shah of Iran N 42210 granted shah of Iran N 42210 granted shah as favor V 42214 enforce laws of States N 42218 maneuvered way to top N 42220 put G-2 on payroll V 42223 expanded contacts with Cubans N 42224 indict Panamanian on charges V 42228 arrange attack on arsenal N 42229 win protectors in administration N 42230 played agencies like violin V 42231 maintained influence with Washington N 42233 notified Briggs of invitation V 42235 involve him in orgy V 42235 record event with video V 42236 resigning position at Council N 42237 curry favor in Washington V 42238 steal elections for party V 42239 contributed 100,000 to leader V 42241 ordering beheading of Spadafora N 42241 finger Noriega on charges V 42248 had assets in place V 42257 have him in 1988 V 42258 drop indictments in exchange V 42260 bring him to justice V 42262 is battle to death N 42269 provided estimates for company N 42272 been force in expansion N 42273 ease grip on credit N 42274 do something about this V 42279 reflected weakness in goods N 42283 expect declines in spending N 42285 seen effect of that N 42286 offset rise in assemblies N 42287 expect surge in production N 42288 is summary of report N 42293 is parent of Omnibank N 42297 is indication to date N 42299 compares rates of groups N 42300 aged 35 to 44 N 42300 was 13.4 per 100,000 N 42306 be harbinger of mortality N 42310 spends billion for promotion V 42313 restrict advertising in U.S. V 42313 violate protection of speech N 42315 attributes differences in rates N 42315 attributes differences to patterns V 42317 given smoking than blacks V 42318 comparing changes in rates N 42326 represent interests at level V 42327 recognizes influence of government N 42329 prompting swings in prices N 42330 gaining strength during run-up V 42331 bought stock on cheap V 42335 began day at 449.89 V 42335 lost % at point V 42343 take advantage of swings N 42349 benefiting a to detriment V 42349 do something about it V 42356 was day for investors N 42357 tumbled 3 on news V 42357 take charge against earnings N 42357 resolve dispute with licensee N 42360 reported losses in quarter N 42364 bring total for year N 42364 bring total to 10 V 42368 added 3 to 30 V 42370 reported increase in profit N 42373 lost 1 to 27 V 42375 dropped 1 to 5 V 42376 reported income for quarter N 42377 named president of publisher N 42379 been president for operations N 42380 take responsibilities as editor N 42382 remains editor in chief N 42385 been assistant to chairman N 42391 saw evolution of drugs N 42395 produce planet by turn V 42398 predicted famine by 1980 N 42400 produced tumors in rats V 42402 opposed methods of Environmentalists N 42403 require energy for solution V 42405 opposing search for methods N 42406 improving quality of life N 42407 rationalize priorities by solving V 42407 solving problems at level V 42409 missed points of conference N 42410 represent consensus among specialists N 42411 including one from Academy N 42412 answer question in title N 42412 create stories for itself N 42413 dictate set of solutions N 42414 deliver point of view N 42417 educating public about issues V 42419 altered physics of atmosphere N 42425 fulfilling earnings for 1989 N 42427 met estimates of analysts N 42430 included operations of business N 42434 blamed volume on prices V 42434 were % in quarter N 42435 buying soft-drinks at discounted V 42438 attributed bulk of increase N 42438 attributed bulk to costs V 42439 get prices by promotion V 42442 repurchased million of shares N 42442 repurchased million during quarter V 42443 is part of plan N 42443 acquired total of shares N 42446 include charge of million N 42449 reach agreement in principle N 42449 sell Inc. to management V 42454 has relationship with Hooker N 42455 providing million in financing N 42455 providing million to company V 42457 owns % of company N 42457 acquired interest in firm N 42457 acquired interest in 1986 V 42458 had stores in operation V 42460 approached number of suppliers N 42460 shipping merchandise to chain V 42461 causing jitters among suppliers N 42465 advising Hooker on sale V 42466 was the in series N 42468 split company in half V 42470 received bid for malls N 42470 received bid from consortium V 42472 named president of unit N 42473 been president of Inc N 42474 assume title of chairman N 42478 is talk of some N 42479 put things into schedule V 42482 replace it with newscast V 42484 is opportunity for audience N 42488 alter line-up on mornings N 42489 is no on networks N 42491 be market for programming N 42491 has ratings on mornings V 42492 replacing cartoons with version V 42494 supply network with shows V 42495 cost 300,000 per episode N 42497 had net of million N 42499 attributed slide to expense V 42500 cuts value of profit N 42506 named officer of manufacturer N 42508 was executive of Inc. N 42508 was director of Robots N 42510 been president in group N 42512 correct misquotation in article N 42515 offer therapy with drugs N 42515 offer therapy to any V 42516 reduced deaths in cancer N 42516 reduced deaths by one-third V 42518 offer hope of something N 42522 have prospects for advances N 42523 use levamisole as point V 42527 include gas in tests V 42529 criticized program as attempt V 42530 marketing gasoline for cars N 42531 conduct testing to date N 42532 compare blends of gasolines N 42532 compare blends with mixtures V 42533 test gasolines on technologies V 42534 was estimate for phase N 42538 supported move on Hill N 42538 selling cars by 1995 V 42539 mentions gasoline as alternative V 42542 inherited problems of Lincoln N 42543 made comments before hearings V 42543 be disaster in industry N 42544 cover actions of Jr. N 42546 made findings in one V 42547 buying estate from one V 42548 put Lincoln into conservatorship V 42549 was part of pattern N 42549 shift deposits to company V 42549 used deposits as cache V 42556 received 48,100 in contributions N 42556 received 48,100 from Keating V 42560 received contributions from Keating V 42562 pursue role of senators N 42563 pumped million into Lincoln V 42564 held hope of restitution N 42565 buying certificates of deposit N 42566 have plans at time N 42567 devise approaches to reorganization N 42568 told committee in meeting N 42574 made mention of response N 42575 discussing plan with creditors V 42577 sell billion in assets N 42582 leave it with cash V 42583 leave carrier than one N 42585 having problems with revisions N 42588 miss projections of earnings N 42588 miss projections by million V 42589 miss mark by million V 42596 hold dollars from sales N 42597 have million in cash N 42602 has rights for period N 42610 SIMPLIFYING tax before 1990 V 42613 backed plan in bill N 42615 getting it into bill V 42616 has priority on side V 42618 resolve issue with legislation V 42621 deduct losses on 1989 V 42625 DELAYS deadlines for victims V 42627 is % of liability N 42628 describes relief for victims N 42629 pay tax by 15 V 42632 grants relief for returns V 42633 were perks for staffers N 42636 are targets of drive N 42637 announced filing of actions N 42638 file 5498 with copies V 42640 was reputation for honesty N 42641 justify caches to IRS V 42642 told story to Court V 42643 escape tax on income N 42643 deposited 124,732 in account V 42643 reporting income of 52,012 N 42644 saved 47,000 in 1974-81 V 42644 abandoned family in 1955 V 42646 offered evidence of sources N 42647 made gifts of 26,350 N 42658 sent helicopters in pursuit V 42660 limit bikes to roads V 42663 is one of storms N 42664 asserting right as taxpayers N 42665 prompted pleas from Sierras N 42665 ban them from country V 42666 become vehicles of terror N 42670 following lead of parks N 42670 closed paths in parks N 42670 closed paths to bicycles V 42671 consigns them to roads V 42674 permits vehicles on thousands V 42674 close lands to bikes V 42674 including portions of the N 42677 allow cycles in areas V 42678 created something of rift N 42678 created something in organization V 42679 lumps bikes into category V 42681 careening trail on them V 42681 echoing concerns of members N 42683 got taste of wilderness N 42683 got taste as hikers V 42685 lobby managers over issues V 42695 entered production in 1981 V 42698 make it into country V 42700 is bastion of sport N 42702 is home to Bike N 42703 attracted visitors than week N 42704 be combination of technology N 42712 buy bonds for safety V 42714 cut rally in bonds N 42715 finished points at 2638.73 V 42718 breathing sigh of relief N 42722 sent signal of determination N 42723 keep lid on rates V 42723 pumped money into system V 42730 make trouble for market N 42730 make trouble for two V 42734 ending day at % V 42737 produce versions of issues N 42739 is venture of Co. N 42750 offset weakness in pulp N 42750 fuel jump in income N 42751 reported profit of million N 42753 posted rise in profit N 42761 increase reserves for loans N 42761 making addition to provision N 42763 bring provision for loans N 42763 bring provision to billion V 42765 Get problem behind you V 42766 had capacity for time V 42768 posted loss for quarter V 42768 adding million to reserve V 42773 setting world on fire V 42777 said payments from Argentina N 42778 narrowed loss to million V 42779 take provision for loans N 42781 called gains of million N 42783 maintaining expenses in proportion V 42785 generate one of margins N 42785 minimizing drop in margin N 42785 minimizing drop with growth V 42790 reverse rise in loans N 42797 brought reserves for loans N 42797 brought reserves to billion V 42797 covering % of loans N 42800 take part in lot N 42800 take part in quarter V 42803 cited income from sources N 42807 set date for elections N 42807 cost control of government N 42808 retain control with majority V 42811 be vote for Gandhi N 42812 called elections for house N 42812 called elections on 24 V 42815 be test for minister N 42821 's feeling of indignation N 42822 judging regime by policeman V 42823 be protest against failure N 42824 retains control of government N 42825 call liberalization of economy N 42832 made mess of years N 42833 field candidates in precincts V 42835 fields candidates in % V 42836 announces list of candidates N 42837 be one of points N 42838 signed contract with Bofors N 42843 blocked passage of bills N 42844 was time in years N 42845 become cry against government N 42848 had hope in leader V 42853 is reputation of opposition N 42856 fear repeat of experience N 42860 confirming payment of 40 N 42862 disclose names of middlemen N 42864 received consideration in transactions V 42866 admits payments of million N 42869 reports lapses in evaluation N 42871 disclose names of middlemen N 42871 received kickbacks from company V 42873 publishes portion of report N 42876 hold % of shares N 42877 seen filing by Parsow N 42878 seek support of board N 42883 keep watch on market N 42889 paid attention to operations V 42890 injected cash into system V 42890 arranging billion of agreements N 42890 arranging billion during period V 42891 keep lid on rates V 42896 considered signal of changes N 42904 boost size of issue N 42904 boost size from billion V 42908 announce size of sale N 42908 announce details of offering N 42909 offer billion to billion N 42912 priced bond for banks N 42913 had impact on market V 42924 dominated attention in market V 42926 operates one of systems N 42927 was part of plan N 42931 reflected the in market N 42934 supported prices of Mac N 42937 yielding % to assumption N 42941 accept today for lists N 42945 set pricing for million V 42958 provides increase for development N 42960 gives authority to administration V 42960 facilitate refinancing of loans N 42961 met opposition from bankers N 42964 subsidizing loans above % N 42964 subsidizing loans under program V 42964 yield million in savings N 42965 cast fight as stand V 42966 are stewards of companies N 42967 won approval of million N 42969 steer it from aid V 42973 covers collection of accounts N 42974 raise ceiling on loans N 42974 faces opposition in House N 42975 put bill over budget V 42976 complicate picture in 1991 V 42976 commits Congress to set V 42976 including funds for station N 42977 promised billion within billion N 42978 continue work on satellite N 42979 setting limit of billion N 42979 appropriated million for start-up V 42980 receive increases beyond those N 42982 become vehicle for lawmakers N 42982 earmark funds for projects N 42984 preserve balance between House N 42987 passing House on call V 42989 are areas from standpoint V 42990 is opposition to riders N 42991 renewing support for Fund N 42993 taking views into account V 42995 be level of impassiveness N 42998 posted advances of cents N 43001 fix price for gold N 43007 is rush on part N 43008 bear memory of 1987 N 43010 having impact on gold N 43011 is incentive on part N 43011 retain some of quality N 43017 having impact on market N 43020 assess action in market N 43028 accept delay of shipments N 43031 deferring shipments in years V 43034 hurt sales of beef N 43041 placed billion in securities N 43041 placed billion under review V 43044 enhance position in business N 43048 guarantee extinction of elephant N 43056 described conservationists as puppies V 43056 know thing about Africa N 43058 generates pleas for aid N 43061 make billion in loans N 43066 seek help for owners N 43070 deleting repeal from bill N 43075 push lawmakers toward solutions V 43078 recommend repeal of 89 N 43082 selling furniture to agencies V 43086 join compromise on legislation N 43087 increase warranty on systems N 43087 increase warranty to years V 43091 oppose increase in length N 43095 take jobs with concerns N 43096 produce assembly for Army N 43098 assume position of president N 43098 assume position upon retirement V 43099 was executive of Corp. N 43100 affiliating Fletcher into One V 43103 raise billion in cash N 43103 raise billion with sale V 43103 redeem billion in maturing N 43106 lowered ratings on million N 43107 downgraded notes to single-B-1 V 43108 paying dividends from series V 43111 left Afghanistan in February V 43119 support clients by means V 43122 provide clients in Kabul N 43122 provide clients with assistance V 43122 including return of forces N 43123 was addition of caveat N 43134 protect regime against resistance V 43138 including troops of Ministry N 43140 are hostage for behavior N 43142 signed agreements for experts N 43142 replace some of personnel N 43150 are anathema to public N 43152 surrender city to moderates V 43153 sent Hekhmatyar with demand N 43158 faced minefields without detectors N 43160 resumed aid to months N 43169 directs program on Asia V 43170 stirred soul of Reagan N 43177 been champion of cause N 43181 say something about it N 43182 kicking father in pants V 43186 struck deal with leaders N 43186 provide aid to Contras V 43187 win aid for rebels V 43189 be force without arms V 43190 urging members of Congress N 43190 approve financing for campaign N 43191 restore some of funds N 43192 veto bill with funding N 43193 prevent damage to SDI N 43197 spells trouble for Wars N 43201 heads Center for Policy N 43202 boosting spending on SDI N 43203 have fire at moment N 43204 is president of Institute N 43205 raise profile of causes N 43210 be wind in sails N 43212 accepted resignation of Allen N 43216 was episode in saga N 43218 called prospect of speech N 43220 began it with warning V 43220 opposes rights for homosexuals N 43221 persuade you to view V 43223 assimilate status of blacks N 43223 assimilate status to that V 43226 criticized idiocy of notions N 43227 ensure treatment under law N 43227 risk retrenchment with complicity N 43231 teaches government at College V 43231 remain member of commission N 43233 elevated concept of rights N 43233 elevated concept above rights V 43234 is divide between view N 43236 is substitute for argument N 43237 is embarrassment to purpose N 43240 become chairman upon retirement V 43242 was executive of distributor N 43242 was executive from 1982 V 43244 been president since 1983 V 43245 joined Bearings in 1988 V 43246 been director since 1985 V 43247 are part of succession N 43248 opened exhibition in Moscow V 43248 touring some of stalls N 43248 representing companies as Corp. V 43251 underscores interest in market N 43252 spent time at stand V 43258 lowered trust in Japan N 43261 parcel powers to republics V 43261 reflect changes in federation N 43262 gave government until 15 V 43263 reflected confidence of the N 43264 abandoning project in Indonesia N 43265 covered acres in region N 43267 moving company to Kong V 43268 acquire 10 of restaurants N 43269 set market with government V 43269 open store by 1990 V 43272 have sale of Dada N 43272 luring collectors with sales V 43273 auctioned pistols with paintings N 43274 auction works with estimates N 43274 auction works on 25 V 43275 providing service to clients N 43277 be the between countries N 43279 Ending shopping in Community N 43279 Ending shopping after 1992 V 43283 reported gain after requirements N 43287 reported profit before taxes N 43288 produced loss of million N 43292 get product on shelves V 43294 reported earnings of million N 43295 had loss of million N 43298 plunged points before lunch V 43306 turn shares at rates V 43307 heads arm of Inc N 43312 buy blocks of stock N 43312 buy blocks at eye-blink V 43314 buy blue-chips at quoted V 43318 promote shifts in assets N 43320 shifts weightings between stocks V 43321 boosted positions in accounts N 43321 boosted positions to % V 43321 take advantage of prices N 43323 reduced holdings to % V 43326 insure value of portfolio N 43328 practicing forms of insurance N 43329 taking advantage of discrepancies N 43335 risk money for guy V 43339 caused shutdown in trading N 43340 cut exposure to market N 43341 put you in room V 43352 causing any of volatility N 43355 been two of years N 43356 is comfort in period N 43362 infected one of networks N 43363 discovered virus on Monday V 43364 carry analyses of data N 43366 expunge virus from system V 43378 confer privileges on user V 43380 finds one of passwords N 43384 protested launch of probe N 43385 carrying Galileo into orbit V 43389 change value of pi N 43390 bringing indictments in cases V 43392 usurp authority under doctrine N 43397 supply definition in decision V 43397 breached duty to corporation V 43398 pushed definition to point V 43399 underlying conviction of Chestman N 43400 assemble certificates for delivery V 43401 take her to bank V 43402 discussed it with broker V 43412 was confirmation of rumors N 43417 was victim of overzealousness N 43419 resist process of extension N 43420 make decisions in ways V 43422 has strengths of specificity N 43424 extends definition of trading N 43424 see number of cases N 43425 make judgments about utility N 43426 gain information about collapse N 43428 check rumors with company V 43430 hear views of representatives N 43430 create uncertainty than decisions N 43431 resisted definition of trading N 43433 provide illustrations of evolution N 43434 halt expansion of statutes N 43434 adopting rule of construction N 43435 deprive another of right N 43441 is professor at School N 43442 posted decline in income N 43443 included gain of million N 43445 included carry-forward of 600,000 N 43455 regained points in minutes V 43457 limit buying to stocks V 43464 cast pall over stocks V 43470 get lot of action N 43473 have debt on books V 43475 sold shares at 40 V 43479 changed hands on Board V 43480 sell baskets of stocks N 43480 sell baskets against positions V 43494 gained 1 to 1 V 43495 gained 1 to 64 V 43496 show gain from average N 43496 show gain on 9 V 43502 gained 1 to 103 V 43502 reflecting optimism about prospects N 43505 added 1 to 17 V 43506 change name to Manpower V 43506 write part of billion N 43506 write part as prelude V 43508 began coverage of company N 43508 began coverage with ratings V 43511 reach agreement with lenders N 43520 gained % to 10 V 43522 predicted loss for quarter N 43523 raises doubt about ability N 43526 declared 2 to stock N 43529 retain cash for acquisitions V 43530 paid amount of income N 43530 maintain status as trust N 43533 get yields on deposits N 43536 reporting inquiries about CDs N 43536 reporting inquiries since Friday V 43538 receive proceeds from sales N 43540 has downs than elevator N 43542 have promotions under way V 43543 offering quarter of point N 43543 offering depositors on CDs V 43544 boosted yields on CDs N 43544 boosted yields in week V 43545 increased yield on CDs N 43545 increased yield to % V 43546 yielding a of point N 43548 yielded % in week V 43552 posted drops in yields N 43553 yielding % in week N 43553 yielding % in week N 43558 puts pressure on rates N 43560 decide size of increase N 43565 promises disbursements to countries V 43569 meet request for increased N 43570 supported role for IMF N 43570 is resource for programs N 43571 is case against it N 43573 has role in countries N 43573 assist countries in emergencies V 43574 are funds than efforts N 43575 substituting debt for debt V 43576 addresses problems of markets N 43576 is key to growth N 43577 inflated themselves into despair V 43581 support role of IMF N 43581 support role on conditions V 43583 limit it to % V 43583 bring change in policy N 43585 get piece of increase N 43586 give argument against calls N 43587 reinforce role of institutions N 43589 delay steps in anticipation V 43592 support increase in capital N 43593 directs staff of Committee N 43594 making trades with each V 43595 following investigation of trading N 43597 suspended membership for years V 43598 make restitution of 35,000 N 43598 make restitution to customer V 43603 pose challenge to Inc. V 43603 buy half of Inc. N 43603 buy half from Inc. V 43604 discussed sale of interest N 43604 discussed sale with operators V 43605 is 2 to Office N 43605 filed suit against Warner V 43607 puts it in position V 43608 keep Showtime as competitor V 43610 bears relationship to that N 43611 play role in management V 43612 Linking Showtime with operator V 43613 bring operators as investors V 43617 is operator of systems N 43618 is victory for officer N 43619 takes question of viability N 43620 is the of HBO N 43621 took control of Viacom N 43621 took control in buy-out V 43622 denied all of allegations N 43623 called talks with engineers N 43633 increased stake in Inc. N 43633 cleared way for purchases N 43636 soliciting consents from shareholders N 43636 soliciting consents in order V 43636 wrest control of Datapoint N 43636 wrest control from Edelman V 43636 purchased % of shares N 43637 acquired shares of shares N 43637 acquired shares for 2.25 V 43638 increased stake to % V 43639 acquiring % of stock N 43639 is chairman of company N 43641 make testing for virus N 43641 make testing for virus N 43641 stop spread of syndrome N 43642 segregate itself into groups V 43643 takes view of AIDS N 43643 recommends response than analyses N 43644 reduce rate of growth N 43646 is sex between partners N 43647 test population between ages N 43648 provide treatment to all V 43650 kept tabs on gyrations N 43650 shrugged downturn in equities N 43650 bid dollar above lows V 43652 reach intraday of marks N 43652 reach intraday until hours V 43656 reported deficit in August V 43658 reflected drop in exports N 43659 's news in data N 43670 set ranges of marks N 43671 anticipate easing by Reserve N 43673 injects capital into system V 43674 relaxed grip on credit N 43677 post gains against dollar N 43681 settled case against Corp. N 43682 settle issues over years N 43682 settle issues through arbitration V 43683 have applications in markets N 43685 paid million of settlement N 43685 paid million to Semiconductor V 43685 pay million in installments V 43686 have impact on results V 43688 had reign as leader N 43688 had reign by ABC-TV V 43689 topped competition with share V 43691 indicate percentage of sets N 43694 had five of shows N 43695 held record during season V 43696 expanding presence in market N 43696 acquired Foods from group V 43698 had sales of million N 43698 sells coffee under brands V 43700 sells coffee to concerns V 43701 sold coffee to airlines V 43701 does business with hotels V 43705 borrowed guilders from group V 43708 funding Departments of Labor N 43708 allow funding of abortions N 43710 tighten requirements for abortions N 43710 tighten requirements in way V 43713 holds bill for year N 43715 opposed funding of abortions N 43715 are victims of rape N 43715 open way for abortions N 43717 had inquiries from buyers N 43717 complete sale in 1989 V 43720 help managers of Ltd. N 43722 revised provisions to level V 43727 alter response of people N 43731 experiencing increases in antibodies N 43732 modify response of individual N 43736 produce quantities of antibodies N 43737 sell division to Inc. V 43738 includes purchase of Cross N 43739 selling interest in venture N 43739 selling interest to Machinery V 43741 was one of businesses N 43747 auction million of paper N 43747 auction million in maturity V 43751 reflected decline of francs N 43752 was decline in costs N 43755 make member of panel N 43758 hailed it as attempt V 43758 bring measure of openness N 43758 bring measure to setting V 43759 improve communications between branch N 43765 experiencing margins as result V 43768 reported profit for quarter N 43772 conducting talks with Germany N 43772 conducting talks on series V 43773 disclose nature of the N 43774 taking place between units V 43776 come bit in cars N 43780 been president of subsidiary N 43782 become president of a N 43784 's view of analysts N 43785 raised holding in Jaguar N 43785 raised holding to % V 43787 increases pressure on GM N 43787 complete talks with Jaguar N 43788 reach pact in weeks V 43794 make one of stocks N 43795 topped list for market N 43799 put shares into reverse V 43799 confirmed negotiations with Jaguar N 43805 win promise of stake N 43806 doubling output of cars N 43813 get war between companies N 43819 announce sale of % N 43820 sold ADRs at 10 V 43820 making profit on holding N 43840 expects increase in profit N 43841 posted plunge in profit N 43844 fell % to million V 43846 reported jump in earnings N 43847 reported income for quarter N 43849 forecasting gain on 4 V 43849 causing jump in stock N 43850 disclosed margins on sales N 43852 hit a of 81 N 43856 drove margin to % V 43857 reflected demand for applications N 43861 signed agreement with Inc. N 43861 incorporate architecture in machines V 43864 have arrangements with MIPs V 43866 share expertise in storage N 43876 called one of reports N 43879 added billion to reserves V 43881 posted drop in profit N 43883 lay % of force N 43884 exploring approaches to reorganization N 43885 buy half of Networks N 43885 buy half from Viacom V 43886 pose challenge to Warner N 43887 curb trading on markets N 43891 sell chain to management V 43892 streamline version of legislation N 43892 streamline version in advance V 43897 named director of company N 43898 increases board to members V 43899 seek re-election at meeting V 43902 tender shares under bid V 43903 sold shares for million V 43904 identify buyer of shares N 43905 sold stock in market V 43908 is addition to board N 43908 increasing membership to nine V 43921 acquired laboratories of Inc. N 43921 acquired laboratories in transaction V 43922 paid million in cash N 43922 acquire labs in U.S N 43929 calling number for advice V 43930 records opinions for airing V 43931 taken leap in sophistication N 43934 spending lot of time N 43934 spending lot in Angeles V 43934 supplied technology for both V 43937 weds service with computers V 43939 sells ads for them V 43939 apply technology to television V 43944 passing rest of money N 43944 passing rest to originator V 43946 calling one of numbers N 43948 process calls in seconds V 43952 demonstrate variety of applications N 43953 raise awareness about hunger N 43957 lift ratings for Football N 43959 uses calls as tool V 43959 thanking callers for voting V 43959 offers videotape for 19.95 V 43961 providing array of scores N 43963 increased spending during day V 43964 sponsors tips on diet N 43965 call number for advice V 43966 leaves address for sponsor V 43966 gather list of customers N 43967 charge rates for time V 43968 be % above rates N 43969 use budget for this V 43971 considering use of numbers N 43972 predicting influx of shows N 43972 predicting influx in 1990 V 43974 use number for purposes V 43975 leave number of anyone N 43978 are steps toward video N 43981 choose depths of coverage N 43982 want 2 in depth V 43986 ended talks with Integrated N 43991 meet afternoon in Chicago V 43992 is group of planners N 43994 cited concerns as reason V 43996 make payments on billion N 43997 owed total of billion N 43999 registered 6.9 on scale V 43999 caused collapse of section N 44003 caused damage in Jose V 44003 disrupted service in Area N 44005 allowing financing for abortions N 44005 compound act with taking V 44010 left group in 1983 V 44010 avoid explusion over allegations N 44011 postponed liftoff of Atlantis N 44013 dispatch probe on mission V 44015 threw conviction of flag-burner N 44015 threw conviction on grounds V 44019 is threat from Korea N 44020 seeking understanding with Congress N 44020 ease restrictions on involvement N 44021 alter ban on involvement N 44021 's clarification on interpretation V 44023 considered test for minister N 44024 ruled India for years V 44026 was time in years N 44026 expel Israel from body V 44028 reject violence as way V 44029 freed Sunday from prison V 44031 covered evidence of activities N 44032 approved ban on trade N 44032 approved ban despite objections V 44033 places elephant on list V 44034 killed judge on street V 44035 slain magistrate in retaliation V 44038 followed meeting in resort V 44039 revised offer for amount N 44044 received amount of debt N 44044 received amount under offer V 44046 plummeted 24.875 to 198 V 44047 followed drop amid indications V 44048 fallen 87.25 in days V 44048 jolted market into plunge V 44049 is bloodbath for traders V 44050 put United in play V 44052 line financing for version V 44054 Adding insult to injury V 44054 scuttle financing for bid N 44055 represents some of employees N 44057 pocket million for stock V 44057 reinvest million in company V 44058 load company with debt V 44059 round financing for bid N 44060 triggered downdraft in Average N 44060 triggered downdraft around yesterday V 44061 reject version at 250 N 44063 had expressions of interest N 44065 gave details on progress N 44066 hear update on situation N 44067 take shareholders into deal V 44072 line pockets with millions V 44072 instituting cuts on employees V 44076 eschewed advice from firm V 44079 left board in quandary V 44084 plans offering of shares N 44086 own % of stock N 44088 pay dividends on stock V 44089 pay dividend of cents N 44089 pay dividend in quarter V 44090 borrow amount in connection V 44092 pay dividend to Macmillan V 44092 lend remainder of million N 44092 lend remainder to Communications V 44093 repay borrowings under parts V 44095 owned Berlitz since 1966 V 44096 posted income of million N 44096 posted income on sales V 44097 notice things about concert N 44101 releases feelings in gratitude V 44102 left collaborators in favor V 44112 is music for people V 44113 is listening for generation V 44116 torments us with novelties V 44117 constructed program around move V 44118 introduces audience to technique V 44120 imagine performance of it N 44123 accompany readings of Sutra N 44129 hits note with hand V 44130 does this in three N 44132 write piece of length N 44132 was problem for me V 44134 began life as accompaniment V 44134 played it on organ V 44135 took it for one V 44142 develop variations from themes V 44142 ignores nature of music N 44143 makes yearn for astringency N 44146 disclose buyer of stake N 44148 negotiating sale of stake N 44148 hold % of stock N 44149 include earnings in results V 44150 reduce holding in concern N 44150 reduce holding as part V 44152 incurred delays during quarter V 44153 reported earnings of million N 44156 reported earnings of million N 44159 establishes standard of discharge N 44161 contains standard of discharge N 44163 be problems with system N 44166 prohibits preparation of water N 44166 protects them from knock V 44171 shake reputation as magazine N 44177 woo advertisers with fervor V 44179 had year in 1988 V 44179 racked gain in pages N 44183 is deterrent for advertisers V 44188 lumping ads at end V 44188 spreading ads among articles V 44189 means costs for advertisers V 44193 pour 500,000 in weeks V 44194 takes advantage of photography N 44197 attract advertisers in categories N 44198 top pages in 1990 V 44200 contemporize thought of Geographic N 44201 be kind of image N 44203 sell majority of unit N 44203 sell majority to Eurocom V 44206 prompted vigor in talks N 44209 awarded accounts for line N 44209 awarded accounts to LaWarre V 44214 restrict trading on exchanges N 44215 propose restrictions after release V 44218 became focus of attempts N 44219 putting selling for accounts N 44220 make money in markets V 44220 is shortage of orders N 44221 improves liquidity in markets N 44221 have order in hand V 44222 becomes problem for contracts V 44223 take arguments into account V 44223 allowing exceptions to restrictions N 44230 restricting trading in bills V 44231 prohibit trading in markets V 44234 banned trading in pit V 44237 made difference in liquidity N 44237 made difference in pit V 44241 adds something to market V 44244 set standards for dealerships V 44246 construct building in style V 44252 built dealership with showroom N 44254 was bear on interiors V 44254 retrofit building without stream V 44262 cut cassette in half V 44263 produced model of recorder N 44265 urged abandonment of project N 44268 introduced pico in 1985 V 44271 provided technology for products V 44274 is one of studies N 44279 push them into piles V 44280 taped it to underside V 44281 gathered leaves into pile V 44281 moved top of pile N 44283 do lawn in hours V 44294 feeding quantities of budget N 44299 created Command in Panama N 44306 keep lot of shrines N 44306 keep lot to him V 44307 burn lot of incense N 44307 burn lot to him V 44308 had thing about Navy N 44308 make part of Army N 44311 hear him at night V 44316 gave them to bureaucracy V 44321 grab him by throat V 44322 added divisions to Army V 44323 parked them at base V 44324 dedicated forces to Gulf V 44325 threw him to ground V 44326 added bureaucrats to RDF V 44327 gave charge of operations N 44328 be training for soldiers V 44334 paying billion in baksheesh N 44334 paying billion to potentates V 44335 had success in Somalia V 44336 was miles from mouth N 44340 spending jillions of dollars N 44340 fight Russians in Iran V 44340 lost interest in subject N 44342 playing admiral in Tampa V 44344 save costs of bureaucrats N 44347 appeared night in bedroom V 44348 dragging chains of brigades N 44351 canceled production of aircraft N 44358 is director of PaineWebber N 44360 is master on wall V 44361 is reminder of problems N 44362 amassed collection of works N 44362 amassed collection at cost V 44367 buy art for S&L V 44369 called halt to fling N 44371 unloaded three of masterpieces N 44374 takes drag on cigarette N 44375 established quality of collection N 44378 are part of picture N 44382 paying dividends on stock V 44382 suggests concern about institution N 44385 epitomize excesses of speculation N 44391 sold Irises at auction V 44392 has painting under key V 44394 established reputation as freespender N 44394 established reputation in year V 44395 picked paintings at prices V 44396 paid million for instance V 44397 was record for artist V 44406 searched galleries in London N 44408 sold Abraham in Wilderness N 44409 spend lot of money N 44411 developed relationship with Sotheby V 44412 assemble collection for headquarters V 44413 stir interest in masters N 44414 dominate action in masters N 44416 paid million for Portrait V 44419 is stranger to spending N 44420 bid 30,000 at auction V 44422 got wind of adventure N 44423 reported losses in quarters V 44425 extended deadline to months V 44429 have nine of paintings N 44429 have nine at home V 44430 storing paintings at home V 44433 got loan from S&L V 44434 owns % of shares N 44436 given dispute among scholars N 44437 question authenticity of Rubens N 44445 dismisses talk as grapes V 44449 compiling statistics on sales N 44450 appreciated % in year V 44452 gets data on appreciation N 44452 gets data from Sotheby V 44458 bring no than 700,000 N 44458 bring no at auction V 44462 spotted bargains in masters V 44472 had counsel of curators N 44475 put them on market V 44479 defends itself in matter V 44481 resell them at profit V 44482 advise client on purchases V 44482 set estimates on paintings V 44484 be conflict of interest N 44486 express interest in paintings N 44487 seeking return on investment V 44489 get paintings at prices V 44491 buy painting from bank V 44499 pours coffee from silver V 44499 dabs brim with linen V 44505 take it for decadence V 44508 had change in earnings N 44510 compares profit with estimate V 44510 have forecasts in days V 44514 replace Board of Institute N 44515 handling books at time V 44517 studied issues for year V 44517 proposed FASB on 30 V 44518 produced opinions in life V 44524 had meeting on 28 V 44525 disclose translations in dollars V 44528 repurchase shares in transactions V 44531 named Co. as agent V 44538 awarded contract by Army V 44542 is maker of simulators N 44543 provide amplifiers for system V 44547 increased capital by million V 44548 has billion in assets N 44549 appointed officer of maker N 44550 founded company in 1959 V 44553 establish facilities for vehicles N 44553 establish facilities in Pakistan V 44554 given contract for improvements N 44555 got contract for equipment N 44557 reflect increase of million N 44560 fell % to million V 44564 follow fluctuations of ingots N 44576 are prescription for market N 44580 bought list of stocks N 44583 see jump in profits N 44590 are a after jolt V 44591 decline % to % N 44592 ran tests on stocks V 44592 be father of analysis N 44595 been two-thirds in cash N 44595 been two-thirds since July V 44596 piled debt in buy-outs V 44599 fall % to % N 44603 doing buying in stocks N 44605 increased proportion of assets N 44607 deflated lot of speculation N 44608 runs Management in York N 44611 see this as market V 44612 was fluff in market V 44613 was blunder by market N 44614 was overreaction to event N 44614 get financing for takeover V 44617 hurts confidence in stocks N 44620 drop % in months V 44622 lead buy-outs of chains N 44628 throwing money at any V 44628 doing deals on basis V 44629 be gains in both N 44635 help team in LBO V 44637 help us in search V 44640 lose confidence in economy N 44645 been one for retailers V 44652 blocking sales of line N 44653 issued order in court V 44655 was subject of yesterday N 44657 repeated denial of charges N 44659 resume payments with payout V 44660 paid dividend on 31 V 44663 settling disputes over gas N 44664 given pipelines until 31 V 44667 take advantage of mechanism N 44669 negotiate settlement of contracts N 44671 introducing competition into transportation V 44674 change some of provisions N 44675 prepaid million on loan V 44675 bringing reduction for year N 44675 bringing reduction to million V 44676 owes million on loan V 44678 resume payments with dividend V 44678 paid 6 to shares V 44679 paid dividend on 1 V 44680 abandoned properties with potential N 44680 experienced results from ventures V 44681 reached agreement with lenders V 44683 reduce amortization of portion N 44683 reduce amortization through 1992 V 44686 provide MLX with flexibility V 44686 complete restructuring of structure N 44687 filed statement with Commission V 44687 covering offering of million N 44688 acquired interest in Corp. N 44690 access information on services N 44691 is publisher of Journal N 44692 report charge of cents N 44692 report charge for quarter V 44693 sold bakeries to Bakery V 44694 were part of Order N 44695 had income of million N 44697 rose % from tons V 44698 used % of capability N 44700 named director of commission N 44702 was finance of Inc. N 44703 acquired service from Intelligence V 44705 supplies reports on plans N 44706 is compiler of information N 44708 be site for exposition N 44708 be site in 2000 V 44710 renovate sections of town N 44713 holding expo in Venice V 44715 are ventures between firms N 44717 got anything in shops V 44718 runs casino at Hotel N 44719 increase sales to Europe N 44719 holding talks with Italy N 44719 adding pipe to section V 44719 expanding capacity by meters N 44719 expanding capacity from billion V 44721 suspend strike by workers N 44721 resume negotiations with Ltd. N 44722 meet company for talks V 44723 began Thursday with participating V 44724 demanded increase in wage N 44724 was increase of % N 44726 curbing fouling of rivers N 44726 limiting damage from accidents N 44726 improving handling of chemicals N 44728 joined country except Albania N 44728 joined country at meeting V 44729 rushed edition across Baltic V 44732 owns % of Paev N 44734 require lot of twisting N 44734 require lot by Treasury V 44735 market package around world V 44736 swap loans for bonds V 44737 swapping loans for bonds V 44738 covers billion of debt N 44739 paid 4,555 in taxes N 44739 paid 4,555 in province V 44741 spend million for maintenance V 44743 elected director of maker N 44744 placed shares at 2.50 V 44754 change loss to plus V 44758 's move in industry N 44761 be car per family V 44764 bought LeMans on loan V 44766 supplying rest of world N 44768 took Co. in 1986 V 44769 making variations of vehicle N 44770 had agreement with Corp. V 44773 has % of market N 44773 sell 18,000 of models N 44773 sell 18,000 of models N 44774 rising % to units V 44775 expand capacity by 1991 V 44777 selling vehicles through unit V 44778 sell units in 1989 V 44781 is car in Korea V 44782 claims % of market N 44783 have interests in Kia V 44784 is the of Three N 44785 make cars with payments V 44789 holds % of market N 44789 is series of disruptions N 44791 build minicars by mid-1990s V 44793 has project for cars V 44796 named officer of bank N 44806 buying funds during day V 44808 have that at all V 44813 boosted levels in weeks V 44821 void orders before close V 44833 sell securities in market V 44836 acquire Central of Inc. N 44836 acquire Central in swap V 44839 has assets of billion N 44842 WON blessing on 18 V 44842 became openers for makers V 44843 selling them in U.S V 44845 sold softies under sublicense V 44845 gained rights from Academy V 44846 invented them in 1962 V 44847 wraps itself over cornea V 44848 became eye of storm N 44849 showed traces of bacteria N 44851 were hearings on questions N 44851 were hearings in 1972 V 44859 remains leader among majors V 44862 seeking safety in companies V 44864 planning placement of stock N 44867 sell stock without hitch V 44872 take six to months N 44878 slashed value of offering N 44878 slashed value by % V 44881 showing signs after years V 44882 seeing light at end N 44884 publishes newsletter on IPOs N 44887 sell % of stock N 44887 sell % in IPO V 44888 making decisions on basis V 44889 borrow funds against IPO V 44892 affect operations of companies N 44897 flood market with funds V 44898 is non-event for business V 44901 form alliances with corporations V 44902 made it for them V 44903 see lining in clouds V 44904 lose enthusiasm for deals N 44906 underline lack of control N 44907 have degree of influence N 44908 reported loss for quarter V 44913 had loss in quarter V 44914 had loss of million N 44915 had loss of million N 44916 had loss of million N 44922 reported decline in income N 44922 excluding gains in quarters N 44926 included gain of cents N 44926 included gain as reversal V 44928 climbed % to million V 44929 jumped % to million V 44930 had profit of million N 44930 had profit against loss V 44931 excluding charge for recall N 44931 reflecting expenses in systems N 44933 had sales to million V 44945 marked end of Empire N 44947 call land of Britain N 44948 justify use of adjective N 44949 sets beauty of land N 44961 see father in condition N 44967 shifting scene from country V 44967 fashioned novel in mode V 44968 adopt attitude towards employer V 44979 spreads wings at dusk V 44981 teaches English at University V 44982 completed sale of assets N 44982 completed sale to Inc. V 44984 is part of program N 44986 distributes propane through subsidiary V 44988 overlooking runway of Airport N 44989 lease some of jetliners N 44989 lease some to airline V 44992 build terminal in Union V 44993 lease some of planes N 44993 lease some to Lingus V 44994 is notion of ferry N 44994 ferry Armenians to Angeles V 44998 leasing planes to Aeroflot V 45000 has ventures with Aeroflot V 45009 were rage in West V 45013 unload gallons of fuel N 45013 unload gallons into farm V 45014 resells it to carriers V 45015 pays bills with fuel V 45017 opened shops at Airport V 45018 manages sales on flights V 45022 taking advantage of prices N 45022 board flights in Shannon N 45028 was landfall in Europe N 45029 made stop for air V 45030 shot jetliner over Sea V 45030 suspended flights for months V 45032 making heap of money N 45032 making heap from friendship V 45033 add Lingus to team V 45035 rose % in August V 45036 rose % in August V 45038 shipping steel from plant V 45038 testing mettle of competitors N 45039 creates piece of steel N 45040 make ton of steel N 45040 make ton in hours V 45048 get toehold in market N 45050 enable production without ovens V 45051 locked giants from steelmaking V 45054 spent billions of dollars N 45054 boost percentage of cast N 45057 beat guy down street N 45058 beat everyone around world N 45061 plying dollars in market V 45064 remain kings of steel N 45065 produce drop in bucket N 45066 representing half of tons N 45070 make dent in market N 45072 set it on dock V 45074 visit plant in City N 45076 Cementing relationships with clients V 45076 is means of survival N 45079 promote cans to nation V 45081 touting doors with inserts N 45084 funneling pipe to Union V 45087 produce steel for products V 45093 offset growth of minimills N 45094 mention incursion of imports N 45095 awaiting lifting of restraints N 45096 expect competition from countries N 45102 getting attention on Street V 45104 pay billion to billion N 45106 pay million to Inc. V 45111 give prediction of award N 45117 told Kodak on occasions V 45117 followed advice in instance V 45122 sold them at price V 45128 tumbled % in quarter V 45128 rendering outlook for quarters V 45129 was delay in shipment N 45130 cited increase in business N 45130 cut revenue in term V 45131 cut value of earnings N 45136 following increase in period N 45138 see anything in fundamentals V 45142 mark declines from net N 45143 kept recommendation on stock V 45151 won business as sale V 45151 leased equipment to customer V 45152 losing money on leases V 45153 doing some of deals N 45154 announces versions of mainframes N 45156 gaining momentum in market V 45160 was % below levels V 45165 raise forecasts for 1989 N 45170 include cents from effects V 45172 increase % from billion V 45174 blamed volume on weather V 45175 were % in quarter V 45176 rose % in quarter V 45178 increased % in quarter V 45179 jumped % with sales V 45181 increased % in quarter V 45187 brought company to Pepsi V 45187 expect acquisition in year V 45188 take advantage of opportunities N 45189 be chairman of Commission N 45191 held posts at Department N 45191 become president of Corp N 45192 been solicitor at Department V 45193 met Bush in 1950s V 45193 was man in Midland V 45193 was lawyer for firm V 45194 regulates billions of dollars N 45198 represents balance of payout N 45198 paid 17 in distribution V 45199 resume schedule of dividends N 45199 resume schedule at end V 45200 supply electricity to utility V 45202 halted work on lines N 45202 stopped negotiations for resale N 45203 begin deliveries in 1992 V 45206 lost place in line N 45208 has customers in mind V 45213 rise amount of change N 45214 were times than those N 45215 given degree of leverage N 45216 be nature of creatures N 45217 buy amount within period V 45218 sold options on stocks V 45218 buy contracts at prices V 45219 had choice in cases V 45219 sell contracts at prices V 45220 be blow to Exchange V 45221 halted trading in step V 45224 make rotation with time V 45228 underscoring seriousness of transfer N 45228 put total of million N 45228 guarantee positions in case V 45233 have luxury of time N 45234 talk Bank of watchman N 45235 put money into bailout V 45237 had problems during crash V 45240 processes trades for exchanges V 45240 insure integrity of markets N 45242 give contributions to guarantee N 45243 contributed million to guarantee V 45247 is lounge of Co. N 45249 take time for massage V 45251 sneak therapists into office V 45252 is nothing like rubfests N 45254 take place in rooms V 45256 pay part of fee N 45258 are balm for injuries V 45261 feel tension around neck V 45262 leave room after massage V 45263 plies trade in office V 45265 opened doors to massage V 45272 describing visits as breaks V 45274 invited masseuse to offices V 45276 build lot of tension N 45277 brought them to halt V 45286 change consciousness towards touch N 45289 won officials at Co. N 45290 stresses professionalism during visits V 45291 visiting Emerson since January V 45294 bring touching into America V 45299 rest knees on supports V 45299 bury face in padding V 45302 massaging man in supermarket V 45306 was point in career V 45306 taken policy for business V 45307 were people in line V 45311 does work in Pittsburgh V 45311 is tip of iceberg N 45313 's nothing like skin V 45314 be cancellation of loan N 45314 be cancellation since killings V 45314 terminated credit for project N 45315 provide loan to Corp. V 45318 had doubts about project N 45318 had doubts before 4 V 45328 secured promise from Bank N 45328 lend Development at maturity V 45328 finance repayment of borrowing N 45330 pay fees to committee V 45335 acquire Inc. for 23 V 45335 expand presence in business N 45340 provide base for stores V 45341 tested sector with acquisition V 45344 had losses for years V 45345 rang profit of million N 45345 rang profit after carry-forward V 45346 turned corner in profitability V 45350 pay kind of price N 45350 getting player in industry N 45351 raised question about deal N 45352 get act in discounting V 45353 address loss in stores N 45361 make offer for shares N 45362 tender majority of shares N 45364 named officer of unit N 45365 remain president of company N 45365 represent stations in organizations V 45367 plummet points in seconds V 45373 blamed foul-up on problem V 45375 was lot of confusion N 45376 buys some of stocks N 45380 heads desk at Corp. N 45386 miscalculated drop as decline V 45388 sold dollars on news V 45388 buy them at prices V 45390 viewing prices as subject V 45393 was points at time N 45399 named president of company N 45400 retains positions as officer N 45401 representing plaintiff in suit N 45401 strike blow for client V 45404 forgo damages against client N 45404 forgo damages in return V 45408 pay 50,000 as part V 45409 scuttled deal at minute V 45412 take shot at Alexander N 45414 strike Alexander above belt V 45415 catch him from behind V 45416 assign rights to anyone V 45417 regards agreement as something V 45420 sign release from liability N 45421 rained money in markets V 45422 reaching levels for time V 45423 reap windfalls in matter V 45425 jumped points in seconds V 45425 moved rest of day N 45426 represents profit for contract V 45427 trade contracts at time N 45427 trade contracts in market V 45429 assumed positions for fear V 45431 shouting minutes before start N 45432 fell points at open V 45442 are thing of past N 45443 regained some of footing N 45446 provide prices for issues V 45450 's bit of euphoria N 45452 tumbled points to 96 V 45453 recovering losses from Friday N 45458 citing pattern of rates N 45458 see defaults from years N 45459 is concern about liquidity N 45463 include issues from TV N 45465 have rate in year V 45465 seeing problems in midst V 45467 was tonic for market N 45468 recovered all of losses N 45468 recovered all from Friday V 45471 be sellers of securities N 45477 following display of volatility N 45479 approach market as investor V 45481 owning stocks over long-term V 45482 outperformed everything by shot V 45485 losing money in market V 45486 favor investor with portfolio N 45487 is % to % N 45488 need money for years V 45490 have place in portfolio N 45492 building equity in home N 45492 provides protection against inflation N 45492 cover cost of living N 45493 invest money in stocks V 45494 sell stocks at time V 45502 pay taxes on gains V 45509 getting attention from broker V 45510 have advantage over investors V 45511 have edge in companies V 45514 sees revival of interest N 45514 boost performance of stocks N 45514 boost performance in term V 45515 eliminated effort in stocks N 45515 resuming coverage of area N 45516 seeing turnaround in interest N 45520 Buy stocks on weakness V 45522 invests amount into market V 45525 put money at time V 45536 faced doubt about bid N 45537 reviving purchase at price V 45538 face rejection by board N 45539 dropping it in light V 45540 make offer at price V 45541 obtain financing for bid V 45542 halted Friday for announcement V 45543 tumbled 56.875 to 222.875 V 45544 wreaked havoc among traders V 45545 showed signs of stalling N 45546 reaching high of 107.50 N 45548 proven mettle as artist N 45549 buy bit of company N 45554 foil Trump in Congress V 45554 bolstered authority of Department N 45555 put blame for collapse N 45555 put blame on Congress V 45556 wrote members of Congress N 45563 paid price of 80 N 45564 protect airline with transaction V 45572 obtained financing for bid N 45573 leave him with problem V 45573 handicap him in effort V 45573 oust board in fight V 45574 finance buy-out at price V 45575 lowering offer to 250 V 45576 borrow 6.1 from banks V 45579 received million in fees N 45579 raise rest of financing N 45587 joined forces under threat V 45593 obtain offer from bidders V 45594 exclude him from deliberations V 45596 finish work on bills V 45596 put sting into cuts V 45597 impose discipline on process V 45597 shift funds among programs V 45599 strip scores of provisions N 45605 bring deficit below target V 45606 cutting spending across board V 45607 provide aid for care V 45610 torpedoed plan in order V 45610 press fight for cut N 45613 have effect on process V 45616 slicing % from payments V 45619 wraps work on spending N 45623 making cuts from activity V 45626 has control of activities N 45629 exempt accounts from cuts V 45631 include cut in taxes N 45631 include cut as part V 45634 involved 425,000 in payments N 45634 use influence with Meese N 45634 use influence on behalf V 45635 described defendant as player V 45636 sold office for 300,000 V 45642 serve a of sentences N 45642 being eligible for parole N 45644 criticized Wallach for host V 45645 influence jury in August V 45647 get help for woman N 45649 blamed woes on friendship V 45651 been fulfillment of dreams N 45657 has worth of 273,000 N 45659 play role in phases V 45660 hailed ruling as victory V 45660 achieve reforms in union V 45660 achieve election of officials N 45661 was departure from terms N 45665 oversee activities for years V 45667 revealed disagreements over scope N 45668 gave right to trial N 45668 gave right for terms V 45670 received evidence about comments V 45671 sentenced defendant to years V 45671 killing men in park V 45673 touched furor in community V 45673 prompted complaints about Hampton N 45674 remove Hampton from bench V 45678 explain rationale for sentencing N 45680 carry streamlining of appeals N 45680 proposed month by force V 45681 expedite consideration of proposals N 45682 provide lawyers to inmates V 45682 challenge constitutionality of convictions N 45684 sent report to Congress V 45686 eases number of restrictions N 45688 joined firm of Bain N 45690 joining Apple in 1986 V 45691 trim levels of businesses N 45692 jumped % in August V 45692 outstripping climb in inventories N 45695 are news for economy V 45704 is summary of report N 45705 expects reduction in income N 45705 expects reduction for quarter V 45706 reduced million because damage V 45707 had net of million N 45707 had net on revenue V 45709 offer number of paintings N 45709 offer number at estimates V 45711 absorb itself in art V 45714 offered him at sale V 45714 consigned biggie to Sotheby V 45723 reduced deductions for donation N 45727 been chairman of Board N 45728 been source of collections N 45729 is hemorrhaging of patrimony N 45731 is tip of iceberg N 45732 be wasteland for museums V 45741 makes playground for bidders N 45741 given plenty of dollars N 45749 is point of game N 45757 suggests sale as sort V 45760 become sort of beanstalk N 45763 sell unit to group V 45764 have impact on earnings N 45765 has sales of million N 45766 keeping eye on indicators V 45767 handle crush of orders N 45767 handle crush during hours V 45770 held series of discussions N 45772 demonstrate value of improvements N 45775 is memory for regulators V 45776 renewed attacks on firms N 45778 was warning to firms N 45778 become danger in event V 45779 tolerate kind of action N 45780 dispatched examiners into rooms V 45781 creating losses among investors V 45784 signed letter of intent N 45784 acquire Inc. of Britain N 45787 has million in sales N 45789 named president for affairs N 45808 opens season with Godunov V 45808 featuring singers from Union N 45814 makes debut at Hall V 45815 make debut at Opera V 45819 Being newspaper in town N 45820 secured rights to features N 45821 keep offerings for itself V 45822 nabbing some of draws N 45828 seeking contracts for features N 45828 seeking contracts of pacts V 45832 turned fees from competitors N 45833 stole features from Globe V 45834 pulled features from Bulletin V 45834 was growth for Universal V 45835 was consideration in Dallas V 45837 is venture between Universal N 45838 develop ads for newspapers N 45843 discuss episode in public V 45844 sponsor discussion on pact N 45844 sponsor discussion at meeting V 45851 get cut from type V 45853 see increases in pay N 45857 become part of boilerplate N 45859 including exemption from laws N 45860 enhance competitiveness of companies N 45863 prohibit use of rating N 45865 requires rollback in premiums N 45870 make war against reformers V 45873 build cars in quarter V 45874 putting pressure on Corp. V 45874 rise % from levels V 45875 fall % to cars V 45877 builds cars for dealers V 45881 adding car at plant V 45889 's lot of flexibility N 45890 have impact on schedules V 45892 are forecasts for quarter N 45892 turned cars in fourth-quarter V 45893 closing plant in Wayne N 45895 lose distinction as car N 45896 was second to Escort N 45896 was second in year V 45897 top list in 1990 V 45898 leaving magazine by end V 45899 be magazine at core V 45900 launch magazine as a V 45901 be partner in magazine N 45901 be partner with editor V 45902 started Cook in 1979 V 45903 sold it to Group V 45907 calm fears of Armageddon N 45908 reflecting nervousness about behavior N 45910 dropped the for day N 45911 lost points for amount V 45912 fell three-quarters of point N 45912 sought haven from stocks N 45913 expected the from market V 45917 ease credit in weeks V 45923 be case with program V 45924 accommodate amounts for purchasers N 45925 holds share of market N 45926 showing loss of billion N 45928 consider expansion of FHA N 45929 including purchasers in program V 45930 erases ceiling of 101,250 N 45930 places cap at % V 45933 making loans without requirements V 45933 increases risk of default N 45935 increased it to % V 45936 doubled exposure in markets N 45937 awaiting report on losses N 45938 placing ceiling at 124,875 V 45939 provide consolation in face V 45940 is intrusion into market N 45943 afford payments on home N 45944 guarantee mortgages on homes N 45946 bearing burden of guarantees N 45948 gave appearance of industry N 45950 gave way to bailout V 45953 expanding guarantees without reform V 45960 are libraries in City V 45960 solve riddle of Sterbas N 45967 changing hands at yen V 45968 followed Average like dog V 45971 take brouhaha of days N 45973 began night in trading V 45983 stabilize currency at level V 45984 fell pfennig to 1.8560 V 45987 dropped % against mark V 45987 shoot % to point V 45988 defend currencies against mark V 45990 's the as 1987 N 45990 is lot of uncertainty N 45991 selling dollars in lots V 46001 losing profits through currency V 46005 trust market because volatility V 46006 lost lot of money N 46006 lost lot in 1970s V 46007 sees opportunities in markets N 46008 rose 4 to 367.30 V 46013 played role in slide V 46015 sent market into tailspin V 46016 discourage some of banks N 46019 irritated some in administration N 46021 had problems with jawboning V 46022 blame him for crash V 46023 put financing on terms V 46024 have kind of questions N 46025 sending signals about buy-outs N 46029 gives lots of room N 46029 provide picture to community N 46030 raises specter of decision-making N 46031 spelled policy for buy-outs N 46032 makes decisions on issues N 46032 finishes ruminations on issue N 46034 reach decision on buy-outs N 46034 have problems with buy-outs N 46037 exerting control over airlines V 46038 contributed % of equity N 46038 received % of stock N 46039 was violation of spirit N 46040 discussing interpretation of law N 46041 undermine position in talks V 46042 defining control by citizens N 46042 applying reasoning to buy-outs V 46043 plays rift in administration N 46044 have understanding of importance N 46046 open markets to carriers V 46046 blocking service by carriers N 46049 spends amount on maintenance V 46050 is correlation between load N 46052 satisfied concerns on deal N 46053 extend requirements to airlines V 46061 cut inventories of models N 46064 save some of plants N 46065 need plant for APV V 46067 was part of plans N 46069 is one of lines N 46070 introduced versions of cars N 46071 close plant for weeks V 46072 had supply of cars N 46072 had supply at end V 46077 reported increase in income N 46079 credited demand for plywood N 46082 posted gain in net N 46084 include gain on settlement N 46086 include gain of million N 46088 including gain on sale N 46091 expects all of 1989 N 46093 lowered prices at start V 46101 take stocks off hands V 46101 cutting prices in reaction V 46102 lowered bids in anticipation V 46103 oversees trading on Nasdaq N 46104 received quotes by 10 V 46109 expect rash of selling N 46109 lower prices in anticipation V 46113 was shades of 1987 N 46114 made fortune on market V 46116 rose 1 to 33 V 46117 gained 1 to 19 V 46118 added 1 to 45 V 46119 advanced 1 to 46 V 46120 jumped 1 to 75 V 46121 eased 1 to 17 V 46122 rose 0.56 to 449.89 V 46123 falling 6.90 to 456.08 V 46124 was news in contrast V 46125 acquire Skipper for 11.50 V 46127 settled dispute with unit N 46128 rose 1 to 11 V 46129 fell 3 to 104 V 46130 rose 1 to 41 V 46131 jumped % to 17 V 46133 bring press into line V 46134 indicate frustration with problems N 46135 advocate end to policy N 46136 show responsibility in reporting V 46139 regard TV as tools V 46141 discussed possibility of war N 46142 gave criticism of Afanasyev N 46144 lasted a under hours N 46145 was speaker from leader N 46148 contained criticism of Gorbachev N 46150 thanked leader for ability V 46152 quoted readers as saying V 46154 sparked bitterness at paper V 46155 see chief in future V 46156 took look at activities V 46157 attacked level of debate N 46158 adopting legislation with minimum V 46160 imposes restrictions on movement N 46160 set ceilings for prices N 46160 preventing sale of goods N 46161 is reporter of topics N 46162 waste talents with assignments V 46168 were participants in days N 46168 supply boosts to nation V 46170 sells products to force V 46171 has visions of harvests N 46174 been officer of Bank N 46176 named president of division N 46176 become president of Co. N 46177 suffered bloodbath since crash N 46179 total million for traders V 46181 received proposals from investors V 46183 obtain financing for agreement V 46183 buy UAL at 300 V 46187 buy AMR at 120 V 46189 owned equivalent of % N 46189 indicating losses of million N 46190 own equivalent of % N 46190 indicating million in losses N 46192 made all of declines N 46192 made all on Friday V 46193 been reports of firms N 46194 provide cushion against losses V 46196 was position for arbs N 46203 soliciting bids for all V 46203 owns % of Warner N 46205 were % with falling V 46210 buy amounts of stock N 46211 are demands by lenders N 46212 been result of judgments N 46213 remove chemical from market V 46214 kept public in dark V 46215 counteract lockhold of interests N 46216 inform public about risks V 46217 used skills of firm N 46217 educate public about results V 46219 present facts about pesticides N 46219 present facts to segment V 46220 do something about it V 46221 educate public about risk V 46223 abused trust of media N 46227 was risk to Americans N 46229 learn something from episode V 46232 was intent of NRDC N 46235 frightened people about chemicals V 46238 creating obstacle to sale N 46240 restrict RTC to borrowings V 46242 raising billion from debt V 46245 maintain assets of thrifts N 46246 leaving spending for bailout N 46246 leaving spending at billion V 46246 including interest over years V 46253 subtracting value of assets N 46256 pay price of consultation N 46256 want kind of flexibility N 46257 hold hearing on bill N 46257 hold hearing next Tuesday V 46263 filmed commercial at EDT V 46263 had it on air V 46264 placed ads in newspapers V 46266 running them during broadcast V 46268 fled market in panic V 46270 prepared ads in case V 46271 ordered pages in editions N 46272 touted 800-number beneath headline N 46273 received volume of calls N 46273 received volume over weekend V 46279 protect them against volatility V 46280 plug funds by name V 46282 rush it on air V 46286 is place for appreciation N 46287 appear times on CNN V 46289 keep money in market V 46295 make one of commercials N 46296 replacing commercial of campaign N 46305 reached agreement in principle N 46305 acquire stake in Advertising N 46307 resigned post in September V 46307 becomes executive of Arnold N 46308 retain title of president N 46309 handle account for area N 46312 includes ads from advertisers N 46313 distribute % of revenues N 46313 distribute % as grants V 46316 is sport of mean N 46317 dumped runs by bushel V 46320 hit pitch from Reuschel N 46320 hit pitch into stands V 46321 struck runs in games V 46323 salve pain of droughts N 46324 had hits in four V 46325 got seven of hits N 46325 scored four of runs N 46325 scored four in decision V 46326 held Giants to hits V 46327 was pitcher during campaign V 46328 permit Giants in innings V 46330 's one of gurus N 46334 's name for conveyance N 46334 observe them in calm V 46335 sat side by side N 46335 sat side in seats V 46336 bearing emblems of teams N 46340 represents triumph of civility N 46342 need police in seat V 46343 gave lot of heroes N 46344 lost months of season N 46344 lost months to surgery V 46345 was ditto in two N 46345 moved runner in inning V 46346 is reputation among Bashers V 46346 turn ball to him V 46348 exemplifies side of equation N 46349 smoked Toronto in playoffs V 46353 went 5-for-24 with ribbies V 46354 gives hope in games N 46360 reported drop in income N 46366 reflecting softening of markets N 46367 showed gains during quarter V 46368 estimate gains at % V 46371 had profit of million N 46372 lowered estimates for 1989 N 46374 had income of million N 46378 Link Pay to Performance V 46379 limit practice to analysts V 46380 extend standards to force V 46380 pay salary with bonus N 46381 stop lot of account-churning N 46385 reach office until a.m. V 46386 had calls from States V 46391 breathed sigh of relief N 46396 left signals for London V 46397 declined % in trading V 46400 outnumbered 80 to 20 N 46403 is sort of market N 46411 targeted shares of Reuters N 46412 showed price at pence V 46413 sensed buyer on day V 46416 abandoned search for shares N 46417 was a.m. in York V 46417 fielded call from customer N 46417 wanting opinion on market N 46417 having troubles before break V 46425 watched statistics on television V 46426 hit 2029.7 off points V 46433 dumped Receipts in PLC V 46437 posted loss on Street N 46443 has chance in million N 46444 has chance in million V 46447 approve buy-outs of airlines N 46448 spurred action on legislation N 46450 withdrew bid for Corp. N 46451 criticized bill as effort V 46451 thwart bid for AMR N 46452 express opposition to bill N 46453 brushed allegations as excuse V 46454 is room in position V 46455 was response to situation N 46456 cited examples as reasons V 46460 have authority to mergers N 46461 view bill as effort V 46461 add certainty to process V 46461 preserve fitness of industry N 46463 determining intent of acquisition N 46464 give control to interest V 46466 expressed support for bill N 46466 expressed support in order V 46468 divesting themselves of entities N 46470 called step toward resumption N 46471 made expression of expectations N 46472 provided increase over life V 46474 delay delivery of jetliners N 46476 receiving 100 from fund V 46482 launch offer for stock N 46483 file materials with Commission V 46484 holds stake in Dataproducts N 46484 made bid for company N 46484 made bid in May V 46487 seeking buyer for months V 46487 announced plan in September V 46487 took itself off block V 46489 sell million of holdings N 46489 sell million to Inc. V 46493 have reason for optimism N 46493 have reason after rebound V 46494 was hit of markets N 46499 been center of fever N 46499 been center in weeks V 46506 had memories of exchange N 46506 losing % of value N 46506 losing % in crash V 46510 delayed minutes of crush V 46512 took three-quarters of hour N 46512 get reading on market N 46513 spent night in offices V 46515 surprised a by storm V 46517 inhibit recovery for exchange N 46517 showing signs of weakness N 46518 took some of hits N 46521 cropped price by marks V 46521 leaving incentive for investors N 46522 recouped two-thirds of losses N 46522 recouped two-thirds in wake V 46523 plunged points at p.m V 46525 scooped equities across board V 46527 gave Bourse after fall V 46530 was buying in Paris V 46531 changed line in mid-conversation V 46536 posted loss for quarter N 46536 add billion to reserves V 46537 placed parent of Co. N 46537 placed parent among banks V 46537 covered portfolios to countries N 46537 covered portfolios with reserves V 46542 climbed 1.50 to 44.125 V 46543 sank % in quarter V 46544 finance loans to customers N 46545 received million of payments N 46545 been million in quarter N 46546 costing million of income N 46546 costing bank in period V 46547 climbed % to million V 46549 grew % to million V 46556 totaled million in quarter V 46558 offset growth of % N 46558 offset growth in operations V 46559 squeeze margin in Southeast N 46560 jumped 3.50 to 51 V 46562 contributed million to line V 46563 reflect % of earnings N 46564 raised billion in capital N 46564 raised billion during quarter V 46565 purchased both for million V 46568 post increase in income N 46568 post increase because growth V 46575 offset losses in market N 46576 reported increase in losses N 46579 fell % in quarter V 46580 grew % in period V 46582 take position on offer N 46583 seeks % of concern N 46584 begin process in 1994 V 46584 buy holders at price V 46585 challenges agreement between Corp. N 46588 has obligation to purchase N 46589 operate LIN in manner V 46589 diminish value in years V 46595 owns % of Telerate N 46604 accepted legitimacy of position N 46606 put estimate on losses V 46612 accept delays after 13 V 46619 retire obligations through exchanges V 46620 provided million in assistance N 46620 provided million to unit V 46620 maintain million in stock N 46620 maintain million in unit V 46621 buy % of stock N 46623 get shares of stock N 46623 get shares in exchange V 46623 receive shares of stock N 46624 paves way for surpluses N 46624 be center of economy N 46625 exchange all for package V 46626 swap 9 for share V 46627 buy share for 10.75 V 46629 offering amount for amount V 46630 redeem warrants at option V 46633 increase debt by million V 46640 fell % to million V 46641 grew % to million V 46642 jumped % to billion V 46643 grew % to million V 46644 reported loss of million N 46645 reached million from million V 46648 advanced % on market V 46649 is company for Co. N 46651 posted income for quarter N 46651 reflecting improvement in businesses N 46652 was contributor to results N 46653 including gain of million N 46656 signed agreement with builder N 46656 purchase building for million V 46659 use stocks as collateral V 46663 were all over weekend V 46665 handle meltdown in prices N 46669 falls points in day V 46670 enter market at levels V 46673 cause slide in prices N 46674 was the of worlds N 46676 stopped trading in securities N 46678 focused selling on Exchange V 46682 is limit for declines N 46685 execute orders in one V 46688 halted slide in prices N 46688 halted slide on Friday V 46691 synchronize breakers in markets V 46696 handle volume of shares N 46698 prevent crack in prices N 46701 is professor of economics N 46702 poses prospects for firms N 46703 open borders in 1992 V 46703 set effort off rails V 46704 face pressure from unions N 46704 face pressure in nations V 46704 play role in decisions V 46709 involving players for league N 46714 broke jaw with bat V 46715 dismissed suit against team N 46717 freeing nurses from duties V 46718 basing pay on education V 46720 basing advancement on education V 46723 signs nurses for travel V 46724 TREATING EMPLOYEES with respect V 46726 treat them with respect V 46729 get priority in bargaining V 46735 report rise in losses N 46742 gives inventors of microchip N 46743 accuses postmaster of tactics V 46747 had problems at all V 46749 changed hands during session V 46750 beefing computers after crash V 46751 quell falls in prices N 46753 brought rationality to market V 46756 fell % in quarter V 46758 is the in string N 46760 feeling pressure from Corp. N 46760 tested sale of pieces N 46763 be hit with diners N 46765 experienced problems in markets N 46769 post drop in income N 46772 selling approach to clients N 46774 is mention at end N 46777 features spots as Floodlights N 46779 offer tips to consumers V 46781 's risk of messages N 46781 created spots for Bank V 46783 Sees Pitfalls In Push N 46786 include products like Soap N 46787 realizing pitfalls of endorsements N 46788 puts Sunlight on list V 46790 questioned validity of list N 46804 replaced Willis in place V 46806 rattled conservatives with views V 46807 is director of Institute N 46809 release information about her N 46810 disclosed selection by Sullivan N 46811 is result of politics N 46812 pressure Hill for spending V 46816 been member of coalition N 46821 backed host of programs N 46824 boost spending above level V 46825 peg ceiling on guarantees N 46825 peg ceiling to % V 46825 limiting it to 101,250 V 46825 increase availability of mortgages N 46825 provide funding for Administration N 46825 increase incentives for construction N 46825 including billion in grants N 46830 lost billion in 1988 V 46831 pump billion into program V 46831 requested million for year V 46834 pushes price of housing N 46838 be conservatives in terms V 46839 override commitment to responsibility N 46843 insulate them from effects V 46847 give momentum to plans V 46848 make declaration on that N 46848 make declaration during meeting V 46851 has significance in itself V 46852 set date for conference N 46853 set date for conference N 46854 reminds me of joke N 46855 was combination of things N 46858 stop procession before end V 46860 get cash from banks V 46860 confirmed fear among arbitragers N 46863 spooked crowds along Street N 46866 opened Monday at 224 V 46867 opened Monday at 80 V 46869 lost % on Friday V 46871 line consortium of banks N 46872 setting stage for march V 46873 cast pall over market V 46874 ignoring efforts by Mattress N 46875 sell billion in bonds N 46875 sell billion before year-end V 46877 distract us from fundamentalism V 46878 are implications for makers N 46879 confirm direction of regulators N 46882 reflected reappraisal of excesses N 46883 be judges of quality N 46893 distinguish debt from debt V 46893 draw line at industry V 46896 rebounded morning with rising V 46896 close session at 35087.38 V 46897 slid points on Monday V 46898 soared points to 35133.83 V 46900 provide direction for markets V 46902 had losses than Tokyo N 46903 was market since plunge N 46904 set tone for markets V 46908 was speculation during day N 46911 sank 45.66 to 2600.88 V 46916 show gain of 200 N 46917 posted decline of year N 46918 fell 100.96 to 3655.40 V 46921 bear resemblance to events N 46926 outnumbered ones on market V 46927 called scenario for Japan N 46931 described plunge in U.S. N 46931 described plunge as event V 46933 posted gains on speculation V 46935 adjust allocation in equities N 46947 ended % above close N 46952 see % on downside N 46952 counting risk of news N 46953 closed drop since 1987 N 46962 dumped holdings on scale V 46963 cited memories of years N 46967 tipped world on side V 46970 reduce emissions by % V 46974 bars sale of crops N 46976 take control of policy N 46979 mandate reduction of dioxide N 46983 is ambition of General N 46985 collected plans from groups V 46985 cobbled them into initiative V 46986 's day of election N 46989 spend maximum for campaign N 46996 spend money on litigation V 46997 is issue among segments V 46998 are nation unto themselves N 46999 lost control of commerce N 46999 lost control to attorney V 47000 impose costs on citizens V 47001 define itself for futureeither V 47004 erased half of plunge N 47004 gaining 88.12 to 2657.38 V 47005 was advance for average N 47007 outnumbered 975 to 749 N 47007 suffered aftershocks of plunge N 47009 tumbled 102.06 to 1304.23 V 47011 fell 7 to 222 V 47013 concerned a about narrowness V 47016 gave credence to declaration V 47022 find orders from firms N 47023 hammering stocks into losses V 47024 sold baskets of stock N 47025 was hangover from Friday N 47028 losing 63.52 in minutes V 47032 pushed stocks to values V 47034 was lot of bargain-hunting N 47035 oversees billion in investments N 47036 put it in market V 47038 had one of imbalances N 47038 had one on Friday V 47038 was one of stocks N 47041 represented % of volume N 47046 was lot of selling N 47049 showed gain of 5.74 N 47052 get burst of energy N 47052 broke bottles of water N 47053 get prices for shares V 47054 was bedlam on the V 47067 maintain markets during plunge V 47069 were halts in issues V 47070 is one of stocks N 47074 jumped 1 to 38 V 47074 rose 1 to 1 V 47075 were sector of market N 47076 rising 1 to 43 V 47077 rose 1 to 43 V 47080 added 3 to 28 V 47080 rose 3 to 18 V 47080 rose 3 to 14 V 47081 climbed 4 to 124 V 47082 praised performance of personnel N 47085 make % of volume N 47087 get kind of reaction N 47088 had conversations with firms V 47089 were buyers of issues N 47089 were buyers amid flood V 47100 joined soulmates in battle V 47101 order cancellation of flight N 47106 cover percentage of traffic N 47106 represent expansion of ban N 47107 be concession for industry N 47111 had support from Lautenberg V 47111 used position as chairman N 47111 garner votes for initiative V 47114 retains support in leadership V 47115 owes debt to lawmakers V 47115 used position in conference N 47115 salvage exemption from ban V 47117 killed handful of projects N 47120 increase spending for equipment N 47121 includes million for airport N 47121 created alliances between lawmakers N 47122 gain leverage over city N 47124 delayed funds for project N 47125 review costs of phase N 47126 preserve million in subsidies N 47130 including million for improvements N 47132 reported earnings for quarter N 47133 free executives from agreement V 47134 acquire Columbia for billion V 47137 reflecting success of movies N 47138 including Huntsman of City N 47138 boosted stake in Corp. N 47138 boosted stake to % V 47139 acquire Aristech in transaction V 47142 send version of package N 47143 send delegation of staffers N 47143 send delegation to Poland V 47143 assist legislature in procedures V 47144 calls gift of democracy N 47145 view it as Horse V 47146 create atrocities as bill N 47146 be budget of States N 47147 explain work to Poles V 47147 do the for people V 47153 rose % to punts V 47157 reflected rebound in profit-taking N 47160 expected drop in prices N 47160 expected drop after drop V 47163 reduce size of portfolios N 47167 considered signal of changes N 47174 quoted yesterday at % V 47176 battered Friday in trading V 47176 post gains after session V 47179 making market in issues N 47180 make markets for issues V 47180 improved sentiment for bonds N 47182 rose point in trading V 47184 keep eye on trading V 47189 be bellwether for trading N 47191 includes report on trade N 47195 do damage to us V 47197 provide details of issue N 47198 is division of Corp. N 47224 ended 1 at 111 V 47224 rose 21 to 98 V 47228 quoted yesterday at 98 V 47231 yielding % to assumption V 47231 narrowed point to 1.42 V 47232 were dealings in Mac N 47232 gather collateral for deals N 47233 producing amounts of issues N 47234 was activity in market V 47236 drove bonds in dealings V 47240 dominated trading throughout session V 47243 was point at bid V 47247 weighing alternatives for unit N 47247 contacting buyers of operation N 47249 represented million of million N 47250 contact buyers for unit N 47251 raised stake in Ltd. N 47253 increase stake in ADT N 47253 increase stake beyond % V 47253 extend offer to rest V 47255 is 47%-controlled by Ltd. N 47256 posted surge in profit N 47256 posted surge for year V 47260 credited upsurge in sales N 47260 credited upsurge to sales V 47261 totaled yen in months V 47266 had profit before depreciation V 47268 is supplier of equipment N 47268 is supplier in U.S. V 47270 reported loss of million N 47272 reported income of 955,000 N 47274 fell cents to 4.25 V 47275 told investors in York N 47279 reflect improvements in margins N 47281 extended date of offer N 47282 sell facilities to party V 47282 reach agreement on sale N 47287 extended date of commitment N 47287 extended date to 15 V 47291 buy % of Ltd. N 47291 buy % with assumption V 47292 acquire % of Regatta N 47292 acquire % under conditions V 47293 manage operations under Gitano V 47294 have sales in excess V 47296 manufacturing clothes under trademark V 47298 had income of million N 47300 increased number of units N 47302 represent % of equity N 47305 extended offer of 32 N 47305 extended offer to 1 V 47307 holds total of % N 47307 holds total on basis V 47308 expire night at midnight V 47310 is unit of Corp. N 47310 is partner in Partners N 47317 feature photos of celebrities N 47318 report rush to orders N 47321 advancing look with collections V 47327 ignored market for years V 47330 snare portion of industry N 47334 outpacing growth in market N 47338 has quality to it V 47341 jumped year to rolls V 47342 features shots of stars N 47343 distinguish ads from spreads V 47345 won award as ad N 47353 show it to friends V 47358 costs a than film N 47362 increasing sponsorship of classes N 47363 sponsoring scores of contests N 47363 offering paper as prizes V 47364 distributing video to processors V 47367 has price of 250 N 47367 noticed requests from parents N 47371 made leaps in development N 47374 selected 15 of photos N 47374 selected 15 for issue V 47379 attributed performance to rate V 47380 had increase in profit N 47389 owns refinery in Switzerland N 47390 prompted fears about prospects N 47390 foreshadowed downs by times V 47391 reached record of 223.0 N 47391 reached record in August V 47393 marked gain for indicator N 47393 uses average as base V 47395 anticipate start of recession N 47395 anticipate start before end V 47397 is member of Group N 47400 foresee growth through rest V 47401 expect rise in 1990 N 47401 expect rise after adjustment V 47402 signal recoveries by periods V 47403 entered months before onset N 47403 turned months before recoveries N 47406 reached peak in 1929 V 47408 been performance of index N 47408 is part of index N 47412 is indicator of prospects N 47414 assigned mark of 80 N 47415 lost power because impact V 47417 diminished relevancy to outlook N 47420 building share of market N 47420 building share through growth V 47421 acquire interest in Birkel N 47424 is producer of pasta N 47424 is producer with sales V 47425 has workers at units V 47425 is producer of sauces N 47426 strengthens position in market N 47428 reduced rating on million N 47429 confirmed rating at C. V 47430 downgraded ratings on debt N 47431 reduced ratings for deposits N 47435 AVOIDED repeat of Monday N 47437 erased half of plunge N 47441 following plunge on Monday N 47443 withdrew offer for Air N 47443 citing change in conditions N 47444 slid 22.125 to 76.50 V 47445 get financing for bid V 47446 fell 56.875 to 222.875 V 47448 tumbled % in quarter V 47451 decrease production in quarter V 47460 slid % in quarter V 47463 solidify dominance of market N 47464 posted loss for quarter N 47464 reflecting addition to reserves N 47466 acquire Warehouse for million V 47466 expanding presence in business N 47473 are guide to levels N 47504 reached agreement with Corp. N 47504 develop standards for microprocessor V 47505 is entry in market N 47506 is leader for microprocessors N 47506 forms heart of computers N 47507 acquire stake in Alliant N 47508 license technologies to Intel V 47509 use microprocessor in products V 47511 expand position in markets N 47511 acquired division from Corp. V 47512 make contribution to earnings N 47513 earned million on revenue V 47515 had sales in year V 47516 built stake in company N 47517 owned a under % N 47517 owned a for years V 47518 notified Burmah of reason V 47519 merged operations with those V 47520 owns % of Calor N 47521 owns brand of oils N 47521 reported rise in income N 47522 sell Group to Inc. V 47523 expecting million to million N 47525 divest itself of operations N 47526 is sale of products N 47527 Citing provision for accounts N 47527 posted loss for quarter N 47528 sustained loss of million N 47530 reflect doubt about collectability N 47533 announced creation of group N 47533 bring interests in region N 47534 comprise all of operations N 47537 sell operations to PLC V 47538 standing trial in Namibia V 47545 were victims of suppression N 47546 declared representative of people N 47547 remove Korps from Angola V 47547 end control of Namibia N 47550 defended leaders in court V 47554 is the in series N 47556 washing hands over results V 47557 redress record in Namibia V 47558 investigates complaints from sides V 47559 reflected stability of market N 47562 continued lockstep with dollar N 47562 giving some of gains N 47563 have effect on economy V 47568 cut consumption of pork N 47569 gave some of gains N 47571 rose 4 to 367.30 V 47579 giving 10 of that N 47579 giving 10 at close V 47587 be harbinger of things N 47587 called halt to string N 47589 following days of gains N 47590 dampened spirits in pits N 47592 increased ceiling for quarter N 47593 sends shivers through markets V 47594 took note of yesterday N 47596 declined cents to 1.2745 V 47598 provided help for copper N 47604 declined tons to tons V 47611 was factor in market N 47612 is part of area N 47613 absorbing effect of hurricane N 47614 kept prices under pressure V 47620 buy tons of sugar N 47620 buy tons in market V 47623 was drop in market N 47625 hurt demand for pork N 47626 dropped limit of cents N 47629 take advantage of dip N 47630 report earnings per share N 47630 report earnings for quarter V 47630 report earnings per share N 47636 extended offer for Inc. N 47637 has value of million N 47638 is partnership of unit N 47640 owns % of shares N 47643 posted increase of earnings N 47644 earned million in quarter V 47645 credited number of loans N 47646 depressed originations to billion V 47647 enjoyed increase throughout 1989 V 47647 topped billion at end V 47649 entered atmosphere during repair V 47650 involves use of bag N 47653 curtail use of substance N 47654 see process as step V 47655 discovered northeast of Field N 47656 run test on wells V 47656 is miles from Field N 47657 are barrels of oil N 47658 estimated reserves of barrels N 47658 estimated reserves of barrels N 47659 owns interest in field N 47662 reduce income for months N 47669 acquire ISI for U.S V 47674 make offer for shares N 47675 sell stake in ISI N 47675 sell stake to Memotec V 47677 accept inquiries from others N 47679 resumed purchase of stock N 47679 resumed purchase under program V 47682 buy shares from time V 47686 purchase division of Corp N 47692 complements efforts by group N 47698 follows strike against company N 47702 replaced anxiety on Street V 47703 accept plunge as correction V 47706 gained strength at p.m. V 47706 slapped Shopkorn on back V 47708 opened morning on Board V 47713 handled volume without strain V 47717 plunged drop in history N 47720 fell % in trading V 47722 learned lessons since crash V 47723 are cause for selling N 47725 owns supplier of equipment N 47727 played part in comeback V 47729 kicked Monday with spree V 47729 began day by amounts V 47732 buy some of chips N 47736 eyed opening in Tokyo N 47737 plunged points in minutes V 47742 proved comfort to markets N 47743 delayed hour because crush V 47747 was sea of red N 47749 sending message to Street V 47757 running pell-mell to safety V 47759 started recovery in stocks N 47759 started recovery on Tuesday V 47762 posted loss on Street N 47769 triggering gains in Aluminium N 47770 had one of imbalances N 47770 had one on Friday V 47770 was one of stocks N 47772 prompting cheers on floors V 47773 get prices for shares V 47774 was bedlam on the V 47776 spurred buying from boxes N 47776 trigger purchases during periods V 47786 anticipating drop in Dow N 47787 withdrawing offer for Corp. N 47790 took events in stride V 47795 puts some of LBOs N 47795 puts some on skids V 47798 acquire % for 11.50 V 47799 begin offer for Skipper N 47799 begin offer on Friday V 47801 rose cents to 11 V 47803 turned proposal from Pizza N 47804 settled dispute with Hut N 47806 had income of 361,000 N 47809 considered protest in history N 47809 press demands for freedoms N 47811 demanded dismissal of leader N 47812 was right of people N 47814 raised possiblity of unrest N 47816 cover percentage of flights N 47816 represent expansion of ban N 47817 fined 250,000 for conviction V 47819 resumed countdown for launch N 47819 dismissed lawsuit by groups N 47821 extend ban on financing N 47824 endorsed ban on trade N 47824 endorsed ban in attempt V 47824 rescue elephant from extinction V 47826 held talks with Gadhafi V 47827 was trip to Egypt N 47828 announced reduction in formalities N 47830 allow visits between families N 47830 allow visits on peninsula V 47831 be the since 1945 N 47833 resumed activity in Africa V 47833 raising fears of backlash N 47834 bringing chaos to nation V 47837 approved limits on increases N 47837 approved limits without provisions V 47838 considered test of resolve N 47840 controls seats in legislature N 47841 opened round of talks N 47841 opened round in effort V 47842 present proposal during negotiations V 47843 selling arms to guerrillas V 47847 rose % in September V 47849 sell divisions of Co. N 47849 sell divisions for 600 V 47850 completing acquisition of Inc. N 47850 completing acquisition in April V 47850 considering sale of Cluett N 47851 make shirts under name V 47854 bring total of million N 47858 acquired it for million V 47859 had profit of million N 47860 sells clothes under labels V 47861 had sales of million N 47861 had sales in 1988 V 47862 fell cents to 53.875 V 47863 change name to PLC V 47863 write chunk of billion N 47864 posted drop in earnings N 47865 solidify dominance of market N 47868 erase perception of Arrow N 47869 is thing of past N 47870 make lot of sense N 47870 make lot to me V 47871 ousted Berry as executive V 47871 forced Fromstein as chief V 47872 solidified control in April V 47874 pull takeover of Manpower N 47874 produce earnings for companies V 47876 creating drag on earnings N 47877 is excess of cost N 47880 shows handful of pounds N 47880 following write-off of will N 47880 reflects billion of worth N 47881 eradicate some of will N 47881 eradicate some in swoop V 47882 represent chunk with claiming V 47882 overstated extent of will N 47883 bolster prospects during times V 47884 fell % in months V 47884 sliding % in July V 47885 blamed drop in quarter N 47885 blamed drop on growth V 47887 transforming Inc. from underachiever V 47887 guide turnaround at acquisition N 47892 including 815,000 from gain N 47893 were million in 1988 V 47896 was price by 1992 V 47897 achieve price in 1988 V 47899 set target of 50 N 47899 set target by end V 47901 joined Applied as officer V 47903 providing return on capital N 47911 named officer of Applied N 47911 named officer in 1986 V 47912 set growth as objective V 47913 took company in offering V 47915 reached million in year V 47917 hear state of challenge N 47918 order divestiture of merger N 47919 challenge merger on grounds V 47920 order break of mergers N 47920 have authority in lawsuits V 47921 resolve views of courts N 47921 operate chains as businesses V 47924 approved settlement between staff N 47926 cost consumers in prices V 47930 lack authority in lawsuits N 47934 preserve record of condition N 47934 Agreed Gell vs. Corp N 47938 urging leeway for states N 47942 supporting right to abortion N 47942 filed brief in cases V 47944 recognizing right to abortion N 47945 tending furnaces of Co. N 47950 restricts him to child V 47957 truck fish from coast V 47957 import sets from Japan V 47958 be mayor in U.S. V 47969 rises morning at a.m. V 47971 pops downstairs to shop V 47972 is equivalent of 80 N 47972 buys porridge for family V 47983 turned blood-red from peppers V 47985 buys bowl of rice N 47987 relate views from Party N 47988 read speeches from leaders N 47989 have opinion about events N 47990 do part in effort N 47991 chart cycles of employees N 47992 alternating doses of propaganda N 47992 alternating doses with threats V 47998 heads efforts at factory N apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/data/ppa/test0100644 0000000 0000000 00000307332 14523004075 026531 0ustar00rootroot0000000 0000000 48000 prepare dinner for family V 48004 shipped crabs from province V 48005 ran broadcast on way N 48006 is apartment with floors N 48010 tending meters during shift V 48011 are prospects for mobility N 48017 leaves wife in front V 48020 is end of life N 48021 walks upstairs to library V 48025 Inspects Operation of Furnace N 48032 sing birthday to you N 48040 carry fight against imperialists N 48051 including all of engineers N 48053 teaches him at home V 48058 have knowledge for example N 48059 repeats theme of class N 48059 harangues visitor about sanctions V 48060 have warmth for each V 48063 know any of that N 48066 provides care to workers V 48070 leads visitor into ward V 48071 given birth to girl V 48077 receiving number of approaches N 48079 expect interest from banks N 48081 boost presence to development V 48082 fetch price of profit N 48086 gave comfort to markets V 48089 was sign to markets N 48089 easing grip on credit N 48090 inject amounts of money N 48090 inject amounts into system V 48093 view action as hand V 48094 provide money to system V 48095 deliver speech to convention V 48096 say something about policies N 48098 beginning text of speech N 48100 coordinating activities with officials V 48101 signal change of policy N 48104 nudge rate to 8 V 48105 was coordination among agencies V 48110 drop 60 to points N 48116 left chairmanship of the N 48116 view volatility as fact V 48117 regard amount of decline N 48118 expect volatility of magnitude N 48121 expressed concern about pauses N 48124 plans hearings on bill N 48124 subject the to control V 48127 given chance of passing N 48127 is cause for anxiety N 48129 drive dollar through interventions V 48131 put the on board V 48132 have role with audited V 48134 want dollar for gains V 48136 thumb nose at the V 48138 take case to people V 48145 sows seeds for stagnation N 48148 applied controls in 1971 V 48152 yielded benefits to interests N 48152 yielded benefits at expense V 48159 killed inflation at cost V 48164 become victims of policies N 48179 buy % for 10 V 48185 produce ounces of gold N 48185 produce ounces in year V 48187 produce ounce of gold N 48187 produce ounce at mines V 48188 is stake in mine N 48192 credited story in the N 48193 holds stake in concern N 48193 been subject of speculation N 48197 Put it in letters V 48203 answer questions about remarks N 48209 described decline in beginning N 48209 described decline as shock V 48211 is lot of nervousness N 48211 is lot in market V 48213 was one of factors N 48220 had lot of froth N 48220 had lot in weeks V 48227 warned firms over weekend V 48230 paying attention to markets V 48232 is chance of increase N 48233 raised rate to % V 48246 closed books at end V 48247 citing reason for strength N 48250 exacerbate declines in markets N 48254 treating market with caution V 48255 plummeted % to 2093 V 48257 decreased exposure to market N 48258 was lots of optimism N 48263 closed exchange for days V 48263 shook confidence in market N 48266 planned vigil on developments N 48267 sitting night at home V 48270 play note of crisis N 48271 's reason for fall N 48274 facing uncertainty because worries V 48280 staged rally against dollar N 48280 staged rally after news V 48286 sells shares in hope V 48286 buying them at profit V 48287 cool appetite for buy-outs N 48288 are trends on markets N 48298 buy something for price V 48304 Put it in letters V 48306 slipped 1 in slump V 48307 tracks holdings for firm V 48308 sold shares in months V 48319 culminated battle for maker N 48320 put company on block V 48321 held talks with parties V 48322 buy shares through subsidiary V 48325 committed million in loan V 48327 become player in industry N 48334 dropped points in minutes V 48336 mirror 1987 with dive V 48338 include differences in market N 48341 be plus for stocks V 48349 leaving millions of dollars N 48351 sell stock in order V 48351 meet demands from customers N 48352 sold hundreds of millions N 48355 be positive for stocks N 48356 have bearing on market N 48357 get financing for deal V 48358 took minutes from announcement V 48358 drop equivalent of points N 48366 making markets in stocks N 48367 balance orders in stocks N 48369 handle imbalances on floor N 48374 faced likelihood of calls N 48374 put cash for positions N 48376 were sellers than buyers N 48377 dumping positions in race V 48379 plunged 6.625 to 56.625 V 48380 put itself for sale V 48380 nosedived 21.50 to 85 V 48391 executing trades for client V 48393 using stake as club V 48393 left him with loss V 48395 been seller of stocks N 48396 take advantage of differentials N 48401 reinforce perception of investors N 48402 turn upsets into calamities V 48405 threatening drop in dollar N 48406 keep dollar within range V 48407 threatening crackdown on takeovers N 48408 eliminate deductibility of interest N 48409 voicing concern about buy-outs N 48409 force changes in deal N 48411 are points than level N 48414 was 14 at peak V 48420 dominating thinking of analysts N 48420 is plight of market N 48421 focused attention on market V 48422 owe part to perception V 48422 be subject of buy-out N 48423 buy company at premium V 48423 sell piece by piece N 48424 lost million in value N 48424 reflect end of period N 48425 selling divisions to fool V 48426 buy companies around world N 48428 warned clients of danger N 48428 warned clients before crash V 48429 compares drop-off to corrections V 48432 hit level of 2791.41 N 48435 tumble points in event V 48436 bracing themselves for selling V 48436 detect panic over weekend N 48437 have reserves as cushion V 48438 sell million of stocks N 48438 sell million in crash V 48438 quadrupled level of fund N 48443 inject amounts of money N 48443 inject amounts into system V 48444 turned problems among firms V 48445 named chairman of supplier N 48449 reached conclusion about unraveling N 48454 like looks of deal N 48456 made total on buy-out V 48456 put million of funds N 48456 put million into deal V 48458 take nature of industry N 48459 's one of proposals N 48460 has history of ties N 48460 stretched guidelines in hopes V 48462 was job of chief N 48462 put face on news V 48472 caught group off guard V 48484 including representatives of counsel N 48485 pitched proposal to banks V 48489 provided share of financing N 48502 made views in conversations V 48503 seek increases in round V 48509 citing degree of risk N 48514 assume type of recession N 48514 assume type in future V 48515 increase % over years V 48516 increase average of % N 48516 increase average despite downs V 48519 include profit for lenders N 48519 means cash for shareholders N 48520 has flop on hands V 48522 paid fees of million N 48522 paid fees for commitments V 48524 includes refinancing of debt N 48525 expressed interest in transaction N 48525 attended meeting with representatives N 48527 were lot of indications N 48527 were lot before both V 48529 was effort among banks N 48530 was deal for lenders N 48534 lose money in quarter V 48534 get money for buy-out N 48536 paid % to % N 48539 lending amounts of money N 48552 diminish appeal to speculators N 48563 raising price of imports N 48564 telegraph distaste for securities N 48564 signal confidence in system N 48565 sell dollars for currencies V 48567 reduce demand for dollars N 48568 increase demand for currency N 48573 taking currency with it V 48576 was function of dragging N 48582 be sense of coming N 48583 stem impact of declines N 48588 be flight to quality N 48594 increase pressure on dollar N 48596 called counterparts in the N 48597 gone home in the V 48599 be signal of point N 48600 trigger liquidation with fundamentals V 48603 shifting funds for differences V 48609 increase demand for dollars N 48613 Barring catastrophe in market N 48618 take advantage of differences N 48619 buying stocks in companies N 48620 take advantage of discrepancies N 48623 put collateral for securities V 48625 sell stock at price V 48626 buy stock at price V 48630 buying contract at price V 48630 take delivery of 500 N 48632 sell contract at price V 48633 sell contract at price V 48645 transferring all of accounts N 48646 making transfers as result V 48648 underscored need for exchanges N 48648 hasten clearing of contracts N 48650 done harm than good N 48656 triggering round of selling N 48659 hitting limit of points N 48662 imposed halt in contract N 48662 imposed halt after drop V 48663 caused consternation among traders V 48664 halted trading in contract N 48668 driven prices in pit V 48669 hedging risks in markets N 48670 deluged pit with orders V 48671 sell contracts at limit V 48672 killed chance of rally N 48672 drove prices to limit V 48674 touched limit of points N 48676 doubled requirements for futures N 48676 doubled requirements to 8,000 V 48679 begun cross-margining of accounts N 48679 processes trades for exchanges V 48681 face requirements on each V 48682 facing calls for positions N 48682 led studies of markets N 48685 making failure in history N 48691 needed help in battle N 48692 made contributions to each V 48695 pressed subversion of process N 48700 invested 359,100 in partnership V 48701 solicited 850,000 in contributions N 48702 solicited 200,000 in contributions N 48705 cost taxpayers with accounting V 48707 obscures seriousness of allegations N 48710 selling million in debentures N 48710 selling million near communities V 48717 were part of job N 48717 second-guess personality of legislator N 48718 reaches conclusion in case V 48721 cool panic in both N 48728 handle imbalances on floor N 48732 left offices on day V 48733 surrendered a of gains N 48733 chalking loss on day N 48733 chalking loss in volume V 48745 spurred concern about prospects N 48746 get financing for bid N 48749 rid themselves of stock V 48759 hit stocks on the V 48765 buy baskets of stocks N 48765 offset trade in futures N 48775 watch updates on prices N 48787 are differences between environment N 48787 are opportunities in market N 48788 set relations with customers N 48788 reinforces concern of volatility N 48801 take look at situation N 48805 Concerning article on leeches N 48809 sell aircraft to buyers V 48812 sell fleet of 707s N 48814 includes assumption of million N 48816 have billion in assets N 48822 bring it to attention V 48823 representing % of value N 48832 totaled tons in week V 48835 raise million in cash N 48839 peppered funds with calls V 48850 take place at prices V 48856 built cash to % V 48857 posted inflows of money N 48864 scaled purchases of funds N 48872 croak stocks like that N 48877 infuriated investors in 1987 V 48878 opened centers across country N 48881 increased staff of representatives N 48882 moved money from funds V 48885 calm investors with recordings V 48887 had recording for investors V 48890 averaged gain of % N 48895 talk them of it V 48901 report earnings of cents N 48903 reported income of million N 48904 receiving aircraft from maker V 48905 caused turmoil in scheduling N 48912 put pressure on company V 48916 miss one at all V 48918 has set for delivery N 48918 has set at end V 48918 have plane on time V 48920 deliver a on time V 48921 take delivery of another N 48921 anticipating changes in timetable N 48923 finish aircraft at plant N 48933 expect resolution to anything N 48934 represents contract of any N 48940 represents workers at unit N 48940 extend contract on basis V 48949 allow competition in generation N 48949 allow competition as part V 48956 raise billion from sale V 48959 had revenue of billion N 48960 be move around world N 48960 deregulate generation of electricity N 48961 is thrust on side N 48961 mulling projects in countries N 48964 building plants in the N 48964 producing megawatts of power N 48964 building plants at cost V 48965 report earnings of million N 48966 had income of 326,000 N 48966 had income on revenue V 48972 is operator with interest N 48975 is venture with trust N 48978 get approvals for development N 48978 buy land at prices V 48979 buy properties in state N 48979 buy properties for cash V 48980 is the of kind N 48983 putting % of capital N 48984 is one of ways N 48984 assure pipeline of land N 48984 fuel growth at risk V 48986 increased reliance on plastics N 48991 lost quarter of value N 48991 lost quarter since 1 V 48999 took job in 1986 V 49001 make bags among items N 49008 cover half of needs N 49010 putting orders for polyethylene N 49015 announced increases of cents N 49015 take effect in weeks V 49025 described payout at time V 49025 share bonanza with holders V 49026 saw payment as effort V 49027 become topic of speculation N 49027 deflected questions in meeting V 49028 viewed response as nothing V 49031 confronts disaster at plant N 49035 adds dimension to change V 49037 introduce imponderable into future V 49042 resume operation by end V 49045 strengthen sway in business N 49047 tightening grip on business N 49049 is distributor in the N 49053 expand business in the V 49055 moving 11 of employees N 49057 discussing plans with firms V 49058 do job at cost V 49059 spending million on time V 49061 moved it to headquarters V 49062 moved employees of group N 49063 hired buyers for unit V 49063 wooing them from jobs V 49067 allocating share of market N 49067 allocating share to countries V 49068 negotiated cut in quota N 49068 made increase to allotment V 49069 negotiate share of market N 49070 completed talks with the N 49071 supplied % of tons N 49072 allocate % to suppliers V 49073 have quotas with the V 49075 extend quotas until 31 V 49077 termed plan despite fact V 49078 was one of countries N 49078 conclude talks with the N 49078 doubled quota to % V 49079 had % under quotas V 49079 get increase to % N 49081 increase allowance from share V 49082 filling quotas to extent V 49083 supplying % of market N 49084 total % of market N 49087 cut quota to % N 49087 cut quota from % V 49088 provide % of steel N 49088 provide % under program V 49090 had % of market N 49092 have % of market N 49093 give leverage with suppliers N 49093 withdraw subsidies from industries V 49095 had income of 272,000 N 49095 had income in quarter V 49097 be cents on revenue N 49098 reflect decline in sales N 49099 expects line of business N 49101 place machines in hotels V 49103 realize minimum of 10 N 49104 make use of system N 49105 provide system for telephone V 49106 producing line of telephones N 49107 produce 5 of earnings N 49107 produce 5 for machine V 49109 purchase shares of stock N 49111 purchase stock at discount V 49113 require spoonfuls per washload V 49114 had success with soapsuds V 49115 bring superconcentrates to the V 49116 won stake in markets N 49120 study results from market N 49123 hit shelves in 1987 V 49125 embraced convenience of products N 49125 gained prominence over powders N 49126 market product under name V 49127 dump detergent into machine V 49127 takes cup of powder N 49128 launch detergent under name V 49130 hook consumers on combinations V 49137 introduces product in the V 49138 taking share from the V 49138 has % of market N 49144 expected barrage of demands N 49144 reduce surplus with the N 49146 had tone from visit V 49149 get action by summer V 49149 have blueprint for action V 49152 offered theories for difference N 49154 saw it as tactic V 49157 have strategy in administration V 49160 have list of statutes N 49164 met press for time V 49164 reiterated need for progress N 49164 removing barriers to trade N 49166 promote importance of trade N 49168 summed sense of relief N 49169 drawing chuckles from colleagues V 49177 report loss for quarter N 49178 seeking increases in lines N 49179 estimate amount of loss N 49179 show profit for year N 49180 reported income of million N 49182 was million on revenue N 49183 file report with the V 49184 resolving accounting of settlement N 49185 settle objections to practices N 49185 provide refunds to customers V 49186 correct deficiencies in system N 49191 completed sale of subsidiary N 49194 operates total of stores N 49195 operates stores in the N 49202 post drop in earnings N 49214 pushed prices in period V 49218 be element of earnings N 49232 supplied technology to Soviets V 49234 governing exports of tools N 49236 supplied the with devices V 49236 build parts for aircraft N 49237 cited report as source V 49237 exported million in systems N 49237 exported million to industry V 49239 discussing allegations with government V 49241 called attention to matter V 49243 support position of hawks N 49245 sent signals about policies N 49245 reflecting divisions among agencies N 49246 moved administration in direction V 49246 allow exceptions to embargo N 49247 liberalize exports of computers N 49250 issue warrants on shares N 49252 buy share at price V 49253 carry premium to price V 49256 issued warrants on shares N 49259 is one of handful N 49260 filed suit against speculator V 49263 serving term for violations V 49265 seeks million in damages N 49268 visited it in 1983 V 49269 signed letter of intent N 49269 acquire stake in company N 49271 purchased bonds in transactions V 49271 realized million in losses N 49273 combining stake with stake V 49274 given % of company N 49276 own % of company N 49277 represent % of company N 49281 stay way for months V 49282 support prices into 1990 V 49284 place orders over months V 49286 be level since 1970s N 49287 were bushels on 31 V 49289 boost production by bushels V 49290 estimates production for year N 49290 estimates production at bushels V 49299 reduce yield from crop V 49302 given indication of plans N 49302 place orders for wheat N 49302 place orders in months V 49305 been a of estimate N 49307 cut price of concentrate N 49307 cut price to 1.34 V 49311 stimulate demand for product N 49315 Barring snap in areas N 49318 capped week of prices N 49322 reach 21.50 on the N 49325 having difficulties with exports N 49326 foresee tightening of supplies N 49329 been subject of speculation N 49329 been subject for weeks V 49331 lead buy-out of company N 49333 recommend it to shareholders V 49336 is part of board N 49339 analyzed appointment of executive N 49339 becomes member of board N 49340 has reputation as manager V 49341 pave way for buy-out N 49343 have affect on them V 49344 had impact on us N 49345 have problem with announcement N 49351 awarded account to office V 49353 ended relationship with office N 49354 billed million in 1988 V 49356 win account in 1981 V 49366 have effect on revenue V 49367 been source of revenue N 49368 store data for computers V 49371 elected director of provider N 49371 increasing board to members V 49373 filed part of report N 49373 filed part with the V 49374 provide statements by end V 49377 named chairman of processor N 49378 resigning post after dispute V 49380 named 57 as director V 49387 earned million on sales V 49388 concerns one of defenses N 49389 considering all in light N 49398 offset weakness in linage N 49400 posted gain in income N 49401 reported increase in revenue N 49402 was demand for linage N 49406 gained % to billion V 49409 included gain of million N 49411 reflected softness in advertising N 49414 reported net of million N 49414 reported net for quarter V 49417 expect increase for rest V 49418 ease damage from linage N 49421 report earnings for quarter N 49429 angered officials in the N 49430 signed notices for plants N 49430 cast doubt on futures V 49432 using % of capacity N 49434 stepping pace of consolidation N 49435 is competition from plants N 49436 want provisions in contract V 49437 get strategy in place V 49439 became head of department N 49439 blasting insensitivity toward members N 49441 told workers of moves V 49446 build generation of cars N 49447 build the at plant V 49449 have product after 1993 V 49450 build types of products N 49450 build types on notice V 49455 taken beating as result V 49456 used plant as symbol V 49457 raised obstacle to acquisition N 49463 marked time in history N 49464 reached conclusions about attempts N 49465 is change in policy N 49471 be settlement of dispute N 49472 citing concerns about amount N 49474 contain guarantees on levels N 49478 canceled plans for swap N 49478 resume payment of dividends N 49479 offer number of shares N 49479 offer number in exchange V 49482 resume payments of dividends N 49483 suspended payment in 1985 V 49491 face competition from drugs N 49493 having impact on company V 49501 generate sales of million N 49506 lowering costs in years V 49506 shedding companies with margins N 49507 allowed sales from drug N 49510 be % above million N 49510 was result of sales N 49514 earned million in period V 49515 has problems with estimate N 49516 achieve increase in earnings N 49524 restricting prescriptions of medicines N 49528 expects loss for quarter N 49529 expecting profit for period N 49531 reported income of million N 49531 reported income in period V 49534 accepted resignation of president N 49539 earned million on sales V 49540 has garden of course N 49543 remembers playground by eccentrics N 49544 has sense of recall N 49545 transforms her into the V 49547 owing inspiration to cultures V 49549 calls herself in book V 49551 reinvented man as hero V 49552 remembered her as figure V 49555 analyzed families by arrangements V 49557 have bedrooms at all V 49561 rhymed river with liver V 49561 carried change of clothing N 49561 carried change in envelope V 49563 excised heads of relatives N 49563 excised heads from album V 49564 loses momentum toward end V 49568 resuscitate protagonist of work N 49570 take psychiatrist on date V 49576 pay million as part V 49576 regarding cleanup of smelter N 49577 was part-owner of smelter N 49579 make unit of concern N 49579 exempting it from liability V 49580 made undertakings with respect N 49581 issued statement on agreement N 49583 recover contribution from others N 49583 recover contribution for amount V 49584 issuing dividends on stock V 49589 hold meeting for shareholders N 49590 saluted plunge as comeuppance V 49591 prove harbinger of news N 49592 is reaction to valuations N 49595 do something about buy-outs N 49595 do something about takeovers N 49598 lopped billions of dollars N 49598 lopped billions off value V 49601 been change in economy N 49603 applaud setbacks of speculators N 49607 projected periods of decline N 49608 pushing price of housing N 49611 is amount of space N 49612 are stores for rent N 49621 follows decline in months N 49622 limiting demand for space N 49627 exacerbates problem for landlords V 49628 is comfort to landlords N 49630 bemoaning loss of businesses N 49632 been jump from rates N 49635 command rents of 500 N 49636 offers rents of 100 N 49643 representing shares with symbol V 49645 listed shares of companies N 49650 listed shares of company N 49652 marks start of year N 49653 finds influence in dissent V 49655 assume role after years V 49656 accept role in ways V 49658 are newcomers to dissent N 49658 joining forces in decade V 49662 cast votes in cases N 49663 cast votes in decisions N 49664 defending importance of dissents N 49664 defending importance in speech V 49667 was dissenter from opinions N 49669 sweep it under rug V 49671 is flavor to dissents V 49675 curtail right to abortion N 49680 be liberal of four N 49680 enjoys challenge than others V 49681 is one in history N 49683 sold deposits of institutions N 49683 sold deposits in wave V 49683 prevented sale of a N 49686 bought thrift in transaction V 49688 leave bulk with government V 49690 paid premiums for systems V 49691 been case with deals N 49694 been one of payers N 49695 targeted thrifts for sales V 49695 spend cash by deadlines V 49698 continued foray into markets N 49699 had assets of billion N 49700 pay premium of million N 49700 pay the for billion V 49702 had assets of million N 49703 pay premium of million N 49703 pay the for billion V 49704 acquire million of assets N 49704 acquire million from the V 49704 require million in assistance N 49705 had billion in assets N 49706 pay premium of million N 49706 assume billion in deposits N 49707 purchase million of assets N 49708 had million in assets N 49709 assume million in deposits N 49710 purchase million in assets N 49710 receive million in assistance N 49710 receive million from the V 49717 lowering guarantee to advertisers N 49717 lowering guarantee for year V 49718 de-emphasize use of giveaways N 49718 cut circulation by 300,000 V 49718 increase cost of rate N 49718 increase cost by 4 V 49719 increase rates in 1990 V 49720 be % per subscriber V 49722 hold rates for advertisers V 49723 become forms in world V 49724 wean itself from gimmicks V 49725 selling magazine with radio V 49727 takes focus off magazine V 49728 paint cut as show V 49731 cut circulation from million V 49736 's show of weakness N 49736 improving quality of circulation N 49740 announce levels for 1990 N 49740 announce levels within month V 49741 called the for briefing V 49743 considered laughingstock of news N 49745 draws audiences around world N 49751 reposition itself as channel V 49753 held job in journalism N 49754 is the in number N 49756 paying salaries after years V 49757 break stories with team V 49758 use us as point V 49758 become point of reference N 49767 spend average of minutes N 49769 put it at disadvantage V 49773 filled schedule with newscasts V 49775 create programs with identity V 49776 adding show in morning N 49779 featured show during period V 49786 produce segments with eye V 49787 generate excitement for programs N 49787 generate excitement in way V 49788 's departure from past N 49789 spend money on production V 49793 make investment in people N 49794 fear tinkering with format N 49795 market cable-TV on opportunities V 49797 Backs View in Case N 49803 leave realm of reporting N 49803 enter orbit of speculation N 49805 leaving transaction in limbo V 49806 withdrew application from the V 49807 lend money in amounts N 49808 included million in deposits N 49809 save million in costs N 49810 seek buyer for branches N 49813 posted loss of million N 49815 trying tack in efforts N 49816 numbering 700 to 1,000 N 49817 have ring to it N 49818 renewed arguments in states V 49823 justify dismissal of actions N 49824 lacked information about the N 49824 sent cases to court V 49825 exceeded assets by billion V 49825 closed it in 1988 V 49827 dismisses arguments as defense V 49828 including reversal of foreclosure N 49829 asking court for number V 49830 take the as prize V 49831 named president of company N 49835 brandishing flags of the N 49835 gave activists upon return V 49836 spent years in prison V 49839 considered leader of the N 49841 ease shortages across nation N 49843 be room for flexibility N 49843 allow funding of abortions N 49843 are vicitims of rape N 49844 reiterated opposition to funding N 49844 expressed hope of compromise N 49845 renewed call for ouster N 49846 have right to abortion N 49849 seize fugitives without permission V 49851 following postponement of flight N 49853 dispatch probe on mission V 49855 facing calls for reduction N 49856 purge party of elements N 49864 made remarks to gathering V 49866 presented proposals for timetable N 49867 increases power for Moslems V 49870 oppose control of chain N 49871 is move in battle N 49875 announced formation of association N 49875 preserve integrity of system N 49876 cause damage to system N 49878 seeking approval for withholdings N 49882 trigger drop in the N 49882 play role in decline N 49883 viewed data as evidence V 49885 is demand in economy N 49886 be easing of policy N 49892 measures changes in producers N 49896 is rise than increase N 49898 leaving pace of inflation N 49903 being advance in prices N 49914 report loss of million N 49919 provide million for losses V 49922 mark portfolio of bonds N 49922 mark portfolio to market V 49922 divest themselves of bonds V 49924 shed operations outside markets N 49924 taking charge for operations N 49927 suspend payments on classes N 49932 have concerns about health V 49935 had loss of million N 49936 holds one of portfolios N 49937 pared holdings to million V 49941 provide values for holdings N 49943 divest themselves of bonds N 49947 added million to reserves V 49948 sell 63 of branches N 49948 sell 63 to unit V 49949 is centerpiece of strategy N 49949 transform itself into S&L V 49950 expected decision on transaction N 49951 interpret delay as indication V 49953 reduce assets to billion V 49954 give capital of million N 49955 reduce amount of will N 49955 reduce amount by million V 49958 place some of them N 49958 place some in affiliate V 49959 name any of cheeses N 49959 name any after nibble V 49961 wins slot in ratings N 49962 impose quotas against invaders N 49969 seeking classmates for reunions V 49972 won bet with host N 49972 identify dialects over telephone V 49973 pile 150 on coin V 49974 selling weight in pancakes N 49979 featuring songs from each N 49980 make fools of themselves N 49983 make part of time N 49991 chronicles fight of investigator N 49999 is bane of television N 50004 authorized channels for time V 50004 allow television alongside channels V 50005 is appetite for programming N 50009 caught end of series N 50011 expanding collaboration between contractors N 50012 have sales of billion N 50015 strengthen ties between companies N 50015 make force in contracting N 50016 reshaped world of manufacture N 50019 stirring controversy in industry N 50022 join fight as part V 50023 had talks about bid V 50025 included million in contracts N 50026 is competitor on contracts N 50026 heighten worries about concentration N 50028 is name of game N 50031 is response to environment N 50034 building cooperation with Europeans N 50037 justify ownership of venture N 50039 include family of missiles N 50044 shift emphasis to gas V 50046 been swing of pendulum N 50049 is output of crude N 50050 transports % of all N 50054 intensify reliance on oil N 50057 increase dependence on crude N 50058 add barrels of capacity N 50058 add barrels to system V 50059 has capacity of barrels N 50061 had income on sales N 50062 reduced shipments by tons V 50065 see improvements in segments N 50067 had net of million N 50068 Predicting results of firms N 50071 taking this as sign V 50073 expects revenue for quarter N 50075 is example of difficulty N 50081 show earnings for period N 50085 expects earnings of 14 N 50086 shape industry in year V 50089 had lock on market N 50090 carry seller with them V 50093 improving quality of material N 50094 receiving calls about product N 50095 control functions of computer N 50095 spells trouble for firms N 50098 report earnings of cents N 50101 is highway within computer N 50106 tighten hold on business N 50111 report loss of cents N 50122 following declines throughout 1980s N 50125 is news for state N 50126 was state in the N 50129 lost % of population N 50129 lost % during 1970s V 50138 aged 65 to 74 N 50150 place success above family V 50152 spend time with families V 50153 are priorities for group N 50157 represent % of population N 50157 control one-third of income N 50163 give 2,500 to charity V 50165 hold jobs in management N 50166 make % of officials N 50169 was 16,489 in 1988 N 50171 are students in college N 50175 warned citizens against game V 50179 is blow to sport N 50184 admit patrons in jeans N 50187 open can of worms N 50188 is stranger to cans N 50189 gave favors to friends N 50193 taken care in Man V 50198 wear flowers in hair N 50198 wear them behind ear V 50199 have quality of color N 50202 be tension between blacks N 50204 's inheritor of tradition N 50204 's man in water N 50205 was spokesman for campaign N 50211 called shvartze with mustache N 50212 articulate analysis of behavior N 50214 is form of racism N 50218 is humor of underdog N 50219 cut both to ribbons V 50220 is form of mischief N 50222 facilitating co-existence of groups N 50223 taboo mention of differences N 50229 courting mother against wishes V 50234 made theme of courtship N 50234 lost suit on grounds V 50238 is tendency of sitcoms N 50239 enlighten us about stereotypes V 50240 quits job as salesman N 50240 quits job in order V 50241 is incompatibility between preachiness N 50244 putting episodes about topics N 50246 interrupt shtik with line V 50246 sound shmaltzy on lips V 50249 signal change in condition N 50256 elected president of maker N 50259 been executive since 14 V 50261 approve bill without cut N 50264 putting bill in category V 50270 keep cut in version V 50271 need this as way V 50273 make approval of cut N 50286 resisting bill without vote N 50287 win issue on floor V 50290 give benefits to executives N 50294 boost funding in areas V 50297 required sacrifice by senator N 50300 make tax on calls N 50302 pay benefits for retirees N 50303 raised million in 1990 N 50309 acquire securities for an N 50312 Speed collection of tax N 50314 Withhold taxes from paychecks V 50315 Change collection of taxes N 50316 Restrict ability of owners N 50317 impose tax on departures V 50319 curbing increases in reimbursements N 50320 impose freeze on fees N 50321 reducing deficit by billion V 50325 collect million from users V 50326 Raising million by increasing V 50326 establishing fees for operators N 50330 found cutbacks in companies N 50332 bothered me about piece V 50333 showing number of months N 50333 captioned graph as Time V 50335 was one of periods N 50340 reduced rating on million N 50340 citing turmoil in market N 50341 reduced rating on debt N 50341 keep debt under review V 50342 is holder of bonds N 50343 divest themselves of securities N 50343 divest themselves over period V 50346 was reason for downgrade N 50348 was a on part N 50349 suffered attack of nerves N 50358 see support until 2200 N 50362 take money before crash V 50364 was massacre like those N 50373 marks start of market N 50375 was combination in 1987 V 50377 was enthusiasm for funds N 50378 protect investor against losses V 50386 carry the to 2000 V 50390 's case at all V 50391 sees this as time V 50401 do buying on behalf V 50403 is manifestation of capacity N 50404 see this as reaction V 50405 lodged lot of securities N 50405 lodged lot in hands V 50405 are objects of takeovers N 50405 loaded corporations with amounts V 50408 is resiliency in economy N 50411 buy companies around world N 50416 are opportunity for guys N 50418 sees problems with possibility N 50426 depend deal on the V 50430 drew criticism from clients V 50431 keeping money in equivalents V 50435 supported rights of witnesses N 50438 repeat platitudes as indication V 50440 heaping scorn on witnesses V 50441 sandwiched praise of meat N 50441 sandwiched praise between loaves V 50453 seeks information for change V 50456 obtaining information from officials V 50458 identify sources of waste N 50464 is player on stage N 50464 enhance itself into body V 50473 draw inference against officials V 50473 assert privilege against self-incrimination N 50473 assert privilege in hearings V 50474 be witness against himself N 50475 precludes drawing of inference N 50476 take stand as witness V 50477 protect defendant in matters V 50480 permit drawing of inference N 50481 take the in matter V 50481 subject him to prosecution V 50482 take the in matter V 50482 harms him in matter V 50484 asserted the in proceeding V 50484 receiving advice from counsel N 50485 convict him of crime N 50486 Drawing inference in hearing V 50486 offend shield against self-incrimination N 50494 took falls on you-know-what V 50495 be plus for stocks N 50496 be days for prices N 50499 played part in activity N 50510 was lot of volume N 50510 makes markets in thousands V 50512 handle volume of calls N 50513 is one for companies N 50513 following complaints from investors N 50514 was hour of trading N 50518 do thing at time V 50519 executed order by close V 50520 take call at time N 50521 keep supplies of stock N 50521 keep supplies on hand V 50522 buy shares from sellers V 50524 exacerbating slide in prices N 50526 kept stockpiles on hand V 50548 selling stock throughout week V 50550 put shares on shelf V 50552 sent waves through market V 50556 has handful of stocks N 50559 lost % to 40 V 50560 dropped 1 to 107 V 50566 dropped 1 to 33 V 50566 lost 1 to 19 V 50566 dropped 1 to 66 V 50568 are guide to levels N 50598 scooping stocks during rout V 50601 put checkbooks in hurry V 50604 manages billion of stocks N 50605 spent half for stocks V 50607 shaved million from value V 50609 spent million in half-hour V 50612 is justification on level N 50614 attracting trillion from funds V 50616 added billion to portfolio V 50618 see changes in portfolios N 50621 have year in market N 50627 soften blow of prices N 50630 converted % of pool N 50630 take stock off hands V 50631 make bids on anything N 50634 brought reprieve for managers N 50634 put them at odds N 50636 replacing them at price V 50637 shown losses of % N 50641 turned evidence in investigation N 50641 turned evidence to office V 50643 market version of medicine N 50643 substituted product in tests V 50646 recall strengths of version N 50647 began recall of versions N 50650 challenge legality of defense N 50651 become landmark in law N 50651 challenge practice of companies N 50651 issuing shares to trusts V 50651 dilute power of stockholders N 50653 uphold validity of type N 50654 issue stock to trust V 50654 dilute power of shareholders N 50659 had words for policy-making V 50660 be subject of initiatives N 50664 finger each for blame V 50667 order billion of cuts N 50668 reach agreement on bill N 50672 is warfare between the N 50673 sent signals about response N 50682 brought administration to table V 50683 barring drops in market N 50684 force sides to table V 50688 survive it without problem V 50690 be plenty of blame N 50691 is concern on part N 50694 is prospect of deal N 50696 exclude gains from legislation V 50697 strip gains from legislation V 50700 follow lead of the N 50700 drop variety of measures N 50701 strip bill of provisions V 50702 cut shortfall by billion V 50706 attributing drop in prices N 50706 attributing drop to decision V 50706 postpone action on gains N 50707 holding assets in anticipation V 50708 is more than any N 50711 refinancing billion in debt N 50736 matched brethren in anxiety V 50736 riding storm in market N 50737 losing faith in market N 50743 flee market in 1987 V 50745 lost one-third of value N 50747 representing clubs from the N 50749 welcomed drop in prices N 50750 take advantage of it N 50751 has stocks in mind V 50752 provide financing for buy-out N 50753 is one of number N 50754 's distaste for leverage N 50757 's foundation to it N 50759 quit job as assistant N 50773 win confidence of investor N 50786 extends trend toward downsizing N 50790 carry memory than anything N 50793 takes exception to name N 50807 Consider growth of portables N 50807 comprise % of sales N 50811 precluded use of microprocessors N 50818 take place between players V 50819 considered threat to firms N 50823 taking aim at share N 50831 include drive in words N 50834 hit the by end V 50834 established itself as one V 50837 develop circuits for use N 50840 received contract for sets N 50842 received contract for engines N 50843 pushing rate of inflation N 50843 pushing rate to % V 50845 registered 156.8 at end V 50851 hit highs during trading V 50859 braved market in day V 50861 acquired % of shares N 50863 raise objection to acquisition V 50865 discussed possibility of venture N 50872 expect problems as result N 50874 buying stock on margin V 50875 expect problems with calls N 50877 learned lesson in 1987 N 50879 renew contracts with unit N 50879 renew contracts at end V 50881 put cost of all N 50881 put cost at million V 50888 drop agreements at end V 50896 was setback for program N 50896 is entry into format N 50896 is entry since 1972 V 50897 is way to it N 50897 named president of entertainment N 50898 raise level of show N 50903 post earnings for quarter V 50905 reflect improvement in business N 50906 reported income of million N 50907 report results for quarter N 50912 bring it into competition V 50914 are million to million N 50915 wrest slice of business N 50915 wrest slice from leader V 50920 give discounts to users V 50923 faces variety of challenges N 50924 are replacements for mainframes N 50927 be news for economy N 50929 ease grip on credit N 50934 following plunge in history N 50937 presage shifts in economy N 50948 pour money into economy V 50949 mean change in policies N 50950 bring rates in effort V 50951 lowered rate to % V 50952 charge each for loans V 50953 sustained manufacturers for years V 50956 was case in 1987 N 50956 producing panic among investors N 50956 diminishing flow of capital N 50959 grew % in quarter V 50967 had years of accumulation N 50970 pump credit into economy V 50973 's outbreak of inflation N 50985 taking comfort from success V 50989 seen cutting by buyers N 50991 be quarter with comparisons N 50994 has stake in polyethylene N 50995 was million on sales N 50997 pulling profit for companies N 50997 pulling profit by % V 51002 had growth in pigments V 51006 earned million on sales V 51010 post profit for all N 51012 posted profit of million N 51016 keep pressure on prices V 51019 was million on sales N 51020 faces prices for product N 51020 develop uses for polypropylene N 51025 earned million on sales V 51026 earned million on sales V 51046 pay principal from securities V 51057 's possibility of surprise N 51061 offset jump in imports N 51064 do the in report V 51065 expects increase in the N 51066 expecting gain in the N 51071 quicken bit from pace V 51072 signaled increase in starts N 51077 seeing concept of both N 51081 follows fortunes of team N 51082 anticipate market by fraction V 51084 is depiction of lives N 51087 pulled million before lunch V 51089 keep secret from world N 51089 ordering lunch over phone V 51093 anticipating market by fraction V 51103 takes man until episode V 51109 takes wash to laundromat V 51113 create incentive for producers N 51116 put finger on problem V 51119 bear resemblances to personalities N 51121 searching office for bonds V 51123 covering face with microchips V 51126 is correspondent in bureau N 51127 gave details of plans N 51128 is part of attempt N 51128 is parent of Farmers N 51129 appease concern over acquisition N 51130 invest billion in Investments V 51132 obtained assurances from group N 51132 provide portion of financing N 51134 pay debt from acquisition N 51135 include pieces of Farmers N 51137 be owner of Farmers N 51138 needs approval of commissioners N 51142 take % of earnings N 51142 take % as dividends V 51143 have implications for holders N 51144 pare it to concern V 51145 dragged market below levels V 51149 fall % from level N 51152 adopted incentives on models N 51155 see impact on sales N 51159 reports sales at month-end V 51161 had program in place N 51169 rise average of % N 51177 named + of subsidiary N 51178 been consultant to operations N 51181 has interests in electronics N 51183 opened bureau in capital V 51185 is victory for radio N 51195 peddle newspapers of stripe N 51199 bought stakes in newspapers N 51203 are source of news N 51204 shows depth of some N 51209 's cry from treatment N 51209 filed reports to network N 51209 filed reports by phone V 51218 saves broadcasts for midnight V 51219 entered the with program V 51220 is show with leaders N 51223 cover happenings in towns N 51224 has show with news N 51225 's host of programs N 51226 find tidbits of news N 51228 intersperses the in groups N 51231 know everything about world N 51232 depress resistance of body N 51234 combat strains of idea N 51238 get youth into uniform V 51239 curing inequities of draft N 51240 is aim of backers N 51244 require form of service N 51244 require form from recipient V 51247 attract support among students V 51257 throwing leftovers into kettle V 51259 reflect view of cooks N 51264 contribute average of hours N 51267 provide credit for students N 51269 staff jobs in hospitals N 51269 overpay graduates as workers N 51269 cause resentment among workers N 51272 show support for concept N 51273 organizing roll of associations N 51274 substitute any of omnibus N 51274 substitute any for proposal V 51274 endow foundation with million V 51274 inform citizens of ages N 51274 exhort them to volunteerism V 51276 's need for concessions N 51278 performing works of content N 51279 is fellow at the N 51281 named officer of chain N 51284 purchased % of Services N 51284 purchased % for million V 51285 replaced representatives on board N 51286 provides variety of services N 51287 provides services to clinics N 51288 had loss of million N 51291 leave growth for all N 51291 leave growth at % V 51293 yield investors in year V 51296 has dollars of bonds N 51297 redeemed time at value V 51300 made prerequisite to graduation N 51302 restricted subsidies to students V 51308 pay dues to society N 51311 are uses of money N 51312 question value of work N 51314 see service as cover V 51314 fear regimentation of youth N 51317 recognizing source of confusion N 51331 answers none of them N 51334 Ignore service in the N 51340 is rationale for bills N 51341 exceed income of graduates N 51346 throw refusers in jail V 51347 encourages kinds of behavior N 51348 encourage service by classes N 51349 undercut tradition of volunteering N 51354 involve stipends to participants N 51376 take control of lives N 51377 is service to nation N 51380 is co-author of Books N 51381 laid plans through weekend N 51383 analyzed data on plunge N 51385 avoiding actions over weekend V 51386 reinforce sense of crisis N 51387 pour cash into system V 51389 were portrayals of plan N 51390 providing money to markets V 51391 provides money to system V 51391 buying securities from institutions V 51398 signal change in condition N 51400 carried chance of declines N 51411 have knowledge in markets V 51417 had consultations with chairman N 51418 avoid sense of panic N 51434 's advice of professionals N 51442 see plunge as chance V 51443 been lot of selling N 51446 expect market in months V 51459 take advantage of panics N 51465 has one of records N 51470 lagged market on side V 51475 used contracts in account N 51481 recommends securities of maturity N 51482 is sign to investors N 51484 sell stock for price V 51492 is % to % N 51493 Paying % for insurance N 51495 sold million of stock N 51495 sold million to employees V 51498 borrows money from lenders V 51498 award employees over time V 51498 fork cash for stock N 51501 create incentives for employees N 51502 have stake in success N 51503 pay dividend on stock N 51504 establish house for transactions N 51505 sell shares to parties V 51505 have right to refusal N 51508 named nominees for board N 51510 be pause at the V 51511 stays points from close N 51512 ease opening of the N 51513 is one of number N 51514 handle surges in volume N 51518 resurrect debate over host N 51520 setting requirements for markets N 51522 expressed satisfaction with results N 51523 buy contracts at prices V 51525 separate trades from trades V 51525 resolve imbalances in stocks N 51526 compared action in pit N 51526 compared action to fire V 51535 be cause of crash N 51542 strip markets of products V 51543 was criticism of system N 51545 raised possibility of breakdown N 51547 held recommendations at length V 51550 dismissed mechanisms as sops V 51560 halts trading for hours V 51563 Establish regulator for markets N 51567 Require reports of trades N 51568 monitor risk-taking by affiliates N 51571 review state of the N 51573 be freedom of choice N 51573 be freedom for both V 51577 include members of league N 51580 offering increase in category N 51580 demanded increase in wage N 51584 prevent trade in wildlife N 51586 total billion of business N 51587 build frigate for 1990s V 51588 commit themselves to spending V 51588 show signs of success N 51592 gets pence for every V 51593 carries rate on balance N 51600 celebrate anniversary of patriarchate N 51602 is brainchild of director N 51602 need kind of symbol N 51603 identified himself as customer V 51603 got word on players N 51606 carried prices below % N 51611 keep line off market V 51611 accusing upstart of infringement N 51612 changed lot for owner V 51614 's thing in life N 51615 losing % of sales N 51616 faces might of a N 51617 turned tables on business V 51626 blocking sale of products N 51627 turned request for such N 51634 shares office with teddy V 51635 changed buttons on line N 51635 created line for children N 51638 left plenty of room N 51639 resemble them in size V 51643 threatening action against customers V 51644 take matter to the V 51648 answered threat with suit V 51651 including use of detective N 51653 using colors on goods V 51660 purchased shares of common N 51662 are targets of tender N 51663 extended offers to 4 V 51665 announced offer for control N 51667 acquire % of capital N 51667 acquire % for francs V 51668 put value of francs N 51668 put value on shareholding V 51669 controls % of shareholding N 51670 sold block of shares N 51670 sold block to companies V 51671 bought shares on 11 V 51672 hold stake of shares N 51675 bought operator of chain N 51675 bought operator for million V 51676 becomes shareholder in Sports N 51677 posted revenue of million N 51681 purchase any of stock N 51681 extended agreement through 31 V 51684 increased stake to % V 51686 terminated negotiations for purchase N 51686 operates service under contract V 51689 valued fleet at million V 51690 become the in blend N 51691 increase stake in company N 51691 increase stake above % V 51692 regarding companies with interests N 51694 increase stake in future N 51695 was foundation to rumors N 51696 propose generation of trainers N 51697 buy trainers with value N 51697 buy trainers between 2004 V 51701 perform assembly of trainer N 51703 ended occupation of shop N 51705 voting 589 to 193 N 51707 pose challenge to government N 51711 mark quotations on holdings N 51712 buy securities for fund V 51714 produced dive in the N 51715 trigger rally in market N 51715 move capital into securities V 51717 plummeted % to cents V 51718 make market in securities V 51727 withdrew junk of bonds N 51728 dump some of holdings N 51728 pay redemptions by investors N 51729 tracks values of funds N 51730 climbed 25 than points N 51730 climbed 25 to 103 V 51730 climbed gain of year N 51732 plummeted point to % V 51732 plummeted decline since 1982 N 51733 was drop in the N 51734 get flight to quality N 51736 marks shift in outlook N 51737 be lift for bonds N 51738 manages billion of bonds N 51738 is rationale for rout N 51742 is flight to quality N 51746 receive billion of payments N 51747 is undercurrent of business N 51748 were billion of orders N 51750 is plenty of money N 51756 creating hell of opportunity N 51762 covering some of billion N 51765 pay interest on total N 51767 is the since 1982 N 51770 is damage to businesses N 51772 is readjustment of values N 51775 quoted p.m. at 103 V 51777 followed fall in market N 51780 eying action of the N 51780 repeat injection of amounts N 51783 yield % to assumption V 51794 write value of business N 51795 leads us to piece V 51798 leaving it with billion V 51800 decide issues on merits V 51804 are instance of fingers N 51808 put bill on speed V 51820 see stocks as today V 51823 posted loss of million N 51824 absorb losses on loans N 51825 brings reserve to level V 51825 equaling % of loans N 51826 reduced loans to nations N 51826 reduced loans to billion V 51828 realized gain of million N 51829 dipped % against quarter N 51829 dipped % to million V 51830 rose % to million V 51833 see modicum of normalcy N 51834 gave mandate to party V 51838 was mop-up of corruption N 51844 herald assertions as proof V 51845 deposit million in bank V 51849 monitored conversations of figures N 51854 served victory on a N 51854 condemning affair as hunt V 51857 buttress credibility with the N 51863 revamp pieces of legislation N 51863 revamp pieces in preparation V 51867 is extradition of terrorist N 51868 awaits approval from minister N 51873 frustrating procedures for election N 51874 linked prospects to reaction V 51877 is one of slingers N 51879 following plunge in prices N 51880 inject amounts of money N 51880 inject amounts into system V 51883 skidded 190.58 to 2569.26 V 51890 followed months of declines N 51898 received a from group V 51904 give share to nations V 51906 prevented sale of a N 51913 revealed information about flaws N 51914 misled investors about success V 51926 received attention as statements N 51929 establishes rule of immunity N 51929 say anything without fear V 51930 pay million in fees N 51934 upheld award of fees N 51936 reimburse it for fees V 51937 get 260,000 for costs V 51944 be arrangement among firms N 51945 refer work to each V 51946 conduct seminars on topics N 51948 develop ties with firm N 51949 SIGNAL turnaround for manufacturers N 51950 sought million in damages N 51950 posed risk to students N 51953 join 500-lawyer as partner V 51954 develop practice of group N 51958 spent years at unit V 51960 split time between offices V 51964 offering trial of computers N 51964 offering trial to consumers V 51966 hold % of venture N 51972 forecast sales for venture N 51972 forecast sales for year V 51982 is mix of analysis N 51983 had offers from magazines N 51986 soared % to francs V 51989 reflecting billings for contracts N 51990 had profit of francs N 51991 released figures for half N 51991 made forecast of earnings N 51993 report income of million N 51994 reported loss for loss N 51996 signal turnaround for maker V 52000 report income of milion N 52001 had loss of million N 52003 produce tons of rods N 52004 exceeded ability of operation N 52005 expanding operation at cost V 52006 expanded force to people V 52006 expand sales from portion V 52009 continue strategy for brand V 52016 affect volumes under contracts N 52020 pull piece of tape N 52026 use proceeds from sale N 52028 restructure billion in debt N 52033 eliminates uncertainty with respect N 52038 has reserve against million N 52039 represents phase of program N 52039 reduce exposure through sales V 52041 mean end of mega-mergers N 52041 marks start of game N 52044 is sign for market N 52047 increasing position to % V 52052 was the in series N 52053 taking view of requests N 52054 buy parent of Airlines N 52054 buy parent for 300 V 52060 traded shares at prices V 52062 commit billions of dollars N 52066 sell million of bonds N 52068 arrange million in loans N 52069 arrange billion of loans N 52070 offering 125 for shares V 52070 combine operations with business V 52073 see silver for business V 52076 become hunters in market N 52076 become hunters in market N 52080 retained confidence in buyers N 52084 are sanguine about companies N 52085 Given weakness in both N 52090 accept price from group V 52091 offering 26.50 for shares V 52094 soliciting bids for sale N 52096 signified unwillingness among banks N 52096 provide credit for takeovers N 52098 consider sale of company N 52101 keeping % of portfolio N 52104 are term than purchase N 52105 take advantage of opportunities N 52106 evaluate market in location N 52106 evaluate market from perspective V 52107 take advantage of opportunities N 52151 create opportunities for corporations N 52157 reduced volume at operations N 52160 investigate million in gifts N 52161 is subject of lawsuit N 52162 buy influence with lawmakers N 52163 based this on statement V 52171 filed suit against others V 52175 returned 76,000 in contributions N 52175 gathered money for him V 52179 donated 112,000 to campaigns V 52180 broke friendship in 1987 V 52181 told number of people N 52182 gave 850,000 in funds N 52182 gave 850,000 to organizations V 52183 received 47,000 in donations N 52184 disclosed 200,000 in donations N 52190 made disclosure of role N 52192 volunteered help to the V 52192 portrayed role in 1987 N 52196 estimated value of pact N 52197 begin delivery of cars N 52199 opened doors to investors V 52204 cite uncertainty about policies N 52205 have all in basket V 52211 is source of toys N 52212 illustrate reliance on factories N 52213 fell % from 1987 N 52213 fell % to billion V 52214 jumped % to billion V 52215 fell % to billion V 52215 rose % to billion V 52224 regards year as period V 52225 excite sales in the N 52228 placing warriors among toys V 52229 make year for Playmates N 52230 improve year from 1988 V 52231 cite dominance of market N 52234 provided days in months V 52241 have right to abortion N 52242 recognizing right to abortion N 52245 filed brief in appeal V 52247 garnered votes of three N 52248 is standard than test N 52251 dropped % to million V 52253 rose % to billion V 52256 affected line by million V 52259 rose points to % V 52260 is period for them V 52261 buffing impact of decline N 52274 take interest in program-maker N 52276 aggravate rift between studios N 52277 sit month for meeting V 52280 get shows in lineups V 52289 wants part of mess N 52310 grabbing chunk of riches N 52317 including study of series N 52322 has lots of clout N 52334 starts study of findings. N 52340 were part of company N 52350 pursue lifting of suspension N 52352 had net of 72 N 52354 included charge of 35 N 52365 reported net of 268.3 N 52376 see spirit of people N 52380 formed core of the N 52380 is unbanning of movement N 52384 stopping tide of night N 52389 create climate of peace N 52454 have appreciation of history N 52479 expect installations of lines N 52481 show signs of weakening N 52491 post gain of cents N 52493 reported income of 12.9 N 52499 obtain services of executives N 52504 have agreeement with executives V 52507 become executives of studio N 52516 induce breach of contracts N 52536 signaled end of search N 52540 deferred compensation of 50 N 52542 determining extent of damages N 52544 had change in earnings V 52572 watching value of dollar N 52574 is one of better-than-expected N 52576 hurt reporting of earnings N 52586 arranged syndication of a N 52591 following shooting of bystanders N 52596 assemble group of banks N 52597 had relationship in years V 52598 syndicate loan of name N 52614 calculate rate of option N 52618 polls managers of manufacturing N 52622 subtracting percentage of managers N 52632 measuring costs of making N 52646 had profit of 58.7 N 52654 have impact on results V 52655 include sale of banks N 52664 staunch flow of ink N 52665 recording quarters of profitability N 52671 prevent takeover of country N 52672 attending assembly of the N 52674 got word of atrocity N 52680 been target of courage N 52718 was head of management N 52721 sell % of shares N 52724 involving sale of shares N 52730 is part of plan N 52755 have time to shop V 52763 become one of activities N 52786 spend lot of money N 52787 boycotted stores of way N 52805 do job of making N 52817 cut price of couch N 52821 is example of kind N 52841 examined opinions of 550 N 52848 looks % of executives N 52853 consider level of taxes N 52854 had opinion on taxes V 52855 was cost of employees N 52867 increased number of employees N 52868 increase number of employees N 52873 is officer of unit N 52878 gets title of director N 52879 inherits bits of positions N 52897 represented % of production N 52902 report loss of deteriorating N 52909 enjoying honeymoon of production N 52948 Solved Riddle of Disease N 52953 alleviate suffering of others N 52955 appreciate value of such N 52956 further work of resolving N 52960 is measure of quality N 52971 have sense of values N 52974 had profit before items V 52981 had profit from continuing V 52981 continuing operations of 57 N 53013 say manipulation of such N 53016 are representatives of people N 53020 stand chance of losing N 53036 circulated photo of leader N 53048 replaced head of division N 53051 managing director of division N 53064 called part of integration N 53071 address surfeit of reserves N 53086 following gains of % N 53088 continue strategy of combating N 53089 are party of devaluation N 53103 completed offering of shares N 53122 dump some of shares N 53124 risen average of % N 53125 have effect on environment V 53138 attracted investors of growing N 53154 showed signs of weakness N 53160 approved acquisition of stores N 53171 take lumps from prices V 53172 excluding gain from sale N 53173 report gains of % N 53174 extract themselves from war V 53174 steal share from each V 53176 become owners of businesses N 53179 given size of industry N 53180 predicting reaction to prices N 53181 misjudged resistance to prices N 53181 were % on average V 53182 Blaming prices in part V 53184 dropped plans for promotion N 53193 reflecting dilution for acquisitions N 53195 report earnings between cents N 53196 increase % to % N 53197 declines % to % N 53203 is hoard on view N 53204 offers glimpses of achievement N 53205 began career as dancer N 53205 began career during days V 53214 became curator of collection N 53220 include designs by the N 53221 shed light on role V 53222 extend knowledge of ambiance N 53225 dominated the through dancing V 53231 began career as revolutionary V 53234 has point beyond fact V 53236 's achievement for gallery N 53236 present kind of material N 53236 present kind in ways V 53239 document lot of material N 53241 's stopgap for endeavor N 53246 retain management of unit N 53246 selling computers as part V 53247 is part of plan N 53247 grow company into member V 53249 had loss of francs N 53250 posting profit for year V 53250 make it into black V 53253 posted profit in 1988 N 53261 are ingredients in plans N 53261 remains one of companies N 53262 planting itself in the V 53263 derive % of revenue N 53263 derive % from the V 53263 spends % of budget N 53263 spends % in the V 53273 is crusader for software N 53275 Counting sales of equipment N 53279 manage problem of service N 53281 be market in world N 53284 represents % of market N 53284 's % of world N 53289 leave problem in form V 53290 giving somebody for bill V 53292 increases number of shares N 53294 reflect number of shares N 53294 assuming changes at company N 53304 create demand for stock N 53306 has impact on price N 53307 done research on this N 53308 take advantage of them N 53315 mean expense for investors V 53318 trade shares of stock N 53319 trade shares of stock N 53324 closed yesterday on the V 53330 Underscoring feelings on subject N 53330 sent greeting to friend V 53331 like splits as tool V 53332 is exercise in cosmetics N 53333 improve marketability of stock N 53346 extinguish fire at sea V 53346 built the of steel N 53347 meet fate of the N 53353 mistake diary with scholarship V 53357 issue shares in placement V 53358 broaden research of products N 53359 handled closing of transactions N 53364 's one Of whims N 53371 receive 20.83 for share V 53372 using terms like syndrome N 53373 make additions to reserves N 53374 get news behind them V 53375 announcing addition to reserves N 53376 post loss for year N 53378 reported loss for quarter N 53378 following addition to reserves N 53380 use spate of reserve-building N 53380 use spate as opportunity V 53381 follow lead of Manufacturers N 53381 follow lead with boost V 53384 rise % from figure N 53386 is difference in rates N 53390 are some of concerns N 53392 finance purchase of unit N 53393 requires approval by both N 53393 receive nine-tenths of share N 53394 represents sweetening from share N 53396 makes products for skin N 53396 acquire unit for million V 53398 provide financing for purchase V 53403 overshadows sales of million N 53407 add devices to plants V 53409 contained level of fat N 53411 is line of Germans N 53419 describing the until years V 53427 run company outside industry N 53428 becomes officer of consultants N 53429 gave presidency of maker N 53429 gave presidency in 1988 V 53431 following completion of marriage N 53432 eliminate post as chairman N 53437 's part of shakeout N 53440 been member of company N 53441 integrating business with business V 53444 see resignation as indication V 53447 devise plans by end V 53450 been resignations among managers V 53453 selling both of businesses N 53454 increase value in light V 53456 been interest in company N 53460 explore sale of businesses N 53461 including spinoff of division N 53462 sold all of shares N 53465 held % of company N 53465 sold shares at premium V 53467 posted income of million N 53468 included gain of million N 53472 exceeded % to goal N 53475 showed increase of % N 53478 attributed results to times V 53481 rose % in quarter V 53483 increased % for months V 53484 be the in symphony N 53486 reported loss versus income N 53487 include gain from operations N 53490 take provisions for months V 53492 demonstrate improvement for quarter V 53495 chalked deficit to problems V 53495 manufacturing wings on plane N 53495 are candidates for write-downs N 53496 bring system into production V 53497 are changes along way V 53498 putting it on supplier V 53500 taken adjustments on programs V 53500 seen the of that N 53501 reflect problems on the N 53501 having troubles with jet V 53501 booking profit on contract V 53503 shows predictions for contractors V 53505 expect some of these N 53507 indicated lot of sympathy N 53509 keep executives in uproar V 53511 passed programs in 1988 V 53512 feel impact of contracts N 53512 feel impact for number V 53513 exploit advantage from situation V 53514 take hit against income N 53514 take hit in bit V 53515 delivered jets during period V 53516 anticipates line of 1.15 N 53516 expects dollar versus cents N 53518 show gain during walkout N 53521 told group of bankers N 53521 excluding gain from sale N 53523 offering rebates on vehicles V 53527 highlight vulnerability of maker N 53528 boost sales during quarter V 53529 cut production during quarter V 53530 pushed operations of each N 53530 pushed operations into red V 53531 offset losses in operations N 53535 have days of inventory N 53538 break news of disappointment N 53539 make statement like this N 53541 get clarification from officials V 53541 made announcement to traders V 53543 cut estimates for profit N 53544 earned billion in 1988 V 53546 had 4.35 for year V 53548 introduced bill in the V 53548 increasing amount of programming N 53549 offer choice of programming N 53550 provide incentives to networks V 53550 use material than quota N 53553 give preference to programming V 53555 pushing exports to the N 53558 seem a for market V 53559 has plans for translation N 53562 credit variety of translators N 53565 put it in the V 53566 selling chips to Soviets V 53569 put this in terms V 53574 cites translations as example V 53575 be violation of rights N 53576 takes us into world V 53582 eating sawdust without butter V 53583 eaten amount of sawdust N 53583 places law in contexts V 53584 determines failure of policies N 53584 determines failure through programs V 53585 perverted concept of rights N 53587 show injury to himself N 53588 assert views of rights N 53592 shifts segments of policy-making N 53595 ensure balance in schools N 53596 was step beyond ban N 53600 provides understanding of policies N 53603 seeking services for children V 53604 diverting all of efforts N 53604 diverting all from problem V 53606 assigns blame to culture V 53610 touching cornerstone of government N 53611 is scholar in studies N 53612 filed suit against group V 53613 sets clash between claims N 53614 telling public in series V 53615 sponsoring bashes over weekend V 53616 included entertainment by groups N 53616 raised money for the V 53617 drew criticism from groups V 53622 founded group in 1977 V 53626 denied request for order N 53626 saw sales as form V 53629 followed movement of Treasurys N 53630 fell point to % V 53631 charge each on loans V 53633 taking action because indications N 53634 's continuation of position N 53635 burned times in months V 53635 buy bonds on expectation V 53636 was indication from officials N 53639 turning ear to statements V 53645 was ado about nothing N 53646 make move toward ease N 53646 make move in view V 53651 is division of agency N 53654 took some of sentiment N 53655 put pressure on market V 53663 was % for yield N 53663 had rate of % N 53663 had rate for yield V 53671 tapped market with issue V 53672 price billion in securities N 53672 price billion next week V 53674 following accord with the N 53674 borrowing term from bank V 53677 gained 2 to point N 53677 gained 2 after trading V 53681 rose 9 to 97 V 53682 noted demand for securities N 53682 noted demand in sessions V 53683 yielding % to assumption V 53685 kept floor under municipals V 53687 had bid for issue N 53691 accepting orders from market V 53692 be sellers of tax-exempts N 53692 be sellers in near-term V 53704 fell point to 97.65 V 53706 rose 5 to 110 V 53706 fell 1 to 98 V 53711 refinance loan for buy-out N 53712 was one of victims N 53712 was one in wake V 53716 describing matter as dispute V 53718 were part of pattern N 53719 raising fund of million N 53723 totaling billion in value N 53724 paid price for companies V 53725 invested million for stake V 53725 lost part of investment N 53726 recover some of money N 53730 keeps % of profits N 53730 charges fee of % N 53732 assumes control of company N 53733 coordinate handling of emergencies N 53737 coordinate flow of information N 53738 had versions of information N 53738 had versions at points V 53743 represent move toward system N 53744 making decisions in gatherings V 53746 ensure backup under him V 53748 is deputy on staff N 53749 coordinate handling of emergencies N 53753 made decisions during crisis V 53755 turn strongman to the V 53760 make bet on contest N 53763 rekindling animosity between cities N 53767 called the of the N 53771 had problems from beginning V 53774 became sort of annex N 53775 became home of one N 53776 forced trustee on district V 53777 view place as zone V 53778 billing itself as metropolis V 53779 see themselves as crowd V 53787 is the in country N 53793 save room for development N 53795 belie the of myth N 53796 're terrors of the N 53798 burn souvenirs of opponents N 53798 burn souvenirs in stands V 53800 has standing in baseball V 53801 became head of security N 53803 keeps list of offenders N 53808 applaud plays by opposition N 53813 asked one of them N 53820 served time in jail V 53822 detailed differences between fans N 53826 blame rowdiness on weather V 53834 civilize fans with dogs V 53835 is section for fans V 53839 leave hearts without a V 53840 hit people over head V 53843 blame the for personality V 53844 searching shelves for goods V 53846 hate you for that V 53847 throwing politicians in jail V 53848 dispatched troops to shores V 53848 augmenting forces in place N 53850 give answer to problems N 53859 hastened decline of economy N 53860 Isolating forces from contacts V 53864 be result than democracy N 53872 do anything with troops V 53874 begin series of exercises N 53876 practiced operation from compound N 53877 seemed part of practice N 53883 relied year on bridge V 53885 stop reporters on street V 53886 criticized concept of intervention N 53887 allowed reporter into room V 53888 allowed pathway between seas N 53893 give it to cronies V 53911 nurture freedom around world V 53911 fight match against president V 53916 celebrate years of democracy N 53918 won a for plan V 53919 has parts from parties V 53919 funding association with ties N 53920 spent 434,000 on projects V 53920 sapped virility of nation N 53921 is candidate in election V 53922 was one for the V 53924 got wind of funding N 53926 encourage institutions around world V 53930 gives each of branches N 53931 establish relations with institutions V 53932 calls ham in sandwich N 53933 needs protection from nations N 53939 facilitate emergence of democracy N 53942 show ties between the N 53951 characterize them as aberration V 53954 makes transition to democracy N 53955 write this as part V 53956 found indications of damage N 53956 found indications among workers V 53956 control pests in industry V 53958 control weevils in elevators V 53961 be cancer of system N 53961 be cancer in industry V 53962 establish link between damage N 53965 applying fumigant in area V 53965 suffered damage than those N 53966 placing workers without respirators N 53966 placing workers at risk V 53968 linked use to hazards V 53974 fear pain of cuts N 53975 finished work on bills N 53975 cut deficit to billion V 53977 finishes work on budget N 53980 juggle books for two V 53987 leaves billion of cuts N 53995 know zip about sequestration V 53997 forced fees on loans N 53997 increase 1 by maximum V 54002 finishes work on bills N 54005 getting increases in neighborhood N 54007 prefer cuts to alternative V 54011 formed venture with the N 54014 boosted estimates of crops N 54016 raised estimate of crop N 54016 raised estimate of crop N 54016 raised estimate to bushels V 54017 be % above crop N 54019 increased estimate of crop N 54019 increased estimate to tons V 54019 citing yields in areas N 54020 reduced estimate of imports N 54020 reduced estimate to tons V 54023 exceeded average of estimates N 54023 exceeded average by bushels V 54024 exceeding figure by bushels V 54026 fell bushels from estimates V 54029 total boxes because frost V 54032 predicted increase in production N 54033 postponing vote on split N 54033 postponing vote until meeting V 54035 give reason for postponement N 54037 shift co-founder from responsibilities V 54038 lead buy-out of giant N 54039 join 1 as officer V 54045 approached brother on 24 V 54049 tell him about restructuring V 54050 remind you of conversation N 54059 brought series of outsiders N 54059 brought series to positions V 54059 was executive of business N 54060 have influence on strategy V 54061 lacked direction since 1986 V 54066 bought it for billion V 54071 have say than outsiders N 54073 become members of board N 54076 struck me as club V 54076 become part of club N 54080 repairing reputation among investors N 54080 tell them of change N 54081 prompt departure of executives N 54083 command % of business N 54087 declined 13.52 to 2759.84 V 54092 charge each for loans V 54098 was acknowledgment of possibility N 54100 drew support from rates V 54104 lost ground in volume V 54105 changed hands on the V 54105 outnumbered gainers by 907 V 54115 beat S&P-down from % V 54122 match performance of market N 54123 be news for segment V 54125 keep cash on hand V 54129 match stock before expenses V 54130 guarantee success for investors N 54132 loading portfolios with stocks V 54135 surpassed gain of 500 N 54135 surpassed gain over years V 54138 hold stocks of companies N 54140 underperformed ones in years V 54144 giving weight to funds V 54145 giving weight to funds V 54147 misrepresents return to investor N 54148 save magazine from folding V 54148 publishing magazine without advertising V 54149 fit tastes of advertisers N 54151 purchasing magazines with help V 54155 take control of magazine N 54162 make vehicle for advertisers N 54164 pay lot of money N 54164 pay lot for point V 54165 making magazine with point N 54165 putting celebrities on cover V 54166 build circulation by methods V 54167 boost circulation above level V 54169 pulled schedules after cover V 54170 carried headline in letters V 54172 is one of the N 54174 make statement to advertisers V 54187 handing million to account N 54193 hospitalized summer with ailment V 54193 been subject of speculation N 54200 reflects state of affairs N 54204 been suggestions of a N 54206 kept hammerlock on power N 54211 feeling pressure from allies N 54217 expect moves toward reform N 54218 developing proposals for congress V 54223 carrying inventories for time V 54224 making markets in stocks V 54224 keep shares of stocks N 54224 keep shares on hand V 54225 are buyers of stock N 54229 climbed 1 to 20 V 54231 reiterated recommendations on stock N 54232 rose 1 to 12 V 54233 exchanged million at 12 V 54234 was issue with volume V 54235 terminated pact with suitor N 54236 be partner in buy-out N 54236 lure MGM to table V 54238 is 43%-owned by firm N 54238 jumped 1 to 5 V 54239 is party to agreement N 54240 added 3 to 10 V 54241 gained 5 to 45 V 54243 priced 3,450,000 of shares N 54243 priced 3,450,000 for sale V 54244 fell 1 to 15 V 54246 added 1 to 43 V 54248 reduce likelihood of upgrade N 54250 revised offer for shares N 54250 revised offer to 125 V 54251 pay 110 for % V 54252 gained 1 to 31 V 54252 lost 1 to 20 V 54252 rose 1 to 33 V 54253 received bid from group V 54254 owns % of shares N 54263 is one of producers N 54265 had sales of billion N 54266 pending news of bid N 54270 reject offer as being V 54272 is growth in capacity N 54277 be house above clay V 54281 hitches leg in way V 54289 save boy with abscess N 54291 are kind of things N 54296 makes report to the N 54297 has money for region V 54297 rival those of countries N 54301 had years of poverty N 54305 epitomizes extremes of poverty N 54311 building fence around school V 54317 is paychecks from poverty N 54319 land town on Minutes V 54322 get lady for 5 V 54323 sold herself for cents V 54329 got dose than either N 54338 exceeded 25 per 1,000 N 54338 exceeded 25 per 1,000 N 54347 been one of the N 54349 determine boundaries of world N 54354 prowled fields like beasts V 54355 uprooted tens of thousands N 54355 propelled them into cities V 54357 tethered sharecropper with lines V 54358 has jobs of kind N 54362 made creation of commission N 54366 create window in time N 54375 is piece of pie N 54379 operating plants at levels V 54380 boosted shipments by % V 54381 permit shipments into half V 54382 report profit because disruptions V 54383 earned million in quarter V 54383 including gain of million N 54386 depressed profit in period V 54388 complete reorganization by mid-1989 V 54389 require training at plants N 54393 reducing costs in parts V 54398 reported loss of million N 54399 had loss from operations V 54400 covering sale of million N 54401 report profit for period V 54402 is period for industry V 54403 take time during summer V 54404 were a than quarter N 54404 be quarter of year N 54405 earned 208,992 on revenue V 54410 estimates net at cents V 54411 experienced orders during quarters V 54416 postponed number of programs N 54416 whacked totals in months V 54417 lose share to plants V 54419 have appetite for offerings N 54422 have lives of years N 54424 prompted flurry of lawsuits N 54424 caused difficulties at two V 54425 are vehicle at moment V 54426 been news on partnerships N 54427 is resurgence of placements N 54429 getting couple on placements V 54431 is return of capital N 54435 buy them in quarter V 54438 following completion of merger N 54439 become officer in years V 54440 have shot at spot N 54443 struck me as guy V 54444 named officer in 1988 V 54453 had one in mind V 54454 runs side of business N 54456 were 26 after merger N 54456 had plans at present V 54459 was element in machinery N 54462 altering genetics of plants N 54463 has rights to patents N 54464 formed venture with company V 54466 excite atoms of hydrogen N 54466 excite atoms to levels V 54467 ticks time with accuracy V 54471 dictates production by cell N 54474 get message to reaches V 54475 carries message to factories V 54476 bring materials for protein N 54478 interrupted words by stretches V 54480 carried reactions in matter N 54484 form sentence for making N 54494 citing profit in all N 54494 rose % on increase V 54497 was billion at end V 54498 were billion at end V 54503 develop version of missile N 54503 be contractor on version N 54505 had sales of refrigerators N 54506 disclose details of performance N 54509 pack bulk to retailers V 54510 siphoned billions of dollars N 54510 siphoned billions from industry V 54511 continue thanks to belt N 54511 continue thanks amid stretch V 54515 earned million on million V 54517 offset sales at unit N 54517 taken beating from games V 54521 reported profit of million N 54523 report improvements in earnings N 54524 thrust company into black V 54525 report earnings of cents N 54526 had income of million N 54528 report gains in sales N 54530 puts sales at million V 54533 report profit for quarter N 54534 post earnings of 1 N 54536 shipped million of games N 54540 suffered drain at facilities V 54541 change identities with addition V 54543 had income of million N 54547 offer week of 23 N 54547 pending approval by the N 54548 buy basket of stocks N 54548 buy basket as unit V 54549 use it as way V 54550 meet competition from the N 54550 launch version of product N 54550 launch version in future V 54551 is one of number N 54552 awarded contract by the V 54557 is study in politics N 54558 becomes engine in drive N 54564 's issue with public V 54566 made portion of proposal N 54571 imposes rules on states N 54577 raised issues in way V 54581 lost votes in row N 54582 won debate about policy N 54585 contains seeds of expansion N 54586 shrink supply of providers N 54588 subsidizes class of provider N 54589 become constituency for subsidy N 54590 accomplishes goal of lobby N 54592 earning income of 32,000 N 54594 be subsidy in code N 54595 eliminated subsidy for couples V 54595 wants something for readers N 54596 do sort of thing N 54596 called welfare for the N 54599 retain it as part V 54608 were revelation of troubles N 54608 use techniques in heart V 54614 triples bonuses for attendance V 54614 limiting number of absences N 54615 receive pay for absences V 54616 receive pay for absences V 54617 were negotiators in talks N 54620 developed relationship with people V 54622 win benefits for workers V 54623 take posture toward makers N 54625 handle bulk of responsibilities N 54627 averages % to % N 54627 averages % to % N 54633 was manager of operations N 54636 be one of casinos N 54643 been friends since boyhood V 54651 Heading delegation to the N 54652 received license in weeks V 54653 designated leader of operations N 54655 needs someone with style N 54656 had love for gesture N 54656 drew thousands to the V 54661 named president of unit N 54664 becomes chairman of the N 54665 devote time to publishing V 54666 establish exchange as power V 54671 do trading within hour N 54672 surpassed the in year V 54672 surpassed shares to billion N 54676 measures performance of stocks N 54679 run operations as president V 54679 's overlap between skills V 54681 including stint as chairman N 54682 take office as chairman V 54684 was future for the V 54686 neglects importance as exchange N 54687 visited traders on floor N 54687 visited traders after conference V 54689 is head of operations N 54691 had companies in 1976 V 54693 traded average of shares N 54693 traded average in year V 54694 see average of million N 54700 paying lot of attention N 54700 paying lot to markets V 54704 meaning years in lifetime N 54705 use stock of capital N 54706 helping the toward independence V 54712 transform population into minority V 54716 teaches economics at the V 54719 provide support for pound V 54720 are answers to problems N 54721 avoided mention of timing N 54721 take pound into mechanism V 54723 outline moves in speech V 54727 had experience in areas V 54729 lose hundreds of thousands N 54740 overcome obstacles in society N 54742 leading charge for passage N 54743 is one of pieces N 54744 's model of vagueness N 54746 limits one of activities N 54749 make modifications in procedures N 54751 puts burden of proof N 54751 puts burden on you V 54752 constitutes discrimination under bill V 54756 makes it past screens V 54763 creating incentives for litigation N 54764 limit suits for damages N 54765 permits suits for pay V 54767 enforce them in courts V 54768 turning society to governance V 54770 shift jurisdiction over decree N 54770 shift jurisdiction from court V 54771 enter businesses as pages N 54774 lift restrictions on businesses N 54777 build support for effort N 54780 complete proposal by end V 54782 eliminating restrictions on publishing N 54784 considered forum for Bells N 54786 adds weight to arguments V 54786 hobbles them in race V 54787 free Bells from jurisdiction V 54791 have support in the N 54792 taking lead on push N 54793 ordered review of issues N 54796 debating bill for 1990 N 54796 debating bill with asserting V 54798 send it to conference V 54799 complete work on bill N 54799 complete work in time V 54801 Keeping reduction off bill V 54801 be victory for leaders N 54802 represent setback for Republicans V 54805 be boon to the V 54809 is part of bill N 54810 approved week by the V 54811 is expansion of deduction N 54812 has chance of enactment N 54812 given endorsement of concept N 54815 including repeal of law N 54815 provide benefits to both V 54817 provide deduction for contributions V 54817 permit withdrawals for purchases N 54819 reduce spending in 1990 V 54819 curbing reimbursements to physicians N 54820 impose limit on payments N 54820 impose limit in way V 54821 take the out the V 54822 recommend veto of bill N 54823 raise spending in areas V 54827 impose tax on chemicals N 54830 encourage projects by businesses N 54831 assist construction of housing N 54831 provide incentives for spending V 54837 raising million in 1990 V 54839 raise million in 1990 V 54842 granted interviews for month V 54844 seen event of magnitude N 54844 seen event in lifetime V 54853 stirring controversy within industry V 54855 sold copies of software N 54856 pitch products to users V 54857 Following publicity about the N 54858 employing practices unlike salesman V 54860 certify skills of professionals N 54862 's lot of profiteering N 54863 solve questions about integrity N 54866 entered field as sideline V 54868 sold copies of software N 54868 sold copies during 1988 V 54870 introduced software in 1985 V 54870 shipped copies at 35 V 54870 presented virus to community V 54871 adding program to line V 54872 was success within week V 54873 pay dollars per computer N 54873 use software at sites V 54874 spent penny on advertising V 54881 making it without doubt V 54883 connects pursuit of self-interest N 54883 connects pursuit to interest V 54884 seeking power through regulation V 54885 entertain departures from marketplace N 54887 convert inconveniences of shortage N 54887 convert inconveniences into miseries V 54890 liberate something from dungeons V 54891 producing cut in rate N 54892 stood step from melee V 54893 firing veto at package V 54894 exercising authority over proposal V 54895 kill item in bill N 54896 counter arsenal of vetoes N 54902 vetoes possibility of vote N 54902 take credit for cut N 54906 was hostage to deficit N 54908 considering proposal under discussion N 54909 be schedules for assets N 54910 establish rate of % N 54910 establish rate with descending V 54910 reaches rate of % N 54912 sanctify kind over another V 54913 reintroduces notions of progressivity N 54915 reinvest them in venture V 54916 recognize arguments in favor N 54921 running cut up flagpole V 54924 represents value of options N 54926 won options for planes N 54926 won options in part V 54928 take stake in subsidiary N 54932 take management of million N 54933 is tops among funds V 54934 approve transfer of assets N 54937 is something of lack N 54942 lay reputation on line V 54944 poses test for the N 54946 advise the of dangers V 54954 ease rates in response V 54956 puts pressure on them V 54960 grows impatient with efforts N 54960 develop attack on deficit N 54962 protecting officials against accusations V 54962 violated ban on assassinations N 54965 pressed producers of movie N 54968 provides opening for groups N 54970 held dinner in hotel V 54971 spurring moves for regulation N 54974 passed drugs as version V 54976 remove drugs from market V 54978 considers rewrite of 1938 N 54981 leaves seat at hearing V 54982 get copies of the N 54983 assails buy-outs of airlines N 54983 assails buy-outs as vampirism V 54987 overseeing mergers of thrifts N 54987 filed suit against family V 54988 filed suit against regulators V 54988 alleging seizure of property N 54993 issue subpoenas to chairman V 54996 makes decision about appearance N 54999 name chairman of committee N 55002 have responsibility for studio N 55006 purchased it for billion V 55008 have members from company N 55011 continuing negotiations in attempt V 55011 extricate producers from contract V 55015 taking stance on contract N 55015 file suit against both V 55018 devour computer near you N 55021 been sightings of virus N 55025 treat them like threats V 55027 wipe data on disk N 55030 adds 1,168 to file V 55032 check size of files N 55032 check size against size V 55033 is one of numbers N 55042 lends itself to metaphor V 55043 be scares around date V 55044 is thing as virus N 55048 advanced date on computer V 55048 advanced day at time N 55049 receive data from any V 55051 penetrated dozen of computers N 55052 heightened awareness of problem N 55054 making copies of disks N 55054 setting clocks to 15 V 55055 containing files of origin N 55056 run clocks on computers V 55059 acquire position in bid V 55060 acquire % from partners V 55060 bringing stake in company N 55060 bringing stake to % V 55063 is presence in industry N 55063 put supply from variety V 55063 meet demand for gas N 55064 reduce size of project N 55064 cutting capacity to feet V 55065 faces pressure from leadership N 55065 relax opposition to legislation N 55065 renewing support for abortions N 55065 are victims of incest N 55070 permits support in cases V 55074 is plea to president N 55075 be part of effort N 55079 deny right to choice N 55081 represents heart of commitment N 55083 win support on grounds N 55085 changed year beyond expectations V 55088 held possibility of amendment N 55091 taken line in letters V 55092 opposes funding for abortions N 55092 backed aid for women N 55092 are victims of crimes N 55093 win backing for nomination V 55094 upholding restrictions on abortion N 55095 supported exemption for incest N 55097 adopted position on abortion N 55099 named director of company N 55099 expanding board to 13 V 55106 float points above the N 55133 buy shares at premium V 55135 Fixing coupon at par V 55139 rejected challenge by attorneys N 55141 made showing in letter V 55141 are subject of indictment N 55143 alleging fraud in connection N 55144 fight case in court V 55146 meet deadline for indictment N 55149 pay 500,000 to state V 55151 create crisis in insurance N 55153 leaves companies as defendants V 55157 been attorney for the N 55159 been partner at firm N 55163 negotiate agreements with head V 55165 began career in 1976 V 55166 join firm as partner V 55170 join office as partner V 55171 joining investigation of scandal N 55171 joining investigation in 1987 V 55171 served years as attorney V 55175 spent 800 in days V 55185 concerning feelings about shopping N 55188 are any than people N 55193 's substitute for love N 55195 dropped 1,500 on hat V 55199 is man in life V 55200 get high from shopping V 55204 draw distinction between shoppers N 55205 see shopping as symptom V 55207 gives sense of security N 55211 have sense of egos N 55212 reflects sense of identity N 55213 Knowing place in world N 55214 has one of egos N 55217 is exploration of position N 55221 'm one of the N 55228 been part of culture N 55236 paid 250 for pair V 55240 Spending dollars on a V 55241 purchased perfume on way V 55247 paid 650 for outfits V 55257 learned art of shopping N 55257 learned art from mothers V 55261 reported results for quarter N 55264 attributed performance to rates V 55265 bucked trend in the N 55269 Following lead of banks N 55269 boosted reserves for losses N 55269 boosted reserves by million V 55270 increase coverage for loans N 55270 increase coverage to billion V 55271 been % of exposure N 55272 reflects pressures on market N 55276 raise million through issue V 55280 brings coverage for loans N 55280 brings coverage to million V 55281 added million to reserves V 55289 experiencing pressure on margins N 55292 were problem for banks N 55294 cited addition to provisions N 55296 buck trend of margins N 55296 buck trend with improvement V 55299 dropped cents to 37.125 V 55301 showed growth on basis V 55301 fell points from quarter V 55303 mirroring drop in the N 55304 pay rates for funds N 55304 pay rates in quarter V 55305 rose points from quarter V 55307 fell cents to 44 V 55313 fell cents to 33.75 V 55318 reflecting sale of assets N 55324 take dispute to mediation V 55325 represents employees of company N 55325 seeking agreement on party N 55328 shift costs to employees V 55335 increase reserves by % V 55338 has interests in mining V 55338 transfer million of related N 55339 apply pools against income V 55339 reflects value of pools N 55342 have access to details N 55343 had problem with concept V 55347 have impact on flow N 55352 increased % to billion V 55352 rose % to billion V 55354 rose % to billion V 55354 rose % to billion V 55359 kept growth of imports N 55359 kept growth at level V 55363 dropped % in terms V 55363 rose % in volume V 55364 rose % in value V 55364 jumped % in volume V 55370 fell % to billion V 55370 fell % to billion V 55373 breaching duties as employees N 55382 executed series of loans N 55385 sell interest in business N 55387 post gain on transaction N 55389 shift focus of relations N 55393 give message to public V 55396 be position of the N 55396 be position as leader V 55397 see changes in nations V 55398 bear expense of presence N 55406 remove headquarters of the N 55406 remove headquarters from downtown V 55409 opening market to services V 55412 takes anger at surplus N 55412 takes anger on nations V 55414 had surplus for years V 55416 discussing allegations by organizations N 55416 arresting dissidents for beliefs V 55417 made progress toward elections N 55417 made progress for example V 55419 indicted leader for infraction V 55431 fell 1.60 to 355.39 V 55431 dropped 0.83 to 196.98 V 55433 await release of report N 55433 await release before opening V 55435 bring increase in the N 55438 are expectations for disappointment N 55439 took comfort in indications V 55443 dropped 5 to 24 V 55445 report profit of cents N 55445 cited overspending on programs N 55445 cited overspending as factor V 55448 fell 2 to 36 V 55449 captured spots on list N 55449 fell 1 to 40 V 55451 fell 3 to 66 V 55451 dropped 1 to 49 V 55451 lost 1 to 45 V 55453 has billion in debt N 55453 issue billion in notes N 55453 issue billion within weeks V 55454 added 5 to 98 V 55456 rose 3 to 20 V 55457 become partner in takeover N 55458 rose 3 to 24 V 55460 added 7 to 61 V 55462 fell 1 to 55 V 55462 provide engines for planes V 55463 reported loss of cents N 55464 anticipated loss for period V 55465 fell 1 to 19 V 55466 posted loss from operations N 55468 rose 1 to 10 V 55470 fell 0.67 to 395.01 V 55472 lost 3 to 17 V 55473 conducting investigation of company N 55474 been target of probe N 55475 added 3 to 5 V 55477 buy units for 4.50 V 55483 inspired battle between brewers N 55485 tear some of signs N 55485 dominated landscape in years V 55488 's product in country N 55489 pump hundreds of millions N 55489 pump hundreds into expansion V 55493 expect number of manufacturers N 55495 pump pesos into facilities V 55496 report kinds of projects N 55505 jumped year after shortage V 55506 imposed tax on commodity N 55508 presents target for criticism N 55510 reinforce belief among Filipinos N 55514 was one of countries N 55518 followed assassination in 1983 N 55520 took advantage of upturn N 55527 survey household in the N 55529 introduce errors into findings V 55530 reported gains for quarter N 55531 cited prices for gains V 55532 blamed demand for products N 55532 blamed demand for decrease V 55533 fell % in quarter V 55537 posted drop in income N 55541 was rate of months N 55542 reported income of million N 55544 reported income of million N 55546 risen % in half V 55551 fell cents to 42.875 V 55554 retain seat on board N 55557 buy shares in steelmaker N 55567 owns shares to million N 55574 made improvements over three V 55577 closed lot of capacity N 55578 done things with vengeance V 55584 taken profits in stock N 55584 taken profits at prices V 55585 earn 7 to 8 N 55585 earn 7 in year V 55592 has billion in benefits N 55597 makes 3 next year N 55609 put investor in control V 55615 has worth of million N 55622 swapping bonds for notes V 55632 sending messages by code V 55632 sending voice over wire V 55632 replace telegraph for communication V 55633 sold rights to company V 55634 become corporation in world N 55634 become corporation before break-up V 55635 sending messages by wire V 55641 be competitor in business N 55642 have access to funds N 55644 had chairmen in months V 55647 forcing company into proceedings V 55656 buy business for million V 55659 put amount for stake V 55659 gives rights to shares N 55660 granted options on million N 55660 granted group for cents V 55661 paid million in expenses N 55663 put him on board V 55664 get % of bondholders N 55664 pay sweetener of million N 55665 sweetened pot for constituencies V 55668 sell bonds to clients V 55668 be reset by bankers N 55669 collected million in commissions N 55670 gain cooperation of officers N 55670 totaling 850,000 in salaries N 55672 is dean of school N 55679 fell % from 1987 V 55680 write million in will N 55685 replacing % of management N 55685 cutting million in costs N 55686 omitted payments on securities V 55687 caused interest on bonds N 55687 increasing payments by million V 55688 give value of % N 55692 repurchasing bonds in chunks V 55700 end year with million V 55700 exceed flow by million V 55701 expects decline in revenue N 55701 expects decline with hitting V 55701 hitting bottom in quarter V 55703 moves billion through network V 55704 entrust company with cash V 55705 collects bills for utilities V 55713 block cut in tax N 55713 's break for the N 55718 writing bills for people V 55725 surpass million in 1994 V 55726 reduce revenue from tax N 55732 expressed concerns about effect N 55733 is tax on grandchildren N 55736 calling break for the N 55746 were part of estate N 55756 is area of concern N 55760 called amendment after family V 55762 leaves estate to grandchildren V 55765 are country of nobility N 55765 built fortune in business V 55768 Offer Option For Plans N 55774 's part of idea N 55778 were catalyst to action N 55781 cause damage to lines N 55782 provides benefits to company V 55787 report results with tests N 55787 determine effectiveness of drugs N 55790 rule use of drugs N 55791 save thousands of dollars N 55791 avoid effects for patients V 55796 be way of life N 55796 be way in years V 55800 cover patients with disease N 55807 Put Computers in Wards V 55809 extended systems into wards V 55813 reflecting growth in number N 55817 cited gains in systems N 55830 signed memorandum of understanding N 55830 signed memorandum with group V 55832 made announcement at stage V 55833 ended months of speculation N 55833 been cornerstone of complex N 55834 total million for years V 55835 began operations in 1923 V 55836 turned profit for time V 55837 sell unit to entity V 55841 represents workers at plant N 55842 selling facility to firm V 55846 do it in way V 55851 purchase tons of steel N 55851 purchase tons from entity V 55853 cut production in future V 55856 remain consultant to company N 55857 totaled dollars in year V 55865 governed country in coalition V 55865 sell dollars of assets N 55866 equal rate of % N 55868 call election in half V 55869 attract number of votes N 55870 made millions of dollars N 55871 reinvested some of returns N 55873 was supplier of steroids N 55877 demanding increase in wage N 55880 mention concern about case N 55882 make one of nations N 55884 involves aid to industry N 55886 clearing way for settlement V 55887 open negotiations on grievances N 55889 limit exports to the N 55889 limit exports for years V 55890 include agreement by the N 55892 is pretext for protectionism N 55892 posting profits in market V 55893 extend quotas after 1992 V 55894 owed it at end V 55897 has interest in proposal N 55902 flies planes to cities V 55903 operates planes to cities V 55903 posted income of 372,949 N 55903 posted income for months V 55904 disclose terms of merger N 55905 make offer for rest V 55906 consider offer for stock N 55907 pay 900,000 to government V 55909 submitted data to negotiators V 55910 concealed existence of document N 55912 represented doubling of damages N 55913 implement procedures at facility V 55914 climbed % to francs V 55916 recorded items in half V 55917 posted gain for period V 55918 had profit of francs N 55918 had profit on revenue V 55919 reached settlement in suits V 55919 enhances whiteness of balls N 55920 follows ruling by judge N 55920 adds distance to shots V 55923 become leader in business N 55923 become leader with help V 55929 increase earnings by cents V 55930 reduce estimate on company N 55931 injected capital into unit V 55932 misstated capitalization in edition V 55935 cited investments in maintenance N 55937 has case for increase N 55940 repurchase shares of stock N 55943 signed letter of intent N 55947 pay million plus expenses N 55954 sold % of subsidiaries N 55954 sold % to company V 55954 pulling cash from sale V 55968 predict growth on bills V 55968 foresee growth on bills N 55969 offering owners of imported N 55969 offering owners of imported N 55972 choose rates of rebate V 55974 had supply of cars N 55974 had supply at end V 55976 formed venture with firm V 55979 allow expansion into market N 55981 develops systems for customers V 55982 named president of finance N 55983 has interests in broadcasting N 55984 assume responsibility for all N 55986 been manager of finance N apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/data/ppa/training0100644 0000000 0000000 00002460622 14523004075 027371 0ustar00rootroot0000000 0000000 0 join board as director V 1 is chairman of N.V. N 2 named director of conglomerate N 3 caused percentage of deaths N 5 using crocidolite in filters V 6 bring attention to problem V 9 is asbestos in products N 12 led team of researchers N 13 making paper for filters N 16 including three with cancer N 18 is finding among those N 22 is one of nations N 22 have standard of regulation N 24 imposed ban on uses N 26 made paper for filters N 28 dumped sacks of material N 28 dumped sacks into bin V 28 mixed fibers in process V 32 has bearing on force N 33 expect declines in rates N 34 eased fraction of point N 37 retain rates for period V 38 considered sign of rising N 42 pour cash into funds V 46 had yield during week N 50 holds interest in company N 52 holds three of seats N 53 approved acquisition by Ltd. N 55 completed sale of Operations N 56 is company with interests N 58 has revenue of million N 59 suspended sales of bonds N 59 lifted ceiling on debt N 60 issue obligations of kind N 63 raise ceiling to trillion V 67 was manager of division N 68 been executive with Chrysler N 68 been executive for years V 82 registered deficit of million N 82 registered deficit in October V 83 casting cloud on economy V 87 recorded surplus of million N 90 keep pace with magazine N 90 announced rates for 1990 N 90 introduce plan for advertisers N 92 give discounts for maintaining N 92 become fixtures at weeklies N 92 underscore competition between Newsweek N 95 lowered base for 1990 N 95 be % per subscriber N 97 awards credits to advertisers V 99 shore decline in pages N 101 gaining circulation in years V 103 had circulation of 4,393,237 N 107 leaves Co. as bidders V 107 proposed plan in proceedings N 108 acquire PS of Hampshire N 109 values plan at billion V 114 owns PS of Hampshire N 116 was one of factors N 118 proposed - against boosts N 120 seeking approval of purchase N 121 complete purchase by summer V 123 elected directors of chain N 124 succeed Rexinger on board V 125 refund million to ratepayers V 127 make refunds of 45 N 127 make refunds to customers V 127 received service since 1986 V 128 block order by Edison V 129 held hostage through round V 132 slash earnings by 1.55 V 133 reported earnings of million N 137 raise rates by million V 138 upheld challenge by groups N 142 added million to calculations V 143 set rate on refund N 143 set rate at % V 144 faces refund on collections N 145 set precedent for case N 146 seeking million in increases N 148 refund million for performance V 150 followed increases of % N 155 opened plant in Korea V 156 meet demand for products N 162 been orders for Cray-3 N 163 announced spinoff in May V 165 is designer of Cray-3 N 167 needing million in financing N 170 link note to presence V 170 complicate valuation of company N 175 describe chips as being V 177 face competition from Research N 177 has % of market N 177 roll machine in 1991 V 180 receive share for they N 184 calculate value at 4.75 V 185 been drain on earnings N 187 report profit of million N 187 report profit for half V 190 paid 600,000 at Research V 194 expects force of 450 N 194 expects force by end V 197 was president of company N 198 named president of company N 199 was president of unit N 200 succeed Hatch as president V 201 was president of Edison N 202 named president of Utilities N 204 claiming success in diplomacy N 204 removed Korea from list V 206 improve protection of property N 207 made progress on issue V 208 is realization around world V 212 improved standing with U.S. N 212 protect producers from showings V 213 compel number of parlors N 217 pose problems for owners N 220 be one of countries N 223 issue review of performance N 223 issue review by 30 V 224 merit investigation under provision N 228 reach reduction of % N 234 CHANGED face of computing N 237 use sets as screens V 237 stored data on audiocassettes V 238 was advance from I N 240 triggered development in models N 242 store pages of data N 242 store pages in memories V 245 developed system for PCs N 245 adapted one of versions N 246 developed drives for PCs N 247 were co-developers of modems N 247 share data via telephone V 250 acquired Inc. for million V 251 sells products under label V 252 owns % of stock N 253 increase interest to % V 258 has reserves of barrels N 261 make barrels from fields N 261 make barrels from fields N 262 completed sale of subsidiary N 263 Following acquisition of Scherer N 264 is part of program N 265 approved treatment for imports N 268 requested treatment for types V 269 grant status for categories V 269 turned treatment for types V 270 is seller of watches N 271 be beneficiaries of action N 276 left Magna with capacity V 277 reported declines in profit N 278 cut dividend in half V 280 seek seat in Parliament N 282 cut costs throughout organization V 285 pursue career with Magna N 286 named director of company N 288 show interest of investors N 295 eliminate risk of prepayment N 295 redeploy money at rates V 296 channel payments into payments V 296 reducing burden on investors N 298 boosted investment in securities N 299 become purchasers of debt N 299 buying billion in bonds N 300 named director of concern N 300 expanding board to members V 302 giving protection from lawsuits N 303 began offer for shares N 305 owns % of shares N 309 reflects intensity of intervention N 310 follows decline in reserves N 315 kicked issue at Board V 317 mirrors mania of 1920s N 320 brings number of funds N 326 hold smattering of securities N 328 get taste of stocks N 337 paying premium for funds V 342 reflect marketing of funds N 346 buy receipts on stocks N 346 buy receipts in funds V 350 holding talks about repayment N 356 extend credit to countries V 356 are members of Fund N 358 settled debts with countries V 359 stressed debts as key V 360 settle hundreds of millions N 366 booked billion in orders N 370 remove effects of patterns N 379 cite lack of imbalances N 379 provide signals of downturn N 382 had news on front N 389 fell % to billion V 391 rose % in September V 394 boost spending on homes N 396 rose % to billion V 398 ran % above level N 400 reported increase in contracts N 404 considered forecast of recession N 415 gauges difference between number N 415 reporting improvement in area N 416 polled members on imports V 421 reported shortage of milk N 424 are figures for spending N 426 have lot in common V 432 is society of lore N 433 perpetuate notion of Japanese N 434 carries message for relations N 438 mark her as anything V 442 is one of writers N 443 carry dashes of Americana N 444 give way to baseball V 445 is mirror of virtues N 446 is Japanese for spirit N 446 have miles of it N 448 named star as symbol V 449 return balls to ushers V 449 sidestep shame of defeat N 453 's complaint of American N 454 invades aspects of lives N 458 took lesson from books V 465 bans smoking in restaurants V 466 launched Week at Institute V 469 opened market to cigarettes V 469 restricts advertising to places V 470 are the in markets N 474 build center for meeting N 475 draw 20,000 to Bangkok V 478 renewed application in August V 479 win membership in Organization N 480 get AIDS through sex V 484 including relations with men N 485 increased charges by % V 486 bring charges into line V 487 establishing ties with Poland N 487 announced million in loans N 490 modify agreement with Czechoslovakia N 492 seek billion from Hungary V 498 issue dollars of debentures N 499 buy amount of debentures N 499 buy amount at par V 503 complete issue by end V 504 is inheritor of spirit N 505 laid claim to that N 508 revived Artist in movie V 512 playing bass in ensembles V 517 selling copies of Cosmopolitan N 521 including skirmishes with artist N 523 returning waif to mother V 525 gives sense of purpose N 525 alerts him to inadequacy V 526 tuck girl into one V 528 had presence in front N 530 makes it with deal V 532 managed kind of achievement N 540 brought lover into home V 541 called Latour in film V 545 has Peck in portrayal V 546 take look at Lights N 547 discussing plans with three V 547 build version of twin-jet N 549 build sections of 767 N 551 hit market in mid-1990s V 553 getting boost in campaign V 554 leading contests of 1989 N 554 reached levels of hostility N 556 became form in 1988 V 560 Take look at commercials V 560 set tone for elections V 563 file taxes for years V 565 hid links to company N 565 paid kidnapper through organization V 567 prosecute case of corruption N 569 shows photos of politicians N 570 Compare candidates for mayor N 572 opposed ban on bullets N 578 's situation of ads N 580 made secret of it N 581 pay 95,142 in funds N 582 blamed problems on errors V 587 had reservations about language N 589 opened battle with Coleman N 589 opened battle with commercial V 591 give it to politicians V 592 take right of abortion N 593 launch series of advertisements N 593 shake support among women N 594 featured close-up of woman N 600 propelling region toward integration V 602 sparking fears of domination N 604 tripled commitments in Asia N 604 tripled commitments to billion V 605 approved million of investment N 605 approved million in 1988 V 605 approved million of investment N 606 includes increases in trade N 607 pumping capital into region V 608 seek sites for production V 612 share burdens in region V 615 is part of evolution N 617 turn themselves into multinationals V 620 turn Asia into region V 622 spur integration of sectors N 623 make tubes in Japan V 623 assemble sets in Malaysia V 623 export them to Indonesia V 625 consider framework for ties N 628 offered plan for cooperation N 628 offered plan in speech V 629 playing role in region V 631 play role in designing V 633 outstrips U.S. in flows V 633 outranks it in trade V 633 remains partner for all V 634 pumping assistance into region V 635 voice optimism about role V 635 convey undertone of caution N 636 's understanding on part N 636 expand functions in Asia V 637 approach it with attitude V 637 be gain for everyone V 640 regard presence as counterweight V 642 step investments in decade V 645 giving Test of Skills N 645 giving Test to graders V 647 is example of profession N 650 matched answers on section V 651 had answers to all V 652 surrendered notes without protest V 653 use notes on test V 654 be one of the N 655 given questions to classes V 656 display questions on projector V 659 was days in jail V 660 is one of downfall N 662 became something of martyr N 663 casts light on side V 664 enforce provisions of laws N 665 win bonus under 1984 V 667 is pressure on teachers N 673 suspects responsibility for erasures N 673 changed answers to ones V 680 force districts into interventions V 683 posts score of the N 683 use SAT as examination V 684 paying price by stressing V 685 rates one of states N 686 is way for administrators N 686 take it at all V 688 keeping track of booklets N 693 was enrollment in honors N 694 becoming principal in years V 698 clean deadwood in faculty N 699 ushered spirit for betterment N 706 taught students in program N 706 consider teaching as career V 707 won money for school V 708 had Yeargin in year V 709 gave ambitions in architecture N 713 polish furniture in classroom N 715 correcting homework in stands V 717 defended her to colleagues V 721 earn points in program V 722 was improvement on tests N 724 Winning bonus for year V 728 attending seminar in Washington V 729 copied questions in the V 729 gave answers to students V 731 help kids in situation V 734 lift scores near bottom N 742 is president of School N 745 have sympathy for her V 749 taking law into hands V 753 said something like want N 755 turned knife in me V 758 decried testing on show V 759 give particulars of offense N 763 recommend Yeargin for offenders V 763 expunged charges from record V 764 cranked investigation of case N 768 carried logo on front V 771 did lot of harm N 772 cast aspersions on all V 773 casts doubt on wisdom V 773 evaluating schools by using V 774 opened can of worms N 780 find answer in worksheets V 780 give them in weeks V 784 is difference between test V 789 took booklets into classroom V 791 give questions to students V 804 rate closeness of preparatives N 812 was publication of House N 814 represented form of CAT N 817 completed acquisition of Sacramento N 817 completed acquisition for million V 818 has offices in California V 818 had assets of billion N 818 had assets at end V 821 extend moratorium on funding N 827 oppose funding for abortion V 828 implant tissue into brain V 829 placed moratorium on research V 829 pending review of issues N 831 fill posts at helm V 832 withdrawn names from consideration V 832 asked them for views V 834 is director of Institute N 835 imposing tests for posts V 838 be role for make V 838 make judgments about applications V 840 is one of institutions N 840 conducting research on transplants V 842 provide incentive for one N 845 spends million on research V 847 added 1.01 to 456.64 V 848 was beginning for November N 851 gained 1.39 to 446.62 V 852 gaining 1.28 to 449.04 V 853 jumped 3.23 to 436.01 V 854 permit banks from regions N 858 bid shares of banks N 858 bid shares on news V 860 surged 3 to 69 V 865 rose 7 to 18 V 867 rise 3 to 18 V 868 added 5 to 8 V 871 gained 1 to 4 V 871 reporting loss of million N 874 assuming fluctuation in rates N 874 achieve earnings in 1990 V 875 surged 3 to 55 V 876 begin offer for all V 877 rose 1 to 13 V 879 acquiring Radio in swap V 879 tumbled 4 to 14 V 880 owns % of Radio N 880 paying shareholders with shares V 881 lost 3 to 21 V 882 issued Monday under rights V 883 resolve disputes with company V 884 had stake in Rally V 884 seek majority of seats N 884 seek majority on board V 885 slipped 7 to 10 V 886 post loss for quarter V 887 had income of million N 887 had income on revenue V 888 threatened sanctions against lawyers V 888 report information about clients V 893 provide information about clients V 894 returned forms to IRS V 896 become witness against client N 897 red-flag problem to government V 897 received letters in days V 901 Filling forms about individuals V 901 spark action against clients V 903 passed resolution in 1985 V 904 disclosing information about client V 904 prevent client from committing V 905 bring actions against taxpayers V 907 opposed stance on matter N 911 had knowledge of actions N 911 had knowledge in week V 912 provide information about clients V 913 obtain returns of individual N 914 obtained forms without permission V 921 pass me in three V 921 ask them for loan V 922 increased pay by % V 928 discuss salary in detail V 930 suing Guild of East N 930 suing Guild for million V 933 began strike against industry V 934 honor strike against company V 940 preventing guild from punishing V 942 prohibits use of funds N 942 assist woman in obtaining V 943 prohibits funding for activities V 944 are source of funding N 944 are source for services V 945 violate freedom of speech N 945 violate rights of women N 946 CLEARS JUDGE of bias N 946 CLEARS JUDGE in comments V 947 sparked calls for inquiry N 947 sparked calls with remarks V 947 sentencing defendant to years V 947 killing men in park V 949 breach standards of fairness N 949 violate code by commenting V 954 began arguments in courtroom V 955 charged GAF with attempting V 955 manipulate stock of Corp. N 958 joined firm of Mayer N 959 became partner in Washington V 962 reached agreement in principle V 962 buy buildings in Albany V 967 bid equivalent on contracts V 968 offered yen for contract V 970 bid yen in auctions V 971 lost contract to Fujitsu V 973 summoned executives from companies N 973 understood concern about practices N 975 investigating bids for violations V 979 had reputation for sacrificing V 980 accepting gifts from businessmen V 982 been complaints about issue V 985 have access to procurement V 990 win contract in prefecture V 991 design system for library V 991 plan telecommunications for prefecture V 992 withdraw bids in Hiroshima V 1002 completed sale of four N 1002 retaining stake in concern V 1004 owns chain of stores N 1004 rose % to 32.8 V 1005 rose % to 29.3 V 1007 made purchase in order V 1008 bought plant in Heidelberg V 1016 reflects slowdown in demand V 1018 take a for period V 1018 cover restructuring of operations N 1018 citing weakness as decision N 1019 been slowing in rate V 1021 make reductions in expenses V 1023 had loss of million N 1024 had profit of million N 1025 rose % to million V 1026 reflects switch from wafers V 1027 converting Clara to facility V 1034 elected director of maker N 1034 increasing membership to 10 V 1035 posted gains against currencies V 1036 underpin dollar against yen V 1036 kept currency from plunging V 1038 posted gains against yen V 1039 is force in market V 1044 traced performance against yen N 1044 traced performance to purchases V 1046 cites deal as the N 1046 cites deal as evidence V 1047 prompted speculation in market V 1049 spurred dollar by institutions V 1050 lock returns on debt N 1051 showed interest in evidence V 1052 following release of report V 1053 measures health of sector N 1054 boosted expectations in day V 1059 turned ratings at NBC N 1059 turned ratings since debut V 1059 keeps millions of viewers N 1059 keeps millions on network V 1060 bought reruns for prices V 1063 losing Cosby to competitor V 1064 make commitments to World N 1068 take Cosby across street V 1071 is point in week V 1074 been disappointment to us V 1075 been return for dollar V 1079 opened office in Taipei V 1081 is part of Group N 1082 offering pages of space N 1083 thumbing nose at advertisers V 1085 made debut with promise V 1085 give scoop on crisis N 1087 dumped energy into rampage V 1089 be some of folks N 1090 raised ire of others N 1092 ran diagram of product N 1097 is one of products N 1097 is one in terms V 1100 need Soups of world N 1100 make run of it N 1101 have base of spenders N 1102 featured ads from handful N 1102 support magazine over haul V 1108 sold copies of issue N 1109 has orders for subscriptions N 1115 makes supplier of programming N 1116 providing programming in return V 1117 sell time to clients V 1118 named Spiro as agency V 1120 awarded account for line N 1120 awarded account to Mather V 1125 completed acquisition of Associates N 1128 increase price of plan N 1128 made offer for Containers N 1129 sell billion of assets N 1129 use some of proceeds N 1129 buy % of shares N 1129 buy % for 70 V 1130 ward attempt by concerns N 1131 offered 50 for Containers V 1132 sweetened offer to 63 V 1136 increase price above level V 1139 characterizing it as device V 1140 receiving 36 in cash V 1141 place shares in market V 1148 requiring roofs for minivans V 1149 equip minivans with belts V 1151 represents milestone in program N 1151 promote safety in minivans N 1151 promote safety through extension V 1153 impose standards on vans V 1154 including members of Congress N 1154 urging department for years V 1154 extend requirements to vans V 1155 carry people than cargo N 1155 have features as cars V 1156 have luck during administration V 1161 require equipment in minivans V 1163 withstand force of weight N 1165 has belts in trucks V 1165 phasing them by end V 1167 meet standard for cars N 1168 met standards for resistance V 1169 installing belts in trucks V 1175 joins board of company N 1175 joins board on 1 V 1177 held talks with partners V 1178 dropped opposition to bills N 1179 allow banking by banks V 1180 allow banking within England V 1182 had conversations with people N 1185 drop opposition to legislation N 1186 declining % to million V 1187 lay % of force N 1189 cut dividend to cents V 1190 is 2 to stock N 1192 reported income of million N 1194 become chairman in May V 1196 issued Monday in plan V 1197 receive 1 of cent N 1197 receive 1 as payment V 1198 resolve disputes with company N 1199 hold stake in Rally N 1199 seek majority of seats N 1200 announced tag for Cabernet N 1201 is peak of experience N 1201 introduced wine at dinner V 1203 is high for Sauvignon V 1204 weighed fall with price V 1205 is category of superpremiums N 1206 included stable of classics N 1210 boast share of bottles N 1215 was Blanc de Blancs N 1220 steal march on Burgundy N 1223 offered Corton-Charlemagne for 155 V 1229 exhausted supply of wines N 1229 seen decrease in demand N 1231 Take Cabernet from Creek N 1232 yielded cases in 1987 V 1233 sell it for 60 V 1234 Offering wine at 65 V 1234 sent merchants around country N 1234 check one of answers N 1236 are people with opinions V 1239 wins ratings from critics V 1240 add it to collection V 1241 's sort of thing N 1241 's sort with people V 1248 increased prices on wines N 1248 see resistance to Burgundies N 1250 keep Cristal in stock V 1250 lowering price from 115 V 1251 's question of quality N 1251 have ideas about value V 1253 buy Tache at moment N 1256 is writer in York V 1257 increasing pressure on Reserve N 1260 see slowing in quarter V 1261 is cause for concern N 1265 cut rate by point V 1265 shown sign of movement N 1268 noted orders for types V 1275 is chance of recession N 1275 put percentage on it V 1276 mailing materials to shareholders V 1277 receive one for shares V 1278 buy 100 of bonds N 1278 buy shares at cents V 1281 owns % of Integra N 1282 rejected contract on Tuesday V 1286 continue shipments during stoppage V 1287 sell billion in bonds N 1287 sell billion next week V 1289 raise money in markets V 1289 pay billion in bills N 1292 cause disruption in schedule N 1294 raise billion in cash V 1294 redeem billion in notes N 1299 sell billion in bills N 1299 sell billion on Thursday V 1301 approves increase in ceiling N 1301 clearing way for offering N 1302 raise billion in quarter V 1302 end December with balance V 1303 raise total of billion N 1306 acquired Inc. in transaction V 1308 has sales of million N 1309 took advantage of rally N 1316 buy shares of targets N 1318 had effect on markets V 1329 posted rise in profit N 1329 posted rise in half V 1331 sold unit to company V 1333 supplies services to industry V 1335 acquire Corp. for 50 V 1335 stepping pressure on concern N 1336 follows proposal by NL N 1337 rebuffed offer in September V 1338 made proposals to shareholders V 1345 own stake in Gulf N 1346 owns % of Inc. N 1348 rose cents to 15 V 1351 put dollars in equity N 1351 finance remainder with debt V 1353 answer offer by Tuesday V 1356 followed offers with offer V 1358 gain millions of dollars N 1361 representing University of Pennsylvania N 1361 added Johnson to lawsuit V 1361 challenging member over rights V 1363 filed suit in court V 1363 developed Retin-A in 1960s V 1364 licensed Retin-A to division V 1371 focusing attention on differences V 1371 's one of subjects N 1372 see rhetoric as signal V 1372 discussing negotiations with leaders V 1374 have opportunity at investment N 1376 devoted all of briefing N 1376 devoted all to subject V 1382 gain influence at company V 1383 grant seats on board N 1384 made hay with troubles V 1385 use experience in talks V 1385 seek access to markets N 1386 get share of attention N 1388 has litany of recommendations N 1388 has litany for the V 1390 need action across range V 1390 need it by spring V 1400 have sheaf of documents N 1404 increasing stake in business N 1405 improves access to technology N 1406 provides source of capital N 1407 Take deal with Corp. N 1407 set sights on Japan V 1409 guided Candela through maze V 1410 secured approval for products V 1411 sold million of devices N 1411 sold million in Japan V 1412 gave access to product N 1413 view this as area V 1415 bankroll companies with ideas V 1415 putting money behind projects V 1416 financed firms for years V 1417 invested million in positions V 1417 invested rise from figure N 1418 tracks investments in businesses N 1419 involved purchase of firms N 1420 parallels acceleration of giving N 1420 giving control of corporations N 1421 acquired stake in Group N 1423 improve access to knowledge N 1423 feed anxieties in area N 1426 bought interest in company N 1426 bought interest in venture V 1427 give window on industry N 1428 's investment in company N 1429 see market from inside V 1433 got start in period V 1435 using term for the N 1441 's problem of businessman N 1443 has relation to business V 1445 get return on investment N 1446 double number of affiliates N 1446 double number in 1990 V 1452 provides maintenance to airports V 1452 reported loss for year V 1452 omitted dividend on shares N 1453 been president since 1984 V 1459 put 15,000 in certificate V 1460 deserve something for loyalty V 1461 took business to Atlanta V 1471 use it for services V 1472 aiming packages at the V 1474 targets sub-segments within market N 1476 add benefits to package V 1479 included checks for fee V 1480 begot slew of copycats N 1484 analyze customers by geography V 1486 opened field for products V 1488 extend battles into towns V 1492 spread accounts over institutions V 1492 runs firm in Charlotte V 1500 introduce line in 1986 V 1503 have package for them V 1505 has packages for groups V 1506 split those into 30 V 1512 markets accessories for computers N 1513 Send child to university V 1513 Make difference in life N 1513 Make difference through Plan V 1514 spend 15,000 like change V 1517 helping S&L in areas V 1527 send support to institution V 1528 keep Institution off deficit V 1529 is lawyer in York N 1530 become Parent to loan V 1533 send information about institution N 1535 told meeting in Washington N 1535 support halts of trading N 1536 reinstating collar on trading V 1537 take effect in pit V 1540 following review of the N 1541 fell total of points N 1544 knocked contract to limit V 1547 provides respite during sell-offs V 1547 become limit for contract N 1551 banned trades through computer V 1553 expressed concern about volatility N 1558 done this in public V 1559 writing report to panel V 1562 been studies of issue N 1562 was time for action N 1563 carry legislation in months V 1564 expressed concern about problems V 1568 is one of the N 1568 calling faithful to evensong V 1571 is note in Aslacton V 1571 enjoying peal of bells N 1575 drive Sunday from church V 1578 diminish ranks of group N 1582 playing tunes on bells V 1587 have names like Major V 1589 gives idea of work N 1594 swap places with another V 1597 become bit of obsession N 1600 leaving worship for others V 1603 set line in protest V 1604 treated tower as sort V 1605 are members of congregation N 1607 following dust-up over attendance N 1612 draw people into church V 1614 improve relations with vicars N 1615 entitled Bells in Care N 1616 have priority in experience N 1624 is source of ringers N 1625 surfaced summer in series V 1626 signing letter as male V 1626 making tea at meetings V 1630 take comfort in arrival V 1632 signal trouble for prices V 1634 be trap for investors N 1635 kill them after mating N 1637 give way to environments V 1641 fell % in 1977 V 1643 rose % in 1988 V 1645 kept pace with advances V 1648 keeping watch on yield V 1650 pushes yield below % V 1661 paying percentage of flow N 1661 paying percentage in form V 1663 buy some of shares N 1664 factors that into yield V 1664 get yield of % N 1665 is tad below average V 1667 reflecting weakening in economy N 1668 forecasting growth in dividends N 1673 is tally from Poor N 1674 raised dividends in October V 1676 measure magnitude of changes N 1676 be harbinger of growth N 1678 deliver return to % N 1678 deliver return over months V 1679 expects growth in dividends N 1679 expects growth next year V 1680 is element in outlook N 1684 start Co. in Boston V 1684 had subsidiary in York V 1684 called Co. of York N 1688 registered days before application N 1688 dropped basis for plight N 1691 reported losses for quarters V 1695 build business over year V 1698 servicing base of systems N 1698 provide maintenance for manufacturers V 1698 using some of applications N 1700 pay dividends on stock V 1702 set rapprochement between Beijing N 1705 took aim at interference V 1709 forgiven leaders for assault V 1709 killed hundreds of demonstrators N 1710 including friends of China N 1713 expressed regret for killings N 1715 reprove China for it V 1719 imposed series of sanctions N 1719 including suspension of talks N 1720 is envoy for administration N 1722 brief president at end V 1724 raised number of issues N 1724 raised number in hours V 1726 restore participation in Program N 1728 is part of community N 1728 welcome infusion of ideas N 1729 told group of Americans N 1729 told group at Embassy V 1730 are signs of China N 1732 encounter guards with guns N 1732 encounter guards during visit V 1734 discarded arms for time V 1736 filed protests with Ministry V 1737 pointed rifles at children V 1743 passing buck to people V 1749 visited lot of manufacturers N 1750 spending lot of money N 1750 spending lot on advertising V 1753 Earns Ratings Than President N 1753 define blacks by negatives V 1753 have views of her N 1754 speaks language than husband N 1756 have view of spouse N 1762 disciplined number of individuals N 1762 disciplined number for violations V 1767 had listing for party N 1772 selling securities at prices V 1778 return call to office N 1783 received suspension in capacity N 1789 described situation as problem V 1790 transacting trades for days V 1791 sold securities to public V 1792 sold securities at prices V 1810 had clients at all V 1814 resist onslaught of trading N 1814 shrug furor over activities N 1818 exploit differences between prices N 1819 took place in markets V 1824 forgotten leap in prices N 1824 drove stocks in the V 1825 suspend trading in futures N 1825 suspend trading at time V 1827 tightened controls on purchases N 1829 reaped chunk of earnings N 1829 reaped chunk from arbitrage V 1830 joined list of firms N 1830 doing arbitrage for accounts V 1831 heads Salomon in Tokyo V 1831 ascribe part of success N 1831 ascribe part to ability V 1831 offer strategies to clients V 1837 is cause for concern N 1837 is cause at moment V 1843 manages billion in funds N 1847 gained following since crash V 1850 was % of size N 1851 is times as market N 1852 boost wage for time V 1852 casting vote for measure N 1854 cost thousands of jobs N 1855 bend bit from resistance V 1856 raising wage to 3.35 V 1859 are smiles about bill N 1862 praised acceptance of wage N 1867 pay subminimum for days V 1867 uses program for workers N 1870 lift floor in stages V 1871 received contract for services N 1872 won contract for aircraft N 1873 given contract for equipment N 1874 got contract for handling N 1875 made acquisitions in mode V 1877 leading bid for Corp N 1879 entice Nekoosa into negotiating V 1880 pursue completion of transaction N 1881 opens possibility of war N 1886 make bid for Nekoosa N 1887 picked approach to management N 1887 picked approach as president V 1888 Assuming post at age V 1888 is rule in universities N 1888 researching book on Hahn N 1892 make transition to world N 1895 spending years in college N 1896 earned doctorate in physics N 1899 engineered turnaround of Georgia-Pacific N 1903 building segment of company N 1904 buffet products from cycles V 1908 attributes gains to philosophy V 1912 be concern in world N 1912 be concern with combined V 1916 approved portions of package N 1916 approved portions in hopes V 1917 approved million in guarantees N 1917 approved million under program V 1919 provoked threats by House N 1920 are factor in shaping N 1921 reallocate million from Pentagon N 1924 receive portion of appropriations N 1925 fund series of initiatives N 1927 received quota of tons N 1927 received quota over period V 1928 are target for growers N 1929 began bidding by proposing V 1930 broadened list by including V 1931 has ties to industry N 1931 insert claim by Philippines N 1932 gave approval to billion V 1933 carries ban on flights N 1934 move measure to House V 1934 bounce bills to House V 1936 losing night with Committee N 1937 Takes Backseat To Safety N 1937 Takes Backseat on Bridges V 1944 replace openings on Bridge N 1945 blocks view of park N 1949 keep railings on Bridge N 1953 replace trays at stands N 1957 takes space than carriers N 1962 's place for food N 1964 promises change on sides N 1966 runs gamut from blender N 1967 swap teachers at Carnegie-Mellon N 1969 get exposure to system N 1970 making products for Soviets N 1971 renew sense of purpose N 1975 IT'S BIRDS with deal N 1977 seeking solutions to shortage N 1978 contain cells with point N 1980 compared them to pyramids V 1982 house inmates at cost V 1982 building prison in York V 1984 cited Corp. for violations V 1985 proposed fines of million N 1985 was record for proposed N 1986 cited violations of requirements N 1987 proposed million in fines N 1991 record injuries at works N 2001 contest penalties before Commission V 2002 was million for alleged N 2011 emphasized prevalance of alcoholism N 2012 had multitude of disorders N 2014 lack necessities of nutrition N 2015 predispose person to homelessness V 2015 be consequence of it N 2021 exhibits combination of problems N 2024 quote director of a N 2030 played role in number N 2034 cite groups as Association N 2034 got support from groups V 2038 including someone from staff N 2038 put them on streets N 2041 raise million through placement V 2045 discuss terms of issue N 2050 approved legislation on buy-outs N 2052 put brakes on acquisitions N 2052 load carrier with debt V 2055 block acquisition of airline N 2059 called amendment by supporters V 2059 preventing Chairman from attempting V 2060 drop Voice of offices N 2063 print text of broadcasts N 2072 are propaganda of sorts N 2073 make mind on issue V 2077 broadcasts news in languages V 2080 barred dissemination of material N 2081 read texts of material N 2081 read texts at headquarters V 2081 barred them from copying V 2085 print it in newspaper V 2087 sounded lot like censorship N 2088 lost case in court V 2092 changed position on points N 2095 declared right of everyone N 2095 disseminate materials in States V 2096 preclude plaintiffs from disseminating V 2098 allowed access to materials N 2098 allowed access notwithstanding designations V 2098 check credentials of person N 2103 proscribes government from passing V 2103 abridging right to speech N 2104 prescribe duty upon government V 2104 assure access to information N 2105 read Voice of scripts N 2105 visiting office during hours V 2107 copy material on machine V 2111 get words for examination N 2115 get answers to questions N 2117 was director of the N 2124 run Campbell as team V 2125 including executives with experience N 2134 is a in market N 2134 paid times for PLC V 2138 have rapport with employees N 2138 have responsibility for operations N 2139 joined Campbell in 1986 V 2139 take charge of operations N 2141 boost performance to level V 2142 controlled % of stock N 2144 took charge against earnings N 2147 discuss circumstances of departure N 2150 reached age of 65 N 2150 reached age in 1991 V 2151 withdrawn name as candidate V 2152 received salary of 877,663 N 2153 owns shares of stock N 2159 convince board of worthiness N 2161 give duo until year V 2162 take look at businesses N 2163 applaud performance of U.S.A. N 2163 posted growth for 1989 V 2197 announced resignation from house N 2206 handled growth of company N 2209 integrated acquisitions in years V 2212 been president of House N 2216 run side in combination V 2217 be publisher of books N 2223 signals attempt under pretext N 2226 gives veto over action N 2226 gives Congress through ability V 2228 swallow principle of separation N 2230 discussed clause at Convention V 2232 needed executive with resources N 2233 placing president on leash V 2234 contained attempts by Congress N 2234 rewrite Constitution under pretext V 2235 sign bills into law V 2235 declaring intrusions on power N 2236 strip president of powers N 2238 make appointments without approval V 2238 fill Vacancies by granting V 2239 approve nomination of said N 2240 make appointments under II V 2241 imposes conditions on ability V 2241 nominate candidates of choosing N 2243 avoid restriction by choosing V 2243 prohibits service to government N 2244 contain number of provisions N 2244 violate clause in II N 2246 make recommendations to Congress V 2246 select matter of recommendations N 2247 proposing alternatives to regulations N 2248 prevents Office of Budget N 2248 subjecting orders to scrutiny V 2250 illustrates attempt than 609 V 2253 contain kinds of conditions N 2254 invite Congress for remainder V 2254 rewrite II of Constitution N 2255 becomes custom in administration V 2257 discussing control in Moscow V 2257 direct president through rider V 2258 leave part of branch N 2258 sign bills into law V 2258 assert power of excision N 2264 be power of applicability N 2265 is assertion of veto N 2265 is assertion at all V 2265 exerting power of excision N 2265 violate separation of powers N 2266 asserts right of excision N 2268 takes dispute to Court V 2269 is vindication of right N 2273 take provisions in bills N 2275 realize fear in 48 N 2275 extending sphere of activity N 2275 drawing powers into vortex V 2279 was billion in 1987 V 2280 deducting expenses from income V 2283 saved farmers from year V 2283 reclaim quantities of grain N 2284 sell commodities at profit V 2287 attributed increases to package V 2288 confirms rebound from depression N 2289 explain reluctance of lobbies N 2289 make changes in program N 2290 curtailed production with programs V 2294 led nation with billion V 2295 log decline in income N 2296 was setback for 10,000 N 2300 boosted production of corn N 2304 turns city into town V 2306 faces competition in County N 2306 faces competition in Valley V 2308 put paper on block V 2309 asking million for operation V 2313 buy space in the V 2313 target area with one V 2315 provide alternative to the N 2317 joins News-American as cornerstones V 2319 built castle at Simeon N 2320 kept apartment in building N 2321 represent condition of industry N 2322 was survivor from age N 2324 cut circulation in half V 2327 restored respect for product N 2328 beat rival on disclosures V 2331 provide employees with service V 2331 pay them for days V 2339 filling box with edition V 2342 make payment on million V 2343 obtain capital from lenders V 2344 make payment by 1 V 2345 seeking offers for stations N 2346 leave home without card V 2348 joining forces in promotion V 2348 encouraging use of card N 2349 giving vacations for two N 2349 giving vacations to buyers V 2349 charge part of payments N 2349 charge part on card V 2350 sending letters to holders V 2352 approached Express about promotion V 2354 restore reputation as car N 2357 is part of effort N 2357 broaden use of card N 2359 is company with maker N 2359 promote card as card V 2361 charge all of purchase N 2361 charge all on card V 2362 finance part of purchase N 2362 finance part through Corp V 2362 put payment on card V 2364 joining forces with them V 2365 is nameplate among holders V 2366 asked members in mailing V 2366 get information for purchases V 2368 screened list for holders V 2370 get point off rates N 2371 increase use of cards N 2371 have plans for tie-in N 2380 offered tickets on Airlines N 2380 offered tickets to buyers V 2382 declared variety of deals N 2384 set precedent for municipalities V 2387 retraced some of losses N 2388 lost millions of pounds N 2388 lost millions from deals V 2391 make payments on debt N 2391 making payments with another V 2392 make payments to banks V 2396 set precedent for transactions N 2397 representing one of banks N 2400 exhaust avenues of appeal N 2401 recover payments to authorities N 2401 recover payments in instances V 2401 made payments to councils N 2403 file appeal against ruling N 2411 cause fall on 13 N 2413 are proponents of trading N 2414 make markets in stocks V 2416 announced addition of layer N 2416 slow traders during market V 2416 approve restrictions on trading N 2417 turning market into crapshoot V 2417 abandoned arbitrage for accounts V 2418 do trades for clients V 2420 stop racket on Street N 2421 telephone executives of companies N 2422 rallying CEOs to cause V 2427 gained control over chunk N 2427 wedded them to ability V 2431 wrote letter to Chairman N 2434 pitting employee against employee V 2444 made shambles of system V 2444 turning market into den V 2446 portray pickers as Neanderthals V 2448 beg regulators for protection V 2450 take advantage of discrepancies N 2452 place orders via computers V 2452 sell them in market V 2452 lock difference in price N 2452 lock difference as profit V 2453 involve sale of millions N 2454 earns profit of 25,000 N 2458 is reason for gyrations N 2459 seen iota of evidence N 2459 support restrictions on trading N 2463 halted trading in futures N 2464 ignoring role as source V 2469 keep returns of benchmarks N 2470 losing clients to funds V 2471 charge pennies per 100 V 2473 make dinosaurs of firms N 2474 earned returns of % N 2474 earned returns on capital V 2474 making markets in stocks N 2475 see step to trading N 2475 see step as knell V 2477 keep funds from taking V 2477 taking business to markets V 2483 stacking deck against them V 2483 scaring them to death V 2487 buy stocks in 500 N 2490 doing % of volume N 2498 minted dozens of millionaires N 2499 trade worth of futures N 2501 getting thunder from Congress V 2503 put system in jeopardy V 2505 put genie in bottle V 2507 stop idea of trading N 2507 trading basket of stocks N 2510 is increase in requirement N 2514 chase dozens of traders N 2516 prevents sale of stock N 2519 destroy efficiency of markets N 2522 suspend trading during swings V 2524 is form of trading N 2525 takes advantage of concept N 2527 owns widget in York N 2527 replace it with widget V 2528 beat return of index N 2534 executing order in stocks V 2535 is evidence of desires N 2535 make transactions of numbers N 2536 taking advantage of inefficiencies N 2536 evoking curses of observers N 2539 is difference between markets N 2541 causes difference in prices N 2541 initiating sell in Chicago N 2543 transfers pressure from Chicago V 2544 decrease ownership in widgets N 2546 get execution of trade N 2549 is subtraction to market N 2552 become ticket of future N 2555 encourage type of investor N 2555 encourage type over another V 2556 attract investor to he V 2562 using trading as boy V 2562 gain ground in wooing N 2562 wooing investors for products V 2563 bringing interference from markets V 2567 is one for abolishing N 2570 amass record with fees N 2573 offering it to investors V 2582 inviting liquidity with ways V 2582 transfer capital among participants V 2583 executes trades for institutions V 2585 affect operations of Department N 2586 cut request for enforcement N 2587 make filings to regulators N 2593 requested amount for enforcement N 2593 requested amount for 1990 V 2596 charges nothing for filings V 2598 is increase of million N 2604 noticed surge in filings N 2605 set record for elections N 2608 represent the in any N 2612 cites efforts in Oklahoma N 2614 Taking cue from California V 2619 reflect development of structure N 2621 is sort of sense N 2621 is sort in market V 2625 fetching deal of money N 2626 brings number of services N 2628 costs caller from cents V 2630 noting interest in use N 2631 eyeing registration through service N 2632 face barriers to raising N 2635 improving rates of patients N 2635 improving rates at Hospital V 2639 send light to dozens V 2641 including emphasis on medicine N 2648 gotten inquiries from people V 2650 limited growth at Services N 2651 spurring move to cloth N 2651 eliminate need for pins N 2653 bearing likeness of Freud N 2659 have advantage because quantity V 2660 blames trading for some V 2661 cites troubles in bonds N 2665 's virtue in it V 2671 does anything for market V 2675 runs agency in York N 2678 plays options for account V 2678 factoring volatility into decisions V 2679 increases liquidity in market N 2685 is part of markets N 2689 bring market after plunge V 2691 get rhythm of trading N 2691 take advantage of it N 2695 sell all by quarter V 2696 sell stocks in trust N 2699 took advantage of prices N 2705 receive 3,500 at closing V 2706 approved transaction by written V 2707 raised capacity of crystals N 2707 raised capacity by factor V 2708 created changes in structures N 2709 made advance with superconductors V 2711 marks step in research N 2712 obtained capacity in films V 2713 conduct electricity without resistance V 2719 created changes by process V 2719 bombarding samples with neutrons V 2719 creates radioactivity in samples V 2720 breathed sigh of relief N 2720 breathed sigh about finding V 2721 involves motion of fields N 2722 pins fields in place V 2725 combine process with growth V 2726 raise capacity of samples N 2727 named officer of Corp. N 2730 succeeded Taylor as chairman V 2731 posted loss of million N 2732 had impact of million N 2754 is million of bonds N 2758 expect rating from Moody V 2759 indicating coupon at par N 2760 buy shares at premium V 2767 is Monday from 1989 N 2771 is Tuesday from 1989 N 2776 have home for them V 2777 is fan of proposition N 2777 build replacement for Park N 2778 sink million into stadium V 2783 be moneymakers for city N 2785 brought money into city V 2786 redistribute wealth within community V 2787 sink dollars into mega-stadium V 2790 spent 100,000 on promotion V 2791 rejected % to % N 2793 built Park for Giants V 2795 playing games with voters V 2798 built coliseum with funds V 2807 slipped % to million V 2808 fell % to million V 2809 were losses in period N 2809 was gain of million N 2810 was profit from discontinued V 2810 contributed million before tax V 2811 fell % to million V 2811 rose pence to pence V 2812 paying dividend of pence N 2813 fell % to million V 2817 sent shivers through community V 2820 retain ratings on paper N 2821 reduce margins on borrowings N 2821 signal trouble for firms V 2825 shoring standing in months V 2826 taking risks with capital V 2827 's departure from practice N 2827 transferring risks to investors V 2829 raised flag for industry N 2829 raised flag in April V 2833 acquires company in transaction V 2834 create prospects for profitability N 2837 arranged billion of financings N 2837 arranged billion for units V 2839 represent portion of equity N 2842 been participant in business N 2844 includes billion of goodwill N 2845 has million of capital N 2847 had Shearson under review V 2850 taken toll on Drexel N 2852 cutting workforce in half V 2853 circulated statement among firms V 2853 diminished year from years V 2857 is plus in view V 2858 been firm on Street N 2860 been president of engineering N 2862 sought involvement of suppliers N 2865 change perception of cars N 2866 holding variety of positions N 2867 hear appeal from case N 2868 offer kind of aid N 2868 offer kind to those V 2870 becomes precedent for cases N 2873 reported cases among daughters N 2881 expanded approach for time V 2881 pay share of damages N 2882 sold all in California V 2883 are issues of process N 2886 chilled introduction of drugs N 2887 rejected liability for drugs N 2888 favors marketing of drugs N 2889 forced drug off market V 2890 suffer injuries from drugs N 2896 replaced lawsuits over vaccines N 2896 replaced lawsuits with fund V 2898 trash law in cases N 2900 completed purchase of chain N 2901 operates stores in Northeast N 2901 reported revenue of billion N 2902 runs stores as Taylor N 2905 had guilders of charges N 2905 had guilders in quarter V 2905 reflect losses in connection N 2907 had guilders of charges N 2908 cut spending by half V 2914 send million in aid N 2914 send million to Poland V 2916 harmed farmers in Salvador N 2919 need market for products N 2920 expects income in year N 2924 fell 1.125 to 13.625 V 2925 fell % to % V 2927 earned million on revenue V 2928 attributed downturn in earnings N 2928 attributed downturn to costs V 2930 carry it through period V 2931 edged Wednesday in trading V 2933 added points to 35564.43 V 2934 fell points to 35500.64 V 2936 outnumbered 454 to 451 N 2937 reflecting uncertainty about commitments N 2938 sparked buying in issues V 2939 is liquidity despite trend V 2945 regarding direction of market N 2950 advanced yen to 1,460 V 2951 gained 20 to 1,570 V 2951 rose 50 to 1,500 V 2952 fell yen to 692 V 2952 added 15 to 960 V 2954 advanced 11 to 890 V 2955 affecting demand for stocks N 2956 closed points at 2160.1 V 2957 posting intraday of 2141.7 N 2957 posting intraday in minutes V 2958 ended day near session V 2963 settled points at 1738.1 V 2965 hugging sidelines on fears V 2966 cited volatility as factors V 2968 tender bid for control N 2969 waive share in maker N 2969 raised prospects of war N 2970 gain acceptance of bid N 2971 sparked expectations of bid N 2972 rose 9 to 753 V 2973 eased highs in dealings V 2974 gained 15 to 397 V 2974 reporting drop in profit N 2977 cover requirements in shares N 2977 climbed 32 to 778 V 2979 gained 18 to 666 V 2980 advanced 23 to 14.13 V 2986 are trends on markets N 3001 alleging violations in facility N 3002 stored materials in containers V 3004 held hearings on allegations N 3004 returned plant to inspection V 3005 expects vindication in court N 3008 had effect on consumers V 3010 was 116.4 in October V 3011 was 116.9 in 1988 V 3012 uses base of 100 N 3022 providing sense of security N 3022 kept power of paycheck N 3024 buy homes in months V 3030 buy appliances in months V 3037 ranked offering as sale V 3039 paid attention to reports N 3039 provided view of economy N 3043 blurred picture of economy N 3046 reported declines in activity N 3049 enhances importance of data N 3050 caused swings in prices N 3052 forecast rise in rate N 3054 create one for refunding V 3055 raise billion in cash N 3056 issue billion of bonds N 3056 increasing size of bond N 3058 gauge demand for securities N 3059 is contingent upon passage N 3060 issue debt of kind N 3067 dominated activity in market N 3069 posted return of % N 3069 showed return of % N 3074 outdistanced return from bonds N 3078 trailed gains in market N 3080 yielding % to life V 3085 including lack of interest N 3091 was interest in bonds N 3097 fell 14 to 111 V 3098 fell 9 to 103 V 3099 lowered rating on million N 3100 exceeds profit by margin V 3100 noted loss of million N 3102 including gains of million N 3105 fell % in quarter V 3105 lost million in business V 3106 posted earnings of million N 3108 included charge in quarter V 3109 ordered investigation of impact N 3110 referred takeover to Commission V 3111 sold business to Ltd. V 3112 is unit of S.A N 3114 has branches throughout U.K. V 3114 had profit of million N 3118 throws work on legislation N 3119 has control over legislation N 3120 guarantee cut in emissions N 3122 abandon proposal for cap N 3124 junk system for credits N 3125 subsidize costs for utilities N 3125 sparing customers from jumps V 3127 present alternative to members V 3128 pose challenge to plan N 3129 win support of utilities N 3130 representing some of utilities N 3132 have agreement with company V 3133 acquired % of City N 3133 acquire % from Co. V 3136 coordinate markets in times V 3138 routes trades into file V 3140 fall points from close V 3141 halt trading for hour V 3141 slides points on day V 3144 zip orders into exchange V 3144 handles % of orders N 3145 buy quantity of instrument N 3145 buy quantity at price V 3148 swapping stocks for futures V 3149 involving sale of stocks N 3152 selling baskets of stocks N 3152 executing trades in options V 3153 capture discrepancies between stocks N 3155 buy value of index N 3155 buy value by date V 3156 multiplying number by amount V 3158 buy amount of investment N 3158 buy amount by date V 3162 seek control of airline N 3163 make bid by himself V 3165 boost value of holdings N 3168 position himself as investor V 3170 sold stock at profit V 3170 making filing before collapse V 3171 acquired stake at cost V 3171 reduced stake to % V 3171 accepted bid at prices V 3172 boost value of stock N 3174 adds twist to speculation V 3180 boost value of any N 3183 land job with UAL V 3184 reach kind of accord N 3184 reach kind with employees V 3186 owned % of Williams N 3186 pay shares for rest V 3187 pay share for share V 3192 acquired assets of agency N 3194 bought shares of stock N 3194 bought shares for 3.625 V 3195 boosts stake to % V 3196 oust Edelman as chairman V 3197 including sale of company N 3202 extended offer for stock N 3202 extended offer until 9 V 3204 owns million of shares N 3209 reported earnings for quarter V 3216 rose % to billion V 3217 cited showing by segment N 3218 soared % to million V 3219 had revenue for months V 3220 muscling aerospace for time V 3221 jump % to million V 3225 took hits in quarters V 3226 posted net of million N 3227 Excluding additions to profit N 3227 were 2.47 from 2.30 V 3228 rose % to billion V 3229 cut prices by % V 3230 include reduction on computer N 3235 buy quantity of sugar N 3240 rose limit of cent N 3240 rose limit to cents V 3241 export sugar during season V 3241 produce alcohol for fuel V 3244 is producer of sugar N 3247 total tons in contrast V 3252 been switch in decade V 3256 have contacts with industry N 3259 fuel portion of fleet N 3261 had problems in years V 3262 buy sugar on market V 3270 showed decline in inventories N 3274 buys grains in quantity V 3274 buy tons of wheat N 3275 receiving status from U.S V 3277 running purchases of bushels N 3277 running purchases in October V 3279 advanced cents to 1.1650 V 3283 extend state of emergency N 3283 extend state in Island V 3285 find buyer for chain V 3285 sell stake in chain N 3285 sell stake to management V 3285 reduce investment in retailing N 3286 seeking buyer for chain V 3288 rang sales in 1988 V 3289 operates stores in Iowa N 3290 buy interest in chain N 3290 buy interest in January V 3291 reduce stake in Younkers N 3292 changing offer for company N 3292 changing offer to 13.65 V 3293 pay cash with preference V 3295 accrue dividends at rate V 3297 gave reason for offer N 3298 submit offer to committee V 3300 been manager for months V 3301 followed tenure as editor N 3304 is reason for departure V 3307 choosing people of tomorrow N 3308 reflects change in strategy N 3311 rose pence to pence V 3312 representing shares in market V 3314 becomes director of affairs N 3315 becomes director of programs N 3316 extended offer for shares N 3318 launched suit in court V 3318 seeking withdrawal of rights N 3320 hold % of shares N 3321 set 10 as deadline V 3325 reported loss of million N 3326 had loss of million N 3328 declined % to million V 3329 cited softening in demand N 3330 report loss of million N 3332 write million in costs N 3333 cited amortization of goodwill N 3333 cited amortization as factors V 3336 bearing brunt of selling N 3338 added 0.84 to 341.20 V 3339 gained 0.99 to 319.75 V 3339 went 0.60 to 188.84 V 3340 led decliners on Exchange V 3343 stood month at % V 3348 offset impact of profit-taking N 3349 awaits release of data N 3349 awaits release with hope V 3350 stick necks in way V 3351 jumped 3 to 47 V 3351 sparked revival of rumors N 3353 went 3 to 1 V 3355 climbed 3 to 73 V 3355 mount offer for company N 3357 rose 1 to 177 V 3359 added 3 to 51 V 3359 acquire stock for 50 V 3360 has stake of % N 3361 launched offer for company N 3361 dropped 3 to 61 V 3362 lost 1 to 50 V 3364 rose 3 to 39 V 3364 added 1 to 24 V 3364 gained 1 to 48 V 3364 fell 7 to 48 V 3364 lost 3 to 31 V 3364 dropped 1 to 40 V 3365 rose 3 to 53 V 3366 has yield of % N 3367 dropped 1 to 17 V 3368 sell stake in unit N 3368 sell stake for million V 3368 cut estimates of value N 3369 tumbled 2 to 14 V 3371 went 1 to 19 V 3372 marketing lens for use N 3373 gained 1.56 to 372.14 V 3375 rose 1 to 16 V 3377 convert partnership into company V 3378 have impact on results N 3379 exchange assets for shares V 3383 holds % of units N 3384 rose % to yen V 3385 cited sales against backdrop N 3386 surged % to yen V 3387 climbing % from yen V 3392 owns % of shares N 3392 exchange share of stock N 3392 exchange share for share V 3394 plunged 4 to 14.75 V 3395 have rate of 1.76 N 3400 include loss of million N 3401 exceed net of million N 3402 makes bombs for business V 3405 rose % to million V 3408 reflected loss from Hugo N 3411 maintain million in capital N 3413 had loss of 158,666 N 3415 reported loss of 608,413 N 3417 sold shares of stock N 3417 sold shares to interests V 3418 represents % of shares N 3422 increased worth to million V 3423 raised price for jeweler N 3423 raised price to 57.50 V 3429 raises presence to stores V 3431 said problems with construction N 3434 be shareholder in company N 3439 reported loss of million N 3440 had income of 132,000 N 3441 is write-off of servicing N 3441 been drain on earnings N 3442 eliminate losses at unit N 3443 eliminated million of will N 3444 assuming fluctuation in rates N 3447 has assets of billion N 3448 completed acquisition of Inc. N 3451 adopt First of name N 3452 eliminate positions of company N 3453 take jobs with First N 3454 reduce results for 1989 N 3454 reduce results by million V 3455 provides cents for stockholders V 3457 receive stock in company N 3463 ENDED truce with Contras N 3464 citing attacks by rebels N 3465 reaffirmed support for elections N 3468 launched offensive against forces N 3469 called protests in country N 3469 showing support for renovation V 3474 extend moratorium on funding N 3476 treat diseases like Alzheimer N 3479 approved portions of package N 3483 sabotage elections in Namibia N 3484 took responsibility for slaying N 3484 avenge beheading of terrorists N 3486 concluded days of talks N 3489 continue program of modernization N 3490 defeated motion in history N 3492 take place in waters V 3494 unveiled package of initiatives N 3494 establish alternatives to trafficking N 3494 establish alternatives in nations V 3497 warned U.S. about attack V 3499 completed offer for Inc. N 3499 tendering % of shares N 3499 tendering % by deadline V 3500 take ownership of studio N 3501 assuming billion of debt N 3506 told employees in operations N 3509 earned million on revenue V 3512 posted gain in profit N 3514 rose % to yen V 3515 surged % to yen V 3517 pushed sales in construction V 3528 rose 3.375 to 47.125 V 3529 stem drops in market N 3531 received bid from investor V 3532 steps pressure on concern N 3535 buy % of parent N 3536 make bid by himself V 3538 block buy-outs in industry N 3539 face fine of million N 3543 face requirements as automobiles N 3544 sell billion in bonds N 3554 cast pall over Association V 3554 built thrift with bonds V 3557 reaching 3 on rumors V 3561 's 10 of equity N 3562 has shares in hands N 3565 attend restructuring of Columbia N 3570 write junk to value V 3570 sell bonds over years V 3571 wrote million of junk N 3571 reserved million for losses V 3573 provide data on junk N 3576 has gains on traded V 3579 holding some of investments N 3585 sell bank as operation V 3585 use some of proceeds N 3586 is subject of speculation N 3599 awarded patents for Interleukin-3 V 3600 make factor via technology V 3601 licensed rights for Interleukin-3 V 3601 conducting studies with it V 3603 induce formation of cartilage N 3605 filed applications on number V 3608 question rating in hearings V 3609 add voice to court V 3614 gives a to nominees V 3615 gives rating to those V 3616 acquire % of AG N 3616 acquire % from Foundation V 3618 buying stake in company N 3618 expand production of supplies N 3619 provides fit with unit N 3620 is part of strategy N 3621 had sales of marks N 3621 has backlog of marks N 3623 bring stock to market V 3624 issued rulings under act N 3625 investigate complaints by makers N 3625 reaching U.S. at prices V 3626 defines prices as ones V 3628 find violations of law N 3628 assess duties on imports V 3633 estimate size of charge N 3635 increase benefits to % V 3637 called part of strategy N 3640 take advantage of plan N 3643 rose cents to 38.875 V 3644 been target of speculation N 3649 elected director of concern N 3650 increases board to seven V 3652 gives example of integrity N 3653 offered trip from Bronx N 3653 offered trip by one V 3653 accepting anything of value N 3654 reading book about fingers N 3655 lead us along path V 3655 producing equipment for Navy V 3656 became partner after creation V 3660 falsify ownership of corporation N 3663 plugged itself into rhetoric V 3663 using angle through '80s V 3666 made use of techniques N 3668 became partners in company N 3673 found day on job N 3677 changed name to London V 3677 became author of book N 3681 leaving gold in street V 3682 have characteristics as Wedtech V 3683 take place in programs V 3686 are groups of people N 3687 selling decisions of government N 3688 are version of Nomenklatura N 3689 line pockets of insiders N 3691 was officer of Corp. N 3696 open talks with receivers V 3697 avert exodus of workers N 3698 become shareholders in company N 3699 take stake in company N 3700 holding contracts for ships N 3702 has ships on order V 3702 presented claims for damages N 3702 presented claims in court V 3703 began Tuesday in court V 3705 repay million in debt N 3705 repay million through sales V 3708 moved headquarters from Irvine V 3712 reported decline in earnings N 3716 included gain of million N 3720 attributed slump to costs V 3722 realized profit on increases V 3725 closed yesterday at 80.50 V 3727 had change in earnings V 3729 compares profit with estimate V 3729 have forecasts in days V 3731 completed acquisition of Corp. N 3732 causing bottlenecks in pipeline V 3733 move crop to ports V 3735 reaping windfall of business N 3737 bought bushels of corn N 3737 bought bushels in October V 3738 be strain in years V 3740 shipping corn in that V 3743 reduce flow of River N 3744 cutting flow of River N 3748 hamstrung shipments in wake V 3749 been factor in trading N 3750 use price of contracts N 3750 buy corn from farmers V 3756 offering farmers for corn V 3761 is plenty of grain N 3763 relieve pressure on Orleans N 3773 advanced cents to 19.94 V 3776 fell 3.20 to 377.60 V 3777 declined cents to 5.2180 V 3780 was result of uncertainty N 3781 creating attitude among traders V 3786 rose cents to 1.14 V 3788 included number of issues N 3789 was reaction to stocks N 3790 means interest for metal N 3794 indicates slowing in sector N 3795 show reading above % N 3796 unveiled models of line N 3798 posted drop in profit V 3798 offset weakness in operations N 3800 includes gains of million N 3801 had gain from settlement N 3804 sold chunks of segments N 3804 eliminating income from operations V 3808 attributed earnings for segment N 3808 attributed earnings to loss V 3808 is venture with Ltd N 3809 dropped % to million V 3811 posted drop in income N 3812 exceeded projections by analysts N 3812 expected volume of sales N 3815 sell mix of products N 3817 boost profit for unit V 3821 reduced debt by billion V 3821 bought shares of stock N 3823 increased stake in USX N 3823 increased stake to % V 3828 increasing membership to nine V 3829 named officer in August V 3831 claim authority for veto N 3832 veto part of bill N 3834 gives authority for veto N 3838 was discussion of veto N 3840 be course of action N 3840 claim authority without approval V 3841 sell platforms to Co. V 3843 begin delivery in quarter V 3844 Take Stage in City V 3847 sold year in U.S. V 3848 anticipates growth for maker N 3849 increased quarterly to cents V 3853 limit access to information N 3854 ease requirements for executives V 3854 undermine usefulness of information N 3854 undermine usefulness as tool V 3855 make argument in letters V 3855 exempt executives from reporting V 3855 reporting trades in shares V 3856 report exercises of options N 3858 paid obeisance to ideal V 3860 report sales of shares N 3860 report sales within month V 3863 produced mail than issue N 3866 improve law by conforming V 3866 conforming it to realities V 3872 publish names of insiders N 3872 file reports on time V 3877 write representatives in Congress N 3879 oversees billion for employees V 3879 offer options to participants V 3881 begin operation around 1 V 3883 are part of fund N 3884 carry part of agreement N 3885 shun securities of companies N 3890 transfer money from funds V 3890 receive cash from funds V 3892 purchase shares at price V 3893 protect shareholders against tactics V 3896 taken line about problem V 3900 embraced Age as listening V 3903 was case in point N 3905 play tune from record N 3907 reflected side of personality N 3913 chanted way through polyrhythms V 3916 featured show of images N 3921 offered music of evening N 3921 offered music after intermission V 3921 juxtapose performer with tracks V 3923 warned us in advance V 3924 illustrated tapestry with images V 3925 was jazz with pictures V 3931 was thanks to level N 3932 was substitute for evening N 3934 gave blessing to claptrap V 3935 liberated U.S. from one V 3936 traduce charter of promoting N 3942 had success at achieving V 3943 means redistributionism from West N 3944 give rights against press N 3944 block printing of ideas N 3945 converted ideals of liberty N 3945 converted ideals into rights V 3949 holding meetings in Paris V 3954 contributed % of budget N 3956 raise funds by selling V 3958 see argument against UNESCO N 3959 shows power of ideas N 3960 fear principles at home V 3961 are experts at obfuscation N 3962 have purposes at times V 3962 cloud allure of concepts N 3964 developed technique for creating N 3964 creating plants for number V 3965 prevents production of pollen N 3966 prevent plant from fertilizing V 3969 have effect on production V 3969 is one of producers N 3971 are distance on plant V 3972 cut tassels of plant N 3973 sow row of plants N 3979 pulling organs of plants N 3982 deactivates anthers of flower N 3983 hurt growth of plant N 3984 get plants in numbers V 3985 attached gene for resistance N 3985 attached gene to gene V 3988 leaving field of plants N 3990 accommodate peculiarities of type N 3991 include corn among crops V 3992 obviate need for emasculation N 3992 costs producers about million V 3993 spurred research at number V 4001 create hybrids in crops V 4002 involves insects as carriers V 4006 is sign of divisiveness N 4009 was skirmish over timing N 4010 organize borrowing in Japan V 4011 play roles in financing V 4012 shows power of titans N 4014 raise dollars to 4 V 4016 block Wellington from raising V 4016 raising money in Japan V 4018 told reporters in Wellington V 4018 guaranteed loans to Ltd. V 4022 separate industries from each V 4025 seeking access to kinds N 4025 open them to brunt V 4028 stretch limits of businesses N 4029 started venture with Co. V 4029 use accounts like account V 4029 attracting wrath of banks N 4030 sells stocks to institutions V 4030 stirred anger of firms N 4035 named director at company N 4037 was director of division N 4046 's time for season N 4047 is debut of Association N 4048 begin season in stadiums V 4049 's swig of elixir N 4052 reclaim ballparks for training V 4054 's one for accountants N 4054 have beer with Fingers V 4057 field bunt from Kingman N 4058 's one for fans V 4059 stopped workout of Suns N 4059 slip cards to Man V 4060 join fans like Castro N 4061 is brainchild of developer N 4062 offering chance of season N 4063 made trip to Florida N 4066 be bridge into the N 4067 relive duels in sun V 4067 recapture camaraderie of seasons N 4070 left baseball in 1978 V 4075 take leave from selling N 4075 selling insurance in Texas V 4077 made appearance for Rangers V 4079 forced him to minors V 4080 's satisfaction in going V 4081 cut it after age V 4083 sipping beer after practice V 4083 repeating feat against White V 4084 dislike idea of attempting N 4087 be end of story N 4095 be lot of malice N 4102 savoring sound of drive N 4104 Expect stuff from pitchers V 4111 Stuffing wad of Man N 4111 Stuffing wad into cheek V 4120 holds % of franchise N 4120 has operations in Aiken V 4121 provides service in states V 4121 exercised right of refusal N 4121 following offer from party N 4121 acquire position in franchise N 4126 exchanged shares for each V 4128 appointed officer of chain N 4129 was officer of Inc. N 4131 are guide to levels N 4160 rose % in August V 4161 was % from level V 4162 is value of output N 4163 rose % from July V 4165 dropped % in September V 4166 reported decline in index N 4166 reported decline for September V 4167 dropped today from group V 4170 had losses in quarters V 4171 have exposure to loans N 4175 cleared way for war V 4175 remove obstacle to takeover N 4176 told House of Commons N 4176 relinquish share in company N 4177 restricts holding to % V 4179 fires pistol for contest V 4180 amass stakes in Jaguar N 4187 following suspension on London N 4188 were pence to pence V 4190 make move with offer V 4192 sent shares in weeks V 4195 put pressure on GM V 4195 make offer as knight V 4197 fight Ford for Jaguar V 4198 pays packet for Jaguar V 4200 be player in town V 4201 paying price for Jaguar V 4203 representing % of shares N 4211 ensure future for employees N 4211 provide return for shareholders V 4214 set howl of protests N 4214 accused administration of backing N 4216 shed issue before election V 4219 favor GM by allowing V 4219 preclude bid by Ford N 4220 answering questions from members N 4220 answering questions after announcement V 4223 completed formation of Elanco N 4223 combining businesses as business V 4224 be concern in America N 4224 be concern with projected V 4225 own % of venture N 4225 own % with holding V 4229 fighting offer by Partners N 4236 has background in management V 4240 retain rest of team N 4241 reported loss of 889,000 N 4244 fell % in September V 4245 shows signs of retreating N 4246 totaled 911,606 in September V 4247 rebounded Tuesday from losses V 4252 outnumbered 542 to 362 V 4256 feel need despite factors V 4257 declined 5.16 on Monday V 4263 showing strength despite slowdown V 4265 announced Monday in York V 4266 ended day at 2680 V 4267 sparked interest in companies N 4268 rose 40 to 2170 V 4269 gained 40 to 2210 V 4271 be losers by afternoon V 4272 rose yen to yen V 4273 fell yen to yen V 4274 waive share in maker N 4278 wants stock on books V 4279 reaching minimum of 2120.5 N 4279 reaching minimum of 2120.5 N 4283 abolish share in Jaguar N 4284 protect company from takeover V 4288 clarify approach to issues N 4301 rose % in September V 4302 leave index at 178.9 V 4304 were part of growth N 4304 were part with rise V 4305 linked gain to prices V 4306 being source of pressure N 4311 reflecting acquisitions from Corp. N 4311 licenses name to Metromedia V 4312 is provider of service N 4312 is provider with projected V 4313 has interests in telecommunications V 4314 rose % in months V 4314 matching target for year N 4317 projecting increase for year V 4318 won contract from Service V 4319 install 267 of machines N 4322 succeed Brissette as officer V 4323 be consultant to company N 4329 adjusted payouts on CDs N 4329 adjusted payouts in week V 4340 added point to % V 4341 attributed rise to increase V 4346 have yields on CDs V 4349 was attendee at convention N 4350 introduce bit into itinerary V 4351 embody state of blase N 4351 finding machine in Paris V 4351 having none of it N 4361 held all for people V 4362 Feeling naggings of imperative N 4363 tell you about ballooning V 4363 requires zip in way V 4376 was turn in balloon N 4376 followed progress from car V 4379 put hands above eyes V 4384 heating air with burner V 4387 is sense of motion N 4389 was member of convention N 4391 lifted 12-inches above level N 4392 plunged us into drink V 4396 enlisted aid of farmer N 4397 disassemble half-an-hour of activity N 4406 drive value of dollar N 4406 minimize damage from drop N 4407 provoked fall in currency N 4410 push dollar against fundamentals V 4417 is growth in Germany N 4421 provides funding for acquisitions V 4424 affect security of Europe N 4424 affect security for years V 4427 examine implications of options N 4428 keep weapons on soil V 4429 increase possibility of attack N 4429 retains force of weapons N 4429 retains force in Europe V 4430 provide answers to questions N 4431 bringing forces to parity V 4432 have months under timetable V 4435 complicated issue by offering V 4436 has tanks in Europe V 4445 overstating arsenals in hopes V 4450 visited talks in Vienna N 4453 announced contract with Inc. N 4460 Including those in programs N 4460 were 143,800 without employment V 4464 boost volume in Singapore V 4464 discussing venture with Ltd. N 4465 be the in expansion N 4466 put million into bottling V 4471 have proportions of youths N 4473 taken stake in ventures V 4475 be case in Singapore V 4477 combining drinks with Coca-Cola V 4478 has interests in products V 4478 holds licenses for Brunei N 4480 is direction of talks N 4481 needs approval from boards V 4482 increased % to cents V 4483 follows report of earnings N 4483 sharing growth with shareholders V 4484 is company with businesses N 4486 strengthen control of A. N 4486 admit Khan as shareholder V 4487 owns % of shares N 4487 owns % of Fiat N 4488 trade shares in IFI N 4488 trade shares for shares V 4488 give control of % N 4489 trade some of stake N 4489 trade some for % V 4490 have rights in assemblies V 4491 owns % of capital N 4492 control % of shares N 4496 strengthens links between Agnellis N 4496 goes sailing with Agnelli V 4498 bought stake in Alisarda N 4499 keeping stake in Fiat N 4499 keeping stake despite tree V 4499 playing role in group N 4500 raised financing of lire N 4500 raised financing for purchase V 4500 selling chunk of shares N 4500 selling chunk to S.p V 4501 sell shares to Agnelli V 4502 riding railbikes on tracks V 4502 was disservice to readers N 4504 treats activities in fashion V 4506 provide services to Inc V 4507 opening way for boost N 4508 ended impasse between House N 4512 pay wage for days V 4513 includes concept of wage N 4514 be part of laws N 4515 made compromise on length N 4516 lifted wage to 4.55 V 4517 boosting floor to 4.25 V 4519 was way of allowing N 4521 opposing rise for workers N 4521 opposing rise at time V 4523 ranking member of Committee N 4524 vote week on compromise V 4527 held feet to fire V 4528 yielded deal on size V 4532 lowered ratings on billion N 4532 lowered ratings because levels V 4533 is unit of Inc. N 4535 managing risks of 2 N 4538 retains title of officer N 4539 sell operations to Inc V 4541 faced threat from family N 4541 faced threat since July V 4543 own stake in company N 4544 use proceeds of sale N 4545 had sales of million N 4546 manufacturing carpet since 1967 V 4547 make products with dyes N 4550 has sales of billion N 4550 boost profitability of brands N 4551 closed ex-dividend at 26.125 V 4554 including gain of million N 4556 sell unit to subsidiary V 4558 close sale of unit N 4558 close sale in November V 4559 rose % in September V 4559 offered information on degree N 4560 climbed % in August V 4560 lend support to view V 4562 provides information on economy N 4564 plunged % in September V 4566 followed months for sales N 4566 had effect on market V 4567 was the since drop V 4571 got boost in September V 4575 track health of sector N 4579 keep inflation-fighting as priority V 4582 are contributions of components N 4585 take charge against earnings N 4585 take charge in quarter V 4587 limits increases for years V 4587 ties charges to customers N 4587 ties charges to performance V 4596 auction million in maturity N 4596 auction million next Tuesday V 4597 writing thriller about spy-chasing N 4601 described himself as Hippie V 4601 including marriage to sweetheart N 4602 combining wordplay with detail V 4603 spins tale of efforts N 4604 was arrest by authorities N 4604 stealing information from computers V 4604 selling it to KGB V 4606 pay two for some V 4608 draws title from habit V 4608 laying eggs in nests V 4609 do tricks with system V 4610 substitute program for one V 4611 become super-user with access N 4612 scanning heavens at observatory V 4613 discovered discrepancy in charges N 4613 traced it to user V 4616 became obsession for Stoll V 4617 made requisition of all N 4618 taken account of user N 4621 using Berkeley as stones V 4624 drag keychain across terminal V 4627 learns lot from book V 4631 took interest in hunt N 4631 tracing hacker to Germany V 4633 brief officers on theft V 4634 savored humor of appearance N 4639 is editor of Journal N 4641 supply computers to Corp. V 4641 sell machines under label V 4642 cost 150,000 for system V 4643 processes instructions per second N 4643 uses chip unlike machines V 4647 is part of effort N 4647 establish itself as supplier V 4649 is company than company V 4650 is boon for Mips N 4650 battles concerns for market V 4652 expects revenue of million N 4652 attract developers to architecture V 4655 supply computers to AG V 4656 make chips under license V 4660 expects sales of systems N 4661 sell versions of machine N 4667 are arms of Congress N 4667 raise capital through debt V 4668 raise cash for bailout N 4670 meeting targets in law N 4674 add billions to costs V 4675 allow level of borrowing N 4675 allow level without approval V 4676 merge hundreds of thrifts N 4676 merge hundreds over years V 4680 reduce costs of bailout N 4681 distort process by requiring V 4683 dump assets through sales V 4684 build system from County V 4686 connect Basin with pipelines V 4688 're chef of restaurant N 4692 took money from wallet V 4693 considered inventor of style N 4693 make month in advance N 4693 subjected diners to cream V 4697 puts pressure on planners V 4699 kept copy of notes N 4699 received support from Dozen V 4699 keep meringues from weeping V 4700 reinvent recipes from scratch V 4703 named slate of officers N 4703 follows replacement of directors N 4709 was president of division N 4711 assuming duties of Weekes N 4712 was another of directors N 4714 boosted dividend to cents V 4716 be 3 to stock N 4717 raise number of shares N 4717 raise number to million V 4718 rose % to million V 4721 completed sale of acres N 4722 includes swap of interests N 4724 pay million in payments N 4724 repay million in funds N 4725 exercise remedies against Healthcare N 4725 exercise remedies during period V 4726 be million in arrears V 4728 make payments of million N 4728 make payments to HealthVest V 4729 owes million in payments N 4730 ease bind at HealthVest N 4731 paid two of banks N 4731 paid two in October V 4732 purchased warrants for 500,000 V 4734 recognized concept as one V 4735 listed creation of fund N 4735 listed creation as one V 4745 reflects vulnerability of communities N 4746 indicted him on array V 4746 alleging years of oppression N 4748 extorted cash from lawyers V 4748 muscled loans from banks V 4749 owned interest in distributorship N 4749 presented conflict of interest N 4749 maintained accounts in banks V 4750 made demands on staff V 4751 chauffeur him to work V 4752 double-crossed him by reneging V 4754 find judge in underwear V 4755 called her to office V 4755 wearing nothing at all N 4757 blames indictment on feuding V 4759 pushed buttons into action V 4760 provide testimony to power V 4762 bring business to courthouse V 4764 mount challenges against him N 4765 been fixture in community N 4765 been fixture for decades V 4766 put himself through University V 4768 had the of daughters N 4769 married daughter of clerk N 4770 called one of judges N 4771 had share of accomplishments N 4773 voted president of Conference N 4773 voted president by judges V 4774 considered times for appointments V 4775 rated one of the N 4775 rated him after interviewing V 4778 grasp issue with blink V 4780 be bedrock of society N 4782 had inkling of anything N 4782 had inkling in Ebensburg V 4786 shelled 500 in loans N 4786 shelled 500 to judge V 4787 made pretense of repaying N 4789 won verdict in case N 4789 won verdict in 1983 V 4795 had dealings with judge V 4798 is matter of biting N 4801 sipped tea from chair V 4801 take hats in courtroom V 4802 jailed members of Board N 4802 jailed members for hours V 4802 extend year by weeks V 4805 told salesman in Ebensburg N 4805 bought Sunbird in 1984 V 4806 recorded sale under name V 4810 dispute view in light V 4811 launched investigation into corruption N 4814 bought Sunbird from Pontiac-Cadillac V 4814 had apprehensions about reputation N 4818 wrote bank on stationery V 4822 find myself in relationship V 4826 been part of deal N 4827 got treatment from bank V 4830 lowering rate by % V 4831 defend himself at trial V 4840 was example of muse N 4841 await resiliency as metaphors N 4844 uses tons of newsprint N 4846 being component of waste N 4848 increase use of paper N 4850 approves this as date V 4851 approved creation of class N 4858 give value of 101 N 4861 float % above rate V 4870 yield % with coupon V 4878 represents spread to Treasury N 4881 is % to % N 4882 yield % with coupon V 4883 have life of years N 4887 buy shares at premium V 4888 indicating coupon via Ltd V 4889 buy shares at premium V 4890 yield % via Ltd V 4893 yield % via International V 4896 expects sales of marks N 4897 has operations in Belgium V 4898 strengthen position in Community N 4898 assure presence in market N 4901 leave EG&G with stake V 4902 is lab in England N 4902 is lab with revenue V 4903 including Institutes of Health N 4906 broke negotiations with Hunt N 4907 removes obstacle in way N 4907 heard year in Washington V 4909 turned settlement between Hunt N 4910 seeking claim of million N 4911 allow claim of million N 4912 appeal decision to court V 4913 get % of proceeds N 4923 snap properties in U.S. N 4923 snap properties from courses V 4924 marks change for Japanese N 4930 be buyer of securities N 4930 double purchases to an V 4931 channel tens of billions N 4931 channel tens into market V 4934 drive rates on securities N 4940 are investment of choice N 4945 dipped toes into market V 4946 buy bonds before maturity V 4947 's headache for investors N 4947 forces them at rates V 4950 Compounding trouble to investors N 4953 lose touch with issuers V 4954 buy mortgages from banks V 4955 took all of Conduits N 4956 reduced effects of risk N 4960 buy stock of corporation N 4960 buy stock at discount V 4962 pursue interests of corporation N 4963 experienced appreciation than corporations N 4963 experienced appreciation during years V 4966 evaluate pills on basis V 4967 have team with record N 4968 have strategy for improving N 4968 require implementation over period V 4969 improve chances for management N 4972 be CEO in years V 4973 be strategy in years V 4976 have opportunity at time V 4977 received settlement from Texaco V 4978 covers years in order V 4978 put proceeds in manner V 4983 evaluate pill within context V 4986 win election to board N 4987 filed lawsuits in Court V 4988 elected slate of nominees N 4988 elected slate to board V 4990 was sequel to meeting N 4990 disallowed proxies in favor V 4993 seeks dollars from Express V 4996 is company with interests N 5000 Buying % of Inc. N 5000 entering relationship with owner V 5002 become owner of company N 5002 become owner at time V 5003 dismissing threat of backlash N 5008 encourage flow of investment N 5012 paid million for Tower V 5014 taken warnings by leaders N 5014 taken warnings to heart V 5017 win support from sides V 5019 found similarity in philosophies N 5020 taking place on board N 5022 found match in Estate V 5023 is firm in Japan N 5024 is meters of property N 5025 acquired property from government V 5025 was portion of land N 5026 opened doors to world V 5027 built development in exchange V 5028 was step in relationship N 5028 earned moniker of title N 5029 is one of dozens N 5030 had need for ventures V 5031 rise % to % N 5031 rise % from turnover V 5032 jumped % to yen V 5033 catapult it into business V 5035 is purchase for Estate N 5037 make dent in finances V 5042 is landowner of project N 5043 is one of group N 5045 redevelop Marunouchi into center V 5046 becoming partners in number N 5046 becoming partners as part V 5047 blocking Guber from taking V 5047 taking posts at Inc N 5049 acquiring Columbia in transactions V 5050 filed suit against Sony V 5051 make movies at studio V 5052 hurled accusations of duplicity N 5052 hurled accusations at each V 5053 continued talks over weeks V 5055 get cash in settlement V 5057 surpassed Sony as company V 5057 have club like CBS N 5058 involving rights to movies N 5059 swap stake in studio N 5059 swap stake in exchange V 5062 accused Ross of having N 5063 be officer of Warner N 5063 started number of businesses N 5063 started number in Japan V 5064 enjoys relationships with executives V 5066 be executive of Warner N 5066 be executive alongside Ross V 5066 have ego at stake V 5069 fulfill terms of contract N 5070 exclude Guber from any V 5071 have projects in stages V 5072 get hands on some V 5072 develop hundreds of movies N 5072 produce 10 to 20 N 5075 get piece of profits N 5075 gets revenue from movies V 5076 own stake in Guber-Peters N 5077 paid 500,000 in fines N 5078 marks end of part N 5079 is subject of investigation N 5079 cover accounting for parts N 5081 is step in investigation N 5082 charge any of 500,000 N 5082 charge any to customers V 5082 take action against employees V 5082 provided information during inquiry V 5088 made contributions from 1982 V 5088 submitted bills to Power V 5089 hiding nature of payments N 5089 hiding nature from Service V 5090 was mastermind behind use N 5090 make payments to candidates V 5091 following the of irregularities N 5093 rose cents to 27.125 V 5095 launched promotion for brand V 5096 send labels from bottles N 5096 receive upgrade in seating N 5097 purchase items at prices V 5101 question impact on image N 5103 has image of something N 5105 offered miles in exchange V 5106 gave discounts on merchandise N 5106 gave discounts to people V 5108 is leg of plan N 5110 buy bottles over period V 5113 Concocts Milk For Tastes N 5114 trimming content of products N 5116 formed venture with distributor V 5117 has content of % N 5120 sells milk than milks N 5120 sells milk in markets V 5121 tested milk with butterfat N 5121 tested milk in South V 5122 selling Fresca in bodegas V 5123 adding 15 to outlets N 5129 lost space in stores V 5134 increase share of business N 5134 launching lines with fanfare V 5138 nixed promotion for pins N 5140 included cutouts of finery N 5142 advise customers on styles V 5143 motivate people with commissions V 5146 shown interest in packages V 5147 introduced versions of products N 5147 introduced versions in Canada V 5147 bring them to U.S. V 5152 pursuing counterclaims against each N 5156 reset arguments for today V 5158 set slats for takeoff V 5160 was Cichan of Tempe N 5162 remains man behind operation V 5164 convert millions of Americans N 5164 convert millions to brand V 5164 plays role of messiah N 5164 make part of theocracy N 5167 build infrastructure for movement V 5168 move movement to Europe V 5174 organized rally in 1976 V 5174 were members in U.S. V 5176 is result of graying N 5177 remained faithful to Moon N 5177 producing members by procreation V 5178 is matter of contention N 5183 employing followers at wages V 5183 producing everything from rifles N 5186 illustrate scope of drain N 5192 attracted guests in years V 5194 published three of books N 5195 developing empire in East V 5196 told me in interview V 5203 negotiated venture with government N 5203 build plant in Province V 5204 put million for years V 5204 keep profits in China V 5207 is co-author with Bromley N 5208 include sale of Corp. N 5210 compensate victims of diseases N 5210 receive billion from Manville V 5212 considering sale of holdings N 5212 has right of refusal N 5213 pay trust for majority V 5218 reached % in Azerbaijan V 5219 are republics along border N 5219 reported rioting in months V 5221 gave estimate for unemployment N 5225 owns half of one N 5225 cutting % to million V 5226 interrogated week by judiciary V 5227 provoked closure of markets N 5227 provoked closure in June V 5227 blamed predicament on president V 5227 raised margin on transactions N 5228 ousted residents from panel V 5228 drafting constitution for colony N 5229 condemned crackdown on movement N 5230 nullify declaration on Kong N 5232 discussed purchase of reactor N 5233 sell reactor to Israel V 5235 establishing relations with Poland V 5237 loan money to Warsaw V 5238 established relations with Hungary V 5239 hold auction with bidders V 5240 opening swaps to investors V 5242 authorized worth of proposals N 5244 submit bids on percentage N 5245 set floor on bidding V 5249 deprive troublemakers of cards N 5253 fled Philippines for Hawaii V 5257 block requests for records N 5259 involved accounts in Philippines N 5263 fostering harmony in marriage V 5265 protects communications between spouses N 5267 violate right against self-incrimination N 5273 announce venture in Tokyo V 5274 open office in Tokyo V 5275 advising them on matters V 5276 advise clients on law V 5277 provide shopping for institutions V 5277 seeking advice on access N 5279 tap resources of lawyers N 5279 tap resources as members V 5281 maintain association with Office N 5282 seek rehearing of ruling N 5284 seeking hearing by panel N 5285 sued state in 1985 V 5285 segregated classifications by sex V 5285 paid employees in jobs N 5285 paid employees in jobs N 5286 applied standards in manner V 5288 is representative for employees N 5292 color-coding licenses of offenders N 5293 order licenses as condition V 5295 be embarrassment to teenagers N 5296 recognize problem as issue V 5298 block acquisition of % N 5298 put airline under control V 5299 faces threat from Bush N 5300 block purchase of airline N 5304 governed meetings at center N 5307 abolished steps in revolution N 5311 opened dormitory for employees N 5311 opened dormitory at center V 5312 had lots of debate N 5312 had lots about one V 5313 follow voice of generation N 5316 holds lessons for companies N 5318 set tone in 1986 V 5319 is time of self-criticism N 5320 took helm as president V 5323 dropping year by year N 5323 dropping year since beginning V 5326 Consider experience of Kitada N 5326 joined Nissan in 1982 V 5332 transferred workers to dealerships V 5333 ordered everyone from executives N 5333 visit parts of Tokyo N 5335 check restaurant in city V 5338 visited headquarters in district N 5339 liked display of trucks N 5343 handled die-hards in fashion N 5345 replaced body with lines V 5346 launched versions of coupe N 5349 outselling predecessors by margins V 5350 grabbed attention with minicars V 5352 's list for car N 5354 develop restaurant with vehicles V 5355 sells items as clocks N 5357 had % of market N 5357 had % in 1980 V 5358 leave it below position V 5359 recoup losses in Japan N 5359 recoup losses until 1995 V 5361 unleashes batch of cars N 5362 grabbed % of market N 5363 brings Nissan to share V 5363 leaves company behind high V 5365 are vehicles with potential N 5367 start fall with version V 5370 start 749 below model N 5376 launches division on 8 V 5381 sending 2,000 to U.S. V 5381 keeping rest for sale V 5382 sell sedans in U.S. V 5385 is move for century N 5386 add models next year V 5386 bringing total to four V 5386 show profits for years V 5388 lost money on operations V 5390 earn yen in year V 5390 earn increase of % N 5392 represented % of sales N 5394 building vehicles in three V 5396 include subsidiaries for manufacturing N 5397 beat effort with tactics V 5400 prevent return to rigidity N 5402 are way through turnaround N 5404 form venture with Azoff V 5405 provide financing for venture V 5407 is part of Inc. N 5408 discussing venture with MCA V 5410 hold meeting in December V 5410 give leaders at home V 5411 be expectation of agreements N 5412 conducting diplomacy through meetings V 5413 alternating days of meetings N 5413 alternating days between vessel V 5414 disrupt plans for summit N 5415 told reporters at House N 5416 discuss range of issues N 5416 discuss range without agenda V 5417 pay dividends for leaders V 5418 needs diversion from problems N 5419 bolster stature among academics N 5422 been critic of handling N 5424 limit participation to groups V 5425 doing it in manner V 5425 have time without press V 5426 hold summit in summer V 5429 mentioned advice to Moscow N 5429 mentioned advice as topic V 5430 drop restrictions on trade N 5431 told group of businessmen N 5431 sign agreement with U.S. N 5431 sign agreement at summit V 5432 lower tariffs on exports N 5433 lost jobs as result V 5434 start system of benefits N 5435 be initiatives on economy N 5436 take this as opening V 5442 given setting at sea N 5443 been one for officials V 5445 avoid comparisons with gathering N 5446 sent shivers through alliance V 5446 discussing elimination of weapons N 5447 initiated talks with Soviets N 5448 reach officials until days V 5450 open dialogue with Gorbachev N 5452 precede summit next year N 5454 marking quantification of costs N 5455 taken commitments without approval V 5456 filed charges against manager V 5456 alleging breach of duties N 5457 improve controls on branches N 5460 improve controls on branches N 5461 dragging protesters from thoroughfare V 5463 provided beginning to disobedience N 5464 instigated campaigns of resistance N 5464 instigated campaigns against government V 5466 am proponent of everything N 5467 have recourse to box V 5472 equate demonstrations with disobedience V 5473 is difference between them V 5476 make remarks about demonstrations N 5477 call attention to grievances V 5478 encourages overuse of slogans N 5481 leave site of grievance N 5482 attach themselves like remora V 5482 use protest as excuse V 5486 find harm in misdemeanors V 5490 protest speeding on road N 5496 airing program with audience N 5497 generated deal of rancor N 5497 generated deal amid groups V 5498 chain themselves in front V 5499 refund money to advertisers V 5500 impair rights of others N 5501 be case of chickens N 5504 does damage to nation V 5505 disobey call to arms N 5505 disobey call during war V 5506 threw burdens on those V 5507 giving comfort to propagandists V 5509 administer infamy upon those V 5510 healing wounds of nation N 5510 pardoned thousands of evaders N 5510 giving dignity to allegations V 5511 avoid danger of combat N 5512 point visibility of disobedience N 5513 cover breaking of law N 5514 brings motives of those N 5516 is rule of thumb N 5519 was president of U.S. N 5519 was president from 1969 V 5520 back increase in tax N 5520 raise million for relief V 5521 cover part of billion N 5526 damage chances of initiative N 5527 posted gain in income N 5529 rose % to billion V 5530 attributed gain to improved V 5535 rose % to million V 5536 rose % to billion V 5539 update criteria for enforcement N 5543 make inquiries about items N 5550 is candidate for enactment N 5550 is candidate if time V 5551 wants changes for one N 5553 retain force as deterrents V 5555 protect rights in collection V 5557 enacted law in 1988 V 5559 urging legislation in states V 5560 advises Council of Chambers N 5561 affecting kinds of taxpayers N 5562 seeks uniformity among states N 5564 stays cents for mile V 5569 provide treatment for growers V 5571 weighs deductions of costs N 5572 see functions in case V 5573 raised cattle for four V 5573 made profit on either V 5575 managed horse-breeding in way V 5575 enhanced experience by consulting V 5576 took care with cattle V 5576 seek counsel about them V 5577 deduct 30,180 of losses N 5577 rejected 12,275 in deductions N 5578 doing audits of returns N 5579 name Kirkendall to post V 5579 has responsibilities for IRS V 5581 awarded pilots between million V 5585 have effect on plan V 5588 leave lot of leeway N 5589 pursue grievance before arbitrator V 5597 received approval in July V 5600 was part of agreement N 5601 took control of Eastern N 5602 triggered raise for them V 5611 slashing commissions to delight V 5616 owe vote of thanks N 5617 is move for Spielvogel N 5618 counted some of advertisers N 5619 helped Nissan for example V 5620 prove mine for agency N 5621 done searches over 40 N 5621 done searches for clients V 5622 given seminars at agencies V 5623 do consulting at agency N 5623 do consulting in hopes V 5624 been involvement with clients N 5625 invites them to parties V 5627 has degree of intimacy N 5627 has degree with clients V 5631 merging it with outfit V 5633 becoming consultant in 1974 V 5633 was executive at Co V 5635 spent million on time V 5641 's reason for job N 5642 struck me as way V 5644 determine mix of promotion N 5646 helped Morgan in search V 5646 has relationship with Hyundai V 5649 use tool of communications N 5651 called Achenbaum in speech V 5656 was critic of acquisition N 5658 calls Fabric of Lives N 5659 Take Comfort in Cotton V 5659 marks end of efforts N 5662 making plea for reaction N 5663 spend million on broadcasting V 5666 was officer of Group N 5666 created ads for market V 5670 rose % to million V 5671 increased % to million V 5674 discussing state of Asia N 5674 discussing state with reporters V 5676 feared plurality of views N 5679 build team of economists N 5684 is one of inefficiency N 5686 face conflict between desire N 5690 keep situation for years V 5690 sustain growth by themselves V 5694 discussed 7 at meeting V 5704 use facilities in Singapore N 5704 preserve presence in region N 5711 lorded it over me V 5715 show serials on network V 5717 's passion about being N 5722 fill part of gap N 5725 share views of America N 5732 get Rouge as part V 5735 made use of Rouge N 5736 is president of Group N 5737 is editor of Journal N 5738 cut tumor at Clinic V 5740 indicating damage to tissue N 5745 holding promise of surgery N 5745 improve diagnosis of disorders N 5746 thrusting window to workings N 5747 induce whirlwinds of electricity N 5747 induce whirlwinds within brain V 5750 conducting tests with devices V 5753 produced flashes of light N 5753 produced flashes in field V 5754 stimulate nerves in hand N 5756 developed magnet for stimulation N 5758 reported studies on everything N 5759 use devices in surgery V 5763 is sign after injury V 5764 retrieve function in people N 5766 studied stimulators at University V 5767 is increase in hormone N 5768 conducted hours of tests N 5768 conducted hours on themselves V 5769 sell versions of devices N 5771 use probes for studies V 5772 testing stimulators in conjunction V 5772 prevent wasting of muscles N 5776 reorganizes resources after amputation V 5778 exploring perception with machines V 5779 flash groups of letters N 5779 flash groups on screen V 5781 seeing group of letters N 5783 suggesting kinds of theories N 5783 processes signals from eyes N 5788 developing films of superconductors N 5788 developing films for use V 5789 conduct electricity without resistance V 5791 bolsters portfolio of investments N 5793 pay million for rights V 5795 is one of three N 5795 speed transfer of superconductors N 5796 issued million of securities N 5799 pay interest for months V 5800 is years with payment V 5802 sell portion of receivables N 5802 sell portion to unit V 5802 transfer them to trust V 5806 buck newcomers with tale V 5807 took man with qualities N 5810 set shop in state V 5811 be one of tasks N 5811 takes office as governor V 5817 is % of all N 5819 sends children to school V 5820 finagled loan from government V 5822 faces elections in 1991 V 5824 consume amounts of exchange N 5831 be five to years N 5833 be presumption in sectors N 5833 is lot of money N 5835 is result of unfamiliarity N 5836 takes while for them N 5837 sending number of missions N 5837 sending number to Japan V 5840 get law through congress V 5841 allow ownership in industries N 5842 made use of semantics N 5843 give certainty to bosses V 5844 cites case of customer N 5844 build complex in Baja V 5845 develop beach through trust V 5846 catching eye of Japan N 5849 be protectionism from U.S. N 5849 crack market through door V 5850 toned assessments of performance N 5851 polled week by Service V 5853 forecast rebound after Year N 5858 puts dollar at end V 5862 expects cuts in rates N 5862 expects cuts in effort V 5862 encourage narrowing of gap N 5862 ensure landing in economy V 5864 charge each on loans V 5865 predicted cut in rate N 5866 charges banks for loans V 5866 using securities as collateral V 5869 marked tumble since slide N 5871 raised rates by point V 5873 raised rate by point V 5874 is rate on loans N 5875 knocking funds from % V 5878 holding securities in term V 5883 relax rates in Germany N 5885 dragging dollar to marks V 5887 'm one of bears N 5889 fits description of bear N 5891 seeing culmination of all N 5893 take line in statement V 5895 dropped 3.10 to 374.70 V 5899 repeal tax on transactions N 5900 repeal tax on purchase N 5905 loses elections in 1990 N 5907 accept wage over years V 5915 cleared Edelson of allegations N 5918 be manager for products N 5919 take position in management N 5920 return calls for comment N 5921 took charge in quarter N 5924 calculating prices on agreements N 5925 restated value of contracts N 5927 pays fee to bank V 5930 was force in field N 5938 acquired treasure-trove of Americana N 5939 offering Rewards for Arrest N 5940 founded company in Chicago V 5943 be shortcut to growth N 5943 bring host of problems N 5944 cleared lot of nests N 5945 started career as investigator V 5945 built Protection from firm V 5946 joined firm in 1963 V 5946 bought it from owners V 5947 opened offices around country V 5948 provided security for Olympics N 5948 have recognition of Pinkerton N 5951 acquire staff of employees N 5951 spent careers with firm V 5952 spent career in business V 5961 locked itself into contracts V 5961 win business with hope V 5963 doing work of three N 5966 divesting itself of million V 5968 closing 120 of offices N 5968 closing 120 in months V 5970 is building across street N 5972 making money for company V 5973 had loss of million N 5974 pay million of debt N 5974 pay million within years V 5975 borrow million of debt N 5979 filed suit in court V 5980 misrepresented condition of Pinkerton N 5980 registered trademark in Kingdom V 5980 tell Protection about controversies V 5981 concerning sale of company N 5981 have liability under contract V 5983 's case of watch N 5985 damaged Pinkerton in amount V 5985 deprived it of artifact N 5987 renewing emphasis on investigations N 5988 been the of two N 5993 averaged 14.50 for pounds V 5994 rose % in October V 5995 fell cents in October V 5995 rose cents to cents V 5997 rose 3.40 to 46.80 V 5997 slipped cents to 67.40 V 5997 dropped cents to 90.20 V 5998 averaged 3.61 for pounds N 5999 completed sale of subsidiary N 6000 sell unit in July V 6000 realize proceeds from sale N 6003 operate Associates as entity V 6004 has billion in assets N 6004 making it in terms N 6005 sell billion of assets N 6005 use some of proceeds N 6005 buy % of shares N 6005 buy % for 70 V 6007 Describing itself as asset V 6010 ward attempt by concerns N 6011 launched offer for Containers N 6012 sweetened offer to share V 6014 sent shares to 62 V 6018 tender any of shares N 6018 tender any under offer V 6021 make decision on 27 V 6022 set date for meeting N 6022 seek approval for offer N 6026 enlarge control of pot N 6028 raise ceiling to 124,875 V 6029 does that at cost V 6031 lost billion in defaults N 6033 begin hearings next week V 6038 leaving taxpayers with losses V 6044 view discrediting of HUD N 6044 view discrediting as chance V 6044 shove slate of projects N 6046 were subject of hearing N 6050 looking practices of colleagues N 6054 submitted package of reforms N 6057 sell facilities to Ltd. V 6059 have effect on company V 6060 is part of restructuring N 6060 downsized operations in countries N 6064 halves deficit with cuts V 6064 improve supplies to consumers V 6066 raise prices of beer N 6071 proposed cut in budget N 6071 proposed cut as cuts V 6086 took loss from discontinued N 6086 took loss in quarter V 6087 expect impact from restructuring V 6088 had loss of million N 6089 had profit from operations N 6090 gained % to million V 6091 offer % to % N 6091 offer % through offering V 6093 hold shares of company N 6093 hold shares after the V 6094 finding interest from quarter V 6096 lead some of us N 6096 re-examine positions with respect N 6097 driven business to consensus V 6098 provide care to Americans V 6099 is way from program N 6102 taking initiative on issues N 6105 provide level of insurance N 6105 provide level to workers V 6109 equal % of GNP N 6111 add 700 to price V 6111 add 300 to 500 N 6112 eroding standards of living N 6113 deflect costs to workers V 6114 are issues in strikes N 6122 boosted benefits for the N 6123 present plans by 1 V 6124 taking look at economics N 6127 be window for action N 6130 limit availability of care N 6131 measure effectiveness of treatments N 6135 slow rise in spending N 6135 reduce use of services N 6139 impose budgets as way V 6140 build support for overhaul N 6141 moving operations to facility V 6144 estimate impact of closures N 6145 employ 500 of employees N 6147 lease building in Brantford N 6147 spend dollars on facility V 6149 acquire Bancorp. for stock V 6152 is parent of Bank N 6152 has offices at Grove V 6156 consider offer in course V 6160 bid stock above bid V 6165 spur wave of takeovers N 6165 involving companies as Corp. N 6166 ends taboo on bids N 6174 had sales of billion N 6180 double debt of billion N 6181 be drag on earnings N 6181 exceeds value of billion N 6182 allow savings in ways N 6188 realize savings of tens N 6189 see this as time V 6190 finance acquisition with debt V 6201 filed lawsuit in court V 6202 take 90 to days N 6202 affect provisions of law N 6204 putting pencil to paper V 6206 make bid for Nekoosa N 6209 jumped 1.50 to 27.50 V 6210 be flurry of takeovers N 6211 expect company with pockets N 6213 given attractiveness of flows N 6213 given attractiveness as consolidation V 6213 be bids for companies N 6213 be bids within months V 6215 open door to era N 6225 granted approval for drug N 6228 returns heart to rhythm V 6229 licensed it to Lyphomed V 6230 rose % in quarter V 6234 's one at all V 6235 underscored severity of problem N 6237 climbed % in period V 6239 rose % in months V 6243 rose % in quarter V 6247 rose % in quarter V 6251 dismissing employees as part V 6251 producing savings of million N 6256 abandoning pursuit of Mesa N 6257 has stake in Mesa N 6257 make offer to shareholders V 6258 acquiring Mesa for 7 V 6258 acquiring share of series N 6259 rejected proposal from StatesWest N 6259 combine carriers in way V 6260 serves cities in California N 6264 drive Average to 2645.08 V 6265 drew strength from climb V 6268 soared 20.125 to 62.875 V 6270 fell 2.50 to 50.875 V 6271 played role in rally V 6274 are plenty of worries N 6275 is concern of analysts N 6277 had impact on markets N 6278 prompt investors into action V 6279 showed activity in part N 6280 confirms pickup in sector N 6282 announce details of operation N 6293 rose % to francs V 6294 specify reasons for gain N 6296 had profit of francs N 6297 forecast revenue of francs N 6298 completed acquisition of Cos. N 6298 completed acquisition for million V 6299 pay 19 for each N 6300 brings competitors to Inc. N 6300 reaches viewers than company N 6301 had sales of billion N 6303 had loss of million N 6304 earned million in quarter V 6307 removing million in will N 6307 removing million from books V 6307 issuing million in stock N 6307 commencing offer for million N 6308 charged million against earnings V 6308 added million to reserves V 6308 established reserve for portfolio V 6310 put name in commercials V 6310 advertising brand on television V 6312 drawing fire from advocates V 6313 became company with acquisition V 6315 spend million on campaign V 6317 taking Bill of theme N 6317 taking Bill to airwaves V 6318 promoting sponsorship of arts N 6321 trumpets themes of liberty N 6321 have appeal for smokers V 6322 defend rights of smokers N 6322 defend rights with arguments V 6323 purchase innocence by association V 6324 portraying itself at heart V 6331 get wagons in circle V 6332 drape yourself in flag V 6335 sent videotapes to consumers V 6338 borrow some of legitimacy N 6340 surged 4.26 to 455.63 V 6342 outpaced decliners by 1,120 V 6343 lagged rise in issues N 6346 rose 7.08 to 445.23 V 6347 added 2.19 to 447.76 V 6351 added 1 to 81 V 6351 rose 1 to 1 V 6354 bore brunt of sell-off N 6366 taken hit from slowdown V 6369 served group in trading V 6370 tracks stocks with Index V 6370 appreciated % in months V 6371 tracks companies as subset V 6372 contains companies with revenues N 6372 gained % by 30 V 6374 rose 0.17 to 432.78 V 6375 trades stocks for Hutton V 6378 scour report for clues V 6381 handled bulk of trades N 6381 handled bulk in market V 6383 climbed 3 to 13 V 6384 waive share in maker N 6385 removes government as impediment V 6387 surged 3 to 6 V 6389 added 1 to 43 V 6390 toted million in contracts N 6391 announced contract with bank N 6392 received contract from Lambert V 6393 slid 1 to 24 V 6394 delaying approval of acquisition N 6394 pending outcome of examination N 6396 gained 3 to 16 V 6396 buy Associates for cash V 6398 provide services to industry V 6399 suffered losses in sessions V 6399 surged 1 to 49 V 6400 following bid for Nekoosa N 6401 won approval from House N 6401 including funds for station N 6403 put resistance from interests N 6404 declined vote on ban N 6404 covers all but fraction N 6408 is vehicle for billion N 6409 seek waiver in hopes V 6411 includes spending for programs N 6414 gives authority to Department V 6414 facilitate refinancing of loans N 6415 met resistance from bankers N 6416 forge partnership between Kemp N 6417 grow % to billion V 6419 imposing cap of billion N 6419 give NASA for start-up V 6420 bring appropriations to billion V 6422 make room for programs N 6422 drive spending into 1991 V 6423 raising obstacles to bills N 6424 get attention on anything N 6425 maintain service for communities V 6429 exceed cost of ticket N 6431 given number of users N 6433 provoked fights with Committee V 6433 protects prerogatives over operations N 6434 breed confusion in absence V 6436 was intrusion on powers N 6437 arranged facility with Bank V 6438 consolidate million of debt N 6438 repurchase million of shares N 6438 purchase interest in properties N 6438 purchase interest from one V 6440 carries rate of point N 6440 carries rate with % V 6441 put all of properties N 6441 put all as collateral V 6442 given contract for aircraft N 6443 received contract for trainer N 6444 won million in contracts N 6445 given contract for equipment N 6446 received contract for research N 6447 got contract for trousers N 6450 had value of billion N 6454 owning % of stock N 6456 contemplating sale of estate N 6457 sell interest in unit N 6457 sell interest to System V 6462 have value of billion N 6463 including stake in pipeline N 6463 puts cash at billion V 6464 has billion in debt N 6468 spin remainder of unit N 6468 do the with assets V 6476 recalculating worth of assets N 6476 find values of 30 N 6478 values Fe at 24 V 6479 classifies stock as a V 6481 makes investment at prices N 6483 has value than deal N 6484 be ally in state V 6484 held hostage to boards N 6498 making bid of pence N 6499 values whole of Coates N 6499 values whole at million V 6499 owning % of company N 6500 give stake in company N 6501 considering merger through subsidiary N 6502 fund acquisition through resources V 6503 including addition of businesses N 6504 make offering in business V 6505 including sale of company N 6506 controls % of company N 6507 have impact on battle N 6508 holds % of shares N 6510 was response to efforts N 6510 gain control of Datapoint N 6511 took control of Datapoint N 6512 reported gain in profit N 6515 rose % to million V 6516 declared dividend of pence N 6517 increased % to billion V 6517 climbed % to million V 6518 rising % to million V 6519 dropped % to million V 6521 saw evidence of wrongdoing N 6521 saw evidence in collapse V 6521 described whitewash by deputies N 6523 sent Bureau of Investigation N 6523 sent Bureau of Investigation N 6524 provide style for owners V 6525 drew million from thrift V 6526 making failure in history N 6527 participated year in examination V 6531 were meat on day N 6532 demand write-downs of loans N 6535 deny behavior by association N 6536 is part of coverup N 6538 flay handling of affair N 6540 declared one of loans N 6540 make adjustment on another V 6543 brought suit against Keating V 6544 ignoring recommendation from officials N 6544 place Lincoln into receivership V 6550 saw truck with sign N 6553 contained information about depositors N 6555 regard these as activities V 6556 boosting prices of products N 6556 boosting prices by average V 6556 following erosion in prices N 6560 marks effort by steelmaker N 6560 counter fall in prices N 6561 selling steel at 370 V 6564 reflect value of products N 6564 put steel on footing V 6565 is unit of Corp. N 6565 increased % between 1981 V 6568 send signal to customers V 6569 negotiating contracts with LTV V 6570 is signal to world N 6575 announced round of increases N 6576 boost discounts for buyers N 6578 raise billion in cash N 6578 raise billion with sale V 6578 redeem billion in maturing N 6579 has assurances of enactment N 6579 has assurances before date V 6582 extending involvement in service N 6582 extending involvement by five V 6583 continue arrangement with Television N 6583 does distribution for Channel V 6585 extend involvement with service N 6585 extend involvement for years V 6587 investing million in it V 6588 took charge in quarter V 6591 duplicate feat with forms V 6593 transplanting gene into bacteria V 6594 met Swanson in 1976 V 6598 licensed it to Lilly V 6598 produced % of insulin N 6605 is part of business N 6606 were million from licensing V 6607 bought shares of Mixte N 6607 fend bid for company N 6609 are allies of Mixte N 6609 launched week by Cie V 6613 create partnership in Midwest V 6614 generate revenue of million N 6618 take control of facilities N 6619 supply barrels of oil N 6619 supply barrels for refinery V 6620 surged % to yen V 6620 reflecting demand for variety N 6621 rose % to yen V 6622 had profit of yen N 6623 climbing % from yen V 6624 raise dividend to yen V 6626 speeding action on legislation N 6630 passing extension of ceiling N 6630 passing extension without amendments V 6631 counter discrimination in plans N 6632 attach provision to legislation V 6634 block measure with actions N 6635 drop provisions from version V 6636 give issue in elections N 6639 Pushing issue on legislation N 6639 avoid default by government N 6639 be strategy to me V 6641 raising limit to trillion V 6641 pass legislation by Wednesday V 6642 give demand for cut N 6643 reported loss of million N 6645 includes charges of million N 6646 retained firm of Inc. N 6647 retained Levin as adviser V 6651 restore confidence about prospects N 6653 climbed 41.60 to 2645.08 V 6659 climbed 5.29 to 340.36 V 6659 added 4.70 to 318.79 V 6660 surged 1 to 62 V 6661 changed hands in trading V 6662 viewed proposal as lift V 6663 's value in market V 6663 renews prospects for tape N 6664 reflected easing of concerns N 6667 showed interest in stocks N 6667 showed interest in session V 6669 fell 1 to 50 V 6670 climbed 3 to 38 V 6670 rose 3 to 37 V 6670 added 3 to 23 V 6670 gained 1 to 1 V 6670 jumped 3 to 62 V 6672 surfaced year among stocks V 6672 posted gains in session V 6673 gained 7 to 67 V 6673 added 1 to 75 V 6673 rose 3 to 62 V 6673 firmed 3 to 38 V 6674 rose 3 to 39 V 6676 rose 3 to 68 V 6676 gained 1 to 34 V 6677 accumulating stake in Chevron N 6677 accumulating stake in order V 6677 increased stake in USX N 6678 completed sale of unit N 6678 completed sale to Motor V 6678 gained 1 to 55 V 6678 losing point amid rumors V 6679 produce gain in quarter V 6680 climbed 3 to 30 V 6680 boosted opinion on stock N 6680 boosted opinion to rating V 6681 reflected decline in shares N 6681 lowered rating in October V 6682 advanced 1 to 62 V 6683 repurchase half of shares N 6683 repurchase half at 70 V 6683 sell billion in assets N 6683 pay dividend to holders V 6684 acquire operations for price V 6684 rose 1 to 26 V 6685 added 1 to 39 V 6686 rose 7 to 12 V 6688 gained 1 to 32 V 6689 dropped 1 to 21 V 6689 following news of plan N 6689 reorganize business into company V 6689 offer stake to public V 6690 rose 1.71 to 370.58 V 6692 fell 5 to 27 V 6694 acquire businesses of Inc. N 6695 receive shares of series N 6696 assume million of debt V 6697 pay Hunter in exchange V 6698 had revenue of million N 6700 has specific for shares N 6701 HOLD days of talks N 6702 meet 2-3 aboard vessels V 6702 discuss range of issues N 6702 discuss range without agenda V 6705 disrupt plans for summit N 6706 discuss changes as issues V 6707 lifted blockade around town N 6710 staged protests in cities V 6710 press demands for freedoms N 6711 approved ban on routes N 6711 approved ban as part V 6711 overcome obstacles in Congress N 6712 includes funds for station V 6716 calling the since 1972 N 6717 reach Kabul after attack V 6718 make deliveries to capital V 6719 elected Ozal as president V 6719 opening way for change N 6722 dismissed demands by Conservatives N 6728 hold referendum on election N 6728 fill post of president N 6729 replaces presidency under pact V 6730 denied asylum to man V 6730 lashing himself to housing V 6733 had net of million N 6736 trading summer at 14 V 6737 has interests in recovery V 6737 has facilities in operation V 6738 has interests in management V 6738 reported income of million N 6739 rose % to million V 6741 step disclosure of firms N 6743 do things in term V 6749 making remarks in days V 6750 re-establishing collar on trading N 6751 banned trading through computers N 6751 moved points in day V 6755 considering variety of actions N 6756 expanding reports on trading N 6758 ceased trading for accounts V 6759 buy amounts of stock N 6760 was trader on Board N 6760 suspended arbitrage for account V 6761 preparing response to outcry V 6762 is one of firms N 6764 getting heat from sides V 6769 take care of heck N 6775 buy stocks in index N 6775 buy stocks in shot V 6776 view this as step V 6779 relishes role as home N 6779 buy baskets of stocks N 6779 mimic indexes like 500 N 6781 considering ban on trading N 6782 slowing trading during periods V 6787 's piece of business N 6788 have control over investments N 6788 cause swings in market V 6795 formulates responses to problem N 6795 take role in issue V 6802 opening way for increase N 6803 ending impasse between Democrats N 6803 boost wage to 4.25 V 6804 includes wage for workers V 6805 reviving curb on trading N 6806 taking action against trading V 6808 soared 20.125 to 62.875 V 6812 rose % in September V 6813 plunged % in month V 6814 climbed % in industry V 6816 becoming partners in ventures N 6817 blocking takeover of maker N 6818 sell billion of assets N 6818 use some of proceeds N 6818 buy % of shares N 6818 buy % for 70 V 6819 fend bid by firms N 6821 boosting prices of products N 6822 paid 500,000 in fines V 6824 dropped % in quarter V 6824 offset weakness in operations N 6839 received boost from news V 6839 fell % in September V 6840 was decline since drop N 6841 pave way for Reserve N 6842 cast doubt on scenario V 6852 offer million of debentures N 6852 offer million through underwriters V 6853 yield 0.60 to point N 6853 ended Tuesday with yield V 6854 offered million of securities N 6856 pinpoint trough in cycles N 6857 offered billion in securities N 6858 leaving underwriters with millions V 6858 triggering sell-off in market V 6860 increase size of offering N 6862 is bit of drill N 6872 including offering by Co N 6873 cut offering to million V 6874 carried rate of % N 6879 raise million of debt N 6879 repay some of borrowings N 6879 redeem million of increasing N 6879 repay some in August V 6880 offer million of notes N 6880 offer million at yield V 6881 float points above LIBOR N 6884 priced million of bonds N 6884 priced million at par V 6886 issued million of securities N 6889 yield % to assumption V 6900 's light at end V 6902 overwhelm demand in sessions V 6903 trim yields in portion N 6908 firmed bit after fall V 6909 reached peak of cycle N 6911 raised rates by point V 6915 awaited address on policy N 6916 rose 2 to 111 V 6917 sold units to Inc. V 6918 publishes information among services V 6920 named president of division N 6921 become part of unit N 6922 give jurisdiction over standards N 6923 supercede rules in regard V 6925 founded years after FASB N 6926 follow rules on depreciation N 6930 completed sale of Co. N 6930 completed sale to group V 6931 valued transaction at million V 6932 seek control of companies N 6934 acquire Chemical in 1986 V 6934 burdened Avery with debt V 6938 has facilities in U.S. V 6939 surrendered warrants in exchange V 6940 raised stake to % V 6941 sold stock in Inc. N 6941 sold stock to Corp. V 6943 including stake in Avery N 6946 pay 200,000 for services V 6947 sell subsidiary to group V 6950 inviting proposals from purchasers N 6952 protect shareholders from offer V 6954 buy share for 30 V 6955 had stake in company V 6955 seek majority of seats N 6956 acquire control of company N 6957 design system for city V 6959 pay yen for project V 6961 drew criticism from observers V 6964 consider contract in effect V 6967 lowered price on item N 6967 lowered price as part V 6968 monitored prices before campaign V 6969 cut % to % N 6973 gave volumes of documents N 6973 made effort with policies V 6974 seeks fines of 1,000 N 6974 seeks fines of 1,000 N 6975 buying shares of companies N 6976 leading list of stocks N 6977 hit highs on Exchange V 6986 revived interest in shares N 6992 removing horse from cart V 6994 add uncertainty on top V 6996 produce rates over days V 6998 use power at rate V 7004 represent step in defensiveness N 7008 buy stocks in market V 7009 own anything except stocks N 7013 has money in gold V 7016 expect dragger of economy N 7024 pay dividends if any V 7026 have money in utilities V 7038 supply area with water V 7040 is player within workings N 7045 explain it to colleagues V 7045 facing changes in design N 7046 reporting decrease in radiation N 7049 are studies by Norwegians N 7049 show UV-B at surface V 7050 calls validity of theory N 7054 continue gathering at stations V 7058 are part of evaluation N 7069 invokes name of Inc. N 7070 are pioneers in study N 7070 has expertise in area V 7073 require level of cooperation N 7078 been victim of fraud N 7078 had worth of million N 7079 sustain losses through end V 7080 negotiate settlements on number N 7081 's amount of exposure N 7083 filed statements for 1989 V 7085 have million in sales N 7085 have million for year V 7088 store information in computers V 7088 is the with drive N 7089 had reactions to announcements V 7092 faces delisting by Association V 7094 filed report with NASD V 7094 requesting extension of exception N 7097 outlines host of practices N 7099 pending restatement of sheet N 7100 make recommendation within weeks V 7100 file lawsuits against directors N 7102 concentrating all on raise V 7102 showed shortcomings of institution N 7104 catch fancy of network N 7106 favor use of facts N 7108 justify inclusion of facts N 7110 be attacks from politicians N 7110 find evidence of abuse N 7111 won permission from Board N 7111 move department to subsidiary V 7112 has implications for entry N 7113 increases volume of securities N 7115 given handful of affiliates N 7115 been domain of firms N 7117 limited revenue to no V 7119 boosted volume of types N 7121 placed billion of equities N 7123 had change in earnings N 7125 compares profit with estimate V 7125 have forecasts in days V 7127 named president of unit N 7128 retains duties of director N 7133 build company at forefront N 7134 spotted appeal of bikes N 7140 turning bikes with names N 7141 developing products for biking V 7149 is one of people N 7149 bring company under control V 7150 had lot of problems N 7159 replacing lugs with ones V 7159 make generation of frames N 7161 shave time of rider N 7163 slash price of bike N 7163 slash price to 279 V 7167 calls future of business N 7169 get piece of business N 7169 introduced line of shoes N 7172 entered business in 1983 V 7173 change bike into bike V 7174 makes two-thirds of sales N 7175 entered business in 1987 V 7176 is example of globalization N 7177 established ventures with companies N 7178 acquired brands as Peugeot N 7179 replacing distributors with owned V 7180 cut cost of middleman N 7180 give control over sales N 7181 puts it With some V 7183 succeeds Pfeiffer as president V 7186 manufactures systems for mainframes V 7187 elected director of builder N 7187 increasing board to nine V 7188 is partner with firm N 7188 is partner in Management N 7189 named officer of company N 7190 named Bing as president V 7190 join division of Co. N 7191 won contract from Co. V 7193 disclose length of contract N 7194 raise million with chunk V 7195 raise it through loans V 7196 raise it through equity V 7198 supply half of financing N 7199 raised million from backers V 7204 faced setback in May V 7204 postpone launch until spring V 7207 raising money from backers N 7208 unveiling drive for channels N 7210 faces competition from Television N 7214 finished points at 2112.2 V 7216 showed strength throughout session V 7216 hitting low of 2102.2 N 7216 hitting low within minutes V 7217 settled points at 1701.7 V 7220 cover requirements for stocks N 7224 be appearance before Party N 7226 increased pence to 362 V 7226 spin operations into company V 7227 was the of index N 7227 was the at shares V 7228 ended 22 at 747 V 7229 told interviewer during weekend V 7229 held talks with maker N 7230 underlined interest in concern N 7231 jumping 35 to 13.78 V 7233 had loss in trading V 7234 fell points to 35417.44 V 7236 rose points to 35452.72 V 7238 outnumbered 551 to 349 N 7239 took attitude amid uncertainty V 7246 pushing prices of companies N 7246 pushing prices across board V 7247 defend themselves against takeover V 7248 fueled speculation for advances N 7249 advanced 260 to 2410 V 7251 gained 170 to 1610 V 7256 set direction for week N 7257 expect decline in prices N 7258 involves fears about talks N 7262 are trends on markets N 7265 reached agreement with union V 7265 ending strike by workers N 7268 spin operations to existing V 7269 create stock with capitalization N 7272 rose pence to pence V 7272 valuing company at billion V 7273 reflects pressure on industry N 7273 boost prices beyond reach V 7274 spin billion in assets N 7274 fend bid from Goldsmith N 7275 had profit of million N 7275 had profit in year V 7276 boost value by % V 7276 carry multiple than did N 7289 elected director of maker N 7290 retired year at 72 V 7291 double capacity for production N 7292 increase investment in plant N 7292 increase investment by yen V 7294 reduce production of chips N 7294 reduce production to million V 7295 fell % in September V 7297 attributed decline to demand V 7299 have room for shipments N 7300 took gamble on voice N 7301 cast actress as star V 7309 make living for time N 7309 received award as vocalist V 7310 was result of affiliation N 7311 written lyrics with him V 7311 contracted voices for him V 7316 was that of singer N 7319 putting numbers like Love N 7321 produced performances in studio V 7322 taken anyone from scratch V 7323 go lot by instinct V 7325 took place at Cinegrill V 7327 sensed undercurrent of anger N 7327 sensed undercurrent in performance V 7329 incorporated anger into development V 7330 made visits to home V 7330 paid mind in past V 7336 became joke with us V 7336 say consonants as vowels V 7337 recorded demo of songs N 7338 made tape with piano N 7341 had lot of training N 7343 get feeling of smile N 7343 get feeling in throat V 7343 put smile on face V 7345 using language as tool V 7346 sing line in Whoopee N 7348 Put ending on it V 7350 was process of discovery N 7350 felt bit like Higgins V 7351 take sparks of stuff N 7353 was layer to coaching V 7354 collecting paychecks from lounges V 7356 was character in movie V 7367 be feet per day N 7370 decreased % to tons V 7371 fell % from tons V 7372 used % of capability N 7376 show interest in office N 7376 achieved position in eyes V 7377 console conscience with thought V 7377 is mess of making N 7377 reform it with novel V 7378 writing novels about Peru V 7379 reached state of collapse N 7384 is foil for Llosa N 7390 was form of imperialism N 7395 dipped hand into river V 7399 tells stories in way V 7401 recorded session at campfire N 7402 alternates chapters in voice N 7402 alternates chapters with chapters V 7403 is connection between modes N 7404 becomes thing through contrast V 7405 controls counterpoint like Bach V 7405 reaching extreme in chapter V 7405 relates adventures as newsman V 7406 takes him to Amazonia V 7408 reminding them of identity N 7413 poses threat for future N 7416 impedes progress toward all N 7417 respects woman with offspring N 7420 buy stake in Airlines N 7420 sell parts of carrier N 7420 sell parts to public V 7421 raise stake in Airlines N 7421 raise stake to % V 7422 following tie-up with Inc. N 7422 contemplating alliance with one V 7424 given trial in accordance N 7426 issued comment on executions N 7428 confiscated cars from residents V 7431 cut loans to country N 7431 cut loans in wake V 7432 prepare proposals for China N 7433 resuming loans to China V 7435 presented petition to consulate V 7435 banned import of ivory N 7436 sell stockpile of tons N 7437 importing timber from state N 7438 imports % of logs N 7439 opened session in city V 7442 reaching pairs in 1988 V 7443 left him during trip V 7447 gaining value against goods V 7447 are pursuit of economists N 7450 resigned week as Thatcher V 7455 have repercussions beyond those N 7456 is product of shop N 7457 challenged forecast in newsletter V 7458 was kind of attention N 7460 arranged luncheon in York V 7461 are amateurs at dueling N 7462 upset Case in primary V 7462 made run at seat N 7463 spent years on staff V 7464 been part of debate N 7464 been part for years V 7466 touched debate with Sachs N 7469 predict rise in inflation N 7472 were instrument for policy N 7473 is case in States V 7474 add reserves from system V 7480 import all of pressures N 7481 creates bargains for buyers V 7481 pushing demand beyond capacity V 7483 exported inflation at times V 7484 inflate supply of currencies N 7487 manipulate relationships to advantage V 7488 need reminders of responsibility N 7489 exercise power on behalf V 7493 Given effects of disorders N 7496 posted increase in earnings V 7497 fell % to million V 7498 approved increase in rate N 7498 approved increase from cents V 7501 gained 1.50 to 35.75 V 7504 reimburse Sharp in event V 7505 limits number of options N 7507 has stake in company V 7509 rose % to dollars V 7512 wrapped son in blankets V 7512 placed him on floor V 7515 lost grip on son N 7520 stepping campaign for use N 7521 require seats for babies V 7523 scrutinized accidents in 1970s N 7524 take look at issue N 7524 take look during days V 7525 advocating use of seats N 7530 lost grip on baby N 7531 pulled her from compartment V 7532 encourages use of seats N 7532 bought ticket for baby V 7533 take son to Europe V 7535 barred use of seats N 7536 bought seat for daughter V 7537 hold her during takeoff V 7538 get complaints from parents V 7539 petitioned FAA in June V 7541 requiring seats for babies V 7542 buy ticket for baby V 7547 denying use of seats N 7550 describes call for seats N 7551 buy tickets for babies V 7552 pick part of tab N 7553 welcome use of seat N 7556 is kind of device N 7559 turning heat on FAA V 7563 instituted review of procedures N 7565 has effect on condition N 7566 is subsidiary of Bancorp N 7569 elected him as director V 7571 named executive of company N 7572 been president in charge V 7574 named Poduska to posts V 7575 named chairman of company N 7577 combine lines by quarter V 7578 maintain operations in Sunnyvale N 7580 comprise importation to Japan N 7581 importing vehicles from plant V 7586 announced number of purchases N 7587 buy vehicles from makers V 7588 acquire stake in Inc. N 7589 owns Center in Manhattan N 7590 is partner in Plaza N 7591 sold mortgage on core N 7591 sold mortgage to public V 7592 convert shares to stake V 7594 gain stake in section N 7598 had comment on reports N 7599 seeking million for firm V 7603 acquire shares of stock N 7604 understand resources of Mitsubishi N 7604 represents future for company N 7605 meets objective of diversification N 7607 has association with Mitsubishi V 7609 distributed book to investors V 7610 acquire piece of estate N 7611 stir sentiments in U.S V 7613 downgraded million of debt N 7613 downgraded million in response V 7614 increase opportunities through acquisitions V 7618 acquired Entex in 1988 V 7620 hand Inc. for irregularities V 7621 called nature of operations N 7628 closed unit in July V 7628 used names of individuals N 7631 issue share of stock N 7631 issue share for each V 7633 lifted prices at outset V 7635 added 6.76 to 2603.48 V 7637 dipped 0.01 to 314.09 V 7637 eased 0.01 to 185.59 V 7639 carried prices to highs V 7640 following round of buying N 7642 changed hands on Exchange V 7643 led advancers on Board V 7643 led 774 to 684 N 7644 attributed activity in part V 7646 hit bottom near level V 7648 ease concerns about growth N 7649 gained 7 to 67 V 7649 building stake in company N 7652 gained 3 to 42 V 7654 making bid under terms V 7654 accepts offer below 300 N 7655 fell 3 to 99 V 7656 skidded 3 to 47 V 7656 rose 3 to 1 V 7657 added 1 to 31 V 7660 tumbled 1 to 3 V 7660 meet requirements under regulations V 7662 face problem with criteria N 7662 dropped 7 to 9 V 7663 had million in stock N 7665 rose 3 to 19 V 7665 gained 5 to 19 V 7665 added 1 to 26 V 7666 fell % from year V 7666 lost 5 to 16 V 7667 added 7 to 41 V 7667 slid 1 to 49 V 7668 dropped 1 to 54 V 7670 jumped 1 to 33 V 7671 expanded program by shares V 7672 gained 2 to 43 V 7674 skidded 4 to 28 V 7676 fell 1.14 to 368.87 V 7678 lost 1 to 6 V 7680 commemorate centennial of birth N 7689 gathers dozen of pieces N 7693 featuring work of Belli N 7697 weaving movement into tapestry V 7699 prefer pie in portions V 7700 makes debut as Gilda N 7700 makes debut in production V 7701 leaving cap to Nucci V 7706 singing countess in Widow V 7710 opens season with production V 7727 magnify problem for companies V 7735 are reasons for drubbing N 7736 inform Bradley of notions V 7736 ensure success as leaders N 7741 cut tax to % V 7741 gather support in Congress V 7743 suffered sclerosis from point V 7748 castigate Bradley for opposition V 7749 increases value of assets N 7749 represent inflation of values N 7754 cleared loan to company N 7755 buying services from Inc. V 7755 extend services between Santiago V 7756 supply equipment for project V 7757 supply equipment for project V 7759 raise cost of trading N 7760 Boost amount of cash N 7760 buy contract from level V 7761 curb speculation in futures N 7768 sell amounts of stock N 7769 set outcry against trading N 7771 got taste of it N 7771 got taste in ads V 7771 boost margins on futures N 7771 boost margins to % V 7772 has meanings in markets N 7775 sets minimums with oversight V 7777 control 100 in value N 7782 reflecting debate over trading N 7783 widen differences between stocks N 7783 entice arbitragers in place V 7785 decrease liquidity in market N 7785 increase discrepancies between stocks N 7786 lose sleep over prospect V 7787 choke trades between stocks N 7787 increase stability of prices N 7788 diminish impact of arbitrage N 7788 change requirements for futures N 7788 manages billion in funds N 7789 quantify impact of arbitrage N 7789 quantify impact on performance V 7790 echoed complaints of managers N 7791 curtail volume of trading N 7792 doing trades for accounts N 7792 taking advantage of opportunities N 7793 doing that in guise V 7797 raise specter of competition N 7799 increase shares of stock N 7807 saw demand by banks N 7809 provide measure of strength N 7809 show gains in generation N 7810 include release of sales N 7813 announce details of refunding N 7819 included million of bonds N 7824 reflect concerns about uncertainties N 7836 purchase bills for account V 7837 auctioned yesterday in market V 7838 held sale of bills N 7849 considering alternatives to the N 7850 reset rate on notes N 7850 reset rate to % V 7850 increased payments by million V 7858 price offering by Co N 7862 repay portion of borrowings N 7862 redeem amount of debentures N 7862 redeem amount in August V 7863 price offering by Inc N 7866 ended 2 in trading V 7869 scaled purchases of securities N 7869 assess claims from hurricane N 7870 mean issuance of issues N 7871 been buyers of classes N 7871 been buyers during months V 7872 have yields than bonds N 7872 carry guarantee of Mac N 7874 offered million of securities N 7879 pulled low of 91-23 N 7880 settled session at 99-04 V 7883 rose 10 to 111 V 7883 rose 7 to 103 V 7885 fell point to 97.25 V 7887 ended day on screens V 7888 totaled billion in quarter V 7890 numbered 670 in quarter V 7895 totaled billion in quarter V 7899 acquire share of stock N 7899 acquire share for 17.50 V 7904 leave us in stitches V 7904 notice pattern for witches N 7913 heighten concerns about investment N 7914 use foothold in concerns N 7915 signed agreement for Chugai N 7915 market products in Japan V 7918 pay 6.25 for shares V 7920 obtain hand in competition N 7922 acquired positions in companies N 7925 been one of players N 7926 wants % to % N 7928 speed development of technology N 7928 apply technology to array V 7930 spends % of sales N 7930 spends % on development V 7932 gain knowledge through sale V 7933 had income of million N 7934 had loss of million N 7935 received patent for technology N 7935 detect organisms through the V 7936 facilitate marketing of test N 7937 help Gen-Probe with expertise V 7940 see counterparts at Agency N 7947 sell technology to Japan V 7951 decreasing reliance on technology N 7952 has lot of weaknesses N 7954 's leader in manufacturing N 7954 is years behind U.S. N 7955 use expertise in rest V 7957 make use of expertise N 7957 win prizes as Japanese N 7958 turning inventiveness into production V 7960 adopted technology in 1966 V 7960 used it for years V 7961 developed system with Soviets V 7962 take journalist into space V 7964 opposed development of relations N 7967 is one of bets N 7968 held exhibitions in York V 7970 is target for Soviets N 7972 handed details on technologies N 7973 involved areas as materials N 7975 expect flow from Japan V 7976 has lot of know-how N 7976 put that into production V 7979 help Soviets in way V 7980 relinquish control of islands N 7981 provided information about plans N 7983 arouses interest at glance V 7986 SIGNALED Day for houses V 7988 took effect after years V 7991 become players in 1970s V 7993 were wars among brokers V 7995 add fees to commissions V 7998 are members with houses V 7998 gaining share of commissions N 8000 ended commissions in years V 8003 lead mission to Poland N 8005 visit Poland from 29 V 8011 back company in partnership V 8014 develop acts for label V 8017 gives link to distributor N 8018 gives partner with finger N 8019 turning division in years V 8022 had stake in efforts N 8026 have shot in shoulder V 8027 went week after shot N 8028 moved it across country V 8029 left marks on carpet V 8032 has plenty of company N 8037 working sweat with activities V 8038 walk days for exercise V 8041 keeping sales of products N 8042 rise % to billion V 8042 sees market as one V 8047 rose year to 145 V 8048 predicts trend toward pieces N 8052 be prospect for gizmo V 8054 paid 900 for bike V 8059 conjures images of nation N 8061 asking people about regime V 8066 is % to % N 8067 produce contractions of groups N 8067 achieve % of capacity N 8067 done times for minimum V 8074 play round of golf N 8090 devote time to families V 8091 rise % from billion V 8099 commissioned study of years N 8100 watching bowling on television N 8111 experience difficulties with terms V 8112 portraying health of company N 8115 followed string of declines N 8116 was result of credit N 8117 raised rate by point V 8118 's somethin in neighborhood V 8123 busted spirits in hundreds V 8124 get four from people V 8125 identifies him as demonologist V 8126 call one of band N 8127 heads branch of Committee N 8128 is explanation for haunts V 8133 get calls from people V 8133 have ghosts in house V 8135 heads Committee for Investigation N 8136 has chapters around world V 8138 give nod to sensibilities V 8139 's day of business N 8139 occasion number of reports N 8141 bested haunts from aliens N 8142 heads Association of Skeptics N 8147 dragging trap across rafters V 8148 plagued house in Mannington N 8152 phoned University of Kentucky N 8152 report happenings in house N 8153 heard footsteps in kitchen N 8157 tangle cord around leg V 8163 's bones of saints N 8166 investigated claims of cats N 8168 debunk goings-on in Vortex N 8170 called Hyman as consultant V 8185 tossing her around room V 8190 sprinkles water over woman V 8192 has burns on back N 8192 has burns from confrontation V 8205 cut workers since Monday V 8206 slashed jobs from peak V 8212 adds people to staff V 8216 foresee shortages over months N 8217 fill jobs for operators N 8218 put halt to building V 8218 freeing workers for repairs V 8222 hire engineers over months V 8225 drew sigh of relief N 8227 put companies in violation V 8227 make loans to directors V 8229 bring penalties to employees N 8230 's case of whiplash N 8234 reflect dismissal of executives N 8237 state value of packages N 8243 SHUN burger for jobs V 8248 build resumes through grades V 8250 following drop in 1988 N 8253 hires graduate with degrees N 8253 hires graduate for 7.50 V 8253 tend fires at resort N 8256 making return with vengeance N 8257 elect president for time V 8258 crisscrossing country of people N 8258 holding rallies in hope V 8264 grab lead in polls N 8266 win % of vote N 8268 sending shivers through markets V 8272 took office in 1985 V 8273 bring transition to democracy N 8273 bring transition after years V 8297 regulates investment in technology N 8298 prevented million of expenditures N 8298 prevented million since 1986 V 8300 including jobs in Louisville N 8300 move operations to state V 8301 paid million to hospitals V 8308 acquire one of machines N 8310 choose careers in specialties N 8311 prefer salary over compensation V 8314 do that at all V 8316 jumped % to 42,374 V 8318 is reason for shift N 8319 reflects values of generation N 8319 wants time for families N 8319 directs searches for International V 8320 is change in fabric N 8322 spent weeks at Center V 8322 shared room like patients V 8325 is one of 18 N 8329 require attention from nurses N 8329 are 100 per day N 8330 spend time on units V 8331 is host to conference N 8332 's part of hospital N 8335 develop masters in programs N 8335 develop masters at universities V 8336 launches publication in spring V 8336 launches Journal on Care N 8337 buy Inc. for million V 8340 committed money to bid V 8342 rebuffed requests for access N 8343 has value in salvage V 8344 need access to records N 8345 started venture with Co. N 8349 filed materials with Commission V 8351 suspended distribution in 1988 V 8353 made conversion to corporation N 8353 made conversion in year V 8353 save million in costs N 8353 save million from change V 8354 receive share of stock N 8354 receive share for units V 8355 receive share in Edisto N 8355 receive share for units V 8356 own % of Edisto N 8357 is partner of NRM N 8358 own % of Edisto N 8358 own % after transaction V 8359 give seat on board N 8363 discontinued talks toward agreement N 8363 regarding acquisition of group N 8364 reached agreement in principle N 8364 reached agreement in August V 8367 sell building to Co. V 8368 disclose terms of sale N 8378 panic weekend after plunge N 8382 cast pall over environment V 8392 transferred assets into funds V 8395 are all from level V 8399 tell you about trends V 8400 is growth in money N 8403 held % of assets N 8403 held % at end V 8404 buffer funds from declines V 8405 bolstering hoards after crunch V 8406 raised position to % V 8408 seek safety in months V 8410 be continuation at expense V 8413 cited need for currency N 8415 alleviate demands of republics N 8421 is disagreement among Baker N 8425 pouring money into it V 8426 make difference to nationalists V 8427 easing grip on empire N 8428 cut Ortegas from Moscow V 8429 expect good from control V 8430 's nothing in contradictory N 8430 's nothing in this V 8432 raises doubt about Gorbachev N 8438 avoid criticism from Mitchell N 8446 explain them to students V 8449 increases board to members V 8452 shot them in backs V 8455 protect the from individuals V 8457 be symbolism than substance N 8459 attach amendments to legislation V 8459 gotten bill through committee V 8460 allow vote on issue N 8460 allow vote before end V 8461 favors kind of measure N 8464 permitted resurrection of laws N 8468 establish sentence for crimes V 8470 including murder for hire N 8471 permitting execution of terrorists N 8474 killing justice for instance V 8476 took place in 1963 V 8476 exercise authority for years V 8477 is sort of fraud N 8478 distracting attention from issues V 8480 deters people from commission V 8481 are retribution for crimes N 8483 made part of debate N 8484 meted executions in manner V 8485 prompted protest from Thurmond N 8486 imposed penalty in fashion V 8487 invade sentencings in ways V 8488 showing application of penalty N 8489 shift burden to prosecutors V 8494 question validity of studies N 8499 narrow penalty to convictions V 8500 Narrowing penalty in fashion V 8501 strengthen argument of those N 8501 oppose execution under circumstances V 8502 postponed decision on move N 8502 block offer of Co. N 8504 seeking injunction against offer N 8505 pay 18 for stake V 8511 provides information about markets N 8511 provides information through network V 8513 declined % to units V 8514 attributed drop to trend V 8515 declined month from levels V 8516 sued it in court V 8518 reach agreement on amount N 8519 challenging entries on books N 8520 recover amount from subsidiary V 8521 granted extension until end N 8524 hold settlement of Britton N 8526 had agreement in hand V 8530 put this on record V 8541 taking place during earthquake V 8544 read it into record V 8547 Reading settlement into record V 8547 was thing on mind N 8548 buy stores from Corp. V 8552 named assistant to chairman N 8553 wear wigs in court V 8559 spend time with patients V 8559 is key to rapport N 8560 restrict efficiency of communication N 8562 spending % of product N 8562 spending % on care V 8564 protect themselves from possibilities V 8567 close two of plants N 8569 have plants in system V 8574 are indication to date N 8576 beginning production in U.S N 8579 build vehicles in U.S. V 8580 bought Corp. in 1987 V 8581 cut workers from payroll V 8582 received offer from group V 8583 add million of debt N 8583 add million to company V 8584 seek protection under 11 V 8585 is expression of interest N 8585 has rights until 28 V 8588 had reactions to offer N 8590 pay bondholders in cash V 8591 have million in claims N 8592 made public by bondholders V 8596 keeping Revco in red V 8598 represent lot of estate N 8598 boost demand for drugs N 8599 reported loss of million N 8601 increased % to million V 8605 receive discount for shares V 8609 has billion in claims N 8615 steal company in middle V 8631 resume roles as suppliers N 8638 produced total of tons N 8638 produced total in 1988 V 8640 encourage walkouts in Chile N 8641 fell tons to tons V 8642 had effect on sentiment N 8646 was tons at end V 8649 prop prices in weeks V 8649 kept prices in doldrums V 8653 give bags of quota N 8655 overcome obstacles to agreement N 8657 showed changes in volume V 8658 eased cents to 380.80 V 8660 rose cents at 500.20 V 8662 triggered flight to safety N 8663 was resistance to advance N 8668 passed laws on rights N 8668 passed laws in 1987 V 8668 launched Union on course V 8670 is creation of market N 8671 blocked speech by Gates N 8671 blocked speech on ground V 8675 accept change of kind N 8678 seek permission from council N 8682 permitting activity in others V 8685 restricting freedom of cooperatives N 8686 unleashing forces of market N 8688 ruled use of market N 8688 solve problem of goods N 8689 told Congress of Deputies N 8689 told Congress on 30 V 8689 disrupt processes in country N 8690 rejected planning for reasons V 8690 combine controls of the N 8690 combine controls with benefits V 8692 display resemblance to tenets N 8692 produced synthesis of capitalism N 8693 combine efficiency with discipline V 8695 reach stage of development N 8695 reach stage in Russo V 8696 sacrifice themselves for nation V 8697 unite employers with government V 8698 undertake role of decision-making N 8700 presented vision to Congress V 8702 be division between direction N 8707 ensure loyalty of sector N 8711 provides arm of alliance N 8713 providing workers with opportunity V 8713 holding promise of goods N 8713 revive popularity of party N 8718 see task as that V 8719 re-establish control in Europe V 8721 fill shops with goods V 8722 is director of Foundation N 8723 climbed % in September V 8728 reached 175 in September V 8729 uses base of 100 N 8729 uses base in 1982 V 8730 edged % in September V 8731 was evidence of home N 8733 rose % in September V 8735 following surge in August V 8736 held total to billion V 8737 grew % to billion V 8738 get construction under way V 8740 lowered ratings on debt N 8741 downgrading debt to single-A-3 V 8742 confirmed rating on paper N 8743 lowered Eurodebt to single-A-3 V 8749 incurred millions of dollars N 8751 reflect risk as profile N 8752 been one of firms N 8753 put pressure on performance V 8753 citing problems from exposures N 8754 represent portion of equity N 8756 cut 400 of employees N 8756 cut 400 over months V 8757 keep expenses in line V 8758 is response to changing N 8759 provides quotations for securities V 8762 discussing formation of group N 8763 are streamlining of operations N 8764 including production of equipment N 8765 is response to loss N 8767 market system of Inc N 8768 buying concern for million V 8770 sold unit to Inc. V 8779 reaped million in sales N 8779 reaped million on game V 8780 based budget for baseball N 8780 based budget on Series V 8784 takes broadcasting of playoffs N 8784 takes broadcasting in contract V 8785 have loss in year V 8786 reach million over years V 8788 was Series in years N 8788 featuring team against team N 8788 pitted Dodgers against the V 8790 drew % of homes N 8797 gained points to 2603.48 V 8800 throw towel on trading V 8801 swear trading for account V 8802 eliminate trading from market V 8803 shot points in hour V 8809 outnumbered 774 to 684 N 8815 rose Monday to 1.5820 V 8817 correct errors in work N 8818 considered equipment in U.S. V 8822 linked computers in Tokyo N 8822 linked computers with offices V 8826 have people in offices V 8833 doubled staff over year V 8834 slashed lag between introductions N 8834 slashed lag to months V 8835 has share of market N 8840 averaged growth since 1984 V 8841 use PCs at half V 8846 ring perimeter of office N 8847 make charts for presentations V 8849 transfer information from one V 8850 transmit charts to offices V 8851 writes information on chart V 8851 adds it with calculator V 8858 manages group in office V 8861 is reason for lag N 8863 has history of use N 8864 have experience with machinery V 8870 costs % in Japan V 8872 ruled it with power V 8875 offered design to anybody V 8879 is state of industry N 8884 have relationship with NEC N 8884 have relationship through cross-licensing V 8888 warned NEC about violations V 8891 put emphasis on service V 8892 trail those in U.S. N 8892 import systems from companies V 8896 increase exposure to computers N 8899 increasing number from 66 V 8904 won % of market N 8905 selling station in 1987 V 8905 became company in market N 8906 take portion of growth N 8907 busted sector with machine V 8908 including bash at Dome N 8908 lavishing campaign for machine V 8909 create sort of standard N 8910 adopt version of standard N 8918 sells machines in China V 8920 have presence in Japan V 8923 introduce PC in Japan V 8924 handles characters of Japanese N 8924 introduce machine until years V 8928 luring official as team N 8930 enhances compatibility with products N 8931 runs office for Dodge V 8934 zapping % to % N 8934 boosts rate to % V 8937 comprises worth of visits N 8943 been evidence of mortality N 8944 researched effects of RU-486 N 8945 suppress ovulation for months V 8946 reported repeaters in programs V 8947 are data on question N 8955 represents advance in area N 8956 expressed concern over bleeding N 8957 obtain approval for drug V 8958 forbids Institutes of Health N 8959 has backing of foundations N 8959 subsidizes research on contraceptives N 8971 expose patient to risk V 8974 contains grant for development N 8975 put government into business V 8976 put government into business V 8979 put pill through test V 8980 is editor of magazine N 8987 worked plan with Department V 8987 improve data on exports N 8992 billing client for services V 8992 watching legislation in Washington N 8992 is export as shipment N 8993 found exports with result V 8996 explain some of strength N 8999 suggest review of posture N 9000 relieve need for efforts N 9000 financing imports of goods N 9001 is president of Express N 9002 stop some of talent N 9003 billing UAL for expenses V 9004 obtain billion in loans N 9004 obtain billion for buy-out V 9004 was reason for collapse N 9007 repaid million in fees N 9007 repaid million for bankers V 9011 rose 4 to 175 V 9012 accepts offer below 300 N 9014 doing arbitrage for account V 9015 held meeting with partners N 9017 blame trading for swings V 9017 including plunge in Average N 9018 maintain market in stock V 9019 explain position on trading N 9019 explain position to regulators V 9020 get ideas on issue N 9022 represents retreat from trading N 9023 executing average of shares N 9024 is one of pullbacks N 9024 execute trades for customers V 9026 been one of firms N 9026 executing arbitrage for customers V 9029 buy amounts of stocks N 9030 lock profits from swings N 9033 made about-face on trading N 9033 made about-face after meeting V 9034 defended arbitrage at Kidder N 9035 have impact on market N 9036 do business with firms V 9036 do arbitrage for accounts V 9037 following trend of competitors N 9038 executed average of shares N 9038 executed average in trading V 9049 protecting assets of beneficiaries N 9050 do kinds of trading N 9050 be layoffs at firm V 9051 continue arbitrage for clients V 9054 stop it at all V 9055 been proposition for Stearns N 9057 been catalyst for pullback N 9058 follow lead of Corp. N 9058 cutting business to firms N 9060 cease business with them N 9065 organize alliance of firms N 9066 reaching moment of truth N 9066 reaching moment on Street V 9069 lost it in burglary V 9070 previewing sale at house N 9071 brought it for estimate V 9072 exchanged photos by fax V 9076 buy presents for girlfriend V 9082 sell 44 of strips N 9082 sell 44 to Russell V 9085 investigating disappearance of watercolor N 9085 has sketches on side V 9086 was part of shipment N 9088 watching group of handlers N 9088 watching group for time V 9091 shipped it from London V 9095 including some of treasures N 9096 offered reward for return V 9097 hidden haul in closet V 9098 took art to Acapulco V 9098 trade some of it N 9098 trade some for cocaine V 9101 bring prices on market V 9101 notified IFAR of theft N 9101 notified IFAR in 1988 V 9106 painted one in style V 9106 sold it as original V 9109 showed acquisition to expert V 9109 see it as fake V 9110 taped conversation with him N 9111 faking paintings up seaboard V 9112 is director of Foundation N 9113 recalling 3,600 of Escorts N 9115 makes Tracer for Ford V 9118 retain windshield in place V 9120 return cars to dealers V 9121 cause oil in some N 9123 replace cap with cap V 9124 inspect strainers at charge V 9125 extend term for damage N 9128 offer rebates to buyers V 9129 offer option of financing N 9130 offered option on Broncos V 9132 reassume responsibility for shortfall N 9133 affect stability of plans N 9134 insures benefits for workers V 9134 take part in plans V 9136 transform agency from insurer V 9139 was result of shortfall N 9144 viewed creation of plans N 9144 viewed creation as abuse V 9144 transfer liability of shortfall N 9144 transfer liability from LTV V 9146 reassume liability for plans N 9147 reassume responsibility for plans N 9149 consider creation of plans N 9149 consider creation as basis V 9149 reassume liability for plans N 9153 continue discussions with agency N 9162 is one of slew N 9162 hitched ads to quake V 9167 tied ads to donations V 9168 intermixed footage of devastation N 9168 intermixed footage with interviews V 9169 had airtime on Football N 9173 crash ads in days V 9174 learned art of commercial N 9174 learned art after crash V 9175 trotted crop of commercials N 9175 trotted crop after dip V 9176 created ad in weekend V 9179 see messages in advertising V 9184 see themselves as chasers V 9185 donate cents to Cross V 9190 basing donations on Doubles V 9190 works pitch into message V 9191 put plug for donations N 9191 put plug in game V 9193 made plea for donations N 9193 made plea in ads V 9193 helping people for years V 9196 has problem with that V 9199 awarded account to Zirbel V 9202 handled account since 1963 V 9205 acquire KOFY in Francisco N 9205 acquire KOFY for million V 9206 share liability for deaths N 9207 hear appeals by companies N 9207 have impact at levels V 9208 face prospect of liability N 9210 adopt logic of court N 9211 requiring liability among manufacturers N 9214 has influence on states V 9215 hear appeals by Co. N 9216 prevent miscarriages during pregnancy V 9217 banned use of DES N 9217 linked it to cancer V 9218 flooded courts in decade V 9223 extending statute of limitations N 9227 leaving award against Corp. N 9227 resolve questions about defense V 9228 defend themselves against lawsuits V 9228 following specifications of contract N 9229 approved specifications for contract N 9230 upheld award against Dynamics N 9230 rejecting use of defense N 9233 re-entered submarine through chamber V 9235 awarded damages to families V 9239 Let conviction of Lavery N 9242 Left award of million N 9244 draw conclusion from victory V 9260 renewing treaty with U.S N 9262 combined them with increases V 9265 reduce rates on income N 9267 delivered mandate for successes N 9268 adopt elements of model N 9271 are guide to levels N 9303 pulled plug on Contras V 9304 hold election in Nicaragua V 9306 knows difference between blunder N 9307 announcing end to cease-fire N 9307 produce concern over activities N 9309 justifies need for army N 9314 approved marketing of drug N 9315 clear price for treatment N 9315 receive approval by end V 9316 approved Proleukin in months V 9317 obtain clearance for distribution N 9318 keep records of transfers N 9318 move billions of dollars N 9320 working details with associations V 9321 identifying recipients of transfers N 9324 report withdrawals of 10,000 N 9328 oversees issue of laundering N 9329 have comment on plan N 9331 withdraw swap for million V 9332 replaced million in notes N 9332 replaced million with issues V 9333 filed request with Commission V 9334 citing developments in market N 9335 give stake in company N 9336 had losses in years V 9341 swap amount of notes N 9341 swap amount for shares V 9341 paying rate of % N 9341 protecting holder against decline V 9342 make million in payments N 9342 make million on notes V 9343 lower rate on debt N 9344 reached agreement with subsidiary N 9345 was agreement between distributor N 9345 expand market for drugs N 9346 promote TPA for patients V 9347 sending index for session V 9349 fell 1.39 to 451.37 V 9351 fell 5.00 to 432.61 V 9351 fell 3.56 to 528.56 V 9351 dropped 3.27 to 529.32 V 9353 gained 0.47 to 438.15 V 9356 manages million for Co V 9357 deduct losses from income V 9358 put pressure on both V 9362 advising lot of clients N 9362 make sense to them V 9363 awaiting resolution of debate N 9364 send prices in matter V 9366 surged 14 to 53 V 9368 complete transaction by 15 V 9369 advanced 1 to 20 V 9371 assumed place on list N 9371 gained 1 to 11 V 9371 joined list of companies N 9372 had talks with Jaguar N 9373 continue pursuit of company N 9375 gained 1 to 13 V 9376 reported profit of cents N 9378 fell 1 to 13 V 9380 had loss of million N 9381 fell 5 to 13 V 9382 reported loss of million N 9384 made provision in quarter V 9386 sank 4 to 13 V 9386 reorganize business as unit V 9387 establish reserve of million N 9387 establish reserve against loan V 9389 uncover handful of genes N 9389 unleash growth of cells N 9391 produce array of strategies N 9394 's set of discoveries N 9395 knew nothing at level V 9396 propel it into state V 9397 call class of genes N 9398 hold growth in check V 9401 cause cancer by themselves V 9406 is age of diagnosis N 9409 lost eye to tumor V 9411 faced risk than children N 9415 made insights about workings N 9417 fingered two of cancer-suppressors N 9418 made discovery in 1986 V 9425 inherit versions of genes N 9430 see pairs of chromosomes N 9432 inherited copy of 13 N 9432 inherited copy from parent V 9437 used battery of probes N 9437 track presence in cell N 9438 found defects in copy V 9444 repeat experiment in cells V 9445 was one of teams N 9445 was one in 1984 V 9445 report losses for cancer V 9446 turned attention to cancer V 9450 uncovering variety of deletions N 9457 nail identity of gene N 9457 flipped cell into malignancy V 9462 transform cells into ones V 9465 compared gene with gene V 9465 observing form of p53 N 9469 strikes members of families N 9469 predispose women to cancer V 9472 are reports of genes N 9474 isolate one on 18 V 9476 inherit gene on one N 9479 turn cascade of discoveries N 9479 turn cascade into tests V 9482 replace genes with versions V 9485 's glimmer of hope N 9486 breaks thousands of eggs N 9488 announced sales of Eggs N 9489 confirm identities of customers N 9493 consume pounds of eggs N 9498 debunk talk of over-capacity N 9498 take some of skeptics N 9498 take some on tour V 9499 been announcement of arrangement N 9499 been announcement for fear V 9503 sell shares in bet V 9503 allow return of shares N 9511 calls bull on stock N 9514 help line in run V 9522 pushing prices of potatoes N 9523 sent letters to growers V 9523 divert potatoes to outlets V 9525 become player in printing N 9526 acquire subsidiary for million V 9527 make printer behind Co. N 9529 is step in design N 9529 build Quebecor through acquisitions V 9530 achieved integration on scale V 9530 put newspaper on doorstep V 9531 is part of trend N 9532 positioned itself as one V 9533 is move for Quebecor N 9535 has sales of billion N 9538 including push into market N 9539 started Journal in 1977 V 9543 took advantage of strike N 9543 launch Journal de Montreal N 9546 outsells 3 to 2 N 9549 's news from A V 9551 made publisher in Quebec N 9552 is distributor of newspapers N 9553 controls % of Inc. N 9554 pay million in cash N 9554 pay million for Graphics V 9554 give stake in subsidiary N 9556 have plants in sales N 9557 own % of subsidiary N 9558 pay million for stake V 9559 finance share of purchase N 9560 is acquisition in year N 9561 bought plants from Inc. V 9562 doubled revenue to million V 9564 sold billion in businesses N 9565 has appetite for acquisitions V 9565 spend deal than billion N 9565 spend deal on purchase V 9566 rose pence to pence V 9570 approved sale of Kerlone N 9571 reach market through Pharmaceuticals V 9572 sued state for discrimination V 9575 challenges age of 70 N 9577 eradicate effects of practices N 9578 deprives state of judges N 9580 is one of experience N 9582 turned 76 on 9 V 9589 pending appeal of case N 9592 serve role on bench V 9598 approves appropriation for agencies N 9600 halted effort with resolution V 9604 lost seven of attorneys N 9606 been exodus of lawyers N 9616 recruits lawyers from disbanding V 9616 bring partners from Barell V 9617 lost partners during year V 9620 stopped inches above knees N 9623 rescheduled case for 27 V 9626 resumed talks on battle N 9626 level accusations at each V 9627 filed breach of suit N 9627 filed breach in Court V 9628 talking yesterday in attempt V 9628 settle matter before Thursday V 9630 taken Guber at word V 9631 terminate it at time V 9632 have access to contracts N 9632 were part of negotiations N 9633 denying claims by Peters N 9633 terminate contract with Warner V 9635 described assertions in filings N 9635 produce movies for Warner V 9637 paid salary of million N 9638 filed lawsuit in Court V 9638 block offer by Partners N 9638 violates agreement between concerns N 9639 led Associates by New N 9639 filed suit in court V 9640 rejected offer from DPC N 9641 launched offer for maker N 9646 have impact on quarter N 9648 climbed % to billion V 9650 is effect on Boeing N 9653 get aircraft with supervisors V 9655 included 21 of jets N 9659 lose business in sense V 9663 faces risks on contracts V 9664 is contractor on projects N 9665 record loss in 1989 V 9669 representing 30,000 of employees N 9673 be % for year N 9676 increased % to million V 9677 soared % to 15.43 V 9678 provided information to Force V 9678 replace skins on aircraft N 9680 is culmination of investigation N 9681 was grounds for prosecution N 9683 filed application with regulators V 9683 transport gas from Arctic V 9684 be battle for right N 9684 transport quantities of gas N 9684 transport quantities to markets V 9685 is strike by Foothills N 9687 including one from Ltd. N 9688 won approval from Board V 9688 export feet of gas N 9688 export feet to U.S. V 9689 is 71%-owned by Corp. N 9690 waved flag for stage N 9693 build pipeline with capacity V 9693 transport feet of gas N 9694 has monopoly on transportation V 9698 be party to system N 9698 consider ventures with players N 9701 reach 3.25 by 1995 V 9702 see return on investment N 9703 enter contracts for gas N 9703 develop reserves in area V 9706 connecting reserves to mainline V 9707 forge kind of consensus N 9707 forge kind between builders V 9707 undertaking hearings into projects N 9711 gives kind of position N 9712 delaying approval of acquisition N 9712 pending outcome of examination N 9714 won commitments from banks N 9714 make loans in neighborhoods V 9717 filed petition with Fed V 9718 challenged record in state N 9718 shut itself from contact V 9719 deferring action on merger N 9719 is information in record V 9719 reach conclusion on record N 9719 meet needs of communities N 9719 including neighborhoods in communities N 9720 begin examination of units N 9720 begin examination in weeks V 9725 double franchise in Florida N 9725 double franchise to billion V 9726 make bank after Inc. N 9726 be market in country N 9727 rose cents to 23 V 9729 denied application by Corp. N 9729 purchase Bank in Scottsdale N 9729 denied application on grounds V 9730 signaled emphasis on Act N 9732 explore options for future N 9734 deliver plan to committee V 9735 make recommendation on plan N 9737 reselling million of securities N 9738 raise million through changes V 9739 have effect on structure N 9742 pay cents on dollar N 9745 miss projections by million V 9746 miss mark by million V 9747 meet targets under plan V 9748 called report off base V 9750 taken position on plan N 9752 sell billion in assets N 9760 rated single-A by Inc V 9761 expect rating from Corp. V 9761 has issue under review V 9767 has date of 1998 N 9774 yield 15.06 via Ltd V 9777 yield 17.06 via Corp V 9779 yield % via Switzerland V 9785 protect interests as shareholder N 9786 be blow to both N 9790 reflects eagerness of companies N 9793 buy stake in Lyonnais N 9794 sought acquisition for years V 9795 shocked some in community N 9800 following suspension of shares N 9800 pay francs for share V 9801 holds stake in subsidiary N 9803 ties it to Mixte V 9809 be news for management N 9811 boost stake over days V 9812 offer francs for shares V 9813 offer francs for shares V 9814 swap shares for share V 9815 holds % of Mixte N 9815 cost it under bid V 9816 values Mixte at francs V 9816 exchange them for shares V 9817 acquire unit for million V 9818 is supplier of cable N 9822 acquire interests from unit V 9824 requires approval from Canada N 9824 monitors investments in Canada N 9825 is part of plan N 9826 be acquisition outside country N 9826 form basis for unit N 9829 have capacity than disks N 9830 begin production of drives N 9830 begin production in U.S. V 9836 pay dealers over years V 9839 is segment of circulation N 9841 reported loss of million N 9842 attributed loss to prepayments V 9845 gives sense of control N 9847 posted loss of million N 9847 posted loss against income V 9848 closed yesterday at 4.625 V 9849 reject offer from investor N 9849 buy Bancroft for 18.95 V 9850 consider offer in couple V 9852 boosted holdings in Bancroft N 9852 boosted holdings to % V 9858 has ties to chain N 9859 assembled committee of directors N 9862 make announcement about situation V 9863 won verdict against Rubicam N 9863 won verdict in case V 9866 considered imitation of song N 9870 imitate voices of performers N 9872 use songs in ads V 9873 including action by heirs N 9874 dismissed case in 1970 V 9878 are repositories for making N 9878 making distinctions about singers N 9882 acquired operations of N.V. N 9882 acquired operations for million V 9883 is maker of products N 9884 includes assets of Papermils N 9885 had revenue of million N 9886 has interests in businesses N 9887 form ventures with companies V 9888 become part of ventures N 9892 obtain waiver from lenders V 9895 climbed points in spate V 9899 lent support to dollar V 9904 sent pound into tailspin V 9906 quell concern about stability N 9907 provide solution to troubles N 9910 hit rating of leader N 9913 is potential for unit N 9917 kept base of support N 9917 kept base at yen V 9918 began yesterday on note V 9923 acquired portfolio from Association V 9925 includes million in receivables N 9926 is subsidiary of Co. N 9931 preserve hold on power N 9931 destabilize nation with demands V 9933 following vigil around headquarters N 9935 detained number of protesters N 9936 protesting trial of chief N 9937 opposing limits to autonomy N 9939 sentenced Palestinian to terms V 9939 forcing bus off cliff V 9940 received sentences for each V 9942 resolving differences in proposals N 9943 urged ban on output N 9946 use attacks by rebels N 9946 use attacks as excuse V 9951 torched flags on steps V 9951 protecting flag from desecration V 9953 take effect without signature V 9954 replace soldiers in Square V 9955 filed protests in days V 9955 alleging harassment of diplomats N 9958 accused government of response N 9959 summoned advisers for talks V 9959 following resignation of Lawson N 9961 granting amnesty to people V 9964 Died Fossan in Morristown V 9965 provide services at mine V 9966 direct expansion of capacity N 9969 reduce personnel in sectors V 9973 rose % amid growth V 9975 cited effects of concentration N 9977 spark period of consolidation N 9980 doing arbitrage for account V 9986 received offer from financier V 9987 forced company into protection V 9988 sell interest to Estate V 9990 replaced executive for time V 9994 fuel concern about growing N 9995 posted jump in earnings N 9996 delayed approval of Union N 9996 pending review of practices N 9997 entered battle between Mixte N 9998 rose % in September V 9999 citing turmoil in market N 10006 sustained damage of million N 10007 carries million of insurance N 10008 told analysts in York N 10008 expects earnings in 1990 V 10010 mentioned investment by Bell N 10012 build plant in Europe V 10012 reach agreement with unions V 10014 encompass plans for venture N 10016 made time in weeks N 10017 won clearance for reorganization N 10019 set 15 as date V 10021 receive share in company N 10023 transfer million of assets N 10024 retain interest in company N 10025 announced breakup in May V 10026 be rivals for orders N 10033 announced reduction in employment N 10034 follows string of glitches N 10035 had loss of million N 10036 fell % to million V 10037 bring employment to workers V 10039 approved swap between group N 10040 reinforce operations in markets N 10040 shows dynamism of concerns N 10041 taking place in accord N 10045 received tenders for % V 10050 taken practice to extreme V 10051 design system for city N 10056 wanted foot in door N 10057 want experience in field N 10058 expect market in future V 10059 's kind of investment N 10062 understand enthusiasm in getting N 10064 approve bid in advance V 10066 design specifications for system N 10066 show lines throughout city N 10069 give edge in winning N 10070 secure pacts with municipalities V 10076 closing competitors by slashing V 10077 sacrifice profit on project V 10080 expand service with flights V 10083 has population of citizens N 10084 fly flights to cities V 10085 solidify position as carrier N 10086 rose % in months V 10087 meet goal for year N 10088 generates bulk of profit N 10089 give figures for months N 10090 acquire Corp. for 58 V 10091 capped week of rumors N 10091 making bid for Nekoosa N 10094 spark period of consolidation N 10095 be fit because lines N 10095 representing premium over price N 10100 is offer since collapse N 10101 cast doubt on business V 10102 outperformed market in years V 10102 lagged market in period V 10106 expect comparisons through year V 10107 avoid some of pressures N 10110 included assumption of million N 10110 reduce exposure to market N 10111 is dealer-manager for offer N 10112 acquire retailer for 50 V 10114 reached agreement in principle N 10114 reached agreement for acquisition V 10117 operates stores in states N 10119 controls % of market N 10119 increase number of stores N 10120 control % of business N 10120 control % by 1992 V 10121 received contracts for aircraft N 10122 awarded contract for contract V 10123 got contract for sets N 10124 received contract for support V 10125 purchase million of shares N 10125 purchase million over months V 10129 omits roots of population N 10131 creates guilt about wearing N 10131 raises doubt about having N 10132 is time for Congress N 10134 castigating Marshall for muscling V 10137 be part of problem N 10147 Succeeding him as executive V 10149 named Foret as president V 10150 is veteran of Air N 10151 been president for planning N 10154 returning Inc. to profitability V 10155 was executive with concern N 10156 produce profit in quarter V 10158 keeping tabs on units N 10161 began discussions with buyers N 10162 inform managers of some N 10163 is one of handful N 10165 heads Eastern in proceedings N 10166 had turn at running N 10169 repay million on 31 V 10171 sell assets for million V 10173 had change in earnings N 10175 compares profit with estimate V 10175 have forecasts in days V 10177 assumed post of officer N 10181 rose % in quarter V 10185 is time in part N 10188 imagine such in lives N 10191 have grip on heart V 10193 has near-monopoly on supply V 10193 reduce levels in blood N 10194 scarfing psyllium in cereals V 10195 become epicenter of fad N 10195 rival fads since oil N 10198 takes place of bran N 10200 remain item for time V 10201 is crop as fenugreek V 10202 eat bowl of psyllium N 10202 are innocents in world N 10206 taking it since 1961 V 10207 prescribe it for problems V 10208 apply it to joints V 10210 explain allusions to fleas N 10213 been ingredient in laxatives N 10214 lower levels in blood N 10215 ordered studies on cholesterol N 10216 tested people with levels N 10223 hurt sales of cereals N 10225 is lull in war N 10228 yanked psyllium off shelves V 10229 approves uses of psyllium N 10236 get rain at time N 10238 grasping implications of research N 10239 has psyllium on page V 10240 keep news of boom N 10243 are places in world N 10252 passing psyllium in favor V 10257 completed acquisition of maker N 10258 disclose terms of agreement N 10267 lose job over this V 10268 find job with plan N 10270 rank availability as one V 10271 get coverage at all V 10273 makes mockery of idea N 10273 collect premiums from the V 10276 was backwater for them N 10277 's roll of dice N 10278 go % to % N 10280 be risks during year V 10280 aggravated problem in market N 10282 blame problem on competition V 10284 combine groups of people N 10284 combine groups into groups V 10284 spreading risk over base V 10285 accusing insurers of dereliction N 10286 destroy it in marketplace V 10288 is part of legislation N 10289 support idea of regulations N 10289 requiring use of rating N 10289 pegs rates to use V 10289 prevent companies from taking V 10289 taking companies as clients V 10290 requiring inclusion of items N 10292 were clinics in state V 10296 get insurance without excluding V 10301 uses base of 1981 N 10301 uses base as 100 V 10309 had results with earnings V 10309 declining % to million N 10309 declining % on decline V 10313 amended plan by reducing V 10313 trigger issuance to holders N 10315 purchased shares through 29 V 10317 estimated value at 55 V 10324 regarding sale of company N 10325 reach agreement by end V 10326 gained 9.50 to 39 N 10327 has value of million N 10339 reinforce profile of community N 10340 bedevil economy throughout 1990s V 10343 offer alternatives to industry N 10345 lifted status as center N 10357 cast pall over prospects V 10358 regain momentum until time V 10361 accept possibility of slowdown N 10363 derived scenarios from interviews V 10367 bears resemblance to difficulties N 10371 triggered rioting in colony N 10376 lose some of flavor N 10377 lose some of dynamism N 10381 taking fallout from crisis N 10381 projected growth of % N 10386 have bearing on economy V 10397 fled cycles of poverty N 10397 took power in 1949 V 10399 ratified accord on future N 10404 know cost of drain N 10406 continue strategies at blast V 10407 suspend trading for accounts V 10409 handle trading for customers V 10410 launch programs through market V 10417 see debate over trading N 10417 see debate as repeat V 10418 exonerated trading as source V 10422 match performance of market N 10425 managed billion in investments N 10425 tracking 500 at end V 10427 use markets as tool V 10427 is strategy than arbitrage N 10427 buy blocks of stocks N 10428 heightened concerns about volatility N 10429 blame trading for aggravating V 10430 followed blacklisting by investors N 10433 doing trades for customers V 10433 do trades for account V 10434 been one of traders N 10434 been one in months V 10435 form group of regulators N 10438 Joining call for kind N 10440 determine amount of cash N 10444 reestablish link between markets N 10445 invites bouts of arbitrage N 10446 be coordination on basis V 10447 have authority over products V 10448 represent confluence of self-interest N 10450 keeping viewers from defecting V 10450 fill airwaves with sensationalism V 10451 get programs about rape N 10454 acquired sense of place N 10454 does job of tracing N 10454 tracing repercussions of crime N 10455 establish sense of place N 10455 establish sense in movie V 10461 're kind of Jewboy N 10462 is dweller on one N 10468 saying grace at table V 10468 indulging taste in fleshpots V 10472 resemble nightmare as dystopia V 10474 's member of patriarchy N 10476 's director of chapter N 10481 is judge of charm N 10484 share excitement of rapist N 10488 pour feelings about rape N 10491 recommended suspension of payments N 10494 assist it in developing V 10496 reported loss of million N 10497 was write-down of million N 10498 write value of acquisitions N 10503 lowered rating on stock N 10511 had luck with shows V 10512 gives boardroom for classroom V 10513 gathered names of makers N 10515 Using mail for show V 10517 employing kind of plea N 10518 reach chunk of homes N 10518 reach chunk by mailing V 10526 gives A for moxie N 10527 is one of them N 10531 's matter of being N 10536 have access to companies V 10544 buy item for % V 10547 featuring sketches of suit N 10547 marketing image in campaign V 10548 shows neckties with designs N 10552 be shot without suit V 10553 change perceptions about range N 10559 totaled million on sales V 10564 lost customers to stores V 10565 has lock on customer N 10566 making break from tradition N 10568 make strides in business N 10570 are cycles in merchandise N 10572 sees potential in Brothers V 10573 open stores in years V 10577 make all of merchandise N 10577 shut one of plants N 10577 closed departments in stores V 10579 unveil refurbishing at store N 10585 sell type of suit N 10592 cancel portion of plan N 10592 cancel portion for reasons V 10603 is time for change N 10605 smoothed way for link N 10608 spent lot of time N 10608 spent lot at headquarters V 10610 making economies across board V 10611 blames difficulties in reruns N 10611 blames difficulties for problems V 10616 rose pence to pence V 10618 extend bid to 6 V 10621 pending decision by regulators N 10623 gave an until mid-November N 10624 submits details of investments N 10624 submits details to regulators V 10629 postpone ruling on lawsuit N 10630 be judgment on merits N 10637 approved terms for series N 10638 issue total of million N 10642 put incentive on trucks V 10643 offers financing in lieu V 10644 convert case into liquidation V 10645 end feud between creditors N 10646 have value of million N 10646 has priority in case N 10648 following voting by creditors N 10649 have 7 after all V 10652 hearing testimony in dispute N 10653 seeking repayment of loan N 10653 give priority over that N 10653 won judgment against Hunt N 10653 won judgment in case V 10654 driven value of claim N 10658 fine attorneys for creditors V 10661 met fate after opposition V 10662 accept version of them N 10663 reached agreement with Hunt N 10665 named director of company N 10665 increasing membership to 14 V 10666 signed letter of intent N 10666 acquire unit of Bank N 10669 has employees in offices N 10671 completed purchase of businesses N 10673 had gain on transaction N 10673 including part of gain N 10674 escape taxes on portion N 10675 including credit of million N 10676 is result of having N 10676 provided taxes at rates V 10677 redeem million of % N 10678 pay 1,059.04 for amount V 10683 extended offer of 18 N 10685 review supplement to offer N 10686 launched offer on 26 V 10686 change conditions of offer N 10687 based projections of performance N 10687 based projections on forecast V 10689 fell cents on Friday V 10692 began negotiations about terms N 10693 provides information about markets N 10693 provides information through network V 10694 owns % of Telerate N 10695 won contract for casings V 10696 received contract for parts V 10697 completed acquisition of Inc. N 10698 paid million of shares N 10698 paid million for Falcon V 10701 totaled 10,674,500 at 1 V 10706 retain positions as treasurer N 10708 used trademarks without authorization V 10709 depicts group of members N 10714 approved portrayal of Angels N 10716 depicts them as showing V 10719 are chapters in countries N 10720 named chairman of company N 10723 elected chairman of subsidiaries N 10727 reported rash of landings N 10727 bringing aliens to Voronezh V 10728 is opinion of Good N 10729 had relationships with aliens N 10731 devotes space to events V 10731 spotted lights in sky N 10732 sounded alarm at 2:25 V 10732 summoning wardens to duty V 10734 targeting assortment of aircraft N 10737 provides explanation in form N 10737 wrote commander in chief N 10738 make decision about sightings N 10739 been ton of them N 10740 be investigation of phenomenon N 10741 owe it to people V 10741 produce enlightenment on subject N 10742 make piece about sightings N 10742 make piece about sightings N 10747 haul bunch of rocks N 10747 haul bunch around universe V 10749 radioing position to control V 10750 found aircraft in clearing V 10753 overwhelm town in Finney V 10756 takes look at crash N 10757 knows lot about aliens N 10758 had sex with one N 10759 tells it in prose V 10759 call parts of balloon N 10761 made + of marshmallow N 10762 is writer for News N 10764 buy Trustcorp for shares V 10767 left survival in doubt N 10768 nursed itself to health V 10771 spent guilders on acquisitions V 10772 sold guilders of assets N 10776 pursue acquisitions in area V 10777 considering alliances with companies N 10779 show profit of guilders N 10782 be one of companies N 10783 show earnings of guilders N 10783 show earnings in 1990 V 10790 reduce danger of cycles N 10791 was acquisition of business N 10792 is producer of salt N 10795 eliminate jobs in Netherlands N 10796 has hopes for businesses N 10797 is second to Kevlar N 10801 completed acquisition of Inc. N 10802 see growth from coatings N 10804 is seller of pills N 10804 enter market in U.S. V 10805 sell pill in U.S. V 10805 have approval in 1992 V 10806 has operations in tests V 10809 see departure from government N 10810 is politician with courage N 10810 slashing rate of taxation N 10810 slashing rate to % V 10815 recognizing seriousness of issues N 10817 stabilize level by stabilizing V 10818 spread advantages of currency N 10818 spread advantages through fixed V 10821 is thing in London N 10822 sparking growth in Britain N 10822 regulate policy by targeting V 10823 defend rates to death V 10824 have effects on accounts V 10825 increased rate of return N 10827 produced burst in demand N 10827 is surge in aggregates N 10828 stop boost in aggregates N 10830 ensure permanence of policy N 10830 ensure permanence by joining V 10831 issued warnings of inflation N 10832 laying seeds of protectionism N 10837 soliciting opinions on it N 10837 offer some of collection N 10837 offer some for benefit V 10841 achieved reduction in wages N 10842 gives bias toward inflation N 10844 regains some of credibility N 10845 argues case for Alan N 10847 chides Chancellor for being V 10852 tie currency to one V 10855 shake ghosts of heads V 10855 is definition of operation N 10861 have policy for experience V 10867 reducing supply of goods N 10868 return surpluses to economy V 10868 balances demand for money N 10870 prompted takeover by Group N 10871 increase margins to % V 10872 made comments during interview V 10872 detailing plans for agency N 10873 take post at Express N 10878 spend time with clients N 10878 freed himself by delegating V 10879 planning visits to number N 10883 name executive on account N 10883 name executive as director V 10884 is integration of work N 10885 have system in place V 10888 had record for year V 10889 get revenue of office N 10891 is disruption at the N 10891 is member of Mafia N 10893 leaving time for interests N 10899 assumes control of businesses N 10899 assumes control in way V 10899 sublet floors in building N 10899 sublet floors to outsiders V 10900 be part under rules N 10902 win account in 1981 V 10903 minimize reaction from others N 10904 defending himself against charges V 10904 have impact on Y&R V 10909 named Heller as partner V 10916 said holders of amount N 10916 convert debt into shares V 10918 represent % of amount N 10919 sells variety of products N 10922 was million against loss N 10925 reflect performances for year N 10926 acquired businesses in 1988 V 10927 including acquisitions for years N 10928 reported loss for 1989 N 10929 increased % in 1989 V 10934 led buy-out of Macy N 10934 led buy-out in 1986 V 10935 estimates debt at billion V 10943 including breakage of windows N 10944 see effect as material V 10945 sell businesses to unit V 10947 had sales of million N 10947 was % of revenue N 10949 is part of program N 10949 pay billion of loan N 10949 pay billion by February V 10950 use billion from sale N 10954 bought RJR in February V 10954 sell billion of assets N 10955 are leaders in markets N 10960 makes kinds of sense N 10961 given mandate from Switzerland N 10963 make contribution to commitment N 10964 fell % to million V 10965 reduced income by million V 10965 including million from Hugo N 10968 processing claims from earthquake N 10969 has estimate of impact N 10971 had loss on line N 10972 fell % to million V 10973 posted gain to million N 10974 included gains of million N 10975 rose % to million V 10980 bore messages of peace N 10981 served years in prison V 10983 are times in politics N 10984 entice each to table V 10985 abandon use of violence N 10991 extend hand to government V 10992 earn place among peacemakers N 10992 chooses path of settlement N 10994 ease repression in areas N 10994 keeps grip in others N 10995 releases Sisulu without conditions V 10996 keep pressure on government N 10997 increase sanctions against Pretoria N 10997 urged supporters inside country N 10998 make changes at pace V 11004 was flag of the N 11006 captured stage of life N 11007 create climate for negotiations N 11007 lift restrictions on organizations N 11007 remove troops from townships V 11007 end state of emergency N 11012 Echoing phrase from Klerk N 11013 shuttered plant in Lester N 11013 pulled plug on business V 11014 enjoying resurgence in demand N 11014 join legion of producers N 11016 seen increase in orders N 11018 boost line in coming V 11020 expects need for megawatts N 11021 received orders for turbines N 11023 took positions in plants N 11024 put all of million N 11025 provide power to Co. V 11027 fend competition in U.S. N 11027 fend competition from competitors V 11028 purchase turbines from partner V 11028 sell them with generators V 11029 giving edge in developing N 11030 utilize plants at times V 11030 take advantage of fluctuations N 11031 gain lot of sourcing N 11033 challenged venture with Boveri N 11035 expects half of orders N 11036 meet demand with facilities N 11039 received order for plant N 11039 received order in decade V 11040 expects order by 1995 V 11043 measures two on Richter V 11045 put seven of 17 N 11045 put seven in perspective V 11046 buy one of those N 11046 buy one after all V 11047 putting end to Series V 11048 did things with baseballs V 11049 propelled of'em of confines V 11050 gave sweep of series N 11055 brought heat to plate V 11063 win six of games N 11063 win four of 10 N 11064 ranked 1 in polls V 11065 rode run to triumph V 11067 led Leagues in wins V 11067 flattened Jays for pennant V 11069 play outfielders on side V 11071 broke record for set N 11072 hit homers with centerfielder V 11073 tied marks for triples N 11074 was hitter with 33 N 11077 shut Giants on hits V 11077 allowed runs on hits N 11077 allowed runs in innings V 11078 was note on couple N 11080 lifted spirits by visits V 11081 toasted victory with beer V 11086 was year of agency N 11087 won titles in seasons V 11088 includes burgs as Oakland N 11095 market speed as part V 11095 improve quality in operations N 11096 increase satisfaction through speed V 11096 shift responsibility for analyzing N 11096 shift responsibility from themselves V 11102 deliver package by time V 11108 earn dinner with spouses N 11109 reduce time for sort N 11115 identified snags in process N 11117 proposed modifications in process N 11117 proposed modifications to management V 11118 benefits customers in ways V 11119 taken responsibility for quality N 11121 produce proposal for contract N 11123 needed contributions from all N 11124 reached consensus on objectives N 11124 produced statement of work N 11125 developed contribution to proposal N 11125 submitting estimates on schedule N 11126 were part of team N 11130 be source of advantage N 11131 recognize speed as component V 11133 improve quality of work N 11134 is president of ODI N 11136 's conclusion of report N 11138 increase quantity of copying N 11139 casts doubt on contention N 11139 copyrighted material by tapers N 11141 is nail in coffin N 11144 received copy of report N 11145 make copies from copies N 11146 warrant years of wrangling N 11148 consider copying for use N 11150 suggest range of options N 11151 makes definition of status N 11151 makes definition of status N 11151 prevent changes to law N 11151 finding balance of benefits N 11154 rocking community with dealing V 11155 achieved this in part V 11155 getting foot in door V 11157 approve merger at meetings V 11160 be return on investment N 11161 bought stake in Inspectorate N 11161 bought stake for francs V 11161 building company with acquisitions V 11163 offer view of Alps N 11165 is Renoir on wall V 11166 having fortune of francs N 11169 found companies with earnings N 11170 making minds about Rey V 11172 laid foundations of prominence N 11172 laid foundations with raid V 11176 sell shares to maker V 11177 made francs on sale V 11185 brought merger in years V 11186 become part of empire N 11192 enjoyed status of knight N 11193 preferred him to financier V 11194 selling dozens of companies N 11200 bought stake in AG N 11201 makes sense for Inspectorate-Adia N 11202 is example of conservatism N 11209 signed letter of intent N 11210 generate million in sales N 11211 market line of minicomputers N 11214 shut lines at time V 11216 provide bonuses over life V 11221 feeling effects of budget N 11223 become president of group N 11224 reorganize all into divisions V 11227 's step to returns N 11229 reflects confidence in Pinick N 11229 doing business with military V 11231 oversees exports of goods N 11231 take decisions on trimming N 11231 trimming list of items N 11232 ease restrictions on exports V 11233 ease restrictions on types N 11236 was matter for discussion N 11238 treating China as case V 11240 improve procedures for punishing N 11241 speed both of functions N 11242 take write-offs on problems N 11247 inched % in quarter V 11247 had loss of million N 11250 save million in costs N 11250 save million at end V 11251 took write-off of million N 11251 cover losses on contracts N 11251 took look at prospects N 11253 leave Unisys with million V 11253 cut payments in quarters N 11254 reduced inventories during quarter V 11254 leaving it within million V 11255 overcome weakness in U.S. N 11255 relied results over quarters V 11256 reported growth in business N 11257 betting business on assumption V 11260 pay million in interest N 11260 pay million on top V 11261 approaching year with caution V 11262 see growth in cards V 11267 have assets as company V 11268 minimize challenges of term N 11271 had losses of million N 11271 inched % to billion V 11273 cutting estimate for year N 11273 cutting estimate to 2 V 11277 fell cents to 16.25 V 11278 facing camera after forecast V 11279 finds himself in position V 11279 buzzes Midwest on trip V 11281 recanted series of forecasts N 11285 raised percentage of bonds N 11285 raised percentage from % V 11286 including some at Lynch N 11287 softened talk about recession N 11290 oversees billion in accounts N 11290 include everything from funds N 11293 was economist from 1967 V 11293 heralded recession for months V 11296 pulled forecast at time V 11303 Carrying message on road V 11308 says something about people N 11309 'm one of them N 11311 lists array of scenarios N 11312 pin Straszheim to wall V 11313 shoves handout at him V 11316 's all in handout N 11317 have recession at point V 11325 Explaining change of mind N 11325 pin this on factor N 11331 's pressure on economists N 11337 holds stake in Corp. N 11337 seek control of company N 11338 made disclosure in filing V 11339 seeking control of Roy N 11339 seeking control through offer V 11339 evaluate acquisition from time V 11342 leaped 2 to 18.375 V 11343 has comment on filing N 11344 fended overtures from Corp. N 11345 purchase line for million V 11346 acquired % of stock N 11346 acquired % before throwing V 11347 raising stake in July V 11348 made overtures to board V 11349 signed letter of intent N 11352 earned million on sales N 11355 denounced Thatcher for having V 11355 heed men in Cabinet N 11356 precipitated crisis by portraying V 11356 portraying Thatcher as autocrat V 11356 thrown policy into confusion V 11356 driving figure from government V 11360 anchor dollar to gold V 11362 cut rate to % V 11362 flooded country with money V 11362 prevent pound from rising V 11365 pushed rates to % V 11367 realizing mistake in letting N 11367 tying pound to mark V 11367 subordinates currencies to policy V 11368 put Thatcher in bind V 11372 drives value of currency N 11373 caused government in France N 11375 attracting capital whether one N 11378 saddled Thatcher with deficit V 11379 keep Lawson in office V 11380 prevent deficit by inflating V 11383 was victim of confusion N 11384 ignored role of rates N 11384 emphasizing flows in response N 11385 led them in circle V 11387 attract flows in order V 11389 reconsider prospects for integration N 11389 reconsider prospects in light V 11390 become vassals of state N 11393 recognize futility of trying N 11393 offset effects of reduction N 11394 was secretary under Reagan V 11397 fueled growth in quarter V 11397 raising questions about strength N 11398 grew % in September V 11401 rose % in September V 11403 propelled expansion in quarter V 11407 's lot in wings N 11407 keep growth above % V 11417 sell stake in mine N 11417 sell stake to Pty. V 11420 bought interests for million V 11424 sees alliances with others N 11424 sees alliances as way V 11426 is reference to effort N 11429 buying some of company N 11429 buying some next year V 11431 buy million in notes N 11433 achieving flow from operations N 11434 has intention of tapping N 11437 achieve levels of earnings N 11438 reported earnings of million N 11439 reflecting closing of unit N 11440 including portion of unit N 11440 be question of strategy N 11442 operates lotteries in states N 11443 seeking applications for technology N 11443 is interest in games N 11445 consider some of technology N 11446 achieved profitability after quarters V 11448 announced agreement with Inc. N 11448 develop machines with simplified N 11449 slash costs in half N 11449 slash costs by end V 11452 sees opportunities in integration N 11453 getting % of dollars N 11454 spend lot of money N 11454 spend lot on that V 11457 Reviewing scrape with disaster N 11459 considering possibility of takeover N 11462 start commute to work N 11462 start commute with tearing V 11464 hear criticisms of activists N 11464 rid beaches of waste N 11466 provide awareness to lawmakers V 11469 say it for you V 11470 demonstrated sensitivity to decades N 11479 justifies characterization of Greens N 11483 have burden of proving N 11483 urge prohibition for enactment N 11483 urge prohibition into law V 11485 posted profit of billion N 11486 posted such since 1970s V 11488 attributed results to climate V 11490 increased % in 1988 V 11493 quoted chairman as saying V 11493 fear slip of tongue N 11494 foil conspiracies of services N 11494 use groups in country N 11495 restricted exports to countries N 11498 back demands for pay N 11498 back demands with strikes V 11500 cut week to hours V 11501 came news of alarm N 11501 tap fields off coast N 11503 lower Venice by inches V 11504 preserve city of canals N 11505 sunk inches in century V 11506 establish operation with partners V 11507 begin operations in 1990 V 11508 send section of catalog N 11508 send section to customers V 11508 have access to currency V 11509 imposed duties on imports V 11511 suffered pressure on prices N 11512 signed agreement with Soyuz N 11512 swap recorders for iron V 11514 ban violence from television V 11517 doubled dividend to cents V 11518 spun subsidiary into Kaufman V 11518 changed name to Inc V 11522 buy Inc. in transaction V 11523 buy Co. for million V 11524 produce movies for Warner V 11531 take them with you V 11533 file batch of documents N 11534 block duo from going V 11535 provide peek into workings N 11546 disputes version of call N 11551 backs Peters in declaration V 11554 screen picture without telling V 11558 give input on film N 11560 advised Semel of offer V 11560 realized ambition of running N 11560 having position in company V 11561 buy part of MGM N 11562 crossed MGM with pen V 11562 giving document to Semel V 11562 have objection to positions V 11564 have impact on Warner V 11565 let producers of contract V 11568 sue Sony for tons V 11571 controlling segments of business N 11572 took encouragement from executives V 11573 strengthen relationships with producers N 11573 encouraged Guber in ambitions V 11576 have projects in development N 11576 have projects for Warner V 11579 started frenzy for projects N 11583 serve market of homes N 11585 ended 1989 with deficit V 11586 finding lining in report V 11591 exceeded target by billion V 11592 sets target of billion N 11593 slowed progress of legislation N 11593 slowed progress to halt V 11593 triggering cuts under law N 11594 blame each for turning V 11594 turning taxes into such V 11595 showed sign of retreating N 11596 accept bill like one N 11596 increase spending in years N 11597 Underscoring size of deficits N 11597 exceeded spending on Security N 11599 rose % to billion V 11601 marked forecast by million V 11602 ran deficit of billion N 11608 converting plant to facility V 11611 suffered loss of million N 11612 receive million in interest N 11612 receive million from court V 11615 Accrued interest on refund N 11617 acquire % of Co. N 11618 pay yen for shares V 11619 rebut criticism of investments N 11619 hailed transaction as proof N 11619 make investments in Japan V 11620 echoed view of accord N 11623 post loss of yen N 11623 exceed assets by yen V 11624 find companies in Japan N 11626 acquired hundreds of companies N 11627 touch wave of purchases N 11630 was one of makers N 11635 moved production in response V 11635 build plants in Asia V 11637 be investment for concern N 11638 recommending acquisitions of companies N 11638 recommending acquisitions in future V 11642 is fit for operations N 11642 make televisions on basis V 11643 move production of products N 11643 move production of products N 11645 jettisoning structure of Sansui N 11645 bringing executive as president V 11646 is matter for the N 11647 used it as base V 11647 doubling profits since 1980 V 11648 acquire business of unit N 11648 acquire business for million V 11649 posted jump in profit N 11652 pushed LIN into corner V 11652 forcing debt on company V 11653 mortgage power in order V 11653 placate holders in term V 11654 combine properties with BellSouth V 11655 representing payout of billion N 11655 receive dividend before merger V 11657 received dividend of 20 N 11658 buy interest of partner N 11661 cover payments on debt N 11662 estimate value of proposal N 11662 estimate value at 115 V 11663 value bid at 112 V 11665 owns % of stock N 11672 have interest in company N 11673 ease concerns of investors N 11673 give protection to holders V 11673 buy rest of company N 11676 begin process in 1994 N 11676 begin process for remaining V 11681 is deal to McCaw N 11686 preventing BellSouth from buying V 11686 buying shares in meanwhile V 11688 dilute earnings by both V 11690 earned billion on revenue V 11691 predicting earnings in range V 11692 fell cents to 52.125 V 11693 fell 2.50 to 37.75 V 11694 including million in markets N 11695 filing suit against BellSouth N 11695 filing suit with Department V 11695 oversees enforcement of decree N 11695 broke system in 1984 V 11697 conduct auction on field V 11698 adding voices to chorus V 11700 making it for traders V 11701 offsetting trades in futures N 11701 affects market through stocks V 11705 lose ground against segments V 11706 trade stocks without moves V 11708 are neither to market N 11709 turned some of those N 11709 turned some against it V 11712 executes trades for clients V 11715 does trading for accounts V 11716 were programs in years V 11718 slashed inventories of they N 11719 protect investment from eroding V 11720 buy shares from sellers V 11722 makes sense for us N 11722 put money at risk N 11723 creating problems in stocks N 11726 oversees trading on Nasdaq N 11728 lose sight of that N 11736 re-entering market after selloffs V 11738 tumbled 5.39 to 452.76 V 11740 fell % on Friday V 11741 lost % to 448.80 N 11744 surged 5 to 112 V 11744 sweetened agreement in attempt V 11744 keep shareholders from tendering V 11744 tendering shares to Communications V 11745 dropped 1 to 37 V 11745 offered 125 for majority V 11746 boosts amount of dividend N 11748 eased 1 to 31 V 11749 have impact on earnings N 11750 fell 7 amid concerns V 11751 resume shipments of chips N 11751 resume shipments within two V 11752 rocketed 1 to 39 V 11752 regarding acquisition of company N 11753 rose 3 to 20 V 11753 approved Bank of acquisition N 11754 fell 4 to 15 V 11756 earned 376,000 on revenue N 11756 earned 376,000 in quarter V 11757 including sales of joint-implants N 11761 recovered some of losses N 11762 spark weakness in London N 11763 settled points at 1678.5 V 11766 showed fears over status N 11768 attributed volume to selling V 11768 regain control of government N 11768 renew efforts at nationalization V 11771 skidded 1.74 to 123.5 V 11772 fell 5 to 286 V 11773 was pressured by recommendations N 11774 eased 1 to 416 V 11775 dropped 11 to 10.86 V 11775 skidded 9.5 to 200.5 V 11775 fell 10 to 250 V 11778 fell points to 35378.44 V 11782 placed orders in morning V 11782 start day for transactions N 11783 sell stocks to investors V 11784 was result of fever N 11786 dropped points to 1462.93 V 11794 leaving investors with feet V 11794 take stance on sidelines N 11802 make % of capitalization N 11804 STAGED rally in Africa N 11805 filled stadium on outskirts N 11805 welcomed leaders of Congress N 11807 served years in prison V 11810 BACKED criticism of Ortega N 11811 raised possibility of renewing N 11811 renewing aid to Contras N 11812 marking moves to democracy N 11813 cited attacks by rebels N 11814 get aid under agreement V 11815 claimed victory in elections N 11815 retained majority by seat V 11816 won seats in Cortes V 11819 stop activists from staging V 11820 crush protest in Square N 11824 cuts spending for installations N 11824 cuts spending by % V 11826 reducing arsenals amid differences V 11827 unveiled proposals in September V 11828 bombarded Kabul in assault V 11828 completed withdrawal in February V 11829 tightened blockade on roads N 11829 shelled area in Afghanistan N 11830 convened meeting of cabinet N 11830 convened meeting after indications V 11830 dissolve Parliament in attempt V 11831 provide timetable for pullout N 11833 was evidence of survivors N 11835 defeating Giants in sweep V 11838 rose % in September V 11840 climbed % in September V 11843 took podium at event V 11848 holds position at counters N 11849 buy Corp. for billion V 11850 making marketer of cosmetics N 11851 bring experience with products N 11851 sparking disdain in trade N 11854 blend strategies with approach N 11858 test them with consumers V 11861 are habitats of men N 11863 rolls product before test-marketing V 11865 meld techniques with image-making V 11868 brought baggage of being N 11869 reposition brand by broadening V 11870 redesigned Oil of packaging N 11870 stamping boxes with lines V 11871 shifted campaign from one V 11873 have advantages over rivals N 11880 increase impact of advertising N 11882 pour budgets into gifts N 11883 spends % of sales N 11889 filling gap with spate V 11891 gaining leadership by introducing V 11891 offer edge over competition N 11892 soared year for example V 11894 be emphasis on quality N 11899 acquired Rubenstein in 1973 V 11906 be truce in war N 11908 infuse action with level V 11909 put decisions in writing V 11911 barring agents from assassinating V 11914 inform it within hours V 11915 removed ban on use N 11918 followed attempt in Panama N 11919 made support for coups N 11922 accused House of leaking N 11922 shift blame to Congress V 11923 press advantage to kind V 11923 want oversight of activities N 11926 been meeting of minds N 11929 reserving right in instances N 11929 keep Congress in dark V 11933 attacking Webster for being V 11934 accuse Cohen of wimping V 11934 raise specter of operations N 11935 is consultation on activities N 11937 turned Board into casino V 11941 is mission of community N 11943 do something about volatility V 11944 galvanized dissatisfaction among companies N 11947 calm investors after plunge V 11951 increases chance for crash N 11955 sell stocks in index N 11961 ban use of system N 11962 put bit of damper N 11962 publish statistics of volume N 11965 is parent of Barney N 11967 maximize returns on investments N 11968 informed each of managers N 11968 give business to firms V 11969 turning heat in debate N 11971 is trader on Street N 11971 announced pull-backs from arbitrage N 11973 have impact on market N 11978 faces job of rebuilding N 11978 rebuilding confidence in policies N 11979 haul country through something V 11984 seeking term in economy N 11987 playing experts off each V 11987 announced resignation within hour V 11989 sent currency against mark V 11992 shove economy into recession V 11993 anticipating slump for months V 11995 run course by 1991 V 11997 leave room for maneuver N 11998 sense improvement for year V 11999 call election until 1992 V 12000 shows sign of turning N 12001 's deadline for government N 12001 define ties to rest N 12002 sent signals about willingness N 12002 take part in mechanism N 12003 ease opposition to membership V 12006 produced reaction from boss N 12006 use conditions as pretext V 12009 continue policy of tracking N 12009 tracking policies of Bundesbank N 12010 taking orders from foreigners V 12014 want debate in cabinet V 12016 told interviewer on Television V 12020 were state of art N 12023 analyzed sample of women N 12027 lighten load on basis V 12033 spend themselves into poverty V 12036 are payers throughout stay N 12042 reaching maturity during presidency V 12052 be smokers than persons V 12055 was month for practitioners N 12055 allowing candor from media N 12057 are fountains of gold N 12059 taking butt to Committee N 12059 made gestures on palm N 12060 feel need from time V 12061 was import of meeting N 12067 told official at dinner V 12070 demonstrating independence by printing V 12072 took it in 1986 V 12073 retained % of readership N 12074 made celebrities of men N 12080 prevented coverage of famines N 12081 stain honor of wives N 12086 begin series of reports N 12088 enter dialogue of culture N 12090 is publisher of Anniston N 12091 gave approval to settlement V 12092 covering thousands of customers N 12093 accused Irving of paying N 12095 receive services for years V 12096 valued settlement at million V 12099 give light to economy V 12099 bring growth to halt V 12103 dissecting them in dozens V 12104 digesting reams of information N 12106 make announcement of plans N 12106 provide credit to markets V 12108 prompted near-mutiny within ranks N 12112 earned plaudits for Greenspan V 12119 growing weakness in economy N 12124 showing signs of weakness N 12125 played role in fueling N 12125 played role over years V 12127 faces phalanx of presidents N 12128 aimed two down road V 12133 begin year of growth N 12133 begin year without recession V 12135 is guarantee against mistakes N 12136 laying groundwork for recession N 12142 proposed offering of shares N 12143 proposed offering of million N 12149 is one of bastions N 12151 become subject of controversy N 12151 become subject on the V 12154 had experience in field N 12158 filled vacancies in court N 12158 filled vacancies with lawyers V 12161 making push for specialists N 12162 name candidates with both N 12164 is counsel with Corp. N 12166 received response from Department V 12168 take it into consideration V 12170 's responsibility of lawyers N 12172 infringe patent under circumstances V 12173 have consequences for manufacturers N 12177 are guide to levels N 12206 Annualized rate after expenses N 12214 build mall on land V 12217 ranks a among underwriters V 12218 's fall from 1980s N 12220 bring business from one V 12223 is player in business N 12225 has love for forces V 12225 done rethink of Kidder N 12225 done rethink in months V 12226 been parade of studies N 12229 tap resources of GE N 12230 bought % of Kidder N 12230 bought % in 1986 V 12230 take advantage of syngeries N 12230 has 42 in assets N 12233 exploit synergy between Capital N 12235 had relationship with GE N 12237 has team in place N 12238 serving dinner at 7:30 V 12239 been case in past V 12241 rebuild franchise at Kidder V 12242 is one of six N 12244 sold offices in Florida N 12244 sold offices to Lynch V 12249 putting brokers through course V 12249 turning them into counselors V 12251 funnel leads on opportunities N 12251 funnel leads to bankers V 12251 easing tension between camps N 12255 has worries about future N 12256 bringing discipline to Kidder V 12257 improved procedures for trading N 12258 had lot of fun N 12258 had lot at Kidder V 12263 save 330 on taxes V 12265 prove addition to portfolio N 12265 build centerpiece of complex N 12266 initialed agreement with contractor N 12267 signed Wednesday in Tokyo V 12269 located miles of Manila N 12270 hold stake in Petrochemical N 12273 represented step in project N 12274 represent investment in Philippines N 12274 took office in 1986 V 12276 backed plant at site V 12278 removing tax on naphtha N 12279 soothe feelings of residents N 12281 have stake in Petrochemical N 12292 pay honorarium to speakers V 12293 paid fee to Wright V 12297 consider one of ideas N 12298 kill items without vetoing V 12300 send waves through relationship V 12300 enhance power of presidency N 12301 giving it to president V 12305 is member of Committee N 12306 's challenge to Congress N 12308 has confrontations with Congress N 12311 told audience in Chicago N 12313 go way in restoring V 12313 restoring discipline to process V 12318 strike riders within bills N 12319 challenge Bush in courts V 12319 expand powers beyond anything V 12320 puts president in business V 12323 preserve funds for system V 12325 putting projects into legislation V 12329 put power in hands N 12330 use powers against conservatives V 12338 losing share in the V 12340 gained share at expense V 12342 represent one-third of sales N 12345 are group of people N 12345 are group at Creek V 12346 calls capital of world N 12347 closed Friday at 71.75 V 12352 met expectations for 1989 N 12355 add capacity next year V 12361 put products into marketplace V 12361 resuming involvement with plan N 12367 forecast increase for year V 12368 earned million on sales V 12370 fell % to million V 12371 rose % to billion V 12372 had charge of million N 12372 had charge in quarter V 12372 covering disposition of assets N 12378 representing premium over price N 12383 yield % via Ltd V 12386 added spice to address V 12386 cut links with Exchange N 12389 indicate souring in relations N 12391 resume production in 1990 V 12394 was lire in August V 12397 rose % to lire V 12397 rose % to lire V 12398 rose % to lire V 12398 grew % to lire V 12399 shed image of bank N 12400 be step toward privatization N 12401 hold stake in Exterior V 12406 be partner for a N 12406 increase share after 1992 V 12409 transform Exterior into bank V 12410 be model of way N 12411 provide credits for exports N 12412 forcing bank to competition V 12413 faced decline in growth N 12418 build areas of business N 12422 trim jobs over three V 12424 issued million in debt N 12424 sold stock to investors V 12425 marketing services at branches V 12427 has excess of banks N 12427 aid Exterior with tasks V 12428 include acquisitions in growing V 12431 was one of banks N 12431 underwent changes in July V 12432 be handicap for bank N 12432 open market to competition V 12433 whip division into shape V 12434 channel investment from London V 12435 cut number of firms N 12435 cut number from 700 V 12436 named counsel in 1987 V 12437 trimmed firms from list V 12439 set group in May V 12441 doing business with GM V 12441 suing GM for damages V 12445 providing service at cost V 12445 echoing directives from operations N 12448 concluding cases with trials V 12449 's finding of study N 12450 means number of bargains N 12452 including those in Manhattan N 12452 covered offices from 1980 V 12455 based conclusions on statistics V 12456 taking cases to trial V 12457 filed charges against defendants V 12460 stressed cases from 1980 V 12460 averaging 43 for adults V 12462 filed average of cases N 12462 filed average for adults V 12465 asked court in Manhattan V 12465 dismiss indictment against her N 12465 was abducted from homeland V 12467 give access to documents N 12468 making the in order V 12468 obtain material in case N 12470 lacks jurisdiction in case V 12472 charges Koskotas with fraud V 12473 made trips to U.S. V 12474 violated right to trial N 12475 hurt chances of trial N 12476 return him to Greece N 12478 require lawyers in state N 12478 provide hours of aid N 12478 increase participation in programs N 12479 prove effectiveness before considering V 12480 achieve objective without divisiveness V 12484 has office in Worth V 12484 has office in Orleans V 12485 covered billings to Pentagon N 12485 filed suit against company V 12487 seeks damages from directors N 12487 seeks damages on grounds V 12487 carry duties as directors N 12488 defending itself against charges V 12493 bringing sanctions against Greenfield V 12494 stockpile cars on lots V 12495 cut inventories to no V 12496 was time for action N 12497 had average of supply N 12497 had average in lots V 12498 reduce costs of financing N 12499 getting reception in Detroit V 12504 mark end of part N 12505 cover accounting for parts N 12506 prohibits utilities from making V 12520 asked questions about Jake N 12527 keep dialogue with environmentalists V 12528 been one of critics N 12528 accused company of ignoring N 12529 soiled hundreds of miles N 12529 wreaked havoc with wildlife V 12530 was one of members N 12530 foster discussions between industry N 12531 demonstrate sense of fairness N 12532 seeking payment of costs N 12533 take a in quarter V 12534 reached agreement in principle V 12536 help customers with decisions V 12536 provide them with information V 12538 place employees within company N 12541 worsen year after years V 12545 took Korea to task V 12546 be indications of manipulation N 12546 be indications during months V 12547 liberalized system in year V 12550 hear Member of Congress N 12551 increase ceiling on mortgages N 12551 lost billion in defaults N 12552 approved Thursday by House V 12552 voted bill for construction V 12555 is chairman of Committee N 12556 became million for Grassley V 12557 turned a for state N 12557 turned a into a V 12558 is chairman of subcommittee N 12559 seen peak of construction N 12559 seen peak for years V 12560 Tell us about restraint V 12561 Tell us about scandals V 12563 get Congress under control V 12564 reached agreement with banks V 12567 fallen million in payments V 12568 called step in strategy N 12568 provide reduction in level V 12569 buy % of debt N 12569 buy % at price V 12572 benefit countries as debtors V 12573 sell billion of bills N 12577 announced details of auction N 12577 accommodate expiration of ceiling N 12581 honor requests from holders N 12582 make payment for bills N 12582 make payment to investors V 12582 requested reinvestment of bills N 12583 sell subsidiary to Inc. V 12584 reduce level of investments N 12584 reduce level for thrift V 12585 suspend dividends on shares N 12585 convert all into shares V 12589 had loss of million N 12595 including index on Thursday N 12596 brings count on sales N 12599 curbing accuracy of adjustments N 12600 maintains level below % V 12602 presents inkling of data N 12602 presents inkling for month V 12603 use index as indicator V 12603 use it as indicator V 12609 keeping a on sales V 12610 is month for figures V 12613 taken toll on sales V 12614 slipped % from levels V 12615 buying machinery at rate V 12615 raise questions about demand N 12615 raise questions from industry V 12616 remained % below levels N 12617 received million of orders N 12617 received million from August V 12625 was one of months N 12628 are more than % N 12630 expand markets for tools V 12631 is demand for tools N 12631 improve efficiency as quality N 12632 's dispute between makers N 12635 totaled million from million V 12635 totaled increase from August N 12636 form metal with pressure V 12637 produce total for month N 12640 had a at end V 12641 was % from year N 12641 were % from period V 12650 raising megaquestions about the V 12651 fund issues without depressing V 12655 have way of knowing N 12667 limited size of mills N 12669 ushered rules for business N 12670 build plants on scale V 12673 are fruits of policy N 12674 is source of funds N 12676 called elections for November V 12679 have history of making N 12680 are hit with investors V 12682 had success with issue V 12683 accepting applications for issue N 12685 selling parts of portfolios N 12689 controlled markets through grip V 12690 controlled financing of projects N 12693 set year along lines V 12694 makes bones about need V 12701 raised money from public V 12701 raise funds on market V 12702 floated a in 1988 V 12702 was issue in history N 12707 pin-pointed projects for funds V 12710 is screening of use N 12712 followed boom of 1986 N 12719 acquiring businesses for dollars V 12720 make offer for all N 12722 has contract with Bond V 12723 joined wave of alliances N 12723 signed agreement with System V 12724 coordinate flights with SAS V 12726 swap stakes in each N 12727 pending meetings next month V 12730 going head to head N 12730 going head in markets V 12730 got clearance from Commission V 12730 boost stake in maker N 12731 received permission from regulators V 12731 increase holdings past the V 12732 raised stake to % V 12734 bucked tide in market V 12734 rose pence to pence V 12737 buy stakes in Jaguar N 12738 prevent shareholder from going V 12739 forge alliance with GM V 12740 wrapping alliance with GM N 12742 force issue by calling V 12742 remove barriers to contest N 12742 remove barriers before 1990 V 12744 seek meeting with John V 12744 outline proposal for bid N 12746 retain independence by involving V 12746 involving stake for giant V 12747 win shareholders by structuring V 12747 structuring it in way V 12750 influence reaction to accord N 12751 holds talks with officials V 12753 are words before killed V 12758 got feet on floor V 12834 setting sights on expansion V 12836 acquired % of Holdings N 12836 acquired % for dollars V 12838 holds % of yen N 12838 considering acquisition of network N 12844 approached number of times N 12846 laying groundwork for growth V 12847 setting team in charge N 12848 rose % to billion V 12848 jumped % to million V 12854 do business with clients V 12855 expand business to clients V 12857 acquire share of Corp. N 12858 been venture between Ciba-Geigy V 12858 has sales of million N 12862 develop unit into business V 12862 making part of concept N 12863 canceled series of season N 12864 is casualty of networks N 12866 aired Wednesdays at p.m. N 12866 drawn average of % N 12868 plans placement of dollars N 12869 reduce debt at concern V 12870 carry dividend until 1994 V 12874 is part of strategy N 12874 strengthen sheet in anticipation V 12877 reassert itself in business V 12879 comes weeks after believing V 12879 had lead of three N 12879 introduced computer with features N 12881 sells machines to businesses V 12882 mark plunge into has N 12883 been terminals with ability N 12885 marketing PCs with megabyte N 12888 Weighing pounds with battery V 12888 measures 8.2 by inches N 12894 open offices in Taipei V 12895 is the since announced V 12895 do business in country V 12897 buy stocks through purchase V 12900 's market with opportunities N 12901 entering season with momentum V 12902 rose % above levels N 12904 jumped % in period V 12905 declined % in period V 12907 are lot of markets N 12908 rose % through July V 12909 damp growth in West V 12916 have impact on sales V 12918 lost jobs in the V 12918 was link in England V 12919 reflect reversal in fortunes V 12923 relocate facility to County V 12924 move storage to a V 12924 distance operations from areas V 12927 shut facility for inspection V 12930 moving the from town V 12931 purchased acres from government V 12932 begin operations in 1991 V 12934 replaced directors at meeting V 12937 respond Friday to requests V 12937 discuss changes at company N 12937 have team on board V 12938 had income of yen N 12938 had income in half V 12940 had net of yen N 12940 had net in period V 12948 totaled billion from billion V 12951 announced % from 1,716 V 12952 totaled billion from billion V 12953 exceed the in 1988 V 12955 distributed 4 to stock V 12956 changed policy by declaring V 12957 pay dividend on stock V 12958 have profit for payment N 12961 convert all of shares N 12961 convert all into NBI V 12963 hired Inc. as banker V 12964 jolt rates in months V 12965 estimated losses from earthquake N 12965 estimated losses at million V 12966 include claims under compensation N 12971 halt growth of year N 12974 retain percentage of risks N 12974 pass rest of losses N 12975 buy protection for themselves V 12975 giving portion of premiums N 12975 giving portion to firm V 12975 accepts portion of losses N 12976 buy reinsurance from companies N 12976 buy reinsurance for catastrophe V 12977 replace coverage in were V 12977 were any before end V 12979 purchased reinsurance in years V 12979 buy reinsurance for 1990 V 12981 negotiating contracts in weeks V 12982 said Snedeker of market N 12986 get picture of impact N 12987 expects charge of no N 12987 expects charge before taxes V 12988 rose % to yen V 12989 rose % to yen V 12990 increased % to yen V 12991 rose % to yen V 12994 rise % to yen V 12995 announced effectiveness of statement N 12998 approved consolidation of stock N 12998 approved consolidation at meeting V 12999 approved adoption of plan N 13000 approved relocation to Ltd N 13001 has operations in Hills V 13003 have right for share V 13003 entitling purchase of share N 13004 acquires % of shares N 13004 acquires % without making V 13004 making offer to shareholders V 13005 require approval of holders N 13006 indicted operator of schools N 13006 indicted operator for fraud V 13009 defend itself against charges V 13012 fell cents to cents V 13013 filed suit in Court V 13013 block investors from buying V 13014 are directors of company N 13015 owns % of Rally N 13016 seek control of Rally N 13018 joined forces with founder V 13018 have ties to Wendy V 13019 controls % of shares N 13020 formed committee of directors N 13021 restructure million of debentures N 13023 provides services for manufacturers V 13024 begun discussions with holders N 13024 exchange debt for securities V 13025 review agreement with holders N 13027 offered position in Leaseway V 13027 represent interest in company V 13028 is adviser on transaction V 13029 fulfilled requirements of obligations N 13030 revive constituency for rebels V 13031 raised possibility of renewing N 13031 renewing aid to Contras V 13031 parried question at conference V 13032 end cease-fire with rebels N 13032 elevated Contras as priority V 13034 highlight progress toward democracy N 13036 end cease-fire in response V 13037 ends support for Contras V 13040 monitor treatment of candidates N 13041 receive rest of the N 13041 receive rest under agreement V 13044 have support for action V 13046 provides supporters with opportunity V 13046 press administration on issue V 13049 give support to Contras V 13049 honor agreement through elections V 13051 accompanied Bush to Rica V 13053 cut aid to units V 13054 undermining arguments in favor N 13055 interpreted wavering as sign V 13057 creating atmosphere of emergency N 13058 sell stake in Corp. N 13058 sell stake to Stores V 13061 purchasing stake as investment V 13062 acquire equity of Stores N 13063 saw significance in selling V 13063 selling stock to Stores V 13065 accumulating stock for years V 13066 taking place between companies V 13067 increased % to yen V 13072 gained % to yen V 13073 made % of total N 13074 rising % to yen V 13075 rise % to yen V 13076 increase % to yen V 13076 rise % to yen V 13077 acquire unit for million V 13078 acquire operations of Corp. N 13080 is part of plan N 13080 focus operations on Canada V 13082 report gain from sale V 13084 rose % to yen V 13085 rose % to yen V 13086 totaled yen from yen V 13087 rose % to yen V 13088 advanced % to yen V 13090 forecast sales for year N 13091 rise % to yen V 13092 buy all of shares N 13092 buy all for each V 13093 owns % of shares N 13095 make offer for stock V 13097 receiving distribution of 37 N 13099 launched offer for shares V 13103 received assurance of N.A. N 13105 begun discussions with sources V 13106 nullify agreement between Acquisition N 13107 made offer for Dataproducts N 13111 has value of million N 13112 is York for Inc. V 13113 holds % of Kofcoh N 13114 prints ads for retailers V 13115 had average of shares N 13117 rose % to yen V 13123 expects net of yen N 13125 raising level by traders N 13127 approved Co. in Erath N 13127 approved Co. as site V 13131 replace McFadden as president V 13132 have mandate from board V 13132 improve reputation as exchange N 13134 told person during search V 13136 held posts of president N 13137 imported a as president V 13138 was officer of Exchange N 13138 considered specialist in products N 13141 expect difficulty in attracting V 13141 attracting locals to pit V 13142 teaching companies in industry N 13144 was one of image N 13145 indicted traders at exchanges V 13146 investigating exchanges in May V 13148 face some of consequences N 13149 been the in enforcing V 13150 levied number of suspensions N 13151 had the per contracts N 13152 received criticism in 1987 V 13154 had breakdown in 1987 V 13155 took care of it N 13156 boosts volume at exchange V 13157 improve efficiency of operations N 13158 been talk of mergers N 13158 been talk between one V 13162 save money for commission V 13162 do business on exchanges V 13164 is development of device N 13165 recommended creation of system N 13169 signed letter of intent N 13169 signed letter with Merc V 13170 creating system with Board V 13170 suspended negotiations with Merc V 13174 is support between 1.12 N 13174 ended Friday at 1.1580 V 13175 views the as opportunity V 13178 set tone for metals V 13178 keep eye on Street V 13179 be demand from East V 13184 confirmed turnaround in markets V 13187 is support for gold V 13189 portend move to 390 V 13190 keep eye on market V 13190 spell trouble for metals V 13192 have rally in past V 13193 was interest in metals V 13197 sell contracts at Board V 13197 hedge purchases from farmers V 13198 keep pressure on prices V 13199 continues buying of grain N 13200 bought tons of corn N 13201 be activity in prices V 13202 take delivery of contract N 13203 averting strike at daily V 13205 made concessions in round V 13208 line cage with stocks V 13209 propelled earnings of companies N 13209 propelled earnings to levels V 13210 doubled prices for pulp N 13210 doubled prices to 830 V 13213 Put money in stock V 13215 expects decline in earnings V 13221 lowered rating from hold V 13230 expects price for product N 13231 carrying lot of debt N 13240 expects earnings in 1989 V 13242 take view of companies N 13242 buy pulp from producers V 13246 report write-off of million N 13246 report write-off for quarter V 13247 cited costs from recapitalization V 13250 save million in expenses N 13250 save company next year V 13251 finance million of company N 13252 made payments of million N 13254 signed contract for order V 13257 is unit of group N 13261 reach yen in year V 13262 made projection for 1990 V 13263 bolster network in Japan V 13265 produced trucks at factories V 13266 build vehicles outside Japan V 13267 producing vehicles for vehicle N 13268 involve increase in capacity V 13269 report charge for quarter V 13270 sell division for million V 13272 including gain of million N 13272 including gain from sale V 13274 concerning sale of stake N 13277 produces extrusions for industries V 13279 absorb oversupply of bonds N 13280 own % of bonds N 13280 dumping securities for weeks V 13281 were sellers for buyer V 13282 getting lists from sellers V 13286 buy bonds in absence V 13288 expect yields on bonds N 13288 match yield on bonds N 13293 making state during period V 13294 know it by way V 13297 need shelter of bonds N 13313 sold million of tax-exempts N 13319 see names in portfolios V 13323 unloading amounts of bonds N 13327 sell billion of bills N 13328 sell billion of bills N 13329 raise money under the V 13330 unloading some of bonds N 13331 sold million of bonds N 13333 publicize buying of bonds N 13333 publicize buying by using V 13333 using Corp. as broker V 13334 provides quotes to Inc. V 13335 created confusion among investors V 13338 rallied Friday on news V 13338 selling brands to Corp. V 13340 are buyers of assets N 13340 are buyers at prices V 13341 sell Ruth to Foods V 13342 includes plant in Park N 13343 finished day at 46 V 13345 closed 1 at 86 V 13346 finished quarter-point on rumors V 13348 fell 3 to point N 13350 were buyers of mortgages N 13350 seeking collateral for REMICs V 13353 cover cost of program N 13356 pays % of bills N 13356 pays % after an V 13359 be 33.90 with the V 13361 trim force in California N 13361 trim force by workers V 13362 make cuts through combination V 13365 getting bargains on systems V 13366 get contracts on basis V 13368 seek control of Inc. V 13370 holds million of shares N 13370 have value of dollars N 13371 reported loss of million N 13372 made income for year N 13372 made income from million V 13373 was million from million V 13376 disclosed terms for bid N 13378 involving units of Innopac N 13378 opened plant in Leominster V 13380 joined PaineWebber in suspending V 13380 suspending trading for accounts V 13381 launching programs through market V 13384 rose % in September V 13384 rose gain in year N 13385 raises questions about strength N 13387 buying machinery at rate V 13388 raise questions about demand N 13390 resolve part of investigation N 13390 resolve part in year V 13392 force debt on firm V 13393 posted a for quarter V 13393 take write-offs for problems V 13395 sell businesses to Nestle V 13396 go head to head V 13396 buy stakes in Jaguar N 13398 sell stake to Peck V 13400 suspended work on a V 13400 indicating outlook by maker V 13401 see claims from earthquake N 13402 strengthened plan after announcing V 13410 report events of century N 13411 sold Congress on idea V 13411 saving headaches of pounds N 13416 made standard of measure N 13418 took cue from engineers V 13419 passed Act in 1975 V 13421 had day with questions V 13423 uses terms for trains V 13431 fought battle with leaders V 13431 signed schools in states V 13433 reach goal of schools N 13433 reach goal before end V 13435 providing sets in classrooms V 13437 signing schools at rate V 13440 drawn protests from educators V 13441 offer programming for administrators V 13445 carried program in spring V 13448 was % on test V 13452 sold 150 in time N 13452 sold 150 on network V 13455 cost company per school V 13471 including million via bid N 13480 raised stake in Corp. N 13480 raised stake to % V 13484 obtain control of Octel N 13485 acquired shares from Octel V 13486 buy shares in market V 13488 is listing of values N 13499 closing Friday at 2596.72 V 13500 eclipsing number of gainers N 13502 shake foundations of market N 13503 revealed change in psychology V 13505 view near-panic as lapses V 13516 been acquisition among stocks V 13519 sell stocks in matter V 13521 sees benefits to drop V 13525 provided excuse for people V 13527 got realism in market V 13528 have kind of activity N 13534 put damper on that V 13535 been changes in area V 13535 changes arithmetic of deals N 13537 's problem for stocks N 13541 questioning profits as means V 13547 fell points to 2596.72 V 13549 were 1,108 to 416 N 13551 escaped brunt of selling N 13551 rose 5 to 66 V 13552 accumulating stake in company V 13553 buying shares as prelude V 13554 gained 1 to 33 N 13554 gained 1 on report V 13554 raised stake in company N 13554 raised stake to % V 13555 boosted stake to % V 13556 rallied 7 to 45 V 13556 rose 1 to 47 V 13556 fell 5 to 99 V 13557 cut force by % V 13557 dropped 5 to 56 V 13558 outgained groups by margin V 13559 rose 5 to 14 V 13559 climbed 3 to 16 V 13559 rose 1 to 16 V 13559 added 5 to 11 V 13559 went 7 to 3 V 13561 rose 5 to 15 V 13561 advanced 1 to 12 V 13561 gained 1 to 7 V 13562 dropped 3 to 16 V 13562 posting loss of 4.25 N 13563 gained 5 to 100 V 13564 dropped 7 to 99 V 13565 fell 3 to 49 V 13566 swelled volume in Lynch V 13568 advanced 1 to 36 V 13569 owns % of stock N 13569 buy rest for 37 V 13570 added 1 to 47 V 13571 jumped 2 to 18 V 13572 holds stake in company V 13573 dropped 1 to 21 V 13574 dropped 7 to 3 V 13575 obtain financing for offer V 13576 identified problem in crash V 13578 sent shards of metal N 13580 begin days of hearings N 13580 begin days in City V 13581 detect cracks through checks V 13584 detect flaw at time V 13588 have impact on production V 13591 analyzed samples of ice N 13591 analyzed samples in Tibet V 13593 melt some of caps N 13593 raising level of oceans N 13593 causing flooding of populated N 13594 have confidence in predictions V 13595 compare temperatures over years V 13595 analyzed changes in concentrations V 13600 prevents heat from escaping V 13601 reflecting increase in dioxide N 13607 improve efficiency of operation N 13608 named successor to Bufton N 13612 cuts spending for installations N 13612 cuts spending by % V 13616 enhances power of appropriations N 13617 secure million for state V 13621 cleared Senate on votes V 13622 approved bulk of spending N 13624 used assortment of devices N 13624 make it past wolves V 13626 increased Aeronautics for construction N 13626 increased Aeronautics to million V 13627 provide million toward ensuring V 13627 ensuring construction of facility N 13627 ensuring construction in Whitten V 13629 face criticism for number V 13630 used issue in effort V 13631 received support from office V 13631 protect funding in bill V 13631 turn eyes from amendments V 13633 won 510,000 for project V 13634 relaxing restrictions on mills V 13635 take money from HUD V 13635 subsidize improvements in ponds V 13638 moved us to schools V 13638 opened world of opportunity N 13638 opened world for me V 13639 lost contact with memories V 13645 lease allotments for sums V 13653 lend itself to solving V 13653 solving problems of racism N 13654 deserve help in attracting V 13655 prohibit schools from teaching V 13655 teaching contraceptives of decreasing N 13658 issue challenge to America V 13659 do it like Japan V 13663 is insult to citizens V 13665 is blocks from residence V 13666 ignore problem of poverty N 13666 's crusade for media V 13672 finds reserves in U.S. V 13673 reduce employment in operations V 13678 took a as part V 13678 attributed it to restructuring V 13680 offering packages in operation V 13681 studying ways of streamlining N 13683 managing properties under jurisdiction N 13684 have accountability for operations N 13691 scouring landscape for such V 13692 find yields at thrifts V 13696 are reminder of dangers N 13699 are some of choices N 13700 reduce risk of having N 13700 reinvest proceeds of maturing N 13700 maturing certificates at rates V 13702 putting all in it V 13707 paying tax at rate V 13708 approach % on municipals V 13712 Consider portfolio with issues N 13713 rolling year at rates V 13715 makes option for investors N 13715 accept risk of fluctuation N 13715 accept risk in order V 13720 Consider funds from Group N 13723 get returns from bonds V 13728 exceed those on CDs N 13730 are idea at 35 V 13734 track rates with lag V 13735 beat CDs over year V 13737 likes Fund with yield N 13739 combining fund as bet V 13740 offset return from fund V 13745 been reports of deaths N 13745 been reports in U.S. V 13748 raise sugar to levels V 13753 are differences in way V 13756 triggered concern among diabetics V 13757 noting lack of evidence N 13761 dominates market with product V 13762 make insulin in Indianapolis V 13764 seen reports of unawareness N 13764 seen reports among patients V 13765 indicated difference in level V 13768 reduce force by % V 13769 report loss for quarter V 13777 consume millions of man-hours N 13777 produce tons of paper N 13779 Compare plans with appropriations V 13782 abdicate responsibility for decisions N 13783 puts decisions in hands V 13785 becoming goal of strategy N 13788 consider impact of uncertainties N 13788 consider impact at beginning V 13790 develop priorities by identifying V 13794 translate idea into action V 13796 committed itself by billion V 13798 exceeded numbers by billion V 13801 is effect of billion N 13803 including those in Office N 13805 costing trillion between 1990 V 13807 assumes rate of inflation N 13807 places scenarios in context V 13808 assumes increase in appropriations N 13810 reimburses Pentagon for inflation V 13811 been position of Senate N 13811 reduces baseline by billion V 13812 been position of House N 13812 been position for years V 13813 freezes budget at level V 13813 eat effects of inflation N 13813 eat effects until 1994 V 13814 reduces baseline by billion V 13815 extends compromises between House V 13815 splits difference between Scenarios V 13815 increasing budget at % V 13816 reduces baseline by billion V 13817 reduces budget by % V 13817 reduces reduction of billion N 13819 construct program for scenario N 13820 conclude efforts by producing V 13821 reveal cost of program N 13821 reveal cost by forcing V 13822 sacrifice programs as divisions N 13823 evolve priorities by revealing V 13825 involve planners in Chiefs V 13828 Produce force for scenario N 13828 provide Secretary of Defense N 13828 provide Secretary with assessment V 13830 is truth to it V 13832 provoke Congress into acting V 13832 exaggerate needs in interest V 13833 is game between Pentagon V 13833 is art of the N 13833 is art in world V 13835 is event in sequence V 13835 neutralizes threats to interests N 13835 neutralizes threats in manner V 13837 is version of essay N 13838 reflect policy of Department N 13846 began Friday on note V 13848 left Average with loss V 13849 diminished attractiveness of investments N 13851 test support at marks V 13854 be development for dollar V 13856 hit low of 1.5765 N 13857 expressed desire for pound N 13859 prop pound with increases V 13860 rescue pound from plunge V 13862 's upside to sterling V 13863 have forecast for pound V 13866 raise rate by point V 13868 indicated desire by declining V 13869 is boon for dollar N 13870 has base of support N 13871 buying dollars against yen V 13876 ally themselves with philosophy V 13879 depict bill as something V 13879 hoodwinked administration into endorsing V 13880 's product of meetings N 13881 citing compromise on the N 13881 citing compromise as model V 13882 are parents of children N 13883 's place for child V 13883 spend hours at home V 13883 is transportation for someone V 13889 offering shares of stock N 13889 offering shares at share V 13890 has interests in newsprint V 13893 owned % of shares N 13893 owned % before offering V 13894 seeking control of chain N 13897 had income of million N 13899 had change in earnings N 13901 compares profit with estimate V 13901 have forecasts in days V 13903 have agreement with maker V 13905 holds % of shares N 13906 have copy of filing N 13908 made bid for company V 13909 sought buyer for months V 13912 rose % in September V 13912 was % from 1988 V 13913 was the since April V 13918 restore order to markets V 13926 is copy of contract N 13927 restore confidence in futures N 13929 was envy of centers N 13930 be contract in world N 13931 sell commodity at price V 13937 shown itself in tests V 13939 was case in days V 13939 caused drop in prices N 13940 was problem at all N 13941 is commitment of institutions N 13944 have stake because exposure V 13947 hit highs above % N 13948 solves bit of problem N 13955 attracted lot of investors N 13955 attracted lot before crash V 13959 posted gains from year N 13959 posted gains for half V 13960 rose % to yen V 13961 jumped % to yen V 13962 increased % to yen V 13968 provide explanation for performance N 13969 rose % to yen V 13970 rose % to yen V 13971 surged % to yen V 13976 estimate value of holding N 13978 is the in redeployment N 13978 included sale to S.A N 13979 attaches importance to sale V 13979 are part of strengths N 13980 complete sale of unit N 13980 complete sale by March V 13981 has interests in licenses N 13982 sold stake in field N 13982 sold stake to H. V 13983 sold stake in field N 13983 sold stake to company V 13985 start production by end V 13986 produce barrels per day N 13989 had interest from buyers V 13990 retained Co. as agent V 13992 rose % from month V 13997 is unit of Inc N 14001 are remarketings of debt N 14001 are remarketings than issues V 14006 brings issuance to 33.2 V 14008 yield % via Ltd V 14011 buy shares at premium V 14020 offered francs of bonds N 14021 increase amount to francs V 14023 Put 1992 at 107 V 14026 Put 1992 at 107 V 14032 is subsidiary of Inc N 14034 represent interest in fund N 14036 have life of years N 14042 introduce line of sunglasses N 14043 signed agreement with Inc. V 14043 incorporate melanin into lenses V 14046 signed letter of intent N 14046 pay 15 of stock N 14046 pay 15 for share V 14047 gives value of million N 14048 is company of Co. N 14048 has branches in County V 14050 completed acquisition of Bancorp N 14053 reach surplus of rand N 14057 report income of cents N 14057 report income for quarter V 14058 release results in mid-November V 14060 had loss of 12.5 N 14065 sell headquarters to Francais V 14067 rose % in September V 14068 measures changes for % V 14068 spend month between dollars N 14068 edged % in September V 14069 monitors changes for % V 14069 spend month between 6,500 N 14069 rose month from year V 14069 was % from month V 14070 measures changes for % N 14071 were prices for housing N 14073 cleared takeover of stake N 14074 acquire shares of bank N 14075 buy % of BIP N 14075 buy % for francs V 14076 buy shares at price V 14077 buy stake in BIP N 14077 buy stake from Generale V 14078 fell % to yen V 14079 increased % to yen V 14080 fell % to yen V 14082 counter costs in construction N 14083 were contributors to growth N 14084 rose % to yen V 14084 reflecting production in industries N 14084 are users of products N 14085 rose % to yen V 14086 rose % in October V 14087 follows rise of % N 14089 upgrade facilities of Corp. N 14090 boost capacity by % V 14092 rose % from year V 14093 rose % to yen V 14094 showing expansion at levels N 14096 build plant at Brockville V 14097 replace plants in Montreal N 14099 is unit of Group N 14100 trade stocks in Europe V 14102 underscored shortcomings of way N 14103 switch business to stocks V 14103 quotes prices for issues V 14104 covered itself in glory V 14104 manages billion in money N 14107 unload block of shares N 14107 unload block in Paris V 14107 tossed phone in disgust V 14108 did trade in seconds V 14111 provided prices for minutes V 14114 spent millions of dollars N 14114 spent millions on system V 14114 prevented trading for days V 14118 has session in the V 14119 processed telexes of orders N 14121 including giants as BSN N 14122 transformed orders into orders V 14123 switched business to London V 14133 develop market by 1992 V 14137 switched trades in stocks N 14137 switched trades to market V 14137 unwind positions on Continent N 14143 had problems because capacity V 14145 's one of things N 14148 invested amounts of money N 14150 totaled tons in week V 14153 repurchased shares since 1987 V 14154 purchase number of shares N 14156 control diseases as aflatoxin N 14157 enhance activity against diseases N 14161 sparked scrutiny of procedures N 14162 is danger to competitiveness N 14163 deciding conditions for workers V 14164 adopt pattern in relations V 14166 opposes charter in form V 14168 propose version of charter N 14170 have differences with text V 14171 put countries at disadvantage V 14172 introduce standards for hours N 14174 are a of average N 14175 put countries at disadvantage V 14180 present program in November V 14183 having charter before end V 14184 named director of company N 14184 expanding board to members V 14186 linking tank to Sharpshooter V 14188 bounces weight on wrench V 14192 sinking bits into crust V 14193 easing grip on wallets N 14202 prod search for supplies V 14205 put markets in soup V 14212 played havoc with budgets V 14220 put prices on coaster V 14220 pitched towns from Houston N 14220 pitched towns into recession V 14227 offer security of markets N 14227 provides security of supply N 14230 produce oil than allotments N 14232 legitimize some of output N 14238 disclosed cutbacks in operations N 14243 drill wells in area V 14244 is company with attitude N 14248 get half-interest in oil N 14251 reflecting hunger for work N 14252 putting money into others V 14255 've stability in price N 14257 risen % in month V 14258 deliver supplies to rigs V 14260 discounting % on evaluation V 14262 set budgets for year V 14262 forecast revenue of 15 N 14267 raise spending for prospects V 14269 raise money for program V 14269 are cycles to things V 14271 cut ratings on them V 14272 raising cash through offerings V 14276 increased staff in year V 14281 setting tanks at site V 14281 got raise in years N 14284 sells equipment for Co. V 14285 riding boom to top V 14290 took trip to area N 14299 hauled rig from Caspar V 14303 whips orders for hamburgers N 14305 making it in career V 14306 started Inc. with loan V 14312 including supervisor of vault N 14313 filed complaint against employees V 14313 charging them with conspiracy V 14315 capped investigation by Service N 14321 launch offer for operations N 14322 torpedo plan by Ltd. N 14323 increase amount of cash N 14325 make offer for all N 14329 invested 100,000 in stocks V 14329 repeated process for year V 14330 holding portfolio over year V 14332 require returns on investments N 14333 seeing returns to portfolio N 14333 seeing returns as being V 14333 see returns as compensations V 14335 select stock with return N 14335 select stock with amount N 14340 provides evidence of phenomenon N 14343 bested portfolio in eight V 14343 has bearing on theory V 14348 elected director of maker N 14349 expands board to members V 14355 be part of network N 14355 convert tickets into ones V 14356 used all over world N 14360 put pistols to temple V 14361 stabbed him in back V 14368 track numbers of tickets N 14369 have computers in world V 14371 check tickets at gate V 14375 requires companies in Texas N 14375 charge rates for insurance V 14381 charging 3.95 in Texas V 14385 make attendants despite contracts V 14385 limiting time to hours V 14387 have rules on time N 14387 have rules for attendants V 14387 restricts time for controllers V 14388 work number of hours N 14393 changing policy on attendants N 14394 limit time to hours V 14396 BECOME diversion for travelers V 14397 hit balls into nets V 14399 was 5.11 in Paso V 14401 was officer at Inc N 14405 confusing rates with payments V 14407 reduced tax for years V 14411 is the under systems V 14416 eases burden on changes N 14417 is indexation of gains N 14418 affect economy in ways V 14425 elected officer of marketer N 14429 owns stake in company N 14430 invest capital in venture V 14431 have sales of million N 14431 have sales in 1990 V 14433 requiring disclosure about risk N 14434 required breakdown of items N 14438 cover instruments as swaps N 14440 requiring security for instrument V 14443 sell offices to Bank V 14444 post charge of million N 14445 represents write-down of goodwill N 14447 altered economics of transaction N 14447 altered economics for parties V 14448 increasing reserves for quarter V 14449 had income of million N 14452 suspended lawsuits as part V 14453 elected officer of producer N 14456 split itself in restructuring V 14460 produce version of poisons N 14462 is part of shot N 14465 contains copies of bacterium N 14466 induce immunity to cough N 14468 produce version of toxin N 14471 produce version of toxin N 14472 induce immunity to cough N 14473 triggered mutation in gene N 14474 transferred genes to bacteria V 14481 named executive of bank N 14483 pouring personnel into center V 14486 describes move as decision V 14486 set outlet in economy V 14487 deny element to decision N 14488 sent sons to Naples V 14488 begin expansion during century V 14490 replaced Frankfurt as center V 14491 bear name without Rothschild V 14496 were target of propaganda N 14497 pursued Rothschilds across Europe V 14497 confiscating property in process V 14498 witnessed squads of men N 14499 delaying return to Frankfurt N 14506 sell products on behalf V 14508 left job as manager N 14510 showed assets of billion N 14514 are limitations on assistance N 14520 curbing swings in prices N 14521 sell value of basket N 14522 rivals that in stocks N 14524 include some of investors N 14525 opposing futures since inception V 14527 lose confidence in stocks N 14528 raise cost of capital N 14532 check markets in Chicago N 14535 rallied all of way N 14536 manages billion of investments N 14536 manages billion at Inc. V 14540 add liquidity to markets V 14541 buy portfolio over years V 14544 have plenty of support N 14548 trading baskets of stocks N 14551 narrows gap between prices N 14554 including friends in Congress N 14555 become part of landscape N 14557 take it to Tokyo V 14562 sell amount of contracts N 14567 sell amount of contracts N 14568 buy blocks of stocks N 14571 move million of stocks N 14573 put % in cash N 14576 transferred identity of stocks N 14576 transferred identity into one V 14577 know report of IBM N 14578 buying baskets of stocks N 14578 treats stocks as commodities V 14580 get access to stocks N 14583 own share of earnings N 14584 making bets about direction N 14586 making bet on market V 14587 challenged agreement on fares N 14589 begin negotiations with Brussels N 14590 gained access to routes N 14590 gained access under numbers V 14591 shared results from swap N 14591 followed rules on pricing N 14592 merit exemption from law N 14596 reinstated convictions of Corp. N 14596 exposing workers to vapors V 14597 operated machine in workroom V 14598 suffered damage from exposure V 14599 handling case in Court V 14600 pre-empt states from prosecution V 14604 fined maximum of 10,000 N 14605 marking salvo in battle N 14606 purchase worth of shares N 14608 holds stake in Jaguar N 14616 limits holding to % V 14617 doing something over months V 14619 retained share after part V 14619 selling stake in Jaguar N 14619 selling stake in 1984 V 14619 deflect criticism of privatization N 14625 relinquished share during takeover V 14628 answered questions about it N 14628 answered questions over lunch V 14630 influences thinking on restriction N 14631 jeopardize seats in Coventry N 14634 rose % to kronor V 14635 increased % to kronor V 14638 continued recovery after start V 14640 predicted profit of billion N 14642 increased % to kronor V 14643 Gets Respect Around Sundance V 14644 Misunderstanding conversations with us N 14649 representing points of view N 14649 request reassessment of Project N 14650 is haven for environmentalism N 14653 taken role of one V 14654 transform mountain into resort V 14655 rationalize actions in Utah N 14661 are people like him N 14661 benefit them in future V 14664 fuel controversy over policies N 14666 includes Ortega among guests V 14667 help standing in region N 14668 legitimize people like Ortega N 14669 redeem himself in wake V 14669 aid removal of Noriega N 14670 note irony of Bush N 14670 joining celebration of democracy N 14670 joining celebration at time V 14670 sought cuts in aid N 14671 proposed million in funds N 14671 proposed million for Rica V 14672 make payments on debt V 14675 deserves assistance for reason V 14676 helped cause in Washington N 14677 support campaign against Nicaragua N 14677 earned ire of House N 14683 made distate for government N 14683 endorsing package of aid N 14683 renewing embargo against country V 14683 supports groups in region V 14685 is component to trip V 14687 see this as opportunity V 14688 do survey on experiences V 14691 be one of people N 14692 puts effort in perspective V 14693 Titled Comments From Students N 14696 entered school with scores V 14696 got grades because demands V 14698 suffering abuse from coaches N 14700 's part of minority N 14701 be shot at college N 14704 are a of answers N 14707 Being student-athlete at college V 14707 is a from school N 14712 have attitude toward athletes V 14712 treat us like pieces V 14716 are part of herd N 14717 treat you like piece V 14718 give lot of time N 14727 experiencing life to the V 14728 establish identity from athletics N 14728 make part of ''. N 14731 cutting practice in half V 14731 moving start of practice N 14731 moving start by month V 14731 reducing schedules in sport N 14731 reducing schedules to games V 14733 accepting place on Commission N 14733 face opposition at convention V 14737 want shuttles to labs N 14742 told attendees at meeting N 14748 pop corn with lasers V 14757 acquire Bank of Somerset N 14761 authorized split of the N 14765 named chairman of institution N 14767 conducting search for executive N 14768 is partner of Associates N 14768 owns % of Crestmont N 14769 named president for subsidiary V 14770 was president at unit N 14771 have influence in plans N 14772 curtailing exploration in locations N 14773 spurring interest in fuels N 14777 earmarked million in money N 14777 earmarked million for exploration V 14779 acquired share in accounting N 14780 has stake in Libya V 14781 making fuel at cost V 14785 spend lot of money N 14785 spend lot for fuels V 14786 pump fuel into cars V 14788 hide barrels of oil N 14793 increasing attractiveness of gas N 14796 stepping development of well N 14796 found gas in 1987 V 14797 get gas to marketplace V 14798 get it on line V 14799 announced plans for project N 14803 address subjects as likelihood N 14804 attracting attention because comprehensiveness V 14807 's manifesto for stage N 14810 couching some of ideas N 14810 couching some in language V 14811 Seeking path between opponents N 14813 draw proposals for plan N 14813 be battle over reform N 14814 make assessment of economy N 14815 map strategy in phases V 14816 have effect on consumers V 14819 breaking system of farms N 14822 reduce power of ministries N 14825 turn them into cooperatives V 14826 liquidate farms by end V 14828 mop some of rubles N 14835 buy goods at prices V 14840 face obstacles for exports N 14859 chart exploits of players N 14861 recounts convictions of managers N 14864 is story about love N 14866 was inning of game N 14867 sweated summer with teams V 14869 doing the across River V 14869 watched duel on set V 14871 winning opener on homer V 14885 played base until 1960 V 14886 took memories of homer N 14888 was namesake of poet N 14889 born days before run V 14889 tell him of coincidence N 14890 sent card to Martha V 14893 sent it to Thomson V 14898 scheduled stop on Turnpike N 14898 pick papers for neighbor V 14904 addressed husband with nickname V 14908 take Scot without hesitation V 14914 was it for look N 14915 spent hour at 10 V 14915 fulfilling dream of boy N 14916 signed photographs of homer N 14917 took time from work V 14917 have chance in life V 14918 has ties to baseball V 14921 sends photo with note V 14926 was miles at place V 14926 captured imagination of kid N 14926 is all for it V 14929 find one in column V 14933 improving earnings before expiration V 14934 increase stake in Southam N 14934 make offer for company N 14935 hold stake in company N 14938 reported earnings of million N 14940 restricted options in areas V 14943 sold stake in Corp. N 14943 sold stake to Hees V 14944 take look at newspaper N 14946 sell stake in Ltd. N 14946 sell stake to Ltd. V 14947 cut costs in division N 14947 cut costs through sales V 14947 reaching agreements in areas N 14948 has links to newspaper N 14949 fell % to million V 14951 had credit of million N 14953 rose % to million V 14956 held stake in Eastman N 14956 held stake in venture V 14957 exploring sale of part N 14960 had profit of million N 14961 rose % to billion V 14964 earns salary as professor V 14965 get apartment in years V 14969 released report on extent N 14971 laid blame on speculators V 14972 rose % in fever V 14973 own estate at all N 14975 owned % of kilometers N 14975 owned % of land N 14981 studying crisis for year V 14982 took bills to Assembly V 14983 rectifying some of inequities N 14984 are restriction on amount N 14988 defines profits as those V 14990 free land for program V 14990 build apartments by 1992 V 14990 boost standing of Roh N 14992 want limits on sizes N 14993 leading charge for reform V 14993 wants restrictions on landholdings N 14997 is violation of principle N 14998 mitigate shortage of land N 15001 buy amounts of land N 15004 proposed series of measures N 15004 restrict investment in estate N 15016 challenging ordinance under amendments V 15017 took effect in March V 15018 locating home for handicapped N 15018 locating home within mile V 15019 limiting number of homes N 15021 prevent concentration of homes N 15030 destroying part of equipment N 15039 offered drugs in walk V 15041 punish distributors of drugs N 15043 is requirement for victory N 15047 captured arsenals of materiel N 15049 been lot of talk N 15051 increase price of estate N 15051 creating problems for people N 15055 is prices for products N 15056 gone % since beginning V 15059 earn million from coffee N 15060 face reductions in income N 15060 substituting crops for coffee V 15061 impose barriers to import N 15062 be policy of U.S N 15063 take advantage of opportunity N 15063 make plea to millions V 15064 is bullet against those N 15066 is president of Espectador N 15068 have homes at all V 15069 faces negotiations with unions N 15069 faces negotiations next year V 15071 gain custody of all N 15075 win nomination for mayor N 15078 wins mayoralty on 7 V 15080 steer city through crisis V 15081 advocate policies as control N 15081 funneled money into campaign V 15082 proved something of bust N 15082 proved something as candidate V 15084 recorded slippage in support N 15092 drop jobs from payroll V 15094 raise taxes on businesses V 15094 cut spending in neighborhoods V 15099 offers hope to range V 15102 remembers birthdays of children N 15102 opens doors for women V 15104 attracted whites because reputation N 15106 shown signs of confusion N 15106 plagued tenure as president N 15106 hinder him as mayor V 15107 was lead in polls N 15108 mishandled sale to son N 15110 was effort by activist N 15112 allay fears about association N 15114 joining club in 1950s V 15115 become mayor under Beame V 15115 file returns for years V 15118 is one of lawyers N 15119 resigned position as president N 15121 is personification of system N 15123 elected president in 1985 V 15126 drink tea of coffee V 15128 was member of Estimate N 15129 draw members to position V 15133 had problem from time V 15133 delay support of Dinkins N 15136 discussed issues during campaign V 15139 setting tone for negotiations N 15140 receiving endorsement from groups V 15140 issue moratorium on construction N 15143 favors form of control N 15143 attract investment in city V 15144 linking subsidies to businesses V 15145 drive businesses from city V 15146 favors approach toward states N 15150 leaving voters with clue V 15153 taken role on strategy N 15154 made way into papers V 15157 receive advice from board V 15158 place responsibility in hands V 15161 Having positions of wealth N 15161 constitute Guard of politics N 15162 win support of factions N 15163 are potholes for city V 15164 think any of us N 15164 sidetrack determination because obligations N 15167 perpetuate ineffectiveness of system N 15168 talk some of problems N 15169 gave % of votes N 15169 gave % in primary V 15169 turn election to Giuliani V 15170 raising questions about standards N 15170 generate excitement about candidacy N 15172 learn nuances of politicking N 15176 pulls measure across front V 15177 lurched feet off foundation V 15179 is pile of bricks N 15181 is adjuster with Casualty N 15182 restore order to lives V 15184 clear sites for construction V 15185 write checks for amounts V 15189 toting bricks from lawn V 15189 give boost through window N 15190 measuring room in house N 15191 snaps photos of floors N 15193 sweeps glass from countertop V 15196 buying insurance for house V 15205 deployed 750 in Charleston V 15206 processing claims from storm N 15206 processing claims through December V 15207 take six to months N 15209 fly executives to Coast V 15210 pulled team of adjusters N 15213 packed bag with clothes V 15216 saw it on news V 15219 count number of dishwashers N 15222 Using guide for jobs V 15224 visited couple in Oakland N 15225 pushed feet off foundation V 15226 presented couple with check V 15226 build home in neighborhood V 15228 have experience with carpentry V 15232 does lot of work N 15232 does lot by phone V 15234 spent month at school V 15234 learning all about trade N 15243 prepares check for Hammacks V 15246 retrieve appliances on floor N 15249 get check for dollars N 15252 rebuilding house in Gatos V 15253 lose money on this V 15255 costs 2 for 1,000 V 15262 have water for days V 15269 offering services for customers N 15269 re-examine regulation of market N 15270 were news for AT&T V 15271 championed deregulation of AT&T N 15271 championed deregulation at job V 15272 pushing deregulation at FCC V 15276 offering packages to customers V 15278 gave % to discount N 15278 gave % to company V 15280 match offers by competitors N 15281 offered discount to International V 15284 propose rules next year V 15286 take look at competition V 15289 petition decision in court V 15291 filed countersuit against MCI V 15292 was blow in fight N 15293 sued AT&T in court V 15297 undermining pillar of support N 15297 undermining pillar in market V 15298 flowed % of assets N 15299 lost total of billion N 15299 lost total through transfers V 15302 had outflows in months V 15303 exacerbated concern about declines N 15304 seeing headline after headline N 15305 spell trouble for market V 15306 sell some of junk N 15306 pay investors in weeks V 15307 erode prices of bonds N 15311 finance boom of years N 15312 are the among holders N 15313 hold assets of billion N 15314 hold smattering of bonds N 15315 had outflow of million N 15315 had outflow in months V 15319 met all without having V 15320 had month for years N 15320 had sales until month V 15323 holds position of % N 15324 yanked million in months V 15325 followed change in picture N 15325 followed change in picture N 15330 fallen year through 19 N 15333 expand selling to securities V 15336 sent sterling into tailspin V 15336 creating uncertainties about direction N 15339 shocked analysts despite speculation V 15343 reinforced confidence about sterling N 15351 shares view of world N 15351 shares view with Lawson V 15353 keep inflation in check V 15353 have impact on rates V 15356 proved stopgap to slide N 15362 rose 3.40 to 372.50 V 15363 was the since 3 V 15374 used line in meeting V 15374 taking action against Noriega V 15375 warn Noriega of plot N 15382 told him at House V 15384 's defender of powers N 15386 's senator like Vandenberg N 15387 are heroes of mine N 15392 support coup in Panama N 15406 confusing consensus on principles V 15408 leave operations to presidents V 15415 clarify ambiguities between administration N 15419 shared principles of Boren N 15421 running policy by committee V 15422 seen abuses of power N 15429 drove miles to office V 15429 endured traffic during journey V 15429 be residents of community N 15430 is evidence of economy N 15432 awaited thinker in societies V 15436 buried him in cemetery V 15437 harbors yearning for virtues N 15440 been mainstay of revival N 15441 became point of pride N 15443 including three for Inc N 15444 delivered month in time V 15449 are source of controversy N 15450 cited parallels between case N 15452 reduce strength of companies N 15452 reduce strength in markets V 15452 is key to winning N 15453 raising funds in markets V 15454 was about-face from policy N 15455 played part in restructuring N 15457 sold % of stake N 15457 sold % to group V 15458 took control of board N 15459 combine Marine with firms V 15459 ensure survival as nation N 15466 wasting subsidies of kronor N 15469 sell shipyard to outsider V 15473 report loss of million N 15475 report loss for 1989 N 15479 called notes with amount V 15482 idle plant for beginning V 15483 eliminate production of cars N 15486 builds chassis for vehicles V 15487 scheduled overtime at plant V 15489 slated overtime at plants V 15496 includes domestic-production through July V 15497 heaped uncertainty on markets V 15502 is picture of health N 15503 are the in years N 15503 is the in Community N 15504 pressing demands for increases N 15504 pressing demands despite belief V 15506 dropped % from high V 15511 get repeats of shocks N 15513 incur loss as result V 15515 approach equivalent of million N 15519 cushioning themselves for blows V 15520 managing director of Ltd. N 15520 runs bars in district V 15521 's sense among set V 15524 created longing for days N 15526 have jobs at all V 15527 employs people in London V 15527 shed jobs over years V 15528 see cuts of % N 15529 been grace for industry V 15531 cause companies in hope V 15536 be lot of disappointments N 15536 be lot after all V 15540 chucked career as stockbroker N 15547 blow horn in anger V 15549 presage action by banks N 15550 operate network under rules V 15551 reduce value of assets N 15554 is unit of Ltd N 15556 increase offer to billion V 15556 following counterbid from Murdoch N 15561 warned lawyers for Antar N 15562 follows decisions by Court N 15566 are all of people N 15566 defend Bill of Rights N 15566 turned number of cases N 15567 seek indictment on charges N 15568 seize assets before trial V 15574 limit forfeiture of fees N 15576 charged month in suit V 15579 pump price through statements V 15585 was reminder of collapse N 15586 take precautions against collapse N 15597 get broker on phone V 15598 preventing chaos in market N 15600 prevent conditions in markets N 15601 assumed responsibility in market N 15602 is market without market-maker N 15603 play role in market V 15604 pumped billions into markets V 15605 lent money to banks V 15606 lent money to customers V 15606 make profit in turmoil V 15608 supply support to market V 15609 flooding economy with liquidity V 15609 increasing danger of inflation N 15609 stabilizing market as whole V 15616 reduce need for action N 15619 maintain functioning of markets N 15619 prop averages at level V 15622 buy composites in market V 15625 eliminate cause of panic N 15628 recall disorder in markets N 15629 avoid panic in emergencies N 15632 was governor of Board N 15632 was governor from 1986 V 15635 be rule of day N 15636 say nothing of banks N 15636 guide financing of transactions N 15638 had comment on resignation V 15644 using chip as brains V 15645 discovered flaws in unit N 15646 notifying customers about bugs V 15646 give answers for calculations N 15648 are part of development N 15650 affect schedule at all V 15651 delay development of machines N 15652 modified schedules in way V 15661 cause problems in circumstances V 15667 converts 70-A21 from machine V 15668 told customers about bugs V 15669 circumvent bugs without delays V 15671 announce products on 6 V 15673 's break from tradition N 15675 are chips of choice N 15675 is spearhead of bid N 15675 guard spot in generation V 15678 crams transistors on sliver V 15679 clocks speed at instructions V 15683 is descendant of series N 15683 picked chip for computer V 15684 processes pieces of data N 15685 cornered part of market N 15685 cornered part with generations V 15686 keep makers in spite V 15688 bases machines on chips V 15689 have impact on industry V 15690 be technology in computers N 15690 be technology for years V 15691 have any on that N 15691 have any at all V 15693 form venture with steelmaker N 15693 modernize portion of division N 15694 is part of effort N 15694 posted losses for years V 15697 affects part of operations N 15697 joined forces with partner V 15699 's step in direction N 15701 be beginning of relationship N 15701 open markets for Bethlehem V 15703 establish facility at shop V 15705 install caster by fall V 15706 improves quality of rolls N 15708 concentrate business on fabrication V 15711 consider case of Loan N 15714 sell holdings by 1994 V 15714 increased supply of bonds N 15714 eliminated one of investments N 15715 is twist to loss N 15717 regard this as issue V 15717 is topic around all V 15718 had loss in part V 15718 adjust value of bonds N 15718 adjust value to the V 15720 reminds us of story V 15721 seeking relief from Congress V 15724 see Congress as resort V 15727 move headquarters from Manhattan V 15730 sold skyscraper to company V 15731 is embarrassment to officials N 15739 build headquarters on tract V 15740 rent part of tower N 15742 run headquarters at Colinas V 15744 asking 50 per foot N 15744 asking 50 for rent V 15746 eliminating commutes between home N 15746 work hours in Dallas V 15747 rose % in September V 15748 produced tons of pulp N 15748 produced tons in September V 15751 is producer of pulp N 15754 completed acquisition of Inc. N 15754 purchasing shares of concern N 15754 purchasing shares for 26.50 V 15755 includes assumption of billion N 15756 includes Corp. through fund V 15758 follows months of turns N 15760 taking charges of million N 15761 received offer from group V 15763 including members of family N 15767 lowered offer to 26.50 V 15771 close markets in periods V 15772 disputed view of Breeden N 15773 have impact on markets V 15774 close markets in emergency V 15776 asked Group on Markets N 15783 have positions in stocks N 15785 be thing of past N 15789 offer opinion on controversy N 15789 become part of trading N 15792 disclose positions of companies N 15792 mandate reporting of trades N 15792 improve settlement of trades N 15795 become Act of 1989 N 15796 assure integrity of markets N 15798 covers range of provisions N 15798 affect authority of Commission N 15800 elevates infractions to felonies V 15802 prevent conflicts of interest N 15803 create burdens for industry N 15804 records trades by source V 15805 develop system like one N 15806 have system in place V 15810 is consideration because sweep N 15816 increase costs of trading N 15817 is imposition of fees N 15817 widen spread between U.S. N 15818 have effect on position N 15820 increasing costs as result V 15824 depriving individual of access N 15826 expose firms to damages V 15827 supervising execution of trade N 15827 doing business with independents V 15829 be diminution of liquidity N 15832 obtain execution for client N 15833 provides liquidity to markets V 15835 has value to system N 15838 permit consideration of all N 15841 receiving benefits in week V 15842 receiving benefits in week V 15845 rearranges limbs of beggars N 15845 takes cut of cent N 15850 won him in 1988 V 15851 offer sample of talent N 15852 show range of intellect N 15852 include work of allegory N 15853 chart evolution of city N 15856 follows decline of family N 15856 follows decline with sweep V 15857 dooming family to poverty V 15858 peddling herself for piasters V 15859 support family with money V 15861 burying him in grave V 15862 conceal belongings from neighbors V 15866 gathering spittle in throats V 15871 was tradition in Arabic V 15871 modeled work on classics V 15878 reflects souring of socialism N 15880 redeeming life of bullets N 15880 redeeming life by punishing V 15882 enter prison of society N 15892 advocating peace with Israel N 15894 is surrogate for action N 15895 gives glimpses of Cairo N 15902 make offer for all N 15903 had losses in quarters V 15906 's part of group N 15910 left Phoenix at beginning V 15915 including restoration of holidays N 15918 increase fund by million V 15919 transfer control to Hill V 15921 voted 250 to 170 N 15921 voted 250 on Wednesday V 15921 order million in spending N 15922 has work on 30 V 15924 called service by Members V 15926 collect contributions from developers V 15926 keep them in office V 15927 resolve differences between versions N 15932 transferred million from program V 15932 funneled it into items V 15937 purchased lot on island N 15940 intercepted value of cocaine N 15944 get idea of leverage N 15946 discourage use of drugs N 15946 stop process among the V 15948 was director with jurisdiction N 15952 'm veteran of war N 15957 buy drugs at place V 15958 create market for themselves V 15961 read article in issue N 15962 examine forms of legalization N 15967 have iteration of programs N 15969 grew pace as quarter N 15970 was catalyst to expansion N 15974 been contributor to growth N 15975 sustain economy on path V 15976 showed change of pace N 15977 crimp progress in trade N 15979 was spot in report N 15980 measures change in prices N 15980 slowed growth to rate V 15984 expressed satisfaction with progress N 15996 cause downturn in activity N 15998 diminished income by billion V 15998 called effect on the N 16002 received contract by Force N 16003 provides equipment for Northrop V 16003 supports purchase of missiles N 16004 offering incentives on models V 16005 has incentives on models V 16006 announced terms of issue N 16006 raise net of expenses N 16007 redeem million of shares N 16008 entitle holders of shares N 16012 holds % of shares N 16014 redeem shares on 31 V 16016 eliminate payments of million N 16017 was one of companies N 16017 was one until year V 16021 plunged % to million V 16022 plunged % to 302,000 V 16023 is one of contractors N 16024 suffering drops in business N 16029 applying skills in fields V 16030 provides services to military V 16031 quadrupling earnings over years V 16031 posted drop in earnings N 16034 earned million on revenue V 16036 make money off trend V 16037 repairing parts at % V 16038 selling parts to the V 16040 taking maintenance of aircraft N 16040 taking maintenance with people V 16043 buying companies with markets N 16044 buy rights to system N 16045 automates array of functions N 16046 are customers for software N 16046 are customers in area V 16047 acquired companies outside market V 16048 transfer skill to ventures V 16050 take talent of engineers N 16053 helping company in slowdown V 16053 makes tunnels for industry V 16057 enjoyed growth until year V 16058 Following a of earnings N 16058 plunged % to 45,000 V 16060 combining three of divisions N 16060 bring focus to opportunities V 16062 earned million on revenue V 16062 provides example of cost-cutting N 16064 contributed loss since 1974 N 16068 are businessmen in suits N 16069 became shareholder in PLC N 16071 has share of dents N 16072 received sentence from court V 16073 evade taxes by using V 16074 had brushes with law V 16076 had contact with Morishita V 16077 make judgments about Morishita V 16078 have country by country V 16084 purchased % of Christies N 16084 purchased % for million V 16086 made one of shareholders N 16091 considers connoisseur of art N 16092 start museum next year V 16093 spent million on business V 16094 racked a at auction V 16097 rose % to yen V 16100 report all of income N 16100 report all to authorities V 16103 Stretching arms in shirt V 16103 lectures visitor about way V 16107 know details of business N 16107 's source of rumors N 16108 link demise with Aichi V 16109 connecting him to mob V 16113 flying helicopter to one V 16114 owns courses in U.S. V 16123 expand business to areas V 16127 co-founded company with Tinker V 16128 is unit of PLC N 16128 oversee company until is V 16129 reported loss of million N 16129 reported loss for quarter V 16131 reported loss of million N 16133 granted increases than those N 16135 negotiated increases in 1986 V 16135 increased average of % N 16135 increased average over life V 16136 shown increase since 1981 V 16136 comparing contracts with those V 16151 become advocate of use N 16155 promote Filipino as language V 16158 cite logic in using V 16162 understands Filipino than language V 16164 is field in Philippines V 16166 was colony of U.S. N 16166 is language for children V 16168 calls ambivalence to Filipino N 16171 was uproar from legislators V 16171 conduct debates in English V 16174 advance cause of Filipino N 16177 shown weekdays on two V 16181 lacks polish of Street N 16185 is the of program N 16192 reported net of million N 16192 reported net from million V 16193 registered offering of shares N 16194 sell million of shares N 16198 have shares after offering V 16198 owning % of total N 16199 sell adhesives to S.A. V 16201 put units on block V 16201 raising billion in proceeds V 16202 rescued Emhart from bid V 16202 acquire maker of tools N 16202 acquire maker for billion V 16204 boosted ratio of debt N 16206 put businesses on block V 16207 had sales of million N 16208 contributed third of sales N 16211 negotiating sales of units N 16211 announce agreements by end V 16212 generated sales of billion N 16212 generated sales in 1988 V 16212 generated sales of billion N 16213 posted sales of million N 16214 achieve goal of billion N 16214 said Archibald in statement V 16215 quell concern about Black V 16222 's tax on mergers N 16223 raise million by charging V 16223 charging companies for honor V 16223 filing papers under law V 16224 describing effects on markets N 16226 give managers of firms N 16226 use review as tactic V 16228 increase budgets of division N 16230 charge parties for privilege V 16233 been chairman of Ernst N 16236 bring stake in Mixte N 16236 bring stake to % V 16237 accused Paribas of planning N 16237 selling parts of company N 16238 including representatives of giant N 16238 hold % of capital N 16239 doing anything besides managing V 16240 boost stakes in Mixte V 16241 seek means of blocking N 16242 organizing counterbid for Paribas V 16243 be francs from francs V 16247 built company through activity V 16250 needs go-ahead from the V 16251 joined core of shareholders N 16252 boost stake above % V 16253 downplayed likelihood of bid N 16254 is role of allies N 16255 hold % of capital N 16258 boost stake in Mixte V 16261 offer shares for share V 16262 values Mixte at francs V 16263 raised million from offering V 16265 save the in expense V 16267 representing yield to maturity N 16269 is underwriter for offering V 16270 have amount of million N 16272 eliminated number of corporations N 16274 paid tax from 1981 V 16274 paying average of % N 16274 paying average in taxes V 16275 considering number of breaks N 16276 scaled use of method N 16276 defer taxes until was V 16277 reached % in 1988 V 16278 shouldering share of burden N 16282 garnered total of billion N 16285 released study on bills N 16292 retains titles of officer N 16292 remains chairman of board N 16299 won them at home V 16302 's question of timing N 16304 include stores as Avenue N 16308 confirmed report in Shimbun N 16311 seeking information on group V 16312 buy group from subsidiary V 16313 acquired year by Campeau V 16314 put such on Campeau V 16315 find partners for buy-out V 16316 get backing from store N 16323 invested yen in venture V 16325 increased stake in Tiffany V 16326 opened shops in arcades V 16327 open Tiffany in Hawaii V 16328 makes match for Avenue N 16331 is interest in idea V 16333 do business in America V 16339 increased deficit to million V 16340 give money after 1987 V 16344 visit China at invitation V 16347 have discussions with leaders V 16347 give assessment of leaders N 16347 give assessment to Bush V 16348 be supporters of alliance N 16350 was the with % V 16351 registered support below % V 16352 filed complaint against maker V 16352 using colors of flag N 16352 using colors on packages V 16353 distribute flag in way V 16357 cost # in revenue V 16358 bought stamps from charities V 16359 presented consul in Osaka N 16359 presented consul with a V 16361 sent aid to Francisco V 16363 lure traders after crackdown V 16365 protesting crackdown by dragging V 16365 dragging feet on soliciting V 16371 is reading in class V 16372 sneaking snakes into Britain V 16372 strapped pair of constrictors N 16372 strapped pair under armpits V 16374 continuing talks with buyers N 16374 reached agreement on deals V 16375 seeking alternatives to offer N 16377 reap money through sale N 16378 rose a against currencies V 16379 tumbled points to 2613.73 V 16381 following resignation of chancellor N 16383 nose-dived share to 100 V 16383 pulled issues after reporting V 16383 reporting earnings after closed V 16384 were losers in quarter V 16386 prompted sell-off of stocks N 16388 grew % in quarter V 16388 predicting growth for quarter N 16389 are a than revisions N 16390 questioning profits as pillar V 16393 is encouragement for Reserve V 16393 lower rates in weeks V 16397 outstripped 1,141 to 406 N 16404 joined Senate in making V 16404 meet payments of an N 16404 meet payments during years V 16405 allocating billion to departments V 16405 imposing fees on interests V 16405 making filings with government V 16406 ensures enactment of provision N 16407 back promise of supporting N 16407 supporting claims of 20,000 N 16410 commits government to payments V 16411 assumed some of character N 16411 reopens divisions in majority N 16412 treating payments as entitlement V 16413 makes one of the N 16413 is rod for battle V 16414 curb power of board N 16414 curb power until are V 16418 receive million by charging V 16418 including increase in fee N 16419 include an in funds N 16420 defer increase in funds N 16420 raise grant for states V 16422 rescinded million in funds N 16422 rescinded million for Worth V 16423 add million for initiative V 16425 posted losses in businesses V 16425 casting pall over period V 16426 had loss in business V 16429 fell % to billion V 16429 excluding gain of million N 16431 spark wave of selling N 16431 spark wave in market V 16432 eased cents to 22.25 V 16433 reflects outlook in Detroit V 16439 cut plans from levels V 16442 blamed costs for drop V 16444 ran loss of million N 16444 ran loss on assembling V 16444 assembling cars in U.S. V 16444 ran loss of million N 16445 show profit for quarter V 16446 reported net of million N 16446 reported net on revenue V 16448 was reversal for company N 16448 reeled quarters of earnings N 16448 reeled quarters until quarter V 16450 expects economy through end V 16453 had net of billion N 16457 include earnings of million N 16462 seeing prices on models V 16463 including gain from sale V 16464 rose % to billion V 16466 issue earnings for business N 16468 offset gains from increases N 16469 illustrate diversity of operations N 16470 attributed half of net N 16470 attributed half to units V 16472 build reserves to billion V 16475 was % to billion V 16476 earned billion on revenue V 16477 are versions of Measure N 16477 are versions on stage V 16478 is portrayal of play N 16478 is overlay of decadence N 16479 is one of plays N 16481 mounted production at Center V 16482 turns rule of city N 16482 turns rule to the V 16483 made fiancee before marry V 16483 condemns Claudio to death V 16484 yield virtue to him V 16485 set scheme in motion V 16485 fearing outcome until arranges V 16485 arranges reprieve for all V 16488 has grasp of dynamic N 16489 confronts brother in cell V 16489 confronts him with misdeeds V 16489 bring points to life V 16490 be interpreter of Shakespeare N 16492 make Shakespeare to today V 16493 puts burden on director V 16493 show degree of taste N 16494 converting them into transvestites V 16497 inform Isabella of fate N 16497 slaps mother on rear V 16500 is bid for laugh N 16501 has pluses than minuses N 16502 represents step for Theater N 16503 is assignment as director V 16505 write editorial in magazine V 16508 giving sense of excitement N 16513 bottled capital-gains in Senate V 16513 prevent vote on issue V 16514 force advocates of cut N 16521 offered package as amendment V 16521 authorize aid to Poland V 16522 holding vote on amendment N 16522 holding vote by threatening V 16524 have votes for cloture V 16525 show sign of relenting N 16527 amend bill in Senate N 16527 amend bill with capital-gains V 16530 garner majority in the V 16531 accuse Democrats of using N 16533 traded accusations about cost N 16534 create type of account N 16539 approved million in loans N 16541 finance projects in Amazon V 16544 reported loss of million N 16545 reported earnings from operations N 16545 reported earnings of million V 16548 limits payouts to % V 16549 paid share of dividends N 16549 paid share on earnings V 16552 make products as bags N 16555 captured share of market N 16556 caused loss of million N 16556 caused loss in quarter V 16557 filled % of needs N 16557 represented % of capacity N 16560 cost company for quarter V 16561 put pressure on earnings V 16562 restore dividend at meeting V 16563 pay dividends on basis V 16565 issued recommendations on stock V 16567 dumped shares of issues N 16568 slumped 4.74 to 458.15 V 16569 are part of 100 N 16572 plummeted 9.55 to 734.41 V 16574 fell 5.80 to 444.19 V 16574 slid 4.03 to 478.28 V 16575 dropped 2.58 to 536.94 V 16576 eased 0.84 to 536.04 V 16577 lost 2.11 to 452.75 V 16579 see buying at all V 16582 are nails in coffin N 16584 make bid for anything V 16586 experiencing problems with microchip V 16589 dropped 7 to 32 V 16590 fell 1 to 1 V 16592 was 5 to 30 V 16593 eased 5 to 17 V 16596 were % from period V 16597 lost 1 to 42 V 16598 sued competitor for misleading V 16599 fell 5 to 11 V 16601 bought % of shares N 16602 enter war with GM V 16604 earned share in period V 16606 make payment on million N 16606 make payment by date V 16607 blamed softness in interior-furnishings N 16607 blamed softness for troubles V 16608 tumbled 1 to 9 V 16608 reported a in quarter V 16609 hurt sales in Co. V 16610 surged 1 to 36 V 16612 cost it in quarter V 16613 jumped % to million V 16616 reflect mergers of Bank N 16619 attributed results to strength V 16620 had mix with gains V 16622 had 750,000 in expenses V 16624 retains shares of Mac N 16625 earn million from a N 16633 dumping stocks as fled V 16634 fell 39.55 to 2613.73 V 16640 set pace for yesterday V 16641 closed 5 to 100 V 16642 hit high of 112 N 16642 hit high on 19 V 16643 uncovered flaws in microprocessor N 16643 cause delays in shipments V 16644 dropped 7 to 32 V 16646 leading you down tubes V 16647 took comfort in yesterday V 16649 pushed average in morning V 16651 had concern about turmoil N 16651 missed payment on bonds N 16651 missed payment in September V 16653 given discrepancies between stocks N 16653 given discrepancies at close V 16654 sell all in trade V 16655 rose million to billion V 16656 fell 1 to 100 V 16656 droped 1 to 88 V 16656 lost 1 to 17 V 16657 lost 1 to 24 V 16658 dropped 1 to 31 V 16658 fell 5 to 55 V 16658 lost 1 to 12 V 16659 slid 1 to 38 V 16659 led list of issues N 16660 plunged 3 on news V 16660 affect results through end V 16661 fell 7 to 41 V 16661 have impact on results V 16662 went 1 to 126 V 16664 lost 1 to 44 V 16664 slid 3 to 22 V 16666 cut ratings on Schlumberger N 16666 went 1 to 1 V 16668 climbed 1 to 39 V 16668 rose 1 to 16 V 16668 went 5 to 13 V 16668 added 5 to 15 V 16668 rose 2 to 46 V 16669 fell 5 to 43 V 16670 equaled % of shares N 16671 rose 1 to 17 V 16672 authorized repurchase of shares N 16672 authorized repurchase under program V 16673 was % from year V 16673 added 1 to 22 V 16675 plunged 1 to 69 V 16677 reported loss for quarter N 16677 dropped 1 to 33 V 16678 suspended payment of dividends N 16679 holding talks with Jones V 16679 advanced 7 to 20 V 16681 fell 2.44 to 373.48 V 16683 climbed 3 to 13 V 16684 signed letter of intent N 16684 acquire company in swap V 16685 answer questions from subcommittee V 16686 invoke protection against self-incrimination N 16686 invoke protection at hearings V 16689 remains target of hearings N 16691 acquire stake in Ltd. N 16694 have presence in Australia V 16695 discuss details of proposals N 16696 given Accor through issue V 16699 damage competition in markets V 16700 is equivalent of pence N 16701 increase penalties for misuse N 16707 speed removal of pesticides N 16713 fine KLUC-FM in Vegas N 16713 fine KLUC-FM for playing V 16713 playing song on 1988 V 16716 uses word for congress V 16719 answered Line at midday V 16721 dismissed complaints about indecency N 16721 aired material after 8 V 16721 aired minutes after played N 16723 set line at midnight V 16728 proposed fine for WXRK V 16729 began crackdown on indecency N 16729 features lot of jokes N 16729 was one of shows N 16731 does hours of humor N 16734 banning reading of Joyce N 16736 citing stations in York V 16736 fining stations in Miami V 16737 find grounds for ban N 16738 has agreements with firms V 16738 designates one of firms N 16738 handle each of trades N 16739 solicits firms for price V 16740 reported drop in income N 16740 fixing some of problems N 16741 completed restructuring in quarter V 16742 posted a for quarter V 16745 losing money at rate V 16747 posted net of million N 16747 posted net from million V 16748 include gain of million N 16748 include gain from divestiture V 16750 rose % to billion V 16753 offset performance by fighter N 16754 were % in missiles V 16764 thwart kind of attempts N 16764 sell % of stock N 16764 sell % to Ltd V 16765 was transaction for airline V 16765 sold stake to Swissair V 16765 placed % of stock N 16765 placed % in hands V 16766 buy stake in Airlines N 16768 were subject of bids N 16770 risen % over months V 16772 buy shares of stock N 16772 buy shares for % V 16773 buy amount of shares N 16774 vote shares in proportion V 16776 operate service on routes V 16777 provides toehold in Pacific N 16777 face possibility of expansion N 16778 granted access to drug N 16778 granted access for children V 16779 announced move by the N 16779 announced move after years V 16781 give drug for time V 16782 is unit of PLC N 16783 give access to drug N 16784 had access to AZT V 16784 approved usage for adults N 16784 approved usage in 1987 V 16785 relieve symptoms in children V 16785 lacks approval for use N 16787 stricken children under 13 N 16787 carry infection without symptoms V 16789 reject affiliation with Association N 16789 giving victory to chairman V 16792 bought Tiger in February V 16794 lost lot of votes N 16796 infuse confict into relations V 16797 been unit in U.S. V 16802 protesting improprieties in vote N 16803 misled pilots by calling V 16808 hurt them in battle V 16809 reconciles classifications of Federal N 16809 faces elections among mechanics V 16812 are guide to levels N 16844 included gain of million N 16850 reflect this in methods V 16851 rose 9.75 to 170.75 V 16853 report earnings of 7 N 16854 rose % to billion V 16855 was % to miles V 16857 fell % to million V 16857 includes gain from sale N 16858 increased % to billion V 16860 discuss possibility of proposing N 16860 proposing recapitalization to board V 16864 announced appointment of Coors N 16865 was statement of Coor N 16866 fight competition from Cos N 16867 relinquish post to uncle V 16868 been chairman since 1970 V 16870 shift responsibilities at company V 16873 integrating efforts of Stroh N 16873 steering merger through Department N 16875 is time of risk N 16875 has amount of responsibility N 16876 Putting William at helm V 16876 have statesman at top V 16879 devote attention to unit V 16883 credit Peter with selling V 16883 selling members on purchase V 16883 slap piece of debt N 16883 slap piece on books V 16884 had struggle in getting V 16886 take credit for moves V 16893 put pressure on management N 16893 put pressure in midst V 16897 deny request for injunction N 16897 preventing producers from taking V 16897 taking management of Inc N 16898 made request in Court V 16898 filed a against Sony V 16900 assume billion in debt N 16900 offering million for Co. V 16901 heighten acrimony of battle N 16903 leaving Sony in such V 16903 prevent revitalization of Columbia N 16904 violates contract with Warner N 16906 make movies for Warner V 16907 prevents team from being V 16907 being producers for studio V 16908 exclude them from taking V 16908 taking post at company V 16909 produce pictures for Warner V 16910 prohibits them from producing V 16911 prevent Guber from completing V 16911 completing production in properties V 16912 become co-chairmen of held N 16912 changed name to Entertainment V 16913 offered posts at Columbia V 16918 violates morality by raiding V 16918 raiding producers under contract N 16920 free producers from contract V 16922 delayed seizure until made V 16924 prosecute Lincoln over infractions V 16928 took control of thrift N 16928 took control in August V 16932 accused Wall of holding V 16932 holding meetings with officials N 16932 holding meetings while refusing V 16933 received officials as heroes V 16933 relieved them of responsibility N 16934 renewed call for Wall V 16944 assist them in organizing V 16947 make referrals to me V 16948 heard testimony from officials V 16948 received contributions from Jr. V 16949 encouraged sale than putting N 16949 putting it in receivership V 16950 disclosed calls to regulators V 16952 involve U.S. in plots V 16954 notifying dictators in advance V 16955 have assassinations as goal V 16957 regarding Panama with officials V 16958 have effect of giving N 16958 giving leeway in actions N 16959 require notice of acts N 16960 notify committee in advance V 16960 delay notification in cases V 16964 donated site on side N 16967 made survey of site N 16967 realize extent of problem N 16969 cost millions of dollars N 16970 Paying portion of costs N 16970 has revenue of million N 16971 asked court in Chicago N 16971 rescind agreement with Valspar N 16972 accepts gifts in age V 16974 share costs of problems N 16975 paying insurance on land N 16975 take deduction on property V 16976 escape liability by showing V 16976 conducted investigation before accepting V 16978 reject gifts of property N 16980 represented % of giving N 16981 tightening rules on gifts N 16982 conducts assessment of property N 16990 have liability on hands V 16996 refused gift of site N 16998 closed door on donations V 16999 's help in mess V 17003 leased property from Conant V 17004 have empathy for situation V 17008 owes 400,000 in taxes V 17009 sued Goodwill for share V 17011 was indication of contamination N 17012 receive donations from liability V 17016 lectures charities about accepting V 17019 sells billions of dollars N 17019 sells billions in hardware V 17021 sunk money into venture V 17023 cover those by forging V 17023 shuffling millions of dollars N 17023 paying money to middlemen V 17023 disclose scam to authorities V 17025 featuring passel of details N 17025 revive interest in matter N 17025 revive interest on Hill V 17026 submitted document as part V 17026 arbitrating case between Travel N 17027 called step in inquiry N 17030 made filing to chamber V 17030 rebuts allegations by Travel N 17033 deceived Northrop by pitching V 17037 was member of Committee N 17038 proposed idea of selling N 17038 receive commission with a V 17041 offer distribution of fighters N 17043 perform activities for F-20 V 17044 procure expenses from budget V 17060 transfer million in fees N 17061 drafted claim for Express V 17068 handed million to Express V 17072 filed suit against Koreans V 17073 asking Chamber of Commerce N 17073 return 6,250,000 at rate V 17075 gain leverage in battle V 17076 filed request with FCC V 17076 eliminate competition in Dallas V 17078 moved features to News V 17080 named president of Inc. N 17081 named president after resigned V 17082 pursue sale of company N 17084 elect chairman at meeting V 17087 shocked markets by moving V 17087 become shareholder in bank V 17088 purchase stake in Grenfell N 17089 bring stake to % V 17090 awaiting Bank of England N 17090 purchase share in bank N 17090 purchase share for pence V 17090 bringing stake to % V 17091 acquire stake at pence V 17093 jumped pence to pence V 17094 barring change in situation N 17095 linking banks into group V 17097 held discussions with officials V 17099 be target for counterbidder V 17100 seeks clarification of intentions N 17102 be one of purchases N 17103 catapult Indosuez from position V 17104 is part of plan N 17104 building business across Europe V 17108 completed purchase in weeks V 17109 is bank with lot N 17111 is force in market V 17114 resembles runner in race N 17115 acquired giant for billion V 17115 kept pace with schedule V 17117 be setback in an V 17118 been study in motion N 17119 moved headquarters from Atlanta V 17119 shipping billions of cigarettes N 17121 soared % from period V 17124 are clouds on horizon V 17125 accumulate interest in notes V 17125 require payments for years V 17133 jumped % in months V 17138 soared % in months V 17141 following lead of competitors N 17148 got billion for units V 17149 owes another on loan V 17150 pay that with billion V 17153 adjust terms of sale N 17155 told RJR of decision N 17157 taking advantage of sheet N 17157 refinance some of debt N 17158 securing debt with some V 17162 meeting payments with ease V 17164 fix rates on billion N 17165 drive price to 100 V 17167 raise rates on debt V 17167 cost company for years V 17168 accrue interest in paper V 17170 diminish value in offering N 17174 be drain on returns V 17180 happens week to week N 17184 posted gain in profit V 17188 slipped % to yen V 17189 reflected sales to Nippon N 17190 rose % to yen V 17191 rose % to yen V 17191 gained % to yen V 17192 totaled lire for the V 17194 rang revenue of lire N 17195 address issue of change N 17195 appointed chairman of Idrocarburi N 17198 rose % on growth V 17205 launching it with fanfare V 17206 shunned the in favor V 17208 sold paper to Kalikow V 17208 posting losses of million N 17208 posting losses by estimates V 17210 assembled employees in newsroom V 17213 foresees year in 1990 V 17215 blamed demise of Post N 17217 been wave of newspapers N 17221 is number of layoffs N 17221 is number on side V 17223 attract coupons from companies V 17227 cut the to cents V 17229 losing lot of money N 17230 put resources into Monday V 17233 spin % of subsidiary N 17233 spin % in offering V 17234 file offer with the V 17241 recall version of drug N 17241 recall version from shelves V 17242 was setback for Bolar V 17243 recalling capsules from distributors V 17246 submitted Macrodantin as version V 17247 obtained sample of drug N 17247 obtained sample from lab V 17251 withdraw approval of Bolar N 17253 is equivalent of Macrodantin N 17255 offered raise in wages N 17255 offered workers over years V 17261 lodged claim for raise V 17261 bringing wages in line V 17262 made counter-demand to Ford V 17265 trade stocks in index N 17265 trade stocks in transaction V 17266 review rules over months V 17273 requires minimum of million N 17275 paying attention to report V 17277 set tone for market V 17281 been source of strength N 17281 been source for economy V 17282 show reaction to news V 17291 finished day at 86 V 17296 followed a at lists N 17296 followed a within weeks V 17301 get an next week V 17302 take step of borrowing N 17302 avoid default on obligations V 17315 gained 4 to 104 N 17318 narrowed point to 1.45 V 17325 rose 10 to 112 N 17327 yield % with rate V 17331 fell 0.10 to 99.95 V 17335 sell million of bonds N 17335 sell million at time V 17345 stopped Corp. from placing V 17345 placing institution under control V 17346 place associations under control V 17347 has petition in York V 17348 impose injunction on Office V 17352 place them in receivership V 17355 placing Bank into receivership V 17357 impair ability under 11 N 17357 recoup loses by putting V 17360 use law as shelter V 17361 has clients in situations V 17364 's conclusion of study N 17365 calls delays in filling N 17365 suggests creation of office N 17366 mounting backlogs of cases N 17368 sends nomination to Senate V 17370 send recommendations to House V 17371 accused Thornburgh of delaying N 17374 prevent lawbreakers from profitting V 17374 survived challenge in ruling V 17375 restricts freedom of speech N 17376 filed suit in 1986 V 17377 received payments from publisher V 17378 had effect on industry V 17380 is target of law N 17383 open office of firm N 17384 had lawyers in Union V 17386 have offices in countries V 17387 became firm with branch N 17392 joined firm of Phelan N 17392 joined firm as partner V 17394 fulfill responsibilities to family V 17399 staff it with people V 17400 SUES Amvest for infringement V 17401 is one of creations N 17401 filed a in court V 17402 violated copyrights at times V 17408 blame insistence on cut N 17408 blame insistence for disarray V 17409 lash Bush for timidity V 17410 threaten vetoes of bills N 17410 discuss veto of bill N 17411 show attention to concerns V 17413 becomes magnet for proposals V 17414 get raise in limit V 17414 attracts attempts at adding N 17414 adding measures to it V 17415 offer cut in Senate V 17417 allowing any of them N 17417 weaken argument against gains N 17418 TURNS coup to advantage V 17419 put Congress on defensive V 17419 play role in collapse V 17427 grill Gramm about fact V 17430 mean cutbacks in training V 17438 pursues settlement of case N 17442 plan series of marches N 17448 soliciting bids for Gaston V 17448 produce revenue of million N 17452 supplies rod to AT&T V 17455 ordered pullback from trading N 17456 showed signs of retreating N 17456 become liability for Street V 17459 be trader on Exchange V 17466 cut firms from getting V 17466 getting any of business N 17469 manages billion in funds N 17471 undermined trust in fairness N 17472 join Kemper in avoiding V 17478 owns firm in Philadelphia V 17480 drafting letter to clients V 17481 doing arbitrage for clients V 17482 ceased form of trading N 17482 ceased form for account V 17483 is contributor to market N 17483 reducing confidence in market V 17485 is practitioner of forms N 17486 bring liquidity to market V 17487 do arbitrage for itself V 17490 recommend curbs on access N 17490 add volatility to markets V 17492 do arbitrage for itself V 17497 suffered an during plunge V 17500 caused splits within firms V 17501 defend use of arbitrage N 17502 is arbitrager on Board N 17502 trading shares in strategy V 17505 is bit of conflict N 17505 is bit between trading V 17506 's split at Lynch V 17507 does trading for clients V 17507 have responsibility to them V 17510 made week by Kemper V 17511 value relationships with those V 17512 cut firms from getting V 17512 getting any of insurance N 17512 has interests in firms V 17516 revised it in May V 17516 complete it by 30 V 17517 involves relicensing for facilities V 17522 is part of Times N 17523 rose % of expectations N 17526 is bellwether of profitability N 17530 finished pence at 10.97 V 17531 anticipated earnings in plastics V 17535 rose 7 to pence V 17536 slid 5 to 142 V 17541 rose points to 35714.85 V 17543 attributed sentiment to stability V 17547 advanced yen to yen V 17548 advanced 40 to 2,230 V 17550 gained 120 to 1,940 V 17550 surged 260 to 3,450 V 17550 gained 110 to 1,940 V 17552 advanced 24 to 735 V 17555 has holdings in companies V 17557 announced issue of shares N 17560 was marks at 657 V 17562 closed books for year V 17563 made profits in months V 17565 are opportunities at levels V 17566 staged rally before holidays V 17567 gained 1.5 to 321.5 V 17567 acquire Internationale in France N 17567 slipped 0.5 to 246 V 17573 named Cohen as president V 17575 owns % of Inc. N 17575 run marketing at studio V 17578 named co-presidents of group N 17579 is unit of Inc N 17580 joining Revlon in 1986 V 17580 held number of posts N 17581 was president of venture N 17582 sell movies via service V 17582 enabled subscribers with recorders N 17583 fined it in connection V 17583 shutting plant during testing V 17585 questioned safety of plant N 17588 advise it on alternatives V 17590 launched plans over year V 17590 blamed difficulties on collapse V 17591 was filing in decade N 17592 sought protection in 1982 V 17592 sold it in 1988 V 17594 operates flights to cities V 17596 elected director of utility N 17598 acquire Inc. for 2.55 V 17600 signed letter of intent N 17600 signed letter for acquisition V 17603 pay Corp. of Angeles N 17604 complements business with outlets N 17605 posted loss of million N 17608 reflected decline in sales N 17609 has interests in defense N 17611 reduce force by % V 17615 hired executive as head V 17616 named Hamilton to post V 17617 been president of office N 17618 left agency in June V 17620 faces task in reviving V 17621 yanked million from office V 17621 following loss of the V 17625 is one of outposts N 17628 won praise for some V 17629 hired Lesser from Marschalk V 17630 needs kick from outside N 17631 be clash between Ogilvy V 17633 creates ads for clients V 17634 is part of agenda N 17635 want infusion of attitude N 17635 communicating advantages of client N 17637 playing football in halls V 17639 is one of agencies N 17642 accepted job after discussions V 17642 taken approach with acquisition V 17643 been combination of Lesser N 17647 are pockets of brilliance N 17649 try hand at work V 17650 do work on project N 17652 had string of wins N 17660 reduce exposure to vagaries N 17664 pushed oil to cents V 17670 attacked tugboat near terminal V 17672 pay attention to reports V 17673 refused access to Valdez N 17675 ended yesterday at cents V 17689 regard that as sign V 17692 are producers of metals N 17693 create interest in metals N 17698 violated support at 1.19 V 17700 surrounding negotiations on strike N 17703 be buyer at levels V 17707 sold tons in London V 17711 hedging cocoa with sales V 17714 taking advantage of prices N 17716 put Electronic on block V 17717 concentrate resources on businesses V 17718 has sales of million N 17719 received inquiries over months V 17720 run business under management V 17726 advancing % in year V 17733 is flag for shorts V 17737 increase stake to % V 17746 runs Investors in Lee V 17746 is cup of tea N 17751 is recipe for death N 17754 be area for shorting V 17755 shorted shares of company N 17758 taking life in hands V 17761 has % of revenue N 17776 nearing agreement with creditors V 17776 restructuring billion of debt N 17777 is one of countries N 17777 buy some of loans N 17777 buy some under initiative V 17781 were signs of breakthrough N 17782 buy billion of debt N 17782 buy billion at discount V 17784 pay interest on loans V 17785 rose billion to billion V 17786 rose million to billion V 17786 rose billion to billion V 17786 fell million to billion V 17788 adding money to balances V 17794 draw link between rate V 17795 handles cases for seamen V 17795 provided records for research V 17796 compared deaths between 1973 V 17797 was cause of death N 17797 was cause in % V 17802 ANNOUNCED cuts of arms N 17803 reduce weapons in Sea V 17803 including scrapping of submarines N 17803 including scrapping by 1991 V 17806 liberalizing system of prices N 17807 curtail bases in Europe V 17813 considered talks on demands V 17814 halt protests for changes N 17817 provided technology to Pretoria V 17818 reached accord with Committee V 17818 involve U.S. in plots V 17820 extended privileges to Hungary V 17820 honored pledge of restructuring N 17821 denying credits to nations V 17823 put emphasis on treatment N 17824 urged residents of cities N 17824 expressing concern over health N 17830 answer questions about mismanagement N 17831 invoking right against self-incrimination N 17833 ruled talks with Nicaragua N 17834 traded fire across line V 17835 arrange meeting of lawmakers N 17835 choose head of state N 17836 introduced motion in Islamabad V 17839 entering month in Beijing V 17841 declared law amid protests V 17842 elected lawyer as commissioner V 17842 announced retirement in March V 17845 were darlings of investors N 17845 were darlings in 1960s V 17847 drew income from properties V 17851 paid % of profits N 17851 paid % to shareholders V 17857 posted profit of million N 17858 had earnings of cents N 17858 had earnings in quarter V 17859 reported loss of million N 17869 sell business to Italy V 17876 posted losses in operations V 17877 dimming outlook for quarter N 17878 marking salvo in battle V 17883 ordered pullback from trading N 17883 ordered pullback amid mounting V 17884 offering services to clients V 17885 review regulation of market N 17888 close markets in crisis V 17894 form venture with steelmaker N 17894 modernize part of division N 17895 hold auction of securities N 17895 hold auction next week V 17896 buy time for Congress V 17897 granted increase of % N 17900 boost stake in conglomerate N 17900 boost stake to % V 17901 surprised markets by moving V 17901 become shareholder in bank N 17908 prevent suitor from gaining V 17908 gaining control of company N 17908 gaining control without approval V 17910 leaves possibility of acquisition N 17911 buy shares at % V 17911 acquired % of Hunter N 17912 made offer for shares V 17915 has interest of % N 17916 pending confirmation at meeting V 17917 approve reclassification of X N 17922 put emphasis on treatment N 17923 is part of a N 17924 made changes to plan N 17926 contains funds for package N 17933 measures level of money N 17936 launched attack on cultivation V 17937 executed warrants in raids V 17941 represents % of marijuana N 17942 sending waves through an V 17944 rushed statement in House V 17946 slid % against mark V 17953 links currencies in Community N 17958 played such with advisers V 17960 be agreement between minister N 17963 supported entry into EMS N 17964 counter suspicion of mechanism N 17970 liberalized restrictions on controls N 17972 are view of government N 17976 stated support for Lawson V 17979 is result of approach N 17981 prefer message from government N 17981 prefer message on strategies V 17984 set level for pound V 17985 adding confusion to situation V 17986 question strategy of having N 17990 say things about Monieson V 17991 ban him from industry V 17993 was one of friends N 17994 become the in memory V 17995 was president under Monieson V 17997 initiated trades without numbers V 17997 kept ones for themselves V 17997 stuck customers with losers V 18002 shows fallacy of self-regulation N 18004 overcome conflicts of interest N 18007 counsel avoidance of appearance N 18009 recused himself from case V 18010 had relationship with Brian V 18014 is victim of celebrity N 18019 approve sale to Indosuez V 18020 divulge details of probe N 18021 become incident between U.S. N 18023 wears clothes of trader N 18023 are those of professor N 18024 remind him of fortune N 18027 played host to princes V 18028 mention interest in racing N 18029 was reader of Form N 18029 joining father at track V 18030 bet ponies with friend V 18030 become partner in GNP V 18033 led him into trading V 18033 commissioned program on demand N 18034 trading futures at Merc V 18035 formed GNP in 1973 V 18037 held fascination for Monieson V 18038 fined 10,000 for taking V 18038 taking positions beyond limits V 18040 likening fine to ticket V 18049 had profits of 62,372.95 N 18050 had losses of 20.988.12 N 18050 had losses for months V 18051 lost all of the N 18052 lost 3,000 of the N 18056 reflecting woes of lenders N 18057 reported loss of million N 18058 reported income of 523,000 N 18059 reported loss of million N 18060 take a in quarter V 18061 Barring declines in values N 18061 expect rates of loans N 18062 taking write-downs of million N 18062 taking write-downs in months V 18062 address disposal of assets N 18063 is % after charges V 18066 restore ratio to compliance V 18066 reach agreement with regulators V 18071 reduced million in assets N 18075 added million to reserve V 18079 pursuing strategies with respect V 18079 minimizing losses to company N 18080 reported loss of million N 18081 foster recycling of plastics N 18082 attacked program as ploy V 18086 educate youngsters about recycling V 18086 is step toward environment N 18087 be step for McDonald N 18088 include % of restaurants N 18092 growing amounts of trash N 18094 increasing use of plastics N 18097 mail containers to headquarters V 18099 causing headaches for companies V 18100 been factor in introduction V 18105 deduct 1,000 on return V 18106 escape taxes on all V 18108 is reason for concern N 18110 taking step of shrinking N 18112 substracting borrowing from household V 18113 's plenty of that N 18114 offering rewards for putting V 18114 putting money in IRA V 18114 widen deficit by an V 18116 widen deficits in future V 18119 concede issue to Democrats V 18120 unveil proposal of year N 18122 put 2,000 into IRA V 18122 deduct sum from income V 18124 was shifts of savings N 18129 give people for savings V 18130 restricted break to couples V 18131 including interest on contributions N 18136 Comparing proposals on table N 18137 saves 2,000 in IRA V 18137 cut bill by 175 V 18140 give deduction for depositing V 18140 depositing 2,000 in IRA V 18143 overcomes bias against savings N 18144 owed money to Service V 18144 put money in IRA V 18145 putting money in IRAs V 18145 deferring tax on interest N 18146 made deposits in 1987 V 18154 allow people with IRAs N 18154 shift money to ones V 18154 pay tax at rates V 18155 raise billion for Treasury V 18156 allowing buildup on contributions N 18156 cost Treasury in run V 18159 is echo of promise N 18159 finance themselves through growth V 18162 rejected offer by Jones N 18163 produce changes in the V 18167 disclosed opening of negotiations N 18167 disclosed opening in filing V 18168 followed effort by Telerate N 18168 attacking offer in editions V 18169 submitted ad to Journal V 18177 bought positions in stock N 18177 announced offer on 21 V 18178 acquire ownership of Telerate N 18181 owns % of Telerate N 18182 reflects premium for purchase N 18183 paying 20 for Telerate V 18185 bludgeon way through process V 18189 squeeze shareholders of Telerate N 18189 squeeze shareholders at price V 18192 are employees of Telerate N 18194 run it in Times V 18195 offering 19 for Telerate V 18202 paid 28.75 for block V 18203 represented premium of % N 18205 buys time for Congress V 18205 hold auction of securities N 18205 hold auction next week V 18207 enacted limit by midnight V 18207 suspend sales of securities N 18211 use bill as vehicle V 18211 using bill as vehicle V 18212 become game of chicken N 18214 attach tax to legislation V 18227 become ritual between administration V 18228 keep U.S. from defaulting V 18228 creates controversy in Congress V 18229 amend bill with legislation V 18229 's bill for president N 18231 see measure as opportunity V 18233 charged Exchange with discriminating V 18234 affect number of people N 18235 steering customers toward policies V 18237 raise rates for business V 18237 denying coverage in Farmers V 18238 's discrimination in book V 18239 hold hearing on matter V 18240 is unit of PLC N 18245 acquire stake in unit V 18246 create sort of common N 18248 gain access to products N 18250 posted profit of francs N 18250 posted profit in 1988 V 18252 reported profit of francs N 18252 reported profit after payments V 18256 had change in earnings V 18258 compares profit with estimate V 18258 have forecasts in days V 18266 expand production at Barberton V 18266 increase capacity by % V 18269 drop objections to offer N 18269 acquire Inc. for dollars V 18269 reaching agreement with manufacturer V 18270 reached week between university V 18270 fund research in Canada V 18271 sell company to concern V 18271 broken agreement by recommending V 18271 recommending offer to shareholders V 18272 heard week by Court V 18273 block directors from recommending V 18273 recommending offer to shareholders V 18274 favoring bid over another V 18275 add benefits to Canada V 18277 offering million for Connaught V 18278 offer benefit to Canada V 18279 is advantage to university N 18279 is advantage to university N 18282 increased program to shares V 18285 gave welcome to auction V 18285 lift spirits of market N 18286 received bids for bonds V 18287 accepted billion of tenders N 18287 accepted billion at yield V 18289 reflects number of bids N 18290 was response to security V 18293 showed interest in buying N 18295 bought amounts of bonds N 18299 buy billion of bonds N 18300 identified buyer as Inc. V 18300 purchased bonds on behalf V 18303 are buyers for bonds V 18304 jumped point on bid V 18307 repackaging them as securities V 18308 separating portion of bond N 18308 separating portion from portion V 18310 pay interest until maturity V 18312 bought share of bonds N 18314 had demand from investors V 18315 paid attention to comments V 18316 discern clues about course N 18316 discern clues from remarks V 18317 eliminating inflation within years V 18319 considering amount of supply N 18320 Including billion of bonds N 18320 sold billion in securities N 18321 scrutinizing report on product N 18332 issued million of notes N 18345 yielding % to assumption V 18352 set pricing for million N 18353 stimulate savings by residents V 18355 had bid for million V 18361 rose 0.12 to 100.05 V 18361 rose 0.05 to 97.75 V 18362 rose 15 to 112 V 18362 rose 1 to 98 V 18364 acquire rest of Holler N 18364 held stake for years V 18365 represent takeover since 1980 V 18366 's sign of consolidation N 18367 buy insurance from carriers V 18368 develop presence in Europe N 18370 maintain virility as broker N 18371 establishing presence in market N 18372 do business in Europe V 18374 receive number of shares N 18375 serve them in Paris V 18378 won contract for modifications N 18379 modify helicopter to configuration V 18380 given extension on contract N 18381 increase production of devices N 18381 increase production on scale V 18384 expand production of disks N 18384 expand production to sheets V 18385 raise production at plant V 18387 raised % to cents V 18387 raised 24 to stock N 18388 noted confidence in strength N 18389 rose % in quarter V 18389 reflecting growth in operations N 18391 increased % to million V 18394 rose % to billion V 18395 included gain of million N 18396 attributed performance to increases V 18397 represent % of revenues N 18399 increase capacity of plant N 18400 fell 1.625 to 108.625 V 18405 acquire 588,300 of shares N 18405 acquire 588,300 under circumstances V 18408 jumped % to million V 18409 had earnings of million N 18410 expects revenue in quarter N 18411 reflect dividend in 1989 V 18412 attributed increase to growth V 18415 Call office in Worth N 18417 negotiating contract to boot V 18418 landed job on Street N 18419 become addition to ranks N 18419 earning way as lobbyists V 18421 become rite of passage N 18421 become rite at time V 18427 Given penchant for writing N 18427 published guide to art N 18428 is protocol to it V 18433 is schedule of engagements N 18436 reclaim reputation as one N 18437 are mementos of days N 18438 frequents shelters for homeless N 18438 devotes a of time N 18441 developed passion during ordeal V 18443 introduced him as master V 18446 launched careers at pulpit V 18449 win chunk of royalties N 18452 been opportunity for growth N 18462 was life after Congress N 18462 questioned propriety of investment N 18478 lost contract for jeans N 18480 hit it in Hollywood V 18485 burnishing involvement in affair N 18494 had sex with page V 18495 lost seat in 1980 V 18495 soliciting sex from boy N 18495 regained footing as lawyer N 18499 win confirmation as secretary N 18502 offers environment for officials N 18505 quit job as aide V 18509 are source of solace N 18511 pulls scabs off knees V 18514 received letter from master V 18515 auction it at Sotheby V 18517 opposed actions as embargo N 18518 join OAS in hopes V 18518 be counterweight to U.S. N 18521 attending celebration of democracy N 18522 has role in hemisphere V 18525 be partner for U.S. V 18526 voted % of time N 18528 follow lead in OAS N 18529 see Canada as power V 18530 promote peace within Americas V 18530 find settlement of crisis N 18533 contain violence to degree V 18534 have plenty of violence N 18537 based appeal on puns V 18540 is portrayal of demise N 18547 are property of comedies N 18547 link phenomenon to category V 18549 buy Co. of Viroqua N 18551 exchange shares of stock N 18552 serves lines in Wisconsin V 18554 reflecting pickup of activity N 18557 enhance trading of stock N 18561 has sales of million N 18563 recorded decline in August N 18564 was decline in months N 18566 rose % in August V 18566 following months of declines N 18567 fell % in August V 18568 has share in H. V 18570 develop guidelines for lubricants V 18570 offer services in cleaning N 18571 supplying lubricants in Poland V 18572 provide details of costs N 18573 grew % from year V 18574 raised dividend to 1.20 V 18574 increase payout to shareholders N 18574 increase payout by million V 18576 lowers value of earnings N 18580 increase rewards to shareholders N 18581 entered position in April V 18582 owns % of Pont N 18583 post profit of million N 18584 announced plans for split N 18585 rose 2.50 in yesterday V 18587 Leading gains for Pont V 18590 holds % at time V 18590 growing uses for pigment N 18590 kept it in supply V 18593 increasing sales in quarter V 18595 posted earnings for quarter V 18597 called prices in markets N 18599 increased % to billion V 18600 paid 14 to holders V 18606 auction dollars of bonds N 18608 buy B.V. for million V 18609 gain control over Kabel N 18610 adding argument to arsenal V 18610 adding changes under way N 18611 linking changes in East N 18611 linking changes to need V 18611 speed changes in West N 18614 told Parliament in Strasbourg V 18614 reinforce cohesion of Community N 18615 write treaty for EC V 18616 channel money to East V 18617 integrating Europeans with Europeans V 18617 is task of Europeans N 18617 is task despite interest V 18620 implies changes in policies N 18621 be division of labor N 18623 is exporter of capital N 18624 announced plan for Poland N 18628 force them in return V 18629 throw money at Europe V 18638 raise risks with them V 18640 be message from Moscow N 18640 's deal on offer V 18643 make progress toward reforms N 18644 signed letter of intent N 18644 buy company for million V 18646 requires approval of shareholders N 18648 adopted plan at meeting V 18649 pending ratification by holders N 18651 buy shares at % V 18652 posted income of dollars N 18653 had loss of million N 18655 have value of million N 18656 perform work for Service V 18658 had revenue of billion N 18659 buy Co. for million V 18665 form ties with organized N 18666 secure orders from concerns V 18668 received orders from activities V 18669 named officer of Corp. N 18670 reaches age of 65 N 18671 is president of Trust N 18671 is president in charge N 18672 is one of banks N 18672 faced competition from firms N 18674 welcomes competition in businesses N 18675 broadens base of opportunity N 18678 serve customers with deposits N 18687 be drag on earnings N 18688 has ties to company V 18689 was trustee until 1974 V 18692 takes responsibility for group N 18696 increasing board to 22 V 18696 is part of office N 18698 earned million in quarter V 18706 meet demand for computers N 18706 made it into summer V 18707 reporting loss for quarter N 18709 reported backlog of orders N 18710 indicates demand for computers N 18710 faces competition from Corp. N 18712 named officer of concern N 18714 was officer of Equifax N 18714 retain position as president N 18716 acquire assets in transaction V 18717 acquire assets for combination V 18724 been one of maninstays N 18726 wields power at company V 18732 limit damage to ties N 18733 prepares package of sanctions N 18735 sent signal to Washington V 18735 met Deng in Beijing V 18736 made statements to me V 18742 took part in demonstrations N 18743 publish list of those N 18744 arranged aid for families V 18745 transmitted conversations to House V 18747 convey statements to Bush V 18748 attributes that to fact V 18752 Given statements to people N 18753 step campaign of arrests N 18756 publish identities of those N 18761 hashing agreement for legislation N 18770 stimulate growth of cells N 18774 giving injections of EPO N 18774 giving injections to patients V 18774 store units of blood N 18775 receiving injections about month V 18777 indicated number of cells N 18778 donated average of units N 18779 was % per donor V 18779 representing number of hospitals N 18782 succeeding Nixon as president V 18787 sought form of pensions N 18787 sought form for the V 18789 used Plan as model V 18792 naming it after Cohen V 18795 widened coverage to people V 18796 caused explosion of promotions N 18797 reduced number of people N 18799 announced devaluation of the N 18799 curb market for currency N 18806 opened country to trade V 18807 exchange dollar for rubles V 18809 sell them at mark-up V 18810 costs 2,000 in West V 18813 pay farmers in currency V 18815 is part of drive N 18816 took bankers by surprise V 18818 have effect on businesses V 18818 hold auction of currency N 18822 provide currency for auction V 18822 using lot of it N 18822 finance imports of goods N 18823 sell currencies at rate V 18823 mop some of rubles N 18823 mop some at time V 18824 demand payment in currency N 18824 demand payment from visitors V 18825 cause difficulties for people V 18826 made use of restrictions N 18826 get taste of life N 18827 change rubles into dollars V 18831 manage all of needs N 18832 lost contract with Kodak N 18832 lost contract to Corp V 18833 entered negotiations with Digital N 18833 manage all of needs N 18836 is setback to IBM V 18837 provide communications to corporations V 18838 disclose value of contract N 18839 be subcontractors on project V 18840 get vendor for service V 18842 is anniversary of System N 18845 allow branch of bank N 18848 were members of Board N 18849 drop both from board V 18851 had deal of power N 18853 introduced bill in Congress V 18853 put secretary on board V 18855 putting comptroller on board V 18859 takes interest in matters N 18859 takes interest of course V 18860 taking interest in matters N 18862 coordinate regulation of markets N 18863 made pitch for job V 18864 has plenty of responsibilities N 18864 has plenty in times V 18869 deserves lot of emphasis N 18871 included inflation in history N 18874 have hope of success N 18874 needs help from Fed N 18877 offsetting purchases of marks N 18880 has impact on values N 18881 see impact on dollar N 18885 manage rates to level V 18885 diverting policies from roles V 18887 been week of events N 18889 handled it in capital V 18891 influence outcome of events N 18892 leave commentary in wake V 18893 building station at Krasnoyarsk V 18894 has delegates in Congress V 18896 put administration in pair V 18897 views changes in Europe N 18900 give lot of space N 18900 give lot to appearance V 18902 puts tab at million V 18903 did night on Nightline V 18908 Selling presidency for mess V 18908 is devaluation from norm N 18908 is reflection of disintegration N 18913 was disease in 1906 V 18914 is law against it V 18920 Consider dissonance between speech N 18921 violated norms of behavior N 18921 violated norms in Afghanistan V 18923 given hearings in press V 18924 is key to disease N 18925 hold anyone in life N 18925 hold anyone to standard V 18926 offer version of refrain N 18929 enlisting it in service V 18929 play games about activities N 18930 told Apple in interview V 18932 is defense at all N 18932 is defense for ethos V 18934 is symbol for States V 18937 acquire all of shares N 18938 seeking offers from bidders V 18939 mail offer to shareholders V 18939 reimburse maximum of million N 18939 reimburse them for expenses V 18940 solicit bids for company V 18941 tender holdings to offer V 18942 holds half through shares V 18942 hold % of equity N 18948 acquire % of Cineplex N 18948 acquire % for 17.50 V 18949 vote shares for years V 18949 consolidating control of company N 18951 indicate source of financing N 18951 buy complex in City N 18954 give breakdown between financing N 18961 boost standing among groups V 18962 replace chlorofluorocarbons by 1995 V 18963 reduce production of product N 18963 reduce production by % V 18964 invest marks in plant V 18966 produce tons of CFCs N 18966 produce tons in factories V 18968 study impact of plastics N 18969 elected president of concern N 18971 are units of Corp. N 18972 market line of water N 18972 market line in West V 18973 marks time since Prohibition V 18973 marks entry into market N 18973 generated billion in sales N 18974 become one of companies N 18978 package it in bottles V 18980 gave thumbs-down to proposal V 18982 told committee of parliament N 18983 curbing subsidies within years V 18983 eliminating subsidies within years V 18986 is basis for negotiation N 18988 seeking reductions in protection N 18991 made allowances for nations V 18992 need help in meantime V 18995 ease transition to trade N 18996 converting supports into tariffs V 18997 raise tariffs on products N 18997 experience volume of imports N 19002 acquire one of businesses N 19005 had revenue of million N 19007 provide services for customers V 19008 posted sales of million N 19009 sold unit in Europe N 19009 sold unit for million V 19011 give expertise in workstation N 19012 cast judges in role V 19013 deserve attention than have N 19014 is biography of founder N 19015 bequeathed copyrights on writings N 19015 bequeathed copyrights to church V 19015 licensed them to Publications V 19017 permits quotation for purposes N 19018 denied injunction on ground N 19018 make claim within time V 19019 written book of criticism N 19022 outweighed interests of owner N 19024 proving points about subject N 19025 created presumption against use N 19029 outweigh sanctity of copyright N 19030 is bar to issuance N 19036 are components of use N 19040 ignore sources of information N 19042 impose restrictions on use V 19044 gain access to materials N 19044 deny use of quotations N 19045 understand requirements of scholarship N 19051 strikes blow against enterprise N 19052 is blow against scholarship N 19053 wrote series of articles N 19053 wrote series for Yorker V 19055 brought suit against Malcolm V 19057 decided case for Malcolm V 19059 are interpretations of remarks N 19061 have obligation under Amendment V 19061 safeguard freedom of press N 19061 is concomitant of press N 19062 described himself as analyst V 19064 's me against rest V 19064 cited remark as warrant V 19066 describing himself as gigolo V 19068 was interpretation of description N 19070 were two of series N 19074 is rule of journalism N 19076 reduce value of journalism N 19083 named president of Inc. N 19086 speak volumes about state V 19088 be pig in case V 19089 exposing conflicts in life N 19091 became rod for anxieties V 19093 reveal whereabouts of daughter N 19106 is undercurrent of race N 19107 attended some of schools N 19111 bashing District of government N 19115 passed Congress with speed V 19115 awaiting ruling by court N 19118 is lawyer in Washington N 19119 launch Satellite in 1990 V 19120 study effects of radiation N 19122 named chairman of group N 19124 named executive of group N 19126 announce successor to Crane N 19126 announce successor at date V 19127 acquire Inc. for million V 19130 characterized proposal as offer V 19130 pit group against another V 19131 rejected offer from group N 19131 acquire Arby for million V 19132 wrestle control of unit N 19132 wrestle control from Posner V 19133 is company for restaurants V 19135 allow operators with conflicts N 19135 refocus energies toward growth V 19136 fell % in quarter V 19140 reflecting performance of operations N 19141 represents interest in earnings N 19142 represents interest in profit N 19142 fell cents to 52.25 V 19143 is sign of times N 19143 is sign at both V 19143 are customer for side V 19144 reduce employment by people V 19151 attributed decline to costs V 19152 rose % in U.S. V 19159 was % of business N 19160 boost revenue to % V 19161 elected director of concern N 19161 expanding board to members V 19162 elected director of concern N 19168 complicate making for Yacos V 19172 including interest to creditors N 19175 receive million in payments N 19181 equal % of claims N 19182 owning % of company N 19185 change value of bids N 19186 values offer at billion V 19186 values plan at billion V 19188 delay settlement of plan N 19189 limit increases to % V 19193 proposed years of increases N 19198 get license from Commission V 19203 become officer of Inc. N 19204 is officer of unit N 19205 hold position of chairman N 19205 hold position until retirement V 19207 was day as chairman N 19214 illustrate stance as regulator N 19216 turning drop to advantage V 19216 further agenda for SEC N 19217 monitor activity by firms N 19217 track trades in market V 19220 encourages use of debt N 19220 wields influence on both V 19223 obtain majority on commission V 19224 skirted some of issues N 19225 stated position on bonds N 19226 see results of studies N 19227 kept wrap on names V 19228 continuing pursuit of trading N 19238 adorned office with photos V 19247 move change past Congress V 19249 aroused interest in Congress V 19250 raised issue at hearing V 19260 including exhibitions of engines N 19261 's showcase for country N 19268 insulate passengers from bumps V 19271 compares suspension to cheetah V 19271 equates parts to heart V 19272 touted system in car V 19273 introduce system on sedan V 19274 keeping suspension for use V 19279 drew interest from executives N 19280 shows engine in model V 19280 made debut in Japan V 19281 provides compromise between fuel-economy N 19290 has truck under nameplate N 19293 seats person in front V 19293 hold groceries in rear V 19300 play role of dummy N 19301 has exhibit in Tokyo N 19302 sponsoring display in years N 19302 includes wagon with panels N 19304 be part of mentality N 19304 explaining pilgrimage to Show N 19309 get feeling in car V 19309 get passion in car V 19309 get emotion in car V 19310 Regarding column on differences N 19310 save public from rhetoric V 19310 go hand in hand N 19310 go hand with process V 19311 raise revenue in term V 19317 acquired year in purchase V 19318 merged operations with those V 19318 is part of plan N 19319 estimate value of aircraft N 19320 estimated value of planes N 19321 have value of million N 19321 raising proceeds from sale N 19321 raising proceeds to billion V 19324 increase fleet of aircraft N 19324 increase fleet to 18 V 19324 add 747-400s by 1994 V 19326 disclose cost of overhaul N 19326 estimated it at million V 19327 see this as exercise V 19328 streamlining fleet in bid V 19330 take delivery of aircraft N 19332 announced appointments at Ltd N 19334 is director at Ltd N 19337 join Barclay from Ltd. V 19340 fueled fires with attacks V 19341 has workers in district V 19342 favor program for airlines V 19344 endorse bill by Neal N 19345 eliminating inflation within years V 19347 increase scrutiny of Fed N 19348 played reports of tension N 19349 are issues of tactics N 19352 putting economy into recession V 19352 be loss of output N 19356 reduce rate by point V 19358 given chance of passage N 19359 add secretary to committee V 19361 subject Fed to perspective V 19364 signed contract with Vila N 19365 marks entry into market N 19365 bolster sales of products N 19367 signals return as celebrity N 19368 protested some of endorsements N 19369 became one of programs N 19370 doing endorsements for Centers V 19376 building fence around affections V 19377 makes spokesman for campaigns N 19379 involves series of books N 19383 elected director of company N 19384 is officer of Inc. N 19385 speed removal of chemicals N 19387 welcome part of proposal N 19388 give weight to considerations V 19389 condone use of chemical N 19389 is anathema to community N 19390 announce series of principles N 19391 give Agency with aim V 19393 accelerate removal of pesticides N 19393 gained impetus during scare V 19394 remove Alar from shelves V 19396 causes cancer in animals V 19399 pull it from marketplace V 19402 set levels for residues V 19404 permit use of pesticides N 19405 took break from gyrations N 19405 took break with prices V 19406 lost points to 2653.28 V 19410 regains semblance of stability N 19412 paid attention to comments N 19412 extract clues about course N 19413 lower rates before end V 19414 awaiting release of estimate N 19415 have effect on markets V 19420 were 784 to 700 N 19426 discussed image of athletics N 19426 discussed image for audience V 19429 reflected agreement with conclusions N 19430 identified himself as director V 19434 be integrity of schools N 19436 be reading for president V 19437 bought way to respectability N 19438 was the in 1987 V 19438 receive penalty for violations V 19439 Given headlines about University N 19440 brought bribe to school V 19443 Paying players at SMU N 19444 involved director about everybody N 19445 expresses outrage to Clements V 19451 gets grades as reporter V 19452 received 4,000 to 5,000 N 19452 received 4,000 for tickets V 19453 are references to liaisons N 19455 produces smoke than sofa N 19455 concerning use of steroids N 19457 escaped notice of coaches N 19460 bear responsibility for conduct N 19460 bear responsibility in aftermath V 19461 issued information about standing N 19462 were responses of people N 19465 paid million in taxes N 19466 dogged maker for taxes V 19466 settle dispute in court V 19468 owe taxes to Massachusetts V 19468 explain change of heart N 19470 was subject of article N 19473 pay % of profits N 19473 conducts variety of activities N 19474 shake doldrums in business N 19474 rearrange merchandise in all N 19474 rearrange merchandise in months V 19477 stock assortment of magazines N 19480 kept pace with trends N 19481 reflects need by stores N 19481 expand base beyond worker V 19482 are number of people N 19485 targeting merchandise to customers V 19486 expanded selection in stores V 19486 added sandwiches in outlets V 19487 added displays to stores V 19488 see trend toward that V 19489 tested mix in stores V 19490 put scanners in stores V 19491 spend million on advertising V 19492 resolve dispute between Workers N 19493 settle strike by UMW N 19495 called strike in April V 19496 seeks changes in benefits N 19496 seeks changes among things V 19498 disclosed end of tie N 19498 forecast drop in sales N 19507 provide supplies of products N 19507 provide supplies to Medical V 19511 buy stock for cash V 19516 infuse cash into Delmed V 19517 receive rights to products N 19518 sell plant in Ogden N 19521 pouring gallons of water N 19521 pouring gallons into vaults V 19522 destroyed million in currency N 19522 caked million of coins N 19522 caked million with mud V 19524 reach agreement with government V 19527 is agent for coins V 19530 clean coins for cost V 19531 transporting money to Washington V 19532 gave work to Inc. V 19533 equaling 20,000 in pennies N 19533 pouring money into truck V 19537 pay total of 20,000 N 19544 's place like home N 19550 couched idea in packaging V 19551 give baby for adoption V 19554 be brats in therapy N 19555 exhausted aids to fertility N 19556 indicate longing for one N 19558 introducing parents to mother V 19560 ask this as Ohioan V 19569 doing cities in days V 19574 taking point of view N 19576 explores depth of emotion N 19579 understand instinct in way V 19579 requires appreciation of storytelling N 19580 proposed movie to producer V 19581 summarize pull of movie N 19584 expects sales from continuing N 19584 rise % through years V 19585 earned million on sales N 19590 is value of output N 19591 experiencing surge of growth N 19591 experiencing surge for time V 19592 achieve sales than goal V 19593 had order from utility V 19594 foresees need for boost N 19595 sell plants to producers V 19597 supply share of market N 19600 own % of facility N 19603 disclose size of gain N 19608 cut ties with businesses N 19612 asking recipients for comments V 19613 make decision on policy N 19617 shares royalties with researchers V 19617 disqualify itself from funds V 19620 conducted research at Institute V 19621 own stake in company V 19624 transfer technology off campuses V 19625 prevent scientists like Schimmel V 19626 transferring technology to marketplace V 19628 finance companies in businesses N 19631 had rights to technologies V 19634 invested 14 in Inc. V 19634 license technology for delivery N 19635 get license to technology N 19635 giving all of competitors N 19636 acquired rights to technology N 19639 have access to research N 19640 is both for start-up V 19642 oversees program as director V 19643 prevent escalation of problems N 19644 holding stock in Inc. N 19646 investigating abuse from researchers N 19646 holding stock in companies N 19648 be ideas for discussion N 19653 circulating memo among faculty V 19653 restrict contact with world N 19654 shunning contacts with investors N 19658 produced revival of America N 19664 is something in dramatization V 19667 play s in drama N 19672 made film about painter N 19674 is presentation in series N 19675 carry dialogue between men N 19677 hosts series about politics N 19679 kicks season with production V 19679 given twist by Gray V 19691 was trial of Stephenson N 19693 see footage in edition V 19694 speed management of chain N 19695 follows agreement by Corp. N 19695 sell chain to management V 19696 providing management with million V 19700 arose week in industry V 19703 speed sale of chain N 19704 frozen all of assets N 19706 need approval from judge N 19706 need approval for sale V 19706 need approval from judge N 19709 described filing as technicality V 19710 had revenue for year V 19713 buying stocks with half V 19714 was time since January N 19718 bought shares as part V 19722 puts broker at risk V 19722 buy stock in market V 19725 sent chill through market V 19727 produced return of % N 19727 produced return through quarters V 19729 played it with bills V 19734 signal return to stocks N 19736 driving price of stocks N 19756 includes members from company N 19763 filed suit in court V 19765 convert expenditures into dollars V 19767 convert dollars into currency V 19768 converts dollars into currency V 19768 lose interest from day V 19770 pay fee on amounts V 19771 has couple of weeks N 19775 buy acres of land N 19775 buy acres as site V 19776 buy Casino from Securities V 19780 bring shares to million V 19782 remodeling resort in Vegas N 19782 refurbishing aircraft of unit N 19782 acquire property for resort V 19784 seek financing through borrowings V 19788 include details about park N 19789 poured billion into funds V 19791 soared billion in week V 19795 posting rates since spring V 19796 get yields on funds N 19798 was % in week V 19799 boost yields in environment V 19799 extending maturities of investments N 19799 earn rates for period V 19801 anticipating declines in rates N 19803 reached % in April V 19810 did it with money V 19812 's strategy in market V 19812 have % of money N 19819 is problem for funds V 19819 use leverage at all V 19833 defend use of leverage N 19846 raised positions to levels V 19849 maintained cushion between costs N 19852 dumped Industries among others V 19852 raise position to % V 19860 occupy acres of space N 19862 flaunts ignorance of gardens N 19863 earned reputation in world N 19863 took gardens as subject V 19865 discuss garden for article V 19868 view this as landscape V 19869 view this as building V 19874 fit them into grid V 19874 making one of works N 19874 making one for wall V 19875 be network of masonry N 19879 put it in lecture V 19879 knowing difference between rhododendron N 19881 spend thousand on books V 19884 do versions of things N 19885 was problem with Gardens V 19886 afforded preview of creation N 19886 afforded preview in version V 19888 is love for plants N 19891 left room for plants N 19892 put capacity at people V 19893 was 50 by feet N 19896 requisitioned cones in heights V 19899 study book on tartans N 19904 demand skills of battalion N 19905 calling workers for maintenance V 19907 casting interiors into shade V 19908 decking walls in array V 19910 ran length of riverfront N 19911 decreed waterfall beside Hudson V 19912 passed resolution against Gardens N 19919 obstruct views of rooms N 19919 be ground for crime N 19920 be problems with safety N 19921 address questions of safety N 19924 preserving vision of artist N 19927 is time for Cuomo V 19928 take counsel from Robinson V 19928 had Bartlett in mind V 19928 applying designs to garden V 19930 read exerpts of exchange N 19930 Put Economy on Rails V 19930 read exerpts with interest V 19930 is one of areas N 19933 averaged % of currency N 19934 was bank with assets N 19934 collect claims against bank N 19938 keep lessons in mind V 19938 establish ruble as currency V 19939 make ruble into currency V 19939 leave reserves in bank V 19940 determining rights to payment N 19946 are guide to levels N 19976 halt trading at times V 19979 give markets in cases V 19980 slowing trading at times V 19982 pushing idea of breaker N 19982 pushing idea in hopes V 19982 curb turmoil in marketplace N 19988 close markets at times V 19989 worsen volatility in markets N 19991 offered support for provisions V 19992 provide information about loans N 19993 create problems for firms V 19994 report transactions on basis V 19996 sold 17 of centers N 19996 sold 17 to partnership V 19997 estimate value of transaction N 19997 estimate value at million V 19999 report decline in earnings N 19999 report decline for period V 20004 lease stores from developer V 20005 comprise total of feet N 20006 include locations in California N 20009 controls centers with feet N 20010 runs stores in facilities V 20011 sold one at time V 20015 says spokesman for company N 20015 has employees in area V 20020 deliver mail in office V 20025 spurred companies to action V 20027 is butt of jokes N 20028 put cuts across board N 20030 track number of companies N 20033 was one of the N 20034 pick them from room V 20034 change subscriptions to addresses V 20036 get packets of something N 20036 send two to people V 20041 see stand as sign V 20041 bring it on themselves V 20042 close themselves from mail V 20046 deliver mail to room V 20048 had effect on rates N 20049 created situation in place V 20055 is extension of campaign N 20058 reads quotes about model N 20063 run ads in magazines V 20064 illustrates reactions from man N 20064 given Chivas for Christmas V 20065 features shot of party N 20068 is blow to cut N 20068 had existence since beginning V 20069 introduced plan as amendment V 20069 authorizing aid for Poland N 20070 block maneuver on grounds V 20073 offer proposal on legislation V 20074 have backing by Republicans V 20076 lose buckets of revenue N 20076 lose buckets over run V 20078 shield appreciation on investments N 20079 is one of Democrats N 20079 giving treatment to gains V 20080 hearing kind of opposition N 20080 hearing kind during meetings V 20082 making advocates of cut N 20082 making advocates of cut N 20089 become battle between Bush N 20092 got benefit from differential V 20093 express support for proposal N 20095 asked week for discussions V 20099 secure passage of plan N 20099 making deal with Congress V 20099 put vote until date V 20102 found Chinese among people V 20102 bringing number of Chinese N 20102 bringing number to 1,642 V 20105 pending deportation to China N 20107 faces prison for theft V 20108 led her into temptation V 20109 showed disappearance of coins N 20109 been stock-taking since 1868 V 20113 resold them to institute V 20116 threatened attacks on Italians N 20118 taking countries to court V 20118 stop flights over homes N 20119 told ministry of action V 20122 suspended imports of mushrooms N 20123 testing food from Europe N 20123 testing food since accident V 20124 announced bans on imports V 20125 tap fields off coast N 20125 speed sinking into lagoon N 20126 made announcement about field N 20127 contains feet of gas-one-tenth N 20129 opposed idea of AGIP N 20132 stole fresco from church V 20134 has speed of hour N 20135 report earnings from operations N 20135 report earnings for quarter V 20136 includes gain of 100,000 N 20138 posted loss of 876,706 N 20140 Regarding article on battle N 20141 providing services to people V 20150 has contracts for provision N 20150 receives money through contributions V 20160 sell divisions to group V 20161 includes executives of divisions N 20165 erupt month on Strip V 20174 's example of effort N 20174 transform itself into resort V 20175 seen nothing like it N 20180 buy site for resort V 20181 swell figure to billion V 20182 put expenditures above billion V 20183 owns % of shares N 20183 attract generation of visitors N 20184 being part of it N 20185 increase supply of rooms N 20185 increase supply by 11,795 V 20189 play possibility of shortage N 20196 set war among hotel-casinos V 20197 become carnival with rooms V 20201 pouring millions of dollars N 20201 pouring millions into facelifts V 20204 financing expansion with cash V 20208 left billion with casinos V 20212 watching Kristin on slide V 20221 is place for pedestrians N 20221 choked traffic at intersection N 20221 choked traffic to lane V 20222 drive properties into bankruptcy V 20226 bought chunks of property N 20227 scouting market with eye V 20233 be pressure on occupancy N 20233 be pressure over year V 20234 squeeze profit from flow V 20239 bought hotel-casino from Kerkorian V 20247 become envy of competitors N 20247 become envy for ability V 20247 vacuum cash from pockets V 20248 lures them with rates V 20253 are answer for us V 20254 building complex in style V 20254 decreased number of rooms N 20258 's room for properties N 20261 was rollers with clocks V 20263 lose sight of that N 20267 return it with Objections V 20272 explained argument to corps V 20273 have provision in mind V 20275 made case on page V 20279 deprive President of power N 20282 get them in trouble V 20283 log communications with Members V 20284 prepare reports on contacts N 20285 be usurpation of power N 20286 use provision as test V 20289 raise Doctrine from the V 20290 vetoed this as violation V 20291 squelch discussions on broadcasts N 20294 's fault of Congress N 20295 is perception of people N 20297 restore discipline to budget V 20300 close bases in Hawaii N 20300 close bases in exchange V 20301 pulled million in bases N 20301 allowed million for bases N 20304 lost sense of discipline N 20307 owns % of equity N 20307 reduce stake to % V 20307 giving rest of stake N 20307 giving rest to bondholders V 20309 forgive lot of debt N 20309 forgive lot in exchange V 20309 taking stake in TV N 20312 interpreted move as desire V 20312 wash hands of TV N 20314 made billion of gains N 20317 exchange classes of bonds N 20318 give stake to bondholders V 20319 invest money in TV V 20321 defer payment of million N 20322 defer principal on bonds N 20327 feeling aftereffects of overbuilding N 20329 including facility in Falls N 20333 heads office of Inc. N 20334 turning properties to lenders V 20338 takes three to years N 20341 recreate it at home V 20342 build homes in Tokyo V 20343 dubbed Hills of Tokyo N 20344 offer houses on lots V 20350 want feeling of indestructibility N 20350 mention protection from damage N 20354 starting line in business N 20355 using river in names V 20366 sent tremors through hearts V 20368 buying building in Francisco N 20369 anticipates change in market N 20371 added panel on effects N 20375 picture people in outfits N 20376 is something for the N 20378 reducing risk of disease N 20379 puts revenue at billion V 20384 get break at Espre N 20385 sparks concern over import N 20386 investigates source of stones N 20396 raises million from funds V 20409 is part of trip N 20410 draws ear of Commission N 20411 losing listeners to channels V 20411 approaches 1990s with voice V 20412 have listener in Washington V 20413 hear day on plight V 20414 increase options for advertisers V 20421 celebrates anniversary with yearbook V 20421 featuring photos of employees N 20423 is salvo in outcry N 20423 is salvo with Kemper V 20424 causes swings in prices N 20424 increased chances for crashes N 20425 attacked trading as evil V 20426 backed months after crash N 20429 capture profits from discrepancies N 20432 do business with them V 20433 acknowledged dispute with firms N 20435 scares buyers of stock N 20436 changes level of market N 20438 do business with them V 20442 has problem with investors N 20447 is admission of problems N 20451 has impact on market V 20452 make statement with trading V 20453 mean hill of beans N 20468 is subsidiary of Corp N 20478 are 12,915,000 of certificates N 20480 are million of certificates N 20486 yield % to dates V 20486 become bonds until maturity V 20497 yield % at price V 20499 buy shares at premium V 20517 planning season in years N 20518 become thanks to campaign N 20519 checks orders from chains N 20521 sidestepped collapse after loan V 20523 doing business with chains V 20524 showing fashions for 1990 N 20526 be cause for celebration N 20531 make goods to stores V 20532 sell worth of clothes N 20533 buying fabric for clothes V 20535 ship anything to stores V 20538 study order before shipping V 20539 recommending lines of credit N 20542 want letters of credit N 20546 paying bills in manner V 20548 paying bills for merchandise N 20549 paid days after month N 20551 buying fabric for goods V 20552 pay bills at time V 20562 owes amount of money N 20563 asking them for letters V 20572 be part of problem N 20573 give it to underperformers V 20577 maintain lines with stores N 20579 posted drop in profit N 20580 be end of boom N 20581 see effect of erosion N 20582 follows industry for Consultants V 20583 report losses through quarter N 20586 including gain from retirement N 20587 dropped % to billion V 20588 rose cents to 17.375 V 20589 be the to slowdown N 20592 estimated earnings of cents N 20593 experienced drop in profit N 20597 following end of negotiations N 20598 dropped % to million V 20599 is venture with Corp N 20604 owns % of steelmaker N 20604 posted income for second-quarter N 20606 includes gains of million N 20613 made announcement at dedication V 20613 including some from Europe N 20615 dominate market for chips N 20616 makes bulk of DRAMs N 20622 cost million in mid-1970s V 20625 bear fruit until mid-1990s V 20628 shining light through mask V 20628 produce image on chip N 20628 produces image on film N 20634 outfit planes with System V 20635 informing pilots of aircraft N 20637 is unit of Inc. N 20638 is unit of Corp. N 20644 appointed executive of Provigo N 20651 was stock on Exchange N 20656 posted income of million N 20659 sell businesses as group V 20663 put buy-out of unit N 20666 was president of unit N 20668 lent support to dollar V 20671 is focus of bank N 20673 termed rate of % N 20674 throwing economy into recession V 20675 viewed comments as indication V 20675 ease policy in future V 20680 forecast continuation of trend N 20682 be pool of interest N 20682 provide base for dollar N 20683 offer evidence on growth N 20686 present picture of economy N 20690 acquired Co. from Association V 20691 sold million of shares N 20691 sold million for 7.125 V 20692 use million in proceeds N 20692 finance acquisition of Republic N 20693 increased stake in Insurance N 20693 increased stake to % V 20695 spread risk of policy N 20698 had sales in quarter N 20702 strengthened hands of groups N 20703 have power over transaction N 20706 have groups on strike V 20717 like ownership for employees V 20718 want form of control N 20719 opposed ownership in principle V 20722 draw blueprint for form N 20727 make idea of recapitalization N 20732 force ouster of board N 20732 force ouster through solicitation V 20734 told advisers before meeting V 20735 need help of machinists N 20739 soared % to record V 20739 bucking trend toward declining N 20740 attributed increase to traffic V 20741 posted income of million N 20742 rose % to billion V 20743 issued shares of stock N 20743 issued shares to Swissair V 20743 repurchased shares for use V 20748 jumped % to million V 20749 include payment from entity N 20751 included gain of million N 20752 rose % to million V 20753 posted earnings of million N 20754 rose % to million V 20755 transmitting edition to machines V 20758 named publisher of magazines N 20759 took control of Inc. N 20761 announced loss for quarter N 20762 reported earnings of million N 20765 owes growth in years N 20765 owes growth to portfolio V 20768 include write-down of securities N 20768 include write-down to the V 20769 added million to reserves V 20769 increasing reserves to million V 20772 divest investments by 1994 V 20773 adjust value of holdings N 20773 reflect declines in prices N 20773 held bonds as investments V 20774 sell bonds within years V 20774 value bonds at the V 20776 reflected million in losses N 20778 remains one of thrifts N 20779 announced results after close V 20783 holding bonds in subsidiaries V 20786 has value of million N 20788 has gains in portfolio N 20790 setting stage for war V 20794 means trouble for all N 20795 following policy of discounting N 20796 matching moves by rivals N 20796 matching moves on basis V 20797 announced plan at time V 20797 rose % to million V 20799 mean earnings for half N 20800 plunging shares in trading V 20802 fell 1.50 to 19.125 V 20803 characterized half of '80s N 20803 following trend with being N 20804 permit slowing in trend N 20804 support strategy for brands N 20807 is guy in bar N 20810 downplayed importance of announcement N 20810 called comparison between tiff N 20811 calls game for anyone N 20813 trimmed projection to 2.95 V 20814 is intensity of competition N 20816 sell assets to Coors V 20817 ceding share to Miller V 20820 fell points to 35442.40 V 20824 rose points to 35587.85 V 20825 ignoring volatility in stocks N 20829 lost yen to yen V 20831 reduce holdings in account N 20832 lost yen to yen V 20832 fell 150 to 4,290 V 20833 fell 40 to 1,520 V 20834 fell 40 to 2,680 V 20835 lost 70 to 2640 V 20838 lost 40 to 8,550 V 20841 ended points at 1751.9 V 20845 showed signs of stability N 20846 were those with operations N 20847 settled pence at 753 V 20848 closed 2.5 at 212.5 V 20851 boosted 21 to 715 V 20851 mount bid for maker N 20852 raised stake to % V 20857 fueled fears of crash N 20858 raised specter of strikes N 20859 increase costs for industry N 20863 plunged marks to marks V 20863 dropped 10.5 to 700 V 20863 slumped 9 to 435.5 V 20864 gave some of gains N 20865 plummeted 12 to 645 V 20867 unnerved investors in markets N 20874 made bid for control N 20875 owns % of Coates N 20877 give details of offer N 20878 override veto of legislation N 20878 renewing support of abortions N 20878 are victims of incest N 20881 make issue on bills N 20882 funding departments of Labor N 20883 fold bill into resolution V 20886 provide billion in funds N 20887 adopted bill on call V 20889 given importance of California N 20890 reflect benefit of loans N 20891 raises ceiling for Administration N 20891 raises ceiling to billion V 20894 prevent use of aid N 20897 was the in years N 20903 using issue for benefit V 20903 finds candidates on defensive V 20904 supported restrictions in past V 20907 addressing side of House N 20908 support him over victims V 20909 providing funds for station N 20909 providing funds in 1990 V 20910 gives Department of Development N 20910 facilitate refinancing of loans N 20911 earmarking funds for projects V 20912 acquired stake in S.A. N 20915 received stake in group N 20916 boosted capital to pesetas V 20917 win license for one N 20917 seeking opportunities in publishing N 20919 retain share in Zeta N 20921 carrying seal of approval N 20922 buy stocks in index N 20922 buy stocks in trade V 20924 gave approval to basket V 20925 approved product on Exchange N 20926 trade portfolios by computer V 20930 step attacks on trading N 20931 drawing business from forms V 20932 are attempt by Board N 20932 head exodus of business N 20939 having access to it N 20941 lists targets as plans V 20943 buy ESPs as makers V 20954 reported loss for quarter N 20954 negotiating extension of debt N 20958 fell % to million V 20959 approved acquisition of operator N 20960 reduced August from value V 20963 providing financing of acquisition N 20965 reported rise in income N 20965 reported rise on increase V 20967 holds equivalent of stake N 20970 acquire shares with view V 20973 assuming exercise of option N 20976 filed suits against Boesky V 20977 regarding distribution of million N 20982 provide restitution to thousands N 20982 claiming losses as result N 20988 remove partnership as defendants N 20989 represents Boesky in matter V 20992 set fund for plaintiffs N 20998 owed million by partnership V 21001 wins battle against the N 21002 processing request for documents N 21004 exhausting appeals of conviction N 21005 turned himself to authorities V 21007 destroy movement of 1960s N 21008 turn information on investigations N 21009 was result of practices N 21010 served two-thirds of sentence N 21011 handling case for FBI V 21012 reduce delays of suits N 21015 separate handling of suits N 21015 separate handling from ones V 21016 receive supervision by judges N 21020 take advantage of custom N 21020 require each of courts N 21020 speed handling of suits N 21020 reduce costs in cases N 21021 resemble those of projects N 21025 strengthens links to corporations N 21026 has stores in northeast V 21026 selling computers to banks V 21027 expected sales of million N 21028 operates stores in areas V 21030 managing scope of business N 21032 named president for group N 21033 named president of group N 21035 reported loss of million N 21036 surged % in period V 21040 end session at 19.62 V 21044 showing decrease in stocks N 21045 closing Port for time V 21046 show increase in inventories N 21047 left plenty of time N 21048 increased production to barrels V 21052 assumes slowdown in economies N 21057 removed some of pressure N 21064 is grain in pipeline V 21065 purchased tons of grain N 21069 buying them at prices V 21069 buying contracts at prices V 21071 buying bales for delivery V 21072 had effect on market N 21073 be the since year N 21074 characterized action as contest V 21074 buying cotton toward bottom V 21084 brought steadiness to market V 21085 deliver cocoa against contracts V 21086 has tons from agreement N 21087 bring cocoa to market V 21088 deliver cocoa against existing V 21089 named president of company N 21093 acquire operator of hospitals N 21093 took step toward completion N 21094 submitted bid for Medical N 21095 pay 26.50 for shares V 21096 assume billion in debt N 21098 submitted bids for company N 21103 anticipates completion of acquisition N 21110 seeks damages under law N 21113 has investments in market N 21113 reported loss of million N 21114 seek protection from lawsuits N 21116 named director of concern N 21118 increases size of board N 21118 increases size to members V 21119 serve remainder of term N 21121 issue rights to shareholders N 21122 buy shares of either N 21122 buy shares for price V 21125 closed yesterday at 43.50 V 21126 sell operations by end V 21128 raise total of francs N 21129 include sale of interest N 21130 entered venture in 1988 V 21130 acquiring stake from Beghin-Say V 21131 sell stake in affiliate N 21131 sell stake to unit V 21132 sell interest in A.T.B. N 21132 sell interest to unit V 21133 acquire % of unit N 21138 sold stake in offering V 21139 is company for units N 21140 fell % to million V 21141 rose % to million V 21142 continue production of F-14 N 21143 provide compromise for both V 21144 putting touches on package V 21147 stalling action on number N 21148 authorize billion for spending N 21148 reflecting erosion of support N 21150 hold spending on program N 21150 hold spending at level V 21153 provides parachute for Grumman V 21156 boasts core of support N 21157 earmark total of billion N 21157 earmark total for work V 21158 putting touches on compromise V 21158 give all of billion N 21159 require verification of capabilities N 21159 approves version of fleet N 21160 reported drop in income N 21160 citing losses in business N 21162 reflecting acquisition of Emery N 21167 kept trading at pace V 21168 recovered all of losses N 21168 recovered all by close V 21168 fell 5.94 to 2653.28 V 21171 gave performance than indexes N 21172 dropped 1.20 to 342.50 V 21172 was equivalent of setback N 21173 fell 1.16 to 320.94 V 21173 slid 0.53 to 189.52 V 21174 topped decliners by 784 V 21176 kept trading in check V 21181 announced plans for split N 21181 raised dividend by % V 21181 jumped 1 to 117 V 21183 provided lift to average N 21184 rose 3 to 43 V 21184 advanced 3 to 66 V 21184 rose 1 to 58 V 21184 gained 5 to 72 V 21184 added 3 to 44 V 21185 dropped 7 to 44 V 21187 plunged 3 to 38 V 21188 lowered projections for growth N 21189 fell 1 to 59 V 21191 was victim of sell-off N 21192 fell 3 to 12 V 21194 rallied 3 to 86 V 21195 gained 3 to 61 V 21195 advanced 7 to 64 V 21195 added 1 to 3 V 21197 holding talks with lenders N 21198 dropped 1 to 31 V 21198 following postponement of offering N 21198 complete takeover of company N 21200 claim credit for buying N 21203 rose 3 to 1 V 21203 rose 1 to 66 V 21203 posting earnings for quarter N 21204 benefited Tuesday from program V 21204 gave some of gains N 21205 went 1 to 130 V 21205 fell 1 to 37 V 21205 dropped 1 to 25 V 21206 preserved advance in session N 21206 added 1 to 103 V 21207 gained 1 to 72 V 21208 shift funds from Kellogg V 21209 dropped 3 to 73 V 21210 advanced 3 to 10 V 21211 purchase million of stock N 21211 purchase million from trust V 21211 handles payments to victims N 21212 gained 1 to 30 V 21212 starting negotiations with parties N 21214 rose 1 to 43 V 21215 offered 43.50 for % V 21216 went 3 to 4 V 21217 boosted offer by million V 21218 boosted dividend by % V 21218 added 7 to 49 V 21220 fell 0.44 to 375.92 V 21222 lost 1 to 14 V 21223 receive bids for all N 21223 reviewing offers for properties N 21228 increasing spending by % V 21232 raising spending to billion V 21234 topped outlays by billion V 21242 avoid source of friction N 21242 limit exports to U.S N 21247 is goal of % N 21255 increased output by % V 21258 replacing facilities with lines V 21262 outlast expansion in 1960s N 21263 spend money on goods V 21267 had Saturday in years V 21269 cut costs during slump V 21269 capturing share of market N 21272 put share above profitability V 21272 let addition to capacity N 21275 expanding share to % V 21277 increase productivity with facilities V 21280 expand share of market N 21280 expand share to % V 21280 spending million on plant V 21281 increasing capacity by cars V 21281 spending million on expansion V 21282 double sales to cars V 21283 are replacements for imports N 21284 gaining share with beer V 21284 pouring billion into facilities V 21287 spending million on plants V 21291 doubling production in plant V 21300 be those with products N 21301 reflecting addition to reserves N 21302 meet standards from Act N 21303 had profit of million N 21304 rose cents to 4.25 V 21305 feature reduction in positions N 21306 winding units within months V 21307 originating leases at subsidiary V 21309 reported decline in income N 21310 fell % to million V 21311 rose % to million V 21313 was result of competition N 21315 declared dividend of cents N 21320 granting access to drug N 21325 had access to AZT N 21325 approved usage for adults N 21326 relieve dementia in children N 21326 lacks approval for use N 21327 cover cost of 6,400 N 21328 stricken children under 13 N 21328 carry infection without symptoms V 21332 contracted virus through transfusion V 21332 transmitted it to two V 21334 bears infection without symptoms V 21338 getting AZT to children V 21339 approve treatments for uses V 21340 charged maker with inertia V 21342 reverse ravages of dementia N 21348 releasing AZT for children V 21351 is co-founder of Foundation N 21353 follow course as AZT N 21354 is aspect of syndrome N 21355 giving piece of childhood N 21357 declared dividend of warrant N 21360 purchase share of stock N 21360 purchase share at 5.50 V 21362 issue 243,677 of warrants N 21362 issue 243,677 to holders V 21364 launch vehicle for trading N 21365 buy stocks in trade V 21368 executing trades through firms V 21369 winning support from Democrats N 21372 had profit in steel V 21372 be end of boom N 21373 posted loss of million N 21374 setting stage for war V 21375 received bid from suitor V 21375 valued proposal at billion V 21381 receive offer for Bloomingdale N 21381 receive offer from Store V 21383 hold key to bid N 21387 rejected proposal by Bush N 21396 announced devaluation of ruble N 21396 curb market for currency N 21398 called strikes over series N 21400 override veto of bill N 21401 overturn veto of legislation N 21401 renewing support of abortions N 21401 are victims of incest N 21402 considered illustration of limits N 21403 was part of measure N 21403 funding departments of Health N 21404 get consent for abortion N 21404 banning abortions after week V 21405 granting access to drug N 21406 had access to drug N 21407 relieve dementia in children N 21411 continue production of jet N 21413 speeding removal of chemicals N 21415 hold talks with groups N 21419 review changes to proposal N 21422 concluding meeting in Portugal N 21423 indicated challenge to order N 21423 subpoena papers for use V 21424 raised question about office N 21425 continue embargo against Nicaragua N 21425 poses threat to security N 21427 engulfed slum in Paulo N 21428 take action against developers N 21429 ruled dialogue between groups N 21430 ending visit to Austria N 21430 including travel to West N 21433 assumed responsibilities of president N 21434 been president since 1985 V 21434 succeeded father in job V 21436 reduce influence of Coors N 21444 had million in sales N 21445 fell % to 11,586 V 21446 dropped % to 37,820 V 21448 defines failure as company V 21450 underscoring lack of stress N 21452 report increase in bankruptcies N 21454 report failures for months N 21454 grew % to 2,046 V 21455 fueled bankruptcies in sector N 21458 received expressions of interest N 21464 valued Bloomingdale at billion V 21465 aligned himself with Inc. V 21468 make bid before middle V 21471 acquired year by Campeau V 21472 does billion in sales N 21473 is condition of efforts N 21473 arrange million in financing N 21473 arrange million for Campeau V 21474 supervising refinancing of Campeau N 21479 disclose information about condition N 21481 extend offer for Corp. N 21482 keep offer for concern N 21482 keep offer for days V 21484 obtained commitments from banks V 21488 buy shares of LIN N 21488 buy shares for 125 V 21488 owning % of LIN N 21489 merge businesses with Corp V 21490 rose cents to 109.25 V 21493 sent proposal to Airlines V 21494 were part of offer N 21495 offer share of stock N 21500 citing improvement in market N 21500 jumped % from period V 21501 reported income of million N 21509 climbed cents to 20.375 V 21510 climbed % to million V 21511 reflect increase in shares N 21513 get shoulder from buyers V 21516 controls % of TW N 21516 sell billion of bonds N 21516 finance acquisition of shares N 21518 completed show for purpose N 21524 buy anything on expectation V 21524 manages fund of Services N 21534 putting face on it V 21540 borrow term from Coniston V 21542 cover charges on securities N 21544 ignore charge of depreciation N 21545 envisions expenses of million N 21553 ignore million in interest N 21566 Includes results of Inc. N 21567 Includes write-down of costs N 21571 discomfit Order of Builders N 21578 separating herself from document V 21579 inflict punishment on population V 21580 is consensus on sanctions N 21583 's one against 48 N 21597 gained 1.19 to 462.89 V 21598 heads trading at PaineWebber N 21599 played catch-up in areas V 21600 is average for year N 21603 rose 2.09 to 454.86 V 21604 easing 0.12 to 452.23 V 21612 's lot of uncertainty N 21612 cause lot of swings N 21613 rose 7 to 43 V 21613 added 1 to 16 V 21614 dropped 1 to 46 V 21617 advanced 1 to 56 V 21617 jumped 2 to 29 V 21617 gained 1 to 16 V 21617 rose 5 to 14 V 21618 jumped 3 to 11 V 21619 raised stake in maker N 21619 raised stake to % V 21621 make bid for all N 21622 rose 1 to 109 V 21623 added 1 to 40 V 21625 gained 5 to 13 V 21627 rose 13 to 2 V 21630 plunged 1 to 8 V 21632 dropped 5 to 15 V 21634 fell 3 to 15 V 21637 had change in earnings N 21639 compares profit with estimate V 21642 wanted million for rights V 21644 was player at table N 21656 run losses of dollars N 21657 outbid CBS for contracts V 21665 make profit on it V 21666 emphasizes benefits of press N 21670 find themselves with lot V 21671 bought stake in company N 21674 bid total of billion N 21677 facing consequences of aggressiveness N 21682 shape years of sports N 21683 take it from CBS V 21687 bid million for Games V 21692 began career in law V 21692 put years at Inc. V 21696 pay million for Games V 21696 shell million for years V 21703 scribbled figure on slip V 21703 sealed it in envelope V 21703 gave it to negotiators V 21705 bid million for rights V 21707 notch place for CBS N 21708 's fix for image N 21709 sees sports as way V 21709 grab millions of viewers N 21709 tell them about shows V 21710 start season against championships V 21712 triggers losses at CBS N 21712 see games on air V 21717 set rates for stations N 21719 await season in 1990 N 21722 use sports as platform V 21722 carries guarantee of success N 21724 is guarantee of anything N 21730 aged 18 to 49 N 21736 add % to % N 21736 add % to profits V 21738 dropped CBS for NBC V 21740 avoid losses on coverage N 21747 pay average of million N 21747 expect losses on baseball N 21750 get lock on games N 21753 be sponsors in baseball N 21761 aired hours of events N 21761 raise ratings from 1984 V 21762 add hours to load V 21764 pay CBS to hours V 21768 claimed place as ratings-getter N 21769 is situation of acting N 21769 making judgments about worth N 21774 charge % for ads V 21776 predict jumps of % N 21777 ordering episodes of series N 21777 fill weeks of time N 21779 cost million to million N 21780 cushion losses with million V 21783 make money on all V 21788 Place order through catalog V 21788 be one on line N 21790 peruse ads for recorders N 21802 's demand for systems N 21805 record orders between traders N 21806 taped some of desks N 21808 monitors conversations between brokers N 21821 requiring consent to tapings N 21821 requiring consent in cases V 21822 explaining laws on eavesdropping N 21830 achieving standards of service N 21831 evaluate performance during months N 21832 pull someone off phones V 21833 recognize right of employers N 21833 monitor employees for purposes V 21834 viewed monitoring as issue V 21839 is party to conversation N 21842 put labels in catalogs V 21842 informing customers of law N 21846 requiring tone on recorders V 21849 be toy for children N 21855 announced line of computers N 21856 extending line with boost V 21857 exploit weaknesses in networking N 21858 has share of market N 21862 gets revenue from mainframes V 21863 updating accounts at banks N 21871 cut estimate for year N 21872 raise estimate for 1991 N 21875 predicted demand for line N 21876 need power of mainframe N 21877 's market for machine N 21878 computerizing aspects of businesses N 21880 targets end of market N 21882 staked presence in market N 21883 shown signs of life N 21884 risen % to % N 21886 have backlog for quarter N 21888 spark sales by end V 21891 have problems in quarter V 21891 cut value of earnings N 21892 fall % to 3.57 V 21893 occupies space as systems N 21893 store data on cartridge V 21895 completed acquisition of H. N 21898 awarded division for services V 21900 attach tax to bill V 21901 stripping measure from bill V 21901 meet targets under act N 21902 be part of bill N 21906 stepped lobbying for cut N 21907 hold series of meetings N 21909 give leaders in Congress N 21909 give leaders in Congress N 21912 handled sales of products N 21913 permitted formation of arm N 21914 unveiled systems for communications N 21919 directs flow through systems N 21921 have capacity than models N 21922 are heart of line N 21925 predicted growth in demand N 21926 supply million of equipment N 21926 supply million over period V 21928 began month with crunch V 21928 deliver financing for buy-out N 21942 took floor for offices V 21947 accused one of witnesses N 21950 was criminal behind manipulation N 21950 knew nothing about it N 21951 obstructing investigation by Commission N 21952 were part of conspiracy N 21952 maintain prices of stocks N 21952 maintain prices at prices V 21961 framing Laff for crime V 21965 MONITORED payments to claimants N 21966 monitor payments to women N 21967 teaches evidence at University V 21967 was general in Department N 21967 was general until August V 21967 submitted resignation to Judge V 21968 overseeing reorganization of Co. N 21972 nominate successor to Saltzburg N 21974 brought Menell as partner V 21976 was counsel for committee N 21982 is counsel for Corp. N 21992 owns % of stock N 21993 buy stock for cash V 21995 issue shares to Fresenius V 21996 explore possibility of combination N 21998 supply products through Medical V 21999 exploring arrangements with USA N 22000 named director of company N 22001 acquire Inc. for million V 22003 is distributer of supplies N 22006 rose % to million V 22008 sold million of drug N 22010 fell cents in trading V 22011 slid % to million V 22012 climbed % to million V 22013 increasing % to % N 22017 's revenue from partnerships N 22019 faces competition in market N 22022 giving boost to earnings N 22025 posted loss of million N 22027 included gains on sale N 22037 fell % to million V 22041 purchased % of unit N 22042 paid million in cash N 22042 paid million for share V 22044 outlined terms of plan N 22045 receive warrants in company N 22046 reached agreement with committees N 22046 submit plan to court V 22047 has debt of million N 22054 have claims of million N 22059 complete reorganization by 1990 V 22060 sustained damage from earthquake N 22067 were all at % V 22068 auction million in maturity N 22070 is part of contract N 22070 develop five of satellites N 22075 discussing cooperation with Saab N 22077 start negotiations with automakers N 22078 reported decline in income N 22079 forecast blow to earnings N 22080 expects earnings in all N 22080 expects earnings for year V 22082 including million during quarter V 22085 has interests in parts V 22087 had loss from Hugo N 22088 report loss of million N 22089 increased reserves for accounts N 22091 settle suit with general N 22092 recorded charge of million N 22094 had earnings for months N 22096 discovered miles off coast N 22097 is operator of project N 22099 design plant in Kildare V 22104 authorized purchase of shares N 22108 completed sale of Co. N 22109 received million for pipeline V 22110 owned % of pipeline N 22112 rose % in September V 22115 estimate growth in September N 22115 put growth at 178.8 V 22116 was 178.5 in August V 22117 awarded contract by Corps V 22118 includes construction of walls N 22119 crack domination of market N 22119 chosen sites for operations N 22120 begin visits during weeks V 22123 mounted campaigns during summer V 22123 founded June by concerns V 22125 begin construction by end V 22136 filed lawsuit against Inc. V 22136 claiming infringement in element N 22137 display portions of fields N 22137 display portions on screen V 22137 see contents of field N 22138 design applications for computers N 22139 's one of programs N 22139 bode difficulties for Apple N 22140 is technology of HyperCard N 22142 infringe claims of patents N 22143 filed action in court V 22145 points gun in direction V 22145 forcing culture on Americans V 22147 manage Americans as Americans V 22150 place speakers in charge V 22157 doing business in Japan N 22163 rebut opinions of employees N 22166 motivate employees from another N 22167 accept imposition of way N 22167 is chauvinism of order N 22171 is explanation of policies N 22171 altering reasons for criticism N 22171 attack cause of problem N 22173 expects gain of % N 22175 climbed % to francs V 22177 expressed position on abortion N 22184 fund abortions for women V 22186 support funding for abortions N 22188 get president in trouble V 22190 regard him as ally V 22193 calls position on issue N 22193 done thing about prevention N 22196 convince activists of support V 22197 changed landscape of issue N 22203 have sympathy with arguments N 22206 miscalculated politics of issue N 22207 was one of changes N 22208 raise subject of abortion N 22209 amplify reasons behind stance N 22211 well-stated views on sides V 22212 expanding services for the N 22213 supporting funding for abortions N 22213 save life of mother N 22214 contrast himself with rival V 22217 have exceptions for incest N 22218 supporting funding for abortion N 22221 affirming support of cause N 22222 urged passage of amendment N 22224 dispatched Chief of Staff N 22225 restoring District of right N 22225 restoring funding to Fund V 22226 drum support for issues N 22227 urging efforts toward protection N 22228 avoided involvement in session N 22231 finds itself in cul V 22236 guaranteed rights as citizens N 22239 extends guarantees to sector V 22241 are guarantees of rights N 22243 consolidating control of operations N 22244 coordinate activities of subsidiaries N 22246 named president of Asia-Pacific N 22247 rose % to million V 22248 had net of million N 22250 had responses to results N 22256 jumped % to million V 22256 reflecting improvements in costs N 22257 gained share in U.S. N 22259 reduced levels at some N 22265 rose % to billion V 22268 reported earnings of million N 22270 handed reins to successor V 22275 raised stake to % V 22276 say nothing of one N 22277 representing % of sales N 22277 facing demand as competition N 22279 's baptism of fire N 22283 shattered agreement with Roderick N 22285 redeem series of notes N 22285 raised cost of bid N 22285 raised cost by 3 V 22286 strike friendship with interloper N 22295 force split of USX N 22296 Given weakness of market N 22297 selling stake in Inc. N 22298 eased some of pressure N 22299 greeting suppliers in York V 22299 inviting them to buffet V 22304 joining department of subsidiary N 22308 chart transition from Steel N 22310 distancing himself from boss V 22310 has office on floor N 22313 announced sale of reserves N 22314 was buddy of Hutchison N 22317 reported loss in years N 22319 disclosed rise in stake N 22320 leave USX with Marathon V 22321 find buyer at price V 22324 closed yesterday at 33.625 V 22324 giving value of billion N 22325 advocates sale of operations N 22326 saw steel as backbone V 22326 view it as business V 22327 turned steel into maker V 22334 lessen vulnerability to cycle N 22334 smooth flow of earnings N 22335 figure value of parts N 22336 sell steel at price V 22338 dish piece by piece N 22338 dish it in ventures V 22340 leave company with Marathon N 22350 learned presence under fire N 22356 's part of system N 22363 break talks with group N 22365 provided Department with list V 22366 satisfying precondition for dialogue N 22368 linking Fatah to acts V 22370 take view than theirs N 22371 present report to members V 22372 presented list to Brown V 22373 provided correspondent in Jerusalem N 22373 provided correspondent with documents V 22373 conducting terrorism from territories V 22374 seen copies of papers N 22375 have evidence of terrorism N 22376 press struggle against state V 22377 backing contention with accounts V 22379 bring talks between Israel N 22380 received letter from Minister N 22380 restating objection to negotiating N 22382 defines it as violence V 22384 including use of bombs N 22385 be offshoots of intifadah N 22389 maintain dialogue with PLO N 22390 accuse Israel of leaking V 22391 tracking session on Street N 22393 put Street in spotlight V 22396 ended day below levels V 22397 posted gains in trading N 22398 reflects uneasiness about dollar N 22399 proved excuse for market N 22399 drive currency in direction V 22403 sees break in trend N 22404 be beginning of phase N 22405 peg weakness to slowdown V 22408 Following dive in stocks N 22409 attribute surge to economy V 22410 is reflection of shift N 22412 push yen against mark V 22413 expect Bank of Japan N 22413 support currency on front V 22414 posted deficit in September V 22415 knocked unit to marks V 22415 recoup some of losses N 22420 had drop in profitability N 22421 is news for parent N 22422 managed income of million N 22423 break earnings of subsidiaries N 22424 had profit of million N 22424 had profit for quarter V 22426 downgraded rating of subsidiary N 22428 exposed company to degree V 22431 cited concerns over exposure N 22432 discovered evidence of errors N 22433 overstated profits by million V 22435 booking revenue in effort V 22436 attributed controversy to errors N 22436 accused Shearson of conducting N 22439 exported average of barrels N 22439 exported average at average V 22440 gained % at average N 22446 underscore difficulties in implementing N 22449 abandon approach in face V 22450 blames showing on environment V 22452 have effect on revenue N 22454 faces challenge on eve V 22457 drum business without appearing V 22458 highlighting deals in stores V 22458 defer charges on items N 22460 offering goods for % V 22461 lowering prices throughout stores V 22462 has sale at price V 22464 blanketed airwaves with ads V 22465 cited prices as reason V 22466 mentioned brands in September V 22469 see improvement in areas N 22470 rose % to billion V 22472 fell % to million V 22472 inflicted loss in history N 22473 reduced net by million V 22474 absorb hit in quarter V 22475 have impact on Allstate N 22476 reflecting improvements in businesses N 22481 left companies with inventories V 22487 affecting value of homes N 22490 try solutions in experiments N 22493 Develop agreements with options N 22496 aggravate problem of stock N 22496 are T at balance N 22496 say 80,000 on house N 22503 grew % on revenue N 22503 earning reviews from analysts N 22507 follows company for Inc V 22508 expected growth of % N 22512 cited restructuring for growth V 22513 experience sledding in services V 22513 surrounding treatment of gains N 22514 reported million before tax N 22514 reported million from operations V 22515 increased reserves by million V 22515 set million for claims V 22519 dipped % to billion V 22519 leaping % in August V 22520 expected decline after rise V 22521 showing layoffs in manufacturing N 22528 factor all of surge N 22533 was surge in demand N 22536 have drop-off in orders N 22537 posting drop after decline V 22538 be news for economy N 22539 showing declines after surge V 22541 are marks about that N 22546 finance buy-back with cash V 22549 affect earnings in term V 22550 said Lidgerwood of Corp N 22551 average number of shares N 22553 increase earnings after 1990 V 22554 establishes floor for price N 22555 is comfort to those N 22557 acquire shares in market V 22559 purchased million of them N 22561 following quarters of performance N 22562 acquire subscribers from Partnership V 22565 has subscribers around nation N 22565 reported revenue of million N 22567 named director of supplier N 22567 increasing board to members V 22568 delayed offering of stock N 22570 set date for offering N 22570 disclose timetable for offering N 22572 addresses one of shortcomings N 22576 making attempt at improvements N 22577 develop discipline in children V 22578 elected directors of firm N 22581 are guide to levels N 22612 increased number of directors N 22614 reach class among nations N 22615 converted itself into mode V 22616 joined 10,000 per club N 22619 given lack of resources N 22619 create value through exports V 22619 buy food with surplus V 22623 given party for years V 22631 is ministry of provisions N 22632 protecting health of people N 22633 is cartel for teachers N 22634 spreads concrete throughout country V 22636 sprinkle money around world V 22647 be waste of time N 22649 is tax on activities N 22650 makes sense in Japan N 22653 favored tax like tax N 22661 caused scandals in Japan V 22671 reform government from role V 22673 put Japan among countries V 22674 representing preference for government N 22675 take place before June V 22676 giving power to Socialists V 22676 cleansing it of sins N 22677 cause wave of shocks N 22679 is director of Co. N 22680 was day at beach N 22682 collecting shells at Malibu V 22683 combing beach with brushes V 22689 carried stones from interior V 22692 picked diamond from sand V 22693 lost Namibia to Africa V 22695 remained one of places N 22697 is oasis of residents N 22698 roam streets at night V 22699 create mist like rag N 22702 boasts attractions besides diamonds N 22704 is course with trap V 22707 freeing country from control V 22707 extend life for years V 22709 probe sand like anteaters V 22709 shuttling sand to plants V 22711 receives maintainence against waves N 22714 tossed them like driftwood V 22723 wrapped diamonds in knot V 22724 poked hole in heel N 22725 stashed stones in bottom V 22726 made it past X-rays V 22727 raise taxes for recovery V 22729 adding penny to tax V 22730 been hanging in family N 22733 prompted proposals for increases N 22739 burdens you with charges V 22742 give answers to inquiries V 22743 cover charges for checks N 22744 gets replacement for check N 22744 reimburse taxpayer for charge V 22748 spent 800,000 on home V 22751 deduct interest on loan V 22752 adding land to residence V 22753 let seller in case N 22753 treat this as sale V 22755 get waivers like those N 22756 offers relief for concerns N 22759 change 44,400 in bills N 22759 change 44,400 into bills V 22761 BE MIDDLEMAN for gifts N 22764 set fund for students N 22765 omit fees from income V 22769 assign income to another V 22769 enjoyed fruits of labor N 22770 take deduction for them N 22773 have plenty of complaints N 22774 put damper on euphoria N 22776 providing information on circulation N 22780 lack breakdowns of audiences N 22781 are value in lives N 22782 lambasted industry for something V 22783 target interests of readers N 22787 criticized practice of stacking N 22787 stacking ads at front V 22789 spend fortune on information V 22790 take positions in back N 22799 matching quarter in quarter V 22801 upgraded firm to list V 22801 see signs of improvement N 22803 had loss of million N 22804 posted net on revenue N 22807 is group with members N 22810 bill themselves as experts V 22812 eyeing portfolios of corporations N 22813 pursue ventures in Europe N 22815 are alternatives for developers N 22818 forming ventures with funds N 22821 using alliances with institutions N 22822 lend you in market V 22822 sell pieces off it N 22823 finding diamonds in the N 22825 put lot of time N 22827 take manager to lunch V 22828 construct hotels within mile V 22829 hailed project as indication V 22830 hosted ceremony for partners N 22831 called step in evolution N 22840 have share in hotels N 22842 has interest in hotel N 22842 be hotels in Union N 22846 repatriate profits from venture N 22847 charge 140 for each V 22847 accept payment in currencies N 22848 is outgrowth of arrangements N 22849 justifies investment in hotels N 22851 takes responsibility for group N 22852 been president of group N 22853 named president with responsibility N 22859 tumble Delicious from top V 22862 proffered one to Eve V 22864 has sugar than apple N 22865 spreading word about them N 22867 packed pecks of apples N 22867 packed pecks over years V 22869 shaking establishment to roots V 22870 plays role of Appleseed N 22875 been apple of eye N 22881 was blow to growers N 22885 lose 50,000 to 60,000 N 22885 lose 50,000 on it V 22890 keep worm from apple V 22890 protect themselves against vagaries V 22891 ripped lot of Delicious N 22891 grafted trees with shoots V 22892 got kinds of apples N 22893 picking one off tree N 22898 expanding space for apples V 22900 is product of engineering N 22900 fostered it at orchard V 22901 bred dozens of strains N 22904 are delicacy than commodity N 22905 eat apples per capita N 22906 is potatoes in U.S. V 22909 sell Fujis to buyers V 22910 is importer of Fujis N 22912 exceed supply for Fujis N 22912 exceed supply for 10 V 22914 striking blow against perversion V 22915 was connection between consumer N 22918 satisfy demands of storage N 22922 growing it in areas V 22925 elongate apples for appeal V 22927 sees shift in values N 22930 increased number of shares N 22930 increased number to million V 22932 filed suit against firms V 22932 charging them with responsibility V 22936 filed suit against Virginia N 22936 filed suit in court V 22936 absolving them of liability N 22939 invested cash for agencies V 22940 encouraged members of office N 22952 has billion in obligations N 22952 considered one of programs N 22954 backs billion in guarantees N 22957 improve operation of markets N 22958 is conflict between providing N 22958 maintaining integrity of program N 22960 increasing rates over time V 22962 improve operation of markets N 22963 inhibited supply of credit N 22968 provides loans to student V 22970 make money by putting V 22970 putting loan in bank V 22971 allow loans for student N 22971 allow loans at rates V 22975 Given structure of programs N 22977 provide assistance to borrowers V 22978 go way toward reducing N 22979 had success in reducing N 22979 reducing rates in Program N 22981 has record of collecting N 22983 deny credit to defaulters V 22984 be devices for programs N 22985 Record costs of programs N 22985 Record costs in budget V 22987 create liabilities for government N 22988 converting loan to guarantee V 22988 ensure flow of resources N 22990 is value of costs N 22991 selling loans to owners V 22993 reflected costs of lending N 22993 convert programs to guarantees V 22995 is hallmark of credit N 22996 paying loans by issuing V 22996 converting guarantees into loans V 22998 keep loans on books V 22999 carried dollars of loans N 22999 carried dollars at value V 23002 permit identification of emerging N 23002 provide information for decisions N 23004 provide role for government N 23005 be proposition for taxpayers V 23006 is professor of economics N 23008 been treasurer of Corp N 23009 casting veto as test V 23010 kill items in bill N 23010 kill items without having V 23014 made week by President V 23015 is initiative on agenda N 23015 faces issues at moment V 23016 named president of maker N 23018 break impasse in round N 23019 reduce host of subsidies N 23020 allow flexibility in determining N 23021 ease transition to trade N 23021 ease transition by allowing V 23021 convert barriers into tariffs V 23022 gain support from partners V 23023 allay objections to plan N 23023 eliminating barriers by year V 23024 submitting proposal in Geneva V 23024 spur members of Agreement N 23024 reach agreement on rules N 23025 urges play in trade N 23026 provide room for maneuver N 23027 use combination of quotas N 23027 cushion farmers from competition V 23028 raise tariffs on products N 23028 experience volume of imports N 23029 proposing elimination of subsidies N 23031 prevent countries from using V 23034 encourage competition among exporting N 23034 including incentives for exporters N 23035 posted rise in income N 23038 increased % to billion V 23042 was rise for products N 23043 win share in markets N 23044 established itself as brand V 23045 expand line in Japan V 23046 shift sales for products N 23046 shift sales to quarter V 23048 slowing growth in U.S. N 23049 boosting sales for oils N 23051 post net of 4.20 N 23051 post net on basis V 23054 be stewardship of Artzt N 23054 becomes chairman in January V 23055 have hopes for tenure N 23056 earn 6 in years V 23057 keep promise of Amendment N 23058 increase number of blacks N 23059 create number of districts N 23060 create districts in municipalities V 23061 win share of offices N 23061 achieve preclearance by Department N 23061 survive scrutiny of courts N 23067 is fix for problem N 23068 promoting commonality of interests N 23071 reapportion districts after census V 23072 been policy in City N 23072 been policy since 1970 V 23072 expand reach beyond states V 23073 split neighborhood of Jews N 23073 split neighborhood into districts V 23074 revise system of government N 23074 expanding Council to 51 V 23076 maximize number of districts N 23077 make % of population N 23077 hold % of seats N 23078 accord opportunity for representation N 23080 win seats on council N 23082 illustrates consequences of carving N 23082 carving districts for minorities N 23084 brought suit in 1987 V 23084 abandon voting for Council N 23092 refuted argument in one V 23094 serve interests of all N 23097 discarded belief in ability N 23097 govern ourselves as people V 23098 is scholar at Center N 23099 distributed guidelines for Attorneys N 23101 seek TRO upon filing V 23102 have impact on parties V 23102 do business with defendants V 23104 control use of TROs N 23106 submit TRO for review V 23107 preserve assets for forfeiture V 23108 seeking approval of TRO N 23109 consider severity of offense N 23110 disrupt activities of defendant N 23112 paid price for incentives N 23117 had results in days V 23121 prevent inventories from ballooning V 23122 have supply of cars N 23122 have supply at end V 23125 depleted market of scavengers V 23128 hit rocks in mid-October V 23130 saw sales of cars N 23133 opened plant in Georgetown V 23141 include trades by 13 N 23145 expects fall in price N 23146 represents number of shares N 23146 be barometer for stocks N 23153 headed list since May V 23158 buying stock in company N 23158 shorting stock of the N 23161 showed drop in interest N 23162 compiles data in categories N 23162 are part of system N 23164 represents days of volume N 23165 represent days of volume N 23166 was change of shares N 23167 was weight of army N 23170 reaching settlement with Palestinians N 23174 share power with all V 23175 choosing one of options N 23176 become force in system N 23187 added 1 to 11 V 23190 dealt blow to market V 23193 do trading for account V 23193 execute orders for clients N 23196 keep supplies of stocks N 23196 keep supplies on hand V 23197 buy shares from sellers V 23201 exacerbating fall in prices N 23203 's sense in sticking N 23204 added 1 to 4 N 23204 added 1 on shares V 23205 make offer for the N 23205 acquires majority of shares N 23205 acquires majority in offering V 23208 posted earnings of cents N 23209 reduced income by cents V 23210 provides coverage to properties V 23214 reporting net of cents N 23215 included million in costs N 23219 make modifications to hardware N 23223 be violation of treaty N 23225 taken measures of openness N 23225 taken measures by giving V 23225 inspect site as vans N 23225 are violations of treaty N 23226 constituted violation of ABM. N 23227 receive confirmation of violation N 23227 receive confirmation from Soviets V 23234 open itself to examination V 23237 caused number of deaths N 23240 believe claims of Congressmen N 23242 sold something on notion V 23242 were result of showers N 23244 take word for it N 23251 buy million of stock N 23251 buy million from Trust V 23251 reduce number of shares N 23252 made offer within weeks V 23253 purchase stock at price V 23257 compensate victims of diseases N 23257 owns million of shares N 23258 owns half of shares N 23260 receive billion over life V 23262 settled 15,000 of claims N 23264 requested changes in covenants N 23267 has right of refusal N 23268 raised bid for Co. N 23268 raised bid to billion V 23269 be round of bids N 23272 expect resolution until 1990 V 23273 pay billion in cash N 23273 pay billion to creditors V 23273 assume million in bonds N 23276 Assuming operation of plant N 23278 promised State of Hampshire N 23279 conditioned limits on operations N 23283 leave shareholders with stake V 23284 buying company for billion V 23284 require increases of % N 23286 is Co. with bid N 23288 fill barns across land N 23290 be bet than money N 23291 holds future in hands V 23292 produce profit in system V 23293 be buffer between public N 23294 knocked bosses off balance V 23300 broke ranks with Communists N 23301 took office in September V 23308 wrestles hog into trunk V 23311 makes money on hogs V 23319 runs handful through fingers V 23319 counts pile of zlotys N 23321 buy feed from state V 23326 have plenty at home V 23332 supply it with tractors V 23337 are lot of them N 23338 were source of shame N 23339 are objects of envy N 23344 cover % of land N 23346 is pillar of nation N 23350 owns acres in scraps N 23351 grows potatoes for hens N 23352 eyeing ground with look V 23355 supply area with water V 23361 brought electricity to village V 23361 piped water from reservoir V 23370 had lot of money N 23375 produce % of pork N 23376 sets chairs in sun V 23378 is lot of waste N 23380 shoving peasants onto farms N 23384 hold end of bargain N 23386 hands them in exchange V 23395 is % below average N 23396 milk cows by hand V 23406 makes machinery for plant N 23407 wants it from West V 23408 lays it on line V 23429 taking power in deal N 23431 named man as minister V 23432 forming parties for farmers N 23433 make case against Solidarity N 23433 drive millions from land V 23438 farms acres in Grabowiec N 23439 mounting steps of building N 23439 mounting steps on visit V 23449 turn everything in week V 23463 am man for Solidarity N 23469 provide billion in funds N 23470 reflected support for assistance N 23470 aggravate pressures under law V 23471 waive Gramm-Rudman for purposes V 23471 widen deficit by billion V 23472 forced confrontation between leadership N 23474 put him in position V 23476 hide costs from people V 23478 bringing total for disasters N 23478 bringing total to billion V 23482 accompanied package of assistance N 23485 puts state at odds V 23486 offer credit in cases V 23488 speed approval before deadline V 23489 lifting ceiling on loans N 23489 lifting ceiling to billion V 23490 representing reduction from year N 23490 making cuts from requests N 23491 continue work in Oman N 23497 listing million in projects N 23498 illustrated mix of power N 23498 illustrated mix than Inouye V 23500 gave ground to Inouye V 23500 assist Tribe in state N 23501 is one of the N 23502 chairs committee on Affairs N 23502 move 400,000 from Force V 23505 slash size of force N 23509 be round of cuts N 23509 reduced force by % V 23510 signal beginning of reductions N 23512 take place over period V 23512 involve termination of employees N 23513 be announcement of program N 23514 reporting earnings as result N 23516 had loss in quarter V 23522 gain control over law N 23524 holds incentives for abuse N 23526 violated notions of fairness N 23527 avoid replay of tactics N 23529 limit forfeitures of assets N 23531 cited criticism in press N 23536 wanted million in forfeiture N 23536 wanted million for fraud V 23542 salvage RICO for criminals V 23544 made point at conference V 23546 limit cases by plaintiffs N 23546 limit cases for damages V 23549 guarantee end to injustices N 23551 seen Mondays at time N 23551 is candidate for cancellation N 23557 suffers drop-off from Brown N 23561 included family in cast V 23563 making adjustments on show N 23564 keep balance between office N 23567 prompted party among investors N 23568 sought safety amid growing V 23569 forced dollar against currencies V 23570 got boost from sell-off N 23572 shifting assets from stocks V 23574 recovered some of losses N 23574 recovered some in day V 23581 build case for rates N 23584 recovered some of losses N 23591 visiting venues in future V 23592 sentenced Bakker to years V 23592 tucked Gabor for days V 23593 recanted fear of lesbians N 23598 has backlog of billion N 23599 rekindle talks between company N 23599 rejected offer of % N 23600 sprinkled her with flats V 23603 sing music with all V 23608 has TB after all N 23610 has set of drapes N 23614 has need unlike Violetta V 23615 smother herself in drape V 23616 is addition to stock N 23618 sell tickets to Boheme N 23618 boom recordings of era N 23619 gave hand to greenhouse V 23619 sang aria inside it V 23621 wear lifts in voice V 23624 getting a of Traviata V 23629 Given connections with music N 23632 ventilated anguish in meeting V 23632 inject lilt into baritone V 23634 substitute one of songs N 23635 reach settlement with musicians N 23635 wanted parity with orchestras N 23642 contributed section at behest V 23650 singing parts of Traviata N 23651 was match for Festival N 23651 awarded prize of festival N 23651 awarded prize to makers V 23652 won prize of 143,000 N 23652 won prize for Yaaba V 23653 gives 39,000 to winner V 23657 demand delivery of securities N 23657 pay francs for transaction V 23657 bringing fee to francs V 23658 store securities in cases V 23659 deliver securities to investors V 23660 giving aid to Hungary V 23661 is time for Japan N 23661 extend aid of kind N 23661 extend aid to countries V 23662 studying possibility of visit N 23663 were issue in days N 23664 demand severity in fight N 23667 cover matters as training N 23668 visit Tehran for talks V 23669 help Iran in exploration V 23670 discuss matters as compensation N 23672 stores data for days V 23678 issue warrants during months V 23681 spend time in jail V 23682 distributing tools to returning V 23683 distribute machetes at time V 23685 be year for line N 23686 become series of announcements N 23687 jolted market in July V 23687 slashed projections for year N 23687 delayed orders from customers N 23688 made projection in announcing V 23688 announcing income for quarter N 23690 gained % to million V 23699 be % to % N 23699 be % below level V 23700 earned million on revenue N 23709 exceeded expectations for quarter N 23711 noted growth for lens N 23718 slow growth for quarter N 23724 selling shares in Corp. N 23725 sold shares in August V 23730 rate credit-worthiness of millions N 23731 assigns credit-ratings to bonds V 23732 misled customers into purchasing V 23735 sold shares in August V 23736 received 724,579 for shares V 23737 sold shares on 31 V 23739 sold shares in sales V 23740 represented % of holdings N 23744 reflecting drop in sales N 23745 downgraded rating on firm N 23745 citing slowdown in business N 23746 cut rating to hold V 23749 received blow on Friday V 23751 is average for company N 23752 been sales of shares N 23754 bought shares of company N 23754 bought shares on 22 V 23755 raised holdings to shares V 23761 sold shares for 11.13 V 23761 leaving himself with stake V 23763 sold shares for 11.38 V 23766 lists it as buy V 23774 give rise to forms V 23774 was matter of eons N 23778 puts twist on story V 23780 makes case for improbability N 23781 turns discovery in 1909 N 23785 reconstructed organisms from fossils V 23786 publish reinterpretation of Shale N 23791 provide relief from sentences N 23791 have appendages on prosoma V 23792 discussing meaning of oddities N 23793 was proliferation in number N 23802 views contingency as source V 23804 creating form of life N 23806 is columnist for Review N 23807 play significance of guidelines N 23807 concerning prosecutions under law N 23809 discourage prosecutors under circumstances V 23809 seizing assets of defendants N 23812 strips defendants of assets N 23812 force them into bargains V 23813 freeze assets before trial V 23813 disrupt activities of defendant N 23816 curb prosecutions against defendants N 23818 been subject of criticism N 23820 laying groundwork for increase N 23821 follows rebuff from Congress N 23824 raise funds in hurry V 23826 schedule session of legislature N 23826 schedule session within weeks V 23827 limits options in emergency V 23834 spend all on this V 23836 lower taxes by amount V 23837 require approval in houses N 23840 pay portion of tab N 23844 double tax over years V 23845 imposing increase in meantime V 23845 undercut support among voters N 23848 began battle against state N 23848 heeded warnings about safety N 23861 yield points above note N 23876 includes million of bonds N 23884 yield % in 2019 N 23891 receive rating from Moody V 23896 were details on pricing N 23898 indicating coupon at par N 23901 buy shares at premium V 23902 indicating coupon at par N 23904 buy shares at premium V 23905 indicating coupon at par N 23907 buy shares at premium V 23910 buy shares at premium V 23921 start businesses for reasons V 23922 is one of them N 23923 is bugaboo of business N 23924 meeting demands of regulators N 23925 face mound of regulations N 23926 is hope of change N 23927 held hearings on bill N 23927 reduce hassles for businesses V 23931 tackle mounds of paper N 23932 asked sample of owners N 23935 set standards for products N 23936 cites Commission for equipment V 23936 prevent junk from flooding V 23938 be nightmare for architects N 23939 is maze of codes N 23940 maintain fleets of vehicles N 23940 devote resources to complying V 23942 spends % of time N 23942 spends % on insurance V 23948 are expense at Inc. N 23949 rise % to 100,000 V 23953 deposit taxes within days V 23953 's problem for businesses N 23955 Revising manuals on pensions N 23955 costs 25,000 for Giguiere V 23960 runs concern in York N 23962 added % to % N 23962 added % to year V 23965 take care of tax N 23970 held fire with production V 23971 was revival of anthology N 23972 laid cards on table V 23973 test mettle of audiences N 23974 cites directors as Stein N 23974 cites directors as influences V 23974 stage productions with rigor V 23975 considered father of realism N 23975 lend themselves to techniques V 23976 enlightening masses with speaking V 23977 is party of yuppies N 23979 are lots of dalliances N 23982 transforms drama into something V 23983 force distance between actors V 23986 are moments in Summerfolk N 23990 express herself through play V 23991 has aid of associate N 23992 is score than character N 23996 is parcel of problem N 23997 find reason for affair N 24000 possessing one of instruments N 24000 brings touch to role V 24001 plays maid with edge V 24006 was start of boom N 24007 offered 28 for ESB V 24008 given warning on a N 24011 became firm in cases N 24015 raised bid to 36 V 24019 became maker for houses V 24020 paid fee of 250,000 N 24021 received million in fees N 24021 received million from Kohlberg V 24023 lost % of value N 24024 been one of handful N 24025 projecting earnings in quarter N 24029 has billion of assets N 24033 was matter than sign N 24034 be news for thrifts N 24035 curbed originations in quarter N 24037 see signs of swoon N 24048 moved two-hundredths of point N 24048 moved two-hundredths in week V 24051 posted increases in yields N 24051 posted increases in week V 24051 reflecting yields on bills N 24053 negotiate rates with thrifts V 24056 posted changes in yields N 24061 reflect yields at banks N 24064 dropped yield on CDs N 24066 market products in Australia V 24069 held franchise for years V 24071 sold million of assets N 24071 reached agreements in principle N 24072 reached agreement with firm N 24073 sell portion of unit N 24073 sell portion for million V 24074 sold million of assets N 24074 received million from Corp. V 24075 sell million to million N 24075 reduce costs at Wang N 24078 establishing subsidiary in Britain V 24079 purchased plant in Plymouth N 24083 meet demand for parts N 24083 meet demand by end V 24084 expects sales at unit N 24085 reported decline in profit N 24087 included gains of million N 24089 included gains of million N 24091 been firm in charge N 24091 trading stock in Corp. N 24091 been firm since 1930s V 24096 making issue on Board N 24100 manned post with Bates V 24100 's ringer for actor N 24103 were losses in stock N 24104 set crowd in afternoon V 24106 read news about unraveling N 24106 read news on train V 24107 be while like stock N 24111 caused furor in market N 24111 sell stock from floor V 24113 were rumors of trades N 24118 was pressure from everyone N 24124 doing job of tugging N 24128 jumped 20 to 170 V 24129 trade price on bell V 24131 representing orders to 10 N 24132 praised specialists for getting V 24132 getting yesterday without halt V 24134 Leaving exchange at p.m. V 24140 cut spending on machinery N 24142 showed increases in imports N 24143 ease rates before spring V 24144 views rates as weapon V 24145 weaken pound against currencies V 24146 remains threat to well-being N 24148 predicting recession next year N 24149 reduced forecast for 1990 N 24151 is cause for concern N 24151 create market by 1992 V 24152 faces inflation in months V 24156 include income from investments N 24157 expect deficit for all N 24158 reflects position of industry N 24160 reached bid of million N 24161 receive acceptances for offer N 24162 receive note in lieu V 24165 pay prices for racehorses V 24167 launched seminars for investors N 24171 romancing people like Hulings N 24175 is game for anyone N 24180 bought assets of Spendthrift N 24181 lost millions in partnerships V 24193 offers tour of barn N 24194 had splints on legs V 24194 keeping animals from racetrack V 24195 see lows of business N 24198 received advice from consultants V 24199 outlining rules for consultants N 24203 own racehorse in partnership V 24204 get horse for dollars V 24206 sell stake in horses N 24206 sell stake to newcomers V 24207 halved dividend to cents V 24208 been cents since 1988 V 24209 incur charge of million N 24209 incur charge in quarter V 24211 battling proposal by Canada N 24212 including buy-out of company N 24212 set date for submission N 24214 made offer for Donuts V 24215 followed request to Court N 24215 set date for suit N 24216 seek alternatives to offer N 24217 said income of million N 24221 reported profits in businesses N 24221 narrowed losses in sector N 24223 included gain of million N 24226 keep headquarters in Angeles V 24227 maintain relationships with exchanges N 24228 made remarks at meeting V 24228 rally support in U.S. N 24229 is part of attempt N 24229 acquired Farmers for billion V 24230 acquire Farmers from vehicle V 24231 needs approval of commissioners N 24231 take him to Idaho V 24234 hold hearings on applications N 24235 had meetings with management N 24235 woo executives with promises V 24236 be member of team N 24236 define strategies of group N 24237 having Axa as parent V 24241 completed sale of % N 24245 holds stake in venture N 24246 include earnings in results V 24249 represents flow from partnership N 24250 is 30 to units N 24255 added dollars to reserves V 24255 bringing total to billion V 24256 report profit for year N 24257 reported income of million N 24258 affect payment of dividends N 24260 equal % of exposure N 24264 include gain of million N 24270 filed prospectus for offering N 24272 raise million from offering V 24274 provided information to Pentagon V 24275 challenge veracity of contractor N 24276 misstated testimony of witnesses N 24277 attacked allegations as mudslinging V 24277 reported information about practices N 24278 provides the with everything V 24278 cause loss of contracts N 24279 considered leader in advocating N 24280 obscure details of practices N 24281 been focus of prosecutions N 24281 been focus since 1985 V 24282 demanding access to host N 24283 indicted GE on charges V 24283 defraud Army of million N 24283 defraud Army on contract V 24286 defrauding Pentagon by claiming V 24286 claiming overruns on contracts N 24288 become eligible for contracts V 24288 provided statements to Secretary V 24289 curry favor with officials V 24289 detailing extent of lapses N 24292 rebut efforts by GE N 24294 familiarize Orr with procedures V 24296 raise question of cover-up N 24299 signed letter of intent N 24308 evaluate offers for company N 24311 is bidder for company N 24316 was points at 2611.68 V 24317 depressing both for year N 24318 refocused attention on rates V 24318 rekindle concerns over prospects N 24321 pave way for declines V 24322 knocking prices in midafternoon V 24322 open way for declines N 24323 provided support to market V 24327 seek % of shares N 24328 posting loss in days N 24334 discouraging participation by investors N 24341 be targets of funds N 24343 shed yen to yen N 24352 suffered series of setbacks N 24353 hold office in elections V 24354 cast cloud over trading V 24355 achieve goal of workweek N 24365 create bank with assets N 24370 requires approval of authorities N 24371 reject blacks for loans V 24373 have data on position N 24377 is part of problem N 24381 requires disclosures of level N 24382 received mortgages from thrifts N 24384 receive loans than whites N 24385 handling number of failures N 24385 put energy into investigating V 24386 devoted amount of emphasis N 24386 devoted amount over years V 24386 developing examinations for discrimination N 24388 punished banks for violations V 24389 issued citations to banks V 24390 found indications of discrimination N 24390 found indications in examinations V 24391 alleged discrimination in lending N 24393 give figures on actions N 24395 investigate discrimination in housing N 24396 taken position on matter N 24397 considering challenge to plan N 24397 buy half of Inc. N 24398 fighting transaction on fronts V 24398 discourage operators from joining V 24398 joining Tele-Communications as investors V 24400 pay Inc. for stake V 24400 is second to Time N 24402 have number of relationships N 24403 bringing Tele-Communications as investor V 24404 is slap in face N 24405 mount challenge in Court V 24405 charging Time with monopolizing V 24405 crush competition from Showtime N 24406 naming Viacom as defendants V 24407 prevent Tele-Communications from dropping V 24407 dropping HBO in any V 24410 characterize investment in Showtime N 24412 owning HBO with subscribers N 24417 control % of Inc. N 24420 weakening suit against Time N 24421 accuses Time in suit V 24421 carry Showtime on system V 24422 launch Showtime on 1 V 24424 sign contracts with studios N 24424 buy movies from Inc. N 24424 has arrangement with HBO N 24426 reduce competition in production N 24426 are components of devices N 24427 enjoin acquisition in court V 24428 determine legality of purchase N 24428 begin proceedings within days V 24430 taken turn for the N 24430 taken turn in weeks V 24432 posted loss for period N 24433 slash projections for rest N 24436 put damper on industry V 24437 become lot as targets N 24438 raises questions about orders N 24438 total billion over years N 24440 cut fares in markets N 24443 offer checks of 200 N 24443 offer checks to members V 24443 making flights in class V 24444 reported drop in income N 24447 rose % in period V 24450 has competition in hub N 24453 expecting size of loss N 24463 build mileage at rate V 24467 blamed some of loss N 24468 quantify effects of Hugo N 24477 become part of culture N 24478 has quality about it V 24480 make pitchmen in 1990 N 24489 Sharing character with advertisers V 24496 give title as head N 24497 take post at Express N 24497 take role at company N 24500 awarded assignment to Partners V 24506 give sets of Boy N 24506 give sets in promotion V 24508 acquire stake in Corp. N 24508 acquire stake for dollars V 24510 raise stake in Paxus N 24510 raise stake to % V 24511 has relationships with company N 24515 including billion of bonds N 24517 incurred loss of million N 24519 include debt of units N 24522 ensure support of lenders N 24528 be company with sense N 24529 name resources in list V 24531 sell cars in 1990 V 24532 expect sales next year V 24535 sold cars in 1988 V 24537 blamed slump in prices N 24537 blamed slump for plunge V 24541 posted drop in profit N 24542 raise billion in cash N 24542 raise billion with sale V 24542 redeem billion in maturing N 24545 has assurance of enactment N 24545 raise limit before auctions V 24547 earned million on revenue V 24553 grew % in September V 24557 rose % in September V 24558 issue statistics on exports N 24559 rose increase from year N 24560 rising units to units V 24562 have engines of centimeters N 24563 fell % from year V 24564 fell % to units V 24566 offer explanation for fall N 24570 prompted sell-off in shares N 24571 sent Average at 10:40 V 24572 buys stock for raiders V 24572 steadied fall in UAL N 24574 took UAL in hour V 24578 battled board in 1987 V 24578 withdrew offer for parent N 24579 buy million of stock N 24580 following collapse of buy-out N 24581 oust board in solicitation V 24585 seen case of incompetence N 24587 yield 245 to 280 V 24589 acquires stock in attempt V 24591 including threat of strike N 24592 seek support for sale N 24592 seek support before meeting V 24594 selling company at price V 24598 sell stock at bottom V 24604 reviewing proposals for recapitalizations N 24612 held % of UAL N 24612 held % before bid V 24612 reduced holdings below % V 24613 put airline in play V 24614 makes offer of 300 N 24614 accepts offer below 300 N 24616 fell % to million V 24617 included gain from sale N 24619 offset declines in newspapers N 24622 triggered orders on way V 24626 picked signals of decline N 24628 step sales in market N 24628 step sales in effort V 24628 maintain flow of exchange N 24629 was support at level V 24632 hit level at EDT V 24632 encountered number of orders N 24634 have effect on supplies V 24640 relating numbers to activity V 24646 anticipating recession in months V 24647 had times in years N 24651 turn concentrate into cathodes V 24655 bought futures in anticipation V 24655 have positions in market N 24658 ending session at 19.72 V 24665 gained cents to 5.1950 V 24666 rose 2.30 to 488.60 V 24668 were rumors of sales N 24669 reflected weakness in market N 24671 was price of silver N 24671 was price at the V 24675 buying corn in amounts V 24678 triggered orders above 1,030 N 24678 pushing price to 1,040 V 24681 was buying in York V 24686 buy Inc. for million V 24687 pay maximum of % N 24689 pay dividends at % V 24691 convert million of debt N 24691 convert million into % V 24693 took control of month N 24694 win concessions from creditors V 24695 conclude negotiations with creditors N 24695 conclude negotiations within days V 24696 converts film to videotape V 24696 posted loss of million N 24696 posted loss on revenue V 24697 fell cents to 2.125 V 24699 are tale of excesses N 24700 restructure billion of debt N 24700 release plan in day V 24701 take billion of cash N 24702 was ace in hole N 24704 force TV into court V 24706 were part of Communications N 24707 loaded company with debt V 24707 sold operations at profit V 24708 selling them for billion V 24709 took billion of cash N 24709 moved it into operations V 24710 took million of bonds N 24710 took million as payment V 24712 is billion on buy-out V 24712 taking cash up front V 24713 racked returns of % N 24713 racked returns in years V 24714 losing investment of million N 24717 reschedule lot of bonds N 24722 boost profit after buy-out V 24725 take side of trade N 24727 offers concessions by KKR N 24728 give part of million N 24728 give part to holders V 24728 reduce value of claims N 24731 costing anything because profit V 24733 invest money in TV V 24735 extract money from KKR V 24736 be proceeding for KKR N 24737 provide fuel for critics N 24738 putting TV into proceedings V 24739 has pockets than Gillett N 24742 made all on TV V 24743 pour money into TV V 24744 boosted dividend to cents V 24745 is 1 to shares N 24749 holds % of securities N 24749 buy shares with value N 24750 buy 250 of stock N 24750 buy 250 for price V 24752 rose % to million V 24754 led shares into decline V 24758 swamped 1,222 to 382 N 24759 has case of nerves N 24760 drove average through ranges V 24762 left us with nerve V 24767 plunged points in hour V 24771 caused period of panic N 24771 caused period on Board V 24773 scooped hundreds of futures N 24777 were force behind buying N 24777 were force at moment V 24781 crushing hopes of buy-out N 24784 was crowd around post V 24785 was mass of people N 24786 was liquidation of stock N 24786 was liquidation across board V 24787 taken loss on UAL N 24787 selling stocks in attempt V 24788 selling stocks in Index N 24799 trimmed loss to points V 24801 sold stock into decline V 24801 seeing velocity of drop N 24802 completed side of trade N 24805 began program for dozens N 24806 rallied Dow into gain V 24809 buy shares on sell-off V 24811 handling blocks of stock N 24814 present itself as investment V 24815 is market for investment N 24816 attributed rallies in number N 24816 attributed rallies to program V 24817 climbed 3 to 41 V 24820 rose 7 to 133 V 24820 gained 2 to 103 V 24820 jumped 3 to 27 V 24824 fell 1 to 40 V 24825 fell 3 to 68 V 24825 lost 1 to 66 V 24825 slid 3 to 24 V 24825 dropped 1 to 14 V 24826 lost 3 to 13 V 24828 dropped 1 to 70 V 24828 fell 4 to 59 V 24828 lost 3 to 31 V 24828 slid 3 to 50 V 24828 dropped 1 to 21 V 24828 skidded 2 to 26 V 24829 gained 3 to 23 V 24830 tumbled 7 to 43 V 24832 dropped 1 to 53 V 24832 fell 1 to 16 V 24833 dropped 1 to 29 V 24833 caused damage to building V 24836 lost 1 to 20 V 24836 dropped 1 to 28 V 24836 dipped 5 to 21 V 24837 plunged 5 to 38 V 24838 skidded 5 to 31 V 24839 swelled volume in issues V 24839 fell 7 to 44 V 24839 led list on volume N 24839 lost 3 to 17 V 24840 have yields of % N 24841 surged 1 to 75 V 24842 placed stock on list V 24844 rose 3 to 38 V 24844 added stock to list V 24845 advanced 2 to 49 V 24845 holds % of shares N 24847 approved repurchase of shares N 24848 climbed 1 to 38 V 24850 replace International on 500 V 24850 gained 5 to 24 V 24851 fell 3.10 to 376.36 V 24853 raised dividend to cents V 24853 raised 1990 to shares N 24854 increases dividend to 1.20 V 24856 rose % to cents V 24857 rose % to million V 24859 plunged % to million V 24861 edged % to million V 24863 exceed million after taxes N 24864 fell % to million V 24865 slid % to billion V 24866 reported ratio for months V 24868 reflecting development in claims N 24870 fell % to billion V 24871 include provision for returns N 24872 defend filing in hearings V 24876 was play on market V 24879 learned thing from candidates V 24882 get platform in case V 24886 buy bonds on speculation V 24889 fell points on news V 24893 cut rates amid growing V 24897 rose 1 to point V 24898 fell 1 to point V 24905 structuring offering for Inc. N 24906 is franchisee of Hardee N 24910 turned shoulder to yesterday V 24911 given volatility in market N 24922 have view of market N 24922 have view because expectations V 24923 held month by Treasury V 24924 purchased no than % N 24928 drum interest in bonds N 24937 take advantage of falling N 24939 offered million of notes N 24940 issued million of notes N 24940 priced million of notes N 24941 paved way for visit V 24941 filing registration with Commission V 24945 ended 1 to point N 24945 ended 1 in trading V 24946 finished point at bid V 24947 including climb in prices N 24949 was outlook for supply N 24950 was million of bonds N 24953 had balance of million N 24953 had balance in trading V 24955 gained point after session V 24961 touching an of 98 N 24963 yielding % to assumption V 24969 rose point to 99.93 V 24969 rose 0.05 to 97.70 V 24970 rose 17 to 112 V 24970 rose 11 to 104 V 24973 increased dividend to cents V 24974 is 10 to 24 N 24979 removed Waggoner as officer V 24981 place company under protection V 24983 remain director of Staar N 24986 named member of board N 24988 confirmed him as leader V 24989 reaffirmed allegiance to orthodoxy N 24993 subpoena papers of Reagan N 24994 denied request by adviser N 24994 seek documents from Bush V 24998 expressed skepticism over effort N 24999 provided Department with list V 25000 defrauding followers of ministry N 25001 convicted 5 by jury V 25001 diverting million of funds N 25001 diverting million for use V 25002 deny seats in Congress N 25003 held talks with government N 25005 pledged accord for pullout N 25005 support rejection of plan N 25005 approved Sunday by legislature V 25007 trade captives in Lebanon N 25007 trade captives for comrades V 25009 reject blacks for loans V 25010 have data about applicants N 25013 know cause of blasts N 25014 opened meeting in Portugal N 25014 assess needs amid reduced N 25015 ordered study on role N 25016 play significance of guidelines N 25016 concerning prosecutions under law N 25024 plunging 33 to 145 V 25025 seek all of Jaguar N 25025 setting stage for war V 25026 discussing alliance with GM N 25027 paid price for incentives V 25029 slipped % in September V 25029 reflecting demand after spurt V 25031 approved buy-back of shares N 25032 reduce shares by % V 25033 received offer from Utilities V 25033 spurring round of bidding N 25034 providing data to Pentagon V 25035 rose % in quarter V 25038 slash force in U.S. N 25039 posted drop in profit N 25039 recorded loss in years N 25043 increased % in market V 25045 surged % in quarter V 25046 rose % in quarter V 25054 diagnosed defect in embryo V 25056 detected days after conception N 25063 made millions of copies N 25065 passing defect to child V 25069 taken days after conception N 25071 finds sideline in world V 25073 made protein from alcohol V 25074 convert glucose from wastes N 25074 convert glucose into protein V 25076 calling scientists from Institute N 25078 churn proteins for use N 25086 inserting catheter into artery V 25091 give movie of vessel N 25093 measure movements of wall N 25093 raises pressure of blood N 25098 have sense of smell N 25099 seeking million from unit V 25099 defrauded government on contract V 25099 provide services for employees N 25102 reducing value of homes N 25103 recover million in costs N 25103 terminated contract with Relocation N 25105 have comment on suit N 25106 leave accounts beyond years V 25107 close accounts for years V 25109 involving 68 of syndicates N 25110 underwrite insurance at Lloyd V 25112 restrict ability of officials N 25113 enact rules by end V 25115 get quotes for contracts N 25115 obtain approvals from directors V 25116 plummeted % because acquisition V 25118 rose % to million V 25121 attributed drop to disruption V 25124 affected sales as part V 25127 resurrect itself with campaign V 25128 celebrate achievements of some N 25129 extricate shoe from wad V 25131 hurling rocks at lamp V 25132 sharpen arm of player N 25133 begin airing next month V 25134 has reputation as cemetery N 25139 lend themselves to job V 25141 is one of examples N 25145 made debut like White V 25149 credited performance to hyping V 25151 making market in issue V 25155 buy shares from investors V 25159 makes market in shares V 25161 flip it for profit V 25162 named chairman of maker N 25164 is partner of Co N 25165 intensified battle with Corp. N 25165 intensified battle by saying V 25165 make bid for all N 25166 was part of filing N 25170 put pressure on government V 25174 discussing alliance with GM N 25174 reach agreement within month V 25175 give stake in company N 25175 produce range of cars N 25181 have implications for balance N 25182 throw hat in ring V 25185 sent shares in weeks V 25186 own % of shares N 25188 rose cents in trading V 25189 combat competition from Japanese N 25191 expressed preference for GM N 25192 acquire all of Jaguar N 25194 diversify products in segment N 25196 see lot of potential N 25196 marrying cars to know-how V 25203 alleviate decline in earnings N 25206 declined % to billion V 25207 retire billion of debt N 25209 climbed % to million V 25210 increased % to billion V 25211 reflects earnings in operation N 25216 tumbled million to million V 25217 attributed decline to prices V 25217 countered earnings from sector N 25221 slipped % to million V 25222 declined million to billion V 25223 included gain of million N 25225 take place over period V 25225 involve layoff of employees N 25225 focus efforts in areas N 25228 fell % to million V 25230 rose % to billion V 25231 boosted profits from operations V 25232 totaled million after loss V 25233 earned million in quarter V 25233 included million in charges N 25234 included gain from taxes N 25237 ended involvement in mining N 25237 ended involvement in quarter V 25238 was million of revenue N 25240 rose % to million V 25243 rose % to million V 25244 sold interest in partnership N 25244 sold interest for million V 25245 end involvement in mining N 25246 discussing buy-out of facility N 25249 had change in earnings N 25251 compares profit with estimate V 25251 have forecasts in days V 25255 assume responsibility for manufacturing N 25257 is provider of chemicals N 25260 provide shareholders with return V 25262 named president of insurer N 25263 been president in office N 25265 named president in charge N 25266 been president of department N 25272 named director of subsidiary N 25273 build business of Gruntal N 25274 was officer of Co. N 25274 was officer until July V 25274 named co-chairman of firm N 25277 got offer from Gruntal N 25278 provide services to sites V 25280 expand usage of services N 25280 adds locations over years V 25282 outpace exports despite gains V 25285 expect gap for year N 25286 signed agreement with Inc. N 25288 had sales of million N 25292 become officer of Wachovia N 25294 elected directors of Wachovia N 25294 filling seats on boards N 25295 rose % in August V 25296 followed decline in July N 25298 decreased week to tons V 25299 fell % from tons V 25300 used % of capability N 25305 soared % to billion V 25307 dropped % to billion V 25308 supply shields for surgery N 25308 supply shields to unit V 25310 selling products for use V 25311 speed healing of cornea N 25311 speed healing after surgery V 25313 rose % from June V 25314 publishes data on basis V 25314 combines index for months V 25314 rose % from June V 25315 turned showing with rise V 25318 eased % from level V 25320 sell business to AG V 25322 is division of subsidiary N 25322 had sales of million N 25323 focus resources on businesses V 25324 buy power from plant V 25327 represent advance in research N 25328 stop spread of AIDS N 25329 expressed skepticism over significance V 25333 wiped average of % N 25333 wiped average within days V 25337 conduct tests on patients V 25338 do experimentation in country V 25339 got exposure in media V 25345 killed cells at dose V 25346 know effect of antibody N 25347 considered problem in Japan N 25347 reports carriers of virus N 25347 poured resources into research V 25349 present drugs for testing V 25351 sells drug under name V 25353 represent threat to viability N 25367 flopped victim of turbulence N 25368 finance purchase of stake N 25369 get financing for buy-out N 25370 accepted % of bonds N 25371 marked showing for issue N 25374 buy stake in Airlines V 25375 given volatility of market N 25377 pick rest of offer N 25383 gives cash in pocket N 25384 acquiring stake in Airlines N 25386 have impact on shares V 25387 announced issue in September V 25389 sell issue in market V 25393 is difference of opinion N 25395 was years of neglect N 25395 raise goals for females V 25403 note increase in searches N 25404 get numbers in order V 25411 feeds evaluations into computer V 25412 basing increases on reviews V 25415 get voice in design N 25423 put plans under control V 25429 's time in years N 25432 heads program at Center N 25434 has help of doctors N 25439 sees erosion of staff N 25445 invested hundreds of thousands N 25445 invested hundreds in programs V 25446 showed support for Kohl N 25450 scored gains in elections N 25450 scored gains in states V 25451 becoming issue for campaign N 25451 drawing support for stand N 25452 edge coalition in election V 25453 allow prosecution of criminals N 25453 took refuge after 1945 V 25455 attending conference with investigators N 25456 been part of squads N 25459 easing tension between Beijing N 25462 investigating exports to Union N 25467 ban practice in waters V 25470 cut number of vessels N 25471 cost production of automobiles N 25472 accept series of proposals N 25474 resumed strike against Ltd. N 25475 striking mines on 13 V 25476 increase wage by % V 25478 took note of problem N 25479 was theft of 235,000 N 25483 photographing damage in Francisco N 25484 issued advisory to agencies V 25484 following report from Ministry N 25484 causing feeling among residents V 25486 draws thousands of visitors N 25487 rose % between 1986 V 25488 rose % in 1987 V 25489 raise limit to mph V 25490 increased limit on interstates N 25492 rose % between 1986 V 25492 were the in 1988 V 25493 raised limit on interstates N 25493 rose % to deaths V 25495 changes spelling of catsup N 25495 changes spelling to ketchup V 25506 set million against losses V 25507 was billion after provisions N 25508 have confidence in it V 25509 borrow billion in 1989 V 25513 supported pricing as agencies V 25516 takes swipe at lending N 25517 are facts on type N 25518 making loans for years V 25520 downsize role of parastatals N 25520 open economies to competition V 25520 promote development of sector N 25521 been concern of Bank N 25522 encourage investments by entrepreneurs N 25523 stimulate investment in developing N 25524 are actions of agency N 25525 put resources to use V 25529 maintaining production of ones N 25530 cut subsidies to producers N 25530 close outlets in neighborhoods V 25532 controls prices on goods N 25533 criticized agency as example V 25535 reduce prices for milk N 25536 banned imports of mushrooms N 25536 banned imports in response V 25538 enter U.S. until are V 25539 detaining mushrooms in cans N 25540 found cans from plants N 25543 exported pounds to U.S V 25550 targeting traffickers through Strategy V 25551 control segment of market N 25554 assist MPD in crimes V 25556 revised terms of restructuring N 25556 complete sale of business N 25557 hindered offering of million N 25557 operate casinos in Nevada V 25558 pay million for business V 25558 reimburse World for million V 25561 receive cent per share N 25561 receive cent for redemption V 25562 exceeds 14 on day V 25564 rose cents on news V 25565 demand premium for delay V 25568 being one of the N 25572 sold unit to group V 25574 fell points to 2662.91 V 25575 staged rally with prices V 25577 is sign of growing N 25582 was reaction to rout N 25585 see growth in quarter V 25596 interviewed adults from 15 V 25597 interviewed adults from 7 V 25599 survey household in U.S. N 25601 introduce errors into findings V 25603 had confidence in industry V 25605 keep prices at level V 25608 asked Airlines for side V 25609 is one of factors N 25609 shapes trust in industry N 25612 offer rates for packages N 25613 create media for campaigns V 25614 sold package for million V 25616 spend million on programs V 25617 negotiating packages with leading V 25618 negotiating packages with group V 25620 buying pages in magazine V 25621 combine magazines with products V 25624 provide pages in magazines V 25624 give videotape on pointers N 25624 distribute books to homeowners V 25636 describe lapse of sense N 25640 gives chance of success N 25641 reported results of study N 25642 gather group of advisers N 25642 gather group around them V 25649 follows resignation of Goldston N 25650 considered abrasive by insiders V 25650 reflect difference in style N 25651 make transition from company N 25652 regain momentum in business N 25652 regain momentum against rivals V 25654 's issue of style N 25655 view it as positive V 25660 resume presidency of Inc. N 25661 was officer of Corp N 25662 assume title of president N 25665 been president of division N 25671 publish issue of Months N 25672 developing spinoff on heels V 25674 is show of faith N 25677 increased % from year V 25678 increased % to billion V 25682 operate magazine with revenue V 25683 sell magazine to Inc V 25691 break ground with start-ups V 25692 gain leverage with advertisers V 25694 sold magazine to Corp V 25695 take million from sale V 25701 had sales in excess V 25702 designs toys under names V 25705 shore confidence in banks N 25705 shore confidence during recession V 25707 probing bank for months V 25707 arranged merger with Trust N 25710 was attempt with undertones V 25710 including billion in loans N 25712 bought block of stock N 25712 bought block from Corp. V 25713 siphoned million of funds N 25713 siphoned million for ventures V 25714 faked kidnapping for months N 25716 drinking coffee in prison V 25720 register reactions to remarks N 25725 reshaping world of law N 25728 creates profiles of jurors N 25729 provide audiences with craving V 25730 pay sums for advice V 25731 win verdict against Inc N 25732 advised League in defense V 25733 win verdicts in suits V 25740 see vision of system N 25740 see vision as cry V 25750 exacerbates advantage of litigants N 25752 finding calling in cases N 25754 interviewed voters around Harrisburg N 25755 keep them off jury V 25763 report reactions to him V 25768 retain objectivity in sense N 25769 give argument to wife V 25769 get response to it N 25770 do that in way V 25771 sued Corp. over transport V 25772 retained Sciences at cost V 25773 put case to vote V 25774 awarded million in damages N 25778 is part of work N 25779 Changing outcome of trial N 25781 weigh evidence in case N 25782 shoe-horn facts of case N 25783 develop profile of type N 25787 remove people from jury V 25789 hold attitudes toward the N 25790 asking questions about attitudes N 25801 drawing attention to arm V 25801 planted doubt about origin N 25806 play role in operation N 25816 had feel for sentiment N 25817 is guarantee of outcome N 25818 was flatout in predictions N 25821 won case on behalf N 25822 used consultants in case V 25825 been critic of masseurs N 25829 hamper work of scientists N 25835 used consultants to advantage V 25836 giving information about jurors N 25837 lend themselves to that V 25839 is part of contract N 25840 involves sale of 35 N 25844 offers performance for price V 25845 supply computers for engineers V 25846 targeted niche since inception V 25847 provides models of everything N 25851 unveil machines in future V 25852 bring cost of systems V 25856 Remember refrigerators of years N 25860 involving products with value N 25860 curtail use of chlorofluorocarbons N 25862 ratified it by vote V 25864 's lot of banishment N 25865 are ingredient in gas N 25868 cost world between 2000 V 25868 redesign equipment for substitutes V 25869 screens some of rays N 25871 running project at Inc. N 25872 studied topic of warming N 25872 work changes in atmosphere N 25872 work changes over time V 25873 is consensus in community N 25878 be % by middle V 25880 are questions among scientists V 25882 is matter of conjecture N 25888 cites list of substitutes N 25890 protect compressors from formulations V 25899 has substitute for CFCs N 25900 building plant in Louisiana V 25906 created set of interests N 25907 tilt debate toward solutions V 25909 pay bill for all N 25909 pay bill in price V 25910 getting insurance against disaster V 25914 fighting initiatives on issues V 25914 mandating benefits in plans N 25918 be the at 4.65 V 25919 adopted three of bills N 25922 manages Chamber of office N 25924 grant leaves of absence N 25924 grant leaves to employees V 25926 taken note of number N 25927 's matter of time N 25930 support credit for employers N 25932 playing lot of defense N 25932 playing lot in Northeast V 25935 awarding contracts under 25,000 N 25936 permitted flexibility in arrangements N 25937 considers part of policy N 25939 urging passage of initiative N 25948 pre-register changes with state V 25949 meet series of tests N 25950 pre-register sales to franchisees N 25955 protect franchisees from negotiators V 25956 frees owners of liability V 25957 tested applicant for use V 25958 limit ownership of facilities N 25959 find way through system N 25961 feared gridlock on day V 25963 repair some of connections N 25965 was standing-room in railcars V 25966 connecting Francisco with Bay V 25968 reached work on BART V 25968 find space at stations V 25969 is commute in region N 25969 experiencing back-ups of minutes N 25971 caused back-ups on freeway N 25971 find rides to stations N 25973 takes minutes via Bridge V 25973 connects Francisco with area V 25982 connects peninsula with Bay V 25985 handled cars over hours V 25986 select period during hours N 25990 cut commute by % V 25997 went Sunday with computer V 25997 kicked it like can V 25998 maneuvered Thought into position V 26005 including whippings of grandmasters N 26008 nicknamed brainchild for flair V 26011 put hope in capacity V 26014 examine millions of moves N 26015 fought champion to draw V 26017 made maneuver at 13 V 26017 put offside on 16 V 26020 exchange bishop for one V 26024 was one-half of pawn N 26026 shuffled king in crouch V 26026 maneuvered knight to outpost V 26028 saved game for D.T. V 26032 making attack against knight N 26033 left computer with range V 26033 moving pawn to neglect V 26037 grabbed pawn at cost V 26038 exposed queen to threats V 26041 refuted line of play N 26043 won queen for pieces V 26049 building machine for Corp V 26051 is reporter in bureau N 26054 gave 40,000 for certificate N 26060 put him in CD V 26063 had yield of % N 26066 represented value of premium N 26070 chase promise of returns N 26075 buying CD on market V 26076 discuss matter with reporter V 26076 referring inquiries to officials V 26077 was disclosure of risks N 26077 was disclosure in sheet V 26079 discuss questions with consultant V 26080 remember paragraph about premiums N 26081 buying CD as CD V 26083 pay interest to maximum N 26087 received complaint about premiums N 26087 received complaint in years V 26089 are portion of trillion-plus N 26089 are part of total N 26092 finance things like education N 26094 bought CDs in market V 26095 paid premium for CDs V 26104 jumped times to million V 26105 view themselves as marketers V 26111 fell % to cases V 26114 surged % to gallons V 26115 is importer of brandy N 26116 helped companies in April V 26116 lowered tax on imported N 26116 levied tax on products V 26119 increased marketing of Liqueur N 26120 pitches Comfort as drink V 26124 acquired image in U.S. V 26124 become fashionable in countries V 26128 distributes bourbons in Japan V 26129 makes % of consumption N 26129 represented % of liquor N 26131 is exporter of bourbon N 26131 produces types of liquor N 26132 increase advertising in 1990 V 26133 increased advertising in Japan N 26133 built partnerships with shops N 26133 built partnerships throughout Asia V 26134 is bourbon in Japan N 26134 is bourbon with % V 26135 avoiding hitches in distribution N 26136 has partnership with Co. N 26137 has link with Co N 26139 uses photos of porches N 26140 strike chords in countries V 26142 get glitz with bourbon V 26144 carrying woman in a N 26146 rose % on increase V 26149 reached billion from billion V 26151 reported profit of million N 26153 advanced % to million V 26157 grew % to million V 26158 eased % to billion V 26160 has shows in 10 V 26161 bought shares of stock N 26161 bought shares from Inc. V 26162 acquire securities of Federal-Mogul N 26162 acquire securities for years V 26162 influence affairs during period V 26163 sold business to affiliate V 26165 employs workers at facilities V 26166 provide electricity to mill V 26167 has energy for mill N 26170 broke silence on Fed N 26171 return rates to level V 26171 have impact on starts N 26171 have impact upon deficit V 26175 expressing views in public V 26176 rose % on gain N 26179 rose % to billion V 26180 include sales at stores N 26182 were year down 3,200 V 26182 reflecting war among chains N 26185 posted gains for months N 26185 posted gains with sales V 26187 had 90,552 in sales N 26191 slipped % to % V 26199 rose % to million V 26200 rose % to billion V 26201 delay delivery of ships N 26202 fell 1.75 to 20.75 V 26205 is amount of uncertainty N 26207 delivered month in time N 26208 expand capacity of fleet N 26208 expand capacity by % V 26211 pay price for them V 26213 have effect on earnings V 26217 pays portion of cost N 26217 reaches stages of construction N 26218 paid million of cost N 26223 spawned host of clones N 26224 was subject of article N 26226 paid royalties for line N 26231 had drop in profit N 26231 had drop because sales V 26234 was million from million V 26235 rose % to million V 26237 expecting profit of 1.25 N 26237 reducing estimate for year N 26237 reducing estimate to area V 26238 reduced estimate to 5.70 V 26238 make cut to 5.50 N 26238 make cut in light V 26240 fell % to million V 26242 provide figures for category V 26242 fell % to million V 26244 reflects slowing in sales N 26245 fell % to million V 26246 attributed decline to weakness V 26251 become edge of movements N 26259 containing a of population N 26263 produces soot per unit N 26265 outstripped growth of GNP N 26266 producing use of energy N 26269 separate industry from state V 26275 introduce permits in republics V 26282 secure blocks of reduction N 26283 means use of limits N 26286 require billions of dollars N 26290 urged flow of information N 26295 resembles Pittsburgh with production V 26297 adapted this from column V 26298 sold shares of Computer N 26302 dropped 4.58 to 457.52 V 26303 lost 2.38 to 458.32 V 26304 reflected lack of conviction N 26309 represented profit-taking by investors N 26309 made gains in issues V 26311 putting it on track V 26312 lost 1 to 46 V 26313 eased 3 to 24 V 26315 was cents in quarter N 26316 dropped 2 to 14 V 26317 fell 1 to 33 V 26317 slipped 3 to 18 V 26318 fell victim to profit-taking V 26318 declined 1 to 83 V 26320 jumped 1 to 42 V 26323 holds % of shares N 26325 eased 1 to 110 V 26326 dropped 1 to 40 V 26327 paying attention to earnings V 26328 posted growth of % N 26329 be news for market N 26333 been year for investor N 26334 be those with kind N 26335 puts BizMart on list V 26339 jumped 3 to 20 V 26339 advanced 1 to 23 V 26341 fell 1 to 30 V 26342 dropping 1 to 15 V 26345 rose 1 to 54 V 26345 jumped 4 to 41 V 26349 relinquish beliefs about nature N 26352 ask sample of parents N 26352 encourage creativity in children V 26356 is generation of people N 26362 fight inch of way N 26365 minimize tests with results N 26366 provides teachers with self-definition V 26366 passed courses in psychology N 26367 took courses in college V 26371 are people by definition V 26373 remember teachers from days N 26376 be doctor in place V 26378 are factor in crisis N 26379 is problem of equity N 26380 is libel on teachers N 26382 strike posture on behalf V 26383 is shred of evidence N 26387 are majority of schools N 26388 assimilate knowledge into thinking V 26391 needs policy for children N 26395 improves performance in grade N 26397 blame schools for limitations V 26403 become prey of politicians N 26404 disengage itself from commitment V 26405 increasing expenditures on education N 26405 increasing expenditures in circumstances V 26406 takes place in classroom V 26407 have effect on performance V 26408 piling work on teachers V 26409 is paradox in fact V 26412 mastered R at level V 26420 is influence of Math N 26421 learning basis of theory N 26421 read article by Nelson N 26422 have principals with measure N 26425 produce students with morale N 26430 increase flow of information N 26430 increase flow for use V 26431 are one of sources N 26433 gain credibility on floor N 26435 developed strategies for problems V 26436 invest sort of effort N 26436 invest sort into industry V 26437 unveil strategies for industries N 26437 unveil strategies in coming V 26439 making hundred of people N 26440 form teams with customer V 26441 help customers on software V 26443 mirrored performance as result V 26444 reflected changeover to year N 26447 follow rebound in results N 26448 inched % to yen V 26449 fell % to yen V 26450 rose % to yen V 26452 surged % to yen V 26453 rose % to yen V 26454 jumped % to yen V 26456 increased % to yen V 26457 rose % to yen V 26458 surged % to yen V 26460 rose % to yen V 26461 rose % to yen V 26462 rose % to yen V 26464 drop offer for Corp. N 26464 have agreement by 15 V 26465 made offer in August V 26465 awaiting response to offer N 26466 consider offer at meeting V 26467 fill gap in business N 26468 rejected suitor in year V 26469 assume job of officer N 26471 move headquarters from Hingham V 26473 reached agreement with creditors N 26480 accept cents on dollar N 26482 extinguish all of stock N 26482 issue stock to York V 26486 took control of company N 26490 add Co. to index V 26494 reduced assets in August V 26494 selling assets as loans N 26497 exceeded deposits by billion V 26498 increase size of capital N 26502 attributed some of outflow N 26502 attributed some to factors V 26504 were factors in industry N 26505 including thrifts under conservatorship V 26505 reduced assets by billion V 26506 exceeded deposits by billion V 26508 held billion in securities N 26509 marked swing after inflow V 26510 exceed withdrawals in future V 26511 see changes in rates N 26512 exceeded deposits by billion V 26513 exceeded withdrawals by billion V 26514 understate rate of growth N 26515 provide numerator for ratios V 26516 has implications for policies V 26516 lower sense of urgency N 26517 affect perceptions of board N 26517 constitutes degree of stability N 26518 predicted acceleration in growth N 26519 reduced gains in 1970s V 26521 suggesting defects in estimates N 26526 is use of estimates N 26528 estimate output per employee N 26528 found rate of improvement N 26528 found rate during 1980s V 26529 indicates bias in estimates N 26530 use data for calculations V 26531 including one by Department N 26532 contribute % to product V 26532 depresses rate by % V 26533 is use of deflators N 26534 add point to bias V 26535 make allowance for improvements N 26537 take account of improvements N 26537 contributed total of point N 26537 contributed total to bias V 26538 indicate understatement in growth N 26539 was bit over point V 26541 is emeritus of economics N 26542 is co-author of Sharp N 26542 Increase Satisfaction in Living N 26543 plunged % from year V 26544 was million for quarter V 26547 was pennies than projections N 26548 show weakness in some N 26558 included gain of million N 26563 rose % to billion V 26564 sell securities within borders V 26565 let Drexel off hook V 26565 polish image after plea V 26566 made series of settlements N 26567 made fine for matter N 26569 meeting resistance from states N 26571 getting treatment than firms N 26572 includes payment of million N 26576 need licenses for activities V 26578 praise Drexel for effort V 26578 settle problems with states V 26580 was lot of debate N 26580 drafted plan for states V 26582 accepted offer of 25,000 N 26582 have argument with those V 26584 received complaints about Drexel N 26588 pay total of million N 26589 have settlements to four N 26590 have total of 30 N 26592 promote behavior in industry N 26593 reach agreements before Tuesday V 26598 bar Drexel as adviser V 26599 describe position in detail V 26600 issued notice of intent N 26601 is one of states N 26606 mount battle in state V 26611 including commonwealth of Rico N 26612 reported loss of million N 26613 reported loss of million N 26614 completing acquisition of shares N 26616 including results from both N 26618 is income of divisions N 26619 made million from filmed V 26622 reported income of million N 26624 including all of earnings N 26624 had loss of million N 26628 include results of Corp. N 26629 got boost from results V 26630 racked million in receipts N 26630 racked million to date V 26632 contributed results from business N 26633 turned increase in flow N 26634 reflecting reserve for expenses N 26637 saw decline in flow N 26637 included dividend from System N 26639 take retirement from steelmaker N 26641 left % of stock N 26641 left % in hands V 26643 elected chairman by board V 26644 was executive until death V 26645 head appointment by Bush N 26646 stating concerns about appointment N 26647 sets policy for RTC V 26648 are members of board N 26655 had million in assets N 26658 has ties to both N 26659 was co-chairman of committee N 26662 open Arizona to banking V 26666 remain officer of unit N 26667 named chairman of company N 26667 elected him to position V 26667 increasing number of members N 26667 increasing number to 35 V 26668 was president of company N 26669 lowered ratings of debt N 26670 cited move into market N 26671 raised rating on Bank N 26675 give hint of present N 26677 is earthquake in Area N 26680 sue underwriters for negligence V 26697 was bonus from employer N 26697 was bonus in 1981 V 26698 underwrote 20,000 of coverage N 26698 faces losses of 70,000 N 26710 endured decades of decline N 26711 dominated world with stake V 26712 monitored commerce through network V 26716 pioneered policies as insurance N 26717 siphoning chunks of market N 26719 was insurer of horses N 26720 grabbed stake of market N 26723 lost control of situation N 26732 is dictator at Lloyd V 26733 took residence in tower V 26740 houses warren of desks N 26746 left exchange in 1985 V 26753 offset payouts for disasters N 26754 leaving books for years V 26755 reported results for 1986 N 26762 cut force by % V 26770 sells insurance to public V 26774 make payments on claims N 26775 reduce work on claims N 26778 retains title of chairman N 26783 taking reins of company N 26783 realize potential in dealing N 26784 is one of firms N 26785 had equity of yen N 26786 reported income of yen N 26788 interpreted appointment as attempt V 26788 preparing firm for effects V 26789 suffered setbacks in attempts V 26790 underwriting securities in market V 26791 had appetite for equities V 26792 stepped purchases of shares N 26792 stepped purchases in months V 26792 shown themselves in past V 26793 faced competition from competitors N 26795 selling bonds to investors V 26799 sell portions of issues N 26805 build organization with flavor N 26806 gaining expertise in futures N 26808 joined Daiwa upon graduation V 26809 peddling stock to investors V 26812 gain support from force V 26813 form portion of earnings N 26814 lacked backing of force N 26817 posted decline in income N 26822 had reserves of million N 26822 announce dividend in months V 26823 is 1 to shares N 26826 Excluding gains from carry-forwards N 26829 purchased million of shares N 26829 purchased million since April V 26830 quashed prospects for revival N 26832 put attempt to one V 26832 leaves airline with array V 26833 obtain financing for offer V 26835 took announcement as news V 26836 risen 9.875 to 178.375 V 26837 makes market in UAL V 26838 left % below level N 26838 left price before 13 V 26839 consider proposal from group N 26841 transferred ownership to employees V 26841 leaving stock in hands V 26842 had financing for plan N 26851 solve problems with union N 26857 worsened relations between unions N 26859 be ally to Wolf N 26861 paid million for stake V 26861 received % of company N 26861 received % at cost V 26864 sowed some of seeds N 26865 nursing million in losses N 26866 leaves residue of lawsuits N 26868 force recapitalization through process V 26868 oust board by vote V 26873 battle Japanese in market V 26874 is setback for Memories N 26880 satisfy need for DRAMs N 26880 satisfy need from market V 26883 be part of it N 26884 became officer of Memories N 26885 announce participation in Memories N 26893 got wind of coup N 26895 become service for Noriega N 26896 is subject for inquiry N 26897 stamping secret on complicity V 26899 assume authority to policy N 26899 take some of responsibility N 26901 block couple of roads N 26902 bears responsibility for timidity N 26904 tell Giroldi about laws V 26905 had Noriega in custody V 26915 Witness prosecution of North N 26916 deploring Men of Zeal N 26920 is artifact of mind-set N 26924 write rules in advance V 26927 strafe hideouts in Valley N 26928 take civilians with him V 26931 raised % in years V 26932 Dragging 13 into story V 26933 closing parts of Channel N 26934 were reports of deaths N 26937 determine cause of explosions N 26938 fell 1.125 to 23.125 V 26940 closed miles of Channel N 26942 had fire under control V 26943 spewed debris for miles V 26943 crumpled ceiling in school N 26946 including three in condition N 26949 were round in months N 26952 are cornerstone of operations N 26952 is contributor to profits N 26954 obtained disgorgement from figure V 26955 was captain of crime N 26955 was one of defendants N 26958 enjoined Lombardo from dealings V 26959 pay government within week V 26962 reported declines in profit N 26962 posted loss for quarter N 26966 anticipate charges to earnings N 26967 take effect of litigation N 26971 purchased shares of stock N 26971 purchased shares at cost V 26973 fell million to million V 26973 declined million to million V 26974 offset profits in sectors N 26975 was 4.04 during quarter N 26977 left Oil with loss V 26980 tumbled % to million V 26983 correct problems with boilers N 26991 buy products in markets V 27001 included gain of million N 27004 included charges of million N 27006 includes gains of million N 27006 indicating losses for quarter N 27007 reflecting softening of demand N 27009 Citing ownership in Co. N 27009 slid % in quarter V 27012 Offsetting stake in Lyondell N 27014 reported income of billion N 27015 were billion off % V 27024 are million of bonds N 27025 yield % in 2012 V 27025 yield % in 2014 V 27025 yield % in 2016 V 27035 brings issuance to billion V 27043 bring issuance to billion V 27056 was offering of securities N 27058 covering % of deal N 27059 have life of years N 27059 assuming prepayments at % N 27062 co-host program on Channel N 27069 endure shouting of Mort N 27073 dumped stocks of companies N 27074 fell 26.23 to 2662.91 V 27075 outpaced 1,012 to 501 N 27078 reduce flexibility of companies N 27079 beat path to issues V 27080 sold Co. of America N 27085 was pursuit of companies N 27086 entitled Winners of Wars N 27086 buy stocks of companies N 27087 pay attention to sheets N 27088 buy shares of Tea N 27090 equaling % of equity N 27090 carrying assets at billion V 27091 climbed 3 to 1 V 27091 gained 3 to 130 V 27092 fell 1 to 57 V 27092 gained 3 to 21 V 27093 slipped 1 to 43 V 27095 outperformed index by % V 27098 have exposure to cycle V 27099 dropped % from year V 27099 declined 1 to 24 V 27100 lost 7 to 35 V 27103 dropped 1 to 57 V 27104 fell 5 to 9 V 27104 lead list of issues N 27105 reach agreement with regulators N 27105 provide capital to MeraBank V 27106 dropped 5 to 41 V 27108 fell 1 to 1 V 27109 dropped 3 to 44 V 27109 retreated 1 to 57 V 27111 advanced 7 to 178 V 27112 fell 1 to 67 V 27112 dropped 3 to 42 V 27113 gained 7 to 11 V 27113 revamping terms of plan N 27113 sell operations for million V 27113 spin business to shareholders V 27114 follows withdrawal of offering N 27115 gained 1 to 37 V 27116 bought % of shares N 27118 rose 5 to 58 V 27118 climbed 7 to 138 V 27118 advanced 1 to 1 V 27118 added 1 to 67 V 27119 lost 3.11 to 379.46 V 27121 fell 3 to 20 V 27122 building ships for company V 27123 are sort of nicknames N 27129 being one of public N 27130 was experience with breed N 27131 controlled school with bullhorn V 27132 choosing chiefs from mold V 27134 take control in York V 27135 attacked concept of tenure N 27138 kept job for years V 27143 cut rate by % V 27146 takes system in midst N 27149 Getting community of parents N 27150 suggests process of disintegration N 27155 buy Register in transaction V 27158 pay million for Register V 27159 pay million in settlement N 27160 hired president of Ingersoll N 27161 left company after clashes V 27162 use part of proceeds N 27164 causing strain on finances N 27165 seeking line of million N 27167 head team at Goodson N 27167 had revenue of million N 27167 had revenue in 1988 V 27168 stretches years to friendship V 27170 expanding empire in partnership V 27171 has dailies in U.S. N 27173 concentrate energies on papers V 27175 take post at Co N 27176 become president for communications N 27178 take responsibility for effort N 27179 influenced publication of articles N 27180 make million in contributions N 27183 fought attempt by PLC N 27184 giving control of company N 27185 cite tension because efforts N 27185 cut costs at agency N 27186 been president of operations N 27187 take position of president N 27188 been president of operations N 27192 help Express in wake V 27196 sending note with case V 27200 approached him about job V 27201 was contender for job N 27203 leave company in hands V 27205 brushed reports about infighting N 27210 recommended him to Sorrell V 27212 labeled reports of friction N 27212 spent part of weekend N 27212 spent part on boat V 27213 oversee affairs among things V 27216 have repercussions at Ogilvy V 27217 affect relationships with agency N 27228 was inspiration at company V 27232 be answer to problems N 27235 disclose price for Consulting N 27235 counsels companies on supply V 27236 suggest price of revenue N 27239 awarded account for unit N 27239 awarded account to Shaffer V 27241 awarded account to Grey V 27243 be part of campaign N 27244 becomes the of stars N 27248 named chairman of Pictures N 27248 named president of unit N 27249 make movies for TNT V 27251 release films in U.S. V 27251 develop movies next year V 27252 made documentaries for networks V 27252 released pictures to theaters V 27257 receives go-ahead from authorities V 27258 values Mixte at francs V 27258 making one of takeovers N 27260 boost stake in businesses N 27261 make ally of group N 27262 holds stake in interests N 27264 protect it from raiders V 27271 be time in months N 27272 won battle for Victoire N 27274 winning year for control N 27276 reflects rivalry between groups N 27277 reflects pressure on companies N 27277 reduce barriers by 1992 V 27278 selling all of operations N 27278 selling all to Allianz V 27278 stressed potential for groups N 27279 bringing properties in transport N 27280 has investments in company V 27282 swell treasury to francs V 27283 bid francs for shares V 27284 offer shares for share V 27285 pending outcome of bid N 27286 publish details of bid N 27287 is one of bids N 27289 striking alliance with management N 27290 buying shares in retaliation V 27295 putting brakes on output V 27296 fell cents to 19.76 V 27299 take toll on prices V 27300 is the of year N 27301 discuss strategy for 1990 N 27303 use amount of crude N 27307 was estimate of damage N 27307 was estimate from company V 27308 put pressure on prices V 27312 fell cents to 1.1960 V 27313 were drop of 10,000 N 27314 made high for day N 27314 made high on opening V 27318 had fall in spite V 27319 buy copper in York V 27323 struggled day despite stories V 27326 have support around 480 V 27330 demanding level of proof N 27332 bring them to market V 27334 rose three-quarters of cent N 27334 rose three-quarters to 4.0775 V 27340 buy tons between 150,000 N 27340 been expectations of purchase N 27346 rose 33 to 1,027 V 27351 expects selling at level V 27352 helped cocoa in York V 27352 took advantage of move N 27354 bought interest in Ikegai-Goss N 27356 remain supplier to Ikegai-Goss N 27356 makes presses for industry V 27361 lower rates in effort V 27364 follow advance in August N 27366 fell points to 2662.91 V 27368 get sell-off in equities N 27377 sell billion of notes N 27378 sell billion of bonds N 27379 shown interest in bonds N 27380 have views about auction V 27381 siphoned buyers from sale V 27382 made debut in market V 27383 offered securities through group V 27384 covering % of deal N 27384 carries guarantee from company N 27385 sweetened terms from estimate V 27387 was offering by Corp. N 27389 were point in trading V 27394 sold billion of bills N 27403 closed point in trading V 27404 be one of credits N 27406 have appetite for it V 27409 restructuring mechanism on portion N 27411 maintain value of 101 N 27415 offered billion of securities N 27415 offered billion in issues V 27418 trailed gains in market N 27420 yielding % to assumption V 27423 was one of offerings N 27424 stimulate activity in market N 27426 attributed that to size V 27427 damped demand for bonds N 27430 drove yields on bonds N 27430 drove yields on bonds N 27433 fueled sentiment about market N 27437 fell point to 99.80 V 27437 fell 0.10 to 97.65 V 27439 rose 1 to 111 V 27439 rose 3 to 103 V 27441 twists face in fury V 27443 has years at A&M V 27444 rim blue of Gulf N 27445 been days of rain N 27446 is everything in sport V 27450 's 8 in morning N 27451 build themselves on water V 27453 puts croaker on hook V 27462 have limit of fish N 27463 are the at dock V 27464 wants life after college V 27466 are towns with atolls N 27469 forms core of Refuge N 27471 shot whooper by mistake V 27477 is place with church N 27478 read sign in pronunciation V 27480 is director of Center N 27481 launch venture for semiconductors N 27481 launch venture in January V 27482 merge activities in field N 27483 hold stake in venture N 27490 supplies transmissions to makers V 27494 reporting profit across board V 27496 planning production with Co. N 27496 planning production of integration V 27497 disclose details of arrangement N 27497 disclose details at conference V 27499 do chores in exchange V 27505 found measure of fame N 27505 found measure in Paris V 27507 had lots of them N 27511 adopted 12 of races N 27514 saved her with offer V 27518 was island in world N 27519 had experience of bigotry N 27522 overemphasize importance of end N 27523 teaches literature at University V 27523 uncovered region for desire N 27523 ignoring centuries of tributes N 27526 raises questions about vision N 27527 was jazz by stretch V 27528 find parallels with Cleopatra N 27529 died days after opening N 27530 made it into Casablanca V 27531 led her to conclusion V 27533 leads sympathizers in Marseillaise V 27534 occupied all of France N 27539 was one of moments N 27542 produce album of drawings N 27545 is editor of Journal N 27546 rid itself of asbestos V 27548 caught eye of investors N 27550 owns % of stock N 27550 owns % on basis V 27550 settling claims with victims V 27551 convert stock to cash V 27552 depress price of shares N 27553 convert shares to cash V 27553 dumping stock on market V 27556 cause recapitalization of shares N 27560 receive million on bond V 27563 settled 15,000 of claims N 27563 settled 15,000 for average V 27566 need infusion of funds N 27573 sell some of shares N 27575 seeking buyer for shares N 27575 seeking buyer before 1993 V 27578 is case of company N 27584 's one of the N 27585 buy companies at the V 27598 requested information from companies N 27598 acquire Corp. for 40 V 27601 anticipate problems with completion V 27603 begun offer for all N 27604 pending resolution of request N 27606 enhance position in portion N 27607 sell stake in unit N 27607 sell stake to fund V 27607 spin operation to shareholders V 27608 places value on operation N 27609 review plan at meeting V 27614 obtain seats on board N 27616 holding seats on board N 27617 raise value of investments N 27618 bought stake in Pacific N 27618 have interests in company N 27624 given seats on boards N 27624 avoid them because concerns V 27625 buy stake in portfolio N 27626 marks commitment to development N 27627 lend Realty in form V 27628 accrue interest at rate V 27629 provide capital for company V 27629 spending cash on payments V 27630 be one of companies N 27631 redirected operations toward development V 27633 repay million in debt N 27633 repay million before spinoff V 27634 reduce debt to million V 27635 obtain payment of million N 27639 holds acres of land N 27640 including acres in area N 27641 be source for development N 27643 negotiated structure of deal N 27643 negotiated structure with Pacific V 27644 represent fund on board V 27644 insulate fund from problems V 27647 be tests of ability N 27647 convince jury of allegations N 27649 pointed finger at Sherwin V 27655 found Bilzerian in June V 27656 spared term by judge V 27659 left reputations of GAF N 27659 left reputations in limbo V 27660 carry penalties of years N 27661 faces fines of 500,000 N 27663 is speculation among attorneys N 27663 include testimony by Sherwin N 27668 claim injuries from device N 27668 hear appeal of plan N 27669 pits groups of claimants N 27669 pits groups against each V 27670 is centerpiece of plan N 27671 places cap on amount V 27672 bars suits against officials N 27673 challenging plan on behalf V 27675 marketed Shield in 1970s V 27676 give protection from lawsuits N 27682 is verdict in case N 27684 insure cleanup of activities N 27685 concerning release of substances N 27688 remove asbestos from building V 27695 fighting execution of mass-murderer N 27695 taken case before Court N 27695 taken case on side V 27696 filed brief with Foundation V 27697 waive rights of review N 27699 appealed sentence in capacity V 27700 is review of sentences N 27702 was one of firms N 27702 displaying bias in work V 27703 give lot of credit N 27705 misrepresented copies of artwork N 27705 misrepresented copies as lithographs V 27706 had value of 53 N 27708 making misrepresentations in sales N 27712 specify nature of differences N 27713 becomes one of executives N 27716 has billion of assets N 27716 is bank in California N 27717 controls % of market N 27728 blamed decline in quarter N 27729 posted rise to million N 27731 included gain of million N 27732 reflected charge of million N 27734 rose % in quarter V 27735 transfer ownership of subsidiary N 27735 transfer ownership to two V 27737 sells all of businesses N 27738 sell right to party V 27742 transfer ownership of subsidiary N 27742 transfer ownership to Lavin V 27743 pump million to million N 27743 pump million into Alliance V 27744 distribute % of Alliance N 27744 distribute % to representatives V 27750 worked Wednesday in Chicago V 27755 prompting Bank of Canada N 27755 sell currency on market V 27756 tracking development on Street N 27756 catch breath of data N 27764 be statistics for time N 27767 sees this as piece V 27769 predict rise in deflator N 27769 climbing % in quarter V 27774 expects reaction from news N 27775 show decline of % N 27775 show decline in September V 27776 follows rise in August N 27777 found bottom at marks V 27791 added 99.14 to 35585.52 V 27793 lost part of gains N 27794 rose points to 35586.60 V 27795 took profits against backdrop V 27801 appraise direction of policy N 27804 providing direction over weeks V 27805 took profits on shares V 27805 shifting attention to companies V 27806 gained yen to yen V 27808 gained 30 to 1,770 V 27809 advanced 40 to 4,440 V 27811 gained 50 to 2,060 V 27812 receiving interest for holdings V 27813 underscored lack of conviction N 27814 signaled support for equities N 27815 pegged support to anticipation V 27816 's case of market N 27818 finished points at 2189.7 V 27819 closed points at 1772.6 V 27820 was shares beneath year V 27821 suggest deficit of billion N 27823 have impact on market V 27824 rose pence to pence V 27828 drawing attention to negotiations V 27829 bring market to levels V 27833 were gainers amid hope V 27833 added marks to marks V 27834 gained 1 to 252.5 V 27835 firmed 2 to 723 V 27835 lost amount to 554 V 27842 make % of capitalization N 27844 sell division to Services V 27845 assume million in debt N 27846 buy million of stock N 27846 buy million at 2.625 V 27846 acquire million of common N 27846 acquire million at price V 27851 is unit of Ltd. N 27853 are guide to levels N 27883 reported loss of billion N 27883 following boost in reserves N 27887 Excluding increase in reserves N 27887 increased % to million V 27890 fell cents to 50.50 V 27891 named president of division N 27894 been president of division N 27894 been president since April V 27895 was division of Co. N 27895 was division before merger V 27900 build factory in Guadalajara N 27901 begin year with production V 27902 have expenses of million N 27903 make line of machines N 27904 has factory in Matamoros N 27905 purchases products from manufacturer V 27910 reflecting million of expenses N 27913 awaits vote on offer N 27916 reported loss of million N 27917 had deficit of million N 27917 had deficit with sales V 27918 declined % from year V 27919 fell 1.125 in trading V 27921 trimmed income to million V 27923 filed suit against state V 27924 is counterclaim to suit N 27925 prevent contamination of hundreds N 27930 seek reimbursement from state N 27935 spraying dispersant on oil V 27936 break slick into droplets V 27936 was part of plan N 27936 banned use during days V 27937 had permission from Agency V 27937 use dispersant during incident V 27941 raised stake in Industries N 27941 raised stake to % V 27942 including purchases of shares N 27943 is company of Morfey N 27947 approved billion in funding N 27947 assist recovery from earthquake N 27947 extend aid to victims V 27948 provoked struggle with lawmakers N 27948 expedite distribution of funds N 27949 forced confrontation between Chairman N 27950 play tone of meeting N 27951 is amount of jealousy N 27954 complete action before tomorrow V 27957 finance loans by Administration N 27960 was factor among Republicans N 27961 crafted package in style V 27961 used force of chairmanship N 27962 underscore range of changes N 27965 faces resistance in bid N 27965 put funds on repairs V 27966 build support in panel V 27967 add million in aid N 27968 puts it in position V 27969 raised cap on loans N 27970 including sale of company N 27972 introduced line for market N 27973 realize potential of technology N 27974 had loss of million N 27975 citing differences with Kurzweil N 27976 indicate improvement over year N 27977 improves yields of manufacturers N 27980 provides services to companies V 27981 attributed improvement to demand V 27982 offer million in paper N 27983 matches funds with leases V 27989 denounced involvement in war N 27996 commemorated anniversary of uprising N 27997 held march through Budapest N 27998 staged protests in cities V 28002 shrouded base before touchdown V 28003 shook plant near Pasadena N 28006 ease differences over guidelines N 28007 notify dictators of plots V 28008 placed forces on alert V 28009 rejected Sunday by Aoun V 28010 convenes session in Portugal V 28011 reshape defenses in Europe N 28011 reshape defenses amid changes V 28012 gain freedom for hostages N 28014 seek clarifications from U.S. V 28016 called views on Africa N 28020 posted profit of million N 28022 attributed decline to softening V 28024 buy shares of the N 28025 distribute 21 in liquidation V 28027 treat dividends as gains V 28030 reduced income by cents V 28032 reduce income for year N 28032 reduce income by cents V 28034 had income of million N 28036 granted stay of action N 28036 guaranteeing loans for Schools N 28037 alleged violations of regulations N 28039 set hearing on action N 28039 set hearing for 30 V 28040 posted bond against losses V 28040 guaranteeing loans for students N 28040 guaranteeing loans to hearing V 28051 enforcing regulations for imports V 28054 has contract with importer V 28055 bring vehicles into compliance V 28056 tightened standards for imports N 28057 report income for quarter V 28058 reported earnings of million N 28059 post revenue for quarter N 28062 were million on revenue V 28064 report income for year N 28065 projected revenue for year N 28066 attributed gains to demand V 28067 cover costs at plant N 28067 reduced income by million V 28068 has sales of million N 28069 earned 774,000 in quarter V 28070 setting million for cleanup V 28070 reduced income by million V 28071 signed decree with Ohio V 28071 build facility at plant V 28072 is one of companies N 28075 purchase over-allotment of units N 28077 viewed offering as defense V 28077 balloons number of shares N 28078 purchase half-share of stock N 28082 quashed prospects for revival N 28084 leave airline with problems V 28086 sank points to 2662.91 V 28090 sell % of unit N 28090 sell % to fund V 28090 spin rest to shareholders V 28091 values operation at billion V 28092 reported loss for quarter N 28093 shed assets in August V 28094 exceeded deposits by billion V 28095 fell % in quarter V 28099 take post at Express N 28100 follows takeover of agency N 28101 restrict use by prosecutors N 28105 dismiss % of force N 28106 renews concern about buyouts N 28107 plans bid for firm N 28109 plunged % in quarter V 28109 reflecting weakness in businesses N 28117 restrict use of charges N 28118 disrupting functions of companies N 28119 harm parties in case V 28120 distributed clarifications to attorneys V 28122 commit pattern of crimes N 28122 commit pattern by means V 28122 forfeit proceeds of enterprise N 28125 is directive to prosecutors N 28125 seize assets from defendants V 28128 was kind of snubbing N 28129 volunteered testimony to Democrat V 28130 investigating failure of Association N 28133 caused apprehension in Senate V 28138 's no-no in book V 28139 attached himself to story V 28144 chaired Committee until 1974 V 28145 conducting business in open V 28146 denouncing affair as meeting V 28149 resume Thursday with testimony V 28150 relieved them of responsibility N 28150 relieved them in 1988 V 28151 expressed concern over report V 28151 discuss testimony in advance V 28158 got glimpse at list N 28160 placed lot of senators N 28160 placed lot in position V 28161 ensure fairness for constituent V 28162 is corporation with holdings N 28163 expresses sympathy for Riegle N 28165 forgotten confrontation over Wall N 28167 trade provisions in legislation N 28169 be understanding on insistence N 28170 holding equivalent of hearings N 28173 raised 20,000 for campaign V 28173 taking side against regulators N 28175 press suit against Keating N 28176 is heist in history N 28176 have Watergate in making V 28182 disputed account of meeting N 28184 inspect damage in Francisco N 28185 started life in Angeles N 28185 started life with 400 V 28186 left Union with 480 V 28186 dropped 80 on suit V 28188 spent 120 for hat V 28189 was time for that N 28192 run company with sales N 28193 become publisher of Movieline N 28193 began distribution with run V 28194 melds archness with emphasis V 28201 keeps track of rest N 28205 wear hats in Russia V 28215 sees party-giving as part V 28216 thrown soirees for crowds V 28219 serves tea at 5 V 28221 catch people after work V 28222 invites directors for clips V 28223 bring movies on tape N 28223 show segments on screen V 28226 has title of co-publisher N 28234 writing column about cuisine N 28234 writing column for Izvestia V 28235 became basis for cookbook N 28240 introduces chapter with quotations V 28244 is person with memories N 28245 was child of privilege N 28249 maintain dignity under circumstances V 28251 remove herself from eye V 28253 obtain permission from husband V 28254 endure hours of abuse N 28258 found work in field N 28268 has warning for companies N 28268 do business in Union V 28272 Doing business with Russians V 28272 become goal of companies N 28273 taking part in exhibition V 28274 stymied deals in past V 28274 show sign of abating N 28277 opened field to thousands V 28279 spearheading attempt by firms N 28279 involving investment of billion N 28280 spends lot of time N 28290 lined day at stand V 28290 receive tube of toothpaste N 28291 knocked showcase in rush V 28293 received orders for toothpaste N 28294 ship million in months V 28297 export some of goods N 28299 buys dolls for export V 28300 share earnings from revenues N 28302 invest capital on basis V 28304 publish journal in conjunction V 28306 containing details of advancements N 28309 given contract for parts N 28310 won contract for parts N 28311 issued contract for systems N 28312 awarded contract for services N 28313 sold one of systems N 28313 sold one to Office V 28316 accept bid of lire N 28316 rejecting offer by A N 28319 completes merger with Venetoen N 28319 completes merger by end V 28326 owns % of Banco N 28329 needed links with company N 28330 reserves right as member V 28332 offered lire for stake V 28336 sell stake in resorts N 28338 estimate debt at billion V 28339 owns % of Australia N 28340 provide details of merger N 28343 shake confidence in Australia N 28344 suspended trading in shares N 28344 answered inquiry about extent N 28345 be response to inquiry N 28346 owes million in loans N 28347 has investment of million N 28348 reduce expense by million V 28349 sold % of resorts N 28349 sold % to Japan V 28350 acquire stake in resorts N 28354 cut flow by million V 28355 cut revenue at resorts V 28355 completing sale of stations N 28356 sued Australia for breach V 28357 reported results for year N 28362 disclosed disagreement among directors N 28363 paid company in year V 28365 approve payments to executives N 28368 market chip with circuits N 28369 fed diet of electricity N 28370 remember data for years V 28371 retain data without electricity V 28373 shipping quantities of chips N 28375 getting technology from Corp. V 28376 shipping quantities of chips N 28377 take part of market N 28378 require steps than chips N 28380 accept data at speeds V 28383 give depositions before reporters V 28387 allow depositions by television N 28388 connects Dallas with Miami V 28389 set shop in Chicago V 28389 tie rooms into network V 28391 use network for fee V 28391 take depositions from witnesses V 28392 Reverse Tack On Protection V 28393 been point for makers N 28395 been responses to suits N 28399 accuses Motorola of turnabout V 28401 made charges in amendment V 28401 sued Hitachi for violation V 28410 splits image into representations V 28411 citing sales of goods N 28411 dropped % for quarter V 28412 represented quarter of earnings N 28412 represented quarter for retailer V 28413 fell 1.375 in trading V 28416 had shares at 30 V 28420 offset problems at Shack N 28421 grew % in quarter V 28422 cut estimate for Tandy N 28423 earned million in year V 28424 are less-advanced than computers N 28425 added products to line V 28425 focusing advertising on software V 28429 delivered message about market N 28429 delivered message to officials V 28432 is year for market N 28434 has following of investors N 28435 stem fallout from defaults N 28437 is shakeout in market N 28441 received month from Corp. V 28442 put chain for sale V 28444 acknowledged problems for junk N 28450 been selling of bonds N 28451 been sellers of bonds N 28451 been sellers of losses V 28452 been sellers of bonds N 28452 produced redemptions by shareholders N 28455 were sellers of holdings N 28455 were sellers throughout quarter V 28458 have lack of liquidity N 28465 owns million of bonds N 28466 been cause of problems N 28468 caused furor on Street N 28468 show correlation with findings N 28469 had rate of % N 28471 include offerings by Industries N 28475 sold billion of bonds N 28475 sold billion for Co. V 28476 dwarfs that of firm N 28480 reeled names of pals N 28482 has lot of members N 28483 mention any of them N 28484 has way with names V 28487 lived door to cartoonist N 28490 be avenue of entrance N 28491 provides sense of affiliation N 28491 open conversation with someone N 28493 having drink in Sardi V 28494 followed her into room V 28501 changed name from Stretch V 28502 get me into trouble V 28502 gotten access to society N 28505 dropping five in diaries V 28507 're the of friends N 28509 flaunt friendships with Trumps N 28510 drop names like Flottl N 28511 's one-upsmanship of name-dropping N 28513 link municipality with names V 28515 set hair on fire V 28516 call Mistake on Lake N 28518 owned store in Cleveland N 28518 played witch in Wizard V 28518 ran school in Cleveland N 28521 sold house in Nuys N 28527 do it with malice V 28528 get attention of journalists N 28529 leaves messages with office V 28529 has story on Trump N 28530 has story on any V 28532 are dangers to name-dropping N 28533 labels dropper as fake V 28549 runs miles along Parkway V 28554 spawned explosion of choice N 28554 spawned explosion in America V 28560 causing stress among consumers V 28561 be brands from makers N 28569 pull boat at time V 28570 take grandkids to lake V 28572 make car for purpose N 28573 are cars for purpose N 28574 divided market into segments V 28576 is market for automobiles N 28578 counter invasion with brands V 28580 created nameplate in 1985 V 28580 sell sedans in U.S V 28584 asked consumers about habits V 28589 prefer cars by % V 28590 aged 18 to 44 N 28595 get mileage than models N 28604 established section in department N 28605 test-drive Volvo to dealership V 28610 felt way about bags N 28613 has lot of attraction N 28614 offering engine on model V 28616 exceeded sales of billion N 28618 lay 75 to technicians N 28621 find holes in yard V 28622 adding insult to injury V 28624 bringing bucks to crooks V 28625 are versions of palms N 28628 damaged Sagos at home N 28630 dig plants in dead V 28630 selling them to landscapers V 28631 become accent in tracts N 28631 giving market for fronds N 28632 plant things in yard V 28634 want gardens out front V 28635 put stake in ground V 28635 tied tree to stake V 28636 cut chain with cutters V 28638 making figures in 1988 V 28643 describes variety of strategies N 28643 involving sale of basket N 28644 sell baskets of stocks N 28644 offset position with trade V 28645 's form of trading N 28645 create swings in market N 28646 was trader in September V 28647 reported volume of shares N 28651 filed suit against Corp. V 28653 experienced writedowns because assessment V 28658 defend itself against suit V 28660 charged directors with breach V 28663 had change in earnings N 28665 compares profit with estimate V 28665 have forecasts in days V 28667 completed purchase of operation N 28668 has sales of million N 28669 release terms of transaction N 28670 rose % in quarter V 28671 lowered stake in concern N 28671 lowered stake to % V 28674 position itself in market V 28674 transform film into video V 28678 face shortage of programs N 28678 replacing sets with HDTVs V 28685 watching movie on set V 28686 are link between film N 28690 be demand for 4,000 N 28692 is shoulders above anything V 28696 total billion over decades V 28697 break images into lines V 28698 resembling dimensions of screen N 28702 turn business into dinosaur V 28706 revealing some of aspects N 28707 plan investigation at end V 28708 pursue matter in hope V 28709 is kind of beast N 28712 is form of gambling N 28713 changed hands in scandal V 28716 faced threat of restrictions N 28717 maintain ties with organizations N 28721 took root as entertainment V 28722 created industry with income N 28726 keep track of income N 28727 split industry in two V 28728 donated money to members V 28729 win support in battle N 28729 laundering money between JSP V 28733 received donations from organizations V 28736 received yen from organization V 28737 received yen from industry V 28737 including yen by Kaifu N 28742 occupied Korea before II V 28742 faces Koreans in society N 28747 had tickets for recital N 28748 begun studies at age V 28749 give damn about basketball V 28754 gives recital at Center V 28756 was part of pack N 28757 joined roster of Inc. N 28757 joined roster at age V 28764 prove myself to her V 28769 put hands on hips V 28775 compliment me on intonation V 28776 discovered predilection for composers N 28777 winning competition with performance V 28777 play work for composer V 28778 performed work with accompanist V 28780 's motif throughout movement V 28786 bring orchestra at point V 28791 won kudos for espousal V 28792 make interpreter of works N 28799 finds satisfaction in music V 28799 puts it during interview V 28803 is writer in York N 28806 damp economy at time V 28810 hit high of % N 28821 boost stock of debt N 28822 consider distribution of credit N 28823 Citing figures on loans N 28825 improves value of property N 28832 putting economy at risk V 28834 enjoys one of images N 28842 is part of culture N 28844 getting control of distribution N 28846 wear uniform of day N 28847 precipitated resignation of Lesk N 28848 named officer of Co. N 28851 spending years at Maidenform V 28852 want presidency of company N 28852 named president of sales N 28852 assuming some of responsibilities N 28853 downplayed loss of Lesk N 28853 split responsibilities among committee V 28863 are forces in apparel N 28866 command price in market N 28870 has vote at meetings V 28874 designed bra in 1920s V 28877 has facilities in U.S. V 28878 has outlets with plans V 28879 joining Maidenform in 1972 V 28879 holds degree in English N 28880 headed division since inception V 28881 maintain exclusivity of line N 28883 succeeded Rosenthal as president V 28886 cover months of imports N 28890 taken toll on reserves N 28891 marked drop from billion N 28893 slammed brakes on spending V 28894 faces battle because forces V 28897 measures trade in services N 28898 suggests number of scenarios N 28900 had deficit of billion N 28901 takes actions in months V 28902 finish year with deficit V 28903 stem drain on reserves N 28904 suspended loans to China N 28906 forecasting slowdown in investments N 28913 rose % in months V 28914 reported gains in all N 28915 expects rise in profit N 28916 closed acquisition of Co. N 28918 had sales of million V 28919 is partnership with interests N 28920 was feet over Minnesota N 28923 ground him for repairs V 28923 skipped stop in Chicago N 28923 get load to hub V 28924 gotten thing on ground V 28927 delivering goods on time V 28928 are tribute to management N 28928 had way with force V 28930 elect Association as agent V 28931 bring union to operations V 28931 pitted hires against veterans V 28934 have losers except competition V 28936 reconcile melding of classifications N 28937 face elections among mechanics V 28939 have effect on culture V 28940 leaves room if any N 28941 fostered ethos of combat N 28944 surpass call of duty N 28947 vent steam through procedure V 28948 gives talks in briefings V 28958 stretching schedules to limit V 28961 given leg on Inc. N 28962 prohibit drivers from doing V 28963 load vehicles at depot V 28966 thrust company into territory V 28966 expanded rights to countries V 28968 fly planes on routes V 28971 squeezed margins to % V 28973 fell % to million V 28976 closed Friday at 53.25 V 28977 's irony in fact V 28977 faces problems as result V 28978 airlifted supplies over Hump V 28979 modeled company on innovation V 28981 acknowledge mistakes in drive N 28984 is the of problems N 28985 encouraging dialogue between workers N 28986 called meeting in hangar N 28989 battled management for years V 28989 were members until day V 28990 fired time without notice V 28993 seal deal with Chairman N 28997 identifying vote for representation N 28997 identifying vote as vote V 28999 appeared weeks in videos V 29003 manage operations with advice V 29008 cost lot of will N 29016 endure harangues by pilots N 29020 obtained order for vehicles N 29024 produces products for markets N 29025 convicted Judge of articles V 29025 removing judge from job V 29029 convict Hastings of perjury N 29030 remove Hastings from office V 29033 handling prosecution in Congress V 29034 protect institutions from people V 29034 abused positions of trust N 29039 was one of judges N 29040 packed gallery with supporters V 29040 kept distance from case N 29041 respect judgment of Senate N 29042 racked numbers in miniseries V 29045 are plenty of inspirations N 29048 seems franchise for series N 29049 pokes styles of the N 29057 been victim of incest N 29060 tailing them as subversives V 29063 were chauffeurs for Hoover N 29065 describes reporter as Amendment V 29066 describes corpse as Williams V 29071 revved show to point V 29072 gets hold of this N 29076 explaining anything to Kennedy V 29076 chasing cars in Anchorage V 29081 built career on hate V 29083 turn world into dump V 29084 was crime against humanity N 29087 have series with character V 29089 add pizzazz to script V 29093 attends unveiling of memorial N 29096 was moment for television N 29097 's program inside noise V 29099 put spin on it V 29107 purchased company in Texas N 29107 purchased company for million V 29108 acquired Corp. for million V 29109 holds properties in fields N 29109 provide Texaco with reserves V 29110 contain reserves of feet N 29111 is indication of commitment N 29113 put barrels of reserves N 29113 put barrels on block V 29120 settled fight with Pennzoil N 29120 settled fight for billion V 29121 played role in settlement N 29121 take control of company N 29121 sold stake in Texaco N 29123 reduced distribution for trust N 29126 had income of million N 29129 borrowed quote from writer V 29129 wrote words in Book V 29131 had surplus of billion N 29133 follows declines in figures N 29136 give some of independence N 29136 give some to knight V 29137 leave speculators with losses V 29138 giving value of francs N 29139 owns % of AG N 29140 owns % of AG N 29145 acquired control of Victoire N 29148 exploring plans for acquisitions N 29148 called managers of companies N 29149 acquiring shares of AG N 29151 holds % of AG N 29151 give right of refusal N 29153 raise stake in AG N 29155 excited interest in AG N 29156 constitute portfolio in Belgium N 29157 do job of coordinating N 29159 was member of Commission N 29161 gathering views of Department N 29161 distilling information for president V 29162 leaving execution of policies N 29162 leaving execution to Department V 29168 diminished role of NSC N 29169 sensed need in world N 29173 is one of problems N 29178 underscored inadequacy of staff N 29179 are experts in affairs N 29181 become confidants of Bush N 29182 has background in America N 29186 fell % from days V 29188 admitting role in scandal N 29189 was director for Sperry N 29190 left Navy in 1985 V 29191 took place between 1982 V 29193 computerize maintenance of equiment N 29194 give advantage in competition N 29196 requested approval of scheme N 29196 requested approval from officials V 29203 offered 5,000 for story V 29204 sent thousands of releases N 29204 sent thousands from office V 29209 offered each of runners-up N 29213 get nominations from folks V 29214 generating publicity for contest N 29225 broke talks about alliance N 29226 intensify pursuit of maker N 29227 continue search for ally N 29228 have contacts with manufacturers V 29230 make sense to parties V 29232 seen alliance as way V 29232 expand presence in markets N 29233 discussed link between operations N 29235 surrendering any of autonomy N 29238 plunged % to kronor V 29240 became foundation of model N 29241 had talks with Fiat N 29242 make announcement about it N 29243 focus resources on struggle V 29245 faces fight for Jaguar N 29246 have alliance with GM V 29247 touring operations in Detroit N 29249 views Jaguar as prize V 29249 give leg in end N 29250 encountered setback in effort N 29250 market sedan in U.S. V 29251 boosted holding to % V 29252 changed hands in trading V 29253 rose cents to 11.125 V 29259 signed him in April V 29261 fires pass into hands V 29265 was the in string N 29267 ended million in red N 29268 has some of costs N 29270 take comfort in fact V 29276 have kind of stream N 29279 represent breed of owner N 29280 buying % of team N 29280 buying % from Bright V 29281 took Cowboys to Bowls V 29285 cut staff by half V 29286 calls Pentagon of Sportdom N 29291 see place for sort N 29296 posting seasons in each V 29302 led Hurricanes to seasons V 29308 trading back to Vikings V 29309 dropped prices from 25 V 29310 given costs in league N 29311 raised year by 2.40 V 29313 included rights for stadium N 29314 offer view of field N 29315 taking owners onto field V 29315 buy one of rooms N 29315 promises look at strategy N 29315 promises those before time V 29318 are source of cash N 29319 is contract with television N 29322 jack price for rights N 29323 get stations in Mexico N 29325 played part in wars N 29326 signing Aikman to contract V 29326 pay quarterback over years V 29333 boost profit in ways V 29337 have lease in NFL N 29340 imposed limit on teams V 29344 expand offerings to companies V 29347 fighting bureaucracy for say V 29347 produced form of gridlock N 29348 install Finks as replacement V 29354 keep schedule on track V 29354 flies secretaries from Rock V 29354 augment staff in Dallas N 29355 made it on basis V 29363 use form of journalism N 29363 explain perception of Days N 29364 chastises Franklin-Trout for presentation V 29371 contain comments from Israelis N 29372 doing documentary on apartheid N 29373 tracing conflict to days V 29377 endure rash of critics N 29377 know details of side N 29383 need permission from Office N 29393 completed purchase of Corp. N 29395 is subsidiary in Wisconsin N 29396 signed letters of intent N 29397 monitor condition of companies N 29397 facing opposition from firms N 29398 be focus of hearings N 29399 give authority during emergencies V 29400 monitor levels at companies N 29401 provide financing for acquisitions N 29402 renewed concerns among regulators N 29405 is one of issuers N 29407 divert resources of commission N 29407 divert resources from broker-dealers V 29409 support concept of disclosure N 29413 organized series of exchanges N 29418 share belief in principles N 29422 provide excuse for departures N 29423 make distinctions among Fidel N 29425 equate policies with will N 29425 merge agendas of Fidel N 29426 resisted collaboration with officials N 29427 violate jurisdiction of government N 29428 follow fact than rhetoric V 29430 deny access to things N 29431 is justification for behavior N 29434 adjust estimate for split V 29435 was % than average N 29438 represents percentage of debt N 29438 unload bonds by spectrum V 29440 has blocks of maturity N 29442 confirm size of issue N 29444 expected amount of bonds N 29445 issue amount of debt N 29446 sold million of bonds N 29451 follows warning from Comptroller N 29455 project gap on order N 29457 charges critics with spreading V 29463 knew outcome of election N 29464 been number of questions N 29466 quoted Friday at price V 29473 provide it with million V 29474 owned % by Australia V 29475 sank 2.625 in trading V 29479 repay million in debt N 29480 terminating agreement on The N 29480 Leave It to Beaver V 29487 following breakdown of talks N 29487 re-evaluating position as shareholder N 29487 minimize degree of loans N 29491 has investment in Entertainment N 29492 pay billion than 1 N 29494 was director of company N 29496 made bids for studio N 29498 is topic of conversation N 29499 provide services in languages V 29500 playing role in fall N 29503 are facts behind assertions N 29503 sent kind of signal N 29504 were statement on subject N 29504 control events in markets N 29508 changed posture on deal N 29511 has judgment on risks V 29515 played part in decision N 29518 been speculation in circles N 29521 pull horns on buy-outs N 29524 curry favor with bureaucrats V 29528 cool some of fever N 29534 is grade than grade N 29537 soared % to francs V 29540 introduce system for parking N 29541 putting money in machines V 29544 is partner in project N 29547 lost bidding to group V 29553 introduced cigarettes under label V 29554 win share from cigarettes V 29555 have driving on minds V 29556 had impact on activities N 29557 were part of cases N 29558 reinstated preamble of law N 29562 has bearing on laws V 29563 throw charges against demonstrators N 29563 blocked access to Services N 29569 left room for grass N 29569 is one of cracks N 29570 recognized right to abortion N 29571 escape prosecution for trespass N 29572 's risk to protesters N 29573 be result of case N 29578 imprisoning fetus of woman N 29582 stabbing people to death V 29582 are a of activities N 29587 has years of experience N 29587 investigating abuses on sides N 29588 are part of drama N 29588 affecting positions of both N 29593 fight rebels of Movement N 29596 maintain contact with world N 29598 held gridlock over Ethiopia V 29598 accept runway as 2 V 29602 threatening town of Dese N 29602 cut capital from port V 29603 transfer thousands of troops N 29603 transfer thousands from Eritrea V 29603 risking loss of territory N 29603 keep Tigreans at bay V 29604 defending city of Asmara N 29604 defending city from Eritreans V 29608 strike blow for rights N 29608 undo flip-flop of 1970s N 29609 distancing itself from Barre V 29618 positions itself for period V 29618 back role as mediator N 29618 opening channels of communications N 29618 opening channels through Sudan V 29619 are the in all N 29626 got contract for systems N 29627 received contract for cones N 29628 awarded contract for parts N 29629 awarded contract for support N 29630 was 0.628394 on offer N 29632 is manager of partnerships N 29633 buy shares from group V 29633 boosting stake to shares V 29634 rose % in September V 29635 followed boosts of % N 29636 cast shadow over markets V 29647 puts capacity at million V 29649 estimated capacity at barrels N 29650 keep markets on edge V 29654 get shares of increases N 29656 approved increase of barrels N 29658 legitimize some of overproduction N 29660 accept reduction in share N 29663 promised parity with Kuwait N 29665 be basis for discussion N 29667 reducing shares of others N 29671 left percentage of total N 29671 increased volume to barrels V 29673 's reduction in share N 29674 maintaining share of production N 29677 sharpen debate within establishment N 29680 protect carriers from attack V 29681 buy F-18s from Navy V 29682 is attack on Rafale N 29684 criticize Rafale as plane N 29685 made secret of preference N 29686 inflame dispute within establishment N 29688 is result of inability N 29688 develop plane with countries V 29690 brought issue to head V 29692 heightened pressure for planes N 29694 represent protection for carriers N 29694 meet crises as wars N 29695 told meeting of Association N 29703 eased % to yen V 29705 posted drop in profit N 29710 play fiddle to carrier V 29713 transform itself from carrier V 29715 earned Kong on revenue N 29719 expand fleet to planes V 29720 replace fleet of Tristars N 29720 replace fleet for flights V 29721 moving some of operations N 29721 moving some outside Kong V 29722 pushing costs by % V 29722 leaving colony as part V 29723 place others in Canada V 29724 secure passports of 1997 N 29725 promote Kong as destination V 29727 attracting visitors from Japan V 29730 sees alliances with carriers N 29730 sees alliances as part V 29734 put funds into business V 29738 coordinate extensions to Boston N 29741 double flights into China N 29741 double flights to 14 V 29741 restart flights into Vietnam N 29743 is option for Cathay N 29743 jeopardize rights in Kong N 29744 rules move to London N 29745 putting faith in agreement V 29748 have hope in run V 29752 increase cap to % V 29756 are guide to levels N 29789 restricting access to structures N 29790 weaving way along street V 29792 shakes head in amazement V 29797 offered response to disaster N 29799 offered brie for breakfast V 29802 finds response of residents N 29805 allowed hunt through possessions N 29812 dumped belongings into pillowcases V 29812 threw goods out windows V 29824 become point of efforts N 29824 reunite residents with pets V 29825 offering reward for cat N 29826 providing care for animals V 29827 sought homes for fish V 29831 resembles sections of cities N 29834 been burglary in mall V 29839 offering merchandise at prices V 29843 improves image to outsiders V 29843 arrest exodus of investment N 29844 is creation of jobs N 29846 created jobs at cost V 29849 receives % of profits N 29850 had effect on neighborhood V 29851 been area with shops N 29851 experiencing upgrading in stock N 29854 have models than kingpins N 29856 putting one of deals N 29863 are three to times N 29864 has nest above roofs V 29867 has force of personnel N 29867 has force on duty V 29868 is % to % N 29872 encourage investment in areas N 29872 encourage investment with requirements V 29873 identifying sources of funds N 29875 represent market for investment N 29878 encourage development in areas N 29880 is researcher at Department N 29881 redeem amount of 59.3 N 29883 notify holders of notes N 29885 join Board from market V 29887 trades shares of interest N 29889 join Thursday under HIB V 29891 started OTC with symbol V 29894 operates types of facilities N 29897 sell security at price V 29899 begin offer of 12.25 N 29902 includes million of debt N 29903 buy % of shares N 29904 is operator of facilities N 29904 had sales of million N 29905 is operator in facilities N 29907 regains glamour among investors V 29912 be return to growth N 29918 use spurt in issues N 29921 is performance in economy N 29922 get valuations of stocks N 29923 pay prices for companies V 29928 took seat to flow V 29937 play part in decisions N 29938 added Medical to list V 29941 rose % in 1987 V 29942 follows stock for Quist V 29942 grow % to 2.15 V 29945 eased 0.13 to 470.67 V 29947 was week for stocks N 29949 lost 3 to 17 N 29949 lost 3 on volume V 29951 lost 1 to 106 N 29952 lost 7 to 1 N 29952 had loss in quarter N 29955 jumped 1 to 47 N 29956 dropped 1 to 21 N 29958 began trading at 12 N 29962 plummeted 1 to 7 V 29963 perform studies on device N 29964 dropped 5 to 1 V 29964 seeking protection from lawsuits N 29964 seeking protection under 11 V 29965 lost 1 to 10 V 29965 cover charges in connection N 29968 added 5 to 110 V 29968 lost 1 to 41 V 29969 secured commitments from banks N 29969 finance bid for million N 29970 entered pact with BellSouth N 29971 Following release of earnings N 29971 dropped 3 to 48 V 29972 including million from sale N 29975 give value of 101 N 29977 receive equivalent of % N 29979 retire % of issue N 29979 retire % before maturity V 29982 buy shares at premium V 29984 expects loss of million N 29985 have loss for quarter N 29986 took provision for losses N 29987 charged million of loans N 29987 leaving unit with reserve V 29989 capped spurt of news N 29989 challenging reign as graveyard N 29991 reported plunge in income N 29992 surged a to million V 29994 do something about it V 29996 raising recommendation to million V 29997 was part of valor N 30002 had liabilities of a N 30003 had loss in quarter N 30005 had million of loans N 30008 have reserves against estate N 30009 had loss of million N 30010 recovering cents to cents N 30010 recovering cents on property V 30010 sell it at all V 30011 is result of one N 30012 poured money into buildings V 30013 has supply of space N 30014 knocked some of buildings N 30021 is S&L in state V 30022 see wave of defaults N 30025 reported income of million N 30025 including million from changes N 30027 plummeted % over year V 30031 undertaken restructuring in effort V 30033 lowered ratings on debt N 30034 lowered ratings on issues N 30035 reflect slide in condition N 30036 withstand downturn in estate N 30039 is version of protein N 30040 directs function of cells N 30043 turn part of response N 30044 is one of receptors N 30053 has near-monopoly on part N 30053 surpass Corp. as firm V 30054 dominates market for drives N 30055 soared % to million V 30057 jumped % to million V 30059 reach million on sales V 30061 achieved level of sales N 30063 benefited spread of computers N 30063 consume electricity than drives N 30064 controls % of market N 30066 had field to themselves V 30068 is supplier of drives N 30068 introduce family of drives N 30074 uses watts of power N 30081 supplying drives for machine V 30082 targeted market for machines N 30082 use power than those N 30083 boosted demand for computers N 30084 makes drives for computers N 30084 is supplier to Compaq N 30084 owned % of stock N 30088 touts service as hour V 30089 franchise it in states V 30090 have access to transportation V 30091 lure clients to doorstep V 30094 offers equivalent of visit N 30095 explaining areas of law N 30096 refer people to lawyers V 30097 refers call to one V 30100 refer client to firm V 30107 convicted them of extortion V 30107 obtaining loan from officer V 30108 obtaining payments from Garcia V 30110 is the of prosecutions N 30114 preserving interests of constituents N 30115 was member of staff N 30116 involving receipt of gratuities N 30117 set sentencing for 5 V 30124 held number of discussions N 30129 file complaints against them V 30131 allow participation in proceedings N 30131 open hearings to public V 30132 appreciate nuances of relationships N 30133 publishing names of lawyers N 30133 subjects them to derogation V 30138 pay fine to Delaware V 30141 made settlement with Commission N 30142 try hand at work V 30148 be blow to Rich N 30149 been one of campaigns N 30151 scaled spending on brand N 30151 bills million to million N 30154 is 7 in business N 30156 launched contest for readers N 30160 emerged victor of review N 30162 picked million to account N 30162 lost number of accounts N 30167 registered 6.9 on scale N 30169 connecting city to link V 30170 runs trains beneath bay V 30171 increased service to hours V 30181 raised specter of restaurants N 30182 raised hackles of boosters N 30184 stuck estimate of billion N 30185 increased estimates to billion V 30188 is miles of highway N 30189 provided series of exits N 30191 including all of high-rises N 30195 estimate claims from disaster N 30198 ask Congress for billion V 30199 add billion to fund V 30200 raise money for relief N 30201 restrict ability of legislature N 30203 posted loss for 1989 N 30205 posted loss of million N 30206 rose % to billion V 30207 jumped % to million V 30208 has interests in brewing N 30212 dived % to million V 30215 cap year for Bond N 30216 controls % of company N 30218 sold billions of dollars N 30220 taken it on chin V 30224 be group in structure N 30225 cited list of assets N 30237 shot times in back V 30240 creating focus for life N 30241 is one of thousands N 30242 suffer injuries from crime N 30243 have rates of injury N 30244 show part of problem N 30246 is example of city N 30247 conducted spring by Interface V 30267 minimize cost of crime N 30268 was 1,000 per worker N 30269 created economies of scale N 30270 invoke law of trespass N 30270 regulate access to places N 30276 put police on patrol V 30278 is frustration of alarms N 30281 raises barriers to entrepreneurship N 30282 giving priority to patrols V 30283 losing business to centers V 30283 keep taxes within limits V 30285 testing effects of strategy N 30285 comparing value with patrols V 30288 saved life of Ortiz N 30291 purchase share at 6.27 V 30293 reduce debt to levels V 30293 finance investments with capital N 30296 was kind of action N 30299 's lesson for investors N 30302 shielded investors from the V 30306 be basis for decision N 30309 kicking tires of car N 30311 fell average of % N 30312 were number of ways N 30312 cushioned themselves from gyrations V 30313 posted decline of % N 30314 allocate investments among investments V 30316 gives benefits of diversification N 30316 including boost during periods N 30317 declined % in week N 30321 turned return of % N 30322 risen % on average V 30325 putting 5,000 in 500 V 30327 was fund for week N 30329 appreciates % over cost N 30330 was % in cash N 30331 buying companies at prices V 30337 's lot of unsettlement N 30339 giving benefit of translations N 30344 posted returns for year N 30345 following problems with financing N 30352 had a into funds N 30354 showed power in fact N 30359 taking stake in business N 30359 taking stake as part V 30359 create range of linkages N 30368 attract notice for quality N 30370 put some of ideas N 30370 put some into practice V 30372 designing stage for show N 30377 sell model of center N 30385 limit emission of formaldehyde N 30387 plant forest at cost V 30388 moved others in profession N 30389 designing redevelopment of Square N 30389 carry it to extreme V 30392 attended schools in places N 30393 earned degree in architecture N 30393 earned degree from Yale V 30398 restored plants in Vermont N 30399 designed one of houses N 30400 was design for headquarters N 30401 took feet of building N 30403 reduce it at building V 30403 rubbed beeswax of polyurethane N 30403 rubbed beeswax on floors V 30412 visited office for meetings V 30417 makes use of aluminum N 30418 planted acorns around country V 30419 awaits approval by officials N 30421 recruited him as architect V 30422 provide space for equipment N 30422 doing business in Europe V 30431 reflecting impact of strike N 30434 slipped % to million V 30436 spent million for security V 30452 had chance for upset N 30457 's nothing on side V 30458 put Bush in House V 30461 keep commercials on air V 30463 began campaign with hopes V 30469 direct anger at each V 30471 defeated Koch in primary V 30479 is undertone to effort N 30483 sought support of parties N 30484 is fancy'shvartzer with moustache N 30485 is word for person N 30486 concedes nothing in ability V 30487 match Mason with Carson V 30488 get vote on day V 30494 paid tax for years V 30496 sold stock in Co. N 30496 sold stock to son V 30498 avoid problems in role N 30501 follows pattern as returns N 30504 's difference between value N 30509 had history of deception N 30512 surrounding collapse of Ambrosiano N 30516 paid million to creditors V 30517 obtained lire in checks N 30517 obtained lire from official V 30518 exonerating bank from blame V 30518 channeled funds to groups V 30523 fill seat of chairman N 30524 surrounding contracts at unit N 30527 write million against contracts V 30528 take allegations of fraud N 30530 pursue action against those N 30531 sell million in assets N 30531 strengthen itself in wake V 30534 pay million for interest V 30534 putting million for stake V 30536 made owners of franchise N 30537 fell week for lack V 30538 resigned post with Inc. N 30539 distributes programs to rooms V 30539 add games to offerings V 30541 filed suit in court V 30542 owns stake in Realist N 30543 disclose information to stockholders V 30545 buy Realist for 14.06 V 30548 slashed dividend in half V 30549 had loss of million N 30550 had deficit of million N 30554 seen decline from sales N 30556 fell % to million V 30557 attributed decline to concern V 30558 follows industry for Co V 30559 's concern about economy N 30560 expects sales for all N 30560 fall % from 1988 V 30560 were the since 1978 N 30565 falling cents to 5.25 V 30568 had loss of million N 30568 following profit of million N 30569 rose % to million V 30571 release batch of reports N 30575 provided boost for bonds N 30580 produced return of % N 30585 ease stance without risk V 30587 charge each on loans V 30587 considered signal of changes N 30589 ended Friday at % V 30591 Given forecast for rates N 30594 be demand for paper N 30595 sold billion of securities N 30596 boost size of issue N 30596 boost size from billion V 30597 operates one of systems N 30598 auction billion of securities N 30599 sell billion of bills N 30599 sell billion at auction V 30600 sell billion of notes N 30601 sell billion of bonds N 30603 shown appetite for offering N 30608 yielding point than bond N 30612 is constraint to market N 30618 providing support to Treasurys V 30624 price offering by Inc N 30629 had trouble with Western N 30629 have time with rest N 30632 priced issue of debentures N 30632 priced issue at par V 30633 give value of 101 N 30635 receive equivalent of % N 30636 induce some of players N 30637 put price on deal V 30639 fell 1 to point V 30641 auctioned estate of Jr. N 30641 auctioned estate for million V 30643 provided guarantee of million N 30643 taking interest in property N 30650 make refunds to advertisers N 30653 obtained commitments from banks V 30657 buy shares of LIN N 30657 buy shares for 125 V 30657 owning % of concern N 30658 merge businesses with Corp V 30660 coerces women into prostitution V 30665 enforce decision by conference N 30665 ban trade in ivory N 30666 file reservation against ban N 30667 use % of ivory N 30668 close Tower of Pisa N 30668 's danger to tourists N 30670 make climb up steps N 30673 reducing stocks of liquor N 30673 displaying them in window V 30674 built center for immigrants N 30676 halted transfer of immigrants N 30677 demanded halt to televising N 30679 have suntan by Christmas V 30682 take one of options N 30683 reduce principle on loans N 30683 cut rate on loans N 30684 prefer losses to risk V 30685 taken provisions for loans N 30685 taken provisions to nations V 30686 take hit to earnings N 30689 put Gorbachev in place V 30690 issued times by publisher V 30692 fell % to % V 30693 attributed decline to effects V 30695 exceed million in 1988 V 30697 had profit of million N 30698 be million to million N 30699 reflect results of unit N 30700 is season for business N 30700 use goods as items V 30705 reflecting number of measures N 30706 been maker of printers N 30706 grabbed share of market N 30707 reduce % to % N 30707 improve delivery of orders N 30707 improve delivery to % V 30707 lower number of hours N 30708 moving design of products N 30709 install displays at outlets V 30709 bolster awareness of brands N 30710 makes gadgets at factories V 30713 seek acquisitions in industry N 30719 sells chemicals to factories V 30724 attributed slump to disruptions V 30727 bearing brunt of measures N 30733 cut funds from factories V 30735 dealing blow to trading V 30737 grew % to billion V 30739 grew % to billion V 30743 recentralized trading in wool N 30744 monitor issue of licenses N 30746 buys goods from China V 30753 process letters of credit N 30753 settling letters at speed V 30753 dispel rumors about health N 30755 weakened power of companies N 30757 is financier for business N 30758 tapped market for funds V 30761 make funds for purchases N 30764 means business for us N 30767 extended clampdown on imports N 30767 extended clampdown beyond target V 30771 bought goods at prices V 30771 take loss on resales V 30776 spur drive for laws N 30776 protect victims of accidents N 30777 highlights shortcomings of Fund N 30777 gets money from companies V 30778 spilled gallons of oil N 30778 spilled gallons into Inlet V 30779 filed suit in court V 30781 pay million in damages N 30788 seek reimbursement from operator N 30789 is kind of Catch-22 N 30791 starting jobs with firms N 30793 teach bolts of lawyering N 30794 learned basics from lawyers V 30796 enables students by playing V 30797 treat staff with respect V 30800 defend clients against offers V 30802 Creates Courthouse for Kids N 30813 get kids from criminals V 30818 's conclusion of study N 30819 earned average of 395,974 N 30821 earned average of 217,000 N 30822 assist recovery from earthquake N 30822 extend aid to victims V 30826 waiving restrictions on use N 30826 shift money within package V 30826 bolster share for Administration N 30828 Meet Needs of Disasters N 30829 be charge against Act N 30830 lowered ratings of million N 30831 have effect on us V 30832 affect value of bonds N 30833 lowered ratings on million N 30834 lowered ratings of million N 30841 scaled reaches of success N 30842 is look at way N 30844 seen chance at commission N 30850 dogs aspect of lives N 30851 finds 30,000 in account N 30855 find way between extremes N 30856 making specimens of generation N 30858 feel pangs of recognition N 30859 provide material for fiction N 30860 tells story of company N 30860 faces attempt by AIW N 30860 constitute joke in world N 30862 providing muscle for deal N 30863 invest tale of wars N 30863 invest tale with characters V 30864 has elements of allegory N 30865 depicts qualities with strokes V 30866 undermine force of perceptions N 30869 be TV of tomorrow N 30870 ceded segment of business N 30870 ceded segment to Japan V 30871 build screens for televisions N 30872 enjoy backing from government N 30873 use form of technology N 30873 put images on display V 30875 had success in electroluminescence N 30878 Replacing tube with screen V 30878 is key to creation N 30880 exploit advances in panels N 30881 sold interests in displays N 30881 sold interests to Thompson-CSF V 30884 manufacture panels at costs V 30887 is million in awards N 30892 put it to use V 30893 develop panels at labs V 30897 has claim to right N 30900 question need for support N 30900 justifies help on grounds V 30901 see source for some N 30901 's source of concern N 30903 transmitting information to commanders V 30904 ordering displays for cruisers V 30904 wants versions for tanks N 30910 reflect concern over future N 30913 sell panels in Japan V 30916 built stake in company N 30918 merged operations with those V 30918 owns % of Calor N 30919 held discussions with SHV N 30921 asked Harbors for information V 30922 including town of Braintree N 30927 involves collection of receivables N 30928 has billion in sales N 30931 is successor to Board N 30931 was announcement of action N 30933 banned insider from institutions V 30941 post loss of 879,000 N 30942 had loss of 199,203 N 30944 catch wave of performers N 30947 were shares of companies N 30949 producing surprises than ones N 30951 reach a for gains N 30957 reminds Calverley of period V 30959 identify companies with momentum N 30960 showing signs of investing N 30961 seeing beginning of shift N 30963 recycles plastic into fibers V 30964 praises company as resistant V 30964 has rate of % N 30965 closed Friday at 39 V 30968 recommends stalwarts as Morris N 30970 pursuing stocks at expense V 30971 get number of disappointments N 30971 get number from companies V 30972 selling share of companies N 30972 buying share of stocks N 30973 trimmed portfolio of Paper N 30974 putting money in Barn V 30976 reported decline in quarter N 30976 announced buy-back of shares N 30978 buying stock at times V 30980 throw towel on cyclicals V 30983 buying shares in weeks V 30989 meet imbalances with stock V 30990 closed 5.94 to 2689.14 V 30992 lagged 662 to 829 N 30995 gained 0.03 to 347.16 V 30995 fell 0.02 to 325.50 V 30995 fell 0.05 to 192.12 V 30999 fell 32.71 to 1230.80 V 31000 skidded 5 to 168 V 31002 followed decision by Airways N 31002 supported offer for UAL N 31003 fell 1 to 31 V 31004 took cue from UAL V 31004 rose 3 to 43 V 31005 acquired stake of % N 31006 fell 1 to 52 V 31006 declined 7 to 45 V 31009 lowered ratings on number N 31010 dropped 5 to 51 V 31010 fell 3 to 1 V 31011 dropped 3 to 51 V 31012 citing weakness in business N 31013 fell 1 to 9 V 31015 cut dividend in half V 31016 fell 3 to 29 V 31016 declaring dividend of cents N 31018 offer rights at 8.75 V 31020 use proceeds of offering N 31020 use proceeds for reduction V 31021 buy share at price V 31050 filed registration with Commission V 31052 refinancing debt of concern N 31052 refinancing debt at rates V 31054 reduced stake in Inc. N 31054 reduced stake to % V 31055 sold shares from 31 V 31057 had comment on sales N 31058 held stake in Anacomp N 31058 held stake for purposes V 31059 have discussions with management V 31060 sell interest in mall N 31060 sell interest to buyer V 31074 ensure lockup of purchase N 31076 called lawsuit without merit V 31078 cut dividend on shares N 31078 cut dividend to cent V 31080 reflects price for metals N 31082 had profit in 1985 V 31083 is 15 to holders N 31087 is parent of Inc. N 31088 has revenue of million N 31090 handed speculators on deal V 31091 tops million in losses N 31091 dropped offer for Co N 31092 culminating Friday with withdrawal V 31093 recoup some of losses N 31093 rescued them with takeover V 31100 using guesswork about likelihood N 31101 put bid in area N 31101 take three to months N 31103 accepted bid of 300 N 31103 running company for while V 31106 have tool in willingness V 31106 cut compensation by million V 31106 commit million from funds N 31108 putting wad of cash N 31111 call someone on telephone V 31111 fix problem with deal N 31112 leaves pilots in need V 31112 lay hands from funds V 31113 is insistence on ownership N 31115 sharing value of concessions N 31115 sharing value with shareholders V 31116 buy stock from public V 31117 deliver price to shareholders V 31119 advising board on bids V 31120 Using takeover as benchmark V 31122 Using estimates of earnings N 31122 Using estimates under variety V 31122 estimated value at 248 V 31123 assuming sale of assets N 31126 expect revival of takeover N 31129 throw deal into doubt V 31132 paid average of 280 N 31132 paid average for positions V 31142 had loss of million N 31143 had loss of million N 31144 rose % to million V 31146 had income of million N 31147 grew % to million V 31155 outflank competitors like Corp. N 31156 add machines to systems V 31156 opens market for us V 31158 is one of versions N 31163 attracted offers for some N 31164 approached Saatchi in August V 31166 made pitches in visits V 31168 received inquiries from companies N 31173 lowered estimates for company N 31176 rebuffed offer by Spielvogel N 31176 lead buy-out of part N 31178 whipped interest among outsiders V 31178 picking pieces of businesses N 31180 had problems at office V 31180 offers offices in areas V 31183 be addition to network N 31187 sell some of units N 31196 blaming agency for incident V 31197 remove board from agency V 31199 told board about relationship V 31200 funnel kickbacks to then-minister V 31201 chastises agency for timing V 31201 handle million to account N 31204 awarded million to account N 31204 awarded million to Angeles V 31208 named director of services N 31210 owns Inc. of U.S. N 31214 appointed executive for property N 31215 become part of committee N 31216 named president of University N 31217 have phrase under investigation N 31219 succeed Lederberg as head V 31221 held hearings on dispute N 31221 co-authored paper with Baltimore V 31222 was part of investigation N 31223 enlist services of Service N 31223 enlist services in investigation V 31224 has interest in NIH N 31224 were no by opinion N 31224 reminded Baltimore of era N 31226 do million of damage N 31226 do million to labs V 31226 decries horrors of chemistry N 31226 files lawsuits in court V 31228 decreed investigation of paper N 31232 defended itself against suit V 31234 earn praise for work V 31234 attract attention of people N 31234 gain control over goals N 31236 acquire Inc. of Beach N 31236 acquire Inc. for stock V 31237 receive total of shares N 31239 buy stake in subsidiary N 31242 offering corrections to table N 31245 is sign of neglect N 31252 see flock of programs N 31252 impose costs on economy V 31264 creating rationale for taxes N 31266 cost businesses between billion V 31267 distorts efficiency in sorts V 31268 imposes standards on plants V 31269 stick scrubbers on plants V 31271 imposes standards on cars V 31272 be 500 per car N 31276 create wave of litigation N 31281 lift burden from people V 31282 diagnosed stagnation of 1970s N 31283 tout accomplishments as head N 31284 was head of force N 31288 Holding dam on taxes N 31288 is task of presidency N 31289 was core of people N 31293 setting some of buckshot N 31293 setting some for ducks V 31294 show improvement from deficits N 31295 prevent freefall in sterling N 31296 announce measures in speech V 31299 be lot of pressure N 31300 show improvement from deficit N 31302 transforming itself to exports V 31307 see evidence of turnaround N 31315 reduce fears of rises N 31317 allow rigor of policy N 31320 showing signs of lack N 31322 increase rates to % V 31324 posted gains in trading N 31325 distance itself from exchange V 31325 preoccupied market since 13 V 31326 shift focus to fundamentals V 31326 keeping eye for signs V 31328 changing hands at yen V 31333 acquire Inc. for 40 V 31337 values company at million V 31340 is maker of products N 31341 boosted stake in Green N 31341 boosted stake to % V 31349 's change from years N 31352 reduce costs in years V 31353 is year since deregulation N 31353 had upturn in perceived N 31359 be opportunity for offsetting N 31359 offsetting increases in segments N 31360 gotten benefits of deregulation N 31360 gotten benefits in reductions V 31362 recoup some of cutting N 31364 's lot of pressure N 31365 carry freight of shippers N 31365 carry freight in trailer V 31371 played trucker against another V 31372 raised rates for products N 31372 raised rates by % V 31373 boost rates over years V 31374 increase cost of products N 31374 slow rate of increase N 31375 increase rates in couple V 31376 increased % to % N 31376 increased % in months V 31378 restore rates to levels V 31379 raise rates on containers N 31379 carrying exports to Asia V 31380 filed statement with Commission V 31381 have shares after offering V 31384 putting him on probation N 31384 putting him for insubordination V 31387 entered room in building N 31395 promised decision within weeks N 31399 Alter details of example N 31399 taking place at Express V 31400 are pioneers in trend N 31401 is one of trends N 31404 reduces lawsuits from disgruntled N 31406 increases commitment to company N 31415 means hundreds of complaints N 31416 train supervisors in approach V 31418 Coach them in handling V 31419 take complaints to adjudicator V 31419 accept reversals as fact V 31422 enjoys advantages as credibility N 31423 has advantages as speed N 31426 do any for anybody N 31429 features procedure in programs V 31430 guarantee visibility for system N 31431 is subject of memorandums N 31434 marking gain since fall N 31442 surrendered part of advance N 31442 surrendered part toward end V 31443 hold position over weekend V 31450 adding points in days V 31456 gained 100 to 7,580 V 31458 gained 80 to 1,920 V 31458 added 60 to 2,070 V 31460 gained 50 to 2,660 V 31462 added 50 to 1,730 V 31463 added 80 to 2,010 V 31466 recouped some of losses N 31472 supporting market in quest V 31472 cover shortages of shares N 31475 announcing withdrawal from deal N 31476 viewed outlay for stake N 31476 viewed outlay as bit V 31477 close penny at pence V 31478 was 100 at shares V 31482 ended day at 778 V 31484 shed 10 to 294 V 31489 are trends on markets N 31493 was part of set N 31494 disclosed them to senators V 31495 cited policy as example V 31497 lend support to effort V 31503 is part of effort N 31503 shift criticism for failure N 31504 summarize portions of correspondence N 31507 send suggestions to committee V 31508 present evidence in fashion V 31512 banning role in assassinations N 31514 gets wind of plans N 31518 win approval of funding N 31519 avoid surprises during campaign N 31523 hampered role in attempt N 31524 made headway with Sens. N 31524 made headway after meeting V 31531 creating vehicle for investors N 31533 been province of those N 31535 filed registration with Commission V 31537 approved price in process V 31537 clearing papers on desk N 31538 started fund in 1974 V 31538 reached billion in assets N 31538 reached billion in year V 31540 Keeping price at dollar V 31542 keeps them at 1 V 31543 forced relaxation of curbs N 31548 regarding merger of Noxell N 31550 exchange share of stock N 31550 exchange share for share V 31550 exchange share of stock N 31551 mark entry of P&G N 31552 markets range of products N 31553 postponed endorsement of merger N 31553 postponed endorsement until meeting V 31554 discuss terms of transaction N 31556 hold majority in MBB N 31556 acquires stake in concern N 31558 been professor in department N 31559 completed offering of shares N 31562 issues reading on product N 31562 issues reading in report V 31569 see growth for remainder V 31570 carry ramifications in quarter V 31574 take hunk of GNP N 31577 limit damage to regions V 31578 offset loss of production N 31580 expects growth of % N 31581 increases possibility of recession N 31581 reinforces news from reports N 31584 shaved % to % N 31588 paid dividend of cents N 31590 raised stake in company N 31590 raised stake to % V 31591 boosted holdings in Vickers N 31591 boosted holdings to shares V 31594 views company as investment V 31595 use interest as platform V 31595 launch bid for company N 31597 spurned advice of consultants N 31600 was move for executive N 31602 Stroking goatee during interview V 31607 add kronor to coffers V 31608 approve offering of shares N 31612 taking parts of company N 31613 remain shareholder with stakes N 31614 solve problem for parent V 31615 controls % of shares N 31618 is result of spree N 31621 turned Trelleborg into one V 31623 owns % of company N 31625 joined forces with Canada V 31631 raising share of profit N 31639 accept ownership in company N 31641 share belief in renaissance N 31642 were decade of consumption N 31645 is word for metals N 31647 registered increase for quarter N 31648 brought income in quarter N 31648 brought income to million V 31654 credited computers for performance V 31658 was % below margin N 31660 predicted year of growth N 31666 was officer of division N 31668 placed warrants in exchange V 31671 reflects importance of market N 31672 succeed Haines as manager V 31673 signed contract with developers V 31676 maintain plant upon completion V 31681 spending billion on itself V 31683 add million of revenue N 31684 is part of plan N 31688 called step in internationalization N 31689 are areas for Basf N 31690 named officer of unit N 31693 sell service to Inc. V 31695 provides quotes over band V 31697 have sale of unit N 31697 have sale under consideration V 31698 publishing information on disks N 31707 selling part of holdings N 31709 is month for program N 31710 offering assets for time V 31711 unveil plans for effort N 31713 rid government of hundreds N 31723 hobbled program in past V 31725 adopting attitude of flexibility N 31726 sell bank for price V 31729 selling institution without price V 31732 lost control to government V 31732 made loans to institution V 31733 giving % of bank N 31733 giving Manila with understanding V 31735 sell stake in Corp. N 31738 hold % of Picop N 31739 own rest of equity N 31740 take stake in company N 31740 needs million in capital N 31740 needs million for rehabilitation V 31741 including member of group N 31744 retain stake in Picop N 31744 accused trust of selling N 31747 divest itself of Airlines V 31749 increasing membership to nine V 31751 elected director of company N 31753 been executive of Inc N 31764 be chairman of firm N 31765 become director of company N 31769 make % of loans N 31770 owns Association of Waterbury N 31770 had assets of million N 31771 had assets of million N 31771 had assets on date V 31772 is statement of commitment N 31773 view reforms in context V 31776 retains % of equity N 31778 granted control over airline N 31778 granted control to consortium V 31780 include ones in Mexico N 31784 is element of plan N 31790 suspend payment of quarterly N 31790 suspend payment for quarter V 31791 expects return to profitability N 31793 transfer ownership to employees V 31793 leaving stock in hands V 31795 avoid risk of rejection N 31795 submit plan at meeting V 31797 give approval to offer V 31799 avoid loss of momentum N 31800 discuss it with banks V 31801 make proposal without commitments V 31802 borrow dollars from banks V 31802 finance payment to holders N 31803 receive interests in company N 31808 given control of airline N 31811 is sort of period N 31814 keep offer on table V 31814 maintain position with board N 31815 triggered buy-out with bid V 31817 paid million for backing V 31818 gain loans for group N 31820 answer questions from regulators N 31820 use proceeds of offering N 31822 favor recapitalization with investor N 31823 make million in concessions N 31825 weaken management at time V 31826 pay million in banking N 31826 pay million to advisers V 31829 includes series of features N 31829 is 80%-owned by Inc N 31830 carry seconds of advertising N 31833 yield % in offering V 31834 said million of proceeds N 31834 prepay amounts on note N 31834 prepay amounts to Inc. V 31836 holds stake in Inc. N 31836 having control of company N 31837 determined terms of transaction N 31842 draw currencies at IMF V 31845 sell subsidiary as part V 31847 is subsidiary of Ltd. N 31848 had revenue of million N 31848 makes products at mills V 31848 recycles aluminum at plant V 31849 elected executive of subsidiaries N 31852 remains chairman of Co N 31853 was officer of Co. N 31853 was officer in 1987 V 31853 bought interest in Corp N 31855 reduced stake in Illinois N 31855 reduced stake to % V 31858 decrease position in concern N 31860 vacated judgment in favor N 31862 remanded case to court V 31866 transfer ownership of parent N 31866 transfer ownership to employees V 31866 leave stock in hands V 31867 give approval to offer V 31868 incurred losses of million N 31868 incurred losses from offer V 31869 ended talks about alliance N 31870 intensify pursuit of Jaguar N 31870 negotiating alliance with GM V 31872 making gain for week N 31876 citing losses at unit N 31877 cast shadow over markets V 31879 attracted offers for some N 31883 entered market by unveiling V 31883 convert film into video V 31884 cede market to manufacturers V 31887 purchased company in Texas N 31887 purchased company for million V 31889 slashed dividend in half V 31889 reflecting slowdown in sales N 31894 suspended payment of dividend N 31895 paid cents in April V 31896 had effect on stock N 31904 requested recall of capsules N 31908 suspending distribution of 21 N 31908 pending completion of audit N 31911 went public in January V 31918 been engineers with Cordis N 31920 sold operations to Ltd. V 31921 representing employees at Corp. N 31921 averting strike by employees N 31924 proposes contract with raise N 31926 reported increase in revenue N 31927 reported income of 320,000 N 31928 reported increase in earnings N 31932 includes proposals for pullout N 31932 guarantees number of seats N 31933 demanded pull-out of troops N 31933 puts future of agreement N 31933 puts future in doubt V 31935 finding survivor in freeway V 31939 notify dictators of plans N 31940 inform dictators of plans N 31941 disclosed it to senators V 31941 citing plan as example V 31942 lend support to effort V 31967 included gain of million N 31970 posted loss of million N 31976 have feelings about someone N 31976 swapping barbs with friends V 31982 call questions for panel N 31983 getting injection of glasnost N 31986 easing restrictions on travel N 31987 win confidence of Germans N 31989 ordering action against protesters N 31993 lecture people about values V 31994 visit factory on outskirts N 31997 ignoring problems in society N 31999 impressed group of visiting N 32003 's side to Krenz N 32004 is part of Poland N 32004 dedicated life to apparatus V 32007 have room for maneuver N 32009 plunged country into crisis V 32021 display sense of humor N 32022 carried report on factory N 32023 remember comment by Hager N 32026 producing amounts of heat N 32026 producing amounts from experiments V 32028 find hints of reactions N 32028 leaving finding of tritium N 32029 hear reports on experiments N 32030 offered evidence of fall N 32036 reported results with variations N 32037 encircling rod of metal N 32037 encircling rod with wire V 32037 plunging electrodes into water V 32039 consume all of energy N 32040 produced amounts of heat N 32042 detected indications of radiation N 32043 measuring heat from experiments N 32046 borrowed rod from chemists V 32050 produced heat for hours V 32055 is reality to energy N 32061 is experiment at University N 32062 producing 1.0 than cell N 32064 getting bursts of heat N 32065 is correlation between time N 32066 measure amount of tritium N 32067 be evidence of reactions N 32068 reported evidence of neutrons N 32069 take experiment into tunnel V 32069 shield detectors from rays V 32070 detected neutrons in two V 32070 detect burst in detectors N 32071 detected burst of neutrons N 32072 indicated burst of neutrons N 32074 produce effects on surface N 32075 announced rates for 1990 N 32076 include increase for advertising N 32081 share efficiencies with customers V 32089 owns % of Inc. N 32090 Reflecting impact of prices N 32095 reduced demand for semiconductors N 32097 reduce force of division N 32101 expect sluggishness in market N 32102 combine divisions into Group V 32102 affect results by amount V 32103 completed acquisition of Co. N 32104 had income of million N 32105 is company with area N 32106 is partner in franchise N 32107 represents entry into business N 32108 has interests in television N 32108 make acquisitions in industry N 32109 haunting market in metal N 32112 precipitated expansion of production N 32113 recover silver from solutions V 32117 preferring assets to gold V 32121 offers value amongst metals N 32123 converting quantities of metal N 32123 converting quantities into silver V 32123 discouraging exports from India N 32126 plans issue of coin N 32128 push prices into range V 32136 be 1 to 2 N 32137 expect prices of contracts N 32137 found cattle on feedlots N 32138 held cattle on 1 V 32140 fatten cattle for slaughter V 32140 signals supply of beef N 32142 projecting decline in placements N 32143 sell cattle to operators V 32143 dried pasture on ranches N 32147 set tone for trading N 32148 attributed decline to factors V 32150 test projections by economists N 32153 including settlement of strikes N 32154 ending strike at mine N 32155 accepted cut in force N 32157 takes place at noon V 32158 indicating demand for copper N 32163 has implications for week N 32168 allows computers in network N 32170 asks computers in network N 32170 asks computers for bids V 32171 sends task to machine V 32175 get bang for you N 32177 charge 5,000 for license V 32180 spread tasks around network V 32181 splits it into parts V 32181 divvying parts to computers V 32184 turns network into computer V 32187 saturate area after another N 32188 putting squeeze on profits V 32188 straining relations between chains N 32189 offer discounts during winter V 32191 is chairman of Board N 32194 brought reaction in industry V 32200 serve customers to % N 32203 has choice in war N 32204 owns string of stores N 32206 squeeze stores into corner V 32210 trailed levels throughout 1989 V 32220 driving wedge between franchisers V 32221 absorb increases in expenses N 32221 absorb increases without cut V 32223 demand participation to end N 32224 protect consumers from marketing V 32226 get telephone about franchise N 32228 had change in earnings N 32230 compares profit with estimate V 32233 had change in earnings N 32235 compares profit with estimate V 32237 completed sale of assets N 32238 is part of plan N 32240 found use for them N 32241 won nickname for Series V 32241 selling some of checks N 32241 selling some through dealer V 32245 sign autographs for fee V 32246 examined checks at show V 32249 were lot of Cobbs N 32256 done it for cash V 32263 produce products for market V 32264 have capacity of tons N 32265 follows string of announcements N 32266 build lines for steel N 32271 boosting levels of steel N 32273 maintain edge over minimills N 32274 expects market for steel N 32274 reach tons by 1992 V 32276 reach agreement by end V 32277 marks plant for production N 32278 boost capacity of tons N 32280 adding capacity of steel N 32282 MAKE mind about investment V 32285 give instructions to broker V 32287 accept type of order N 32288 enter it for customer V 32293 fill orders at prices V 32300 goes tick beyond price N 32300 filling it at price V 32306 placed order at 90 N 32306 placed order under stock V 32310 receiving price from order V 32310 use type of order N 32314 fill it at price V 32333 bought stock from orders N 32334 is responsibility of investors N 32335 change mind about buying V 32339 measures volatility of fund N 32345 get payoff from bet N 32347 is part of risk N 32348 tell magnitude of that N 32351 is indicator of risk N 32353 led Association of Investors N 32353 eliminate figures for funds N 32353 eliminate figures in edition V 32361 see risk on dimension V 32362 avoid types of risk N 32363 is news to people N 32365 returning money at maturity V 32366 erodes power of payments N 32367 is function of time N 32371 paying attention to risk V 32373 outperformed securities over extended V 32376 evaluating riskiness of portfolios N 32382 expose holders to lot V 32383 involve risk than portfolio N 32384 is affiliate of Seidman N 32387 add deviation to it V 32392 are riskier in terms N 32393 be riskier in sense N 32402 exceed inflation by margin V 32408 broadening dislike of Noriega N 32409 are part of nexus N 32415 is news for those N 32418 plunge funds into tools V 32419 maintained share of CDs N 32419 preserving position in market N 32421 demonstrates performance of businesses N 32422 divested myself of stocks V 32424 causing broker at Pru-Bache N 32424 seen anything like it N 32425 began climb to health N 32426 entered it in 1988 V 32426 posted rate in years N 32436 been part of strategy N 32437 brought value of sedan N 32438 produced need for construction N 32441 given demonstration of benefits N 32442 showing expansion with sign N 32444 take advantage of it N 32448 building value on back V 32450 is writer in York N 32451 gave piece of advice N 32458 influence investment of dollars N 32463 are members of them N 32467 planned ventures into bankruptcy V 32472 be planner at all N 32473 follows issues for Federation V 32476 kill demand for planning N 32477 cause slump in demand N 32477 make exit from business N 32480 guided investment of billion N 32480 guided investment in months V 32482 counseling others on the V 32483 keep tabs on advisers N 32488 set standards for competence N 32489 set debate within industry N 32490 putting Dracula in charge V 32491 giving money to SEC V 32494 enrolled dog as member V 32495 sent picture with certificate V 32496 have ideas about certification N 32498 reveal conflicts of interest N 32500 receive some of income N 32500 receive some from commissions V 32501 putting clients into investments V 32502 invested million on behalf V 32503 put clients into portfolios V 32503 shoved customers into investments V 32504 paid commissions to Meridian V 32506 had access to cash N 32507 portrayed himself as expert V 32511 seeking recovery of funds N 32512 is chairman of IAFP N 32512 name Peterson as defendant V 32515 purchase Bank of Scottsdale N 32518 took T to meeting V 32519 dumped million in cash N 32519 dumped million on table V 32520 show color of money N 32524 save responses for court V 32526 considering suit against plaintiffs N 32528 Rearding suit over bid N 32530 are a of times V 32534 kept them of way V 32535 pay tens of thousands N 32535 pay tens for chance V 32537 give pause to clients V 32540 make some of clients N 32540 make some on investments V 32543 is reporter in bureau N 32547 accompanies show with selection V 32570 lend air of respectability N 32572 having lot of people N 32574 is headquarters for operators N 32574 extract money from the V 32584 sent million to company V 32589 rent space near room N 32590 give indulgence of offices N 32593 cite case of Valentine N 32593 serving sentence at Prison V 32595 took junkets with friends N 32595 leased an for girlfriend V 32602 get publicity about this N 32603 is chief of bureau N 32605 send kids to college V 32607 Stick money in account V 32608 buy ticket to U. N 32608 buy toddler in years V 32611 readied parents for 1980s V 32612 rose % in years V 32612 's increase in prices N 32614 take pizzas-with-everything at time N 32619 take chance on fund N 32620 make it in account V 32625 's dilemma for parent N 32626 has answer for you N 32628 investigating increases among schools N 32629 cool things in 1990s V 32640 set 773.94 for years V 32641 cut this to 691.09 V 32642 come home from hospital V 32643 Plugging college into formulas V 32644 Using cost of 12,500 N 32645 assumes return in fund N 32645 be 16,500 in taxes N 32647 peddling lot of fear N 32648 takes issue with projections N 32650 do it of income V 32659 laid billion for bonds V 32660 bought million in plans N 32663 pay interest at maturity V 32665 pay 1,000 in 2009 V 32668 be loss of principal N 32669 bought amount at time V 32672 limit guarantees to institutions V 32672 get refunds without interest N 32673 seeking approval for plans N 32675 be soundness of guarantee N 32686 backed guarantees with credit V 32690 covers education from bureau V 32696 was one of the N 32699 omitted total of million N 32699 omitted total from receipts V 32702 fouled net on project N 32704 owes lot of taxes N 32706 develop targets for investigation V 32707 offset income with losses V 32707 raised racehorses on days V 32710 won part of battle N 32710 received services in return V 32713 builds factor into formula V 32713 need projects for them V 32714 have incidence of audits N 32717 requiring reporting of varieties N 32717 ferret discrepancies with returns N 32717 generate inquiries to taxpayers N 32720 assigned agents to projects V 32721 detect pattern of abuse N 32721 having multitude of dependents N 32721 frees them from withholding V 32721 deducting losses from businesses V 32723 send anyone to jail V 32723 make life for one V 32723 imposing some of penalties N 32724 label workers as contractors V 32724 avoid share of taxes N 32725 sold home for profit V 32725 reinvesting gain in home V 32727 treating amounts of travel N 32727 treating amounts as costs V 32728 provided criteria for singling N 32728 singling returns of taxpayers N 32728 report income from business N 32729 denied deductions by Rubin N 32729 were distributors of products N 32729 were distributors in addition V 32731 earned 65,619 in jobs V 32731 treated sideline as business V 32731 derived elements from it V 32732 distribute material to people V 32732 prepare program on subject N 32734 reclassified workers as employees V 32737 become tipsters for IRS N 32737 manages force of agents N 32737 manages force from Orlando V 32738 provide leads to competitors N 32740 listed all as contractors V 32741 assessed 350,000 in taxes N 32742 assessed 500,000 against company V 32742 carried employees as independents V 32743 becoming pursuers of delinquents N 32743 tracks them with relish V 32743 acquired system in 1985 V 32746 be residents of states N 32747 feel glare of attention N 32748 collected million from brokers N 32749 squeezed million of man V 32750 reclaim hundreds of millions N 32750 reclaim hundreds through project V 32751 is editor of column N 32752 finding news in plan V 32756 boosting admits from % V 32756 boost registrants from % V 32757 gaining admission in category N 32762 creates category of students N 32762 gives % of class N 32767 places program on top V 32771 is story about suckers N 32775 blurt numbers to caller V 32776 is formality on road N 32777 buy well from stranger N 32780 know all of them N 32784 peddling investments in wells N 32786 is lure of returns N 32791 is part of culture N 32791 puts emphasis on it V 32795 is psychology of the N 32796 be part of in-crowd N 32798 sold interests in wells N 32798 sold interests to group V 32799 had agreement with Co. N 32801 are part of group N 32802 embellish information with notion V 32805 carry element of excitement N 32807 phoned them with updates V 32814 lose money on investments V 32816 used approach with him V 32817 had trappings of legitimacy N 32819 are targets of pitches N 32820 prevent disappearance of children N 32821 discuss investments with others V 32823 discuss investment with wife V 32827 filed suit in court V 32829 took them for lunch V 32832 send pictures of themselves N 32836 is principal in Inc. N 32837 hits them at time V 32842 invested 2,000 in stocks V 32848 is reporter in bureau N 32851 was 436,000 on 17 V 32856 spend time on pursuits V 32861 writing stories like one N 32863 put wife in lap V 32865 spawned number of products N 32869 amasses value in policy N 32870 gives bang for buck N 32870 gives you within limits V 32873 pass exam before renewal V 32878 made lot of sense N 32879 charge me for 100,000 V 32879 canceled policy after years V 32882 get benefit of income N 32890 cloak it in euphemisms V 32891 is kind of CD N 32893 runs second to investment N 32896 paying beneficiaries of people N 32900 pay premium for amount N 32900 invests premium in portfolio V 32901 extract value in form V 32901 included gains on investment N 32903 allows loans without consequences V 32905 put money into policy V 32907 adjust amount against amount V 32907 cover portion of policy N 32908 ask questions about some N 32908 show buildup of values N 32910 Projecting the over decades V 32912 get sort of bonus N 32912 get sort after year V 32916 are twists to life N 32916 ask questions about all N 32917 pay premiums on policy N 32917 pay premiums for years V 32919 cover cost of protection N 32920 maintain amount of protection N 32921 like sound of that N 32926 tap portion of benefits N 32927 collect percentage of value N 32927 allow payments for conditions N 32928 permit use of fraction N 32929 exempting payments from taxes V 32930 considering cost of provisions N 32932 market them to public V 32933 compared policy for 130,000 N 32933 compared policy with offering V 32934 get 14 from Equitable V 32939 finance trip to Paris N 32940 do thinking about insurance N 32942 indicates profit in quarter N 32943 show increase from year N 32945 make sales for quarter N 32949 sold drugs for prices V 32949 record gain on sales N 32953 attributed decline in profit N 32954 start efforts behind Maalox N 32955 underfunded Maalox for year V 32956 spend million to million V 32958 producing fertilizer in 1990 V 32959 close plant in Oberhausen N 32959 close plant in fall V 32961 changed name to Bank V 32964 was anniversary of crash N 32966 led march in trading N 32968 led market from bell V 32969 joined advance in strength V 32972 took profits before close V 32975 buy stock against positions V 32976 ignoring profits of companies N 32977 was influence in rally N 32982 gained 7 to 73 V 32985 complete buy-out of International N 32986 put oomph into market V 32988 is strength behind rally N 32991 prompted lot of buying N 32991 were bets on prices N 32995 representing billion in stock N 32996 been increase in positions N 32997 set pace for issues N 32998 added 1 to 44 V 32998 gained 3 to 70 V 32998 gained 3 to 77 V 33000 provide million in financing N 33001 providing rest of billion N 33002 advanced 5 to 136 V 33002 tacked 7 to 63 V 33008 owns stake in company N 33008 plans fight for control N 33010 approved the of % N 33011 approved increase in program N 33013 introduce products next month V 33014 gained 3 to 89 V 33015 added 1 to 1 V 33016 lowered rating on stock N 33016 post loss for quarter N 33022 raised rating on stock N 33023 lost 7 to 51 V 33024 lowered rating on stock N 33024 citing slowdown in business N 33025 reported decline in earnings N 33026 recorded gain of year N 33029 received approval for plan N 33029 fend bid from group N 33031 buying total of million N 33034 received contract from Navy V 33034 enlarge capacity of oiler N 33036 increasing size to members V 33038 protect flag from desecration V 33040 was victory for leaders N 33040 opposed amendment as intrusion V 33042 defuse pressure for amendment N 33043 become law without signature V 33044 threw conviction of man N 33044 set flag during demonstration V 33045 have problems on job N 33048 surveyed group of directors N 33048 surveyed group about perceptions V 33049 is one of series N 33052 costs 8,000 in terms V 33054 is average for claims N 33055 do something about them N 33057 recognize link between jobs N 33059 strike people at height N 33060 had bearing on view N 33061 noted fear of takeover N 33062 reported situation in company N 33064 received funding from Co. V 33075 skipping dinner with relatives N 33077 court vacationers with fares V 33078 flew passengers from Chicago V 33079 getting jump on discounts N 33080 cutting prices from levels V 33081 dubbed everything from is N 33081 put fares at 98 V 33083 Expect prices on dates N 33086 offering tickets to passengers V 33092 accommodate choice of names N 33094 received complaints from couples N 33095 transfer awards to members V 33097 shot coconuts through rooftops V 33097 uprooted thousands of lives N 33099 trimmed fares to Islands N 33099 trimmed fares to 109 V 33101 lowering fares to California V 33101 waive restrictions on fares N 33101 waive restrictions for trips V 33108 saves % off fare V 33111 taking it on offer V 33114 provide discounts to workers V 33115 require stay over night N 33116 be home in time N 33117 produced oil from oilfield N 33118 expects output from field N 33119 repeal limit for people N 33120 lose cents of benefits N 33122 maintain standard of living N 33122 maintain standard at level V 33123 offset surtax of 496 N 33126 need support from Democrats N 33126 need support in order V 33126 include reform in Bill V 33127 are co-sponsors of bill N 33128 lift limit from backs V 33138 make product in world N 33141 marketing mink in years V 33143 boost sales to billion V 33144 opened door to furs N 33145 operates outlets in U.S. V 33145 open 15 by end V 33150 turned phenomenon to advantage V 33151 work hours at wages V 33152 started factory in Greece N 33153 opened one in Germany N 33154 introducing variations on fur N 33155 combining strengths in innovation N 33155 combining strengths with costs V 33155 produce goods at cost V 33156 maintain control over production N 33156 avoid overdependence on sources N 33159 offers furs in red N 33163 attach embroidery to backs V 33166 treats side of lambskin N 33171 placed weight on retailing V 33174 bring furs to door V 33176 weather slump of years N 33178 reported losses in years N 33179 head list of reasons N 33180 glutted market with both V 33184 manufacture furs in U.S V 33185 losing part of allure N 33186 promoting furs in ways V 33186 taking glamour of business V 33187 make commodity of luxury V 33188 chasing consumers with imports V 33188 harm industry in run V 33188 reducing prestige of furs N 33191 exposed hundreds of employees N 33191 exposed hundreds to infection V 33198 considered strain of virus N 33200 is kind of hepatitis N 33201 posting notices about threat N 33201 posting notices at places V 33202 offering shots of globulin N 33202 diminish symptoms of A N 33202 diminish symptoms in anyone V 33204 read misstatements of facts N 33209 publish stories under bylines N 33211 Reward courage with support V 33213 elected presidents of company N 33214 is director of assurance N 33215 is manager for operations N 33215 was president at company N 33216 promised improvement in economy N 33217 summed policy as battle V 33217 wring inflation of economy V 33217 using rates as instrument V 33218 boosting rates to % N 33220 increases expectations of inflation N 33221 have role in assessment N 33226 blunt inflation at home V 33226 arrest plunge in pound N 33226 raised rates to % V 33235 's solution to woes N 33236 Discussing slide in prices N 33237 prompted drop in Index N 33237 owed nothing to problems V 33239 join mechanism of System N 33241 won race in Europe N 33245 have machines in offices V 33246 is step in computing N 33247 getting technology to market V 33248 steal sales from minicomputers V 33248 bring sales among professionals N 33249 bear fruit with rebound N 33249 deliver machines by December V 33252 's link in line N 33254 cost 16,250 on average V 33255 handle 3 to MIPS N 33256 sell computer in U.S. V 33257 received approval from government V 33259 had sales of million N 33260 has workers at plants N 33262 keep pace with inflation N 33262 boosting benefit to 566 V 33264 increasing payment to 386 V 33265 generates revenue for fund N 33268 aged 65 through 69 N 33270 reflect increase in index N 33272 report increases of % N 33273 cutting staff through attrition V 33273 slowing growth in spending N 33277 faces competition from supplier N 33278 report growth of % N 33278 maintain growth of % N 33285 fell % to million V 33286 removed catheter from market V 33288 raised questions about design N 33290 buoying stocks of houses N 33293 reported income of million N 33294 reported results with income N 33301 receiving benefits in week V 33302 receiving benefits in week V 33304 reflects impact of Hugo N 33306 reported decline in income N 33306 reported decline on gain V 33307 prepared Street for quarter V 33308 reduce reliance on machines N 33308 establish presence in mainframes N 33313 was drag on sales N 33314 address that with debut V 33316 be lot of contribution N 33317 were factor in quarter N 33320 cut estimates for stock N 33323 revising estimate for year N 33323 revising estimate from 8.20 V 33324 troubling aspect of results N 33324 was performance in Europe N 33329 dropped estimate of net N 33329 dropped estimate to 6.80 V 33334 meaning impact from product N 33338 posted income of million N 33339 included earnings from discontinued N 33342 include brands as toothpaste N 33343 attributed improvement to savings V 33345 is priority in company N 33347 caught analysts by surprise V 33352 earned million in period V 33353 included million from operations N 33355 finalized agreement with Corp. N 33355 market four of products N 33357 is part of drive N 33357 increase business with dentists N 33359 completed sale of system N 33360 distribute proceeds from sale N 33360 distribute proceeds to holders V 33360 distribute proceeds from sale N 33361 generates million in sales N 33361 represented all of assets N 33364 save million in year V 33366 double number of managers N 33372 matched estimates of analysts N 33372 increasing margin to % V 33378 been subject of rumors N 33378 been subject for months V 33385 swap holdings in Co. N 33385 swap holdings for shares V 33387 gained % to billion V 33389 takes seat to one N 33391 makes trader among all N 33395 holding stocks in mix V 33396 poured billion into indexing V 33397 match returns of 500 N 33399 keeps lid on costs V 33402 been concept in decade V 33402 been sort of sitting N 33407 own share of stock N 33409 is boatload of investors N 33410 hold % of stock N 33413 land customers for business V 33415 give investors for money V 33417 beat returns by 2.5 V 33418 has million under management N 33419 take advantages of discrepencies N 33420 buys stocks in conjunction V 33421 buys stocks at all N 33424 uses futures in strategy V 33424 added point to returns V 33426 hold form of it N 33427 make use of futures N 33427 present risks for investors N 33428 managing director of Co. N 33431 bolster returns of funds N 33433 guarantee protection against declines V 33434 say 95 of 100 N 33435 invest 87 for year V 33436 match gain in index N 33438 hiring one of managers N 33438 design portfolio around stocks V 33439 see lot of interest N 33439 see lot in kind V 33440 using them for strategies V 33441 is fund with bet N 33444 spend the on group V 33445 eliminating stocks of companies N 33445 doing business in Africa V 33447 have % of forces N 33447 have % in state V 33448 reported month of interest N 33453 buy shares at price V 33454 is number of shares N 33455 consider increase in interest N 33457 include transactions in stock N 33461 led list of volumes N 33461 led list with shares V 33462 acquire Corp. for million V 33463 posted increase in volume N 33464 logged decline to 12,017,724 N 33470 posted increase to 2,157,656 N 33474 facing proposal from financier V 33476 dropped the on basis V 33482 made mind about Noriega V 33484 use relationships with agencies N 33484 delay action against him N 33484 exploit obsession with overthrowing N 33485 made decision in summer V 33485 put Noriega on shelf V 33489 develop plan for pushing N 33490 develop plan for supporting N 33490 supporting people in attempts V 33494 turning order into market V 33498 be oddity in Hanoi V 33499 made him in days V 33503 jailed times between 1960 V 33508 selling thousands of tires N 33509 published articles about him V 33510 earned medal at exhibition V 33510 attracted attention from authorities N 33516 accused him of stealing V 33516 acquiring rubber without permission V 33521 rejoined family in 1984 V 33521 began struggle for justice N 33523 achieved breakthrough in 1987 V 33525 display products at exhibition V 33527 produces motorbike in house V 33530 covers floor of house N 33531 burst door into courtyard V 33531 squeezes solution into strip V 33534 released one of machines N 33542 lost position in association N 33542 lost position in 1980s V 33542 questioned intrusion of politics N 33543 Appointed editor in chief N 33543 Appointed editor in 1987 V 33543 turned the into paper V 33547 confiscated rice from starving V 33548 ran series of stories N 33548 stirred debate over interpretation V 33548 took swipe at writers V 33548 blocked entry into association V 33553 is chief for Vietnam N 33557 is entrepreneur of 1980s N 33558 keep empire on top V 33560 establish Co. as dealer V 33561 alleviating shortage in 1980s V 33562 becoming part of folklore N 33566 become darling of version N 33567 steered reporters to office V 33567 see example of way N 33571 turned Food into conglomerate V 33572 manages it with title V 33573 is purchase of rice N 33575 operates fleet of boats N 33575 transport commodities to warehouses V 33576 processes commodities into foods V 33577 taking stake in Industrial N 33578 increased profit to equivalent V 33581 mind competition inside country V 33585 preparing report on impact N 33587 reviewing ratings on bonds N 33588 have impact on condition V 33588 raises concerns about risks N 33591 seeking suggestions from lobbyists V 33597 reported loss of million N 33597 reported loss for quarter V 33598 earned million on sales V 33602 earned million on sales V 33607 reflected change in technology N 33607 left channels with monitors V 33609 include capabilities as equipment V 33609 dampened purchases of equipment N 33611 is one of producers N 33614 cut expenses by % V 33614 maintaining development at % V 33615 divided business into segments V 33617 represents two-thirds of business N 33618 generated revenue in period V 33619 propelled laptops into position V 33620 be focus of industry N 33620 strengthening development of parts N 33622 help company in agreement V 33624 creates opportunities for company V 33625 develop market in Europe N 33626 approved Directors of Lavoro N 33631 renew calls for privatization N 33633 called meeting in December V 33635 following disclosure of scandal N 33636 increased % in September N 33636 increased % from August V 33637 attributed rise in index N 33637 attributed rise to prices V 33639 was 180.9 in September V 33640 posted increase in income N 33642 included million in income N 33645 added million to reserves V 33645 boosting reserve to million V 33647 charged million in loans N 33648 rose % to a V 33652 rose % to a V 33653 rose % to billion V 33653 rose % in quarter V 33655 include million of benefits N 33656 rose % at Services V 33658 owns % of common N 33661 reported decline in earnings N 33661 reported decline for quarter V 33669 was million on revenue V 33671 include earnings of PLC N 33671 include costs of million N 33672 issued injunction against purchase V 33672 reduce competition in production V 33674 settle claim against men N 33679 owe billion in taxes N 33681 getting % of proceeds N 33681 seeking repayment of a N 33684 subordinate claim to those V 33685 threatened volcano of litigation N 33685 force plan through court V 33686 consider proposal at hearing V 33687 decribed plan as step V 33687 fight it in court V 33688 represents IRS in case V 33690 buy offices from Inc. V 33690 following merger of Trustcorp N 33691 have assets of million N 33692 study quality of assets N 33693 has branches in area V 33693 avoid problem with regulators N 33693 avoid problem over concentration V 33694 take place in quarter V 33695 pushed assets in week V 33697 was inflow since 1988 V 33699 pulled money from market V 33699 put money into funds V 33704 posted yields in week V 33705 rose billion to billion V 33706 increased billion to billion V 33706 increased billion to billion V 33707 was source of spate N 33710 make dollars in provisions N 33715 became shareholder in exercise V 33718 report profit for year V 33719 reported profit of million N 33719 made provisions for loans V 33721 build complex in Lumpur V 33723 lent lot of money N 33723 lent lot of money N 33725 increase capital to billion V 33727 gave heart to Reagan V 33730 opened door to restrictions V 33730 opened mind to politics V 33732 leads grassroots in County N 33732 leads grassroots for Florio V 33733 rejecting stance of opponent N 33737 losing governorship next month V 33738 paying price for agenda V 33738 torment Democrats in past V 33740 remains bulwark against restrictions N 33742 bringing upsurge in activity N 33744 tells reporter in office V 33746 is ground for movement V 33747 bring clash of cultures N 33748 build support for cause V 33749 seem fit than leaders N 33752 favored Bush by % V 33754 backed % to % N 33754 backed Florio over Courter V 33758 carries himself with intensity V 33759 prepared himself for moment V 33759 support curbs on funding N 33761 seems shadow of hawk N 33761 defended North before cameras V 33762 stating opposition to abortion N 33762 impose views on policy V 33765 hide frustration with ambivalence N 33768 hurt himself by bringing V 33768 bringing issues into debate V 33768 is campaign on sides V 33769 is part of generation N 33772 is reminder of gap N 33773 pursued agenda in Washington V 33773 approving taxes at home V 33773 overseeing doubling in size N 33773 overseeing doubling in years V 33774 play differences with Courter N 33775 met criticism from commissioner V 33779 appoint Hispanics to posts V 33779 employed any in office V 33782 Asked question after appearance V 33782 identifies member by name V 33783 recognizes photograph of one N 33786 declined rematch with Kean N 33791 destroyed part of highway N 33793 is product of losses N 33795 match ads with team V 33795 retools himself as machine V 33796 scraps reference to Ozzie N 33797 be footnote to spots N 33797 portray each as liar V 33798 fits pattern of reformers N 33800 divides some of constituency N 33808 has lots of opinions N 33809 rose % in September V 33810 drove prices during month V 33812 closing points at 2683.20 V 33813 read data as sign V 33815 push prices in months V 33816 reduce prices of imported N 33819 had declines in prices V 33822 declined % in September V 33823 hold increases in prices N 33823 expect some of rise N 33827 pulled rate to % V 33833 fostered pessimism about rates V 33836 Excluding categories of food N 33836 rose % in September V 33840 showed declines at level N 33842 rose % for month V 33843 rose % in September V 33843 following decline in August V 33851 grown % on average V 33854 been undoing of resorts N 33855 been aging of boomers N 33857 change image as sport N 33862 avoided issue of safety N 33866 represents spirit of cooperation N 33866 represents spirit among makers V 33869 adding entertainment for kids N 33871 enjoy entertainment with dinner N 33871 enjoy entertainment without dad V 33878 want something besides ski N 33879 increase number of skiers N 33879 increase number by million V 33882 prefer climate for excursions V 33884 handle kind of increase N 33886 play game of Series N 33886 play game on night V 33886 play it on Wednesday V 33888 play game next Tuesday V 33895 been kind of show N 33896 seated rows in front N 33896 arranged that for guys V 33898 thrusting microphones into faces V 33914 been damage of sort N 33915 lugging blocks of concrete N 33918 interviewed fans in lots N 33918 watched interviews on TVs V 33919 saw profit in items V 33925 set candles in ballroom V 33933 learned nothing from experience V 33941 began month with crunch V 33941 play role in takeovers V 33942 deliver billion in bank N 33942 deliver billion for buy-out V 33943 pressing Congress for powers V 33944 reached zenith in July V 33946 lobbying employees for approval V 33950 aided investor on bids V 33950 put both in play V 33950 play a in financing V 33951 loaned % of price N 33952 carry yields than loans N 33954 raise debt for group V 33955 used letter from Citicorp N 33955 used letter in pursuing V 33957 finance takeovers with help V 33958 open opportunities to banks V 33960 syndicating loans to banks V 33960 dropped % to million V 33961 take part in lot V 33962 make offer of shopping N 33962 make offer for finance V 33963 cites arrangement for financing N 33964 have advantage over banks V 33966 acquire Inc. for billion V 33969 raise bid to 200 V 33970 was factor in company V 33974 seal fate of attempt N 33976 's fear of recession N 33977 filed suit in court V 33977 holds % of stock N 33977 made statements in filings V 33978 purchase % of shares N 33978 disclose violation of requirements N 33980 questioned legality of procedures N 33981 seek interest in Harley-Davidson N 33981 seek representation on board N 33983 posted drop in earnings V 33986 mark drop from quarter V 33989 attributed drop to volume V 33991 slipped % from period V 33993 reflect prices for products N 33994 offset prices for bar N 34000 improve performance in quarter V 34002 bears resemblance to activity V 34006 lack access to arena V 34007 are source of liquidity N 34009 play role in process V 34015 is father of panic N 34020 add power to markets V 34020 permits access to arena N 34021 provide liquidity to market V 34024 absorb orders without causing V 34025 reselling positions to investors V 34029 reflect judgment of participants N 34030 passed Act of 1975 N 34035 is chairman of company N 34040 had wind at backs V 34043 lower risks in portfolio V 34044 favor shares of companies N 34047 take investors by surprise V 34052 force price of issued N 34053 pay interest than do N 34058 are bet in recession V 34060 hurts price of bonds N 34062 paying investors in cases V 34063 makes sense for corporations V 34065 be the of all N 34076 carrying level of cash N 34076 means equivalents as funds N 34082 engineered month after month N 34084 's kind of task N 34086 ride waves through times V 34087 earned return from stocks N 34098 began average of months N 34103 jettisoning stocks during recession V 34104 have number of suggestions N 34105 advocates issues with ratios N 34106 outperform others during market V 34108 discard stocks in companies N 34112 is gauge of health N 34115 choosing stocks in industries N 34118 offers tip for investors V 34121 covers issues from bureau V 34123 shows number of times N 34123 outperformed Standard during months V 34127 improve returns on a N 34128 is one of offerings N 34129 sell bonds of company N 34131 slash size of offering N 34137 demanding equity as part V 34138 take risk in market V 34141 view it as the V 34142 lure buyers to the V 34142 offering bonds with rate V 34144 buy total of % N 34146 reduce holdings by each V 34148 showed gains in the V 34156 drain reserves from system V 34157 move any than % N 34158 charge each on loans V 34159 considered signal of changes N 34167 sold billion of bills V 34168 was % at auction V 34180 capped movement in sector V 34183 left grades in range N 34191 was a from Authority N 34194 lagged gains in market N 34195 speed refinancing of mortgages N 34197 be prepayments on securities N 34197 paying par for them V 34200 widened point to 1.48 V 34204 awaited night by Chancellor N 34206 ended 0.03 at 95.72 V 34206 ended point at 99.85 V 34208 wants money for food N 34216 giving money to panhandler V 34223 reviews hundreds of charities N 34223 measuring them against standards V 34227 sort causes from ripoffs V 34228 know charity from one V 34230 put million into kitty V 34231 sued charities in court V 34233 get share of donations N 34234 spend % of income N 34234 spend % on programs V 34236 finance transplants for children V 34238 suing charity for fraud V 34240 spending lot on raising V 34243 spend share of income N 34243 spend share on raising V 34245 limiting right to freedom N 34247 put seven of them N 34249 has 10 of drumming N 34249 drumming funds for soliciting N 34250 pay attention to using V 34250 using prizes as inducement V 34251 solicit donations for Foundation V 34255 denied allegations in court V 34256 target some of miscreants N 34259 informing public about some V 34261 be statement on solicitation N 34262 putting statements on solicitations V 34263 win 5,000 in bullion N 34263 offers chance to giving V 34264 's inches in pages V 34267 ride coattails of the N 34269 using part of name N 34272 using logo of Mothers N 34272 using logo without permission V 34273 sent check for 613 N 34277 is reporter in bureau N 34279 washed hands of efforts N 34279 revive bid for parent N 34281 withdrew support for bid N 34281 withdrew support in statement V 34282 obtain financing for the N 34286 had series of setbacks N 34291 leading end of buy-out N 34291 provided investors with assurances V 34295 contributing concessions to bid V 34297 represented % of contribution N 34298 received stake in UAL N 34300 reflect drop in stock N 34301 dropped 1.625 to 190.125 V 34305 be party to rejection N 34306 distancing itself from transaction V 34307 approved plan at meeting V 34307 arranging financing for contribution V 34308 place blame on counterparts V 34310 have thoughts about transaction V 34311 curtail stakes in carriers V 34313 following briefing by advisers N 34314 take control of airline N 34317 obtain billion in financing N 34318 rose % in June V 34322 increased % in period V 34323 rose % in period V 34324 favoring cut in tax N 34324 placing obstacle in path V 34325 reduce tax on gain N 34330 is setback for Bush N 34330 needs support of Democrats N 34330 pass cut through the V 34341 attaching amendment to bill V 34342 lay groundwork for fight N 34345 exclude % of gain N 34346 rise points for year V 34346 reached maximum of % N 34348 reduce gains by index V 34351 create benefits for accounts N 34354 realizing benefits of effort N 34355 was million on revenue V 34356 reported loss of 520,000 N 34358 included benefit of 1,640,000 N 34364 expand business in region V 34366 including amount of coal N 34367 undertaken streamlining of aspects N 34372 pays % of cost N 34375 multiply quarter by four V 34381 reported loss of 134,000 N 34381 reported loss on revenue V 34383 developing plants with partner V 34390 sell interest in building N 34391 buy building at Plaza N 34391 buy building for sum V 34393 was payment for land N 34395 is part of strategy N 34395 consolidate offices under roof V 34399 sell building for million V 34401 vacating feet of space N 34405 remove asbestos from premises V 34406 SHAKE hands with Orwell V 34415 record event as correction V 34419 hear lot of stuff N 34419 hear lot from people V 34420 carries connotations from correction V 34420 raise brokers on phone V 34426 convey sense of expertise N 34434 use part of money N 34440 remain favorite with investors N 34447 is prospect than was N 34448 suffered volatility in years V 34449 blames that on advent V 34454 is company at risk N 34456 read stories on additions N 34456 making loans to countries V 34457 read something like this N 34464 elected Buffett to board V 34464 increasing number of directors N 34465 bought million of stock N 34466 paid a on the V 34473 offered contracts in history N 34474 give stake in profits N 34474 buy company for million V 34476 make movies for Bros. V 34477 was culmination of work N 34479 filed a in Court V 34482 occasion clash of titans N 34485 is lawyer with string N 34487 are producers in Hollywood N 34490 had summer with II V 34490 get it in business V 34493 buy rights to seller N 34497 acquired rights in 1979 V 34497 nursed movie through scripts V 34498 direct movie of novel N 34499 start shooting in months V 34499 discussing development of script N 34503 blame Guber for problems V 34508 describe Guber as powerhouse V 34512 has fans in Hollywood V 34512 characterize him as something V 34513 gets reviews as whiz N 34519 got plenty of summer N 34519 got plenty for romance V 34524 rub people in Hollywood N 34525 shepherded Flashdance through scripts V 34525 take credit for film V 34528 are producers of movie N 34534 was one of the N 34535 is head at Corp. N 34537 take kernel of idea N 34538 had competition for story N 34538 became Gorillas in Mist N 34539 made deals with government V 34540 made deals with gorillas V 34541 co-produce film with Peters V 34542 beat producers for rights V 34542 fought developers in forest V 34543 courted widow for months V 34543 showing tape of Gorillas N 34543 impress her with quality V 34546 caused rift between widow V 34554 got start in business N 34554 got start at Columbia V 34555 overseeing films as Way N 34558 produced number of hits N 34558 produced number for Warner V 34560 make it in lawsuit V 34560 paint producers as ingrates V 34568 release producers from contract V 34569 interest Semel in becoming V 34569 advised them on deal V 34571 got look at books N 34573 sold stake in Barris N 34573 sold stake to investor V 34574 extend agreement with contract V 34575 considered the of kind N 34578 indemnify producers against liability V 34579 paying price for company V 34579 had revenue of million N 34588 requested release in advance V 34592 get pound of flesh N 34592 get pound from Sony V 34593 demanded things as rights N 34595 taking it with Warner V 34597 released Puttnam from contract V 34604 earn ratings from agencies V 34609 Take bunch of loans N 34609 tie them in package V 34609 sell pieces of package N 34609 sell pieces to investors V 34616 becoming one of products N 34617 transformed variety of debt N 34617 transformed variety into securities V 34620 was issue of bonds N 34623 is heyday of debt N 34628 pushing investors into market V 34630 expect offerings of securities N 34631 takes pool of credit-card N 34631 sells them to trust V 34634 opened source of funds N 34634 opened source to issuers V 34634 providing investment for institutions V 34638 offered yield of point N 34639 's difference of year N 34642 becomes consideration on basis V 34645 recommend issues for individuals V 34646 purchased issues for individuals V 34647 buying issues in quantities V 34647 earn spreads over Treasurys N 34653 know value of bonds N 34654 are listings for securities N 34658 represent interest in trust N 34668 get yields on paper N 34670 affect ratings of issues N 34672 wreak havoc on assets V 34675 widen yield between Treasurys N 34679 issue cards to public V 34679 giving cards to spenders V 34680 place premium on issues V 34687 is reporter in bureau V 34694 conducted summer by Erdos V 34694 taken advice to heart V 34695 providing look at portfolios N 34697 spreading wealth among alternatives V 34697 protected themselves against squalls V 34702 provides glimpse into thinking N 34703 found them in mood V 34718 expect increase in price N 34732 had investments of size N 34734 taking news as sign V 34739 sell stock in months V 34746 totaled tons in week V 34749 was tons from tons V 34751 leased facilities to Inc. V 34752 holds interest in facilities N 34753 lowered rating on million N 34755 lowered rating on million N 34756 expects National of Phoenix N 34756 make provisions against portfolio N 34759 steal information from companies V 34759 share it with companies V 34760 is threat to security N 34760 is threat to survival N 34763 spend dollars for receiver V 34764 position themselves near dish V 34766 set him with information V 34768 spend million on security V 34768 spend billion by 1992 V 34771 increase chances of doubling N 34775 provided definition for campaign N 34777 cited case of trader N 34777 pick cargo of crude N 34780 reaching agreement with Ltd. V 34781 spend dollars over years V 34783 made bid of million N 34783 made bid of million N 34784 seeking injunction against bid V 34785 drop opposition to ownership N 34786 forms basis of suit N 34787 enhance development in Canada N 34790 transfer technologies to Connaught V 34792 leading index of stocks N 34792 leading index to advance V 34793 soared 3 to price V 34795 leaped points to 470.80 V 34797 jumped 10.01 to 463.06 V 34798 rose 5.04 to 460.33 V 34801 gained 18.11 to 761.38 V 34802 posted gains of 8.59 N 34803 climbed 8.17 to 458.52 V 34803 rose 3.97 to 545.96 V 34807 was dearth of sellers N 34808 's pressure on stocks N 34809 followed report of improved N 34811 raised estimates for company N 34811 raised estimates in weeks V 34814 jumped 1 to 42 V 34814 jumped 7 to 30 V 34814 gained 1 to 10 V 34814 rose 3 to 25 V 34818 surged 1 to 23 V 34819 climbed 1 to 23 V 34821 followed report of a N 34825 surged 1 from price V 34827 dropped 7 to 6 V 34829 lost 3 to 14 V 34830 lowered estimate for company N 34831 advanced 5 to 36 V 34832 make bid for company V 34834 been game of Series N 34835 was five in afternoon N 34837 remembering contempt for colleague N 34837 watch Tigers on afternoons V 34839 have intimacy of Stadium N 34840 liked friendliness of people N 34841 was sense of history N 34842 ratifying occurrence for millions V 34845 buy postcards with postmarks N 34846 paid 5 for book V 34857 remembered quake of '71 N 34866 was eyewitness of event N 34878 understood point of all N 34881 see pictures of section N 34883 causing plume of smoke N 34890 record car in front N 34895 puts blame on market V 34897 caught businesses by surprise V 34897 print commentaries on Fridays V 34907 maintained weighting of stocks N 34915 create hardships for workers N 34917 keep pace with inflation V 34917 creating source of unrest N 34919 surged % in 1988 V 34919 peaked February at % V 34920 restrict operations to two V 34921 prodding economy to efficiency V 34923 shell subsidies to enterprises V 34923 ate billion in bailouts N 34925 re-emphasize preference for ownership N 34929 pump life into economy V 34932 bring economy to collapse V 34933 was decision of People V 34933 allocate billion in loans N 34933 pay farmers for harvest V 34934 pumping money into economy V 34934 bring relief to industries V 34939 fell % for month V 34941 extend credit to shopkeepers V 34945 reinstate write-off for contributions N 34946 make eligible for taxes N 34949 protect deduction for expenses V 34950 restore treatment for gains N 34953 expand deduction for accounts N 34954 calls frenzy of legislating N 34956 stripped all of breaks N 34960 see unraveling of it N 34964 hear pleas of cities N 34970 protesting omission in Bush N 34971 contemplates treatment of gains N 34971 be part of it N 34974 sent letter to tax-writers V 34977 gave advantage over others N 34978 tax people with incomes N 34979 scrap treatment of gains N 34979 curtail use of losses N 34992 climbed % for months V 34994 rose % to 215,845 V 34996 likened writer to pitcher V 35000 predicting course of career N 35002 left chapters of book N 35009 keep hands off each N 35013 spins it into involving V 35013 hang hats in worlds V 35014 's cameo by Ohls N 35015 bears resemblance to prose N 35017 are grounds for complaint N 35020 working streets of Hollywood N 35022 is editor at Magazine V 35023 spent years as editor V 35024 been importer of news N 35027 is publisher of magazine N 35028 relaunched month by company V 35030 is one of a N 35030 taking steps into publishing N 35030 making investments in entertainment V 35031 retained number of brokers N 35034 are deals in works N 35034 rule transaction of size N 35040 targets executives with advertisers V 35042 receives calls from bankers V 35043 appointed president of Reader N 35045 are franchise as is N 35046 posted gains for quarter V 35046 reported declines for period V 35048 included sale of building N 35049 reflecting declines in sector N 35052 increased % to million V 35052 putting West over mark V 35053 increased % to million V 35055 was impact of activity N 35062 increased % to million V 35063 added lines in quarter V 35072 took toll on earnings V 35073 hurt installation of lines N 35073 hurt installation in quarter V 35074 reported increase of lines N 35077 bolstered efforts for telephone N 35080 rose % to million V 35082 rose 1.25 to share V 35085 reduced million by items V 35086 posted earnings of million N 35088 is quarter for us N 35089 increased % to million V 35091 a-Includes gain of million N 35091 a-Includes gain from sale V 35093 plunged % to million V 35111 recorded profit of million N 35111 recorded profit in quarter V 35117 elected directors of this N 35117 boosting board to members V 35123 forecasts decline for retailers N 35123 averaged % in 1988 V 35125 entering season in turmoil V 35126 expect divergence in performance N 35127 lose customers to chains V 35130 rise % to % V 35134 pose threat to stores N 35135 guarantees delivery of orders N 35136 get it by Christmas V 35136 sells accessories through mail V 35139 summed outlook for season N 35146 includes results of stores N 35151 creating opportunity for stores N 35153 put purchasing until minute V 35155 save month for everyone V 35156 won Prize for literature N 35157 enjoys renown for books V 35158 battled fascists during War V 35158 depict country with population N 35159 read story of Duarte N 35159 stabbed mother to death V 35159 awaits end in cell V 35161 endure sun of plains N 35162 was one of ones N 35164 tours Spain in Rolls-Royce V 35168 have conversation behind one V 35173 pour drop of water N 35175 is word in text N 35178 know quality of works N 35184 take charges of million N 35184 take charges in quarter V 35187 earned million on revenue V 35190 cover overruns in subsidiary V 35192 correct problems with boilers N 35194 arrives week for summit V 35194 commemorate century of democracy N 35195 pay service to nonintervention V 35195 safeguard countries from onslaught V 35196 is tip of iceberg N 35201 gathered week in Peru V 35201 take posture toward dictator N 35204 invite Chile to summit V 35206 upgrading Sandinistas to status V 35207 made opposition to presence N 35209 postpone decision on Contras N 35210 delaying the of Contras N 35211 enlist backing for position N 35211 stop march of agenda N 35212 promote disbanding of rebels N 35213 praised Sandinistas for system V 35214 unblock million in assistance N 35215 was gist of talks N 35218 emboldened initiatives in America N 35219 following conversations with Secretary N 35220 prolong suspension of shipments N 35220 prolong suspension after election V 35223 followed discussions with Baker N 35223 seeking accommodation with Soviets N 35223 seeking accommodation in America V 35224 declared symmetry between aid N 35227 establish station in part V 35228 was purpose of Rica N 35233 generate awareness of being N 35235 voiced expectations of action N 35241 is part of the N 35241 buy business in August V 35243 including sale of hotel N 35245 reflected results as results N 35250 asking holders for permission V 35256 provides three to those V 35257 sell advertising in programs N 35261 owns WWOR in York N 35261 purchase stake in Group N 35261 purchase stake from Inc. V 35262 including WTXF in Philadelphia N 35264 supplies programs on Saturdays V 35268 spent lot of money N 35268 building group of stations N 35269 offer stations on Wednesdays V 35270 planning night of series N 35272 held discussions with unit V 35272 owns stations in cities V 35281 exchange each of shares N 35283 form bank with assets N 35285 be operations of companies N 35286 be chairman of company N 35288 proposed merger in July V 35293 had presence among markets N 35296 is president of Popular N 35304 reflecting days in quarter N 35306 announcing plan of million N 35309 cut orders for engines N 35309 lay workers in area N 35309 shut plant in York N 35309 shut plant for weeks V 35312 is one of companies N 35312 operate system in Pakistan V 35314 know value of contract N 35316 operate system in Pakistan N 35316 operate system with AB V 35317 won approval for restructuring N 35318 received approval from voting N 35318 spin billion in assets N 35319 sell units as Field N 35319 float paper via issues V 35322 acquired shares for pence V 35324 cease purchases until 22 V 35325 rose pence to pence V 35326 sets stage for process V 35332 gain approval for change N 35335 had income of million N 35335 took charge of million N 35335 dropping development of system N 35337 cited gains for increase V 35338 puts company in position V 35340 posted increase in income N 35346 completed acquisition of unit N 35347 sell unit to Reebok V 35348 purchase shares of CML N 35348 purchase shares at share V 35350 seek buyers for subsidiary N 35353 had sales of million N 35355 have timetable for sale N 35355 starts search for buyer N 35359 prevented collapse of columns N 35360 was prelude to plan N 35360 retrofit section of freeway N 35360 retrofit section with casings V 35362 was aspect of quake N 35364 break some of slabs N 35365 lift chunks of debris N 35366 deny existence of work N 35368 restricted availability of funds N 35369 was part of a N 35370 was part of effort N 35371 began work after tremblor N 35372 installing series of cables N 35372 prevent sections of roadway N 35373 completing installation of jackets N 35375 encasing columns with steel V 35375 connecting them to roadbed V 35378 provoked anger among officials N 35380 is chairman of committee N 35389 allow time for Commission N 35390 exchange 168 for each V 35396 exchange each of shares N 35396 exchange each for shares V 35398 taken role in aid V 35398 pledging billions of dollars N 35399 encourage pressure for change N 35399 arranging benefits for Poland N 35401 taking place in Union N 35401 aroused hope in states V 35402 Addressing conference of the N 35403 create order in Europe N 35405 are supporters of request N 35406 want programs of development N 35410 reward Poland for moves V 35411 make investments in ventures N 35413 plans million in aid N 35414 take promise of marks N 35418 increased credit by marks V 35420 arranged credit for Union V 35420 set offices in Hungary N 35425 grown % in climate V 35427 attributed jump in net N 35427 attributed jump to sales V 35428 cited demand for products N 35433 purchased building in Segundo N 35435 opened door on subject V 35436 is sign for rest N 35438 was question for litigation V 35438 find security in absolutism V 35441 detected Bush in waffle V 35445 was wiggle than waffle N 35447 adapted language from exceptions N 35454 counseled kind of compromise N 35458 made statement to committee V 35462 are both on defensive V 35464 giving points of support N 35467 are substitute for principle N 35469 's that in administration V 35470 lost chance for job N 35471 gave answers on abortion V 35474 surrounding him with deputies V 35475 spends billions on both V 35476 makes handful of decisions N 35479 frame issue in ways V 35480 favor consent for abortions N 35482 banning abortions in trimesters N 35490 Excluding earnings from discontinued N 35493 had profit from discontinued N 35495 jumped 1.375 to share V 35499 offset declines in production N 35501 dropped % to million V 35502 fell % to million V 35506 fixed prices for services N 35507 use bureaus in states V 35509 acquired Safeco in 1987 V 35509 changed name to Co V 35510 fixing rates in states V 35511 issued complaint in case N 35511 issued complaint in 1985 V 35516 sell dollars of debentures N 35516 sell dollars to group V 35518 sell estate in swoop V 35521 is chairman of Corp. N 35521 merge hundreds of associations N 35522 sell network of offices N 35523 holds assets of thrifts N 35531 rated double-A by Moody V 35538 are million of bonds N 35541 rated triple-A by Moody V 35547 bring issuance to billion V 35548 yield fees via Italiana V 35550 yield % at the V 35551 yield 16.59 via Corp V 35555 declining points to par V 35557 issued marks of bonds N 35557 issued marks via Bank V 35561 yield % via Bank V 35570 give information than read N 35572 pick stories on selected N 35572 pick stories off wires V 35575 manage network at firm N 35576 provides editors for networks V 35577 see it as plant V 35578 carries wires into computer V 35581 containing words as takeover N 35592 selects stories from countries N 35593 need moment by moment N 35595 takes stream of data N 35595 turns it into knowledge V 35596 have cost of 2,000 N 35596 provides text of articles N 35596 provides text under agreements V 35598 want releases on announcements N 35602 weigh value of article N 35603 compares position of words N 35606 code releases by topic V 35606 select items for subscriber N 35609 write abstracts of articles N 35613 is collection of memos N 35615 licensed technology from Institute V 35615 develop it for use V 35616 devised ways for E-mail V 35616 requires action in couple V 35618 set it for mode V 35618 bother me with reports V 35621 put logos on mail V 35622 have format on screen V 35623 have clues of paper N 35626 pay 404,294 in bonuses N 35626 pay 404,294 to Kelly V 35627 awarded 196,785 to attorneys N 35630 been player in arena V 35632 ended dispute between Witter N 35634 offered million of debentures N 35634 offered million at par V 35637 reflecting gains in tobacco N 35638 has businesses in insurance N 35639 reflect change in accounting N 35641 rose % to million V 35642 rose % to million V 35644 included million from discontinued V 35646 rose % in quarter V 35647 rose 1.75 to 73 V 35654 intensify look at plans N 35654 giving breaks on dividends N 35654 raising taxes on trades N 35655 opposed nomination to post N 35660 pushing Jibril as alternative V 35662 stripping it of the V 35663 blames clash on miscommunication V 35663 carried offer to him V 35663 speaking English at time V 35667 show signs of maturity N 35668 continue ban on research N 35669 had reservations about prohibitions N 35670 increase demand for abortions N 35674 have ways on issue N 35678 solidify majority on court N 35679 has vacancies on the N 35679 considered warm-up for nominees N 35681 put struggle against him N 35685 puts statements in Record V 35685 attributing votes to conflicts V 35688 declared quarterly of share N 35690 pay dividends from flow V 35693 form team for contest V 35700 awarded Cup to team V 35701 Pending appeal by team N 35708 have firm in backyard N 35708 have firm than incinerator V 35709 live door to incinerator N 35715 outweigh risk to environment N 35716 owns work of art N 35721 questioned officials about it V 35726 seeking comment on decision N 35727 pay Hoelzer for services V 35730 keeping binge of corn N 35731 bought tons of corn N 35731 bringing purchases to tons V 35735 bought amount of contracts N 35737 bought contracts for possession N 35738 protect themselves from swings V 35739 pushed prices of contracts N 35740 subsidize sale of oil N 35741 dumped inches in parts V 35744 used jump in prices N 35744 sell crop to companies V 35750 fell ounce to 370.60 V 35751 eased ounce to 5.133 V 35753 was increase of % N 35755 reduce staff by 15,000 V 35755 was demand for bullion N 35755 putting pressure on gold V 35760 rose pound to 1.2795 V 35761 fell total of cents N 35761 fell total during days V 35761 signal slowing of economy N 35761 reduced demand for copper N 35763 are shippers to Japan N 35764 cut some of purchasing N 35765 be need for copper N 35767 fell barrel to 20.42 V 35769 rose cents to 20.42 V 35773 been epicenter of activity N 35774 seeking services of the N 35775 keep city for time V 35778 afforded agencies in cases V 35786 be litigation over omissions V 35793 have success in pursuing V 35799 exposing entities to liability V 35804 be race to courthouse N 35807 set shop on sidewalk V 35808 promised assistance to victims N 35809 monitor conduct of lawyers N 35812 begun proceedings in London V 35812 prevent use of name N 35816 added name of affiliate N 35817 's lot of emotion N 35822 keeping work in England V 35823 keep million with firm V 35824 lose revenue for audit V 35825 make one of firms N 35830 accused officials in area N 35832 win war on drugs N 35840 delayed consideration of sites N 35841 exaggerated amount of assistance N 35842 provide million in support N 35843 taken custody of inmates N 35847 pondering question of preparedness N 35849 see them through disaster V 35852 set offices in regions V 35855 be cornerstone of plan N 35857 distribute memo of Tips N 35857 distribute memo to employees V 35860 keep supplies at work V 35864 handle queries from employees N 35868 scheduling drill for November V 35869 had one in afternoon V 35874 equipping trailer with gear V 35875 used some of equipment N 35875 used some during quake V 35881 maintains flashlights in offices V 35881 changes supply of water N 35886 enters Gulf of Mexico N 35889 down operations in stages V 35891 are tons of things N 35895 put mechanisms in place V 35898 pursue claim against Board N 35898 closed Association of Irving N 35899 relinquished control in exchange V 35899 drop inquiry into activities V 35900 contributed estate to assets V 35902 dismissed year by Judge V 35902 offers protection for actions N 35903 upheld dismissal of claim N 35903 reconsider claim for loss N 35904 cause deterioration of American N 35909 representing 'd of restaurant N 35910 seeks damages of million N 35911 prohibits discrimination on basis V 35913 told employer in February V 35920 made offer to Levine N 35920 made offer on 10 V 35923 representing five of defendants N 35926 put practices on hold V 35927 pays tab as lawyers V 35930 urged acquittal of judge N 35930 urged acquittal in brief V 35932 was chairman of committee N 35932 heard evidence in case N 35935 opening boutique in Richmond N 35937 opened office in Buffalo N 35938 added partners to office V 35940 facing comparisons through 1990 V 35941 register income because gain V 35942 fell % to million V 35945 mirror those of industry N 35946 represents half of volume N 35949 be year in advertising N 35950 see turnaround in trend N 35951 faces problem of publishers N 35956 facing comparison in future V 35963 celebrated anniversary of Monday N 35963 celebrated anniversary with spree V 35966 raised hopes for cuts N 35967 setting market from bell V 35969 brought gain to points V 35970 is % below high N 35973 soared 7.52 to 470.80 V 35973 soared jump in points N 35974 obtained commitments for buy-out N 35978 increases pressure on Reserve N 35978 be news for stocks N 35979 see lot of evidence N 35982 expect signs of weakness N 35982 expect signs during weeks V 35983 cinch case for shot V 35984 cut rate by point V 35992 outnumbered decliners by 1,235 V 35996 backed candidate since Stevenson V 35997 choose candidate for House N 35999 favor Republicans in races V 36000 captured percentage of vote N 36004 buy one of brands N 36005 casting votes on legislation N 36005 confers benefits on population V 36007 have incentive at margin V 36008 put Republican into office V 36011 limit benefits to voter N 36014 taken pattern over century V 36014 occupied role in society N 36014 confronting voters in races V 36015 hold Congress in disdain V 36016 have security in office V 36018 was defeat of 13 N 36019 placed emphasis on role V 36020 attracting candidates for office N 36022 field slate of candidates N 36024 held share of power N 36024 held share since 1932 V 36024 translate clout into benefits V 36024 keep Democrats in office V 36030 pay attention to concerns N 36031 have rates on votes N 36031 have rates to extent V 36033 exceeded rate since 1959 V 36034 allocate proportion of staffs N 36034 allocate proportion to offices V 36038 take pattern at level N 36040 is function of rate N 36043 makes reparations for Japanese-Americans N 36043 makes reparations after 1 V 36044 provides money for payments V 36046 providing billion for Departments V 36047 sets stage for confrontation V 36048 supports abortions in cases N 36048 support exemption beyond instances N 36049 puts position in House N 36049 pick support because wealth V 36050 funds Departments of State N 36050 funds Departments through 1990 V 36051 block counting of aliens N 36053 rescind million in funds N 36053 figured charges against leader N 36054 forced adoption of fees N 36055 anticipates million in receipts N 36055 anticipates million by change V 36056 include billion in funds N 36058 promise allocation of million N 36059 makes one of eclectic N 36060 scrapped all of request N 36061 chairs subcommittee for department V 36061 attached million for initiative N 36061 including work on television N 36062 wage war with board V 36063 curb authority of board N 36064 reverse efforts by corporation N 36064 cut funds to organizations N 36065 meet contributions to organizations N 36066 reflect increases from 1989 N 36066 shows cut from request N 36067 retained Markets as banker V 36067 regarding combination of thrift N 36069 extended relationship with Securities N 36071 turns himself to police V 36073 spilled guts on floor V 36077 getting deal in bill V 36079 applaud moment of epiphany N 36082 's form of rescission N 36083 return package of rescissions N 36083 return package to Hill V 36084 reject package with majority V 36088 were users of power N 36088 saw chance against Nixon N 36090 feel remorse about chickens V 36091 sent rescissions to Hill V 36093 serve constituents with goodies V 36094 offer proposal as amendment V 36094 raise limit before end V 36099 put figure on it V 36100 provide funds for repairs V 36104 completed days of drills N 36105 Echoing response of corporations N 36107 leaving hotel with rate V 36108 tallied wreckage to buildings N 36111 kept seven of machines N 36113 moved system to Monte V 36116 estimates damage at million V 36117 has total of million N 36117 excluding city of Gatos N 36118 causing majority of deaths N 36125 is money on hand N 36130 seeking changes in rules N 36133 totaled million to million N 36135 dropped inches after quake V 36135 wreaking damage to one V 36138 include damage to arteries N 36141 get grasp on volume N 36143 were lot of cars N 36144 delivering check for 750,000 N 36144 delivering check to business V 36145 is part of syndicate N 36145 pay employees during weeks V 36146 eliminate cap on amount N 36147 provides % of aid N 36147 provides % for days V 36149 pick remainder of cost N 36150 extend period for funding N 36150 extend period for months V 36152 expedite service to victims N 36153 take applications for relief N 36153 take applications by phone V 36155 cross Bridge between Oakland N 36157 calling flotilla of vessels N 36157 expand service across bay N 36160 go fishing for while V 36169 become catalyst for process N 36170 accepting government in capital N 36172 end war for control N 36174 including communists in governments V 36176 building one of armies N 36177 opening door to domination V 36179 complicates scene in Cambodia N 36179 are the of groups N 36182 sent thousands of laborers N 36182 building equivalent of Wall N 36182 building equivalent near border V 36183 carry record for tyranny N 36184 caused deaths by execution V 36185 was form of relief N 36186 credit reports of genocide N 36190 backs idea of coalition N 36191 backed sorts of ideas N 36191 backed sorts over years V 36194 lend support to killers V 36197 sending aid to non-communists V 36198 put plan on hold V 36201 deprived people of means N 36201 settle fate with honor V 36202 named president for Times N 36202 has interests in publishing V 36203 been president for advertising N 36204 takes responsibility for distribution N 36205 been director for America N 36207 fell % to million V 36213 report loss of million N 36215 declared FileNet in default V 36216 has basis of default N 36216 reviewing rights under contract N 36216 predict outcome of dispute N 36221 received contract from Co. N 36221 manage activities for plants V 36222 disclose value of contract N 36223 buys gas from Clinton V 36224 line number of contracts N 36225 is specialist in gas N 36225 save amounts of money N 36230 watching commercial for Beer N 36231 take advantage of that N 36234 taken some of swagger N 36234 increased resentment of outsiders N 36235 passing series of tests N 36241 leaving Texans with hunger V 36247 developing theme at Group V 36247 made couple of calls N 36247 reported findings to team V 36252 invested 100,000 in CDs V 36253 is one of thrifts N 36254 thumbs nose at Easterners V 36255 stressing commitment to Texas N 36257 follow one of tracks N 36259 haul buddies to club V 36261 wraps itself in pride V 36261 is part of lifestyle N 36262 's part of style N 36264 pitching themselves as lenders V 36267 sign Declaration of Independents N 36269 featuring shots of Alamo N 36271 con us with a V 36276 handle million to account N 36278 awarded account to LaRosa V 36281 pull ads from magazines V 36282 produced version of commercial N 36283 is part of campaign N 36286 exceed projections of million N 36286 exceed projections for year V 36286 be cents to cents N 36287 were million on sales V 36289 expect loss in quarter N 36290 had income of million N 36290 had income on sales V 36291 attributed slide to delays V 36293 got lot of balls N 36293 got lot in air V 36297 place emphasis on quality V 36298 been key to success N 36298 carved niche as seller V 36300 reducing chances of takeover N 36300 reached accord for PLC N 36301 owning interest in company N 36302 owns stake in Life N 36302 make bid for insurer N 36303 buy holding in Life N 36303 sell stake to TransAtlantic V 36304 buy assets of companies N 36305 had income of 319,000 N 36307 signed letters of intent N 36309 offset decline in income N 36312 advanced % because buy-back N 36313 declined % to billion V 36315 fell % to million V 36316 dropped % to billion V 36317 include gains of million N 36318 include gain of million N 36319 offered million in debentures N 36319 offered million through Co. V 36322 including expansion of operations N 36325 rose % to francs V 36326 reflected gain from offering N 36328 had profit of francs N 36330 forecast earnings for 1989 N 36330 are indication because elements N 36331 depress values in term V 36333 drag prices in neighborhoods V 36337 create system for communities N 36338 boasts some of prices N 36340 demolished dwellings in district N 36340 demolished dwellings because damage V 36344 revive interest in law N 36346 expand all of operations N 36347 put all of eggs N 36347 put all in basket V 36348 prod companies in industries N 36348 moving operations to locations V 36349 compared it with cost V 36350 compare costs with cost V 36354 included gain of 708,000 N 36356 rose % to million V 36358 has activities under way V 36360 is maker of paper N 36363 follows agreements between producers N 36366 increased % to billion V 36369 dropped % from quarter V 36371 rose % to kilograms V 36372 increased stake in Ltd. N 36372 increased stake to % V 36375 acquired stake in Forest N 36375 bought interest in company N 36375 bought interest from Ltd V 36376 raising interest in Forest N 36376 raising interest to % V 36377 acquire interest in Forest N 36379 extend authority over utilities V 36380 open way for services N 36382 regulated companies in Quebec N 36383 opposed regulation of companies N 36385 extend loan until 1990 V 36386 omit dividends on shares N 36389 took control of board N 36394 had million in assets N 36397 approved assumption of deposits N 36399 had assets of million N 36400 assume million in accounts N 36400 pay premium of million N 36401 buy million of assets N 36401 advance million to bank V 36403 reported loss of francs N 36405 transfer shareholding in Commerciale N 36405 transfer shareholding to company V 36406 give control of Commerciale N 36408 sell venture to units V 36409 licenses portfolio of applications N 36410 formed Discovision in 1979 V 36412 investing million in business V 36412 ceased operations in 1982 V 36413 has agreements with manufacturers N 36421 climbed 266.66 to 35374.22 V 36424 rose points to 35544.87 V 36430 restored credibility of stocks N 36431 remain firm with trend N 36433 shift weight to side V 36434 rotated buying to issues V 36436 gained 130 to yen V 36436 advanced 60 to 2,360 V 36438 advanced 100 to 2,610 V 36438 gained 100 to 2,490 V 36439 attracted interest for outlooks N 36440 issue results for half V 36441 gained 50 to 2,120 V 36441 advanced 40 to 1,490 V 36442 gained 100 to 2,890 V 36444 lost 5 to 723 V 36444 slipped 6 to 729 V 36445 fell 44 to 861 V 36446 finished points at 2189.3 V 36447 ended 13.6 at 1772.1 V 36452 showed growth in lending N 36452 keep pressure on government V 36454 gained 20 to 10.44 V 36456 gained 6 to 196 V 36457 recovered ground on demand V 36458 ending 15 at 465 V 36459 jumped 10 to 10.13 V 36463 purchased shares at 785 V 36471 schedule meeting with him N 36473 invited mayor to meetings V 36475 return calls from Sununu N 36476 is support for disaster N 36478 accompany Bush on tour V 36481 pending appeal of measures N 36483 accused Semel of conduct N 36485 appealed decision to Commission V 36488 paid 211,666 of fine N 36493 buy million of loans N 36493 offers types of loans N 36493 offers types to people V 36495 makes market in loans N 36496 buys loans from lenders V 36496 packages some into securities V 36496 holds remainder in portfolio V 36497 launch fight against board V 36498 elect majority of board N 36498 elect majority at meeting V 36499 have comment on plans N 36501 owns 300,000 of shares N 36502 bought 55,000 of shares N 36503 filed suit in Court V 36505 prompted speculation of rates N 36507 brought gain to points V 36509 climbed % in September V 36511 leaving group without partner V 36512 raised questions about efforts N 36512 revive bid for UAL N 36514 is setback for Bush N 36514 pass cut in Senate V 36520 prompting forecasts of results N 36522 unveil products on Tuesday V 36522 end some of problems N 36523 offering programming to stations V 36526 fell % for month V 36528 posted gain for quarter N 36530 won approval for restructuring N 36531 climbed % in quarter V 36537 negotiate details of contract N 36537 provide software for Center V 36539 awarded contract to CSC V 36539 sent contract to Board V 36540 completed contract for NASA N 36540 lost bid for renewal N 36542 had revenue of billion N 36543 RATTLED California amid cleanup V 36544 measuring 5.0 on scale N 36550 prohibit desecration of flag N 36552 considered victory for leaders N 36554 sent measure to Senate V 36555 quashed convictions of people N 36559 considered work of fiction N 36560 cited Cela for prose V 36562 considered development in week N 36562 including criticism from Gorbachev N 36564 threatened rallies against policies N 36565 raided meeting on rights N 36568 furthering democracy in Europe N 36569 monitor voting in Nicaragua N 36569 carrying proposals for elections N 36571 dispatched Wednesday by crew V 36571 conduct series of experiments N 36573 followed meeting in Madrid N 36574 bombarded capital of Afghanistan N 36574 airlifting food to forces V 36576 develop plan for withdrawal N 36578 acquit Judge in trial V 36583 anticipated rise in index N 36586 had influence on moves V 36587 disassociate itself from Street V 36591 reflects slowdown in economy N 36593 is measure of inflation N 36594 hold changes in policy N 36594 hold changes in check V 36594 leaving funds at % V 36598 drain liquidity from system V 36599 post gains against counterpart N 36600 's pit of demand N 36600 hold dollar at levels V 36602 remains bag for investors N 36603 dropped 1.60 to 367.10 V 36609 sell interests in hotels N 36609 sell interests in 32 N 36611 consider number of options N 36612 retain dividend of cents N 36613 had loss of 244,000 N 36614 posted rise in income N 36615 posted net of million N 36622 received billion of financing N 36622 received billion from Bank V 36622 arrange balance of million N 36625 received expressions of interest N 36625 received expressions from bidders V 36626 pursue inquiries from companies N 36627 is one of stories N 36628 presents problem for stock N 36632 knows all about predictability N 36636 held % of Block N 36638 do things with Code V 36639 sold the of holdings N 36642 hit high of 37 N 36644 has lot of fans N 36645 invested 10,000 in offering V 36659 sold amounts of stock N 36663 's growth in business N 36664 provides information to users V 36665 provides % of earnings N 36666 provides % of earnings N 36666 provides % on % V 36668 crimping profit at Pool V 36675 grow % to % N 36685 including dividend for quarter N 36686 convert stock into shares V 36687 is shares for 3 N 36693 lost some of mystery N 36696 offered idea of trading N 36699 been Board of lunchroom N 36700 buy list of stocks N 36702 paid 10,000 for seats V 36705 run volume of contracts N 36708 drew recognition from quarter V 36709 sued CBOE over system V 36711 appeal ruling in court V 36713 owns share of Seabrook N 36715 make payments on costs N 36718 reported earnings for companies N 36719 reported earnings for companies V 36720 report set of earnings N 36725 rose 1.75 to 52.75 V 36736 created loss of million N 36744 are guide to levels N 36775 seeking seats in GATT N 36777 was member of GATT N 36777 was member in 1947 V 36779 voiced opposition to bid N 36784 launch series of underwear N 36787 won appeal against size N 36788 slashed 40,000 from award V 36788 pending reassessment of damages N 36791 build condominium in Queensland V 36793 has stake in venture N 36796 halted construction of reactors N 36796 reassessing future of reactors N 36801 used account of magnate N 36802 cap emissions of dioxide N 36805 reduced dependence on fuels N 36807 meet opposition from environmentalists N 36808 publishing Dictionary of Superstitions N 36810 questioned size of bills N 36811 dialing service in U.S N 36814 's change from year N 36816 set schedules for plant V 36818 slapped rebates on vehicles V 36818 including incentives on Cherokee N 36829 cut output by cars V 36830 offer rebates on cars N 36831 make line at Chevrolet N 36834 eliminate production of trucks N 36839 includes domestic-production through July N 36842 reported drop in profit N 36843 posted income of million N 36843 including million in benefits N 36847 anticipate loss of principal N 36847 comprising million of credits N 36851 signed agreement with Aruba N 36854 install units at refinery V 36855 leasing site of refinery N 36855 leasing site from Aruba V 36856 closed it in 1985 V 36861 included results of divisions N 36861 sold 27 to chairman V 36862 attributed improvement to margins V 36865 is the in history N 36867 puts us on way V 36870 continuing operations for months V 36875 given notices of default N 36879 notified it of default N 36880 missed payment to Bank N 36887 makes devices for computers N 36887 reflects sales of products N 36887 holds library of cartridges N 36888 cost 400,000 to 500,000 N 36891 rose 1.125 in trading V 36892 had net of million N 36892 including gain for proceeds N 36895 approved exports to U.S. N 36896 export feet of gas N 36896 export feet over years V 36897 requires doubling of prices N 36898 including agreement on route N 36903 bring fields into production V 36904 building pipeline from delta V 36906 export feet to U.S. V 36908 sold businesses for million V 36910 sell investments in makers N 36910 sell investments to shareholder V 36911 provides services for generation N 36918 made part of assets N 36919 been decline in importance N 36923 remained component of assets N 36926 accumulate wealth across spectrum V 36940 sent letter to Corp. V 36940 clarifying offer for LIN N 36942 take position on offer N 36943 revised offer to 125 V 36944 seeking % of concern N 36944 buy holders at price V 36949 acquire interests in markets N 36950 have rights to acquisition N 36951 depress value of LIN N 36953 enable buyers as companies N 36954 fell % to million V 36955 rose % to million V 36959 had loss of million N 36962 rose 1.50 to 64 V 36963 rose % to million V 36964 increased % to billion V 36970 Had views on sex N 36973 is organization for companies N 36975 be piece of company N 36976 has revenue of million N 36981 put pressure on organization V 36982 is beginning of sale N 36984 working agreement with Helmsley N 36988 help woman with packages V 36991 stuff them into envelopes V 36994 is worker in sight V 36998 opening facilities to races V 36998 storming beaches of Cape N 36998 releasing leaders of Congress N 37000 take name from William V 37000 is abolition of apartheid N 37000 's perfection of apartheid N 37004 put them on fringe V 37005 is desire of right-wing N 37005 embraces one-third of whites N 37007 putting preaching into practice V 37013 fix lunch for rest V 37014 puts touches on course V 37015 build it by themselves V 37016 change way of life N 37017 end reliance on others N 37019 exclude blacks from integration V 37022 took development as opportunity V 37027 been domain of Afrikanerdom N 37030 is town of whites N 37044 thank God for them V 37045 made laughingstock of nation N 37050 turning integration of politics N 37053 compares Workers to ANC V 37054 is provision for aspirations N 37055 stop idea of Afrikaners N 37059 have cup of tea N 37065 take look at stocks V 37067 cut branches of portfolio N 37071 expect market for period V 37081 be candidate for sale N 37084 Substituting rule of thumb N 37084 Substituting rule for judgment V 37091 are ones with loads N 37095 obtaining financing for buy-out V 37100 COMPARE RATIOS WITH PROSPECTS V 37101 compare -LRB- with rates V 37103 pay times for company V 37109 been change in company N 37115 declined request for a N 37123 increasing board to 10 V 37125 reported jump in earnings N 37131 was % below million N 37133 was % below quarter N 37135 build reserve against loans N 37135 boosting provision to million V 37140 turned performance than competitor N 37140 posted return in quarter V 37141 reported return on assets N 37147 jumped % to billion V 37147 rose % to billion V 37148 rose % to billion V 37149 soared % to million V 37150 eliminating some of problems N 37151 resemble Tower of Babel N 37154 include lots of equipment N 37155 write software for instance V 37155 pinpoint problem on line V 37158 integrate products into operations V 37160 provide boost to market V 37161 is step in direction N 37165 dominated market for computers N 37166 gain share in arena N 37167 face climb against Digital N 37168 made commitment to sorts N 37169 gets % of revenue N 37169 gets % from market V 37170 generates % of revenue N 37170 generates % in market V 37170 take advantage of following N 37173 losing luster over couple V 37174 take advantage of capabilities N 37176 creates run in sheets N 37179 accept grade of polyethylene N 37181 become weapon for companies N 37182 tell salespeople for instance V 37183 get reading in way V 37185 halt imports of Scorpio N 37187 announced months to day N 37187 kills brand in market V 37189 was project with goals N 37190 is setback for Ford N 37190 showing signs of strain N 37191 losing ground to rivals V 37195 having problems in U.S V 37197 hobbling sales of imports N 37202 importing sedan from Germany V 37208 sold XR4Ti than dealership N 37209 had rating in studies V 37213 sell inventory of cars N 37214 acquiring % for 19.50 V 37214 find buyer for stake V 37215 appointed committee of directors N 37219 put stake in Line N 37220 has interests in transportation V 37220 took block off market V 37221 acquiring remainder of Line N 37222 owned stake in railroad N 37226 had loss from operations N 37230 include items of million N 37237 attributed buy-back to confidence V 37239 received resignation of Franco N 37242 discussing number of ventures N 37245 had parting with Holding N 37245 has number of ventures N 37245 has number under consideration V 37246 was decision with management N 37248 sells annuities to individuals V 37255 made debut in boxes N 37259 applied 1973 for patent V 37260 put models behind ears V 37266 constrains models to pencils V 37268 remains company among 10 N 37270 posted decline for quarter N 37271 reported net of million N 37272 reflected increase in rate N 37274 had profit of million N 37279 had increase in margins N 37280 are difference between yield N 37284 posted rise in earnings N 37285 reflecting drop in sales N 37290 masked weaknesses in businesses N 37293 excluding sale of Guides N 37296 negotiated settlement of lawsuits N 37300 cited conditions in units N 37304 licensed software to Association V 37306 sell access to package N 37306 sell access to members V 37308 be number of seats N 37310 produce sheet with flatness N 37311 estimated cost at million V 37313 named chairman of Ltd. N 37315 is director at Bank V 37318 made way to computers V 37318 link computers via lines V 37319 is one of outposts N 37334 shower us with glass V 37336 sent cloud of smoke N 37336 sent cloud into air V 37352 Was ft. on pier V 37359 come home to Marin V 37361 was smell of gas N 37362 see clouds across bay N 37366 see flames from Francisco N 37382 taken refuge under desk V 37388 was level of confusion N 37395 let dogs into house V 37395 noticed sounds above head N 37398 scooted them into run V 37399 were 20 below zero N 37401 saw pictures of 880 N 37414 threw me in air V 37438 exceeded estimates of 1.90 N 37446 clears way for consideration N 37449 opposed legislation in form V 37454 took position on bill N 37455 review purchase of % N 37456 gave control to interest N 37462 calling retreat from policy N 37463 welcoming allocation of resources N 37474 reappraised impact of disaster N 37475 settled points at 1758.5 V 37477 showing losses in trading N 37478 reappraise impact of disaster N 37480 including gains in value N 37481 rose pence to 10.03 V 37481 climbed 5 to pence V 37481 rose 3 to 290 V 37481 jumped 12 to 450 V 37482 advancing 3 to 344 V 37482 fell 2 to 184 V 37483 rose 5 to 628 V 37484 showed strength on comments N 37488 fend bid for B.A.T N 37489 shaken confidence in plan N 37490 buying % of Holding N 37490 buying % for francs V 37490 expanding ties with group N 37491 climbed 14 to 406 V 37492 jumped 14 to 414 V 37493 advanced 19 to 673 V 37493 contemplated battle between Motors N 37494 rose points to 35107.56 V 37499 rose points to 35242.65 V 37503 see effect on stocks N 37507 rotate choices over term V 37510 surged 95 to yen V 37513 gained 70 to 2,840 V 37516 rebounded day from slide V 37517 extend rise to session V 37520 was day for shares N 37527 followed drop of % N 37528 reported decline as % V 37529 suffering effects of battle N 37530 shown signs of recovery N 37530 relax clamp on credit N 37540 followed decline in August N 37541 slipped % to rate V 37541 following decline in August N 37542 dropped % to rate V 37542 rising % in August V 37544 are one of the N 37545 posted turnaround from year N 37546 posted net of million N 37548 included gain from sale N 37549 correct overstatement in subsidiary N 37550 had income of million N 37552 lost cents to 18.125 V 37553 reflects revenue from trading N 37556 fell % to million V 37556 reflecting slowdown of business N 37559 posted earnings in line V 37561 reported rise in earnings N 37561 posted increase in net N 37565 increased % in quarter V 37566 reflecting reduction of rates N 37572 reduced growth by points V 37576 received approval of XL N 37580 completed sale of businesses N 37580 sold interest in affiliate N 37580 announced reorganization of businesses N 37583 declined % because sale V 37584 were factor in drop N 37587 received order from Crossair N 37589 Lost Lot to Hugo V 37590 owned homes on Battery N 37592 perpetuate view of city N 37593 be one of disasters N 37596 Depicting people of city N 37597 show people of city N 37602 see spring in glory V 37604 sell interest in Systems N 37604 sell interest for million V 37605 is unit of Inc. N 37605 is unit of System N 37606 record gain of million N 37606 record gain from sale V 37606 offset reduction in value N 37607 guarantee financing for purchase V 37613 made one of companies N 37615 curtail role in subcontracting N 37616 replacing populism of Quina N 37616 open sector to investment V 37619 is part of conspiracy N 37619 turn oil to foreigners V 37620 takes criticisms in stride V 37621 is kind of leadership N 37623 produces % of revenue N 37624 make payments on debt N 37629 barring overhaul of operations N 37632 greeting visitor to office N 37636 assign % of all N 37638 keep commission on projects N 37639 was part of salary N 37641 reducing force to 140,000 V 37644 retaking instruments of administration N 37645 pegged savings at million V 37651 complements moves by government N 37651 attract investment in petrochemicals N 37653 reclassified petrochemicals as products V 37654 been symbol of sovereignty N 37657 makes apologies for attitude V 37658 become victims of isolation N 37663 seen doubling in number N 37667 bringing wives for counseling V 37669 noted doubling in number N 37671 setting time for themselves V 37672 Putting times on calendar V 37676 adopt four of suggestions N 37676 accept one in four N 37680 grant award of 604.72 N 37681 is 274,475 in Japan N 37685 spawns rise in dishonesty N 37686 places effect of buy-outs N 37686 places effect among challenges V 37687 take eye off ball V 37688 linked satisfaction to loss V 37696 adopt approach with monitoring N 37700 underscores difficulty for management N 37700 satisfying investors on score V 37703 get slice of pie N 37704 acquire business of Bancorp. N 37705 is part of trend N 37706 buy operation of Corp. N 37706 buy operation for million V 37707 includes accounts with million N 37710 is issuer of cards N 37713 becoming kind of business N 37715 bolster earnings by 3.25 V 37716 pursue opportunities in Southwest N 37717 was move for City N 37718 make acquisitions in Texas V 37720 seeking terms in bid V 37720 following collapse of bid N 37721 reduce size of investment N 37725 be party to rejection N 37726 confirming report in Journal N 37726 push stock for day V 37727 fell 6.25 to 191.75 V 37728 put million in cash N 37728 make million in concessions N 37729 pay million for % V 37734 received proposals from group V 37740 was chunk for us N 37741 obtaining stake in company N 37742 be point in favor N 37743 expect rate of return N 37746 holding coalition in face V 37747 representing group of pilots N 37747 filed suit in court V 37749 reduce seniority of pilots N 37749 reduce seniority in exchange V 37750 are members of union N 37753 reduce rate of increases N 37754 embraced strategy as way V 37754 control costs for employees N 37757 reduced level of expenditures N 37757 reduced level for purchasers V 37757 altered rate of increase N 37758 saw moderation in expenditures N 37758 seeing return to trends N 37762 made assessments of costs N 37768 reduces bills by % V 37770 evaluate appropriateness of treatment N 37771 is president of Hospitals N 37772 reduce cost of review N 37773 reduces use of resources N 37773 improves appropriateness of care N 37773 imposes burdens on providers V 37774 manufacture line of trucks N 37774 manufacture line in Britain V 37776 incorporate trucks into lines V 37777 expects agreement between companies N 37778 is example of trend N 37778 eliminating barriers within Community V 37779 invest total of francs N 37779 invest total in venture V 37779 including billion for costs N 37780 spend billion on tooling V 37781 represents savings for DAF N 37781 renew ranges of vehicles N 37784 have rights for range N 37785 offer vehicles through dealers V 37787 holds % of capital N 37788 is object of suggestions N 37788 is object for reasons V 37790 has kind of independence N 37790 has authority over one V 37794 is target for complaint N 37795 assigned blame for unpleasantness N 37797 changing term of chairman N 37797 shortening terms of members N 37797 eliminating presidents of Banks N 37797 eliminating presidents from process V 37797 putting Secretary of Treasury N 37797 putting Secretary on Board V 37797 putting expenditures in budget V 37797 requiring publication of minutes N 37805 buy worth of stuff N 37811 prevent recurrence of experience N 37812 were reasons for policy N 37813 yield improvement in output V 37816 had effect at all V 37817 Putting Secretary of Treasury N 37817 Putting Secretary on Board V 37818 is borrower of money N 37819 has longing for rates N 37820 is agent of president N 37820 gives weight to way V 37821 is member of club N 37821 is diversion from business N 37822 put secretary on board V 37823 interpret it as encouragement V 37824 interpret it as instruction V 37824 give weight to objectives V 37826 given color to notion V 37827 advise all about matters V 37827 are ingredients of stew N 37832 accept responsibility for exercise N 37834 is unwillingness of parts N 37835 leave decision to agency V 37836 prevents conduct of policy N 37836 are expectations of masters N 37836 consider consequences of policy N 37837 is responsibility of System N 37840 leave decision to Fed V 37840 retain rights of complaint N 37841 have objectives in addition V 37846 be competitors for attention N 37849 joined list of banks N 37849 boosting reserves for losses V 37851 had income of million N 37854 was million at 30 V 37856 pass House in Pennsylvania N 37857 require consent of parents N 37857 pass houses of legislature N 37857 override veto of Gov. N 37858 counter advance in arena N 37858 counter advance with victory V 37859 enact restrictions on abortions N 37859 enact restrictions in state V 37859 permit abortions for women V 37859 are victims of incest N 37860 mute claims of momentum N 37861 reflecting relief of compatriots N 37861 enact restrictions on abortions N 37866 hold hand in Pennsylvania V 37866 reflect viewpoints of citizens N 37867 established right of abortion N 37867 established right in place V 37868 ban abortions after weeks V 37868 avert death of mother N 37871 informed hours before operation N 37871 informed hours of details V 37872 opposes right to abortion N 37873 is obstacle for anti-abortionists N 37874 takes comfort from fact V 37874 overturn veto on abortion N 37876 perform tests on fetuses V 37877 bringing measure to floor V 37881 press issues in session V 37881 run 14 to 13 N 37883 do anything about this N 37888 train leaders in techniques V 37888 put anti-abortionists on defensive V 37890 avert death of tissue. N 37890 save life of mother N 37898 completed sale of shares N 37902 providing billion for Service V 37904 including million for College N 37905 were force behind million N 37909 added million for stepped V 37911 anticipates purchase of aircraft N 37912 had backing of officials N 37913 is ban on expenditure N 37915 raise profile of issue N 37915 block action in interim V 37916 is bit of legerdemain N 37916 is bit on behalf V 37917 wipe million in claims N 37917 owned hospital in Sullivan N 37918 scheduled morning between Whitten V 37918 delayed action on bill N 37919 reached agreement on provisions V 37919 provide information to farmers V 37919 reduce dependence on pesticides N 37920 received 900,000 in 1989 V 37921 takes view of policy N 37923 including sale of units N 37923 delay aspects in wake V 37924 fight bid by Goldsmith N 37924 clear way for measures N 37925 increased likelihood of approval N 37926 have deal on table V 37926 vote stake in favor V 37928 been chip over months V 37930 rose cents to pence V 37930 erased fall in day V 37931 spin billion in assets N 37936 delay actions into half V 37939 receives approval for restructuring N 37940 reflect business than business V 37941 make target for predators N 37942 slow pace of events N 37948 include managers from chains N 37951 mount bid for B.A.T N 37953 clouds outlook for attracting N 37953 attracting price for properties N 37955 quantify level of claims N 37956 has expectation of impact N 37957 disrupt transportation in area N 37957 disrupt transportation for months V 37958 escaped earthquake with damage V 37959 expect return to operations N 37959 expect return by Saturday V 37963 halt deliveries into area N 37968 impeded delivery of packages N 37969 noted delays on bridge N 37969 noted delays for example V 37972 resumed service at 10:45 V 37977 had damage on railroad V 37978 have problem to service N 37979 suspended service into station N 37979 sustained damage during quake V 37980 terminated runs in Sacramento V 37980 ferry passengers to area V 37981 resume operations to Oakland N 37983 running fleet of trains N 37983 running fleet during day V 37983 provide alternative for travelers N 37988 shattered windows at tower N 37988 rained pieces of ceiling N 37993 operating % of service N 37993 causing delays for travelers V 37997 were both by yesterday V 38003 triggering scramble among groups V 38004 buying part of business N 38007 distributes whiskey in U.S. V 38009 bought distillery for million V 38010 become player in business N 38022 own any of brands N 38023 take look at business N 38024 have brand in portfolio V 38030 had profit of million N 38032 estimate profit at million V 38033 had profit in year V 38035 foster competition in industry V 38036 own thousands of pubs N 38037 selling beers of choice N 38038 grab share of sales N 38039 paid million for PLC N 38039 has % of market N 38040 brew beers in Britain V 38043 owns chain of restaurants N 38048 retain title of chairman N 38049 raise million in cash N 38049 raise million with sale V 38049 redeem billion in maturing N 38052 announced split in units N 38052 increased distribution to cents V 38053 pay distribution of cents N 38056 meet requirements for plans N 38061 rose cents to 32.125 V 38062 planning party on Tuesday V 38067 take it as compliment V 38068 is market for computers N 38069 dominated market for decades V 38070 poaching customers of machines N 38071 stage performance in mainframes N 38075 stir life into market V 38078 weaving hundreds of workstations N 38082 's price of equipped N 38084 hit IBM at time V 38087 deliver generation of mainframes N 38087 deliver generation until 1991 V 38089 has near-monopoly on mainframes N 38089 has near-monopoly with share V 38091 counts majority of corporations N 38091 entrust information to computers V 38094 is competitor in market V 38097 unplug mainframes for machine V 38100 juggling hundreds of billions N 38107 bases estimate on survey V 38108 announce family of mainframes N 38113 halt development of product N 38113 stem losses at end N 38114 cost company in 1989 V 38115 face competition in coming V 38116 has share of market N 38116 has share with machines V 38117 unveil line of mainframes N 38129 lower rates in coming V 38131 see volatility in stocks V 38143 outpaced decliners by 822 V 38148 named president of producer N 38149 succeed Himebaugh as manager V 38150 posted drop in income N 38154 report results over days V 38155 said nothing about offer V 38161 giving bit of trouble N 38167 underscore importance of base N 38169 Succeeding Whittington as chairman V 38170 Succeeding Whittington at Co. V 38175 add acres to 453,000 V 38175 enacting Act of 1989 N 38176 develop property on island N 38178 bear costs of construction N 38179 save billion in subsidies N 38179 save taxpayers over years V 38185 marked decline in rate N 38189 was reversal of trend N 38189 was reversal between 1987 V 38190 hit record in 1988 V 38190 rising % after adjustment V 38192 including number of families N 38194 was 12,092 for family V 38208 got % of income N 38209 got % of income N 38210 keeping pace with inflation N 38210 fell % in 1988 V 38213 rose % to 27,225 V 38216 rose % in 1988 V 38224 left Co. in January V 38225 resigned posts at Triad N 38227 boosted spacecraft on way V 38227 giving lift to program V 38228 been symbol of trouble N 38229 turn Galileo into symbol V 38232 parachute probe into atmosphere V 38232 pick data about gases N 38234 Investigating Jupiter in detail V 38234 calls paradox of life N 38234 has store of material N 38236 begin tour of moons N 38238 spewing material into miles V 38239 has ocean than those N 38240 lifted Galileo from pad V 38240 released craft from bay V 38243 conduct experiments before landing V 38249 released doses of radiation N 38250 collecting energy from field V 38250 gain momentum for trip N 38254 continues recovery in program N 38256 sent photos of Neptune N 38258 measuring effects of space N 38259 see galaxies in universe N 38263 drew attention to phenomenon N 38263 deserves thought by officials V 38270 thwarted bid from Trump N 38271 pays premium over value N 38272 reveal details of agreement N 38273 paying bulk of money N 38275 granted payment in case V 38276 made profit on sale V 38277 sued Disney during battle V 38278 pay premium for shares N 38278 pay premium to shareholders V 38280 have leverage in case V 38281 gives boards of directors N 38281 gives boards of directors N 38282 HEARS arguments in trial N 38285 obtain bribe from defendants V 38289 conducted inquiry into activities N 38292 contemplating appeal of impeachment N 38296 notifying company of responsibility N 38296 fit definition of lawsuit N 38299 defend it in proceeding V 38300 defend company in proceedings V 38306 face problems without help V 38307 is conclusion of report N 38309 provides documentation of nature N 38311 ranked problems as need V 38314 propose solutions to problems N 38315 headed case against Brotherhood N 38315 join Crutcher in office V 38317 became chief of division N 38318 do litigation for Dunn V 38319 joined firm of Bain N 38321 joining Apple in 1986 V 38322 find buyer for Tower N 38322 refinance property for million V 38330 lends owner in return V 38330 convert interest into equity V 38333 put tower on block V 38335 have deal with Ltd V 38336 lease building at prices V 38337 sought financing in Japan V 38339 proposed deal during round V 38340 has billion of investments N 38341 acquire units of AB N 38341 acquire units for cash V 38343 estimated price at million V 38344 acquire rights to names N 38345 combined sales in excess N 38349 curtail deductibility of debt N 38350 been force behind market N 38356 label debt as equity V 38357 defer deductibility for years V 38358 see these in LBO V 38359 becomes source of cash N 38359 becomes source for company V 38359 repay debt for years V 38363 posted loss of million N 38363 receive refund from tax N 38367 lowered bid for International N 38368 raise ante for company N 38370 increase part of transaction N 38371 reduce level of ownership N 38372 give bit of slop N 38375 pays points above notes N 38375 pay interest for year V 38379 pay taxes on holdings V 38382 finds ways around rules N 38385 fell % in September V 38388 open spigots of aid N 38388 open spigots for victims V 38392 divert food from program V 38394 allocated billion in funds N 38396 consider requests for funding N 38403 handle aftermath of Hugo N 38404 have caseload in history V 38405 finds itself after operation V 38408 opened shelters in area N 38410 make requests to FEMA V 38416 waive penalties for victims V 38417 announce procedures in days V 38418 held them for period V 38419 is number of facilities N 38419 provide base of supplies N 38420 set center in Pentagon V 38421 moving supplies to California V 38427 set offices in area V 38427 staff them with 400 V 38434 set standards for bridges V 38434 retrofit highways for hazards V 38437 completed phase of retrofitting N 38441 estimates output at bushels V 38443 plummet % to % N 38446 see drop of point N 38451 revive specials like cans N 38452 cost cents during drought V 38456 offer form of coverage N 38459 achieve pregnancy after four V 38463 change mix in portfolios N 38467 begins exhibit at Gallery V 38473 generated 54,000 in matching N 38477 give bonus in form N 38477 give employees in exchange V 38478 subsidizing contributions to PACs N 38481 find hand from companies V 38484 promises Christmas with pledge V 38484 deliver goods before Christmas V 38485 deliver orders within days V 38489 hires workers for rush V 38493 designated city by Almanac V 38494 used ranking in brochure V 38495 ranked last among areas N 38497 making enemies on 27 V 38503 Tell that to Atlanta V 38505 did research for report N 38509 has pretensions to status V 38510 lists areas as Ana V 38516 fell % to million V 38516 reported earnings of million N 38517 recorded decline in sales N 38521 earned million in quarter V 38522 credited gains in segments N 38526 accept contracts for development N 38527 were system for fighter N 38531 reported loss of million N 38533 reducing earnings in segment N 38537 earned million on rise V 38538 reported increase in income N 38538 reported increase on gain V 38542 was million on sales V 38545 awaited launch of 3 N 38548 had revenue of million N 38548 had revenue in quarter V 38550 raise prices with distributors V 38550 hold share against Microsoft V 38550 exploit delays in launch N 38551 held share of market N 38552 heaved sigh of relief N 38553 turned damage to facilities N 38554 expected disruption in shipments N 38556 tracks industry for Research V 38557 's end of world N 38558 registered 6.9 on scale V 38559 inspecting buildings for weaknesses V 38559 mopping water from pipes N 38559 clearing tiles from floors V 38561 puts drives for family N 38568 is slew of problems N 38572 spared Valley from kind V 38577 installed sensors in pipes V 38578 has factories in parts V 38578 leave customers in pinch V 38579 's news for companies N 38579 has supply of microprocessors N 38579 has supply from Valley V 38579 limits buildup of inventory N 38582 set centers in Dallas V 38583 handling calls from both V 38585 dispatched teams of technicians N 38585 dispatched teams to California V 38587 conducts research on weapons N 38590 is contractor on missile N 38591 generates pieces of shield N 38599 seek protection from creditors N 38599 seek protection in 1987 V 38605 sanitize billions of eggs N 38605 turning them into products V 38607 breaking them by hand V 38608 put eggs into cylinder V 38608 spin them at speed V 38608 strain part through baskets V 38610 recover cost in months V 38612 offering them in U.S V 38614 cause stomachs in cases N 38614 cause stomachs among people V 38615 pass salmonella to eggs V 38618 use eggs in products V 38624 Leading assault against King N 38625 make buck at expense V 38627 was Department of Agriculture N 38628 won approval for be V 38630 receiving complaints from producers V 38630 limiting market to bakeries V 38632 was likelihood of problem N 38635 took vote on floor N 38637 turned attention to states V 38640 pay 100,000 in fees N 38640 pay 100,000 to lawyers V 38641 pushed company into court V 38643 ended string of breaks N 38650 removing wad of gum N 38650 removing wad from mouth V 38653 has picture to credit V 38653 wrote screenplay for picture N 38656 put spin on material V 38660 embraces requirements without condescension V 38662 cast brothers as brothers V 38665 playing piano on pianos V 38666 're time in time-hotels V 38668 wear costumes like shirts N 38670 takes care of business N 38670 approaches work like job V 38672 got wife in suburbs N 38672 sees house near end V 38681 showed promise during stint V 38684 become star in right V 38685 have lot of patience N 38685 take look at 2 N 38687 check emergence of persona N 38688 pay million for subsidiary V 38690 is producer of goods N 38692 closed Tuesday in trading V 38692 giving portion of transaction N 38692 giving portion of transaction N 38693 sell plant to Co. V 38694 use plant for laboratories V 38695 seeking buyer for facility V 38697 won contract for aircraft N 38698 issued contract for support N 38699 got contract for work N 38703 redeem shares of stock N 38704 convert share into shares V 38704 surrender shares at price V 38705 makes products for industries N 38706 require restatement of results N 38706 increased projections of impact N 38707 restate quarters of year N 38710 had loss of million N 38711 including sale of company N 38716 elected director of concern N 38719 are base in terms N 38721 be ombudsman for area V 38722 're ombudsman for area V 38724 get housing for area V 38725 prohibit programs in areas V 38727 accepted withdrawal from membership N 38728 is subsidiary of Ltd. N 38728 implicated year in scheme V 38734 document trades between Futures N 38737 succeeds Lang as president V 38738 named officer of group N 38741 soared billion in week V 38742 following fall of Friday N 38743 's flight to safety N 38744 offer yields than investments N 38745 was % in week V 38747 yielding % at banks V 38751 getting proceeds for five V 38752 were levels with half V 38756 adjust maturities of investments N 38763 was Fund with yield N 38765 had yield of % N 38765 had yield in week V 38767 created Isuzu among others V 38767 removes it from business V 38767 selling majority of unit N 38767 selling majority to Eurocom V 38770 become one of agencies N 38770 attracting clients than were N 38771 reflects importance of buying N 38771 get price on space N 38771 buy it in bulk V 38772 gives foothold in Femina N 38772 quadruples size of business N 38774 pay francs for % V 38775 held % of unit N 38775 raise stake to % V 38776 raising stake in Group N 38777 buy % of group N 38777 have right in years V 38778 places executives at helm V 38780 be chairman with Wight V 38781 be officer at agency V 38782 outlined plans for agency N 38785 provide fund of million N 38786 make acquisitions in Scandinavia N 38787 Cracking 10 within years V 38788 had billings of million N 38790 make it to status V 38793 won Pan as client V 38793 does work for clients N 38795 're agency to multinationals V 38796 create one of alliances N 38797 combine buying across Europe V 38798 acquire stakes in Group N 38798 creating link between Eurocom N 38799 receive stake as part V 38799 pay million for stake N 38806 strengthen push outside France N 38807 invented idea of buying N 38808 buying space in bulk V 38809 won business of giants N 38811 plans issue of shares N 38814 brought scene to halt V 38814 wring hands about presentations V 38815 reported injuries to employees N 38815 damaged offices of Thompson N 38821 spent night at agency V 38823 awarded accounts to Thompson V 38827 been officer of Direct N 38828 be site of division N 38829 being president of media N 38831 is unit of Co N 38832 awarded account to Associates V 38834 introduced week at convention V 38836 shipping cars to Japan V 38837 export cars to Japan V 38838 exporting year from factory V 38839 been lack of attention N 38841 is result of sins N 38844 designating 24 as Day V 38846 puts strain on friendship N 38846 been one of allies N 38847 seeking help from States V 38848 fighting past for years V 38849 blames it for genocide V 38852 is part of Europe N 38854 is faith of majority N 38856 accept sins of Empire N 38858 accepted refugees from nations N 38870 get specter of drugs N 38871 take it from department V 38872 have solution in mind V 38873 protect programs at heart N 38874 unveiled series of reforms N 38874 improve management at HUD N 38880 give those in Congress N 38880 give those in Congress N 38889 provide housing for the V 38891 is welfare for developers N 38892 loans money for mortgages N 38892 be billion in hole V 38893 Selling portfolio to bidder V 38893 save billions in losses N 38894 free money for tenants N 38895 clean drugs from neighbhorhoods N 38896 turned cities into zones V 38901 reclaims streets from gangs V 38903 overhaul room at HUD N 38906 channel resources into war V 38907 named chairman of chain N 38909 retains position as president N 38916 produced paeans about perfection N 38919 witnessing decline of economy N 38923 found rates from investment N 38926 was drop in number N 38926 divide value of firms N 38926 divide value by costs V 38930 valuing worth of assets N 38930 valuing worth at cents V 38931 take it as bet V 38931 buy worth of stock N 38932 restoring faith in them N 38938 announcing end in suspension N 38938 were promoters for continue V 38939 watch avalanche of buy-outs N 38939 be America with productivity V 38945 building empires with sand V 38946 reckoning rate on bonds N 38946 reckoning rate at % V 38947 is consequence of burden N 38948 need liquidity in form N 38949 assists motions of economy N 38949 assists motions with charity V 38950 avoid shock of crash N 38953 consult workers on subject V 38956 are strikes by miners N 38957 are readings on capitalism N 38959 handling moments of panic N 38959 reporting crash in 1929 V 38961 computing interest on loans N 38964 make fools of those N 38965 is columnist for Nation N 38968 invest total of yen N 38968 invest total in venture V 38969 follows acquisition of Inc. N 38970 make sense for talk N 38972 been rumors about tie N 38975 is one of number N 38975 ending barriers in EC N 38982 carried tons of freight N 38985 increase cooperation in ground-handling N 38986 have access to system N 38987 operate fleets of Combis N 38987 carry both on deck V 38988 have orders for planes N 38991 lease crews from Airways V 38992 received proposal from JAL V 38993 were negotiations between U.K. N 38994 completed purchase of Corp. N 38996 has sales of million N 38998 prevent dislocation in markets N 38999 affects millions of dollars N 39001 guaranteeing liquidity of market N 39002 taking flights from Francisco N 39003 accomodate traders from exchange N 39004 provide capital for market-making N 39005 execute orders by flashlight V 39006 was suspension of trading N 39007 has options for issues V 39009 be cause for alarm N 39011 reassigned trading in options N 39014 has volume of shares N 39015 rerouting orders to operations V 39018 await inspection by city N 39018 turn power at facilities V 39022 executing orders through firm V 39025 executed orders through office V 39026 has offices in area V 39026 set number for obtain V 39027 received calls from workers V 39029 get quotes on stocks N 39030 assembled team at 5 V 39030 restore service to brokers V 39036 sell instrument at price V 39036 buy instrument at price V 39037 convert options into instrument V 39038 seeing exercises in fact V 39041 puts stock at value V 39044 spent billion over years V 39045 generates amounts of cash N 39046 had billion of cash N 39046 had billion on hand V 39048 view spending as way V 39048 improve measurements as earnings N 39049 view it as investment V 39052 buy million of stock N 39052 had authorization under program V 39053 providing floor for price V 39054 produced results in years V 39055 manufacturing chip for mainframes V 39056 had series of glitches N 39057 delay introduction of drives N 39059 are factors at work V 39060 reduces value of revenue N 39060 knock 80 to cents N 39060 knock 80 off earnings V 39061 matched earnings of billion N 39065 singling shares of companies N 39066 set line for Franciscans V 39069 rose 2.75 to 86.50 V 39070 use earthquake as excuse V 39071 cost lot of money N 39075 gained cents to 33.375 V 39079 touted Georgia-Pacific as plays V 39080 were companies with refineries N 39081 jumped 1.125 to 20.125 V 39081 rose 1 to 65 V 39083 fell cents to 81.50 V 39083 fell cents to 31.875 V 39086 fell cents to 19.625 V 39088 lost cents to 44.625 V 39091 claimed victim among scores N 39093 cleared trades through Petco V 39093 transfer business to firms V 39095 got look at risks N 39097 declined comment on Petco N 39098 transferred accounts of traders N 39098 transferred accounts to Options V 39098 meet requirements after slide V 39100 guarantee accounts at Options N 39104 amassed fortune from trading V 39106 is grandmother in County V 39107 put her behind cart V 39108 cross Crest off list V 39110 shaves 22 off bill V 39114 want any of oil N 39114 want any for grandkids V 39115 remove oil from products V 39117 represents breed of consumer N 39120 given choice of brands N 39120 are copies of one N 39121 brought this on themselves V 39124 buy brand of type N 39126 are brand for any V 39128 are brand in 16 V 39133 stomach taste of Heinz N 39135 are the to me V 39136 plays role in loyalty N 39140 scored % in loyalty V 39141 wore Fruit of Loom N 39142 make underwear for both V 39150 's loyalty by default V 39155 show stability in choices V 39158 were brand across categories V 39160 have set of favorites N 39162 attribute loyalty to similarity V 39164 are the in number V 39165 's clutter of brands N 39167 putting emphasis on advertising N 39168 instill loyalty through ploys V 39180 converting non-user to brand V 39182 consume cans of soup N 39183 probing attachment to soup N 39184 getting hug from friend V 39187 Getting grip on extent N 39192 processing claims from policyholders N 39193 fly adjusters into Sacramento V 39196 advertising numbers on radio V 39198 is writer of insurance N 39203 coordinates efforts of adjusters N 39203 coordinates efforts in area V 39204 have estimate of damages N 39204 have estimate in two V 39205 suffered some of damage N 39210 cause problems for industry V 39213 limit exposure to catastrophes N 39216 change psychology of marketplace N 39217 issued recommendations on stocks N 39221 limit exposure to catastrophes N 39223 have exposure to coverage N 39225 be the on basis V 39226 included losses of billion N 39227 generate losses of billion N 39227 following billion in costs N 39232 reached accord on sale N 39235 use proceeds from placement N 39235 purchase interest in underwrite N 39237 reach pact with Corp. V 39238 told reporters at Motorfair V 39238 do deal within month V 39239 offering access to production N 39241 fend advances from Co V 39242 lifting stake to % V 39244 renew request for meeting N 39253 traded yesterday on exchange V 39254 mark departure for maker N 39257 have designs for cars V 39258 build range of cars N 39259 boost output of cars N 39262 require approval by majority N 39265 enlisting support from speculators V 39265 holding carrot of bid N 39266 make bid for Jaguar N 39269 's weapon in armory N 39273 showed growth in lines V 39273 reported gain in net N 39275 dropped % as result V 39282 reduced income by million V 39283 dilute earnings by % V 39287 increased % to billion V 39287 including charges of million N 39291 b-reflects loss of cents N 39298 survey household in U.S. N 39300 introduce errors into findings V 39304 averaged % of turnover N 39308 did nothing of sort N 39309 exonerated trading as cause V 39310 is form of trading N 39311 offset positions in contracts N 39312 cause swings in market N 39317 observe activity on screens V 39319 defended use of trading N 39321 halted trading in contract N 39323 re-establish link between stocks N 39325 plunged points in minutes V 39328 voted increase in dividend N 39329 is 15 to stock N 39330 reported loss of million N 39331 added million to allowance V 39333 posted loss of million N 39334 had profit of million N 39334 had profit in period V 39335 paying dividend of cents N 39338 reviewing it with regulators V 39340 downgraded million of debt N 39340 taken write-offs against losses N 39340 taken write-offs despite write-down V 39348 is place for put N 39354 set things for period V 39354 reinforces concern of volatility N 39361 scare them to death V 39362 is news for firms V 39370 was business with level N 39371 shriveled months during year N 39372 was % in August N 39379 was nothing than reaction N 39381 keep control of assets N 39382 's semblance of confidence N 39386 drive everyone except the V 39387 studying perception of risks N 39392 offering notes as securities V 39393 offering million of notes N 39395 has them under review V 39399 issued million of securities N 39399 issued million in classes V 39415 is rate of Libor N 39417 buy shares at premium V 39420 beginning 30 from 101 V 39436 is unit of Corp N 39437 violating provisions of laws N 39439 was subject of profile N 39439 was subject in 1984 V 39439 questioned him about ties V 39440 violating provisions of laws N 39442 filed week in court V 39449 cut tax for individuals N 39451 offer it as amendment V 39454 exclude % of gain N 39455 rise points for year V 39455 reached maximum of % N 39457 reduce gains by index V 39460 alter deduction for accounts N 39463 grant exclusions to assets V 39464 get break than those N 39467 provide exclusion to assets N 39468 boost rate to % V 39472 rid bill of provisions N 39473 pumping water into apartments V 39480 turned Valley into capital V 39484 have power for hours V 39493 represents one-fourth of economy N 39495 been disruption for economy V 39499 expect problems for commerce N 39501 routing traffic through Francisco V 39504 estimated damage to city N 39504 estimated damage at billion V 39509 hit half-hour into shift N 39512 resume production of Prizms N 39512 resume production by yesterday V 39514 estimating cost of reconstruction N 39514 estimating cost in millions V 39518 taking checks from bank V 39518 sending them to another V 39518 handled night after quake N 39522 handle number of people N 39524 puts volume at times V 39525 blocking calls into area N 39527 blocking % of calls N 39528 blocking % of calls N 39531 give boost to economy V 39531 be influx of people N 39538 be kind of surge N 39542 reduce GNP in term V 39549 model impact of this N 39549 studies aspects of earthquakes N 39549 studies aspects at Studies V 39555 cause billion to billion N 39558 toured area by car V 39558 get sense of exposure N 39559 pay hundreds of millions N 39559 pay hundreds in claims V 39560 showing locations of property N 39561 had adjusters on streets V 39561 paying claims on spot V 39562 insures autos in area N 39568 is one of tragedy N 39571 made sandwiches of itself N 39575 was miles to south N 39575 was miles near Cruz V 39575 serving Bridge between Oakland N 39576 toppled mall in Cruz N 39576 knocked buildings in District N 39582 survey rows of buildings N 39585 lost everything in earthquake V 39588 is duke of Luxembourg N 39590 sell billion of bonds N 39590 sell billion in sale V 39600 give information about drugs N 39601 Called Patients in Know N 39603 include space for write N 39604 give brochures on use N 39604 give pharmacists for distribution V 39610 kept watch on market N 39611 buy securities on prospect V 39616 jumped point during hour V 39622 scale size of offering N 39623 slashed size of offering N 39625 sold portion of notes N 39628 required level of security N 39629 offer paper in market V 39630 place billion to billion N 39634 sell billion of notes N 39635 sell billion of bonds N 39636 is unit of Corp. N 39637 dubbed bonds by traders V 39638 had yield of % N 39639 gauge ramifications of earthquake N 39640 had impact on trading N 39643 sell portions of portfolios N 39644 foot amount of bill N 39646 issued yesterday by Corp. V 39646 cause deterioration for issuers V 39655 yield % to % N 39661 pushing yields for maturities N 39663 topped slate with sale V 39668 was impact from earthquake N 39670 have amount of loans N 39670 have amount in pools V 39671 require cushion on loans N 39678 fell 11 to 111 V 39679 be day for market V 39680 give address to community V 39682 expect changes in address V 39686 fell point to 99.90 V 39689 removed Honecker in effort V 39689 win confidence of citizens N 39690 ushers era of reform N 39691 led Germany for years V 39691 replaced Honecker with man V 39692 shares power with union V 39693 turn nation into democracy V 39694 has implications for both N 39695 raises hopes of Germans N 39695 alarms leaders in Moscow N 39698 hospitalized summer for ailment V 39698 been subject of speculation N 39699 supervised construction of Wall N 39701 built Germany into nation V 39704 took view of change N 39705 offer ties to Krenz V 39707 reflects change in relations N 39709 is champion in leadership V 39710 be sharing of power N 39712 was result of infighting N 39713 delay decisions about change N 39717 alter resistance to change N 39721 joining Politburo in 1983 V 39721 was successor to Honecker N 39724 visited China after massacre V 39725 defended response during visit V 39726 fears Krenz in part V 39726 ordered arrest of hundreds N 39726 sought refuge in Church N 39728 read mood in Germany N 39729 was one of leaders N 39731 using force against demonstrators N 39732 have image of man N 39733 have image of reformer N 39734 take steps toward reform N 39734 rebuild confidence among people N 39735 allied themselves with Honecker V 39735 loosen controls on media N 39735 establish dialogue with groups N 39740 is process of democratization N 39742 open discussions with Bonn N 39743 citing sources in Germany N 39750 heed calls for change N 39751 find solutions to problems N 39755 is creature of War N 39756 endanger statehood of Poland N 39759 be recipe for future N 39760 build economy into paradise V 39762 paying compliments to Gorbachev V 39762 rejecting necessity for adjustments N 39763 doing nothing about it V 39764 presenting speeches as summaries V 39764 giving space to opponents V 39766 abandoned devotion to unity N 39767 left room for debate N 39770 proclaims renewal of socialism N 39779 cleanse Germany of muck V 39780 envisioned utopia of socialism N 39781 left mark on society V 39782 typified generation of leaders N 39782 took cues from Moscow V 39783 recognize legitimacy of state N 39784 won measure of recognition N 39787 was matter of time N 39788 increased forecast for growth N 39788 increased forecast to % V 39789 projected growth for members N 39789 projected growth at % V 39792 Leading forecasts in 1989 V 39792 growing % at prices V 39796 opened plant in Chongju V 39797 manufacture types of coffee N 39799 had % of share N 39800 has share with coffee V 39802 told Vaezi of willingess V 39804 close base in Kong N 39806 use base for Army V 39809 negotiated pact in Moscow V 39810 requires approval by governments N 39815 are culmination of weeks N 39816 has interests in manufacturing N 39816 has interests in both V 39817 push prices on market N 39817 push prices in yesterday V 39818 stopped production of it N 39820 dismantled section of Wall N 39823 are guide to levels N 39854 indicted director of research N 39854 charging him with transportation V 39855 filed lawsuit against manager V 39860 denied allegations against him N 39862 assessing damage from earthquake N 39863 owns affiliate in Seattle N 39864 outstripped competition in coverage V 39864 broadcasting Series from Park V 39865 attribute performance to disaster V 39867 were complaints from affiliates N 39868 was case at News V 39872 including edition of Today N 39876 beat everyone in stretch V 39878 postponed games of Series N 39879 broadcast episodes of lineups N 39880 resume evening in Francisco V 39882 reported plunge in income N 39888 presages agreement with regulators N 39889 turning thrift to regulators V 39892 had drop in profit N 39892 had drop to million V 39893 totaled million in quarter V 39894 includes addition to reserves N 39895 foresee need for additions N 39897 included write-down on land N 39897 included reserve for losses N 39898 included write-down of inventories N 39900 included write-down of investments N 39902 replace Equitec as manager V 39904 include restructuring of centers N 39906 drain resources of Equitec N 39907 posted loss in quarter V 39910 raised dollars from investors V 39913 build stake for clients V 39914 give teeth to threat V 39916 holds stake in carrier V 39918 sell stake at price V 39918 cost him on average V 39920 represents % of assets N 39921 launch bid for carrier N 39922 is 80 as takeover V 39922 was anything in terms V 39924 abandoned role as investor N 39925 holds stakes in companies V 39926 runs billion for Partners N 39926 made name as trader V 39928 see irony in fact V 39932 has ace in hole N 39933 buying shares as part V 39934 be way for get N 39937 sold stake at profit V 39939 confers commissions on firms V 39940 get price for shares V 39942 including sale in August N 39943 was example of democracy N 39944 made filings in USAir N 39945 stir interest in stock N 39951 show losses for quarters V 39952 pummel stocks in coming V 39954 bought shares in days V 39955 bought stock as part V 39957 showing gains of % N 39958 regret incursion into game N 39960 making change in style N 39965 report loss for quarter V 39966 mark loss for Commodore V 39971 Reflecting concerns about outlook N 39973 setting stage for progress V 39977 support efforts in areas N 39983 set sights on events N 39986 rose 0.60 to 341.76 V 39986 rose 0.71 to 320.54 V 39986 gained 0.43 to 189.32 V 39989 dropped 6.40 to 1247.87 V 39989 lost % of value N 39991 cited anticipation as factors V 39992 knocked service throughout area V 39997 show instability over sessions V 39997 re-evaluate stance toward market N 39997 re-evaluate stance in light V ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_chunker_chun0100644 0000000 0000000 00000000156 14523004075 032751 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/chunker/chunker170custom.bin apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/chunker/chunker170custom.bin0100644 0000000 0000000 00000052253 14523004075 034223 0ustar00rootroot0000000 0000000 PK ªiJ.÷¬_‚R«  chunker.modelUT VðÁXµ÷ÁXux õ¤}w|E÷÷ÈM¹77¹é¡(M±Ä˜a„!¨!”©B¡$H.DìØì€( UTPi‘–ÀM£‹‚ŠJ±‹ Š]ßÝ™9gÎÌnžçóû¼þaؽ»SNýžsff=Mûæöx<ç°<ð_¤§YïK =Íòùÿ{_:”ÿ¿ß±þ}η÷¥ƒ{÷d=œã‰è’Ý¥u–ÇÛ©së¬ÖÙž¨lþ·uŽ'º£øGëŽ_6ü³u'O,¹hÝÙ§]¶¾ÜãëŠ7:{¢säE'ÕˆýV´ìÅúgdþÏŽð¬ÝGt¶üggk@Yüßá¦ÝG„ýhޏ#Œÿììñfw³þÕQÜèÈot²þÕÉi¿Ó Úcÿ¼ÜzÈþWgO„=.«ý.—w¶ˆáíØY¢NÈz#[ö#FÍotí‹GtáÃÈéd¿k]åˆÇDĬsì?vWÙ—w±~x³åSöûGkðì«Nâf'>ùN]Å•ý~³ûž'ú3OtŘœÅã'—{§Éîaó©dzy±Õ…hÐzË&ºßunžä˜dÁÐB1 «—Ü£lVÉøb¥>Ö°o,+ Í(º1䉣ɱå0ŸK“5%Ñc„H¢Y‰³G\a·_\^>sF1ÕOÙ€õTª‹àRþ.ÄË‘xq¶R¡#‘KpËÊ=‘Bä{RË,fÌðÄ(¾’›ss=ÉØUVòÐŒ™7†fÎ(š*˜Êgʇ2=}jQ©e}‚@ó¡½ ÄÐ<16yËK&–Z²fq.ÇöPУè¬•Ý¹Ý tS¯¦Ñ'3(ñZ¡ædeÙú9~|I¨¤¬Ô0‘ËluëØ(¯4BÞú¸Ñ’Jïµ;ÔÛ¢¬4*1 §%!O<ŸèÌéÓ§Î#±4M‹j»ñ A!‹}ÖEn®è)†KŒEXkN>eÂ2ÄSRÍÓ©ðM++ˆLõk⟊ÕJ´Hˆ‹"ÎUpÈ·LΫ|Ê«$7»m±7»ÇÔâ"nêM›h8H¦"§#°”¬hêÔr4\f ÅLÊ&é²,1<–î°ŠÖ¤¸Ôê-äqû>³Ô⊒X>Ü«Í %7'ÃN"&­¼ìR»+Kà‚Tr„oEY qsmËg‘í {—[­q7†Ý’•FL©¥c©î¿dŠ1ç -³– MMh^ÐI$]—¤*Å–*M¡Àº­Í]UQŠ&ˆ¹å¾Óˆ\AßÂ{ûÁLrǰ;áhC8ðxi­‘Rœœàù“\}Z%²´ä‰¡1Ç+Ô|(Ü 5¦Š;q×!å%‘‚‡<Ùg iÙkqxRQ9u<˜:æÙÖ€‰èóˆ/u ‘t¶PÐ×Qak‚&CìA„*ÊâªXÖ‡¤…DQè«cw:f«Íº‘Ì/ Ï(-’ˆ8HÅDX2%+ ·ÏB>µqZ´³Ñ«a ‚NxÌÁ„¥žÄ(èՂІ’‰WÉ K à’¢dbn‡*>ÂtÚ|€x!´s¸FäQ†È N…›¹Ÿ2©¸Ü¶Ü%¥7N9¾X ØòÍXOŠAÕ7,¬Ü4UÉÓ3YŒ‹FŒüáD´ÕË1\ïB%p,Bàd?èà[ª !z‰ˆh?'u›Dë h¥q…|‚‘PòÖ”¸®¶ó¶ÕW)12eJ\P& w³š+à@ómæÔ)“,èX.Ô Õ°&«M¬Qb·í· Ø¥r=f¬( MR4IDÂÄïæ(dé× D%š€4=­h²åZRà)|˜K¨=[ °ÀŽ‚W¿ÎÄ™@2^Oì@¸”/´s^šåþЦG£*L–͉È\¥’©©ÅŒ£åƒÝ2Š÷2›/ç‰H\š[ÑeÐi‰|ÔïÄjVèÕö21 «8’ü@ýH1¨âÃ-TCòN:ê+œ&Òz©LšGJÊC¶¸)Û%2ZÊ"PéB›hÄ|@ŠØ»W±Ið¼6ÐdM±UòŒx7•íÉ1‹úÍMk™"L]-XÅê<ŽÕåÅOü[‘0Kp‰P}‰%o”„4€%F™ár/S¤å*ÚA¤í7´Ì±í‡ŒÌ¹ª8Œ‘ŒÅ¼Ðlå*ÐwK³¯b‹" "ªÇ¬J¼0$ˆœfˆìD•-²0 ÍôDµ”¥nA9‰«–‘[ß+µ9…Òà1¤Ê‹š"îHFcñH¡&½|ÔéÅ­ pZˆƒãuËw&¹—½R(ð Ö£GÎé¡w‰!q|о‚Ñ>bÁѳÖÅ•Ýɶ•3Åœ–l¦±ô™=F̬årSˆÓAÔÚ¡Ü)Ò2ÿCsßIOQÓGƒmËij@# (LÝ5§.Êð›‹Ù*‹ÔäVÉOEV×R•)mŽ!‰3¶Nu2u(Z¹¦8%¾b*S%R< .ù{³4jßÃÚ¼­—ñ’j–- YÎ*&Ê”ñÑ ‘f ,Ivã›ô¬4Š €0†ÊfÜ4STªD©(Î^ÏõÀ(¨I€tú)\£ ðø—:V‚Æ#Q6 :f¢µ– \¯qƒ¤Â9Xå«É8B‘}¢™¯ KPä©Pe?Åzj…‚V¡4JL`º†‘ÈL¥`¤Í“s§™¨Ü<ý2Wà 3=«õÌù)’jÔŠÓ ^%a©è+Ãiu‡ò!ñv²«RjÙB4ؘ ‚X&`LÒ«+ŠV¶³SÈÐ:¢ ŽQ˜Aá\„*¥´14HǨÀö_I(4 á×j(>½R>‹Ó”Á¤öo©“Ü~Ñb®ÏP©§"K¶Çr„} š™%@ÒÌ· ¦$º¥‘E}h!P,5ʤ¦0ÂÞ’_%jÐòºB±âŒh’ÛÊ Ä¨É«(AÕ(\vPé©ä¦= OÕÖ#9«\~Í%ùh3>Z2Uõ'( ‰®I÷ƒáâ•d$¶ Mçd\b´‚¿D¾RÀv§FxV·zph«HÖRZºa„ôt=U?p‹@NÃ+“ŠZÇèÙ•tP1=ýŽ…–´CèˆBJŒâ”­¾ 4Ø‘y¢xHɘÙ!Uä"CdÿŒ¥~Xc‰ÛœÞR;¤´F«ÚAë|*¶JÿG…ZNW9‚{&£¡ü‡4GZŽqdµÓJo¤” Õb,7(ˆ EW\µ‚ƒ.ÃxßIÿX½¸šN&c”câ ¤|""Š®IŽ>pñ rIöB'%ù(˨mÆ›©Ô•Sì¥Ø@Ó©X¨G‡¦ :`ý%Í$¢\«e(ªqv&€äRÌ(6¤jb°’Ãòqæ»>ºB&XйH˜e˜I½övL’Lé( Ik0&Îp³1Dª0!$Z3)4M„k.1¾UK\ˆE«Ô™Ê[æÈÊ;¡ÇZÈ0G«eª‚á,ìD‚=/0õ44hîPiTÊU%béÝÓ·X +OÊÍk ÌT&¬L’ñ‘ z3Š‚Îrúò¾ÂïŒ\ÐEˆÑÊyÇjÍÉl¹“¨õ+¸’ü$¢×W*¨±áºÝß%9EZúE=Ž Šd?š`0£`ª–I™žW+ˆÐÊ!ˆ8*úb7_@‹·`{‚N@ïômtî•‚5xE#Z#À„š_[ÑHÒvÑ Ë™T?i;Óu¹,-‹Ð£Õz¿¾¬Ñ™ûKuê„à§^ÛV…iZaƒ˜ "QŠ šä1V|8«—Tu•&DƒdhGD…—f6xfÅuùÁQm]VÜ₟4vCCË@ój:˜õk⧤–X\¶t%T˜¦‘謣„YôQQ´ÊcnI‹KÅ8R/ÐÑL´ZÏ!B,¯|&¤j±>êÆã̺_ë ³¼²ê[Ö&VgŠeV>Í h"!\Y_A'ÕŒk{3.ë͸s ( ˆAJ½"¸'Zý 9…HÈ«yåvf!p1Ê'Ƈ̕¼q0,.2Ök¸LV†C®Jzó¡‹Ý6á›ÙY‘>„Œ ðæÚV íç±ô"èÐ3È**6ît2ZÔ#É òç‘HœNþÁ÷ÇEÊ- ü|ß\@…˜ XóŠ òÌñÞô(–ø¿ç…) ©ˆ)â‘Ô…šZ$ü#BX9µ$G4ÃÝœW–a"eÎÁ¢(ß­â•þº™J9ô†wsaÈ”ïæMYbä•£rz\zl ðÊ%p‚h……rÊ……8Q¯Ô•%AÙŽõÞrÜ$@+ê•™¿V;÷Ñ­8ÂÛP*ØÎG«[FpëfÏëÂ6Ë#„m‡¼‹t<*#¯qÅ„9AŽ€Û eúÉKRœ µdWHË3qíbM~FC7§ã™VÒ'øEWˆóí_c¸]Ž„¬n’{ç‰Pû•¬Ä(7~T1Žx( Û‰q…W‚ºá‚‹“ð¢úÖ³û¥-C 5Mã7T¾NÌÅ+Ód¨³–Jó6bn9¢ðI£ô¶2˰ÝK²Za´œLŸRRRÛåÔxÄ¢/ò”(xÓåÛ¶¦0£@·bçíª¿ŸT˵u°Ö¯ÂE“œbMäªísY¤F*/vgÜÇ“'¸LÐFRÓò *³þWËjZ±ŒÕ ß+BçÏÝIø*oE¬ö±#!Ó¬ŸÄê8û¦š”ßFƒ6Ø©ÈV‹aÄÔ%Ú¶WiARÌzˆ #0þ¼i€ (Î ‡Ï4¿@Ú›÷2I Ü}jOfÐ}ŸÖ,ÒlPW{WÑò;*%µá$A’{´ç`/šàP@Ÿ"]Ì Ü¢@ÒœlJà.…Ç y²í¢dðb¢àh·Oˆ"ÊÊ¡K¢f„ºì†FÜ—€|< i™»° ³·§¥R²ÙÔ°åÙΞh¥Kk®”ßIŸÔN Nt"é J;à1Ò!%¡1'¤œ´)TN @yk°p v¤”äà¿mVú§ùêA^3Ùv´"xªS2…¸Ç?ÂCvc+.šFRJ\­ƒT»D×iѬؙ¯‰¶˜,¸Ér„v^Ä·øˆJ›Ê§a;-£gOS{8C3¬´‘Nr‘áÁš›”x]K‘Û)ô|jˆÍK6Æ >K®–]hnŽR”xXeÓŸ¬,2‚(Íiû‘L,`¦=^—º8–8 Q»)ôºY,ú žÆ÷JõS:F2:‰ÈeY íL!\; ïóJ˜6h!Ö)†ßã‰U$Or’öõ©÷µßZÐQI·Gܯ2€Bé*!ô?¢ïh…jH¤#}ªú5“ÂK¹,ÔG ”_³Dp/Ù GCØË6ÏÊ0L€ˆo›Ó±Ù+]²øSÆioÊJàNãˆØq¼hjŽ\%©¥@ÙB/Œ:}4Ìu ¾Qq`ëæn.‹W4S»¨ —§b‡Z*ƒfìªc1$ù¥ïû Í2K-¯¦—*»Ds3…zð(²+Zð¨—Öc¦¶v”ø=×X) óH>ÚN‰óbäe.Z³‘a*ÜǦmù²ˆå‹V„Òf¨ãõt*´Eš‚$† )I§dù¹´²ý ÜuKÊQ'i]—ÊDiPëÁj,F9î×R2Qà85ïN–€eLÌVh¨AÛ s P2ã(4=zot¦ì‰”<ƒeR¦RLPIÁz*Ž£d±“/zÊZå—Í\ú,9câ|¨Ï“èžð½AˆTTò&‘š nM~ñ;4Žäõ€aiöRà–ö”p§S–¹ÕÒ ¾DÅ2?ñF¨›áòt†U“º‚ Øìh[x.pM%¤þ$[øjÉù - 0#—|IP—/¾MN×!RžSÈCËŠ˜+½qÉN#ÃDùTÎüEOÙìˆPN¢0…í£Þ0´K /º»1I4ˆEKJ³R±\Ü •`BF¢O ঻FE«æþ?#µ%S'xI+ PîRÔVqeŽ{t‘·|sÀ¨}%¸@XÍ1£‹Âã²V]¼_ËÌÓÛ6دå \6N!€T.VVk*"®áµ£š"SgˆÙ$!„hÎ:C26`¤oéP´côÀúa ÝœÜ5Õžš”c¿Ø Ã#èŽÛlíˆXÝb¹¬-©@ŽÚ"a‚í)55ñŽ;A#§dt0"ù…F>]Ó`-=Dá ÷DDK° 3ýšéÓÔÔ…»F>‚lX4Ã_iF“d àò¿œ ìØ…Å.ª¦–‰Â„uKª+“”àR¡³óÑ…ÄSð;ÔÀꋜÀ „ÔvdbZÝBÏSC’†¶ø©®¨H 4ý=“rk„–)¤Å—A釢9w>_eu¡Óê9T͈——ÉX(h¢ÅÛZ>\!àe'€BÓ$°í²¡Ä)ºÃ Ä_¦[4H-–¦)IaW¢UÉΙ7±U¥%mÍ>©%Ëqf,[v|•LeLy?‘†"rJÝâK:¦öBßc)„¦WŽ"¾£ydµ(ºÒqDúÆj©~n¹úÅ™É0}¹„\¶KkXiªHKJ+GIÓØ.)c õ°‘0ˆFˆÔ+«ªüæRìÁ¼“†Íƒc¥ &À´I­ð™¥ ¹‚½®¶çeMÃ.7úhžZ*|]&¹ÊÔ¹Á‰Ð‰VއVI°fN-§äœÆØ%ëd”§Iœ1v¤[Œ«EE™”[ ÛœÐ@¨L ö0Õ’Öà†”ø©Ó:™uÿ³VzÉk@U e„¨´uøhÊ_L¿Ä0>²–iF,±zŠ7î§Q‘Ôp²Wæu¨©ç¯hË…Uí&•B&Š¥´ä›VÉÔlœ-•#¾3kñj!ˆ\壥šÕÒ OJ# ¿–»¦éM4„€i™N3 “NéàRE i[¯LrhQ–-½‰šþJÀ¥-ˆ ‘=FÊ[[äErD*ꣃHsÚP6ÍŘy­–禢èÑbõG£ÐâÒc^A\+lIrÓ|í€]u´<¸¶ñŸºpÊEØ(GËÎB„ ªÁ°ÀGAÎ…PÑkáÂd,HÒÀK‹¤éq-3ÖFé î3ݨD×ßQ år³¯–”ÄtušwUÂ3V¯†¤7^¤§Ó3j ÄðÁͤ7"‡ùò8Û¾(%$dág%ÙgÓ˜ËhŒ™ÚR2-t£YH™D¥æS˜™Æ„ÜPóÿb‘©W‡IÀ).œrTÛt/|z ÑL?!a†Úa‘Iò;cŒ‚Gœ®¼R5UàDnqd´ÚjÁ h­С\‹Ó!Q!’4ê£JNënšá‘¢tïxòˆ0j´)Ej/l*kHH_ê¥å¨±2Þè¾ ]æ@b5Õâù5gª-AÑ 'æXÎs›„¹1‰DD…ÎÒ,ü u]D-~@Ÿ’>–„Ê5ÿA’Y"aá]‚S°áƒ:2³”àRuŽÕC• m“\A!ÉñP£L«‰"sé׃Ä$wN²ùZÄi=‚ä7É©8ƒ‡b_D‘ÈÐÏžÈ|(µ÷¶Ç;,€Z³fŸvÛø2´4Ê/mjJ\AZ”e“…±š ˆEŸŽà3É­'b“2y"QeMÆ yIÑ‹Ú ¨lbFBêëX9¤r$RÝ Ïð $Ìy¬F­ö‡gD©øŠzc„ÛzLa£iz®…ÕÂ`d„H=ù5¬“à²Ã+Ó¶ÂÙ†MÛNŸKÊ*NZê1ÖS$º­VŠÂµS‰n Æœë`ð; fa(‰Ûw&Ä]*æ:FZHdê r$¦Ï±HCk z±*`f‚ ­£-\HëkDetÛO# YÆc=Ót­ãÆÝi,@i‚¤òÆO&$lÐP1Å)Qˆ‰F€å’ÏG¿Eãõ¡± ² (r,¡û”ع6µfC•˨©c“îä°!Î܈¡ñEϯ;SèXkrùí¤jÚ_ÜÀ‚NÀ¯-(P¥âó½ZE«_œiFƒÎòšVJ·Œ‹&¦Ê‘k–Ú>LÙ0¡ÌÄô“Œ.µ7òH2áÀUÑ<å½Ëcc„‹ŽÁ/Ù† ¥–ýTÙCÇ·D”ŠGXEgoXâ2cHÝVÅZZŒ›"°¹±zšÔ¯5üÚfˆ sQ†<ìdˆ_ƒ¶>ZQñk0Ëå||{ƪT÷_â;G:S7anû/`•‚_ò>Z…ká:¢0._–1VB^†îÏ•æšÞéKVœáŸãX¸å£sÑ‹ÔÓC‚0AVçx’}äpiï•Õb2o©ÖÄ~\=áBG$^qÀüj9ÊÏœ”DG¢ð›®quà.¾¶*Øp8Kß{OôÆp”‹9`uqú(+Ø#<-ˆè2šFè-yšä&•.{P(¤0¦ N ޝ° F†Z yŒÒ(Ø– ã'W‰âp@är²ʱé‚Ç}B!¸ EškyPqr`¢›$ÒD(Š­›ÅQª5ºé 4…Ùk+­å±…bÙ‰–çêkQɯqÉ\¼&‡CôÀõ}ý1mD!D>*1 .lOp1Mô£Aýs´ÿµ9åìÿœ¤sÙxΕˆ@#äÐ$BäºsÄ1mèFi´$ƒË6Á(¡“NurR u INÒ›g.I'§¯çV¦F=VÒG O'*ŒO‹¶ÃÒý‘Dc 'R2e—qL© E¤ûZfÓÄiÀ°šVñD¯Å{›êx$ïÌOd«É·íj`~MAb5õäU'^_Ö­‹ÛJ«aZÌÒÇ«‘ˆ´Â T$ñ5Mªœ%E˜¡á}¤ÝöJ{¦cñF é:ÙtéêcuR7L“æœû.çR ¼p[ÍTˆKe©PªâèÔ^¡;´j­åk´î#$¶M²‚Vc0>ÀÒý‚ø Íê ê ßì¡P[ÀeNZÛ©U¦D*Ù•ï"|¡ÐÁ¯y#m=rbuŒ©-fU&Ð «\` ;bˆçq)\£Ë¡%*›Ç~Í xeOÉî¢n–ÍóEü«xì£ÁFÀbˆpëÛµ@±ñ5§š±Ö3•Š4à!Äï™U×ðP:íh„æ9ÍPhMˆǘáO@— ºrUáEzø ž åbVb¨CÔŽó3¶9 «ùVpM¼òo´Â»ú yœ™Ôsë¿÷uf"Ñ"ºÓ–Fó$@$hÛxó”8ç:ü3Ä·nñ]yˆ±‚¡Öqf°Ÿ¬OÚJr…{΀|H\ µxbëHôeÈ=ù*š@ÑΠͯ‡.^Wq€¤‹Ñ§¶~JàŸJ¼Dë@·Å[—B*é‚ üf3¦M4å“+?ìpŒ †P G?4'G¤ÚDŒÈ-ž Bö7áõddù2‰¬/û³©%Œ¨<Ƀ L†0Øb=A—]¨eÌñ±ÁÙ¤|Oý¦8 Î p‹ÕÍx¾€#üô/í3mù²¬d|af!S‡òhélú¹IMèóå‘}ª€ß=Í!»TÄUWx¤¸3S4X´ŠÚ”c‚ÅPè´Ò]èOGŽ?©ï^ðÇøî+I(œ\¼É7½ÈšHqÀc9Ï¥ˆE}Z¢B–îp"Z iŸŸeï¶1L÷`*@qÆzæ— O¿çbÞWO‘²/]CM.˰”äÀr°…ª.JÅ…æîÊ&H­óQI“±xæ= Ÿ€OñQ ­íŽ+…ô­"ƒ\Œ„]žë‚ÿEƒ ïjÑ´Ñ ÒÄ;”—|Þ“o4¤Þ.Qwü¢ -ÇKý>ýÖ[¡Qˆìò}UX!Š@Pvñ(~Óšà‰TC†Ì¢!àxD0Õ!«¦#‘ä‹W/É)¤Ð ’¡á7‹ò ´ª u\syÒú4§C1ÜZLÈp=éÄ/F¥Vš(ôÍAç .ãp:ÛH×p€ •·€á×hѼC¹ú¦ˆNÇx‡ ňÅGq&obˆÎÄ–E‹êè÷jPÊ~¥… Ô-«@  ¼AÝRÛèWnäf7nqS§›< ¹»k(] ™¯*tz#2*3tÝîÂXy­Y†(¤¾Ë9MÚ¦+êŠèö<‹apÉ×]ºÃy÷ƒ…̪³~æÅüZÀ`Ñ)}}Àêv„˜˜WÊñ%›Ö¯ƒ0S"·ÑYZðftiôÅ!â{d!ñ­êX™ƒƒ–øç– >ÁÆ+ÈwËÊ#E™¡âN"¸‹ãôko¨£×y×<ƒ'?ÒÁ‡G¿XÎs?âhvu´»øâ’:Ñ\[šîö²˜ñyðÏ`ɹd‘‘ÅáP$õbE#År;úår9l¯Ö˜vÝÔN0úÁŸÁ<©ª> /Pt@ovºVÑóç øyàª›ÔÆæl§ˆÈ*ÕxǃDä„›«¡àÇIå;Úw@Ô¼’eqJʈƒ1Å:$O¦ Û¹óÈ8äŒuÎ'l)Œ&†Œ"Þ¡A§ŒÄ©Ÿ…'±#tJuN3”£ó“Å…P>z‘L)Šs€s„§öqY ɃIeP¼U­*Of*R´‰.*A>–­>¦š„ èÃÉwµVJ𛊜28Ñe6äûÙâ“:j¬ñªe)à©Ñ”z›ªNI.6_ÁOÛˆÕÉ­}òV‘=@T”,»0“4NÐ& F ówÿúÂ(Ñc™p%è4òú§¥(¤6¦q”(<¿¯9“Xýé4'?aŸ ••§VŠÏ‚ZrCî%»ÌÜ¢xJ#^%BðÇ+éA¿Ö¡Ñ•’QÌ#@T= !½²>¡Bõ•À±úXc5yU-w±Õ~M$b5RŸt–£Žw¨t¢›tÅ¢Ûí5Ë©™gà z©žI_¡ö !†ÏŒŒÑ̪h‘©ˆ“Q!GáX >ZN6uhËÅq[BºÞŸ ã2BÚâ!—oÚfèµ¾}†(ÆÇÁó¯jã]»f f¤"2t{ ýh'ÙÇØ7£åtKBZÞ ’×òû¡…b ˆ3$Ámhoƒ£ÑÜ\1\µ+ÛѰ؊@Ú‚ïÒ´™¯ɼlCG|/~¼U™)ÉÇ$ƒˆp, Ýi¥«siW£«€Ü{Hܱvšl¸Ÿ-l‰ÊºQEõQ¤hçBHåV­}$—°6†¡K6è ¥/†=Í´&¦Ñ„p.ú®Ê+½¢V RH VÇW”…ü„P'(sÌŽwaó[[¨h߈ÑìŒiƒZ×.HO²ÐÁÁðom`ÊÞ¥ÑÛ`+‡Q‰qæ”U‰²v/ÍEÛ\dP·‚Ô@CCqrw÷¡A§”E+û0L¢^?‚CK噆ߡ¼Š7„µˆu&cu‰ÖÒñü$¥,¹¡ T$H ýó 1zúîT¥.A'h¡‡;8ŽlТ¥FË_|Ñ*qTµU"ö‰1äûœøyò ±ÙÑô.ŠÓH¶_#Zº«‡ôX 蘒Ù;¼M×­ðLÚš¼«€5 #É€>V‘ô² CL¨¿Hð6b±\0”F»—Ì@´R&}ý˜¬â˜‡n ÞG)gC ­d èÄ‹4H–•Ûã\rÚ¼Eö” %6F~ßN‘MÔqýNpiÊ¥"[o°aqOå Ð -Å¢Mµð §©Y¼«º¹ë\BªÌ2O{¡i'úÝY™u¬6š­Ì/ á.ÍeТ¥xÇ¥…b ­’¬®Íþë³Øž´üq¯ÝÊvÿðÑ›WüÓží‹ù2qÌü1ø·¡c«Ý3Þ|]]wºµòp` kH¸tü¿—Õ§~ÒezñzÖðôå§’×±ýGüøˆ7¯Ú¿u|è’·×ðÞž&vË}ÃjçÓ†ïs^Á÷a|ðÜîKÚ:ûߟ©vÆ^È®ÉÉêç™»¶ì%¼nH ží2÷C¶ûQÏ-›o¨aõŸïl=ó¶:õÞ[—mY6«ÿâ¼äû»Ÿ­ŽZV4Õ_šSÖ䊿U¿÷_ýÂå7³úmÇš…"±x®¾ÛgC¦w›Çê‡í,]ýëvEI¯¯?uaÖ/÷ªö_þþêËúypüp½§Ï†ÓnÙŒí€ÞÀ³¤ãæ s¼µL½wôÄuþ_["=á=äß¶w®j³l3Î úGúÊùÀóØ®œ?<·÷ÐK›"Žwaõ³› ß:Vñ é ôù÷޲|~ê2ú–WÖ"¡¤/<'ÛG:¼=µyJe Þ‡öAÎáÆ ü5çô9yÙ“ùúžŽ ¦8äèÜðÒñîÁ/¶â|a\pò-ér+ûAþ¶ûº¼Óó«÷%=ëN—=rÕÑ&J?àyymê/ÐôÆý¡Ëþê/(/ð¼”w¤“'êûûu½OELUt•í@¿0? êÈ…lÏ!÷`¯$=ªæýaöòtû%G~˜v ôÀ°[¨Wk»o¸áP´;8oþ¢=”ôA»#í?Ú™£õç^Ø~9¶óÃqƒ~Kzã}?Ù¶ßßÑÉù¡]—òZ_ûô­§>Œí¢žƒ=–tÃùzö¯¿zÉ“ÿöèƒz!çóD{ ÏI>š|F90ü(Œ õôH>‡r |ž.|ò_N>øåü€Ž@7SopíU?\¸›Õ¯K¿­æ¥T§=™8äÎkR¶)ù’ròkð Æ¿£|\üùô½g/PvÛô·@?Ù¼ÏãøAÿ`\Ǻ_›óÃíÊ®H:âø€>àwA®¡ùŸ:›xÇðshßQM\x pŽ¡· ž¡ïY:LÑž“×(¿€7Œ¿(ÿàg‚…ç`þø¯!‡ÈG £!¿`ðwg€üƒÞ¡ž€?:ÖvyìÉî‹rºÒ¸ƒM^˜æð_h÷AnAOažæ¼å8 Ô/°CÒŽ> »ýÈ÷Lÿò„øC>ôvàpÐ_i¿Ðn€~Hyzîúõþ!×ÎV~øòrô7ý«ÔGìämàÉ74©@ýrøixðèø1  ÈØqàðùÂÒ¼~ k}AþÌçÀ¯ñ Ò͘/ŒõÛhÆ¿ÿ‘knذe’kÐwÐSCnP ?x^ê=òSÚS÷âó / ßÿ‘ž€÷à=¡¾KþcœòózbêŒì©ä›iÁï˜öδ£ˆ“%]¡_à<Àƒœ_ƒyÝ \gâ,ä#úGwÛ¾Ã~F|câY3ŽÃ8ü9Ć¿3ñ*ú Óï@Üý@\"ñ ÎßÀ¨Ÿ †½Çù®X~}÷Å‹‘0?ŸÀÏ7âßñ Ìô»WÀøM`òߌ'ÊO^öhÊeÊŽ]øÈÂÇÖ8âĽ` Ü‹öü!èCVðÙQ×\„Ï#ÞƒxôØŒ[%¿¡}¤»lí°Ä/¦=@}5í8ÐÃÄa '¦ývíë3Û²/@na\ˆß {tA}3ãÓŽ¸ å\Ž«á¹Y—zîþEß´ë`g þ;âNxè÷aþò¾¿˜yð õÝÀ× Ÿ¦]3åí÷€ÿqøQ#Qÿís=‡>é ãA94ü>Òä`*&=äŒó =Dgè3´‡úiôgâÀ%ˆÛÀÞ“ý˜òŒt¾~„qA?†=À<†á/Qþ ~švÍÌ¡Ýy—ýàøŒ<ö+ï›~õİ#ø~ðÆ„EgSy /È—A¾ËÀa”úmÚQ•ŸÒÛÁùËk´ë0ƒž•ßö¿aæV{ñE§¢îúž½ÖññumZ±ºÄ›ÿø{«Üwbõ¯m?`µóž¥Ýñºpeê»sK>y–5ÜðÖš÷~ù«™µ,¯ v)Ûyí‡ûJ²Ç°­¼Óúö³¥¬öÙ£“–u\ÎvÎØ0?þëul×þYo½çg5£-èþô4V•žúÚ¨™ƒXõÜnÏ>ÜÀj:—eŸ¿ŒíünDÁò±ÙÎ×ã×õ½ðR¶mÚõž©O¬`µ¹{‚åí-¹üêï/¦Þ`Û“ï;Ýñü Ø®émçFG]Âvõiúje»á¬öÁ>™Ÿ.*eÛºµ¿ÿ-I¬nà±÷;žšÉ6^òf×?¿–ÕžûLâÜÞl‹¯Ç™üO³ªIŇï—ÁjÚŒlX»•Õœ›8{ÎãMXÕO—/õE>Ïvvf1 ½nd;[Ö}²=Ë1~óýʦ=5eñRVßaÎÆA‘»×»V¾r뚌jV½ñËÅËOœfáÓÏ­žÝã#¶ãdÄ9O oÁ¶ÖûÞœôò_¬6oöþEãf;FÍû«õß³š£jžÓ—…?~²÷Å£ßd»†öX7äÌb¶ëL³÷×–°ês†•?ô«Íî×ó‡WÎaµ½¾zj{/Mú™ã«y¨ö’îoß¶Ï8òqß³³]-Þ;jØûlW¯))jÚ²ðŽá½—ÍXɪ“ë†ëžà—êó¬ùíþvÍW\þ&ÛšûÆÄ3Íg5ë}üå ÇYxþw¹·Ïz…U¹ö­¿S_fÛV½Ÿ4¬’Õ¾}*óëK®dB廟Õ]9fþ‹ÿåOÝ¢CÞú¦?«^úú¾)Ífápr׌²³¬ú¬ú‘?²ê´ñ¾n7bÛžžt4¥ãlãÍ«7Ç?:€U¶üõÀ Åß±÷}sÁc}Ƴڧnýþþ;d[Ž´ÞÞtýb¶ù‹ûެȶ¾tÆO쮊žÅ·²èØîÒª¬Ï„>zÕˆ[’cëçnØ|¼ÿRV½©¾m‡…µlS‹'J¯zàípYë>3ÖÇ·`á‹â;û×öjâ…Ž .g5GóÞèRdªßyð—ì,|lÓkzÝÖè8{þ‰¡wµÛœü)Ûy~C×kŠ2Ù¦g6¶z÷í7Ùæ¯Ÿ0àºél×[Cý-Nå±MW¥3ô¦ïÙŽé£&¿añÿöÊ®EMÿaU%‘ß}½þ¥Fï76߯ú­.ióäÆˆõág.zð«O§Z÷ß8Ýt…§yøÁìWvôX{åÿ÷ïÛ[<úðÍ5lcÔ»OþùbføÅæÝÒvPxáµ/¤&n~±ðº)Óž8ɦ”5íýî÷²m·Oøàº¶Â;~í×õ¹mÃËÎŽ>§uû}áê¯æïo:ãg¶æ‹ž¿¶¬ïΪö‚þÓO³q½FoÔÐ"\ÓýÀ°®M¾ ×^ÞªýUçN Nê´ã–¿g²{æö=5þ§äð[U+Wf<ýzxÍõZŒ·'+ù(~ú¢qóØÖ¯Î.ŽÍdáWŸÝß>ò¯{mS›ÎçýY~¬Õ?í×u˜À¶ú«&ÕŸ^¹uæƒÓ®¾'¼zÕ?WŒìºŸmîúmæ}S>o}÷¬sîÊÖ,-\s£g{üéûÚÞ{Çdöpÿcz~4‘m ¾ùóí_`sWTÆWEZôØÞæúò»ÃO5o¹qͺVá§ìuç“é©lõÏËËŸ˜Þ÷¯Rrn6«þ}ÑùßFœ¯úêô§g~Ížì^òÆ• &±åûÉ•áw’/a—Ì®f5{&O¶ì öÂ-¿v>ïÔ]áÃwÉïòTø­["ï=²°]¸nô5ë{^>m›tsÆæìÔðCƒo½µ­ÿ{<³¬Ë'ž*¶áÖm¯z'üJþu>šÖ‡½øÍØp¿ãýXeÄ ØÌßÿ o:úÞUþ¿b•éKšþsYˆ½ZY¼{ä‘ì…Íç߻崇m¬Úp¨æþØæÑ³S"º¬c›¦õzc{V‰e—>;3sÖaöxòEÝݓݓqøóïÝÀ^ü{ߊƒeGXe×Û¯³ÍSlãÿñŸÇ«Ã÷ íiѼAá5—wù×ã’Ùò?öŸøÑL¶áÅ&½yîelÛÇ7}×îþálí«wýÐæç·Øº?/ =~ÛKlë}á~¶”³- OþgVåôðÊÛž»`øE¬ºÇõ5W7|Âúþ”4:çÇh¶¢¤Ã3Wv}€mº8oò’/³Õ#þ5w݉$VxfA\`Uk¶(£Ï²›¶Ïc5ƒ½¬äËvSÓƒ­Yæe;Kó>>ôð-lÕĺ·Ö>ùCxÆïŸÜöþ‘eìáÔa/o,ÚÆj6dß_±™Ý·ýæ=»Ç g›^ìöÅQØŽšƒ]Ó>þšU^ôôØ)?°Í·]¼dÕ–ž,Ü;ÿÆÓ_&±ê{úì.7¶Ñû¯¾vôõO aÕsfìÙæy”UeÖä>T²‹í¶ñ±’gÙö7% ëÓÀ6ç9}së³>¿öäðŒQKf±%»Þ6£¾ÕLøC^Æaöè²ÖÿIËcÜ0÷úæíXÕøU âúv /ß•|tSÓÕ,<øž›Ž]Ü"üüî{Þ]2ã[¶kÞ©éwüø3{骎C.yd 'þñáG¯ž¾ãPÿï§,»¼0*.{„…ÿ|êçÒo±WVŸö]º‚í·qÍÁ‹Ç±õùI¥×ŸÝÁ&_4ã­ï}Àj¾{¢òÌò+ؼ_δ¨¹çîÆî7Ú~#ãa•‰k«[mèÏ*Xpfð×{XUô=›ºmþÍò¿my\Ûé]°þíÓá­óO}xJvÏàS,9N9<·ãϬ*mÂãgùý5ÝCÓŸïX÷ehäú8¶é½g&U'd‡—ÇT óîzÕ¼ºüã7î=ÕmsüÒ’ûÙÎ>­÷ý™‘Âê6ÝÚòå3Ù–ì[Îéó6ÛÖÿ×w>~öV6§Ç_[Ï{è«ñOÊÊ/JY͈ß6œØÅªÎŒøÍñ$¶­òíWOvØÄjÓžèâO?ËjÖ¦îô̬nη›÷Õ±‰Cî›ýÇù÷±Úú»nKjÞ‹m~·øÔ3÷Nbu“¯êõÂÎ"öôТêµÛ¿›×[N–.-y¿?«¿ìØÊÉËØ¶hß;wŽÜËêïžôûOÿŸÛ3¯·©¯Ÿ}v «oö防÷ÿÏãý¿ö¿1uç?…QW²†{\5æß_°G²¦ÿgÒþÙ®ìù¿÷{ª«é×´gúmlóeýïÎП5$Æí]·2ƒUUŒ.yhUŽ…W½7°f+«-ö?pð¡-9ø«üÍ~GØkuOÖå¿_Íê®ù'ò£k›:®ëþúr“®I¬æ–µ™3žªûßÏϾ¼xü5ئõÃ>]5ŒÕÞÿXûÙ·±škgUeÓãÛuòíó“_°æ?ä¦noÏv¼Ôìž§¾¼›ÕT¾ŠŸy.{íE%dÛRʧ&vm¶ˆoýè‘ElÓΕ¯Ýí}‰íìúícÇf;þ3¤&£¼Û–óp«¿èĶVß¼õçÝluî¬Àún†—®Š<8pÛñö·{~ûö¶õ¼+Û¾hû_ïÅvyîYôd‹>«Þßaÿˬö³¢#F³]/%<Üjt2«Úîàó’ØŽÞ_‡wõ|àÿü|Ý—Ñ#Ž]=›m²Øúõ½Û×f{ÿëzÇé_{§C;V¿bö¼AKY§ÉÎÇ®±šø•_Tͺ“ÕÌý}즹ﰚæSþýÝkÍþçóußtÛ˜ølVÿ‹?sÈ/ß³†Á éÏÅvüåŠ[n‰÷áz÷Üy_¬\jÅåç³»šõø‰ín·7õýeϰ=ùç_?É·•5Tݳy5«ÿõ®¾ß Œï5|ßþ©Ó±½ú/»xÊYƒ×óá±³GXÃÁySëÆŽd»£ß¶þ¬í½øŸSk§ž“í6­öÙ†ã¬>+óLÍ»¬þªºKÿêYÁŽ,ùuÌ<|¾þÞ7:Ýók¸¹ëóÇNRíÜ}¸¸-γ!7ãúž…w°Ý›÷ŒÜÓvkxäÊá…KÿVó‡÷²cR®°âÚÞá囯§±†G'l:èc #¦s²¢Ç‹íÈûHß-íߘ:!Ç t<ðÒ»·n.Vt[P¿uÌ3Š.²ß†qçLÚ”ZÂêç\üêª_e óç¼°íý‰8¤ÌKòé(éã—üÀyÂø$]ëžL]5ù·8x¯~ÄžUÏ=„|¯ûê»¶÷Õ(ù‘|€~Íþa\H‡îxzà üŸ—ý€\Àx. oõ_z±KÞíH7x¿a\Õ}×^4 é„|„ëÏ —.¹h k¸"pâžæ×a»{é·eÝçWãü‘¯R.Mú¡\Êv‘Nr~0.“?@ï†ÐœßÇ&`0ŽÆÞ:Ãüa¼¨_Ð.Œoƒ§¶áöùª]Ð?Ioäçìî=Fc»0߆®SN¼ûQ?5 #´üy”úfê3òôMÊ\ƒÜ൤+èèêü•Ï›tßÑnÁ|@/ÞÐÎȯï±åôè[¿å—{ +}…ñ´RxúGœÏî” çÏ:®ìŒœÒì'è©ü ã©1sTËÉC•œHùÆþ`¾ O@wàƒ|õìˆü ý£×h‡¾hèPÙäqõ;Ðø9ïÄâ5‡>uêÈÈñÇ*¦ïvÌý«oôïÞTü?$ù€rkø  3ö/õÇ/å ø…ö^Ò ú7ýö~Úy5ü5â‰9y1kŸ˜Ìnù`lN]!ÒÃÔdžÞU XÄ×Ê€œß%}÷¬9ùÅ€ª ×€ý;ôy}{ý÷_¤äÆhÆr‰òz–6êƒh%¯rž@”[°»à_÷Àü@n †xþ‚Ý?$í‘CþÁ/ÀóÀC°×RN‘0>àŸ|ù ãÿô}4p ú©o(§†\šô…þð=°W&=à/ØA C÷O†õj•­ì¯1ôO€’8–ñ[„²ï&Nýcø/è Ø]Ó‚ü?ýA§OWtÊSväÆoú{°ïÀ?°#¦¿>Èç°}Ùʳœ·‰K`^ðýðѰ&n@ûöþÂ<Àï]>K<‡ã}•ôE{)ù‰t2pi÷?¹÷¯EO(y=vÈÄ©¨/ ×=îÞßñÍgÕûL¿ƒvUö ¸ã “ymðqØq è¯¯™¸yOö%c[—SxNÊ‹Â=’/ à/Ž€ÛÁ8í¶uÿóå™ý~ äâ à§Ñ.ÊÁƒº¶:6JÍpȃ´Çh?פ­zlòGÜíb;`G¤6ãôk†ßÇq]üG‡mŸ9ýžÄ…€ƒ ?#¸oâkÓÿ }@À.‚’ýâ}ÐSCï‘^ŽGzHú |J¼…ó2ë±V«½À‚??ôz›vøvâa÷¶­Îyw›å·“¾êð~C_%—òù"q)Úù>ŒãKÐÿþ1Ãøú(ê³éwP‡Ã¸Œ| ú;ßGÇ® ¦¯qØ?ôFÜצÂøp°¤ÎOÎcOç«;.?µÆ¡·÷ƒ<^;÷A¯o|sÜí-&°=˼CŸœü½òç ¿Ñ¿JûŒó»dØYÀ5fžù8ÍÐKÔhì‘‘OByú¦ç¯ä ìµ!÷}0òWÈ'°«`ßA¯å5ð퇴/€—‘G2æ‡|3óY2îlh÷d…o–²`A¯á¯ÔŒ[@ „öV¶‹öèøÛÈó!?@ ¿kâœ7致‹&GÜkèÑÞ‘§šxÙJ> ÿ×pñw)==½n‚猼ôgæÌø õÁˆ?ñ¾™Çy4ðrî’ä†É©÷ÍüÑ¿[t˜µîf…w$Ý`?¥¿À¼Ø#_gâ0Œ× .3q¦ò8ðäûŒ|Œ‰Ç1žû%õŸ3ý¬‘Ÿ@>J»ƒã’y¤à?#/fƨ¿àŽßã_ßš¸í?àj‰ p¼åQŸÏ¹âŸáélße×Þ;ò35®½ó.ÜûÞן©yA¼aàxð (¿RnM\nò Ú«|½gbô•'Y}ŸŸ«ù¶³í›§¼¾kuV±tyÒ SX·GÇC+ú²Ú®×_ùãGgXMrâ…¯ýëN¶£W櫟^Û–Õ\µfÅeW?̶œËÞºäµlkÏsZ8§”ÕOx¢×æŠñŽëê‹9÷Ž»YͰßüg»ObÛÞtxñxË^¼6Ô³Ü?œU·Z=ÿÔ/KYøJÏðº?ïf5ßÍxöÀo¥¬êÊs>þþ¦ýŽçÍñmÎ}ö‚ά6ë÷Å)ƒ/q̯¶ÇÌý{.a[šÌb-#+XuÇ}¿ù¢˜U=Úýós¾rŒwEë)ßÜ7¤ÛÓtÚ˜ì²ó­ÙýÂáªÛ¿gu½~ŸvÛ¿g8Ú¯½÷íždOùæŽï^fuŸÔn}Üuáu¡‹êßL¸€íxbúså! ßuûâçnd5ÿ™ÁÂSþÃ6ÝðaúÓ)ÙŽù˜ýÕGD­ÎÌ~ŽíZ›°²Y»?YMõ©gÿìÙ†mÛóÕ%õ}‡Õ¬TÕ¼ûó¬ÚŸöøÉ[Ž;ækÎÏlÏïæá¥ínnØÎ÷X“ª;–°×RÏNùf[¿yÒ¼6wmù_¿‡ŸÈ^µÿXÉÝlsÖ ó®JœË6í;ày7±ªÂ35‹¾ü_¿³MëÎø¾¹ä¶ýä%?>¿ÛÞ+ôÀ€®²C‚?t{£)«‹îzÿ³5ﱆ¨·/ßo1«»zü•é«~cU ?~íÅ%¬æûØëæd岪ŸÏ_˜ûe5k8½ÿï÷¬eu“¯{2¿ÞǪ{½ÚéxÚˆÿù¼ù{]Ӣ˳‹þÃ6/þñ¥É㺳šÎbû ÿ’íxqÎE'º¬aá?~ŸyúCV™è£ölËö³pÛ{lñ ?°m׎­izE4ÛÞ#xòÝ6 Ùk¡g»½Ýr«={Ö€¡Ñl[Ʀ&[¯nƶßPÿkþZVótî½_ÏÛÊj3Òîz0òÛÒë’דÇv<~ÿÆÜ‚«þhù‰À;Žë]ií®^ÝŠÕ¬ü}ñüÝYÕ¶‘%}¶g±º¸Qµˆ{ÉÑþžÛö¿÷Æ­–Ê-Ìì¾ü%¼Þã×9 ÔïóŽßÛÂÏöM¼0°~éOx ¿ïÝ\ÿ÷œ¾·o|ß2–ÜŒw—°}ÀÀRìgïϧ6=³pz>!ú£S]‡`{Ð܇öá>¾ÏË~à>ô‡ã€÷`œF?pÇײxþàe+¿\¾Ç ýÁ}œ¯lÆ¿Ï÷ÜW+Ú–áµù¼ÉxúAúIºïíä9ñû¯N:â¼ º™í7F?ìÇ ´ƒó7ÞCzt4Ûƒ÷qž OFŽ÷A>Mù’tB>ÜÏ™í™|sðøö¿øg\7FgÇø¡ûÞÑ/¬~ìÇãÞ¿¸ø=OyWÇ}SÍqã}Cð9yã1Þ3û1õømÎÓ¤ëžS¯œˆÏªvꟗù¼Ù¯CŸï†žÁûf;&]ÐnI=2íž©çæ}ÓN˜ó~9ì«1Ó~â8±›8ÏóÛOÿ84ÛIg£=“þ¦Þ5ÖÙŸ©?H/SŽ¥}rÌÏà‹Éwsæ_Óþ:üÂù‹+¯]û—êï¾5S7[§èoØE‡œ›òrbØ5ìì–¤‹9®Æøê°çòýõÓI]½¾/ÛýÞ†už…ž];ÚwþK׳šõ#ÇþQw¿…w?~¤s&kxþÐýüÉùûK-'7Ûeá…U9ß…{ßãx¾á‚6-idU{F­ûìÄÛlÃÛ-Îí3}. Ÿ|£ÃÊà ÙöKºìŽ˜~ «Y×li7 çî?²7rP¶ó÷ö­?7ŽÕÿÞþŸ“wÜÄjjÿŒLìÙÕ|6¾óç-;±šŸ·8PÕ“Õ\Ÿ´á›M/³ï¿9ô`»¬jËÊWŽ~ЄízæMöéß5zoQ¯&7$³½íŠz9¥¯÷¥œóé~¶wÓ°ôcÃ*Ø÷úÞùãkmÙV]n\jáx®á/¼÷týÕU]lTUnk›Ô@)bÐjZ* ŠMðPÅ¶Æø€X0ü¤@%E’€‰&šíH¤hM QSCåo±Ò`h´MËÏî]º÷¶ËO +PcƒŠEâj”¡ óÍM¾“›Uß|šœ{f¾ùæ›9s_l;–“Òxà)¾àxÑðC›öûøÈ‹óìºö¦‹ùVøyß Æ/[ù•'òËÙmÍ« Õ«í{®kæóCЧgè#g+¯ðÖºbg+®¼³âÖü=÷Q2o¬…=ø;óQ¾â‡8¯cIá· L_Kå…m/ùú¢Çu±.ðC¼öKð­zÁW¬ÎÍêgXå]iÞTºW|©›ç¸ýá9yB>ÕæYõ&Xgž/æÍs¤}•9á¼êOï…ûÍ÷üû¾Ü÷tïFu\>)·xÉU?ÏÍ¡µOdÏèð>à <Õ÷é«÷´w‚ö—Å“çœê=Ò¼zgÆ¡»Í‘ÆK™G­&R1ûfɤ ¦'³åpëÊr3Ó¶ž>^eœ®/¾ûñ±¬ûèüË#«ö>`œ‡"{’sFŒóÈ}µ©¦"ã,žÞ²së릻2yå·OÞ2±ëÛwü6Nöæ_ß³Ý8׌ï¯[øÏþNùȬÂp¾‰–¦²OT¯±ÎÞŽKtŸ¿h š’¥5&~ ïž]ÇÖ™î‘Ðü¡¨qëú§-¸îÛŸëâ×’k}+ß{ý´1T²0ØŸ¿Ó½wª¾Úí_dܧËOÇÖ4ظø”ßÉ÷Œ‡¼|oå\+Ï¿ÔÃÂçx®¬êDg‹/ëÌúØÿŠ—®ž@¼ >|0?ÿXçï ^|ŸfÎÒáiÓõ‰êq6¹½ò•÷Mää穚Ôãœ(-yÂDçeÏ[ûÁUã”5ÏÝ癞DCmy¨Ó:÷m‰ðm»µÏSãîÏ8oz3N††«÷êÙ“STðûv“/zïëe­jã9gÖ­Ø7Ñ÷Ë}»¬½û¦Æ{çÞØ²lÛ“¾ÿ†¬Ú;–†õìu%V.N½`â_}šéÞ5ª÷š_l|óÔÖª2×Ç>¯gá…ºßí¼÷LUó.ã æïp5|Ýíg{Ÿ™ªqÀѼR'â”'ó'=ÝÂÝ}3ÝWß=:¥yÏÀ å ë>>.s÷ê”…>ˆW>¯½üàä_|žR÷GóAXñC_T·o>Ì*Îí0^ÑÜÈøÎ,åÏ|Ç}Wþ<×8[s+¸º o@]Ö%^º7°·ÐgìÞÓÀÇ{9á9ã÷ÔOž~¯A~àÅï‚óh~á¥{Žö/ÿ/ø¿cí/úOp߬~`OcŸ@×€ÿ”öÞМ±?ï9®ï±giýð_ý_šžg×öÔýÖ9‘×1xpø¶ÿ«ýPK®iJNü7ÇÓ manifest.propertiesUT Å÷ÁXÇ÷ÁXux õMËjÃ0D÷ú AÖ6’_²Ú$MVqZZÓýÅ\٢ѕí€ûõ5u]ÎÌØ¡ÞBä¢á™<Êê˜åüôÞñLHź–, Éå‰40:—È d LÙÕHļ,«Z¥úšµ@Öà4'Ÿ'ëIËT°аÀ€‰ègWí=B:{ÿ˜Ò~\è cú²8·ž÷pÝIöº‘÷ÛÛ?£Úœ'÷a¿QKÁ:ë¶JpAË¢n¤(š:…`gï‚§m{r‡úÏÛ^ög»5 þ=Ç~PK ªiJ.÷¬_‚R«  ¤chunker.modelUTVðÁXux õPK®iJNü7ÇÓ ¤ÉRmanifest.propertiesUTÅ÷ÁXux õPK¬éS./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_chunker_chun0100644 0000000 0000000 00000000157 14523004075 032752 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/chunker/chunker170default.bin apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/chunker/chunker170default.bi0100644 0000000 0000000 00000052247 14523004075 034162 0ustar00rootroot0000000 0000000 PK ªiJ.÷¬_‚R«  chunker.modelUT VðÁX©õÁXux õ¤}w|E÷÷ÈM¹77¹é¡(M±Ä˜a„!¨!”©B¡$H.DìØì€( UTPi‘–ÀM£‹‚ŠJ±‹ Š]ßÝ™9gÎÌnžçóû¼þaؽ»SNýžsff=Mûæöx<ç°<ð_¤§YïK =Íòùÿ{_:”ÿ¿ß±þ}η÷¥ƒ{÷d=œã‰è’Ý¥u–ÇÛ©së¬ÖÙž¨lþ·uŽ'º£øGëŽ_6ü³u'O,¹hÝÙ§]¶¾ÜãëŠ7:{¢säE'ÕˆýV´ìÅúgdþÏŽð¬ÝGt¶üggk@Yüßá¦ÝG„ýhޏ#Œÿììñfw³þÕQÜèÈot²þÕÉi¿Ó Úcÿ¼ÜzÈþWgO„=.«ý.—w¶ˆáíØY¢NÈz#[ö#FÍotí‹GtáÃÈéd¿k]åˆÇDĬsì?vWÙ—w±~x³åSöûGkðì«Nâf'>ùN]Å•ý~³ûž'ú3OtŘœÅã'—{§Éîaó©dzy±Õ…hÐzË&ºßunžä˜dÁÐB1 «—Ü£lVÉøb¥>Ö°o,+ Í(º1䉣ɱå0ŸK“5%Ñc„H¢Y‰³G\a·_\^>sF1ÕOÙ€õTª‹àRþ.ÄË‘xq¶R¡#‘KpËÊ=‘Bä{RË,fÌðÄ(¾’›ss=ÉØUVòÐŒ™7†fÎ(š*˜Êgʇ2=}jQ©e}‚@ó¡½ ÄÐ<16yËK&–Z²fq.ÇöPУè¬•Ý¹Ý tS¯¦Ñ'3(ñZ¡ædeÙú9~|I¨¤¬Ô0‘ËluëØ(¯4BÞú¸Ñ’Jïµ;ÔÛ¢¬4*1 §%!O<ŸèÌéÓ§Î#±4M‹j»ñ A!‹}ÖEn®è)†KŒEXkN>eÂ2ÄSRÍÓ©ðM++ˆLõk⟊ÕJ´Hˆ‹"ÎUpÈ·LΫ|Ê«$7»m±7»ÇÔâ"nêM›h8H¦"§#°”¬hêÔr4\f ÅLÊ&é²,1<–î°ŠÖ¤¸Ôê-äqû>³Ô⊒X>Ü«Í %7'ÃN"&­¼ìR»+Kà‚Tr„oEY qsmËg‘í {—[­q7†Ý’•FL©¥c©î¿dŠ1ç -³– MMh^ÐI$]—¤*Å–*M¡Àº­Í]UQŠ&ˆ¹å¾Óˆ\AßÂ{ûÁLrǰ;áhC8ðxi­‘Rœœàù“\}Z%²´ä‰¡1Ç+Ô|(Ü 5¦Š;q×!å%‘‚‡<Ùg iÙkqxRQ9u<˜:æÙÖ€‰èóˆ/u ‘t¶PÐ×Qak‚&CìA„*ÊâªXÖ‡¤…DQè«cw:f«Íº‘Ì/ Ï(-’ˆ8HÅDX2%+ ·ÏB>µqZ´³Ñ«a ‚NxÌÁ„¥žÄ(èՂІ’‰WÉ K à’¢dbn‡*>ÂtÚ|€x!´s¸FäQ†È N…›¹Ÿ2©¸Ü¶Ü%¥7N9¾X ØòÍXOŠAÕ7,¬Ü4UÉÓ3YŒ‹FŒüáD´ÕË1\ïB%p,Bàd?èà[ª !z‰ˆh?'u›Dë h¥q…|‚‘PòÖ”¸®¶ó¶ÕW)12eJ\P& w³š+à@ómæÔ)“,èX.Ô Õ°&«M¬Qb·í· Ø¥r=f¬( MR4IDÂÄïæ(dé× D%š€4=­h²åZRà)|˜K¨=[ °ÀŽ‚W¿ÎÄ™@2^Oì@¸”/´s^šåþЦG£*L–͉È\¥’©©ÅŒ£åƒÝ2Š÷2›/ç‰H\š[ÑeÐi‰|ÔïÄjVèÕö21 «8’ü@ýH1¨âÃ-TCòN:ê+œ&Òz©LšGJÊC¶¸)Û%2ZÊ"PéB›hÄ|@ŠØ»W±Ið¼6ÐdM±UòŒx7•íÉ1‹úÍMk™"L]-XÅê<ŽÕåÅOü[‘0Kp‰P}‰%o”„4€%F™ár/S¤å*ÚA¤í7´Ì±í‡ŒÌ¹ª8Œ‘ŒÅ¼Ðlå*ÐwK³¯b‹" "ªÇ¬J¼0$ˆœfˆìD•-²0 ÍôDµ”¥nA9‰«–‘[ß+µ9…Òà1¤Ê‹š"îHFcñH¡&½|ÔéÅ­ pZˆƒãuËw&¹—½R(ð Ö£GÎé¡w‰!q|о‚Ñ>bÁѳÖÅ•Ýɶ•3Åœ–l¦±ô™=F̬årSˆÓAÔÚ¡Ü)Ò2ÿCsßIOQÓGƒmËij@# (LÝ5§.Êð›‹Ù*‹ÔäVÉOEV×R•)mŽ!‰3¶Nu2u(Z¹¦8%¾b*S%R< .ù{³4jßÃÚ¼­—ñ’j–- YÎ*&Ê”ñÑ ‘f ,Ivã›ô¬4Š €0†ÊfÜ4STªD©(Î^ÏõÀ(¨I€tú)\£ ðø—:V‚Æ#Q6 :f¢µ– \¯qƒ¤Â9Xå«É8B‘}¢™¯ KPä©Pe?Åzj…‚V¡4JL`º†‘ÈL¥`¤Í“s§™¨Ü<ý2Wà 3=«õÌù)’jÔŠÓ ^%a©è+Ãiu‡ò!ñv²«RjÙB4ؘ ‚X&`LÒ«+ŠV¶³SÈÐ:¢ ŽQ˜Aá\„*¥´14HǨÀö_I(4 á×j(>½R>‹Ó”Á¤öo©“Ü~Ñb®ÏP©§"K¶Çr„} š™%@ÒÌ· ¦$º¥‘E}h!P,5ʤ¦0ÂÞ’_%jÐòºB±âŒh’ÛÊ Ä¨É«(AÕ(\vPé©ä¦= OÕÖ#9«\~Í%ùh3>Z2Uõ'( ‰®I÷ƒáâ•d$¶ Mçd\b´‚¿D¾RÀv§FxV·zph«HÖRZºa„ôt=U?p‹@NÃ+“ŠZÇèÙ•tP1=ýŽ…–´CèˆBJŒâ”­¾ 4Ø‘y¢xHɘÙ!Uä"CdÿŒ¥~Xc‰ÛœÞR;¤´F«ÚAë|*¶JÿG…ZNW9‚{&£¡ü‡4GZŽqdµÓJo¤” Õb,7(ˆ EW\µ‚ƒ.ÃxßIÿX½¸šN&c”câ ¤|""Š®IŽ>pñ rIöB'%ù(˨mÆ›©Ô•Sì¥Ø@Ó©X¨G‡¦ :`ý%Í$¢\«e(ªqv&€äRÌ(6¤jb°’Ãòqæ»>ºB&XйH˜e˜I½övL’Lé( Ik0&Îp³1Dª0!$Z3)4M„k.1¾UK\ˆE«Ô™Ê[æÈÊ;¡ÇZÈ0G«eª‚á,ìD‚=/0õ44hîPiTÊU%béÝÓ·X +OÊÍk ÌT&¬L’ñ‘ z3Š‚Îrúò¾ÂïŒ\ÐEˆÑÊyÇjÍÉl¹“¨õ+¸’ü$¢×W*¨±áºÝß%9EZúE=Ž Šd?š`0£`ª–I™žW+ˆÐÊ!ˆ8*úb7_@‹·`{‚N@ïômtî•‚5xE#Z#À„š_[ÑHÒvÑ Ë™T?i;Óu¹,-‹Ð£Õz¿¾¬Ñ™ûKuê„à§^ÛV…iZaƒ˜ "QŠ šä1V|8«—Tu•&DƒdhGD…—f6xfÅuùÁQm]VÜ₟4vCCË@ój:˜õk⧤–X\¶t%T˜¦‘謣„YôQQ´ÊcnI‹KÅ8R/ÐÑL´ZÏ!B,¯|&¤j±>êÆã̺_ë ³¼²ê[Ö&VgŠeV>Í h"!\Y_A'ÕŒk{3.ë͸s ( ˆAJ½"¸'Zý 9…HÈ«yåvf!p1Ê'Ƈ̕¼q0,.2Ök¸LV†C®Jzó¡‹Ý6á›ÙY‘>„Œ ðæÚV íç±ô"èÐ3È**6ît2ZÔ#É òç‘HœNþÁ÷ÇEÊ- ü|ß\@…˜ XóŠ òÌñÞô(–ø¿ç…) ©ˆ)â‘Ô…šZ$ü#BX9µ$G4ÃÝœW–a"eÎÁ¢(ß­â•þº™J9ô†wsaÈ”ïæMYbä•£rz\zl ðÊ%p‚h……rÊ……8Q¯Ô•%AÙŽõÞrÜ$@+ê•™¿V;÷Ñ­8ÂÛP*ØÎG«[FpëfÏëÂ6Ë#„m‡¼‹t<*#¯qÅ„9AŽ€Û eúÉKRœ µdWHË3qíbM~FC7§ã™VÒ'øEWˆóí_c¸]Ž„¬n’{ç‰Pû•¬Ä(7~T1Žx( Û‰q…W‚ºá‚‹“ð¢úÖ³û¥-C 5Mã7T¾NÌÅ+Ód¨³–Jó6bn9¢ðI£ô¶2˰ÝK²Za´œLŸRRRÛåÔxÄ¢/ò”(xÓåÛ¶¦0£@·bçíª¿ŸT˵u°Ö¯ÂE“œbMäªísY¤F*/vgÜÇ“'¸LÐFRÓò *³þWËjZ±ŒÕ ß+BçÏÝIø*oE¬ö±#!Ó¬ŸÄê8û¦š”ßFƒ6Ø©ÈV‹aÄÔ%Ú¶WiARÌzˆ #0þ¼i€ (Î ‡Ï4¿@Ú›÷2I Ü}jOfÐ}ŸÖ,ÒlPW{WÑò;*%µá$A’{´ç`/šàP@Ÿ"]Ì Ü¢@ÒœlJà.…Ç y²í¢dðb¢àh·Oˆ"ÊÊ¡K¢f„ºì†FÜ—€|< i™»° ³·§¥R²ÙÔ°åÙΞh¥Kk®”ßIŸÔN Nt"é J;à1Ò!%¡1'¤œ´)TN @yk°p v¤”äà¿mVú§ùêA^3Ùv´"xªS2…¸Ç?ÂCvc+.šFRJ\­ƒT»D×iѬؙ¯‰¶˜,¸Ér„v^Ä·øˆJ›Ê§a;-£gOS{8C3¬´‘Nr‘áÁš›”x]K‘Û)ô|jˆÍK6Æ >K®–]hnŽR”xXeÓŸ¬,2‚(Íiû‘L,`¦=^—º8–8 Q»)ôºY,ú žÆ÷JõS:F2:‰ÈeY íL!\; ïóJ˜6h!Ö)†ßã‰U$Or’öõ©÷µßZÐQI·Gܯ2€Bé*!ô?¢ïh…jH¤#}ªú5“ÂK¹,ÔG ”_³Dp/Ù GCØË6ÏÊ0L€ˆo›Ó±Ù+]²øSÆioÊJàNãˆØq¼hjŽ\%©¥@ÙB/Œ:}4Ìu ¾Qq`ëæn.‹W4S»¨ —§b‡Z*ƒfìªc1$ù¥ïû Í2K-¯¦—*»Ds3…zð(²+Zð¨—Öc¦¶v”ø=×X) óH>ÚN‰óbäe.Z³‘a*ÜǦmù²ˆå‹V„Òf¨ãõt*´Eš‚$† )I§dù¹´²ý ÜuKÊQ'i]—ÊDiPëÁj,F9î×R2Qà85ïN–€eLÌVh¨AÛ s P2ã(4=zot¦ì‰”<ƒeR¦RLPIÁz*Ž£d±“/zÊZå—Í\ú,9câ|¨Ï“èžð½AˆTTò&‘š nM~ñ;4Žäõ€aiöRà–ö”p§S–¹ÕÒ ¾DÅ2?ñF¨›áòt†U“º‚ Øìh[x.pM%¤þ$[øjÉù - 0#—|IP—/¾MN×!RžSÈCËŠ˜+½qÉN#ÃDùTÎüEOÙìˆPN¢0…í£Þ0´K /º»1I4ˆEKJ³R±\Ü •`BF¢O ঻FE«æþ?#µ%S'xI+ PîRÔVqeŽ{t‘·|sÀ¨}%¸@XÍ1£‹Âã²V]¼_ËÌÓÛ6دå \6N!€T.VVk*"®áµ£š"SgˆÙ$!„hÎ:C26`¤oéP´côÀúa ÝœÜ5Õžš”c¿Ø Ã#èŽÛlíˆXÝb¹¬-©@ŽÚ"a‚í)55ñŽ;A#§dt0"ù…F>]Ó`-=Dá ÷DDK° 3ýšéÓÔÔ…»F>‚lX4Ã_iF“d àò¿œ ìØ…Å.ª¦–‰Â„uKª+“”àR¡³óÑ…ÄSð;ÔÀꋜÀ „ÔvdbZÝBÏSC’†¶ø©®¨H 4ý=“rk„–)¤Å—A釢9w>_eu¡Óê9T͈——ÉX(h¢ÅÛZ>\!àe'€BÓ$°í²¡Ä)ºÃ Ä_¦[4H-–¦)IaW¢UÉΙ7±U¥%mÍ>©%Ëqf,[v|•LeLy?‘†"rJÝâK:¦öBßc)„¦WŽ"¾£ydµ(ºÒqDúÆj©~n¹úÅ™É0}¹„\¶KkXiªHKJ+GIÓØ.)c õ°‘0ˆFˆÔ+«ªüæRìÁ¼“†Íƒc¥ &À´I­ð™¥ ¹‚½®¶çeMÃ.7úhžZ*|]&¹ÊÔ¹Á‰Ð‰VއVI°fN-§äœÆØ%ëd”§Iœ1v¤[Œ«EE™”[ ÛœÐ@¨L ö0Õ’Öà†”ø©Ó:™uÿ³VzÉk@U e„¨´uøhÊ_L¿Ä0>²–iF,±zŠ7î§Q‘Ôp²Wæu¨©ç¯hË…Uí&•B&Š¥´ä›VÉÔlœ-•#¾3kñj!ˆ\壥šÕÒ OJ# ¿–»¦éM4„€i™N3 “NéàRE i[¯LrhQ–-½‰šþJÀ¥-ˆ ‘=FÊ[[äErD*ꣃHsÚP6ÍŘy­–禢èÑbõG£ÐâÒc^A\+lIrÓ|í€]u´<¸¶ñŸºpÊEØ(GËÎB„ ªÁ°ÀGAÎ…PÑkáÂd,HÒÀK‹¤éq-3ÖFé î3ݨD×ßQ år³¯–”ÄtušwUÂ3V¯†¤7^¤§Ó3j ÄðÁͤ7"‡ùò8Û¾(%$dág%ÙgÓ˜ËhŒ™ÚR2-t£YH™D¥æS˜™Æ„ÜPóÿb‘©W‡IÀ).œrTÛt/|z ÑL?!a†Úa‘Iò;cŒ‚Gœ®¼R5UàDnqd´ÚjÁ h­С\‹Ó!Q!’4ê£JNënšá‘¢tïxòˆ0j´)Ej/l*kHH_ê¥å¨±2Þè¾ ]æ@b5Õâù5gª-AÑ 'æXÎs›„¹1‰DD…ÎÒ,ü u]D-~@Ÿ’>–„Ê5ÿA’Y"aá]‚S°áƒ:2³”àRuŽÕC• m“\A!ÉñP£L«‰"sé׃Ä$wN²ùZÄi=‚ä7É©8ƒ‡b_D‘ÈÐÏžÈ|(µ÷¶Ç;,€Z³fŸvÛø2´4Ê/mjJ\AZ”e“…±š ˆEŸŽà3É­'b“2y"QeMÆ yIÑ‹Ú ¨lbFBêëX9¤r$RÝ Ïð $Ìy¬F­ö‡gD©øŠzc„ÛzLa£iz®…ÕÂ`d„H=ù5¬“à²Ã+Ó¶ÂÙ†MÛNŸKÊ*NZê1ÖS$º­VŠÂµS‰n Æœë`ð; fa(‰Ûw&Ä]*æ:FZHdê r$¦Ï±HCk z±*`f‚ ­£-\HëkDetÛO# YÆc=Ót­ãÆÝi,@i‚¤òÆO&$lÐP1Å)Qˆ‰F€å’ÏG¿Eãõ¡± ² (r,¡û”ع6µfC•˨©c“îä°!Î܈¡ñEϯ;SèXkrùí¤jÚ_ÜÀ‚NÀ¯-(P¥âó½ZE«_œiFƒÎòšVJ·Œ‹&¦Ê‘k–Ú>LÙ0¡ÌÄô“Œ.µ7òH2áÀUÑ<å½Ëcc„‹ŽÁ/Ù† ¥–ýTÙCÇ·D”ŠGXEgoXâ2cHÝVÅZZŒ›"°¹±zšÔ¯5üÚfˆ sQ†<ìdˆ_ƒ¶>ZQñk0Ëå||{ƪT÷_â;G:S7anû/`•‚_ò>Z…ká:¢0._–1VB^†îÏ•æšÞéKVœáŸãX¸å£sÑ‹ÔÓC‚0AVçx’}äpiï•Õb2o©ÖÄ~\=áBG$^qÀüj9ÊÏœ”DG¢ð›®quà.¾¶*Øp8Kß{OôÆp”‹9`uqú(+Ø#<-ˆè2šFè-yšä&•.{P(¤0¦ N ޝ° F†Z yŒÒ(Ø– ã'W‰âp@är²ʱé‚Ç}B!¸ EškyPqr`¢›$ÒD(Š­›ÅQª5ºé 4…Ùk+­å±…bÙ‰–çêkQɯqÉ\¼&‡CôÀõ}ý1mD!D>*1 .lOp1Mô£Aýs´ÿµ9åìÿœ¤sÙxΕˆ@#äÐ$BäºsÄ1mèFi´$ƒË6Á(¡“NurR u INÒ›g.I'§¯çV¦F=VÒG O'*ŒO‹¶ÃÒý‘Dc 'R2e—qL© E¤ûZfÓÄiÀ°šVñD¯Å{›êx$ïÌOd«É·íj`~MAb5õäU'^_Ö­‹ÛJ«aZÌÒÇ«‘ˆ´Â T$ñ5Mªœ%E˜¡á}¤ÝöJ{¦cñF é:ÙtéêcuR7L“æœû.çR ¼p[ÍTˆKe©PªâèÔ^¡;´j­åk´î#$¶M²‚Vc0>ÀÒý‚ø Íê ê ßì¡P[ÀeNZÛ©U¦D*Ù•ï"|¡ÐÁ¯y#m=rbuŒ©-fU&Ð «\` ;bˆçq)\£Ë¡%*›Ç~Í xeOÉî¢n–ÍóEü«xì£ÁFÀbˆpëÛµ@±ñ5§š±Ö3•Š4à!Äï™U×ðP:íh„æ9ÍPhMˆǘáO@— ºrUáEzø ž åbVb¨CÔŽó3¶9 «ùVpM¼òo´Â»ú yœ™Ôsë¿÷uf"Ñ"ºÓ–Fó$@$hÛxó”8ç:ü3Ä·nñ]yˆ±‚¡Öqf°Ÿ¬OÚJr…{΀|H\ µxbëHôeÈ=ù*š@ÑΠͯ‡.^Wq€¤‹Ñ§¶~JàŸJ¼Dë@·Å[—B*é‚ üf3¦M4å“+?ìpŒ †P G?4'G¤ÚDŒÈ-ž Bö7áõddù2‰¬/û³©%Œ¨<Ƀ L†0Øb=A—]¨eÌñ±ÁÙ¤|Oý¦8 Î p‹ÕÍx¾€#üô/í3mù²¬d|af!S‡òhélú¹IMèóå‘}ª€ß=Í!»TÄUWx¤¸3S4X´ŠÚ”c‚ÅPè´Ò]èOGŽ?©ï^ðÇøî+I(œ\¼É7½ÈšHqÀc9Ï¥ˆE}Z¢B–îp"Z iŸŸeï¶1L÷`*@qÆzæ— O¿çbÞWO‘²/]CM.˰”äÀr°…ª.JÅ…æîÊ&H­óQI“±xæ= Ÿ€OñQ ­íŽ+…ô­"ƒ\Œ„]žë‚ÿEƒ ïjÑ´Ñ ÒÄ;”—|Þ“o4¤Þ.Qwü¢ -ÇKý>ýÖ[¡Qˆìò}UX!Š@Pvñ(~Óšà‰TC†Ì¢!àxD0Õ!«¦#‘ä‹W/É)¤Ð ’¡á7‹ò ´ª u\syÒú4§C1ÜZLÈp=éÄ/F¥Vš(ôÍAç .ãp:ÛH×p€ •·€á×hѼC¹ú¦ˆNÇx‡ ňÅGq&obˆÎÄ–E‹êè÷jPÊ~¥… Ô-«@  ¼AÝRÛèWnäf7nqS§›< ¹»k(] ™¯*tz#2*3tÝîÂXy­Y†(¤¾Ë9MÚ¦+êŠèö<‹apÉ×]ºÃy÷ƒ…̪³~æÅüZÀ`Ñ)}}Àêv„˜˜WÊñ%›Ö¯ƒ0S"·ÑYZðftiôÅ!â{d!ñ­êX™ƒƒ–øç– >ÁÆ+ÈwËÊ#E™¡âN"¸‹ãôko¨£×y×<ƒ'?ÒÁ‡G¿XÎs?âhvu´»øâ’:Ñ\[šîö²˜ñyðÏ`ɹd‘‘ÅáP$õbE#År;úår9l¯Ö˜vÝÔN0úÁŸÁ<©ª> /Pt@ovºVÑóç øyàª›ÔÆæl§ˆÈ*ÕxǃDä„›«¡àÇIå;Úw@Ô¼’eqJʈƒ1Å:$O¦ Û¹óÈ8äŒuÎ'l)Œ&†Œ"Þ¡A§ŒÄ©Ÿ…'±#tJuN3”£ó“Å…P>z‘L)Šs€s„§öqY ɃIeP¼U­*Of*R´‰.*A>–­>¦š„ èÃÉwµVJ𛊜28Ñe6äûÙâ“:j¬ñªe)à©Ñ”z›ªNI.6_ÁOÛˆÕÉ­}òV‘=@T”,»0“4NÐ& F ówÿúÂ(Ñc™p%è4òú§¥(¤6¦q”(<¿¯9“Xýé4'?aŸ ••§VŠÏ‚ZrCî%»ÌÜ¢xJ#^%BðÇ+éA¿Ö¡Ñ•’QÌ#@T= !½²>¡Bõ•À±úXc5yU-w±Õ~M$b5RŸt–£Žw¨t¢›tÅ¢Ûí5Ë©™gà z©žI_¡ö !†ÏŒŒÑ̪h‘©ˆ“Q!GáX >ZN6uhËÅq[BºÞŸ ã2BÚâ!—oÚfèµ¾}†(ÆÇÁó¯jã]»f f¤"2t{ ýh'ÙÇØ7£åtKBZÞ ’×òû¡…b ˆ3$Ámhoƒ£ÑÜ\1\µ+ÛѰ؊@Ú‚ïÒ´™¯ɼlCG|/~¼U™)ÉÇ$ƒˆp, Ýi¥«siW£«€Ü{Hܱvšl¸Ÿ-l‰ÊºQEõQ¤hçBHåV­}$—°6†¡K6è ¥/†=Í´&¦Ñ„p.ú®Ê+½¢V RH VÇW”…ü„P'(sÌŽwaó[[¨h߈ÑìŒiƒZ×.HO²ÐÁÁðom`ÊÞ¥ÑÛ`+‡Q‰qæ”U‰²v/ÍEÛ\dP·‚Ô@CCqrw÷¡A§”E+û0L¢^?‚CK噆ߡ¼Š7„µˆu&cu‰ÖÒñü$¥,¹¡ T$H ýó 1zúîT¥.A'h¡‡;8ŽlТ¥FË_|Ñ*qTµU"ö‰1äûœøyò ±ÙÑô.ŠÓH¶_#Zº«‡ôX 蘒Ù;¼M×­ðLÚš¼«€5 #É€>V‘ô² CL¨¿Hð6b±\0”F»—Ì@´R&}ý˜¬â˜‡n ÞG)gC ­d èÄ‹4H–•Ûã\rÚ¼Eö” %6F~ßN‘MÔqýNpiÊ¥"[o°aqOå Ð -Å¢Mµð §©Y¼«º¹ë\BªÌ2O{¡i'úÝY™u¬6š­Ì/ á.ÍeТ¥xÇ¥…b ­’¬®Íþë³Øž´üq¯ÝÊvÿðÑ›WüÓží‹ù2qÌü1ø·¡c«Ý3Þ|]]wºµòp` kH¸tü¿—Õ§~ÒezñzÖðôå§’×±ýGüøˆ7¯Ú¿u|è’·×ðÞž&vË}ÃjçÓ†ïs^Á÷a|ðÜîKÚ:ûߟ©vÆ^È®ÉÉêç™»¶ì%¼nH ží2÷C¶ûQÏ-›o¨aõŸïl=ó¶:õÞ[—mY6«ÿâ¼äû»Ÿ­ŽZV4Õ_šSÖ䊿U¿÷_ýÂå7³úmÇš…"±x®¾ÛgC¦w›Çê‡í,]ýëvEI¯¯?uaÖ/÷ªö_þþêËúypüp½§Ï†ÓnÙŒí€ÞÀ³¤ãæ s¼µL½wôÄuþ_["=á=äß¶w®j³l3Î úGúÊùÀóØ®œ?<·÷ÐK›"Žwaõ³› ß:Vñ é ôù÷޲|~ê2ú–WÖ"¡¤/<'ÛG:¼=µyJe Þ‡öAÎáÆ ü5çô9yÙ“ùúžŽ ¦8äèÜðÒñîÁ/¶â|a\pò-ér+ûAþ¶ûº¼Óó«÷%=ëN—=rÕÑ&J?àyymê/ÐôÆý¡Ëþê/(/ð¼”w¤“'êûûu½OELUt•í@¿0? êÈ…lÏ!÷`¯$=ªæýaöòtû%G~˜v ôÀ°[¨Wk»o¸áP´;8oþ¢=”ôA»#í?Ú™£õç^Ø~9¶óÃqƒ~Kzã}?Ù¶ßßÑÉù¡]—òZ_ûô­§>Œí¢žƒ=–tÃùzö¯¿zÉ“ÿöèƒz!çóD{ ÏI>š|F90ü(Œ õôH>‡r |ž.|ò_N>øåü€Ž@7SopíU?\¸›Õ¯K¿­æ¥T§=™8äÎkR¶)ù’ròkð Æ¿£|\üùô½g/PvÛô·@?Ù¼ÏãøAÿ`\Ǻ_›óÃíÊ®H:âø€>àwA®¡ùŸ:›xÇðshßQM\x pŽ¡· ž¡ïY:LÑž“×(¿€7Œ¿(ÿàg‚…ç`þø¯!‡ÈG £!¿`ðwg€üƒÞ¡ž€?:ÖvyìÉî‹rºÒ¸ƒM^˜æð_h÷AnAOažæ¼å8 Ô/°CÒŽ> »ýÈ÷Lÿò„øC>ôvàpÐ_i¿Ðn€~Hyzîúõþ!×ÎV~øòrô7ý«ÔGìämàÉ74©@ýrøixðèø1  ÈØqàðùÂÒ¼~ k}AþÌçÀ¯ñ Ò͘/ŒõÛhÆ¿ÿ‘knذe’kÐwÐSCnP ?x^ê=òSÚS÷âó / ßÿ‘ž€÷à=¡¾KþcœòózbêŒì©ä›iÁï˜öδ£ˆ“%]¡_à<Àƒœ_ƒyÝ \gâ,ä#úGwÛ¾Ã~F|câY3ŽÃ8ü9Ć¿3ñ*ú Óï@Üý@\"ñ ÎßÀ¨Ÿ †½Çù®X~}÷Å‹‘0?ŸÀÏ7âßñ Ìô»WÀøM`òߌ'ÊO^öhÊeÊŽ]øÈÂÇÖ8âĽ` Ü‹öü!èCVðÙQ×\„Ï#ÞƒxôØŒ[%¿¡}¤»lí°Ä/¦=@}5í8ÐÃÄa '¦ývíë3Û²/@na\ˆß {tA}3ãÓŽ¸ å\Ž«á¹Y—zîþEß´ë`g þ;âNxè÷aþò¾¿˜yð õÝÀ× Ÿ¦]3åí÷€ÿqøQ#Qÿís=‡>é ãA94ü>Òä`*&=äŒó =Dgè3´‡úiôgâÀ%ˆÛÀÞ“ý˜òŒt¾~„qA?†=À<†á/Qþ ~švÍÌ¡Ýy—ýàøŒ<ö+ï›~õİ#ø~ðÆ„EgSy /È—A¾ËÀa”úmÚQ•ŸÒÛÁùËk´ë0ƒž•ßö¿aæV{ñE§¢îúž½ÖññumZ±ºÄ›ÿø{«Üwbõ¯m?`µóž¥Ýñºpeê»sK>y–5ÜðÖš÷~ù«™µ,¯ v)Ûyí‡ûJ²Ç°­¼Óúö³¥¬öÙ£“–u\ÎvÎØ0?þëul×þYo½çg5£-èþô4V•žúÚ¨™ƒXõÜnÏ>ÜÀj:—eŸ¿ŒíünDÁò±ÙÎ×ã×õ½ðR¶mÚõž©O¬`µ¹{‚åí-¹üêï/¦Þ`Û“ï;Ýñü Ø®émçFG]Âvõiúje»á¬öÁ>™Ÿ.*eÛºµ¿ÿ-I¬nà±÷;žšÉ6^òf×?¿–ÕžûLâÜÞl‹¯Ç™üO³ªIŇï—ÁjÚŒlX»•Õœ›8{ÎãMXÕO—/õE>Ïvvf1 ½nd;[Ö}²=Ë1~óýʦ=5eñRVßaÎÆA‘»×»V¾r뚌jV½ñËÅËOœfáÓÏ­žÝã#¶ãdÄ9O oÁ¶ÖûÞœôò_¬6oöþEãf;FÍû«õß³š£jžÓ—…?~²÷Å£ßd»†öX7äÌb¶ëL³÷×–°ês†•?ô«Íî×ó‡WÎaµ½¾zj{/Mú™ã«y¨ö’îoß¶Ï8òqß³³]-Þ;jØûlW¯))jÚ²ðŽá½—ÍXɪ“ë†ëžà—êó¬ùíþvÍW\þ&ÛšûÆÄ3Íg5ë}üå ÇYxþw¹·Ïz…U¹ö­¿S_fÛV½Ÿ4¬’Õ¾}*óëK®dB廟Õ]9fþ‹ÿåOÝ¢CÞú¦?«^úú¾)Ífápr׌²³¬ú¬ú‘?²ê´ñ¾n7bÛžžt4¥ãlãÍ«7Ç?:€U¶üõÀ Åß±÷}sÁc}Ƴڧnýþþ;d[Ž´ÞÞtýb¶ù‹ûެȶ¾tÆO쮊žÅ·²èØîÒª¬Ï„>zÕˆ[’cëçnØ|¼ÿRV½©¾m‡…µlS‹'J¯zàípYë>3ÖÇ·`á‹â;û×öjâ…Ž .g5GóÞèRdªßyð—ì,|lÓkzÝÖè8{þ‰¡wµÛœü)Ûy~C×kŠ2Ù¦g6¶z÷í7Ùæ¯Ÿ0àºél×[Cý-Nå±MW¥3ô¦ïÙŽé£&¿añÿöÊ®EMÿaU%‘ß}½þ¥Fï76߯ú­.ióäÆˆõág.zð«O§Z÷ß8Ýt…§yøÁìWvôX{åÿ÷ïÛ[<úðÍ5lcÔ»OþùbføÅæÝÒvPxáµ/¤&n~±ðº)Óž8ɦ”5íýî÷²m·Oøàº¶Â;~í×õ¹mÃËÎŽ>§uû}áê¯æïo:ãg¶æ‹ž¿¶¬ïΪö‚þÓO³q½FoÔÐ"\ÓýÀ°®M¾ ×^ÞªýUçN Nê´ã–¿g²{æö=5þ§äð[U+Wf<ýzxÍõZŒ·'+ù(~ú¢qóØÖ¯Î.ŽÍdáWŸÝß>ò¯{mS›ÎçýY~¬Õ?í×u˜À¶ú«&ÕŸ^¹uæƒÓ®¾'¼zÕ?WŒìºŸmîúmæ}S>o}÷¬sîÊÖ,-\s£g{üéûÚÞ{Çdöpÿcz~4‘m ¾ùóí_`sWTÆWEZôØÞæúò»ÃO5o¹qͺVá§ìuç“é©lõÏËËŸ˜Þ÷¯Rrn6«þ}ÑùßFœ¯úêô§g~Ížì^òÆ• &±åûÉ•áw’/a—Ì®f5{&O¶ì öÂ-¿v>ïÔ]áÃwÉïòTø­["ï=²°]¸nô5ë{^>m›tsÆæìÔðCƒo½µ­ÿ{<³¬Ë'ž*¶áÖm¯z'üJþu>šÖ‡½øÍØp¿ãýXeÄ ØÌßÿ o:úÞUþ¿b•éKšþsYˆ½ZY¼{ä‘ì…Íç߻崇m¬Úp¨æþØæÑ³S"º¬c›¦õzc{V‰e—>;3sÖaöxòEÝݓݓqøóïÝÀ^ü{ߊƒeGXe×Û¯³ÍSlãÿñŸÇ«Ã÷ íiѼAá5—wù×ã’Ùò?öŸøÑL¶áÅ&½yîelÛÇ7}×îþálí«wýÐæç·Øº?/ =~ÛKlë}á~¶”³- OþgVåôðÊÛž»`øE¬ºÇõ5W7|Âúþ”4:çÇh¶¢¤Ã3Wv}€mº8oò’/³Õ#þ5w݉$VxfA\`Uk¶(£Ï²›¶Ïc5ƒ½¬äËvSÓƒ­Yæe;Kó>>ôð-lÕĺ·Ö>ùCxÆïŸÜöþ‘eìáÔa/o,ÚÆj6dß_±™Ý·ýæ=»Ç g›^ìöÅQØŽšƒ]Ó>þšU^ôôØ)?°Í·]¼dÕ–ž,Ü;ÿÆÓ_&±ê{úì.7¶Ñû¯¾vôõO aÕsfìÙæy”UeÖä>T²‹í¶ñ±’gÙö7% ëÓÀ6ç9}së³>¿öäðŒQKf±%»Þ6£¾ÕLøC^Æaöè²ÖÿIËcÜ0÷úæíXÕøU âúv /ß•|tSÓÕ,<øž›Ž]Ü"üüî{Þ]2ã[¶kÞ©éwüø3{骎C.yd 'þñáG¯ž¾ãPÿï§,»¼0*.{„…ÿ|êçÒo±WVŸö]º‚í·qÍÁ‹Ç±õùI¥×ŸÝÁ&_4ã­ï}Àj¾{¢òÌò+ؼ_δ¨¹çîÆî7Ú~#ãa•‰k«[mèÏ*Xpfð×{XUô=›ºmþÍò¿my\Ûé]°þíÓá­óO}xJvÏàS,9N9<·ãϬ*mÂãgùý5ÝCÓŸïX÷ehäú8¶é½g&U'd‡—ÇT óîzÕ¼ºüã7î=ÕmsüÒ’ûÙÎ>­÷ý™‘Âê6ÝÚòå3Ù–ì[Îéó6ÛÖÿ×w>~öV6§Ç_[Ï{è«ñOÊÊ/JY͈ß6œØÅªÎŒøÍñ$¶­òíWOvØÄjÓžèâO?ËjÖ¦îô̬nη›÷Õ±‰Cî›ýÇù÷±Úú»nKjÞ‹m~·øÔ3÷Nbu“¯êõÂÎ"öôТêµÛ¿›×[N–.-y¿?«¿ìØÊÉËØ¶hß;wŽÜËêïžôûOÿŸÛ3¯·©¯Ÿ}v «oö防÷ÿÏãý¿ö¿1uç?…QW²†{\5æß_°G²¦ÿgÒþÙ®ìù¿÷{ª«é×´gúmlóeýïÎП5$Æí]·2ƒUUŒ.yhUŽ…W½7°f+«-ö?pð¡-9ø«üÍ~GØkuOÖå¿_Íê®ù'ò£k›:®ëþúr“®I¬æ–µ™3žªûßÏϾ¼xü5ئõÃ>]5ŒÕÞÿXûÙ·±škgUeÓãÛuòíó“_°æ?ä¦noÏv¼Ôìž§¾¼›ÕT¾ŠŸy.{íE%dÛRʧ&vm¶ˆoýè‘ElÓΕ¯Ýí}‰íìúícÇf;þ3¤&£¼Û–óp«¿èĶVß¼õçÝluî¬Àún†—®Š<8pÛñö·{~ûö¶õ¼+Û¾hû_ïÅvyîYôd‹>«Þßaÿˬö³¢#F³]/%<Üjt2«Úîàó’ØŽÞ_‡wõ|àÿü|Ý—Ñ#Ž]=›m²Øúõ½Û×f{ÿëzÇé_{§C;V¿bö¼AKY§ÉÎÇ®±šø•_Tͺ“ÕÌý}즹ﰚæSþýÝkÍþçóußtÛ˜ølVÿ‹?sÈ/ß³†Á éÏÅvüåŠ[n‰÷áz÷Üy_¬\jÅåç³»šõø‰ín·7õýeϰ=ùç_?É·•5Tݳy5«ÿõ®¾ß Œï5|ßþ©Ó±½ú/»xÊYƒ×óá±³GXÃÁySëÆŽd»£ß¶þ¬í½øŸSk§ž“í6­öÙ†ã¬>+óLÍ»¬þªºKÿêYÁŽ,ùuÌ<|¾þÞ7:Ýók¸¹ëóÇNRíÜ}¸¸-γ!7ãúž…w°Ý›÷ŒÜÓvkxäÊá…KÿVó‡÷²cR®°âÚÞá囯§±†G'l:èc #¦s²¢Ç‹íÈûHß-íߘ:!Ç t<ðÒ»·n.Vt[P¿uÌ3Š.²ß†qçLÚ”ZÂêç\üêª_e óç¼°íý‰8¤ÌKòé(éã—üÀyÂø$]ëžL]5ù·8x¯~ÄžUÏ=„|¯ûê»¶÷Õ(ù‘|€~Íþa\H‡îxzà üŸ—ý€\Àx. oõ_z±KÞíH7x¿a\Õ}×^4 é„|„ëÏ —.¹h k¸"pâžæ×a»{é·eÝçWãü‘¯R.Mú¡\Êv‘Nr~0.“?@ï†ÐœßÇ&`0ŽÆÞ:Ãüa¼¨_Ð.Œoƒ§¶áöùª]Ð?Ioäçìî=Fc»0߆®SN¼ûQ?5 #´üy”úfê3òôMÊ\ƒÜ൤+èèêü•Ï›tßÑnÁ|@/ÞÐÎȯï±åôè[¿å—{ +}…ñ´RxúGœÏî” çÏ:®ìŒœÒì'è©ü ã©1sTËÉC•œHùÆþ`¾ O@wàƒ|õìˆü ý£×h‡¾hèPÙäqõ;Ðø9ïÄâ5‡>uêÈÈñÇ*¦ïvÌý«oôïÞTü?$ù€rkø  3ö/õÇ/å ø…ö^Ò ú7ýö~Úy5ü5â‰9y1kŸ˜Ìnù`lN]!ÒÃÔdžÞU XÄ×Ê€œß%}÷¬9ùÅ€ª ×€ý;ôy}{ý÷_¤äÆhÆr‰òz–6êƒh%¯rž@”[°»à_÷Àü@n †xþ‚Ý?$í‘CþÁ/ÀóÀC°×RN‘0>àŸ|ù ãÿô}4p ú©o(§†\šô…þð=°W&=à/ØA C÷O†õj•­ì¯1ôO€’8–ñ[„²ï&Nýcø/è Ø]Ó‚ü?ýA§OWtÊSväÆoú{°ïÀ?°#¦¿>Èç°}Ùʳœ·‰K`^ðýðѰ&n@ûöþÂ<Àï]>K<‡ã}•ôE{)ù‰t2pi÷?¹÷¯EO(y=vÈÄ©¨/ ×=îÞßñÍgÕûL¿ƒvUö ¸ã “ymðqØq è¯¯™¸yOö%c[—SxNÊ‹Â=’/ à/Ž€ÛÁ8í¶uÿóå™ý~ äâ à§Ñ.ÊÁƒº¶:6JÍpȃ´Çh?פ­zlòGÜíb;`G¤6ãôk†ßÇq]üG‡mŸ9ýžÄ…€ƒ ?#¸oâkÓÿ }@À.‚’ýâ}ÐSCï‘^ŽGzHú |J¼…ó2ë±V«½À‚??ôz›vøvâa÷¶­Îyw›å·“¾êð~C_%—òù"q)Úù>ŒãKÐÿþ1Ãøú(ê³éwP‡Ã¸Œ| ú;ßGÇ® ¦¯qØ?ôFÜצÂøp°¤ÎOÎcOç«;.?µÆ¡·÷ƒ<^;÷A¯o|sÜí-&°=˼CŸœü½òç ¿Ñ¿JûŒó»dØYÀ5fžù8ÍÐKÔhì‘‘OByú¦ç¯ä ìµ!÷}0òWÈ'°«`ßA¯å5ð퇴/€—‘G2æ‡|3óY2îlh÷d…o–²`A¯á¯ÔŒ[@ „öV¶‹öèøÛÈó!?@ ¿kâœ7致‹&GÜkèÑÞ‘§šxÙJ> ÿ×pñw)==½n‚猼ôgæÌø õÁˆ?ñ¾™Çy4ðrî’ä†É©÷ÍüÑ¿[t˜µîf…w$Ý`?¥¿À¼Ø#_gâ0Œ× .3q¦ò8ðäûŒ|Œ‰Ç1žû%õŸ3ý¬‘Ÿ@>J»ƒã’y¤à?#/fƨ¿àŽßã_ßš¸í?àj‰ p¼åQŸÏ¹âŸáélße×Þ;ò35®½ó.ÜûÞן©yA¼aàxð (¿RnM\nò Ú«|½gbô•'Y}ŸŸ«ù¶³í›§¼¾kuV±tyÒ SX·GÇC+ú²Ú®×_ùãGgXMrâ…¯ýëN¶£W櫟^Û–Õ\µfÅeW?̶œËÞºäµlkÏsZ8§”ÕOx¢×æŠñŽëê‹9÷Ž»YͰßüg»ObÛÞtxñxË^¼6Ô³Ü?œU·Z=ÿÔ/KYøJÏðº?ïf5ßÍxöÀo¥¬êÊs>þþ¦ýŽçÍñmÎ}ö‚ά6ë÷Å)ƒ/q̯¶ÇÌý{.a[šÌb-#+XuÇ}¿ù¢˜U=Úýós¾rŒwEë)ßÜ7¤ÛÓtÚ˜ì²ó­ÙýÂáªÛ¿gu½~ŸvÛ¿g8Ú¯½÷íždOùæŽï^fuŸÔn}Üuáu¡‹êßL¸€íxbúså! ßuûâçnd5ÿ™ÁÂSþÃ6ÝðaúÓ)ÙŽù˜ýÕGD­ÎÌ~ŽíZ›°²Y»?YMõ©gÿìÙ†mÛóÕ%õ}‡Õ¬TÕ¼ûó¬ÚŸöøÉ[Ž;ækÎÏlÏïæá¥ínnØÎ÷X“ª;–°×RÏNùf[¿yÒ¼6wmù_¿‡ŸÈ^µÿXÉÝlsÖ ó®JœË6í;ày7±ªÂ35‹¾ü_¿³MëÎø¾¹ä¶ýä%?>¿ÛÞ+ôÀ€®²C‚?t{£)«‹îzÿ³5ﱆ¨·/ßo1«»zü•é«~cU ?~íÅ%¬æûØëæd岪ŸÏ_˜ûe5k8½ÿï÷¬eu“¯{2¿ÞǪ{½ÚéxÚˆÿù¼ù{]Ӣ˳‹þÃ6/þñ¥É㺳šÎbû ÿ’íxqÎE'º¬aá?~ŸyúCV™è£ölËö³pÛ{lñ ?°m׎­izE4ÛÞ#xòÝ6 Ùk¡g»½Ýr«={Ö€¡Ñl[Ʀ&[¯nƶßPÿkþZVótî½_ÏÛÊj3Òîz0òÛÒë’דÇv<~ÿÆÜ‚«þhù‰À;Žë]ií®^ÝŠÕ¬ü}ñüÝYÕ¶‘%}¶g±º¸Qµˆ{ÉÑþžÛö¿÷Æ­–Ê-Ìì¾ü%¼Þã×9 ÔïóŽßÛÂÏöM¼0°~éOx ¿ïÝ\ÿ÷œ¾·o|ß2–ÜŒw—°}ÀÀRìgïϧ6=³pz>!ú£S]‡`{Ð܇öá>¾ÏË~à>ô‡ã€÷`œF?pÇײxþàe+¿\¾Ç ýÁ}œ¯lÆ¿Ï÷ÜW+Ú–áµù¼ÉxúAúIºïíä9ñû¯N:â¼ º™í7F?ìÇ ´ƒó7ÞCzt4Ûƒ÷qž OFŽ÷A>Mù’tB>ÜÏ™í™|sðøö¿øg\7FgÇø¡ûÞÑ/¬~ìÇãÞ¿¸ø=OyWÇ}SÍqã}Cð9yã1Þ3û1õømÎÓ¤ëžS¯œˆÏªvꟗù¼Ù¯CŸï†žÁûf;&]ÐnI=2íž©çæ}ÓN˜ó~9ì«1Ó~â8±›8ÏóÛOÿ84ÛIg£=“þ¦Þ5ÖÙŸ©?H/SŽ¥}rÌÏà‹Éwsæ_Óþ:üÂù‹+¯]û—êï¾5S7[§èoØE‡œ›òrbØ5ìì–¤‹9®Æøê°çòýõÓI]½¾/ÛýÞ†už…ž];ÚwþK׳šõ#ÇþQw¿…w?~¤s&kxþÐýüÉùûK-'7Ûeá…U9ß…{ßãx¾á‚6-idU{F­ûìÄÛlÃÛ-Îí3}. Ÿ|£ÃÊà ÙöKºìŽ˜~ «Y×li7 çî?²7rP¶ó÷ö­?7ŽÕÿÞþŸ“wÜÄjjÿŒLìÙÕ|6¾óç-;±šŸ·8PÕ“Õ\Ÿ´á›M/³ï¿9ô`»¬jËÊWŽ~ЄízæMöéß5zoQ¯&7$³½íŠz9¥¯÷¥œóé~¶wÓ°ôcÃ*Ø÷úÞùãkmÙV]n\jáx®á/¼÷týÕU]lTUnk›Ô@)bÐjZ* ŠMðPÅ¶Æø€X0ü¤@%E’€‰&šíH¤hM QSCåo±Ò`h´MËÏî]º÷¶ËO +PcƒŠEâj”¡ óÍM¾“›Uß|šœ{f¾ùæ›9s_l;–“Òxà)¾àxÑðC›öûøÈ‹óìºö¦‹ùVøyß Æ/[ù•'òËÙmÍ« Õ«í{®kæóCЧgè#g+¯ðÖºbg+®¼³âÖü=÷Q2o¬…=ø;óQ¾â‡8¯cIá· L_Kå…m/ùú¢Çu±.ðC¼öKð­zÁW¬ÎÍêgXå]iÞTºW|©›ç¸ýá9yB>ÕæYõ&Xgž/æÍs¤}•9á¼êOï…ûÍ÷üû¾Ü÷tïFu\>)·xÉU?ÏÍ¡µOdÏèð>à <Õ÷é«÷´w‚ö—Å“çœê=Ò¼zgÆ¡»Í‘ÆK™G­&R1ûfɤ ¦'³åpëÊr3Ó¶ž>^eœ®/¾ûñ±¬ûèüË#«ö>`œ‡"{’sFŒóÈ}µ©¦"ã,žÞ²së릻2yå·OÞ2±ëÛwü6Nöæ_ß³Ý8׌ï¯[øÏþNùȬÂp¾‰–¦²OT¯±ÎÞŽKtŸ¿h š’¥5&~ ïž]ÇÖ™î‘Ðü¡¨qëú§-¸îÛŸëâ×’k}+ß{ý´1T²0ØŸ¿Ó½wª¾Úí_dܧËOÇÖ4ظø”ßÉ÷Œ‡¼|oå\+Ï¿ÔÃÂçx®¬êDg‹/ëÌúØÿŠ—®ž@¼ >|0?ÿXçï ^|ŸfÎÒáiÓõ‰êq6¹½ò•÷Mää穚Ôãœ(-yÂDçeÏ[ûÁUã”5ÏÝ癞DCmy¨Ó:÷m‰ðm»µÏSãîÏ8oz3N††«÷êÙ“STðûv“/zïëe­jã9gÖ­Ø7Ñ÷Ë}»¬½û¦Æ{çÞØ²lÛ“¾ÿ†¬Ú;–†õìu%V.N½`â_}šéÞ5ª÷š_l|óÔÖª2×Ç>¯gá…ºßí¼÷LUó.ã æïp5|Ýíg{Ÿ™ªqÀѼR'â”'ó'=ÝÂÝ}3ÝWß=:¥yÏÀ å ë>>.s÷ê”…>ˆW>¯½üàä_|žR÷GóAXñC_T·o>Ì*Îí0^ÑÜÈøÎ,åÏ|Ç}Wþ<×8[s+¸º o@]Ö%^º7°·ÐgìÞÓÀÇ{9á9ã÷ÔOž~¯A~àÅï‚óh~á¥{Žö/ÿ/ø¿cí/úOp߬~`OcŸ@×€ÿ”öÞМ±?ï9®ï±giýð_ý_šžg×öÔýÖ9‘×1xpø¶ÿ«ýPKˬiJÒ¥l;Ïmanifest.propertiesUT ~õÁX€õÁXux õM=kÃ0Ewý AfÉ_²ZÒ)NK+º?Ì“-= Ù.¤¿¾¦îÐé.‡sï=°ƒ™VÞCâ¢ã…<ÊæX”üônx!¤b&#GcvùBZ&˜']Êd ¶¬ê$bY×M«¬RCËz gq^²OL³ ¤e.Øh\aDÄ, KHO"=b¾„ð˜óaZéŽ)?ïù²Cìuƒn×·2µéNþÃ}£–‚ç·6ðQËªí¤¨º¶•`çàc mvvúÏÛ_öS˜Ì3¢þýÅ~PK ªiJ.÷¬_‚R«  ¤chunker.modelUTVðÁXux õPKˬiJÒ¥l;ϤÉRmanifest.propertiesUT~õÁXux õPK¬åS./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_chunker_chun0100644 0000000 0000000 00000000156 14523004075 032751 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/chunker/chunker180custom.bin apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/chunker/chunker180custom.bin0100644 0000000 0000000 00000052253 14523004075 034224 0ustar00rootroot0000000 0000000 PK ªiJ.÷¬_‚R«  chunker.modelUT VðÁXsöÁXux õ¤}w|E÷÷ÈM¹77¹é¡(M±Ä˜a„!¨!”©B¡$H.DìØì€( UTPi‘–ÀM£‹‚ŠJ±‹ Š]ßÝ™9gÎÌnžçóû¼þaؽ»SNýžsff=Mûæöx<ç°<ð_¤§YïK =Íòùÿ{_:”ÿ¿ß±þ}η÷¥ƒ{÷d=œã‰è’Ý¥u–ÇÛ©së¬ÖÙž¨lþ·uŽ'º£øGëŽ_6ü³u'O,¹hÝÙ§]¶¾ÜãëŠ7:{¢säE'ÕˆýV´ìÅúgdþÏŽð¬ÝGt¶üggk@Yüßá¦ÝG„ýhޏ#Œÿììñfw³þÕQÜèÈot²þÕÉi¿Ó Úcÿ¼ÜzÈþWgO„=.«ý.—w¶ˆáíØY¢NÈz#[ö#FÍotí‹GtáÃÈéd¿k]åˆÇDĬsì?vWÙ—w±~x³åSöûGkðì«Nâf'>ùN]Å•ý~³ûž'ú3OtŘœÅã'—{§Éîaó©dzy±Õ…hÐzË&ºßunžä˜dÁÐB1 «—Ü£lVÉøb¥>Ö°o,+ Í(º1䉣ɱå0ŸK“5%Ñc„H¢Y‰³G\a·_\^>sF1ÕOÙ€õTª‹àRþ.ÄË‘xq¶R¡#‘KpËÊ=‘Bä{RË,fÌðÄ(¾’›ss=ÉØUVòÐŒ™7†fÎ(š*˜Êgʇ2=}jQ©e}‚@ó¡½ ÄÐ<16yËK&–Z²fq.ÇöPУè¬•Ý¹Ý tS¯¦Ñ'3(ñZ¡ædeÙú9~|I¨¤¬Ô0‘ËluëØ(¯4BÞú¸Ñ’Jïµ;ÔÛ¢¬4*1 §%!O<ŸèÌéÓ§Î#±4M‹j»ñ A!‹}ÖEn®è)†KŒEXkN>eÂ2ÄSRÍÓ©ðM++ˆLõk⟊ÕJ´Hˆ‹"ÎUpÈ·LΫ|Ê«$7»m±7»ÇÔâ"nêM›h8H¦"§#°”¬hêÔr4\f ÅLÊ&é²,1<–î°ŠÖ¤¸Ôê-äqû>³Ô⊒X>Ü«Í %7'ÃN"&­¼ìR»+Kà‚Tr„oEY qsmËg‘í {—[­q7†Ý’•FL©¥c©î¿dŠ1ç -³– MMh^ÐI$]—¤*Å–*M¡Àº­Í]UQŠ&ˆ¹å¾Óˆ\AßÂ{ûÁLrǰ;áhC8ðxi­‘Rœœàù“\}Z%²´ä‰¡1Ç+Ô|(Ü 5¦Š;q×!å%‘‚‡<Ùg iÙkqxRQ9u<˜:æÙÖ€‰èóˆ/u ‘t¶PÐ×Qak‚&CìA„*ÊâªXÖ‡¤…DQè«cw:f«Íº‘Ì/ Ï(-’ˆ8HÅDX2%+ ·ÏB>µqZ´³Ñ«a ‚NxÌÁ„¥žÄ(èՂІ’‰WÉ K à’¢dbn‡*>ÂtÚ|€x!´s¸FäQ†È N…›¹Ÿ2©¸Ü¶Ü%¥7N9¾X ØòÍXOŠAÕ7,¬Ü4UÉÓ3YŒ‹FŒüáD´ÕË1\ïB%p,Bàd?èà[ª !z‰ˆh?'u›Dë h¥q…|‚‘PòÖ”¸®¶ó¶ÕW)12eJ\P& w³š+à@ómæÔ)“,èX.Ô Õ°&«M¬Qb·í· Ø¥r=f¬( MR4IDÂÄïæ(dé× D%š€4=­h²åZRà)|˜K¨=[ °ÀŽ‚W¿ÎÄ™@2^Oì@¸”/´s^šåþЦG£*L–͉È\¥’©©ÅŒ£åƒÝ2Š÷2›/ç‰H\š[ÑeÐi‰|ÔïÄjVèÕö21 «8’ü@ýH1¨âÃ-TCòN:ê+œ&Òz©LšGJÊC¶¸)Û%2ZÊ"PéB›hÄ|@ŠØ»W±Ið¼6ÐdM±UòŒx7•íÉ1‹úÍMk™"L]-XÅê<ŽÕåÅOü[‘0Kp‰P}‰%o”„4€%F™ár/S¤å*ÚA¤í7´Ì±í‡ŒÌ¹ª8Œ‘ŒÅ¼Ðlå*ÐwK³¯b‹" "ªÇ¬J¼0$ˆœfˆìD•-²0 ÍôDµ”¥nA9‰«–‘[ß+µ9…Òà1¤Ê‹š"îHFcñH¡&½|ÔéÅ­ pZˆƒãuËw&¹—½R(ð Ö£GÎé¡w‰!q|о‚Ñ>bÁѳÖÅ•Ýɶ•3Åœ–l¦±ô™=F̬årSˆÓAÔÚ¡Ü)Ò2ÿCsßIOQÓGƒmËij@# (LÝ5§.Êð›‹Ù*‹ÔäVÉOEV×R•)mŽ!‰3¶Nu2u(Z¹¦8%¾b*S%R< .ù{³4jßÃÚ¼­—ñ’j–- YÎ*&Ê”ñÑ ‘f ,Ivã›ô¬4Š €0†ÊfÜ4STªD©(Î^ÏõÀ(¨I€tú)\£ ðø—:V‚Æ#Q6 :f¢µ– \¯qƒ¤Â9Xå«É8B‘}¢™¯ KPä©Pe?Åzj…‚V¡4JL`º†‘ÈL¥`¤Í“s§™¨Ü<ý2Wà 3=«õÌù)’jÔŠÓ ^%a©è+Ãiu‡ò!ñv²«RjÙB4ؘ ‚X&`LÒ«+ŠV¶³SÈÐ:¢ ŽQ˜Aá\„*¥´14HǨÀö_I(4 á×j(>½R>‹Ó”Á¤öo©“Ü~Ñb®ÏP©§"K¶Çr„} š™%@ÒÌ· ¦$º¥‘E}h!P,5ʤ¦0ÂÞ’_%jÐòºB±âŒh’ÛÊ Ä¨É«(AÕ(\vPé©ä¦= OÕÖ#9«\~Í%ùh3>Z2Uõ'( ‰®I÷ƒáâ•d$¶ Mçd\b´‚¿D¾RÀv§FxV·zph«HÖRZºa„ôt=U?p‹@NÃ+“ŠZÇèÙ•tP1=ýŽ…–´CèˆBJŒâ”­¾ 4Ø‘y¢xHɘÙ!Uä"CdÿŒ¥~Xc‰ÛœÞR;¤´F«ÚAë|*¶JÿG…ZNW9‚{&£¡ü‡4GZŽqdµÓJo¤” Õb,7(ˆ EW\µ‚ƒ.ÃxßIÿX½¸šN&c”câ ¤|""Š®IŽ>pñ rIöB'%ù(˨mÆ›©Ô•Sì¥Ø@Ó©X¨G‡¦ :`ý%Í$¢\«e(ªqv&€äRÌ(6¤jb°’Ãòqæ»>ºB&XйH˜e˜I½övL’Lé( Ik0&Îp³1Dª0!$Z3)4M„k.1¾UK\ˆE«Ô™Ê[æÈÊ;¡ÇZÈ0G«eª‚á,ìD‚=/0õ44hîPiTÊU%béÝÓ·X +OÊÍk ÌT&¬L’ñ‘ z3Š‚Îrúò¾ÂïŒ\ÐEˆÑÊyÇjÍÉl¹“¨õ+¸’ü$¢×W*¨±áºÝß%9EZúE=Ž Šd?š`0£`ª–I™žW+ˆÐÊ!ˆ8*úb7_@‹·`{‚N@ïômtî•‚5xE#Z#À„š_[ÑHÒvÑ Ë™T?i;Óu¹,-‹Ð£Õz¿¾¬Ñ™ûKuê„à§^ÛV…iZaƒ˜ "QŠ šä1V|8«—Tu•&DƒdhGD…—f6xfÅuùÁQm]VÜ₟4vCCË@ój:˜õk⧤–X\¶t%T˜¦‘謣„YôQQ´ÊcnI‹KÅ8R/ÐÑL´ZÏ!B,¯|&¤j±>êÆã̺_ë ³¼²ê[Ö&VgŠeV>Í h"!\Y_A'ÕŒk{3.ë͸s ( ˆAJ½"¸'Zý 9…HÈ«yåvf!p1Ê'Ƈ̕¼q0,.2Ök¸LV†C®Jzó¡‹Ý6á›ÙY‘>„Œ ðæÚV íç±ô"èÐ3È**6ît2ZÔ#É òç‘HœNþÁ÷ÇEÊ- ü|ß\@…˜ XóŠ òÌñÞô(–ø¿ç…) ©ˆ)â‘Ô…šZ$ü#BX9µ$G4ÃÝœW–a"eÎÁ¢(ß­â•þº™J9ô†wsaÈ”ïæMYbä•£rz\zl ðÊ%p‚h……rÊ……8Q¯Ô•%AÙŽõÞrÜ$@+ê•™¿V;÷Ñ­8ÂÛP*ØÎG«[FpëfÏëÂ6Ë#„m‡¼‹t<*#¯qÅ„9AŽ€Û eúÉKRœ µdWHË3qíbM~FC7§ã™VÒ'øEWˆóí_c¸]Ž„¬n’{ç‰Pû•¬Ä(7~T1Žx( Û‰q…W‚ºá‚‹“ð¢úÖ³û¥-C 5Mã7T¾NÌÅ+Ód¨³–Jó6bn9¢ðI£ô¶2˰ÝK²Za´œLŸRRRÛåÔxÄ¢/ò”(xÓåÛ¶¦0£@·bçíª¿ŸT˵u°Ö¯ÂE“œbMäªísY¤F*/vgÜÇ“'¸LÐFRÓò *³þWËjZ±ŒÕ ß+BçÏÝIø*oE¬ö±#!Ó¬ŸÄê8û¦š”ßFƒ6Ø©ÈV‹aÄÔ%Ú¶WiARÌzˆ #0þ¼i€ (Î ‡Ï4¿@Ú›÷2I Ü}jOfÐ}ŸÖ,ÒlPW{WÑò;*%µá$A’{´ç`/šàP@Ÿ"]Ì Ü¢@ÒœlJà.…Ç y²í¢dðb¢àh·Oˆ"ÊÊ¡K¢f„ºì†FÜ—€|< i™»° ³·§¥R²ÙÔ°åÙΞh¥Kk®”ßIŸÔN Nt"é J;à1Ò!%¡1'¤œ´)TN @yk°p v¤”äà¿mVú§ùêA^3Ùv´"xªS2…¸Ç?ÂCvc+.šFRJ\­ƒT»D×iѬؙ¯‰¶˜,¸Ér„v^Ä·øˆJ›Ê§a;-£gOS{8C3¬´‘Nr‘áÁš›”x]K‘Û)ô|jˆÍK6Æ >K®–]hnŽR”xXeÓŸ¬,2‚(Íiû‘L,`¦=^—º8–8 Q»)ôºY,ú žÆ÷JõS:F2:‰ÈeY íL!\; ïóJ˜6h!Ö)†ßã‰U$Or’öõ©÷µßZÐQI·Gܯ2€Bé*!ô?¢ïh…jH¤#}ªú5“ÂK¹,ÔG ”_³Dp/Ù GCØË6ÏÊ0L€ˆo›Ó±Ù+]²øSÆioÊJàNãˆØq¼hjŽ\%©¥@ÙB/Œ:}4Ìu ¾Qq`ëæn.‹W4S»¨ —§b‡Z*ƒfìªc1$ù¥ïû Í2K-¯¦—*»Ds3…zð(²+Zð¨—Öc¦¶v”ø=×X) óH>ÚN‰óbäe.Z³‘a*ÜǦmù²ˆå‹V„Òf¨ãõt*´Eš‚$† )I§dù¹´²ý ÜuKÊQ'i]—ÊDiPëÁj,F9î×R2Qà85ïN–€eLÌVh¨AÛ s P2ã(4=zot¦ì‰”<ƒeR¦RLPIÁz*Ž£d±“/zÊZå—Í\ú,9câ|¨Ï“èžð½AˆTTò&‘š nM~ñ;4Žäõ€aiöRà–ö”p§S–¹ÕÒ ¾DÅ2?ñF¨›áòt†U“º‚ Øìh[x.pM%¤þ$[øjÉù - 0#—|IP—/¾MN×!RžSÈCËŠ˜+½qÉN#ÃDùTÎüEOÙìˆPN¢0…í£Þ0´K /º»1I4ˆEKJ³R±\Ü •`BF¢O ঻FE«æþ?#µ%S'xI+ PîRÔVqeŽ{t‘·|sÀ¨}%¸@XÍ1£‹Âã²V]¼_ËÌÓÛ6دå \6N!€T.VVk*"®áµ£š"SgˆÙ$!„hÎ:C26`¤oéP´côÀúa ÝœÜ5Õžš”c¿Ø Ã#èŽÛlíˆXÝb¹¬-©@ŽÚ"a‚í)55ñŽ;A#§dt0"ù…F>]Ó`-=Dá ÷DDK° 3ýšéÓÔÔ…»F>‚lX4Ã_iF“d àò¿œ ìØ…Å.ª¦–‰Â„uKª+“”àR¡³óÑ…ÄSð;ÔÀꋜÀ „ÔvdbZÝBÏSC’†¶ø©®¨H 4ý=“rk„–)¤Å—A釢9w>_eu¡Óê9T͈——ÉX(h¢ÅÛZ>\!àe'€BÓ$°í²¡Ä)ºÃ Ä_¦[4H-–¦)IaW¢UÉΙ7±U¥%mÍ>©%Ëqf,[v|•LeLy?‘†"rJÝâK:¦öBßc)„¦WŽ"¾£ydµ(ºÒqDúÆj©~n¹úÅ™É0}¹„\¶KkXiªHKJ+GIÓØ.)c õ°‘0ˆFˆÔ+«ªüæRìÁ¼“†Íƒc¥ &À´I­ð™¥ ¹‚½®¶çeMÃ.7úhžZ*|]&¹ÊÔ¹Á‰Ð‰VއVI°fN-§äœÆØ%ëd”§Iœ1v¤[Œ«EE™”[ ÛœÐ@¨L ö0Õ’Öà†”ø©Ó:™uÿ³VzÉk@U e„¨´uøhÊ_L¿Ä0>²–iF,±zŠ7î§Q‘Ôp²Wæu¨©ç¯hË…Uí&•B&Š¥´ä›VÉÔlœ-•#¾3kñj!ˆ\壥šÕÒ OJ# ¿–»¦éM4„€i™N3 “NéàRE i[¯LrhQ–-½‰šþJÀ¥-ˆ ‘=FÊ[[äErD*ꣃHsÚP6ÍŘy­–禢èÑbõG£ÐâÒc^A\+lIrÓ|í€]u´<¸¶ñŸºpÊEØ(GËÎB„ ªÁ°ÀGAÎ…PÑkáÂd,HÒÀK‹¤éq-3ÖFé î3ݨD×ßQ år³¯–”ÄtušwUÂ3V¯†¤7^¤§Ó3j ÄðÁͤ7"‡ùò8Û¾(%$dág%ÙgÓ˜ËhŒ™ÚR2-t£YH™D¥æS˜™Æ„ÜPóÿb‘©W‡IÀ).œrTÛt/|z ÑL?!a†Úa‘Iò;cŒ‚Gœ®¼R5UàDnqd´ÚjÁ h­С\‹Ó!Q!’4ê£JNënšá‘¢tïxòˆ0j´)Ej/l*kHH_ê¥å¨±2Þè¾ ]æ@b5Õâù5gª-AÑ 'æXÎs›„¹1‰DD…ÎÒ,ü u]D-~@Ÿ’>–„Ê5ÿA’Y"aá]‚S°áƒ:2³”àRuŽÕC• m“\A!ÉñP£L«‰"sé׃Ä$wN²ùZÄi=‚ä7É©8ƒ‡b_D‘ÈÐÏžÈ|(µ÷¶Ç;,€Z³fŸvÛø2´4Ê/mjJ\AZ”e“…±š ˆEŸŽà3É­'b“2y"QeMÆ yIÑ‹Ú ¨lbFBêëX9¤r$RÝ Ïð $Ìy¬F­ö‡gD©øŠzc„ÛzLa£iz®…ÕÂ`d„H=ù5¬“à²Ã+Ó¶ÂÙ†MÛNŸKÊ*NZê1ÖS$º­VŠÂµS‰n Æœë`ð; fa(‰Ûw&Ä]*æ:FZHdê r$¦Ï±HCk z±*`f‚ ­£-\HëkDetÛO# YÆc=Ót­ãÆÝi,@i‚¤òÆO&$lÐP1Å)Qˆ‰F€å’ÏG¿Eãõ¡± ² (r,¡û”ع6µfC•˨©c“îä°!Î܈¡ñEϯ;SèXkrùí¤jÚ_ÜÀ‚NÀ¯-(P¥âó½ZE«_œiFƒÎòšVJ·Œ‹&¦Ê‘k–Ú>LÙ0¡ÌÄô“Œ.µ7òH2áÀUÑ<å½Ëcc„‹ŽÁ/Ù† ¥–ýTÙCÇ·D”ŠGXEgoXâ2cHÝVÅZZŒ›"°¹±zšÔ¯5üÚfˆ sQ†<ìdˆ_ƒ¶>ZQñk0Ëå||{ƪT÷_â;G:S7anû/`•‚_ò>Z…ká:¢0._–1VB^†îÏ•æšÞéKVœáŸãX¸å£sÑ‹ÔÓC‚0AVçx’}äpiï•Õb2o©ÖÄ~\=áBG$^qÀüj9ÊÏœ”DG¢ð›®quà.¾¶*Øp8Kß{OôÆp”‹9`uqú(+Ø#<-ˆè2šFè-yšä&•.{P(¤0¦ N ޝ° F†Z yŒÒ(Ø– ã'W‰âp@är²ʱé‚Ç}B!¸ EškyPqr`¢›$ÒD(Š­›ÅQª5ºé 4…Ùk+­å±…bÙ‰–çêkQɯqÉ\¼&‡CôÀõ}ý1mD!D>*1 .lOp1Mô£Aýs´ÿµ9åìÿœ¤sÙxΕˆ@#äÐ$BäºsÄ1mèFi´$ƒË6Á(¡“NurR u INÒ›g.I'§¯çV¦F=VÒG O'*ŒO‹¶ÃÒý‘Dc 'R2e—qL© E¤ûZfÓÄiÀ°šVñD¯Å{›êx$ïÌOd«É·íj`~MAb5õäU'^_Ö­‹ÛJ«aZÌÒÇ«‘ˆ´Â T$ñ5Mªœ%E˜¡á}¤ÝöJ{¦cñF é:ÙtéêcuR7L“æœû.çR ¼p[ÍTˆKe©PªâèÔ^¡;´j­åk´î#$¶M²‚Vc0>ÀÒý‚ø Íê ê ßì¡P[ÀeNZÛ©U¦D*Ù•ï"|¡ÐÁ¯y#m=rbuŒ©-fU&Ð «\` ;bˆçq)\£Ë¡%*›Ç~Í xeOÉî¢n–ÍóEü«xì£ÁFÀbˆpëÛµ@±ñ5§š±Ö3•Š4à!Äï™U×ðP:íh„æ9ÍPhMˆǘáO@— ºrUáEzø ž åbVb¨CÔŽó3¶9 «ùVpM¼òo´Â»ú yœ™Ôsë¿÷uf"Ñ"ºÓ–Fó$@$hÛxó”8ç:ü3Ä·nñ]yˆ±‚¡Öqf°Ÿ¬OÚJr…{΀|H\ µxbëHôeÈ=ù*š@ÑΠͯ‡.^Wq€¤‹Ñ§¶~JàŸJ¼Dë@·Å[—B*é‚ üf3¦M4å“+?ìpŒ †P G?4'G¤ÚDŒÈ-ž Bö7áõddù2‰¬/û³©%Œ¨<Ƀ L†0Øb=A—]¨eÌñ±ÁÙ¤|Oý¦8 Î p‹ÕÍx¾€#üô/í3mù²¬d|af!S‡òhélú¹IMèóå‘}ª€ß=Í!»TÄUWx¤¸3S4X´ŠÚ”c‚ÅPè´Ò]èOGŽ?©ï^ðÇøî+I(œ\¼É7½ÈšHqÀc9Ï¥ˆE}Z¢B–îp"Z iŸŸeï¶1L÷`*@qÆzæ— O¿çbÞWO‘²/]CM.˰”äÀr°…ª.JÅ…æîÊ&H­óQI“±xæ= Ÿ€OñQ ­íŽ+…ô­"ƒ\Œ„]žë‚ÿEƒ ïjÑ´Ñ ÒÄ;”—|Þ“o4¤Þ.Qwü¢ -ÇKý>ýÖ[¡Qˆìò}UX!Š@Pvñ(~Óšà‰TC†Ì¢!àxD0Õ!«¦#‘ä‹W/É)¤Ð ’¡á7‹ò ´ª u\syÒú4§C1ÜZLÈp=éÄ/F¥Vš(ôÍAç .ãp:ÛH×p€ •·€á×hѼC¹ú¦ˆNÇx‡ ňÅGq&obˆÎÄ–E‹êè÷jPÊ~¥… Ô-«@  ¼AÝRÛèWnäf7nqS§›< ¹»k(] ™¯*tz#2*3tÝîÂXy­Y†(¤¾Ë9MÚ¦+êŠèö<‹apÉ×]ºÃy÷ƒ…̪³~æÅüZÀ`Ñ)}}Àêv„˜˜WÊñ%›Ö¯ƒ0S"·ÑYZðftiôÅ!â{d!ñ­êX™ƒƒ–øç– >ÁÆ+ÈwËÊ#E™¡âN"¸‹ãôko¨£×y×<ƒ'?ÒÁ‡G¿XÎs?âhvu´»øâ’:Ñ\[šîö²˜ñyðÏ`ɹd‘‘ÅáP$õbE#År;úår9l¯Ö˜vÝÔN0úÁŸÁ<©ª> /Pt@ovºVÑóç øyàª›ÔÆæl§ˆÈ*ÕxǃDä„›«¡àÇIå;Úw@Ô¼’eqJʈƒ1Å:$O¦ Û¹óÈ8äŒuÎ'l)Œ&†Œ"Þ¡A§ŒÄ©Ÿ…'±#tJuN3”£ó“Å…P>z‘L)Šs€s„§öqY ɃIeP¼U­*Of*R´‰.*A>–­>¦š„ èÃÉwµVJ𛊜28Ñe6äûÙâ“:j¬ñªe)à©Ñ”z›ªNI.6_ÁOÛˆÕÉ­}òV‘=@T”,»0“4NÐ& F ówÿúÂ(Ñc™p%è4òú§¥(¤6¦q”(<¿¯9“Xýé4'?aŸ ••§VŠÏ‚ZrCî%»ÌÜ¢xJ#^%BðÇ+éA¿Ö¡Ñ•’QÌ#@T= !½²>¡Bõ•À±úXc5yU-w±Õ~M$b5RŸt–£Žw¨t¢›tÅ¢Ûí5Ë©™gà z©žI_¡ö !†ÏŒŒÑ̪h‘©ˆ“Q!GáX >ZN6uhËÅq[BºÞŸ ã2BÚâ!—oÚfèµ¾}†(ÆÇÁó¯jã]»f f¤"2t{ ýh'ÙÇØ7£åtKBZÞ ’×òû¡…b ˆ3$Ámhoƒ£ÑÜ\1\µ+ÛѰ؊@Ú‚ïÒ´™¯ɼlCG|/~¼U™)ÉÇ$ƒˆp, Ýi¥«siW£«€Ü{Hܱvšl¸Ÿ-l‰ÊºQEõQ¤hçBHåV­}$—°6†¡K6è ¥/†=Í´&¦Ñ„p.ú®Ê+½¢V RH VÇW”…ü„P'(sÌŽwaó[[¨h߈ÑìŒiƒZ×.HO²ÐÁÁðom`ÊÞ¥ÑÛ`+‡Q‰qæ”U‰²v/ÍEÛ\dP·‚Ô@CCqrw÷¡A§”E+û0L¢^?‚CK噆ߡ¼Š7„µˆu&cu‰ÖÒñü$¥,¹¡ T$H ýó 1zúîT¥.A'h¡‡;8ŽlТ¥FË_|Ñ*qTµU"ö‰1äûœøyò ±ÙÑô.ŠÓH¶_#Zº«‡ôX 蘒Ù;¼M×­ðLÚš¼«€5 #É€>V‘ô² CL¨¿Hð6b±\0”F»—Ì@´R&}ý˜¬â˜‡n ÞG)gC ­d èÄ‹4H–•Ûã\rÚ¼Eö” %6F~ßN‘MÔqýNpiÊ¥"[o°aqOå Ð -Å¢Mµð §©Y¼«º¹ë\BªÌ2O{¡i'úÝY™u¬6š­Ì/ á.ÍeТ¥xÇ¥…b ­’¬®Íþë³Øž´üq¯ÝÊvÿðÑ›WüÓží‹ù2qÌü1ø·¡c«Ý3Þ|]]wºµòp` kH¸tü¿—Õ§~ÒezñzÖðôå§’×±ýGüøˆ7¯Ú¿u|è’·×ðÞž&vË}ÃjçÓ†ïs^Á÷a|ðÜîKÚ:ûߟ©vÆ^È®ÉÉêç™»¶ì%¼nH ží2÷C¶ûQÏ-›o¨aõŸïl=ó¶:õÞ[—mY6«ÿâ¼äû»Ÿ­ŽZV4Õ_šSÖ䊿U¿÷_ýÂå7³úmÇš…"±x®¾ÛgC¦w›Çê‡í,]ýëvEI¯¯?uaÖ/÷ªö_þþêËúypüp½§Ï†ÓnÙŒí€ÞÀ³¤ãæ s¼µL½wôÄuþ_["=á=äß¶w®j³l3Î úGúÊùÀóØ®œ?<·÷ÐK›"Žwaõ³› ß:Vñ é ôù÷޲|~ê2ú–WÖ"¡¤/<'ÛG:¼=µyJe Þ‡öAÎáÆ ü5çô9yÙ“ùúžŽ ¦8äèÜðÒñîÁ/¶â|a\pò-ér+ûAþ¶ûº¼Óó«÷%=ëN—=rÕÑ&J?àyymê/ÐôÆý¡Ëþê/(/ð¼”w¤“'êûûu½OELUt•í@¿0? êÈ…lÏ!÷`¯$=ªæýaöòtû%G~˜v ôÀ°[¨Wk»o¸áP´;8oþ¢=”ôA»#í?Ú™£õç^Ø~9¶óÃqƒ~Kzã}?Ù¶ßßÑÉù¡]—òZ_ûô­§>Œí¢žƒ=–tÃùzö¯¿zÉ“ÿöèƒz!çóD{ ÏI>š|F90ü(Œ õôH>‡r |ž.|ò_N>øåü€Ž@7SopíU?\¸›Õ¯K¿­æ¥T§=™8äÎkR¶)ù’ròkð Æ¿£|\üùô½g/PvÛô·@?Ù¼ÏãøAÿ`\Ǻ_›óÃíÊ®H:âø€>àwA®¡ùŸ:›xÇðshßQM\x pŽ¡· ž¡ïY:LÑž“×(¿€7Œ¿(ÿàg‚…ç`þø¯!‡ÈG £!¿`ðwg€üƒÞ¡ž€?:ÖvyìÉî‹rºÒ¸ƒM^˜æð_h÷AnAOažæ¼å8 Ô/°CÒŽ> »ýÈ÷Lÿò„øC>ôvàpÐ_i¿Ðn€~Hyzîúõþ!×ÎV~øòrô7ý«ÔGìämàÉ74©@ýrøixðèø1  ÈØqàðùÂÒ¼~ k}AþÌçÀ¯ñ Ò͘/ŒõÛhÆ¿ÿ‘knذe’kÐwÐSCnP ?x^ê=òSÚS÷âó / ßÿ‘ž€÷à=¡¾KþcœòózbêŒì©ä›iÁï˜öδ£ˆ“%]¡_à<Àƒœ_ƒyÝ \gâ,ä#úGwÛ¾Ã~F|câY3ŽÃ8ü9Ć¿3ñ*ú Óï@Üý@\"ñ ÎßÀ¨Ÿ †½Çù®X~}÷Å‹‘0?ŸÀÏ7âßñ Ìô»WÀøM`òߌ'ÊO^öhÊeÊŽ]øÈÂÇÖ8âĽ` Ü‹öü!èCVðÙQ×\„Ï#ÞƒxôØŒ[%¿¡}¤»lí°Ä/¦=@}5í8ÐÃÄa '¦ývíë3Û²/@na\ˆß {tA}3ãÓŽ¸ å\Ž«á¹Y—zîþEß´ë`g þ;âNxè÷aþò¾¿˜yð õÝÀ× Ÿ¦]3åí÷€ÿqøQ#Qÿís=‡>é ãA94ü>Òä`*&=äŒó =Dgè3´‡úiôgâÀ%ˆÛÀÞ“ý˜òŒt¾~„qA?†=À<†á/Qþ ~švÍÌ¡Ýy—ýàøŒ<ö+ï›~õİ#ø~ðÆ„EgSy /È—A¾ËÀa”úmÚQ•ŸÒÛÁùËk´ë0ƒž•ßö¿aæV{ñE§¢îúž½ÖññumZ±ºÄ›ÿø{«Üwbõ¯m?`µóž¥Ýñºpeê»sK>y–5ÜðÖš÷~ù«™µ,¯ v)Ûyí‡ûJ²Ç°­¼Óúö³¥¬öÙ£“–u\ÎvÎØ0?þëul×þYo½çg5£-èþô4V•žúÚ¨™ƒXõÜnÏ>ÜÀj:—eŸ¿ŒíünDÁò±ÙÎ×ã×õ½ðR¶mÚõž©O¬`µ¹{‚åí-¹üêï/¦Þ`Û“ï;Ýñü Ø®émçFG]Âvõiúje»á¬öÁ>™Ÿ.*eÛºµ¿ÿ-I¬nà±÷;žšÉ6^òf×?¿–ÕžûLâÜÞl‹¯Ç™üO³ªIŇï—ÁjÚŒlX»•Õœ›8{ÎãMXÕO—/õE>Ïvvf1 ½nd;[Ö}²=Ë1~óýʦ=5eñRVßaÎÆA‘»×»V¾r뚌jV½ñËÅËOœfáÓÏ­žÝã#¶ãdÄ9O oÁ¶ÖûÞœôò_¬6oöþEãf;FÍû«õß³š£jžÓ—…?~²÷Å£ßd»†öX7äÌb¶ëL³÷×–°ês†•?ô«Íî×ó‡WÎaµ½¾zj{/Mú™ã«y¨ö’îoß¶Ï8òqß³³]-Þ;jØûlW¯))jÚ²ðŽá½—ÍXɪ“ë†ëžà—êó¬ùíþvÍW\þ&ÛšûÆÄ3Íg5ë}üå ÇYxþw¹·Ïz…U¹ö­¿S_fÛV½Ÿ4¬’Õ¾}*óëK®dB廟Õ]9fþ‹ÿåOÝ¢CÞú¦?«^úú¾)Ífápr׌²³¬ú¬ú‘?²ê´ñ¾n7bÛžžt4¥ãlãÍ«7Ç?:€U¶üõÀ Åß±÷}sÁc}Ƴڧnýþþ;d[Ž´ÞÞtýb¶ù‹ûެȶ¾tÆO쮊žÅ·²èØîÒª¬Ï„>zÕˆ[’cëçnØ|¼ÿRV½©¾m‡…µlS‹'J¯zàípYë>3ÖÇ·`á‹â;û×öjâ…Ž .g5GóÞèRdªßyð—ì,|lÓkzÝÖè8{þ‰¡wµÛœü)Ûy~C×kŠ2Ù¦g6¶z÷í7Ùæ¯Ÿ0àºél×[Cý-Nå±MW¥3ô¦ïÙŽé£&¿añÿöÊ®EMÿaU%‘ß}½þ¥Fï76߯ú­.ióäÆˆõág.zð«O§Z÷ß8Ýt…§yøÁìWvôX{åÿ÷ïÛ[<úðÍ5lcÔ»OþùbføÅæÝÒvPxáµ/¤&n~±ðº)Óž8ɦ”5íýî÷²m·Oøàº¶Â;~í×õ¹mÃËÎŽ>§uû}áê¯æïo:ãg¶æ‹ž¿¶¬ïΪö‚þÓO³q½FoÔÐ"\ÓýÀ°®M¾ ×^ÞªýUçN Nê´ã–¿g²{æö=5þ§äð[U+Wf<ýzxÍõZŒ·'+ù(~ú¢qóØÖ¯Î.ŽÍdáWŸÝß>ò¯{mS›ÎçýY~¬Õ?í×u˜À¶ú«&ÕŸ^¹uæƒÓ®¾'¼zÕ?WŒìºŸmîúmæ}S>o}÷¬sîÊÖ,-\s£g{üéûÚÞ{Çdöpÿcz~4‘m ¾ùóí_`sWTÆWEZôØÞæúò»ÃO5o¹qͺVá§ìuç“é©lõÏËËŸ˜Þ÷¯Rrn6«þ}ÑùßFœ¯úêô§g~Ížì^òÆ• &±åûÉ•áw’/a—Ì®f5{&O¶ì öÂ-¿v>ïÔ]áÃwÉïòTø­["ï=²°]¸nô5ë{^>m›tsÆæìÔðCƒo½µ­ÿ{<³¬Ë'ž*¶áÖm¯z'üJþu>šÖ‡½øÍØp¿ãýXeÄ ØÌßÿ o:úÞUþ¿b•éKšþsYˆ½ZY¼{ä‘ì…Íç߻崇m¬Úp¨æþØæÑ³S"º¬c›¦õzc{V‰e—>;3sÖaöxòEÝݓݓqøóïÝÀ^ü{ߊƒeGXe×Û¯³ÍSlãÿñŸÇ«Ã÷ íiѼAá5—wù×ã’Ùò?öŸøÑL¶áÅ&½yîelÛÇ7}×îþálí«wýÐæç·Øº?/ =~ÛKlë}á~¶”³- OþgVåôðÊÛž»`øE¬ºÇõ5W7|Âúþ”4:çÇh¶¢¤Ã3Wv}€mº8oò’/³Õ#þ5w݉$VxfA\`Uk¶(£Ï²›¶Ïc5ƒ½¬äËvSÓƒ­Yæe;Kó>>ôð-lÕĺ·Ö>ùCxÆïŸÜöþ‘eìáÔa/o,ÚÆj6dß_±™Ý·ýæ=»Ç g›^ìöÅQØŽšƒ]Ó>þšU^ôôØ)?°Í·]¼dÕ–ž,Ü;ÿÆÓ_&±ê{úì.7¶Ñû¯¾vôõO aÕsfìÙæy”UeÖä>T²‹í¶ñ±’gÙö7% ëÓÀ6ç9}së³>¿öäðŒQKf±%»Þ6£¾ÕLøC^Æaöè²ÖÿIËcÜ0÷úæíXÕøU âúv /ß•|tSÓÕ,<øž›Ž]Ü"üüî{Þ]2ã[¶kÞ©éwüø3{骎C.yd 'þñáG¯ž¾ãPÿï§,»¼0*.{„…ÿ|êçÒo±WVŸö]º‚í·qÍÁ‹Ç±õùI¥×ŸÝÁ&_4ã­ï}Àj¾{¢òÌò+ؼ_δ¨¹çîÆî7Ú~#ãa•‰k«[mèÏ*Xpfð×{XUô=›ºmþÍò¿my\Ûé]°þíÓá­óO}xJvÏàS,9N9<·ãϬ*mÂãgùý5ÝCÓŸïX÷ehäú8¶é½g&U'd‡—ÇT óîzÕ¼ºüã7î=ÕmsüÒ’ûÙÎ>­÷ý™‘Âê6ÝÚòå3Ù–ì[Îéó6ÛÖÿ×w>~öV6§Ç_[Ï{è«ñOÊÊ/JY͈ß6œØÅªÎŒøÍñ$¶­òíWOvØÄjÓžèâO?ËjÖ¦îô̬nη›÷Õ±‰Cî›ýÇù÷±Úú»nKjÞ‹m~·øÔ3÷Nbu“¯êõÂÎ"öôТêµÛ¿›×[N–.-y¿?«¿ìØÊÉËØ¶hß;wŽÜËêïžôûOÿŸÛ3¯·©¯Ÿ}v «oö防÷ÿÏãý¿ö¿1uç?…QW²†{\5æß_°G²¦ÿgÒþÙ®ìù¿÷{ª«é×´gúmlóeýïÎП5$Æí]·2ƒUUŒ.yhUŽ…W½7°f+«-ö?pð¡-9ø«üÍ~GØkuOÖå¿_Íê®ù'ò£k›:®ëþúr“®I¬æ–µ™3žªûßÏϾ¼xü5ئõÃ>]5ŒÕÞÿXûÙ·±škgUeÓãÛuòíó“_°æ?ä¦noÏv¼Ôìž§¾¼›ÕT¾ŠŸy.{íE%dÛRʧ&vm¶ˆoýè‘ElÓΕ¯Ýí}‰íìúícÇf;þ3¤&£¼Û–óp«¿èĶVß¼õçÝluî¬Àún†—®Š<8pÛñö·{~ûö¶õ¼+Û¾hû_ïÅvyîYôd‹>«Þßaÿˬö³¢#F³]/%<Üjt2«Úîàó’ØŽÞ_‡wõ|àÿü|Ý—Ñ#Ž]=›m²Øúõ½Û×f{ÿëzÇé_{§C;V¿bö¼AKY§ÉÎÇ®±šø•_Tͺ“ÕÌý}즹ﰚæSþýÝkÍþçóußtÛ˜ølVÿ‹?sÈ/ß³†Á éÏÅvüåŠ[n‰÷áz÷Üy_¬\jÅåç³»šõø‰ín·7õýeϰ=ùç_?É·•5Tݳy5«ÿõ®¾ß Œï5|ßþ©Ó±½ú/»xÊYƒ×óá±³GXÃÁySëÆŽd»£ß¶þ¬í½øŸSk§ž“í6­öÙ†ã¬>+óLÍ»¬þªºKÿêYÁŽ,ùuÌ<|¾þÞ7:Ýók¸¹ëóÇNRíÜ}¸¸-γ!7ãúž…w°Ý›÷ŒÜÓvkxäÊá…KÿVó‡÷²cR®°âÚÞá囯§±†G'l:èc #¦s²¢Ç‹íÈûHß-íߘ:!Ç t<ðÒ»·n.Vt[P¿uÌ3Š.²ß†qçLÚ”ZÂêç\üêª_e óç¼°íý‰8¤ÌKòé(éã—üÀyÂø$]ëžL]5ù·8x¯~ÄžUÏ=„|¯ûê»¶÷Õ(ù‘|€~Íþa\H‡îxzà üŸ—ý€\Àx. oõ_z±KÞíH7x¿a\Õ}×^4 é„|„ëÏ —.¹h k¸"pâžæ×a»{é·eÝçWãü‘¯R.Mú¡\Êv‘Nr~0.“?@ï†ÐœßÇ&`0ŽÆÞ:Ãüa¼¨_Ð.Œoƒ§¶áöùª]Ð?Ioäçìî=Fc»0߆®SN¼ûQ?5 #´üy”úfê3òôMÊ\ƒÜ൤+èèêü•Ï›tßÑnÁ|@/ÞÐÎȯï±åôè[¿å—{ +}…ñ´RxúGœÏî” çÏ:®ìŒœÒì'è©ü ã©1sTËÉC•œHùÆþ`¾ O@wàƒ|õìˆü ý£×h‡¾hèPÙäqõ;Ðø9ïÄâ5‡>uêÈÈñÇ*¦ïvÌý«oôïÞTü?$ù€rkø  3ö/õÇ/å ø…ö^Ò ú7ýö~Úy5ü5â‰9y1kŸ˜Ìnù`lN]!ÒÃÔdžÞU XÄ×Ê€œß%}÷¬9ùÅ€ª ×€ý;ôy}{ý÷_¤äÆhÆr‰òz–6êƒh%¯rž@”[°»à_÷Àü@n †xþ‚Ý?$í‘CþÁ/ÀóÀC°×RN‘0>àŸ|ù ãÿô}4p ú©o(§†\šô…þð=°W&=à/ØA C÷O†õj•­ì¯1ôO€’8–ñ[„²ï&Nýcø/è Ø]Ó‚ü?ýA§OWtÊSväÆoú{°ïÀ?°#¦¿>Èç°}Ùʳœ·‰K`^ðýðѰ&n@ûöþÂ<Àï]>K<‡ã}•ôE{)ù‰t2pi÷?¹÷¯EO(y=vÈÄ©¨/ ×=îÞßñÍgÕûL¿ƒvUö ¸ã “ymðqØq è¯¯™¸yOö%c[—SxNÊ‹Â=’/ à/Ž€ÛÁ8í¶uÿóå™ý~ äâ à§Ñ.ÊÁƒº¶:6JÍpȃ´Çh?פ­zlòGÜíb;`G¤6ãôk†ßÇq]üG‡mŸ9ýžÄ…€ƒ ?#¸oâkÓÿ }@À.‚’ýâ}ÐSCï‘^ŽGzHú |J¼…ó2ë±V«½À‚??ôz›vøvâa÷¶­Îyw›å·“¾êð~C_%—òù"q)Úù>ŒãKÐÿþ1Ãøú(ê³éwP‡Ã¸Œ| ú;ßGÇ® ¦¯qØ?ôFÜצÂøp°¤ÎOÎcOç«;.?µÆ¡·÷ƒ<^;÷A¯o|sÜí-&°=˼CŸœü½òç ¿Ñ¿JûŒó»dØYÀ5fžù8ÍÐKÔhì‘‘OByú¦ç¯ä ìµ!÷}0òWÈ'°«`ßA¯å5ð퇴/€—‘G2æ‡|3óY2îlh÷d…o–²`A¯á¯ÔŒ[@ „öV¶‹öèøÛÈó!?@ ¿kâœ7致‹&GÜkèÑÞ‘§šxÙJ> ÿ×pñw)==½n‚猼ôgæÌø õÁˆ?ñ¾™Çy4ðrî’ä†É©÷ÍüÑ¿[t˜µîf…w$Ý`?¥¿À¼Ø#_gâ0Œ× .3q¦ò8ðäûŒ|Œ‰Ç1žû%õŸ3ý¬‘Ÿ@>J»ƒã’y¤à?#/fƨ¿àŽßã_ßš¸í?àj‰ p¼åQŸÏ¹âŸáélße×Þ;ò35®½ó.ÜûÞן©yA¼aàxð (¿RnM\nò Ú«|½gbô•'Y}ŸŸ«ù¶³í›§¼¾kuV±tyÒ SX·GÇC+ú²Ú®×_ùãGgXMrâ…¯ýëN¶£W櫟^Û–Õ\µfÅeW?̶œËÞºäµlkÏsZ8§”ÕOx¢×æŠñŽëê‹9÷Ž»YͰßüg»ObÛÞtxñxË^¼6Ô³Ü?œU·Z=ÿÔ/KYøJÏðº?ïf5ßÍxöÀo¥¬êÊs>þþ¦ýŽçÍñmÎ}ö‚ά6ë÷Å)ƒ/q̯¶ÇÌý{.a[šÌb-#+XuÇ}¿ù¢˜U=Úýós¾rŒwEë)ßÜ7¤ÛÓtÚ˜ì²ó­ÙýÂáªÛ¿gu½~ŸvÛ¿g8Ú¯½÷íždOùæŽï^fuŸÔn}Üuáu¡‹êßL¸€íxbúså! ßuûâçnd5ÿ™ÁÂSþÃ6ÝðaúÓ)ÙŽù˜ýÕGD­ÎÌ~ŽíZ›°²Y»?YMõ©gÿìÙ†mÛóÕ%õ}‡Õ¬TÕ¼ûó¬ÚŸöøÉ[Ž;ækÎÏlÏïæá¥ínnØÎ÷X“ª;–°×RÏNùf[¿yÒ¼6wmù_¿‡ŸÈ^µÿXÉÝlsÖ ó®JœË6í;ày7±ªÂ35‹¾ü_¿³MëÎø¾¹ä¶ýä%?>¿ÛÞ+ôÀ€®²C‚?t{£)«‹îzÿ³5ﱆ¨·/ßo1«»zü•é«~cU ?~íÅ%¬æûØëæd岪ŸÏ_˜ûe5k8½ÿï÷¬eu“¯{2¿ÞǪ{½ÚéxÚˆÿù¼ù{]Ӣ˳‹þÃ6/þñ¥É㺳šÎbû ÿ’íxqÎE'º¬aá?~ŸyúCV™è£ölËö³pÛ{lñ ?°m׎­izE4ÛÞ#xòÝ6 Ùk¡g»½Ýr«={Ö€¡Ñl[Ʀ&[¯nƶßPÿkþZVótî½_ÏÛÊj3Òîz0òÛÒë’דÇv<~ÿÆÜ‚«þhù‰À;Žë]ií®^ÝŠÕ¬ü}ñüÝYÕ¶‘%}¶g±º¸Qµˆ{ÉÑþžÛö¿÷Æ­–Ê-Ìì¾ü%¼Þã×9 ÔïóŽßÛÂÏöM¼0°~éOx ¿ïÝ\ÿ÷œ¾·o|ß2–ÜŒw—°}ÀÀRìgïϧ6=³pz>!ú£S]‡`{Ð܇öá>¾ÏË~à>ô‡ã€÷`œF?pÇײxþàe+¿\¾Ç ýÁ}œ¯lÆ¿Ï÷ÜW+Ú–áµù¼ÉxúAúIºïíä9ñû¯N:â¼ º™í7F?ìÇ ´ƒó7ÞCzt4Ûƒ÷qž OFŽ÷A>Mù’tB>ÜÏ™í™|sðøö¿øg\7FgÇø¡ûÞÑ/¬~ìÇãÞ¿¸ø=OyWÇ}SÍqã}Cð9yã1Þ3û1õømÎÓ¤ëžS¯œˆÏªvꟗù¼Ù¯CŸï†žÁûf;&]ÐnI=2íž©çæ}ÓN˜ó~9ì«1Ó~â8±›8ÏóÛOÿ84ÛIg£=“þ¦Þ5ÖÙŸ©?H/SŽ¥}rÌÏà‹Éwsæ_Óþ:üÂù‹+¯]û—êï¾5S7[§èoØE‡œ›òrbØ5ìì–¤‹9®Æøê°çòýõÓI]½¾/ÛýÞ†už…ž];ÚwþK׳šõ#ÇþQw¿…w?~¤s&kxþÐýüÉùûK-'7Ûeá…U9ß…{ßãx¾á‚6-idU{F­ûìÄÛlÃÛ-Îí3}. Ÿ|£ÃÊà ÙöKºìŽ˜~ «Y×li7 çî?²7rP¶ó÷ö­?7ŽÕÿÞþŸ“wÜÄjjÿŒLìÙÕ|6¾óç-;±šŸ·8PÕ“Õ\Ÿ´á›M/³ï¿9ô`»¬jËÊWŽ~ЄízæMöéß5zoQ¯&7$³½íŠz9¥¯÷¥œóé~¶wÓ°ôcÃ*Ø÷úÞùãkmÙV]n\jáx®á/¼÷týÕU]lTUnk›Ô@)bÐjZ* ŠMðPÅ¶Æø€X0ü¤@%E’€‰&šíH¤hM QSCåo±Ò`h´MËÏî]º÷¶ËO +PcƒŠEâj”¡ óÍM¾“›Uß|šœ{f¾ùæ›9s_l;–“Òxà)¾àxÑðC›öûøÈ‹óìºö¦‹ùVøyß Æ/[ù•'òËÙmÍ« Õ«í{®kæóCЧgè#g+¯ðÖºbg+®¼³âÖü=÷Q2o¬…=ø;óQ¾â‡8¯cIá· L_Kå…m/ùú¢Çu±.ðC¼öKð­zÁW¬ÎÍêgXå]iÞTºW|©›ç¸ýá9yB>ÕæYõ&Xgž/æÍs¤}•9á¼êOï…ûÍ÷üû¾Ü÷tïFu\>)·xÉU?ÏÍ¡µOdÏèð>à <Õ÷é«÷´w‚ö—Å“çœê=Ò¼zgÆ¡»Í‘ÆK™G­&R1ûfɤ ¦'³åpëÊr3Ó¶ž>^eœ®/¾ûñ±¬ûèüË#«ö>`œ‡"{’sFŒóÈ}µ©¦"ã,žÞ²së릻2yå·OÞ2±ëÛwü6Nöæ_ß³Ý8׌ï¯[øÏþNùȬÂp¾‰–¦²OT¯±ÎÞŽKtŸ¿h š’¥5&~ ïž]ÇÖ™î‘Ðü¡¨qëú§-¸îÛŸëâ×’k}+ß{ý´1T²0ØŸ¿Ó½wª¾Úí_dܧËOÇÖ4ظø”ßÉ÷Œ‡¼|oå\+Ï¿ÔÃÂçx®¬êDg‹/ëÌúØÿŠ—®ž@¼ >|0?ÿXçï ^|ŸfÎÒáiÓõ‰êq6¹½ò•÷Mää穚Ôãœ(-yÂDçeÏ[ûÁUã”5ÏÝ癞DCmy¨Ó:÷m‰ðm»µÏSãîÏ8oz3N††«÷êÙ“STðûv“/zïëe­jã9gÖ­Ø7Ñ÷Ë}»¬½û¦Æ{çÞØ²lÛ“¾ÿ†¬Ú;–†õìu%V.N½`â_}šéÞ5ª÷š_l|óÔÖª2×Ç>¯gá…ºßí¼÷LUó.ã æïp5|Ýíg{Ÿ™ªqÀѼR'â”'ó'=ÝÂÝ}3ÝWß=:¥yÏÀ å ë>>.s÷ê”…>ˆW>¯½üàä_|žR÷GóAXñC_T·o>Ì*Îí0^ÑÜÈøÎ,åÏ|Ç}Wþ<×8[s+¸º o@]Ö%^º7°·ÐgìÞÓÀÇ{9á9ã÷ÔOž~¯A~àÅï‚óh~á¥{Žö/ÿ/ø¿cí/úOp߬~`OcŸ@×€ÿ”öÞМ±?ï9®ï±giýð_ý_šžg×öÔýÖ9‘×1xpø¶ÿ«ýPKô­iJDu¶çÓ manifest.propertiesUT «÷ÁX­÷ÁXux õMËjÃ0D÷ú CÖ6’_’Ú$MVqZZÑýÅ\٢ѕ‘í€ûõ5u]ÎÌØÁ KÒBLx“äâ(êc^$§w“ä\Hf"8rÔ§—'Ò<À4èBÔ J°·Uge#‹ªª•´Rvе@Îâ4§Ÿ'H‹Œ³P¿@‰YèæWF$zŒÙÂcʺa¡/ŒÙËâýzÞÃu'ÙëFÞooÿŒjsžü‡ûF-83Îo•àG-JÕ^6ªà%gçàÇ@ÛöôõŸ·½ìÏ0šuDý{ŽýPK ªiJ.÷¬_‚R«  ¤chunker.modelUTVðÁXux õPKô­iJDu¶çÓ ¤ÉRmanifest.propertiesUT«÷ÁXux õPK¬éSapache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/chunker/detailedOutput.txt0100644 0000000 0000000 00000001034 14523004075 034133 0ustar00rootroot0000000 0000000 Evaluated 3 samples with 32 entities; found: 35 entities; correct: 28. TOTAL: precision: 80.00%; recall: 87.50%; F1: 83.58%. NP: precision: 90.00%; recall: 94.74%; F1: 92.31%. [target: 19; tp: 18; fp: 2] VP: precision: 75.00%; recall: 75.00%; F1: 75.00%. [target: 8; tp: 6; fp: 2] PP: precision: 57.14%; recall: 100.00%; F1: 72.73%. [target: 4; tp: 4; fp: 3] SBAR: precision: 0.00%; recall: 0.00%; F1: 0.00%. [target: 1; tp: 0; fp: 0] apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/chunker/output.txt0100644 0000000 0000000 00000002130 14523004075 032475 0ustar00rootroot0000000 0000000 Rockwell NNP B-NP I-NP International NNP I-NP I-NP Corp. NNP I-NP I-NP 's POS B-NP B-NP Tulsa NNP I-NP I-NP unit NN I-NP I-NP said VBD B-VP B-VP it PRP B-NP B-NP signed VBD B-VP B-VP a DT B-NP B-NP tentative JJ I-NP I-NP agreement NN I-NP I-NP extending VBG B-VP B-VP its PRP$ B-NP B-NP contract NN I-NP I-NP with IN B-PP B-PP Boeing NNP B-NP I-NP Co. NNP I-NP I-NP to TO B-VP B-PP provide VB I-VP I-VP structural JJ B-NP I-NP parts NNS I-NP I-NP for IN B-PP B-PP Boeing NNP B-NP I-NP 's POS B-NP B-NP 747 CD I-NP I-NP jetliners NNS I-NP I-NP . . O O Rockwell NNP B-NP I-NP said VBD B-VP B-VP the DT B-NP B-NP agreement NN I-NP I-NP calls VBZ B-VP B-VP for IN B-SBAR B-PP it PRP B-NP B-NP to TO B-VP B-PP supply VB I-VP I-VP 200 CD B-NP I-NP additional JJ I-NP B-NP so-called JJ I-NP I-NP shipsets NNS I-NP I-NP for IN B-PP B-PP the DT B-NP B-NP planes NNS I-NP I-NP . . O O United NNP B-NP I-NP 's POS B-NP B-NP directors NNS I-NP I-NP voted VBD B-VP B-VP themselves PRP B-NP B-NP , , O O and CC O O their PRP$ B-NP B-NP spouses NNS I-NP I-NP , , O O lifetime NN B-NP I-NP access NN I-NP I-NP to TO B-PP B-PP ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_chunker_test0100644 0000000 0000000 00000000157 14523004075 032774 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/chunker/test-insufficient.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/chunker/test-insufficient.tx0100644 0000000 0000000 00000000021 14523004075 034411 0ustar00rootroot0000000 0000000 Rockwell NNP B-NPapache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/chunker/test.txt0100644 0000000 0000000 00000002447 14523004075 032127 0ustar00rootroot0000000 0000000 Rockwell NNP B-NP International NNP I-NP Corp. NNP I-NP 's POS B-NP Tulsa NNP I-NP unit NN I-NP said VBD B-VP it PRP B-NP signed VBD B-VP a DT B-NP tentative JJ I-NP agreement NN I-NP extending VBG B-VP its PRP$ B-NP contract NN I-NP with IN B-PP Boeing NNP B-NP Co. NNP I-NP to TO B-VP provide VB I-VP structural JJ B-NP parts NNS I-NP for IN B-PP Boeing NNP B-NP 's POS B-NP 747 CD I-NP jetliners NNS I-NP . . O Rockwell NNP B-NP said VBD B-VP the DT B-NP agreement NN I-NP calls VBZ B-VP for IN B-SBAR it PRP B-NP to TO B-VP supply VB I-VP 200 CD B-NP additional JJ I-NP so-called JJ I-NP shipsets NNS I-NP for IN B-PP the DT B-NP planes NNS I-NP . . O These DT B-NP include VBP B-VP , , O among IN B-PP other JJ B-NP parts NNS I-NP , , O each DT B-NP jetliner NN I-NP 's POS B-NP two CD I-NP major JJ I-NP bulkheads NNS I-NP , , O a DT B-NP pressure NN I-NP floor NN I-NP , , O torque NN B-NP box NN I-NP , , O fixed VBN B-NP leading VBG I-NP edges NNS I-NP for IN B-PP the DT B-NP wings NNS I-NP and CC O an DT B-NP aft JJ I-NP keel NN I-NP beam NN I-NP . . O Under IN B-PP the DT B-NP existing VBG I-NP contract NN I-NP , , O Rockwell NNP B-NP said VBD B-VP , , O it PRP B-NP has VBZ B-VP already RB I-VP delivered VBN I-VP 793 CD B-NP of IN B-PP the DT B-NP shipsets NNS I-NP to TO B-PP Boeing NNP B-NP . . O apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/doccat/DoccatSample.txt0100644 0000000 0000000 00000774416 14523004075 033321 0ustar00rootroot0000000 0000000 pob Desde 1960 ela escreve e faz palestras pelo mundo inteiro sobre anjos , profecias , reencarnação , almas gêmeas , alquimia , cabala , psicologia espiritual e religiões . Adamo afirma a Francesca que vai levá - la para o Brasil se sua família resolver não voltar . São novidades boas , numa visão imediatista . A ADSB fica na Galeria Mário Heins , na Rua Dona Margarida , 405 , sala 27 , centro . Para o Secretário de Meio Ambiente , Alcebíades Terra , o plantio desta espécie na véspera do dia da árvore foi um marco , já que a mesma está em extinção na região . O terceiro crime aconteceu na Rua Professor Loureiro às 22 h 25 de sábado , próximo ao Beco do Guarany . Cobria de um simples atropelamento a uma greve ou crise . Seus olhos vendados representam sua imparcialidade em relação às aparências e aos bens materiais . Se sim , o que te impulsionou a ser candidata e qual será a prioridade em seu plano de governo ? O treinador deve fazer somente uma mudança em relação ao time que perdeu para o Botafogo , por 4 a 0 , no sábado passado . A maior surpresa pode ficar no ataque , já que Dodô não vem agradando e corre o risco de perder a posição para Artur . Esta instituição tem know - how e competência comprovados . Correu três anos seguidos a Maratona de Nova York . No último domingo , a cidade decretou estado de calamidade pública . É indispensável ainda que o candidato compareça para doar bem alimentado e , em se tratando das gestantes e lactantes , não é permitida a doação . " Essas pessoas estão nos grupo de risco por apresentarem o sistema imunológico mais fragilizado " , diz Eline . A minha natalidade veio com o caimento das folhas , no outono de 1969 . Sei como foi difícil encontrar patrocinadores que apostassem num grupo que estava começando . O melhor a fazer é evitar a introdução e isolar os animais doentes , sob boas condições de higiene e alimentação ; emprego de vacinação , utilizando apenas as de eficiência comprovada . 2010 - Espírita Família espiritual Afonso Moreira Júnior 30 . 10 . spa Pero está bien , los dirigentes justicialistas jamás ubicaron en el gobierno a un pariente . “ Gracias y adiós †son las palabras con las que el diario sensacionalista británico News of the World se despidió de sus lectores tras 168 años de historia y 8674 ediciones . Los hombres de 32 , 34 , 19 aÅ„os y el menor de 17 , todos de Río Tercero , fueron detenidos y alojados en la Comisaría local . Aguero agregó además que existe malestar de los médicos con el director del hospital Alberto García por sus actitudes hacia algunos profesionales , entre ellos el médico Luís Kaen , quien se desempeña como jefe de dos servicios en este nosocomio . Mientras Carlos Rovira se sacaba fotos con la Presidenta , su tropa rechazaba en la Legislatura cualquier intento de la oposición de avanzar con sus proyectos . El tribunal absolvió además a Enrique de la Torre ( exdirector de seguridad Internacional de la Cancillería argentina ) , Mauricio Musí ( exdirector de coordinación empresaria de la Cancillería ) , y María Teresa Cueto , exverificadora de la Aduana argentina . La conversación entre Julie y Marianne prosigue mientras tanto : @ * ¿ Sabes si lo han atrapado ya ? No viajar en ningún coche o automóvil con ningún hombre excepto su hermano o su padre . Los niveles de histamina permitidos en los productos pesqueros varían . El jefe comunal recordó numerosas figuras que pasaron por el Macció . " Esa información me causó risa " , comentó el mandatario y señaló que no eran más de 20 jóvenes los que protestaban . Durante el foro , Richardson aseguró que el asunto del contratista estadounidense se ha convertido en " el más peliagudo " que impide el acercamiento de ambos países en estos momentos y pidió su liberación " por motivos humanitarios " para seguir avanzando . Puerta vidrio repartido vaivén mas un paño . El directivo indicó que los usuarios de Facebook sabrán qué ven sus amigos en un momento dado . Las acciones del Grupo C comenzarán el jueves próximo en Arequipa , con el choque entre las selecciones de Paraguay y Costa Rica , seguido del partido estelar entre Brasil y Chile . Las mujeres tendrán nueva número 1 en el tenis La danesa avanzó a los cuartos de final del torneo de Beijing y desde el lunes estará en lo más alto del ranking , desplazando a la estadounidense Serena Williams . Al planeta esa guerra le costó millones de muertos . Sin embargo , la fórmula ahora empleada ya se ha usado antes . El envío de un oficial de enlace israelí al Comando de la OTAN en Nápoles es una indicación más de la vitalidad de nuestra cooperación , como lo fue la demostración de un avión AWACS de la OTAN en Israel . Del Sel afirmó que lo “ acompaña †el “ peronismo no kirchnerista †y sostuvo que “ han sido una definición muy clara †en su apoyo los recientes dichos de Reutemann , respecto de que no tiene “ nada que ver †con el oficialismo nacional . fra Le volume d ' affaires de l ' assureur bâlois a pour sa part augmenté de 24 , 3 % par rapport à 2008 pour s ' inscrire à 9 , 77 milliards . C ´ est à ce titre que l ´ épouse du président de la HAT va distribuer des jouets à tous les enfants de la grande ÃŽle . Le Prix Michel Houyvet clôturera les " belles " épreuves de l ' après - midi . Dans ces conditions , " pourquoi ne pas travailler jusqu ' à 70 ans , avec le droit de s ' arrêter plusieurs fois durant les 45 ans de carrière s ' interroge - t - il . Le jeune espoir belge Daan Van Gijseghem ( 21 ans , 16 matches , un but ) , libre , devrait être la première recrue des Dogues . A la soixantaine passée , Michel Pradier se donne encore un an ou deux à vivre aux États - Unis avant de rentrer en France . D ´ ici à 2050 , l ´ ONU estime que la consommation mondiale de viande et de produits laitiers devrait doubler . D ' autres ont été vus siphonnant de l ' essence d ' un camion - citerne abandonné . En cause : la gestion des données privées des utilisateurs , qui a déjà conduit Google à faire évoluer son service . Lire aussi : Areva et EDF peuvent - ils s ' accorder sur le nucléaire français ? 19 e CR 9 lui aussi tente de provoquer le penalty mais le Madrilène est contré à la régulière par Piqué . Le quatuor précité est encore en vacances et seul Antar Yahia s Â’ entraîne , mais sans garantie d Â’ être transféré dans un club à la limite de ses exigences . Le site internet du Wall Street Journal a annoncé mardi 3 août que le groupe français était entré en négociations serrées avec l ' Américain , qu ' il proposerait de racheter pour plus de 18 milliards de dollars . En cas de nul , il faudrait alors attendre le résultat de la confrontation entre le Paraguay et la Nouvelle - Zélande . Peau de jaguar , plumes de flamants roses ou encore carapace de tatou sont ainsi " recyclées " . Pour certains , ce fut là un coup de chance inespéré pour les Montréalais . Pour paramétrer ce moteur de décision , l & rsquo ; utilisateur métier joue sur deux tableaux . Au bout de deux années , jai décroché mon BTS Communication des Entreprises . Pour la patronne de ce salon de beauté londonien cest naturel et bio en fait . Des exposés sur les activités des commissions permanentes de l ' APN seront présentés lors de cette réunion » , indique un communiqué de presse rendu public , jeudi , par la chambre basse du Parlement . ita La Champions è importante perchè dà subito l ' opportunità per dimostrare sul campo che non siamo la squadra che abbiamo visto in queste due giornate " . Al tempo stesso è stata approvata una manovra correttiva da 25 miliardi per il 2011 - 2012 per riportare il deficit sotto il 3 % del Pil ed evitare che il debito sovrano italiano entri nell ' occhio del ciclone della speculazione dopo quello greco . Nube , Ue vuole unificare gli spazi aerei nazionali - Yahoo ! Le sinergie della joint - venture " consentiranno ai due operatori di rafforzare la presenza sul mercato e offrire ai clienti una gamma di prodotti e servizi sempre più ampia " . Cerco solo di far capire ai miei ragazzi quello che voglio vedere in campo " . Disagi limitati per aerei e treni . Del resto è cosa nota che se il corpo umano necessita di un apporto nutritivo di due milioni di calorie quotidiane , quello di un esperto di opere multimediali iperattive abbisogna invece di dodici milioni . Jacopo , che nel frattempo si è stabilito a Villa Castelli , intuisce che la presenza di Kempes ha qualcosa di losco . Su proposta del neo leader è stata votata anche la nuova segreteria che assegna due membri alla mozione Rinaldini - Moccia ( vittoriosa a Brescia , ma in minoranza a livello nazionale ) e altrettanti alla mozione Epifani . Allora , concludendo , oggi si dovrebbe parlare piuttosto di una battaglia per la libertà di disinformazione . Lo stop - and - go cittadino è una delle principali cause del consumo di carburante , tanto che è praticamente obbligatorio spegnere il motore in caso di sosta prolungata : in un tragitto cittadino si tagliano i consumi anche del 30 % . Con lei una ventina di altri passeggeri e pochissime donne . Lo annuncia la soprintendente al Polo Museale Rossella Vodret , che sottolinea come il successo sia andato anche oltre le piu ' rosee aspettative . " Abbiamo voluto abbinare alla magnificenza del Palazzo Reale la delicatezza della grande tradizione poetica e musicale italiana , in un omaggio alla donna paragonata alla meraviglie dei giardini reali " , ha spiegato Longhini . Francis era il coach di Johnson ai tempi delle Olimpiadi di Seul 1988 , dove l ’ atleta fu privato della medaglia d ’ oro dei 100 e del record del mondo dopo essere risultato positivo agli steroidi . Al buon Nicola Lapi , invece , il compito di selezionare la squadra dei politici . La Toscana , il Piemonte e la Liguria andranno in piazza il prossimo 2 luglio , tranne che a La Spezia dove lo sciopero Cgil è in corso . Nuova riunione di redazione aperta e visita , dalle 10 . 30 , dei ragazzi delle scuole medie e delle superiori . Un vero minestrone . Sanofi : opa su Genzyme costerebbe 21 mld - Yahoo ! ita Su questo punta Berlino che , populisticamente , dice : interverremo solo all ' ultimo minuto , per evitare che la mano tesa troppo presto possa essere la scusa che Atene sfrutta per allentare la presa sui problemi di bilancio . Continua Carpineta : " La verita ' , anche oggi , apparira ' meno roboante ma e ' altra da quanto annunciato , almeno nella parte che doverosamente completa la notizia . Si preoccupò molto , non per gli effetti della nube che rishiava di atterrare gli aerei di quasi tutta Europa , ma per il nuovo fieno nella cascina della fama di jettatore che lo accompagnava fin dal suo primo mandato presidenziale . A una settimana dall & rsquo ; impresa in terra canadese , Razzoli ammette che " sto realizzando sempre di più quello che ho combinato ma ho ancora un & rsquo ; ultima gara e oggi non posso festeggiare tanto . Il primo e ' che la Fiat e ' un valore per l ' Italia . « Naomi me li mostrò e si lamentò perché non erano abbastanza lucenti » , ha detto White . La conferma à ¨ arrivata alla presentazione dell ' accordo Piaggio - Enel per mettere a punto una comune strategia sulla mobilità elettrica . " Sono naturalmente contento di correre a Laguna , una pista che per me è assolutamente speciale , dura ma bellissima , dove ho vinto il mio primo GP " , ha detto il pilota americano , che ha vinto sul circuito californiano nel 2005 e nel 2006 . Interrogativi che lo stesso Real si sta ponendo da giorni , soprattutto dopo la sconfitta per 1 - 0 sul campo del Lione nell ' andata degli ottavi di finale di Champions League . Ne ha dato notizia Al Jazeera . E il fatto di averlo sfiorato a tal punto da vederlo svanire sulla linea di arrivo non consola , anzi , aggiunge sale sulla ferita . Sono emozioni profonde , che rimarranno per sempre » . I miei assistiti , però , non chiedono mai di andarsene . Ma l ’ incantesimo si è rotto con la Sampdoria . ' Il peggio della tempesta ' e ' passato , davanti ' abbiamo giorni piu ' splendenti ' , ha aggiunto . Informazioni più precise sulle modalità di effettuazione degli abbruciamenti sono contenute nel Regolamento forestale e proprio in questi giorni sono entrate in vigore alcune modifiche che riguardano questi ambiti . I due candidati alla presidenza dell ' Abi sono Giuseppe Mussari , presidente della banca Mps , e , appunto , Corrado Faissola , attuale presidente dei banchieri , che potrebbe pero ' svolgere ancora un mandato di due anni . Una sorta di " vendetta " di Lotito . Se c ' è una vittima certa , nell ' esperienza della Deepwater , è proprio quella norma che limita la responsabilità civile delle compagnie petrolifere alla ridicola cifra di 75 milioni di euro . Secondo le prime informazioni diffuse dal Segretariato per la difesa nazionale ( Sedena ) , la caduta del Bell 412 è avvenuta nella notte tra venerdì e sabato nei pressi della località di San Miguel del Alto , nello stato di Durango . fra Si initialement l ' équipe sera bâtie pour le plaisir de jouer au water - polo , Christophe Jomphe ne cache pas ses ambitions . Il avait d ' ailleurs effacé le tatouage le rattachant à ce gang pour le remplacer par une croix . À l ' issue des qualifications , les deux premiers de chaque groupe seront qualifiés pour les quarts de finale . D ' aprà ¨ s la police , la petite fille portait des traces de coups de couteau au sternum et aux yeux . " La fillette serait morte six heures auparavant " , a prà © cisà © le responsable de l ' enquête au quotidien Le Parisien . Risque Tout , auteur de brillantes victoires sur des parcours plus longs , pourrait vaincre sur le tracé des 2 175 mètres . La Commission européenne a annoncé mardi son intention de déclencher une procédure d ' infraction en justice contre la France pour violation du droit européen dans l ' affaire des renvois de roms bulgares et roumains chez eux . Finalement , câ € ™ est le mollet droit de William Gallas qui pourrait poser problà ¨ me . Facebook , lieu public ou lieu privé ? Il est tombé 139 millimètres de pluie en août , alors que la moyenne est de 83 millimètres » , a indiqué lundi René Héroux , météorologue chez Environnement Canada . Vous pourrez y goûter de délicieux plats confectionnés avec des produits issus de l ´ agriculture biologique et provenant , en majorité , des jardins de la hacienda . Ces mots anglais utilisés tous les jours n & rsquo ; avaient jusqu & rsquo ; à présent pas d & rsquo ; équivalents en français . Il lance un avertissement contre toute attaque future et insiste sur la nécessité de sen tenir aux accords darmistice . RFF estime d ' ailleurs que les péages pourraient baisser si l ' entretien des voies était moins onéreux . Et évidemment , si les réformes au Maroc saccélèrent , lUnion doit être au rendez - vous , et notre appui européen à la hauteur du défi . Jeremy Morlock , originaire de Wasilla ( Alaska , nord - ouest ) est le premier d ' un groupe de cinq soldats à être présenté devant la justice . Devant la faible quantité de produit interdit retrouvé dans les urines de Contador , et puisque l ' UCI a choisi de ne pas trancher définitivement son cas pour le moment , personne ne se mouille . La région Laval - Laurentides mène pour le nombre de préavis avec 233 . Corey Pavin et Lanny Wadkins viennent d Â’ ajouter leur nom à la liste déjà impressionnante des golfeurs ayant confirmé leur participation au premier Championnat de Montréal , du 2 au 4 juillet prochain , au club Fontainebleau de Blainville . Novlangue 1984 Haliburton et donc Dick Cheyney ont du acheter " short " . TAM était depuis 2003 le leader aérien du Brésil , la plus grosse économie d ' Amérique latine , avec une part de marché de 43 % et 44 destinations intérieures . pob O Cardeal confessa que nos últimos anos , muitas vezes foi obrigado a encerrar mais cedo visitas às paroquias localizadas em regiões de risco na cidade . Também estamos organizando com o dr . Resta agora ao atual vice - campeão tentar reverter a desvantagem na segunda partida do " mata - mata " , no próximo final de semana . Local : Teatro Municipal Sessão de cinema e vídeo Beijos Roubados ( BAISERS VOLÉS ) ( França , 1968 , 90 min ) Antoine Doinel procura um emprego e um amor em Paris . Aparentemente , você não está pagando nenhum centavo de juros , mas de fato existe uma taxa de juros , nesta simples operação , de 1 , 96 % ao mês , ou 26 , 27 % ao ano . Se vocês encontrarem o Pelé me tragam . A assistência financeira a que se refere este Manual não poderá ser considerada no cômputo dos vinte e cinco por cento de impostos e transferências devidos à manutenção e ao desenvolvimento do ensino , por força do disposto no art . As prefeituras dos dois municípios já solicitaram recursos aos governos estadual e federal , mas as obras ainda não têm data para começar . De acordo com o presidente do Sindicato dos Bancários de Piracicaba e Região , José Antonio Fernandes Paiva , a rodada está marcada para as 15 horas , em São Paulo , em local a ser definido . Os jogadores titulares realizaram uma corrida nos arredores do gramado , mas subiram para seus quartos e não participaram dos trabalhos . †Do líder dos camelôs da 25 de Março , Francisco Pereira da Silva , sobre a insistência da Prefeitura em proibir o comércio da rua no local Jornal da Tarde , 05 . 08 . A invencibilidade na Libertadores estava assegurada . Vosso blog de comida Gastronomia , dicas e notícias , por Jussara Voss ' Semana Mesa São Paulo ' 11 novembro , 2010 por Jussara Voss Um argentino de origem italiana que mora na França . Ele é tão preguiçoso que mandou nós alunos roçar a estrada para ele desviar da lama e nos roçamos e agora ele disse que nao passa mais nenhuma vaz este ano . Thiago começou no judô muito cedo , aos 5 anos em Tupã , interior de São Paulo , onde nasceu , mais tarde foi aprimorar a técnica no Projeto Futuro - um programa de excelência no esporte mantido pelo governo paulista . 000 , 00 ; 14 - Veiculo HONDA / FIT , Ano 2006 , valor atual , R $ 29 . E o que dizer das goleiras que ainda se ajoelham como as colegiais do handebol ? .. Não quero me incomodar com as dores de cabeça da nossa dupla , que briga hoje para ver quem dá mais vexames . Participei de uma Missão Técnica efetivada pelo Sebrae Barra do Garças . Se nós cobrarmos o cumprimento do código federal , inviabilizamos essas propriedades . pob O ditador Micheletti costuma falar que Chavez está por trás de tudo que há de ruim em Honduras . Na minha opinião essa lei atual nem poderia ser exigida .. Protegei , ó Senhor , os motoristas que conduzem os modernos meios de transportes . O Riograndense de Imigrante ficou com 11 pontos na classificatória e tem 440 negativos na disciplina . Falava e abraçava seu pescoço , alisando as crinas e acariciando as orelhas do cavalo , com “ tapinhas de amor †no costado e na barriga do seu melhor amigo . “ A fumaça não chegou na aldeia , mas escureceu o tempo †, conta . Foi muito positiva . Essa é uma parceria que tem que existir sempre . “ Esse é outro exemplo de desinformação , é um kit com cinco vídeos que inclui manual para os professores , um material didático que foi discutido três anos com uma equipe multi - disciplinar e com especialistas em sexualidade †, explica Toni Reis . Não podemos retroceder †, enfatiza . Gaspar diz que Ivete é egoísta e que acabou com a sua vida . “ Maddog †( cachorro louco , em inglês ) , como prefere ser chamado , admite que é uma tarefa difícil , já que empresas como a Microsoft dominam o mercado . " Essa integração entre jovens e ' jovens com mais de 50 anos ' será benéfica para todos . Nesta época , para muitos , parece que o mundo vai acabar . Terá de enfrentar um período significativo em tratamento de saúde mental até que a condição sua condição de saúde melhore , quando terá uma nova avaliação de seu caso pela Justiça . É difícil ver e aceitar tantas situações indigestas como a disputa por cargos , arranjos de todos os lados , vaidades e egos que são um deboche aos eleitores que ainda acreditam nos partidos . Esse dinheiro sagrado serve também para financiar as campanhas de nossos deputados no Congresso . E eu aceitei " , garantiu . Talvez os deuses do futebol preferissem esperar pelos 45 minutos finais . Santa Catarina , sozinha , colabora com 10 % da produção de arroz do Brasil . fra M . Ellis s ' était également rendu à deux reprises au restaurant où travaillait Ji - Hye Kim , des visites qui n ' étaient pas innocentes , avait statué la juge Thea Herman . Elle a vécu pendant cinq ans à San Francisco avant de s ' établir dans une jolie maison à l ' anglaise du secteur appelé le " village Monkland " , précisément parce qu ' il offrait la possibilité de vivre " sans dépendre de la voiture " . Il nous prend en otage » , dit - il . L ' offensive judiciaire du gouvernement iranien à l ' encontre de la communauté religieuse des bahaïs pourrait se préciser cette semaine . Les Suds programment des musiques venues dailleurs et très peu présentes dans les autres festivals . Il est le frère de l Â’ actrice Taylor Thomson et du pilote Peter Thomson . Avait - il besoin d ´ agir ainsi avec nous ? En Saskatchewan , il a amassé 3 , 9 verges par course . Un successeur de Mgr Genoud sera ensuite désigné par le Pape . La commission des Affaires sociales de l ' Assemblée nationale examine à huis clos , depuis mardi 20 juillet , le projet de réforme des retraites . Les demandes de compensations de la part des soldats se multiplient . Concernant l ' Equilibre vie privée - vie professionnelle , mis en & oelig ; uvre immédiatement , l ' accord offre aux managers " des marges d ' autonomie permettant de prendre en compte les situations personnelles des salariés pour aménager leurs horaires " . Par ailleurs , le groupe Panasonic n ' a pas l ' intention de relâcher ses efforts dans ses autres domaines d ' activité , plus connus du grand - public , comme l ' électronique audiovisuelle et l ' électroménager . Revenant sur le terrain du local , Élisa Martin , la tête de liste régionale du mouvement , a affirmé de son côté ne pas vouloir du Modem dans l ' alliance de second tour , espérant une gourverance PS - Verts - Front de Gauche . Deux ans après son accession en finale , Stanislas Wawrinka ( ATP excelle à nouveau à Rome . La participation s ' annonce plus forte qu ' au premier tour . Qui pour un couteau " , a - t - il expliqué , lundi , au lendemain dun conclave des instances des Forces nouvelles , tenu dans leur fief à Bouaké , au centre du pays . Seine - Saint - Denis : trois policiers blessés lors d ' un contrôle d ' identité - Yahoo ! Ce qui fait qu Â’ il faut les prendre en charge en matière d Â’ eau , de nourriture , les transporter dans les villages . Ils ont défilé sous la pluie depuis la Manufacture des tabacs jusqu ' à la place Bellecour , puis se sont dispersés peu après 12 h 30 . spa Hasta el 20 de noviembre de 1975 , los pocos científicos que habían brillado en nuestro país , lo habían hecho en el extranjero . Encalada admitió que debe esta cantidad de dinero a Kerly y ofreció pagar la deuda . Dudo que alguna editorial se atreviera a publicarlo . Estamos apenas en las primeras horas de la erupción ; no podemos decir aún si tendrá un efecto en el tráfico aéreo como el que tuvo el Eyjafjoell , " dijo Magnusson . Son 106 viviendas y 459 subsidios de vivienda , de los cuales 59 serán para población desplazada . Los de Kudelka igualaron 1 - 1 ante Racing , en el estadio 15 de abril . También en la delegación istmeña están Ronald Herrera como quinesiólogo ; Manuel Polanco y Samuel Rivera como médicos ; y Luis Vergara como asistente administrativo . Este aporte fue un compromiso asumido por el Gobierno de la Provincia para afrontar costos de la reestructuración del Estadio Leonardo Gutiérrez . Es un ' matao ' que se aburre como un hongo . Son capacitaciones importantísimas que estamos desarrollando †, expuso Ramírez . El estudio del Centro Aralma tiene más datos del fenómeno : El 90 de los chicos usa la computadora en su casa el 37 , además , lo hace en un ciber . El clima de violencia que vive México ha dejado más de 30 mil muertos en cuatro años , y los custodios de Cristo han decidido tomar la iniciativa . Lo incluyó en su discurso ante los legisladores el 1 de marzo . Ese establecimiento de chacra , que así figura en la escritura , se componía de 26 cuadras cuadradas . La embajada y su sección consular anunciaron que darán seguimiento al caso , a fin de vigilar que el detenido cuente con el debido proceso frente a los delitos que se le imputan . Asimismo recalcó que se trata de una decisión del BNS " bajo su entera y única responsabilidad " . Pues la Iglesia obra en armonía tanto con el Espíritu que la anima cuanto con la Cabeza que mueve el Cuerpo ( cfr . Y por supuesto esto ayuda al Uruguay a fortalecer y multiplicar sus posibilidades de inserción internacional . El burgomaestre sostuvo que se ha realizado préstamos a una entidad financiera , sin embargo sostuvo que su compromiso es subsanar todo tipo de créditos y no dejar adeudada a la Municipalidad Provincial de Cutervo . Ella se encuentra en la ciudad de Concepción , en Chile , donde hay mucha gente enferma y el cadáver milagrosamente conservado de un sacerdote al que acuden en busca de un milagro . ita Otorino Larocca aveva 32 anni , e adesso fa il presidente , Giuseppe Natale , che di anni ne aveva 20 , adesso fa l ' amministratore delegato . Aveva perso troppo sangue e morì in ospedale » . Non sarà facile , perché ancora una volta si è vista una Red Bull molto competitiva ed una McLaren che sembra mantenere i favori del pronostico " . La dimostrazione che diceva sul serio , Venter l ' ha data ieri . Lo faccio perché mi sembra moralmente giusto . " Ce lo dovevano dire : come si fa a stare a Madrid la notte senza un posto dove dormire ? " , si è domandato Sergio Orlandi , arrivato da Lecce insieme a sua figlia . Un dettaglio da abbinare con il trucco o con l ' abbigliamento a portata di tutti . Colori che dominano anche sulla french manicure . Domande che Berlusconi ha liquidato , come di consueto , con un & rsquo ; alzata di spalle e una battuta : " Dell & rsquo ; umidità & ndash ; ha scherzato il premier & ndash ; parliamo un & rsquo ; altra volta " . Per questi ultimi uno dei fattori di stress da aggiungere alla già dura giornata di lavoro è il traffico , un appuntamento - più o meno fisso - che si ripresenta al mattino e alla sera . I membri virtuali degli equipaggi così definiti potranno successivamente accordarsi sulle modalità operative . Il crollo della fiducia dei consumatori Usa manda in rosso Piazza Affari - 2 - - Yahoo ! L ' agente Fedele : " Siamo arrivati vicini allo scontro con De Laurentiis per qualche dichiarazione avventata del presidente , poi ci siamo chiariti " . Poi c ’ è la Donna impudica , l ’ altorilievo da Porta Tosa dell ’ inizio del XIII secolo : è una prostituta che si rade il pube . I lavori di ripristino sono resi più difficili sia dalla gravità dei danni che dai problemi di accessibilità alle aree interessate . Alla Fincantieri ben mille dei 9 mila dipendenti sono in cassa integrazione straordinaria a causa della crisi della cantieristica . " Non è un libro romanzato . Bellaria Igea Marina , come detto , fu teatro di molti degli avvistamenti " romagnoli " , che trovano spazio nel reportage e dei quali uno venne addirittura immortalato dalla macchina fotografica di Elia Faccin ( immagine in allegato ) . Così parla Barack Obama passeggiando sulla spiaggia di Port Fourchon , nel sud della Lousiana , mentre raccoglie palline di catrame . Rivede lo scudetto e lavora al futuro nerazzurro . Magari sarebbe stato contento " . spa Cuando llegaron los manifestantes , la escuela estaba cerrada , por lo que protagonizaron un forcejeo para poder ingresar . Experto Comisión Mundial de Ãreas Protegidas – WCPA – de la UICN . Ya habían pasado tres años de la condena y seguía detenida a disposición del Poder Ejecutivo . “ Buscamos la adhesión porque todos tenemos una responsabilidad y todos vamos a tener un rol por lo que hay que hacer lo que hay que hacer , respetando la constitución y los espacios públicos democratizando las protestas †, afirmó el dirigente . La aplicación del Plan con los alumnos se realizará durante el 2007 . " Si queremos representar bien a nuestro país , tenemos que llevar lo mejor que tengamos . El viernes , el Ejecutivo respondería la segunda iniciativa presentada por los técnicos de los gremios . Ellos buscaban vivir en un país democrático . En su discurso Chávez aseveró que los críticos de la cooperación bilateral deberían antes preguntarse el valor de Barrio Adentro para el pueblo venezolano , el cual carece de precedentes . De dicho al hecho hay un largo trecho . Desde el punto de vista social , quienes tenemos acceso a Internet hemos visto en poco tiempo la caída de muchas barreras fronterizas . Y desde que lanzó su guerra contra el terror , los Estados Unidos han adoptado la práctica de Israel , que se remonta a décadas atrás , de llevar a cabo los asesinatos lejos del teatro de guerra . En cualquier caso , debería haber una pérdida pareja y generalizada de poder . Creo que es hora de cambiar y todos tenemos una parte de responsabilidad en la necesidad de ese cambio . En países ricos , como España , la cosa puede ser peor . " Un presupuesto es parte de la estructura del éxito porque les ayudará a establecer metas financieras " , indicó el experto . 16 de enero de 2009 09 : 41 , por Andrés Matías , ¿ sos tan ingenuo como para pensar que Carámbula no está en la lucha por el poder ? Antes , en 1972 las Fuerzas Armadas tomaron el control de la lucha contra el MLN . Vamos a ir por todo el mundo y quiero estar en todas partes †, expresó Justin en su Twitter . Así lo revela el trabajo de la Sociedad de Estudios Laborales ( SEL ) que dirige el sociólogo Ernesto Kritz , en el que se detalla que el salario del sector privado registrado le gana en 2 , 5 por ciento a la inflación de este año . spa Indicó que es importante que empresas de renombre internacional del ramo del entretenimiento vean en Mérida un nicho de mercado , pues además de generar fuentes de empleos , también brindan a los meridanos más sitios de esparcimientos . Rolando García Quiñones , representante auxiliar del Fondo de Población de las Naciones Unidas en Cuba , señaló que la Isla llegó a este nuevo Día Mundial de la Población con resultados relevantes . Pero los dirigentes estudiantiles , especialmente los ‘ pingüinos ’ , tienen una expectativa de vida muy baja como dirigentes . Reciba bien lo que aparezca y encontrará más fácil hacer ajustes . Desde la tarde del viernes , cuando las autoridades decidieron el corte de suministro de GNC para grandes comercios y estaciones de servicio , las prestaciones de muchas empresas marplatense se vieron perjudicadas . Sólo 150 tienen la marca Sofitel y únicamente 10 tienen la categoría de “ hotel leyenda †. Los polos de algodón fueron los principales productos demandados por este mercado . Esta obra fue todo un éxito , el que no pudo ser posible sin los conocimientos , buen gusto y sensibilidad del realizador . Hacer ejercicio de una mayoría que se obtuvo electoralmente , por ejemplo , no significa necesariamente ejercer un comportamiento antirrepublicano . La policía pide colaboración a la población para dar con su paradero . De lo contrario , el lugar donde se encontraran se habría convertido en centro de peregrinación para los fascistas que hay por todas partes , lamentablemente también en Rusia †, dijo . Si se establecen los cálculos correspondientes , por día sólo obtienen entre 50 y 60 pesos , sin contabilizar gastos . Siempre el primer lugar es para los que ellos traen o recomiendan . 5 años de rumores , 7 años de duro trabajo ( según Steve Jobs ) , miles de patentes , 2 horas de Keynote para presentarlo , 2 meses de espera , más de 200 . 000 reservas … . Noticias Populares » Venezuela Blogs Líderes de ASA sellaron planes para ampliar integración Sur - Sur Caracas . Amantes de la Harley Davidson nos cuentan que se siente ser “ motoquero †.. En entrevista , destacó que nadie puede acusar de injerencia , " yo creo que en este caso el secretario del Trabajo ( Javier Lozano ) lo que está haciendo es uso de una atribución que la ley le da y , yo diría que en este caso le obliga " . Tierno o duro se lo va engullir . Ultimamente asistimos a polémicas por las medidas de salvaguarda que la Argentina adoptó en su comercio con Brasil . Primero Gámez le rompió el palo , cuando quedaba un puñado de segundos para el final . ita ROMA , 1 aprile 2010 - Non sarà la sua prima volta da avversario , è vero . Tra l ' altro , il Napoli è la squadra con meno infortuni muscolari : " Tre nel corso della stagione . ZENIT è per me un esempio di diffusione della verità partendo dalla fede e dalla tolleranza , con vera dedizione ed intelligenza . " E ' inspiegabile - dice il presidente della commissione Giustizia del Senato , Filippo Berselli - la disparita ' di trattamento tra il Capo dello Stato da un lato , ed il presidente del Consiglio ed i ministri dall ' altra ' . Primo Major della stagione , il Masters è il solo che si ripete , ogni anno , sul percorso dell & rsquo ; Augusta National Golf Club nello stato della Georgia . Non si puo ’ discutere di riforme e insieme di processo breve . Nessuna convocazione ufficiale , ma , riferiscono fonti sindacali , e ' comunque arrivata in tal senso una comunicazione da Palazzo Chigi . In realtà , già la cosiddetta ' finestra mobile ' prevista nella manovra di quest ' anno allontana la pensione per coloro che hanno maturato i 40 anni di contributi . Per una persona e ' confermato il decesso '' , afferma Frattini . Ior : sequestrati 23 milioni , indagato presidente - Yahoo ! La copertura finanziaria è garantita dalla norma che prevede il versamento , da parte dei cittadini , entro il 2010 di tutti gli arretrati . Non lo si dice e non certo per scaramanzia , pratica forse più vicina al pensiero latino in Ticino , ma tale prudenza è figlia di un pragmatismo che noi italiani , loro vicini , conosciamo e gli riconosciamo . Al " Cantinone " andavano anche le soubrettine delle grandi riviste di allora ( Macario , Dapporto , Chiari ) che al termine dello spettacolo al teatro Augustus , si infilavano nella bettolaccia , molto suggestiva in verità . Dopo averla sdraiata a bordo piscina , le ha praticato con successo un massaggio cardiaco riuscendo a rianimarla . Chi , invece , e ' diretto a Gazzada , puo ' uscire allo svincolo di Buguggiate . Nel complesso - ha concluso Zingaretti - si tratta di una manovra iniqua perché colpisce le fasce più deboli . Suo marito , da due anni direttore dell ' Istituto Commercio Estero a Bangkok , è rimasto in Thailandia . Il Q 1 ( qui la recensione ) faceva parte della categoria degli UMPC , soluzioni portatili che non hanno mai avuto successo ( forse i tempi non erano maturi ) , anche per colpa del prezzo e delle funzionalità limitate . Lo ha reso noto la missione antipirateria europea Navfor . L ' inglese il suo dovere lo fa e mette a referto un cross per Borriello , girato al volo di sinistro e parato da Colombo , e un tiro dal limite fuori misura . fra « On ignore la part de responsabilité du travail a précisé Christian Pigeon ( Sud - PTT ) . Enfin pour les éleveurs , il va bientôt falloir anticiper les mutations des herbus . Malgré sa baisse de régime , les " Jaune et Noir " demeurent lune des meilleures équipes du championnat féminin . ROUND 2 : Bute travaille avec son jab et encaisse sans broncher . La durée actuelle de 35 ans est jugée trop longue . Cet ancien directeur de cabinet de la ministre de l ' Economie , Christine Lagarde , entré chez France Télécom en 2009 , doit devenir directeur général de l ' opérateur le 1 er mars . Soulignons que la pièce Window Seat se retrouve sur lalbum New Amerykah Part Two : Return of the Ankh lancé ce mois - ci . La compagnie ajoute que " les engagements pour les mois à venir sont bien orientés " . Et il donne son avis sur les staffs médicaux français . Nous recevons des visiteurs de tous âges , toutes conditions , tous niveaux culturels et cette diversité est une formidable expérience , rare dans le monde , que nous préservons par la gratuité . Les pluies importantes amènent souvent les serpents à se diriger vers les secteurs résidentiels . Elle reste souvent confinée à quelques spécialistes parlementaires , administratifs ou se voit déléguée à des acteurs publics ou privés . Manchester City n ' est toujours qu ' à deux longueurs de Tottenham , qui avait battu Portsmouth ( 2 - 0 ) samedi . Il est vrai que depuis louverture de léconomie nationale à la concurrence , le monde de luniversité a beaucoup évolué , mais beaucoup plus sur le plan quantitatif . En fait , elle est encore à la merci des coups de boutoir d Â’ une mer en furie . A égalité de points le 14 novembre lors de la 14 e journée , l ' OL accuse à la 19 e un retard de 13 points sur Bordeaux pour n ' avoir pris que deux points sur 15 possibles , là ou le leader a quasiment fait carton plein ( 13 sur 15 ) . Et en plus , j ' ai bien servi " , a expliqué Dubois . En Lituanie , armez - vous dun masque et dun tuba pour découvrir lart du pays . Jusqu ' à ce que Komano envoi son penalty sur la barre , laissant à Cardozo loccasion denvoyer le Paraguay pour la première fois de son histoire en quart de finale de la Coupe du monde . Cela a dà » vous redonner le sourireRà © gis Brouard : On à © tait menà © , donc jâ € ™ ai apprà © cià © la rà © action de mes gars . pob É o que garante o deputado estadual Gilmar Fabris ( DEM ) que afirma que nunca houve oposição ao governo do Estado . Veja que muita indústria automobilística no Brasil tem o fornecedor trabalhando em suas dependências ou imediações . No Rio Grande do Sul , são 330 caixas automáticos com esses dispositivos biométricos , a maioria deles em Porto Alegre . Foi assim com Luiz Carlos Santos , conhecido como Neguinho , morador da Estação da Lapa há sete anos . Eram em geral netos lutando orgulhos em defesa da memória dos seus avós republicanos , socialistas , comunistas e autonomistas . O Jornal dos Amigos também aguarda oportunidade para virar edição impressa . Aí confunde alhos com bugalhos ! Diogo Galvão cobrou e empatou : 1 a 1 , aos 24 minutos . “ Entra no carro , não vou deixar você aqui , vamos †, entraram no carro e voltaram para a cidade . Em tom de brincadeira , o camisa 12 questionou o excesso de mimos que tem recebido do Palmeiras nos últimos anos . Educação financeira vai ser ensinada nas escolas Criado : Sex , 06 de Agosto de 2010 09 : 45 A partir deste mês , mais de 4 mil alunos do Ensino Médio , de 120 escolas do Estado , receberão noções sobre consumo , poupança e investimento consciente . " Não nasci vereador . Em Bauru , a multa , prevista em lei de 2005 , é de 5 % da fatura de água do mês anterior , e de 10 % em caso de reincidência . O humor do seu texto é algo estrategicamente bem pensado ou sai naturalmente ao contar histórias ? Apesar da reza fazer bem a todos , só um milagre para manter o governista no cargo por mais quatro anos . Na ocasião , quatro tabletes de maconha prensada e uma muca da erva prontos para serem comercializados foram apreendidos . Martha foi também romancista - e casada com um grande escritor : ela foi a terceira mulher de Ernest Hemingway , entre 1940 e 1945 . JV - Onde a senhora estudou ? Xavier falou sobre a satisfação em ver a queda nos índices publicada na imprensa . Usuários da OI ouvidos pelo cotiatododia disseram que em muitos lugares da cidade o sinal desaparece . sauf de ses fidèles ; ceux qui lui ont toujours voué une fidélité à toute épreuve . Ajoutez aux coups de barre du physique des passages à vide du mental tel que celui d ´ hier soir où Hamilton a été interpelé par la police , et vous obtenez une nouvelle hypothèse pouvant expliquer la chute brutale de performance de l ´ Anglais . Je suis sûr que cest le système anti - sismique qui nous a permis de résister . Les 227 passagers embarquaient dans l ' après - midi à bord de deux autres vols pour Zurich . Il nâ € ™ y a quâ € ™ à voir sa dà © termination dans le jeu au prà ¨ s et sa disponibilità © incessante dà ¨ s quâ € ™ il sâ € ™ agit dâ € ™ avancer balle en main . Il est arrivé en tête au 1 er tour avec 36 , 31 % des voix en Bourgogne . NetworkManager largement amélioré , avec une meilleure prise en charge des réseaux mobiles ( la force du signal est maintenant affichée ) , du Bluetooth et de nouvelles capacités en lignes de commandes . Un peu partout sur la planète , les effets positifs des politiques budgétaires très expansionnistes mises en place dans l ' urgence début 2009 , commencent à s ' éroder . Seuls 9 millions ont à © tà © retrouvà © s . La semaine dernière , les manifestants avaient demandé le déploiement d ' une force de maintien de l ' ONU , qui s ' était contentée d ' appeler les parties au " dialogue " . POLITIQUE - Rencontre au sommet pour Piñera . ita Dove è meglio che giochi ? " La Lega - aferma Maroni - è il partito che più di altri ha combattuto contro Craxi , il Caf e la prima Repubblica . Un evento sismico e ' stato avvertito questo pomeriggio dalla popolazione nella provincia di Ascoli Piceno . Nel 1960 - ha detto fra l ´ altro Moni Ovadia - divenni consapevolmente antifascista e capii che il fascismo agiva sottotraccia , il Paese non era defascistizzato e si tentava di riportarlo indietro . Roma , 22 feb - '' E ' grave che proprio il sottosegretario all ' interno , Alfredo Mantovano , attacchi l ' Italia dei Valori per aver candidato il magistrato Nicastro . La Telltale però individua il punto debole della strategia , ovvero l ' indispensabile frequenza di produzione dei vari capitoli , e vi pone abilmente rimedio : nulla ferma la pubblicazione dei sei episodi che compongono la “ prima stagione ” di Sam & Max . Maledetti infortuni , compagni di viaggio di un calciatore che ha classe pura e probabilmente rimane uno dei pià ¹ talentuosi visti passare dal Picco . Dicevo : non posso respirare , tutto questo non ha senso " . Ed finita con i vigili del fuoco pronti a liberarli a colpi di ascia . Non è più il tempo delle decisioni imposte dall ' alto , nè delle alchimie politiche delle segreterie del Partito . Le società calcistiche , il Coni , la Figc e tutti gli addetti ai lavori facciano in modo di isolare e denunciare questi soggetti che inquinano il mondo delle tifoserie " . Gentile Direttore , anch ' io , come il sig . Adesso devo dimenticare la gara di oggi e continuare a credere in me stesso " , specie in vista della gara dei 1 . 500 in programma il 20 gennaio , quando dovrà difendere l ' oro di Torino . Le tre navi giapponesi , Kashima , Yamagiri e Sawayuki , sono usate per le esercitazioni di navigazione della Marina e rientreranno a Tokyo il prossimo 28 ottobre . LeBron però fa capire di essere in grado di segnare senza grossi problemi anche dalla lunga distanza , firmando tre canestri pesanti negli ultimi 58 ’’ della frazione . Quello che è successo è frutto del mio modo di vivere la vita . Gli analisti finanziari sono scettici , sia per la complessità tecnica dell ' operazione , sia per le difficoltà politiche nella sua realizzazione . Ogni giocatore ambisce ad andare in un club europeo , soprattutto nella massima serie italiana " . Una nuova iniziativa che raccoglie directory , link e indirizzi di tutti i siti della PA , per mettere in relazione cittadini e imprese con il settore pubblico . Abbiamo ripreso il controllo di Kabul . Elezioni / Caserta : Landolfi ( Pdl ) , Alleanza Di Alto Profilo o Mi Candido - Yahoo ! ita E sono molto contento di comunicare con loro " . Josè Mourinho detta le linea in questo inizio di stagione per il suo nuovo club , il Real Madrid . Magari anche l ´ Udc , con il quale sarebbe interessante aprire un laboratorio politico anche a San Benedetto , qualora ci fosse l ´ accordo a livello regionale con il Pd » . Ha arbitatro anche ai Giochi Olimpici di Atlanta ' 96 e Atene 2004 ( e ' lui ad arbitrare la semifinale tra Argentina e Italia ) . La nuova tecnologia Intel TXT invece offre una maggiore sicurezza per i dati in transito su Internet e negli ambienti cloud , oltre a proteggere le applicazioni che vengono trasferite tra server virtualizzati . Gennaio 11 : 04 T & T batte il Fortitudo TeramoNel Palazzetto di Martinsicuro i locali mantengono sui teramani un notevole vantaggio per tutto l ´ incontro , con una flessione come al solito nell ´ ultimo quarto , stavolta però non decisiva ai fini del risultato . Gary Goetzman lo ha subito accreditato come il miglior prodotto televisivo di sempre . Parla di finanziamenti europei per le aziende agricole il presidente della Toscana nel corso del consueto briefing settimanale con i giornalisti . Champions o Europa League ? Omrcen ( 4 punti iniziali ) dà la sveglia ad una Lube che prende le misure a Dennis e va a conquistare agevolmente il set dell 1 - 1 . Ti posso solo dire che sono capace di aprire una traccia cioè quella che apro di solito per sentire un Synth virtuale . Non possono dunque esistere operazioni bancarie direttamente o indirettamente a me riconducibili , ovvero a persone a me collegate '' . Francesco Totti ( 35 ) torna sull ' infuocato dopo derby e sul gesto del pollice verso che ha suscitato non poche polemiche tra i biancocelesti . Qualcuna ha trovato il gesto simpatico . Sempre per tre anni , Google si impegna a comunicare ai proprietari di siti , che vendono spazi pubblicitari utilizzando l & rsquo ; azienda web come intermediario , la percentuale di introiti a loro spettante . Maltempo : Dalla Serata Di Ieri Nevica Al Nord , Autostrade Sempre Percorribili - Yahoo ! In gara anche l ' olimpionico Gelindo Bordin , lo start affidato a Fiona May . Da non sottovalutare inoltre il miglioramento sotto l ' aspetto igienico sanitario . Per fortuna dei bianconeri le tre concorrenti devono ancora confrontarsi e probabilmente si toglieranno punti a vicenda negli scontri diretti : Palermo - Sampdoria si giocherà tra due giornate , mentre Sampdoria - Napoli chiuderà la stagione . " In Italia e ' stata proiettata nelle sale Multiplex del circuito Warner e nelle oltre 70 sale cinematografiche digitali di Microcinema , ma non a Palermo . fra Le président de l ' OM , Jean - Claude Dassier , y confirme à son homologue toulousain , Olivier Sadran , " l ' intérêt de l ' Olympique de Marseille à faire venir le joueur André - Pierre Gignac " . Il a signé jeudi à l ' issue du programme libre une encourageante 12 e place . Club du 4 e chapeau , la Chorale aura sans doute du boulot face à Berlin , Khimki ou Kazan , ses adversaires potentiels du premier tour . L ' Espagnol Pau Gasol , crédité de 22 points et 15 rebonds , et Andrew Bynum ( 17 points et 14 rebonds malgré un genou douloureux ) , ont eux aussi été déterminants dans le succès des joueurs locaux . Manuel Osborne - Paradis ne croit pas qu Â’ il a été victime de la pression et des attentes qui pesaient sur lui . Meilleur joueur et buteur du tournoi en Egypte , Adiyiah a quitté depuis son club norvégien pour signer au Milan et deviendra peut - être le buteur qui manque tant à la sélection . L ' électricien public EDF , qui s ' intéresse à Desertec , est prié de ne pas y adhérer tant que le projet français n ' est pas sur les rails . Il est arrt aprs un jet de tracts , des leaders politiques et des tudiants sont torturs et emprisonns . Une déclaration aux journalistes locaux , toujours , marque un grand tournant de son parcours politique . Le ministre de l ' Education nationale a ainsi fait savoir quil trouvait " particulièrement inappropriés certains passages " de ce pré - rapport , déplorant " une maladresse inacceptable " . Saint - Raphaël s ' est qualifié samedi à Nantes pour la finale de la Coupe de la Ligue en dominant Dunkerque aux jets de sept mètres ( 4 - 2 ) alors que les équipes étaient encore à égalité après prolongation ( 31 - 31 ) . Moore , qui a été acquis des Panthers de la Floride tout juste avant la pause des Jeux olympiques , apporte de la profondeur à l ' attaque du CH . Il avait jusqu ' au 18 juillet pour s ' annoncer , faute de quoi le pactole serait retourné dans les caisses de Swisslos . Cette affaire a connu plusieurs rebondissements . Cette province est une pionnière de cette question . Le parquet de l ' Union belge a proposé une suspension de quatre matchs à l ' attaquant camerounais du Club de Bruges Dorge Kouemaha suite à sa carte rouge reçue dans le derby . Russie : la réponse aux incendies n ' a pas été assez rapide , selon un ministre - Yahoo ! Il commence à être appliquée , et les « faux - professionnels » ont eu la possibilité de devenir des vrais en adoptant le statut d ' autoentrepreneur . Transformé mais aussi parfois un peu figé par le maquillage , André Dussolier campe avec brio un homme qui , sous des airs volontiers débonnaires , cache une volonté de fer et une quête de puissance absolue frôlant la démence . Eiffage a annoncé un repli de 35 , 1 % , à 190 millions deuros , de son bénéfice net lan dernier . ita Con lui ho dimestichezza nel parlare , nel fare battute , ma non nel minacciare '' . Non così la legge - tampone , il salvacondotto che nel frattempo esige Berlusconi . Non è a questo livello che vanno cercate le responsabilità ma più a monte " . Al contrario c ' à ¨ chi lo apprezza , tant ' à ¨ che nell ' elenco di gradimento risulta al 42 esimo posto . Una corazza che vorrebbe proteggere ulteriormente il bar , quando dietro il bancone non c ' è nessuno . E martedì si gioca a Mosca per conquistare la qualificazione alla semifinale di Champions . Il Gruppo Regionale ed il Commissario hanno chiesto al Capogruppo di procedere nei tempi più rapidi al completamento degli organismi del Gruppo stesso , consultando , ovviamente , i Consiglieri Regionali del PD . « Mi hanno dato una grande mano . Il dato relativo al mese di aprile si attesta dunque a + 0 , 3 % dal + 1 , 7 % della precedente , evidenziando un rallentamento nella crescita economica dopo il boom del primo trimestre . E & rsquo ; certamente un grandissimo talento ma ne deve fare ancora di strada per arrivare al livello del capitano della Roma che ha vinto scudetto ed è campione del mondo . Mercoledì 3 , alle ore 21 , presso la sede degli Amici della Bicicletta , in via dei Colli 108 , l ' Arch . « Noi siamo gli unici a pagare le tasse , mentre loro evadono » , dicono . So quanti sforzi fanno i fratelli Della Valle per tenere ad alti livelli la loro squadra e so che cosa vuol dire andare avanti in Champions . Personalmente resto convinta del principio per cui se si è in grado di votare si è anche in grado di essere votati " ; . Manca ancora poco , ma l ' accordo con il Palermo per il prestito con diritto di riscatto è la classica conferma che avevano tutti fretta . « Vogliamo scoraggiare ogni strumentalizzazione del nostro movimento » ha spiegato Giusi Pitari , fra i promotori dell Â’ iniziativa . Una bischerata satirica sparge la confusione su Wikipedia e ne evidenzia il limite fondamentale . Proprio a riguardo di ciò si è espressa recentemente comScore , discutendo dei criteri da utilizzare per stilare le classifiche mensili . Richieste sottoscritte da Alvaro Perin , consigliere della Provincia di Treviso . Alla faccia della riappacificazione con Casini , il suo portavoce e deputato Roberto Rao avverte : " Le parole di Berlusconi non sono un buon inizio , ma quel che conta sarà il risultato finale " . fra Le maire de Duisbourg Adolf Sauerland , très critiqué et qui a dû être placé sous protection policière , a déjà indiqué qu ' il n ' y assisterait pas . Renault ne vend pas de véhicules aux Etats - Unis ni en Chine actuellement , mais Nissan a une part de marché de 8 % et de 6 % dans ces pays , respectivement , indique le dirigeant . Avis avait déclaré quelques jours plus tard qu ' il ferait une offre plus élevée , mais n ' a pas fait de proposition jusqu ' ici . Johannes Mehserle , 28 ans , un officier de police de l ' Agence des transports de la baie de San Francisco ( BART ) , avait tué par balles le jeune Oscar Grant , alors âgé de 22 ans , le 1 er janvier 2009 dans une station de métro d ' Oakland . Le fait n ' est pas en soi nouveau . A la veille de la reprise du championnat , les cadors sont déjà prêts à en découdre malgré le retour tardif des internationaux . La bonne fréquence : Une session de 10 séances ( une par semaine ) est parfaite pour une détox de fond . Artistiquement les jeux Ubi démontent méchamment la tête je dois le reconnaitre . L ' indice composite du marché Nasdaq cède 0 , 5 % à 2 . 109 , 15 points . En 2008 , nous recrutions beaucoup car notre charge de travail était très importante . Cette mise à jour vous proposera alors une alternative dans le choix des commandes . « Le PLC a déjà été un parti de grandes idées , mais il perd son âme » . Laccord passé à ce propos en mars 2008 , valable jusquen 2017 , prévoit des répercussions directes dès que la réserve bénéficiaire , de 19 milliards de francs actuellement , est dans le rouge à hauteur de 5 milliards de francs . ARCELOR MITTAL : Alpha Value passe à l ' achat , vise 41 , 5 E . Dans l Â’ hémicycle régional , des écoliers flamands ont chanté en français et des écoliers francophones en néerlandais , sous les applaudissements des élus . Cette année encore , l ´ Association multiethnique pour l ´ intégration des personnes handicapées ( AMEIPH ) était conviée à l ´ événement « La fierté d ´ apprendre » pour exposer certaines oeuvres dans la grande salle de réception . Lui - même , par exemple , selon ce que m ' en rapporte son éditeur , avoue voyager de plus en plus , mais de moins en moins loin , c ' est - à - dire qu ' il ne prend plus l ' avion . Goldman retarde son annonce afin de donner aux quelque 65 à 70 employés de la branche le temps de trouver de nouveaux emplois , selon les sources de l ' agence de presse . Aux journalistes réunis à Beyrouth , le cheikh Nasrallah a montré des images aériennes . Insuffisamment surveillées , ces dernières ont augmenté de 6 , 2 % en 2008 , un rythme supérieur à l ' objectif de 4 , 8 % qui figurait dans la loi de finances initiale . pob A disputa pela casa , financiada com recursos federais , pode vir a ser um problema grave , explica Ãndia Mara . Eles ficam enganchados sobre as orelhas . Na noite do dia 28 de março , ao mesmo tempo em que o assassino desferia 22 tiros ( efetuados com no mínimo duas pistolas 380 ) em suas vítimas , Toninho Pavão acompanhava os disparos bala a bala . Ai no Brasil professor e policiais ganham salarios de fome . Jô creio isso e aquilo . Lula não só pavimentou , como duplicou , sinalizou e ampliou , direcionando - a para um futuro promissor ! Neste espaço , os vinhos e os espumantes serão comercializados em taças ou garrafas , juntamente com petiscos e pratos da alta gastronomia , servidos por garçons . Além disto , sofrerá multa de R $ 5 mil , além de ter de pagar a taxa de R $ 2 mil quando quiser voltar às atividades . Cariocas surpreendem Mas foi o Botafogo , aos 31 minutos , em uma das raras jogadas de ataque no primeiro tempo , que abriu o placar . Eles levaram dinheiro , cartão telefônico e um celular . “ Todos os alemães foram às ruas comemorar com os ingleses , com os franceses , com os brasileiros , com todos os países . Araçá ataca Alex , mas Luciano surge para defendê - lo . O custo de campanha é muito grande . Estamos comprando a unidade a R $ 1 , 50 e infelizmente temos que repassar esse valor para o consumidor . “ O lago , que até então era limpo , passou a receber uma grande quantidade de esgoto . Acreditava ele , como muitos mais , naqueles anos de entusiasmo pela figura de Che Guevara , que era possível repetir a façanha cubana . No Superior Tribunal de Justiça , a situação é pior . Assim , somente o aroma da bebida continua na comida . E quais nossas crenças coincidentes com as de Voltaire / Candide ? Já os PM ' s baleados prestaram depoimento e estão ajudando nas investigações " , explicou ela , acrescentando que o inquérito será presidido pelo delegado da Deic Paulo Cerqueira . pob Além deles , faltam ser ouvidas mais sete testemunhas de defesa . Debaixo de um forte sol , os esportistas não desanimaram e fizeram bonito durante todo o percurso da prova . Anunciar no rádio é muito caro e ficamos no boca a boca mesmo †, relatou . A animação fica por conta das bandas Amigos do Samba , Boca de Forno e Samba Rock Club . Tão lindo como as estrelas e as constelações que contemplamos em muitas noites . Dentro das dimensões do trabalho existe também a face do servir com gratuidade . Para o coordenador do PELC / Pronasci , Alexandro Lima , o skate é um esporte de inclusão social assim como os demais oferecidos pelo programa . Se vou ou não jogar , isso fica em segundo plano " , afirmou , semana passada , ao " Globo Esporte Minas " , da Rede Globo . Também não se trata de se contrapor a nada , e sim de apoiar a diversidade e ampliar a base de leitores no país . Até as 20 h a população poderá buscar o medicamento direto na farmácia e , a partir desse horário , o atendimento será direcionado para a recepção . Continuamos a receber o mesmo valor . Neste caso , utilizaram um vírus para " desligar " as subunidades α 5 nAChR na habênula medial . Cale - se , Senador , nem mais uma palavra ! Capitão do time , destaque de conquistas recentes do clube , apontado por muitos como capaz de servir a Seleção Brasileira , passou a ter o nome estampado nas manchetes policiais . Chegamos muito perto " , lamentou o dirigente do país que sediou a Copa de 1994 . O número de técnicos e monitores para a abordagem também é insuficiente e não atende a regulamentação do modo do Sistema Único de Assistência Social , o Suas . Em sua terceira edição , o grande retiro religioso permanece com o objetivo de transformar a cidade na Capital da Fé durante as festas momescas . Pouco antes de ser removido , explicou à reportagem do Fantástico qual era seu objetivo : matar a criança . Já o tricolor , deve seguir o mesmo caminho , pois precisa reverter o quadro desfavorável construído em Pituaçu . Tem só de observar jogos , não sei como eu me sentiria nisso , pois gosto de ficar no dia - a - dia . pob Ele denunciou os dois por homicídio doloso – quando há intenção de matar - triplamente qualificado ( meio cruel , impossibilidade de defesa da vítima e para ocultar outro crime ) . Ouvi tudo calado e imaginei num espaço curto de alguns segundos tudo o que aquele senhor havia me falado . O Prefeito não tem condições de manter esse Secretário que aí está . Você sente que pode prestar ajuda a quem lhe pede sinceramente , sem se sentir sugado ou injustamente usado . Vem a caminho as bombas deles . Existem variáveis , bem piores , decorrentes do avarento , do desonesto , da covardia , do falso ou do desequilibrado . Com a maturidade , eles se veem capazes de brincar com a tal onda chique . Ehud Olmert poderá continuar no poder durante semanas ou meses até que seja formada uma nova equipe . Não conseguiu fazer o time jogar e passou um dos maiores vexames da história com o time . O padre Marcelo Rossi foi o campeão de vendas de CDs em 2006 , informa a Associação Brasileira de Produtores de Discos . No Galeão , dos 87 voos , 46 atrasaram ( 52 , 9 % ) e dois foram cancelados ( 2 , 3 % ) . Se o ônibus estivesse cheio , teria acontecido uma tragédia " , disse Mendes . Pra quem tá se afogando , jacaré é tronco †. O STF julgou inconstitucional a contribuição previdenciária paga pelo empregador rural pessoa física sobre a receita bruta proveniente da comercialização da produção rural . Combustível ' limpo ' vira caso de polícia no Sul Do colunista Cláudio Humberto : O engenheiro Thomas Fendel pode ir ao Supremo Tribunal Federal contra a apreensão absurda , em Santa Catarina , esta semana , de um de seus “ carros limpos †. Garotinho sabe que pelas críticas , pelo que está passando no Tribunal Superior Eleitoral . A companhia deixou de instalar postes de madeira há alguns anos , por questões ambientais . Temos muitas defensorias que são referências na prestação de trabalho à população carente e tenho certeza que este sucesso se dá porque o perfil ideológico desses gestores comunga com o espírito de existência dessas instituições . A Arara Azul garantiu o tricampeonato com a pontuação de 116 , 9 . Elas vivem em áreas que foram classificadas num estudo feito pelo IPT ( Instituto de Pesquisas Tecnológicas ) com risco geológico maior de deslizamentos . pob “ O raleio pode ser dividido em dois tipos : raleio de cacho e raleio de bagas . Não satisfeito , passou a subtrair o dinheiro das maquinas registradoras . Cerimônia encerra formação de turma do 1 º semestre Uma cerimônia marcou ontem a formação da turma do 1 º semestre de 2009 da Guarda Mirim . Hoje você se perceberá mais intuitivo e aberto a novas experiências , pois a presença da Lua em sua nona casa amplia sua percepção frente a vários assuntos . Mas os engenheiros acreditam que , até a conclusão , pelo menos 200 pessoas estarão trabalhando na construção do prédio . Mas ITR poderia significar outra coisa . Mas , se acontecer rapidamente , pode destruir o patrimônio genético de uma espécie . Os interessados devem comparecer para cadastro das 8 h às 17 h . Uma dessas secretárias me disse que tem três cursos superiores . O líder da bancada da oposição , Heraldo Rocha ( DEM ) condiciona um acordo à derrubada do veto do governador Jaques Wagner ( PT ) a um artigo de projeto do Judiciário , que incorpora gratificações dos serventuários retroativas . O Rubro - negro agora enfrentará o ganhador do duelo entre Universidad de Chile e Alianza Lima , que fazem o jogo de volta nesta quinta - no primeiro confronto , os chilenos ganharam no Peru por 1 a 0 . Ronaldo teve uma atuação boa . Até a tarde de quarta , o abaixo - assinado , que está no endereço www . petitiononline . com , reunia mais de 5 mil adeptos . " Acho que mudaram e não avisaram o prefeito , pois ele disse que eu continuo como líder " , disse o petebista . " Sempre fomos acostumados a ficar em locais mais tranquilos , e nos últimos anos , a rua onde fica a casa ficou muito agitada . Quer mudar de poder . Tivemos oportunidades , mas não fizemos . Ela pedia brinquedos gratuitos nas praças , com balanços e escorregadores . Falta - lhe o mínimo de vergonha . Meningite - Mário Rodrigues ( PSB ) solicitou da Comissão de Saúde da Casa que seja feita uma averiguação mais aprofundada no caso da morte de uma criança que faleceu supostamente com suspeita de meningite . “ Ali é realmente o nascer de Três Lagoas , um marco para a cidade . pob Eu acredito que se o Hitler tivesse que nomear um sucessor o Hartung seria seu chefe de propaganda nazista , porque ele soube mascarar tão bem lá , como está acontecendo aqui também . OE - Há como inserir as cidades do interior nos programas relacionados à Copa ? Citou , por exemplo , no caso do ICMS que o fator gerador deste ano será repassado ao município daqui dois anos , portanto , o que Santa Bárbara está recebendo agora o fator gerador é de 2007 . Segundo eles , o sucesso sexual deve ser redefinido como “ qualquer coisa que faz você se sentir bem consigo mesmo e com o seu parceiro †e como “ algo que melhora o seu relacionamento †. Expandir Reduzir + comentar joão orlando dos santos em 06 . 07 . A familia dele esta correndo atras para saber quem fez isso com ele , vai assionar o ministerio publico da região para poder investigar quem foi as pessoas que perseguiram ele , o mataram e queimaram . Apura isso , Karla Sandoval e SD ; Século Diário , mediador ( Vitoria / ES ) Ao senhor Adilson Carlos Francisco de Souza Caro leitor , não publiquei o seu comentário porque o senhor faz acusações sem provas documentais . Na terceira , o paulista afirma que , quando vier , estará " incomparavelmente acomodado na amizade de vocês . Estudar , passear e participar do grupo de danças e de suas atividades . Cena horrível , por que todos estão vendo . '' A volta da qualidade vocal está sendo muito mais lenta do que foi há dez anos , por questões de anatomia . ' Sem a integração , você pode estar atendendo ao mesmo público alvo várias vezes , enquanto outro não está sendo atendido ' , analisou . Logo no minuto seguinte , Diego cobrou escanteio pela esquerda e Fabiano , em sua primeira jogada , ganhou de Clemer e empatou , com um gol de cabeça . Questionada sobre a legitimidade do material apresentado , já que na imagem usada em sua campanha ela aparece muito mais bonita e magra , Katarzyna não escondeu a manipulação e disse que é preciso fazer uso das novas tecnologias . Transito é + q caótico , metro ñ presta . O caso foi levado ao Fórum de Mogi em dezembro de 1987 . Levou para a administração de Brasília antigas ( e bota antigas ) amigas prá assessorá - la . No ano passado , o prefeito José Antônio se dedicou de corpo e alma na construção das lagoas de decantação . No ano seguinte , não passou do Goiás . Mais uma vez desejo - lhe sucesso . spa El Ministerio de Trabajo decidió suspender las labores en Bay Star , después del accidente . Se ha trabajado muy duro , y acá estamos como siempre , contentos y decimos que esto fue una prueba de Dios para templarnos más en este lugar hermoso que tenemos para vivir †. En cuanto a las consolas ' de piso ' , ya no son tan grandes y pesadas como antaño , ni obligan al reguero de cables a través de la habitación . Hay circunstancias que voy aevaluar . El sargento Eric Bravo dijo que su tatuaje lo llevó a acusarlo , pues “ es muy difícil confundirlo †. Si uno le dedicara el tiempo suficiente a leer la letra chica de esos contratos , seguramente , habría menos afectados por esta crisis . Absolutamente , pero esto es una interpretación personal . Es tiempo de reflexión y de unión . La tragedia de Antuco demuestra que la tropa carece de prendas mínimas para afrontar la nevazón cordillerana . Con la probable baja en el precio de los productos agrícolas y traspasos cada vez más insignificantes , los ingresos tal vez suban modestamente lo que suba la inflación . Home » Especial Gastronomía » Tecnología Cuando arrancó el nuevo siglo , Google era una novata de apenas un año y tres meses de la que pocos sabían . La vamos a filmar en Puebla y el D . F . †. -- ¿ Y tienes mirada hacia el Norte , hacia Hollywood ? La denuncia fue radicada en la comisaría Primera , con intervención del Fiscal Marcelo Martini . El Deportivo Tuyango no podrá estar en la próxima temporada del la Liga de Paraná Campaña . Cómo introducir su utilización en la educación secundaria . Acepta un tratamiento psicológico por intercambiar pornografía infantil tratamiento : El ministerio fiscal pedía una pena de siete años de prisión por un delito de intercambio de fotos sexuales de menores . Afirmó que la inseguridad afecta a todos los venez « anterior 1 . †) y los ciudadanos caemos en la pendiente que exige cada vez menos argumentos y contempla el conjunto , cada vez más , como si todo fuera apenas un espectáculo ( ¿ viste lo que le dijo ? Cite este artículo en su sitio Tevez : " pido el respeto que me gane " Para crear un link a este artículo en su sitio , copie y pegue el código de abajo . Además , mañana los imputados podrían ampliar su declaración indagatoria ante los instructores de la causa , en la Justicia de Morón . fra Son numéro de téléphone nous a été communiqué par l ´ un de ses clients réguliers . " Dans les deux derniers jours , les forces du ministère ont réussi à ne laisser s ' embraser aucune maison , et à éviter les pertes humaines " , a encore souligné cette responsable . La responsabilité de représenter un continent , une région et surtout un pays qui ne vivent que pour le football met davantage de pression sur le dos et les épaules des hommes de Saâdane . Dans le secteur privé , le PIB par habitant de lex - Allemagne de lEst se languit à 66 % du niveau de lOuest , selon Hans - Werner Sinn , de lInstitut IFO . L ' histoire se répète encore une fois : une des personnalités jadis proches du cercle du pouvoir , petit - fils du fondateur de la République islamique est conspué , humilié . Toyota présente ses excuses pour ses voitures défectueuses - Yahoo ! L Â’ heure est à l Â’ hésitation pour beaucoup d Â’ actionnaires comme le démontre les légères oscillations des cours autour de la moyenne mobile à 20 semaines . L Â’ Italie ( - 17 , 4 % ) et l Â’ Espagne ( - 14 , 3 % ) , en revanche , restent à des niveaux de baisse alarmants . StarCraft II : Wings of Liberty est censé sortir au courant de la première moitié de 2010 sur PC et Mac mais vous commencez à le savoir , avec Blibli on est jamais sûr de rien . Les videurs préfèrent appeler la police au - lieu de séparer les 2 jeunes femmes . Ils se sont apparemment fait des amis parmi les hauts fonctionnaires d ' Hydro - Québec , qu ' ils ont ensuite récompensés largement de leurs bons offices . Au premier tour , linstitut crédite la liste de Jean - Noël Guérini de 40 % des intentions de vote , contre 36 % à celle de Jean - Claude Gaudin . Outre les traditionnelles perturbations au Gothard , les automobilistes devaient compter avec une circulation ralentie à l ' approche des douanes , au niveau des à © changeurs des axes nord - sud et est - ouest et autour des grandes villes . Mais le tribunal de Bayonne leur avait accordé un délai jusqu ' à lundi matin pour évacuer le stade . Il me suit partout , du nord de la ville au Plateau , dans les rues d ' Hochelaga , dans le métro , dans mon sac , en pension chez le voisin , tout seul et fier dans l ' entrée de ma maison , avec mon café le matin un sublime moment de ma journée . Selon les informations de dernière minute , un nouveau doyen a été élu . Après quatre ans de bons et loyaux services à Wolfsburg , l ´ attaquant de la Bosnie - Herzégovine pensait avoir obtenu son bon de sortie définitif . Vous développez les supports de communication et définissez la stratégie d Â’ accès au marché , aidant ainsi les Ventes à comprendre le positionnement des produits , leurs avantages clés et les cibles clients . Je veux tourner la page " , déclaré Dominique de Vlippein jeudi 28 janvier à la sortie de l ' audience du tribunal correctionnel de Paris où il a été relaxé dans l ' affaire Clearstream . Ils viennent d ' aligner trois défaites consécutives dans trois compétitions différentes et la blessure de Fernando affaiblit un peu plus leur effectif . spa Oye , ¿ cómo se llama la virgen negra que es la patrona de Cataluña ? Los consumidores salieron satisfechos con los buenos productos y los buenos precios . Los grupales se hacen los días martes y están formados por 20 a 25 personas y duran tres meses y tiene un seguimiento de un año , dado que los resultados no son inmediatos . Es el equipo que mas admiración vi generar en mi vida , merecido lo tienen . El 14 de marzo , día de las elecciones de Congreso , más de 2 . 500 . ' Dos Mundos : Evolución ' es una fusión perfecta del pop con la música mexicana . Y , además , ratificó la realización de las elecciones en la fecha originaria : el domingo 28 de agosto de 2011 . Rahola : Se pueden dar las manitas . Ahí en cambio brilló su compañera de equipo , Samantha Viteri , quien consiguió el oro en + de 90 kg . También quedó establecido el día de entrega de la tradicional Perla deportiva , donde se .. Según algunas agencias noticiosas , un funcionario anónimo del Estado Mayor de la Armada tampoco descarta la posibilidad de un error humano , o sea , la culpa del piloto . Luego del entrenamiento del viernes , el plantel completo , quedará concentrado en lugar a determinar . Les recordamos a nuestros usuarios , como siempre , que para todo tipo de reclamos e inconvenientes pueden llamar sin cargo a nuestro Servicio de Atención Telefónica Integral ( S . Como se acordó en la última reunión con el Ejecutivo municipal , se reliquidaron los sueldos de enero y febrero , de esta manera , ayer , ya cobraron la diferencia , por lo tanto levantaron las medidas de fuerza y se reactivan las actividades . Panamá , sábado 10 de septiembre de 2011 Por fallas sanitarias , Municipio de Dolega cierra su matadero CHIRIQUà . Pocos minutos después de quedarse con las ganas de alzar la estatuilla , Sofía Vergara pudo celebrar : la serie que protagoniza , ‘ Modern Family ’ , obtuvo el SAG a la ‘ Mejor Comedia ’ del 2011 . La recomendación del organismo a México es cuidar el agua ( de la que se desperdicia más del 60 por ciento en la agricultura ) con sistemas eficientes de riego y preservar el germoplasma propio de cada región . En estos momentos se encuentra muy feliz , en paz y entusiasta por este nuevo proyecto en su carrera , señaló Edith . " Antiguamente los falsos testimonio los instruía el propio juez " , sentenció . Los jubilados de la Provincia que perciben hasta 710 pesos podrán cobrar hoy sus haberes . fra Surtout quaprès larrestation de hauts responsables militaires et le projet de marginalisation de larmée au profit de la CTS , les officiers se sentaient menacés et le renversement du régime devenait pour eux une nécessité de survie . Etats - Unis : la fusée Falcon 9 réussit son premier vol d ' essaiLa société américaine SpaceX a lancé vendredi avec succès de Floride sa fusée Falcon 9 pour un premier vol d ' essai . Simplement car il s ' agit des deux meilleures formations de l ' année . Alors que Karim Aït - Fana , blessé aux ischio - jambiers , sera absent pendant au moins deux semaines , Geoffrey Dernis , touché à l ' adducteur gauche , a été contraint d ' écourter sa séance d ' entraînement . Miguel Montero a frappé un circuit en solo pour les Diamondbacks , qui occupent le dernier rang de leur section et qui ont maintenant perdu sept matchs de suite . Mersen : bien orienté après un CA dynamique . Ensuite , BlackBerry a mis en place un nouveau service qui permet de générer des revenus par l ´ intégration de publicités dans les applications ( et notamment les applications gratuites ) . Natixis souffrait également ( - 1 , 34 % à 3 , 54 euros ) , après avoir annoncé une exposition à la Grèce de 900 millions d ' euros . On na plus de communication directe avec les autorités iraniennes , déplore Jean - François Julliard , secrétaire général de Reporters sans frontières . Mais , après un match nul ( 0 - 0 ) contre la Côte d ' Ivoire en entrée , le Portugal doit absolument croquer avec appétit dans ce plat de résistance nord - coréen afin de faire passer plus facilement le Brésil en dessert . En outre , la marque Droid appartient à Verizon Communications , qui commercialise également un Droid de HTC . Cette première injonction , qui avait été obtenue par le syndicat des employés de la raffinerie , arrivait à échéance le vendredi 16 juillet . Cet appel au marché aura pour objet de financer la transformation de Transgene en une société biopharmaceutique intégrée et profitable à l ' horizon 2015 " , lit - on dans le communiqué de la société . Ensuite , en juillet 2009 le FBI détermine l ´ origine française des attaques sur le site de Twitter . En France , le coût moyen des obsèques varie de 2 . 500 à 4 . 000 euros , selon des chiffres communiqués fin 2009 par le secrétariat d ' Etat à la Famille . Ici les prostituées , de plus en plus nombreuses , sont calfeutrées sous leur tchador ; dans le Nord , elles ont la mèche beaucoup plus rebelle . Ils ont senti cela comme une insulte » , a transmis le président de l ' instance locale , André Vaillancourt . Le chef sort chez Harmonia Mundi une Flûte enchantée qui promet de faire date , et donne Cosi fan tutte en version de concert . Il est surprenant qu ' aucune référence ne soit faite à ces travaux dans l ' étude présentée par l ' Institut Pasteur . Nos confrères de Les Numériques viennent de se pencher sur deux netbooks qui exploitent la nouvelle plateforme Pinetrail d ' Intel : le N 210 de Samsung et le U 135 de MSI . pob Mas o importante é bom desempenho do Brasil e dos nossos políticos . Até porque nossos “ grandes líderes †naufragam em tempos de chuva e são reduzidos a pó em tempos de seca . †Antonio Palocci Filho , ministro da Fazenda , sobre o governo ter desistido de elevar em 0 , 6 ponto percentual a contribuição previdenciária dos patrões Folha de S . Paulo , 22 . 07 . Neymar : Estrela santista mostrou que tem força . O tucano - que no primeiro turno achava que os debates seriam sua salvação - agora deve estar perdido Leitura - Péssima essa idéia de colocar Lula para ler respostas com números de seu governo . Numa idade dessa , seu amigo tá ficando doido ! 05 . “ Na dúvida , prefiro atiçar o senhor . Depois as brilhantes gestões de Jesus na prefeitura . Primeiro porque conseguiram surpreender uma equipe grande , considerada da elite do futebol brasileiro , apesar de todas as dificuldades . A informação vai ao encontro das declarações do general Ricardo Sanchez , comandante das forças norte - americanas no Iraque , que revelou que o ex - presidente se encontra em um local seguro . Este impacto pode ser positivo ( mais empregos , por exemplo ) ou negativo ( aumento da violência e de outros problemas ) , dependendo do projeto e da articulação do poder público com os demais setores da sociedade . A reunião não apresentou resultados positivos . Esta cidade é ainda considerada um pólo cultural da região Sudoeste da Bahia ( com a primeira Escola Normal do sertão baiano ) . Foi uma experiência que me ajudou muito politicamente , afinal sai da figura de secretário para ser parlamentar , situação bem distinta , mas que somei em minha carreira e pude estabelecer uma relação com a minha antiga função de secretário . Em terceiro lugar , que o governo seja competente para fazer os brasileiros acreditarem e terem orgulho do Brasil . É bem mais sério - e triste . Ao invés de construir cinco escolas , será edificada apenas uma . Deixa os filhos Ana Cláudia e Luciano . Os iraquianos também expressaram sentimentos diversos . Em meio ao manguezal , a jangada desliza suavemente em direção ao santuário da preservação do Peixe Boi , o dócil mamífero ameaçado de extinção . pob Como de costume coloco o brinquedo para funcionar na frente do cliente , a criança ficou toda contente . Os programas de financiamento beneficiaram 1 , 6 milhão de pessoas com acesso à casa própria e geraram de 665 mil empregos na construção civil . O ritmo do grupo era uma mistura de MPB , rock , samba , reggae e new wave . Isso é importante nessa fase de transição para o time recuperar a confiança . O carro também conta com a avançada tecnologia VSA ( Vehicle Stability Assist ) , que assegura estabilidade ao sedã médio mais vendido do país . Por exemplo : você retirou dinheiro da sua conta bancária para colocar na sua carteira . Porém , sobre a pergunta , especificamente , cabe dizer que , além de meus compromissos com o Estado , também sou professor dos Cursos de Medicina e Administração Pública da Faculdade São Lucas de Porto Velho . Para o casal , a expectativa é que a perícia chegue esta manhã . É porque não gosto de trabalhar à noite mesmo . Alguém mais duvida de que possa fazer de tudo para sua querida esposa ser a vice ? As duas equipes vivem situações semelhantes na competição , brigando para se livrar do rebaixamento . O Palmeiras marcou o terceiro gol ainda no primeiro tempo . “ Estamos trabalhando para colocar à disposição dos sergipanos uma das unidades de pronto - socorro mais modernas do Norte e Nordeste do país †, declara . Larissa vai até o quarto de Nicolau para conversar com ele . Salientou que o texto da cláusula que permite a Ecco - Salva deixar de prestar serviços sem justificativa , é vedada não somente pelo CDC , mas também da Constituição Federal e do Código Civil . A reinauguração será realizada no dia 25 / 05 , no jogo contra o time de futsal de Umuarama , pela 11 ª rodada da Chave Ouro do Campeonato Paranaense . Disse que estes congressos sempre são feitos na Europa e América do Norte , e agora houve uma consulta perguntando se há interesse em Porto Alegre sediar este congresso em 2003 . 29 a 32 ) Linha de Frente - Wálter Fanganiello Maierovitch - O STF virou trampolim - Como até a torcida do Flamengo já notou . “ Foi uma modificação que a equipe rendeu bem †, resumiu o treinador . Para as existentes , a gente vai ver o que se vai fazer nessa matéria . pob Tenho que me controlar para não sair berrando que aquele homem silencioso e solitário em seu camarim no intervalo do show mereceria um tratamento à altura da sua imensa grandeza artística . Na terça - feira ( 12 ) , o serviço não funciona . Estas são apenas algumas das mensagens colocadas na última semana em dois dos mais populares websites de anúncios da Indonésia , os portais " Gratisiklan " e " Iklanoke " . 2005 - 08 : 12 Deixe o seu comentário Comentário ( requerido ) Quantidade de caracteres restantes : Deseja que seu comentário seja PUBLICADO ? Um conselho , formado por integrantes do governo federal e de representantes da sociedade civil vai coordenar a implementação da campanha no país . Ricardo e Rodolfo conversam sobre a tristeza de sinhá Moça ao ver Rafael preso na senzala . Se o Brasil fosse um país sério e justo , o causador desse acidente que para mim deveria se chamar homicídio , seria punido com muitos anos de cadeia . A polca , das pernas de canelas tão finas ! O restante dos rendimentos do jogador seriam conseguidos na negociação dos dois espaços do uniforme do Corinthians . A aprovação do mandato de Maia Neto , mesmo oito anos depois , supera a 90 % . Hoje pela manhã aconteceu uma importante reunião com a presença da Primeira dama Sônia Chaves ; Secretária da Cultura Guida Maia , além de outros setores da Prefeitura . É a época das grandes amplitudes térmicas . Segundo ele , a economia pode crescer mais de 5 , 7 % em 2010 . Se o índice de umidade ficar abaixo de 12 % , caracterizando estado de alerta máximo , um Plano de Contingência será colocado em prática . Corpos identificados À medida que os corpos são reconhecidos , os nomes são divulgados pela prefeitura de Angra dos Reis e pelo Instituto Médico Legal do Rio . A Corregedoria Nacional de Justiça ganhou o reforço de mais uma juíza . A expansão desse mercado começa a atrair a atenção de grupos estrangeiros , que ainda encontram dificuldades para se instalar no país . Eu mesmo posso acrescentar mais alguns nomes a esses já relatados . Não passa de mais um político enganador . O cerco se fechou . spa Estos objetivos productivos en las principales cadenas se lograrán en la medida en que se incorporen nuevas tecnologías . En otras épocas el hombre se sentía culpable por gozar , ahora se siente culpable o culpa a los otros por no hacerlo en dosis suficientes . Ernesto Sotolongo , Gerente General de la Territorial Habana de Artex , aseguró que además de las ofertas gastronómicas habituales del salón , se brindarán opciones en moneda nacional . Los integrantes de la comisión reconocieron que ese Gobierno debe ser acordado entre Zelaya y Micheletti , pero aseguraron que el acuerdo solo establece que para el jueves deben estar elegidos sus ministros y viceministros , pero no quién lo dirigirá . No es solo abuso es corrupcion tambien , el informe tambien informa corrupcion . Sea como sea , ésta es la segunda vez en poco más de un año que el Senado se está mostrando como una instancia racional en medio de tantos desvaríos . El imputado fue declarado culpable de " homicidio calificado por promesa remunerativa , uso de arma de fuego y la participación de un menor " de edad . Cierta sensibilidad te aborda este día , tienes que poner suavidad en tu espíritu para que puedas aceptar las cosas que no puedes cambiar . Por ejemplo hoy , ningún candidato se anima a pararse en un cajón de tomates en una esquina para decir que acá hay que privatizar . Una última cosa , tampoco entiendo la justicia norteamericana , si la denunciante tiene credibilidad se detiene a quien sea y si no la tiene le puede pasar cualquier cosa que no le hacen caso . Ferrer se une a Ferrero en octavos Ferrer : El tenista de Jávea derrota a Florian Mayer por ( 6 - 1 , 6 - 2 , 7 - 6 ( 2 )) . Se ve que la memoria no te anda del todo bien . Si empata , puede tener un desempate con Olimpo o River o formar parte de un triangular si ganan sus dos adversarios de la pelea . En este sentido , sostuvo que el largo proceso que puede instalarse en la Justicia provoca que los inversores se desalienten . Para la reducción se acude a la fusión , que consiste , como es sabido , en la creación de una sola empresa a partir de dos o más preexistentes con disolución de todas ellas o perviviendo una sola de ellas , caso de la fusión por absorción . En Rosario , el mismo día , a las 10 , está prevista una clase pública en laplaza Pringles . Comenzaron los preparativos de la nueva producción musical de ‘ El Mono ’ Zabaleta , quien visitó las instalaciones de Vanguardia Valledupar para agradecer al público por la gran aceptación que ha tenido . En que estaría yo pensando .. Justamente , el Indio encabezó un trencito electrizante y trajo a cuesta hasta la décima vuelta a Beitia , Litwiñiuk , Luciano y Nilsson . En Zamora se han dejado improductivas muchas tierras de cultivo , y en buena parte es porque sus propietarios las tienen ociosas como una forma de presionar para que se les otorgue el cambio de uso de suelo y urbanizarlas . pob 2010 - Fórum comunitário discute presente e futuro de Vieques 15 . 04 . A ação foi movida visando à reparação dos danos sofridos por indígenas Tupinambá quando , em junho do ano passado , foram violentados e torturados por agentes da PF . Mas para a vida das pessoas , é um rendimento fundamental e que elas sentem no seu cotidiano . " A campanha informa de maneira transparente , clara , direta . As evidências apareceram na reta final do campeonato e se acentuaram no returno , a partir do empate com o Camboriú , em pleno Domingos Gonzales . Também haverá painéis sobre desenvolvimento local e regional e uma oficina a respeito do planejamento dos cem primeiros dias de administração municipal . Por outro lado , entre as musas da Inconfidência esteve Bárbara Heliodora , mineira de sangue paulista , pois descendente da família Amador Bueno . Na ação , o Brasil rebateu a sentença de Bates , afirmando que a decisão contraria a Convenção de Palermo . Para isso deverá pagar a metade da tarifa ( R $ 0 , 90 ) . Uma hora e meia é tempo suficiente para fazer o estrago . Os cães estirados ao sol . Já os gastos de estrangeiros no Brasil , nos três primeiros meses do ano , ficou em US $ 1 , 655 bilhão , contra US $ 1 , 422 bilhão observado no mesmo período de 2009 . Parafraseando os versos da canção do velho cancioneiro , pergunto : Se a Cabocla Maringá , a histórica morena de uma beleza estonteante , esteve em Pombal , de corpo e alma , ora , ninguém sabe , ninguém viu . Pelos dados da ANP , o consumo próprio ficou em 7 , 209 milhões de metros cúbicos diários em janeiro , com queda de 13 , 04 % em relação a janeiro do ano passado . No entanto , o goleiro Bruno , um dos poucos titulares que deve ser aproveitado por Celso Roth , rejeita a hipótese de desprezo à competição internacional . Ele é tão inocente quanto o Dr Roger abddelmassih tbem estuplador de pacientes , q tbem era casado que soltem os coitados dos Nardones o inesquecível maníaco do parque . A média de salários dos clubes norte - americanos é de US $ 10 mil . Aos 33 anos , Sissi , considerada a melhor jogadora do Brasil , está se transferindo para o São Francisco , onde terá Cátia como companheira . Seu amigo errou em estrear o tênis no dia da prova , e no caso dele , correr descalço acabou o atrapalhando porque ele não tinha o costume de correr dessa forma , e por isso acabou por atrapalhar seu desempenho . O risco é grande , como estamos percebendo durante todos estes últimos 30 anos , em que a atenção maior se volta para a questão ecológica . Nesta segunda - feira ( 16 / 11 ) , a direção do clube apresentou seis dos oito reforços contratados para o estadual .fra Le rappel à la décence par le Président , réagissant comme un père - fouettard , cède à ce pittoresque vaudevillesque qui se répète périodiquement , avec l ' effet que l ' on sait . De nombreux appels en ce sens avaient été lancés depuis le boycott de l ' entraînement de dimanche . Un décès a été recensé et le couvre - feu demeure . Cet argent destiné à la réalisation des œ uvres de petite envergure , est victime de la liberté de gestion accordée aux élus du peuple . Au lieu de cela , on laisse naître et s ' installer un débat sur la crédibilité des tests . Les troupes de l ' OTAN et du gouvernement afghan ont causé 223 morts civiles au premier semestre 2010 , contre 310 au premier semestre 2009 . Leur part de responsabilité est passée de 31 % des décès l ' an dernier à 18 % cette année . Les assureurs pourraient reprendre la formule dAlbert Camus , " il faut imaginer Sisyphe heureux " . La mère de l ' enfant s ' était portée partie civile dans l ' affaire . Luc Chatel , qui est également le ministre de l ' Education nationale , s ' exprimait lors d ' un point presse avec des journalistes spécialisés dans l ' Education . Enfin , dans cette cuisine électorale où les candidats se disputent dabord le bout de gras , gardons le meilleur pour la fin : les tractations entre le PS et lAlliance pour un rassemblement des forces de progrès au deuxième tour . Je ne sais pas quoi dire , c ' est un moment historique et nous ne savons pas si cela se reproduira un jour dans nos vies . L ' hebdomadaire " le 10 sport " numéro 213 paru ce vendredi ( 17 / 9 / 10 ) titre en une : " Edel les preuves accablantes " et revient sur l ' affaire Edel ( nom du gardien camerounais du PSG ) dans ses trois premières pages . Tête de liste de la majorité en Pays de la Loire , pour les élections régionales de mars . Le porte - parole de l ' armée , Sunsern Kaewkumnerd , a pour sa part indiqué que l ' armée " contiendrait " les manifestants . Il ne ventait pratiquement pas , dans le secteur de la marina d ' Aylmer , lors de la présentation des dernières courses . Les Sénateurs signaient un quatrième gain d ' affilée face aux Canadiens , un cinquième en six affrontements cette saison . La compagnie d ' embouteillage d ' eau Aquablue International , qui devait s ' installer dans l ' ancienne usine de Hershey , éprouve des problèmes financiers . Notre mot d ' ordre , c ' est une république solidaire " , a - t - il lancé , en fixant " trois priorités " : emploi , innovation , réduction des déficits . Les ambulanciers ont tenté des man œ uvres de réanimation , avant de transporter l ' homme dans un centre hospitalier de Trois - Rivières , où son décès a été constaté . ‘ Il faut leur inculquer une bonne éducation islamique qui puisse les protéger contre les courants de pensées allant à l Â’ encontre des principes de notre religion Â’ , renseigne le khalife général des mourides . ita La più attesa tra tutte è stata quella di Mauro Biani . L ' ordigno , che ha annerito l ' androne ed il portone , è stato accompagnato dalla scritta " game over " sul muro adiacente . La manovra che abbiamo già annunciato , consistente e significativa , sarà anche superiore alle esigenze che chiedono i parametri " ; . Si parte alle 19 con l Â’ aperitivo swing e le selezioni anni Cinquanta di dj Lalla Hop . E per l ' Europa sarebbe una sconfitta politica gravissima . Questa la semplice chiave di Pep Guardiola per approdare alla finale di Madrid . Sarà una gara difficile dove l ' importante è fare funzionare bene le gomme " , conclude il brasiliano . Vienna , 7 gen . - ( Adnkronos / Dpa ) - Il prezzo del petrolio della Organizzazione dei Paesi Esportatori di Petrolio ( Opec ) e ' salito a 79 , 64 dollari a meta ' settimana . Trovare un ' intesa tra Camera e Senato sull ' esame delle proposte di modifica della legge elettorale , in modo da procedere " in modo ordinato " . Quasi impraticabile '' : '' Occorrono i puntelli , subito - e ' la conclusione - . Ma i puntelli non bastano . La prima del genere , in Gran Bretagna : destinata a fare storia e probabilmente a mettere un freno a un certo tipo di azioni legali non troppo meditate da parte dei titolari di copyright . Spero che sia di quest ' anno ' . È stato proprio dal secondo mezzo della stessa azienda che trasportava altri giovani , che è scattato l ' allarme . Il programma proseguirà per i sette martedì successivi con riunioni alle 20 , 30 nella sede della Croce Bianca . L ' uomo ha ignorato le regole elementari del codice stradale con un mezzo potente , per puro desiderio di velocità » , ha argomentato il tribunale locale . Schiavone , testa di serie n . 17 , ha superato 0 / 6 7 / 5 6 / 0 la francese Alize Cornet e ora incontrera ' un ' altra francese , Julie Coin . Durante la conferenza è previsto anche un minuto di silenzio , che probabimente coinvolgerà tutto il Salone nei suoi cinque padiglioni , in segno di lutto per i due militari della Brigata taurinense morti in Afghanistan . Trichet : la Grecia non può lasciare l ' Area Euro - Yahoo ! " Le priorità del Paese sono altre - aggiunge - I cittadini ci chiedono di contrastare la crisi economica e realizzare le riforme a cominciare dalla completa attuazione del federalismo fiscale . 117 della Costituzione ( che definisce le potesta ' legislative di Stato e Regioni ) anche sotto il profilo del principio della '' leale cooperazione '' . fra Les petites entreprises ont elles aussi été durement frappées , notamment les éleveurs d ' huîtres de la région de la l ' Ile de Ré . Ceux qui n ' ont pas souscrit d ' assurance " pertes d ' exploitation " sont très inquiets . La TVA réduite dans la restauration : le 1 er juillet 2009 , la TVA est passée de 19 , 6 % à 5 , 5 % dans la restauration . Ils ont tous les deux mis en avant larticle 406 qui parle en même temps dincendie criminel volontairement provoqué . Notre confiance en a pris un coup après la défaite face à l ' Egypte . Au Maroc , une Association AMEM , est créée pour aider la femme marocaine à traverser cette étape avec le moins de risque . " Le fini - parti , c ' est un faux problème " , assure Patrick Rué , secrétaire général adjoint de FO . Tout le quartier Hors - Château est de nouveau rouvert à la circulation . En 1962 , il est condamné par défaut à 7 ans de prison pour " trahison " . En revanche , il va falloir à Eric Woerth trouver une défense plus solide pour convaincre qu ' il ne s ' est pas immiscé dans les relations entre Patrice de Maistre et son épouse . Aprà ¨ s une succession d ' incertitudes entourant la bonne tenue du procà ¨ s du convoyeur le plus cà © là ¨ bre de France , la foule de journalistes venue assister aux dà © bats ne se sera finalement pas dà © placà © e pour rien . Carlos Queiroz a communiquà © sa liste des joueurs retenus pour la Coupe du Monde . AFP - La semaine sociale sera marquée par un appel à la grève et à des manifestations chez les fonctionnaires jeudi , ainsi que par les voeux à la presse des leaders des confédérations FO , CFDT et CFE / CGC . Autant d ' actions qui visent à diversifier nos menus maison , à innover , mais aussi à faire beaucoup avec peu ( de temps , d ' argent , de ressources ) . Jen parlais hier sous forme dinterrogation : le Panathinaikos , champion dEurope en titre , est éliminé de lEuroleague au stade du Top 16 . Le FC Barcelone sest chargé de son exécution en prenant le dessus sur des Grecs ( 70 - 67 ) pourtant bien préparés . Il faudrait que le gouvernement prenne des initiatives plus probantes comme celle de tout faire pour relancer l ' emploi " . Trois jeunes supporters allemands , en fait des Sud - Africains d ' ascendance germanique , entrent revêtus du maillot de la Mannschaft , qui vient de se qualifier en battant le Ghana . Lors de son dernier passage , en janvier dernier , il était déjà question d ' un retour à Saguenay pour la présentation de spectacle La Nouba ou du spectacle Dralion . L Â’ une des raisons de ce comportement pourrait être une forme d Â’ altruisme . Comme chacun sait , le sport n ' a rien à voir avec la politique . Dans la matinée , le CAC 40 évolue autour de l ' équilibre , en légère hausse de 0 , 07 % à 4 . 053 , 37 points . fra Ce faible taux est dû , selon M . Touré , aux reformes qui ont été introduites cette année dans lexamen du DEF . Militaire de carrière , forcément intouchable en raison de son statut , Ousmane Conté a toujours eu une réputation sulfureuse . Sous oublier la couleur du ciel , c ' est le paradis pour volcanologue et photographe . Mais les habitants de Bopope nétaient pas informés de tous ces détails . Nul doute qu ' il en sera de même pour l ' actuelle réforme à l ' étude au moment où la principale préoccupation du gouvernement est de restreindre tous les budgets . Dans ce dernier trimestre , l Â’ Anglaise a mis de côté 32 , 2 milliards de dollars en vue de faire face à la marée noire du golfe du Mexique qui plombe littéralement l Â’ entreprise depuis plusieurs mois . Il a annoncé mardi être en négociation avancée pour prendre une participation majoritaire dans Boostec , une PME des Hautes - Pyrénées . Le conseil de fabrique de la paroisse de Saint - Donat aura de l ' aide pour redresser sa situation financière . La publication des résultats de ce trimestre devrait avoir lieu mi - octobre . Fabrice Larue en est un , a expliqué Hervé Chabalier , 64 ans , qui reste président de la société et de ses cinq filiales : Capa presse , Capa Drama , Capa Entreprise , Capa production et Capa Cinéma ( au total 130 salariés et 250 emplois ) . Des religieux parfois de bonne foi , souvent aux pratiques sectaires . Aux HUG de Genève , le service est disponible pour tous . Elle accepta de conduire Macky le Lynx sur les lieux , mais il se trouvait que la police du troisième arrondissement avait déjà amené le bébé à la Pouponnière . Laissez vos propositions dans le cadre de commentaires ci - dessous . Il faut créer une nouvelle société adaptée à son temps qui fournira des services au public et pas d ' emmerdes . MADRID - Jose Mourinho , l ' entraîneur portugais du Real Madrid , a déclaré vendredi souhaiter que l ' Espagnol Luis Aragones soit le nouveau sélectionneur du Portugal après le limogeage de Carlos Queiroz . Et les pamphlets en dialecte local dénoncent les aberrations du monde . Le conflit a fait 300 000 morts selon les estimations de lONU , 10 000 daprès Khartoum , et 2 , 7 millions de déplacés . Pinot gris , riesling et gewürztraminer donnent aussi quelques vins dignes de mention . Les révélations semblent d ' ores et déjà explosives : " A première vue , il semble y avoir matière à étayer des crimes de guerre " a - t - il déclaré . pob Centenas de servidores lotam as galerias da Casa e faixas foram erguidas para pressionar os deputados a não apreciarem a proposta de elevação da carga horária e criação da gratificação por Condições Especiais de Trabalho ( CET ) para todos os funcionários . A primeira vítima disso foi o Atlético - MG , que teve um empréstimo , teoricamente aprovado , negado após o estouro da crise . “ Depende muito da utilização do veículo . A mãe , Katherine , o pai , Joe , e os filhos foram ao ar no programa nesta segunda - feira ( 7 ) , nos Estados Unidos . A partir desta data , dependendo do dia em que os partidos políticos ou coligações escolherem seus candidatos , é vedado às emissoras de rádio e de televisão transmitirem programa apresentado ou comentado por postulante a cargo público . " Essa proximidade do estudante com a comunidade carente é muiro enriquecedora . Ele é parte de nossa história . Os paises tem necessidade de gerar alimentos para poder dar de comer a seu povo . Ela cobra mil reais para trazer o marido de Nilza de volta . Com as novas regras , o ALE passa a ser integralmente levado para a inatividade . No próximo ano , tem mais ! Faz bem à saúde mental dos gaúchos receberem essa boa nova . É claro que não existe uma tradução para isto , mas bem que seria interessante começar a ver pessoas na rua com estas quatro letras estampadas nas costas lembrando que os políticos devem estar onde o povo está . " será que vamos conseguir vencer . Mário Cardoso : Olá , Aldo . Todos reclamam de decepções e dificuldades . " É importante achar a solução específica para cada área " , destacou Sukhdev . Abandonar o hábito deixa seu corpo começar a cura , ressaltou Benjamin . Euriza Cavalcante , conta que na sua rua , os vizinhos se juntam para comprar a água . Abortamos a iniciativa e , naquele momento , só tínhamos uma opção : voltar para Sabratha , controlada por Kadafi . spa Manifestó que " para el FIDA , lo más importante es examinar cómo se puede canalizar este dinero para contribuir a la prosperidad de las zonas rurales " . Con 17 mil toneladas en el 2007 , 32 mil en el 2008 y 50 mil para este año , volumen do 9 nde casi la mitad está sustentado en el arroz popular . El encargado de abrir este ciclo fue nada menos que Yo - Yo Ma , el más extraordinario chelista de las últimas décadas y uno de los artistas más sublimes del panorama de la música académica internacional . Cattaneo hará lo propio desde su residencia en Yerba Buena . Ronaldinho Gaúcho fue convocado de nuevo a la selección de fútbol Brasil para el amistoso del lunes contra Ghana en Londres . Yo no podía quedarme sentado si faltan carreteras e infraestructura . Incluso la gente de las fronteras viene a realizar sus compras en la ciudad †, señaló Carlos Palombo , quien dijo que las ventas no pasan en este caso sólo por un evento en particular como la Copa América . Fabián ( Ríos ) conoce a los productores y encontró la forma de ayudarlos con la Subsecretaría . Senado votó 16 venias para entes Comparta esta noticia en su red social favorita ! En fin , ¡¡ que demócratas que tenemos en nuestras instituciones ! Quisimos administrar el 1 - 0 , pero debimos hacer hecho el segundo gol †señaló . Al grupo Uno de Vila y Manzano , por ejemplo , no le interesa el periodismo sino usar al periodismo , yo los conozco . PPT critica falta de espacios para discutir en el oficialismo Caracas . Los partidos tuvieron su tiempo y su oportunidad para argumentar y para hacer de la política un tiempo de consenso y acuerdo , pero ya se ve que si el de enfrente no acepta mi verdad , no habrá acuerdo posible . Por su parte , el asesor técnico de las cooperativas , arquitecto Gustavo Urquijo , al brindar mayores de talles sobre el servicio que realizarán los cooperativistas , explicó que “ son dos grupos de 3 Cooperativas de 48 integrantes en total . Hubo una correcta capacidad de análisis . En el avión , el Papa hizo referencia a los abusos sexuales a menores por parte de miembros de la Iglesia , diciendo a los periodistas : “ La Iglesia ha sido herida por nuestros pecados †. El PRI pierde por primera vez la Presidencia de la República . “ Sería importante conocer que marranito tronaron para poder realizar un evento así en el zócalo capitalino , por lo tanto se debe informar de donde salió dicho recurso †, sentenció Gómez del Campo . En la acción del Manzano , en los prolegómenos de la Campaña de Lima , se empleó el Cazadores del Rímac , que bien pudo haber concurrido a la Campaña de Tacna . fra Huit ans après avoir quitté Amsterdam , Ahmed Hossam Mido va à nouveau porter les couleurs de l ' Ajax . Positive au dessus de 3500 PTS avec comme objectif 3640 PTS . Paradoxalement , l ' Irlande espère que ces annonces fracassantes aideront à calmer durablement les inquiétudes sur sa solvabilité à long terme , et les craintes récurrentes d ' un appel à l ' aide de l ' Union européenne ou du FMI . Ce geste doit aussi être réalisé à plusieurs reprises au cours de la préparation des repas : à chaque fois en fait que vous passez d ´ un aliment à l ´ autre . La forte hausse des prix des produits de base agricoles et des denrées alimentaires intervenues en 2007 et au premier semestre 2008 , a provoqué un « choc » dans le monde entier . Retour au premier plan pour Red Bull avec la victoire finale de Sebastian Vettel lors du Grand Prix dâ € ™ Europe à Valence . Elle bénéficie du statut juridique et fiscal le plus favorable qui existe en France . Le délai est maintenant d ' une à deux semaines . Par contre , le hic , c ' est que Kovalchuk pourra , s ' il le décide , choisir lui - même une équipe , celle qui lui présentera les meilleures conditions de travail . Les réalisations de Pandev ( 6 e ) , Samuel ( 20 e ) et Milito ( 47 e ) n ' ont laissé aucune chance aux Sardes . Différents exposants de sport connexes au nautisme seront aussi présents . Ce serait malhonnête cependant dincriminer tout le parti pour ce beau gâchis , car la médiatisation de la crise est du seul fait de Koniba Sidibé . Avant cette rencontre , M . Webb était pourtant présenté comme l ' un des meilleurs arbitres européens , si ce n ' est le meilleur . Jétais peu attirée par la recherche et par lenseignement , pensant que mes capacités se trouvaient plutôt dans la création et le spectacle . Or , l ' île ne compte aujourd ' hui qu ' une seule exploitation agricole , de surcroît bio . Le randonneur a pu compter sur une commandite des Vêtements Chlorophylle en prévision de ce voyage sur la route de Compostelle . En revanche , la droite s Â’ est montrée divisée sur le sujet . Il n ´ y a pas ( encore ) de hiérarchie réelle en multicoques comme il y en a en monocoques ( domination des Anglo - saxons et des Néo - Zélandais ) et beaucoup vont probablement tenter leur chance dans ce monde encore méconnu . Habituellement , les collisions avec les chevreuils et les orignaux surviennent à l ' automne ou au printemps . Le maire de la commune de Saint - Jouin - Bruneval , François Auber , s ' est engagé sur la liste du PS . ita Se quello era il compito di Moreno a lui non si puo ' dire niente , la colpa e ' stata della Fifa " . Grazie all ' Italia è stato ricostruito un apparato giudiziario che ha superato quello rapido e brutale dei Taliban . Una sentenza che non tiene però conto dello stato di affezione dell ` animale , che pur essendo intestato al marito ha sempre vissuto con la signora Vittoria . 5 . La medicina omeopatica ha un largo seguito tra persone di cultura medio - alta . Un venerdi ' nero interrompe bruscamente una serie positiva che si protraeva da sei sedute consecutive . In merito alla prima frase si tratta di censura o di omissione , per essere leggeri , sicuramente dettata da fini di necessaria brevità per motivi redazionali . Non è cambiato niente , dice Rosella . Deboli le indicazioni che arrivano dall ' opposta sponda dell ' Atlantico dove si dovrebbe assistere ad un avvio cedente . In sostanza il gap da recuperare è minore ma l ' avversario è più forteLa variabile incalcolabile è la fame che Valentino a 31 anni ha ancora : è la sua linfa vitale , se fosse rimasto in Yamaha le avrebbe prese , ecco perchè è passato in Ducati . Barone : E va bene , che cazzo me ne frega . stacco un assegno mio di 500 euro intestato a chi ? Secondo gli investigatori , nonostante negli stessi incendi sia stato utilizzato uno pneumatico come mezzo per appiccare il fuoco , non ci sarebbe nessun legame tra i due casi . Che non è solo amare l ’ ambiente selvaggio e rispettarlo , ma prendere coscienza che la natura allo stato primordiale è indispensabile a tutti . Gli elettori che si recheranno a votare sono 1 . 087 . 085 ; potranno votare anche coloro i quali non hanno votato al primo turno . La Fiom ritiene impossibile firmarlo perché " contiene profili di illegittimità " . Con me gli attaccanti si sono sempre esaltati : vedi Amoruso , Bianchi , Bellucci , ma a me non interessa chi sta nell ' area ma devono essercene almeno tre . Un operaio è morto e altri quattro sono rimasti gravemente feriti nello scoppio verificatosi in una cisterna dello stabilimento farmaceutico Sanofi - Aventis , nell ' area industriale di Brindisi . Tempestivo l ' intervento dei carabinieri della Stazione , guidati dal maresciallo Davide Marcucci , che dopo aver rassicurato il malcapitato , ancora atterrito , hanno verificato la messa a soqquadro dello studio della guardia medica . La storiella del bottino nascosto è stata spifferata dal compagno di cella di Bernie al New York Post , il tabloid di Rupert Murdoch informatissimo sulle sue avventure . Senza Argentina e Uruguay , con la Germania hitleriana che aveva assorbito l ' Austria ( ma perse con la Svizzera ) . E gli unici a gioirne saranno i numismatici . pob Serão disputadas quatro fases . Depois podem usar de papel de rascunho - – ou até queimar . O painel , em policarbonato leitoso , precisa ocultar a visão dos caixas . Aparece regional , estadual e nacionalmente por ser explícito ! Movimento onde a leitura foi mais importante do que a escritura . Astral de grande sintonia com a pessoa amada e amigos . " Mais cedo , ao chegar ao Congresso , o presidente do Senado , Garibaldi Alves ( PMDB - RN ) , reafirmou seu otimismo em relação à chegada da matéria em plenário , já nesta quarta - feira , para votação . São ao todo 236 funcionários . Para os membros daComissão Especial , as ações de criminalização e identificaçãode integrantes de movimentos sociais são um atentado ao EstadoDemocrático de Direito . Os intérpretes de " Violas e canções " , " Viola quebrada " , " Luar do sertão " e " Pingo d ' água " , entre outras , fizeram apresentações nos Estados Unidos . Segundo ele , o Judiciário , o Ministério Público e os advogados não podem deixar que essa eleição se torne um campo de batalha . Filho de pequenos agricultores estudou na Escola Municipal José Bonifácio e trabalhou com a família até os 24 anos . Serão construídos 28 laboratórios , além de três salas técnicas . Três minutos depois , Fred aproveitou rebote do goleiro são - paulino e ampliou a vantagem carioca . †Estudante chega à Unilago : calor favorece uso de trajes curtos Calor favorece trajes curtos Com temperatura média de 30 graus em Rio Preto , o calor é apontado pelas universitárias como o principal motivo do uso dos decotes e roupas curtas . Os anúncios de lançamentos imobiliários procuravam ressaltar que os condomínios residenciais eram locais seguros , com áreas de lazer próprias e sistemas avançados de segurança que poderiam garantir tranquilidade ao morador . Esta mudança de comportamento está mais evidente a cada campeonato . Conforme Clóvis , a categoria foi precipitada . Libra - Bom dia pra sentar na mesa de negociações com sócios , clientes e parceiros e cobrar dívidas e pendências , promessas que lhe foram feitas , mas até agora não foram cumpridas . Mesmo se as legendas não coligarem , o pedetista promete ficar na disputa . ita Lo stesso ruolo della donna ha un risvolto completamente diverso nel mondo del lavoro e nell & rsquo ; utilizzo del tempo libero . Paradossalmente è vero , ma si chiama stato di polizia , è come tagliarsi le balle per non far godere la moglie tro a .. Era la voce della Madonna . Nel Paese è ancora vivo il ricordo delle alluvioni di primavera , quando morirono una ventina di persone . Ma la notizia , in questo caso scritta con un collage di mail dei lettori , ci sta tutta , poiché Haiti non è dietro l & rsquo ; angolo , non è a tre , sei o due ore di macchina , e quel paese spaventa per le immagini che vengono trasmesse . In compenso , in Africa del nord , in particolare Marocco , Egitto e Algeria , il virus " resta attivo " , secondo l ' Oms . " Questo è sicuramente vero " commenta Paolucci che aggiunge : " un grande maestro del restauro , Giovanni Urbani , diceva che tra l ' arte antica e l ' arte moderna esiste di sicuro una grande discontinuità , una frattura . I dati sono stati elaborati dallo " Studio Giovanelli Partners " di Trento su incarico dell ´ Assessorato provinciale al commercio . Il 14 luglio 2009 muore il primo caporal maggiore Alessandro Di Lisio , 25 anni , originario di Campobasso , in conseguenza della deflagrazione di un ordigno posizionato lungo la strada a 50 km a nord est di Farah . Usa : Obama , disoccupazione e ' un problema enorme - Yahoo ! La campagna Alberto Guardiani Sport à ¨ pianificata direttamente dallâ € ™ azienda . Roma , 5 nov . ( Apcom ) - Umberto Veronesi è il nuovo presidente del consiglio direttivo dell ' Agenzia per la sicurezza nucleare . Il dato emerge da una ricerca Wincor Nixdorf , realizzata in collaborazione con Doxa . « I punti oscuri di questa vicenda - chiosa il legale di Speziale - sono rimasti tali » . Inoltre è prevista anche una & lsquo ; pedalata tricolore ' ( è consigliata una tenuta rosso - bianca - verde ) alle 14 , 15 al parco urbano di Forlì . I corsi , dopo un nuovo minimo a ridosso delle 21480 , invertono rotta e ritornano verso le 21900 . L ' autore del volume , il banchiere cattolico Bazoli , ha aggiunto che " la Chiesa accettando il capitalismo non ha rinunciato a criticare le ingiustizie e gli squilibri " . – ha aggiunto il Direttore della Coldiretti di Savona – Gli agricoltori sono pagati troppo poco mentre i loro prodotti sono venduti ad un prezzo maggiorato in media di cinque volte il prezzo originale ” . Quali le azioni che le istituzioni devono attuare , per favorirne l ' utilizzo e la crescita e lo sviluppo delle imprese sociali ? Il primo tempo ha visto le due squadre cercare costantemente la soluzione che avrebbe potuto portare al punto del vantaggio , ma sovente invano . spa Esto es el derech CLATRD ( ARR OB A ) HOTMAIL ( PUN TO ) COM ( E S PI E ) ( C ELU L AR ) ( V EN TA ) ( CL AVE S ) puede ser muy provechosa para quien lo apoya . “ Estoy muy feliz , sobre todo después de haberme enterado que su carrera viene creciendo y que en Argentina , Uruguay y Paraguay ya es un territorio MR . Su hermana Arlene , en cambio , es tímida , lo que no impide que antes de los veinte ya brille desnudándose sobre el escenario como Raquel Evans . El candidato subrayó en su encuentro con el obispo Alonso Garza Treviño s que está en contra de las adopciones de parejas del mismo sexo , además de estar en contra del aborto . El rock convocó a decenas de jóvenes , como Mauricio Montero , de 23 años , y su hermana Marilyn , de 9 años . " Existe un acuerdo entre los jueces de izquierdas para dar la vuelta a los resultados de las elecciones , quieren eliminar a quien ha sido elegido y esto es como una losa sobre nuestro sistema democrático " , dice . Por los Cardenales , los dominicanos Furcal de 5 - 1 con una anotada , Pujols de 5 - 1 con una anotada y una impulsada . No hay un capítulo de propiedad intelectual , pero no necesitamos abundar sobre los graves conflictos que se han presentado no sólo en el tema del pisco , sino también en el caso de las paltas , aceitunas , orégano , chirimoya , la papa . Y esos hechos fueron el sábado por la noche , pero hasta ayer , al filo de las 10 de la mañana , cuando presentaron la denuncia , levantando la investigación 69 Ixhua / 2010 , por lo que esta quincena no podrán cobrar los empleados .. Binner hizo hincapié en el campo , prometió el 82 % móvil y habló de inseguridad . No soy uno del 15 M , pero esto está llegando a unos límites que mi condición de ser humano me está diciendo que no se puede aguantar . “ Para la cultura no hay presupuesto . Lo dejan solo en una sala llena de bancos . Por los anfitriones , las conversaciones estarán presididas por el ministro de Relaciones Exteriores , S . M . Krishna . Fuentes de la Casa Blanca adelantaron este domingo a la cadena de televisión ABC que se espera que la demanda sea interpuesta en los próximos días . Zelaya fue recibido en el aeropuerto internacional " José Martí " de La Habana por el canciller cubano , Felipe Pérez Roque . " The cove " , en cambio , es una exigencia para los que conservan algo de humanidad . La droga ha sido comparada con el LSD y puede producir alucinaciones , paranoia severa , convulsiones , agresividad , aumento de la presión arterial e insuficiencia renal . Distintas alternativas de cierre de ventas . Además confió que por ese entonces se le hacía difícil escapar a la tentación de compartir momentos y mesas con amigos . fra On a beaucoup rappelé dans les médias le fait que le RLQ naisse cinq ans après la parution du Manifeste pour un Québec lucide . Certains affirment que la présidente par intérim " a été remplacée par le syndicaliste Lonsény Camara " . L ' exercice 2010 - 2011 débute sur une tendance toujours positive , a indiqué Laurent - Perrier . Les marchés d ' actions asiatiques sont pour la plupart en territoire négatif jeudi , les incertitudes économiques évoquées par le président de la Fed ayant alarmé les investisseurs . Pour cette édition , trois filles , au lieu de quatre annoncées initialement , défendront les couleurs algériennes . Berets rouge , moustache , chant de supporters de foot , grossièreté , tout y est . Le document comporte la photo dudit « Robi » , qui est désormais en Suisse pour aider la police . Un accès avec empreinte digitale et une chambre « pour les gardes du corps » vient agrémenter l ' opulence du lieu qui , en juillet , a été occupée tous les jours ! « Par ailleurs , le rythme des vacances pousse plutôt les gens à se parer de senteurs exotiques , de fruits tropicaux , vanille , coco , etc . , relève - t - elle . En effet , Maria Riesch avait 165 points de retard sur Lindsey Vonn alors quâ € ™ il restait deux courses . Ce serait prendre trop de risques " , a indiqué le coach des Rouge et Noir . Je ne crains rien du tout ! Jean - Bernard Bapst n ' a pas souvenir d ' une telle recommandation . « Ils m Â’ ont dit que j Â’ étais noté comme vendeur de drogue sur ma plaque » , avance - t - il . Il a fallu quun top model frôle le ridicule en boîtant lors de la Semaine de la mode à Londres pour lancer une amorce de débat dans le milieu de la mode . Le Wild a effacé un déficit de 3 - 1 en troisième période grâce à Martin Havlat et Andrew Brunette . Elle ne fait pas confiance aux gens . Sur ce tracé de haies assez coulant , Diamant de Beaufai semble en mesure de prendre une part active à l ' arrivée . Laspect social réside en un networking entre les institutions et associations diverses . On se calme encore un peu plus . spa Marcia si lo toma en serio y sale disparada a decírselo a Fernando . Por eso junto a Fidel , Raúl , la patria y el Socialismo , cada moronense coronado de victorias tiene en mente empeños aun mayores , caminos abruptos por recorrer y logros que cosechar en medio del esfuerzo y la decisión siempre de vencer . “ Queríamos hacer esto más terrenal , hacer que estas mujeres se sintieran reales , darles un pasado . El viaje a Sudáfrica ronda los 8 . 000 dólares . La señora esperó unas horas a un pariente , pues no tuvo valor para hacer el reconocimiento . Luego tuvo su primer programa de entrevistas - antes de cumplir los 18 años - con la producción “ Estelarísimo †, espacio en el que interrogaba con gran efectividad a los protagonistas del mundo de la farándula , tanto de Puerto Rico como del exterior . Tras el desvanecimiento en el campo , las atenciones médicas y la intervención de una ambulancia no pudieron ayudarle . “ Al hombre lo golpearon hasta darle muerte . Era lo que correspondía hacer para responder a una designación que me privilegiaba y me honraba . De ese modo , se ubica a favor de quienes hasta ahora estaban enfrentados . El objetivo fue pedir la restitución a su trabajo del chofer del taxi 39 interno 23 , Guillermo Musicco , que desde hace 5 años trabaja en el ámbito de la empresa . Esto porque a unos días de que se emita la convocatoria , no hay claridad en cuanto a las reglas y pedirán que éstas no estén hechas para favorecer a un candidato . Ya no quedaban muchas agencias , además de que debido a su edad ya era difícil encontrar empleo y en el colmo de la desesperación recordó sus juegos infantiles . No podemos cometer ningún error . Lo mismo garantizó Chávez “ El único pacto que tengo es con el pueblo venezolano . Tambien queria hacer un pedido , ya estubieron trabajando en el barrio peruzzotti , de Pilar pero han dejado sin realizar varias calles de la zona , que harian falta que le den una solución . Equipos de rescate fueron enviados a la zona del incidente , dijo a CNN la rama regional del Ministerio de Emergencia de Rusia . Con el partido 3 – 2 a favor de Cuevas , el uruguayo levantó dos break point que tuvo Almagro para confirmar su servicio . “ Me causó asombro y perplejidad total , no entiendo lo que quiso decir , fue confuso . Blake Lively , estrella de la serie Gossip Girl Antes de su publicación se divulgó la próxima portada de la edición estadunidense de Vogue dedicada a las mejores vestidas de 2010 , siendo la ganadora de su conteo Blake Lively . ita Marco Giampaolo recita invece il mea culpa : " La partita l ' abbiamo un pò sottovalutata non prima del match ma durante . " Ho dichiarato pubblicamente , nella mia qualità di leader politico responsabile quindi di fronte agli elettori , che di questa All Iberian non conosco neppure l ' esistenza . " Ci hanno detto : ' ripartirete domani con questo aereo dopo che sarà stato riparato . Una sconfitta difficile da mandare giù per gli azzurri , che per oltre un ' ora hanno giocato alla pari , se non addirittura meglio della più blasonata formazione inglese . Dal monitoraggio di quotidianoenergia . it risulta che Api - Ip hanno tagliato di 0 , 3 centesimi la verde , a 1 , 401 euro al litro e di 0 , 5 centesimi il diesel a 1 , 264 euro al litro . COMO - Attimi di paura nel primo pomeriggio in via Milano davanti alla chiesa di San Bartolomeo dove , pochi minuti prima delle 15 , un ' autovettura si è ribaltata dopo un tamponamento con una Jeep svizzera . Ecco quanto evidenziato da Tutto Napoli . net : Trezeguet : Poco spazio per il transalpino nella Juventus , giocatore di qualità non cè che dire , ma sono un po scettico perché non credo rientrerebbe nei piani di De Laurentiis . Il Mondiale è alle spalle e Lionel Messi ha voglia di riscatto ed è pronto a ricominciare . L Â’ intervento di Bernanke ha nuovamente spedito Wall Street in territorio negativo , con il Dow che in questo momento perde lo 0 , 25 % , lo S & P lo 0 , 91 % ed il Nasdaq è in rosso di 1 punto percentuale . SALERNO ( Reuters ) - Il presidente della Repubblica Giorgio Napolitano ha richiamato l ' attenzione sull ' importanza dello spessore morale e culturale dei politici , mezzo principale per trovare soluzioni condivise e non dettate da interessi personali . " Illesi i militari a bordo dell ` unico Lince colpito che ha resistito all ` onda d ` urto , riportando solo danni alla parte inferiore " , si legge nel comunicato diramato dal portavoce del contingente italiano . Ma soprattutto , il fallimento della seconda Repubblica è certificato dalle parole di Berlusconi , che dopo quasi 10 anni da presidente del Consiglio si dichiara impossibilitato a governare per colpa delle istituzioni che non è stato capace di riformare . Hanno già il taglio dei celebri reportage a fumetti che realizzerà anni dopo ( Palestina e Goradze , area protetta ) , le prime prove a fumetti in stile underground di Joe Sacco . Nel pomeriggio poi a Contrada Fabiana di Rosarno un uomo minaccia con la pistola una quindicina di extracomunitari . Le due figlie si vanno dunque ad aggiungere al primogenito , Ronald , nato nel 2000 dal matrimonio con Milene Domingues e legato alla nuova sorella da una curiosa coincidenza . Roma , 9 ago . ( Apcom ) - " Mentre il governo è impegnato a tutelare la privacy dei mafiosi con la legge bavaglio , il ministro Gelmini viola la privacy dei minori istituendo l ' Anagrafe nazionale degli studenti per combattere l ' abbandono scolastico . Anche se per il 95 % del lavoro informatico non sono necessario grosse competenze matematiche , è però necessario avere un testa matematica .. ossia è necessaria una certa capacità nella logica e nel ragionamento astratto . Tra i nomi che circolano , per la poltrona , ci sono quelli di Sergio Schena e di Marco Vicentini , già candidato alle elezioni europee . L ' ex caporale era arrivato in Cile nel 1960 dove , con almeno 300 famiglie di origine tedesca , fondà ² due anni pià ¹ tardi la Colonia Dignidad , nota anche come " Villa Baviera " nella quale impose una rigorosa disciplina . Che consente di avere una sola postazione ovunque , una sincronizzazione completa tra le postazioni , una serie di applicazioni da installare ed una esperienza completamente ritagliata attorno all ’ utente utilizzatore . spa Las efectuadas por el defensor del Pueblo de la Nación y la Unión de Usuarios y Consumidores podrían evitar que el aumento siga vigente . La primera indicación de ello vino de informes procedentes de Ginebra , de que el Director General de la OMC elaboraría él mismo el borrador del texto , que llevaría a Hong Kong " bajo su propia responsabilidad " . El presentador del programa , Óscar López , entrevista al escritor , dramaturgo y músico italiano Alessandro Baricco que presenta su nuevo libro " Emaús " . La última vez , en 2004 , España se impuso en Las Palmas de Gran Canaria por 3 - 2 con dos tantos de Raúl Tamudo y uno de Fernando Morientes . 4 . Si tiene que calentar la comida , incluya una lata de " sterno '' . La obra es dirigida por Jerónimo F . Montivero y cuenta con la actuación del mismo Montivero y Patricia Maldonado . Sus soldados comenzaron a rendirse y sumarse a nuestro avance . En el sector Vivienda hay muy mala atención al público ¿ Qué es lo más preocupante para este sector ? El corte no incluirá la bocacalle de Juan B Justo y España por lo que habrá normal circulación por esta ultima arteria . Así mismo , destacó el triunfo de Morales como “ presidente de toda Bolivia †a quien felicitó por haberle hecho “ un baile †a toda la oligarquía al ganar con el 63 % de respaldo los comicios en la nación andina . Hospital de Jalapa no tiene sala de cuidados intensivos . Gran parte de la clase media , alta y empresarios rechaza el constante intervencionismo estatal de Chávez , el crecimiento del aparato de Gobierno y las masivas nacionalizaciones . DE MOMENTO La Tasa de Seguridad no afectará a la clase media ni baja , “ ni siquiera el combustible lo van a tocar por el momento †, declaró el diputado , Mauricio Oliva . El resultado podría haber sido para cualquiera de los dos . Señalan que fue alrededor de las cuatro de la mañana cuando a - gentes atendieron el reporte de Sandra Gutierrez , de 32 años , y encargada de admisión en el área de urgencias del citado hospital . Los propios policías son víctimas de la inseguridad que va ganando terreno en los últimos tiempos . “ No lo esperábamos , nos sorprendió . El 70 % de las reclusas sufren adicciones El Censo Nacional de Reclusas reveló que hay 624 presas en todo el país : el 40 . 35 % ingresó por venta de estupefacientes . “ Por ende , si una persona de 29 años que está casada y tiene dos hijos años entra acá , tiene que pensar que va a mantener a su familia con 18 . 000 pesos †, señaló . “ Hemos tenido una respuesta abrumadora con información de calidad que ha llegado a los detectives y los ha mantenido muy ocupados †, dijo Parker . ita Altrimenti i ragazzi a casa si interrogano , in qualche caso cercando informazioni senza il filtro degli educatori » . Brillano anche A 2 a ( + 4 % ) , Enel ( + 3 , 9 % ) e Telecom ( + 3 , 6 % ) . Davanti Fabbro e Meloni , visto che Cipriani non è ancora a posto fisicamente ; mancherà anche capitan Zamboni , alle prese con problemi muscolari . Gli operai Fiom - Cgil lasciano il sindacato per chiedere aiuto al PDL in una vertenza contro il ‘ padrone ’ che non paga gli arretrati e trattiene il TFR . Pesa invece sulle borse asiatiche l ' incertezza politica nipponica . In Italia manca un piano nazionale per la manutenzione e la prevenzione del dissesto , così come richiesto dall ´ Associazione nazionale bonifiche e irrigazione ( Anbi ) . Stoccarda , 25 gen . - ( Adnkronos ) - '' Abbiamo un obiettivo chiaro . Partito il 6 ottobre 2009 da Pesaro all & rsquo ; insegna del tutto esaurito , è in corso la seconda tranche del tour che vede il Blasco protagonista sui palchi dei palazzetti italiani ed europei . L ' Ausl di Forlì ha , infatti , predisposto un apposito programma per facilitare l ' accesso alle prestazioni specialistiche e ridurre , così , i tempi di attesa , puntando ai 30 giorni per le visite programmabili richiesti dalla Regione . Presentato nel novembre scorso , Chrome Os e ' incentrato su internet . Il perno dell Â’ inchiesta è un impianto - messo sotto sequestro lo scorso febbraio - aperto a Chieri ( To ) alcuni anni fa . Dieci tappe individuano , per ogni decennio , gli aspetti più caratteristici del trasporto pubblico di Parma . Stando alla consueta rilevazione della ' Staffetta Quotidiana ' , tutte le compagnie hanno ritoccato i listini al rialzo seguendo la mossa di ieri di Eni : si registrano aumenti tra 0 , 5 e 3 centesimi sulla benzina e tra 0 , 5 e 2 , 5 centesimi sul gasolio . Campionamenti positivi quest ' anno per il Trasimeno , per il quale la quinta Goletta dei laghi - Cigno Azzurro di Legambiente non ha evidenziato alcuna criticità . Roma , 7 ago . ( Apcom ) - " Fini e Casini possono essere più o meno simpatici ma in questo momento sono essenziali per liberarci a casa Berlusconi " . La pronuncia 137 / 1 / 10 della commissione tributaria di Mantova ha decretato la nullità dell ' avviso di accertamento emesso dall ' agenzia delle Entrate basato su segnalazioni provenienti dall ' estero . I romeni hanno accorciato le distanze al 33 ' con Rada . San Francesco d ´ Assisi invitava a contemplare il grande Disegno di DIO inciso sul grande Tappeto dell ´ Universo riccamente impreziosito con le vite di ogni singola persona . Zonda contro Lambo : ladri contro polizia ? L ' ondata di gelo che sta flagellando l ' Inghilterra ha imposto il rinvio di cinque gare in Premier League : Hull City - Chelsea , Burnley - Stoke , Fulham - Portsmouth , Sunderland - Bolton e il posticipo domenicale tra Liverpool e Tottenham ad Anfield . ita Il nemico maggiore questa volta sarà rappresentato dal perfido Yaz ( JemaineClement ) che vuole a tutti i costi uccidere Kay . Ciao Ballero sarà in edicola a partire da sabato 20 febbraio per un mese a â ‚ ¬ 9 . 90 oltre al prezzo del quotidiano . Con IE 9 ancora in beta release , è facile supporre la possibilità di vedere il nuovo Bing in approssimativa concomitanza con lapprodo alla versione ufficiale del browser . Quindi , le ho intestato diverse case quando c ' è stato il fallimento del Perugia " . Basata sulla versione a passo lungo ( non ancora presente nei nostri listini ) , monta il motore a benzina base 5 . 0 V 8 da 385 CV abbinato ad un cambio automatico a sei rapporti . Kerbala , 8 nov . ( Apcom ) - Tra le vittime dell ' attentato ci sono anche pellegrini iraniani , hanno indicato fonti mediche locali . A meno che non si voglia mettere il tram su un ascensore e calarlo nel sottosuolo nella zona della stazione di S . M . Novella " , ironizza . I finanziamenti governativi per progetti ecologici sono troppo frammentati e quindi dispersivi , secondo Wigley : « L ' obiettivo della Green investment bank è migliorare l ' efficienza con cui il denaro viene investito » . Il tecnico per la prossima stagione dovrà infatti avere carattere e esperienza , ma soprattutto contenere l ' irrequietezza di alcuni . Al raggiungimento della soglia di 500 MB , prevista dai piani , potrai continuare a navigare gratuitamente alla velocità massima di 64 kbps . Manuela Camagni , collaboratrice del Papa , era una delle " Memores Domini " dell ' appartamento pontificio ed è morta all ' alba di ieri mercoledì 24 novembre , a Roma , in seguito alle gravissime ferite riportate in un incidente stradale . Le principali aziende interessate alle altre parti del progetto devono " in principio " essere designate prima dell ' estate , secondo una fonte . ' Maroni si prepara a respingere i meridionali ? ' . Non sono preoccu pato . " Capisco che si tratta di un ' atto di Dio ' - ha detto un anziano viaggiatore in attesa di volare a Dublino - ma questo mi ha tolto dieci anni di vita " . Il farmaco va assunto entro i 49 giorni dall ' ultima mestruazione . Dei 71 feriti , 51 hanno già lasciato l ' ospedale di Fes . Lino Lardo , sta già ridiscutendo l ' estensione del contratto con la Virtus ? Come siamo caduti in bassoma la Di Pietro riuscirà mai a fare una gara decente ? Altri sbocchi non se ne vedono ancorchè a fronte degli impegni finanziari da sostenere subito o sino al prossimo giugno . spa Otras restricciones pueden aplicar también . La Semana de la Juventud es una serie de actividades que culminarán el 20 de agosto con la “ Carrera 5 K INJU – Ser joven no es delito †. La ratificación del protocolo beneficiará el servicio postal en China bajo los cambios globales de la economía y la tecnología , y promoverá la cooperación entre China y otros países y organizaciones , agrega el comunicado . Ricky Martin Elite a todas partes con Ricky ! Asimismo , el mundo en desarrollo necesita energías renovables . Más tarde , ambos , con sus respectivas esposas , comerán en privado en la capital del estado y de ahí , si el tiempo cronológico y el tiempo climático lo permiten , irán a tomar un café al puerto de Veracruz . Nuevo modelo con Android de Google y con soporte para Flash , algo que todavía el iPhone carece . " La Fiesta del Chamamé y los carnavales significan la migración de gente de otras provincias y países , como también la cantidad de correntinos que viajan a las zonas donde hay dengue †, explicó . Como dije en mi muro de facebook , ya cargo con este apellido que confunde como " alsogarísta " . Esta vez la reconocida frase fue dirigida hacia la animadora Vivi Kreutzberger en el programa " A tu día le falta Aldo " , conducido por Aldo Schiappacasse . La transacción , realizada completamente en acciones , llevó a Genco a cambiar su nombre por New Silvermex . Sin embargo , la mayoría sabía exactamente el significado de la palabra y admitía que el cantinflear es algo inevitable . La intención es que no prospere la constitución de una fundación ( una figura de carácter privada ) que escapará a los controles de la Ley de contabilidad 2 . 303 . Si yo jugara hoy no podría ni tocar la pelota . En el documento se dan pautas para el acercamiento a la probable víctima de secuestro , la captura , la retirada , el cautiverio , las negociaciones , el cobro y la liberación . Suficiente para que Maradona hiciera saber su bronca y , luego de dos horas , saliera de la cumbre con cara de pocos amigos . El iPad se convirtió en todo un éxito , creando la categoría de los Tablet PC y desatando una oleada de productos similares que están empezando a llegar al mercado . Pero el lugar de la oposición global no está hoy a izquierda sino a la derecha del Gobierno . Al menos , en la denuncia que realizó en la Oficina Fiscal Nº 9 no consta que los ladrones huyeron en moto . Este jueves se desarrolló en Nueve de Julio .. ita " Ora questa squadra può fare il salto di qualità " . Il kaiser di Kerpen , che dovrebbe tornare in pista mercoledì per la terza e ultima giornata , si è concesso un " turno di riposo " , girando per il paddock e andando anche a mangiare con i suoi vecchi meccanici della Ferrari un buon piatto di pasta . Lo rivela ‘ Chi ’ nel numero in edicola domani . Ovvero , le applicazioni che determinano la posizione geografica del giocatore e permettono di interagire con il mondo reale . Maxi operazione antimafia della Squadra Mobile di Palermo che ha eseguito 19 ordinanze di custodia cautelare in carcere , per persone accusate a vario titolo di associazione mafiosa , estorsione , riciclaggio ed interposizione fittizia di beni . SPB 510 : chiusura totale alla circolazione dei veicoli dal km 8 + 800 ( svincolo Passirano , località Bettole ) fino all ' innesto della SP 71 , a partire da un ' ora prima del passaggio del primo ciclista secondo la media più veloce della cronotabella . Chiunque è in grado di leggere e verificare " . Schierato in GP 2 Series nel 2005 e nel 2006 nell ' ambito del programma di Development Renault , il promettente " Pechito " è stato tester della squadra francese in F 1 per il 2006 . Negli ultimi due anni ha vinto a mani basse il campionato Turismo 2000 . I rappresentanti dei lavoratori , che per il 2010 percepiranno un sussidio minimo di 400 euro mensili , hanno sollecitato un & rsquo ; integrazione al reddito e misure di reinserimento occupazionale . Vittoria del Deportivo La Coruna sullo Xerez , Maiorca - Siviglia è in corso dalle 22 . " Il problema - ha sottolineato - non è un contratto , non sarà mai un contratto . ROMA - Una festa di compleanno tra romeni si e ' trasformata in una violenta rissa finche ' la situazione non e ' degenerata ed uno dei partecipanti ha estratto il coltello ferendo il rivale ed uccidendolo . Posso pagare il numero arretrato con carta di credito ? John Bellinger III , consigliere legale dell ' ex segretario di Stato Condoleeza Rice ha bollato come « sfortunato » lo spot dell ' associazione . Un settore in enorme crescita che ha garantito nel 2009 un fatturato di 34 miliardi di euro , distribuiti principalmente tra agroenergie ( 34 , 2 energia solare ( 41 , 6 % ) ed energia eolica ( 18 , 9 % ) . Sabato 11 il percorso è praticabile dalle 8 , 30 alle 17 e domenica 12 dalle 9 alle 17 . Il costo dell ' ingresso è fissato in 6 euro per gli adulti , 3 euro per i ragazzi fino a 13 anni . Secondo il consulente Sidney Jones dell ' International Crisis Group per il sudest asiatico , accorpare tre diverse organizzazioni potrebbe costituire un problema . Dalle specifiche tecniche diffuse si apprende che la soluzione AMD avrà processore AMD Athlon Neo K 125 o AMD Athlon Neo X 2 K 325 in abbinamento a chipset AMD RS 880 MN . L Â’ obiettivo è di allungare la lista delle istituzioni che aderiscono al progetto : si calcola che , entro la prossima settimana , i 34 aderenti potranno già essere diventati una quarantina . Continua a leggere questa notizia ( ASCA ) - Roma , 30 set - '' La Edizioni Ciarrapico srl e ' onorata di poter diffondere in omaggio da domani i titoli dalla stessa pubblicati a favore della storia d ' Israele e della causa ebraica . spa Por otra parte , Rodríguez aseveró que los concejales " quedaron de acuerdo porque es necesario endurecer las penas , para así lograr que dejen andar los truchos " . En realidad no es para siete pasajeros ya que la última fila es algo reducida y aunque seis personas podrán hacer viajes largos sin problemas , para aprovechar lo mejor que tiene esta camioneta hay que sacrificar por completo la tercera fila . Fue sentido con una intensidad de grado VIII en la escala de Mercalli , y afectó los asentamientos de la isla y varias localidades más al norte , como la capital de la Provincia de Santa Cruz , Río Gallegos . El modelo Rubin - Magistrados no tiene cambios en este sentido . Si hubiera que calificar por los intentos de seducción , el promedio de edad de los pasajeros parisinos que se encandilan en el metro va de los dieciocho a los veinticinco años . Le repito la otra pregunta que no me ha contestado : Si aceptas el proyecto de unidad nacional imperial de los paisos catalans , fundamentado en la lengua , es decir : un idioma : una nación . Para eso , para acaparar las miradas en el viejo continente , Boca deberá imitar y tomar como ejemplo la primera gira que hizo el club , allá por 1925 , en lo que fue la primera travesía de un equipo argentino en Europa . Pues lo mismo con la discriminación positiva de genero , solo se trata de que asumáis ideológicamente lo que sois , aunque solo sea para clarificar el debate . Harán cortes de rutas y de avenidades de manera simbólica . Es muy respetable , yo lo admiró cada vez más , es un artista completísimo y no tengo más que decir " . También expresó su honda preocupación por los desmanes que ocurrieron durante esta semana en diversas escuelas públicas del país , motivados por pleitos entre pandillas . Sin mencionar las regulaciones ambientales que plantea la legislación sancionada la semana pasada en el Legislativo , Chicaiza señaló que están en peligro las fuentes de agua del país . Para eliminar la grasa de los glúteos hace ejercicios aeróbicos y para reafirmar añade ejercicios de musculatura . Panagulis fue asesinado en Atenas en 1976 , y Fallaci le dedicó su libro " Un hombre " . A Grecia la están empujando a salir del euro y si eso sucede el efecto dominó puede ser inmediato . Para Brines ( Oliva , Valencia , 1932 ) superviviente de la llamada generación española de los 50 , junto con Rafael Caballero Bonald , la obra de Lorca que más le ha conmocionado es el “ Llanto por Ignacio Sánchez Mejías †. La mujer , de acuerdo con lo informado por el Servicio Médico Forense , tenía entre 20 y 25 años de edad y medía 1 . 60 metros de estatura . Belasteguin y Díaz se anotaron el tie break de la segunda entrega y escribieron el principio del fin para Lima y Mieres , que notaron el tremendo golpe anímico y en el set que cerró el duelo apenas pudieron plantar batalla . Por lo pronto , la revaluación reduce las tensiones crecientes contra China y la amenaza de sanciones . Como diría el intendente Pulti en otro de sus actos proselitistas , “ el aplauso es fácil cuando son todos amigos †y esos gestos no faltaron a todo momento de las alocuciones . spa Jesús conoce el rostro de cada uno de los peregrinos y peregrinas que estamos aquí , buscando , con San Cayetano , justicia , pan y trabajo . Con la sanción de la Ley 26 . 061 se plantea la necesidad de efectuar un análisis acerca de las funciones posee el Defensor de Menores e Incapaces , en el actual diseño que presenta la Ley Orgánica del Ministerio Público . La caravana , compuesta por cientos de vehículos en muy mal estado , avanza lentamente por el desierto . La edición especial de cinco discos incluye comentarios de audio de los actores , guionistas y directores . La visita salió rápido de contragolpe y Daniel Montenegro habilitó a Danilo Gerlo , quien se había desenganchado por la derecha a toda velocidad y al ingresar al área sacó el tiro cruzado que se transformó en el 3 - 1 . Durante el transcurso de la madrugada , especialistas del Hospital Universitario , extrajeron la bala de la cabeza de la pequeña Alejandra del Ãngel del Ãngel , quien es reportada grave y se mantiene en el área de cuidados intensivos del nosocomio . Portman también protagoniza la próxima comedia romántica de Iván Reitman , " No Strings Attached " . La asociación califica la situación como la peor desde ( . Al lugar asisten camiones hidrantes del destacamento de Bomberos Zapadores de la ciudad y otras unidades de localidades vecinas . Cuando se terminó la botella estaba reunido con mi familia , gozando y dando gracias a Dios con la mujer de mi juventud , brindando por el nuevo año que comienza , deseándonos todos . Además de los extranjeros Sergio Romo ( serpentinero , nacido en Brawley , California ) , y los guardabosques Elliot Johnson , Derrick White y Jason Dubois . Y ha recibido una serie de honores oficiales . Eso es parte de lo que hemos sostenido , no es violencia contra violencia , es la justicia que sí resuelve la violencia †, expresó Narro . Ratificó el interés cubano en una solución pacífica y soberana , sin injerencia extranjera y respetando la unidad de la nación libia . El segundo partido de la primera jornada divisional de la Liga Americana lo protagonizan los Yanquis con los Tigres de Detroit , en la ciudad de los rascacielos . Un dato curioso es que Navarro es ex - esposo de la conejita y sex symbol , Carmen Electra , con quien también protagonizó el exitoso reality " Newlyweds " de la cadena MTV . Creo que son unos profesionales como la copa de un pino , pero discrepo absolutamente de la dirección política de TVE . Detienen a presunto homicida 18 años después del asesinato Domingo 21 de Agosto de 2011 09 : 50 México . Fuentes policiales aseguraron que el procedimiento fue realizado en una casa y en un galpón deshabitado de la calle Kiernan 992 , donde los vecinos aseguraron que vieron movimientos sospechosos durante el último fin de semana . Además , según supo Ultimas Noticias , se le ofrecerá un almuerzo en manifestación de agradecimiento por la visita . spa En una noche del mes de mayo sucesivo , salió desde Siauliai una procesión clandestina : muchachos y muchachas , rezando el rosario , llevaron a espaldas una cruz gigantesca . Sucedió en el contexto de una cena ritual con la que se conmemoraba el acontecimiento fundamental del pueblo de Israel : la liberación de la esclavitud de Egipto . Sería el principio de los ajustes de cuentas de Calderón con los ultras . Poco después creó su primera compañía de espectáculos y promociones , Showstoppers , y promocionó actos de R & B como James Brown , Aretha Franklin , Gladys Knight & the Pips , los Stylistics y los Chi - lites . La economía está en uno de sus mejores momentos y casi nadie quiere pensar ahora en cómo será la situación cuando no haya Es por eso que tampoco surgen preocupaciones por el futuro del acueducto Los Barreales . El ' eje del mal ' definido por Bush se completa con Irán y Corea del Norte . Desde hace cinco años crece sostenidamente la demanda de expertos TICs de las empresas nacionales y de las internacionales que eligen a la Argentina como subsede de sus actividades . La rubia está en pareja desde hace ocho meses con el empresaio Claudio Contardi , a quien conoce desde hace cinco años . Pero en todos los casos queda el rencor y la amargura de la gente que se siente humillada y maltratada . Por otra parte , Javier Ledesma también acordó su vinculación con la entidad paranaense . Las principales operaciones están ahora centradas en México y Argentina . Ya puedes volver a ver el último episodio de ' Sin tetas no hay paraíso ' . Nunca he aprendido a dibujar . Esta situación de crisis se presentó esta semana con el brote de fiebre aftosa en un establecimiento ganadero de Sargento Loma , en el departamento de San Pedro . Carbonell , dueño de una chacra en el paraje Ombucito , está acusado como cómplice primario en el secuestro de Christian . El Día de las Brujas trajo a Carlinhos Brown para la reapertura del Teatro de Verano , show que reunió a 3 . 500 personas , según datos oficiales . Un nuevo test desarrollado en Teherán revelará a las mujeres el límite de edad a partir del cual no podrán quedarse embarazadas , detalló el diario The Sunday Times . El suelo , por ejemplo . A las 11 , está previsto el inicio del acto central , con un desfile cívico militar que se desarrollará frente al edificio municipal , ubicado en Moreno y bulevar Lehman . Más » Damnificados tendrán que esperar por días los alimentos de la CNE La Comisión Nacional de Emergencias ( CNE ) , afirma que en los próximos días abastecerá totalmente los alberges con alimentos . spa El plantel dirigido por Almeyda arribó ayer a las 11 al aeropuerto internacional El Plumerillo luego de que el vuelo de Aerolíneas Argentinas sufriera una demora de 40 minutos en el Aeroparque . ¿ Tiene el mejor equipo de sonido , la última tecnología , pero aún así ni sabe usarlo ? Finalmente , entre los alojamientos presentarán su oferta : el Hotel Castillo Gorraiz Golf & Spa ; NH Hoteles ; Hoteles Hospederia Nuestra Señora del Villar ; Ruralsuite Tudela Resort . En la misma se informará sobre pagos de planes forestales , entre otros temas de interés para el sector . Sólo a finales del siglo XIX se generalizó el uso de lentes cilíndricos para la corrección del astigmatismo . 73 kilogramos de peso ( unas 145 libras ) , Marcelo el “ nuevo Roberto Carlos †en su país se parece en contextura física al hombre que ha ocupado la banda lateral izquierda en Real Madrid en la última década . La División Roca de la Superintendencia de Seguridad Ferroviaria está en la mira por el caso . Lo fuerte del libro del periodista británico es la descripción del problema , los datos , especialmente los cualitativos . Al ser preguntado sobre si el conglomerado de medios que dirige se planteaba comprar Twitter , Murdoch respondió “ No †, advirtiendo de que había que tener “ cuidado con invertir aquí †. Otros galardones correspondieron a los periódicos El Imparcial ( Hermosillo ) , A . M . ( León ) , Ovaciones ( DF ) , y Mural ( Guadalajara ) , así como Televisa Chihuahua , TV UNAM y la revista Emeequis . `` Esta es la primera prueba de un nacimiento vivo en un plesiosauro , un hallazgo emocionante '' , afirmó la profesora de geología Judy Massare , de la Universidad Estatal de Nueva York en Brockport , que no formó parte del equipo de investigación . Si es panista o perredista pasa lo mismo . Ni aun así se le gana a la voluntad de vida y de justicia que las organizaciones populares seguimos reactivando y que vamos a seguir haciendo crecer : La lucha por otro mundo sigue viva . Durante las protestas , no siempre pacíficas , al menos murieron 302 víctimas mortales , según los datos preliminares de una investigación a cargo de la ONG Human Rights Watch . Hasta el momento , la empresa contratista ha preservado la obra ejecutada en condiciones idóneas para la continuidad , ya sea del proyecto original o de los alternativos . La Samsung Galaxy Tabs 10 . 1 tiene un peso de 599 gramos y un grosor de unos 10 , 9 milímetros . Nosotros estábamos en La Plata , una ciudad de mucho gorilismo , muy radical . Dicho esto , admitió que el reto que afrontan sus homólogos europeos es enorme , porque deben resolver " muchos problemas a la vez " . Mientras la realidad de violencia no cambie , y el gobierno federal ya se ha comprometido a que lo hará en el corto plazo , la propaganda seguirá siendo ola que choque diariamente con el acantilado de la realidad . La prensa venezolana publica el anuncio del presidente , Hugo Chávez Frías , de realizar el referéndum que permita su reelección indefinida para el próximo mes de enero de 2009 . ita Un titolo che i Lugano Tigers avevano conquistato nel 2005 / 2006 ( nella storia questo è il settimo ) , giungendo poi secondi nei due anni successivi , e che premia una stagione ricca di emozioni e una squadra forte e compatta . Dopo che la societa ' aveva giudicato gravi le dichiarazioni di Kaladze , il georgiano si e ' scusato parlando di uno sfogo dettato dal nervosismo . Ha mai pensato di non arrivare in tempo ? Ma non è l ' unica ricerca su cui si sta concentrando la società . " Mai visto né conosciuto " . MILANO , 29 LUG - I due giganti delle scommesse on - line PartyGaming e Bwin si fondono per creare il piu ' grande operatore del gioco on - line al mondo . Euro in recupero in apertura di contrattazioni sul mercato europeo . Gli esperti del telefono amico hanno esaminato 394 casi e offerto consigli ad altre 91 persone nel periodo dal 29 marzo al primo aprile . Non importa se sia personaggio o meno . 31 della legge urbanistica n . 1150 del 1942 come sostituito dall ' art . Se la vostra carta di credito o password iTunes è stata rubata e usata vi raccomandiamo di contattare il vostro istituto di credito e chiedere di cancellare la carta e richiedere un rimborso per transazioni non autorizzate . L & rsquo ; approvazione da parte del Consiglio comunale della nostra proposta di rendere il servizio autobus urbani gratuito . Questa mattina il sostituto procuratore Maria Chiara Paolucci ha nominato il perito che dovrà svolgere gli accertamenti tecnici del caso sui velivoli . Ero molto giovane e per coinvolgere il pubblico avevamo affisso dei volantini sulle porte delle sale " ricorda Soldini . Intelligente e provocatoria , audace , recidiva ma sempre elegante . Polvere di Stelle " : un titolo magico per una serata che si preannuncia davvero suggestiva . Rialzi anche per LOTTOMATICA ( + 0 , 9 % ) e PRYSMIAN ( Milano : PRY . MI - notizie ) ( + 0 , 3 % ) in attesa dei risultati di bilancio . Il tema della libertà nell ' informazione e nella letteratura sarà discusso considerando come punto di riferimento la Dichiarazione Universale dei Diritti dell ' Uomo . Furto da 10 centesimi , giudici sono al lavoro da 5 anni - Yahoo ! Seconto l ' avvocata dei due uiguri , se la Svizzera li respinge , la sola alternativa sarebbe una prigione di massima sicurezza dell ' Illinois . spa Colombia abandonó ayer reunión de Cidh de la OEA . La comisión de socios del Banco Credicoop comenzó a reunirse para unificar criterios y avanzar en el proyecto que se realizará entre el 2 y el 7 de Agosto , en la ciudad . El tiempo ha probado - al menos en lo que a Fitzgerald respecta y contradiciéndolo - que sí hay segundos actos en las vidas norteamericanas . En declaraciones a la prensa en el final del encuentro que ocurrió en el Ministerio de la Defensa Nacional , Cándido Van - Dúnem afirmó que Angola debe repartir informaciones en condición de miembro de la comisión . Indicó que es más preocupante aún que algunos empresarios que ya habían pagado el año de impuesto , ahora desean que se les devuelva el dinero . Ya saben la respuesta verdad ? Los precios de las casas tuvieron un descenso anual de 18 , 9 por ciento en diciembre , siendo el mayor descenso desde que iniciaron los registros en 1983 . Lo importante es que en el país todo marcha y marchará perfectamente bien . Ya iniciada la segunda parte , Johnson volvió a aparecer para volver a poner en ventaja al Toronto , que tuvo a un Joao Plata como su jugador más destacado . “ Si el campamento solamente fuera entrenar y entrenar sin enfrentamiento , no tiene sentido , tiene que haber ese choque y así será útil el viaje . Sin embargo , Edinson Cavani , nueve minutos después , decretó el empate para Uruguay . 28 de enero de 2010 , por Redacción 180 Como cada año , se espera una asistencia de 70 . 000 personas . También se vio la jodita Aquí Calafate con Melina Pitra y la Tota Santillán estuvo con Los Taxi Boys . Puede haber una relación estrictamente sexual , y esto no quiere decir que haya realmente un orden amoroso en esa pareja . Pero bueno , aunque es todavía pronto , puedo decir que daré a luz en primavera " , dijo Carey , quien está casada con el cantante , comediante y actor Nick Cannon . Se conmemorará el Día Mundial de la Diversidad Cultural con actividades artísticas , conferencias y mesas de diálogo Morelia , Mich . , 18 de mayo del 2011 . Entre el público había personas vestidas con la zamarra argentina , mientras que otros llevaban pósters y carteles con frases de bienvenida en inglés , hindi , bengalí y español . Los pasajeros de la camioneta eran comerciantes y habían pasado el día en Manta , Manabí donde vendieron algunos electrodomésticos . El plan económico incluía el aumento en el precio del pasaje del transporte público y la gasolina . Frente a este hecho , la Argentina pide el retorno de las salvaguardas . ita Questo porta alla comparsa di rughe sottili ai lati degli occhi e della bocca , può rendere visibili i capillari sul naso e sugli zigomi , favorisce lentiggini e macchie . Sono polemiche senza precedenti . Dal punto di vista dell ’ autonomia , questo modello è provvisto di una generosa batteria agli ioni di litio con capacità di 750 mAh la quale garantisce un ’ operatività di 580 ore in standby o 8 ore in conversazione . C ' è chi è riuscito a cancellare dalla propria mano l ' inchiostro " indelebile " che marchiava chi aveva già votato e ha provato a moltiplicare la propria preferenza . Probabilmente avrebbe vinto comunque , ma non era la solita Serena . Niente paura andra ' avanti all ' estero ! " Noi non intendiamo offendere o difendere - ha aggiunto - alcuna lobby ma tutelare la riservatezza dei cittadini " . Lo scrive il medico legale Francesco Introna nella perizia medica redatta a seguito dell ' autopsia effettuata sui resti di Elisa Claps . Regista dello spot , prodotto da Altamarea Film , à ¨ Luca Robecchi . Il programma & # 8220 ; Resistere al parco & # 8221 ; , organizzato dalla Circoscrizione 3 e dall & # 8217 ; associazione Zero in condotta , animerà i giovedì sera al parco della Resistenza per tutto il mese di luglio . " Abbiamo ancora molto da fare durante la notte per migliorare le cose per il warm - up , ma sono fiducioso che potremo effettuare una buona gara . " Seconda fila per Helio Castroneves e Marco Andretti . Il passaggio del testimone non ha però ancora avuto luogo : la tradizionale lista dei 500 colossi del mondo della computazione , stilata ogni 6 mesi da Jack Dongarra , è ancora in fase di elaborazione . Papandreou parlerà al Paese in diretta tv . Tutto il resto è una perdita di tempo » . Ricordiamo - continua Paolucci - che il mandato dell ' amministratore e ' quello di attenersi alla gestione dell ' ordinario ( amministrazione e finanza ) e quello di tutelare i lavoratori , facendo rispettare da tutti il protocollo sottoscritto . Ad una situazione già disordinata , in cui alla mobilità si pensa solo dopo aver costruito , questo impianto aggiungerebbe il tocco finale , quello della dannosissima commistione tra impianti industriali e aree residenziali . E ' vero che mia moglie ha contratti con la Rai per diversi milioni , in quanto titolare di una societa ' che produce fiction , vendendole anche alla Tv pubblica . Nel maggio 2007 , Ehrlich si era candidato a sindaco alle elezioni comunali per conto della lista Crescere insieme . Si può quindi comodamente caricare i file in modalità wireless da computer oppure tramite collegamento Ethernet . Zigoni : A Verona come il papà ? fra Il faut bien reconnaître que les débats télévisés ont fortement contribué à valoriser la personnalité des candidats , au détriment du débat d ' idées . En 1958 et en 1994 , le Brésil était la seule équipe non - européenne en quarts de finale et cela ne l ' avait pas empêché de remporter la Coupe du monde . En France , la Première Guerre mondiale , c ' est d ' abord Verdun . Guy Lacombe à © tait naturellement satisfait aprà ¨ s la qualification de Monaco face à Lens ( 1 - 0 ) . Le personnel est jeune , dans le ton . Mais une fois encore , c ' est la vie . Le mari en est venu aux mains avec sa femme . Je fais partie des 90 donc je nâ € ™ ai pas relà ¢ chà © la pression et je continue à mâ € ™ entraà ® ner dans lâ € ™ optique dâ € ™ y figurer . Comme Chilipoker , le troisième opérateur en France de casinos terrestres sest appuyé sur les logiciels de PlayTech pour créer sa salle de poker en ligne . Parallèlement , une application gratuite pour iPhone a été lancée en mai . Deux apéros géants interdits à Annecy et Chambéry - Yahoo ! Les syndicats estimaient à 220 le nombre de postes d ' hôtesses et stewards menacés sur le réseau moyen courrier par la mise en place du projet Neo . Nicolas Sarkozy s ' est engagé jeudi à ne pas abandonner le secteur agricole . â € œ Les migrants sont constamment harcelà © s par la police , câ € ™ est dà © sormais le problà ¨ me numà © ro unâ € � ? , explique Và © ronique Devise , du Secours catholique . Un policier a par ailleurs été tué dans l ' explosion d ' une bombe dans un bureau de vote de Mahmoudiya , à une trentaine de kilomètres au sud de Bagdad , selon le colonel d ' armée Abdul Hussein . C Â’ était un vendredi soir , il devait être environ 18 heures . Il faut retrouver la sérénité , en ayant le couteau entre les dents , et montrer une grosse force de caractère . Moscou a ainsi prolongé en novembre son moratoire sur le sujet , adopté en 1999 . En Asie , aucune exécution n ' a eu lieu en Afghanistan , en Indonésie , en Mongolie ou au Pakistan . Elles confirment la très grande diversité génétique des Africains , encore peu explorée . Je naurais pas pris la peine dy répondre si cette affaire nétait pas emblématique des difficultés que rencontre un ambassadeur qui veut agir conformément à quelques principes moraux et protéger les deniers publics . fra La commission scolaire cherche des solutions pour trois écoles primaires concernées par le phénomène . " Trop fatigué " , a commenté le vainqueur du Tour des Flandres et de Paris - Roubaix . Son petit garçon de dix ans lui manque . Le joueur voit les choses autrement . « Pourtant , je me rends compte que c ´ est une thématique qui revient dans ma musique , de mes premiers enregistrements que j ´ avais intitulés Chansons françaises à France Culture . Le SG 07 était en démonstration à Las Vegas au mois de janvier dernier ( cf . Considérées comme des organismes génétiquement modifiés ( OGM ) , ces semences ont été symboliquement brûlées pour exiger le refus par le gouvernement de 400 tonnes d ' engrais de Monsanto non encore livrés . Il y aura bien un écran géant sur la Place Bellecour mardi prochain pour le match retour de Ligue des Champions opposant Lyon au Bayern de munich . Ainsi pouvait - on lire récemment que M . de Villepin a déclaré gagner 29 euros par mois en qualité d ´ avocat - conseil ( notamment , était - il précisé , pour Veolia ou le gouvernement bulgare ) , et en faisant des conférences ( 1 ) . Exposition Le Tirailleur : Traces de mémoire de Philippe Guioni du 10 au 27 mai 2010 à la galerie Le Pilori , à Niort ( Deux - Sèvres ) . Le cours du pétrole brut a perdu 1 , 53 $ US à 70 , 08 $ US le baril à la Bourse des matières premières de New York . L ' année 2009 a été particulièrement éprouvante pour les agriculteurs , marquée par une très forte chute de leurs revenus de 34 % " après " une baisse déjà significative , en 2008 , de 20 écrit M . Ayrault dans un courrier dont l ' AFP a eu copie . L & rsquo ; Olympiakos , ce n & rsquo ; est quand même pas le Real Madrid . Un nouveau flop donnerait raison à ses pourfendeurs de plus en plus nombreux . A terme , Univers Freebox espère ouvrir d ' autres espaces du même genre dans d ' autres villes . L ' indicateur résumé est en nette augmentation par rapport au niveau historiquement bas atteint à la fin 2008 , mais reste inférieur au niveau moyen de ces quinze dernières années " , note l ' Insee dans un communiqué . Ce lanceur sera destiné aux missions habitées au - delà de l ' orbite terrestre , comme l ' orbite lunaire , des astéroïdes et Mars . Les premières soldes de lannée commencent aujourdhui . Effectivement » , a répondu le président du Syndicat des agents de la paix en milieu carcéral du Québec , Stéphane Lemaire . À qui appartient le David de Michel Ange ? pob Murilo desconfia que algo estranho aconteceu com Raj . Três equipes caem para a segundona e quatro equipes se classificam para a semifinal que será disputada em dois jogos com vantagem de dois resultados iguais para a primeira e segunda colocada , que enfrentam terceiro e quarto respectivamente . Em razão disso , conclamo os irmãos policiais para de uma vez por todas deixarmos de lado as diferenças pessoais e pensarmos em nossa classe ( POLICIAL ) como um todo . Segundo Wenceslau Jr . , presidente da Acomac , este é um convênio que já existia . Foi aí que alguém resolveu juntar leite condensado e chocolate em pó , criando um doce que não tem ovos . GDF libera R $ 54 , 9 milhões para ciclovias Os brasilienses receberam mais um incentivo para utilizar bicicletas como meio de transporte seguro . Eliana argumente que se ele vender eles não tem mais nada . Era bem intencionado , mas tímido , ignorante e pouco inteligente . Na internet , as inscrições para a prova podem ser feitas pelo site www . meiamaratonafazum 21 . com . br até o dia 8 de setembro . Os consumidores estão em busca de preço melhor . Para Euclides , esses primeiros atos já bastavam para enobrecer - lhe . “ Já estou enfrentando problemas bem parecidos com os da gestão dele . Segundo o tenente coronel Maurício Augusto dos Santos , foram destacados quarenta e cinco homens e três viaturas , além da cavalaria para trabalhar no local . Olhamos com leve indiferença a troca dos números dos anos . O Palmas poderia ter diminuído aos 15 . Mas a maior chance de gol foi aos 33 minutos . Vou até as últimas consequências legais para responsabilizar este Vereador . “ Estar bem , alegre e bem vestido fazem parte da característica do Rei Momo . “ Se tivesse , teria visto a Favela Maravilha †. Nós erramos e jamais vai acontecer em outra oportunidade . Deus nos faz fortes quando reconhecemos que somos fracos ! spa Efectivamente que nos paguen ya pero se equivoca en lo de la lista en septiembre porque lo importante además de que te admitan es que te paguen a tiempo porque con dos mellizos de año y medio lo estoy notando en mi bolsillo de que manera . Yo creo que me equivoqué de clavo . Recibió la invitación de los hermanos Atayde para montar un espectáculo circense con elefantes y , como era característico en él , aceptó el reto tal como aceptaba siempre todos los proyectos que se le presentaban . Miembro destacado de la Organización , estaba abocado a la lucha por la recuperación de la democracia en nuestro país . El magistrado presidente del Tribunal Electoral , Gerardo Solís , dijo estar sorprendido por la participación de la mujer en estos comicios , además de que podría ser la primera vez que una mujer se convierta en Cacique General . Casi la tercera parte de ellos ( 76 , 587 personas ) es analfabeta . Se olvidan los zurdosos que esto es lo que decían cuando algún gobierno que no fuera kirchnerista llevaba a cabo un acto represor . Cuando hayan concluido ( su trabajo ) , sabremos más " , declaró . Y la soja para entrega en noviembre saltó 55 centavos a 9 , 71 dólares . Panamá , sábado 10 de septiembre de 2011 Real Madrid y Barcelona pelean por el liderato tras ' virus FIFA ' El Real Madrid y el Barcelona se enfrentan mañana , sábado , 10 de septiembre . Sin embargo , en más de una ocasión , hemos visto cómo estas instituciones que se suponían ciudadanas han sido secuestradas por el poder mismo para responder a sus intereses partidistas . A tal punto se trató de un encuentro especial que siendo las 19 : 00 muchos allegados a la colectividad todavía permanecían en el lugar , contándose anécdotas de tantos años sin verse . “ No es mucho el dinero que se junta con el reciclaje †, aclararon desde el club y detallaron que la empresa Recicladora del Sur les paga 60 centavos por kilo de botellas . Esto es rock ' n roll , nena , tú puedes hacer lo que quieres " . Es más , en los edificios de culto y en los monasterios coptos habría prisioneros cristianos convertidos al Islam . Con el tal Carlos Ariel se cumple el " Aqui estoy y aqui me quedo " porque el cumple con el " tu me eliges , yo elijo a los tuyos " . Por su parte , Sandra Quispe destacó la función que viene cumpliendo el Ministerio de Desarrollo Social con respecto a este tema brindando oportunidades concretas a los más necesitados . Son unos cinco kilómetros de trayecto , que se iniciarán en la Font Jordana de Agullent y llegará hasta la Plaza de la Coronación de Ontinyent . Las tarjetas para dicho evento ya se encuentran en venta . “ Las ambiciones son grandes en el parque 9 de julio en materia comercial †, añadió el funcionario . pob “ Já passou dessa fase . O mérito é todo do pai , mas quer compartilhá - lo com o filho . Irritado com as intervenções de Chávez ao discurso do presidente espanhol José Luiz Zapatero , o rei perde a paciência , grita e sai da sala . E como esse , outros exemplos existem para alegria dos historiadores que muito têm a contar na formação sócio , política e cultural , com relação à história política dos estados . Mas logo pensei no pior e imediatamente rabisquei num quadro mental as probabilidades de contágio : Gripe aviária , dermatite , criptococose , histoplasmose , ornitose , salmonelose .. " O PV é um partido muito presente na web . Com a prorrogação do reinício das aulas após as férias de inverno muitos planos terão que ser refeitos . Gozam de boa saúde e têm mãos para cura . Expandir Reduzir + comentar Luiz Dirceu Sanson em 21 . 01 . 139 . 88 Que falta faz a pena de morte no Brasil . Acompanhado pelos soldados Patrão e Duque , o sargento seguiu até a BR - 040 . Temos de ir com o pensamento de líder e se impor fora de casa também " , declarou Muricy Ramalho ao " Sportv " na tarde desta segunda - feira . O mesmo se pode dizer da exigência legal da documentação para votar . Os votos , acórdãos e demais atos processuais podem ser registrados em arquivo eletrônico inviolável e assinados eletronicamente , na forma da lei , devendo ser impressos para juntada aos autos do processo quando este não for eletrônico . " Eu ainda vou criar o Dia da Hipocrisia " , discursou na inauguração do hospital . Para ser o grande e temido Bahia , de uma torcida tão gigante . 2 – O governo do Estado continua confundindo educação e capacitação profissional para garantir números altos e confusos no desgastado ensino médio . Depois projetaram uma linha do Rio a São Paulo sem prever paradas intermediárias . 4 . Pós - teste Após a veiculação da campanha ao grande público , deve ser realizada avaliação para que seja possível examinar se os objetivos foram alcançados ou não . Num movimento rápido , ele descarrega o tambor , e as seis balas caem em fileira sobre sua mão . pob Um prejuízo , enfim , que não é só dele , mas também da imagem de Sinop . Mesmo temerosa , a brasileira disse que se sente segura no Japão . O livro é uma bomba . Exagerado demais , a meu ver – é um trabalhador , gente – mas não por isso menos emocionante . Temos um aluno especial com 48 anos †. Bragato ainda sublinhou a necessidade de ouvir Hess em função das provas apresentadas pela Polícia Federal . Para quem ainda está na faculdade , é importante procurar estágios , pois , hoje em dia , é inadmissível alguém sair da faculdade sem nenhuma experiência profissional . Começou em 2006 , com o Fernandão , com o Iarley . As pessoas desta cidade que dirigem o futebol devem repensar seus atos e métodos de administrar nosso futebol . Em relação ao mesmo período de 2009 , o aumento foi de 7 , 3 % . Acompanhado de Eduardo Campos e alguns ministros , ele sobrevoou toda área atingida pelas chuvas em Pernambuco e Alagoas . Essas foram as palav .. Prefira as boas conversas e os carinhos contidos . A cobrança pode inibir a migração para a caderneta . Se ele tivesse feito uma boa administração , teria ganhado as eleições e não precisava mentir que eu comprei votos para tirar o meu mandato . 40 a 42 ) - Drama na Volks - Montadora vai reduzir exportações , deve fechar fábrica e promover a demissão de 5 , 7 mil empregados . No entanto , o filho de Ted Kennedy , o congressista Patrick Kennedy , havia reconhecido recentemente que o senador superou as expectativas dadas pelos médicos . A das classes ricas costuma ser inconformada e sempre questionadora , entendendo que Deus bem poderia melhorar suas idéias em relação aos problemas humanos . Pendurou a rede , organizou suas coisas debaixo dela e relaxou , enquanto se afastavam do porto de Manaus . Debatedor : Marco Aurélio Lagonegro , arquiteto , urbanista , professor , conferencista e tradutor . pob Ah , que é isso , elas estão descontroladas ! kkkk Neto conseguiu deixar as meninas zangadas . Zk – Já que tocamos no assunto . A biblioteca está fechada , o RU também . O Bahia sentiu o gol e tinha dificuldades em se reorganizar em campo . Entre eles , bóias meteorológicas . Sempre é trollado quem pode muito bem se defender . Ele foi um factoide criado para que vocês fiquem perguntando †, declarou , na segunda - feira 11 . No dia seguinte , ameaças veladas feitas pelo ex - arrecadador em entrevista ao jornal Folha de S . Paulo foram capazes de refrescar a memória de Serra . Na Bahia , no entanto , cresce o índice de cidades que tiveram apagões com duração além do limite previsto pela Aneel . A direção do IC ficará a cargo do perito criminal Carlos do Valle Fontinhas , enquanto que o posto de diretor do IML será ocupado pelo médico legista Roberto de Souza Camargo . No ano passado , a fiscalização apreendeu cerca de mil sacos contendo cerol e lacrou um comércio . Que venham novos trens - balas ! Elas já estavam conosco há sete anos , foi difícil decidir , porém chegamos à conclusão de que elas mereciam ter mais tranquilidade na “ terceira idade †.. 8 - Quanto a denúncia de rompimento de adutora , trata - se de desconhecimento técnico sobre uma obra desse porte , que universaliza o abastecimento de água tratada na Capital do Estado para , pelo menos , os próximos 20 anos . Os dois se beijam , quando de repente Marcelo imobiliza Samira e diz que ela não é Maria . Porém , o desembaraço dos veículos necessita de DI . O governo estava desenhando um projeto que , através de um cartão eletrônico , as famílias menos favorecidas receberiam uma carga mensal em reais e esse cartão só poderia ser descarregado em uma revenda de gás autorizada . A Razão ligou para dois dirigentes da PRT na cidade . Nos anos 70 e 80 os mesmos questionamentos sobre qualidade recaíam sobre as marcas japonesas . Mas , com raras oportunidades para finalizar , a seleção do técnico Pawel Janas foi um adversário que se limitou a tentar destruir as jogadas de ataque dos alemães . Mas saiba que o supremo amor que criou e sustenta o universo deseja apenas que você ame e respeite a vida , nada mais . spa Y debe ser el Estado quien garantice el tratamiento gratuito de los adictos †dijo Izaguirre . Aseguran también que se trata del primer navegador que alberga en la nube una parte fundamental de su operación . Y cuando tú descubres de dónde salen los recursos emocionales para poder ayudarnos , recuperas la esperanza humana de que todo es distinto cuando compartes un dolor o una alegría . En todo momento se le vio tranquilo y agradable con los empresarios del hotel , quienes le manifestaron el objetivo del comercial que se distribuirá en España , Estados Unidos y Europa , principalmente . Jueves 29 de Septiembre de 2011 Hija del presidente Kirchner será operada de amigdalitis La joven de 16 aós se encuentra internada en el hospital Argerich . Nuestros 155 000 hombres no bastan . El Muni Joven continuará en la pista de patinaje sobre hielo Carlos “ Tachuela †Oyarzún con actividades de bochas sobre hielo y patín . El informe fue elaborado por el economista Wilson Romero Alvarado , y el evento es patrocinado por el Programa de Naciones Unidas para el Desarrollo ( PNUD ) . La película del legendario arquero de Sherwood cuenta en el reparto con figuras de la talla de Cate Blanchett , Vanessa Redgrave , Mark Strong , Oscar Issac , Léa Seydoux y William Hurt , entre otros . Personajes que se parecen y que llegan a confundirse con los verdaderos dueños del éxito pero que a pesar de trabajar de dobles llegan a emocionar con sus actuaciones . Sin embargo , en las costas de Hawái ( EE . Posteriormente hubo actuaciones musicales , lecturas dedicadas al militante , y luego el tradicional corte de cintas . Acto seguido se realizó la adoración de los magos al Niños Jesús en su pesebre . Jacques Foccart trata de eliminarlo varias veces . Vito se ve muy bien en sus dos trajes militares , exclusivos y muy completos . Mónica Koppel , conocedora y referencia en México de la práctica del Feng Shui publicó un nuevo libro : ' El gran libro del Feng Shui ' , en el que , explicó , se condensa información de varias de otras de sus más de 20 publicaciones sobre el tema . CK : Mire , las personas que están trabajando en eso , están trabajando , no mostrándose .. " Es necesario poner los resultados en perspectiva " , aseguró . Cerca de las 1 . 30 la joven afirmó que se durmió y que al despertar , alrededor de las 4 , dos desconocidos la estaban manoseando . También fueron testigos de la firma de otros acuerdos de cooperación entre ambas naciones . ita La norma , oltre a dare maggiori elementi di valutazione agli elettori , avrà anche l ' effetto di attribuire i risultati realizzati ai diversi amministratori , evitando polemiche e scaricabarile sulla responsabilità della gestione . Ma non sarà tuttavia possibile conoscere la lista delle opere custodite nei caveau zurighesi , perché le sorelle Hoffe , che hanno ereditato l ' archivio , hanno chiesto alla giustizia israeliana di imporre il silenzio stampa sull ' esito del controllo . Lunico inconveniente è che cè sempre un pò da aspettare per il tavolo perchè è così buono ed economico che ci vanno tutti ! Nellâ € ™ ufficio tecnico del comune lavorano 4 architetti e un ingegnere ma il sindaco decide per un esterno il quale à ¨ anche vicesindaco di un altro comune . Il nord della Germania sarà la destinazione di migliaia di tifosi del Fulham dopo che la squadra di Roy Hodgson è riuscita a raggiungere mete finora inesplorate . FAIDO - Sono ingenti i danni provocati dall ' incendio scoppiato oggi , verso le 18 . 30 sulla strada che da Faido porta a Carì , in una rimessa per mezzi agricoli e attrezzature . Secondo Rescue Media nessuno è rimasto ferito . Succede sempre così : quando una persona sta bene non si pone nemmeno il problema . In campo però i giocatori non deludono le attese , pur pagando in avvio un po ' della normale tensione , con falli ai limiti e l ' arbitro che fatica a tenere sotto controllo la situazione . Le risposte ottenute fino ad ora non hanno sortito alcun effetto dal lato pratico . La Borsa è fatta così . Ragazzi e ragazze vivono in universi separati , frequentano scuole diverse , non hanno luoghi di incontro comuni e non possono parlarsi . E così , come spiega il Guardian , il governo sta pensando di imporre alle aziende produttrici di tabacco delle confezioni semplici e di color marrone : obiettivo , togliere fascino alle ' bionde ' . In pratica sono giunte al tetto prima le case che l ` allacciamento dell ` energia elettrica . In Italia ad oggi esistono soltanto tre moschee , oltre a quella di Roma c ' è la piccola moschea di Segrate e l ' ultima nata a Colle Val D ' Elsa , ancora da inaugurare . è per voi di particolare tristezza , nel ricordo di vicende conclusesi tragicamente ” . Il gene codifica una proteina coinvolta nella percezione dei livelli di ossigeno e si sospetta bilanci il metabolismo anaerobico e aerobico . La trasmissione Contesto ( probabilmente anche a causa del suo format ) in merito alla varietà dei suoi ospiti fa un poâ € ™ meglio ( 200 ospiti da gennaio a novembre contro il centinaio delle trasmissioni di Teleticino ) . Valiani torna sulla gara del Manuzzi : " Il punto di Cesena è un passo in avanti , si poteva addirittura vincere se ci credevamo di più " . A ridosso del podio il quattro senza gialloverde di Sergio Canciani , Andrea Tranquilli , Romano Battisti , e Francesco Fossi : da segnalare l ' impiego Tranquilli in luogo di Marco Resemini a causa di un lieve stato febbrile accompagnato da dolori addominali . Una decisione per dire basta alle polemiche che riempiono la ' Domenica Sportiva ' . fra Les actions en nom collectif class actions » ) contre des sociétés non américaines seront désormais nettement plus difficiles aux Etats - Unis . Lewiston est une bonne équipe offensive . Cette première partie était celle de la voix vibrante et forte d & rsquo ; un homme témoignant de la souffrance du monde , avec un orchestre de 54 musiciens pour en accentuer ou en dénuder le propos . Le fait que le plan ( d ' aide ) soit davantage clarifié est bienvenu parce qu ' il y avait des interrogations persistantes , parce qu ' il était encore assez mal ficelé jusqu ' à dimanche . En 2011 , vous ne serez pas réélue par la droite . On investit 800 000 dollars par année pour ces programmes » , a - t - elle précisé . L ' organe commun de contrôle des banques et des assurances , l ' Autorité de contrôle prudentiel ( ACP ) , a été installé ce lundi . A 17 h 15 , ils ont prononcé leurs voeux , non sans émotion . Elle se pose aujourd ' hui avec acuité au Yémen , après l ' attentat manqué contre le vol Amsterdam - Detroit du 25 décembre 2009 .  « Je pense que nos pilotes seront bien prà © parà © s pour 2011 , c ' est donc pourquoi nous avons dà © cidà © de les confirmer . La chanteuse de 26 ans est fait régulièrement la une des tabloïds britanniques en raison de ses démêlés réguliers avec la justice ou de ses problèmes de drogue et d ' alcool . Et , selon les prévisions , les pluies de mousson devraient continuer à se déverser sur la région . Ceux - ci passent volontiers pour des emmerdeurs . Si ce nest la couleur de la peau ou le nom de la personne , on arrive difficilement à faire la différenciation . Les deux autres sont économiques . Ariane met des articles , vidéos , photos ou liens à chaque jour , vous êtes donc certains de trouver de nouvelles informations quotidiennement . Carlos Lee a frappé la longue balle pour les Astros , qui ont perdu leurs trois derniers matchs après avoir aligné quatre gain , leur meilleure séquence de la saison . Monique Mas a quand même essayé de la poser . Durant ces trois jours , le député de Loire - Atlantique livrera à ABP son regard sur le mouvement écologiste , la réforme territoriale , l ' aéroport Notre - Dame - des - Landes , la réunification bretonne et ses ses relations avec Jean - Marc Ayrault .. Une fondation qui lutte contre les discriminations en matière de santé , déducation et de sport . pob Todos justificaram a recusa ao salário alegando que estavam cumprindo " dever cívico " . Jobim ameaça sair com Gaudenzi Do colunista Cláudio Humberto : O processo de demissão do presidente da Infraero , Sérgio Gaudenzi , parece ter sido suspenso pela forte reação do ministro Nelson Jobim ( Defesa ) à notícia de sua iminente substituição . Desta vez , por falta de pró - atividade . Wilma exibe orgulhosa depoimentos registrados em seu “ Livro de Ouro †, onde é possível encontrar recados e assinaturas de diversas personalidades como Geraldo Vandré e Emerson Fittipaldi ( que desenhou um carro de fórmula um ) . D ecat revelou que , desde janeiro deste ano , técnicos da empresa estão realizando uma série de serviços , com a troca e substituição de reatores , transformadores e alimentadores de energia , bem como a colocação de novos equipamentos . A Assembleia Legislativa viveu , nestes dois últimos dias , momento de grande movimentação . A proposta inicial é que restaurantes , pizzarias e lanchonetes fiquem abertos até as 2 horas . A etapa complementar começou com um susto para a torcida alemã . Parabéns FORTALEZA BELA ! , nós merecemos . Os dados se referem ao ano de 2009 . Art . 14 . A chefia técnica imediata analisará a procedência da justificativa e submeterá , no prazo de 5 ( cinco ) dias úteis contados do seu recebimento , relatório conclusivo à chefia superior , usando o formulário constante do Anexo II . Nesse momento , a Suíça adiantou o posicionamento , marcando a saída chilena e passou a ter mais posse de bola no meio - campo Os europeus começaram a ameaçar mais , especialmente com cruzamentos para a área chilena . Desta maneira , foi construída uma parceria que vem caminhando de forma madura , através de um diálogo franco , objetivando uma verdadeira política pública para a cultura do município . Sobre os presos políticos , não abriu o bico . A conseqüência foi uma super overdose que quase lhe tirou a vida . Segundo o órgão estadual , Marabá é banhada pelos rios Tocantins e Itacaiúnas . É a primeira plataforma de ensaios clínicos com tecnologia completamente gratuita o que possibilita que qualquer pesquisador acesse a nova ferramenta , aumentando o potencial de utilização . Para um dia andar com as próprias pernas todos precisamos dos cuidados do convívio familiar . Abriram a caixa de pandora , agora abram a caixa da farra das passagen , a caixa do mensalão do PT , a dos juros altos pagos aos banqueiros do Brasil Quem acabou com a PCDF se chama ALIRIO NETO antes existia um diretor que tinha moral é honesto . No último sábado , dia 26 de julho , foi finalmente regularizada a situação , com a entrega das primeiras escrituras . fra Après sêtre octroyé 2 , 7 % lundi , le titre du fabricant de pneumatiques gagne 2 , 05 % à 56 , 14 euros . Par Abdou B . Chaque jour apporte des nouvelles contrastées , parfois contradictoires pour un même sujet , un secteur ou une simple décision administrative . Après la rencontre , José Mourinho pouvait afficher un large sentiment de fierté . Mais comme " une majorité de salariés a déjà exprimé son désaccord dans les sondages , dans la rue , dans les grèves " , cest désormais au sommet de lEtat dapporter une réponse , selon Frédérique Dupont de la CGT . " Il faut tous les virer " , s ' est exclamé vendredi le député gaulliste Nicolas Dupont - Aignan , président de Debout la République ( DLR ) . Depuis lannonce de la liste des 30 , les médecins du FC Bâle ont multiplié les séances pour remettre sur pied le jeune attaquant de 19 ans . Le premier a été émis le 4 mars 2009 pour crimes de guerre , crimes contre lhumanité et le second le 12 juillet . dernier pour génocide au Darfour , région de louest du Soudan en proie à une guerre civile depuis 2003 . Cette décision aurait été prise ce matin d ' après la radio française et devrait être officiellement annoncée la semaine prochiane . En génisses , la vente est plus aisée ainsi qu ' en taureaux suivant la race . Les petites cuves que nous utilisons ne permettraient pas à de grandes entreprises de s ' en sortir économiquement . Nokia Siemens Networks ( NSN ) a profité du salon Mobile World Congress de Barcelone , qui ouvre ses portes ce matin , pour rendre officiel les négociations exclusives avec Free Mobile . Washington Le " Washington Post " a battu lundi le " New York Times " en remportant quatre prix Pulitzer contre trois au journal new - yorkais . Il était devenu le symbole du fiasco anglais pour son exclusion lors du quart de finale perdu contre le Portugal . Parmi les six à © quipes , chaque semaine celle qui prend trois points prend une option supplà © mentaire . Le riz a été une nourriture de base depuis des siècles dans les pays asiatiques " , notent les auteurs dont l ' étude est parue dans les Archives of Internal Medicine lundi . Après la vie quotidienne des stormtroopers , voici les stormtroopers à la neige . A len croire , « même les clients aisés ne veulent pas investir à la marina et préfèrent aller vers Hay Mohammadi où le mètre carré est à 9 000 DH » . A Knysna , Domenech doit aujourd ' hui se sentir bien seul . Dans cette France régionale rose et dans ce contexte économique et social morose , Nicolas Sarkozy a besoin des jeunes gagnants qui incarnent le renouveau et la positive attitude . Quatrième à Istanbul , Sébastien Ogier revient lui à deux unités de Jari - Matti Latvala , huitième seulement après être parti à la faute . fra Quelques chaînes proposent de plus des jeux en ligne , le plus souvent dérivés de programmes à succès , ou sont présents sur des activités sans lien avec leur métier de base , comme les comparateurs de prix . Plusieurs volets de cette hausse des tarifs interpellent quelques jours seulement après le débat sur la démocratisation des grandes écoles . Jean Charest a mis sur pied cette semaine une commission d ' enquête , présidée par l ' ancien juge de la Cour suprême Michel Bastarache , pour enquêter sur les allégations de Bellemare . Après avoir obligé les autorités à renvoyer le nouveau code des personnes et de la famille à une seconde lecture à lAssemblée nationale , les leaders religieux ne soufflent plus aujourdhui dans la même trompette . Bains de Mer : résultat net annuel en fort recul . Cette ligne d ' une maturité de 5 ans se compose d ' une tranche amortissable de 600 millions d ' euros et d ' une tranche « revolver » de 800 millions d ' euros . 300 points de charge seront installés dans les parkings et sur les voies publiques de la capitale alsacienne Ces voitures seront destinées aux administrations strasbourgeoises , ainsi qu ' au grand public par le biais de l ' auto partage . Déjà candidat malheureux en 2002 , Issa Hayatou , le controversé président de la CAF , pourrait prendre position face à Sepp Blatter lorsque le bail du Suisse à la tête de la FIFA prend fin lannée prochaine . Il est vrai toutefois que ma conception du foot est proche de ce qui se faisait avant à Nantes . Le groupe souligne aussi que sa restructuration pourrait le conduire à modifier de manière importante la structure de son capital . Alors que ce sont des prestations quasiment toujours incluses dans les contrats des assureurs habituels . Le versement est rétabli " lorsque lassiduité de l ' enfant a pu être constatée pendant une période dun mois " . Une justice de far west , c ' est la police toute seule , Une justice démocratique , c ' est une justice indépendante du pouvoir et qui prend le temps et la distance nécessaires . Accroissement des craintes pour la liberté d Â’ informationOn pouvait déjà avoir des craintes mais deux événements récents poussent le curseur vers la plus d Â’ inquiétude . Tôt en première période , il est parvenu à briser le mystère Michael Leighton . Quel bilan tirez - vous de cette 18 e édition ? Mickaël Ciani ( Bordeaux ) et Benoit Cheyrou ( Marseille ) feront leur apparition chez les Bleus pour la première fois . Jean - François Aurokiom est le nouveau champion de France du lancer du disque ( 60 , 09 m ) . M . Ban recommande le renouvellement du mandat de la Mission de l ' ONU en RDC ( MONUC ) pour un an , avec un début du retrait des troupes en juin . On n ' acceptera pas le moindre centime , et je parle au nom de tout le groupe . ita Ibra : " Guardiola piccolo allenatore " " In un paese dove c ' e ' un governo che sta facendo le riforme noi vorremmo ci fosse un ' opposizione che dice non sono d ' accordo ma propongo . Il saluzzese Claudio Pautasso , di 35 anni , agente di commercio , è stato nominato nuovo Segretario della Sezione di Saluzzo e valli saluzzesi de La Destra . " Tiger ha vinto due volte qua , nonostante tutto resta tra i favoriti " . Roma , 23 feb - '' Le questioni che pone il presidente della Camera , on . " E ' la fine di un incubo " , ha commentato ieri Gino Strada , ma è anche la prova " dell ' assurdità " di quanto accaduto . Ma per la legge italiana è un & rsquo ; arma . Un nuovo set di istruzioni a 256 bit accelera le applicazioni a uso intensivo di istruzioni in virgola mobile , ad esempio editing di foto e creazione di contenuti " . In ballo per raggiungerla una tra Barrese e lo stesso Atiesse ( alla formazione di Quartu S Â’ Elena basterà un pari nel prossimo turno ) . Gli elettori chiamati complessivamente al voto sono 341 . 174 ( di cui 174 . 167 donne ) . I cristiani respingono le accuse , ricordando che “ più volte in passato la Chiesa ha cercato di intavolare con governo un negoziato per dirimere la questione , ma il dialogo è stato sempre rinviato o negato . Brevi è la prima scelta della nuova proprietà , è lui il tecnico che il Como vuole anche per la prossima stagione . Grazie agli incentivi Suzuki per la rottamazione è possibile acquistare una Swift 1 . 2 VVT a partire da 9 . 490 euro . Ai tempi i super ricchi guidavano tutti la Mercedes . Gb : ragazzo minaccia Obama , mai piu ' in America - Yahoo ! Il trenino funicolare viaggia in quota e ha 4 vetture per convoglio , con una capienza massima di 200 persone ( 50 per ogni vagone ) per ciascun senso di marcia . La pena richiesta tiene conto della riduzione di un terzo previsto dal rito abbreviato . " Certo , potrei mettere tutti d ' accordo . La soluzione che propone Di Pietro e ' '' attendere serenamente la sentenza del Tar . Governo : Berlusconi , Non Si Puo ' Cancellare Volonta ' Popolare - Yahoo ! ita Le Borse europee tornano a perdere terreno sui timori che il piano europeo da 750 miliardi di euro non riuscirà ad arginare la crisi del debito . Tra le giornate del 3 e del 6 giugno si sono tenuti sul campo federale fipsas di Coltano in provincia di Pisa , i Campionati Italiani di Long Casting . Ebbene , " normalmente " quel nastro viene usato per fabbricare bombe . La misurazione dei conti delle regioni dovrebbe arrivare con il decreto sui « costi standard » che introdurrà strumenti di verifica soprattutto in campo sanitario . Tutte le soluzioni tecniche , dalla sella agli pneumatici , dallinterasse alle sospensioni , sono state quindi indirizzate al miglioramento della comodità di guida . '' Per questo ad essere irresponsabile - continua Borghesi - non e ' certamente Di Pietro , ma solo questo governo che continua a proporre tagli indiscriminati che andranno a pesare solo sui cittadini onesti che hanno sempre pagato le tasse . Mi auguro che quando i riflettori dei mondiali si saranno spenti , non si spenga invece la solidarietà nei confronti dei bambini colpiti dall & rsquo ; AIDS " ; . Perché tra mostri , avventure e sventure insegna che ogni viaggio è bugia e ogni verità possibile » . Non è da escludere che possa diventare cittadino italiano in tempi brevi . L & rsquo ; episodio , parte della settimana stagione del programma , andrà in onda negli Stati Uniti il prossimo 7 novembre , mentre in Italia seguirà programmazione prevista da SKY Uno . Oggi , per esempio , lo Stato qui si limita a pagare solo gli stipendi agli insegnanti . Oltre ai centinaia di titoli proposti , da gustare en plein air , il valore aggiunto sarà , ancora più degli anni precedenti , il dibattito , in stile vecchio cineforum . E - mail : Centro di gestione mail unificata con funzione conversazione per i messaggi di posta elettronica ricevuti e inviati . " La nostra sfida è fidelizzare i donatori saltuari , e rendere prestatori i donatori " continua Morganti . " Anche se si andasse a votare , ma io non lo credo , abbiamo qualche motivo in più per fare capire a Berlusconi che lui le elezioni non le vince " , avrebbe aggiunto Fini , facendo riferimento all ' unità di intenti delle forze del terzo polo . La diocesi di Xiamen coltiva da tempo rapporti con la Chiesa di Taiwan . È un sogno e Balotelli , sì , l ' ho chiesto all ' Inter quando c ' era burrasca ma adesso filano tutti d ' amore e d ' accordo . L & rsquo ; ultimo episodio grave è di un anno fa . Riflettori puntanti sabato sulla trasferta di USC in casa dei Golden Bears e sulla Civil War di domenica tra Oregon ed Oregon State . Le aree interessate , sottolinea in un comunicato Autostrade per l ' Italia , sono in Piemonte , Liguria , Lombardia , Emilia Romagna , Toscana , Umbria . fra Me Catherine Roberge , la procureure de Keven Lavoie , a bien tenté de convaincre le juge que son client pouvait être bien encadré par sa famille et qu ' il avait fait le ménage dans sa vie depuis un an . Et l ' Elysée envisage désormais d ' inciter les bénéficiaires à investir les sommes reversées par l ' Etat dans les petites et moyennes entreprises . Cette plainte , datée du 29 janvier , vise le Flec - Pm ( Forces de libération de lEtat du Cabinda - Position militaire ) qui avait revendiqué le mitraillage du bus transportant léquipe togolaise , a indiqué jeudi une source judiciaire . J ' ai toujours reconnu la qualité et la force de ton action de bâtisseur à Montpellier et à la région Languedoc - Roussillon " , le député PS du Pas - de - Calais dans une lettre ouverte à Georges Frêche . A Berlin , le porte - parole de Mme Merkel a indiqué que " le gouvernement Reding " , qui a dressé un parallèle entre les expulsions de Roms et la déportation durant la seconde guerre mondiale . Il devra répondre de faits remontant aux années 2002 à 2006 analogues à ceux pour lesquels il a été condamné en 2008 , notamment pour violation de la loi sur les stupéfiants . La défaite est cruelle pour les Auxerrois , battus 1 - 0 sur leur pelouse du satde de l ' Abbé - Deschamps . La dotation royale a été un peu rabotée cette année - une grande première - mais elle reste confortable . Ce qui , en retour , nous aide à enrichir nos discussions avec nos professeurs et avec nos condisciples " , explique - t - il . Le journaliste conclut que « le cas relève de la psychanalyse » , nul doute qu ´ il aura donné envie à un grand nombre de sportifs de se pencher sur la gestion des émotions ! Cette question désormais politique , basée sur une ségrégation linguistique et ethnique , est exacerbée dans les années 1980 avec lédiction dune réforme foncière mettant fin à la propriété collective . Pour ce faire , il va changer la loi 6 . 2 de la constitution actuelle qui limite les mandats présidentiels . Une dà © cision rendue par le jury de la course . Il pourrait aussi manquer ls quart de finale de la Coupe Davis du Chili face à la République tchèque ( 9 - 11 juillet ) . Les phénomènes de délinquance accompagnent les mouvements de population vers le sable fin . Les perturbations étaient toutefois toujours en cours à 17 H 00 . La bibliothèque ambulante est fin prête . Ce procédé sera utilisé jusqu ' à la fin septembre sur les terres de la Couronne . C ' est une honte , et c ' est inacceptable " , indique l ' AIE dans un rapport rendu public au sommet de l ' ONU sur les objectifs du millénaire pour le développement ( OMD ) . Si ils devaient créer un jeu utilisant ce mode de contrôle , il serait spécifique à la baguette magique de Sony , ce qui est une très bonne chose . spa Ninguno de los dos plebiscitos logró el 50 % más uno de los votos , por lo que no se aprobaron . Según advirtió Ruiz , “ si la ley del Pami se respetara sería fabuloso , si la obra social estuviera manejada por gente idónea y con deseos de lograr que los afiliados sean atendidos como corresponde . Benítez contó que , aunque aportó siempre a la seguridad social cuando estaba en actividad , cobraba apenas la jubilación mínima , que es lo mismo que perciben en la actualidad otros dos millones de retirados sin haber hecho esas contribuciones . Como si algo faltara en la novela política de Puerto Iguazú , ayer se conoció una presentación radicada en la Policía por parte del secretario de concejales del bloque de la UCR , Kevin Florentín , contra el intendente Claudio Filippa . Este dato que no había salido a la luz pública , lo confirmó el delegado de la Secretaría de Agricultura Ganadería Desarrollo Rural Pesca y Alimentación ( Sagarpa ) , Carlos Alberto Hernández Sánchez . Al narco le importa todo , hasta el que ve lo que no puede ver o el que sabe lo que no debe saber . Por otra parte , Speranza pidió la construcción de reductores de velocidad en la Ruta Nacional A 009 , sobre todo frente a escuelas y puntos conflictivos . Nada de compromisos formales , al contrario . Cambiar leyes obsoletas que estancan al Perú · Peruanos en el mundo : Celebraciones del Inti Raymi en Nueva York A . Actualidad : ÚLTIMO MINUTO : de 103 a 149 cifra de muertos en México . En una ocasión , un cliente le pidió a Hinzpeter que negociara para comprar un restaurante . Aprovecho la oportunidad para felicitarlo por su boletín . Según esa tradición , el hijo hará todo lo posible por evitar avergonzar a sus padres . Sus pronósticos para el próximo ejercicio no son alentadores . Se conoce como el " Presagio de Hindenburg " y es un vaticinio sobre el colapso del mercado bursátil en Estados Unidos en setiembre . El hombre que dirigió ese proceso fue Baruch Vega , un informante de la DEA que le resolvió el problema judicial a cambio de 2 millones de dólares para no pisar una prisión norteamericana . Tiene ciento ochenta y nueve años . Las madres y abuelas solas , las familias reconstruidas y los padres divorciados no generan hijos huérfanos . Enviarme una copia del correo miércoles , 19 de mayo de 2010 a las 08 : 35 Quién dijo que en otros lados no pasa nada ? Quizàs se salve alguno de los que entraron hace dos años porque la construciòn està en quiebra y ahì ya no se puede robar . Sucedió , sin embargo , que el material fue enviado a otra empresa de digitalización y presumen que allí un empleado infiel , al ver lo que estaba viendo , tomó una copia sobre la cual se perdió el control . ita " E ' come le avesse imprigionato l ' anima " , ha detto la madre di Lina sulle colonne del New York Post . Ritardi , scrive Garimberti nella lettera di risposta a Saviano per ' Via con me ' che sarà pubblicata domani su Repubblica , il cui andazzo " non mi piace per niente " . La Commissione europea sta monitorando la situazione della ' Milck Wercjager ' . Bisogna rendersi conto - ha aggiunto Alemanno - che per aiutare Roma ad uscire dalla crisi ci vuole un grande sforzo unanime . Abbiamo appreso la notizia dal tg della sera . Garzelli , da grande che cosa farà ? Il cavallo di battaglia ssoluto di Novitec è comunque la Ferrari California Rosso . Poi ci saranno le verifiche : se a quanto detto seguiranno i fatti , nessun problema " . Il gusto , l ' orgoglio di vedere la propria azienda prosperare , acquistare credito , ispirare fiducia a clientele sempre più vaste , ampliare gli impianti , costituiscono una molla di progresso altrettanto potente che il guadagno . Morale : oggi molte di queste realtà sono coperte di debiti . Ma soprattutto un centrocampista dai piedi buoni " . Dopo linvio online della domanda di disoccupazione , il richiedente potrà stampare il modello e la ricevuta . Mi ha detto che era un guardiacoste libico , se mi avesse detto che era italiano avrei subito fermato le macchine " . Resta un fatto : il rosso diretto fa probabilmente calare il sipario sulla possibile convocazione di Totti in nazionale per i mondiali in Sudafrica . Derby e primato conservato per il Real Madrid . Per tutta la durata dell ' intervista , andata in onda in lingua azera e sottotitolata in farsi , il volto dell ' iraniana è stato oscurato . Non è solo tea ­ tro , è anche un mix di cinema e di televisione , un incontro tra i miti del rock e il mondo roman ­ tico di Shakespeare . Avvocato uccisa , un delitto preparato - Yahoo ! I TRISTE COLORE ROSASi formano , all ' alba degli anni zero , dall ' incontro tra Francesco ( cantante e side guitar ) , Giuseppe ( lead guitar ) , Mauro ( batteria ) e Francesco ( basso ) . L ' Udc fa meretricio , si offre al miglior offerente " dice il leader Idv . fra Dans la partie dure du col , j ' ai vu Samuel Sanchez se lever mais il n ' a pas insisté . LAGOS DE COVADONGA , Espagne ( Reuters ) - L ' Espagnol Carlos Barredo a remporté dimanche la 15 e étape de la Vuelta , dont l ' Italien Vincenzo Nibali a conservé le maillot rouge sans forcer . Des couleurs fluorescentes au fond de l Â’ océan : les nudibranches , mollusques à l Â’ aspect exceptionnel , en images - Yahoo ! Le Circuit Het Nieuwsblad a permis à Juan Antonio Flecha de fausser compagnie à Phillipe Gilbert dans les 20 derniers kilomètres avant de s ' imposer en solitaire . La Société générale doit publier ses résultats définitifs pour le quatrième trimestre et pour l ' ensemble de 2009 le 18 février . Ottawa estime plutôt que celles - ci relèvent de l ' article 91 . 2 , qui mentionne la " réglementation du trafic et du commerce " . L ' attaquant chilien Juan Gonzalo Lorca , 25 ans vendredi , qui appartenait au club de Colo - Colo , a signé un contrat de trois ans et demi avec Boulogne , actuel 19 e de la L 1 , a annoncé le club boulonnais dans un communiqué , jeudi . C ' est cette femme de tête - là qui , le 21 juin , a enduré l ' humiliation d ' entendre son mari annoncer sa démission à elle ! Même si ce sont les Violets qui sont repartis avec les trois points , Pancho ne sen fait pas : VA donne tout , la victoire va donc revenir dici peu . Avant que cela n ' arrive et parce que " les deux dernières nuits ont été dangereuses " , Ladda Monokalchamvat , 46 ans , a décidé de partir avec sa fille : " Je quitte mon appartement . A la demande du syndic , le tribunal a également déclaré l ' extension de la liquidation à la société « Trimedia » et l ' ouverture de la procédure de liquidation à l ' encontre des dirigeants de la société « Media Trust » , poursuit la même source . A propos du cinéaste iranien Jafar Panahi , emprisonné en Iran , " Jafar , je pense à vous " . Quant au deuxième , il doit mener à mettre plus de gens au travail , a souligné Wouter Beke . Tout cela « n ´ est pas instantané » , a - t - elle noté . Il suffit parfois simplement d ' une aide ponctuelle pour restaurer un dialogue constructif et lever le mal - être de l ' adolescent . La loi entre immédiatement en application et les opérateurs privés et étrangers sont donc désormais autorisés à proposer des paris hippiques , des paris sportifs et le poker en ligne aux joueurs français . Cette décision est considére en revanche comme une victoire pour la NRA , le plus puissant lobby des armes à feu qui prône une libéralisation complète des armes . Pour sen sortir , le club mobilise toutes ses troupes . Lidée est que les banques financent elles mêmes un fond qui leur viendrait en aide en cas de problème . Emilie Kohler hésite avant de répondre . ita Al quarto d ' ora un combattivo Paghera serve a Defendi la palla del possibile raddoppio ma il doppio tentativo dell ' attaccante viene sventato in angolo da Piccolo . Fuori dalle mura , la chiesa più importante : S . Maria di Betlem . Inolte Lunardini ha spiegato che il Comune non potra ' sostenere economicamente le bidelle non essendo dipendeti dell ' Ente , anche se saranno vagliate altre soluzioni tra cui chiedere aiuto alla regione Toscana . La banda - sotttolinea la polizia - è stata individuata grazie alle indagini degli uomini delle squadre mobili di Trento , Brescia , Milano e del commissariato di Rho , e alla preziosa collaborazione di alcune vittime trentine . Berlusconi : " Colpa degli arbitri di sinistra " . Dopo collaborazioni con altre prestigiose case di moda e brand , la maison Damiani produrra ' una linea di alta gioielleria per Galliano . La 22 / a edizione degli Efa si terra ' a Tallinn ( Estonia ) il 4 dicembre . E ' quanto emerge dalla rilevazione della Staffetta Quotidiana . Roma , 19 dic . ( Apcom ) - Renzo Gattegna è stato confermato Presidente dell ' Unione delle Comunità Ebraiche Italiane . L ' esplosione ha ferito 13 funzionari di polizia e 13 civili . Se Niccolò Ghedini parla di " accuse incredibili " , il coordinatore del Pdl , Sandro Bondi , è più netto : " Così muore il senso della giustizia " . '' Le cronache di questi giorni sul caso della Grecia - ha riferito la Glendon - hanno offerto ulteriori spunti di analisi . " Ognuno decide di morire come vuole " . L Â’ Amia , l Â’ azienda che gestisce il servizio di raccolta , è sull Â’ orlo della crisi economica , nonostante l Â’ aiuto finanziario ricevuto dallo Stato . Ma certamente questo governo e ' in respirazione artificiale . Non abbiamo mai perso di lucidità , siamo rimasti bene in campo dopo il 2 - 0 , pressando e costruendo i presupposti per la rimonta . Ha le potenzialità ma deve maturare . Una quattordicenne viene violentata e uccisa , da questo momento in poi si troverà in una sorta di Paradiso dal quale osserverà la sua famiglia che cerca di andare avanti superando il dolore per la sua perdita . La testa di serie numero uno sarà la giocatrice della Polonia Anna Korzenoak , vincitrice lo scorso anno . In Ducati dal 2000 , l ' Ing Lozej ha occupato negli ultimi anni il ruolo di responsabile del team sviluppo MotoGP . spa En los días previos a la decisión , la “ unidad †parecía que se rompía y el ambiente se tensaba , “ rumores †y “ fuego amigo †se daban bajo la mesa . La organización da en seguida el tono destilando dos mentiras en una sola frase . “ Todavía es necesario hacer educación con médicos de guardia y personal de la salud sobre el abordaje de la anafilaxia . La Provincia la otorgaría a mediados de año Denuncian saqueos en más de veinte tumbas durante el Viernes Santo En algunos casos , hicieron destrozos y se llevaron elementos del interior de los panteones . Los disparos en el pecho segaron la vida de Guerra de inmediato . Justamente Migue , que tampoco sabe de la existencia de su sobrina , es el que no tendría un buen trato con Jéssica y ambos estarían manteniendo un fuerte enfrentamiento por cuestiones legales . La apertura estaba dirigida a fomentar el turismo multidestino en el programa Playa - Maya , que mostraría las costas de Cuba y las ruinas milenarias en Guatemala . Cuando alguien se descuida y deja un estudio de grabación abierto el tipo se mete y graba un disco . '' Son muy malos tiempos , han pasado demasiadas cosas malas ; creo que el mundo debería dar los pasos correctos para corregir esto '' , reflexiona Hassan . Provoca aparatoso choque Un conductor fue señalado como culpable por parte de un conductor y no supo cómo excusarse tras mandar a una persona lesionada al hospital . La ocasión nos sirvió para ver a dos de los varones más atractivos de Santa Justa posando así de estupendos cual efebos griegos . La mayoría de los sellos sacan un disco , difunden uno o dos temas un tiempo y después lo dejan morir . Los policías de esa repartición recibieron información de que en una finca situada en la calle Maciel se estaban comercializando estupefacientes . La movilización , comenzó en la mañana de este miércoles en Reconquista .. Reiteran , asimismo , que la selección del sucesor de Strauss - Kahn , quien renunció el jueves en medio de un escándalo sexual , debe estar basada en un proceso " verdaderamente abierto , basado en los méritos y competitivo " . Fue el primogénito de Conrad Adams y Jane Adams , los cuales aumentarían la familia posteriormente con un nuevo hijo llamado Bruce . Existía una organización puertorriqueña , llamada Borínquen Kennel Club , que se dedicaba a organizar competencias , pero no registraba perros †. También este mismo año , Patricia es elegida para ser la imagen de la cadena más grnade de gimnasios en Estados Unidos " Bally Total Fitness " . Texto a buscar : trabajadores del % La búsqueda ha devuelto 54 resultados . “ No les van a hacer nada , dejen al oso adulto o la osa que se vaya con sus oseznos y nunca separen a uno de sus oseznos de la madre porque son los que se van a quedar aquí , cuando lo ideal es que estén en su hábitat natural †, indicó . pob A Cidade dos Meninos é uma das melhores instituição que existe eu sou prova viva disso meu filho ficou na creche dos 10 meses até 5 anos e foi super bem tratado durante esse período todos estão de parabéns e merecem todas as premiações que lhe dão . Agora me estranha os comentário do cidadão que é Presidente do PTC - Jair Montes que já demonstrou interesse empressarial nesse assunto , se torna suspeito . Elas são peritos em sacanagens desse estilo . O relatório registra ainda que “ este acelerado avanço significa um melhoramento importante das perspectivas de redução da pobreza , e incrementa significativamente a facilidade de cumprir a primeira meta do milênio †. Anísio prega a união de todos e disse que não haverá regalias para ninguém e todos vereadores serão tratados de forma idêntica . Com um ingrediente a mais : Clayton foi eleito com apenas um voto de vantagem sobre o adversário . O próprio Lula recorreu a Curado para enfrentar o candidato Geraldo Alck - min no último debate da TV Globo durante o segundo turno de 2006 . Por quê ansiar pela sua renúncia , quando podemos e devemos confiar sua vida à sábia providência de Deus , a quem devemos agradecer pela dignidade da pessoa que hoje ocupa o lugar de Pedro , o primeiro Papa ? Mande alguém contar quantas vezes ouviremos esta frase dos destruidores das nossas florestas . Com a compra do laboratório , a dívida líquida da Hypermarcas subiu de R $ 980 milhões para algo entre R $ 1 , 6 bilhão e R $ 1 , 7 bilhão . A doação chegou há dois meses . A distribuição é para toda comunidade , independentemente de classe social , frisou a enfermeira . No apartamento das meninas , João diz a Flávia que quer dormir em casa para conversar com Pepeu . O empate garantiu o Garotos de Arujá no mata - mata , mas a vitória do Oliviense não foi suficiente para garantir a equipe na briga pelo título . Se a nova lei for aprovada , o motorista só poderá tomar refrigerante , pois uma dose de pinga já deixa o que bebeu com o hálito alterado , popularmente chamado de “ bafo de jibóia †. As tradicionais rodas raiadas e cromadas combinam com o disco de freio , de alta performance . Telê lança ondas mentais em Fredo e ele desmaia . Cuidem bem destas casas . Contemplo , através das lentes amigas , o cenário da vida . Ela é impedida porque não pode legislar . spa Hay en el hecho , aunque nada formalizado , una reticencia en personas que estaban muy determinadas a impulsarla y que a poco andar parecen estar abandonándola . La noticia salta justo cuando T 5 está a punto de estrenar la nueva edición de su reality más popular el próximo domingo . 6 . La paz del mundo depende , en cierto modo , del mejor conocimiento que los hombres y las sociedades tienen de sí mismos . Así quedó Cotilde , por eso todos me dicen Coty . Conocido el fallo del Tribunal Electoral , desde el Movimiento Proyecto Sur aclararon a Diario UNO que se utilizará la vía judicial para defender la banca de Carlos Del Frade . Tanto Schiavi como Bernardi se acercaron , alambrado de por medio , a conversar con algunos representantes de la hinchada rojinegra , con lo que el aparente clima de tensión fue diluyéndose de a poco . Apuntó que los miembros de la iniciativa privada también han sido los más preocupados e interesados porque en Durango haya más lugares turísticos , por lo que ellos también serán los involucrados en realizar proyectos en pro del turismo . En el Lago de Xochimilco , al sur de la ciudad de México , se encuentra la Isla de las Muñecas , un sitio terrorífico para algunos . En los backs el fuerte está en las variantes a la hora para atacar , porque si tenes la pelota y no sabes que hacer , no sirve de nada . Incluso , volvió a ponerse el polémico vestido que usó en la tapa de la revista Vogue - edición japonesa - , que incluye trozos de carne cruda . Toda la organización se pasó †, destacó el atleta peruano de 30 años , quien se perdió la posibilidad de correr en la maratón de Lima . Al analizar el ambiente de negocios Davos nos compara a nivel nacional con Ucrania y Colombia . En la misma se presentará un plan de salida de la crisis . Sí , leyó bien “ cero †, de dificultad para contratar . Y la fiesta de disparates la completó don Timerman , desde Toronto , sumándole algo que , como tantas veces durante el kirchnerismo , me permitió recuperar mi capacidad de asombro : habló de la seriedad de la diplomacia de este Gobierno , y de la suya propia . 10 Dimite la directora general de TV - 3 Rosa Cullell se marcha por diferencias con el nuevo presidente de la Corporació Catalana de Mitjans Audiovisuals 14 . 07 . El poeta la mira y le da las gracias . En agosto de 2011 , los informes de esa agencia indicaron dónde se hallaba el organizador de los ataques del 11 de septiembre de 2011 . La discusión es sobre la capacidad jurídica de las personas con discapacidad , es decir , el reconocimiento de la ley para que puedan celebrar contratos y representarse jurídicamente ellos mismos , sin necesidad de un tutor . No sólo en el ámbito musical , porque me interesan muchas otras cosas , me interesan las acciones artísticas de otra gente … Que me pagaran para inventar cosas , ese sería . ita Checkpoint Systems è stata scelta da Kentron per la protezione alla fonte degli innovativi lettori Kentron E - Book , dispositivi elettronici dedicati alla lettura di libri e documenti in formato digitale . L ' imprenditore Luca Cieri racconta così la lite scoppiata domenica sera in un popolare ristorante romane tra il famoso architetto e il capo della Protezione CivileGuido Bertolaso . Per me è una grande emozione rivivere le stesse cose a distanza di tanti anni . Si inizia il 9 luglio con la Swing Big Band l ’ orchestra giovanile della Scuola Civica di musica di Novellara . Annullarlo , sostenne Leanza , avrebbe comportato la restituzione di circa 2 , 5 milioni al ministero del Lavoro . L ' Enac continua comunque il monitoraggio dello spostamento e dell ' evoluzione della nube in coordinamento con le autorità aeronautiche comunitarie . Utilizzando camion , elicotteri , perfino muli per trasportare il cibo e per raggiungere quanti erano tagliati fuori dagli aiuti , abbiamo fornito razioni di cibo per un mese a circa un milione di persone . Per la tentata scalata Unipol - Bpl nel settembre del 2009 sono state rinviate a giudizio 28 persone , tra cui lo stesso Consorte e l ' ex governatore della Banca d ' Italia Antonio Fazio . A Tartaglia è stata concessa la libertà vigilata per un anno , durante il quale continuerà a stare nella struttura dove è attualmente accolto , con l ' obbligo di conformarsi alle regole del direttore della comunità terapeutica . Dopo l ' avvio positivo della borsa di Wall Street , gli investitori italiani hanno continuato ad acquistare . Borsa Milano in rialzo con Unipol e Mediaset , giù Fiat - Yahoo ! La stessa cosa che accadde agli inizi di maggio di un anno fa , quando l ' ex first lady annunciò pubblicamente l ' intenzione di divorziare da Silvio Berlusconi . Non dico che la direzione dell ' istituto stesse facendo niente di male , ma per tenere sotto controllo così tanti bambini era tutto rigidamente strutturato . L ' importante comunque è essere qualificati . Se già Lola correva a fatica , Drei è uno sprint bruciato in partenza : ginnastica per sesso , stretching per stile , anoressia per poetica . Se l ' oggetto o il pezzo di cibo ingeriti bloccano le vie respiratorie bastano 2 - 3 minuti provocare la morte . I suoi idoli per quanto riguarda lo spettacolo sono : Lady Gaga per la canzone , Barbara DUrso per la televisione e John Travolta per il cinema . Un professionista con anni di esperienza e successi che per l ' ennesima volta si è distinto in una competizione piazzandosi sul gradino più alto del podio . Un macchinista di 53 anni , Giuseppe Carbone , è morto , ieri sera , investito da un locomotore nella stazione ferroviaria di Catania durante una manovra di aggancio di alcune carrozze prima della partenza del treno 854 diretto a Milano . Ma ad avere la peggio sembrerebbe essere stato proprio il condominio di Mons . pob " Sir Robert Scott Caywood " Fazer um vinho bom é uma habilidade . Qualificação para o trabalho A candidata Karla Daumásio , 31 , se espelhou no exemplo de uma prima para definir o curso em que se escreveria . Só pratica o que não presta e ainda é metido a bosta . “ Os alunos usam uma quadra da comunidade para praticar atividade física , a da escola é inviável †, relata Herval . Ruth diz para Rosana que começou a espionar os trabalhos da Dr . O curso foi ministrado pelo 2 º sargento do Corpo de Bombeiros , Jairo Garcia , que não cobrou nada da associação e prometeu para os próximos dias mais um módulo desse curso , atendendo a pedidos dos participantes . O PT tem a vantagem de , junto com o PMDB , ter feito uma bela maioria no Congresso . Informações podem ser obtidas pelo telefone ( 11 ) 2692 - 1866 . De tanto ler as leis do jogo , passou a se interessar mais profundamente pelo assunto . Luiz Balbino disse : 18 de outubro de 2010 às 16 : 02 É Serrinha , nada como um dia após o outro … 18 de outubro de 2010 às 16 : 00 Olha só quem fala de calúnia ! Quatro ministros devem votar contra ao recurso apresentado por Roriz no STF . A batalha de Gettysburg durou três dias e foi uma das mais sangrentas da história americana , com cerca de 50 mil soldados mortos no conflito . Com todos participando poderemos abreviar a paralisação . São muitos gastos , como lavadeira e transferência de atletas †, revelou o mandatário do Cachoeirinha . 9 ) Possibilidade de o município exercer , paralelo ao órgão regulador , a fiscalização dos serviços prestados à população , investimentos e ampliações . Explico : atualmente , o Estatuto da OAB determina a necessidade de , além de preencher uma série de requisitos , ser aprovado em Exame de Ordem , para , só então , o bacharel em Direito poder ser considerado Advogado . Em muitos casos não é suficiente ouvir aquele que pede ? A primeira fase da obra entregue pela CPTM faz o percurso de 14 quilômetros entre as estações de trem da Vila Olímpia e Jurubatuba , na Zona Sul , com todo o traçado acompanhando o leito do Rio Pinheiros . Revelaram ainda que ele estava em companhia de um elemento conhecido por Richardson . O sucesso do coveiro de Guaçui ( região do Caparaó ) , Valdir da Colimpi ( PPS ) , que virou sensação na cidade , depois de espalhar o bordão “ agora é nóis ( sic ) †, se confirmou nas urnas . fra Guy Lacombe ( entraîneur de Monaco ) : " Sur l ' ensemble du match , la victoire est méritée . Ces images sont , en effet , le fruit d ' une très grande imagination du reporter - photographe et aussi d ' un effort de toute l ' équipe rédactionnelle . Le service clientèle de la SNCB a traité , en 2009 , 19 129 demandes de compensation . Bernard Ourghanlian : La sémantique et la syntaxe du JavaScript ne permet pas de faire du vrai parallélisme et de tirer parti des ordinateurs multicoeurs . Harmony : tente de déborder les 7 , 22 E . Le Comité militaire de défense nationale ( CMDN ) conduit par son président le général de division Ranto Rabarison a déposé ses propositions auprès du Conseil consultatif constitutionnel ( CCC ) ce mercredi 2 juin . Il refuse toutefois de remplir un formulaire pour donner aux enquêteurs un exemple de son écriture . Le jeu se décline sous la forme d ' une enquête , dans laquelle le personnage Raphaël Cassagne rencontre les différents protagonistes de la série à travers Marseille , cela pour résoudre le mystère . L ' APM , quant à elle , récompense Azzouzi pour son engagement notamment en faveur pour le développement de la culture , de l ' éducation et de la paix entre les peuples en Méditerranée . Un stop de protection pourra être placé sous les 58 . 25 EUR . Euh je ne pige pas , le même jour on coupe les émetteurs hertzien pour mettre en marche ceux de la TNT ? Dans le Prix de Périgueux , Roura de Kacy s ' est imposée avec autorité sur la fin au prix d ' une bonne accélération devant la courageuse Rafale du Roumois . Le profil de l ' étape : La Rioja - Fiambala ( 394 km dont 203 de spéciale ) Compte tenu de l ' arrivée très tardive de nombreux concurrents la veille , le profil de l ' étape a été modifié . A leur plus grande joie , 14 élèves du primaire peuvent être ainsi pris en charge pour un trajet de 2 km . Un retour aux années 60 avec un État plus endetté que les collectivités " . L ' Adresse - Musée de La Poste se transforme en coffre - fort le temps d ' une exposition de raretés philatéliques mondiales , d ' un montant de près de 5 millions d ' euros . Ailleurs , on parle de maison numérique où tout est branché sur internet , du four micro - onde au réfrigérateur , en passant par les caméras de surveillance , la télévision et le portail . Le Centre de prévention du suicide procède à environ 15 000 interventions téléphoniques annuellement . Trente - neuf autres sont toujours portés disparus . Tab Candy pourrait également se coupler à des extensions tierces , par exemple à un système de recommandation de sites selon le contenu de vos groupes . spa Al término del acto , Ãlvarez fue ovacionado y aplaudido con gran entusiasmo cuando concluyó instando a todos a " continuar trabajando por la ciudad de Avellaneda " . Escrito por Zulariam Pérez Martí Jueves , 31 de Diciembre de 2009 01 : 00 31 de diciembre , 11 : 58 de la noche .. Nadie , ni siquiera los animales se salvan de la seguridad democrática . Lacalle les prometió ayer a varios sindicatos policiales que , de ser presidente , permitirá su sindicalización , para lo que propondrá una reglamentación estricta que impida la huelga . Con todo respeto pero esta chica lo que debe de aprovechar en inglaterra es que la encierren en un hospital psiquiatrico , tiene serios problemas de personalidad , eso seria mejor y no que vaya a ver al los parasitos de la monarquia . No asi la de Peñarol , quien se preocupa unicamente por su cuadro . Finalizó , simultáneamente , sus estudios humanísticos y musicales , para cursar la carrera de medicina sin abandonar su pasión artística . Hi Matic , París ( Francia ) : Ubicado en la zona de La Bastilla , fue creado , diagramado y pensado por la diseñadora industrial Matali Crasset . El problema es cuando el discurso entra en el terreno de las formas esencialistas o de valores morales innegociables , como el de Carrió . Cathie Jorrie , la encargada de elaborar el contrato entre Murray y Jackson por 150 mil dólares , detalló el contenido de éste en donde quedaban establecidos los acuerdos de lo que percibiría el médico y lo que nunca recibió por el deceso . En poco más de dos minutos , el edificio estaba en llamas y las columnas de humo negro habían copado la escena . Nos de ­ mo ­ ra ­ mos mu ­ cho en apro ­ bar ­ la , pe ­ ro se ­ rá una obra muy im ­ por ­ tan ­ te pa ­ ra Cór ­ do ­ ba †, ase ­ ve ­ ró a la pren ­ sa Gia ­ co ­ mi ­ no . García dijo que de 400 litros de agua que consumen diariamente las personas ( hervida para consumo , limpieza del hogar , aseo personal , lavado de ropa , riego , entre otros ) , sólo 0 , 02 litros ( 200 mililitros ) se envasan para ser consumida . José Mujica dijo estar arrepentido de los hechos de violencia protagonizados por los tupamaros antes de la dictadura y retrucó las críticas de la oposición con cuestionamientos por " clientelismo " . Vuélvase más inteligente con nuevas tomas de escenas La función Smart AUTO de Canon cuenta ahora con 28 tomas de escenas que ayudan automáticamente a ajustarse a diferentes niveles de iluminación o de movimiento para obtener la mejor imagen posible . Primero , les hemos dado muchas facilidades a los extranjeros que han estudiado aquí para que se queden en Alemania . El alza de las tarifas en varios servicios , la reducción del empleo en los sectores intensivos en capital y la generación de muy bajos ingresos para el Estado . Arpaio informó que su oficina recibió una denuncia sobre los trabajadores ilegales de los restaurantes hace cinco meses y afirmó que fue la 53 ra redada para castigar a empleadores que lleva a cabo su oficina . Poco le duró la felicidad a Costa Rica , pues en la siguiente jugada Julián De Guzman recibió de Stalteri dentro del área y picó el balón por encima de Porras . Viluco ( AG - Energy ) pertenece al grupo tucumano Citrusvil , el cual es dirigido por los hermanos Pablo y Daniel Lucci . spa Al respecto dijo que , “ fue un fin de semana sumamente tranquilo , debe ser por el frío ya que solo hubo una clausura y pocos llamados por ruidos molestos †. En los mecanismo de facturación pública el cargo fijo es bajo y el consumo es alto . Como las pérdidas fueron casi totales los vecinos se solidarizaron rápidamente , el presidente municipal visitó el lugar y se comprometió en enviar ayuda desde el municipio para tratar de dejar en condiciones nuevamente la vivienda . En Argentina todo es posible . Gerardo García Oro , integrante del organismo , en diálogo con Cadena 3 señaló que de 101 mil personas que van en busca de trabajo por año , sólo 5 mil lo consiguen . Los organizadores del III Encuentro Mundial de Músicas de Acordeón rindieron tributo a la dinastía musical de Los Romero por su aporte al folclor colombiano . Congratulaciones también a nuestra Zenia Gutiérrez . Desde las ocho de la mañana las dos casillas colocadas en cada comunidad se abrieron para recibir los votos de los militantes del sol azteca . Aquí hay que hacer una primera parada , ya que no es lo mismo instalar una red para dos computadoras que para tres . Ochenta años de la Estación “ Tomás Jofré †Martes , 09 de Agosto de 2011 00 : 20 El último 3 de agosto se recordó un nuevo aniversario de la imposición del nuevo nombre a la estación de tren de Jorge Born . Rápidamente se derrumbaron las versiones de que Joseph Ratzinger proclamará beato a su predecesor cuando se cumplan cinco años de su muerte en abril o mayo de 2010 , que habían florecido en las últimas semanas . El efecto neto , por tanto es de 3 . 925 millones de dólares . Ningún periodista puede catalogarse de objetivo . Mantenla funcionando en tiempo presente para que logres de ella el máximo beneficio . El Festival Internacional de Cine de Toronto , que concluye el domingo , marca junto a Telluride y Venecia el comienzo de la temporada de festivales , en la que los estudios ponen a luchar a sus propuestas en los meses previos al escándalo de los Oscar . " Ninguno de ellos sale a la calle a explicar qué significa la tarjeta unitaria y el que abra la boca lo van a callar . Ganaron 9 , 24 % de poder de compra en ese lapso . Matías Bravo rechazó con la mano una pelota que tenía destino de red . El mismo contará con la presencia del Intendente de la Capital , Hugo Orlando Infante , acompañado por su gabinete de funcionarios , donde en primera instancia hará uso de la palabra la Subsecretaria de Educación , Cultura y Turismo , Lic . Adriana Vaulet . Acto seguido Carlos tomó sus cosas y se fue de su hogar . spa El Supermotard Argentino es una categoría que manifiesta en forma constante su dinamismo . Los médicos estiman que recuperará la plena funcionalidad en la mano derecha dentro de un año . Esperemos que sea lo mejor " , dijo Olmedo , en declaraciones publicadas por el diario Uno de Mendoza . Para ser donante de sangre no hacen falta grandes requisitos : solo tener entre 18 y 65 años , pesar más de 50 Kg . y gozar de una salud normal . Además se trabaja con el apoyo de instituciones científicas que son sostenidas por fondos públicos . De acuerdo con las investigaciones que sigue la Procuraduría General de Justicia del Distrito Federal ( PGJDF ) , Arleth Terán pudo haber tenido alguna relación sentimental con el futbolista y eso molestó a Edgar Valdés Villarreal , alias " La Barbie " . El ex DT de la Selección Argentina confesó el dolor de la familia por estas horas : " Lamentablemente está vulnerable , estamos todos sufriendo porque no nos imaginábamos verla así " . Conflictos aumentaron 49 % en marzo La conflictividad global de marzo creció 49 % con respecto al mes anterior y se multiplicó por seis respecto al año pasado , perdiéndose 33 . 820 jornadas laborales . Escrito por eduardomedrano @ televicentro . hn . Continúa la preocupación por parte de las autoridades sanitarias , por enfermedades crónicas que afectan a la población hondureña . Sigan disfrutando de las dulzuras de la vida , aunque necesariamente no aporten calorias . Ríos – Crocianelli la fórmula del PSP La gobernadora Fabiana Ríos en conferencia de prensa presentó la lista de candidatos del PSP ( Partido Social Patagónico ) . Maquinaria y personal municipal se encuentra nivelando las calles para luego proceder a la compactación y colocación del material asfáltico . El proyecto se tratará mañana con funcionarios policiales y de la provincia . Central no podía y se quedaba fuera de la lucha por jugar la promoción . Para el siquiatra infantil Alvaro Franco hay una serie de etapas que aunque no son iguales en todos los niños , sí reflejan aspectos generales del desarrollo del juego en los humanos . " Será de vital importancia para el ambiente económico general si la consolidación fiscal en el capítulo de gasto avanza incluso más de lo ya planeado y logra reducir el déficit este año en más del 5 por ciento " , dijo . En tanto , sólo un 17 % de los usuarios sigue sin usar casilla de correo , muy probablemente por falta de interés . Como ejemplo concreto , citó la presentación que el Papa hace de la oración sacerdotal de Jesús , " que en él alcanza una dimensión totalmente nueva gracias a su interpretación iluminada de la tradición judía del Yom Kippur " . Por esa razón de fuerza mayor , el Gobierno Venezolano , previa consulta con los Gobiernos de la región , tomó la decisión de postergar la realización de la III Cumbre sobre Integración y Desarrollo . La verdad es que me quedé en Babia . pob Segundo informações da polícia , A . P . S estava em uma marcenaria na Rua Bruno Garcia esquina com a Rua Duque de Caxias no Centro quando M . C . R de 18 anos e um adolescentes de 14 anos filho de sua amásia tentou roubá - lo . Piloto bom eles tem e se chama Kubica . É devida pensão ante a perda parcial da capacidade laborativa da vítima até a sua convalescença . As primas não eram feias , mas caladas demais . Na ocorrência do roubo , a quadrilha fortemente armada rendeu nove vítimas e levaram o Corsa Maxx com placas NLB - 1664 de Rio Claro com aparelho de TV de 32 polegadas . Vamos aprender com por que do profeta Isaías dizer que como a águia , nós vamos renovar nossas forças . Aproveitou para anunciar que o Brasil está fazendo gestões junto ao governo japonês para vender álcool combustível , aproveitando o dispositivo do Protocolo de Kyoto que determina a adição de certa porcentagem de álcool à gasolina . O advogado tem a proteção legal , constitucional , de independência , de liberdade . Na contramão , estão cana - de - açúcar ( de 4 , 32 % para - 2 , 05 % ) , café em grão ( de 5 , 68 % para 0 , 34 % ) e algodão em caroço ( de 5 , 67 % para - 2 , 39 % ) . " Aprendi a jogar usando laranjas " , diz , resumindo a origem pobre . Assim como também se enfrentam União Arujaense e Parma . Ele foi escolhido pela inteligência , pelos intelectuais paulistas , para representar o " bode exultório " . Acho que tem que começar agora , na atual legislatura e se depender de mim , será †, afirmou . E também com outras universidades em outras partes do mundo . Estamos as vésperas do início de uma colheita extraordinária no estado , e isso vem a contribuir muito para os negócios acontecerem . Ressalta também que as peças ficarão expostas até o dia 15 de setembro . “ Nós fizemos com que o beneficiário ( assentado ) participasse do processo . " As crianças serem lembradas é muito importante e fundamental para a formação " , disse . Em sua avaliação , a participação popular no trio elétrico foi bem maior na terça - feira , quando o caminhão de som animou os moradores do bairro Hilda Mandarino . Reinou de forma autárquica pelo terror . fra La direction de l ' entreprise n ' était pas disponible pour une prise de position . La perspective d ' un accord qui permettrait au groupe d ' assurance de se renforcer en Asie s ' est éloignée , mais n ' a pas disparu . Au contraire , ils ont oublié de mettre des dispositifs favorables à l ' instauration d ' un climat d ' apaisemenent » , a - t - il avancé en rappelant , entre autres , l ' idée d ' indemnisation des victimes des évènements de 2009 . On débattait des orientations budgétaires pour lannée 2010 , hier soir au conseil municipal . Les Mondiaux en salle d ' athlétisme ont débuté ce vendredi à Doha , au Qatar . Les francais feraient mieux de s ' occuper de leurs retraites plutôt que de donner encore de l ' importance à tous ces crétins , eux ils s ' en foutent de nos retraites . A lâge de 16 ans , jai décidé de prendre des cours de chant chez Jean - Daniel Vitalis , jai alors eu un déclic et su que je voulais en faire mon métier . Contrairement à leur précédente rencontre , en avril 2009 , lors du G 20 à Londres , qui s ' était déroulée dans une ambiance tendue , cette visite d ' Etat a été l ' occasion pour les deux responsables d ' échanges " approfondis " et " sans tabous " . Aaton 35 mm , deux perforations par image . Les demandes d ´ accréditation ont afflué des quatre coins du pays et des magazines peoples , à la recherche d ´ un scoop de plus . Il a fait allusion à de « faux témoins » qui ont « détruit les relations entre la Syrie et le Liban et politisé l ' assassinat » , ajoutant qu ' une « nouvelle page a été ouverte dans ces relations depuis la formation du gouvernement libanais » . L ' Espagne , le Portugal , l ' Italie , et peut - être un jour la France , risquent à leur tour de vivre le scénario grec et d ' être menacés d ' insolvabilité pour leur gestion calamiteuse des finances publiques . Multiples des plus attrayants si on les compare au reste du marchà © . Il est vrai qu ' en 2009 , les investisseurs se sont remis à acheter des titres cycliques et les ont poussà © s à des niveaux assez à © levà © s . Les psychologues proposent alors dancrer le changement climatique dans notre quotidien , notre proximité immédiate , et non dans un futur éloigné et hypothétique . Ils amènent à des tâches plus variées , les défis changent régulièrement » , a - t - elle fait remarquer . Au cours des trois dernières années , le colloque a généré des retombées . « J ' ai appris le français à l ' école , explique Markus . Au final , les Zurichoises n ' auront eu besoin que de 69 minutes pour se défaire d ' un adversaire qu ' elle retrouveront dès la semaine prochaine en demi - finale des play - off de LNA . Dossena quitte les Reds pour NaplesLe défenseur italien met fin à son aventure anglaise contrastée avec Liverpool . Il a insisté sur la nécessité d ´ une " République irréprochable " qui se fait vraiment attendre . Alou Diarra a , lui , joué un match plutôt transparent contre Nancy . fra Hier dans les rues de Bruxelles 75 % d ' Africains . Ces affiches publicitaires du ministère de la Santé ont pour but d ' encourager le port du condom chez les jeunes . Pour être franc , je ne me souviens plus de ma réaction ensuite . Le réseau d ' Hydro - Québec il fonctionne sur une base très ouverte , qui donne un accès non discriminatoire à tous " , a déclaré M . Vandal en marge de l ' annonce d ' un essai de véhicules électriques , au Salon de l ' auto de Montréal . Les élus républicains seront interrogés par Obama sur la méthode qu ' ils préconisent pour réduire les coûts du système de santé et développer la couverture de l ' assurance . Ils pouvaient tout gagner , ils sont en passe de tout perdre . Le casque HS 1 devrait être disponible à la vente dans quelques jours , et son prix devrait tourner autour de 129 euros . Il s Â’ agit de démarches personnelles menées en solitaire par M . Olympio en totale contradiction avec les orientations du Parti maintes fois exprimées par le National , notamment celles de ne pas participer à un tel gouvernement . C Â’ est là que le livre de la Genèse ( XXXII , 23 - 33 ) situe le combat singulier entre le patriarche Jacob et un ange mystérieux . Après la descente , le Wydad s ' est retrouvé seul fra Encore faut - il que le devoir écologique se conjugue avec un intérêt économique . À part quelques travaux de finition , les nouveaux locaux de l Â’ ambassade des États - Unis sont quasiment prêts à accueillir les quelque 300 occupants . Construit en Belgique , le véhicule de 42 mètres , qui est arrivé jeudi matin au Bachet , a transité par la Hollande et l ' Allemagne avant d ' arriver au Bachet de Pesay . La réussite de cette observation est le fruit d ' un joli concours de circonstances : un matériel très performant dans un observatoire situé sur la trajectoire terrestre de l ' occultation , le phénomène se produisant pendant une nuit claire . ArcelorMittal recule ainsi de 2 , 5 % à 31 , 93 euros . Le week - end a réuni plus de 80 participants pendant 48 heures , qui ont contribué à la création de 7 applications innovantes pour liPhone et liPad . Hermès , qui publiera ses résultats semestriels complets le 31 août , table aussi sur une amélioration d ' au moins un point de sa marge opérationnelle courante , exprimée en pourcentage des ventes , sur l ' ensemble de l ' exercice . Les Verts militent pour un train qui ferait le tour de lîle et provoquerait une révolution des transports grâce à sa gratuité . Le directeur de cabinet de Nicolas Sarkozy salue la diminution des frais engendrés pour les sondages et les frais personnels du Président pour le budget 2009 . Il était discret , mais reconnaissant " , se souvient Martin . En général , es hémorroïdes ne sont qu ' un problème passager qui devrait se résorber en moins de 10 jours . En fin de classement , Bordeaux ( 0 point ) , essayera d ' imiter l ' OM et l ' OL dimanche soir en clôture de cette journée pour s ' extirper de la zone rouge , partagée avec les promus Brest et Arles - Avignon . La SNCF a reconnu que ce problème ne se posait que sur les rames non encore rénovées . La Nouvelle - Zà © lande est une monarchie constitutionnelle , dont le chef de l ' Etat , aux fonctions essentiellement honorifiques , est la reine d ' Angleterre Elizabeth II reprà © sentà © e à Wellington par un gouverneur gà © nà © ral . Hillary Clinton devait par la suite être reçue par l ' émir du Qatar , cheikh Hamad Ben Khalifa Al - Thani , avant de prononcer un discours devant la septième édition du Forum mondial Islam / Etats - Unis réuni à Doha . Mais pour Kim Källström , les Gones auraient mérité de terminer la rencontre avec les trois points de la victoire en poche . Au Letzigrund , Aarau a enregistrà © son premier succà ¨ s en dà © placement depuis un an , soit le 18 avril 2009 . Le but dà © cisif a à © tà © l ' oeuvre de Mustafi à la 62 e . Aux yeux de Brière , le CH mise également sur un agitateur de première classe pour allumer le feu en Maxim Lapierre . Y perdent la vie deux des preneurs d ´ otages et le skipper , mari et père . Pour l ' ANEL , il s ' agit plutôt de " faciliter la commission de violations en ligne et d ' encadrer le contournement des mesures techniques de protection des oeuvres " . ita Dovrà consolidare la situazione di equilibrio economico - finanziario della gestione aziendale . Non sarà così semplice come sembra , ma Napoli comunque è più che favorito a 1 , 50 BetClic / Bwin / Matchpoint . Al raggiungimento del numero richiesto , potranno recarsi presso gli stand adibiti al concorso e consegnare la cartolina . SACHSENRING - Passo indietro per Marco Melandri al Sachsenring . La seconda vittima è un indigente , che stava molto vicino a un passaggio a livello collassato . Penso che la società non abbia mai avuto la volontà di cedermi " . Dunque , Maroni vuole vederci chiaro e nei prossimi giorni ascolterà il prefetto di Lecce per capire le motivazioni che hanno portato a questa scelta . I carabinieri hanno arrestato i giovani duellanti maggiorenni , tradotti presso la casa Circondariale « Ucciardone » , e denunciato il minore . In compenso e ' rivisto al rialzo il dato di novembre che registra + 4 mila unita ' , contro le - 11 mila unita ' inizialmente stimate . Alcune attività vengono svolte anche nel resto dell Â’ anno , ma non in tutti i villaggi e per tutte le lingue . Il Consiglio di sicurezza delle Nazioni Unite affronterà oggi ( 3 agosto ) , in una riunione a porte chiuse , la questione degli scontri verificatisi stamane tra forze israeliane e libanesi alla frontiera tra i due paesi . L ' annuncio dei talebani segue di poco quello della polizia afgana , che trova i dieci corpi trucidati nella provincia nord - orientale del Badakhshan . La tedesca , già oro nella supercombinata , è stata la più veloce sul tracciato reso ancora più complicato dalla nebbia che avvolge Whistler Mountain . Questa Germania che sta ritrovando se stessa , ormai tornata un Paese normale , crea naturalmente problemi ai vicini . " E ' un acquisto importante , è molto probabile che acquisiremo la metà del cartellino , definiremo nelle prossime ore " . In questo senso lo stesso Sacconi ha parlato di una '' piu ' ampia iniziativa di contrasto del lavoro nero in agricoltura che interessa non solo la Regione Calabria ma anche le Regioni Campania e Puglia . Noi pero '' abbiamo voglia di riscattarci e di tornare a vincere . Sono gesti di inciviltà che non devono rimanere impuniti " . Il primo passo è in Chromium 5 . 0 . 360 . 4 per Windows e Mac ( 5 . 0 . 360 . 5 per Linux ) , ove oltre all ' inclusione di Flash Player è stato aggiunto anche un semplice plugin manager con cui gestire i vari plugin da abilitare o disabilitare all ' occorrenza . Nessuno vuole tornare ai manicomi - premette Palumbo - ma vogliamo migliorare l ' assistenza ai malati e alle famiglie " . ita Il gran rifiuto di Napolitano suscitò vivaci reazioni , di consenso e di dissenso . L ' opera venne commissionata sotto al presidenza Mitterrand , all ' epoca dei grandi lavori , a metà degli anni Ottanta e voleva rappresentare la " nuova Francia " , dinamica , che emerge attraverso la superficie dell ' antica capitale francese . Monsieur Henri era una spia particolarmente preparata . In relazione alle erogazioni effettuate alle Onlus , di fatto le più diffuse , la deducibilità massima è alternativamente di 2 . 065 , 83 euro o del 2 % del reddito d ' impresa . BERLINO ( Reuters ) - Il cancelliere tedesco Angela Merkel ha chiesto oggi " verità e chiarezza " per lo scandalo degli abusi commessi su bambini da esponenti della Chiesa Cattolica . Gara fotocopia per Alex Zanotti , alle prese con il porta roadbook che girava male nella prima speciale . Si tratta di Walter Barbero , di 56 anni , residente a San Pietro Val Lemina , nel pinerolese . Può darsi che nei prossimi giorni qualche altro deputato entri nel nostro gruppo " . Per il Pd scende in campo lo stesso Bersani . Un gesto simile lo compiranno anche l ' arcivescovo di Vienna , card . Con loro ha visitato la nave e ha potuto verificare sul campo quanta attenzione viene data in questo impianto ad aspetti fondamentali come la sicurezza e l ' ambiente . I Forti , infatti , vennero realizzati fuori della cintura delle Mura Aureliane a fini difensivi e oggi sono una parte integrante del tessuto urbano che attende di essere riconsegnato alla vita della città » . Roma , 24 mar . - ( Adnkronos ) - " Dobbiamo dire ai giovani che questa scoperta straordinaria di internet e ' uno strumento che va usato per divertirsi , per studiare , per lavorare , ma nasconde delle insidie . Egli , infatti , sostiene che i buchi neri evaporano , si dissolvono con il tempo , perché fornendo l ' energia ai fotoni che se ne vanno in continuazione questa , ad un certo punto , si esaurisce e del « mostro » , alla fine , non resta più nulla . E poi , bisogna creare un account ? Insomma , Cina e Africa hanno tanto da guadagnare . Lo dice il bollettino medico del prof . Martinelli , primario dell ' Unita ' di rianimazione dell ' Azienda ospedaliera San Salvatore di Pesaro . A Napoli si vive in maniera straordinaria , ci sono situazioni eduardiane e mi riferisco a quelle raccontate da De Filippo " . Ma su console gira come nel video o ci saranno restrizioni ? Poi aggiunge una riflessione : " Il percorso politico non s ' intraprende solo per gli appuntamenti elettorali . pob Então se fosse um evento financiado pela Secretaria Estadual de Educação nós teriamos o prazer de receber a Seleção . Juliana Nogueira , gerente de Turismo da Sematur , aproveita para destacar que o Centro de Informações Turísticas , na entrada da cidade para quem vem de Castro pela PR - 340 , fica aberto mesmo no feriado para oferecer auxílio aos turistas . No início dos anos 50 , John Herbert conheceu Eva , a Vivinha , que estava ensaiando numa sala do Teatro Municipal de São Paulo com um grupo de balé , ao qual participava . Como se não bastasse , ameaça também a sua família … Qualquer semelhança não é mera coincidência . Tem alguma coisa errada Um homem despencou do telhado da rodoviária de Balneário Camboriú esta manhã , quando fazia reparos numa caixa d ` água . No Brasil foram confirmados 757 casos da doença até o momento , com um registro de óbito no Rio Grande do Sul . Deu no Jornal Circuito Mato Grosso impresso : Ele quer ser o novo Blairo Maggi Adriana Nascimento - Redação Jornal Circuito Mato Grosso . Começa uma gritaria histérica . Há muito tempo que um governo não se lembra que existe em Sergipe uma cidade chamada Divina Pastora . O valor estimando para a campanha do Partido Verde nas eleições 2010 é superior ao valor da campanha de Lula em 2006 . O jogo perdeu velocidade e passou a ser disputada essencialmente no meio - campo . É contra quem acha impostos em cascatas perversos para a economia , que onera a todos , inclusive os que produzem e consomem , independentemente da renda . A Lei nº 11 . 924 , de 17 de abril de 2009 , acrescenta um parágrafo à Lei dos Registros Públicos , autorizando o enteado a adotar o nome de família do padrasto ou madrasta . É de responsabilidade do interessado a escolha da categoria de inscrição , não sendo exigido nenhum tipo de comprovação . A prefeitura aguarda um laudo técnico para tomar as devidas providências . O também parlamentar Percival Muniz desfalca o PPS na briga por cadeira na Assembleia . Clique aqui ( 1 e 2 ) para ver os documentos . Por captar a energia solar , o branco é vibrante e estimula os sentidos . O ex - vereador perdeu o mandato por ter sido condenado , em 2008 , por porte ilegal de arma . A chuvarada trouxe problemas para você ? fra C ' est leur faute s ' ils amènent leurs enfants sur le champ de bataille commente un des membres de l ' équipage . Moins de 1 % des détenus y sont inscrits . La nouvelle convention collective a été présentée mardi par l ' Association des joueurs et les dirigeants de la LCF . Le club a vocation à examiner toutes les pistes intéressantes pour lui . Le pêcheur indigà ¨ ne qui s ' à © tait trimballà © le poisson - une belle bête de 90 livres - depuis l ' autre cà ´ tà © de l ' à ® le leur rà © và © la en effet que les gens du coin connaissaient l ' existence du cÃ… “ lacanthe depuis belle lurette ! Le chef à © toilà © dit vouloir continuer à transmettre sa passion pour la cuisine mais n ' a pas encore de projets dà © finis . Grâce aux Japonais et aux pêcheurs d ´ Islande et d ´ ailleurs , il n ´ en restera bientôt plus . Ceci permettrait d ' « ensemencer et de blanchir des champs de nuages » , pour accentuer leur pouvoir de réflection des rayons du soleil et diminuer ainsi la température de la Terre . Quelque 45 millions d ' auditeurs sont abonnés au système qu ' il a créé . Je sais que l Â’ attaque des Argos n Â’ est pas aussi menaçante que celle des Riders et que le test qui nous attend sera plus corsé , mais c Â’ est le fun de revoir la Saskatchewan à ce stade - ci de la saison . La manifestation a bà © nà © ficià © d ' un " và © ritable engouement populaire " . Nous avons donné des instructions précises aux officiers pour qu ' ils ne provoquent pas d ' affrontements ni n ' utilisent la force de façon excessive " , a précisé de son côté le porte - parole du gouvernement , Panitan Wattanayagorn . Guillon utilise dans son humour noir des méthodes totalement inacceptables qui pourraient être facilement retournées contre lui . Un choc particulièrement violent , survenu dans une zone inaccessible par la route , ce qui complique les opérations de secours . Toujours au chapitre des recommandations , Goldman Sachs conseille désormais de vendre l ' action de Boston Scientific après qu ' il a suspendu ce lundi la vente et l ' utilisation de certains défibrillateurs . Après que Brandon Morrow eut accordé les cinq points des Red Sox en seulement quatre manches au monticule , la relève des Jays a fait le travail , limitant les Bostonniens à trois coups sûrs au cours des cinq dernières manches . Cet établissement avait participé au sauvetage de la première banque helvétique en lui accordant un prêt obligatoirement convertible de 11 milliards de francs , le 10 décembre 2007 . Ce dernier a reçu 19 , 7 % des voix . Ma saison est remplie . Barré à la Juventus , le milieu récupérateur portugais est à la cherche de temps de jeu en vue de la Coupe du monde . ita Quando sarà il momento lo diremo " , annuncia ai microfoni di Centro Suono Sport . Alcuni indagati , inoltre , avevano la passione di trasformare armi giocattolo in pistole vere modificandole con canne attraverso tondini di acciaio rubati nello stabilimento del Petrolchimico Eni . Dove è finito il prosperoso decollete ? Mi attendo che la Ferrari abbia un grande fine settimana , preparandoci bene per la gara , trovando il giusto set - up , facendo lavorare bene gli pneumatici " . BOLZANO , 8 GIU - Il tipico tessuto tirolese chiamato Loden e ' diventato ignifugo grazie a una idea del lanificio altoatesino Moessmer . " Quagliarella è un nostro punto di forza , l ' ho voluto io insistendo fortemente con il presidente dell ' Udinese , Pozzo , affinché cedesse il suo cartellino " , ha spesso ricordato De Laurentiis . Il governo ecuadoriano ha poi confermato di voler andare avanti con il progetto . I funerali si terranno domani nella chiesa dell ' ospedale Grassi di Ostia , dove e ' avvenuto il decesso . Da stasera su Canale 5 va in onda la fiction in sei puntate Fratelli Benvenuti con Massimo Boldi , Barbara De Rossi ed Enzo Salvi . Il senatore leghista Vallardi ha presentato un emendamento alla legge in discussione , ribattezzato emendamento grappino . L ' hanno capito tutti , anche i finiani " . Tuttavia la rivolta del popolo iraniano va avanti con lo slogan : morte alla dittatura - viva la libertà . Già certo del primo posto della poule invece il Bancole che renderà visita proprio al Messana sabato 20 marzo , in una gara ininfluente per il suo piazzamento finale . Incontri , dibattiti , convegni e ricordi in tutta Europa per le barbarie commesse nel tempo . Un ' idea può cambiare la vita , magari mettendosi in proprio . " Questo - ha spiegato - è un principio di chiarezza e di etica politica . " Lo scenario è uno solo , un governo di responsabilità nazionale , che lasci decantare la fase di barbarie politica , riscriva la legge elettorale e affronti le nuove scadenze europee di cui nessuno parla . Le operazioni di bonifica dallinquinamento si susseguono , insieme a quelle di messa in sicurezza del pozzo . Poi il numero uno del gruppo californiano ha ricordato l ' esperienza della casa di Cupertino nel campo dei pc . Al momento non c ' e ' un sostituto specifico per sostituire Dossena . pob Esse aspecto é importante , pois diferencia os Karajá de inúmeros grupos indígenas e de outros povos . Desde então vivemos e lidamos com o ideal democrático . Blairo foi pressionado por um grupo reduzido de políticos que o queria candidato ao Paiaguás . Além disso , ele quebrou o recorde olímpico da prova e foi bronze nos 100 m livre . Constava no prontuário que o detento estava com o problema desde março deste ano . A funcionária de uma loja de informática também relatou à reportagem a ação do assaltante . Serra leva ' bandeirada ' durante tumulto O que era para ser uma passeata em busca de votos no calçadão de Campo Grande , na zona oeste do Rio .. O levantamento abrange 24 bairros do município . O governador fez um movimento de eleger os seus candidatos até por autodefesa . O prefeito Evilásio está com a corda toda . Disse que a direção Executiva já deu iniciativa a uma avaliação da programação . Em entrevista à Redação do jornal PONTO FINAL , o profissional em Educação Física , Marco Aurélio trás esclarecimentos sobre os malefícios dos exageros e os benefícios de atividades físicas monitoradas para o bem da saúde . A organização da Marcha para Jesus estima em 5 milhões o número de pessoas que participam do evento nesta quinta - feira ( 3 ) . Será que é pouca ? .. Permaneceu no kart por 9 anos e obteve dois vice - campeonatos : paulista e brasileiro . A administradora financeira Salete Alves , 42 anos , não aprovou a antecipação de horário . Quando o Padre Ricardo White veio foi que levantou o catolicismo em Búzios . Outro resultado inédito apontado pelos autores foi o efeito da droga sitagliptina , indicada para diabéticos tipo 2 , em dois dos pacientes que voltaram a precisar da insulina . É muito elogiada por uma infinidade de artistas brasileiros e estrangeiros . Não há outra fórmula de ensinar que não seja por vínculo afetivo . ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_eval_ner-en_0100644 0000000 0000000 00000000156 14523004075 032627 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/eval/ner-en_pos-features.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/eval/ner-en_pos-features.xml0100644 0000000 0000000 00000003721 14523004075 034276 0ustar00rootroot0000000 0000000 2 2 2 2 true false en-pos-perceptron.bin apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/ad.sample0100644 0000000 0000000 00000023014 14523004075 032203 0ustar00rootroot0000000 0000000 SOURCE: ref="1001.porto-poesia=removeme=-2 a poesia toma porto-alegre=removeme=-2" source="SELVA 1001.porto-poesia=removeme=-2 a poesia toma porto-alegre=removeme=" 1001 Inicia no próximo dia 6 de outubro o Porto Poesia 2 no Shopping Total Av. Cristovão Colombo, 545 -- Porto Alegre -- RS. A1 STA:fcl =P:v-fin("iniciar" PR 3S IND VFIN) Inicia =PIV:pp ==H:prp("em" ) em ==P<:np ===>N:art("o" <-sam> DET M S) o ===>N:adj("próximo" M S) próximo ===H:n("dia" M S) dia ===N<:num("6" M P) 6 ===N<:pp ====H:prp("de" ) de ====P<:n("outubro" M S) outubro =ACC:cu ==CJT:np ===>N:art("o" DET M S) o ===H:prop("Porto_Poesia" M S) Porto_Poesia ===N<:num("2" M/F P) 2 ===N<:pp ====H:prp("em" ) em ====P<:np =====>N:art("o" <-sam> DET M S) o =====H:prop("Shopping_Total" M S) Shopping_Total ==CJT:np ===H:n("av." M S) Av. ===N<:prop("Cristovão_Colombo" M S) Cristovão_Colombo ==, ==CJT:num("545" M/F P) 545 ==-- =SUBJ:np ==H:prop("Porto_Alegre" M S) Porto_Alegre ==-- ==APP:prop("RS" M S) RS . SOURCE: ref="1001.porto-poesia=removeme=-2 a poesia toma porto-alegre=removeme=-6" source="SELVA 1001.porto-poesia=removeme=-2 a poesia toma porto-alegre=removeme=" 1001 Com relação à parceria com o shopping o organizador diz que: A1 STA:fcl =ADVL:pp ==H:prp("com_relação_a" ) Com_relação_a ==P<:np ===>N:art("o" <-sam> DET F S) a ===H:n("parceria" F S) parceria ===N<:pp ====H:prp("com" ) com ====P<:np =====>N:art("o" DET M S) o =====H:n("shopping" M S) shopping =SUBJ:np ==>N:art("o" DET M S) o ==H:n("organizador" M S) organizador =P:v-fin("dizer" PR 3S IND VFIN) diz SUB:conj-s("que" ) que : SOURCE: ref="1001.porto-poesia=removeme=-2 a poesia toma porto-alegre=removeme=-11" source="SELVA 1001.porto-poesia=removeme=-2 a poesia toma porto-alegre=removeme=" 1001 Até o momento, mais de 98 profissionais da área da cultura e poetas têm a presença confirmada, entre eles, Armindo Trevisan, Alcy Cheuiche, Donaldo Schüller, José Eduardo Degrazia, Lau Siqueira, Liana Timm, Luiz Coronel, Mário Pirata, Oliveira Silveira, Jane Tutikian, Paulo Custódio, entre outros. A1 STA:fcl =ADVL:pp ==H:prp("até" ) Até ==P<:np ===>N:art("o" DET M S) o ===H:n("momento" M S) momento =, =SUBJ:cu ==CJT:np ===>N:adjp ====>A:adv("mais_de" ) mais_de ====H:num("98" M/F P) 98 ===H:n("profissional" M/F P) profissionais ===N<:pp ====H:prp("de" ) de ====P<:np =====>N:art("o" <-sam> DET F S) a =====H:n("área" F S) área =====N<:pp ======H:prp("de" ) de ======P<:np =======>N:art("o" <-sam> DET F S) a =======H:n("cultura" F S) cultura ==CO:conj-c("e" ) e ==CJT:n("poeta" M P) poetas =P:v-fin("ter" PR 3P IND VFIN) têm =ACC:np ==>N:art("o" DET F S) a ==H:n("presença" F S) presença ==N<:v-pcp("confirmar" F S) confirmada =, =ADVL:pp ==H:prp("entre" ) entre ==P<:np ===H:pron-pers("eles" M 3P NOM/PIV) eles ===, ===APP:np ====H:prop("Armindo_Trevisan" M S) Armindo_Trevisan ====, ====APP:np =====H:prop("Alcy_Cheuiche" M/F S) Alcy_Cheuiche =====, =====APP:np ======H:prop("Donaldo_Schüller" M S) Donaldo_Schüller ======, ======APP:np =======H:prop("José_Eduardo_Degrazia" M S) José_Eduardo_Degrazia =======, =======APP:np ========H:prop("Lau_Siqueira" M/F S) Lau_Siqueira ========, ========APP:np =========H:prop("Liana_Timm" F S) Liana_Timm =========, =========APP:np ==========H:prop("Luiz_Coronel" M S) Luiz_Coronel ==========, ==========APP:np ===========H:prop("Mário_Pirata" M S) Mário_Pirata ===========, ===========APP:np ============H:prop("Oliveira_Silveira" F S) Oliveira_Silveira ============, ============APP:np =============H:prop("Jane_Tutikian" F S) Jane_Tutikian =============, =============APP:prop("Paulo_Custódio" M S) Paulo_Custódio =, =ADVL:pp ==H:prp("entre" ) entre ==P<:pron-det("outro" DET M P) outros . SOURCE: ref="1003.cultura-ameacada=removeme=-5" source="SELVA 1003.cultura-ameacada=removeme=" 1003 Casas, galpão utilizado para os festejos e até mesmo a capela em que os Arturos celebram seus rituais religiosos tiveram telhas e vidros destruídos, num episódio sem precedentes na comunidade. A1 ACC:fcl =TOP:n("casa" F P) Casas =, STA:fcl =SUBJ:cu ==CJT:np ===H:n("galpão" M S) galpão =====N<:v-pcp("utilizar" M S) utilizado =====N<:pp ======H:prp("para" ) para ======P<:np =======>N:art("o" DET M P) os =======H:n("festejo" M P) festejos ====CO:conj-c("e" ) e ===ADVL:adv("até_mesmo" ) até_mesmo ====CJT:np =====>N:art("o" DET F S) a =====H:n("capela" F S) capela ===ADVL:prp("em" ) em =SUB:conj-s("que" ) que =SUBJ:np ==>N:art("o" DET M P) os ==H:prop("Arturos" M P) Arturos =P:v-fin("celebrar" PR 3P IND VFIN) celebram =ACC:np ==>N:pron-det("seu" DET M P) seus ==H:n("ritual" M P) rituais ==N<:adj("religioso" M P) religiosos ==P:v-fin("ter" PS/MQP 3P IND VFIN) tiveram ==ACC:cu ===CJT:n("telha" F P) telhas ===CO:conj-c("e" ) e ===CJT:np ====H:n("vidro" M P) vidros ====N<:v-pcp("destruir" M P) destruídos ==, ==ADVL:pp ===H:prp("em" ) em ===P<:np ====>N:art("um" <-sam> DET M S) um ====H:n("episódio" M S) episódio ====N<:pp =====H:prp("sem" ) sem =====P<:n("precedente" M P) precedentes ==ADVL:pp ===H:prp("em" ) em ===P<:np ====>N:art("o" <-sam> DET F S) a ====H:n("comunidade" F S) comunidade . SOURCE: ref="1001.porto-poesia=removeme=-2 a poesia toma porto-alegre=removeme=-2" source="SELVA 1001.porto-poesia=removeme=-2 a poesia toma porto-alegre=removeme=" 1001 Em 9 fe agosto de 1831. A1 STA:fcl =ADVL:pp ==H:prp("em" ) Em ==P<:adjp() ===H:num("9" M S) 9 ===N<:pp ====H:prp("de" ) de ====P<:np() =====H:n("agosto" M S) agosto =====N<:pp ======H:prp("de" ) de ======P<:adjp =======H:num("1831" M P) 1831 . SOURCE: ref="1001.porto-poesia=removeme=-2 a poesia toma porto-alegre=removeme=-2" source="SELVA 1001.porto-poesia=removeme=-2 a poesia toma porto-alegre=removeme=" 1001 Ivan do Maxixe ofereceu-me um café. A1 STA:fcl ===H:prop("Ivan" M S) Ivan ===N<:pp ====H:prp("de" ) de ====P<:np =====>N:art("o" <-sam> DET M S) o =====H:n("maxixe" M S) Maxixe ===P:v-fin("oferecer" PS 3S IND VFIN) ofereceu- ===DAT:pron-pers("eu" M/F 1S DAT) me ===ACC:np ====>N:pron-det("um" DET M S) um ====H:n("café" M S) café . SOURCE: ref="1002.pesquisa da usp mapeia cultura livre em são paulo-14" source="SELVA 1002.pesquisa da usp mapeia cultura livre em são paulo" 1002 Contato: A1 UTT:n("contato" M S) Contato : SOURCE: ref="1783.sim o ms tambem tem-forro=removeme=-31" source="SELVA 1783.sim o ms tambem tem-forro=removeme=" 1783 Gonzagão e aquele outro Zé apelidado Jackson. A1 STA:fcl =ACC:cu ==CJT:prop("Gonzagão" M/F S) Gonzagão ==CO:conj-c("e" ) e ==CJT:pron-det("aquele" DET M S) aquele ==CJT:np ===H:prop("Zé" M S) Zé ===N<:adj("apelidado" M S) apelidado ==CJT:prop("Jackson" M S) Jackson . ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_brat0100644 0000000 0000000 00000000157 14523004075 032761 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/brat/opennlp-1193.ann apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/brat/opennlp-1193.an0100644 0000000 0000000 00000000224 14523004075 033730 0ustar00rootroot0000000 0000000 T1 Name 0 7;17 24;8 15 spanA_1 spanA_2 spanA_3 T2 Name 26 33;40 47 spanB_1 spanB_2 T3 Event 34 39 spanC E1 Event:T3 ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_brat0100644 0000000 0000000 00000000157 14523004075 032761 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/brat/opennlp-1193.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/brat/opennlp-1193.tx0100644 0000000 0000000 00000000060 14523004075 033763 0ustar00rootroot0000000 0000000 spanA_1 spanA_2 spanA_3 spanB_1 spanC spanB_2 ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_brat0100644 0000000 0000000 00000000200 14523004075 032746 xustar000000000 0000000 128 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/brat/voa-with-entities-overlapping.ann apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/brat/voa-with-entiti0100644 0000000 0000000 00000001274 14523004075 034323 0ustar00rootroot0000000 0000000 T1 Person 281 286 Obama T2 Person 21 33 Barack Obama T3 Location 51 62 South Korea T4 Location 151 162 North Korea T5 Location 231 236 China T6 Location 243 254 South Korea T7 Location 322 333 North Korea T8 Date 257 266 Wednesday T9 Location 386 397 North Korea T10 Person 586 591 Obama T11 Date 843 860 Wednesday evening T12 Location 889 901 South Korean T13 Person 913 928 Lee Myung - bak T14 Date 931 939 Thursday T15 Location 978 989 South Korea T16 Location 1000 1013 United States T17 Person 1121 1126 Obama T18 Location 1168 1177 Pyongyang T19 Person 1168 1177 Pyongyang #1 AnnotatorNotes T2 President Obama was the 44th U.S. president #2 AnnotatorNotes T3 The capital of South Korea is Seoul./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_brat0100644 0000000 0000000 00000000200 14523004075 032746 xustar000000000 0000000 128 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/brat/voa-with-entities-overlapping.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/brat/voa-with-entiti0100644 0000000 0000000 00000002432 14523004075 034320 0ustar00rootroot0000000 0000000 U . S . President Barack Obama has arrived in South Korea , where he is expected to show solidarity with the country ' s president in demanding North Korea move toward ending its nuclear weapons programs . As he departed China for South Korea Wednesday , President Obama took another opportunity to urge North Korea to reach an agreement on its nuclear weapons . " North Korea has a choice . It can continue down the path of confrontation and provocation that has led to less security , less prosperity and more isolation from the global community , " President Obama said . " Or it can choose to become a full member of the international community , which will give a better life to its people by living up to international obligations and foregoing nuclear weapons . " The president landed at a U . S . air base Wednesday evening , and is to hold talks with South Korean President Lee Myung - bak Thursday here in the South Korean capital . South Korea and the United States are trying to coax the North back to six - nation talks aimed at ending its nuclear weapons . President Obama has indicated he will send an envoy to Pyongyang before the end of the year for one - on - one discussions , but only in the context of restarting the multinational process . ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_brat0100644 0000000 0000000 00000000164 14523004075 032757 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/brat/voa-with-entities.ann apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/brat/voa-with-entiti0100644 0000000 0000000 00000001235 14523004075 034320 0ustar00rootroot0000000 0000000 T1 Person 281 286 Obama T2 Person 21 33 Barack Obama T3 Location 51 62 South Korea T4 Location 151 162 North Korea T5 Location 231 236 China T6 Location 243 254 South Korea T7 Location 322 333 North Korea T8 Date 257 266 Wednesday T9 Location 386 397 North Korea T10 Person 586 591 Obama T11 Date 843 860 Wednesday evening T12 Location 889 901 South Korean T13 Person 913 928 Lee Myung - bak T14 Date 931 939 Thursday T15 Location 978 989 South Korea T16 Location 1000 1013 United States T17 Person 1121 1126 Obama T18 Location 1168 1177 Pyongyang #1 AnnotatorNotes T2 President Obama was the 44th U.S. president #2 AnnotatorNotes T3 The capital of South Korea is Seoul./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_brat0100644 0000000 0000000 00000000164 14523004075 032757 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/brat/voa-with-entities.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/brat/voa-with-entiti0100644 0000000 0000000 00000002432 14523004075 034320 0ustar00rootroot0000000 0000000 U . S . President Barack Obama has arrived in South Korea , where he is expected to show solidarity with the country ' s president in demanding North Korea move toward ending its nuclear weapons programs . As he departed China for South Korea Wednesday , President Obama took another opportunity to urge North Korea to reach an agreement on its nuclear weapons . " North Korea has a choice . It can continue down the path of confrontation and provocation that has led to less security , less prosperity and more isolation from the global community , " President Obama said . " Or it can choose to become a full member of the international community , which will give a better life to its people by living up to international obligations and foregoing nuclear weapons . " The president landed at a U . S . air base Wednesday evening , and is to hold talks with South Korean President Lee Myung - bak Thursday here in the South Korean capital . South Korea and the United States are trying to coax the North back to six - nation talks aimed at ending its nuclear weapons . President Obama has indicated he will send an envoy to Pyongyang before the end of the year for one - on - one discussions , but only in the context of restarting the multinational process . ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_brat0100644 0000000 0000000 00000000165 14523004075 032760 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/brat/voa-with-relations.ann apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/brat/voa-with-relati0100644 0000000 0000000 00000001354 14523004075 034306 0ustar00rootroot0000000 0000000 T1 Person 281 286 Obama T2 Person 21 33 Barack Obama T3 Location 51 62 South Korea T4 Location 151 162 North Korea T5 Location 231 236 China T6 Location 243 254 South Korea T7 Location 322 333 North Korea T8 Date 257 266 Wednesday T9 Location 386 397 North Korea T10 Person 586 591 Obama T11 Date 843 860 Wednesday evening T12 Location 889 901 South Korean T13 Person 913 928 Lee Myung - bak T14 Date 931 939 Thursday T15 Location 978 989 South Korea T16 Location 1000 1013 United States T17 Person 1121 1126 Obama T18 Location 1168 1177 Pyongyang R1 Related Arg1:T2 Arg2:T3 R2 Related Arg1:T1 Arg2:T7 R3 Related Arg1:T13 Arg2:T12 R4 Related Arg1:T17 Arg2:T18 R5 Related Arg1:T2 Arg2:T4 R6 Related Arg1:T2 Arg2:T5 R7 Related Arg1:T2 Arg2:T6 ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_brat0100644 0000000 0000000 00000000165 14523004075 032760 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/brat/voa-with-relations.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/brat/voa-with-relati0100644 0000000 0000000 00000002433 14523004075 034305 0ustar00rootroot0000000 0000000 U . S . President Barack Obama has arrived in South Korea , where he is expected to show solidarity with the country ' s president in demanding North Korea move toward ending its nuclear weapons programs . As he departed China for South Korea Wednesday , President Obama took another opportunity to urge North Korea to reach an agreement on its nuclear weapons . " North Korea has a choice . It can continue down the path of confrontation and provocation that has led to less security , less prosperity and more isolation from the global community , " President Obama said . " Or it can choose to become a full member of the international community , which will give a better life to its people by living up to international obligations and foregoing nuclear weapons . " The president landed at a U . S . air base Wednesday evening , and is to hold talks with South Korean President Lee Myung - bak Thursday here in the South Korean capital . South Korea and the United States are trying to coax the North back to six - nation talks aimed at ending its nuclear weapons . President Obama has indicated he will send an envoy to Pyongyang before the end of the year for one - on - one discussions , but only in the context of restarting the multinational process . apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/brown-cluster.txt0100644 0000000 0000000 00000024424 14523004075 033771 0ustar00rootroot0000000 0000000 0000 18, 1 0000 wedding 1 0000 A 1 0000 No, 1 0000 prefered 1 0000 hurry 1 0000 address? 1 0000 sounds 1 0000 any 1 0000 soon, 1 0000 in 56 0000 Worcesterstreet 1 00010 summer. 1 00010 56473 1 00010 different 1 00010 20193 1 00010 Ulm 1 00010 17818 1 00010 beautiful 1 00010 23213 1 00010 12424 1 00010 Rue-de-Grandes-Illusions 1 00010 good. 1 00010 Barmerstr. 1 00010 81737 1 00010 order 1 00010 1912 1 00010 63737 1 00010 Chesterstr. 1 00010 80333 1 00010 81234 1 00010 that's 1 00010 78181 1 00010 30291 1 00010 84630 1 00010 25334 1 00010 30303 2 00010 Leipzig. 2 00010 your 3 00010 her 10 000110 5. 1 000110 Hamburg, 1 000110 contact 1 000110 faked. 1 000110 streetname 1 000110 34. 1 000110 83939 1 000110 25. 1 000110 2. 1 000110 part-time 1 000110 help-wanted 1 000110 11 1 000110 some 1 000110 Gauting. 1 000110 address. 1 000110 parent's 1 000110 reply. 1 000110 touch 1 000110 Berlin. 5 000110 Munich. 5 000111 there, 1 000111 Schulz 1 000111 Paris 1 000111 Edinburgh, 1 000111 day 1 000111 1 1 000111 you? 1 000111 saw 1 000111 see 1 000111 house 1 000111 recently 1 000111 Don't 1 000111 back 1 000111 apartment 1 000111 12, 1 000111 Are 2 000111 Could 2 000111 did 2 000111 job 2 000111 still 3 000111 Thank 3 000111 up 3 00100 30202. 1 00100 Yesterday, 1 00100 ad 1 00100 homesick, 1 00100 Now, 1 00100 man 1 00100 help. 1 00100 area. 1 00100 "Westbad". 1 00100 or 2 00100 It's 2 00100 It 2 00100 The 7 00100 As 3 00101 Arent't 1 00101 offer. 1 00101 celebrated 1 00101 available. 1 00101 spontaneously. 1 00101 sounding 1 00101 party 2 00101 you 12 001100 last 1 001100 called, 1 001100 That 1 001100 life 1 001100 pointed 1 001100 building 1 001100 restaurant 1 001100 5, 1 001100 one 1 001100 interested 1 001100 located 1 001100 Please 1 001100 answered 1 001100 Hospital 1 001100 112, 2 001100 arrived 3 001100 lived 4 001100 lives 4 001101 Unter-den-Linden 1 001101 this 1 001101 moment. 1 001101 tip 1 001101 10th 1 001101 reckon. 1 001101 factory 1 001101 line 1 001101 Paracelsus 1 001101 Alan 1 001101 it's 2 001101 company 2 001101 who 4 001110 didn't 1 001110 postcode 1 001110 police 1 001110 building. 1 001110 concierge 1 001110 flaring 1 001110 finally 3 001110 she 7 001110 Last 4 001110 She 5 0011110 Erding, 1 0011110 Spain, 1 0011110 resident, 1 0011110 lady, 1 0011110 later 1 0011110 business 1 0011110 idea 1 0011110 Berlin 1 0011110 England, 1 0011110 Sure, 1 0011110 , 10 0011110 longer 1 0011111 is. 1 0011111 15 1 0011111 Schneider 1 0011111 Hinterhofer 1 0011111 me. 1 0011111 Our 1 0011111 Seile 1 0011111 Meier 1 0011111 Bauer 1 0011111 Sander 1 0011111 Clara 1 0011111 Schmidt 2 0011111 minutes 2 0011111 Miller 5 0100 school 1 0100 They 1 0100 8 1 0100 9 1 0100 Europe. 1 0100 those 1 0100 Baumann, 1 0100 a 38 0100 high 1 01010 About 1 01010 has 1 01010 us, 1 01010 13, 1 01010 university. 1 01010 tell 1 01010 On 2 01010 than 2 01010 An 2 01010 Alisa 2 01010 on 3 01010 with 7 01010 called 5 01010 got 5 01011 through 1 01011 shoes? 1 01011 city. 1 01011 quickly 1 01011 trauma, 1 01011 situate 1 01011 much! 1 01011 then, 1 01011 friday! 1 01011 about 1 01011 knew 2 01011 of 17 01011 him 3 011000 drove 1 011000 Yes, 1 011000 away. 1 011000 parents' 1 011000 life-threatening, 1 011000 Weilheim, 1 011000 15. 1 011000 33, 1 011000 86th 1 011000 1995. 1 011000 apartment, 1 011000 took 2 011000 where 3 011000 if 5 011000 But 7 011001 the 54 011001 Blumenweg 1 011010 problem 1 011010 country 1 011010 Her 1 011010 rumour 1 011010 middle-aged 1 011010 police. 1 011010 exhibition. 1 011010 empty 1 011010 hours 1 011010 father 1 011010 area 1 011010 staff 1 011010 Reichstag. 1 011010 "Tapasbar" 1 011010 to. 1 011010 Lenbachhaus 1 011010 complete 1 011010 owner 1 011010 1. 1 011010 11, 1 011010 15, 2 011010 street 2 011010 accident 2 011010 Ostbahnhof 2 011010 address 3 0110110 help 1 0110110 grateful 1 0110110 singer 1 0110110 new 1 0110110 moment 1 0110110 costumers 1 0110110 ancestors. 1 0110110 Schubert 1 0110110 ups 1 0110110 pedestrians. 1 0110110 hint 1 0110110 semester, 1 0110110 aunt 1 0110110 face-to-face, 1 0110110 guests 1 0110110 happy 1 0110110 number 2 0110110 6, 2 0110110 name 8 01101110 French 1 01101110 Luise 1 01101110 knowledge 1 01101110 pictures 1 01101110 them 2 01101110 away 2 01101110 out 4 01101110 years 2 01101111 pain, 1 01101111 Is 1 01101111 sign 1 01101111 home, 1 01101111 14, 1 01101111 appreciated 1 01101111 happened 1 01101111 by 1 01101111 point: 1 01101111 opened 2 01101111 near 4 01101111 instantly 3 01110 taxi 1 01110 p.m.! 1 01110 13 1 01110 barbecue. 1 01110 speed 1 01110 tree. 1 01110 tenant 1 01110 metropolis 1 01110 delivery 1 01110 family 1 01110 list 1 01110 week. 1 01110 student, 1 01110 delicious 1 01110 good 1 01110 well-payed 1 01110 student 1 01110 person! 1 01110 smaller 1 01110 small 2 01110 more 2 01110 look 2 01110 quite 2 01110 bigger 2 01110 young 2 01110 tourist 2 01110 great 3 01110 letter 3 01110 friend 4 0111100 Elenor 1 0111100 definitely 1 0111100 Gina 1 0111100 currently 1 0111100 Marie 1 0111100 McKennedy 1 0111100 ten 1 0111100 sometimes. 1 0111100 Michael 1 0111100 Michel 1 0111100 competent 1 0111100 Gerhard 1 0111100 Stefanie 2 0111100 five 2 0111100 Mike 2 0111100 Stefan 3 0111101 particulary 1 0111101 broken. 1 0111101 10 1 0111101 leather? 1 0111101 grandaunt. 1 0111101 90 1 0111101 Julie 1 0111101 badly 1 0111101 you: 1 0111101 July 1 0111101 painfully 1 0111101 founded 1 0111101 Fernandes 1 0111101 old 2 0111101 elderly 2 0111101 March 2 0111101 him. 2 0111101 2 2 0111101 an 5 0111110 6th 1 0111110 Peter 1 0111110 turbulent 1 0111110 German 1 0111110 informatics, 1 0111110 phone 1 0111110 October 1 0111110 directly 1 0111110 His 2 0111110 My 4 0111110 his 5 0111110 our 5 01111110 Oh 1 01111110 mortal 1 01111110 Natalie 1 01111110 83454 1 01111110 programming 1 01111110 she's 2 01111110 Hi 2 01111110 that 9 01111111 attention. 1 01111111 central 1 01111111 town. 1 01111111 town 1 01111111 Spanish 1 01111111 lodge 1 01111111 right 1 01111111 married 2 01111111 later, 2 01111111 from 9 01111111 local 2 1000 information. 1 1000 capital. 1 1000 officer. 1 1000 retired 1 1000 most. 1 1000 reception 1 1000 wounds 1 1000 12 1 1000 personal 1 1000 colour. 1 1000 shoes 1 1000 030/827234. 1 1000 inquiries? 1 1000 Brandenburger 1 1000 computer... 1 1000 underground 1 1000 smalltown 1 1000 city 2 1000 only 2 1000 first 4 1000 home 3 1000 woman 3 1000 famous 4 1001 multiple 1 1001 France 1 1001 care 1 1001 burnt 1 1001 birthday 1 1001 there 2 1001 they 3 1001 it 8 1001 He 4 1001 which 4 1010 Now 1 1010 off 1 1010 yes, 1 1010 too. 1 1010 and 30 1010 56, 1 10110 Euro, 1 10110 Heidelberg. 1 10110 countries, 1 10110 injured. 1 10110 widow. 1 10110 danger. 1 10110 fact 1 10110 magazine. 1 10110 12. 1 10110 anniversary. 1 10110 traditional 1 10110 up, 1 10110 that? 1 10110 Fritsch. 1 10110 amazing, 1 10110 "Twentytwo". 1 10110 am 1 10110 Ottobrunn. 1 10110 years. 1 10110 her. 1 10110 whom 2 10110 Hamburg. 4 10110 . 4 10110 So 6 10111 photo 1 10111 place. 1 10111 p.m.. 1 10111 Heidelberg's 1 10111 September, 1 10111 21, 1 10111 jacket, 1 10111 anyway, 1 10111 Therefore, 1 10111 couple, 1 10111 so 2 10111 When 2 10111 year, 3 10111 husband 2 1100 place, 1 1100 Convulsed 1 1100 Driving 1 1100 notable 1 1100 album 1 1100 meal. 1 1100 I've 2 1100 Hi, 2 1100 We 2 1100 I 37 110100 takes 1 110100 reported 1 110100 is 15 110100 wasn't 3 110101 Bye! 1 110101 He's 1 110101 bike 1 110101 can 1 110101 agency 1 110101 Highfly-Hotel 1 110101 shop 1 110101 "Daily's" 1 110101 was 15 110101 depended 1 110110 Afterwards, 1 110110 maps. 1 110110 Lenbachhaus. 1 110110 flair 1 110110 immediately 1 110110 weren't 1 110110 addresses 1 110110 desk 1 110110 station 1 110110 I'll 1 110110 Tor 1 110110 hospital 1 110110 because 2 110110 own 2 110110 into 6 110110 as 4 1101110 frequented 1 1101110 yet 1 1101110 Since 1 1101110 made 1 1101110 what 1 1101110 he 9 1101110 information 2 1101111 Italian. 1 1101111 entertainer 1 1101111 foreign 1 1101111 delighted. 1 1101111 George 3 1101111 we 7 111000 wrote 1 111000 hadnt't 1 111000 looking 1 111000 just 1 111000 realized 1 111000 their 1 111000 never 1 111000 love 1 111000 brought 2 111000 really 2 111000 heard 2 111000 Although 2 111000 like 7 1110010 live 1 1110010 don't 1 1110010 injured 1 1110010 first, 1 1110010 hope 1 1110010 want 1 1110010 didn`t 1 1110010 knows 1 1110010 merely 1 1110010 two 1 1110010 worked 2 1110010 tried 2 1110010 no 2 1110010 moved 4 1110010 best 2 1110011 need 1 1110011 always 1 1110011 alone 1 1110011 liked 1 1110011 forward 1 1110011 proposed 1 1110011 came 1 1110011 talking 1 1110011 pick 1 1110011 told 2 1110011 went 2 1110011 decided 3 1110011 wanted 3 1110011 how 3 1110011 have 4 1110100 gave 1 1110100 downs 1 1110100 appartment 1 1110100 hospital. 1 1110100 last-minute. 1 1110100 languages, 1 1110100 sights, 1 1110100 enjoyed 1 1110100 I'm 6 1110100 I'd 4 1110101 felt 1 1110101 flames 1 1110101 enjoy 1 1110101 deem 1 1110101 called? 1 1110101 hardly 1 1110101 spent 1 1110101 asked 2 1110101 had 7 1110101 found 3 1110110 Munich, 1 1110110 Scotland, 1 1110110 day, 1 1110110 study 1 1110110 friend. 1 1110110 after 1 1110110 apartments 1 1110110 show 1 1110110 there. 1 1110110 read 2 1110110 get 3 1110110 know 6 1110111 right? 1 1110111 soon 1 1110111 uni. 1 1110111 ambulance. 1 1110111 Sunday 1 1110111 before. 1 1110111 possible. 1 1110111 my 9 1110111 he'd 2 111100 you'll 1 111100 ? 1 111100 not 2 111100 to 42 111101 it. 1 111101 call 1 111101 One 1 111101 Bruno 1 111101 once 1 111101 around 1 111101 for 7 111101 at 13 1111100 Hauptbahnhof? 1 1111100 hesitant 1 1111100 visit 1 1111100 completely 1 1111100 start 1 1111100 managed 1 1111100 money 1 1111100 go 1 1111100 offered 1 1111100 possible 1 1111100 afford 1 1111100 driver 2 1111100 write 3 1111100 easy 2 1111101 relaxed 1 1111101 simply 1 1111101 sure. 1 1111101 starts 1 1111101 friendly 1 1111101 give 1 1111101 sitting 1 1111101 going 1 1111101 urgent 1 1111101 please 2 1111101 next 3 1111101 very 6 1111110 who's 1 1111110 much, 1 1111110 friday? 1 1111110 explained 1 1111110 met 1 1111110 Where 1 1111110 How 2 1111110 much 2 1111110 are 2 1111110 could 2 1111110 me 6 1111110 enough 3 1111111 seen 1 1111111 papers 1 1111111 "Mondnacht" 1 1111111 both. 1 1111111 crashed 1 1111111 studies 1 1111111 bring 1 1111111 pull 1 1111111 teacher 1 1111111 boy 1 1111111 far 1 1111111 move 1 1111111 travelling 1 1111111 Yeah 2 1111111 ring 2 1111111 meet 2 1111111 find 5 1111111 be 3apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/census90.sample0100644 0000000 0000000 00000001015 14523004075 033265 0ustar00rootroot0000000 0000000 SMITH 1.006 1.006 1 JOHNSON 0.810 1.816 2 WILLIAMS 0.699 2.515 3 JONES 0.621 3.136 4 BROWN 0.621 3.757 5 MARY 2.629 2.629 1 PATRICIA 1.073 3.702 2 LINDA 1.035 4.736 3 BARBARA 0.980 5.716 4 ELIZABETH 0.937 6.653 5 JAMES 3.318 3.318 1 JOHN 3.271 6.589 2 ROBERT 3.143 9.732 3 MICHAEL 2.629 12.361 4 WILLIAM 2.451 14.812 5 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/conll2002-es.sample0100644 0000000 0000000 00000000267 14523004075 033644 0ustar00rootroot0000000 0000000 Abogado NC B-PER General AQ I-PER del SP I-PER Estado NC I-PER . Fp O Melbourne NP B-LOC ( Fpa O Australia NP B-LOC ) Fpt O , Fc O 25 Z O may NC O ( Fpa O EFE NC B-ORG ) Fpt O . Fp Oapache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/conll2002-nl.sample0100644 0000000 0000000 00000001073 14523004075 033642 0ustar00rootroot0000000 0000000 -DOCSTART- -DOCSTART- O De Art O tekst N O van Prep O het Art O arrest N O is V O nog Adv O niet Adv O schriftelijk Adj O beschikbaar Adj O maar Conj O het Art O bericht N O werd V O alvast Adv O bekendgemaakt V O door Prep O een Art O communicatiebureau N O dat Conj O Floralux N B-ORG inhuurde V O . Punc O In Prep O '81 Num O regulariseert V O de Art O toenmalige Adj O Vlaamse Adj B-MISC regering N O de Art O toestand N O met Prep O een Art O BPA N B-MISC dat Pron O het Art O bedrijf N O op Prep O eigen Pron O kosten N O heeft V O laten V O opstellen V O . Punc Oapache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/conll2003-de.sample0100644 0000000 0000000 00000000631 14523004075 033621 0ustar00rootroot0000000 0000000 -DOCSTART- -X- -X- -X- O Ereignis Ereignis NN I-NC O und und KON O O Erzählung Erzählung NN I-NC O oder oder KON I-NC O : : $. O O Albrecht Albrecht NE I-NC I-PER Lehmann Lehmann NE I-NC I-PER versucht versuchen VVFIN I-VC O in in APPR I-PC O seinem sein PPOSAT I-NC O Buch Buch NN I-NC I-MISC Im im APPRART I-PC I-MISC Fremden Fremde NN I-NC I-MISC ungewollt ungewollt ADJD O O zuhaus ADV O O apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/conll2003-en.sample0100644 0000000 0000000 00000000333 14523004075 033632 0ustar00rootroot0000000 0000000 -DOCSTART- -X- O O EU NNP I-NP I-ORG rejects VBZ I-VP O German JJ I-NP I-MISC call NN I-NP O to TO I-VP O boycott VB I-VP O British JJ I-NP I-MISC lamb NN I-NP O . . O O Peter NNP I-NP I-PER Blackburn NNP I-NP I-PER ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_conl0100644 0000000 0000000 00000000172 14523004075 032761 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/conllu/de-ud-train-sample.conllu apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/conllu/de-ud-train-s0100644 0000000 0000000 00000002733 14523004075 034211 0ustar00rootroot0000000 0000000 # sent_id = train-s21 # text = Fachlich kompetent, sehr gute Beratung und ein freundliches Team. 1 Fachlich fachlich ADV ADJD _ 2 advmod _ _ 2 kompetent kompetent ADJ ADJD Degree=Pos 0 root _ SpaceAfter=No 3 , , PUNCT $, _ 2 punct _ _ 4 sehr sehr ADV ADV _ 5 advmod _ _ 5 gute gut ADJ ADJA Degree=Pos 6 amod _ _ 6 Beratung Beratung NOUN NN _ 2 parataxis _ _ 7 und und CCONJ KON _ 10 cc _ _ 8 ein ein DET ART Definite=Ind|PronType=Art 10 det _ _ 9 freundliches freundlich ADJ ADJA Degree=Pos 10 amod _ _ 10 Team Team NOUN NN _ 6 conj _ SpaceAfter=No 11 . . PUNCT $. _ 2 punct _ _ # sent_id = train-s22 # text = Beiden Zahnärzten verdanke ich einen neuen Biss und dadurch endlich keine Rückenschmerzen mehr. 1 Beiden beide PRON PIAT Case=Dat|Number=Plur|NumType=Card|PronType=Tot 2 det _ _ 2 Zahnärzten Zahnarzt NOUN NN Case=Dat|Number=Plur 3 iobj _ _ 3 verdanke verdanken VERB VVFIN Number=Sing|Person=1|VerbForm=Fin 0 root _ _ 4 ich ich PRON PPER Case=Nom|Number=Sing|Person=1|PronType=Prs 3 nsubj _ _ 5 einen ein DET ART Case=Acc|Definite=Ind|Number=Plur|PronType=Art 7 det _ _ 6 neuen neu ADJ ADJA Case=Acc|Degree=Pos|Number=Plur 7 amod _ _ 7 Biss Biß NOUN NN Case=Acc|Number=Plur 3 obj _ _ 8 und und CCONJ KON _ 12 cc _ _ 9 dadurch dadurch ADV PAV _ 7 advmod _ _ 10 endlich endlich ADV ADV _ 12 advmod _ _ 11 keine kein PRON PIAT PronType=Neg 12 advmod _ _ 12 Rückenschmerzen Rückenschmerz NOUN NN _ 7 conj _ _ 13 mehr mehr ADV ADV _ 12 advmod _ SpaceAfter=No 14 . . PUNCT $. _ 3 punct _ _./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_conl0100644 0000000 0000000 00000000164 14523004075 032762 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/conllu/es-ud-sample.conllu apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/conllu/es-ud-sample.0100644 0000000 0000000 00000007145 14523004075 034214 0ustar00rootroot0000000 0000000 # sent_id = es-train-001-s300 # text = Digámoslo claramente, la insurgencia se ha pronunciado mucho más claramente respecto al tema de la paz que el Estado, como lo demuestra el fragmento que Bermúdez cita de la respuesta de "Gabino" a Piedad Córdoba, en la cual no se plantea ni siquiera "esperar un mejor gobierno". 1-3 Digámoslo _ _ _ _ _ _ _ _ 1 Digám digám VERB _ VerbForm=Fin 0 root _ _ 2 os tú PRON _ Case=Acc,Dat|Number=Plur|Person=2|PrepCase=Npr|PronType=Prs 1 iobj _ _ 3 lo él PRON _ Case=Acc|Gender=Masc|Number=Sing|Person=3|PrepCase=Npr|PronType=Prs 1 obj _ _ 4 claramente claramente ADV _ _ 1 advmod _ SpaceAfter=No 5 , , PUNCT _ _ 1 punct _ _ 6 la el DET _ Definite=Def|Gender=Fem|Number=Sing|PronType=Art 7 det _ _ 7 insurgencia insurgencia NOUN _ Gender=Fem|Number=Sing 10 nsubj _ _ 8 se él PRON _ Case=Acc,Dat|Person=3|PrepCase=Npr|PronType=Prs|Reflex=Yes 10 iobj _ _ 9 ha haber AUX _ Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin 10 aux _ _ 10 pronunciado pronunciar VERB _ Gender=Masc|Number=Sing|Tense=Past|VerbForm=Part 1 parataxis _ _ 11 mucho mucho PRON _ NumType=Card|PronType=Ind 12 nmod _ _ 12 más más ADV _ Degree=Cmp 13 advmod _ _ 13 claramente claramente ADV _ _ 10 advmod _ _ 14 respecto respecto NOUN _ Gender=Masc|Number=Sing 17 nmod _ _ 15-16 al _ _ _ _ _ _ _ _ 15 a a ADP _ _ 14 fixed _ _ 16 el el DET _ Definite=Def|Gender=Masc|Number=Sing|PronType=Art 14 det _ _ 17 tema tema NOUN _ Gender=Masc|Number=Sing 10 obl _ _ 18 de de ADP _ _ 20 case _ _ 19 la el DET _ Definite=Def|Gender=Fem|Number=Sing|PronType=Art 20 det _ _ 20 paz paz NOUN _ Gender=Fem|Number=Sing 17 nmod _ _ 21 que que CCONJ _ _ 23 case _ _ 22 el el DET _ Definite=Def|Gender=Masc|Number=Sing|PronType=Art 23 det _ _ 23 Estado estado NOUN _ _ 12 nmod _ SpaceAfter=No 24 , , PUNCT _ _ 27 punct _ _ 25 como como SCONJ _ _ 27 mark _ _ 26 lo él PRON _ Case=Acc|Gender=Masc|Number=Sing|Person=3|PrepCase=Npr|PronType=Prs 27 obj _ _ 27 demuestra demostrar VERB _ Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin 10 advcl _ _ 28 el el DET _ Definite=Def|Gender=Masc|Number=Sing|PronType=Art 29 det _ _ 29 fragmento fragmento NOUN _ Gender=Masc|Number=Sing 27 nsubj _ _ 30 que que SCONJ _ _ 32 mark _ _ 31 Bermúdez bermúdez PROPN _ _ 32 nsubj _ _ 32 cita cita VERB _ Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin 29 acl:relcl _ _ 33 de de ADP _ _ 35 case _ _ 34 la el DET _ Definite=Def|Gender=Fem|Number=Sing|PronType=Art 35 det _ _ 35 respuesta respuesta NOUN _ Gender=Fem|Number=Sing 29 nmod _ _ 36 de de ADP _ _ 38 case _ _ 37 " " PUNCT _ _ 38 punct _ SpaceAfter=No 38 Gabino gabino PROPN _ _ 35 nmod _ SpaceAfter=No 39 " " PUNCT _ _ 38 punct _ _ 40 a a ADP _ _ 41 case _ _ 41 Piedad piedad PROPN _ _ 35 nmod _ _ 42 Córdoba córdoba PROPN _ _ 41 flat _ SpaceAfter=No 43 , , PUNCT _ _ 49 punct _ _ 44 en en ADP _ _ 46 case _ _ 45 la el DET _ Definite=Def|Gender=Fem|Number=Sing|PronType=Art 46 det _ _ 46 cual cual PRON _ Number=Sing|PronType=Int,Rel 49 mark _ _ 47 no no ADV _ Polarity=Neg 49 advmod _ _ 48 se él PRON _ Case=Acc,Dat|Person=3|PrepCase=Npr|PronType=Prs|Reflex=Yes 49 iobj _ _ 49 plantea plantear VERB _ Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin 35 acl:relcl _ _ 50 ni ni CCONJ _ Polarity=Neg 53 advmod _ _ 51 siquiera siquiera ADV _ _ 50 fixed _ _ 52 " " PUNCT _ _ 53 punct _ SpaceAfter=No 53 esperar esperar VERB _ VerbForm=Inf 49 csubj _ _ 54 un uno DET _ Definite=Ind|Gender=Masc|Number=Sing|PronType=Art 56 det _ _ 55 mejor mejor ADJ _ Degree=Cmp|Number=Sing 56 amod _ _ 56 gobierno gobierno NOUN _ Gender=Masc|Number=Sing 53 obj _ SpaceAfter=No 57 " " PUNCT _ _ 53 punct _ SpaceAfter=No 58 . . PUNCT _ _ 1 punct _ _ ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_conl0100644 0000000 0000000 00000000163 14523004075 032761 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/conllu/full-sample.conllu apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/conllu/full-sample.c0100644 0000000 0000000 00000003734 14523004075 034304 0ustar00rootroot0000000 0000000 # newdoc # newpar # sent_id = 1 # text = They buy and sell books. 1 They they PRON PRP Case=Nom|Number=Plur 2 nsubj 2:nsubj|4:nsubj _ 2 buy buy VERB VBP Number=Plur|Person=3|Tense=Pres 0 root 0:root _ 3 and and CONJ CC _ 4 cc 4:cc _ 4 sell sell VERB VBP Number=Plur|Person=3|Tense=Pres 2 conj 0:root|2:conj _ 5 books book NOUN NNS Number=Plur 2 obj 2:obj|4:obj SpaceAfter=No 6 . . PUNCT . _ 2 punct 2:punct _ # newdoc # sent_id = 2 # text = I have no clue. 1 I I PRON PRP Case=Nom|Number=Sing|Person=1 2 nsubj _ _ 2 have have VERB VBP Number=Sing|Person=1|Tense=Pres 0 root _ _ 3 no no DET DT PronType=Neg 4 det _ _ 4 clue clue NOUN NN Number=Sing 2 obj _ SpaceAfter=No 5 . . PUNCT . _ 2 punct _ _ # newpar # sent_id = panc0.s4 # text = ततॠयथानà¥à¤¶à¥à¤°à¥‚यते। # translit = tat yathÄnuÅ›rÅ«yate. # text_fr = Voilà ce qui nous est parvenu par la tradition orale. # text_en = This is what is heard. 1 ततॠतदॠDET _ Case=Nom|…|PronType=Dem 3 nsubj _ Translit=tat|LTranslit=tad|Gloss=it 2-3 यथानà¥à¤¶à¥à¤°à¥‚यते _ _ _ _ _ _ _ SpaceAfter=No 2 यथा यथा ADV _ PronType=Rel 3 advmod _ Translit=yathÄ|LTranslit=yathÄ|Gloss=how 3 अनà¥à¤¶à¥à¤°à¥‚यते अनà¥-शà¥à¤°à¥ VERB _ Mood=Ind|…|Voice=Pass 0 root _ Translit=anuÅ›rÅ«yate|LTranslit=anu-Å›ru|Gloss=it-is-heard 4 । । PUNCT _ _ 3 punct _ Translit=.|LTranslit=.|Gloss=. # newdoc id = mf920901-001 # newpar id = mf920901-001-p1 # sent_id = mf920901-001-p1s1A # text = Slovenská ústava: pro i proti # text_en = Slovak constitution: pros and cons 1 Slovenská slovenský ADJ AAFS1----1A---- Case=Nom|Degree=Pos|Gender=Fem|Number=Sing|Polarity=Pos 2 amod _ _ 2 ústava ústava NOUN NNFS1-----A---- Case=Nom|Gender=Fem|Number=Sing|Polarity=Pos 0 root _ SpaceAfter=No 3 : : PUNCT Z:------------- _ 2 punct _ _ 4 pro pro ADP RR--4---------- Case=Acc 2 appos _ LId=pro-1 5 i i CCONJ J^------------- _ 6 cc _ LId=i-1 6 proti proti ADP RR--3---------- Case=Dat 4 conj _ LId=proti-1 ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_conl0100644 0000000 0000000 00000000167 14523004075 032765 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/conllu/pt_br-ud-sample.conllu apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/conllu/pt_br-ud-samp0100644 0000000 0000000 00000006235 14523004075 034313 0ustar00rootroot0000000 0000000 # sent_id = train-s2 # text = Numa reunião entre representantes da Secretaria da Criança do DF ea juíza da Vara de Execuções de Medidas Socioeducativas, Lavínia Tupi Vieira Fonseca, ficou acordado que dos 25 internos, 12 serão internados na Unidade de Planaltina e os outros 13 devem retornar para a Unidade do Recanto das Emas, antigo Ciago. 1-2 Numa _ _ _ _ _ _ _ _ 1 Em _ ADP ADP _ 3 case _ _ 2 uma _ DET DET _ 3 det _ _ 3 reunião _ NOUN NOUN _ 31 nmod _ _ 4 entre _ ADP ADP _ 5 case _ _ 5 representantes _ NOUN NOUN _ 3 nmod _ _ 6-7 da _ _ _ _ _ _ _ _ 6 de de ADP ADP _ 8 case _ _ 7 a o DET DET Definite=Def|Gender=Fem|Number=Sing|PronType=Art 8 det _ _ 8 Secretaria _ PROPN PNOUN _ 5 nmod _ _ 9-10 da _ _ _ _ _ _ _ _ 9 de de ADP ADP _ 11 case _ _ 10 a o DET DET Definite=Def|Gender=Fem|Number=Sing|PronType=Art 11 det _ _ 11 Criança _ PROPN PNOUN _ 8 nmod _ _ 12-13 do _ _ _ _ _ _ _ _ 12 de de ADP ADP _ 14 case _ _ 13 o o DET DET Definite=Def|Gender=Masc|Number=Sing|PronType=Art 14 det _ _ 14 DF _ PROPN PNOUN _ 8 nmod _ _ 15 ea _ CCONJ CONJ _ 16 cc _ _ 16 juíza _ NOUN NOUN _ 5 conj _ _ 17-18 da _ _ _ _ _ _ _ _ 17 de de ADP ADP _ 19 case _ _ 18 a o DET DET Definite=Def|Gender=Fem|Number=Sing|PronType=Art 19 det _ _ 19 Vara _ PROPN PNOUN _ 16 nmod _ _ 20 de _ ADP ADP _ 21 case _ _ 21 Execuções _ PROPN PNOUN _ 19 nmod _ _ 22 de _ ADP ADP _ 23 case _ _ 23 Medidas _ PROPN PNOUN _ 21 nmod _ _ 24 Socioeducativas _ PROPN PNOUN _ 23 amod _ SpaceAfter=No 25 , _ PUNCT . _ 26 punct _ _ 26 Lavínia _ PROPN PNOUN _ 16 appos _ _ 27 Tupi _ PROPN PNOUN _ 26 flat _ _ 28 Vieira _ PROPN PNOUN _ 26 flat _ _ 29 Fonseca _ PROPN PNOUN _ 26 flat _ SpaceAfter=No 30 , _ PUNCT . _ 3 punct _ _ 31 ficou _ VERB VERB _ 0 root _ _ 32 acordado _ ADJ ADJ _ 31 xcomp:adj _ _ 33 que _ CCONJ CONJ _ 41 mark _ _ 34-35 dos _ _ _ _ _ _ _ _ 34 de de ADP ADP _ 37 case _ _ 35 os o DET DET Definite=Def|Gender=Masc|Number=Plur|PronType=Art 37 det _ _ 36 25 _ NUM NUM NumType=Card 37 nummod _ _ 37 internos _ NOUN NOUN _ 41 nmod _ SpaceAfter=No 38 , _ PUNCT . _ 37 punct _ _ 39 12 _ NUM NUM NumType=Card 41 nsubj:pass _ _ 40 serão _ AUX AUX _ 41 aux:pass _ _ 41 internados _ VERB VERB _ 31 csubj _ _ 42-43 na _ _ _ _ _ _ _ _ 42 en en ADP ADP _ 44 case _ _ 43 a o DET DET Definite=Def|Gender=Fem|Number=Sing|PronType=Art 44 det _ _ 44 Unidade _ PROPN PNOUN _ 41 nmod _ _ 45 de _ ADP ADP _ 46 case _ _ 46 Planaltina _ PROPN PNOUN _ 44 nmod _ _ 47 e _ CCONJ CONJ _ 52 cc _ _ 48 os _ DET DET _ 50 det _ _ 49 outros _ DET DET _ 50 det _ _ 50 13 _ NUM NUM NumType=Card 52 nsubj _ _ 51 devem _ AUX AUX _ 52 aux _ _ 52 retornar _ VERB VERB _ 41 conj _ _ 53 para _ ADP ADP _ 55 case _ _ 54 a _ DET DET _ 55 det _ _ 55 Unidade _ PROPN PNOUN _ 52 nmod _ _ 56-57 do _ _ _ _ _ _ _ _ 56 de de ADP ADP _ 58 case _ _ 57 o o DET DET Definite=Def|Gender=Masc|Number=Sing|PronType=Art 58 det _ _ 58 Recanto _ NOUN NOUN _ 55 nmod _ _ 59-60 das _ _ _ _ _ _ _ _ 59 de de ADP ADP _ 61 case _ _ 60 as o DET DET Definite=Def|Gender=Fem|Number=Plur|PronType=Art 61 det _ _ 61 Emas _ PROPN PNOUN _ 58 nmod _ SpaceAfter=No 62 , _ PUNCT . _ 64 punct _ _ 63 antigo _ ADJ ADJ _ 64 amod _ _ 64 Ciago _ PROPN PNOUN _ 55 appos _ SpaceAfter=No 65 . _ PUNCT . _ 31 punct _ _ apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/conllx.sample0100644 0000000 0000000 00000002566 14523004075 033127 0ustar00rootroot0000000 0000000 1 To _ A AC case=unmarked 2 kendte _ A AN degree=pos|gender=common/neuter|number=plur|case=unmarked|def=def/indef|transcat=unmarked 3 russiske _ A AN degree=pos|gender=common/neuter|number=plur|case=unmarked|def=def/indef|transcat=unmarked 4 historikere _ N NC gender=common|number=plur|case=unmarked|def=indef 5 Andronik _ N NP case=unmarked 6 Andronik _ N NP case=unmarked 7 og _ C CC _ 8 Igor _ N NP case=unmarked 9 Klamkin _ N NP case=unmarked 10 tror _ V VA mood=indic|tense=present|voice=active 11 ikke _ RG RG degree=unmarked 12 , _ X XP _ 13 at _ C CS _ 14 Rusland _ N NP case=unmarked 15 kan _ V VA mood=indic|tense=present|voice=active 16 udvikles _ V VA mood=infin|voice=passive 17 uden _ SP SP _ 18 en _ P PI gender=common|number=sing|case=unmarked|register=unmarked 19 " _ X XP _ 20 jernnæve _ N NC gender=common|number=sing|case=unmarked|def=indef 21 " _ X XP _ 22 . _ X XP _ 1 De _ P PP person=3|gender=common/neuter|number=plur|case=nom|reflexive=no|register=unmarked 2 hævder _ V VA mood=indic|tense=present|voice=active 3 , _ X XP _ 4 at _ C CS _ 5 Ruslands _ N NP case=gen 6 vej _ N NC gender=common|number=sing|case=unmarked|def=indef 7 til _ SP SP _ 8 demokrati _ N NC gender=neuter|number=sing|case=unmarked|def=indef 9 gÃ¥r _ V VA mood=indic|tense=present|voice=active 10 gennem _ SP SP _ 11 diktatur _ N NC gender=neuter|number=sing|case=unmarked|def=indef 12 . _ X XP _ ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_eval0100644 0000000 0000000 00000000157 14523004075 032760 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/evalita-ner-it.sample apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/evalita-ner-it.sampl0100644 0000000 0000000 00000001533 14523004075 034275 0ustar00rootroot0000000 0000000 A E adige20041007_id413942 O parlare VF adige20041007_id413942 O di E adige20041007_id413942 O questi DP adige20041007_id413942 O problemi SP adige20041007_id413942 O sar VI adige20041007_id413942 O il RS adige20041007_id413942 O neonatologo SS adige20041007_id413942 O Dino SPN adige20041007_id413942 B-PER Pedrotti SPN adige20041007_id413942 I-PER . XPS adige20041007_id413942 O Sono VIY adige20041008_id414214 O assicurate VPP adige20041008_id414214 O a E adige20041008_id414214 O tutta DS adige20041008_id414214 O la RS adige20041008_id414214 O popolazione SS adige20041008_id414214 O a E adige20041008_id414214 O titolo SS adige20041008_id414214 O gratuito AS adige20041008_id414214 O e C adige20041008_id414214 O con E adige20041008_id414214 O accesso SS adige20041008_id414214 O diretto AS adige20041008_id414214 O . XPS adige20041008_id414214 O ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_fren0100644 0000000 0000000 00000000164 14523004075 032761 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/frenchtreebank/sample1.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/frenchtreebank/sampl0100644 0000000 0000000 00000014111 14523004075 034432 0ustar00rootroot0000000 0000000 L' autonomie de la Bundesbank , la politique de stabilité qu' elle a fait prévaloir ( avec moins de succès et de sévérité qu' on ne le dit , mais tout est relatif ) , est une pièce essentielle de la division des pouvoirs en Allemagne . ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_iris0100644 0000000 0000000 00000000210 14523004075 032765 xustar000000000 0000000 136 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/irishsentencebank/irishsentencebank-sample.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/irishsentencebank/ir0100644 0000000 0000000 00000002300 14523004075 034443 0ustar00rootroot0000000 0000000 A Dhia, tá mé ag iompar clainne! Oh my God, I'm pregnant! Gabh mo leithscéal, an ón chlochaois thú? Excuse me, are you from the stone age? ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_leip0100644 0000000 0000000 00000000171 14523004075 032756 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/leipzig/samples/123-skipped.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/leipzig/samples/123-0100644 0000000 0000000 00000000016 14523004075 034025 0ustar00rootroot0000000 0000000 skip this file./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_leip0100644 0000000 0000000 00000000173 14523004075 032760 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/leipzig/samples/dan-sentences.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/leipzig/samples/dan-0100644 0000000 0000000 00000000107 14523004075 034263 0ustar00rootroot0000000 0000000 1 Der var engang en mand. 2 Der boede i en spand. 3 Spanden var af ler../PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_leip0100644 0000000 0000000 00000000204 14523004075 032753 xustar000000000 0000000 132 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/leipzig/samples/dontread/xxx-sentences.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/leipzig/samples/dont0100644 0000000 0000000 00000000166 14523004075 034415 0ustar00rootroot0000000 0000000 1 This sentence should not be read. 2 The same goes for this sentence. 3 If we got this far then something went wrong!./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_leip0100644 0000000 0000000 00000000173 14523004075 032760 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/leipzig/samples/eng-sentences.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/leipzig/samples/eng-0100644 0000000 0000000 00000000062 14523004075 034272 0ustar00rootroot0000000 0000000 1 This is a sentence. 2 This is another sentences.apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/leipzig-en.sample0100644 0000000 0000000 00000001764 14523004075 033672 0ustar00rootroot0000000 0000000 1 A rebel statement sent to Lisbon from Jamba said 86 government soldiers and 13 guerrillas were killed in the fighting that ended Jan. 3. It said the rebel forces sill held Mavinga. 2 Authorities last week issued a vacate order for a club in Manhattan and closed another in the Bronx. 3 At the first Pan Am bankruptcy hearing, for example, at least five airlines were represented. 4 Mr. Neigum, poker-faced during the difficult task, manages a 46-second showing. 5 This, combined with the container division talks, suggests the group's bankers might be considering an orderly disposal of all assets. 6 She told the Post in an interview published Sunday that some of the money may have become "mingled" into improvements on her home that included a swimming pool, a $2,500 wide-screen television and renovations to her basement. 7 According to a study by the Marshall Institute, the average NASA employee's age in 1963 was 30; now most of its senior and middle-managers will be eligible to retire in five years. ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_lets0100644 0000000 0000000 00000000166 14523004075 033000 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/letsmt/letsmt-with-words.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/letsmt/letsmt-with-w0100644 0000000 0000000 00000004670 14523004075 034403 0ustar00rootroot0000000 0000000 The Apache Software Foundation uses various licenses to distribute software and documentation , to accept regular contributions from individuals and corporations , and to accept larger grants of existing software products . All software produced by The Apache Software Foundation or any of its projects or subjects is licensed according to the terms of the documents listed below . ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_masc0100644 0000000 0000000 00000000156 14523004075 032753 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/masc/fakeMASC-ne.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/masc/fakeMASC-ne.xml0100644 0000000 0000000 00000001124 14523004075 034031 0ustar00rootroot0000000 0000000 ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_masc0100644 0000000 0000000 00000000160 14523004075 032746 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/masc/fakeMASC-penn.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/masc/fakeMASC-penn.x0100644 0000000 0000000 00000007613 14523004075 034047 0ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/masc/fakeMASC-s.xml0100644 0000000 0000000 00000001403 14523004075 033671 0ustar00rootroot0000000 0000000 ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_masc0100644 0000000 0000000 00000000157 14523004075 032754 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/masc/fakeMASC-seg.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/masc/fakeMASC-seg.xm0100644 0000000 0000000 00000001411 14523004075 034030 0ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/masc/fakeMASC.hdr0100644 0000000 0000000 00000003052 14523004075 033410 0ustar00rootroot0000000 0000000 FakeMASC A fake MASC file to test the OpenNLP MASC-Format tools None http://github.com/ http://github.com/apache/opennlp None None at all Unit test Adult sentence boundaries word segments: quarks Penn POS tags Named entity annotation 2019-08-27 Jiri Zamecnik Created the fake file to test the standoff markup apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/masc/fakeMASC.txt0100644 0000000 0000000 00000000071 14523004075 033450 0ustar00rootroot0000000 0000000 This is a test Sentence. This is 'nother test sentence../PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_muc_0100644 0000000 0000000 00000000156 14523004075 032753 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/muc/parsertest1.sgml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/muc/parsertest1.sgml0100644 0000000 0000000 00000001512 14523004075 034340 0ustar00rootroot0000000 0000000 para1

para2

para2./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_nkjp0100644 0000000 0000000 00000000163 14523004075 032770 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/nkjp/ann_segmentation.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/nkjp/ann_segmentatio0100644 0000000 0000000 00000002325 14523004075 034456 0ustar00rootroot0000000 0000000

./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_formats_nkjp0100644 0000000 0000000 00000000161 14523004075 032766 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/nkjp/text_structure.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/formats/nkjp/text_structure.0100644 0000000 0000000 00000001644 14523004075 034470 0ustar00rootroot0000000 0000000 Krótki tekst

To krótki tekst w formacie NKJP. Zawiera dwa zdania.

To krótkie zdanie w drugim akapicie.
apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/lang/abb_DE.xml0100644 0000000 0000000 00000002064 14523004075 031502 0ustar00rootroot0000000 0000000  S. f. ff. z. B. apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/lang/abb_EN.xml0100644 0000000 0000000 00000002027 14523004075 031513 0ustar00rootroot0000000 0000000 tel. Mr. Ms. Mrs. apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/lang/abb_ES.xml0100644 0000000 0000000 00000002276 14523004075 031526 0ustar00rootroot0000000 0000000 aprox. cf. pág. p.ej. n.° Sr. Sra. apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/lang/abb_FR.xml0100644 0000000 0000000 00000002066 14523004075 031523 0ustar00rootroot0000000 0000000 c.-à-d. cf. p. p.ex. apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/lang/abb_IT.xml0100644 0000000 0000000 00000002057 14523004075 031530 0ustar00rootroot0000000 0000000 art. ca. p. S. apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/lang/abb_NL.xml0100644 0000000 0000000 00000002427 14523004075 031526 0ustar00rootroot0000000 0000000 bijv. bijz. blz. d.w.z. etc. e.v. nr. p. pag. apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/lang/abb_PL.xml0100644 0000000 0000000 00000002342 14523004075 031524 0ustar00rootroot0000000 0000000 itp. itd. np. nr. pt. r. tj. tzn. apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/lang/abb_PT.xml0100644 0000000 0000000 00000002403 14523004075 031532 0ustar00rootroot0000000 0000000 d. sr. apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/languagemodel/sentences.txt0100644 0000000 0000000 00000016777 14523004075 034317 0ustar00rootroot0000000 0000000 The word2vec software of Tomas Mikolov and colleagues has gained a lot of traction lately and provides state-of-the-art word embeddings The learning models behind the software are described in two research papers We found the description of the models in these papers to be somewhat cryptic and hard to follow While the motivations and presentation may be obvious to the neural-networks language-mofdeling crowd we had to struggle quite a bit to figure out the rationale behind the equations This note is an attempt to explain the negative sampling equation in Distributed Representations of Words and Phrases and their Compositionality by Tomas Mikolov Ilya Sutskever Kai Chen Greg Corrado and Jeffrey Dean The departure point of the paper is the skip-gram model In this model we are given a corpus of words w and their contexts c We consider the conditional probabilities p(c|w) and given a corpus Text the goal is to set the parameters θ of p(c|w;θ) so as to maximize the corpus probability The recently introduced continuous Skip-gram model is an efficient method for learning high-quality distributed vector representations that capture a large number of precise syntactic and semantic word relationships In this paper we present several extensions that improve both the quality of the vectors and the training speed By subsampling of the frequent words we obtain significant speedup and also learn more regular word representations We also describe a simple alternative to the hierarchical softmax called negative sampling An inherent limitation of word representations is their indifference to word order and their inability to represent idiomatic phrases For example the meanings of Canada and Air cannot be easily combined to obtain Air Canada Motivated by this example we present a simple method for finding phrases in text and show that learning good vector representations for millions of phrases is possible The similarity metrics used for nearest neighbor evaluations produce a single scalar that quantifies the relatedness of two words This simplicity can be problematic since two given words almost always exhibit more intricate relationships than can be captured by a single number For example man may be regarded as similar to woman in that both words describe human beings on the other hand the two words are often considered opposites since they highlight a primary axis along which humans differ from one another In order to capture in a quantitative way the nuance necessary to distinguish man from woman it is necessary for a model to associate more than a single number to the word pair A natural and simple candidate for an enlarged set of discriminative numbers is the vector difference between the two word vectors GloVe is designed in order that such vector differences capture as much as possible the meaning specified by the juxtaposition of two words Unsupervised word representations are very useful in NLP tasks both as inputs to learning algorithms and as extra word features in NLP systems However most of these models are built with only local context and one representation per word This is problematic because words are often polysemous and global context can also provide useful information for learning word meanings We present a new neural network architecture which 1) learns word embeddings that better capture the semantics of words by incorporating both local and global document context and 2) accounts for homonymy and polysemy by learning multiple embeddings per word We introduce a new dataset with human judgments on pairs of words in sentential context and evaluate our model on it showing that our model outperforms competitive baselines and other neural language models Information Retrieval (IR) models need to deal with two difficult issues vocabulary mismatch and term dependencies Vocabulary mismatch corresponds to the difficulty of retrieving relevant documents that do not contain exact query terms but semantically related terms Term dependencies refers to the need of considering the relationship between the words of the query when estimating the relevance of a document A multitude of solutions has been proposed to solve each of these two problems but no principled model solve both In parallel in the last few years language models based on neural networks have been used to cope with complex natural language processing tasks like emotion and paraphrase detection Although they present good abilities to cope with both term dependencies and vocabulary mismatch problems thanks to the distributed representation of words they are based upon such models could not be used readily in IR where the estimation of one language model per document (or query) is required This is both computationally unfeasible and prone to over-fitting Based on a recent work that proposed to learn a generic language model that can be modified through a set of document-specific parameters we explore use of new neural network models that are adapted to ad-hoc IR tasks Within the language model IR framework we propose and study the use of a generic language model as well as a document-specific language model Both can be used as a smoothing component but the latter is more adapted to the document at hand and has the potential of being used as a full document language model We experiment with such models and analyze their results on TREC-1 to 8 datasets The word2vec model and application by Mikolov et al have attracted a great amount of attention in recent two years The vector representations of words learned by word2vec models have been proven to be able to carry semantic meanings and are useful in various NLP tasks As an increasing number of researchers would like to experiment with word2vec I notice that there lacks a material that comprehensively explains the parameter learning process of word2vec in details thus preventing many people with less neural network experience from understanding how exactly word2vec works This note provides detailed derivations and explanations of the parameter update equations for the word2vec models including the original continuous bag-of-word (CBOW) and skip-gram models as well as advanced tricks hierarchical soft-max and negative sampling In the appendix a review is given on the basics of neuron network models and backpropagation To avoid the inaccuracy caused by classifying the example into several categories given by TREC manually we take the word2vec to represent all attractions and user contexts in the continuous vector space learnt by neural network language models The base of NNML is using neural networks for the probability function The model learns simultaneously a distributed representation for each word along with the probability function for word sequences expressed in terms of these representations Training such large models we propose continuous bag of words as our framework and soft-max as the active function So we use the word2vec to train wikitravel corpus and got the word vector To avoid the curse of dimensionality by learning a distributed representation for words as our word vector we define a test set that compare different dimensionality of vectors for our task using the same training data and using the same model architecture We extend the word2vec framework to capture meaning across languages The input consists of a source text and a word-aligned parallel text in a second language The joint word2vec tool then represents words in both languages within a common “semantic†vector space The result can be used to enrich lexicons of under-resourced languages to identify ambiguities and to perform clustering and classificationapache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/lemmatizer/output.txt0100644 0000000 0000000 00000021607 14523004075 033221 0ustar00rootroot0000000 0000000 The DT the the economy NN economy economy 's POS 's 's temperature NN temperature temperature will MD will will be VB be be taken VBN take take from IN from from several DT several several vantage NN vantage vantage points NNS point point this DT this this week NN week week , , , , with IN with with readings NNS reading read on IN on on trade NN trade trade , , , , output NN output output , , , , housing NN housing housing and CC and and inflation NN inflation inflation . . . . The DT the the most RBS most most troublesome JJ troublesome troublesome report NN report report may MD may may be VB be be the DT the the August NNP august august merchandise NN merchandise merchandise trade NN trade trade deficit NN deficit deficit due JJ due due out IN out out tomorrow NN tomorrow tomorrow . . . . The DT the the trade NN trade trade gap NN gap gap is VBZ be be expected VBN expect expect to TO to to widen VB widen widen to TO to to about IN about about $ $ $ $ 9 CD 9 9 billion CD billion billion from IN from from July NNP july july 's POS 's 's $ $ $ $ 7.6 CD 7.6 7.6 billion CD billion billion , , , , according VBG accord accord to TO to to a DT a a survey NN survey survey by IN by by MMS NNS mm mm International NNP international international , , , , a DT a a unit NN unit unit of IN of of McGraw NNP mcgraw mcgraw - HYPH - - Hill NNP hill hill Inc. NNP inc. inc. , , , , New NNP new new York NNP york york . . . . Thursday NNP thursday thursday 's POS 's 's report NN report report on IN on on the DT the the September NNP september september consumer NN consumer consumer price NN price price index NN index index is VBZ be be expected VBN expect expect to TO to to rise VB rise rise , , , , although IN although although not RB not not as IN as as sharply RB sharply sharply as IN as as the DT the the 0.9 CD 0.9 0.9 % NN % % gain NN gain gain reported VBN report reported Friday NNP friday friday in IN in in the DT the the producer NN producer producer price NN price price index NN index index . . . . That DT that that gain NN gain gain was VBD be be being VBG be be cited VBD cite cite as IN as as a DT a a reason NN reason reason the DT the the stock NN stock stock market NN market market was VBD be be down IN down down early RB early early in IN in in Friday NNP friday friday 's POS 's 's session NN session session , , , , before IN before before it PRP it it got VBD get get started VBN start start on IN on on its PRP$ its its reckless JJ reckless reckless 190 CD 190 190 - HYPH - - point NN point point plunge NN plunge plunge . . . . Economists NNS economist economist are VBP be be divided VBN divide divide as IN as as to TO to to how WRB how how much JJ much much manufacturing VBG manufacture manufacturing strength NN strength strength they PRP they they expect VBP expect expect to TO to to see VB see see in IN in in September NNP september september reports NNS report report on IN on on industrial JJ industrial industrial production NN production production and CC and and capacity NN capacity capacity utilization NN utilization utilization , , , , also RB also also due JJ due due tomorrow NN tomorrow tomorrow . . . . Meanwhile RB meanwhile meanwhile , , , , September NNP september september housing NN housing housing starts NNS start start , , , , due JJ due due Wednesday NNP wednesday wednesday , , , , are VBP be be thought VBN think think to TO to to have VB have have inched VBN inch inch upward RB upward upward . . . . `` `` `` `` There EX there there 's VBZ be be a DT a a possibility NN possibility possibility of IN of of a DT a a surprise NN surprise surprise '' '' '' '' in IN in in the DT the the trade NN trade trade report NN report report , , , , said VBD say say Michael NNP michael michael Englund NNP englund england , , , , director NN director director of IN of of research NN research research at IN at at MMS NNS mm mm . . . . A DT a a widening NN widening widening of IN of of the DT the the deficit NN deficit deficit , , , , if IN if if it PRP it it were VBD be be combined VBN combine combine with IN with with a DT a a stubbornly RB stubbornly stubbornly strong JJ strong strong dollar NN dollar dollar , , , , would MD would would exacerbate VB exacerbate exacerbate trade NN trade trade problems NNS problem problem -- : -- -- but CC but but the DT the the dollar NN dollar dollar weakened VBD weaken weaken Friday NNP friday friday as IN as as stocks NNS stocks stock plummeted VBD plummet plummet . . . . In IN in in any DT any any event NN event event , , , , Mr. NNP mr. mr. Englund NNP englund englund and CC and and many DT many many others NNS others others say VBP say say that IN that that the DT the the easy JJ easy easy gains NNS gain gain in IN in in narrowing VBG narrow narrow the DT the the trade NN trade trade gap NN gap gap have VBP have have already RB already already been VBN be be made VBN make make . . . . `` `` `` `` Trade NN trade trade is VBZ be be definitely RB definitely definitely going VBG go go to TO to to be VB be be more RBR more more politically RB politically politically sensitive JJ sensitive sensitive over IN over over the DT the the next JJ next next six CD six six or CC or or seven CD seven seven months NNS month month as IN as as improvement NN improvement improvement begins VBZ begin begin to TO to to slow VB slow slow , , , , '' '' '' '' he PRP he he said VBD say say . . . . Exports NNS export export are VBP be be thought VBN think think to TO to to have VB have have risen VBN rise rise strongly RB strongly strongly in IN in in August NNP august august , , , , but CC but but probably RB probably probably not RB not not enough RB enough enough to TO to to offset VB offset offset the DT the the jump NN jump jump in IN in in imports NNS import import , , , , economists NNS economist economist said VBD say say . . . . Views NNS view view on IN on on manufacturing VBG manufacture manufacture strength NN strength strength are VBP be be split VBN split split between IN between between economists NNS economist economist who WP who who read VBP read read September NNP september september 's POS 's 's low JJ low low level NN level level of IN of of factory NN factory factory job NN job job growth NN growth growth as IN as as a DT a a sign NN sign sign of IN of of a DT a a slowdown NN slowdown slowdown and CC and and those DT those those who WP who who use VBP use use the DT the the somewhat RB somewhat somewhat more DT more more comforting VBG comfort comfort total JJ total total employment NN employment employment figures NNS figure figure in IN in in their PRP$ their their calculations NNS calculation calculation . . . . The DT the the wide JJ wide wide range NN range range of IN of of estimates NNS estimate estimate for IN for for the DT the the industrial JJ industrial industrial output NN output output number NN number number underscores VBZ underscore underscore the DT the the differences NNS difference difference : : : : The DT the the forecasts NNS forecast forecast run VBD run run from IN from from a DT a a drop NN drop drop of IN of of 0.5 CD 0.5 0.5 % NN % % to TO to to an DT an an increase NN increase increase of IN of of 0.4 CD 0.4 0.4 % NN % % , , , , according VBG accord according to TO to to MMS NNS mm mm . . . . A DT a a rebound NN rebound rebound in IN in in energy NN energy energy prices NNS price price , , , , which WDT which which helped VBD help help push VB push push up RP up up the DT the the producer NN producer producer price NN price price index NN index index , , , , is VBZ be be expected VBN expect expect to TO to to do VB do do the DT the the same JJ same same in IN in in the DT the the consumer NN consumer consumer price NN price price report NN report report . . . . The DT the the consensus NN consensus consensus view NN view view expects VBZ expect expect a DT a a 0.4 CD 0.4 0.4 % NN % % increase NN increase increase in IN in in the DT the the September NNP september september CPI NNP cpi cpi after IN after after a DT a a flat JJ flat flat reading NN reading reading in IN in in August NNP august august . . . . Robert NNP robert robert H. NNP h. h. Chandross NNP chandross chandross , , , , an DT an an economist NN economist economist for IN for for Lloyd NNP lloyd lloyd 's POS 's 's Bank NNP bank bank in IN in in New NNP new new York NNP york york , , , , is VBZ be be among IN among among those DT those those expecting VBG expect expect a DT a a more RBR more more moderate JJ moderate moderate gain NN gain gain in IN in in the DT the the CPI NNP cpi cpi than IN than than in IN in in prices NNS price price at IN at at the DT the the producer NN producer producer level NN level level . . . . `` `` `` `` Auto NN auto auto prices NNS price price had VBD have have a DT a a big JJ big big effect NN effect effect in IN in in the DT the the PPI NNP ppi ppi , , , , and CC and and at IN at at the DT the the CPI NNP cpi cpi level NN level level they PRP they they wo MD wo wo n't RB not not , , , , '' '' '' '' he PRP he he said VBD say say . . . . ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_lemmatizer_s0100644 0000000 0000000 00000000161 14523004075 032764 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/lemmatizer/smalldictionary.dict apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/lemmatizer/smalldictionary.d0100644 0000000 0000000 00000000113 14523004075 034450 0ustar00rootroot0000000 0000000 barking VBG bark dogs NNS dog running VBG run down RP down street NN street./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_lemmatizer_s0100644 0000000 0000000 00000000166 14523004075 032771 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/lemmatizer/smalldictionarymulti.dict apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/lemmatizer/smalldictionarymu0100644 0000000 0000000 00000000124 14523004075 034572 0ustar00rootroot0000000 0000000 barking VBG bark#bark dogs NNS dog running VBG run#run down RP down street NN street./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_lemmatizer_t0100644 0000000 0000000 00000000167 14523004075 032773 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/lemmatizer/trial.old-insufficient.tsv apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/lemmatizer/trial.old-insuffi0100644 0000000 0000000 00000000012 14523004075 034357 0ustar00rootroot0000000 0000000 The DT theapache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/lemmatizer/trial.old.tsv0100644 0000000 0000000 00000014715 14523004075 033550 0ustar00rootroot0000000 0000000 The DT the economy NN economy 's POS 's temperature NN temperature will MD will be VB be taken VBN take from IN from several DT several vantage NN vantage points NNS point this DT this week NN week , , , with IN with readings NNS reading on IN on trade NN trade , , , output NN output , , , housing NN housing and CC and inflation NN inflation . . . The DT the most RBS most troublesome JJ troublesome report NN report may MD may be VB be the DT the August NNP august merchandise NN merchandise trade NN trade deficit NN deficit due JJ due out IN out tomorrow NN tomorrow . . . The DT the trade NN trade gap NN gap is VBZ be expected VBN expect to TO to widen VB widen to TO to about IN about $ $ $ 9 CD 9 billion CD billion from IN from July NNP july 's POS 's $ $ $ 7.6 CD 7.6 billion CD billion , , , according VBG accord to TO to a DT a survey NN survey by IN by MMS NNS mm International NNP international , , , a DT a unit NN unit of IN of McGraw NNP mcgraw - HYPH - Hill NNP hill Inc. NNP inc. , , , New NNP new York NNP york . . . Thursday NNP thursday 's POS 's report NN report on IN on the DT the September NNP september consumer NN consumer price NN price index NN index is VBZ be expected VBN expect to TO to rise VB rise , , , although IN although not RB not as IN as sharply RB sharply as IN as the DT the 0.9 CD 0.9 % NN % gain NN gain reported VBN report Friday NNP friday in IN in the DT the producer NN producer price NN price index NN index . . . That DT that gain NN gain was VBD be being VBG be cited VBD cite as IN as a DT a reason NN reason the DT the stock NN stock market NN market was VBD be down IN down early RB early in IN in Friday NNP friday 's POS 's session NN session , , , before IN before it PRP it got VBD get started VBN start on IN on its PRP$ its reckless JJ reckless 190 CD 190 - HYPH - point NN point plunge NN plunge . . . Economists NNS economist are VBP be divided VBN divide as IN as to TO to how WRB how much JJ much manufacturing VBG manufacture strength NN strength they PRP they expect VBP expect to TO to see VB see in IN in September NNP september reports NNS report on IN on industrial JJ industrial production NN production and CC and capacity NN capacity utilization NN utilization , , , also RB also due JJ due tomorrow NN tomorrow . . . Meanwhile RB meanwhile , , , September NNP september housing NN housing starts NNS start , , , due JJ due Wednesday NNP wednesday , , , are VBP be thought VBN think to TO to have VB have inched VBN inch upward RB upward . . . `` `` `` There EX there 's VBZ be a DT a possibility NN possibility of IN of a DT a surprise NN surprise '' '' '' in IN in the DT the trade NN trade report NN report , , , said VBD say Michael NNP michael Englund NNP englund , , , director NN director of IN of research NN research at IN at MMS NNS mm . . . A DT a widening NN widening of IN of the DT the deficit NN deficit , , , if IN if it PRP it were VBD be combined VBN combine with IN with a DT a stubbornly RB stubbornly strong JJ strong dollar NN dollar , , , would MD would exacerbate VB exacerbate trade NN trade problems NNS problem -- : -- but CC but the DT the dollar NN dollar weakened VBD weaken Friday NNP friday as IN as stocks NNS stocks plummeted VBD plummet . . . In IN in any DT any event NN event , , , Mr. NNP mr. Englund NNP englund and CC and many DT many others NNS others say VBP say that IN that the DT the easy JJ easy gains NNS gain in IN in narrowing VBG narrow the DT the trade NN trade gap NN gap have VBP have already RB already been VBN be made VBN make . . . `` `` `` Trade NN trade is VBZ be definitely RB definitely going VBG go to TO to be VB be more RBR more politically RB politically sensitive JJ sensitive over IN over the DT the next JJ next six CD six or CC or seven CD seven months NNS month as IN as improvement NN improvement begins VBZ begin to TO to slow VB slow , , , '' '' '' he PRP he said VBD say . . . Exports NNS export are VBP be thought VBN think to TO to have VB have risen VBN rise strongly RB strongly in IN in August NNP august , , , but CC but probably RB probably not RB not enough RB enough to TO to offset VB offset the DT the jump NN jump in IN in imports NNS import , , , economists NNS economist said VBD say . . . Views NNS view on IN on manufacturing VBG manufacture strength NN strength are VBP be split VBN split between IN between economists NNS economist who WP who read VBP read September NNP september 's POS 's low JJ low level NN level of IN of factory NN factory job NN job growth NN growth as IN as a DT a sign NN sign of IN of a DT a slowdown NN slowdown and CC and those DT those who WP who use VBP use the DT the somewhat RB somewhat more DT more comforting VBG comfort total JJ total employment NN employment figures NNS figure in IN in their PRP$ their calculations NNS calculation . . . The DT the wide JJ wide range NN range of IN of estimates NNS estimate for IN for the DT the industrial JJ industrial output NN output number NN number underscores VBZ underscore the DT the differences NNS difference : : : The DT the forecasts NNS forecast run VBD run from IN from a DT a drop NN drop of IN of 0.5 CD 0.5 % NN % to TO to an DT an increase NN increase of IN of 0.4 CD 0.4 % NN % , , , according VBG accord to TO to MMS NNS mm . . . A DT a rebound NN rebound in IN in energy NN energy prices NNS price , , , which WDT which helped VBD help push VB push up RP up the DT the producer NN producer price NN price index NN index , , , is VBZ be expected VBN expect to TO to do VB do the DT the same JJ same in IN in the DT the consumer NN consumer price NN price report NN report . . . The DT the consensus NN consensus view NN view expects VBZ expect a DT a 0.4 CD 0.4 % NN % increase NN increase in IN in the DT the September NNP september CPI NNP cpi after IN after a DT a flat JJ flat reading NN reading in IN in August NNP august . . . Robert NNP robert H. NNP h. Chandross NNP chandross , , , an DT an economist NN economist for IN for Lloyd NNP lloyd 's POS 's Bank NNP bank in IN in New NNP new York NNP york , , , is VBZ be among IN among those DT those expecting VBG expect a DT a more RBR more moderate JJ moderate gain NN gain in IN in the DT the CPI NNP cpi than IN than in IN in prices NNS price at IN at the DT the producer NN producer level NN level . . . `` `` `` Auto NN auto prices NNS price had VBD have a DT a big JJ big effect NN effect in IN in the DT the PPI NNP ppi , , , and CC and at IN at the DT the CPI NNP cpi level NN level they PRP they wo MD wo n't RB not , , , '' '' '' he PRP he said VBD say . . . apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/ml/maxent/football.dat0100644 0000000 0000000 00000004660 14523004075 033147 0ustar00rootroot0000000 0000000 home=man_united Beckham=false Scholes=true Neville=true Henry=true Kanu=true Parlour=false Ferguson=confident Wengler=tense arsenal_lost_previous man_united_won_previous arsenal home=man_united Beckham=true Scholes=false Neville=true Henry=false Kanu=true Parlour=false Ferguson=tense Wengler=confident arsenal_won_previous man_united_lost_previous man_united home=man_united Beckham=false Scholes=true Neville=true Henry=true Kanu=true Parlour=false Ferguson=tense Wengler=tense arsenal_lost_previous man_united_won_previous tie home=man_united Beckham=true Scholes=true Neville=false Henry=true Kanu=false Parlour=false Ferguson=confident Wengler=confident arsenal_won_previous man_united_won_previous tie home=man_united Beckham=false Scholes=true Neville=true Henry=true Kanu=true Parlour=false Ferguson=confident Wengler=tense arsenal_won_previous man_united_won_previous arsenal home=man_united Beckham=false Scholes=true Neville=true Henry=false Kanu=true Parlour=false Ferguson=confident Wengler=confident arsenal_won_previous man_united_won_previous man_united home=man_united Beckham=true Scholes=true Neville=false Henry=true Kanu=true Parlour=false Ferguson=confident Wengler=tense arsenal_won_previous man_united_won_previous man_united home=arsenal Beckham=false Scholes=true Neville=true Henry=true Kanu=true Parlour=false Ferguson=confident Wengler=tense arsenal_lost_previous man_united_won_previous arsenal home=arsenal Beckham=true Scholes=false Neville=true Henry=false Kanu=true Parlour=false Ferguson=tense Wengler=confident arsenal_won_previous man_united_lost_previous arsenal home=arsenal Beckham=false Scholes=true Neville=true Henry=true Kanu=true Parlour=false Ferguson=tense Wengler=tense arsenal_lost_previous man_united_won_previous tie home=arsenal Beckham=true Scholes=true Neville=false Henry=true Kanu=false Parlour=false Ferguson=confident Wengler=confident arsenal_won_previous man_united_won_previous man_united home=arsenal Beckham=false Scholes=true Neville=true Henry=true Kanu=true Parlour=false Ferguson=confident Wengler=tense arsenal_won_previous man_united_won_previous arsenal home=arsenal Beckham=false Scholes=true Neville=true Henry=false Kanu=true Parlour=false Ferguson=confident Wengler=confident arsenal_won_previous man_united_won_previous man_united home=arsenal Beckham=true Scholes=true Neville=false Henry=true Kanu=true Parlour=false Ferguson=confident Wengler=tense arsenal_won_previous man_united_won_previous arsenal ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_namefind_Ann0100644 0000000 0000000 00000000161 14523004075 032646 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/AnnotatedSentences.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/AnnotatedSentences.0100644 0000000 0000000 00000017544 14523004075 034323 0ustar00rootroot0000000 0000000 Last September, I tried to find out the address of an old school friend whom I hadnt't seen for 15 years. I just knew his name , Alan McKennedy , and I'd heard the rumour that he'd moved to Scotland, the country of his ancestors. So I called Julie , a friend who's still in contact with him. She told me that he lived in 23213 Edinburgh, Worcesterstreet 12. I wrote him a letter right away and he answered soon, sounding very happy and delighted. Last year, I wanted to write a letter to my grandaunt. Her 86th birthday was on October 6, and I no longer wanted to be hesitant to get in touch with her. I didn`t know her face-to-face, and so it wasn't easy for me to find out her address. As she had two apartments in different countries, I decided to write to both. The first was in 12424 Paris in Rue-de-Grandes-Illusions 5. But Marie Clara , as my aunt is called, prefered her apartment in Berlin. It's postcode is 30202. She lived there, in beautiful Kaiserstra§e 13, particulary in summer. Hi my name is Stefanie Schmidt , how much is a taxi from Ostbahnhof to Hauptbahnhof? About 10 Euro, I reckon. That sounds good. So please call a driver to Leonardstra§e 112, near the Ostbahnhof in 56473 Hamburg. I'd like to be at Silberhornstra§e 12 as soon as possible. Thank you very much! Hi Mike , it's Stefanie Schmidt . I'm in NŸrnberg at the moment and I've got the problem that my bike has broken. Could you please pick me up from Seidlstra§e 56, I'm in the CafŽ "Mondnacht" at the moment. Please hurry up, I need to be back in Ulm at 8 p.m.! My husband George and me recently celebrated our 10th wedding anniversary. We got married on March 11, 1995. Therefore, we found a photo album with pictures of our first own apartment, which was in 81234 Munich. As a young married couple, we didn't have enough money to afford a bigger lodge than this one in Blumenweg 1. But only five years later, my husband was offered a well-payed job in 17818 Hamburg, so we moved there. Since then, our guests have to ring at Veilchenstra§e 11 if they want to visit us, Luise and George Bauer . I read your help-wanted ad with great attention. I'm a student of informatics, 6th semester, and I'm very interested in your part-time job offer. I have a competent knowledge of programming and foreign languages, like French and Italian. I'm looking forward to your reply. Alisa Fernandes , a tourist from Spain, went to the reception desk of the famous Highfly-Hotel in 30303 Berlin. As she felt quite homesick, she asked the staff if they knew a good Spanish restaurant in Berlin. The concierge told her to go to the "Tapasbar" in Chesterstr. 2. Alisa appreciated the hint and enjoyed a delicious traditional meal. An old friend from France is currently travelling around Europe. Yesterday, she arrived in Berlin and we met up spontaneously. She wanted me to show her some famous sights, like the Brandenburger Tor and the Reichstag. But it wasn't easy to meet up in the city because she hardly knows any streetname or building. So I proposed to meet at a quite local point: the cafŽ "Daily's" in Unter-den-Linden 18, 30291 Berlin. It is five minutes away from the underground station "Westbad". She found it instantly and we spent a great day in the capital. Where did you get those great shoes? They look amazing, I love the colour. Are they made of leather? No, that's faked. But anyway, I like them too. I got them from Hamburg. Don't you know the famous shop in Veilchenstra§e? It's called "Twentytwo". I've never heard of that before. Could you give me the complete address? Sure, it's in Veilchenstra§e 12, in 78181 Hamburg. I deem it best to write a letter to the owner if the shoes are still available. His name is Gerhard Fritsch. Hi, am I talking to the inquiries? My name is Mike Sander and I'd like to know if it is possible to get information about an address if I merely know the name and the phone number of a person! How is he or she called? His name is Stefan Miller and his number is the 030/827234. I'll have a look in the computer... I found a Stefan Miller who lives in Leipzig. Is that right? Yes, it definitely is. So Stefan Miller lives in Heinrich-Heine-Stra§e 112, in 20193 Leipzig. Thank you very much for the information. Bye! On July 14, the father of a family got painfully injured after he had tried to start a barbecue. The flaring flames burnt instantly through his jacket, which he managed to pull off last-minute. Although the wounds weren't life-threatening, it was urgent to bring him directly into ambulance. But the only hospital that had opened that Sunday was the Paracelsus Hospital in 83939 Weilheim, which was 2 hours away. Convulsed with pain, the man finally arrived in Stifterstra§e 15, where the personal immediately took care of him. Last year, I worked as a delivery boy for a small local magazine. I worked in the area of 83454 Ottobrunn. I had a list with the home addresses of our costumers whom I brought their papers once a week. An elderly lady, who was called Elenor Meier , lived in GŠrtnerweg 6, and I always drove there first, because I liked her the most. Afterwards, I went to a student, Gina Schneider , who lived still in her parent's house in GŠrtnerweg 25. The last in line was the retired teacher Bruno Schulz in Dramenstra§e 15. He was friendly enough to tip sometimes. Our business company was founded in 1912 by the singer and entertainer Michel Seile . He opened the first agency in Erding, a small town near Munich. Now, more than 90 years of turbulent ups and downs later, we finally decided to situate our company in a more central and frequented area. Last year, we moved into an empty factory building in 30303 Berlin. It is located in Barmerstr. 34. When George Miller , a tourist from England, came to Munich, he had no idea how to read the city maps. He depended completely on the help and information of German pedestrians. One day, he simply could not find the famous Lenbachhaus. So he asked a young woman for help. She pointed at a street sign and explained to him that he'd find the Lenbachhaus in Luisenstra§e 33, which is in 80333 Munich. Miller was very grateful and could finally enjoy the exhibition. On March 15, there was an accident near Munich. The driver got badly injured. Driving alone not far from her home, the middle-aged woman crashed at high speed into a tree. A resident, who lives near the street where the accident took place, called instantly the police. He reported what had happened and gave his name and address to the officer. He's called Peter Schubert and he lives at Max-Lšw-Stra§e 13 in 84630 Gauting. The police arrived ten minutes later and brought the woman into hospital. Although she had multiple trauma, she's out of mortal danger. Hi, how are you? Arent't you a friend of Natalie ? Yeah for sure. How did you know that? I saw you sitting next to her at uni. Yeah she's my best friend. Are you going to her party next friday? Oh yes, I'd really like to. But in fact I don't know yet where it takes place. I can tell you: ring at Baumann, Meisenstra§e 5, in 81737 Munich. The party starts at 9 p.m.. I hope you'll find it. Thank you very much, see you next friday! My name is Michael Hinterhofer . When I was 21, I moved out from my parents' home into my first own appartment in order to study in a bigger city. My new home was in Lilienstra§e 1 in 25334 Hamburg. But I realized quickly that life in a metropolis wasn't relaxed enough for me. So I decided to move into a smaller town. Now I'm a tenant with an elderly widow. We live in BŸrgerstra§e 2 in 63737 Heidelberg. I really like the smalltown flair and my studies at Heidelberg's notable university../PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_namefind_Ann0100644 0000000 0000000 00000000175 14523004075 032653 xustar000000000 0000000 125 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/AnnotatedSentencesInsufficient.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/AnnotatedSentencesI0100644 0000000 0000000 00000000732 14523004075 034345 0ustar00rootroot0000000 0000000 Last September, I tried to find out the address of an old school friend whom I hadnt't seen for 15 years. I just knew his name , Alan McKennedy , and I'd heard the rumour that he'd moved to Scotland, the country of his ancestors. So I called Julie , a friend who's still in contact with him. She told me that he lived in 23213 Edinburgh, Worcesterstreet 12. I wrote him a letter right away and he answered soon, sounding very happy and delighted../PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_namefind_Ann0100644 0000000 0000000 00000000172 14523004075 032650 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/AnnotatedSentencesWithTypes.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/AnnotatedSentencesW0100644 0000000 0000000 00000020047 14523004075 034364 0ustar00rootroot0000000 0000000 Last September, I tried to find out the address of an old school friend whom I hadnt't seen for 15 years. I just knew his name , Alan McKennedy , and I'd heard the rumour that he'd moved to Scotland, the country of his ancestors. So I called Julie , a friend who's still in contact with him. She told me that he lived in 23213 Edinburgh, Worcesterstreet 12. I wrote him a letter right away and he answered soon, sounding very happy and delighted. Last year, I wanted to write a letter to my grandaunt. Her 86th birthday was on October 6, and I no longer wanted to be hesitant to get in touch with her. I didn`t know her face-to-face, and so it wasn't easy for me to find out her address. As she had two apartments in different countries, I decided to write to both. The first was in 12424 Paris in Rue-de-Grandes-Illusions 5. But Marie Clara , as my aunt is called, prefered her apartment in Berlin. It's postcode is 30202. She lived there, in beautiful Kaiserstraße 13, particulary in summer. Hi my name is Stefanie Schmidt , how much is a taxi from Ostbahnhof to Hauptbahnhof? About 10 Euro, I reckon. That sounds good. So please call a driver to Leonardstraße 112, near the Ostbahnhof in 56473 Hamburg. I'd like to be at Silberhornstraße 12 as soon as possible. Thank you very much! Hi Mike , it's Stefanie Schmidt . I'm in Nürnberg at the moment and I've got the problem that my bike has broken. Could you please pick me up from Seidlstraße 56, I'm in the Cafe "Mondnacht" at the moment. Please hurry up, I need to be back in Ulm at 8 p.m.! My husband George and me recently celebrated our 10th wedding anniversary. We got married on March 11, 1995. Therefore, we found a photo album with pictures of our first own apartment, which was in 81234 Munich. As a young married couple, we didn't have enough money to afford a bigger lodge than this one in Blumenweg 1. But only five years later, my husband was offered a well-payed job in 17818 Hamburg, so we moved there. Since then, our guests have to ring at Veilchenstraße 11 if they want to visit us, Luise and George Bauer . I read your help-wanted ad with great attention. I'm a student of informatics, 6th semester, and I'm very interested in your part-time job offer. I have a competent knowledge of programming and foreign languages, like French and Italian. I'm looking forward to your reply. Alisa Fernandes , a tourist from Spain, went to the reception desk of the famous Highfly-Hotel in 30303 Berlin. As she felt quite homesick, she asked the staff if they knew a good Spanish restaurant in Berlin. The concierge told her to go to the "Tapasbar" in Chesterstr. 2. Alisa appreciated the hint and enjoyed a delicious traditional meal. An old friend from France is currently travelling around Europe. Yesterday, she arrived in Berlin and we met up spontaneously. She wanted me to show her some famous sights, like the Brandenburger Tor and the Reichstag. But it wasn't easy to meet up in the city because she hardly knows any streetname or building. So I proposed to meet at a quite local point: the cafe "Daily's" in Unter-den-Linden 18, 30291 Berlin. It is five minutes away from the underground station "Westbad". She found it instantly and we spent a great day in the capital. Where did you get those great shoes? They look amazing, I love the colour. Are they made of leather? No, that's faked. But anyway, I like them too. I got them from Hamburg. Don't you know the famous shop in Veilchenstraße? It's called "Twentytwo". I've never heard of that before. Could you give me the complete address? Sure, it's in Veilchenstraße 12, in 78181 Hamburg. I deem it best to write a letter to the owner if the shoes are still available. His name is Gerhard Fritsch. Hi, am I talking to the inquiries? My name is Mike Sander and I'd like to know if it is possible to get information about an address if I merely know the name and the phone number of a person! How is he or she called? His name is Stefan Miller and his number is the 030/827234. I'll have a look in the computer... I found a Stefan Miller who lives in Leipzig. Is that right? Yes, it definitely is. So Stefan Miller lives in Heinrich-Heine-Straße 112, in 20193 Leipzig. Thank you very much for the information. Bye! On July 14, the father of a family got painfully injured after he had tried to start a barbecue. The flaring flames burnt instantly through his jacket, which he managed to pull off last-minute. Although the wounds weren't life-threatening, it was urgent to bring him directly into ambulance. But the only hospital that had opened that Sunday was the Paracelsus Hospital in 83939 Weilheim, which was 2 hours away. Convulsed with pain, the man finally arrived in Stifterstraße 15, where the personal immediately took care of him. Last year, I worked as a delivery boy for a small local magazine. I worked in the area of 83454 Ottobrunn. I had a list with the home addresses of our costumers whom I brought their papers once a week. An elderly lady, who was called Elenor Meier , lived in Gärtnerweg 6, and I always drove there first, because I liked her the most. Afterwards, I went to a student, Gina Schneider , who lived still in her parent's house in Gärtnerweg 25. The last in line was the retired teacher Bruno Schulz in Dramenstraße 15. He was friendly enough to tip sometimes. Our business company was founded in 1912 by the singer and entertainer Michel Seile . He opened the first agency in Erding, a small town near Munich. Now, more than 90 years of turbulent ups and downs later, we finally decided to situate our company in a more central and frequented area. Last year, we moved into an empty factory building in 30303 Berlin. It is located in Barmerstr. 34. When George Miller , a tourist from England, came to Munich, he had no idea how to read the city maps. He depended completely on the help and information of German pedestrians. One day, he simply could not find the famous Lenbachhaus. So he asked a young woman for help. She pointed at a street sign and explained to him that he'd find the Lenbachhaus in Luisenstraße 33, which is in 80333 Munich. Miller was very grateful and could finally enjoy the exhibition. On March 15, there was an accident near Munich. The driver got badly injured. Driving alone not far from her home, the middle-aged woman crashed at high speed into a tree. A resident, who lives near the street where the accident took place, called instantly the police. He reported what had happened and gave his name and address to the officer. He's called Peter Schubert and he lives at Max-Löw-Straße 13 in 84630 Gauting. The police arrived ten minutes later and brought the woman into hospital. Although she had multiple trauma, she's out of mortal danger. Hi, how are you? Arent't you a friend of Natalie ? Yeah for sure. How did you know that? I saw you sitting next to her at uni. Yeah she's my best friend. Are you going to her party next friday? Oh yes, I'd really like to. But in fact I don't know yet where it takes place. I can tell you: ring at Baumann, Meisenstraße 5, in 81737 Munich. The party starts at 9 p.m.. I hope you'll find it. Thank you very much, see you next friday! My name is Michael Hinterhofer . When I was 21, I moved out from my parents' home into my first own appartment in order to study in a bigger city. My new home was in Lilienstraße 1 in 25334 Hamburg. But I realized quickly that life in a metropolis wasn't relaxed enough for me. So I decided to move into a smaller town. Now I'm a tenant with an elderly widow. We live in Bürgerstraße 2 in 63737 Heidelberg. I really like the smalltown flair and my studies at Heidelberg's notable university. ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_namefind_Onl0100644 0000000 0000000 00000000172 14523004075 032664 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/OnlyWithEntitiesWithTypes.train apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/OnlyWithEntitiesWit0100644 0000000 0000000 00000000644 14523004075 034417 0ustar00rootroot0000000 0000000 NATO United States NATO Parliamentary Assembly Edinburgh Britain Anders Fogh Rasmussen U . S . Barack Obama Afghanistan Rasmussen Afghanistan 2010 ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_namefind_Onl0100644 0000000 0000000 00000000156 14523004075 032666 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/OnlyWithNames.train apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/OnlyWithNames.train0100644 0000000 0000000 00000000353 14523004075 034323 0ustar00rootroot0000000 0000000 Neil Abercrombie Anibal Acevedo-Vila Gary Ackerman Robert Aderholt Daniel Akaka Todd Akin Lamar Alexander Rodney Alexander ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_namefind_Onl0100644 0000000 0000000 00000000167 14523004075 032670 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/OnlyWithNamesWithTypes.train apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/OnlyWithNamesWithTy0100644 0000000 0000000 00000000443 14523004075 034360 0ustar00rootroot0000000 0000000 Neil Abercrombie Anibal Acevedo-Vila Gary Ackerman Robert Aderholt Daniel Akaka Todd Akin Lamar Alexander Rodney Alexander apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/html1.train0100644 0000000 0000000 00000000325 14523004075 032606 0ustar00rootroot0000000 0000000
  • Advanced Integrated Pest Management
  • Bay Cities Produce Co., Inc.
./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_namefind_ner0100644 0000000 0000000 00000000163 14523004075 032720 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/ner-pos-features-v15.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/ner-pos-features-v10100644 0000000 0000000 00000004154 14523004075 034174 0ustar00rootroot0000000 0000000 2 2 2 2 2 2 pt-pos-perceptron.bin true false ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_namefind_ner0100644 0000000 0000000 00000000157 14523004075 032723 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/ner-pos-features.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/ner-pos-features.xm0100644 0000000 0000000 00000004144 14523004075 034272 0ustar00rootroot0000000 0000000 2 2 2 2 2 2 pos-model.bin true false apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/voa1.train0100644 0000000 0000000 00000006133 14523004075 032432 0ustar00rootroot0000000 0000000 U . S . President Barack Obama has arrived in South Korea , where he is expected to show solidarity with the country ' s president in demanding North Korea move toward ending its nuclear weapons programs . As he departed China for South Korea Wednesday , President Obama took another opportunity to urge North Korea to reach an agreement on its nuclear weapons . " North Korea has a choice . It can continue down the path of confrontation and provocation that has led to less security , less prosperity and more isolation from the global community , " President Obama said . " Or it can choose to become a full member of the international community , which will give a better life to its people by living up to international obligations and foregoing nuclear weapons . " The president landed at a U . S . air base Wednesday evening , and is to hold talks with South Korean President Lee Myung - bak Thursday here in the South Korean capital . South Korea and the United States are trying to coax the North back to six - nation talks aimed at ending its nuclear weapons . President Obama has indicated he will send an envoy to Pyongyang before the end of the year for one - on - one discussions , but only in the context of restarting the multinational process . Apart from the nuclear issue , Mr . Obama ' s visit is seen as fairly routine . Scott Snyder is the director of the Center for U . S . Korea Policy . " Frankly , the relationship is in pretty good health right now , so there aren ' t necessarily any real burning issues , " Snyder said . " They ' ll coordinate on North Korea , they ' ll talk about other issues in the alliance . President Obama will thank South Korea for its contributions to Afghanistan . " The run - up to President Obama ' s arrival here in Seoul has been relatively free of protests . However , a group of North Korean human rights advocates called on Mr . Obama Wednesday to speak out more forcefully against the North ' s abuses . Tim Peters , a leader of the demonstration , says Mr . Obama has spoken too softly on North Korean human rights while focusing on security and economic matters . " Mr . President , your voice is desperately needed ! " Peters said . Human rights activists want more U . S . pressure on China to stop sending North Korean refugees home against their will , where they may face severe punishment or execution . apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/namefind/voa2.train0100644 0000000 0000000 00000007550 14523004075 032437 0ustar00rootroot0000000 0000000 The NATO secretary - general says he is confident the United States and other NATO allies will send more troops to Afghanistan , where insurgent attacks have surged in recent months . He spoke at the NATO Parliamentary Assembly Meeting in Edinburgh , where Britain ' s foreign secretary outlined the strategy his nation would support . NATO Secretary - General Anders Fogh Rasmussen made clear that despite an intensifying insurgency and uncertainty over whether U . S . President Barack Obama will send more troops , NATO will remain in Afghanistan . " Do not make any mistake , we will stay in Afghanistan as long as it takes to finish our job . But that is of course not forever , " he said . Mr . Rasmussen said he is confident there will soon be substantially more troops and with that , new momentum for the mission . " Our mission in Afghanistan ends when the Afghans are capable to secure and run their country themselves . The way forward is to hand over lead responsibility for security to the Afghan security forces , district by district , province by province , as their own capacity develops , " he said . The British prime minister would like some of the handover to begin in 2010 . He has offered to host a summit in London early next year to discuss how the international community should proceed . Speaking to the NATO Parliamentary Assembly , British Foreign Minister David Miliband said Afghanistan needs to be built from the grass - roots level . " A winning political strategy would select and train , empower and equip , mentor and monitor those responsible for governing the provinces and districts of Afghanistan , " he said . Mr . Miliband says local leaders will then be able to distribute money that would create jobs and rebuild Afghanistan ' s infrastructure . He said because much of the nation is at war , it is inevitable that governments are focusing on troop levels , but he said there needs to be a coordinated effort . " Success must be based on aligning our military and civilian resources under a clear political strategy , " said Miliband . " A strategy that reassures and mobilizes ordinary Afghans to resist the Taliban , that divides the insurgency by reintegrating and reconciling those is search of money , status or power . not ideology and that builds a new relationship between Afghanistan and its neighbors , " he added . Britain has promised to send an additional 500 troops to Afghanistan , bringing its force total to 9 , 500 , second only to the United States . But it will do so only if other NATO nations follow suit , the Afghan government pledges to fight corruption , and its forces have adequate equipment . Later this week , Hamid Karzai will be sworn in to his second term as Afghan president . His government is seen as riddled with corruption and his election is considered deeply flawed . Mr . Karzai pledged his government will spend the next five years fighting corruption . U . S . President Barack Obama is considering sending additional American forces to Afghanistan . His top general there has reportedly asked for up to 40 , 000 troops . ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_ngram_ngram-0100644 0000000 0000000 00000000160 14523004075 032635 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/ngram/ngram-model-no-count.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/ngram/ngram-model-no-count.x0100644 0000000 0000000 00000001646 14523004075 034207 0ustar00rootroot0000000 0000000 brown fox ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_ngram_ngram-0100644 0000000 0000000 00000000164 14523004075 032641 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/ngram/ngram-model-not-a-number.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/ngram/ngram-model-not-a-numb0100644 0000000 0000000 00000001663 14523004075 034153 0ustar00rootroot0000000 0000000 brown fox apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/ngram/ngram-model.xml0100644 0000000 0000000 00000004067 14523004075 033000 0ustar00rootroot0000000 0000000 brown fox fox brown fox jumped the the brown fox the brown Fox jumped brown brown Fox jumped Fox fox jumped the brown brown Fox Fox jumped apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/parser/en_head_rules0100644 0000000 0000000 00000001352 14523004075 032756 0ustar00rootroot0000000 0000000 20 ADJP 0 NNS QP NN $ ADVP JJ VBN VBG ADJP JJR NP JJS DT FW RBR RBS SBAR RB 15 ADVP 1 RB RBR RBS FW ADVP TO CD JJR JJ IN NP JJS NN 5 CONJP 1 CC RB IN 2 FRAG 1 2 INTJ 0 4 LST 1 LS : 19 NAC 0 NN NNS NNP NNPS NP NAC EX $ CD QP PRP VBG JJ JJS JJR ADJP FW 8 PP 1 IN TO VBG VBN RP FW 2 PRN 1 3 PRT 1 RP 14 QP 0 $ IN NNS NN JJ RB DT CD NCD QP JJR JJS 7 RRC 1 VP NP ADVP ADJP PP 10 S 0 TO IN VP S SBAR ADJP UCP NP 13 SBAR 0 WHNP WHPP WHADVP WHADJP IN DT S SQ SINV SBAR FRAG 7 SBARQ 0 SQ S SINV SBARQ FRAG 12 SINV 0 VBZ VBD VBP VB MD VP S SINV ADJP NP 9 SQ 0 VBZ VBD VBP VB MD VP SQ 2 UCP 1 15 VP 1 TO VBD VBN MD VBZ VB VBG VBP VP ADJP NN NNS NP 6 WHADJP 0 CC WRB JJ ADJP 4 WHADVP 1 CC WRB 8 WHNP 0 WDT WP WP$ WHADJP WHPP WHNP 5 WHPP 1 IN TO FW 2 X 1 apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/parser/parser.train0100644 0000000 0000000 00000165320 14523004075 032577 0ustar00rootroot0000000 0000000 (TOP (S (INTJ (RB No) )(, ,) (NP-SBJ (PRP it) )(VP (VBD was) (RB n't) (NP-PRD (NNP Black) (NNP Monday) ))(. .) )) (TOP (S (CC But) (SBAR-ADV (IN while) (S (NP-SBJ (DT the) (NNP New) (NNP York) (NNP Stock) (NNP Exchange) )(VP (VBD did) (RB n't) (VP (VB fall) (ADVP-CLR (RB apart) )(NP-TMP (NNP Friday) )(SBAR-TMP (IN as) (S (NP-SBJ (DT the) (NNP Dow) (NNP Jones) (NNP Industrial) (NNP Average) )(VP (VBD plunged) (NP-EXT (NP (CD 190.58) (NNS points) )(PRN (: --) (NP (NP (JJS most) )(PP (IN of) (NP (PRP it) ))(PP-TMP (IN in) (NP (DT the) (JJ final) (NN hour) )))(: --) )))))))))(NP-SBJ-2 (PRP it) )(ADVP (RB barely) )(VP (VBD managed) (S (NP-SBJ (-NONE- *-2) )(VP (TO to) (VP (VB stay) (NP-LOC-PRD (NP (DT this) (NN side) )(PP (IN of) (NP (NN chaos) )))))))(. .) )) (TOP (S-1 (NP-SBJ-2 (NP (DT Some) (`` ``) (NN circuit) (NNS breakers) ('' '') )(VP (VBN installed) (NP (-NONE- *) )(PP-TMP (IN after) (NP (DT the) (NNP October) (CD 1987) (NN crash) ))))(VP (VBD failed) (NP (PRP$ their) (JJ first) (NN test) )(PRN (, ,)(S (NP-SBJ (NNS traders) )(VP (VBP say) (SBAR (-NONE- 0) (S (-NONE- *T*-1) ))))(, ,) )(S-ADV (NP-SBJ-3 (-NONE- *-2) )(ADJP-PRD (JJ unable) (S (NP-SBJ (-NONE- *-3) )(VP (TO to) (VP (VB cool) (NP (NP (DT the) (NN selling) (NN panic) )(PP-LOC (IN in) (NP (DT both) (NNS stocks) (CC and)(NNS futures) )))))))))(. .) )) (TOP (S (NP-SBJ (NP (NP (DT The) (CD 49) (NN stock) (NN specialist) (NNS firms) )(PP-LOC (IN on) (NP (DT the) (NNP Big) (NNP Board) (NN floor) )))(: --) (NP (NP (DT the) (NNS buyers) (CC and)(NNS sellers) )(PP (IN of) (NP (JJ last) (NN resort) ))(SBAR (WHNP-2 (WP who) )(S (NP-SBJ-1 (-NONE- *T*-2) )(VP (VBD were) (VP (VBN criticized) (NP (-NONE- *-1) )(PP-TMP (IN after) (NP (DT the) (CD 1987) (NN crash) )))))))(: --) )(ADVP-TMP (RB once) (RB again) )(VP (MD could) (RB n't) (VP (VB handle) (NP (DT the) (NN selling) (NN pressure) )))(. .) )) (TOP (S (S-TPC-4 (NP-SBJ-1 (JJ Big) (NN investment) (NNS banks) )(VP (VBD refused) (S (NP-SBJ-2 (-NONE- *-1) )(VP (TO to) (VP (VB step) (ADVP-DIR (IN up) (PP (TO to) (NP (DT the) (NN plate) )))(S-PRP (NP-SBJ-3 (-NONE- *-2) )(VP (TO to) (VP (VB support) (NP (DT the) (JJ beleaguered) (NN floor) (NNS traders) )(PP-MNR (IN by) (S-NOM (NP-SBJ (-NONE- *-3) )(VP (VBG buying) (NP (NP (JJ big) (NNS blocks) )(PP (IN of) (NP (NN stock) ))))))))))))))(, ,) (NP-SBJ (NNS traders) )(VP (VBP say) (SBAR (-NONE- 0) (S (-NONE- *T*-4) )))(. .) )) (TOP (S (NP-SBJ (NP (JJ Heavy) (NN selling) )(PP (IN of) (NP (NP (NNP Standard) (CC &) (NNP Poor) (POS 's) )(JJ 500-stock) (NN index) (NNS futures) ))(PP-LOC (IN in) (NP (NNP Chicago) )))(VP (ADVP-MNR (RB relentlessly) )(VBD beat) (NP (NNS stocks) )(ADVP-DIR (RB downward) ))(. .) )) (TOP (S (NP-SBJ-1 (NP (CD Seven) (NNP Big) (NNP Board) (NNS stocks) )(: --) (NP (NP (NNP UAL) )(, ,) (NP (NNP AMR) )(, ,) (NP (NNP BankAmerica) )(, ,) (NP (NNP Walt) (NNP Disney) )(, ,) (NP (NNP Capital) (NNP Cities\/ABC) )(, ,) (NP (NNP Philip) (NNP Morris) )(CC and) (NP (NNP Pacific) (NNP Telesis) (NNP Group) ))(: --) )(VP (VP (VBD stopped) (S (NP-SBJ (-NONE- *-1) )(VP (VBG trading) )))(CC and) (VP (ADVP-TMP (RB never) )(VBD resumed) ))(. .) )) (TOP (S (NP-SBJ (DT The) (NN finger-pointing) )(VP (VBZ has) (ADVP-TMP (RB already) )(VP (VBN begun) ))(. .) )) (TOP (S (`` ``) (NP-SBJ (DT The) (NN equity) (NN market) )(VP (VBD was) (ADJP-PRD (JJ illiquid) ))(. .) )) (TOP (SINV (S-TPC-2 (ADVP-TMP (RB Once) (RB again) )(-LRB- -LCB-) (NP-SBJ-3 (DT the) (NNS specialists) )(-RRB- -RCB-) (VP (VBD were) (RB not) (ADJP-PRD (JJ able) (S (NP-SBJ (-NONE- *-3) )(VP (TO to) (VP (VB handle) (NP (NP (DT the) (NNS imbalances) )(PP-LOC (IN on) (NP (NP (DT the) (NN floor) )(PP (IN of) (NP (DT the) (NNP New) (NNP York) (NNP Stock) (NNP Exchange) )))))))))))(, ,) ('' '') (VP (VBD said) (S (-NONE- *T*-2) ))(NP-SBJ (NP (NNP Christopher) (NNP Pedersen) )(, ,) (NP (NP (JJ senior) (NN vice) (NN president) )(PP-LOC (IN at) (NP (NNP Twenty-First) (NNP Securities) (NNP Corp) ))))(. .) )) (TOP (SINV (VP (VBD Countered) (SBAR (-NONE- 0) (S (-NONE- *ICH*-2) )))(NP-SBJ (NP (NNP James) (NNP Maguire) )(, ,) (NP (NP (NN chairman) )(PP (IN of) (NP (NNS specialists) (NNP Henderson) (NNP Brothers) (NNP Inc.) ))))(: :) (`` ``) (S-2 (NP-SBJ (NP (PRP It) )(S (-NONE- *EXP*-1) ))(VP (VBZ is) (ADJP-PRD (JJ easy) )(S-1 (NP-SBJ (-NONE- *) )(VP (TO to) (VP (VB say) (SBAR (-NONE- 0) (S (NP-SBJ (DT the) (NN specialist) )(VP (VBZ is) (RB n't) (VP (VBG doing) (NP (PRP$ his) (NN job) ))))))))))(. .) )) (TOP (S (SBAR-TMP (WHADVP-1 (WRB When) )(S (NP-SBJ (DT the) (NN dollar) )(VP (VBZ is) (PP-LOC-PRD (IN in) (NP (DT a) (NN free-fall) ))(ADVP-TMP (-NONE- *T*-1) ))))(, ,) (NP-SBJ (RB even) (JJ central) (NNS banks) )(VP (MD ca) (RB n't) (VP (VB stop) (NP (PRP it) )))(. .) )) (TOP (S (NP-SBJ (NNS Speculators) )(VP (VBP are) (VP (VBG calling) (PP-CLR (IN for) (NP (NP (DT a) (NN degree) )(PP (IN of) (NP (NN liquidity) ))(SBAR (WHNP-1 (WDT that) )(S (NP-SBJ (-NONE- *T*-1) )(VP (VBZ is) (RB not) (ADVP-LOC-PRD (RB there) )(PP-LOC (IN in) (NP (DT the) (NN market) )))))))))(. .) ('' '') )) (TOP (S (NP-SBJ (NP (JJ Many) (NN money) (NNS managers) )(CC and) (NP (DT some) (NNS traders) ))(VP (VBD had) (ADVP-TMP (RB already) )(VP (VBN left) (NP (PRP$ their) (NNS offices) )(NP-TMP (RB early) (NNP Friday) (NN afternoon) )(PP-TMP (IN on) (NP (DT a) (JJ warm) (NN autumn) (NN day) ))(: --) (SBAR-PRP (IN because) (S (NP-SBJ (DT the) (NN stock) (NN market) )(VP (VBD was) (ADJP-PRD (RB so) (JJ quiet) ))))))(. .) )) (TOP (S (RB Then) (PP-LOC (IN in) (NP (DT a) (NN lightning) (NN plunge) ))(, ,) (NP-SBJ-1 (DT the) (NNP Dow) (NNP Jones) (NNS industrials) )(PP-TMP (IN in) (NP (QP (RB barely) (DT an) )(NN hour) ))(VP (VBD surrendered) (NP (NP (QP (RB about) (DT a) )(JJ third) )(PP (IN of) (NP (NP (PRP$ their) (NNS gains) )(NP-TMP (DT this) (NN year) ))))(, ,) (S-ADV (NP-SBJ (-NONE- *-1) )(VP (VBG chalking) (PRT (RP up) )(NP (NP (DT a) (ADJP (ADJP (JJ 190.58-point) )(, ,) (CC or) (ADJP (CD 6.9) (NN %) )(, ,) )(NN loss) )(PP-TMP (IN on) (NP (DT the) (NN day) )))(PP-LOC (IN in) (NP (JJ gargantuan) (NN trading) (NN volume) )))))(. .) )) (TOP (S (NP-SBJ (JJ Final-hour) (NN trading) )(VP (VBD accelerated) (PP-DIR (TO to) (NP (NP (QP (CD 108.1) (CD million) )(NNS shares) )(, ,) (NP (NP (DT a) (NN record) )(PP (IN for) (NP (DT the) (NNP Big) (NNP Board) ))))))(. .) )) (TOP (S (PP-TMP (IN At) (NP (NP (DT the) (NN end) )(PP (IN of) (NP (DT the) (NN day) ))))(, ,) (NP-SBJ-1 (QP (CD 251.2) (CD million) )(NNS shares) )(VP (VBD were) (VP (VBN traded) (NP (-NONE- *-1) )))(. .) )) (TOP (S (NP-SBJ (DT The) (NNP Dow) (NNP Jones) (NNS industrials) )(VP (VBD closed) (PP-CLR (IN at) (NP (CD 2569.26) )))(. .) )) (TOP (S (NP-SBJ (NP (DT The) (NNP Dow) (POS 's) )(NN decline) )(VP (VBD was) (ADJP-PRD (JJ second) (PP (IN in) (NP (NN point) (NNS terms) ))(PP (ADVP (RB only) )(TO to) (NP (NP (DT the) (JJ 508-point) (NNP Black) (NNP Monday) (NN crash) )(SBAR (WHNP-1 (WDT that) )(S (NP-SBJ (-NONE- *T*-1) )(VP (VBD occurred) (NP-TMP (NNP Oct.) (CD 19) (, ,)(CD 1987) ))))))))(. .) )) (TOP (S (PP-LOC (IN In) (NP (NN percentage) (NNS terms) ))(, ,) (ADVP (RB however) )(, ,) (NP-SBJ (NP (DT the) (NNP Dow) (POS 's) )(NN dive) )(VP (VBD was) (NP-PRD (NP (NP (DT the) (JJ 12th-worst) )(ADVP-TMP (RB ever) ))(CC and) (NP (NP (DT the) (JJS sharpest) )(SBAR-TMP (IN since) (S (NP-SBJ (DT the) (NN market) )(VP (VBD fell) (NP-EXT (NP (CD 156.83) )(, ,) (CC or) (NP (CD 8) (NN %) ))(, ,) (PP-TMP (NP (DT a) (NN week) )(IN after) (NP (NNP Black) (NNP Monday) ))))))))(. .) )) (TOP (S (NP-SBJ (DT The) (NNP Dow) )(VP (VBD fell) (NP-EXT (CD 22.6) (NN %) )(PP-TMP (IN on) (NP (NNP Black) (NNP Monday) )))(. .) )) (TOP (S (NP-SBJ-1 (NP (NNP Shares) )(PP (IN of) (NP (NP (NNP UAL) )(, ,) (NP (NP (DT the) (NN parent) )(PP (IN of) (NP (NNP United) (NNP Airlines) )))(, ,) )))(VP (VBD were) (ADJP-PRD (RB extremely) (JJ active) )(NP-TMP (DT all) (NN day) )(NP-TMP (NNP Friday) )(, ,) (S-ADV (NP-SBJ (-NONE- *-1) )(VP (VBG reacting) (PP-CLR (TO to) (NP (NP (NN news) (CC and)(NNS rumors) )(PP (IN about) (NP (NP (DT the) (VBN proposed) (ADJP (QP ($ $) (CD 6.79) (CD billion) )(-NONE- *U*) )(NN buy-out) )(PP (IN of) (NP (DT the) (NN airline) ))(PP (IN by) (NP (DT an) (JJ employee-management) (NN group) )))))))))(. .) )) (TOP (S (NP-SBJ (NP (NNP Wall) (NNP Street) (POS 's) )(NX (NX (JJ takeover-stock) (NNS speculators) )(, ,) (CC or) (`` ``) (NX (NN risk) (NNS arbitragers) )(, ,) ('' '') ))(VP (VBD had) (VP (VBN placed) (NP (ADJP (RB unusually) (JJ large) )(NNS bets) (SBAR (IN that) (S (S (NP-SBJ (DT a) (NN takeover) )(VP (MD would) (VP (VB succeed) )))(CC and) (S (NP-SBJ (NNP UAL) (NN stock) )(VP (MD would) (VP (VB rise) ))))))))(. .) )) (TOP (S (SINV (PP-TMP (IN At) (NP (CD 2:43) (RB p.m.) (NNP EDT) ))(, ,) (VBD came) (NP-SBJ (DT the) (JJ sickening) (NN news) ))(: :) (S (NP-SBJ (DT The) (NNP Big) (NNP Board) )(VP (VBD was) (VP (VBG halting) (NP (NP (VBG trading) )(PP-LOC (IN in) (NP (NNP UAL) )))(, ,) (`` ``) (PP-TMP (VBG pending) (NP (NN news) )))))(. .) ('' '') )) (TOP (SINV (S-TPC-1 (PP-LOC (IN On) (NP (DT the) (NN exchange) (NN floor) ))(, ,) (`` ``) (ADVP-TMP (ADVP (RB as) (RB soon) )(SBAR (IN as) (S (NP-SBJ-2 (NNP UAL) )(VP (VBD stopped) (S (NP-SBJ (-NONE- *-2) )(VP (VBG trading) ))))))(, ,) (NP-SBJ (PRP we) )(VP (VBD braced) (PP-CLR (IN for) (NP (DT a) (NN panic) ))))(, ,) ('' '') (VP (VBD said) (SBAR (-NONE- 0) (S (-NONE- *T*-1) )))(NP-SBJ (CD one) (JJ top) (NN floor) (NN trader) )(. .) )) (TOP (S (NP-SBJ-1 (JJ Several) (NNS traders) )(VP (MD could) (VP (VB be) (VP (VBN seen) (S (NP-SBJ (-NONE- *-1) )(VP (VBG shaking) (NP (PRP$ their) (NNS heads) )))(SBAR-TMP (WHADVP-2 (WRB when) )(S (NP-SBJ (DT the) (NN news) )(VP (VBD flashed) (ADVP-TMP (-NONE- *T*-2) )))))))(. .) )) (TOP (S (PP-TMP (IN For) (NP (NNS weeks) ))(, ,) (NP-SBJ (DT the) (NN market) )(VP (VBD had) (VP (VBN been) (ADJP-PRD (JJ nervous) (PP (IN about) (NP (NNS takeovers) )))(, ,) (SBAR-TMP (IN after) (S (NP-SBJ (NP (NNP Campeau) (NNP Corp.) (POS 's) )(NN cash) (NN crunch) )(VP (VBD spurred) (NP (NP (NN concern) )(PP (IN about) (NP (NP (DT the) (NNS prospects) )(PP (IN for) (NP (JJ future) (ADJP (RB highly) (JJ leveraged) )(NNS takeovers) ))))))))))(. .) )) (TOP (SINV (CC And) (PP-TMP (NP (CD 10) (NNS minutes) )(IN after) (NP (DT the) (NNP UAL) (NN trading) (NN halt) ))(VP (VBD came) )(NP-SBJ (NN news) (SBAR (IN that) (S (NP-SBJ (DT the) (NNP UAL) (NN group) )(VP (MD could) (RB n't) (VP (VB get) (NP (NP (NN financing) )(PP (IN for) (NP (PRP$ its) (NN bid) ))))))))(. .) )) (TOP (S (PP-TMP (IN At) (NP (DT this) (NN point) ))(, ,) (NP-SBJ (DT the) (NNP Dow) )(VP (VBD was) (ADVP-PRD (RB down) (NP (QP (RB about) (CD 35) )(NNS points) )))(. .) )) (TOP (S (NP-SBJ (DT The) (NN market) )(VP (VBD crumbled) )(. .) )) (TOP (S (S (NP-SBJ (NNS Arbitragers) )(VP (MD could) (RB n't) (VP (VB dump) (NP (PRP$ their) (NNP UAL) (NN stock) ))))(: --) (CC but) (S (NP-SBJ (PRP they) )(VP (VBD rid) (NP (PRP themselves) )(PP-CLR (IN of) (NP (NP (ADJP (RB nearly) (DT every) )(`` ``) (NN rumor) ('' '') (NN stock) )(SBAR (WHNP-1 (-NONE- 0) )(S (NP-SBJ (PRP they) )(VP (VBD had) (NP (-NONE- *T*-1) ))))))))(. .) )) (TOP (S (PP (IN For) (NP (NN example) ))(, ,) (NP-SBJ (PRP$ their) (NN selling) )(VP (VBD caused) (S (NP-SBJ-5 (NP (NN trading) (NNS halts) )(PP-LOC (-NONE- *ICH*-1) ))(VP (TO to) (VP (VB be) (VP (VBN declared) (NP (-NONE- *-5) )(PP-LOC-1 (IN in) (NP (NP (NP (NNP USAir) (NNP Group) )(, ,) (SBAR (WHNP-2 (WDT which) )(S (NP-SBJ (-NONE- *T*-2) )(VP (VBD closed) (ADVP-CLR (RB down) (NP (QP (CD 3) (CD 7\/8) ))(PP (TO to) (NP (QP (CD 41) (CD 1\/2) ))))))))(, ,) (NP (NP (NNP Delta) (NNP Air) (NNP Lines) )(, ,) (SBAR (WHNP-3 (WDT which) )(S (NP-SBJ (-NONE- *T*-3) )(VP (VBD fell) (NP-EXT (QP (CD 7) (CD 3\/4) ))(PP-DIR (TO to) (NP (QP (CD 69) (CD 1\/4) )))))))(, ,) (CC and)(NP (NP (NNP Philips) (NNP Industries) )(, ,) (SBAR (WHNP-4 (WDT which) )(S (NP-SBJ (-NONE- *T*-4) )(VP (VBD sank) (NP-EXT (CD 3) )(PP-DIR (TO to) (NP (QP (CD 21) (CD 1\/2) ))))))))))))))(. .) )) (TOP (S (NP-SBJ (DT These) (NNS stocks) )(ADVP-TMP (RB eventually) )(VP (VBD reopened) )(. .) )) (TOP (S (CC But) (SBAR-TMP (IN as) (S (NP-SBJ (NN panic) )(VP (VBD spread) )))(, ,) (NP-SBJ-1 (NNS speculators) )(VP (VBD began) (S (NP-SBJ-2 (-NONE- *-1) )(VP (TO to) (VP (VB sell) (NP (NP (JJ blue-chip) (NNS stocks) )(PP (JJ such) (IN as) (NP (NP (NNP Philip) (NNP Morris) )(CC and) (NP (NNP International) (NNP Business) (NNP Machines) ))))(S-PRP (NP-SBJ (-NONE- *-2) )(VP (TO to) (VP (VB offset) (NP (PRP$ their) (NNS losses) ))))))))(. .) )) (TOP (S (SBAR-TMP (WHADVP-2 (WRB When) )(S (NP-SBJ-1 (NP (NN trading) )(PP-LOC (-NONE- *ICH*-3) ))(VP (VBD was) (VP (VBN halted) (NP (-NONE- *-1) )(PP-LOC-3 (IN in) (NP (NNP Philip) (NNP Morris) ))(ADVP-TMP (-NONE- *T*-2) )))))(, ,) (NP-SBJ (DT the) (NN stock) )(VP (VBD was) (VP (VBG trading) (PP-CLR (IN at) (NP (CD 41) ))(, ,) (ADVP (RB down) (NP (QP (CD 3) (CD 3\/8) )))(, ,) (SBAR-ADV (IN while) (S (NP-SBJ (NNP IBM) )(VP (VBD closed) (ADVP (NP (QP (CD 5) (CD 5\/8) ))(JJR lower) )(PP-CLR (IN at) (NP (CD 102) )))))))(. .) )) (TOP (S (NP-SBJ (NN Selling) )(VP (VBD snowballed) (PP-PRP (IN because) (IN of) (NP (NP (NNS waves) )(PP (IN of) (NP (NP (JJ automatic) (`` ``) (JJ stop-loss) ('' '') (NNS orders) )(, ,) (SBAR (WHNP-2 (WDT which) )(S (NP-SBJ-1 (-NONE- *T*-2) )(VP (VBP are) (VP (VBN triggered) (NP (-NONE- *-1) )(PP (IN by) (NP-LGS (NN computer) ))(SBAR-TMP (WHADVP-3 (WRB when) )(S (NP-SBJ (NNS prices) )(VP (VBP fall) (PP-DIR (TO to) (NP (JJ certain) (NNS levels) ))(ADVP-TMP (-NONE- *T*-3) )))))))))))))(. .) )) (TOP (S (NP-SBJ (NP (JJS Most) )(PP (IN of) (NP (DT the) (NN stock) (NN selling) (NN pressure) )))(VP (VBD came) (PP-DIR (IN from) (NP (NP (NNP Wall) (NNP Street) (NNS professionals) )(, ,) (PP (VBG including) (NP (JJ computer-guided) (NN program) (NNS traders) )))))(. .) )) (TOP (S (NP-SBJ (NNS Traders) )(VP (VBD said) (SBAR (-NONE- 0) (S (NP-SBJ (NP (JJS most) )(PP (IN of) (NP (PRP$ their) (JJ major) (JJ institutional) (NNS investors) )))(, ,) (PP (IN on) (NP (DT the) (JJ other) (NN hand) ))(, ,) (VP (VBD sat) (ADVP-MNR (RB tight) )))))(. .) )) (TOP (S (ADVP-TMP (RB Now) )(, ,) (PP-TMP (IN at) (NP (CD 3:07) ))(, ,) (NP-SBJ (NP (CD one) )(PP (IN of) (NP (NP (DT the) (NN market) (POS 's) )(JJ post-crash) (`` ``) (NNS reforms) ('' '') )))(VP (VBD took) (NP (NN hold) )(SBAR-TMP (IN as) (S (NP-SBJ (DT the) (NNP S&P) (CD 500) (NNS futures) (NN contract) )(VP (VBD had) (VP (VBN plunged) (NP-EXT (NP (CD 12) (NNS points) )(, ,) (ADJP (JJ equivalent) (PP (TO to) (NP (NP (QP (IN around) (DT a) (JJ 100-point) )(NN drop) )(PP-LOC (IN in) (NP (DT the) (NNP Dow) (NNS industrials) )))))))))))(. .) )) (TOP (S (PP-LOC (IN Under) (NP (NP (DT an) (NN agreement) )(VP (VBN signed) (NP (-NONE- *) )(PP (IN by) (NP-LGS (NP (DT the) (NNP Big) (NNP Board) )(CC and) (NP (DT the) (NNP Chicago) (NNP Mercantile) (NNP Exchange) ))))))(, ,) (NP-SBJ-1 (NN trading) )(VP (VBD was) (ADVP-TMP (RB temporarily) )(VP (VBN halted) (NP (-NONE- *-1) )(PP-LOC (IN in) (NP (NNP Chicago) ))))(. .) )) (TOP (S (PP-TMP (IN After) (NP (NP (DT the) (NN trading) (NN halt) )(PP-LOC (IN in) (NP (NP (DT the) (NNP S&P) (CD 500) (NN pit) )(PP-LOC (IN in) (NP (NNP Chicago) ))))))(, ,) (S (NP-SBJ-1 (NP (NNS waves) )(PP (IN of) (NP (NN selling) )))(VP (VBD continued) (S (NP-SBJ (-NONE- *-1) )(VP (TO to) (VP (VB hit) (NP (NP (NNS stocks) )(NP (PRP themselves) ))(PP-LOC (IN on) (NP (DT the) (NNP Big) (NNP Board) )))))))(, ,) (CC and)(S (NP-SBJ-2 (NNS specialists) )(VP (VBD continued) (S (NP-SBJ (-NONE- *-2) )(VP (TO to) (VP (VB notch) (NP (NNS prices) )(ADVP-DIR (RP down) ))))))(. .) )) (TOP (S (PP-PRP (IN As) (NP (DT a) (NN result) ))(, ,) (NP-SBJ (NP (DT the) (NN link) )(PP (IN between) (NP (DT the) (NNS futures) (CC and)(NN stock) (NNS markets) )))(VP (VBD ripped) (ADVP-CLR (RB apart) ))(. .) )) (TOP (S (PP (IN Without) (NP (NP (DT the) (NN guidepost) )(PP (IN of) (NP (NP (JJ stock-index) (NNS futures) )(: --) (NP (NP (DT the) (NN barometer) )(PP (IN of) (SBAR-NOM (WHADVP-2 (WRB where) )(S (NP-SBJ (NNS traders) )(VP (VBP think) (SBAR (-NONE- 0) (S (NP-SBJ-1 (DT the) (JJ overall) (NN stock) (NN market) )(VP (VBZ is) (VP (VBN headed) (NP (-NONE- *-1) )(ADVP-DIR (-NONE- *T*-2) ))))))))))(: --) ))))(NP-SBJ-3 (JJ many) (NNS traders) )(VP (VBD were) (ADJP-PRD (JJ afraid) (S (NP-SBJ (-NONE- *-3) )(VP (TO to) (VP (VB trust) (NP (NP (NN stock) (NNS prices) )(VP (VBN quoted) (NP (-NONE- *) )(PP-LOC (IN on) (NP (DT the) (NNP Big) (NNP Board) )))))))))(. .) )) (TOP (S (NP-SBJ-1 (DT The) (NNS futures) (NN halt) )(VP (VBD was) (ADVP (RB even) )(VP (VBN assailed) (NP (-NONE- *-1) )(PP (IN by) (NP-LGS (NNP Big) (NNP Board) (NN floor) (NNS traders) ))))(. .) )) (TOP (SINV (`` ``) (S-TPC-1 (NP-SBJ (PRP It) )(VP (VBD screwed) (NP (NNS things) )(PRT (RP up) )))(, ,) ('' '') (VP (VBD said) (S (-NONE- *T*-1) ))(NP-SBJ (CD one) (JJ major) (NN specialist) )(. .) )) (TOP (S (NP-SBJ (DT This) (NN confusion) )(VP (ADVP-MNR (RB effectively) )(VBD halted) (NP (NP (NP (CD one) (NN form) )(PP (IN of) (NP (NN program) (NN trading) )))(, ,) (NP (NN stock) (NN index) (NN arbitrage) )(, ,) (SBAR (WHNP-1 (WDT that) )(S (NP-SBJ (-NONE- *T*-1) )(VP (VP (ADVP-MNR (RB closely) )(VBZ links) (NP (DT the) (NNS futures) (CC and)(NN stock) (NNS markets) ))(, ,) (CC and)(VP (VBZ has) (VP (VBN been) (VP (VBN blamed) (NP (-NONE- *T*-1) )(PP (IN by) (NP-LGS (DT some) ))(PP-CLR (IN for) (NP (NP (DT the) (NN market) (POS 's) )(JJ big) (NNS swings) ))))))))))(. .) )) (TOP (S (-LRB- -LRB-)(PP-LOC (IN In) (NP (DT a) (JJ stock-index) (NN arbitrage) (NN sell) (NN program) ))(, ,) (NP-SBJ-1 (NNS traders) )(VP (VP (VBP buy) (CC or) (VBP sell) (NP (NP (JJ big) (NNS baskets) )(PP (IN of) (NP (NNS stocks) ))))(CC and) (VP (VBP offset) (NP (NP (DT the) (NN trade) )(PP-LOC (IN in) (NP (NNS futures) )))(S-PRP (NP-SBJ (-NONE- *-1) )(VP (TO to) (VP (VB lock) (PRT (RP in) )(NP (DT a) (NN price) (NN difference) ))))))(. .) (-RRB- -RRB-))) (TOP (S (`` ``) (S-TPC-3 (SBAR-TMP (WHADVP-2 (WRB When) )(S (NP-SBJ (DT the) (NN airline) (NN information) )(VP (VBD came) (PRT (RP through) )(ADVP-TMP (-NONE- *T*-2) ))))(, ,) (NP-SBJ (PRP it) )(VP (VBD cracked) (NP (NP (DT every) (NN model) )(SBAR (WHNP-1 (-NONE- 0) )(S (NP-SBJ (PRP we) )(VP (VBD had) (NP (-NONE- *T*-1) ))))(PP (IN for) (NP (DT the) (NN marketplace) )))))(, ,) ('' '') (VP (VBD said) (S (-NONE- *T*-3) ))(NP-SBJ (NP (DT a) (NN managing) (NN director) )(PP-LOC (IN at) (NP (NP (CD one) )(PP (IN of) (NP (DT the) (JJS largest) (NN program-trading) (NNS firms) )))))(. .) )) (TOP (S (`` ``) (NP-SBJ (PRP We) )(VP (VBD did) (RB n't) (ADVP (RB even) )(VP (VB get) (NP (DT a) (NN chance) (S (NP-SBJ (-NONE- *) )(VP (TO to) (VP (VB do) (NP (NP (DT the) (NNS programs) )(SBAR (WHNP-2 (-NONE- 0) )(S (NP-SBJ-1 (PRP we) )(VP (VBD wanted) (S (NP-SBJ (-NONE- *-1) )(VP (TO to) (VP (VB do) (NP (-NONE- *T*-2) ))))))))))))))(. .) ('' '') )) (TOP (S (CC But) (NP-SBJ-1 (NNS stocks) )(VP (VBD kept) (S (NP-SBJ (-NONE- *-1) )(VP (VBG falling) )))(. .) )) (TOP (S (NP-SBJ (DT The) (NNP Dow) (NNS industrials) )(VP (VBD were) (ADVP-PRD (RB down) (NP (CD 55) (NNS points) ))(PP-TMP (IN at) (NP (CD 3) (RB p.m.) ))(PP-TMP (IN before) (NP (DT the) (JJ futures-trading) (NN halt) )))(. .) )) (TOP (S (PP-TMP (IN At) (NP (CD 3:30) (RB p.m.) ))(, ,) (PP-TMP (IN at) (NP (NP (DT the) (NN end) )(PP (IN of) (NP (DT the) (`` ``) (VBG cooling) (RP off) ('' '') (NN period) ))))(, ,) (NP-SBJ (DT the) (NN average) )(VP (VBD was) (ADVP-PRD (RB down) (NP (CD 114.76) (NNS points) )))(. .) )) (TOP (S (ADVP-TMP (RB Meanwhile) )(, ,) (PP-TMP (IN during) (NP (DT the) (DT the) (NNP S&P) (NN trading) (NN halt) ))(, ,) (NP-SBJ-2 (NNP S&P) (NNS futures) (NN sell) (NNS orders) )(VP (VBD began) (S (NP-SBJ (-NONE- *-2) )(VP (VBG piling) (PRT (RP up) )))(, ,) (SBAR-ADV (IN while) (S (NP-SBJ-1 (NP (NNS stocks) )(PP-LOC (IN in) (NP (NNP New) (NNP York) )))(VP (VBD kept) (S (NP-SBJ (-NONE- *-1) )(VP (VBG falling) (ADVP-MNR (RB sharply) )))))))(. .) )) (TOP (S (NP-SBJ (NNP Big) (NNP Board) (NNP Chairman) (NNP John) (NNP J.) (NNP Phelan) )(VP (VBD said) (NP-TMP (NN yesterday) )(SBAR (-NONE- 0) (S (NP-SBJ (DT the) (NN circuit) (NN breaker) )(`` ``) (VP (VBD worked) (ADVP-MNR (RB well) )(ADVP-MNR (RB mechanically) )))))(. .) )) (TOP (S (NP-SBJ (PRP I) )(ADVP (RB just) )(VP (VBP think) (SBAR (-NONE- 0) (S (NP-SBJ (NP (PRP it) )(S (-NONE- *EXP*-1) ))(VP (VBZ 's) (ADJP-PRD (JJ nonproductive) )(PP-TMP (IN at) (NP (DT this) (NN point) ))(S-1 (NP-SBJ (-NONE- *) )(VP (TO to) (VP (VB get) (PP-DIR (IN into) (NP (DT a) (NN debate) (SBAR (IN if) (S (NP-SBJ (NN index) (NN arbitrage) )(VP (MD would) (VP (VB have) (VP (VBN helped) (CC or) (VBN hurt) (NP (NNS things) )))))))))))))))(. .) ('' '') )) (TOP (S (PP-LOC (IN Under) (NP (DT another) (JJ post-crash) (NN system) ))(, ,) (NP-SBJ (NNP Big) (NNP Board) (NNP President) (NNP Richard) (NNP Grasso) )(PRN (-LRB- -LRB-)(S (NP-SBJ (NNP Mr.) (NNP Phelan) )(VP (VBD was) (VP (VBG flying) (PP-DIR (TO to) (NP (NNP Bangkok) ))(SBAR-TMP (IN as) (S (NP-SBJ (DT the) (NN market) )(VP (VBD was) (VP (VBG falling) )))))))(-RRB- -RRB-) )(VP (VBD was) (VP (VBG talking) (PP-LOC (IN on) (NP (NP (DT an) (`` ``) (JJ inter-exchange) (JJ hot) (NN line) ('' '') )(PP (TO to) (NP (NP (DT the) (JJ other) (NNS exchanges) )(, ,) (NP (DT the) (NNP Securities) (CC and)(NNP Exchange) (NNP Commission) )(CC and) (NP (DT the) (NNP Federal) (NNP Reserve) (NNP Board) )))))))(. .) )) (TOP (S (NP-SBJ (PRP He) )(VP (VBD camped) (PRT (RP out) )(PP-LOC (IN at) (NP (NP (DT a) (JJ high-tech) (NN nerve) (NN center) )(PP-LOC (IN on) (NP (NP (DT the) (NN floor) )(PP (IN of) (NP (DT the) (NNP Big) (NNP Board) ))))(, ,) (SBAR (WHADVP-1 (WRB where) )(S (NP-SBJ (PRP he) )(VP (MD could) (VP (VB watch) (NP (NP (NNS updates) )(PP (IN on) (NP (NP (NNS prices) )(CC and) (NP (VBG pending) (NN stock) (NNS orders) ))))(ADVP-LOC (-NONE- *T*-1) ))))))))(. .) )) (TOP (S (S (PP-TMP (IN At) (NP (RB about) (CD 3:30) (RB p.m.) (NNP EDT) ))(, ,) (NP-SBJ-1 (NNP S&P) (NNS futures) )(VP (VBD resumed) (S (NP-SBJ (-NONE- *-1) )(VP (VBG trading) ))))(, ,) (CC and)(S (PP-TMP (IN for) (NP (DT a) (JJ brief) (NN time) ))(NP-SBJ-2 (DT the) (NNS futures) (CC and)(NN stock) (NNS markets) )(VP (VBD started) (S (NP-SBJ (-NONE- *-2) )(VP (TO to) (VP (VB come) (ADVP-DIR (RB back) (PP (IN in) (NP (NN line) ))))))))(. .) )) (TOP (S (NP-SBJ (NNS Buyers) )(VP (VBD stepped) (ADVP-DIR (IN in) (PP (TO to) (NP (DT the) (NNS futures) (NN pit) ))))(. .) )) (TOP (S (S (CC But) (NP-SBJ (NP (DT the) (NN build-up) )(PP (IN of) (NP (NNP S&P) (NNS futures) (NN sell) (NNS orders) )))(VP (VBD weighed) (PP-CLR (IN on) (NP (DT the) (NN market) ))))(, ,) (CC and)(S (NP-SBJ-1 (NP (DT the) (NN link) )(PP (IN with) (NP (NNS stocks) )))(VP (VBD began) (S (NP-SBJ (-NONE- *-1) )(VP (TO to) (VP (VB fray) (ADVP-TMP (RB again) ))))))(. .) )) (TOP (S (PP-TMP (IN At) (NP (RB about) (CD 3:45) ))(, ,) (S (NP-SBJ (DT the) (NNP S&P) (NN market) )(VP (VBD careened) (PP-DIR (TO to) (NP (NP (ADJP (RB still) (DT another) )(NN limit) (, ,))(PP (IN of) (NP (NP (CD 30) (NNS points) )(ADVP (RB down) )))))))(, ,) (CC and)(S (NP-SBJ-1 (NN trading) )(VP (VBD was) (VP (VBN locked) (NP (-NONE- *-1) )(ADVP-TMP (RB again) ))))(. .) )) (TOP (S (NP-SBJ (NNS Futures) (NNS traders) )(VP (VBP say) (SBAR (-NONE- 0) (S (NP-SBJ (DT the) (NNP S&P) )(VP (VBD was) (VP (VBG signaling) (SBAR (IN that) (S (NP-SBJ (DT the) (NNP Dow) )(VP (MD could) (VP (VB fall) (NP-EXT (NP (RB as) (JJ much) )(PP (IN as) (NP (CD 200) (NNS points) ))))))))))))(. .) )) (TOP (S (PP-TMP (IN During) (NP (DT this) (NN time) ))(, ,) (NP-SBJ-1 (JJ small) (NNS investors) )(VP (VBD began) (S (NP-SBJ (-NONE- *-1) )(VP (VBG ringing) (NP (PRP$ their) (NNS brokers) )))(, ,) (S-ADV (NP-SBJ (-NONE- *-1) )(VP (VBG wondering) (SBAR (IN whether) (S (NP-SBJ (DT another) (NN crash) )(VP (VBD had) (VP (VBN begun) )))))))(. .) )) (TOP (S (PP-LOC (IN At) (NP (NP (NNP Prudential-Bache) (NNP Securities) (NNP Inc.) )(, ,) (SBAR (WHNP-1 (WDT which) )(S (NP-SBJ-2 (-NONE- *T*-1) )(VP (VBZ is) (VP (VBG trying) (S (NP-SBJ (-NONE- *-2) )(VP (TO to) (VP (VB cater) (PP-CLR (TO to) (NP (JJ small) (NNS investors) )))))))))(, ,) ))(NP-SBJ (DT some) (JJ demoralized) (NNS brokers) )(VP (VBD thought) (SBAR (-NONE- 0) (S (NP-SBJ (DT this) )(VP (MD would) (VP (VB be) (NP-PRD (DT the) (JJ final) (NN confidence-crusher) ))))))(. .) )) (TOP (S (NP-SBJ (DT That) )(VP (VBZ 's) (SBAR-PRD (WHADVP-2 (WRB when) )(S (NP-SBJ-1 (NP (NNP George) (NNP L.) (NNP Ball) )(, ,) (NP (NP (NN chairman) )(PP (IN of) (NP (DT the) (NAC (NNP Prudential) (NNP Insurance) (NNP Co.) (PP (IN of) (NP (NNP America) )))(NN unit) )))(, ,) )(VP (VBD took) (PP-CLR (TO to) (NP (DT the) (JJ internal) (NN intercom) (NN system) ))(S-PRP (NP-SBJ (-NONE- *-1) )(VP (TO to) (VP (VB declare) (SBAR (IN that) (S (NP-SBJ (DT the) (NN plunge) )(VP (VBD was) (ADJP-PRD (RB only) (`` ``) (JJ mechanical) )))))))(ADVP-TMP (-NONE- *T*-2) )))))(. .) ('' '') )) (TOP (S (`` ``) (NP-SBJ (PRP I) )(VP (VBP have) (NP (DT a) (NN hunch) (SBAR (IN that) (S (NP-SBJ (NP (DT this) (JJ particular) (NN decline) )(NP-TMP (NN today) ))(VP (VBZ is) (NP-PRD (NP (NN something) )(`` `) (NP (NP (JJR more) (NN ado) )(PP (IN about) (NP (JJR less) )))))))))(. .) ('' ') )) (TOP (S (S-TPC-2 (NP-SBJ (NP (PRP It) )(S (-NONE- *EXP*-1) ))(VP (MD would) (VP (VB be) (NP-PRD (PRP$ my) (NN inclination) )(S-1 (NP-SBJ (-NONE- *) )(VP (TO to) (VP (VB advise) (NP-3 (NNS clients) )(S (NP-SBJ (-NONE- *-3) )(VP (VP (RB not) (TO to) (VP (VB sell) ))(, ,) (VP (TO to) (VP (VB look) (PP-CLR (IN for) (NP (DT an) (NN opportunity) (S (NP-SBJ (-NONE- *) )(VP (TO to) (VP (VB buy) )))))))))))))))(, ,) ('' '') (NP-SBJ (NNP Mr.) (NNP Ball) )(VP (VBD told) (NP (DT the) (NNS brokers) )(S (-NONE- *T*-2) ))(. .) )) (TOP (S (PP-LOC (IN At) (NP (NP (NNP Merrill) (NNP Lynch) (CC &) (NNP Co.) )(, ,) (NP (NP (DT the) (NN nation) (POS 's) )(JJS biggest) (NN brokerage) (NN firm) )))(, ,) (NP-SBJ-3 (NP (DT a) (NN news) (NN release) )(VP (-NONE- *ICH*-2) ))(VP (VBD was) (VP (VBN prepared) (NP (-NONE- *-3) )(VP-2 (VBN headlined) (S (NP-SBJ (-NONE- *) )(`` ``) (S-TTL-PRD (NP-SBJ (NNP Merrill) (NNP Lynch) )(VP (NNP Comments) (PP-CLR (IN on) (NP (NNP Market) (NNP Drop) ))))))))(. .) ('' '') )) (TOP (S (NP-SBJ (DT The) (NN release) )(VP (VBD cautioned) (SBAR (SBAR (IN that) (`` ``) (S (NP-SBJ (EX there) )(VP (VBP are) (NP-PRD (NP (JJ significant) (NNS differences) )(PP (IN between) (NP (NP (DT the) (JJ current) (NN environment) )(CC and) (NP (NP (IN that) )(PP (IN of) (NP (NNP October) (CD 1987) ))))))))('' '') )(CC and) (SBAR (IN that) (S (NP-SBJ (EX there) )(VP (VBP are) (ADVP-TMP (RB still) )(NP-PRD (`` ``) (NP (JJ attractive) (NN investment) (NNS opportunities) )('' '') (PP-LOC (IN in) (NP (DT the) (NN stock) (NN market) ))))))))(. .) )) (TOP (S (ADVP (RB However) )(, ,) (NP-SBJ (NP (NNP Jeffrey) (NNP B.) (NNP Lane) )(, ,) (NP (NP (NN president) )(PP (IN of) (NP (NNP Shearson) (NNP Lehman) (NNP Hutton) (NNP Inc.) )))(, ,) )(VP (VBD said) (SBAR (IN that) (S (NP-SBJ-1 (NP (NNP Friday) (POS 's) )(NN plunge) )(VP (VBZ is) (`` ``) (VP (VBG going) (S (NP-SBJ (-NONE- *-1) )(VP (TO to) (VP (VB set) (PRT (RP back) )('' '') (NP (NP (NNS relations) )(PP (IN with) (NP (NNS customers) ))))))(, ,) (`` ``) (SBAR-PRP (IN because) (S (NP-SBJ (PRP it) )(VP (VBZ reinforces) (NP (NP (DT the) (NN concern) )(PP (IN of) (NP (NN volatility) )))))))))))(. .) )) (TOP (S (CC And) (NP-SBJ (PRP I) )(VP (VBP think) (SBAR (-NONE- 0) (S (NP-SBJ (NP (DT a) (NN lot) )(PP (IN of) (NP (NNS people) )))(VP (MD will) (VP (VB harp) (PP-CLR (IN on) (NP (NN program) (NN trading) )))))))(. .) )) (TOP (S (NP-SBJ-1 (PRP It) )(VP (VBZ 's) (VP (VBG going) (S (NP-SBJ (-NONE- *-1) )(VP (TO to) (VP (VB bring) (NP (DT the) (NN debate) )(ADVP-DIR (RB right) (RB back) (PP (TO to) (NP (DT the) (NN forefront) ))))))))(. .) ('' '') )) (TOP (S (SBAR-TMP (IN As) (S (NP-SBJ (DT the) (NNP Dow) (JJ average) )(VP (NN ground) (PP-DIR (TO to) (NP (PRP$ its) (JJ final) (CD 190.58) (NN loss) ))(NP-TMP (NNP Friday) ))))(, ,) (NP-SBJ (DT the) (NNP S&P) (NN pit) )(VP (VBD stayed) (ADJP-PRD (JJ locked) (PP (IN at) (NP (PRP$ its) (JJ 30-point) (NN trading) (NN limit) ))))(. .) )) (TOP (S (NP-SBJ (NP (NNP Jeffrey) (NNP Yass) )(PP (IN of) (NP (NN program) (NN trader) (NNP Susquehanna) (NNP Investment) (NNP Group) )))(VP (VBD said) (SBAR (-NONE- 0) (S (NP-SBJ (NP (CD 2,000) (NNP S&P) (NNS contracts) )(NP (-NONE- *ICH*-1) ))(VP (VBD were) (PP-PRD (IN for) (NP (NN sale) ))(PP-TMP (IN on) (NP (DT the) (NN close) ))(, ,) (NP-1 (NP (DT the) (NN equivalent) )(PP (IN of) (NP (NP (QP ($ $) (CD 330) (CD million) )(-NONE- *U*) )(PP (IN in) (NP (NN stock) )))))))))(. .) )) (TOP (S (CC But) (NP-SBJ (EX there) )(VP (VBD were) (NP-PRD (DT no) (NNS buyers) ))(. .) )) (TOP (S (S-TPC-1 (SBAR-ADV (IN While) (S (NP-SBJ (NP (NNP Friday) (POS 's) )(NN debacle) )(VP (VB involved) (ADVP (RB mainly) )(NP (NP (JJ professional) (NNS traders) )(PP (RB rather) (IN than) (NP (NNS investors) ))))))(, ,) (NP-SBJ (PRP it) )(VP (VBD left) (S (NP-SBJ (DT the) (NN market) )(ADJP-PRD (JJ vulnerable) (PP (TO to) (NP (JJ continued) (NN selling) )))(NP-TMP (DT this) (NN morning) ))))(, ,) (NP-SBJ (NNS traders) )(VP (VBD said) (SBAR (-NONE- 0) (S (-NONE- *T*-1) )))(. .) )) (TOP (S (NP-SBJ (JJ Stock-index) (NNS futures) (NNS contracts) )(VP (VBD settled) (PP-CLR (IN at) (NP (NP (ADJP (RB much) (JJR lower) )(NNS prices) )(PP (IN than) (NP (NP (NNS indexes) )(PP (IN of) (NP (NP (DT the) (NN stock) (NN market) )(NP (PRP itself) ))))))))(. .) )) (TOP (S (PP-LOC (IN At) (NP (DT those) (NNS levels) ))(, ,) (NP-SBJ-3 (NNS stocks) )(VP (VBP are) (VP (VBN set) (PRT (RP up) )(S (NP-SBJ-1 (-NONE- *-3) )(VP (TO to) (VP (VB be) (VP (VBN hammered) (NP (-NONE- *-1) )(PP (IN by) (NP-LGS (NP (NN index) (NNS arbitragers) )(, ,) (SBAR (WHNP-2 (WP who) )(S (NP-SBJ-4 (-NONE- *T*-2) )(VP (VP (VBP lock) (PRT (RP in) )(NP (NNS profits) )(PP-MNR (IN by) (S-NOM (NP-SBJ (-NONE- *-4) )(VP (VBG buying) (NP (NNS futures) )(SBAR-TMP (WHADVP-5 (WRB when) )(S (NP-SBJ (NNS futures) (NNS prices) )(VP (VBP fall) (ADVP-TMP (-NONE- *T*-5) ))))))))(, ,) (CC and)(VP (ADVP-TMP (RB simultaneously) )(VBP sell) (PRT (RP off) )(NP (NNS stocks) )))))))))))))(. .) )) (TOP (S (CC But) (NP-SBJ (NN nobody) )(VP (VBZ knows) (SBAR (WHPP-1 (IN at) (WHNP (WP what) (NN level) ))(S (NP-SBJ (DT the) (NNS futures) (CC and)(NNS stocks) )(VP (MD will) (VP (VB open) (NP-TMP (NN today) )(PP-LOC (-NONE- *T*-1) ))))))(. .) )) (TOP (S (NP-SBJ (NP (DT The) (NN de-linkage) )(PP (IN between) (NP (DT the) (NN stock) (CC and)(NNS futures) (NNS markets) ))(NP-TMP (NNP Friday) ))(VP (MD will) (ADVP (RB undoubtedly) )(VP (NN cause) (NP (NP (JJ renewed) (NN debate) )(PP (IN about) (SBAR (IN whether) (S (NP-SBJ (NNP Wall) (NNP Street) )(VP (VBZ is) (ADJP-PRD (RB properly) (JJ prepared) (PP (IN for) (NP (DT another) (NN crash) (NN situation) ))))))))))(. .) )) (TOP (S (NP-SBJ (NP (DT The) (NNP Big) (NNP Board) (POS 's) )(NNP Mr.) (NNP Grasso) )(VP (VBD said) (, ,)(SBAR (-NONE- 0) (`` ``) (S (NP-SBJ (PRP$ Our) (JJ systemic) (NN performance) )(VP (VBD was) (ADJP-PRD (JJ good) )))))(. .) ('' '') )) (TOP (S (CC But) (NP-SBJ (DT the) (NN exchange) )(VP (MD will) (`` ``) (VP (VB look) (PP-CLR (IN at) (NP (NP (DT the) (NN performance) )(PP (IN of) (NP (DT all) (NNS specialists) ))(PP-LOC (IN in) (NP (DT all) (NNS stocks) ))))))(. .) )) (TOP (S (S-TPC-3 (ADVP (RB Obviously) )(NP-SBJ (PRP we) )(VP (MD 'll) (VP (VB take) (NP (NP (DT a) (JJ close) (NN look) )(PP (IN at) (NP (NP (DT any) (NN situation) )(SBAR (WHPP-2 (IN in) (WHNP (WDT which) ))(S (NP-SBJ (PRP we) )(VP (VBP think) (SBAR (-NONE- 0) (S (NP-SBJ-1 (DT the) (ADJP (JJ dealer-community) )(NNS obligations) )(VP (VBD were) (RB n't) (VP (VBN met) (NP (-NONE- *-1) )(PP-LOC (-NONE- *T*-2) ))))))))))))))(, ,) ('' '') (NP-SBJ (PRP he) )(VP (VBD said) (S (-NONE- *T*-3) ))(. .) )) (TOP (S (-LRB- -LRB-)(NP-SBJ (-NONE- *) )(VP (VB See) (NP (NP (JJ related) (NN story) )(: :) (NP (`` ``) (S-TTL (NP-SBJ (NNP Fed) )(ADJP-PRD (JJ Ready) (S (NP-SBJ (-NONE- *) )(VP (TO to) (VP (VB Inject) (NP (JJ Big) (NNS Funds) ))))))('' '') (: --) (NP-LOC (NNP WSJ) )(NP-TMP (NNP Oct.) (CD 16) (, ,)(CD 1989) ))))(-RRB- -RRB-) )) (TOP (S (CC But) (NP-SBJ (NNS specialists) )(VP (VBP complain) (ADVP-MNR (RB privately) )(SBAR (IN that) (S (PP-LOC (ADVP (RB just) (IN as) )(IN in) (NP (DT the) (CD 1987) (NN crash) ))(, ,) (NP-SBJ (NP (DT the) (`` ``) (JJ upstairs) ('' '') (NNS firms) )(: --) (NP (NP (JJ big) (NN investment) (NNS banks) )(SBAR (WHNP-1 (WDT that) )(S (NP-SBJ-2 (-NONE- *T*-1) )(VP (VBP support) (NP (DT the) (NN market) )(PP-MNR (IN by) (S-NOM (NP-SBJ (-NONE- *-2) )(VP (VBG trading) (NP (NP (JJ big) (NNS blocks) )(PP (IN of) (NP (NN stock) ))))))))))(: --) )(VP (VBD stayed) (PP-LOC-CLR (IN on) (NP (DT the) (NNS sidelines) ))(PP-TMP (IN during) (NP (NP (NNP Friday) (POS 's) )(NN blood-letting) ))))))(. .) )) (TOP (S (NP-SBJ (NNP Mr.) (NNP Phelan) )(VP (VBD said) (, ,)(SBAR (-NONE- 0) (S (`` ``) (NP-SBJ (NP (PRP It) )(S (-NONE- *EXP*-2) ))(VP (MD will) (VP (VB take) (NP (DT another) (NN day) (QP (CC or) (CD two) ))('' '') (S-2 (NP-SBJ (-NONE- *) )(VP (TO to) (VP (VB analyze) (SBAR (WHNP-1 (WP who) )(S (NP-SBJ (-NONE- *T*-1) )(VP (VBD was) (VP (VBG buying) (CC and)(VBG selling) (NP-TMP (NNP Friday) )))))))))))))(. .) )) (TOP (S (PP (VBG Concerning) (NP (NP (PRP$ your) (NNP Sept.) (CD 21) (JJ page-one) (NN article) )(PP (IN on) (NP (NP (NNP Prince) (NNP Charles) )(CC and) (NP (DT the) (NNS leeches) )))))(: :) (NP-SBJ (NP (PRP It) )(SBAR (-NONE- *EXP*-1) ))(VP (VBZ 's) (NP-PRD (QP (DT a) (JJ few) (CD hundred) )(NNS years) )(SBAR-1 (IN since) (S (NP-SBJ (NNP England) )(VP (VBZ has) (VP (VBN been) (NP-PRD (DT a) (NN kingdom) ))))))(. .) )) (TOP (S (NP-SBJ (PRP It) )(VP (VBZ 's) (ADVP-TMP (RB now) )(NP-PRD (NP (NP (DT the) (NNP United) (NNP Kingdom) )(PP (IN of) (NP (NP (NNP Great) (NNP Britain) )(CC and) (NP (NNP Northern) (NNP Ireland) ))))(, ,) (PP (VBG comprising) (NP (NP (NNP Wales) )(, ,) (NP (NNP Northern) (NNP Ireland) )(, ,) (NP (NNP Scotland) )(, ,) (CC and)(: ...) (INTJ (UH oh) (UH yes) )(, ,) (NP (NNP England) )(, ,) (RB too) ))))(. .) )) (TOP (S (NP-SBJ (-NONE- *) )(ADVP (RB Just) )(VP (VBD thought) (SBAR (-NONE- 0) (S (NP-SBJ-1 (PRP you) )(VP (MD 'd) (VP (VB like) (S (NP-SBJ (-NONE- *-1) )(VP (TO to) (VP (VB know) ))))))))(. .) )) (TOP (NP (NNP George) (NNP Morton) )) (TOP (S (NP-SBJ (NAC (NNP Ports) (PP (IN of) (NP (NNP Call) )))(NNP Inc.) )(VP (VBD reached) (NP (NNS agreements) (S (NP-SBJ (-NONE- *) )(VP (TO to) (VP (VB sell) (NP (PRP$ its) (VBG remaining) (CD seven) (NN aircraft) )(PP-DTV (TO to) (NP (NP (NNS buyers) )(SBAR (WHNP-2 (WDT that) )(S (NP-SBJ-1 (-NONE- *T*-2) )(VP (VBD were) (RB n't) (VP (VBN disclosed) (NP (-NONE- *-1) ))))))))))))(. .) )) (TOP (S (NP-SBJ (DT The) (NNS agreements) )(VP (VBP bring) (PP-DIR (TO to) (NP (NP (DT a) (NN total) )(PP (IN of) (NP (CD nine) ))))(NP (NP (DT the) (NN number) )(PP (IN of) (NP (NNS planes) ))(SBAR (WHNP-1 (-NONE- 0) )(S (NP-SBJ (DT the) (NN travel) (NN company) )(VP (VBZ has) (VP (VBN sold) (NP (-NONE- *T*-1) )(NP-TMP (DT this) (NN year) )(PP (IN as) (NP (NP (NN part) )(PP (IN of) (NP (DT a) (NN restructuring) ))))))))))(. .) )) (TOP (S (NP-SBJ (DT The) (NN company) )(VP (VBD said) (SBAR (-NONE- 0) (S (NP-SBJ-1 (NP (DT a) (NN portion) )(PP (IN of) (NP (NP (DT the) (QP ($ $) (CD 32) (CD million) )(-NONE- *U*) )(VP (VBN realized) (NP (-NONE- *) )(PP-CLR (IN from) (NP (DT the) (NNS sales) ))))))(VP (MD will) (VP (VB be) (VP (VBN used) (NP-2 (-NONE- *-1) )(S-CLR (NP-SBJ (-NONE- *-2) )(VP (TO to) (VP (VB repay) (NP (NP (PRP$ its) (NN bank) (NN debt) )(CC and) (NP (NP (JJ other) (NNS obligations) )(VP (VBG resulting) (PP-CLR (IN from) (NP (DT the) (ADJP (RB currently) (VBN suspended) )(JJ air-charter) (NNS operations) ))))))))))))))(. .) )) (TOP (S (ADVP-TMP (RBR Earlier) )(NP-SBJ (DT the) (NN company) )(VP (VBD announced) (SBAR (-NONE- 0) (S (NP-SBJ (PRP it) )(VP (MD would) (VP (VB sell) (NP (NP (PRP$ its) (VBG aging) (NN fleet) )(PP (IN of) (NP (NNP Boeing) (NNP Co.) (NNPS 707s) )))(PP-PRP (IN because) (IN of) (NP (VBG increasing) (NN maintenance) (NNS costs) )))))))(. .) )) (TOP (S (NP-SBJ (NP (DT A) (NN consortium) )(PP (IN of) (NP (JJ private) (NNS investors) ))(VP (VBG operating) (PP-CLR (IN as) (NP (NNP LJH) (NNP Funding) (NNP Co.) ))))(VP (VBD said) (SBAR (-NONE- 0) (S (NP-SBJ (PRP it) )(VP (VBZ has) (VP (VBN made) (NP (NP (DT a) (ADJP (QP ($ $) (CD 409) (CD million) )(-NONE- *U*) )(NN cash) (NN bid) )(PP (IN for) (NP (NP (JJS most) )(PP (IN of) (NP (NP (NNP L.J.) (NNP Hooker) (NNP Corp.) (POS 's) )(NN real-estate) (CC and)(NN shopping-center) (NNS holdings) ))))))))))(. .) )) (TOP (S (NP-SBJ (DT The) (ADJP (QP ($ $) (CD 409) (CD million) )(-NONE- *U*) )(NN bid) )(VP (VBZ includes) (NP (NP (DT the) (NN assumption) )(PP (IN of) (NP (NP (DT an) (JJ estimated) (QP ($ $) (CD 300) (CD million) )(-NONE- *U*) )(PP (IN in) (NP (NP (JJ secured) (NNS liabilities) )(PP (IN on) (NP (DT those) (NNS properties) )))))))(, ,) (PP (VBG according) (PP (TO to) (NP (NP (DT those) )(VP (VBG making) (NP (DT the) (NN bid) ))))))(. .) )) (TOP (S (NP-SBJ-1 (DT The) (NN group) )(VP (VBZ is) (VP (VBN led) (NP (-NONE- *-1) )(PP (IN by) (NP-LGS (NP (NP (NNP Jay) (NNP Shidler) )(, ,) (NP (NP (JJ chief) (JJ executive) (NN officer) )(PP (IN of) (NP (NP (NNP Shidler) (NNP Investment) (NNP Corp.) )(PP-LOC (IN in) (NP (NNP Honolulu) ))))))(, ,) (CC and)(NP (NP (NNP A.) (NNP Boyd) (NNP Simpson) )(, ,) (NP (NP (JJ chief) (NN executive) )(PP (IN of) (NP (DT the) (JJ Atlanta-based) (NNP Simpson) (NNP Organization) (NNP Inc) ))))))))(. .) )) (TOP (S (S (NP-SBJ-1 (NP (NNP Mr.) (NNP Shidler) (POS 's) )(NN company) )(VP (VP (VBZ specializes) (PP-CLR (IN in) (NP (JJ commercial) (NN real-estate) (NN investment) )))(CC and) (VP (VBZ claims) (S (NP-SBJ (-NONE- *-1) )(VP (TO to) (VP (VB have) (NP (NP (QP ($ $) (CD 1) (CD billion) )(-NONE- *U*) )(PP (IN in) (NP (NNS assets) )))))))))(: ;) (S (NP-SBJ (NNP Mr.) (NNP Simpson) )(VP (VBZ is) (NP-PRD (NP (DT a) (NN developer) )(CC and) (NP (NP (DT a) (JJ former) (JJ senior) (NN executive) )(PP (IN of) (NP (NNP L.J.) (NNP Hooker) ))))))(. .) )) (TOP (SINV (`` ``) (S-TPC-2 (S (NP-SBJ (DT The) (NNS assets) )(VP (VBP are) (ADJP-PRD (JJ good) )))(, ,) (CC but) (S (NP-SBJ (PRP they) )(VP (VBP require) (NP (NP (JJR more) (NN money) (CC and)(NN management) )('' '') (SBAR (IN than) (S (NP-SBJ-1 (-NONE- *) )(VP (MD can) (VP (VB be) (VP (VBN provided) (NP (-NONE- *-1) )(PP-LOC (IN in) (NP (NP (NNP L.J.) (NNP Hooker) (POS 's) )(JJ current) (NN situation) )))))))))))(, ,) (VP (VBD said) (SBAR (-NONE- 0) (S (-NONE- *T*-2) )))(NP-SBJ (NNP Mr.) (NNP Simpson) )(PP-LOC (IN in) (NP (DT an) (NN interview) ))(. .) (`` ``) )) (TOP (S (NP-SBJ (NP (NNP Hooker) (POS 's) )(NN philosophy) )(VP (VBD was) (S-PRD (NP-SBJ (-NONE- *) )(VP (TO to) (VP (VB build) (CC and)(VB sell) ))))(. .) )) (TOP (S (NP-SBJ-1 (PRP We) )(VP (VBP want) (S (NP-SBJ (-NONE- *-1) )(VP (TO to) (VP (VB build) (CC and)(VB hold) ))))(. .) ('' '') )) (TOP (S (NP-SBJ (NP (NNP L.J.) (NNP Hooker) )(, ,) (VP (VBN based) (NP (-NONE- *) )(PP-LOC-CLR (IN in) (NP (NNP Atlanta) )))(, ,) )(VP (VBZ is) (VP (VBG operating) (PP (IN with) (NP (NP (NN protection) )(PP (IN from) (NP (PRP$ its) (NNS creditors) ))(PP-LOC (IN under) (NP (NP (NNP Chapter) (CD 11) )(PP (IN of) (NP (DT the) (NNP U.S.) (NNP Bankruptcy) (NNP Code) ))))))))(. .) )) (TOP (S (NP-SBJ-1 (NP (PRP$ Its) (NN parent) (NN company) )(, ,) (NP (NP (NNP Hooker) (NNP Corp.) )(PP (IN of) (NP (NP (NNP Sydney) )(, ,) (NP (NNP Australia) ))))(, ,) )(VP (VBZ is) (ADVP-TMP (RB currently) )(VP (VBG being) (VP (VBN managed) (NP (-NONE- *-1) )(PP (IN by) (NP-LGS (DT a) (JJ court-appointed) (JJ provisional) (NN liquidator) )))))(. .) )) (TOP (S (NP-SBJ (NP (NNP Sanford) (NNP Sigoloff) )(, ,) (NP (NP (JJ chief) (NN executive) )(PP (IN of) (NP (NNP L.J.) (NNP Hooker) )))(, ,) )(VP (VBD said) (NP-TMP (NN yesterday) )(PP-LOC (IN in) (NP (DT a) (NN statement) ))(SBAR (SBAR (IN that) (S (NP-SBJ (PRP he) )(VP (VBZ has) (RB not) (ADVP-TMP (RB yet) )(VP (VBN seen) (NP (DT the) (NN bid) )))))(CC but) (SBAR (IN that) (S (NP-SBJ (PRP he) )(VP (MD would) (VP (VP (VB review) (NP (PRP it) ))(CC and) (VP (VB bring) (NP (PRP it) )(PP-DIR (TO to) (NP (NP (DT the) (NN attention) )(PP (IN of) (NP (DT the) (NNS creditors) (NN committee) )))))))))))(. .) )) (TOP (S (NP-SBJ-1 (DT The) (ADJP (QP ($ $) (CD 409) (CD million) )(-NONE- *U*) )(NN bid) )(VP (VBZ is) (VP (VBN estimated) (NP-2 (-NONE- *-1) )(PP (IN by) (NP-LGS (NNP Mr.) (NNP Simpson) ))(PP-CLR (IN as) (S-NOM (NP-SBJ (-NONE- *-2) )(VP (VBG representing) (NP (NP (CD 75) (NN %) )(PP (IN of) (NP (NP (DT the) (NN value) )(PP (IN of) (NP (NP (DT all) (NNP Hooker) (NN real-estate) (NNS holdings) )(PP-LOC (IN in) (NP (DT the) (NNP U.S.) ))))))))))))(. .) )) (TOP (SINV (VP-TPC-1 (RB Not) (VBN included) (NP (-NONE- *) )(PP-CLR (IN in) (NP (DT the) (NN bid) )))(VP (VBP are) (VP (-NONE- *T*-1) ))(NP-SBJ (NP (NP (NNP Bonwit) (NNP Teller) )(CC or) (NP (NNP B.) (NNP Altman) (CC &) (NNP Co.) ))(, ,) (NP (NP (NNP L.J.) (NNP Hooker) (POS 's) )(NN department-store) (NNS chains) ))(. .) )) (TOP (S (NP-SBJ (DT The) (NN offer) )(VP (VBZ covers) (NP (NP (NP (DT the) (JJ massive) (CD 1.8) (JJ million-square-foot) (NNP Forest) (NNP Fair) (NNP Mall) )(PP-LOC (IN in) (NP (NNP Cincinnati) )))(, ,) (NP (NP (DT the) (CD 800,000) (JJ square-foot) (NNP Richland) (NNP Fashion) (NNP Mall) )(PP-LOC (IN in) (NP (NP (NNP Columbia) )(, ,) (NP (NNP S.C.) ))))(, ,) (CC and)(NP (NP (DT the) (CD 700,000) (JJ square-foot) (NNP Thornton) (NNP Town) (NNP Center) (NN mall) )(PP-LOC (IN in) (NP (NP (NNP Thornton) )(, ,) (NP (NNP Colo) ))))))(. .) )) (TOP (S (S (NP-SBJ (DT The) (NNP Thornton) (NN mall) )(VP (VBD opened) (NP-TMP (NNP Sept.) (CD 19) )(PP (IN with) (NP (NP (DT a) (NP (NNP Bigg) (POS 's) )(NN hypermarket) )(PP (IN as) (NP (PRP$ its) (NN anchor) ))))))(: ;) (S (NP-SBJ-1 (DT the) (NNP Columbia) (NN mall) )(VP (VBZ is) (VP (VBN expected) (S (NP-SBJ (-NONE- *-1) )(VP (TO to) (VP (VB open) (NP-TMP (NNP Nov.) (CD 15) )))))))(. .) )) (TOP (S (NP-SBJ (NP (JJ Other) (NNP Hooker) (NNS properties) )(VP (VBN included) (NP (-NONE- *) )))(VP (VBP are) (NP-PRD (NP (NP (NP (DT a) (JJ 20-story) (NN office) (NN tower) )(PP-LOC (IN in) (NP (JJ midtown) (NNP Atlanta) )))(, ,) (VP (VBN expected) (S (NP-SBJ-1 (-NONE- *) )(VP (TO to) (VP (VB be) (VP (VBN completed) (NP (-NONE- *-1) )(NP-TMP (IN next) (NNP February) )))))))(: ;) (NP (NP (JJ vacant) (NN land) (NNS sites) )(PP-LOC (IN in) (NP (NNP Florida) (CC and)(NNP Ohio) )))(: ;) (NP (NP (NNP L.J.) (NNP Hooker) (NNP International) )(, ,) (NP (NP (DT the) (JJ commercial) (NN real-estate) (NN brokerage) (NN company) )(SBAR (WHNP-2 (WDT that) )(S (NP-SBJ (-NONE- *T*-2) )(ADVP-TMP (RB once) )(VP (VBD did) (NP (NN business) )(PP (IN as) (NP (NNP Merrill) (NNP Lynch) (NNP Commercial) (NNP Real) (NNP Estate) )))))))(, ,) (CC plus) (NP (JJ other) (NN shopping) (NNS centers) )))(. .) )) (TOP (S (NP-SBJ-1 (DT The) (NN consortium) )(VP (VBD was) (VP (VBN put) (NP (-NONE- *-1) )(ADVP-CLR (RB together) )(PP (IN by) (NP-LGS (NP (NNP Hoare) (NNP Govett) )(, ,) (NP (NP (DT the) (JJ London-based) (NN investment) (NN banking) (NN company) )(SBAR (WHNP-2 (WDT that) )(S (NP-SBJ (-NONE- *T*-2) )(VP (VBZ is) (NP-PRD (NP (DT a) (NN subsidiary) )(PP (IN of) (NP (NNP Security) (NNP Pacific) (NNP Corp) )))))))))))(. .) )) (TOP (SINV (`` ``) (S-TPC (NP-SBJ (PRP We) )(VP (VBP do) (RB n't) (VP (VB anticipate) (NP (NP (DT any) (NNS problems) )(PP-LOC (IN in) (S-NOM (NP-SBJ (-NONE- *) )(VP (VBG raising) (NP (NP (DT the) (NN funding) )(PP (IN for) (NP (DT the) (NN bid) ))))))))))(, ,) ('' '') (VP (VBD said) )(NP-SBJ (NP (NNP Allan) (NNP Campbell) )(, ,) (NP (NP (DT the) (NN head) )(PP (IN of) (NP (NNS mergers) (CC and)(NNS acquisitions) ))(PP-LOC (IN at) (NP (NNP Hoare) (NNP Govett) ))))(, ,) (PP-LOC (IN in) (NP (DT an) (NN interview) ))(. .) )) (TOP (S (NP-SBJ (NNP Hoare) (NNP Govett) )(VP (VBZ is) (VP (VBG acting) (PP-CLR (IN as) (NP (NP (DT the) (NN consortium) (POS 's) )(NN investment) (NNS bankers) ))))(. .) )) (TOP (S (PP (VBG According) (PP (TO to) (NP (NP (NNS people) )(ADJP (JJ familiar) (PP (IN with) (NP (DT the) (NN consortium) ))))))(, ,) (NP-SBJ-2 (DT the) (NN bid) )(VP (VBD was) (VP (JJ code-named) (S (NP-SBJ (-NONE- *-2) )(NP-PRD (NP (NNP Project) (NNP Klute) )(, ,) (NP (NP (DT a) (NN reference) )(PP (TO to) (NP (NP (DT the) (NN film) (`` ``) (NX-TTL (NNP Klute) )('' '') )(SBAR (WHPP-3 (IN in) (WHNP (WDT which) ))(S (NP-SBJ-1 (NP (DT a) (NN prostitute) )(VP (VBN played) (NP (-NONE- *) )(PP (IN by) (NP-LGS (NN actress) (NNP Jane) (NNP Fonda) ))))(VP (VBZ is) (VP (VBN saved) (NP (-NONE- *-1) )(PP-CLR (IN from) (NP (DT a) (JJ psychotic) (NN businessman) ))(PP (IN by) (NP-LGS (NP (DT a) (NN police) (NN officer) )(VP (VBN named) (S (NP-SBJ (-NONE- *) )(NP-PRD (NNP John) (NNP Klute) )))))(PP-LOC (-NONE- *T*-3) ))))))))))))(. .) )) (TOP (S (NP-SBJ (NNP L.J.) (NNP Hooker) )(VP (VBD was) (NP-PRD (NP (DT a) (JJ small) (JJ home-building) (NN company) )(VP (VBN based) (NP (-NONE- *) )(PP-LOC-CLR (IN in) (NP (NNP Atlanta) ))))(PP-TMP (IN in) (NP (NP (CD 1979) )(SBAR (WHADVP-3 (WRB when) )(S (NP-SBJ-1 (NNP Mr.) (NNP Simpson) )(VP (VBD was) (VP (VBN hired) (NP-2 (-NONE- *-1) )(S-PRP (NP-SBJ (-NONE- *-2) )(VP (TO to) (VP (VB push) (NP (PRP it) )(PP-DIR (IN into) (NP (JJ commercial) (NN development) )))))(ADVP-TMP (-NONE- *T*-3) ))))))))(. .) )) (TOP (S (NP-SBJ (DT The) (NN company) )(VP (VBD grew) (ADVP-MNR (RB modestly) )(PP-TMP (IN until) (NP (NP (CD 1986) )(, ,) (SBAR (WHADVP-2 (WRB when) )(S (NP-SBJ-1 (NP (DT a) (NN majority) (NN position) )(PP-LOC (IN in) (NP (NNP Hooker) (NNP Corp.) )))(VP (VBD was) (VP (VBN acquired) (NP (-NONE- *-1) )(PP (IN by) (NP-LGS (NP (JJ Australian) (NN developer) (NNP George) (NNP Herscu) )(, ,) (ADVP-TMP (RB currently) )(NP (NP (NNP Hooker) (POS 's) )(NN chairman) )))(ADVP-TMP (-NONE- *T*-2) ))))))))(. .) )) (TOP (S (NP-SBJ-2 (NNP Mr.) (NNP Herscu) )(VP (VBD proceeded) (S (NP-SBJ (-NONE- *-2) )(VP (TO to) (VP (VB launch) (NP (NP (DT an) (ADJP (JJ ambitious) (, ,)(CC but) (JJ ill-fated) (, ,))(ADJP (QP ($ $) (CD 1) (CD billion) )(-NONE- *U*) )(NN acquisition) (NN binge) )(SBAR (WHNP-1 (WDT that) )(S (NP-SBJ (-NONE- *T*-1) )(VP (VBD included) (NP (NP (NP (NNP Bonwit) (NNP Teller) )(CC and) (NP (NNP B.) (NNP Altman) (CC &) (NNP Co.) ))(, ,) (CONJP (RB as) (RB well) (IN as) )(NP (NP (NN majority) (NNS positions) )(PP-LOC (IN in) (NP (NP (NP (NNP Merksamer) (NNP Jewelers) )(, ,) (NP (DT a) (NNP Sacramento) (NN chain) ))(: ;) (NP (NP (NNP Sakowitz) (NNP Inc.) )(, ,) (NP (DT the) (JJ Houston-based) (NN retailer) ))(, ,) (CC and)(NP (NP (NNP Parisian) (NNP Inc.) )(, ,) (NP (DT the) (NNP Southeast) (NN department-store) (NN chain) ))))))))))))))(. .) )) (TOP (S (ADVP-TMP (RB Eventually) )(S (NP-SBJ (NP (NNP Mr.) (NNP Simpson) )(CC and) (NP (NNP Mr.) (NNP Herscu) ))(VP (VBD had) (NP (DT a) (NN falling) (RP out) )(PP (IN over) (NP (NP (DT the) (NN direction) )(PP (IN of) (NP (DT the) (NN company) ))))))(, ,) (CC and)(S (NP-SBJ (NNP Mr.) (NNP Simpson) )(VP (VBD said) (SBAR (-NONE- 0) (S (NP-SBJ (PRP he) )(VP (VBD resigned) (PP-TMP (IN in) (NP (CD 1988) )))))))(. .) )) (TOP (S (PP-TMP (IN Since) (NP (RB then) ))(, ,) (NP-SBJ-1 (NNP Hooker) (NNP Corp.) )(VP (VP (VBZ has) (VP (VBN sold) (NP (NP (PRP$ its) (NN interest) )(PP-LOC (IN in) (NP (DT the) (JJ Parisian) (NN chain) )))(ADVP-CLR (RB back) (PP (TO to) (NP (NP (JJ Parisian) (POS 's) )(NN management) )))))(CC and) (VP (VBZ is) (ADVP-TMP (RB currently) )(VP (VBG attempting) (S (NP-SBJ (-NONE- *-1) )(VP (TO to) (VP (VB sell) (NP (DT the) (NNP B.) (NNP Altman) (CC &) (NNP Co.) (NN chain) )))))))(. .) )) (TOP (S (PP (IN In) (NP (NN addition) ))(, ,) (NP-SBJ (NP (NNP Robert) (NNP Sakowitz) )(, ,) (NP (NP (JJ chief) (NN executive) )(PP (IN of) (NP (DT the) (NNP Sakowitz) (NN chain) )))(, ,) )(VP (VBZ is) (VP (VBG seeking) (NP (NP (NNS funds) )(SBAR (WHNP-1 (-NONE- 0) )(S (NP-SBJ (-NONE- *T*-1) )(VP (TO to) (VP (VB buy) (PRT (RP out) )(NP (NP (DT the) (NNP Hooker) (NN interest) )(PP-LOC (IN in) (NP (PRP$ his) (NN company) ))))))))))(. .) )) (TOP (S (NP-SBJ-1 (DT The) (NNP Merksamer) (NN chain) )(VP (VBZ is) (ADVP-TMP (RB currently) )(VP (VBG being) (VP (VBN offered) (NP (-NONE- *-1) )(PP-CLR (IN for) (NP (NN sale) ))(PP (IN by) (NP-LGS (NNP First) (NNP Boston) (NNP Corp) )))))(. .) )) (TOP (S (S-ADV (NP-SBJ-1 (-NONE- *-2) )(VP (VBN Reached) (NP (-NONE- *-1) )(PP-LOC (IN in) (NP (NNP Honolulu) ))))(, ,) (NP-SBJ-2 (NNP Mr.) (NNP Shidler) )(VP (VBD said) (SBAR (IN that) (S (NP-SBJ (PRP he) )(VP (VBZ believes) (SBAR (-NONE- 0) (S (NP-SBJ (DT the) (JJ various) (NNP Hooker) (NNS malls) )(VP (MD can) (VP (VB become) (ADJP-PRD (JJ profitable) )(PP (IN with) (NP (JJ new) (NN management) ))))))))))(. .) )) (TOP (SINV (`` ``) (S-TPC-2 (S (NP-SBJ (DT These) )(VP (VBP are) (RB n't) (NP-PRD (JJ mature) (NNS assets) )))(, ,) (CC but) (S (NP-SBJ (PRP they) )(VP (VBP have) (NP (NP (DT the) (NN potential) )(SBAR (WHADVP-1 (-NONE- 0) )(S (NP-SBJ (-NONE- *) )(VP (TO to) (VP (VB be) (ADVP-PRD (RB so) )(ADVP (-NONE- *T*-1) )))))))))(, ,) ('' '') (VP (VBD said) (S (-NONE- *T*-2) ))(NP-SBJ (NNP Mr.) (NNP Shidler) )(. .) )) (TOP (S (`` ``) (S-ADV (NP-SBJ-2 (-NONE- *-1) )(VP (VBN Managed) (NP (-NONE- *-2) )(UCP (ADVP-MNR (RB properly) )(, ,) (CC and)(PP (IN with) (NP (DT a) (JJ long-term) (NN outlook) )))))(, ,) (NP-SBJ-1 (DT these) )(VP (MD can) (VP (VB become) (NP-PRD (JJ investment-grade) (NN quality) (NNS properties) )))(. .) )) (TOP (S (S-TPC-1 (NP-SBJ (JJ Canadian) (NN steel-ingot) (NN production) )(VP (VBD totaled) (NP (CD 291,890) (JJ metric) (NNS tons) )(PP-TMP (IN in) (NP (NP (DT the) (NN week) )(VP (VBN ended) (NP-TMP (NNP Oct.) (CD 7) ))))(, ,) (ADVP (RB up) (NP (CD 14.8) (NN %) )(PP (IN from) (NP (NP (NP (DT the) (JJ preceding) (NN week) (POS 's) )(NN total) )(PP (IN of) (NP (CD 254,280) (NNS tons) )))))))(, ,) (NP-SBJ (NP (NNP Statistics) (NNP Canada) )(, ,) (NP (DT a) (JJ federal) (NN agency) )(, ,) )(VP (VBD said) (SBAR (-NONE- 0) (S (-NONE- *T*-1) )))(. .) )) (TOP (S (NP-SBJ (NP (DT The) (NN week) (POS 's) )(NN total) )(VP (VBD was) (ADVP-PRD (RB up) (NP (CD 6.2) (NN %) )(PP (IN from) (NP (CD 274,963) (NNS tons) )(ADVP-TMP (NP (DT a) (NN year) )(RBR earlier) ))))(. .) )) (TOP (S (NP-SBJ (DT The) (JJ year-to-date) (NN total) )(VP (VBD was) (NP-PRD (CD 12,006,883) (NNS tons) )(, ,) (ADVP (RB up) (NP (CD 7.8) (NN %) )(PP (IN from) (NP (CD 11,141,711) (NNS tons) )(ADVP-TMP (NP (DT a) (NN year) )(RBR earlier) ))))(. .) )) (TOP (S (NP-SBJ-1 (DT The) (NNP Treasury) )(VP (NNS plans) (S (NP-SBJ-2 (-NONE- *-1) )(VP (TO to) (VP (VB raise) (NP (NP (QP ($ $) (CD 175) (CD million) )(-NONE- *U*) )(PP (IN in) (NP (JJ new) (NN cash) )))(NP-TMP (NNP Thursday) )(PP-MNR (IN by) (S-NOM (NP-SBJ (-NONE- *-2) )(VP (VP (VBG selling) (NP (NP (QP (RB about) ($ $) (CD 9.75) (CD billion) )(-NONE- *U*) )(PP (IN of) (NP (JJ 52-week) (NNS bills) ))))(CC and) (VP (VBG redeeming) (NP (NP ($ $) (CD 9.58) (CD billion) (-NONE- *U*) )(PP (IN of) (NP (VBG maturing) (NNS bills) )))))))))))(. .) )) (TOP (S (NP-SBJ-1 (DT The) (NNS bills) )(VP (VP (MD will) (VP (VB be) (VP (VBN dated) (S (NP-SBJ (-NONE- *-1) )(NP-PRD (NNP Oct.) (CD 26) )))))(CC and) (VP (MD will) (VP (VB mature) (NP-TMP (NNP Oct.) (CD 25) (, ,)(CD 1990) ))))(. .) )) (TOP (S (NP-SBJ (PRP They) )(VP (MD will) (VP (VB be) (ADJP-PRD (JJ available) (PP (IN in) (NP (NP (JJ minimum) (NNS denominations) )(PP (IN of) (NP ($ $) (CD 10,000) (-NONE- *U*) )))))))(. .) )) (TOP (S (NP-SBJ-1 (NNS Bids) )(VP (MD must) (VP (VB be) (VP (VBN received) (NP (-NONE- *-1) )(PP-TMP (IN by) (NP (CD 1) (RB p.m.) (NNP EDT) ))(NP-TMP (NNP Thursday) )(PP-LOC (PP (IN at) (NP (DT the) (NNP Treasury) ))(CC or) (PP (IN at) (NP (NNP Federal) (NNP Reserve) (NNS banks) (CC or) (NNS branches) ))))))(. .) )) (TOP (S (SBAR-TMP (IN As) (S (NP-SBJ (JJ small) (NNS investors) )(VP (VBD peppered) (NP (PRP$ their) (JJ mutual) (NNS funds) )(PP-CLR (IN with) (NP (NN phone) (NNS calls) ))(PP-TMP (IN over) (NP (DT the) (NN weekend) )))))(, ,) (NP-SBJ (JJ big) (NN fund) (NNS managers) )(VP (VBD said) (SBAR (-NONE- 0) (S (NP-SBJ (PRP they) )(VP (VBP have) (NP (NP (NP (DT a) (JJ strong) (NN defense) )(PP (IN against) (NP (NP (DT any) (NN wave) )(PP (IN of) (NP (NNS withdrawals) )))))(: :) (NP (NN cash) ))))))(. .) )) (TOP (S (PP (IN Unlike) (NP (NP (DT the) (NN weekend) )(PP-TMP (IN before) (NP (NNP Black) (NNP Monday) ))))(, ,) (NP-SBJ-1 (DT the) (NNS funds) )(VP (VBD were) (RB n't) (VP (VBN swamped) (NP (-NONE- *-1) )(PP-CLR (IN with) (NP (JJ heavy) (NN withdrawal) (NNS requests) ))))(. .) )) (TOP (S (CC And) (NP-SBJ (JJ many) (NN fund) (NNS managers) )(VP (VP (VBP have) (VP (VBN built) (PRT (RP up) )(NP (NN cash) (NNS levels) )))(CC and) (VP (VBP say) (SBAR (-NONE- 0) (S (NP-SBJ (PRP they) )(VP (MD will) (VP (VB be) (VP (VBG buying) (NP (NN stock) )(NP-TMP (DT this) (NN week) ))))))))(. .) )) (TOP (S (PP-LOC (IN At) (NP (NP (NNP Fidelity) (NNP Investments) )(, ,) (NP (NP (DT the) (NN nation) (POS 's) )(JJS largest) (NN fund) (NN company) )(, ,) ))(S (NP-SBJ (NN telephone) (NN volume) )(VP (VBD was) (ADVP-PRD (RB up) (RB sharply) )))(, ,) (CC but) (S (NP-SBJ (PRP it) )(VP (VBD was) (ADVP-TMP (RB still) )(PP-LOC-PRD (IN at) (NP (NP (QP (RB just) (PDT half) )(DT the) (NN level) )(PP (IN of) (NP (NP (DT the) (NN weekend) )(VP (VBG preceding) (NP (NNP Black) (NNP Monday) ))(PP-TMP (IN in) (NP (CD 1987) ))))))))(. .) )) (TOP (S (NP-SBJ (DT The) (NNP Boston) (NN firm) )(VP (VBD said) (SBAR (-NONE- 0) (S (NP-SBJ (NN stock-fund) (NNS redemptions) )(VP (VBD were) (VP (VBG running) (PP-LOC-CLR (IN at) (NP (NP (QP (JJR less) (IN than) (NN one-third) )(DT the) (NN level) )(ADVP-TMP (NP (CD two) (NNS years) )(RB ago) ))))))))(. .) )) (TOP (S (PP-TMP (IN As) (PP (IN of) (NP (NN yesterday) (NN afternoon) )))(, ,) (NP-SBJ (DT the) (NNS redemptions) )(VP (VBD represented) (NP (NP (NP (QP (JJR less) (IN than) (CD 15) )(NN %) )(PP (IN of) (NP (NP (DT the) (JJ total) (NN cash) (NN position) )(PP (IN of) (NP (QP (RB about) ($ $) (CD 2) (CD billion) )(-NONE- *U*) ))(PP (IN of) (NP (NP (NNP Fidelity) (POS 's) )(NN stock) (NNS funds) )))))))(. .) )) (TOP (SINV (`` ``) (S-TPC-2 (ADVP-TMP (NP (CD Two) (NNS years) )(RB ago) )(NP-SBJ (EX there) )(VP (VBD were) (NP-PRD (NP (NP (JJ massive) (NN redemption) (NNS levels) )(PP-TPC (IN over) (NP (DT the) (NN weekend) )))(CC and) (NP (NP (DT a) (NN lot) )(PP (IN of) (NP (NN fear) ))(ADVP-LOC (RB around) )))))(, ,) ('' '') (VP (VBD said) (S (-NONE- *T*-2) ))(NP-SBJ (NP (NNP C.) (NNP Bruce) (NNP Johnstone) )(, ,) (SBAR (WHNP-1 (WP who) )(S (NP-SBJ (-NONE- *T*-1) )(VP (VBZ runs) (NP (NP (NNP Fidelity) (NNP Investments) (POS ') )(ADJP (QP ($ $) (CD 5) (CD billion) )(-NONE- *U*) )(NNP Equity-Income) (NNP Fund) )))))(. .) )) (TOP (S (`` ``) (NP-SBJ (DT This) )(VP (VBZ feels) (PP-CLR (ADVP (RBR more) )(IN like) (NP (DT a) (JJ one-shot) (NN deal) )))(. .) )) (TOP (S (NP-SBJ (NNS People) )(VP (VBP are) (RB n't) (VP (VBG panicking) ))(. .) ('' '') )) (TOP (S (NP-SBJ (DT The) (NN test) )(VP (MD may) (VP (VB come) (NP-TMP (NN today) )))(. .) )) (TOP (S (NP-SBJ (NP (NNP Friday) (POS 's) )(NN stock) (NN market) (NN sell-off) )(VP (VBD came) (ADVP-TMP (RB too) (RB late) (SBAR (IN for) (S (NP-SBJ (JJ many) (NNS investors) )(VP (TO to) (VP (VB act) ))))))(. .) )) (TOP (S (NP-SBJ (DT Some) (NNS shareholders) )(VP (VBP have) (VP (VBN held) (PRT (RP off) )(PP-TMP (IN until) (NP (NN today) ))(SBAR-PRP (IN because) (S (NP-SBJ (NP (DT any) (NN fund) (NNS exchanges) )(VP (VBN made) (NP (-NONE- *) )(PP-TMP (IN after) (NP (NP (NNP Friday) (POS 's) )(NN close) ))))(VP (MD would) (VP (VB take) (NP (NN place) )(PP (IN at) (NP (NP (NN today) (POS 's) )(NN closing) (NNS prices) ))))))))(. .) )) (TOP (S (NP-SBJ-1 (NN Stock) (NN fund) (NNS redemptions) )(PP-TMP (IN during) (NP (DT the) (CD 1987) (NN debacle) ))(VP (VBD did) (RB n't) (VP (VB begin) (S (NP-SBJ (-NONE- *-1) )(VP (TO to) (VP (VB snowball) )))(PP-TMP (IN until) (SBAR (IN after) (S (NP-SBJ (DT the) (NN market) )(VP (VBD opened) (PP-TMP (IN on) (NP (NNP Black) (NNP Monday) ))))))))(. .) )) (TOP (S (CC But) (NP-SBJ (NN fund) (NNS managers) )(VP (VBP say) (SBAR (-NONE- 0) (S (NP-SBJ (PRP they) )(VP (VBP 're) (ADJP-PRD (JJ ready) )))))(. .) )) (TOP (S (NP-SBJ (JJ Many) )(VP (VBP have) (VP (VBN raised) (NP (NP (NN cash) (NNS levels) )(, ,) (SBAR (WHNP-1 (WDT which) )(S (NP-SBJ (-NONE- *T*-1) )(VP (VBP act) (PP-CLR (IN as) (NP (DT a) (NN buffer) ))(PP (IN against) (NP (JJ steep) (NN market) (NNS declines) ))))))))(. .) )) (TOP (S (NP-SBJ (NNP Mario) (NNP Gabelli) )(, ,) (PP (IN for) (NP (NN instance) ))(, ,) (VP (VBZ holds) (NP (NP (NN cash) (NNS positions) )(PP-LOC (ADVP (RB well) )(IN above) (NP (CD 20) (NN %) )))(PP-LOC (IN in) (NP (NP (JJ several) )(PP (IN of) (NP (PRP$ his) (NNS funds) )))))(. .) )) (TOP (S (NP-SBJ (NP (NP (NNP Windsor) (NNP Fund) (POS 's) )(NNP John) (NNP Neff) )(CC and) (NP (NP (NNP Mutual) (NNP Series) (POS ') )(NNP Michael) (NNP Price) ))(VP (VBD said) (SBAR (-NONE- 0) (S (NP-SBJ (PRP they) )(VP (VBD had) (VP (VBN raised) (NP (PRP$ their) (NN cash) (NNS levels) )(PP-DIR (TO to) (NP (QP (JJR more) (IN than) (CD 20) (NN %) (CC and)(CD 30) (NN %) )(-NONE- *U*) (, ,)(RB respectively) ))(, ,) (NP-TMP (DT this) (NN year) ))))))(. .) )) (TOP (S (NP-SBJ (NP (RB Even) (NNP Peter) (NNP Lynch) )(, ,) (NP (NP (NN manager) )(PP (IN of) (NP (NP (NP (NNP Fidelity) (POS 's) )(ADJP (QP ($ $) (CD 12.7) (CD billion) )(-NONE- *U*) )(NNP Magellan) (NNP Fund) )(, ,) (NP (NP (DT the) (NN nation) (POS 's) )(JJS largest) (NN stock) (NN fund) )))))(, ,) (VP (VBD built) (PRT (RP up) )(NP (NN cash) )(PP-DIR (TO to) (NP (NP (CD 7) (NN %) )(CC or) (NP (QP ($ $) (CD 850) (CD million) )(-NONE- *U*) ))))(. .) )) (TOP (S (NP-SBJ (CD One) (NN reason) )(VP (VBZ is) (SBAR-PRD (DT that) (S (PP-TMP (IN after) (NP (NP (CD two) (NNS years) )(PP (IN of) (NP (JJ monthly) (JJ net) (NNS redemptions) ))))(, ,) (NP-SBJ (DT the) (NN fund) )(VP (VBD posted) (NP (NP (JJ net) (NNS inflows) )(PP (IN of) (NP (NN money) ))(PP (IN from) (NP (NNS investors) )))(PP-TMP (IN in) (NP (NNP August) (CC and)(NNP September) ))))))(. .) )) (TOP (S (`` ``) (S-TPC-1 (NP-SBJ (PRP I) )(VP (VBP 've) (VP (VBD let) (S (NP-SBJ (DT the) (NN money) )(VP (VB build) (PRT (RP up) ))))))(, ,) ('' '') (NP-SBJ (NP (NNP Mr.) (NNP Lynch) )(SBAR (-NONE- *ICH*-2) ))(VP (VBD said) (S (-NONE- *T*-1) )(, ,) (SBAR-2 (WHNP-4 (WP who) )(S (NP-SBJ (-NONE- *T*-4) )(VP (VBD added) (SBAR (IN that) (S (NP-SBJ-5 (PRP he) )(VP (VBZ has) (VP (VBN had) (NP-CLR (NN trouble) )(S-CLR (NP-SBJ (-NONE- *-5) )(VP (VBG finding) (NP (NP (NNS stocks) )(SBAR (WHNP-3 (-NONE- 0) )(S (NP-SBJ (PRP he) )(VP (VBZ likes) (NP (-NONE- *T*-3) )))))))))))))))(. .) )) (TOP (S (NP-SBJ (ADJP (RB Not) (DT all) )(NNS funds) )(VP (VBP have) (VP (VBN raised) (NP (NN cash) (NNS levels) )(, ,) (PP (IN of) (NP (NN course) ))))(. .) )) (TOP (S (PP (IN As) (NP (DT a) (NN group) ))(, ,) (NP-SBJ (NN stock) (NNS funds) )(VP (VBD held) (NP (NP (CD 10.2) (NN %) )(PP (IN of) (NP (NNS assets) ))(NP (-NONE- *ICH*-1) ))(PP-CLR (IN in) (NP (NN cash) ))(PP-TMP (IN as) (PP (IN of) (NP (NNP August) )))(, ,) (NP-1 (NP (DT the) (JJS latest) (NNS figures) )(ADJP (JJ available) (PP (IN from) (NP (DT the) (NNP Investment) (NNP Company) (NNP Institute) )))))(. .) )) (TOP (S (NP-SBJ (DT That) )(VP (VBD was) (ADJP-PRD (ADJP (RB modestly) (JJR higher) )(PP (IN than) (NP (NP (DT the) (ADJP (QP (CD 8.8) (NN %) (CC and)(CD 9.2) (JJ %) )(-NONE- *U*) )(NNS levels) )(PP-TMP (IN in) (NP (NP (NNP August) (CC and)(NNP September) )(PP (IN of) (NP (CD 1987) ))))))))(. .) )) (TOP (S (ADVP (RB Also) )(, ,) (NP-SBJ (JJ persistent) (NNS redemptions) )(VP (MD would) (VP (VB force) (S (NP-SBJ-1 (DT some) (NN fund) (NNS managers) )(VP (TO to) (VP (VB dump) (NP (NNS stocks) )(S-PRP (NP-SBJ (-NONE- *-1) )(VP (TO to) (VP (VB raise) (NP (NN cash) )))))))))(. .) ))apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/parser/test.parse0100644 0000000 0000000 00000004063 14523004075 032253 0ustar00rootroot0000000 0000000 (TOP (S (PP-TMP (IN At) (NP (PRP$ your) (NN age) ))(, ,) (NP-VOC (NNP Jackie) )(, ,) (NP-SBJ-2 (PRP you) )(VP (MD ought) (S (NP-SBJ (-NONE- *-2) )(VP (TO to) (VP (VB know) (SBAR (IN that) (S (NP-SBJ-1 (PRP you) )(VP (MD ca) (RB n't) (VP (VB make) (NP (NN soup) )(PP (IN without) (S-NOM (NP-SBJ (-NONE- *-1) )(VP (VBG turning) (PRT (RP up) )(NP (DT the) (NN flame) ))))))))))))(. .) )) (TOP (S (ADVP-TMP (NP (DT A) (JJ few) (NNS hours) )(RB later) )(, ,) (NP-SBJ (DT the) (NN stock) (NN market) )(VP (VBD dropped) (NP-EXT (CD 190) (NNS points) ))(. .) )) (TOP (S (NP-SBJ (PRP He) )(VP (VBZ argues) (SBAR (IN that) (S (NP-SBJ-1 (NNS efforts) (S (NP-SBJ (-NONE- *) )(VP (TO to) (VP (VB firm) (PRT (RP up) )(NP (NNS prices) )))))(VP (MD will) (VP (VB be) (VP (VBN undermined) (NP (-NONE- *-1) )(PP (IN by) (NP-LGS (NP (NNS producers) (POS ') )(NNS plans) (S (NP-SBJ (-NONE- *) )(VP (TO to) (VP (VB expand) (NP (NN production) (NN capacity) ))))))))))))(. .) )) (TOP (SINV (`` ``) (S-TPC-6 (NP-SBJ (EX There) )(VP (VBZ is) (NP-PRD (NP (DT an) (JJ underlying) (NN concern) (SBAR (-NONE- *ICH*-5) ))(PP (IN on) (NP (NP (DT the) (NN part) )(PP (IN of) (NP (DT the) (JJ American) (NNS people) ))))(PRN (: --) (CC and)(S (NP-SBJ (RB there) )(VP (MD should) (VP (VB be) (NP-PRD (-NONE- *?*) ))))(: -) )(SBAR-5 (SBAR (IN that) (S (NP-SBJ-1 (DT the) (NN administration) )(VP (VBZ has) (RB not) (VP (VBN gone) (ADVP-CLR (RB far) (RB enough) )(PP (IN in) (S-NOM (NP-SBJ (-NONE- *-1) )(VP (VBG cutting) (NP (DT this) (NN deficit) ))))))))(CC and) (SBAR (IN that) (S (NP-SBJ-2 (NNP Congress) )(VP (VBZ has) (VP (VBN been) (ADJP-PRD (JJ unwilling) (S (NP-SBJ (-NONE- *-2) )(VP (TO to) (VP (VB cut) (SBAR-NOM (WHNP-3 (WP what) )(S (NP-SBJ (DT the) (NN administration) )(VP (VBD asked) (NP-4 (PRP us) )(S (NP-SBJ (-NONE- *-4) )(VP (TO to) (VP (VB cut) (NP (-NONE- *T*-3) )))))))))))))))))))(, ,) ('' '') (VP (VBD said) (S (-NONE- *T*-6) ))(NP-SBJ (NP (NNP Senate) (NNP Finance) (NNP Committee) (NNP Chairman) (NNP Lloyd) (NNP Bentsen) )(PRN (-LRB- -LRB-)(NP (NNP D.) )(, ,) (NP-LOC (NNP Texas) )(-RRB- -RRB-) ))(. .) ))./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_postag_Annot0100644 0000000 0000000 00000000157 14523004075 032732 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/postag/AnnotatedSentences.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/postag/AnnotatedSentences.tx0100644 0000000 0000000 00000031454 14523004075 034407 0ustar00rootroot0000000 0000000 Last_JJ September_NNP ,_, I_PRP tried_VBD to_TO find_VB out_RP the_DT address_NN of_IN an_DT old_JJ school_NN friend_NN whom_WP I_PRP had_VBD not_RB seen_VBN for_IN 15_CD years_NNS ._. I_PRP just_RB knew_VBD his_PRP$ name_NN ,_, Alan_NNP McKennedy_NNP ,_, and_CC I_PRP 'd_MD heard_VBD the_DT rumour_NN that_IN he_PRP 'd_MD moved_VBD to_TO Scotland_NNP ,_, the_DT country_NN of_IN his_PRP$ ancestors_NNS ._. So_IN I_PRP called_VBD Julie_NNP ,_, a_DT friend_NN who's_WDT still_RB in_IN contact_NN with_IN him_PRP ._. She_PRP told_VBD me_PRP that_IN he_PRP lived_VBD in_IN 23213_CD Edinburgh_NNP ,_, Worcesterstreet_NNP 12_CD ._. I_PRP wrote_VBD him_PRP a_DT letter_NN right_RB away_RB and_CC he_PRP answered_VBD soon_RB ,_, sounding_VBG very_RB happy_JJ and_CC delighted_JJ ._. Last_JJ year_NN ,_, I_PRP wanted_VBD to_TO write_VB a_DT letter_NN to_TO my_PRP$ grandaunt_NN ._. Her_PRP$ 86_CD th_NN birthday_NN was_VBD on_IN October_NNP 6_CD ,_, and_CC I_PRP no_RB longer_RB wanted_VBD to_TO be_VB hesitant_JJ to_TO get_VB in_IN touch_NN with_IN her_PRP ._. I_PRP did_VBD not_RB know_VB her_PRP face-to-face_RB ,_, and_CC so_RB it_PRP was_VBD not_RB easy_JJ for_IN me_PRP to_TO find_VB out_RP her_PRP$ address_NN ._. As_IN she_PRP had_VBD two_CD apartments_NNS in_IN different_JJ countries_NNS ,_, I_PRP decided_VBD to_TO write_VB to_TO both_DT ._. The_DT first_JJ was_VBD in_IN 12424_CD Paris_NNP in_IN Rue-de-Grandes-Illusions_NNP 5_CD ._. But_CC Marie_NNP Clara_NNP ,_, as_IN my_PRP$ aunt_NN is_VBZ called_VBN ,_, prefered_VBN her_PRP$ apartment_NN in_IN Berlin_NNP ._. It_PRP 's_VBZ postcode_JJ is_VBZ 30202_CD ._. She_PRP lived_VBD there_RB ,_, in_IN beautiful_JJ Kaiserstra§e_NNP 13_CD ,_, particulary_NN in_IN summer_NN ._. Hi_UH my_PRP$ name_NN is_VBZ Stefanie_NNP Schmidt_NNP ,_, how_WRB much_RB is_VBZ a_DT taxi_NN from_IN Ostbahnhof_NNP to_TO Hauptbahnhof_NNP ?_. About_IN 10_CD Euro_NNP ,_, I_PRP reckon_VBP ._. That_DT sounds_VBZ good_JJ ._. So_RB please_VB call_VB a_DT driver_NN to_TO Leonardstra§e_NNP 112_CD ,_, near_IN the_DT Ostbahnhof_NNP in_IN 56473_CD Hamburg_NNP ._. I_PRP 'd_MD like_VB to_TO be_VB at_IN Silberhornstra§e_NNP 12_CD as_RB soon_RB as_IN possible_JJ ._. Thank_VB you_PRP very_RB much_RB !_. Hi_NNP Mike_NNP ,_, it_PRP 's_VBZ Stefanie_NNP Schmidt_NNP ._. I_PRP 'm_VBP in_IN NŸrnberg_NNP at_IN the_DT moment_NN and_CC I_PRP 've_VBP got_VBD the_DT problem_NN that_IN my_PRP$ bike_NN has_VBZ broken_VBN ._. Could_MD you_PRP please_VB pick_VB me_PRP up_RP from_IN Seidlstra§e_NNP 56_CD ,_, I_PRP 'm_VBP in_IN the_DT CafŽ_NNP "Mondnacht"_NNP at_IN the_DT moment_NN ._. Please_VB hurry_VB up_RB ,_, I_PRP need_VBP to_TO be_VB back_RB in_IN Ulm_NNP at_IN 8_CD p.m._NN !_. My_PRP$ husband_NN George_NNP and_CC me_PRP recently_RB celebrated_VBD our_PRP$ 10_CD th_JJ wedding_NN anniversary_NN ._. We_PRP got_VBD married_VBN on_IN March_NNP 11_CD ,_, 1995_CD ._. Therefore_RB ,_, we_PRP found_VBD a_DT photo_NN album_NN with_IN pictures_NNS of_IN our_PRP$ first_JJ own_JJ apartment_NN ,_, which_WDT was_VBD in_IN 81234_CD Munich_NNP ._. As_IN a_DT young_JJ married_JJ couple_NN ,_, we_PRP did_VBD not_RB have_VB enough_JJ money_NN to_TO afford_VB a_DT bigger_JJR lodge_NN than_IN this_DT one_CD in_IN Blumenweg_NNP 1_CD ._. But_CC only_RB five_CD years_NNS later_RB ,_, my_PRP$ husband_NN was_VBD offered_VBN a_DT well-payed_JJ job_NN in_IN 17818_CD Hamburg_NNP ,_, so_IN we_PRP moved_VBD there_RB ._. Since_IN then_RB ,_, our_PRP$ guests_NNS have_VBP to_TO ring_VB at_IN Veilchenstra§e_NNP 11_CD if_IN they_PRP want_VBP to_TO visit_VB us_PRP ,_, Luise_NNP and_CC George_NNP Bauer_NNP ._. I_PRP read_VBD your_PRP$ help-wanted_JJ ad_NN with_IN great_JJ attention_NN ._. I_PRP 'm_VBP a_DT student_NN of_IN informatics_NNS ,_, 6th_JJ semester,_NN and_CC I_PRP 'm_VBP very_RB interested_VBN in_IN your_PRP$ part-time_JJ job_NN offer_NN ._. I_PRP have_VBP a_DT competent_JJ knowledge_NN of_IN programming_NN and_CC foreign_JJ languages_NNS ,_, like_IN French_JJ and_CC Italian_JJ ._. I_PRP 'm_VBP looking_VBG forward_RB to_TO your_PRP$ reply_NN ._. Alisa_NNP Fernandes_NNP ,_, a_DT tourist_NN from_IN Spain_NNP ,_, went_VBD to_TO the_DT reception_NN desk_NN of_IN the_DT famous_JJ Highfly-Hotel_NNP in_IN 30303_CD Berlin_NNP ._. As_IN she_PRP felt_VBD quite_RB homesick_JJ ,_, she_PRP asked_VBD the_DT staff_NN if_IN they_PRP knew_VBD a_DT good_JJ Spanish_JJ restaurant_NN in_IN Berlin_NNP ._. The_DT concierge_NN told_VBD her_PRP to_TO go_VB to_TO the_DT "Tapasbar"_NN in_IN Chesterstr._NNP 2_CD ._. Alisa_NNP appreciated_VBD the_DT hint_NN and_CC enjoyed_VBD a_DT delicious_JJ traditional_JJ meal_NN ._. An_DT old_JJ friend_NN from_IN France_NNP is_VBZ currently_RB travelling_VBG around_IN Europe_NNP ._. Yesterday_NN ,_, she_PRP arrived_VBD in_IN Berlin_NNP and_CC we_PRP met_VBD up_RP spontaneously_RB ._. She_PRP wanted_VBD me_PRP to_TO show_VB her_PRP some_DT famous_JJ sights_NNS ,_, like_IN the_DT Brandenburger_NNP Tor_NNP and_CC the_DT Reichstag_NNP ._. But_CC it_PRP was_VBD not_RB easy_JJ to_TO meet_VB up_RP in_IN the_DT city_NN because_IN she_PRP hardly_RB knows_VBZ any_DT streetname_NN or_CC building_NN ._. So_IN I_PRP proposed_VBD to_TO meet_VB at_IN a_DT quite_RB local_JJ point:_NN the_DT cafŽ_NN "Daily's"_NN in_IN Unter-den-Linden_NNP 18,_CD 30291_CD Berlin_NNP ._. It_PRP is_VBZ five_CD minutes_NNS away_RB from_IN the_DT underground_JJ station_NN "Westbad"_NN ._. She_PRP found_VBD it_PRP instantly_RB and_CC we_PRP spent_VBD a_DT great_JJ day_NN in_IN the_DT capital_NN ._. Where_WRB did_VBD you_PRP get_VB those_DT great_JJ shoes_NNS ?_. They_PRP look_VBP amazing_JJ ,_, I_PRP love_VBP the_DT colour_NN ._. Are_VBP they_PRP made_VBN of_IN leather_NN ?_. No,_NNP that_DT 's_VBZ faked_VBN ._. But_CC anyway_RB ,_, I_PRP like_VBP them_PRP too_RB ._. I_PRP got_VBD them_PRP from_IN Hamburg._NNP Do_VBP not_RB you_PRP know_VB the_DT famous_JJ shop_NN in_IN Veilchenstra§e_NNP ?_. It_PRP 's_VBZ called_VBN "Twentytwo"_NNP ._. I_PRP 've_VBP never_RB heard_VBN of_IN that_DT before_RB ._. Could_MD you_PRP give_VB me_PRP the_DT complete_JJ address_NN ?_. Sure_JJ ,_, it_PRP 's_VBZ in_IN Veilchenstra§e_NNP 12_CD ,_, in_IN 78181_CD Hamburg_NNP ._. I_PRP deem_VBP it_PRP best_RB to_TO write_VB a_DT letter_NN to_TO the_DT owner_NN if_IN the_DT shoes_NNS are_VBP still_RB available_JJ ._. His_PRP$ name_NN is_VBZ Gerhard_NNP Fritsch_NNP ._. Hi_UH ,_, am_VBP I_PRP talking_VBG to_TO the_DT inquiries_NNS ?_. My_PRP$ name_NN is_VBZ Mike_NNP Sander_NNP and_CC I_PRP 'd_MD like_VB to_TO know_VB if_IN it_PRP is_VBZ possible_JJ to_TO get_VB information_NN about_IN an_DT address_NN if_IN I_PRP merely_RB know_VBP the_DT name_NN and_CC the_DT phone_NN number_NN of_IN a_DT person_NN !_. How_WRB is_VBZ he_PRP or_CC she_PRP called_VBD ?_. His_PRP$ name_NN is_VBZ Stefan_NNP Miller_NNP and_CC his_PRP$ number_NN is_VBZ the_DT 030/827234_CD ._. I'll_NNP have_VBP a_DT look_NN in_IN the_DT computer..._NN I_PRP found_VBD a_DT Stefan_NNP Miller_NNP who_WP lives_VBZ in_IN Leipzig._NNP Is_VBZ that_DT right_NN ?_. Yes_UH ,_, it_PRP definitely_RB is_VBZ ._. So_RB Stefan_NNP Miller_NNP lives_VBZ in_IN Heinrich-Heine-Stra§e_NNP 112_CD ,_, in_IN 20193_CD Leipzig_NNP ._. Thank_VB you_PRP very_RB much_RB for_IN the_DT information_NN ._. Bye_NNP !_. On_IN July_NNP 14_CD ,_, the_DT father_NN of_IN a_DT family_NN got_VBD painfully_RB injured_VBN after_IN he_PRP had_VBD tried_VBN to_TO start_VB a_DT barbecue_NN ._. The_DT flaring_VBG flames_NNS burnt_VBP instantly_RB through_IN his_PRP$ jacket_NN ,_, which_WDT he_PRP managed_VBD to_TO pull_VB off_RP last-minute_JJ ._. Although_IN the_DT wounds_NNS were_VBD n't_RB life-threatening_JJ ,_, it_PRP was_VBD urgent_JJ to_TO bring_VB him_PRP directly_RB into_IN ambulance_NN ._. But_CC the_DT only_JJ hospital_NN that_WDT had_VBD opened_VBN that_IN Sunday_NNP was_VBD the_DT Paracelsus_NNP Hospital_NNP in_IN 83939_CD Weilheim_NNP ,_, which_WDT was_VBD 2_CD hours_NNS away_RB ._. Convulsed_JJ with_IN pain_NN ,_, the_DT man_NN finally_RB arrived_VBD in_IN Stifterstra§e_NNP 15_CD ,_, where_WRB the_DT personal_NN immediately_RB took_VBD care_NN of_IN him_PRP ._. Last_JJ year_NN ,_, I_PRP worked_VBD as_IN a_DT delivery_NN boy_NN for_IN a_DT small_JJ local_JJ magazine_NN ._. I_PRP worked_VBD in_IN the_DT area_NN of_IN 83454_CD Ottobrunn_NNP ._. I_PRP had_VBD a_DT list_NN with_IN the_DT home_NN addresses_NNS of_IN our_PRP$ costumers_NNS whom_WP I_PRP brought_VBD their_PRP$ papers_NNS once_RB a_DT week_NN ._. An_DT elderly_JJ lady_NN ,_, who_WP was_VBD called_VBN Elenor_NNP Meier_NNP ,_, lived_VBD in_IN GŠrtnerweg_NNP 6_CD ,_, and_CC I_PRP always_RB drove_VBD there_RB first_RB ,_, because_IN I_PRP liked_VBD her_PRP the_DT most_JJS ._. Afterwards_RB ,_, I_PRP went_VBD to_TO a_DT student_NN ,_, Gina_NNP Schneider_NNP ,_, who_WP lived_VBD still_RB in_IN her_PRP$ parent's_NNS house_NN in_IN GŠrtnerweg_NNP 25_CD ._. The_DT last_JJ in_IN line_NN was_VBD the_DT retired_JJ teacher_NN Bruno_NNP Schulz_NNP in_IN Dramenstra§e_NNP 15_CD ._. He_PRP was_VBD friendly_JJ enough_RB to_TO tip_VB sometimes_RB ._. Our_PRP$ business_NN company_NN was_VBD founded_VBN in_IN 1912_CD by_IN the_DT singer_NN and_CC entertainer_NN Michel_NNP Seile_NNP ._. He_PRP opened_VBD the_DT first_JJ agency_NN in_IN Erding_NNP ,_, a_DT small_JJ town_NN near_IN Munich_NNP ._. Now_RB ,_, more_JJR than_IN 90_CD years_NNS of_IN turbulent_JJ ups_NNS and_CC downs_NNS later_RB ,_, we_PRP finally_RB decided_VBD to_TO situate_VB our_PRP$ company_NN in_IN a_DT more_JJR central_JJ and_CC frequented_JJ area_NN ._. Last_JJ year_NN ,_, we_PRP moved_VBD into_IN an_DT empty_JJ factory_NN building_NN in_IN 30303_CD Berlin_NNP ._. It_PRP is_VBZ located_VBN in_IN Barmerstr._NNP 34_CD ._. When_WRB George_NNP Miller_NNP ,_, a_DT tourist_NN from_IN England_NNP ,_, came_VBD to_TO Munich_NNP ,_, he_PRP had_VBD no_DT idea_NN how_WRB to_TO read_VB the_DT city_NN maps_NNS ._. He_PRP depended_VBD completely_RB on_IN the_DT help_NN and_CC information_NN of_IN German_JJ pedestrians_NNS ._. One_CD day_NN ,_, he_PRP simply_RB could_MD not_RB find_VB the_DT famous_JJ Lenbachhaus_NNP ._. So_RB he_PRP asked_VBD a_DT young_JJ woman_NN for_IN help_NN ._. She_PRP pointed_VBD at_IN a_DT street_NN sign_NN and_CC explained_VBD to_TO him_PRP that_IN he_PRP 'd_MD find_VB the_DT Lenbachhaus_NNP in_IN Luisenstra§e_NNP 33_CD ,_, which_WDT is_VBZ in_IN 80333_CD Munich_NNP ._. Miller_NNP was_VBD very_RB grateful_JJ and_CC could_MD finally_RB enjoy_VB the_DT exhibition_NN ._. On_IN March_NNP 15_CD ,_, there_EX was_VBD an_DT accident_NN near_IN Munich_NNP ._. The_DT driver_NN got_VBD badly_RB injured_VBN ._. Driving_VBG alone_RB not_RB far_RB from_IN her_PRP$ home_NN ,_, the_DT middle-aged_JJ woman_NN crashed_VBD at_IN high_JJ speed_NN into_IN a_DT tree_NN ._. A_DT resident_NN ,_, who_WP lives_VBZ near_IN the_DT street_NN where_WRB the_DT accident_NN took_VBD place_NN ,_, called_VBN instantly_RB the_DT police_NN ._. He_PRP reported_VBD what_WP had_VBD happened_VBN and_CC gave_VBD his_PRP$ name_NN and_CC address_NN to_TO the_DT officer_NN ._. He_PRP 's_VBZ called_VBN Peter_NNP Schubert_NNP and_CC he_PRP lives_VBZ at_IN Max-Lšw-Stra§e_NNP 13_CD in_IN 84630_CD Gauting_NNP ._. The_DT police_NN arrived_VBD ten_CD minutes_NNS later_RB and_CC brought_VBD the_DT woman_NN into_IN hospital_NN ._. Although_IN she_PRP had_VBD multiple_JJ trauma_NN ,_, she_PRP 's_VBZ out_IN of_IN mortal_JJ danger_NN ._. Hi_NNP ,_, how_WRB are_VBP you_PRP ?_. Are_VBP nt't_RB you_PRP a_DT friend_NN of_IN Natalie_NNP ?_. Yeah_UH for_IN sure_JJ ._. How_WRB did_VBD you_PRP know_VB that_DT ?_. I_PRP saw_VBD you_PRP sitting_VBG next_JJ to_TO her_PRP at_IN uni_JJ ._. Yeah_NNP she_PRP 's_VBZ my_PRP$ best_JJS friend_NN ._. Are_VBP you_PRP going_VBG to_TO her_PRP party_NN next_JJ friday_NN ?_. Oh_UH yes_UH ,_, I_PRP 'd_MD really_RB like_VB to_TO ._. But_CC in_IN fact_NN I_PRP do_VBP n't_RB know_VB yet_RB where_WRB it_PRP takes_VBZ place_NN ._. I_PRP can_MD tell_VB you_PRP :_: ring_NN at_IN Baumann,_NNP Meisenstra§e_NNP 5_CD ,_, in_IN 81737_CD Munich_NNP ._. The_DT party_NN starts_VBZ at_IN 9_CD p.m._NN ._. I_PRP hope_VBP you_PRP 'll_MD find_VB it_PRP ._. Thank_VB you_PRP very_RB much_RB ,_, see_VBP you_PRP next_JJ friday_NN !_. My_PRP$ name_NN is_VBZ Michael_NNP Hinterhofer_NNP ._. When_WRB I_PRP was_VBD 21_CD ,_, I_PRP moved_VBD out_RP from_IN my_PRP$ parents_NNS home_NN into_IN my_PRP$ first_JJ own_JJ appartment_NN in_IN order_NN to_TO study_VB in_IN a_DT bigger_JJR city_NN ._. My_PRP$ new_JJ home_NN was_VBD in_IN Lilienstra§e_NNP 1_CD in_IN 25334_CD Hamburg_NNP ._. But_CC I_PRP realized_VBD quickly_RB that_IN life_NN in_IN a_DT metropolis_NN was_VBD n't_RB relaxed_VBN enough_RB for_IN me_PRP ._. So_IN I_PRP decided_VBD to_TO move_VB into_IN a_DT smaller_JJR town_NN ._. Now_RB I_PRP 'm_VBP a_DT tenant_NN with_IN an_DT elderly_JJ widow_NN ._. We_PRP live_VBP in_IN BŸrgerstra§e_NNP 2_CD in_IN 63737_CD Heidelberg_NNP ._. I_PRP really_RB like_IN the_DT smalltown_JJ flair_NN and_CC my_PRP$ studies_NNS at_IN Heidelberg_NNP 's_POS notable_JJ university_NN ._../PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_postag_Annot0100644 0000000 0000000 00000000173 14523004075 032730 xustar000000000 0000000 123 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/postag/AnnotatedSentencesInsufficient.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/postag/AnnotatedSentencesIns0100644 0000000 0000000 00000000017 14523004075 034416 0ustar00rootroot0000000 0000000 Find_VB out_RP../PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_postag_TagDi0100644 0000000 0000000 00000000171 14523004075 032637 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/postag/TagDictionaryCaseInsensitive.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/postag/TagDictionaryCaseInse0100644 0000000 0000000 00000001615 14523004075 034340 0ustar00rootroot0000000 0000000 McKinsey ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_postag_TagDi0100644 0000000 0000000 00000000167 14523004075 032644 xustar000000000 0000000 119 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/postag/TagDictionaryCaseSensitive.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/postag/TagDictionaryCaseSens0100644 0000000 0000000 00000001614 14523004075 034351 0ustar00rootroot0000000 0000000 McKinsey ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_postag_TagDi0100644 0000000 0000000 00000000176 14523004075 032644 xustar000000000 0000000 126 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/postag/TagDictionaryWithoutCaseAttribute.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/postag/TagDictionaryWithoutC0100644 0000000 0000000 00000001566 14523004075 034421 0ustar00rootroot0000000 0000000 McKinsey apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Sentences.txt0100644 0000000 0000000 00000017060 14523004075 033577 0ustar00rootroot0000000 0000000 Last September, I tried to find out the address of an old school friend whom I hadnt't seen for 15 years. I just knew his name, Alan McKennedy, and I'd heard the rumour that he'd moved to Scotland, the country of his ancestors. So I called Julie, a friend who's still in contact with him. She told me that he lived in 23213 Edinburgh, Worcesterstreet 12. I wrote him a letter right away and he answered soon, sounding very happy and delighted. Last year, I wanted to write a letter to my grandaunt. Her 86th birthday was on October 6, and I no longer wanted to be hesitant to get in touch with her. I didn`t know her face-to-face, and so it wasn't easy for me to find out her address. As she had two apartments in different countries, I decided to write to both. The first was in 12424 Paris in Rue-de-Grandes-Illusions 5. But Marie Clara, as my aunt is called, prefered her apartment in Berlin. It's postcode is 30202. She lived there, in beautiful Kaiserstra§e 13, particulary in summer. Hi my name is Michael Graf, how much is a taxi from Ostbahnhof to Hauptbahnhof? About 10 Euro, I reckon. That sounds good. So please call a driver to Leonardstra§e 112, near the Ostbahnhof in 56473 Hamburg. I'd like to be at Silberhornstra§e 12 as soon as possible. Thank you very much! Hi Mike, it's Stefanie Schmidt. I'm in NŸrnberg at the moment and I've got the problem that my bike has broken. Could you please pick me up from Seidlstra§e 56, I'm in the CafŽ "Mondnacht" at the moment. Please hurry up, I need to be back in Ulm at 8 p.m.! My husband George and me recently celebrated our 10th wedding anniversary. We got married on March 11, 1995. Therefore, we found a photo album with pictures of our first own apartment, which was in 81234 Munich. As a young married couple, we didn't have enough money to afford a bigger lodge than this one in Blumenweg 1. But only five years later, my husband was offered a well-payed job in 17818 Hamburg, so we moved there. Since then, our guests have to ring at Veilchenstra§e 11 if they want to visit us, Luise and George Bauer. I read your help-wanted ad with great attention. I'm a student of informatics, 6th semester, and I'm very interested in your part-time job offer. I have a competent knowledge of programming and foreign languages, like French and Italian. I'm looking forward to your reply. Alisa Fernandes, a tourist from Spain, went to the reception desk of the famous Highfly-Hotel in 30303 Berlin. As she felt quite homesick, she asked the staff if they knew a good Spanish restaurant in Berlin. The concierge told her to go to the "Tapasbar" in Chesterstr. 2. Alisa appreciated the hint and enjoyed a delicious traditional meal. An old friend from France is currently travelling around Europe. Yesterday, she arrived in Berlin and we met up spontaneously. She wanted me to show her some famous sights, like the Brandenburger Tor and the Reichstag. But it wasn't easy to meet up in the city because she hardly knows any streetname or building. So I proposed to meet at a quite local point: the cafŽ "Daily's" in Unter-den-Linden 18, 30291 Berlin. It is five minutes away from the underground station "Westbad". She found it instantly and we spent a great day in the capital. Where did you get those great shoes? They look amazing, I love the colour. Are they made of leather? No, that's faked. But anyway, I like them too. I got them from Hamburg. Don't you know the famous shop in Veilchenstra§e? It's called "Twentytwo". I've never heard of that before. Could you give me the complete address? Sure, it's in Veilchenstra§e 12, in 78181 Hamburg. I deem it best to write a letter to the owner if the shoes are still available. His name is Gerhard Fritsch. Hi, am I talking to the inquiries? My name is Mike Sander and I'd like to know if it is possible to get information about an address if I merely know the name and the phone number of a person! How is he or she called? His name is Stefan Miller and his number is the 030/827234. I'll have a look in the computer. I found a Stefan Miller who lives in Leipzig. Is that right? Yes, it definitely is. So Stefan Miller lives in Heinrich-Heine-Stra§e 112, in 20193 Leipzig. Thank you very much for the information. Bye! On July 14, the father of a family got painfully injured after he had tried to start a barbecue. The flaring flames burnt instantly through his jacket, which he managed to pull off last-minute. Although the wounds weren't life-threatening, it was urgent to bring him directly into ambulance. But the only hospital that had opened that Sunday was the Paracelsus Hospital in 83939 Weilheim, which was 2 hours away. Convulsed with pain, the man finally arrived in Stifterstra§e 15, where the personal immediately took care of him. Last year, I worked as a delivery boy for a small local magazine. I worked in the area of 83454 Ottobrunn. I had a list with the home addresses of our costumers whom I brought their papers once a week. An elderly lady, who was called Elenor Meier, lived in GŠrtnerweg 6, and I always drove there first, because I liked her the most. Afterwards, I went to a student, Gina Schneider, who lived still in her parent's house in GŠrtnerweg 25. The last in line was the retired teacher Bruno Schulz in Dramenstra§e 15. He was friendly enough to tip sometimes. Our business company was founded in 1912 by the singer and entertainer Michel Seile. He opened the first agency in Erding, a small town near Munich. Now, more than 90 years of turbulent ups and downs later, we finally decided to situate our company in a more central and frequented area. Last year, we moved into an empty factory building in 30303 Berlin. It is located in Barmerstr. 34. When George Miller, a tourist from England, came to Munich, he had no idea how to read the city maps. He depended completely on the help and information of German pedestrians. One day, he simply could not find the famous Lenbachhaus. So he asked a young woman for help. She pointed at a street sign and explained to him that he'd find the Lenbachhaus in Luisenstra§e 33, which is in 80333 Munich. Miller was very grateful and could finally enjoy the exhibition. On March 15, there was an accident near Munich. The driver got badly injured. Driving alone not far from her home, the middle-aged woman crashed at high speed into a tree. A resident, who lives near the street where the accident took place, called instantly the police. He reported what had happened and gave his name and address to the officer. He's called Peter Schubert and he lives at Max-Lšw-Stra§e 13 in 84630 Gauting. The police arrived ten minutes later and brought the woman into hospital. Although she had multiple trauma, she's out of mortal danger. Hi, how are you? Arent't you a friend of Natalie? Yeah for sure. How did you know that? I saw you sitting next to her at uni. Yeah she's my best friend. Are you going to her party next friday? Oh yes, I'd really like to. But in fact I don't know yet where it takes place. I can tell you: ring at Baumann, Meisenstra§e 5, in 81737 Munich. The party starts at 9 p.m. I hope you'll find it. Thank you very much, see you next friday! My name is Michael Hinterhofer. When I was 21, I moved out from my parents' home into my first own appartment in order to study in a bigger city. My new home was in Lilienstra§e 1 in 25334 Hamburg. But I realized quickly that life in a metropolis wasn't relaxed enough for me. So I decided to move into a smaller town. Now I'm a tenant with an elderly widow. We live in BŸrgerstra§e 2 in 63737 Heidelberg. I really like the smalltown flair and my studies at Heidelberg's notable university. The stock rose by 3.5% yesterday in heavy trading../PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_sentdetect_S0100644 0000000 0000000 00000000166 14523004075 032722 xustar000000000 0000000 118 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/SentencesInsufficient.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/SentencesInsuffic0100644 0000000 0000000 00000000152 14523004075 034442 0ustar00rootroot0000000 0000000 Last September, I tried to find out the address of an old school friend whom I hadnt't seen for 15 years. apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Sentences_DE.txt0100644 0000000 0000000 00000041445 14523004075 034153 0ustar00rootroot0000000 0000000 Das erste, was dem Untersucher bei der Vergleichung von Trauminhalt und Traumgedanken klar wird, ist, daß hier eine großartige Verdichtungsarbeit geleistet wurde. Der Traum ist knapp, armselig, lakonisch im Vergleich zu dem Umfang und zur Reichhaltigkeit der Traumgedanken. Der Traum füllt niedergeschrieben eine halbe Seite; die Analyse, in der die Traumgedanken enthalten sind, bedarf das sechs-, acht-, zwölffache an Schriftraum. Die Relation ist für verschiedene Träume wechselnd; sie ändert, soweit ich es kontrollieren konnte, niemals ihren Sinn. In der Regel unterschätzt man das Maß der statthabenden Kompression, indem man die ans Licht gebrachten Traumgedanken für das vollständige Material hält, während weitere Deutungsarbeit neue hinter dem Traum versteckte Gedanken enthüllen kann. Wir haben bereits anführen müssen, daß man eigentlich niemals sicher ist, einen Traum vollständig gedeutet zu haben; selbst wenn die Auflösung befriedigend und lückenlos erscheint, bleibt es doch immer möglich, daß sich noch ein anderer Sinn durch denselben Traum kundgibt. Die Verdichtungsquote ist also – strenggenommen – unbestimmbar. Man könnte gegen die Behauptung, daß aus dem Mißverhältnis zwischen Trauminhalt und Traumgedanken der Schluß zu ziehen sei, es finde eine ausgiebige Verdichtung des psychischen Materials bei der Traumbildung statt, einen Einwand geltend machen, der für den ersten Eindruck recht bestechend scheint. Wir haben ja so oft die Empfindung, daß wir sehr viel die ganze Nacht hindurch geträumt und dann das meiste wieder vergessen haben. Der Traum, den wir beim Erwachen erinnern, wäre dann bloß ein Rest der gesamten Traumarbeit, welche wohl den Traumgedanken an Umfang gleichkäme, wenn wir sie eben vollständig erinnern könnten. Daran ist ein Stück sicherlich richtig; man kann sich nicht mit der Beobachtung täuschen, daß ein Traum am getreuesten reproduziert wird, wenn man ihn bald nach dem Erwachen zu erinnern versucht, und daß seine Erinnerung gegen den Abend hin immer mehr und mehr lückenhaft wird. Zum andern Teil aber läßt sich erkennen, daß die Empfindung, man habe sehr viel mehr geträumt, als man reproduzieren kann, sehr häufig auf einer Illusion beruht, deren Entstehung späterhin erläutert werden soll. Die Annahme einer Verdichtung in der Traumarbeit wird überdies von der Möglichkeit des Traumvergessens nicht berührt, denn sie wird durch die Vorstellungsmassen erwiesen, die zu den einzelnen erhalten gebliebenen Stücken des Traumes gehören. Ist tatsächlich ein großes Stück des Traumes für die Erinnerung verlorengegangen, so bleibt uns hiedurch etwa der Zugang zu einer neuen Reihe von Traumgedanken versperrt. Es ist eine durch nichts zu rechtfertigende Erwartung, daß die untergegangenen Traumstücke sich gleichfalls nur auf jene Gedanken bezogen hätten, die wir bereits aus der Analyse der erhalten gebliebenen kennenHinweise auf die Verdichtung im Traum finden sich bei zahlreichen Autoren. Du Prel äußert an einer Stelle (1885, 85), es sei absolut sicher, daß ein Verdichtungsprozeß der Vorstellungsreihe stattgefunden habe. Angesichts der überreichen Menge von Einfällen, welche die Analyse zu jedem einzelnen Element des Trauminhaltes beibringt, wird sich bei manchem Leser der prinzipielle Zweifel regen, ob man denn all das, was einem bei der Analyse nachträglich einfällt, zu den Traumgedanken rechnen darf, d. h. annehmen darf, all diese Gedanken seien schon während des Schlafzustandes tätig gewesen und hätten an der Traumbildung mitgewirkt? Ob nicht vielmehr während des Analysierens neue Gedankenverbindungen entstehen, die an der Traumbildung unbeteiligt waren? Ich kann diesem Zweifel nur bedingt beitreten. Daß einzelne Gedankenverbindungen erst während der Analyse entstehen, ist allerdings richtig; aber man kann sich jedesmal überzeugen, daß solche neue Verbindungen sich nur zwischen Gedanken herstellen, die schon in den Traumgedanken in anderer Weise verbunden sind; die neuen Verbindungen sind gleichsam Nebenschließungen, Kurzschlüsse, ermöglicht durch den Bestand anderer und tiefer liegender Verbindungswege. Für die Überzahl der bei der Analyse aufgedeckten Gedankenmassen muß man zugestehen, daß sie schon bei der Traumbildung tätig gewesen sind, denn wenn man sich durch eine Kette solcher Gedanken, die außer Zusammenhang mit der Traumbildung scheinen, durchgearbeitet hat, stößt man dann plötzlich auf einen Gedanken, der, im Trauminhalt vertreten, für die Traumdeutung unentbehrlich ist und doch nicht anders als durch jene Gedankenkette zugänglich war. Man vergleiche hiezu etwa den Traum von der botanischen Monographie, der als das Ergebnis einer erstaunlichen Verdichtungsleistung erscheint, wenngleich ich seine Analyse nicht vollständig mitgeteilt habe. Wie soll man sich aber dann den psychischen Zustand während des Schlafens, der dem Träumen vorangeht, vorstellen? Bestehen alle die Traumgedanken nebeneinander, oder werden sie nacheinander durchlaufen, oder werden mehrere gleichzeitige Gedankengänge von verschiedenen Zentren aus gebildet, die dann zusammentreffen? Ich meine, es liegt noch keine Nötigung vor, sich von dem psychischen Zustand bei der Traumbildung eine plastische Vorstellung zu schaffen. Vergessen wir nur nicht, daß es sich um unbewußtes Denken handelt und daß der Vorgang leicht ein anderer sein kann als der, welchen wir beim absichtlichen, von Bewußtsein begleiteten Nachdenken in uns wahrnehmen. Die Tatsache aber, daß die Traumbildung auf einer Verdichtung beruht, steht unerschütterlich fest. Wie kommt diese Verdichtung nun zustande? Wenn man erwägt, daß von den aufgefundenen Traumgedanken nur die wenigsten durch eines ihrer Vorstellungselemente im Traum vertreten sind, so sollte man schließen, die Verdichtung geschehe auf dem Wege der Auslassung, indem der Traum nicht eine getreuliche Übersetzung oder eine Projektion Punkt für Punkt der Traumgedanken, sondern eine höchst unvollständige und lückenhafte Wiedergabe derselben sei. Diese Einsicht ist, wie wir bald finden werden, eine sehr mangelhafte. Doch fußen wir zunächst auf ihr und fragen uns weiter: Wenn nur wenige Elemente aus den Traumgedanken in den Trauminhalt gelangen, welche Bedingungen bestimmen die Auswahl derselben? Um hierüber Aufschluß zu bekommen, wendet man nun seine Aufmerksamkeit den Elementen des Trauminhalts zu, welche die gesuchten Bedingungen ja erfüllt haben müssen. Ein Traum, zu dessen Bildung eine besonders starke Verdichtung beigetragen, wird für diese Untersuchung das günstigste Material sein. Ich wähle den auf S. 183 ff. mitgeteilten Traum von der botanischen Monographie. Trauminhalt: Ich habe eine Monographie über eine (unbestimmt gelassene) Pflanzenart geschrieben. Das Buch liegt vor mir, ich blättere eben eine eingeschlagene farbige Tafel um. Dem Exemplar ist ein getrocknetes Spezimen der Pflanze beigebunden. Das augenfälligste Element dieses Traums ist die botanische Monographie. Diese stammt aus den Eindrücken des Traumtages; in einem Schaufenster einer Buchhandlung hatte ich tatsächlich eine Monographie über die Gattung »Zyklamen« gesehen. Die Erwähnung dieser Gattung fehlt im Trauminhalt, in dem nur die Monographie und ihre Beziehung zur Botanik übriggeblieben sind. Die »botanische Monographie« erweist sofort ihre Beziehung zu der Arbeit über Kokain, die ich einmal geschrieben habe; vom Kokain aus geht die Gedankenverbindung einerseits zur Festschrift und zu gewissen Vorgängen in einem Universitätslaboratorium, anderseits zu meinem Freund, dem Augenarzt Dr. Königstein, der an der Verwertung des Kokains seinen Anteil gehabt hat. An die Person des Dr. K. knüpft sich weiter die Erinnerung an das unterbrochene Gespräch, das ich abends zuvor mit ihm geführt, und die vielfältigen Gedanken über die Entlohnung ärztlicher Leistungen unter Kollegen. Dieses Gespräch ist nun der eigentliche aktuelle Traumerreger; die Monographie über Zyklamen ist gleichfalls eine Aktualität, aber indifferenter Natur; wie ich sehe, erweist sich die »botanische Monographie« des Traumes als ein mittleres Gemeinsames zwischen beiden Erlebnissen des Tages, von dem indifferenten Eindruck unverändert übernommen, mit dem psychisch bedeutsamen Erlebnis durch ausgiebigste Assoziationsverbindungen verknüpft. Aber nicht nur die zusammengesetzte Vorstellung »botanische Monographie«, sondern auch jedes ihrer Elemente »botanisch« und »Monographie« gesondert geht durch mehrfache Verbindungen tiefer und tiefer in das Gewirre der Traumgedanken ein. Zu »botanisch« gehören die Erinnerungen an die Person des Professors Gärtner, an seine blühende Frau, an meine Patientin, die Flora heißt, und an die Dame, von der ich die Geschichte mit den vergessenen Blumen erzählt habe. Gärtner führt neuerdings auf das Laboratorium und auf das Gespräch mit Königstein; in dasselbe Gespräch gehört die Erwähnung der beiden Patientinnen. Von der Frau mit den Blumen zweigt ein Gedankenweg zu den Lieblingsblumen meiner Frau ab, dessen anderer Ausgang im Titel der bei Tag flüchtig gesehenen Monographie liegt. Außerdem erinnert »botanisch« an eine Gymnasialepisode und an ein Examen der Universitätszeit, und ein neues, in jenem Gespräch angeschlagenes Thema, das meiner Liebhabereien, knüpft sich durch Vermittlung meiner scherzhaft so genannten Lieblingsblume, der Artischocke, an die von den vergessenen Blumen ausgehende Gedankenkette an; hinter »Artischocke« steckt die Erinnerung an Italien einerseits und an eine Kinderszene anderseits, mit der ich meine seither intim gewordenen Beziehungen zu Büchern eröffnet habe. »Botanisch« ist also ein wahrer Knotenpunkt, in welchem für den Traum zahlreiche Gedankengänge zusammentreffen, die, wie ich versichern kann, in jenem Gespräch mit Fug und Recht in Zusammenhang gebracht worden sind. Man befindet sich hier mitten in einer Gedankenfabrik, in der wie im Weber-Meisterstück im Traume rührt wiederum an zwei Themata, an die Einseitigkeit meiner Studien und an die Kostspieligkeit meiner Liebhabereien. Aus dieser ersten Untersuchung holt man sich den Eindruck, daß die Elemente »botanisch« und »Monographie« darum in den Trauminhalt Aufnahme gefunden haben, weil sie mit den meisten Traumgedanken die ausgiebigsten Berührungen aufweisen können, also Knotenpunkte darstellen, in denen sehr viele der Traumgedanken zusammentreffen, weil sie mit Bezug auf die Traumdeutung vieldeutig sind. Man kann die dieser Erklärung zugrunde liegende Tatsache auch anders aussprechen und dann sagen: Jedes der Elemente des Trauminhaltes erweist sich als überdeterminiert, als mehrfach in den Traumgedanken vertreten. Wir erfahren mehr, wenn wir die übrigen Bestandteile des Traumes auf ihr Vorkommen in den Traumgedanken prüfen. Die farbige Tafel, die ich aufschlage, geht (vgl. die Analyse S. 185 f.) auf ein neues Thema, die Kritik der Kollegen an meinen Arbeiten, und auf ein bereits im Traum vertretenes, meine Liebhabereien, außerdem auf die Kindererinnerung, in der ich ein Buch mit farbigen Tafeln zerpflücke, das getrocknete Exemplar der Pflanze rührt an das Gymnasialerlebnis vom Herbarium und hebt diese Erinnerung besonders hervor. Ich sehe also, welcher Art die Beziehung zwischen Trauminhalt und Traumgedanken ist: Nicht nur die Elemente des Traums sind durch die Traumgedanken mehrfach determiniert, sondern die einzelnen Traumgedanken sind auch im Traum durch mehrere Elemente vertreten. Von einem Element des Traums führt der Assoziationsweg zu mehreren Traumgedanken, von einem Traumgedanken zu mehreren Traumelementen. Die Traumbildung erfolgt also nicht so, daß der einzelne Traumgedanke oder eine Gruppe von solchen eine Abkürzung für den Trauminhalt liefert und dann der nächste Traumgedanke eine nächste Abkürzung als Vertretung, etwa wie aus einer Bevölkerung Volksvertreter gewählt werden, sondern die ganze Masse der Traumgedanken unterliegt einer gewissen Bearbeitung, nach welcher die meist- und bestunterstützten Elemente sich für den Eintritt in den Trauminhalt herausheben, etwa der Wahl durch Listenskrutinium analog. Welchen Traum immer ich einer ähnlichen Zergliederung unterziehe, ich finde stets die nämlichen Grundsätze bestätigt, daß die Traumelemente aus der ganzen Masse der Traumgedanken gebildet werden und daß jedes von ihnen in bezug auf die Traumgedanken mehrfach determiniert erscheint. Es ist gewiß nicht überflüssig, diese Relation von Trauminhalt und Traumgedanken an einem neuen Beispiel zu erweisen, welches sich durch besonders kunstvolle Verschlingung der wechselseitigen Beziehungen auszeichnet. Der Traum rührt von einem Patienten her, den ich wegen Angst in geschlossenen Räumen behandle. Es wird sich bald ergeben, weshalb ich mich veranlaßt finde, diese ausnehmend geistreiche Traumleistung in folgender Weise zu überschreiben: Er fährt mit großer Gesellschaft in die X-Straße, in der sich ein bescheidenes Einkehrwirtshaus befindet (was nicht richtig ist). In den Räumen desselben wird Theater gespielt; er ist bald Publikum, bald Schauspieler. Am Ende heißt es, man müsse sich umziehen, um wieder in die Stadt zu kommen. Ein Teil des Personals wird in die Parterreräume verwiesen, ein anderer in die des ersten Stockes. Dann entsteht ein Streit. Die oben ärgern sich, daß die unten noch nicht fertig sind, so daß sie nicht herunter können. Sein Bruder ist oben, er unten, und er ärgert sich über den Bruder, daß man so gedrängt wird. Es war übrigens schon beim Ankommen bestimmt und eingeteilt, wer oben und wer unten sein soll. Dann geht er allein über die Anhöhe, welche die X-Straße gegen die Stadt hin macht, und geht so schwer, so mühselig, daß er nicht von der Stelle kommt. Ein älterer Herr gesellt sich zu ihm und schimpft über den König von Italien. Am Ende der Anhöhe geht er dann viel leichter. Die Beschwerden beim Steigen waren so deutlich, daß er nach dem Erwachen eine Weile zweifelte, ob es Traum oder Wirklichkeit war. Dem manifesten Inhalt nach wird man diesen Traum kaum loben können. Die Deutung will ich regelwidrig mit jenem Stück beginnen, welches vom Träumer als das deutlichste bezeichnet wurde. Die geträumte und wahrscheinlich im Traum verspürte Beschwerde, das mühselige Steigen unter Dyspnoe, ist eines der Symptome, die der Patient vor Jahren wirklich gezeigt hatte, und wurde damals im Verein mit anderen Erscheinungen auf eine (wahrscheinlich hysterisch vorgetäuschte) Tuberkulose bezogen. Wir kennen bereits diese dem Traum eigentümliche Sensation der Gehhemmung aus den Exhibitionsträumen und finden hier wieder, daß sie als ein allezeit bereitliegendes Material zu Zwecken irgendwelcher anderen Darstellung verwendet wird. Das Stück des Trauminhalts, welches beschreibt, wie das Steigen anfänglich schwer war und am Ende der Anhöhe leicht wurde, erinnerte mich bei der Erzählung des Traums an die bekannte meisterhafte Introduktion der Sappho von Alphonse Daudet. Dort trägt ein junger Mann die Geliebte die Treppen hinauf, anfänglich wie federleicht; aber je weiter er steigt, desto schwerer lastet sie auf seinen Armen, und diese Szene ist vorbildlich für den Verlauf des Verhältnisses, durch dessen Schilderung Daudet die Jugend mahnen will, eine ernstere Neigung nicht an Mädchen von niedriger Herkunft und zweifelhafter Vergangenheit zu verschwendenMan denke zur Würdigung dieser Darstellung des Dichters an die im Abschnitt über Symbolik mitgeteilte Bedeutung der Stiegenträume. Obwohl ich wußte, daß mein Patient vor kurzem ein Liebesverhältnis mit einer Dame vom Theater unterhalten und gelöst hatte, erwartete ich doch nicht, meinen Deutungseinfall berechtigt zu finden. Auch war es ja in der Sappho umgekehrt wie im Traum; in letzterem war das Steigen anfänglich schwer und späterhin leicht; im Roman diente es der Symbolik nur, wenn das, was zuerst leichtgenommen wurde, sich am Ende als eine schwere Last erwies. Zu meinem Erstaunen bemerkte der Patient, die Deutung stimme sehr wohl zum Inhalte des Stückes, das er am Abend vorher im Theater gesehen. Das Stück hieß Rund um Wien und behandelte den Lebenslauf eines Mädchens, das, zuerst anständig, dann zur Demimonde übergeht, Verhältnisse mit hochstehenden Personen anknüpft, dadurch »in die Höhe kommt«, endlich aber immer mehr »herunterkommt«. Das Stück hatte ihn auch an ein anderes vor Jahren gespieltes erinnert, welches den Titel trug Von Stufe zu Stufe und auf dessen Ankündigung eine aus mehreren Stufen bestehende Stiege zu sehen war. Nun die weitere Deutung. In der X-Straße hatte die Schauspielerin gewohnt, mit welcher er das letzte, beziehungsreiche Verhältnis unterhalten. Ein Wirtshaus gibt es in dieser Straße nicht. Allein, als er der Dame zuliebe einen Teil des Sommers in Wien verbrachte, war er in einem kleinen Hotel in der Nähe abgestiegen. Beim Verlassen des Hotels sagte er dem Kutscher: Ich bin froh, daß ich wenigstens kein Ungeziefer bekommen habe! Der Kutscher darauf: Wie kann man aber da absteigen! Das ist ja gar kein Hotel, eigentlich nur ein Einkehrwirtshaus.apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Sentences_ES.txt0100644 0000000 0000000 00000043156 14523004075 034173 0ustar00rootroot0000000 0000000 Lo primero que la comparación del contenido manifiesto con las ideas latentes evidencia al investigador es que ha tenido efecto una magna labor de condensación. El sueño es conciso, pobre y lacónico en comparación con la amplitud y la riquea de las ideas latentes. Su relación escrita ocupa apenas media página. En cambio, la del análisis en el cual se hallan contenidas las ideas latentes ocupa seis, ocho o doce veces más espacio. Esta proporción es muy variable, y por lo que hasta el momento hemos podido comprobar, no influye para nada en el sentido de los sueños correspondientes. Generalmente se estima muy por debajo el montante de la comprensión que ha tenido efecto, pues se consideran las ideas latentes descubiertas como la totalidad del material dado, siendo así que no constituyen sino una parte del mismo y que, prosiguiendo el análisis, podemos hallar todavía nuevas series de ideas que se ocultaban detrás del sueño. Ya indicamos antes que jamás podemos estar seguros de haber agotado la interpretación de un sueño. Aunque la solución obtenida nos parezca completa y satisfactoria, queda siempre la posibilidad de que el mismo sueño haya servido también de exteriorización a otro sentido más. Así, pues, el montante de condensación es -en términos rigurosos- indeterminable. Contra el aserto de que la desproporción entre contenido manifiesto e ideas latentes nos fuerza a deducir que en la elaboración onírica ha tenido efecto una amplia condensación de material psíquico, podría elevarse una objeción, a primera vista muy plausible. Pudiera, en efecto, alegarse la impresión que con tanta frecuencia experimentamos de haber soñado muchas cosas a través de toda la noche y haber olvidado después la mayor parte. De este modo el sueño que al despertar recordamos no sería sino un resto de la total elaboración onírica, la cual, recordada por entero, presentaría una amplitud igual a la de las ideas latentes. Hay aquí una parte de verdad, pues la observación de que cuando más fielmente nos es dado reproducir un sueño es cuando intentamos recordarlo inmediatamente después de despertar, mientras que conforme avanza el día va haciéndose su recuerdo cada vez más vago e incompleto, es rigurosamente cierta. Pero, por otro lado, podemos comprobar que el sentimiento de haber soñado mucho más de lo que podemos reproducir reposa muchas veces en una ilusión, cuyo origen aclararemos más adelante. Además, la hipótesis de una condensación en la elaboración onírica no queda contradicha en modo alguno por la posibilidad del olvido de los sueños, pues resulta demostrada por las masas de representaciones pertenecientes a cada uno de los fragmentos oníricos conservados. Lo que sucede cuando realmente ha sido olvidada una gran parte del sueño es que tal olvido nos cierra el acceso a una nueva serie de ideas latentes, pues nada justifica la suposición de que los fragmentos oníricos olvidados no se habrían referido sino a aquellas ideas que ya conocemos por el análisis de los conservados. Ante la extraordinaria cantidad de ocurrencias que el análisis aporta con respecto a cada elemento del contenido onírico surgirá en nuestros lectores la duda de si podemos considerar como perteneciente a las ideas latentes todo aquello que a posteriori se nos ocurre durante la labor analítica; esto es, si debemos suponer que todas estas ideas se hallaban ya en actividad durante el reposo y contribuyeron a la elaboración del sueño, o si no es mucho más verosímil que durante dicha labor surjan nuevas asociaciones de ideas que no tomaron parte alguna en la constitución del mismo. Sólo condicionalmente podemos agregarnos a esta duda. Es, desde luego, cierto que durante el análisis surgen por primera vez algunas asociaciones, pero siempre nos es dado comprobar que tales nuevas conexiones sólo se establecen entre ideas que se hallaban ya enlazadas de otra manera en el contenido latente. Las nuevas conexiones no son sino contactos o corto circuitos facilitados por la existencia de otros caminos de enlace más profundos. Con respecto a la mayor parte de las masas de ideas descubiertas en el análisis, nos vemos obligados a reconocer que han actuado ya en la elaboración del sueño; pues cuando hemos seguido una cadena de tales pensamientos, que parecen exentos de todo nexo con dicha elaboración, tropezamos bruscamente con una idea que se halla representada en el sueño, es indispensable para la elaboración del mismo y no resulta accesible sino por la persecución de dicha serie de pensamientos, ajena en apariencia a la formación del producto onírico. Recuérdese a este respecto el sueño de la monografía botánica, que se nos muestra como el resultado de una asombrosa condensación, aunque no hemos comunicado su análisis sino fragmentariamente. Pero entonces, ¿cómo hemos de representarnos el estado psíquico que durante el reposo precede al soñar? Las ideas latentes, ¿aparecen dadas en conjunto o son recorridas de un modo sucesivo? ¿No podrá ser también que, partiendo de diversos centros, se constituyan varias cadenas de ideas simultáneas, que luego se unan en un punto dado? A mi juicio, no tenemos necesidad ninguna de crearnos una representación plástica del estado psíquico en la elaboración onírica. Bastará con no olvidar que se trata del pensamiento inconsciente y que el proceso puede ser muy distinto del que percibíamos en nosotros en la reflexión voluntaria acompañada de conciencia. De todos modos, el hecho es que la elaboración onírica reposa sobre una condensación permanente inquebrantable. Ahora bien: ¿cómo se lleva a cabo tal condensación? Si reflexionamos que de las ideas latentes halladas sólo una minoría queda representada en el sueño por uno de sus elementos de representación, habríamos de concluir que la condensación se verifica por exclusión, no siendo así el sueño una fiel traducción o una proyección, punto por punto, de las ideas latentes, sino una reproducción harto incompleta y llena de lagunas de las mismas. Este juicio es, sin embargo, como pronto veremos, harto equivocado. Pero tomémoslo al principio como base y continuemos preguntándonos: si al contenido manifiesto no llegan sino pocos elementos de las ideas latentes, ¿qué condiciones determinan la selección de las mismas? Para contestar a esta interrogación examinaremos aquellos elementos del contenido manifiesto que tienen que haber cumplido tales condiciones. El material mejor para esta investigación será, sin duda, un sueño en cuya elaboración haya tenido efecto una condensación particularmente enérgica. Elegiremos el de la monografía botánica, expuesto antes del capítulo V (pág. 448 del presente volumen). Sueño de la monografía botánica. Contenido manifiesto. He escrito una monografía sobre una especie (indeterminada) de plantas. Tengo el libro ante mí y vuelvo en este momento la página por la que se hallaba abierto y que contiene una lámina en colores. Cada ejemplar ostenta, a manera de herbario, un espécimen disecado de la planta. El elemento más evidente de este sueño es la monografía botánica. Como ya indicamos, procede de las impresiones del día del sueño, pues la tarde anterior al mismo había visto realmente en el escaparate de un librero una monograma sobre los ciclámenes. El contenido manifiesto omite mencionar esta especie y conservar tan sólo la monografía y su relación con la Botánica. La monografía botánica demuestra en seguida su relación con mi estudio sobre la cocaína, y de esta última se dirige la asociación de ideas, por un lado, al escrito redactado con motivo del aniversario de un laboratorio y a determinados hechos relacionados con tal institución, y por otro, a mi amigo el oculista doctor Königstein, que participó en la aplicación de la cocaína como anestésico. A la persona del doctor Königstein se enlazan, además, el recuerdo del interrumpido diálogo que sostuve con él la tarde anterior y los diversos pensamientos sobre el pago de los servicios médicos entre colegas. Esta conversación es el verdadero estímulo onírico actual. La monograma sobre los ciclámenes es también una actualidad, pero de naturaleza indiferente. Resulta, pues, que la monografía botánica del sueño se demuestra como un elemento común intermedio entre ambos sucesos diurnos, tomado sin modificación alguna de la impresión indiferente y enlazado con el suceso psíquicamente importante por amplísimos enlaces de asociaciones. Pero no sólo la representación compuesta monografía botánica, sino también aisladamente cada uno de sus elementos, botánica y monografía, van profundizando más y más, por medio de múltiples asociaciones, en la madeja de ideas latentes. Al elemento botánica pertenecen los recuerdos relativos a la persona del profesor Gaertner (jardinero), a su floreciente mujer, a aquella paciente mía cuyo nombre era Flora y la señora de la que relaté la historia de las flores olvidadas. El elemento Gaertner me conduce nuevamente al laboratorio y a la conversación con Königstein, a la que pertenece asimismo la mención de mis dos pacientes. De la señora de las flores parte un camino mental hasta las flores preferidas de mi mujer, punto en el que converge también otro camino cuyo punto de partida es el título de la monografía vista en la vigilia. El elemento botánica recuerda, además, el episodio del herbario y un examen de mi época universitaria, y un nuevo tema tratado en mi conversación con el oculista -el de mis aficiones- se enlaza por mediación de la alcachofa, a la que humorísticamente llamo mi flor preferida, a la concatenación de ideas por parte de las flores olvidadas. Detrás del elemento alcachofa se esconde, en primer lugar, el recuerdo de Italia, y en segundo, el de una escena infantil que inició mis relaciones, tan íntimas luego, con los libros. Así, pues, botánica es un verdadero foco de convergencia, en el que se reúnen para el sueño numerosas series de ideas, cuyo enlace quedó efectuado en mi conversación con Königstein. Nos hallamos aquí en medio de una fábrica de pensamientos en la que, como en una obra maestra de hilandería y según los famosos versos, se entrecruzan mil y mil hilos, -van y vienen las lanzaderas, -manan invisiblemente las hebras - y un único movimiento establece mil enlaces.(Goethe: 'Faust'.) El elemento monografía del sueño procede a su vez de dos temas: lo unilateral de mis estudios y lo costoso de mis aficiones. De este primer examen sacamos la impresión de que los elementos monografía y botánica han sido acogidos en el contenido manifiesto por ser los que presentan más considerable número de contactos con la mayoría de las ideas latentes, constituyendo así puntos de convergencia en los que van a reunirse muchas de tales ideas; esto es, por entrañar con respecto a la interpretación una multiplicidad de significaciones. Expresando en forma distinta el hecho en que basamos esta explicación, podemos decir que cada uno de los elementos del contenido manifiesto demuestra hallarse superdeterminado y múltiplemente representado en las ideas latentes. Investigando la emergencia de los demás elementos del sueño en las ideas latentes realizamos aún nuevos descubrimientos. La lámina en colores contenida en la página por la que abro el libro se refiere (véase el análisis) a un nuevo tema, la crítica de mis obras por mis colegas; a otro ya representado en el sueño, mis aficiones, y al recuerdo infantil de la destrucción de un libro que tenía láminas de colores. El espécimen disecado de la planta se refiere al suceso del herbario escolar y hace resaltar este recuerdo con especial energía. Veo, pues, de qué género es la relación entre el contenido manifiesto y las ideas latentes: no sólo se hallan múltiplemente determinados los elementos del sueño por las ideas latentes, sino que cada una de éstas se halla asimismo representada en el sueño por varios elementos. De un elemento del sueño conduce el camino de asociación a varias ideas latentes y de una idea latente, a varios elementos del sueño. Así, pues, la elaboración no se verifica suministrando cada una de las ideas latentes o cada grupo por ellas formando una abreviatura destinada al contenido del sueño -como los habitantes de una nación eligen diputados que los representen en Cortes -, sino que la completa totalidad de las ideas latentes es sometida a cierta elaboración conforme a la cual los elementos más firmes y eficazmente sustentados quedan situados en primer término para su acceso al contenido manifiesto, procedimiento análogo al de elección por listas electorales. Cualquiera que sea el sueño que sometamos a esta disección, confirmaremos los mismos principios; esto es, que los elementos del contenido manifiesto quedan constituidos a expensas de la totalidad de las ideas latentes y cada uno de ellos se muestra múltiplemente determinado con relación a dichas ideas. No es seguramente ocioso demostrar prácticamente esta relación entre contenido manifiesto e ideas latentes con un nuevo ejemplo, caracterizado por la complicada trama de las relaciones recíprocas. Este sueño procede de un enfermo de claustrofobia (miedo a los espacios cerrados) al que tuve sometido a tratamiento. El título que doy a su ingeniosísima construcción onírica se halla plenamente justificado, como el lector verá más adelante. Un bello sueño. Acompañado por un nutrido grupo de gente, entra en la calle de X, en la cual hay una modesta posada (dato inexacto en la realidad). En las habitaciones de esta posada se está verificando una representación teatral, y él es tan pronto espectador como actor. Al final tienen todos que cambiarse de traje para volver a la ciudad. A este fin se designa a parte del personal las habitaciones del piso bajo y a la otra las del primero. Los de arriba se incomodan porque los de abajo no han acabado todavía y no pueden ellos bajar. Su hermano está arriba; él, abajo, y se incomoda con aquél porque le da tanta prisa (toda esta parte, oscura en el sueño). Además, ya al llegar estaban distribuidas las habitaciones y determinado quién había de estar arriba y quién abajo. Luego camina solitario por la cuesta arriba que la calle X forma en dirección a la ciudad y anda tan difícil y trabajosamente, que apenas avanza. Un caballero anciano se une a él e insulta al rey de Italia. Próximo ya al final de la pendiente comienza a andar con mayor facilidad.La fatiga al andar fue tan clara en el sueño, que todavía, al despertar, dudó el sujeto por algunos momentos si se trataba de un sueño o de una realidad. Si nos atenemos al contenido manifiesto, no presenta este sueño nada que merezca nuestro interés. Contra lo regular, comenzaré la interpretación por el fragmento que el sujeto manifiesta ha sido el más claro y preciso. La fatiga soñada y probablemente sentida en el sueño, esto es, la disnea al subir la cuesta, es uno de los síntomas que el sujeto mostró realmente hace algunos años y fue atribuido por entonces, con otros fenómenos, a una tuberculosis (simulada probablemente por la histeria). Conocemos ya, por nuestro estudio de los sueños exhibicionistas, esta sensación de parálisis, peculiar al fenómeno onírico, y volvemos a comprobar aquí que es utilizada como un material disponible en todo momento para los fines de otra cualquier representación. El fragmento onírico que describe cómo la subida se hacía muy trabajosa al principio y fácil, en cambio, al final de la pendiente me recordó, al escuchar el relato de este sueño, la conocida y magistral introducción de la Safo, de Alfonso Daudet. Un joven sube una escalera llevando en brazos a su amada. Al principio no siente apenas el peso del adorado cuerpo, pero conforme va subiendo va haciéndose más pesada la carga, hasta resultarle intolerable. Esta escena resume la narración de Daudet, en la cual se propone el poeta advertir a la juventud de los peligros de prodigar seria inclinación a mujeres de baja extracción y dudoso pasado. Aunque sabía que mi paciente había mantenido, y roto poco tiempo antes, relaciones amorosas con una actriz, no esperaba yo que mi espontánea interpretación se demostrase acertada. Además, la escena de Safo se desarrollaba en sentido inverso a la del sueño, pues en éste es la subida penosa al principio y luego fácil mientras que para el símbolo de la novela es necesario que aquello que al principio parece ligero resulte luego una pesada carga. Para mi sorpresa, observó el paciente que tal interpretación se adaptaba muy bien al contenido de la obra que la noche anterior había visto representar en el teatro. Dicha obra se titulaba En derredor de Viena y desarrollaba la vida de una muchacha de origen humilde que, lanzada a la vida galante, subía a capas más altas de la sociedad por sus relaciones con hombres aristócratas, pero acababa descendiendo cada vez más bajo. El argumento de esta obra le había recordado otra, titulada De escalón en escalón, en cuyos carteles anunciadores se ostentaba una escalera de varios escalones. La interpretación de este sueño continuó luego en la forma siguiente: En la calle X había vivido la actriz con la que últimamente había mantenido relaciones. En dicha calle no hay posada ninguna. Pero una vez que el sujeto había pasado parte del verano en Viena se alojó (descendió 'abgestregen') en un hotel cercano. Al abandonarlo, dijo al cochero: Después de todo, no está mal este hotel. Por lo menos no hay en él pulgas ni chinches (ésta era, además, una de sus fobias). A lo cual respondió el cochero: No sé cómo se le ha ocurrido a usted venir a parar aquí. Más que un hotel es una posada. Al elemento posada se enlaza en seguida el recuerdo de unos versos de Uhland: Hace poco fui invitado -por un amable posadero. EI posadero de estos versos es un manzano.apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Sentences_FR.txt0100644 0000000 0000000 00000045030 14523004075 034164 0ustar00rootroot0000000 0000000 La première chose qui devient claire à l’investigateur lorsqu’il compare le contenu de rêve et les pensées de rêve, c’est qu’ici a été effectué un prodigieux travail de condensation. Le rêve est concis, pauvre et laconique, comparé à l’ampleur et à la richesse des pensées de rêve. Une fois transcrit, le rêve remplit une demi-page; l’analyse dans laquelle sont contenues des pensées de rêve nécessite un espace d’écriture six fois, huit fois, douze fois plus grand. Le rapport est variable selon les rêves; pour autant que j’aie pu le contrôler, il ne change jamais de sens. En règle générale, on sous-estime le degré de la compression qui a lieu en considérant les pensées de rêve mises en lumière comme le matériel complet, alors qu’un travail d’interprétation plus poussé peut dévoiler de nouvelles pensées cachées derrière le rêve. Nous avons déjà dû indiquer qu’on n’est à vrai dire jamais sûr d’avoir complètement interprété un rêve; même lorsque sa résolution apparaît satisfaisante et sans lacunes, il n’en reste pas moins toujours possible qu’à travers le même rêve se révèle un autre sens encore. Le quotient de condensation est donc – rigoureusement parlant – indéterminable. Face à l’affirmation selon laquelle la disproportion entre le contenu de rêve et les pensées de rêve nous oblige à conclure qu’une condensation extensive du matériel psychique a lieu dans la formation du rêve, on pourrait faire valoir une objection qui semble fort tentante à première vue. N’avons-nous pas bien souvent la sensation d’avoir rêvé beaucoup de choses pendant toute la nuit et d’en avoir ensuite oublié de nouveau la plus grande partie? Le rêve dont nous nous souvenons au réveil serait alors simplement un reste de la totalité du travail de rêve, qui équivaudrait sans doute en ampleur aux pensées de rêve si nous pouvions justement nous en souvenir complètement. Une part de cela est sûrement exacte; on ne saurait se tromper si l’on fait observer qu’un rêve est le plus fidèlement reproduit lorsqu’on tente de s’en souvenir peu après le réveil et qu’au fur et à mesure qu’on approche du soir, son souvenir devient de plus en plus lacunaire. Mais, d’un autre côté, on doit reconnaître que la sensation d’avoir rêvé beaucoup plus que ce qu’on peut en reproduire repose très souvent sur une illusion dont la genèse sera expliquée plus tard. Qui plus est, l’hypothèse d’une condensation dans le travail de rêve n’est pas affectée par la possibilité de l’oubli du rêve, car elle est démontrée par les masses de représentations qui se rattachent à chacun des fragments du rêve qui ont été conservés. Si un grand fragment du rêve est effectivement perdu pour le souvenir, l’accès à une nouvelle série de pensées de rêve demeure par là même comme barré pour nous. Que les fragments du rêve disparus ne se soient également rapportés qu’à ces pensées que nous connaissons déjà à partir de l’analyse des fragments qui ont été conservés, c’est là une attente que rien ne peut justifier. Devant la surabondance des idées incidentes que l’analyse apporte à propos de chacun des éléments du contenu de rêve, un doute principiel s’éveillera chez plus d’un lecteur: peut-on donc compter au nombre des pensées de rêve tout ce qui, après coup, vous vient à l’idée dans l’analyse, c.-à-d. peut-on supposer que toutes ces pensées ont déjà été actives pendant l’état de sommeil et ont coopéré à la formation du rêve? Ou bien ne serait-il pas plutôt vrai que pendant que se déroule l’analyse apparaissent de nouvelles liaisons de pensées qui n’avaient pas participé à la formation du rêve? Je ne puis souscrire à ce doute qu’avec réserve. Que telle ou telle liaison de pensée n’apparaisse que pendant l’analyse, cela est certes exact; mais on peut chaque fois se convaincre que ces liaisons nouvelles s’établissent seulement entre des pensées qui sont déjà reliées d’une autre façon dans les pensées de rêve; les liaisons nouvelles sont en quelque sorte des circuits marginaux, des courts-circuits, rendus possibles par l’existence de voies de liaison différentes et situées plus en profondeur. Quant à la surabondance des masses de pensées mises à découvert dans l’analyse, on doit convenir qu’elles ont déjà été actives dans la formation du rêve – car si l’on s’est frayé un chemin à travers une chaîne de ces pensées qui sont apparemment sans corrélation avec la formation du rêve, on tombe brusquement sur une pensée qui, représentée dans le contenu de rêve, est indispensable pour l’interprétation du rêve et qui n’était pourtant pas accessible autrement qu’à travers cette chaîne de pensées. Voir par exemple à ce sujet le rêve de la monographie botanique, qui apparaît comme le résultat d’une étonnante opération de condensation, même si je n’ai pas complètement communiqué son analyse. Mais comment doit-on alors se représenter l’état psychique pendant le dormir qui précède le rêver? Les pensées de rêve existent-elles toutes les unes à côté des autres, ou sont-elles parcourues les unes après les autres, ou bien plusieurs cheminements de pensée simultanés se forment-ils à partir de centres distincts pour ensuite se rejoindre? J’estime qu’il n’y a encore aucune nécessité à se faire une représentation plastique de l’état psychique lors de la formation du rêve. N’oublions surtout pas qu’il s’agit d’un penser inconscient et que le processus peut facilement être différent de celui que nous percevons en nous lors d’une réflexion intentionnelle accompagnée de conscience. Mais le fait que la formation du rêve repose sur une condensation est établi de façon inébranlable. Comment cette condensation se produit-elle donc? Si l’on considère que, parmi les pensées de rêve qu’on a découvertes, très peu sont représentées dans le rêve par l’un de leurs éléments de représentation, on devrait en conclure que la condensation advient par la voie de l’omission, le rêve n’étant pas une traduction fidèle ou une projection point par point des pensées de rêve, mais une restitution extrêmement incomplète et lacunaire de celles-ci. Cette manière de voir est, comme nous le constaterons bientôt, très imparfaite. C’est pourtant sur elle que nous prenons d’abord appui pour nous demander encore: si seuls quelques éléments provenant des pensées de rêve parviennent dans le contenu de rêve, quelles sont les conditions qui déterminent le choix de ceux-ci? Pour obtenir des renseignements sur ce point, on tournera maintenant son attention vers les éléments du contenu de rêve qui doivent forcément avoir rempli les conditions recherchées. Un rêve auquel a contribué dans sa formation une condensation particulièrement forte sera pour cette investigation le plus favorable des matériels. Je choisis le rêve de la monographie botanique communiqué à la p. 205. Contenu du rêve: J’ai écrit une monographie sur une variété de plante (laissée indéterminée). Le livre est devant moi, en le feuilletant je tombe sur une planche en couleurs pliée. À l’exemplaire est attaché un spécimen séché de la plante. L’élément qui saute le plus aux yeux dans ce rêve est la monographie botanique. Celle-ci provient des impressions du jour du rêve; j’avais effectivement vu dans la vitrine d’une librairie une monographie sur l’espèce «cyclamen». La mention de cette espèce manque dans le contenu du rêve, dans lequel seules ont subsisté la monographie et sa relation à la botanique. La «monographie botanique» révèle immédiatement sa relation au travail sur la cocaïne que j’ai écrit jadis; partant de la cocaïne, la liaison de pensée mène d’un côté au volume commémoratif et à certains incidents qui ont eu lieu dans un laboratoire universitaire, de l’autre à mon ami ophtalmologiste, le Dr Königstein, qui a eu sa part dans la mise en valeur de la cocaïne. À la personne du Dr K. se rattachent en outre le souvenir de la conversation interrompue que j’eus le soir précédent, et les multiples pensées sur le dédommagement pour les actes médicaux pratiqués entre confrères. Cette conversation est d’ailleurs le véritable et actuel excitateur du rêve; la monographie sur le cyclamen est également un point d’actualité, mais de nature indifférente; la «monographie botanique» du rêve, à ce que je vois, se révèle être un élément commun intermédiaire entre deux expériences vécues de la journée, repris sans être modifié des impressions indifférentes et connecté à l’expérience vécue psychiquement significative par les liaisons associatives les plus étendues. Or ce n’est pas seulement la représentation composée «monographie botanique», mais aussi chacun de ses éléments «botanique» et «monographie» qui, de façon séparée, pénètre de plus en plus profondément, par des liaisons multiples, dans l’embrouillamini des pensées du rêve. À «botanique» appartiennent les souvenirs de la personne du Professeur Gärtner [jardinier], de son épouse florissante, de ma patiente qui s’appelle Flora, et de la dame dont j’ai raconté l’histoire de fleurs oubliées. Gärtner conduit derechef au laboratoire et à la conversation avec Königstein; la mention des deux patientes fait partie de la même conversation. À partir de la femme aux fleurs bifurque une voie de pensée qui mène aux fleurs favorites de ma femme, et dont l’autre issue se trouve dans le titre de la monographie fugitivement aperçue dans la journée. Par ailleurs «botanique» rappelle un épisode de lycée et un examen de mes années d’université, et un nouveau thème abordé dans cette conversation, celui de mes occupations favorites, se rattache, par l’intermédiaire de ce que j’appelle par plaisanterie ma fleur favorite, l’artichaut, à la chaîne de pensées partant, des fleurs oubliées; derrière «artichaut» se cache le souvenir, d’une part, de l’Italie et, d’autre part, d’une scène d’enfance dans laquelle j’ai inauguré mes relations avec les livres, depuis lors devenues intimes. «Botanique» est donc un vrai point nodal où se rejoignent pour donner le rêve d’innombrables cheminements de pensée qui, dans cette conversation, sont entrés en corrélation de façon justifiée. On se trouve ici au beau milieu d’une fabrique de pensées, dans laquelle, comme pour réaliser le chef-d’œuvre du tisserand, «Une pression du pied met en mouvement mille fils, Les navettes vont et viennent à vive allure, Les fils glissent sans qu’on les voie, Un seul coup donne mille liaisons.» «Monographie» dans le rêve touche une fois de plus à deux thèmes, ce que mes études ont d’unilatéral et ce que mes occupations favorites ont de dispendieux. De cette première investigation on retire l’impression que les éléments «botanique» et «monographie» ont trouvé accueil dans le contenu du rêve parce qu’ils peuvent offrir les contacts les plus étendus avec la plupart des pensées du rêve, donc constituer des points nodaux où se rejoignent un très grand nombre des pensées du rêve, et parce que, par rapport à l’interprétation du rêve, ils sont multivoques. On peut aussi formuler autrement le fait qui est à la base de cette explication et dire alors: chacun des éléments du contenu du rêve se révèle être surdéterminé, être représenté de multiples façons dans les pensées du rêve. Nous en apprenons plus si nous examinons les autres constituants du rêve en fonction de leur occurrence dans les pensées du rêve. La planche en couleurs que je déplie conduit (cf. l’analyse, p. 208) à un nouveau thème – les critiques que les confrères font de mes travaux – et à un thème déjà représenté dans le rêve, celui de mes occupations favorites, puis encore au souvenir d’enfance où j’arrache les pages d’un livre aux planches en couleurs; l’exemplaire séché de la plante touche à l’expérience de l’herbier vécue au lycée et fait particulièrement ressortir ce souvenir. Je vois donc de quelle sorte est la relation entre le contenu du rêve et les pensées du rêve: non seulement les éléments du rêve sont déterminés de multiples façons, mais les pensées du rêve prises une à une sont aussi représentées dans le rêve par plusieurs éléments. La voie associative conduit d’un élément du rêve à plusieurs pensées du rêve, d’une pensée du rêve à plusieurs éléments du rêve. La formation du rêve ne se fait donc pas de telle sorte que la pensée du rêve isolée ou un groupe de pensées fournissent un abrégé du contenu du rêve, une nouvelle pensée du rêve fournissant ensuite un nouvel abrégé à titre de représentance, un peu comme à partir d’une population sont élus les représentants du peuple; au contraire c’est toute la masse des pensées du rêve qui est soumise à une certaine élaboration, en suite de quoi les éléments qui ont les appuis les plus nombreux et les meilleurs se détachent pour entrer dans le contenu du rêve, un peu comme l’élection par scrutin de liste. Quel que soit le rêve que je soumette à une semblable dissection, je trouve constamment confirmés les mêmes principes, à savoir que les éléments du rêve sont formés à partir de toute la masse des pensées du rêve et que chacun d’eux, par rapport aux pensées du rêve, apparaît déterminé de multiples façons. Il n’est certainement pas superflu de démontrer cette relation entre le contenu du rêve et les pensées du rêve sur un nouvel exemple qui se distingue par un enchevêtrement particulièrement ingénieux de relations mutuelles. Le rêve provient d’un patient que je traite pour une angoisse ressentie dans des espaces clos. On verra bientôt pour quelle raison je me trouve amené à intituler comme suit ce rêve qui est une production exceptionnellement riche d’esprit: Un beau rêve. En nombreuse compagnie il entre en voiture dans la rue X, où se trouve une modeste auberge-pension (ce qui n’est pas exact). Dans les locaux de celle-ci on fait du théâtre; il est tantôt public, tantôt acteur. À la fin il est dit qu’il faut changer de vêtements pour retourner en ville. Une partie du personnel est affectée dans les locaux du rez-de-chaussée, une autre dans ceux du premier étage. Survient alors une querelle. Ceux d’en haut se fâchent parce que ceux d’en bas ne sont pas encore prêts, si bien qu’eux ne peuvent pas descendre. Son frère est en haut, lui en bas; et il se fâche contre son frère, parce qu’on est trop pressé. Cette partie n’est pas claire. On avait d’ailleurs, dès l’arrivée, déterminé et réparti qui devait être en haut et qui en bas. Puis il gravit tout seul la côte que comporte la rue X en direction de la ville, et il marche si difficilement, si péniblement, qu’il ne bouge pas de sa place. Un monsieur d’un certain âge se joint à lui et profère des injures contre le roi d’Italie. Au bout de la côte, il marche ensuite beaucoup plus facilement. Les difficultés à monter étaient si nettes qu’une fois réveillé il douta un moment, ne sachant s’il s’agissait d’un rêve ou de la réalité effective. D’après le contenu manifeste on ne pourra guère faire l’éloge de ce rêve. Je vais, contrairement à la règle, commencer l’interprétation par ce fragment qui a été désigné par le rêveur comme étant le plus net. La difficulté rêvée et vraisemblablement éprouvée dans le rêve, la montée [Steigen] pénible avec dyspnée, est l’un des symptômes que le patient avait effectivement présenté des années auparavant, et à l’époque elle fut, en commun avec d’autres manifestations, mise en rapport avec une tuberculose (probablement feinte sur un mode hystérique). Cette sensation d’inhibition dans la marche, propre au rêve, nous la connaissons déjà par les rêves d’exhibition, et nous trouvons ici de nouveau qu’elle est utilisée comme un matériel en tout temps disponible en vue de n’importe quelle autre présentation. Le fragment du contenu du rêve, qui décrit combien la montée fut au début difficile et combien elle devint facile au bout de la côte, m’a rappelé, lors du récit du rêve, l’introduction magistrale bien connue de la «Sapho» d’Alphonse Daudet. Là, un jeune homme porte sa bien-aimée, au début légère comme une plume, jusqu’en haut de l’escalier; mais plus il monte, plus elle pèse lourd dans ses bras, et cette scène préfigure le déroulement de la liaison, où Daudet par sa description entend exhorter la jeunesse à ne pas galvauder un penchant plus sérieux auprès de filles de basse extraction et au passé douteux. J’avais beau savoir que mon patient avait entretenu et rompu il y a peu une liaison amoureuse avec une dame de théâtre, je ne m’attendais pourtant pas à trouver justifiée l’idée qui me vint pour l’interprétation. Il en allait d’ailleurs dans Sapho à l’inverse de ce qui se passait dans le rêve; dans ce dernier, la montée était au début difficile et plus tard facile; dans le roman, les choses n’étaient au service de la symbolique que si ce qui était d’abord tenu pour léger se révélait à la fin peser lourd. À mon étonnement, le patient remarqua que l’interprétation s’accordait très bien avec le contenu de la pièce qu’il avait vue au théâtre la veille au soir. La pièce s’appelait «Vienne à la ronde» et traitait de la carrière d’une jeune fille qui, d’abord convenable, passe ensuite au demi-monde, noue des liaisons avec des personnes haut placées, de ce fait «accède à la haute société», mais finalement «tombe de plus en plus bas». La pièce lui en avait aussi rappelé une autre, jouée il y a des années, qui portait le titre «De marche en marche»et sur l’affiche de laquelle on pouvait voir un escalier à plusieurs marches. Maintenant la suite de l’interprétation. Rue X avait habité l’actrice avec laquelle il avait entretenu la dernière liaison, riche en péripéties. Il n’y a pas d’auberge dans cette rue. Mais une fois où il passait une partie de l’été à Vienne par amour pour la dame, il était descendu dans un petit hôtel du voisinage. En quittant l’hôtel, il dit au cocher: Au moins je suis content de ne pas avoir attrapé de vermine! Par ailleurs encore une de ses phobies. Làdessus le cocher: Mais comment peut-on descendre là! Ce n’est absolument pas un hôtel, à vrai dire c’est seulement une auberge-relais.apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Sentences_IT.txt0100644 0000000 0000000 00000306454 14523004075 034203 0ustar00rootroot0000000 0000000 I clinici italiani fanno una distinzione, non usata dagli autori Americani, tra sindrome di C. e malattia, o morbo, di C. intendendo con il primo termine l'origine surrenalica " primitiva " dell'ipercortisolemia, e col secondo la conseguenza di un addenoma ipofisario, o un carcinoide polmonare o addominale, ACTH secernente. Eccettuato il Cushing iatrogeno, l'affezione più frequente è in assoluto il morbo di C, ovvero un' adenoma ipfisario che stimola entrambi i surreni cronicamente. L' ENIAC ( Electronic Numerical Integrator And Computer ) è considerato il primo computer elettronico della storia, progettato presso l'University of Pennsylvania da J. Presper Eckert e John Mauchly e completato due anni prima dell'invenzione del transistor, nel 1946. Il computer è stato progettato e costruito dal Dr. John Vincent Atanasoff e Clifford E. Berry all'Iowa State University nel periodo 1937-42. Per le innovazioni introdotte dall'ABC John Vincent Atanasoff ha ricevuto la National Medal of Technology dal presidente degli Stati Uniti d' America George H. W. Bush in una cerimonia alla Casa bianca il 13 novembre 1990. In Germania fu introdotto nel 1893 un gioco chiamato " Faustball ", ma il merito della costruzione della pallavolo in forma moderna va riconosciuto a William G. Morgan, istruttore di educazione fisica presso un college dell 'YMCA di Holyoke, nel Massachusetts ( USA ). Fu però Alfred T. Halstead a cambiare il nome di minonette, un pò troppo femminile, in " Volleyball " ( letteralmente " palla sparata " ). Un programmatore di Assembly produrrà spesso un programma molto più veloce che un programmatore esperto di C. Potete accelerare molti programmi di cinque o dieci volte rispetto ai programmi HLL attraverso una buona conoscenza dell'Assembly. Quando non vi è alcuna tensione applicata, gli elettroni in eccesso del semiconduttore tipo N fluiscono entro le cavità del semiconduttore tipo P. Ciò crea una zona di svuotamento che si comporta come una tensione. Ad esempio, per ottenere un plasma di cesio a pressione atmosferica, è necessario elevar- ne la temperatura fino a circa 3000 K, mentre per l'elio, la cui energia di ionizzazione è circa 6 volte più grande, bisogna raggiungere temperature dell'ordine di 20000 K. Va fatta una precisazione sui numeri dati, l'energia di legame degli elettroni più esterni negli atomi vanno da 4.1 eV ( 47500 K) per il Cs a 24 eV ( 278000 K) per l'He. Nel 1912 l'astronomo statunitense Vesto M. Slipher, analizzando i dati raccolti presso l'Osservatorio Lowell in Arizona, mise in evidenza lo spostamento verso il rosso delle righe spettrali di tutte le galassie. Michael E. Brown, planetologo del California Institute of Technology, ne è sicuro. Pronta la replica del presidente americano George W. Bush, che ha ribadito che il Consiglio dei governatori dell'AIEA proporrà sanzioni ad un' Iran dotato del nucleare, ricordando che, in caso di conflitto, gli Stati Uniti proteggeranno Israele. Questa sessione dell'assemblea sarà ricordata per molte cose, ma da qui a venti anni io ritengo che una delle quelle cose sarà questa risoluzione ha detto il deputato A. Donald McEachin, il democratico che ha presentato la proposta alla Camera. L' antico Conservatorio di S. Giuseppe e Teresa di Pucara del 1662 è soggetto a speculazione edilizia. La consegna ha avuto luogo nell'auditorium S. Chiara di Trento, che per l'occasione era pieno. Il presidente degli Stati Uniti George W. Bush ha detto che è disposto a discutere un trattato di pace solo se la Corea del Nord accetterà di dismettere le sue armi atomiche. Quindi ha cominciato a insegnare in molti istituti, sia in Germania che negli Stati Uniti d' America, dove fece ricerche insieme a Gabor A. Somorjai, che gli valsero il Premio Wolf per la chimica nel 1998. Molto distanziati gli outsider, il blogger Mario Adinolfi, con lo 0,1%, e l'economista Pier Giorgio Gawronski ( apparentato con il candidato Jacopo G. Schettini ), con la stessa percentuale di voti. Mercoledì prossimo verrà conferita al Dalai Lama una medaglia da parte del Congresso degli Stati Uniti, cerimonia alla quale parteciperà secondo un portavoce della Casa Bianca anche il presidente George W. Bush. Ha incontrato il patriarca ortodosso Bartolomeo I. L' incontro è avvenuto presso la Chiesa patriarcale di San Giorgio. È stato arrestato questa mattina Carlo Astorino, 53 anni, titolare di una fabbrica di latticini a Frascineto e presidente del Castrovillari Calcio, club che milita in Serie D. L' accusa è di estorsione nei confronti di un suo calciatore. Il presidente George W. Bush ha contattato telefonicamente Aso per riaffermare il principio del traguardo di una denuclearizzazione verificabile della penisola coreana e la necessità che tutte le parti continuino a lavorare verso l'attuazione dell'impegno della Corea del Nord ad abbandonare tutte le sue armi e tutti i suoi programmi nucleari. Carlo O, un 41enne marchigiano, colpevole di aver fatto la linguaccia ad un suo vicino di casa con il quale era frequente a litigare, è stato condannato a sborsare € 1 300 di spese processuali sostenute dalla controparte più un risarcimento per i danni ( la somma sarà decisa in una causa civile ). Un web designer newyorkese, Paul D. Ceglia, avrebbe rivendicato ben l '84% delle azioni della società, attualmente valutata 6,5 miliardi di dollari, facendo valere un contratto che sarebbe stato stipulato tra i due nel 2003. Nel suo territorio infatti confinava l'estremo nord del Ducato di Spoleto con il gastaldato longobardo di Nocera Umbra che comprendeva il Monte S. Angelo, Caudino, Costa e Civitalba. Salvi il Sassoferrato, Claudio Ridolfi, Francesco di Gentile, Gherardo Cibo, Ercole Ramazzani e suoi collaboratori, Cesare Conti, il Pomarancio e F. Silva ed ancora E. Mannucci, Q. Ruggeri, Bruno d' Arcevia ). Nell'ambito dell'economia C. Gini ha studiato la diseguaglianza dei redditi, mettendo a punto diversi metodi il più noto dei quali è il coefficiente di Gini, reso popolare dalla rappresentazione grafica tramite la curva di Lorenz. Con la redazione del " Codice in materia di protezione dei dati personali " ( meglio noto come " Codice della privacy " ), approvato con D. Lgs. 30 giugno 2003, n. 196, la legge n. 675/1996 è stata abrogata. Il centro di Nonantola conserva numerose tracce del passato medievale, tra le quali le due torri dette " dei modenesi " e " dei bolognesi " e la Pieve di S. Michele Arcangelo, risalente al IX secolo. Il nobelio venne scoperto e identificato, in maniera non ambigua, nell'aprile 1958 a Berkeley, da Albert Ghiorso, Torbjørn Sikkeland, John R. Walton e Glenn Theodore Seaborg, che usarono una nuova tecnica a doppia ritrazione. Importante innovazione è la cosiddetta " analisi della varianza ", ma è un suo allievo ( George W. Snedecor ) a utilizzare una distribuzione diversa da quella gaussiana, introducendo la variabile casuale F di Snedecor, dove la " F " è in onore al maestro ( Fisher ). R ' " è un ambiente di sviluppo specifico per l'analisi statistica dei dati che utilizza un linguaggio di programmazione derivato e in larga parte compatibile con S. Venne scritto inizialmente da Robert Gentleman e Ross Ihaka. Nel giugno 1974, un " team " sovietico guidato da G. N. Flerov all'Istituto di ricerca nucleare di Dubna annunciò la produzione di un isotopo con peso atomico pari a 259 e emivita di 7ms, mentre nel settembre 1974, un gruppo di ricerca statunitense guidato da Albert Ghiorso al Lawrence Radiation Laboratory dell'Università di Berkeley annunciò la creazione di un isotopo con peso atomico pari a 263 ed emivita di 0,9 s. Nel giugno 1974, un " team " sovietico guidato da G. N. Flerov all'Istituto di ricerca nucleare di Dubna annunciò la produzione di un isotopo con peso atomico pari a 259 e emivita di 7ms, mentre nel settembre 1974, un gruppo di ricerca statunitense guidato da Albert Ghiorso al Lawrence Radiation Laboratory dell'Università di Berkeley annunciò la creazione di un isotopo con peso atomico pari a 263 ed emivita di 0,9 s. Poiché il loro lavoro fu confermato indipendentemente per primo, gli americani suggerirono il nome seaborgio in onore del chimico americano Glenn T. Seaborg. Glenn T. Seaborg è morto nel 1999. Sono presenti, tra le altre, opere di Aligi Sassu, Renato Birolli, Fiorenzo Tomea, Italo Valenti, Tono Zancanaro, Carmelo Cappello, Tito Gasparini, Vilim Sveçniak, Gugo Manizer, Sylvain Nuccio e A. Bartolomeo Trombini. Nonostante le apparenze, non è una tecnologia nuova, già intorno al 1970 Gerald F. Ross dimostrò per primo la possibilità di utilizzare forme d' onda UWB per la trasmissione di segnali. L' avvento della fotografia astronomica fece aumentare enormemente il numero di stelle variabili conosciute, e i loro nomi raggiunsero velocemente la Z. Si tentò di correre ai ripari ricorrendo al raddoppio: iniziando da RR, poi RS, fino a ZZ. La faccia comune è ovviamente la stessa di tutte le altre monete europee, mentre l'autore delle immagini riportate sulla faccia nazionale delle monete è M. Frantisek Chochola, e l'incisore è Ettore Lorenzo Frapiccini. Ma la donna è decisa a conceder- lo solo se come nuovo capo dello Stato sarà eletto Rufus T. Firefly ( Groucho ), i cui metodi hanno l'arroganza del dittatore e la follia dell'anarchico. Nonostante ciò, alcune persone ( come lo storico F. Tobias ) hanno sostenuto anche dopo la caduta del nazismo che ad appiccare l'incendio non siano stati gli ambienti di destra e i nazisti, ma in ogni caso non vi sono prove certe per nessuna ipotesi. Nel 2004, gli scienziati furono sorpresi nel trovare tracce di ghiaccio cristallino su Quaoar, il che indicherebbe che la sua temperatura superficiale alcune volte durante gli ultimi dieci milioni di anni sarebbe salita fino ad almeno 110 K; allo stato attuale delle conoscenze, non è possibile determinare quale causa possa aver portato ad un simile aumento della temperatura dal suo valore naturale di 55 K. Le teorie più comuni ipotizzano una pioggia di micro-meteore o fenomeni di natura criovulcanica, forse alimentati dal decadimento di elementi radioattivi all'interno del nucleo del planetoide. Le paure di un piano comunista per rovesciare in maniera simile il governo degli Stati Uniti, innescati da una serie di attentati anarchici nel giugno 1919, sono ritenute da molti come la causa che portò ai " Palmer Raids " contro gruppi anarchici, socialisti, e comunisti, all'incarcerazione degli attivisti di sinistra come Eugene V. Debs, sfruttando l'Atto sullo spionaggio del 1917 e l'Atto sulla sedizione del 1918, e al processo e all'esecuzione di Sacco e Vanzetti. Molte delle più oltraggiose accuse del Maccartismo - come la pretesa che il Presidente Dwight D. Eisenhower fosse un comunista - sembrano ora ridicole. In inverno la temperatura non dovrà essere inferiore ai 5-7 ° C. e le annaffiature andranno regolate a seconda della specie, dato che le Adromischus sono distribuite nel Sud-Africa sia in regioni a piovosità estiva sia molte in regioni a piovosità invernale, ma anche con periodi di piovosità in mezze stagioni ( primavera e autunno ) o tutto l'anno, questo fatto implica da parte del coltivatore appassionato l'informar- si del luogo di provenienza della specie. Ne furono ospiti occasionali: Hans Reichenbach, Kurt Gödel, Carl Hempel, Alfred Tarski, W. V. Quine, A. J. Ayer, Arne Naess. Le galassie lenticolari non hanno varianti di forma estese come le galassie spirali, ma possono ugualmente essere divise in sottoclassi a seconda che abbiano una barra centrale, un anello interno o la forma a S. Questa suddivisione è chiamata sistema di classificazione di de Vaucouleurs. Incoraggiato dal suo amico Henri Poincaré, cercherà di determinare se il fenomeno avesse la stessa natura dei raggi X. Durante le sue ricerche mise in contatto con il materiale una lastra fotografica, accorgendosi che era stata impressionata anche se non era stata esposta alla luce del sole: Becquerel concluse che il materiale emetteva dei raggi senza bisogno di un' eccitazione da parte della luce. Dopo aver disputato per anni campionati minori, alla fine della stagione 1998-99 conquista l'Eccellenza e nella stagione 2004-2005 la Serie D. Dopo quattro stagioni passate nel massimo campionato dilettantistico nazionale, arriva nel 2009 il secondo posto alle spalle della Pro Belvedere Vercelli, migliore piazzamento di sempre. Figlio del Tenente Don Francesco Alasia-Aluffi e di Donna Giovanna Francesca De Quesada-Cugia dei Marchesi di S. Saturnino, studiò nelle Università di Cagliari, Torino e Roma. L' istituto è stato fondato nel 1998 dall'imprenditore Landon T. Clay che la finanzia e dal matematico Arthur Jaffe dell'università di Harvard. Compì gli studi medi superiori all'Istituto Tecnico Industriale G. Sommeiller dove ottenne la Licenza fisico-matematica. L' espressione " data dell'egira " ( AH, " annus hegirae " o semplicemente E. o " h. " ) indica quindi una data che si basa su questo tipo di calendario e negli studi specialistici essa precede quella gregoriana, separata da un trattino. Queste formule erano state già trovate da Gaspare Mainardi e pubblicate nel 1856 e nel 1853 erano comparse in una dissertazione di Karl M. Peterson, studente di Ernst Ferdinand Adolf Minding. L' anomia secondo Robert K. Merton Secondo il sociologo funzionalista Robert K. Merton ( pseudonimo di Meyer R. Scholnick ) il termine anomia, derivato da Émile Durkheim, assume un significato nuovo: uno scompenso, anche per la presenza di ostacoli, tra scopi esistenziali messi a disposizione dalla cultura sociale e mezzi legittimi per raggiunger- li. Secondo il sociologo funzionalista Robert K. Merton ( pseudonimo di Meyer R. Scholnick ) il termine anomia, derivato da Émile Durkheim, assume un significato nuovo: uno scompenso, anche per la presenza di ostacoli, tra scopi esistenziali messi a disposizione dalla cultura sociale e mezzi legittimi per raggiunger- li. A parte la prima e l'ultima posizione ( " C. di violino francese " e " C. di basso profondo " ), tutte queste posizioni sono normalmente utilizzate ancora oggi con il nome di " setticlavio ". Alcune teorie affermano che Sextantio ( sei ) farebbe riferimento al vilaggio romano di S. Marco, quello di maggior rilievo sull'altipiano aquilano. Le prime notizie documentate relative al territorio di Santo Stefano si hanno nel 760 con la donazione di Carapelle al monastero di S. Vincenzo al Volturno da parte del re longobardo Desiderio. Sita in via G. D' Annunzio 4, presso la porta della Marina, ai margini delle mura caldoriane. Sembra che in questa zona sorgesse Cutina, antica città dei Vestini, che vennero in conflitto con i Romani nell'anno del consolato di Giuno Bruto Sceva, il 325 a.C, in quell'occasione la città è citata da Livio, ma a parte questo, le fonti tacciono.Il nome di Civitella compare per la prima volta nella " Chronica S. Monasterii Casinensis ". " I misteri di Udolpho ", forse il miglior romanzo della Radcliffe, fu pubblicato per la prima volta nel 1794 dalla casa editrice " G.G. & J. Robinson " di Londra. Nel 1953, Warren venne nominato Chief Justice a capo della Corte Suprema dal presidente americano Dwight D. Eisenhower. Warren presiedette la Commissione Warren che indagò sull'attentato al presidente John F. Kennedy e trasse la conclusione si fosse trattato del gesto di una persona sola e non di un complotto, ma 3 dei 7 commissari non furono d' accordo con la teoria del proiettile unico. Ricostruita diverse volte, ospita al suo interno una Madonna con Santi e Laura Pico, un S. Francesco di Sales, un S. Possidonio con i SS. Francesco e Antonio Abate. Si ritiene che il paese sia stato fondato dalla distruzione di Fabrateria Nova da parte dei Longobardi durante metà del secolo V. Gli abitanti di Fabrateria Nova infatti, dopo l'invasione dei longobardi, si rifugiarono sulle pendici dell'attuale Colle Formale ( un tempo chiamato Colle San Maurizio ) che tuttora domina l'intero paese. Fin dalla sua nascita il paese è devoto a S. Oliva, nella cui omonima chiesa è custodito un antico simulacro della Santa Patrona.Il territorio del comune risulta compreso tra i 538 e i 781 metri sul livello del mare. Si ritiene che essa sia stata fondata dagli Osci come territorio dotato di impianti difensivi sui punti più elevati ( Monte S. Croce - Caiazzo Monte Alifano ). Dell'insediamento furono evidenziati alcuni ambienti con strutture muratorie intonacate, una cella vinaria, due vasche dal pavimento in opus signinum voltate a botte, tre dolii defossum con filignae di C. Julius Felix ( liberto della famiglia Giulia ) ed un porticato con colonne in laterizio. La prima menzione del borgo in età medioevale si ha in un atto notarile del 979, dove si legge che il principe longobardo Pandolfo dona a Martino, abate di S. Maria di Spelonca, tutto ciò che possiede in loco Domicella. Un altro atto di donazione del 1037 parla di un " Caputo de loco Democella, finibus Lauri ", che concede alla chiesa di S. Maria di Spelonca parte delle sue proprietà in contrata Scoropeta. Il piccolo nucleo abitato era già in possesso di una chiesa intitolata alla Madonna delle Grazie nel 1093, anno in cui lo stesso edificio venne donato dal vescovo Sassone ai Padri Benedettini di S. Lorenzo d' Aversa. Dalla seconda metà del secolo XI, il casale fu acquistato dai principi di Capua, Giordano e Riccardo, che troviamo menzionati in un atto del 1087 in cui è confermata l'appartenenza dell'ecclesiam s. Mariae de Domocella all'Abazia feudale di S. Lorenzo d0Aversa, la quale entrò definitivamente in possesso del borgo pochi anni dopo. Il feudo apparteneva al monastero di S. Caterina al Cassaro di Palermo che fece costruire mulini e fondachi. Poiché in zona c' erano numerosi briganti che disturbavano la quiete del paese e raccoglievano i frutti del feudo senza permesso, l'arcivescovo di Monreale, Giovanni Ventimiglia, fece costruire una torre per controllare tutto il feudo, dopo aver ottenuto il permesso dal Re delle due Sicilie, Alfonso V. La torre fu costruita intorno al 1435; la gente che voleva stabilir- si a Munchilebbi, sentendo- si sicura, incominciò a costruire le proprie case intorno ad essa. Al suo interno sono conservati alcuni dipinti di diversi pittori liguri e una statua in legno dello scultore olandese J. Dyck raffigurante il " Martirio di san Sebastiano ". Il municipio è sito in V. Butti 40, fax. La strada principale, cioè la Via Nuova detta " Via larga " ( oggi via A. Baccelli ), univa tra loro le due zone principali del paese che, ancora oggi, portano gli antichi nomi di " Pé della Terra " e " Castellittu " e creava un asse di collegamento tra l'antica chiesa cimiteriale di S. Martino e la chiesa parrocchiale dell'Assunta, situata sulla piazza principale, nel punto più alto del paese. Ad essa si aggiungevano la Via del Paradiso, oggi Via Roma, la Via del Leone, oggi Via G. Marconi e la Via del Sole, ancora così denominata. Nel comune di Rocca Priora, si svolge a gennaio la festa di S. Antonio abate, una festa in onore del Santo protettore degli animali durante la quale c' è la benedizione degli animali che sfilano in carri allegorici realizzati prevalentemente in legno decorati con frutta e pane. Molto sentita è anche la festa del patrono, S. Rocco, che cade il 16 agosto. Distrutta ancora da un violentissimo incendio, poiché le sue abitazioni erano quasi tutte in legno, venne ricostruita nel 1237 intorno all'abbazia di S. Benedetto con la bella pietra bianca della sua montagna, sull'attuale Colle Sant' Angelo ( il santo dei Longobardi ), dominato dalla Rocca Flea, dando- si libere istituzioni comunali sotto la protezione di Federico II, imperatore del Sacro Romano Impero, presente alla cerimonia di fondazione, e seguendo la sua politica ghibellina. Contesa tra Gubbio e Perugia, successivamente si sottomise malvolentieri a Perugia prima di essere consegnata allo Stato della Chiesa da Iacopo P. Canino ( 1458 ). Da segnalare il convento dei Frati Minori " S. Giuseppe " fondato nel 1720 da Ignazio Migliaccio, duca di Galizia e principe di Mazzarino. Si compone allo stato attuale di una massiccia torre cilindrica alta 13 m ( probabilmente di origine saracena ), di una chiesetta detta di S. Antonino che oggi dà il nome anche alla torre, di una cinta muraria turrita che racchiudeva, oltre la torre e la piccola cappella, anche una serie di manufatti in parte ancora leggibili, ed infine dei corpi di fabbrica aggiunti a partire dal 1809. L' altro manufatto edilizio di rilevante interesse è la cappella di S. Antonino. Tra i principali edifici di interesse del centro storico, spicca la Chiesa parrocchiale di S. Pantaleo, patrono della città ( 1635 ), a tre navate, con una facciata contraddistinta da un portale a timpano, posta all'estremità sud-occidentale del centro abitato, in una posizione da cui si gode un eccezionale panorama, sino al Campidano. Di notevole importanza storica e naturalistica è il Monte di S. Antonio, dove il 13 giugno si svolge la ricorrenza del Santo di Padova, la quale richiama da tutta la Sardegna migliaia di fedeli e turisti. Il paese di Sagama, secondo gli studi del Dott. Mario A. Sanna ( che discusse nel 2005, presso l'Università di Sassari una tesi di laurea in Lettere, sulla storia e la toponomastica del paese ), sorse in epoca preistorica quando intorno ad una fertile vallata denominata " Badde 'e Sagama ", in una felice posizione strategica, su un gradino calcareo fu edificato il nuraghe Muristene e probabilmente nell'area dove attualmente insiste la chiesa seicentesca intitolata all'Arcangelo Gabriele un santuario pagano. Il 9 gennaio del 1388 i suoi rappresentanti ( e quelli di Triganu ), sottoscrissero presso la chiesa di S. Giovanni Battista a Magomadas, la Pergamena d' Eleonora ovvero la PACE tra il Regno di Arborea e il Regno d' Aragona. È attestata un Aleè Couvert in località Badde Sagama, al confine con Tinnura, mentre Mario A. Sanna, nella sua tesi ha pubblicato la foto di un menhir in località Mura Pianu ( segnalato dal Sig. Salvatore Carta, dipendente comunale ), denominato " Sa Pedra Marmurada ". Inizialmente S. Vincenzo sorgeva come piccolo monastero, che veniva gestito dai diversi feudatari, in base alle diverse vicissitudini del periodo storico. Nel 1855 diviene comune autonomo con le frazioni di S. Sisto e Gesuiti. La piazza è stata realizzata dall'architetto ferrarese G. B. All'interno del Palazzo è possibile ammirare gli affreschi seicenteschi del Badalocchio ( in particolare nella " Sala dei Giganti " ) le ricche decorazioni, anch' esse seicentesche, della " Cappella Bentivoglio "; il Teatro settecentesco realizzato da G. B. Per trovare le prime notizie storiche su Ponderano occorre risalire all'anno 882, quando, il 16 marzo, il Serenissimo Imperatore Carlo III, detto il Grosso, a persuasione di Littuardo vescovo di Vercelli, donava a favore della Chiesa di S. Eusebio di Vercelli la sua gran Corte, detta Biella della quale Ponderano faceva parte, con sue corti, ville, alpi e pertinenze. La chiesa, che prima dipendeva da S. Giovanni Battista sopra Quarona, fu innalzata parrocchia nel 1588, con la posa della croce sulla sommità. La chiesa parrocchiale, che è collocata fuori dell'abitato, contiene alcuni dipinti eseguiti nel 1796 dal Peracino terzo ( nipote di Lorenzo ) e rappresentanti alcuni fatti del titolare S. Gottardo e della beata Panacea. Il villaggio sarebbe sorto intorno a tre antichissime chiese ( S. Salvatore, S. Giovanni e S. Maria Madre di Dio ) grazie agli abitanti del casale di Porziano che si trasferirono da una zona paludosa poco distante, e diedero al paese il nome di S. Maria Nove. Dal 1546 il feudo conobbe un periodo di splendore sotto la casata dei Mattei, i quali fecero edificare il palazzo baronale, a pianta quadrata e numerose chiese, fra le quali ricordiamo la Chiesa di S. Andrea Apostolo, la Chiesa di Sant' Antonio abate e la Chiesa di S. Salvatore con la sua tradizionale forma ottagonale. Nelle navate laterali ci sono tre altari per parte, tutti in marmo, dedicati, quelli sul lato destro del presbiterio, a S. Luigi, alla Madonna di Pompei e al SS Crocefisso; quelli sul lato sinistro, ai SS Medici, a Santa Lucia, e alla Madonna Addolorata. Nel concentrico si trova l'interessante gipsoteca E. Gonetto, ricca raccolta di gessi di carattere artistico con copie dei capolavori dall'antichità all'epoca moderna. Durante la festa Patronale di S. Felice che oggi si festeggia l'ultima domenica di agosto, ma che originariamente era la terza di novembre, al pomeriggio si svolge la Sagra del Canestrello: un torneo gastronomico della ricetta storica. Il principale monumento del paese è la Basilica di S. Giacomo ' ". Successivamente il feudo passò alla famiglia Gaetani, nel 1505, in seguito al matrimonio tra Midea di S. Agapito e Carlo Gaetano, della famiglia dei Gaetani d' Aragona. Cfr. P. Montesano, Il Glorioso San Fabiano Patrono di Valsinni, Editrice BMG Matera, 1998. P. Montesano, Il Glorioso San Fabiano Patrono di Valsinni, Editrice BMG Matera, 1998. Per eludere la vigilanza degli imperiali Sisto, il 6 agosto, riunì i fedeli in uno dei cimiteri meno conosciuti, quello di Pretestato, sul lato sinistro della Via Appia, quasi di fronte a quello di papa Callisto I. Mentre era seduto sulla sua sedia in procinto di parlare all'assemblea, fu catturato da un manipolo di soldati. " 'Paura e disgusto a Las Vegas " ' è il titolo di un " reportage " relativo ad un viaggio effettuato nel 1971 dal giornalista Hunter S. Thompson alla volta di Las Vegas, città statunitense del Nevada. Inizialmente pubblicato nel 1971 in due puntate sulla rivista " Rolling Stone ", " Paura e disgusto a Las Vegas " è stato tradotto in italiano una prima volta nel 1978 da A. Gini per " Arcana Editrice ", ma l'edizione non ha avuto molta fortuna. Dal 1997 al 2005 continua l'attività di pianista perfezionando- si con il M. Biagio Andriulli e con il M. Andrea Sammartino, docente al Conservatorio di Vibo Valentia. Ha lavorato con noti cantanti dell'accademia di Santa Cecilia, del Teatro dell'Opera, il Coro Accademico Romano e il Coro Polifonico S. Martino. Ha studiato Composizione con il M. Marco Persichetti e attualmente sta completando gli studi in Composizione e Direzione d' Orchestra presso il Conservatorio di Santa Cecilia in Roma, sotto la guida del M. Francesco Telli. Con la crescita del romanzo realistico, il racconto è evoluto come una miniatura, con alcuni dei primi, perfetti esempi nei racconti di E. T. A. Hoffmann ed Edgar Allan Poe. Al termine della stagione 1997-1998 la nuova squadra ha raggiunto il Campionato Nazionale Dilettanti, poi rinominato Serie D. Dopo sei anni ha vinto il girone C del campionato di Serie D 2003-2004, centrando l'ingresso nel professionismo, in Serie C2. Aqua ' " è un marchio registrato di Apple Inc. che identifica il tema e l'interfaccia grafica utilizzati dal sistema operativo Mac OS X. Il nome non è associato a una specifica interfaccia grafica quanto a una serie di regole legate alla realizzazione dell'interfaccia stessa. Sembra che le sue spoglie siano state in gran parte trasportate a Roma, nella chiesa di S. Martino ai Monti. Questo sport si giocava in Inghilterra e in Germania intorno al 1938 questo è documentato nelle sedi del Kanu G. di Essen e del Rote Muhle di Amburg mentre dagli anni settanta come alternativa agli allenamenti invernali di canoa. Nel maggio dell'anno 824 venne prescelto per succedere a papa Pasquale I. Un altro candidato, Sisinnio o Zinzinno ( in latino " Zinzinnus " ), venne proposto dalla fazione plebea, e la presenza di Lotario, figlio dell'imperatore franco Ludovico il Pio, si rese necessaria per mantenere l'autorità del nuovo papa. Adriano mantenne, ma con minor vigore, l'atteggiamento del suo predecessore, Niccolò I. Lotario II di Lotaringia, Re di Lorena, morì nell '869, lasciando Adriano II a mediare tra i Re Franchi con l'idea di assicurare all'Imperatore, Lodovico II, l'eredità del regno di Lorena. Al Macworld Expo del Gennaio 1999, Apple annunciò che la tecnologia QuickDraw 3D RAVE ( Rendering Acceleration Virtual Engine ) sarebbe stata inclusa nel Mac OS X. L' azienda in seguito decise di eliminare il progetto del Giugno del 1999 e di rimpiazzare la tecnologia proprietaria QuickDraw 3D con lo standard aperto OpenGL. I due ricercatori sono: Butler W. Lampson ( 1992 ) e Alan Kay ( 2003 ). Lampson, Kay, Robert W. Taylor, e Charles P. Thacker ricevettero dall'accademia nazionale degli ingegneri il prestigioso premio Charles Stark Draper Prize nel 2004 per il lavoro svolto durante lo sviluppo del sistema Alto. Cocoa è l'ambiente di programmazione orientato agli oggetti sviluppato da Apple Inc. per il sistema operativo Mac OS X. È il maggiore dei cinque ambienti di programmazione disponibili in OS X. Gli altri quattro sono: Carbon, Classic, BSD, e Java. Cocoa è l'ambiente di programmazione orientato agli oggetti sviluppato da Apple Inc. per il sistema operativo Mac OS X. È il maggiore dei cinque ambienti di programmazione disponibili in OS X. Gli altri quattro sono: Carbon, Classic, BSD, e Java. Le applicazioni Cocoa e Carbon sono quelle applicazioni native per Mac OS X. Le applicazioni che utilizzano Carbon possono essere eseguite, se il programmatore l'ha previsto, anche sotto Mac OS 9. Classic ' " è un programma sviluppato da Apple Computer per il sistema operativo Mac OS X. Il suo compito è quello di emulare il sistema operativo Mac OS 9, in modo da consentire alla vecchie applicazioni, sviluppate nell'era pre-Mac OS X e che non utilizzano le librerie Carbon, di continuare a funzionare, senza costringere l'utente a riavviare la macchina con Mac OS 9 ( operazione questa non più possibile nei modelli recenti di computer Macintosh ). Importanti le sue opere pittoriche presenti nel Duomo di Cremona ed in altre chiese della città ( tra cui S. Agata ). Fra questi si possono ricordare il Walker Art Center di Minneapolis nel 1972, la Kunsthalle di Basilea nel 1981, il Moderna Museet di Stoccolma nel 1983, il Museum of Contemporary Art di Los Angeles e il Solomon R. Guggenheim Museum di New York nel 1989, la Fundació Antoni Tàpies di Barcellona nel 1993, il Castello di Rivoli e il Centro per l'Arte Contemporanea Luigi Pecci di Prato nel 1990, la Galleria Civica d' Arte Contemporanea di Trento nel 1995, la Fundação de Serralves di Oporto nel 1999, il Carré d' Art di Nîmes nel 2000, la Fundación Proa di Buenos Aires nel 2002. Anche se i primi numismatici, in particolare Philip V. Hill, teorizzavano che i radiati barbari erano stati prodotti molto tempo dopo i loro prototipi e durante i periodi bui e nel periodo Sassone, lavori più recenti indicano che erano generalmente contemporanei ai loro prototipi. L' utilizzo più noto del termine fu fatto in una sezione dell'Accordo di Quebec, tra Franklin D. Roosevelt e Winston Churchill, del 19 agosto 1943, formalmente intitolato " Articoli di accordo governanti la collaborazione tra le autorità degli U.S.A. e del Regno Unito, sulla questione dei Tube Alloys ". Tra il 1537 ed il 1539 pubblica a Venezia ( J. da Borgofranco ) la traduzione dal greco in latino dell'Iliade e dell'Odissea, di undici commedie di Aristofane e degli idilli di Teocrito. Tema ricorrente della " Rivista internazionale " e dei suoi collaboratori, E. Agliardi, G. A. Mauri, A. Ratti ( il futuro papa Pio XI ), Giovanni Semeria, è la " ricostruzione organica dell'intera società " secondo un finalismo religioso convinto del primato del cristianesimo tanto nella vita individuale quanto in quella sociale. Una volta analizzata l'iride, segue una stimolazione delle aree cutanee interessate tramite agopuntura, cromoterapia o sfioramento con tecniche messe a punto da Daniele Lo Rito ( EC Tech ) e P. Mandel ( TGO ). John F. Kennedy Space Center. Nel 1961, quando il presidente John F. Kennedy dichiarò che gli Stati Uniti avrebbero tentato di mandare un uomo sulla Luna prima della fine del decennio, negli arsenali americani ( ma anche in quelli del resto del mondo ) non esisteva nessun missile in grado di lanciare una navicella con equipaggio fino alla Luna. I progettisti decisero, nella fase iniziale, di tentare di usare più tecnologia possibile dal programma del Saturn I. Infatti, il terzo stadio del Saturn V, il S-IVB, deriva dal secondo stadio del Saturn I, il S-IV. Anche le unità di controllo del Saturn V sono basate su quelle utilizzate dal Saturn I. In caso di problema che avesse richiesto la distruzione del razzo, il responsabile della sicurezza avrebbe trasmesso il segnale per la detonazione dell'esplosivo situato sulla superficie esterna del Saturn V. Questo avrebbe creato aperture nei serbatoi che avrebbero disperso rapidamente il combustibile. Lo Space Shuttle fu inizialmente concepito per effettuare missioni in cui parte del materiale necessario sarebbe stato inviato in orbita con un Saturn V. Allo Shuttle sarebbe spettato il compito di trasportare il carico utile della missione, oltre che l'equipaggio; inoltre avrebbe dovuto assemblare una stazione spaziale, i cui componenti sarebbero stati messi in orbita dal Saturn V. Tuttavia la mancanza di fondi per una seconda generazione di Saturn bloccò questo progetto, e lasciò gli Stati Uniti senza un razzo " pesante " per oltre trent' anni fino ad oggi ( tuttora non esiste un vettore simile ). R. R. Tolkien, Alqualondë ( il " Porto dei Cigni " ) è la città principale degli Elfi Teleri sulle coste di Valinor. R. R. Tolkien, Alqualondë ( il " Porto dei Cigni " ) è la città principale degli Elfi Teleri sulle coste di Valinor. Era originariamente basato su DKBTrace, un programma sviluppato da David Kirk Buck and Aaron A. Collins. Nel 1926 Hughes accettò un lavoro presso l'editore del " " Journal of Negro Life and History " e fondatore del settimanale di Storia Nera, Carter G. Woodson. Nel mondo fantastico creato da J. R. R. Tolkien, Dol Guldur ' ", o " Colle di Stregoneria ", era una fortezza di Sauron nel Bosco Atro meridionale. James T. Kirk ( anche se nettamente contrario al trattato ), al comando della nave stellare Enterprise assieme al suo fedele equipaggio. iDVD è un programma per creare DVD video prodotto da Apple Inc e funzionante esclusivamente su piattaforma Mac OS X. Esso è fornito con il pacchetto iLife. La suite è disponibile per i sistemi operativi Mac OS X. Mac OS 9 e Windows. La nuova versione oltre a includere una serie di migliorie minori consente una maggiore integrazione con il sottosistema unix del Mac OS X. Il programma consente di automatizzare alcune operazioni ripetitive e consente di specificare se i computer devono effettuare l'avvio dal disco locale o da un disco remoto. Tra il 1532 e il 1551 fu feudo di Fabrizio Maramaldo, che l'aveva ottenuto per i servigi prestati a Carlo V. Il feudo venne quindi ceduto ai Gonzaga di Molfetta e da questi, nel 1567 a Bernardetto de ' Medici, cugino del granduca Cosimo I e fratello del papa Leone XI. Sui primi numeri appaiono articoli riguardanti problemi di economia che vengono affrontati da Luigi Einaudi, G. De Ruggiero e A. Crespi. Sempre nei primi numeri, G. Stolfi e B. L' azione di Lutero fu in gran parte una risposta alla vendita delle indulgenze da parte di Johann Tetzel, un prete domenicano, su commissione dell'Arcivescovo di Magonza e di papa Leone X. Lo scopo di questa campagna per la raccolta di fondi era quello di finanziare la costruzione della Basilica di San Pietro a Roma. Nel 2004 Trudeau, tramite la striscia a fumetti, ha messo a disposizione un premio di 10.000 dollari per chiunque portasse prova inconfutabile che George W. Bush avesse assolto ai suoi doveri militari negli anni settanta. Lavorò per la riunione della Chiesa cattolica con quella ortodossa, ricevette il patriarca della Chiesa copta e persuase il Patriarca armeno a rimuovere l'anatema contro il Concilio di Calcedonia e papa Leone I. Inviò Giuseppe Simone Assemani ad oriente, con il duplice scopo di continuare la sua ricerca di manoscritti e di presiedere come legato sul concilio nazionale dei Maroniti. Tra i suoi parenti vi sono il Capitano Silva La Forge ed il Comandante M. La Forge. Coonce ( managing director ), Susan M. Schilling ( associate director ) e Mitchel T. Keller ( assistant director ). Da tener presente che proprio nel 1932 inizia la sua attività a Venezia la Biennale del Cinema e gli articoli critici che escono sulla rivista mostrano di essere sempre attenti al rapporto tra gli aspetti formali e il significato morale, dietro i modelli di René Clair, Alexander Korda, Josef von Sternberg e Robert J. Flaherty de " L' uomo di Aran ". Fu sintetizzato per la prima volta nel 1943 da H. I. Schlesinger e H. C. Grace M. Hopper, lavorando sull'idea di compilatore, ebbe un ruolo primario nello sviluppo e nella progettazione del COBOL. Il termine " Espressionismo astratto " si deve ad Alfred H. Barr Jr. che lo coniò nel 1929 a commento di un quadro di Vasily Kandinsky. La vittoria arrise con una discreta tranquillità a Novara ( rafforzato dall'arrivo di Silvio Piola ) e Padova, che assieme al Verona andò a dominare il girone B. mentre al Sud il Palermo dovette guardar- si fino all'ultimo dalla rincorsa del Pisa e del sorprendente ArsenalTaranto. La lotta per la salvezza si concluse all'ultima giornata, quando la decisiva vittoria dell'Alessandria sulla Salernitana rese inutili i punti conquistati sugli altri campi da Piombino e Fanfulla, che caddero in Serie C. Determinante per la retrocessione dei lombardi fu la penalizzazione di cinque punti inflitta loro dalla Federazione per un presunto tentativo d' illecito, scoperto poi di invenzione, perpetrato nella gara contro la stessa Alessandria, a metà del girone di ritorno. Grazie a un brillante girone di ritorno ( 31 punti in 19 partite ), il Venezia vinse il campionato e poté brindare, dopo undici anni, al ritorno in Serie A; assieme ai lagunari, festeggiò l'Ozo Mantova che, già campione d' inverno, ottenne la certezza della promozione con tre giornate d' anticipo; per i lombardi, alla loro seconda stagione tra i cadetti, fu la prima promozione in A. Dopo i bruschi cali di rendimento di Messina e Simmenthal Monza, la lotta per il terzo posto ebbe per protagoniste Palermo e Reggiana: le tentennanti prestazioni degli emiliani nelle ultime giornate spinsero i rosanero siciliani in Serie A dopo appena un anno di purgatorio. Gli ibridi coltivati come piante ornamentali hanno una caratteristica striscia bianco-crema o bianco-giallino che corre al centro delle foglie arcuate le più conosciute sono la " C. comosum " con foglie verdi o variegate a margine ondulato formanti una rosetta da cui originano fusti bincastri che portano piccoli fiori bianchi, dopo la caduta dei petali, inizia la crescita di nuovi ciuffi di foglie e relative radici sugli scapi floreali dei fusti penduli; la " C. laxum " originaria del Ghana e della Nigeria è di piccole dimensioni con foglie di colore verde brillante, delicatamente orlate di bianco, i fiorellini riuniti in pannocchie si formano all'estremità dei fusti; la " C.undulatum " originaria del Sudafrica, ha foglie strette, dure con i margini ruvidi, i fiori a spiga sono bianchi con sfumature rosso scuro. La Chlorophytum teme il freddo e nella stagione invernale è preferibile riparar- la in ambienti con almeno 14° C. anche se può resistere all'aperto, in un luogo riparato e ad una temperatura non inferiore ai 5° C.; d' estate si può collocare all'aperto a mezz' ombra, ma non la si deve esporre a temperature superiori a 28° C. Non richiede abbondanti annaffiature ad esclusione del periodo estivo quando gradisce anche regolari spruzzature sulle foglie. Woodstock ' " è il nome di un personaggio della striscia a fumetti " Peanuts ", di Charles M. Schulz. Molte specie vengono coltivate come piante ornamentali, tra le più diffuse ricordiamo lAlbizia julibrissin " nota come Acacia di Costantinopoli ' " o " 'Gaggi a arborea ' " coltivata nel Nord Italia, l " 'Albizi a lophanta " di origine australiana che viene coltivata anche nel Sud Italia ed infine l ' " Albizia anthelmintica " originaria dell'Africa, e l ' " Albizia lebbeck " ( L. ) Benth, albero originario del Nordafrica dalle foglie composte, formate da 4-9 paia di foglioline, lunghe fino a 30 cm, i fiori sono grandi e profumati, simili a quelli delle mimose, di colore giallo-crema. " 'Magnolia"' L. è un genere di piante della famiglia delle Magnoliaceae. Le specie spontanee in Italia sono 16, tra cui citiamo il " P. cocomilia " diffuso nell'Italia meridionale e Sicilia, a fiori bianchi, il " P. mahaleb " noto col nome di Ciliegio canino ' " e il " Prunus spinosa ", noto anche come Prugnolo, spontaneo in tutt' Italia. Tra le specie rinselvatichite, ornamentali, o che interessano l'arboricoltura da frutto per la produzione di frutta per il consumo fresco o la conservazione e trasformazione industriale, citiamo: il " P. campanulata " a fiori penduli, il " P. avium " o ciliegio dai fiori colorati di bianco-rosa, il " P. serrulata " dai fiori colorati di bianco con screziature rosa, il " P. subhirtella " var. " pendula " a fruttificazione edule, e le notissime e numerose varietà di piante da frutta come il susino, l'albicocco, il mandorlo, il pesco, il ciliegio, il lauroceraso; tra le piante ornamentali, ricordiamo il gruppo dei ciliegi giapponesi, come il " P. serrulata ", il " P. subhirtella ", il " P. grayana ", il pesco cinese il " P. davidiana ", l'albicocco della Manciuria, il " P. mandshurica ", e altre specie esotiche come il " P. chinensis ", il " P. japonica " e il " P. triloba ", tutte piante arbustive di modeste dimensioni con lunghi rami ricoperti da numerosi fiori doppi, di colore bianco o rosato... " La Cattedrale e il Bazaar " è un saggio sullo sviluppo del software scritto da Eric S. Raymond. Può essere coltivata all'aperto essendo pianta rustica, o nelle varietà " A. japonica crotonifolia " a foglie fittamente macchiettate di giallo e avorio e " A. japonica goldieana " con macchie di dimensioni maggiori, per la coltivazione in vaso negli appartamenti dove non superano i 90 cm di altezza. Può essere coltivata all'aperto essendo pianta rustica, o nelle varietà " A. japonica crotonifolia " a foglie fittamente macchiettate di giallo e avorio e " A. japonica goldieana " con macchie di dimensioni maggiori, per la coltivazione in vaso negli appartamenti dove non superano i 90 cm di altezza. Comprende una trentina di specie arbustive alte fino a 6 m, alcune specie come la " S. persica ", la " S. chinensis ", la " S. dubia " e la " S. villosaa ", hanno un modesto interesse come piante decorative; mentre la " S. vulgaris " arbusto forte e rustico, ormai diffuso e spontaneamente naturalizzato nel bacino del mediterraneo, viene coltivato diffusamente come pianta ornamentale con i numerosi ibridi e cultivar a fiore semplice o doppio; ha robusti rami ascendenti, che portano larghe foglie cuoriformi, fiori piccoli e profumatissimi, colorati di bianco puro, viola o lilla, riuniti in pannocchie piramidali, che fioriscono in maggio. La coltivazione industriale per la produzione forzata del fiore reciso, specialmente nelle cultvar a fiore bianco, prevede l'espianto dal terreno, in autunno, delle varietà precoci e robuste, con grosse gemme fiorifere, che svernano in luogo asciutto, e dopo 30-40 giorni trasferite in serra per la forzatura a 30° C. ed elevata umidità, inizialmente L' attuale presidente ed amministratore delegato di Symantec è Enrique T. Salem. Fra questi ricordiamo David Liddle, Ralph Kimball, David C. Smith, il primo uomo a scrivere un programma di grandi dimensioni in linguaggio Smalltalk ( linguaggio che pur essendo usato fra i concetti di base per la nuova macchina, non venne usato come software di sviluppo ), scienziato che introdusse il concetto di usare immagini manipolabili dall'utente che servono ad agire sui dati rappresentati. Grazie alla propria abilità, il lord riuscì ad ottenere la concessione di scavo, all'epoca ancora in mano all'archeologo Theodore M. Davis, e gli scavi iniziarono nel 1917. Il genere " Maranta " L. 1753, comprende le seguenti specie, varietà e forme: Tra le specie più coltivate come piante ornamentali ricordiamo, il " P. pertusum " dalle caratteristiche foglie profondamente incise e bucate, il " P. bipinnatifidum " noto col nome comune di Filodendro eretto ' ", pianta non rampicante, a portamento raccolto, con il fusto centrale alto 1,5 m, da cui si dipartono lunghi steli che portano foglie quasi cuoriformi profondamente lobate; il " P. burgundy ", con fusti rampicanti alti oltre 2 m, a lenta crescita, che richiedono un tutore, ha gli steli e la pagina inferiore delle grandi foglie colorate di rosso vivo; il " P. scandens " noto col nome comune di Filodendro rampicante ' ", pianta rampicante o a portamento strisciante ricadente, di rapida crescita, se sostenuta da un tutore adeguato supera rapidamente i 2 m di altezza, si caratterizza per le piccole foglie cuoriformi, appuntite e carnose, di un bel colore ramato da giovani, diventano verdi e di consistenza coriacea nel tempo; il " P. erubescens " con le foglie allungate, rossastre sulla pagina inferiore , Il genere " Zinnia " L. comprende specie erbacee annuali o perenni alte da 50 a 100 cm, con numerosi ibridi orticoli dalle forme nane o giganti. " Tagetes " L. è un genere di piante della famiglia delle Asteracee, originarie degli Stati uniti sud-occidentali, del Messico e del Sud America. " 'La fisica di Star Trek " ' è un saggio del 1995 scritto dal fisico statunitense Lawrence M. Krauss. Thalberg affidò la regia a Sam Wood e richiamò George S. Kaufman e Morrie Ryskind, già autori di " The Cocoanuts " e di " Animal Crackers ", i quali lavorarono al soggetto di " Una notte all'opera " insieme con altri scrittori, tra i quali Bert Kalmar, Harry Ruby e il commediografo Al Boasberg, considerato un maestro delle gag. Ma i Qing erano troppo deboli per intervenire militarmente in difesa dei suoi tributari così un arbitrato dell'ex-presidente degli Stati Uniti, Ulysses S. Grant, assegnò le isole al Giappone. Venne fondata negli anni venti da Albion W. Small ed ebbe tra i suoi maggiori esponenti Robert Park e altri studiosi tra cui Ernest W. Burgess e Roderick D. McKenzie. Nel 2006, per festeggiare i 50 anni del premio furono assegnati 8 premi speciali, i David del Cinquantenario, i quali andarono ai più prestigiosi rappresentanti delle principali categorie della storia del cinema italiano del periodo: per i costumisti a Piero Tosi, per i direttori della fotografia a Giuseppe Rotunno, per i musicisti a Ennio Morricone, per i produttori a Dino De Laurentiis, per i registi a Francesco Rosi, per gli sceneggiatori a Suso Cecchi D' Amico, per gli scenografi a Mario Garbuglia e per gli attori a Gina Lollobrigida, la quale vinse il David per la migliore attrice nella prima edizione del premio per l'ottima interpretazione in " La donna più bella del mondo " di Robert Z. Leonard. Ha fondato nel 1996, insieme a un gruppo di esponenti del comicdom italiano tra cui Luigi F. Bona e Alfredo Castelli, l'associazione Franco Fossati e, quindi, nel 2007, la " Fondazione e Museo del Fumetto Franco Fossati " ( di cui è tuttora membro come consigliere ). è insegnante di letteratura disegnata e conferenziere, specializzato nell'opera di Hergé ( Tintin ) ( di cui è stato anche traduttore per la Repubblica e per l'editore belga Casterman ) e Edgar P. Jacobs ( Blake e Mortimer ). Il Rolls-Royce Vulture, derivato dal Rolls-Royce Peregrine, era un motore aeronautico a 24 cilindri dalla inusuale configurazione ad X. Insieme al Peregrine può essere considerato come uno dei motori meno riusciti prodotti dall'azienda britannica. La frase fu pronunciata anche dal Presidente degli Stati Uniti John F. Kennedy nel suo famoso discorso " Ich bin ein Berliner " fatto a Berlino Ovest il 26 giugno 1963: Principalmente si possono distinguere due sistemi di classificazione granulometrica, la scala di Wentworh ( o Udden-Wentworth ) e la scala " phi " ( φ) di Krumbein, che consiste in una modificazione della scala di Wentworh creata da W. C. Krumbein, ( Krumbein & Sloss 1963 ). La ditta " Teletype corporation ", fondata da E. E. Kleinschmidt, produceva il terminale più economico adattabile al sistema TWX. A Gerusalemme è stato creato l'istituto di ricerca archeologica W. F. Albright, fa parte delle scuole americane di ricerca orientale. Tuttavia, Edward A. Patrick ha affermato di aver avuto un ruolo, non riconosciuto, nello sviluppo della manovra. Tra i suoi collaboratori il matematico Piergiorgio Odifreddi ed il chirurgo Tommaso G. Lubrano. Scrisse diversi balletti per il Ballets Russes di Sergej Diaghilev, grande impresario del tempo che commissionò lavori per Debussy, Ravel, Stravinskij, Satie, Milhaud, R. Strauss e Prokof 'ev. Il giorno seguente il 22° reggimento dei Marines, comandato dal col. John T. Walker, sbarcò sull'isola di Engebi, sul lato nord dell'atollo, alle 8.44. Émile che diventò progressivamente cieco, lasciò suo fratello solo al comando della società che fu rinominata L. Nagant & Cie, Liegi. La procedura venne messa a punto da alcuni psichiatri britannici come Eric Cunningham Dax e fu esportata negli Stati Uniti da Walter Freeman e James W. Watts che modificarono il nome da " leucotomia " in " lobotomia ". La FASA Corporation ' " fu un editore di giochi di ruolo e wargame fondata da Jordan Weisman e L. Ross Babcock III nel 1980. Nel 1486, D. João II gli affidò il comando di due caravelle e di una piccola nave-appoggio per cercare ufficialmente di appurare la verità circa il Prete Gianni. " Manimal " è una serie televisiva di fantascienza creata da Glen A. Larson e trasmessa per la prima volta negli Stati Uniti dall'emittente NBC nel 1983. Il modello ondulatorio di Huygens sembrava quindi quello corretto fino agli inizi del '900, quando Einstein nel 1905, con un lavoro che gli valse il premio Nobel, giustificò l'effetto fotoelettrico postulando l'esistenza di quanti di luce ( che negli anni Venti saranno chiamati da Gilbert N. Lewis fotoni ). I suoi maestri furono Lazare Levy, Marcel Ciampi, Simone Caussade, Joseph Calvet, C. Estyle oltre a Olivier Messiaen e Darius Milhaud. Un tempo endemico delle montagne della catena settentrionale sicula, l ' " A. nebrodensis " dal 1900 era stato considerato estinto. F. Monteforte, " Trasformazione sociale, giornalismo e vita culturale in Valtellina nell'età giolittiana ( 1900-1914 ) ", in F. Monteforte, B. Il modello psicopedagogico che sta alla base di questi percorsi è un modello integrato che fa riferimento alla psicologia umanistica di Abraham H. Maslow e alla Terapia non direttiva di Carl Rogers, ma ne critica l'individualismo, la considerazione dei bisogni della persona come assoluto, puntando sull'aiuto al cliente per la scoperta dei valori. Montanari e Rossetti: una polemica tra galileiani ", Casa editrice Leo S. Olschki, Firenze 1997. All'inizio degli anni quaranta, Leloir conosce Bernardo A. Houssay, dell'istituto che più tardi si chiamerà Instituto de Investigaciones Bioquímicas de la Fundación Campomar e che Leloir diresse per 40 anni a partire dalla sua fondazione avvenuta nel 1947. La NASA, per la prima volta nella sua storia, ha collaborato attivamente alla realizzazione del film, consentendo riprese all'interno della propria sede, in particolare nella piscina dove avviene l'addestramento degli astronauti e sulla piattaforma di lancio poi dismessa dopo la tragedia dell'Apollo I. Gli attori hanno potuto indossare delle autentiche tute da astronauta, il cui costo è di 3 milioni di dollari ciascuna. Creò, assieme al suo collega Robert V. Dvorak, uno dei primi videogiochi, Tennis For Two ( simile a Pong ), per intrattenere i visitatori e gli studenti annoiati al Brookhaven National Laboratory, un laboratorio di ricerca nucleare negli Stati Uniti. Eric W. Weisstein, il creatore del sito, fin dal tempo in cui era studente di fisica e astronomia, aveva l'abitudine di prendere note sulle sue letture di matematica. Barletta e G. Mancini ). È stato scoperto da Heide N. Schulz e altri biologi del Max Planck Institute di Brema nel 1999, sul fondale oceanico al largo della Namibia. Alla fine della prima guerra mondiale Henry P. Davidson, un dirigente della Croce Rossa Americana, propose in una conferenza di medicina internazionale da lui organizzata e svolta- si a Parigi il 5 giugno 1919, di utilizzare il potenziale della Croce Rossa, fino ad allora utilizzato esclusivamente nei conflitti, per attività umanitarie in ambito civile e in tempo di pace. Agli inizi degli anni ottanta, Nicolas G. Hayek, imprenditore svizzero nel ramo dell'elettronica, riesce a guidare la fusione tra le preesistenti ASUAG " Allgemeine Schweizerische Uhren AG " e SSIH " Société Suisse pour L' Industrie Horlogère SA ", le due più importanti holding di produzione orologiaia, nella nuova società SMH " Société Suisse de Microélectronique et d' Horlogerie SA ", con il preciso scopo di produrre un nuovo tipo di orologio, dai costi popolari e dal design accattivante. Fino agli anni cinquanta, venivano comunemente concesse ad ogni capo di stato in visita, ma negli anni sessanta, dopo l'assassinio di John F. Kennedy, divennero sempre più rare. Il libro più accessibile, più famoso, ma anche più vituperato, su questo argomento è " Where Mathematics Comes From " di George Lakoff e Rafael E. Núñez, pubblicato nel 2000. Il primo incontro ufficiale della Apache Software Foundation si è tenuta il 13 aprile 1999 e da un consenso generale l'elenco iniziale di adesione alla Apache Software Foundation, sarebbe composto da: Brian Behlendorf, Ken Coar, Mark Cox, Lars Eilebrecht, Ralf S. Engelschall, Roy T. Fielding, Dean Gaudet, Ben Hyde, Jim Jagielski, Alexei Kosut, Martin Kraemer, Ben Laurie, Doug MacEachern, Aram Mirzadeh, Sameer Parekh, Cliff Skolnick, Marc Slemko, William ( Bill ) Stoddard, Paul Sutton, Randy Terbush e Dirk-Willem van Gulik. Uno dei primi esponenti del beatboxing è stato all'inizio degli anni ottanta Doug E. Fresh, che promuovendo quest' arte fece sì che diventasse qualcosa di concreto a livello mondiale. Sono situate nell'estremità sud-occidentale della contea, vicino al confine al punto che il villaggio che da loro il nome è situato a 10 km di distanza nella Contea di Cork; furono esplorate e controllate dallo speleologista francese M. Martel nel 1895. Nel corso delle sue indagini sarà affiancato da R. Daneel Olivaw, un robot umanoide, che diventerà non solo un valido aiuto ma anche un amico. La prima definizione assiomatica della struttura di anello fu data da Adolf Fraenkel nel " Journal für die reine und angewandte Mathematik " ( A. L. Crelle ), vol. 145, 1914. Il contratto di lavoro intermittente è stato introdotto in Italia dal D. Lgs. n. 276/2003, meglio noto come Legge Biagi, ed è attualmente disciplinato dagli articoli da 33 a 40. In assenza di previsioni specifiche nel contratto collettivo, il D.M. 23.10.2004 del Ministero del Lavoro, avvalendosi del potere provvisoriamente sostitutivo garantitogli dall'art. 40 del D. Lgs. n. 276/2003, ha autorizzato il ricorso al lavoro intermittente per tutte le attività definite " discontinue " o " di semplice attesa " dalla normativa sull'orario di lavoro. Introdotto con la riforma Biagi, nell'ambito della complessiva riforma del mercato del lavoro, esso è disciplinato dal D. Lgs. n. 276/2003, art. 41 - 45. Il clock massimo al debutto era di 3,4 GHz con un voltaggio di 1,25 V. Già inizialmente era previsto che tali caratteristiche avrebbero permesso di " ridurre " il consumo massimo a circa 150 W ( Paxville consumava fino a 165 W), ma restando così le cose la possibile versione a 3,9 GHz avrebbe consumato fino a 215 W, un valore molto elevato che certamente non sarebbe stato esente da problemi di raffeddamento. Al momento della presentazione dei modelli però venne annunciato che il consumo massimo a 3,4 GHz non superava i 130 W. Evidentemente negli ultimi mesi che precedettero il lancio Intel riuscì ad operare una significativa ottimizzazione delle " piste " elettriche all'interno del chip, in modo da migliorare la dissipazione, probabilmente grazie anche ad un cambio di stepping. È liberamente tratto dal romanzo di H. G. Wells " The Shape of Things to Come " ( 1933 ), il quale ebbe un grado di supervisione su ogni aspetto del film, esperienza senza precedenti per uno scrittore. Nelle locandine viene infatti indicato il titolo " La vita che verrà - di H. G. Wells ", con il nome del produttore indicato in piccolo. Film tratti da opere di H. G. Wells | Vita futura - nel duemila guerra o pace Ectoplasma ' " ( dal greco " hektos ", fuori, e " plasma ", ciò che ha forma ) è un termine adottato per la prima volta da E. H. Hãckel nel 1873, per indicare lo strato esterno e più denso del citoplasma cellulare. Qui lavorò a stretto contatto con Gorge Dantzig e da lui imparò le tecniche di ottimizzazione che gli servirono per scrivere nel 1959 il suo libro " Portfolio selection: efficient diversification of investments / Harry M. Markowitz - New York [ 1959 ] ". Nel 1990 egli condivise insieme ai colleghi William F. Sharpe e Merton H. Miller il premio Nobel per l'economia. " Nota ' ": la tabella soprastante è un estratto di quella completa contenuta nella pagina del Pentium D. " " Consiglieri: " Dr. G. Giorgio Rubini, Dr. Paolo Ferrecchi, Sig.r Ettore Sansavini, Prof. Franco Persiani. Era un " mawlà ", nero di epidermide, ma questo non gli impedì - esempio non unico nella storia islamica, come ben dimostra ad esempio Maslama ibn Abd al-Malik o Abu l-Misk Kafur - di ritagliar- si un posto di assoluto rispetto fra gli uomini di cultura e di potere nella società araba dell 'VIII secolo d. C. ( I secolo islamico ). La nascita di Gaia è avvenuta grazie a R. Daneel Olivaw che, spinto dall'imperativo della legge Zero, ha trasferito ai componenti di Gaia sia i suoi poteri telepatici che una versione modificata delle leggi della robotica che recita: I primi studi che hanno portato all'ideazione del thyratron si devono a Irving Langmuir e G. S. Meikle della General Electric nel 1914, ma il primo modello commerciale fu disponibile solamente nel 1928. V. " ( DGLR ) e la britannica " Royal Aeronautical Society " ( RAES ). " La sentinella " ( titolo originale: " The Sentinel " ) è un racconto fantascientifico di Arthur C. Clarke del 1948. George A. Olah ha vinto il premio Nobel per la chimica nel 1994 per le sue indagini intorno ai superacidi ed il loro uso nella diretta osservazione dei carbocationi. Merton è inoltre figlio di Robert K. Merton, illustre sociologo ai più noto per aver coniato l'espressione " profezia che si autoavvera ". Questo monologo di Baricco narra la singolare storia di Danny Boodmann T. D.Lemon Novecento. " Nota ' ": la tabella soprastante è un estratto di quella completa contenuta nella pagina del Celeron M. " Nel novembre del 1998 venne deciso il sito su cui sarebbe dovuto sorgere l'edificio progettato da Renzo Piano e, con la donazione di 30 milioni di franchi svizzeri fatta dal Prof. Maurice E. Müller e da sua moglie Martha Müller-Lüthi venne anche assicurato il finanziamento ( 110 milioni di franchi svizzeri ottenuti da privati, sponsor e enti pubblici ) del progetto, approvato nel settembre del 2001. Varuna fu scoperto il 28 novembre 2000 alle ore 9:51:38 UT da Robert S. McMillan nell'ambito del progetto Spacewatch. Nel 1895 Daniel Swarovski, il finanziere Armand Kosman e Franz Weis fondarono la " Swarovski company ", conosciuta originariamente come A. Kosmann, Daniel Swarovski & Co, successivamente abbreviata come K.S. & Co. È stata creata per differenziare i propri prodotti realizzati per un " 'audience " più matura rispetto a quella che segue l'Uomo Ragno o gli X-Men, con la partecipazione di alcuni degli autori di punta della casa editrice ( tra cui Mark Millar, Ed Brubacker, J. Michael Straczynski ) coordinati da Axel Alonso, ex " editor " ( supervisore ) della Vertigo. Tutte queste modifiche, comportarono anche un cambiamento di voltaggio passato dagli iniziali 1,475 V a 1,525 del modello top di gamma, e di conseguenza anche il consumo massimo era cambiato molto passando da 55 W a ben 92 W. La temperatura, invece rimase pressoché invariata intorno ai 70° circa. Si fece valere anche nella squadra milanese, continuando a segnare come da sua abitudine, superando il traguardo delle 100 reti in serie A. Terminò la carriera nel Napoli, dove giocò le sue ultime 5 stagioni. Pubblica regolarmente articoli e commenti di Amira Hass, Zuhair al Jezairy, J. Bradford DeLong, Noam Chomsky, Louise Doughty, Serge Enderlin, Noreena Hertz, Leo Hickman, Christopher Hitchens, Nick Hornby, Pico Iyer, Tobias Jones, Alex Kapranos, Paul Kennedy, Rami G. Khouri, Claude Leblanc, David Mamet, Irshad Manji, Tomás Eloy Martínez, John Matshikiza, Efraim Medina Reyes, David Randall, David Rieff, Milana Runjic, Ingy Mubiayi, Igiaba Scego. Pubblica regolarmente articoli e commenti di Amira Hass, Zuhair al Jezairy, J. Bradford DeLong, Noam Chomsky, Louise Doughty, Serge Enderlin, Noreena Hertz, Leo Hickman, Christopher Hitchens, Nick Hornby, Pico Iyer, Tobias Jones, Alex Kapranos, Paul Kennedy, Rami G. Khouri, Claude Leblanc, David Mamet, Irshad Manji, Tomás Eloy Martínez, John Matshikiza, Efraim Medina Reyes, David Randall, David Rieff, Milana Runjic, Ingy Mubiayi, Igiaba Scego. Infatti, a seguito della L. n. 251 del 2005, l'art. 157 c.p. ( norma che disciplina la prescrizione nei reati ) è stato riscritto. Brian O' Leary, Arthur C. Clarke, l'ex ambasciatore James George, ed un fondatore dell'International Earth Day ( 21 marzo ), John McConnell. A Camilliani vengono inoltre ricondotte tutte le fortificazioni realizzate alla fine del XVI secolo come la Torre di S. Anna a Capomulini, nei pressi di Acireale, quella delle " Ciaule " a Gliaca di Piraino e le garitte di osservazione nella costa ionica della Sicilia fra Catania ed Acireale. Nel 1875 Ebers pubblicò un facsimile con una traslitterazione in caratteri latini e un' introduzione, ma fu tradotto solo nel 1890 da H. Joachim. La configurazione a W venne abbandonata in favore della configurazione ad H. Nacqeuro il Rapier a 16 cilindri e il Dagger a 24 cilindri. Tutte le rappresentanze dei combattenti, delle vedove e delle madri dei caduti, con il Re in testa, e le bandiere di tutti i reggimenti mossero incontro al Milite Ignoto, che da un gruppo di decorati di medaglia d' oro fu portato a S. Maria degli Angeli. Una discussione sul meccanismo di formazione di questa immagine è originariamente riportata nel classico trattato di fisiologia di E. H. Insieme con lo scrittore Enrique Pinti, riportarono poi in auge " El Mono Relojero ", una delle prime serie della rivista, ideata dal suo fondatore Costancio C. Vigil. Esso inoltre è pochissimo solubile e opaco ai raggi X. Queste caratteristiche l'hanno reso molto utile nella pratica medica per la diagnosi di occlusioni o perforazioni intestinali attraverso l'ingestione del sale stesso e successiva radiografia dell'addome. El Mundo ' " è un quotidiano spagnolo fondato il 23 ottobre del 1989 da Alfonso de Salas, Pedro J. Ramírez, Balbino Fraga e Juan González, con sede a Madrid. La " Chiesa Grande " o di S. Vito. Il quartiere generale della CSA è locato al John H. Chapman Spac Centre a Saint-Hubert in Quebec. La " Sonata per pianoforte N. 1 " di Diamond è stata scritta dal compositore, proprio su ispirazione del modo di suonare della Tureck. Girato interamente in bianco e nero e presentato in anteprima alla 62a Mostra internazionale d' arte cinematografica di Venezia, il film racconta la storia vera del giornalista statunitense Edward R. Murrow, " anchorman " della CBS, figura storica della lotta al maccartismo. Edward R. Murrow, celebre giornalista ed " anchorman " della CBS ( Columbia Broadcasting System ), viene a conoscenza di una lista di proscrizione redatta dal senatore del Wisconsin Joseph McCarthy nella quale vengono inseriti i nominativi di tutti coloro che sono sospettati di avere simpatie filo-comuniste. " Nota ' ": la tabella soprastante è un estratto di quelle complete contenute nelle pagine del Pentium 4 e del Celeron D. " Tra i personaggi famosi che hanno frequentato questo villaggio, si ricordano il maresciallo di Francia Philippe Leclerc de Hauteclocque, il pittore Maurice Boitel, il compositore Henri Dutilleux, il chirurgo Jean Quénu, il medico-biologo Albert Besson, l'alpinista Catherine Destivelle, l'architetto tedesco Andreas Dilthey, il geografo O. Lazzarotti, l'attrice Ginette Garcin. Una stella di energia oscura ' " o gravastar è una teoria alternativa ai buchi neri proposta dai fisici Pawel O. Mazur e Emil Mottola nel 2001, ed anche, recentemente, dal fisico George Chapline, del Lawrence Livermore National Laboratory ( California, USA ). La superficie è totalmente ubicata al lato dell'importante via di comunicazione C. Colombo e per un' estensione che va dalla tenuta di Castelfusano, estesa fino al mare, a quella del Presidente della Repubblica di Castelporziano. Nel 1859 la fregata Novara tornò da un viaggio intorno al mondo e riportò molti nuovi insetti che furono aggiunti a quelli già in possesso del museo e la cui sistemazione fu curata da L. Redtenbacher ( Coleotteri ), F. M. Brauer ( Neurotteri ), H. de Saussure ( Imenotteri tranne Formicidi ), G. Mayr ( Formicidi e Rincoti ), I. R. Schiner ( Ditteri ), C. Felder, R. Felder e A. Rogenhofer ( Lepidotteri ), gli entomologi Ganglbauer e Holdhaus ( Coleotteri ), Kohl e Maidl ( Imenotteri ), Handlirsch ( insetti fossili ) che contribuirono alla reputazione internazionale del museo. Negli anni 1970 W. Fulton e R. Mac Pherson hanno fondato la teoria dell'intersezione su varietà arbitrarie che consente una descrizione soddisfacente delle intersezioni. Ad un probabile adeguamento settecentesco riconduce il portale di ingresso ad arco schiacciato su volte, che ricorda strettamente quello disegnato da Francesco Solimena per S. Giuseppe de Poveri a Napoli. Van Helsing e gli amanti di Lucy, Seward, lord Arthur e il texano Quincey P. Morris ( Bill Campbell ), penetrano nella tomba della ragazza e pongono fine alla sua maledizione, " uccidendo " il vampiro che è diventata. Verso il 1552 dipinse la " Caduta di S. Paolo ", conservata a Vienna al Kunsthistorisches Museum. Ai sensi della L. 127/97, il parere del Consiglio è obbligatorio per: La stessa legge 127/97 ha abrogato ogni diversa disposizione legislativa che preveda il parere del Consiglio di Stato in via obbligatoria, tenendo fermo il combinato disposto dell'articolo 2, comma 3, della L. 23 agosto 1988, n. 400, e dell'articolo 33 del testo unico delle leggi sul Consiglio di Stato, approvato con r.d. 26 giugno 1924, n. 1054. Utility Disco ' " è un' utility sviluppata dalla Apple Computer per eseguire operazioni sui dischi rigidi e più in generale sulle unità di immagazzinamento dati nel sistema operativo Mac OS X. Queste operazioni includono: Nel 2007 il Governo Prodi II aveva approvato un disegno di legge-delega ( per la redazione della " Carta delle autonomie locali " ), che avrebbe dovuto abrogare il D. Lgs. n. 267/2000, recante il Testo unico sull'Ordinamento degli Enti Locali, che a sua volta raccoglieva in un unico testo la fondamentale legge n. 142/1990, la prima che aveva previsto, tra le varie disposizioni, proprio l'istituzione delle città metropolitane. Gli storici, anche i più restii a parlare dell ' " Editto di Milano " come H. Jones, concordano comunque nell'attribuire la pubblicazione di questo rescritto alla conseguenza di un accordo intervenuto a Milano tra Costantino e Licinio. Il 9 luglio 2005 il Presidente George W. Bush lo ha designato Giudice Associato della Corte Suprema, in sostituzione di Sandra Day O' Connor. Nel 1953, Ferlinghetti e Peter D. Martin aprirono una libreria, che chiamarono " City Lights ", dal nome della rivista cinematografica che Martin stava pubblicando. La scelta iconografica è particolarmente significativa, tutta tesa cioè a ribadire la consustanzialità di Cristo, ovvero la perfetta unione tra natura umana, implicita nei soggetti della vita di Cristo incarnato, e quella divina come nella rappresentazione del Cristo " Pantocrator " ( immagine particolarmente vicina al mondo bizantino basti pensare all'icona con medesimo soggetto conservata presso il Monastero di S. Caterina sul Sinai ); il ciclo quindi appare studiato come risposta contro l'arianesimo. J. William Langston, un neurologo, trovò che la causa era l 'MPTP, testando i suoi effetti sui primati trovò casualmente una cura per tre dei sette pazienti affetti. Il fatto che questo Sheshonq sia sepolto a Tanis ha fatto ipotizzare, ad alcuni studiosi, che abbia regnato per pochi mesi tra il padre e Takelot I. Questa ipotesi non è però suffragata da alcun documento e lo studio delle genealogie e delle sepolture dei tori Api nel Serapeo di Karnak fatto presumere che Sheshonq sia deceduto prima del padre. " 'Giraffatitan"' è un genere di sauropodi brachiosauridi descritto da Gregory S. Paul nel 1988 come sottogenere di " Brachiosaurus ". Pochi anni fa è stato scoperto un cranio, anch' esso proveniente dal Giurassico medio francese e denominato " P. valesdunensis ", ma l'ascrizione a questo genere non è per nulla certa. Lo scheletro postcranico dell'esemplare, ora descritto come " Dubreuillosaurus ", permette di stabilire che questo animale non era strettamente imparentato con " P. bucklandii "; probabilmente era un eustreptospondilide. Il genere " Acinonyx " è invece conosciuto nel Pliocene con la specie " A. pardinensis ", vissuta in Europa, India e Cina. Nel Pleistocene medio, invece, viveva " A. intermedius ", molto più simile ai ghepardi attuali in quanto a dimensioni. L' intervento è stata fortissimo ed ha portato alla fondazione della Princeton University e ha avuto un' influenza nelle elezione di alcuni presidenti come Andrew Jackson, James Buchanan, Grover Cleveland, Benjamin Harrison, Woodrow Wilson, Dwight D. Eisenhower e Ronald Reagan. Altri due presidenti sono cresciuti come presbiteriani ma si sono poi convertiti al metodismo: James Knox Polk e Ulysses S. Grant. C. W. Seaton, funzionario capo dell'ufficio del censimento, calcolò il numero di rappresentanti che ogni stato avrebbe mandato al parlamento, ipotizzando un numero totale di parlamentari da 275 a 350. Ha compiuto gli studi al conservatorio " G. Verdi " di Milano sotto la guida di Pippo Molino e Azio Corghi, e nello stesso istituto si diploma in composizione e pianoforte; in seguito si perfeziona con Franco Donatoni all'Accademia nazionale di Santa Cecilia e con György Ligeti e partecipa ad un seminario dell'IRCAM ( Parigi ) dedicato all'informatica musicale. Ha insegnato composizione alla Civica scuola di musica di Milano, mentre dal 1999 è titolare della classe di composizione presso il conservatorio " G. Verdi " di Torino. I recettori cannabinoidi ' " sono una classe di recettori della famiglia dei recettori accoppiati alla proteina G. La stimolazione dei recettori cannabinoidi inibisce l'enzima adenil-ciclasi e quindi la produzione di AMP ciclico, effetto contrario a quello della adrenalina. Anche se molti membri - incluso il primo presidente dell'HWA, Dean R. Koontz - avevano delle riserve riguardo a premi per la scrittura - dato che lo scopo dell'HWA era di operare per il proprio mutua- le profitto, non di competere uno contro l'altro - la maggioranza dei membri favorì pesantemente la presentazione dei premi, sia per riconoscere i lavori meritevoli nel campo dell'horror, sia per pubblicizzare le attività dell'HWA. Esempi evidenti di valorizzazione della pietra sono: la cappella di S. Lucia, la piazza del paese. Nel 1906 fu delegato al Congresso di Roma ed aderì alla mozione integralista di O. Morgari. Un ormone idrosolubile o un neurotrasmettitore si lega a un recettore di membrana, il quale è collegato tramite la sua coda citosolica con una proteina G. Quest' ultima si attiva liberando la sua subunità alfa, legata a un GTP, e interagisce con l'adenilato ciclasi. Insegna composizione al Conservatorio Morlacchi di Perugia, dopo aver insegnato tra gli altri nei conservatori di S. Cecilia di Roma e G. Rossini di Pesaro. Durante questa missione il secondo membro dell'equipaggio, Edward H. White, fu il primo americano a svolgere un attività extraveicolare compiendo la prima passeggiata nello spazio di un americano. La sceneggiatura di Elliot J. Clawson e Raymond L. Schrock riprende con grande fedeltà le pagine del romanzo originale ( prendendo- si qualche licenza solo nel finale ), limitando- si a sfrondar- lo degli elementi meno essenziali per concentrar- si sulla componente gotico-orrorifica e romantica ( ma trova anche spazio per la descrizione del mondo dell'opera e per gustosi siparietti semi-brillanti ), con particolare attenzione alla figura del Fantasma, figura oscura e romantica in cui convivono malvagità quasi demoniaca e una commovente e tragica umanità. La sceneggiatura di Elliot J. Clawson e Raymond L. Schrock riprende con grande fedeltà le pagine del romanzo originale ( prendendo- si qualche licenza solo nel finale ), limitando- si a sfrondar- lo degli elementi meno essenziali per concentrar- si sulla componente gotico-orrorifica e romantica ( ma trova anche spazio per la descrizione del mondo dell'opera e per gustosi siparietti semi-brillanti ), con particolare attenzione alla figura del Fantasma, figura oscura e romantica in cui convivono malvagità quasi demoniaca e una commovente e tragica umanità. Alan Moore ha scritto tutti i numeri della serie fino al 22, poi si sono succeduti diversi autori come Joe Casey, Geoff Johns, Brian K. Vaugh e perfino lo scrittore di fantascienza Michael Moorcock amico dello sceneggiatore inglese. Negli ultimi momenti di mia vita, confortato dalla Fede, dalla S. Comunione e dalle belle parole del curato di campo, mando a tutti i miei cari i saluti più cari, l'assicurazione che nell'altra vita non sono morto, che sempre vivo in eterno che sempre pregherò per voi tutti. Tuttavia, la prima meta-analisi su esperimenti tutti concettualmente identici riguardanti una specifica domanda di ricerca e condotti da ricercatori indipendenti, è stata identificata nella pubblicazione nel 1940 del libro " Extra-sensory perception after sixty years ", scritto da psicologi della Duke University J. G. Pratt, J. B. Negli anni '70, sono state introdotte tecniche analitiche più sofisticate, a partire dal lavoro di Gene V. Glass, Frank L. Schmidt e John E. Hunter. La teoria statistica sulla meta-analisi ha fatto un enorme passo avanti con il lavoro di Nambury S. Raju, Larry V. Hedges, Harris Cooper, Ingram Olkin, John E. Hunter, Jacob Cohen, Thomas C. Chalmers, e Frank L. Schmidt. Laureato in Scienza Politiche presso l'Università S. Pio V, di Roma. Pertanto il Capcom siede nelle immediate vicinanze del direttore di volo nel centro di controllo a terra, il Lyndon B. Johnson Space Center a Houston. Ad esempio durante la missione STS-114 tale ruolo venne assunto dalle donne astronauta Shannon W. Lucid e Julie Payette, rispettivamente da Ken Ham. Laureatasi in Giurisprudenza, si è diplomata al Conservatorio T. L. Da Victoria di Roma in canto lirico ed ha vinto numerosi concorsi nazionali ed internazionali. Laureatasi in Giurisprudenza, si è diplomata al Conservatorio T. L. Da Victoria di Roma in canto lirico ed ha vinto numerosi concorsi nazionali ed internazionali. Durante i suoi anni a Londra, A. E. Housman completò il suo ciclo di 63 poesie, " A Shropshire Lad " ( " Un ragazzo dello Shropshire " ). La testologia semiotica rappresenta un nuovo quadro teorico, sviluppato- si a partire dal 1990 circa, e rappresenta l'ultima versione della teoria di János S. Petöfi. Un altro importante lavoro è stato quello di Erna Mandowsky ( " Ricerche intorno all'Iconologia di Cesare Ripa ", in La Bibliofilia, vol. XLI ( 1939 ), Leo S. Olschki, Firenze ) nel quale ha pubblicato anche una lunga lista di monumenti per la decorazione dei quali è stato riconosciuto l'uso delle definizioni di allegorie di Ripa. Nelle microquasar, la massa accresciuta deriva da una normale stella e il disco di accrescimento è molto luminoso nello spettro visibile e nei raggi X. Le microquasar vengono talvolta chiamate 'binari e a raggi X a getto radiò per distinguer- le da altre binarie a raggi X. Il trattato START II' " è stato siglato il 3 gennaio 1993 tra il presidente statunitense George H. W. Bush e quello russo Boris Eltsin. " START II " è stato ufficialmente superato dal trattato SORT, siglato dai presidenti George W. Bush e Vladimir Putin il 24 maggio 2002, col quale le parti abbandonano la logica dei trattati precedenti - con le loro accurate limitazioni al numero di armi specifiche - e impegnano invece entrambi i loro stati ad una riduzione unilaterale indipendente del numero totale delle testate. Maribel Y. Owen venne sepolta con la madre e la sorella nel Mount Auburn Cemetery di Cambridge, nel Massachusetts. Nel 978 tentò infatti di portare la Lorena sotto il proprio controllo, aprendo così un inconcludente biennio di confronto con l'Imperatore Ottone II, anche se Lotario ne approfittò nel 979 per far consacrare re suo figlio Luigi V. Parimenti senza esito risulta essere un suo secondo tentativo d' impadronir- si della Lorena nel 983. Nel 1527 papa Clemente VII ( Giulio de ' Medici ) si rifugiò anche lui a Castello, tramite il Passetto, durante il Sacco di Roma effettuato dai lanzichenecchi di Carlo V. Nell 'anno del giubileo ( 2000 ), come accadde per altre opere architettoniche, il Passetto fu rimesso in funzione ed oggi solo su prenotazione è possibile visitar- lo. Bonjour ' " è un marchio registrato usato da Apple per denominare la sua implementazione del protocollo Zeroconf dell'IETF, una tecnologia basata sulle reti locali introdotta dalla versione 10.2 di Mac OS X. Questa tecnologia usa il pacchetto standard DNS in un modo nuovo, sviluppa cioè dei nuovi servizi utilizzando una tecnologia relativamente vecchia come quella del DNS over IP. Teofano era presumibilmente figlia di Costantino Sclero e di sua moglie Sofia Foca e quindi nipote dell'imperatore bizantino Giovanni I. Tramite l'intermediazione dell'Arcivescovo di Colonia Gerone il 14 aprile del 972 divenne moglie di Ottone II. È coautore della commedia radiofonica " E chi porta le cicogne ? " scritta con A. G. Pinketts e coautore con Diego Cugia della prima serie di Jack Folla - Alcatraz prodotta dalla Rai Radio due. Ha collaborato con il ministro Franco Bassanini come capo dell'ufficio legislativo del ministero per gli Affari Regionali nel governo Prodi I. Diventa Ministro della Funzione Pubblica nel governo D' Alema I. Benvenuti, G. Marenco, S. Torcasio, G. Saccomandi, S. Vellante e S. Vinci sono stati pubblicati in: Negli Stati Uniti la coppia reale incontrò Franklin D. Roosevelt nella Casa Bianca e nella Hudson Valley dove Roosvelt aveva la propria abitazione privata. Entrarono così a far parte del catalogo alcuni popolari autori contemporanei come Frank Schätzing, Laurell K. Hamilton, Susana Fortes, James Rollins, Steve Berry. L' accorpamento venne disposto dalla Riforma Bassanini del D. Lgs. n. 300/1999, e attuata dal Governo Berlusconi II, nel 2001. Roma Q. XII Gianicolense Negli anni trenta e quaranta il settore della sociologia della musica ha trovato in Theodor W. Adorno il più importante esponente, che dedicò vari scritti alla musica classica, al jazz e alle musiche di consumo. Nei decenni successivi la sociologia americana ha prodotto vari lavori che hanno contribuito a allargare le prospettive di ricerca, come per esempio Howard S. Becker e Richard Peterson. A partire dagli anni ottanta la sociologia della musica si è contaminata con altre discipline come l'antropologia, l'etnomusicologia, la storia della musica, gli studi sulle sottoculture e la sociologia dell'arte, confluendo nell'ambito interdisciplinare dei popular music studies ( cfr. R. Middleton, " Popular Music ", Feltrinelli, 1990 ). Mark T. Watson - uno studioso dell'opera di Gil - ha recentemente dedicato a Gil la sua raccolta di poesie intitolata " Un tipo ordinario ", che ha tra l'altro una prefazione di Jalal Nuriddin dei Last Poets. All'interno di questo grafico ogni singola lettera indica un gruppo monofiletico, ma potremmo definire come monofiletici anche l'insieme dei gruppi A e B, o C e D. Nonostante sembri banale l'individuazione di somiglianze stree tra cladi è estremamente complicato, a causa di diversi fenomeni molecolari che impediscono una caratterizzazione genetica di facile comprensione. Il pilota della NACA Joseph A. Walker effettuò il suo volo di battesimo a bordo dell 'X-3 il 23 agosto 1954 e condusse un totale di otto voli sperimentali tra settembre e ottobre. Tra gli altri approcci vicini al modello della costruzione sociale della tecnologia per fini e presupposti teorici vanno segnalati il modello dell'Actor-Network Theory di Bruno Latour e Michel Callon ( 1987 ) e l'approccio del Large Technical System di Thomas P. Hughes. Bucchi, M, 2002, " Scienza e Società ", Bologna il Mulino. Un' altra specie ascritta a questo genere è " N. bohlini ", ma probabilmente deve essere classificata come una forma a sé stante. La costruzione dell'osservatorio fu diretta dall'architetto A. P. Bryulliov ed ebbe termine nel 1839. La costruzione dell'osservatorio fu diretta dall'architetto A. P. Bryulliov ed ebbe termine nel 1839. Vennero quindi stretti accordi con la stazione astrofisica del villaggio di Simeiz, in Crimea, un piccolo osservatorio privato consegnato all'Osservatorio dall'astrofilo N. S. Maltsev nel 1908, e con la stazione astrometrica di Nikolaev, un ex osservatorio della Marina sovietica ( oggi Osservatorio di Nikolaev ). È stato scalato per la prima volta il 17 settembre 1902 dagli alpinisti austriaci Wolf von Glanvell e Karl von Saar; il 7 settembre 1902 i triestini di N. Cozzi e A. Zanutti avevano superato il tratto più difficile dell'ascensione ( " fessura Cozzi " di V grado di difficoltà ). Roma Q. VII Prenestino-Labicano Il 14 settembre 1964 gli è stata assegnata la Medaglia presidenziale della libertà " With Distinction " dal Presidente degli Stati Uniti Lyndon B. Johnson. Per Dottrina Truman si intende la strategia politica ideata dall'allora presidente degli Stati Uniti d' America Harry S. Truman il 12 marzo 1947, in un discorso tenuto alle camere in seduta comune, prendendo spunto dai casi di Grecia e Turchia, che avevano lasciato intravedere la possibilità di una resa di fronte all'espansionismo sovietico. Harry S. Truman, supportato dal senatore Arthur H. Vandenberg, promulgò la dottrina dopo un incontro con il Presidente Greco. La dottrina trova esplicazione nella teoria del contenimento, di George F. Kennan secondo la quale ad ogni atto teso a destabilizzare l'ordine mondiale sarebbe stato opposto un atto uguale e contrario. Petetti ha studiato il modo di armonizzare la presenza della Barriera Gregoriana ottocentesca, della seicentesca chiesa di S. Primiano, delle rotaie ferroviarie a servizio del porto e dello stesso Arco di Traiano, costruito nel II secolo. Inoltre, sempre in Ancona, partecipò al restauro della chiesa di S. Domenico di Ancona danneggiata dai bombardamenti della Seconda Guerra Mondiale, riprogettando la " 'cappella della Pietà. Owen K. Garriott. A bordo della capsula spaziale dell'Apollo ed insieme con gli astronauti Alan L. Bean e Jack R. Lousma formò il secondo equipaggio che visitò la stazione spaziale americana Skylab. Famosa è la serie di " Ultima " creata nel 1980, che porterà alla fondazione della Origin Systems alla Quale Owen K. Garriott partecipò finanziariamente. Il primo re conosciuto fu " Vannio " ( 19-50 d. C. ), che fu re anche dei Marcomanni. " 'The Ultimate Jack the Ripper Sourcebook: An Illustrated Encyclopedia " ', è un libro scritto da Stewart P. Evans e Keith Skinner che, secondo le intenzioni degli autori, dovrebbe costituire un' enciclopedia dedicata al serial killer che nel 1888 terrorizzò Londra con i brutali assassini commessi nella zona di Whitechapel, Jack lo squartatore. Orlando Jordan in seguito si intromise nel nuovo feud per l'US Championship fra Chris Benoit e Booker T. Quando quest' ultimo si era infortunato e necessitava di un sostituto per il Best of 7 Series che stava vincendo 3-1, OJ si fece avanti ma fu deriso da Booker T e sua moglie Sharmell. durante l'ultimo match della serie arrivò nel ring per impedire a Orton di vincere il match ma stavolta non ci riuscì e la serie andò quindi a Booker T. OJ è stata poi una delle tante vittime di Boogeyman essendo sconfitto da quest' ultimo durante l'edizione di Smackdown ! SS John W. Brown. La SS " John W. Brown " ' è una delle due rimanenti Liberty ship ancora in esistenza. La nave ha preso il nome dal leader sindacale John W. Brown. I clinici italiani fanno una distinzione, non usata dagli autori Americani, tra sindrome di C. e malattia, o morbo, di C. intendendo con il primo termine l'origine surrenalica " primitiva " dell'ipercortisolemia, e col secondo la conseguenza di un addenoma ipofisario, o un carcinoide polmonare o addominale, ACTH secernente. Eccettuato il Cushing iatrogeno, l'affezione più frequente è in assoluto il morbo di C, ovvero un' adenoma ipfisario che stimola entrambi i surreni cronicamente. L' ENIAC ( Electronic Numerical Integrator And Computer ) è considerato il primo computer elettronico della storia, progettato presso l'University of Pennsylvania da J. Presper Eckert e John Mauchly e completato due anni prima dell'invenzione del transistor, nel 1946. Il computer è stato progettato e costruito dal Dr. John Vincent Atanasoff e Clifford E. Berry all'Iowa State University nel periodo 1937-42. Per le innovazioni introdotte dall'ABC John Vincent Atanasoff ha ricevuto la National Medal of Technology dal presidente degli Stati Uniti d' America George H. W. Bush in una cerimonia alla Casa bianca il 13 novembre 1990. In Germania fu introdotto nel 1893 un gioco chiamato " Faustball ", ma il merito della costruzione della pallavolo in forma moderna va riconosciuto a William G. Morgan, istruttore di educazione fisica presso un college dell 'YMCA di Holyoke, nel Massachusetts ( USA ). Fu però Alfred T. Halstead a cambiare il nome di minonette, un pò troppo femminile, in " Volleyball " ( letteralmente " palla sparata " ). Un programmatore di Assembly produrrà spesso un programma molto più veloce che un programmatore esperto di C. Potete accelerare molti programmi di cinque o dieci volte rispetto ai programmi HLL attraverso una buona conoscenza dell'Assembly. Quando non vi è alcuna tensione applicata, gli elettroni in eccesso del semiconduttore tipo N fluiscono entro le cavità del semiconduttore tipo P. Ciò crea una zona di svuotamento che si comporta come una tensione. Ad esempio, per ottenere un plasma di cesio a pressione atmosferica, è necessario elevar- ne la temperatura fino a circa 3000 K, mentre per l'elio, la cui energia di ionizzazione è circa 6 volte più grande, bisogna raggiungere temperature dell'ordine di 20000 K. Va fatta una precisazione sui numeri dati, l'energia di legame degli elettroni più esterni negli atomi vanno da 4.1 eV ( 47500 K) per il Cs a 24 eV ( 278000 K) per l'He. Nel 1912 l'astronomo statunitense Vesto M. Slipher, analizzando i dati raccolti presso l'Osservatorio Lowell in Arizona, mise in evidenza lo spostamento verso il rosso delle righe spettrali di tutte le galassie. Michael E. Brown, planetologo del California Institute of Technology, ne è sicuro. Pronta la replica del presidente americano George W. Bush, che ha ribadito che il Consiglio dei governatori dell'AIEA proporrà sanzioni ad un' Iran dotato del nucleare, ricordando che, in caso di conflitto, gli Stati Uniti proteggeranno Israele. Questa sessione dell'assemblea sarà ricordata per molte cose, ma da qui a venti anni io ritengo che una delle quelle cose sarà questa risoluzione ha detto il deputato A. Donald McEachin, il democratico che ha presentato la proposta alla Camera. L' antico Conservatorio di S. Giuseppe e Teresa di Pucara del 1662 è soggetto a speculazione edilizia. La consegna ha avuto luogo nell'auditorium S. Chiara di Trento, che per l'occasione era pieno. Il presidente degli Stati Uniti George W. Bush ha detto che è disposto a discutere un trattato di pace solo se la Corea del Nord accetterà di dismettere le sue armi atomiche. Quindi ha cominciato a insegnare in molti istituti, sia in Germania che negli Stati Uniti d' America, dove fece ricerche insieme a Gabor A. Somorjai, che gli valsero il Premio Wolf per la chimica nel 1998. Altro accorgimento da seguire è quello di estrarre i cibi dagli involucri o contenitori plastici ( se non espressamente compatibili con la cottura a microonde ), in quanto tali materiali ( ad es. il polistirolo delle vaschette comunemente in vendita al supermercato ) possono subire trasformazioni alle alte temperature e contaminare i cibi. Il computer è stato progettato e costruito dal Dr. John Vincent Atanasoff e Clifford E. Berry all'Iowa State University nel periodo 1937-42. Il più semplice agente è l'agente stimolo-risposta SR. Questo agente ad uno specifico stimolo dell'ambiente risponde sempre con la stessa risposta. Si tenga presente che una divisione rigida non è comunque possibile, a causa delle elongazioni delle costellazioni stesse, così alcune di quelle descritte come osservabili ( es. Capricorno, Scorpione ecc.... ) sono in realtà visibili solo molto basse sull'orizzonte, così come alcune descritte come australi ( come il Centauro ) sono parzialmente visibili. definita anche come nevrosi coatta, è caratterizzata dal fatto che l'individuo evita un' ansia eccessiva attraverso la ripetizione prolungata di comportamenti stereotipati ( ad es. aprire e chiudere una porta, un rubinetto, toccare ripetutamente i bottoni di un indumento o sfilacciar- lo, lavar- si più volte le mani, ecc. ) o, a livello mentale, di alcuni pensieri ( formule magiche, coazioni a numerare, ecc. ). A questo punto, preparate la gelatina secondo le istruzioni, pulite la frutta, tagliate banane e kiwi a dischi spessi 2 mm, le fragole a metà o a quarti se sono molto grandi. Stendete l'impasto con il mattarello fino ad uno spessore di circa 3 mm. e create dei dischetti di circa 2 cm di diametro. Può capitare che una o più di queste tre circostanze si verifichino contemporaneamente per entrambi i giocatori ( ad es, entrambi i giocatori scendono contemporaneamente sotto 1 punto vita ): in questo caso sono sconfitti entrambi. Successivamente Giotto fu indirizzata verso la cometa P/Grigg-Skjellerup che incontrò il 10 luglio 1992; il massimo avvicinamento si verificò a 200 km, ma già a 600.000 km. dal nucleo l'analizzatore di plama rilevò i primi ioni cometari. Il massimo avvicinamento al nostro pianeta avvenne il 1 luglio del 1999 a 219.000 km. di distanza. La sonda doveva essere messa in orbita attorno alla Terra su un' orbita molto ellittica che l'avrebbe portata da un minimo di 60.000 km. ad un massimo di 1.100.000 km. per effettuare gli studi cui era destinata. La chiesa fu costruita fra il 1258 ed il 1308 ca. come chiesa del convento degli Agostiniani. Terri Schiavo, la donna che in questi giorni aveva tenuto col fiato sospeso l'America e causato numerosi dibattiti sul " diritto a morire ", è morta oggi a St. Petersburg ( Florida ), alle 9.00 locali, 13 giorni dopo il distacco dai macchinari che la tenevano in vita. La presidenza provvisoria dell'assise è stata affidata all'on. Fabio Mussi, in quanto unico vicepresidente della precedente legislatura rimasto in carica ( gli altri vicepresidenti erano Alfredo Biondi e Clemente Mastella, entrambi eletti al Senato, e Publio Fiori, non eletto all'ultima tornata elettorale ). Kate aveva iniziato a frequentare William nel corso del 2001, durante il primo anno all'università scozzese di St. Andrews. Per l'occasione saranno presenti l'assessore regionale alla Cultura, Sport e Spettacolo del Lazio, on. Giulia Rodano, il presidente della Commissione Cultura della Camera dei Deputati, on. La diocesi pagherà 1,2 milioni di dollari a " Jon Doe " ( il nome fittizio usato negli atti per tutelare la vittima ), un chierichetto che sei anni fa sarebbe stato molestato dal sacerdote Raymond Kownacki del St. Theresa di Salem. Tra i vari autori che hanno scritto concerti per una o più chitarre e orchestra si ricordano Ferdinando Carulli, Mauro Giuliani ( " Concerti " opp. 30, 36 e 70 ) Joaquín Rodrigo ( " Concierto de Aranjuez ", " Fantasía para un gentilhombre ", " Concierto Madrigal " ), Mario Castelnuovo-Tedesco ( " Concerto in re " op. 99 ", " Concerto in Do " op. 160 ", " Concerto per due chitarre e orchestra " op. Inizialmente la città destinata ad ospitare i giochi era Chicago, ma i responsabili della Louisiana Pourchase Exposition di St. Louis, grande fiera campionaria organizzata per celebrare il centenario del passaggio della Louisiana agli Stati Uniti, temevano che l'olimpiade avrebbe tolto visitatori alla fiera. Minacciarono così di far svolgere delle gare di atletica in concorrenza con le competizioni olimpiche se i giochi olimpici non fossero stati spostati a St. Louis. Il CIO decise di lasciare l'ultima decisione al presidente Theodore Roosevelt, che scelse St. Louis. La tensione provocata in Europa dallo scoppio della guerra Russo-Giapponese e le difficoltà di raggiungere St. Louis tennero molti atleti europei lontano dai giochi. A St. Louis, per la prima volta vennero distribuite delle medaglie d' oro, argento e bronzo ai primi tre classificati delle gare olimpiche. Introdussero lo studio del greco ( a Oxford nel 1490 ) e furono fondate delle scuole classiche ( la St. Paul School nel 1504 ). Giulio Natta e Karl Ziegler furono i primi a elaborare dei catalizzatori ( catalizzatori di Ziegler-Natta ) in grado di controllare la stereochimica della sintesi industriale dei polimeri, permettendo così di ottenere materiali caratterizzati da una tatticità predeterminata, e quindi in grado di possedere le caratteristiche peculiari ricercate ( es. polipropilene isotattico ). La loro moltiplicazione avviene per talea staccando semplicemente una delle foglie carnose, assicurando- si che venga tolta fin dalla base dell'attaccatura col fusto, che verrà messa a radicare in un letto di sabbia asciutta, senza interrare, a volte le foglie più vecchie si staccano spontaneamente e radicano senza che noi facciamo niente, quando avranno iniziato a radicare verranno leggermente annaffiate, da seme la moltiplicazione è molto più lenta, alcune specie il primo anno non raggiungono che pochi mm. ( 2 o 3 mm ) e sembrano delle picolissime palline verdi. Famosi laureati di tali università comprendono: Andrew Young Jr, Toni Morrison, Oprah Winfrey, Martin Luther King Jr, Medgar Evers, Rosa Parks, Thurgood Marshall, Ralph Ellison, W.E.B. La differenza principale tra le due correnti sarebbe che la filosofia analitica è piuttosto basata su un' analisi logica, scientifica e razionale che si concentra sui dettagli, mentre la filosofia continentale si occuperebbe di più dei grandi concetti nella loro totalità ( ad es. " il senso della vita " ) e dei rapporti interpersonali ( il rapporto con " l'Altro ", il ruolo dell'Uomo nella società ) e sarebbe più scettica riguardo alle capacità conoscitive della scienza. Può essere applicata ad un' ampia varietà di problemi reali, soprattutto nel campo dei trasporti, delle telecomunicazioni, della fornitura di servizi pubblici ( ad es. in sanità ) e delle operations aziendali. La sua opera più nota è la " Storia del reame di Napoli dal 1734 al 1825 ", che fu pubblicata postuma da Capponi nel 1834, e che narra le vicende del Regno delle Due Sicilie dal 1734 al 1825 sotto i regni di Carlo di Borbone e Ferdinando IV. È ancora considerata un riferimento per la storia di quel periodo anche se il suo valore è diminuito da un certo risentimento e dalla mancanza di citazioni in senso moderno; spesso leggiamo di documenti visti personalmente da lui, non più disponibili al momento della stesura dell'opera, di cui è impossibile accertare la veridicità. In senso meno proprio, il termine viene utilizzato per indicare uno specifico ruolo od un particolare comparto in uno sport di squadra ( es. calcio, pallacanestro, ecc, anche se l'allenatore Bruno " Petisso " Pesaola sottolineava come la sua squadra non necessitasse di un regista affermando " non devo mica girare un film " ). Se con l'accento sulla prima sillaba ( pron. " règia " ), il vocabolo è riferibile a qualcosa che attiene alla monarchia ( es. Accademia Règia, Règia Marina, ecc. ) e, quale termine usato in architettura, all'edificio ( Regia ) che all'interno del Foro Romano era posto all'inizio della " Via Sacra ", sede ufficiale del Pontefice Massimo ( da cui, per estensione: reggia ). È più corretto utilizzare le dizioni trasporto collettivo e individuale al posto delle più comunemente adoperate di trasporto pubblico e privato in quanto queste ultime fanno riferimento al regime in cui il servizio viene esercito e non al tipo di servizio prodotto ( es. comunemente aziende private effettuano servizi di trasporto collettivo ). Può essere posto all'inizio del pentagramma ( maggioranza dei casi ) oppure in un punto qualsiasi ( ad es. a metà di una battuta o misura ). Mindaugas governò la Lituania come Granduca ( " kunigaikÅ¡tis " ) dal 1236 ca. e come unico re ( " karalius " ) dal 1253, finché non rinunciò alla sua cristianità nel 1262 e divenne nuovamente Granduca dei lituani. Il romanzo, originariamente pubblicato in quattro volumi, è ambientato nel 1584 e narra la storia di Emily St. Aubert, un' orfana che va a vivere con la zia Madame Cheron. Sul colle San Gallo, nell'ex monastero della SS. Trinità, si trova la Scuola Regionale per la Valorizzazione dei Beni Culturali, istituita nel 1974 dall'Enaip, ente di formazione delle Acli, con la collaborazione dell'ICR ( Istituto Centrale del Restauro di Roma ). Ricostruita diverse volte, ospita al suo interno una Madonna con Santi e Laura Pico, un S. Francesco di Sales, un S. Possidonio con i SS. Francesco e Antonio Abate. Luogosanto ' " ( in gallurese " Locusantu " ', in sardo " Logusantu " ), è un comune di oltre 1900 ab. della provincia di Olbia-Tempio nella regione storica della Gallura. L' abbandono delle fertilissime campagne ( la piana campana è riconosciuta tra le zone con i terreni più fertili al mondo ) dovuto alla mancanza di pianificazione delle attività lavorative su larga scala ( per es. la costituzione di cooperative ) ha portato il paese ad un lento ed inesorabile declino di ordine economico, sociale e culturale, facendo scaturire tutte le contraddizioni tipiche dei paesi dell'interland napoletano: alto tasso di organizzazioni criminali, corruzione politica, disoccupazione, degrado ambientale, inquinamento ecc. Anche se l'impianto del paese restava sostanzialmente quello medievale, sorsero nuovi fabbricati e numerose chiese: Matrice ( riedificata ), San Luca ( abbazia 1514 ), San Marco ( monastero, riedificato nel 1593 ), San Michele Arcangelo, Sant' Oliva, Maria SS. d' Itria, Madonna della Catena, San Sebastiano, Santa Caterina, Sant' Antonio Abate, San Francesco ( convento dei Cappuccini 1579 ), Maria SS. dei Poveri, San Nicolò Magno, Santo Stefano ( ossia Crocefisso ), Santa Marina, Maria SS. della Pietà. La chiesa parrocchiale dei SS. Gervasio e Protasio fu realizzata su una chiesa pre-esistente negli anni 1771-1772 e presenta numerose testimonianze di architettura, pittura e scultura della fine del XVIII secolo. Festa patronale Maria Ss. del Pane Si tratta di una festa antica ( nel 2007, infatti, si festeggia il terzo centenario del miracolo della SS. Madonna del Pane a Novoli ) ed anche molto sentita dai novolesi, legati alla Vergine del Pane che salvò, secondo la leggenda, la comunità da una grave epidemia nel lontano 1707. Sempre nell'art. 81 ritroviamo che nel caso la legge non venisse approvata enbtro 31/12 c'è la possibilità di applicare un bilancio provvisorio ma solo per i 4 mesi successivi al 31/12, questo accade quando l'intervento del governo potrebbe provocare gravi scompensi al paese, oppure quando la maggioranza parlamentare che ha dato la fiducia viene meno. La rivalutazione è destinata ai "soggetti indicati nell'art. 73, co. 1, lettere a) e b)". Pertanto, delle due l'una: o la locuzione "atto pubblico" inserita nell'art. 483 c.p. è un elemento descrittivo della fattispecie ovvero è un elemento normativo della medesima. Il Gruppo ad hoc non ha neppure ritenuto necessario inserire nell'art. 6 n. 1 una disposizione intesa ad escludere l'applicazione della norma al convenuto che abbia stipulato con l'attore una clausola attributiva di competenza conforme all'art. 23 della Convenzione. Invariato l'enunciato, le interpretazioni si sono gradualmente evolute: l'accostamento tra le nozioni, operato nell'art. 9 Cost., ha permesso invero di attualizzare il testo costituzionale, estendendo la tutela non al solo paesaggio quale creazione originaria ed eminente della natura, ma al prodotto dell'interazione storica tra uomo e natura, con la correlata esigenza di "regolazione conformativa globale del territorio".apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Sentences_NL.txt0100644 0000000 0000000 00000037712 14523004075 034176 0ustar00rootroot0000000 0000000 Het eerste wat de onderzoeker zich realiseert als hij de droominhoud en de droomgedachten vergelijkt, is dat er hier goed verdicht is. De droom is kort, pover, laconiek in vergelijking met de reikwijdte en rijkdom van de droomgedachten. De droom vult een halve pagina als hij wordt opgeschreven; de analyse, die de droomgedachten bevat, vereist zes, acht of twaalf keer zoveel schrijfruimte. De relatie verandert voor verschillende dromen; voor zover ik heb kunnen nagaan, verandert de betekenis nooit. In de regel onderschat men de mate van compressie die plaatsvindt door de aan het licht gebrachte droomgedachten als het complete materiaal te beschouwen, terwijl verder interpretatief werk nieuwe gedachten kan onthullen die achter de droom verborgen liggen. We hebben al gezegd dat je er nooit zeker van kunt zijn dat je een droom volledig hebt geïnterpreteerd; zelfs als de oplossing bevredigend en volledig lijkt, is het altijd mogelijk dat dezelfde droom een andere betekenis onthult. De mate van condensatie is daarom - strikt genomen - onbepaalbaar. Tegen de bewering dat uit de wanverhouding tussen droominhoud en droomgedachten de conclusie moet worden getrokken dat er bij de vorming van dromen een uitgebreide verdichting van het psychische materiaal plaatsvindt, kan een bezwaar worden ingebracht dat op het eerste gezicht heel overtuigend lijkt. We hebben vaak het gevoel dat we gedurende de nacht veel gedroomd hebben en het meeste daarna weer vergeten zijn. De droom die we ons bij het ontwaken herinneren zou dan slechts een overblijfsel zijn van het hele droomwerk, dat in omvang waarschijnlijk gelijk zou zijn aan de droomgedachten, als we ons die volledig zouden kunnen herinneren. Hier zit zeker een kern van waarheid in; je kunt jezelf niet voor de gek houden door op te merken dat een droom het meest getrouw wordt gereproduceerd als je hem kort na het ontwaken probeert te herinneren, en dat de herinnering tegen de avond steeds fragmentarischer wordt. Aan de andere kant kan echter worden erkend dat het gevoel dat je veel meer hebt gedroomd dan je kunt reproduceren, heel vaak gebaseerd is op een illusie, waarvan de oorsprong later zal worden uitgelegd. Bovendien wordt de aanname van een verdichting in het droomwerk niet aangetast door de mogelijkheid van droomvergetelheid, want het wordt bewezen door de fantasierijke massa's die horen bij de afzonderlijke stukken van de droom die bewaard zijn gebleven. Als een groot deel van de droom inderdaad verloren is gegaan voor het geheugen, wordt de toegang tot een nieuwe reeks droomgedachten geblokkeerd. Het is een niet te rechtvaardigen verwachting dat de verloren stukjes droom ook alleen zouden hebben verwezen naar die gedachten die we al kennen van de analyse van de stukjes die bewaard zijn gebleven. Du Prel stelt op een gegeven moment (1885, 85) dat het absoluut zeker is dat er een proces van condensatie van de reeks ideeën heeft plaatsgevonden. Met het oog op de overvloed aan ideeën die de analyse op elk afzonderlijk element van de droominhoud brengt, zullen sommige lezers twijfels hebben over het principe of alles wat later tijdens de analyse in je opkomt, tot de droomgedachten gerekend mag worden, d.w.z. of aangenomen mag worden dat al deze gedachten al tijdens de slaaptoestand actief waren en bijdroegen aan de vorming van de droom? Is het niet veeleer zo dat er tijdens het analyseproces nieuwe gedachteverbindingen ontstaan die niet betrokken waren bij de vorming van de droom? Ik kan het slechts gedeeltelijk eens zijn met deze twijfel. Het is zeker waar dat individuele gedachteverbindingen pas ontstaan tijdens de analyse; maar je kunt jezelf er altijd van overtuigen dat zulke nieuwe verbindingen alleen ontstaan tussen gedachten die al op een andere manier verbonden zijn in de droomgedachten; de nieuwe verbindingen zijn als het ware shunts, kortsluitingen, mogelijk gemaakt door het bestaan van andere en dieper gelegen verbindingswegen. Voor de meerderheid van de massa's gedachten die in de analyse aan het licht komen, moet worden toegegeven dat ze al actief zijn geweest in de vorming van de droom, want als je een keten van zulke gedachten hebt doorgewerkt die geen verband lijken te houden met de vorming van de droom, stuit je plotseling op een gedachte die, vertegenwoordigd in de droominhoud, onmisbaar is voor de interpretatie van de droom en die toch op geen andere manier toegankelijk was dan via die keten van gedachten. Vergelijk bijvoorbeeld de droom van de botanische monografie, die het resultaat lijkt te zijn van een verbazingwekkend staaltje condensatie, ook al heb ik de analyse ervan niet volledig meegedeeld. Maar hoe moeten we ons de mentale toestand tijdens de slaap voorstellen die aan dromen voorafgaat? Bestaan alle droomgedachten naast elkaar, of worden ze na elkaar doorgegeven, of worden er meerdere gelijktijdige gedachtegangen gevormd vanuit verschillende centra, die dan samenkomen? Ik denk dat het nog steeds niet nodig is om een levendig beeld te scheppen van de psychische toestand tijdens droomvorming. Laten we niet vergeten dat het een kwestie is van onbewust denken en dat het proces gemakkelijk anders kan zijn dan wat we bij onszelf waarnemen tijdens bewust denken dat gepaard gaat met bewustzijn. Maar het feit dat droomvorming gebaseerd is op een condensatie staat buiten kijf. Hoe komt deze condensatie tot stand? Als we bedenken dat van de gevonden droomgedachten slechts de weinige door een van hun fantasierijke elementen in de droom worden weergegeven, moeten we concluderen dat de verdichting plaatsvindt door middel van weglating, in die zin dat de droom geen getrouwe vertaling of projectie punt voor punt van de droomgedachten is, maar een zeer onvolledige en fragmentarische weergave ervan. Zoals we snel zullen zien, is dit inzicht zeer gebrekkig. Maar laten we ons er eerst op baseren en ons verder afvragen: als er slechts een paar elementen uit de droomgedachten in de droominhoud terechtkomen, welke voorwaarden bepalen dan de selectie hiervan? Om hier informatie over te krijgen, richten we onze aandacht nu op de elementen van de droominhoud die moeten hebben voldaan aan de voorwaarden waarnaar we op zoek zijn. Een droom waaraan een bijzonder sterke condensatie heeft bijgedragen, zal het meest gunstige materiaal zijn voor dit onderzoek. Ik heb gekozen voor de droom van de botanische monografie beschreven op p. 183 e.v. Droominhoud: Ik heb een monografie geschreven over een plantensoort (ongedefinieerd gelaten). Het boek ligt voor me en ik sla de bladzijden van een kleurenplaat om. Aan de kopie is een gedroogd exemplaar van de plant bevestigd. Het meest opvallende element van deze droom is de botanische monografie. Dit komt voort uit de indrukken van de droomdag; ik had daadwerkelijk een monografie over het geslacht "Cyclamen" in de etalage van een boekwinkel gezien. De vermelding van dit geslacht ontbreekt in de droominhoud, waarin alleen de monografie en de relatie met plantkunde overblijven. De "botanische monografie" toont meteen de relatie met het werk over cocaïne dat ik ooit schreef; van cocaïne gaat de gedachteverbinding enerzijds naar het Festschrift en naar bepaalde processen in een universiteitslaboratorium, anderzijds naar mijn vriend, de oogarts Dr. Königstein, die een rol speelde bij het gebruik van cocaïne. Dr. K. herinnert me ook aan het onderbroken gesprek dat ik de vorige avond met hem had en de vele gedachten die ik had over de beloning van medische diensten onder collega's. Dit gesprek is nu de actuele droom. Dit gesprek is nu de actuele droomstimulans; de monografie over cyclamen is eveneens een actualiteit, maar van een onverschillige aard; zoals ik het zie, blijkt de "botanische monografie" van de droom een tussenliggende gemeenschappelijkheid te zijn tussen de twee ervaringen van de dag, onveranderd overgenomen door de onverschillige indruk, verbonden met de psychisch significante ervaring door de meest uitgebreide associatieve verbindingen. Maar niet alleen het samengestelde idee "botanische monografie", maar ook elk van de elementen "botanisch" en "monografie" afzonderlijk dringt via meervoudige verbindingen steeds dieper door in de wirwar van droomgedachten. Botanisch" omvat de herinneringen aan de persoon van professor Gärtner, aan zijn bloeiende vrouw, aan mijn patiënt, die Flora heet, en aan de dame over wie ik het verhaal van de vergeten bloemen vertelde. Gärtner verwijst nu naar het laboratorium en het gesprek met Königstein; de twee patiënten worden in hetzelfde gesprek genoemd. Een gedachtepad vertakt zich van de vrouw met de bloemen naar de lievelingsbloemen van mijn vrouw, waarvan het andere einde ligt in de titel van de monografie die ik die dag onder ogen kreeg. Bovendien herinnert "botanisch" aan een episode op het gymnasium en aan een universitair examen, en een nieuw onderwerp dat in dat gesprek naar voren kwam, dat van mijn hobby's, is verbonden met de gedachteketen die begint bij de vergeten bloemen via de bemiddeling van mijn schertsend zogenaamde lievelingsbloem, de artisjok; achter "artisjok" zit enerzijds de herinnering aan Italië en anderzijds aan een scène uit mijn kindertijd, waarmee ik mijn relatie tot boeken opende, die sindsdien intiem is geworden. "Botanisch" is daarom een waar knooppunt waarin talloze gedachtegangen samenkomen voor de droom, die, dat kan ik je verzekeren, in dat gesprek terecht bij elkaar werden gebracht. Hier bevinden we ons midden in een gedachtefabriek waarin, net als in het Weber meesterwerk in de droom, twee thema's worden aangesneden: de eenzijdigheid van mijn studie en de kostbaarheid van mijn hobby's. Uit dit eerste onderzoek krijg je de indruk dat de elementen "botanisch" en "monografie" hun weg hebben gevonden naar de droominhoud omdat ze het meest uitgebreide contact kunnen hebben met de meeste droomgedachten, dat wil zeggen dat ze knooppunten vertegenwoordigen waar veel van de droomgedachten samenkomen, omdat ze dubbelzinnig zijn met betrekking tot de interpretatie van dromen. Het feit dat ten grondslag ligt aan deze uitleg kan ook anders worden uitgedrukt en dan gezegd: Elk van de elementen van de droominhoud blijkt overgedetermineerd te zijn, meerdere keren vertegenwoordigd te zijn in de droomgedachten. We komen meer te weten als we de andere componenten van de droom onderzoeken op hun voorkomen in de droomgedachten. De gekleurde plaat die ik openmaak (zie de analyse p. 185 e.v.) verwijst naar een nieuw thema, de kritiek van collega's op mijn werk, en naar een thema dat al in de droom voorkomt, mijn hobby's, en ook naar de jeugdherinnering waarin ik een boek met gekleurde platen uit elkaar pluk, het gedroogde exemplaar van de plant raakt aan de gymnasiumervaring met het herbarium en benadrukt deze herinnering in het bijzonder. Zo zie ik de aard van de relatie tussen droominhoud en droomgedachten: Niet alleen worden de elementen van de droom meerdere keren bepaald door de droomgedachten, maar de individuele droomgedachten worden in de droom ook door meerdere elementen vertegenwoordigd. Het pad van associatie leidt van één element van de droom naar meerdere droomgedachten, van één droomgedachte naar meerdere droomelementen. De droomvorming vindt niet zo plaats dat de individuele droomgedachte of een groep van zulke gedachten een afkorting geeft voor de droominhoud en dat de volgende droomgedachte dan weer een afkorting geeft als representatie, bijvoorbeeld zoals vertegenwoordigers uit een bevolking worden gekozen, maar de hele massa droomgedachten wordt onderworpen aan een bepaalde verwerking, volgens welke de meest en best ondersteunde elementen eruit springen voor opname in de droominhoud, bijvoorbeeld analoog aan de verkiezing door middel van een lijst. Welke droom ik ook aan een soortgelijke ontleding onderwerp, ik vind altijd dezelfde principes bevestigd, namelijk dat de droomelementen worden gevormd uit de hele massa droomgedachten en dat elk van hen meerdere keren lijkt te zijn bepaald in relatie tot de droomgedachten. Het is zeker niet overbodig om deze relatie van droominhoud en droomgedachten aan te tonen aan de hand van een nieuw voorbeeld, dat gekenmerkt wordt door een bijzonder kunstige vervlechting van de wederzijdse relaties. De droom is afkomstig van een patiënt die ik behandel voor angst in gesloten ruimten. Het zal snel duidelijk worden waarom ik me genoodzaakt voel om deze uitzonderlijk ingenieuze droomvoorstelling op de volgende manier te beschrijven: Hij reist met een groot gezelschap naar X Street, waar een bescheiden herberg is (wat niet klopt). In de kamers van de herberg wordt toneel gespeeld; soms is hij publiek, soms acteur. Aan het einde wordt gezegd dat je je moet omkleden om terug te keren naar de stad. Een deel van het personeel wordt naar de kamers in de parterre gestuurd, een ander deel naar de eerste verdieping. Dan breekt er ruzie uit. Degenen die boven zijn, vinden het vervelend dat degenen die beneden zijn nog niet klaar zijn, dus ze kunnen niet naar beneden. Zijn broer is boven, hij is beneden, en hij ergert zich aan zijn broer omdat hij zo met zich laat sollen. Overigens was al besloten toen ze aankwamen wie er boven zou zijn en wie beneden. Dan loopt hij in zijn eentje over de heuvel die X Street maakt in de richting van de stad, en loopt zo zwaar, zo moeizaam, dat hij zich niet kan bewegen. Een oudere heer voegt zich bij hem en moppert over de koning van Italië. Aan het einde van de heuvel loopt hij veel gemakkelijker. Het ongemak dat hij voelde tijdens het klimmen was zo duidelijk dat hij na het ontwaken even twijfelde of het een droom of werkelijkheid was. Volgens de manifeste inhoud kan deze droom nauwelijks geprezen worden. Ik zal de interpretatie beginnen met het stuk dat de dromer als het duidelijkst beschreef. De gedroomde en waarschijnlijk in de droom gevoelde klacht, de moeizame opstijging met dyspneu, is een van de symptomen die de patiënt jaren geleden echt had vertoond en destijds werd verwezen naar een (waarschijnlijk hysterisch geveinsde) tuberculose in combinatie met andere verschijnselen. We kennen dit gevoel van geremd lopen, dat eigen is aan dromen, al uit de tentoonstellingsdromen, en we zien hier opnieuw dat het wordt gebruikt als materiaal dat altijd klaar ligt voor een andere voorstelling. Het deel van de droominhoud dat beschrijft hoe de klim eerst moeilijk was en aan het eind van de heuvel gemakkelijk werd, deed me denken aan de bekende meesterlijke inleiding op Sappho door Alphonse Daudet. Daarin draagt een jongeman zijn geliefde de trap op, eerst zo licht als een veertje; maar hoe verder hij klimt, hoe zwaarder ze op zijn armen weegt, en deze scène is exemplarisch voor het verloop van de relatie, waarmee Daudet de jeugd wil vermanen een serieuzere neiging niet te verspillen aan meisjes van lage geboorte en een dubieus verleden. Hoewel ik wist dat mijn patiënt onlangs een liefdesrelatie met een dame uit het theater had gehad en verbroken, verwachtte ik niet dat mijn interpretatie gerechtvaardigd zou zijn. Ook was het in Sappho het omgekeerde van de droom; in de laatste was de beklimming eerst zwaar en later licht; in de roman diende het alleen de symboliek toen wat eerst licht werd opgevat uiteindelijk een zware last bleek te zijn. Tot mijn verbazing merkte de patiënt op dat de interpretatie erg overeenkwam met de inhoud van het toneelstuk dat hij de vorige avond in het theater had gezien. Het stuk heette Rund um Wien (Rondom Wenen) en ging over het leven van een meisje dat eerst respectabel is, dan een demimonde wordt, relaties aangaat met hooggeplaatste mensen en zo "opklimt", maar uiteindelijk steeds meer "neerkomt". Het toneelstuk had hem ook herinnerd aan een ander toneelstuk dat jaren geleden was opgevoerd, getiteld Van trede tot trede, waarin een trap werd opgevoerd die uit meerdere treden bestond. Nu de verdere interpretatie. De actrice met wie hij zijn laatste relatie had, had in X Street gewoond. Er is geen café in deze straat. Toen hij echter een deel van de zomer in Wenen verbleef omwille van de dame, verbleef hij in een klein hotel in de buurt. Bij het verlaten van het hotel zei hij tegen de koetsier: "Ik ben blij dat ik tenminste geen ongedierte heb gekregen! De koetsier antwoordde: "Maar hoe kun je daar blijven! Het is helemaal geen hotel, het is eigenlijk gewoon een café.apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Sentences_PL.txt0100644 0000000 0000000 00000036254 14523004075 034200 0ustar00rootroot0000000 0000000 PierwszÄ… rzeczÄ…, którÄ… egzaminator sobie uÅ›wiadamia, porównujÄ…c treść snu i myÅ›li senne, jest to, że wykonano tutaj Å›wietnÄ… robotÄ™ kondensacji. Sen jest krótki, ubogi, lakoniczny w porównaniu z zakresem i bogactwem myÅ›li sennych. Zapisany sen zajmuje pół strony; analiza, która zawiera myÅ›li senne, wymaga sześć, osiem lub dwanaÅ›cie razy wiÄ™cej miejsca. Relacja zmienia siÄ™ dla różnych snów; o ile udaÅ‚o mi siÄ™ sprawdzić, nigdy nie zmienia swojego znaczenia. Z reguÅ‚y nie docenia siÄ™ iloÅ›ci kompresji, która ma miejsce, biorÄ…c myÅ›li senne ujawnione jako kompletny materiaÅ‚, podczas gdy dalsza praca interpretacyjna może ujawnić nowe myÅ›li ukryte za snem. WspomnieliÅ›my już, że nigdy nie można być pewnym peÅ‚nej interpretacji snu; nawet jeÅ›li rozwiÄ…zanie wydaje siÄ™ satysfakcjonujÄ…ce i kompletne, zawsze istnieje możliwość, że ten sam sen ujawni inne znaczenie. Tempo kondensacji jest zatem - Å›ciÅ›le rzecz biorÄ…c - nieokreÅ›lone. Przeciwko twierdzeniu, że z dysproporcji miÄ™dzy treÅ›ciÄ… snu a myÅ›lami sennymi należy wyciÄ…gnąć wniosek, że rozlegÅ‚a kondensacja materiaÅ‚u psychicznego ma miejsce w tworzeniu snów, można podnieść sprzeciw, który na pierwszy rzut oka wydaje siÄ™ dość przekonujÄ…cy. CzÄ™sto mamy wrażenie, że Å›niliÅ›my bardzo dużo przez całą noc, a nastÄ™pnie zapomnieliÅ›my o wiÄ™kszoÅ›ci z nich. Sen, który pamiÄ™tamy po przebudzeniu, byÅ‚by wtedy jedynie pozostaÅ‚oÅ›ciÄ… caÅ‚ej pracy snu, która prawdopodobnie byÅ‚aby równa rozmiarem myÅ›lom sennym, gdybyÅ›my mogli je caÅ‚kowicie zapamiÄ™tać. Z pewnoÅ›ciÄ… jest w tym trochÄ™ prawdy; nie można siÄ™ oszukiwać, obserwujÄ…c, że sen jest najwierniej odtwarzany, gdy próbujemy go sobie przypomnieć wkrótce po przebudzeniu, a jego pamięć staje siÄ™ coraz bardziej fragmentaryczna pod wieczór. Z drugiej jednak strony można uznać, że poczucie, iż Å›niÅ‚o siÄ™ znacznie wiÄ™cej, niż można odtworzyć, bardzo czÄ™sto opiera siÄ™ na iluzji, której pochodzenie zostanie wyjaÅ›nione później. Co wiÄ™cej, zaÅ‚ożenie kondensacji w pracy nad snem nie jest dotkniÄ™te możliwoÅ›ciÄ… zapomnienia snu, ponieważ jest to udowodnione przez wyobrażeniowe masy należące do poszczególnych fragmentów snu, które zostaÅ‚y zachowane. JeÅ›li duża część snu rzeczywiÅ›cie zostaÅ‚a utracona w pamiÄ™ci, to dostÄ™p do nowej serii myÅ›li sennych jest zablokowany. Nieuzasadnione jest oczekiwanie, że utracone fragmenty snu również odnosiÅ‚yby siÄ™ tylko do tych myÅ›li, które już znamy z analizy tych, które zostaÅ‚y zachowane. Du Prel stwierdza w pewnym momencie (1885, 85), że jest absolutnie pewne, że miaÅ‚ miejsce proces kondensacji serii pomysłów. Ze wzglÄ™du na obfitość pomysłów, które analiza przynosi na każdy pojedynczy element treÅ›ci snu, niektórzy czytelnicy bÄ™dÄ… mieli wÄ…tpliwoÅ›ci co do zasady, czy wszystko, co przychodzi na myÅ›l później podczas analizy, można zaliczyć do myÅ›li sennych, tj. czy można zaÅ‚ożyć, że wszystkie te myÅ›li byÅ‚y już aktywne podczas stanu snu i przyczyniÅ‚y siÄ™ do powstania snu? Czy nie jest raczej tak, że podczas procesu analizy powstajÄ… nowe połączenia myÅ›lowe, które nie byÅ‚y zaangażowane w tworzenie snu? MogÄ™ tylko częściowo zgodzić siÄ™ z tÄ… wÄ…tpliwoÅ›ciÄ…. Z pewnoÅ›ciÄ… prawdÄ… jest, że indywidualne połączenia myÅ›lowe powstajÄ… tylko podczas analizy; ale zawsze można siÄ™ przekonać, że takie nowe połączenia powstajÄ… tylko miÄ™dzy myÅ›lami, które sÄ… już połączone w inny sposób w myÅ›lach sennych; nowe połączenia sÄ… niejako bocznikami, zwarciami, możliwymi dziÄ™ki istnieniu innych i głębiej leżących Å›cieżek łączÄ…cych. W przypadku wiÄ™kszoÅ›ci mas myÅ›li odkrytych w analizie należy przyznać, że byÅ‚y one już aktywne w tworzeniu snu, ponieważ kiedy ktoÅ› pracowaÅ‚ przez Å‚aÅ„cuch takich myÅ›li, które wydajÄ… siÄ™ być niezwiÄ…zane z tworzeniem snu, nagle natrafia na myÅ›l, która, reprezentowana w treÅ›ci snu, jest niezbÄ™dna do interpretacji snu, a jednak nie byÅ‚a dostÄ™pna w żaden inny sposób niż poprzez ten Å‚aÅ„cuch myÅ›li. Porównajmy na przykÅ‚ad sen o monografii botanicznej, który wydaje siÄ™ być wynikiem zadziwiajÄ…cego wyczynu kondensacji, nawet jeÅ›li nie w peÅ‚ni przekazaÅ‚em jego analizÄ™. Ale jak powinniÅ›my sobie wyobrazić stan umysÅ‚u podczas snu, który poprzedza Å›nienie? Czy wszystkie myÅ›li senne istniejÄ… obok siebie, czy przechodzÄ… jedna po drugiej, czy też kilka jednoczesnych ciÄ…gów myÅ›lowych powstaje z różnych oÅ›rodków, które nastÄ™pnie siÄ™ łączÄ…? MyÅ›lÄ™, że nadal nie ma potrzeby tworzenia żywego obrazu stanu psychicznego podczas formowania snów. Nie zapominajmy, że jest to kwestia nieÅ›wiadomego myÅ›lenia i że proces ten może Å‚atwo różnić siÄ™ od tego, który postrzegamy w sobie podczas Å›wiadomego myÅ›lenia, któremu towarzyszy Å›wiadomość. Ale fakt, że tworzenie snów opiera siÄ™ na kondensacji, jest niezachwiany. Jak dochodzi do tej kondensacji? JeÅ›li weźmiemy pod uwagÄ™, że spoÅ›ród znalezionych myÅ›li sennych tylko nieliczne sÄ… reprezentowane we Å›nie przez jeden z ich elementów wyobrażeniowych, powinniÅ›my dojść do wniosku, że kondensacja odbywa siÄ™ poprzez pominiÄ™cie, ponieważ sen nie jest wiernym tÅ‚umaczeniem ani projekcjÄ… punkt po punkcie myÅ›li sennych, ale najbardziej niekompletnÄ… i fragmentarycznÄ… ich reprodukcjÄ…. Ten wglÄ…d, jak wkrótce zobaczymy, jest bardzo wadliwy. Ale najpierw oprzyjmy siÄ™ na nim i zadajmy sobie dalsze pytanie: jeÅ›li tylko kilka elementów z myÅ›li sennych wchodzi w treść snu, jakie warunki determinujÄ… ich wybór? Aby uzyskać informacje na ten temat, zwróćmy teraz uwagÄ™ na elementy treÅ›ci snu, które musiaÅ‚y speÅ‚nić warunki, których szukamy. Sen, do którego powstania przyczyniÅ‚a siÄ™ szczególnie silna kondensacja, bÄ™dzie najkorzystniejszym materiaÅ‚em do tego badania. WybraÅ‚em sen o monografii botanicznej opisany na str. 183 i nast. Treść snu: NapisaÅ‚em monografiÄ™ jakiegoÅ› gatunku roÅ›liny (nieokreÅ›lonego). Książka leży przede mnÄ…, a ja przewracam strony kolorowej planszy. Do kopii dołączony jest zasuszony okaz roÅ›liny. Najbardziej uderzajÄ…cym elementem tego snu jest monografia botaniczna. Wynika to z wrażeÅ„ dnia, w którym Å›niÅ‚em; faktycznie widziaÅ‚em monografiÄ™ rodzaju "Cyclamen" w oknie ksiÄ™garni. Wzmianki o tym rodzaju brakuje w treÅ›ci snu, w którym pozostaje tylko monografia i jej zwiÄ…zek z botanikÄ…. "Monografia botaniczna" natychmiast udowadnia swój zwiÄ…zek z pracÄ… na temat kokainy, którÄ… kiedyÅ› napisaÅ‚em; od kokainy połączenie myÅ›lowe przechodzi z jednej strony do Festschrift i pewnych procesów w laboratorium uniwersyteckim, z drugiej strony do mojego przyjaciela, okulisty dr Königsteina, który odegraÅ‚ rolÄ™ w wykorzystaniu kokainy. Dr K. przypomina mi również o przerwanej rozmowie, którÄ… odbyÅ‚em z nim poprzedniego wieczoru i wielu przemyÅ›leniach, które miaÅ‚em na temat wynagrodzenia za usÅ‚ugi medyczne wÅ›ród kolegów. Ta rozmowa jest teraz aktualnym bodźcem snu; monografia cyklamenu jest również aktualna, ale o obojÄ™tnym charakterze; jak widzÄ™, "monografia botaniczna" snu okazuje siÄ™ poÅ›redniÄ… wspólnoÅ›ciÄ… miÄ™dzy dwoma doÅ›wiadczeniami dnia, przejÄ™tymi w niezmienionej formie przez obojÄ™tne wrażenie, połączone z psychicznie znaczÄ…cym doÅ›wiadczeniem przez najszersze powiÄ…zania asocjacyjne. Jednak nie tylko zÅ‚ożona idea "monografii botanicznej", ale także każdy z jej elementów "botaniczny" i "monografia" osobno wchodzi coraz głębiej w plÄ…taninÄ™ myÅ›li sennych poprzez liczne połączenia. Botaniczne" obejmuje wspomnienia o osobie profesora Gärtnera, o jego kwitnÄ…cej żonie, o mojej pacjentce, która ma na imiÄ™ Flora, i o kobiecie, o której opowiedziaÅ‚em historiÄ™ zapomnianych kwiatów. Gärtner odnosi siÄ™ teraz do laboratorium i rozmowy z Königsteinem; obaj pacjenci sÄ… wspomniani w tej samej rozmowie. Åšcieżka myÅ›li rozgałęzia siÄ™ od kobiety z kwiatami do ulubionych kwiatów mojej żony, których drugi koniec znajduje siÄ™ w tytule monografii, na którÄ… spojrzaÅ‚em w ciÄ…gu dnia. Ponadto "botaniczny" przywoÅ‚uje epizod z gimnazjum i egzamin uniwersytecki, a nowy temat poruszony w tej rozmowie, czyli moje hobby, jest powiÄ…zany z Å‚aÅ„cuchem myÅ›li zaczynajÄ…cym siÄ™ od zapomnianych kwiatów poprzez poÅ›rednictwo mojego żartobliwie nazywanego ulubionego kwiatu, karczocha; za "karczochem" kryje siÄ™ wspomnienie WÅ‚och z jednej strony i sceny z dzieciÅ„stwa z drugiej, dziÄ™ki której otworzyÅ‚em swój zwiÄ…zek z książkami, który od tego czasu staÅ‚ siÄ™ intymny. "Botanical" jest zatem prawdziwym punktem wÄ™zÅ‚owym, w którym spotyka siÄ™ wiele ciÄ…gów myÅ›lowych dla snu, które, mogÄ™ ciÄ™ zapewnić, zostaÅ‚y sÅ‚usznie połączone w tej rozmowie. Tutaj znajdujemy siÄ™ w Å›rodku fabryki myÅ›li, w której, podobnie jak w arcydziele Webera we Å›nie, poruszane sÄ… dwa tematy: jednostronność moich studiów i kosztowność mojego hobby. Z tego pierwszego badania można odnieść wrażenie, że elementy "botaniczny" i "monografia" znalazÅ‚y siÄ™ w treÅ›ci snu, ponieważ mogÄ… mieć najszerszy kontakt z wiÄ™kszoÅ›ciÄ… myÅ›li sennych, tj. reprezentujÄ… punkty wÄ™zÅ‚owe, w których spotyka siÄ™ wiele myÅ›li sennych, ponieważ sÄ… one niejednoznaczne w odniesieniu do interpretacji snów. Fakt leżący u podstaw tego wyjaÅ›nienia można również wyrazić inaczej, a nastÄ™pnie powiedzieć: Każdy z elementów treÅ›ci snu okazuje siÄ™ być przesadzony, aby być reprezentowanym kilka razy w myÅ›lach sennych. Dowiadujemy siÄ™ wiÄ™cej, gdy badamy inne skÅ‚adniki snu pod kÄ…tem ich wystÄ™powania w myÅ›lach sennych. Kolorowa pÅ‚ytka, którÄ… otwieram (por. analiza str. 185 f.) odnosi siÄ™ do nowego tematu, krytyki mojej pracy przez kolegów, a także do jednego już reprezentowanego we Å›nie, mojego hobby, a także do wspomnienia z dzieciÅ„stwa, w którym rozbieram książkÄ™ z kolorowymi pÅ‚ytkami; wysuszony okaz roÅ›liny dotyka gimnazjalnego doÅ›wiadczenia zielnika i szczególnie podkreÅ›la to wspomnienie. WidzÄ™ wiÄ™c naturÄ™ zwiÄ…zku miÄ™dzy treÅ›ciÄ… snu a myÅ›lami sennymi: Nie tylko elementy snu sÄ… kilkakrotnie okreÅ›lane przez myÅ›li senne, ale poszczególne myÅ›li senne sÄ… również reprezentowane we Å›nie przez kilka elementów. Åšcieżka asocjacji prowadzi od jednego elementu snu do kilku myÅ›li sennych, od jednej myÅ›li sennej do kilku elementów snu. Formacja snu nie odbywa siÄ™ w taki sposób, że pojedyncza myÅ›l senna lub grupa takich myÅ›li stanowi skrót treÅ›ci snu, a nastÄ™pnie kolejna myÅ›l senna stanowi kolejny skrót jako reprezentacjÄ™, na przykÅ‚ad tak, jak przedstawiciele sÄ… wybierani z populacji, ale caÅ‚a masa myÅ›li sennych podlega pewnemu przetwarzaniu, zgodnie z którym najbardziej i najlepiej wspierane elementy wyróżniajÄ… siÄ™, aby wejść do treÅ›ci snu, na przykÅ‚ad analogicznie do wyborów za pomocÄ… listy. Niezależnie od tego, który sen poddajÄ™ podobnemu rozbiorowi, zawsze znajdujÄ™ potwierdzenie tych samych zasad, że elementy snu sÄ… tworzone z caÅ‚ej masy myÅ›li sennych i że każdy z nich wydaje siÄ™ być okreÅ›lony kilka razy w stosunku do myÅ›li sennych. Z pewnoÅ›ciÄ… nie jest zbyteczne demonstrowanie tego zwiÄ…zku treÅ›ci snu i myÅ›li sennych za pomocÄ… nowego przykÅ‚adu, który charakteryzuje siÄ™ szczególnie pomysÅ‚owym przeplataniem wzajemnych relacji. Sen pochodzi od pacjenta, którego leczÄ™ z lÄ™ku w zamkniÄ™tych pomieszczeniach. Wkrótce stanie siÄ™ jasne, dlaczego czujÄ™ siÄ™ zmuszony opisać ten wyjÄ…tkowo pomysÅ‚owy sen w nastÄ™pujÄ…cy sposób: Podróżuje z dużą grupÄ… na ulicÄ™ X, gdzie znajduje siÄ™ skromny zajazd (co nie jest poprawne). W pokojach gospody wystawiany jest teatr; czasami jest publicznoÅ›ciÄ…, czasami aktorem. Na koniec mówi siÄ™, że trzeba siÄ™ przebrać, aby wrócić do miasta. Część personelu zostaje wysÅ‚ana do pokoi parterowych, inni na pierwsze piÄ™tro. NastÄ™pnie wybucha kłótnia. Ci na górze denerwujÄ… siÄ™, że ci na dole jeszcze nie skoÅ„czyli, wiÄ™c nie mogÄ… zejść. Jego brat jest na górze, on jest na dole i jest zirytowany na brata za to, że jest tak popychany. Nawiasem mówiÄ…c, już po ich przybyciu zdecydowano, kto bÄ™dzie na górze, a kto na dole. NastÄ™pnie idzie samotnie przez wzgórze, które X Street prowadzi do miasta, i idzie tak ciężko, tak mozolnie, że nie może siÄ™ ruszyć. Starszy pan dołącza do niego i narzeka na króla WÅ‚och. Pod koniec wzgórza idzie mu siÄ™ znacznie Å‚atwiej. Dyskomfort podczas wspinaczki byÅ‚ tak oczywisty, że po przebudzeniu przez chwilÄ™ wÄ…tpiÅ‚, czy to sen, czy rzeczywistość. Zgodnie z oczywistÄ… treÅ›ciÄ…, sen ten trudno pochwalić. InterpretacjÄ™ zacznÄ™ od fragmentu, który Å›niÄ…cy opisaÅ‚ jako najbardziej klarowny. Dolegliwość wyÅ›niona i prawdopodobnie odczuwana we Å›nie, mozolne wznoszenie siÄ™ z dusznoÅ›ciÄ…, jest jednym z objawów, które pacjent rzeczywiÅ›cie wykazywaÅ‚ wiele lat temu i w tamtym czasie byÅ‚ odnoszony do (prawdopodobnie histerycznie udawanej) gruźlicy w połączeniu z innymi zjawiskami. JesteÅ›my już zaznajomieni z tym uczuciem zahamowania chodzenia, charakterystycznym dla snów, ze snów wystawowych i ponownie odkrywamy, że jest on używany jako materiaÅ‚ zawsze gotowy pod rÄ™kÄ… do celów innej reprezentacji. Część treÅ›ci snu, która opisuje, jak wspinaczka byÅ‚a trudna na poczÄ…tku i staÅ‚a siÄ™ Å‚atwa na koÅ„cu wzgórza, przypomniaÅ‚a mi dobrze znany mistrzowski wstÄ™p do Sappho autorstwa Alphonse'a Daudeta. Tam mÅ‚ody czÅ‚owiek niesie swojÄ… ukochanÄ… po schodach, poczÄ…tkowo lekkÄ… jak piórko; ale im dalej siÄ™ wspina, tym cięższa jest ona na jego ramionach, a ta scena jest przykÅ‚adem przebiegu zwiÄ…zku, poprzez przedstawienie którego Daudet chce upomnieć mÅ‚odego czÅ‚owieka, aby nie marnowaÅ‚ poważniejszych skÅ‚onnoÅ›ci do dziewczÄ…t o niskim pochodzeniu i wÄ…tpliwej przeszÅ‚oÅ›ciDoceniajÄ…c to przedstawienie poety, pomyÅ›l o znaczeniu snów o schodach podanych w sekcji dotyczÄ…cej symboliki. Chociaż wiedziaÅ‚em, że mój pacjent niedawno miaÅ‚ i zerwaÅ‚ romans z damÄ… z teatru, nie spodziewaÅ‚em siÄ™, że moja interpretacja bÄ™dzie uzasadniona. W Sappho również byÅ‚o odwrotnie niż we Å›nie; w tym ostatnim wspinaczka byÅ‚a poczÄ…tkowo ciężka, a później lekka; w powieÅ›ci sÅ‚użyÅ‚o to tylko symbolice, gdy to, co poczÄ…tkowo byÅ‚o lekkie, ostatecznie okazaÅ‚o siÄ™ ciężkim brzemieniem. Ku mojemu zdumieniu, pacjent zauważyÅ‚, że interpretacja byÅ‚a bardzo zgodna z treÅ›ciÄ… sztuki, którÄ… widziaÅ‚ w teatrze poprzedniego wieczoru. Sztuka nosiÅ‚a tytuÅ‚ Rund um Wien (Wokół Wiednia) i dotyczyÅ‚a życia dziewczyny, która poczÄ…tkowo szanowana, nastÄ™pnie staje siÄ™ demimonde, wchodzi w relacje z wysoko postawionymi ludźmi, w ten sposób "wznoszÄ…c siÄ™", ale ostatecznie "schodzÄ…c" coraz bardziej. Sztuka przypominaÅ‚a mu również innÄ…, wystawianÄ… przed laty, zatytuÅ‚owanÄ… "Od kroku do kroku", w której schody skÅ‚adaÅ‚y siÄ™ z kilku stopni. Teraz dalsza interpretacja. Aktorka, z którÄ… byÅ‚ w ostatnim zwiÄ…zku, mieszkaÅ‚a na X Street. Na tej ulicy nie ma żadnego pubu. Jednak kiedy spÄ™dziÅ‚ część lata w Wiedniu ze wzglÄ™du na tÄ™ kobietÄ™, zatrzymaÅ‚ siÄ™ w maÅ‚ym hotelu w pobliżu. WychodzÄ…c z hotelu, powiedziaÅ‚ do woźnicy: "CieszÄ™ siÄ™, że przynajmniej nie dostaÅ‚em żadnego robactwa! Woźnica odpowiedziaÅ‚: "Ale jak możesz tam nocować! To w ogóle nie jest hotel, tylko pub".apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Sentences_PT.txt0100644 0000000 0000000 00000014414 14523004075 034202 0ustar00rootroot0000000 0000000 Espalhou-se logo que o principe D. Augusto, neto do imperador, vinha a bordo, e toda a gente correu a recebel-o com essa avidez instinctiva das massas populares. O povo pernambucano, tradicionalmente inimigo dos imperadores, lembrava-se do tempo em que o Sr. D. Pedro de Alcantara dava-se ao luxo de visitar o norte. No dia 23 de abril de 1885 sendo presidente da provincia o Illm. Sr. Conselheiro Dr. José Bento da C. Figueiredo foram removidos os presos para este edificio organisado sob a direcção do engenheiro José Mamede Alves Pereira. Um preto velho teve a lembrança de ajoelhar-se aos pés de S.A. e supplicar-lhe uma esmola. Medico é o Dr. Avelino, d'aqui a legoa e meia, nas Bolsas. Mas já V. Ex.a vê, esta gentinha é pobre! No Alemtejo, pela Extremadura, atravez das duas Beiras, densas sebes ondulando por collina e valle, muros altos de boa pedra, ribeiras, estradas, delimitavam os campos d'esta velha familia agricola que já entulhava grão e plantava cepa em tempos d'el-rei D. Diniz. Seu avô, aquelle gordissimo e riquissimo Jacintho a quem chamavam em Lisboa o D. Galião, descendo uma tarde pela travessa da Trabuqueta, rente d'um muro de quintal que uma parreira toldava, escorregou n'uma casca de laranja e desabou no lagedo. Jacintho, aturdido e deslumbrado, reconheceu o snr. Infante D. Miguel! No dia, entre todos bemdito, em que a Perola appareceu á barra com o Messias, engrinaldou a Pampulha, ergueu no Caneiro um monumento de papelão e lona onde D. Miguel, tornado S. Miguel, branco, d'aureola e azas de Archanjo, furava de cima do seu corcel d'Alter o Dragão do Liberalismo, que se estorcia vomitando a Carta. Durante a guerra com o «outro, com o pedreiro livre» mandava recoveiros a Santo Thyrso, a S. Gens, levar ao Rei fiambres, caixas de dôce, garrafas do seu vinho de Tarrafal, e bolsas de retroz atochadas de peças que elle ensaboava para lhes avivar o ouro. E quando soube que o snr. D. Miguel, com dois velhos bahus amarrados sobre um macho, tomára o caminho de Sines e do final desterro―Jacintho Galião correu pela casa, fechou todas as janellas como n'um luto, berrando furiosamente. Embarcou para França com a mulher, a snr.a D. Angelina Fafes (da tão fallada casa dos Fafes da Avellan); com o filho, o 'Cinthinho, menino amarellinho, mollesinho, coberto de caróços e leicenços; com a aia e com o moleque. Nas costas da Cantabria o paquete encontrou tão rijos mares que a snr.a D. Angelina, esguedelhada, de joelhos na enxerga do beliche, prometteu ao Senhor dos Passos d'Alcantara uma corôa d'espinhos, de ouro, com as gottas de sangue em rubis do Pegu. Logo n'essa semana, sem escolher, Jacintho Galião comprou a um Principe polaco, que depois da tomada de Varsovia se mettera fradecartuxo, aquelle palacete dos Campos Elyseos, n.º 202. Os amigos pensavam que a snr.a D. Angelina Fafes voltaria ao reino. O ambar e o funcho da snr.a D. Angelina tinham escorraçado do seu destino, bem triumphalmente e para sempre, a Sorte-Ruim! E assim de colheitas a lavras, crestando ao sol das eiras, caçando a perdiz nos matos geados, rachando a melancia fresca na poeira dos arraiaes, arranchando a magustos, serandando á candeia, atiçando fogueiras de S. João, enfeitando presepios de Natal, por alli me passaram docemente sete annos, tão atarefados que nunca logrei abrir o Tratado de Direito Civil, e tão singelos que apenas me recordo quando, em vésperas de S. Nicolau, o abbade cahiu da egua á porta do Braz das Córtes. E ao lado das escadas limiares, que uma vidraçaria toldava, as duas magras Deusas de pedra, do tempo de D. Galião, sustentavam as antigas lampadas de globos foscos, onde já silvava o gaz. Mas dentro, no peristillo, logo me surprehendeu um elevador installado por Jacintho―apesar do 202 ter sómente dois andares, e ligados por uma escadaria tão doce que nunca offendêra a asthma da snr.a D. Angelina! Da parede, recoberta de damasco, que subitamente e sem rumor se fendeu, surdio o seu velho escudeiro (aquelle moleque que viera com D. Gallião), que eu me alegrei de encontrar tão rijo, mais negro, reluzente e veneravel na sua tesa gravata, no seu collete branco de botões de ouro. Jacintho com effeito era presidente do Club da Espada e Alvo; commanditario do Jornal o Boulevard; director da Companhia dos Telephones de Constantinopla; socio dos Bazares unidos da Arte Espiritualista; membro do Comité de Iniciação das Religiões Esotericas, etc.. Saboreei, através dos ovos, o telegramma de S. Alteza. Releu profundamente o papel de S. A. que os seus dedos acariciavam com uma reverencia gulosa. Depois no domingo, ao entardecer, ambos visitamos a mesa da ceia, que resplandecia com as velhas baixellas de D. Galião. E o Grillo desenterrava já dos armarios os candelabros abandonados, os pesados castiçaes archaicos dos tempos inscientificos de D. Galião: era uma reserva de veteranos fortes, para o caso pavoroso em que mais tarde, á ceia, falhassem perfidamente as forças bisonhas da Civilisação. Não, S. Alteza ainda não chegára. Agora, na quaresma, é que se applicou mais, no velocipede do padre Ernesto, do cura de S. José! S. Alteza o Gran-Duque Casimiro! Um murmurio de Jacintho tranquillisou S. Alteza. E o director do Boulevard, que se empurrava todo para S. Alteza, attribuia a decadencia da cozinha, em França, á Republica, ao gosto democratico e torpe pelo barato. Mas apenas a clara e macia creatura, batendo o leque como uma aza alegre, começára a chalrar, S. Alteza reparou no apparelho do Theatrophone, pousado sobre uma mesa entre flôres, e chamou Jacintho. A beatitude de S. Alteza, enterrado n'uma vasta poltrona, era perfeita. A ermidinha de S. Joaquim branquejava no cabeço, nuasinha e candida. Na mesa, que pelo esplendor das orchideas mereceu os louvores ruidosos de S. Alteza, fiquei entre o ethereo poeta Dornan e aquelle moço de pennugem loura que balouçava como uma espiga ao vento. Mas a minha alma, a minha embrutecida alma, e o meu corpo, o meu embrutecido corpo, habitavam então na rua do Helder, n.º 16, quarto andar, porta á esquerda. E como ao mirar o Palacete, debruçada, ella roçára a matta fulva do pello crespo pela minha barba―berrei desesperadamente ao cocheiro; que galopasse para a rua do Helder, n.º 16, quarto andar, porta á esquerda! S. Exc.a soffre de fartura. O Melchior não esperava s.ex.a! Oh! peço desculpa a v.ex.a!./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_sentdetect_T0100644 0000000 0000000 00000000171 14523004075 032717 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Test-Sample_OPENNLP-1163.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/Test-Sample_OPENN0100644 0000000 0000000 00000005366 14523004075 034135 0ustar00rootroot0000000 0000000 Il referto, in diritto italiano, è l'atto col quale l'esercente una professione sanitaria riferisce all'autorità giudiziaria di avere prestato la propria assistenza od opera in casi che possono presentare i caratteri di un delitto perseguibile d'ufficio. È un atto di natura puramente informativa, ma la cui presentazione è obbligatoria per legge, avente ad oggetto gli interventi professionali concernente delitti a perseguibilità d'ufficio. L'obbligo di accertare se il caso che ha richiesto l'intervento professionale possa rientrare in una fatti specie che presenti i caratteri di un delitto perseguibile d'ufficio spetta al medico. Differente dal referto è rapporto, atto col quale il pubblico ufficiale o l'incaricato di pubblico servizio denuncia all'autorità giudiziaria un reato (delitto o contravvenzione) perseguibili d'ufficio, di cui abbia avuto notizia nell'esercizio o a causa delle sue funzioni o del servizio. Ad esso sono tenuti quindi tutti i sanitari con qualifica di pubblici ufficiali o incaricati di un pubblico servizio, è obbligatorio per tutti i reati, ed è un atto che fa fede sino a prova contraria. L'obbligo di referto è stabilito dall'art. 365 del codice penale. Riguarda specificamente il medico esercente attività da libero professionista (medici, psicologi, biologi, veterinari, ostetrica, infermiere, ecc.), ma anche il medico pubblico dipendente, nel momento in cui presta la sua assistenza privatamente, cioè quando abbiano effettuato una prestazione personale nei confronti di terzi quale l'assistenza, attività diagnostico-terapeutica, ovvero attività di tipo certificatorio. Il referto dovrà contenere: le generalità della persona assistita; il luogo in cui il medico ha prestato soccorso; le notizie che servono a stabilire le circostanze del fatto, i mezzi e gli effetti che ha causato o che può causare (bisogna essere certi dell'avvenuto fatto delittuoso, la denuncia non contiene dati biologici). L'art. 365 del codice penale italiano rubricato "Omissione del referto" dispone: "chiunque, avendo nell'esercizio di una professione sanitaria prestato la propria assistenza od opera in casi che possono presentare i caratteri di un delitto pel quale si debba procedere d'ufficio, ometta o ritarda di riferirne all'Autorità indicata nell'art. 361 è punito con la multa fino € 516.". Il secondo comma dello stesso articolo tuttavia afferma che la disposizione non si applica quando il referto esporrebbe l'assistito ad un procedimento penale. Il fatto che il medico, e in generale l'esercente una professione sanitaria, svolga la sua attività nell'ambito di istituzioni pubbliche non estingue i suo dovere, postulato dall'art. 32.1 Cost., di favorire l'accesso alle cure sanitarie pure a chi abbia qualche motivo per temere la giustizia penale../PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_sentdetect_o0100644 0000000 0000000 00000000165 14523004075 032755 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/origin-training-data.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/sentdetect/origin-training-d0100644 0000000 0000000 00000003311 14523004075 034345 0ustar00rootroot0000000 0000000 ################ Sentences_DE.txt: - Sigmund Freud - Die Traumdeutung - chapter VI: Die Traumarbeit | section A "Die Verdichtungsarbeit" available here: https://www.projekt-gutenberg.org/freud/traumdeu/chap006.html ################ Sentences_ES.txt: - Sigmund Freud - La interpretación de los sueños - chapter VI: La elaboración onírica | section A "La labor de condensación" available here: https://ia600607.us.archive.org/9/items/El_Inconsciente/Freud_interpretacion_de_los_Suenios.pdf#page170 ################ Sentences_FR.txt: - Sigmund Freud - L’interprétation du rêve - chapter VI: Le travail des rêves | section A "LE TRAVAIL DE CONDENSATION" available here: https://ia801803.us.archive.org/3/items/linterpretation-du-reve-pdfdrive/L%27interpr%C3%A9tation%20du%20r%C3%AAve%20%28%20PDFDrive%20%29.pdf ################ Sentences_IT.txt: - Gabriele Vaccari - training-set.txt provided in OpenNLP-1163 - Reduced and cleaned sample of the first ~500 lines / sentences available here: https://issues.apache.org/jira/browse/OPENNLP-1163 ################ Sentences_NL.txt: - Sigmund Freud - De interpretatie van dromen - hoofdstuk VI: Het droomwerk | sectie A "Het condensatiewerk". automatically translated from the German version, see Sentences_DE.txt ################ Sentences_PL.txt: - Zygmunt Freuda - Interpretacja marzeÅ„ sennych - RozdziaÅ‚ VI: Praca nad snem | sekcja A "Praca nad kondensacjÄ…" automatically translated from the German version, see Sentences_DE.txt ################ Sentences_PT.txt: - Adolfo Ferreira Caminha - No Paiz dos Yankees available here: https://www.gutenberg.org/ebooks/24190 - Eça de Queirós - A Cidade e as Serras available here: https://www.gutenberg.org/ebooks/18220 ################ ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_tokenize_lat0100644 0000000 0000000 00000000160 14523004075 032760 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/tokenize/latin-detokenizer.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/tokenize/latin-detokenizer.x0100644 0000000 0000000 00000003677 14523004075 034427 0ustar00rootroot0000000 0000000 . ? ! , ; : ) ( } { ] [ `` '' % " " - ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_tokenize_tok0100644 0000000 0000000 00000000163 14523004075 033000 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/tokenize/token-insufficient.train apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/tokenize/token-insufficient.0100644 0000000 0000000 00000000062 14523004075 034374 0ustar00rootroot0000000 0000000 I tried to find out the address of an old school .apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/tokenize/token.train0100644 0000000 0000000 00000022364 14523004075 032757 0ustar00rootroot0000000 0000000 Last September, I tried to find out the address of an old school friend whom I hadnt't seen for 15 years. I just knew his name, Alan McKennedy, and I'd heard the rumour that he'd moved to Scotland, the country of his ancestors. So I called Julie, a friend who's still in contact with him. She told me that he lived in 23213 Edinburgh, Worcesterstreet 12. I wrote him a letter right away and he answered soon, sounding very happy and delighted. Last year, I wanted to write a letter to my grandaunt. Her 86th birthday was on October 6, and I no longer wanted to be hesitant to get in touch with her. I didn`t know her face-to-face, and so it wasn't easy for me to find out her address. As she had two apartments in different countries, I decided to write to both. The first was in 12424 Paris in Rue-de-Grandes-Illusions 5. But Marie Clara, as my aunt is called, prefered her apartment in Berlin. It's postcode is 30202. She lived there, in beautiful Kaiserstraße 13, particulary in summer. Hi my name is Michael Graf, how much is a taxi from Ostbahnhof to Hauptbahnhof? About 10 Euro, I reckon. That sounds good. So please call a driver to Leonardstraße 112, near the Ostbahnhof in 56473 Hamburg. I'd like to be at Silberhornstraße 12 as soon as possible. Thank you very much! Hi Mike, it's Stefanie Schmidt. I'm in Nürnberg at the moment and I've got the problem that my bike has broken. Could you please pick me up from Seidlstraße 56, I'm in the Cafe "Mondnacht" at the moment. Please hurry up, I need to be back in Ulm at 8 p.m.! My husband George and me recently celebrated our 10th wedding anniversary. We got married on March 11, 1995. Therefore, we found a photo album with pictures of our first own apartment, which was in 81234 Munich. As a young married couple, we didn't have enough money to afford a bigger lodge than this one in Blumenweg 1. But only five years later, my husband was offered a well-payed job in 17818 Hamburg, so we moved there. Since then, our guests have to ring at Veilchenstraße 11 if they want to visit us, Luise and George Bauer. I read your help-wanted ad with great attention. I'm a student of informatics, 6th semester, and I'm very interested in your part-time job offer. I have a competent knowledge of programming and foreign languages, like French and Italian. I'm looking forward to your reply. Alisa Fernandes, a tourist from Spain, went to the reception desk of the famous Highfly-Hotel in 30303 Berlin. As she felt quite homesick, she asked the staff if they knew a good Spanish restaurant in Berlin. The concierge told her to go to the "Tapasbar" in Chesterstr. 2. Alisa appreciated the hint and enjoyed a delicious traditional meal. An old friend from France is currently travelling around Europe. Yesterday, she arrived in Berlin and we met up spontaneously. She wanted me to show her some famous sights, like the Brandenburger Tor and the Reichstag. But it wasn't easy to meet up in the city because she hardly knows any streetname or building. So I proposed to meet at a quite local point: the cafe "Daily's" in Unter-den-Linden 18, 30291 Berlin. It is five minutes away from the underground station "Westbad". She found it instantly and we spent a great day in the capital. Where did you get those great shoes? They look amazing, I love the colour. Are they made of leather? No, that's faked. But anyway, I like them too. I got them from Hamburg. Don't you know the famous shop in Veilchenstraße? It's called "Twentytwo". I've never heard of that before. Could you give me the complete address? Sure, it's in Veilchenstraße 12, in 78181 Hamburg. I deem it best to write a letter to the owner if the shoes are still available. His name is Gerhard Fritsch. Hi, am I talking to the inquiries? My name is Mike Sander and I'd like to know if it is possible to get information about an address if I merely know the name and the phone number of a person! How is he or she called? His name is Stefan Miller and his number is the 030/827234. I'll have a look in the computer. I found a Stefan Miller who lives in Leipzig. Is that right? Yes, it definitely is. So Stefan Miller lives in Heinrich-Heine-Straße 112, in 20193 Leipzig. Thank you very much for the information. Bye! On July 14, the father of a family got painfully injured after he had tried to start a barbecue. The flaring flames burnt instantly through his jacket, which he managed to pull off last-minute. Although the wounds weren't life-threatening, it was urgent to bring him directly into ambulance. But the only hospital that had opened that Sunday was the Paracelsus Hospital in 83939 Weilheim, which was 2 hours away. Convulsed with pain, the man finally arrived in Stifterstraße 15, where the personal immediately took care of him. Last year, I worked as a delivery boy for a small local magazine. I worked in the area of 83454 Ottobrunn. I had a list with the home addresses of our costumers whom I brought their papers once a week. An elderly lady, who was called Elenor Meier, lived in Gärtnerweg 6, and I always drove there first, because I liked her the most. Afterwards, I went to a student, Gina Schneider, who lived still in her parent's house in Gärtnerweg 25. The last in line was the retired teacher Bruno Schulz in Dramenstraße 15. He was friendly enough to tip sometimes. Our business company was founded in 1912 by the singer and entertainer Michel Seile. He opened the first agency in Erding, a small town near Munich. Now, more than 90 years of turbulent ups and downs later, we finally decided to situate our company in a more central and frequented area. Last year, we moved into an empty factory building in 30303 Berlin. It is located in Barmerstr. 34. When George Miller, a tourist from England, came to Munich, he had no idea how to read the city maps. He depended completely on the help and information of German pedestrians. One day, he simply could not find the famous Lenbachhaus. So he asked a young woman for help. She pointed at a street sign and explained to him that he'd find the Lenbachhaus in Luisenstraße 33, which is in 80333 Munich. Miller was very grateful and could finally enjoy the exhibition. On March 15, there was an accident near Munich. The driver got badly injured. Driving alone not far from her home, the middle-aged woman crashed at high speed into a tree. A resident, who lives near the street where the accident took place, called instantly the police. He reported what had happened and gave his name and address to the officer. He's called Peter Schubert and he lives at Max-Löw-Straße 13 in 84630 Gauting. The police arrived ten minutes later and brought the woman into hospital. Although she had multiple trauma, she's out of mortal danger. Hi, how are you? Arent't you a friend of Natalie? Yeah for sure. How did you know that? I saw you sitting next to her at uni. Yeah she's my best friend. Are you going to her party next friday? Oh yes, I'd really like to. But in fact I don't know yet where it takes place. I can tell you: ring at Baumann, Meisenstraße 5, in 81737 Munich. The party starts at 9 p.m. I hope you'll find it. Thank you very much, see you next friday! My name is Michael Hinterhofer. When I was 21, I moved out from my parents' home into my first own appartment in order to study in a bigger city. My new home was in Lilienstraße 1 in 25334 Hamburg. But I realized quickly that life in a metropolis wasn't relaxed enough for me. So I decided to move into a smaller town. Now I'm a tenant with an elderly widow. We live in Bürgerstraße 2 in 63737 Heidelberg. I really like the smalltown flair and my studies at Heidelberg's notable university. The stock rose by 3.5% yesterday in heavy trading../PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_util_feature0100644 0000000 0000000 00000000215 14523004075 032761 xustar000000000 0000000 141 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/FeatureGeneratorConfigWithUnkownElement.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/FeatureGener0100644 0000000 0000000 00000001560 14523004075 034344 0ustar00rootroot0000000 0000000 ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_util_feature0100644 0000000 0000000 00000000227 14523004075 032764 xustar000000000 0000000 151 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestAutomaticallyInsertAggregatedFeatureGenerator.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestAutomati0100644 0000000 0000000 00000002153 14523004075 034412 0ustar00rootroot0000000 0000000 ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_util_feature0100644 0000000 0000000 00000000234 14523004075 032762 xustar000000000 0000000 156 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestAutomaticallyInsertAggregatedFeatureGeneratorCache.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestAutomati0100644 0000000 0000000 00000002170 14523004075 034411 0ustar00rootroot0000000 0000000 ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_util_feature0100644 0000000 0000000 00000000217 14523004075 032763 xustar000000000 0000000 143 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestDictionarySerializerMappingExtraction.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestDictiona0100644 0000000 0000000 00000001720 14523004075 034360 0ustar00rootroot0000000 0000000 test.dictionary ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_util_feature0100644 0000000 0000000 00000000200 14523004075 032753 xustar000000000 0000000 128 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestFeatureGeneratorConfig.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestFeatureG0100644 0000000 0000000 00000002046 14523004075 034332 0ustar00rootroot0000000 0000000 ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_util_feature0100644 0000000 0000000 00000000206 14523004075 032761 xustar000000000 0000000 134 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestInsertCachedFeatureGenerator.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestInsertCa0100644 0000000 0000000 00000002170 14523004075 034336 0ustar00rootroot0000000 0000000 ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_util_feature0100644 0000000 0000000 00000000232 14523004075 032760 xustar000000000 0000000 154 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestNotAutomaticallyInsertAggregatedFeatureGenerator.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestNotAutom0100644 0000000 0000000 00000001675 14523004075 034405 0ustar00rootroot0000000 0000000 ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_util_feature0100644 0000000 0000000 00000000237 14523004075 032765 xustar000000000 0000000 159 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestNotAutomaticallyInsertAggregatedFeatureGeneratorCache.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestNotAutom0100644 0000000 0000000 00000001712 14523004075 034375 0ustar00rootroot0000000 0000000 ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_util_feature0100644 0000000 0000000 00000000172 14523004075 032763 xustar000000000 0000000 122 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestParametersConfig.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestParamete0100644 0000000 0000000 00000002340 14523004075 034363 0ustar00rootroot0000000 0000000 123 45 67890 123456.789 true HELLO ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_util_feature0100644 0000000 0000000 00000000212 14523004075 032756 xustar000000000 0000000 138 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestTokenClassFeatureGeneratorConfig.xml apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/featuregen/TestTokenCla0100644 0000000 0000000 00000002142 14523004075 034325 0ustar00rootroot0000000 0000000 true apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/index.html0100644 0000000 0000000 00000032372 14523004075 031722 0ustar00rootroot0000000 0000000 Index of /opennlp/models/ud-models-1.0

Index of /opennlp/models/ud-models-1.0

Icon  Name                                                     Last modified      Size  Description
[PARENTDIR] Parent Directory - [   ] CHANGES 2021-05-29 13:55 581 [   ] LICENSE 2021-05-29 13:55 13K [   ] NOTICE 2021-05-29 13:55 376 [   ] opennlp-1.0-1.9.3fr-ud-ftb-sentence-1.0-1.9.3.bin 2021-05-29 13:55 846 [TXT] opennlp-1.0-1.9.3fr-ud-ftb-sentence-1.0-1.9.3.bin.asc 2021-05-29 13:55 833 [TXT] opennlp-1.0-1.9.3fr-ud-ftb-sentence-1.0-1.9.3.bin.sha256 2021-05-29 13:55 118 [TXT] opennlp-1.0-1.9.3fr-ud-ftb-sentence-1.0-1.9.3.bin.sha512 2021-05-29 13:55 182 [   ] opennlp-de-ud-gsd-pos-1.0-1.9.3.bin 2021-05-29 13:55 1.2M [TXT] opennlp-de-ud-gsd-pos-1.0-1.9.3.bin.asc 2021-05-29 13:55 833 [TXT] opennlp-de-ud-gsd-pos-1.0-1.9.3.bin.sha256 2021-05-29 13:55 104 [TXT] opennlp-de-ud-gsd-pos-1.0-1.9.3.bin.sha512 2021-05-29 13:55 168 [   ] opennlp-de-ud-gsd-sentence-1.0-1.9.3.bin 2021-05-29 13:55 15K [TXT] opennlp-de-ud-gsd-sentence-1.0-1.9.3.bin.asc 2021-05-29 13:55 833 [TXT] opennlp-de-ud-gsd-sentence-1.0-1.9.3.bin.sha256 2021-05-29 13:55 109 [TXT] opennlp-de-ud-gsd-sentence-1.0-1.9.3.bin.sha512 2021-05-29 13:55 173 [   ] opennlp-de-ud-gsd-tokens-1.0-1.9.3.bin 2021-05-29 13:55 553K [TXT] opennlp-de-ud-gsd-tokens-1.0-1.9.3.bin.asc 2021-05-29 13:55 833 [TXT] opennlp-de-ud-gsd-tokens-1.0-1.9.3.bin.sha256 2021-05-29 13:55 107 [TXT] opennlp-de-ud-gsd-tokens-1.0-1.9.3.bin.sha512 2021-05-29 13:55 171 [   ] opennlp-en-ud-ewt-pos-1.0-1.9.3.bin 2021-05-29 13:55 1.1M [TXT] opennlp-en-ud-ewt-pos-1.0-1.9.3.bin.asc 2021-05-29 13:55 833 [TXT] opennlp-en-ud-ewt-pos-1.0-1.9.3.bin.sha256 2021-05-29 13:55 104 [TXT] opennlp-en-ud-ewt-pos-1.0-1.9.3.bin.sha512 2021-05-29 13:55 168 [   ] opennlp-en-ud-ewt-sentence-1.0-1.9.3.bin 2021-05-29 13:55 20K [TXT] opennlp-en-ud-ewt-sentence-1.0-1.9.3.bin.asc 2021-05-29 13:55 833 [TXT] opennlp-en-ud-ewt-sentence-1.0-1.9.3.bin.sha256 2021-05-29 13:55 109 [TXT] opennlp-en-ud-ewt-sentence-1.0-1.9.3.bin.sha512 2021-05-29 13:55 173 [   ] opennlp-en-ud-ewt-tokens-1.0-1.9.3.bin 2021-05-29 13:55 338K [TXT] opennlp-en-ud-ewt-tokens-1.0-1.9.3.bin.asc 2021-05-29 13:55 833 [TXT] opennlp-en-ud-ewt-tokens-1.0-1.9.3.bin.sha256 2021-05-29 13:55 107 [TXT] opennlp-en-ud-ewt-tokens-1.0-1.9.3.bin.sha512 2021-05-29 13:55 171 [   ] opennlp-fr-ud-ftb-pos-1.0-1.9.3.bin 2021-05-29 13:55 72K [TXT] opennlp-fr-ud-ftb-pos-1.0-1.9.3.bin.asc 2021-05-29 13:55 833 [TXT] opennlp-fr-ud-ftb-pos-1.0-1.9.3.bin.sha256 2021-05-29 13:55 104 [TXT] opennlp-fr-ud-ftb-pos-1.0-1.9.3.bin.sha512 2021-05-29 13:55 168 [   ] opennlp-fr-ud-ftb-tokens-1.0-1.9.3.bin 2021-05-29 13:55 35K [TXT] opennlp-fr-ud-ftb-tokens-1.0-1.9.3.bin.asc 2021-05-29 13:55 833 [TXT] opennlp-fr-ud-ftb-tokens-1.0-1.9.3.bin.sha256 2021-05-29 13:55 107 [TXT] opennlp-fr-ud-ftb-tokens-1.0-1.9.3.bin.sha512 2021-05-29 13:55 171 [   ] opennlp-it-ud-vit-pos-1.0-1.9.3.bin 2021-05-29 13:55 1.1M [TXT] opennlp-it-ud-vit-pos-1.0-1.9.3.bin.asc 2021-05-29 13:55 833 [TXT] opennlp-it-ud-vit-pos-1.0-1.9.3.bin.sha256 2021-05-29 13:55 104 [TXT] opennlp-it-ud-vit-pos-1.0-1.9.3.bin.sha512 2021-05-29 13:55 168 [   ] opennlp-it-ud-vit-sentence-1.0-1.9.3.bin 2021-05-29 13:55 9.4K [TXT] opennlp-it-ud-vit-sentence-1.0-1.9.3.bin.asc 2021-05-29 13:55 833 [TXT] opennlp-it-ud-vit-sentence-1.0-1.9.3.bin.sha256 2021-05-29 13:55 109 [TXT] opennlp-it-ud-vit-sentence-1.0-1.9.3.bin.sha512 2021-05-29 13:55 173 [   ] opennlp-it-ud-vit-tokens-1.0-1.9.3.bin 2021-05-29 13:55 387K [TXT] opennlp-it-ud-vit-tokens-1.0-1.9.3.bin.asc 2021-05-29 13:55 833 [TXT] opennlp-it-ud-vit-tokens-1.0-1.9.3.bin.sha256 2021-05-29 13:55 107 [TXT] opennlp-it-ud-vit-tokens-1.0-1.9.3.bin.sha512 2021-05-29 13:55 171 [   ] opennlp-nl-ud-alpino-pos-1.0-1.9.3.bin 2021-05-29 13:55 897K [TXT] opennlp-nl-ud-alpino-pos-1.0-1.9.3.bin.asc 2021-05-29 13:55 833 [TXT] opennlp-nl-ud-alpino-pos-1.0-1.9.3.bin.sha256 2021-05-29 13:55 107 [TXT] opennlp-nl-ud-alpino-pos-1.0-1.9.3.bin.sha512 2021-05-29 13:55 171 [   ] opennlp-nl-ud-alpino-sentence-1.0-1.9.3.bin 2021-05-29 13:55 13K [TXT] opennlp-nl-ud-alpino-sentence-1.0-1.9.3.bin.asc 2021-05-29 13:55 833 [TXT] opennlp-nl-ud-alpino-sentence-1.0-1.9.3.bin.sha256 2021-05-29 13:55 112 [TXT] opennlp-nl-ud-alpino-sentence-1.0-1.9.3.bin.sha512 2021-05-29 13:55 176 [   ] opennlp-nl-ud-alpino-tokens-1.0-1.9.3.bin 2021-05-29 13:55 340K [TXT] opennlp-nl-ud-alpino-tokens-1.0-1.9.3.bin.asc 2021-05-29 13:55 833 [TXT] opennlp-nl-ud-alpino-tokens-1.0-1.9.3.bin.sha256 2021-05-29 13:55 110 [TXT] opennlp-nl-ud-alpino-tokens-1.0-1.9.3.bin.sha512 2021-05-29 13:55 174 [   ] opennlp-training-eval-logs-1.0-1.9.3.zip 2021-05-29 13:55 40K [TXT] opennlp-training-eval-logs-1.0-1.9.3.zip.asc 2021-05-29 13:55 833 [TXT] opennlp-training-eval-logs-1.0-1.9.3.zip.sha256 2021-05-29 13:55 109 [TXT] opennlp-training-eval-logs-1.0-1.9.3.zip.sha512 2021-05-29 13:55 173
./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_util_wordvec0100644 0000000 0000000 00000000205 14523004075 032776 xustar000000000 0000000 133 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/wordvector/glove-example-broken-dimensions.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/wordvector/glove-exampl0100644 0000000 0000000 00000000045 14523004075 034436 0ustar00rootroot0000000 0000000 the 0.418 0.24968 -0.41242 of 0.70853./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_util_wordvec0100644 0000000 0000000 00000000171 14523004075 033000 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/wordvector/glove-example-empty.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/wordvector/glove-exampl0100644 0000000 0000000 00000000000 14523004075 034425 0ustar00rootroot0000000 0000000 ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-tools_src_test_resources_opennlp_tools_util_wordvec0100644 0000000 0000000 00000000171 14523004075 033000 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/wordvector/glove-example-short.txt apache-opennlp-2.3.3-src/opennlp-tools/src/test/resources/opennlp/tools/util/wordvector/glove-exampl0100644 0000000 0000000 00000003324 14523004075 034441 0ustar00rootroot0000000 0000000 the 0.418 0.24968 -0.41242 0.1217 0.34527 -0.044457 -0.49688 -0.17862 -0.00066023 -0.6566 0.27843 -0.14767 -0.55677 0.14658 -0.0095095 0.011658 0.10204 -0.12792 -0.8443 -0.12181 -0.016801 -0.33279 -0.1552 -0.23131 -0.19181 -1.8823 -0.76746 0.099051 -0.42125 -0.19526 4.0071 -0.18594 -0.52287 -0.31681 0.00059213 0.0074449 0.17778 -0.15897 0.012041 -0.054223 -0.29871 -0.15749 -0.34758 -0.045637 -0.44251 0.18785 0.0027849 -0.18411 -0.11514 -0.78581 of 0.70853 0.57088 -0.4716 0.18048 0.54449 0.72603 0.18157 -0.52393 0.10381 -0.17566 0.078852 -0.36216 -0.11829 -0.83336 0.11917 -0.16605 0.061555 -0.012719 -0.56623 0.013616 0.22851 -0.14396 -0.067549 -0.38157 -0.23698 -1.7037 -0.86692 -0.26704 -0.2589 0.1767 3.8676 -0.1613 -0.13273 -0.68881 0.18444 0.0052464 -0.33874 -0.078956 0.24185 0.36576 -0.34727 0.28483 0.075693 -0.062178 -0.38988 0.22902 -0.21617 -0.22562 -0.093918 -0.80375 to 0.68047 -0.039263 0.30186 -0.17792 0.42962 0.032246 -0.41376 0.13228 -0.29847 -0.085253 0.17118 0.22419 -0.10046 -0.43653 0.33418 0.67846 0.057204 -0.34448 -0.42785 -0.43275 0.55963 0.10032 0.18677 -0.26854 0.037334 -2.0932 0.22171 -0.39868 0.20912 -0.55725 3.8826 0.47466 -0.95658 -0.37788 0.20869 -0.32752 0.12751 0.088359 0.16351 -0.21634 -0.094375 0.018324 0.21048 -0.03088 -0.19722 0.082279 -0.09434 -0.073297 -0.064699 -0.26044 and 0.26818 0.14346 -0.27877 0.016257 0.11384 0.69923 -0.51332 -0.47368 -0.33075 -0.13834 0.2702 0.30938 -0.45012 -0.4127 -0.09932 0.038085 0.029749 0.10076 -0.25058 -0.51818 0.34558 0.44922 0.48791 -0.080866 -0.10121 -1.3777 -0.10866 -0.23201 0.012839 -0.46508 3.8463 0.31362 0.13643 -0.52244 0.3302 0.33707 -0.35601 0.32431 0.12041 0.3512 -0.069043 0.36885 0.25168 -0.24517 0.25381 0.1367 -0.31178 -0.6321 -0.25028 -0.38097apache-opennlp-2.3.3-src/opennlp-uima/createPear.xml0100644 0000000 0000000 00000007717 14523004075 022752 0ustar00rootroot0000000 0000000 ##### Creating OpenNlpTextAnalyzer pear ##### apache-opennlp-2.3.3-src/opennlp-uima/descriptors/Chunker.xml0100644 0000000 0000000 00000007243 14523004075 024631 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.chunker.Chunker Chunker ${project.version} Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.POSFeature String false true opennlp.uima.ChunkType String false true opennlp.uima.ChunkTagFeature String false true opennlp.uima.SentenceType opennlp.uima.Sentence opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.POSFeature pos opennlp.uima.ChunkType opennlp.uima.Chunk opennlp.uima.ChunkTagFeature chunkType en opennlp.uima.ModelName opennlp.uima.chunker.ChunkerModelResource apache-opennlp-2.3.3-src/opennlp-uima/descriptors/DateNameFinder.xml0100644 0000000 0000000 00000006027 14523004075 026037 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.namefind.NameFinder Date Name Finder ${project.version} Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.NameType String false true opennlp.uima.SentenceType uima.tcas.DocumentAnnotation opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.NameType opennlp.uima.Date en opennlp.uima.ModelName opennlp.uima.namefind.TokenNameFinderModelResource apache-opennlp-2.3.3-src/opennlp-uima/descriptors/LanguageDetector.xml0100644 0000000 0000000 00000005612 14523004075 026445 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.doccat.LanguageDetector LanguageDetector ${project.version} Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.SentenceType opennlp.uima.Sentence en opennlp.uima.ModelName opennlp.uima.doccat.DoccatModelResource DoccatModel file:mlang.bin opennlp.uima.doccat.DoccatModelResourceImpl opennlp.uima.ModelName DoccatModel apache-opennlp-2.3.3-src/opennlp-uima/descriptors/LocationNameFinder.xml0100644 0000000 0000000 00000006037 14523004075 026733 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.namefind.NameFinder Location Name Finder ${project.version} Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.NameType String false true opennlp.uima.SentenceType uima.tcas.DocumentAnnotation opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.NameType opennlp.uima.Location en opennlp.uima.ModelName opennlp.uima.namefind.TokenNameFinderModelResource apache-opennlp-2.3.3-src/opennlp-uima/descriptors/MoneyNameFinder.xml0100644 0000000 0000000 00000006031 14523004075 026244 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.namefind.NameFinder Money Name Finder ${project.version} Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.NameType String false true opennlp.uima.SentenceType uima.tcas.DocumentAnnotation opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.NameType opennlp.uima.Money en opennlp.uima.ModelName opennlp.uima.namefind.TokenNameFinderModelResource apache-opennlp-2.3.3-src/opennlp-uima/descriptors/OpenNlpTextAnalyzer.xml0100644 0000000 0000000 00000021416 14523004075 027156 0ustar00rootroot0000000 0000000 org.apache.uima.java false OpenNlpTextAnalyzer ${project.version} Apache Software Foundation SentenceDetector Tokenizer PersonFinder OrganizationFinder MoneyFinder DateFinder LocationFinder PercentageFinder TimeFinder PosTagger Chunker Parser en true false false SentenceModel file:en-sent.bin opennlp.uima.sentdetect.SentenceModelResourceImpl TokenModel file:en-token.bin opennlp.uima.tokenize.TokenizerModelResourceImpl PersonModel file:en-ner-person.bin opennlp.uima.namefind.TokenNameFinderModelResourceImpl PercentageModel file:en-ner-percentage.bin opennlp.uima.namefind.TokenNameFinderModelResourceImpl OrganizationModel file:en-ner-organization.bin opennlp.uima.namefind.TokenNameFinderModelResourceImpl MoneyModel file:en-ner-money.bin opennlp.uima.namefind.TokenNameFinderModelResourceImpl DateModel file:en-ner-date.bin opennlp.uima.namefind.TokenNameFinderModelResourceImpl LocationModel file:en-ner-location.bin opennlp.uima.namefind.TokenNameFinderModelResourceImpl TimeModel file:en-ner-time.bin opennlp.uima.namefind.TokenNameFinderModelResourceImpl PosModel file:en-pos-maxent.bin opennlp.uima.postag.POSModelResourceImpl ChunkerModel file:en-chunker.bin opennlp.uima.chunker.ChunkerModelResourceImpl ParserModel file:en-parser-chunking.bin opennlp.uima.parser.ParserModelResourceImpl SentenceDetector/opennlp.uima.ModelName SentenceModel Tokenizer/opennlp.uima.ModelName TokenModel PersonFinder/opennlp.uima.ModelName PersonModel PercentageFinder/opennlp.uima.ModelName PercentageModel OrganizationFinder/opennlp.uima.ModelName OrganizationModel MoneyFinder/opennlp.uima.ModelName MoneyModel DateFinder/opennlp.uima.ModelName DateModel LocationFinder/opennlp.uima.ModelName LocationModel TimeFinder/opennlp.uima.ModelName TimeModel PosTagger/opennlp.uima.ModelName PosModel Chunker/opennlp.uima.ModelName ChunkerModel Parser/opennlp.uima.ModelName ParserModel apache-opennlp-2.3.3-src/opennlp-uima/descriptors/OrganizationNameFinder.xml0100644 0000000 0000000 00000006047 14523004075 027630 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.namefind.NameFinder Organization Name Finder ${project.version} Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.NameType String false true opennlp.uima.SentenceType uima.tcas.DocumentAnnotation opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.NameType opennlp.uima.Organization en opennlp.uima.ModelName opennlp.uima.namefind.TokenNameFinderModelResource apache-opennlp-2.3.3-src/opennlp-uima/descriptors/Parser.xml0100644 0000000 0000000 00000011267 14523004075 024467 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.parser.Parser Parser ${project.version} Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.ParseType String false true opennlp.uima.TypeFeature String false true opennlp.uima.ChildrenFeature String false true opennlp.uima.ProbabilityFeature String false false opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.SentenceType opennlp.uima.Sentence opennlp.uima.ParseType opennlp.uima.Parse opennlp.uima.TypeFeature parseType opennlp.uima.ChildrenFeature children opennlp.uima.ProbabilityFeature prob en true true ParserModel file:en-parser-chunking.bin opennlp.uima.parser.ParserModelResourceImpl opennlp.uima.ModelName ParserModel opennlp.uima.ModelName opennlp.uima.parser.ParserModelResource apache-opennlp-2.3.3-src/opennlp-uima/descriptors/PercentageNameFinder.xml0100644 0000000 0000000 00000006044 14523004075 027236 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.namefind.NameFinder Percentage Name Finder ${project.version} Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.NameType String false true opennlp.uima.SentenceType uima.tcas.DocumentAnnotation opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.NameType opennlp.uima.Percentage en opennlp.uima.ModelName opennlp.uima.namefind.TokenNameFinderModelResource apache-opennlp-2.3.3-src/opennlp-uima/descriptors/PersonNameFinder.xml0100644 0000000 0000000 00000006033 14523004075 026425 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.namefind.NameFinder Person Name Finder ${project.version} Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.NameType String false true opennlp.uima.SentenceType uima.tcas.DocumentAnnotation opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.NameType opennlp.uima.Person en opennlp.uima.ModelName opennlp.uima.namefind.TokenNameFinderModelResource apache-opennlp-2.3.3-src/opennlp-uima/descriptors/PosTagger.xml0100644 0000000 0000000 00000005760 14523004075 025127 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.postag.POSTagger POS Tagger ${project.version} Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.POSFeature String false true opennlp.uima.SentenceType opennlp.uima.Sentence opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.POSFeature pos en opennlp.uima.ModelName opennlp.uima.postag.POSModelResource apache-opennlp-2.3.3-src/opennlp-uima/descriptors/SentenceDetector.xml0100644 0000000 0000000 00000005036 14523004075 026466 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.sentdetect.SentenceDetector Sentence Detector ${project.version} Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.ContainerType String false false opennlp.uima.SentenceType opennlp.uima.Sentence en opennlp.uima.ModelName opennlp.uima.sentdetect.SentenceModelResource apache-opennlp-2.3.3-src/opennlp-uima/descriptors/SimpleTokenizer.xml0100644 0000000 0000000 00000005012 14523004075 026346 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.tokenize.SimpleTokenizer SimpleTokenizer ${project.version} Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.SentenceType uima.tcas.DocumentAnnotation en true true apache-opennlp-2.3.3-src/opennlp-uima/descriptors/TimeNameFinder.xml0100644 0000000 0000000 00000005767 14523004075 026072 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.namefind.NameFinder Time Name Finder ${project.version} Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.NameType String false true opennlp.uima.SentenceType uima.tcas.DocumentAnnotation opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.NameType opennlp.uima.Time en opennlp.uima.ModelName opennlp.uima.namefind.TokenNameFinderModelResource apache-opennlp-2.3.3-src/opennlp-uima/descriptors/Tokenizer.xml0100644 0000000 0000000 00000006020 14523004075 025174 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.tokenize.Tokenizer Tokenizer ${project.version} Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.tokenizer.IsAlphaNumericOptimization String false false opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.SentenceType uima.tcas.DocumentAnnotation en true true opennlp.uima.ModelName opennlp.uima.tokenize.TokenizerModelResource apache-opennlp-2.3.3-src/opennlp-uima/descriptors/TypeSystem.xml0100644 0000000 0000000 00000007342 14523004075 025360 0ustar00rootroot0000000 0000000 Apache OpenNLP TypeSystem This is the default OpenNLP type system. All the sample descriptors reference the types in this type system. To replace it against a custom type system change the mapping in the descriptors to the custom types and reference the custom type system. ${project.version} Apache Software Foundation opennlp.uima.Sentence uima.tcas.Annotation opennlp.uima.Token uima.tcas.Annotation pos Part of speech uima.cas.String opennlp.uima.Chunk uima.tcas.Annotation chunkType uima.cas.String opennlp.uima.Person uima.tcas.Annotation opennlp.uima.Organization uima.tcas.Annotation opennlp.uima.Location uima.tcas.Annotation opennlp.uima.Date uima.tcas.Annotation opennlp.uima.Time uima.tcas.Annotation opennlp.uima.Money uima.tcas.Annotation opennlp.uima.Percentage uima.tcas.Annotation opennlp.uima.Parse uima.tcas.Annotation parseType Type of the parse node uima.cas.String children Leaf nodes uima.cas.FSArray prob Leaf nodes uima.cas.Double apache-opennlp-2.3.3-src/opennlp-uima/metadata/install.xml0100644 0000000 0000000 00000003555 14523004075 024121 0ustar00rootroot0000000 0000000 Windows XP 1.5.0_14 opennlp.uima.OpenNlpTextAnalyzer OpenNlpTextAnalyzer $main_root/desc/OpenNlpTextAnalyzer.xml standard set_env_variable component classpath setting $main_root/lib/jwnl.jar;$main_root/lib/opennlp-maxent.jar;$main_root/bin;$main_root/lib/opennlp-tools.jar;$main_root/lib/opennlp-uima.jar classpath set_env_variable component uima.datapath setting $main_root/models uima.datapath apache-opennlp-2.3.3-src/opennlp-uima/pom.xml0100644 0000000 0000000 00000006042 14523004075 021460 0ustar00rootroot0000000 0000000 4.0.0 org.apache.opennlp opennlp 2.3.3 ../pom.xml opennlp-uima jar Apache OpenNLP UIMA Annotators ApacheIncubatorRepository https://people.apache.org/repo/m2-incubating-repository/ org.apache.opennlp opennlp-tools org.apache.uima uimaj-core ${uimaj.version} provided org.slf4j slf4j-api org.apache.opennlp opennlp-tools test-jar test org.junit.jupiter junit-jupiter-api test org.junit.jupiter junit-jupiter-engine test org.slf4j slf4j-simple test org.apache.maven.plugins maven-dependency-plugin 2.1 copy-dependencies package copy-dependencies provided true apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/chunker/Chunker.java0100644 0000000 0000000 00000015676 14523004075 031123 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.chunker; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.CasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIndex; import org.apache.uima.cas.Feature; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceAccessException; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; import org.slf4j.LoggerFactory; import opennlp.tools.chunker.ChunkerME; import opennlp.tools.chunker.ChunkerModel; import opennlp.uima.util.AnnotatorUtil; import opennlp.uima.util.UimaUtil; /** * OpenNLP Chunker annotator. *

* Mandatory parameters * * * * * * * * * *
Type Name Description
String opennlp.uima.ModelName The name of the model file
String opennlp.uima.SentenceType The full name of the sentence type
String opennlp.uima.TokenType The full name of the token type
String opennlp.uima.POSFeature
String opennlp.uima.ChunkType
String opennlp.uima.ChunkTagFeature
*

* Optional parameters * * * * *
Type Name Description
Integer opennlp.uima.BeamSize
*/ public final class Chunker extends CasAnnotator_ImplBase { private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(Chunker.class); /** * The chunk type parameter. */ public static final String CHUNK_TYPE_PARAMETER = "opennlp.uima.ChunkType"; /** * The chunk tag feature parameter */ public static final String CHUNK_TAG_FEATURE_PARAMETER = "opennlp.uima.ChunkTagFeature"; private Type mTokenType; private Type mChunkType; private Feature mPosFeature; private ChunkerME mChunker; private UimaContext context; private Feature mChunkFeature; /** * Initializes a new instance. *

* Note: Use {@link #initialize(UimaContext) } to initialize * this instance. Don't use the constructor. */ public Chunker() { // must not be implemented ! } /** * Initializes the current instance with the given context. *

* Note: Do all initialization in this method, do not use the constructor. */ public void initialize(UimaContext context) throws ResourceInitializationException { super.initialize(context); this.context = context; Logger mLogger = context.getLogger(); if (mLogger.isLoggable(Level.INFO)) { mLogger.log(Level.INFO, "Initializing the OpenNLP Chunker annotator."); } ChunkerModel model; try { ChunkerModelResource modelResource = (ChunkerModelResource) context.getResourceObject(UimaUtil.MODEL_PARAMETER); model = modelResource.getModel(); } catch (ResourceAccessException e) { throw new ResourceInitializationException(e); } mChunker = new ChunkerME(model); } /** * Initializes the type system. */ public void typeSystemInit(TypeSystem typeSystem) throws AnalysisEngineProcessException { // chunk type mChunkType = AnnotatorUtil.getRequiredTypeParameter(context, typeSystem, CHUNK_TYPE_PARAMETER); // chunk feature mChunkFeature = AnnotatorUtil.getRequiredFeatureParameter(context, mChunkType, CHUNK_TAG_FEATURE_PARAMETER, CAS.TYPE_NAME_STRING); // token type mTokenType = AnnotatorUtil.getRequiredTypeParameter(context, typeSystem, UimaUtil.TOKEN_TYPE_PARAMETER); // pos feature mPosFeature = AnnotatorUtil.getRequiredFeatureParameter( context, mTokenType, UimaUtil.POS_FEATURE_PARAMETER, CAS.TYPE_NAME_STRING); } private void addChunkAnnotation(CAS tcas, AnnotationFS[] tokenAnnotations, String tag, int start, int end) { AnnotationFS chunk = tcas.createAnnotation(mChunkType, tokenAnnotations[start].getBegin(), tokenAnnotations[end - 1].getEnd()); chunk.setStringValue(mChunkFeature, tag); tcas.getIndexRepository().addFS(chunk); } /** * Performs chunking on the given {@code tcas} object. * * @param tcas The {@link CAS} object to process. */ @Override public void process(CAS tcas) { FSIndex tokenAnnotationIndex = tcas.getAnnotationIndex(mTokenType); String[] tokens = new String[tokenAnnotationIndex.size()]; String[] pos = new String[tokenAnnotationIndex.size()]; AnnotationFS[] tokenAnnotations = new AnnotationFS[tokenAnnotationIndex .size()]; int index = 0; for (AnnotationFS tokenAnnotation : tokenAnnotationIndex) { tokenAnnotations[index] = tokenAnnotation; tokens[index] = tokenAnnotation.getCoveredText(); pos[index++] = tokenAnnotation.getFeatureValueAsString( mPosFeature); } String[] result = mChunker.chunk(tokens, pos); int start = -1; int end = -1; for (int i = 0; i < result.length; i++) { String chunkTag = result[i]; if (chunkTag.startsWith("B")) { if (start != -1) { addChunkAnnotation(tcas, tokenAnnotations, result[i - 1].substring(2), start, end); } start = i; end = i + 1; } else if (chunkTag.startsWith("I")) { end = i + 1; } else if (chunkTag.startsWith("O")) { if (start != -1) { addChunkAnnotation(tcas, tokenAnnotations, result[i - 1].substring(2), start, end); start = -1; end = -1; } } else { LOG.warn("Unexpected tag: {}", result[i]); } } if (start != -1) { addChunkAnnotation(tcas, tokenAnnotations, result[result.length - 1].substring(2), start, end); } } /** * Releases allocated resources. */ @Override public void destroy() { // dereference model to allow garbage collection mChunker = null; } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/chunker/ChunkerModelResource.java0100644 0000000 0000000 00000001664 14523004075 033604 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.chunker; import opennlp.tools.chunker.ChunkerModel; public interface ChunkerModelResource { ChunkerModel getModel(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-uima_src_main_java_opennlp_uima_chunker_ChunkerMode0100644 0000000 0000000 00000000160 14523004075 032455 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/chunker/ChunkerModelResourceImpl.java apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/chunker/ChunkerModelResourceImpl.ja0100644 0000000 0000000 00000002421 14523004075 034067 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.chunker; import java.io.IOException; import java.io.InputStream; import opennlp.tools.chunker.ChunkerModel; import opennlp.uima.util.AbstractModelResource; public class ChunkerModelResourceImpl extends AbstractModelResource implements ChunkerModelResource { @Override public ChunkerModel getModel() { return model; } @Override protected ChunkerModel loadModel(InputStream in) throws IOException { return new ChunkerModel(in); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/chunker/package.html0100644 0000000 0000000 00000002006 14523004075 031121 0ustar00rootroot0000000 0000000 Package related to finding non-recursive syntactic annotation such as noun phrase chunks. apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/dictionary/DictionaryResource.java0100644 0000000 0000000 00000001667 14523004075 034042 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.dictionary; import opennlp.tools.dictionary.Dictionary; public interface DictionaryResource { Dictionary getDictionary(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-uima_src_main_java_opennlp_uima_dictionary_Dictiona0100644 0000000 0000000 00000000161 14523004075 032512 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/dictionary/DictionaryResourceImpl.java apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/dictionary/DictionaryResourceImpl.j0100644 0000000 0000000 00000002415 14523004075 034164 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.dictionary; import java.io.IOException; import java.io.InputStream; import opennlp.tools.dictionary.Dictionary; import opennlp.uima.util.AbstractModelResource; public class DictionaryResourceImpl extends AbstractModelResource implements DictionaryResource { @Override public Dictionary getDictionary() { return model; } @Override protected Dictionary loadModel(InputStream in) throws IOException { return new Dictionary(in); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-uima_src_main_java_opennlp_uima_doccat_AbstractDocu0100644 0000000 0000000 00000000162 14523004075 032427 xustar000000000 0000000 114 path=apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/doccat/AbstractDocumentCategorizer.java apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/doccat/AbstractDocumentCategorizer.0100644 0000000 0000000 00000006600 14523004075 034104 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.doccat; import java.util.ArrayList; import java.util.List; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.CasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceAccessException; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; import opennlp.tools.doccat.DoccatModel; import opennlp.tools.doccat.DocumentCategorizerME; import opennlp.uima.util.AnnotatorUtil; import opennlp.uima.util.UimaUtil; /** * Abstract document categorizer which can be implemented to define how the * output of the {@link DocumentCategorizer} should be written into the CAS. */ abstract class AbstractDocumentCategorizer extends CasAnnotator_ImplBase { private UimaContext context; private opennlp.tools.doccat.DocumentCategorizer mCategorizer; private Type mTokenType; public void initialize(UimaContext context) throws ResourceInitializationException { super.initialize(context); this.context = context; Logger mLogger = context.getLogger(); if (mLogger.isLoggable(Level.INFO)) { mLogger.log(Level.INFO, "Initializing the OpenNLP Categorizer."); } DoccatModel model; try { DoccatModelResource modelResource = (DoccatModelResource) context .getResourceObject(UimaUtil.MODEL_PARAMETER); model = modelResource.getModel(); } catch (ResourceAccessException e) { throw new ResourceInitializationException(e); } mCategorizer = new DocumentCategorizerME(model); } @Override public void typeSystemInit(TypeSystem typeSystem) throws AnalysisEngineProcessException { mTokenType = AnnotatorUtil.getRequiredTypeParameter(context, typeSystem, UimaUtil.TOKEN_TYPE_PARAMETER); } protected abstract void setBestCategory(CAS cas, String bestCategory); @Override public void process(CAS cas) { FSIterator tokenAnnotations = cas.getAnnotationIndex(mTokenType).iterator(); List tokensList = new ArrayList<>(); while (tokenAnnotations.hasNext()) { tokensList.add(tokenAnnotations.next().getCoveredText()); } double[] result = mCategorizer.categorize(tokensList.toArray(new String[0])); String bestCategory = mCategorizer.getBestCategory(result); setBestCategory(cas, bestCategory); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/doccat/DoccatModelResource.java0100644 0000000 0000000 00000001655 14523004075 033200 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.doccat; import opennlp.tools.doccat.DoccatModel; public interface DoccatModelResource { DoccatModel getModel(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-uima_src_main_java_opennlp_uima_doccat_DoccatModelR0100644 0000000 0000000 00000000156 14523004075 032354 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/doccat/DoccatModelResourceImpl.java apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/doccat/DoccatModelResourceImpl.java0100644 0000000 0000000 00000002407 14523004075 034016 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.doccat; import java.io.IOException; import java.io.InputStream; import opennlp.tools.doccat.DoccatModel; import opennlp.uima.util.AbstractModelResource; public class DoccatModelResourceImpl extends AbstractModelResource implements DoccatModelResource { @Override public DoccatModel getModel() { return model; } @Override protected DoccatModel loadModel(InputStream in) throws IOException { return new DoccatModel(in); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/doccat/DocumentCategorizer.java0100644 0000000 0000000 00000004627 14523004075 033271 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.doccat; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIndex; import org.apache.uima.cas.Feature; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import opennlp.uima.util.AnnotatorUtil; /** * A default implementation of an OpenNLP Document Categorizer. */ public class DocumentCategorizer extends AbstractDocumentCategorizer { private Type mCategoryType; private Feature mCategoryFeature; public void typeSystemInit(TypeSystem typeSystem) throws AnalysisEngineProcessException { // get category type and feature (it a document property, one object with a feature) mCategoryType = AnnotatorUtil.getRequiredTypeParameter(getContext(), typeSystem, "opennlp.uima.doccat.CategoryType"); // get feature name mCategoryFeature = AnnotatorUtil.getRequiredFeatureParameter(getContext(), mCategoryType, "opennlp.uima.doccat.CategoryFeature", CAS.TYPE_NAME_STRING); } @Override protected void setBestCategory(CAS tcas, String bestCategory) { FSIndex categoryIndex = tcas.getAnnotationIndex(mCategoryType); AnnotationFS categoryAnnotation; if (categoryIndex.size() > 0) { categoryAnnotation = categoryIndex.iterator().next(); } else { categoryAnnotation = tcas.createAnnotation(mCategoryType, 0, tcas.getDocumentText().length()); tcas.getIndexRepository().addFS(categoryAnnotation); } categoryAnnotation.setStringValue(mCategoryFeature, bestCategory); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/doccat/LanguageDetector.java0100644 0000000 0000000 00000002503 14523004075 032520 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.doccat; import org.apache.uima.cas.CAS; /** * Analysis Engine (AE) which can detect the language of a text. *

* The AE uses the OpenNLP {@link DocumentCategorizer} and a special language detection model. * The outcome of the document categorizer model is written into the language field of * the {@link CAS} view. */ public class LanguageDetector extends AbstractDocumentCategorizer { @Override protected void setBestCategory(CAS cas, String bestCategory) { cas.setDocumentLanguage(bestCategory); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/namefind/AbstractNameFinder.java0100644 0000000 0000000 00000015217 14523004075 033331 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.namefind; import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.CasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; import opennlp.tools.util.Span; import opennlp.uima.util.AnnotationComboIterator; import opennlp.uima.util.AnnotationIteratorPair; import opennlp.uima.util.AnnotatorUtil; import opennlp.uima.util.UimaUtil; /** * Base implementation of a name finder. */ abstract class AbstractNameFinder extends CasAnnotator_ImplBase { protected final String name; protected Type mSentenceType; protected Type mTokenType; protected Type mNameType; protected Map mNameTypeMapping = Collections.emptyMap(); protected UimaContext context; protected Logger mLogger; private Boolean isRemoveExistingAnnotations; AbstractNameFinder(String name) { this.name = name; } protected void initialize() throws ResourceInitializationException { } @Override public final void initialize(UimaContext context) throws ResourceInitializationException { super.initialize(context); this.context = context; mLogger = context.getLogger(); if (mLogger.isLoggable(Level.INFO)) { mLogger.log(Level.INFO, "Initializing the " + name + "."); } isRemoveExistingAnnotations = AnnotatorUtil.getOptionalBooleanParameter( context, UimaUtil.IS_REMOVE_EXISTINGS_ANNOTAIONS); if (isRemoveExistingAnnotations == null) { isRemoveExistingAnnotations = false; } initialize(); } /** * Initializes the {@link TypeSystem}. */ @Override public void typeSystemInit(TypeSystem typeSystem) throws AnalysisEngineProcessException { // sentence type mSentenceType = AnnotatorUtil.getRequiredTypeParameter(context, typeSystem, UimaUtil.SENTENCE_TYPE_PARAMETER); // token type mTokenType = AnnotatorUtil.getRequiredTypeParameter(context, typeSystem, UimaUtil.TOKEN_TYPE_PARAMETER); // name type mNameType = AnnotatorUtil.getOptionalTypeParameter(context, typeSystem, NameFinder.NAME_TYPE_PARAMETER); String typeMapString = (String) context.getConfigParameterValue( NameFinder.NAME_TYPE_MAP_PARAMETER); if (typeMapString != null) { Map nameTypeMap = new HashMap<>(); String[] mappings = typeMapString.split(","); for (String mapping : mappings) { String[] parts = mapping.split(":"); if (parts.length == 2) { nameTypeMap.put(parts[0].trim(), typeSystem.getType(parts[1].trim())); } else { mLogger.log(Level.WARNING, String.format("Failed to parse a part of the type mapping [%s]", mapping)); } } mNameTypeMapping = Collections.unmodifiableMap(nameTypeMap); } if (mNameType == null && mNameTypeMapping.size() == 0) { throw new AnalysisEngineProcessException( new Exception("No name type or valid name type mapping configured!")); } } protected void postProcessAnnotations(Span[] detectedNames, AnnotationFS[] nameAnnotations) { } /** * Called if the current document is completely processed. */ protected void documentDone(CAS cas) { } protected abstract Span[] find(CAS cas, String[] tokens); /** * Performs name finding on the given {@link CAS} object. */ @Override public final void process(CAS cas) { if (isRemoveExistingAnnotations) { final AnnotationComboIterator sentenceNameCombo = new AnnotationComboIterator(cas, mSentenceType, mNameType); List removeAnnotations = new LinkedList<>(); for (AnnotationIteratorPair annotationIteratorPair : sentenceNameCombo) { for (AnnotationFS nameAnnotation : annotationIteratorPair.getSubIterator()) { removeAnnotations.add(nameAnnotation); } } for (AnnotationFS annotation : removeAnnotations) { cas.removeFsFromIndexes(annotation); } } final AnnotationComboIterator sentenceTokenCombo = new AnnotationComboIterator(cas, mSentenceType, mTokenType); for (AnnotationIteratorPair annotationIteratorPair : sentenceTokenCombo) { final List sentenceTokenAnnotationList = new LinkedList<>(); final List sentenceTokenList = new LinkedList<>(); for (AnnotationFS tokenAnnotation : annotationIteratorPair.getSubIterator()) { sentenceTokenAnnotationList.add(tokenAnnotation); sentenceTokenList.add(tokenAnnotation.getCoveredText()); } Span[] names = find(cas, sentenceTokenList.toArray(new String[0])); AnnotationFS[] nameAnnotations = new AnnotationFS[names.length]; for (int i = 0; i < names.length; i++) { int startIndex = sentenceTokenAnnotationList.get( names[i].getStart()).getBegin(); int endIndex = sentenceTokenAnnotationList.get( names[i].getEnd() - 1).getEnd(); Type nameType = mNameTypeMapping.get(names[i].getType()); if (nameType == null) { nameType = mNameType; } // Types in the model which are not mapped should be ignored, // this allows the usage of only some types in the model if (nameType != null) { nameAnnotations[i] = cas.createAnnotation(nameType, startIndex, endIndex); cas.getIndexRepository().addFS(nameAnnotations[i]); } } postProcessAnnotations(names, nameAnnotations); } documentDone(cas); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/namefind/DictionaryNameFinder.java0100644 0000000 0000000 00000005746 14523004075 033701 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.namefind; import java.io.IOException; import java.io.InputStream; import org.apache.uima.cas.CAS; import org.apache.uima.resource.ResourceAccessException; import org.apache.uima.resource.ResourceInitializationException; import opennlp.tools.dictionary.Dictionary; import opennlp.tools.util.Span; import opennlp.uima.dictionary.DictionaryResource; import opennlp.uima.util.AnnotatorUtil; import opennlp.uima.util.ExceptionMessages; import opennlp.uima.util.UimaUtil; public class DictionaryNameFinder extends AbstractNameFinder { private opennlp.tools.namefind.TokenNameFinder mNameFinder; /** * Initializes a new instance. *

* Note: Use {@link #initialize() } to initialize * this instance. Not use the constructor. */ public DictionaryNameFinder() { super("OpenNLP Dictionary Name annotator"); } /** * Initializes the current instance with the given context. *

* Note: Do all initialization in this method, do not use the constructor. */ @Override public void initialize() throws ResourceInitializationException { Dictionary nameFinderDictionary; try { DictionaryResource modelResource = (DictionaryResource) context .getResourceObject(UimaUtil.DICTIONARY_PARAMETER); nameFinderDictionary = modelResource.getDictionary(); } catch (ResourceAccessException e) { try { String modelName = AnnotatorUtil.getRequiredStringParameter(context, UimaUtil.DICTIONARY_PARAMETER); InputStream inModel = AnnotatorUtil.getResourceAsStream(context, modelName); nameFinderDictionary = new Dictionary(inModel); } catch (IOException ie) { throw new ResourceInitializationException( ExceptionMessages.MESSAGE_CATALOG, ExceptionMessages.IO_ERROR_DICTIONARY_READING, new Object[] {ie.getMessage()}); } } mNameFinder = new opennlp.tools.namefind.DictionaryNameFinder( nameFinderDictionary); } @Override protected Span[] find(CAS cas, String[] tokens) { return mNameFinder.find(tokens); } /** * Releases allocated resources. */ @Override public void destroy() { mNameFinder = null; } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/namefind/NameFinder.java0100644 0000000 0000000 00000015666 14523004075 031655 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.namefind; import org.apache.uima.UimaContext; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceAccessException; import org.apache.uima.resource.ResourceInitializationException; import opennlp.tools.namefind.NameFinderME; import opennlp.tools.namefind.TokenNameFinderModel; import opennlp.tools.util.Span; import opennlp.tools.util.eval.Mean; import opennlp.uima.util.AnnotatorUtil; import opennlp.uima.util.UimaUtil; /** * OpenNLP Name annotator. *

* Mandatory parameters * * * * * * * *
Type Name Description
String opennlp.uima.ModelName The name of the model file
String opennlp.uima.SentenceType The full name of the sentence type
String opennlp.uima.TokenType The full name of the token type
String opennlp.uima.NameType The full name of the name type
*

* Optional parameters * * * * * * * *
Type Name Description
String opennlp.uima.ProbabilityFeature The name of the double * probability feature (not set by default)
Integer opennlp.uima.BeamSize
String opennlp.uima.DocumentConfidenceType
String opennlp.uima.DocumentConfidenceType
*/ public final class NameFinder extends AbstractNameFinder { public static final String NAME_TYPE_PARAMETER = "opennlp.uima.NameType"; public static final String NAME_TYPE_MAP_PARAMETER = "opennlp.uima.NameTypeMap"; public static final String TOKEN_PATTERN_OPTIMIZATION = "opennlp.uima.TokenPatternOptimization"; // Token feature public static final String TOKEN_FEATURE_PARAMETER = "opennlp.uima.namefinder.TokenFeature"; public static final String TOKEN_FEATURE_PREV_WINDOW_SIZE_PARAMETER = TOKEN_FEATURE_PARAMETER + ".previousWindowSize"; public static final String TOKEN_FEATURE_NEXT_WINDOW_SIZE_PARAMETER = TOKEN_FEATURE_PARAMETER + ".nextWindowSize"; // Token class feature public static final String TOKEN_CLASS_FEATURE_PARAMETER = "opennlp.uima.namefinder.TokenClassFeature"; public static final String TOKEN_CLASS_FEATURE_PREV_WINDOW_SIZE_PARAMETER = TOKEN_CLASS_FEATURE_PARAMETER + ".previousWindowSize"; public static final String TOKEN_CLASS_FEATURE_NEXT_WINDOW_SIZE_PARAMETER = TOKEN_CLASS_FEATURE_PARAMETER + ".nextWindowSize"; private NameFinderME mNameFinder; private Feature probabilityFeature; private Type documentConfidenceType; private Feature documentConfidenceNameTypeFeature; private Feature documentConfidenceFeature; private Mean documentConfidence = new Mean(); /** * Initializes a new instance. *

* Note: Use {@link #initialize(UimaContext) } to initialize * this instance. Not use the constructor. */ public NameFinder() { super("OpenNLP Maxent Name annotator"); } /** * Initializes the current instance with the given context. *

* Note: Do all initialization in this method, do not use the constructor. */ @Override public void initialize() throws ResourceInitializationException { super.initialize(); TokenNameFinderModel model; try { TokenNameFinderModelResource modelResource = (TokenNameFinderModelResource) context.getResourceObject(UimaUtil.MODEL_PARAMETER); model = modelResource.getModel(); } catch (ResourceAccessException e) { throw new ResourceInitializationException(e); } mNameFinder = new NameFinderME(model); } /** * Initializes the type system. */ @Override public void typeSystemInit(TypeSystem typeSystem) throws AnalysisEngineProcessException { super.typeSystemInit(typeSystem); probabilityFeature = AnnotatorUtil.getOptionalFeatureParameter(context, mNameType, UimaUtil.PROBABILITY_FEATURE_PARAMETER, CAS.TYPE_NAME_DOUBLE); documentConfidenceType = AnnotatorUtil.getOptionalTypeParameter(context, typeSystem, "opennlp.uima.DocumentConfidenceType"); if (documentConfidenceType != null) { documentConfidenceNameTypeFeature = AnnotatorUtil.getRequiredFeature( documentConfidenceType, "nameType"); documentConfidenceFeature = AnnotatorUtil.getRequiredFeature( documentConfidenceType, "confidence"); } } @Override protected Span[] find(CAS cas, String[] tokens) { Span[] names = mNameFinder.find(tokens); double[] probs = mNameFinder.probs(); for (double prob : probs) { documentConfidence.add(prob); } return names; } @Override protected void postProcessAnnotations(Span[] detectedNames, AnnotationFS[] nameAnnotations) { if (probabilityFeature != null) { double[] probs = mNameFinder.probs(detectedNames); for (int i = 0; i < nameAnnotations.length; i++) { nameAnnotations[i].setDoubleValue(probabilityFeature, probs[i]); } } } @Override protected void documentDone(CAS cas) { // TODO: Create confidence FS // contains String name type // contains Double prob if (documentConfidenceType != null) { FeatureStructure confidenceFS = cas.createFS(documentConfidenceType); confidenceFS.setDoubleValue(documentConfidenceFeature, documentConfidence.mean()); confidenceFS.setStringValue(documentConfidenceNameTypeFeature, mNameType.getName()); cas.addFsToIndexes(confidenceFS); } // Clears the adaptive data which was created for the current document mNameFinder.clearAdaptiveData(); documentConfidence = new Mean(); } /** * Releases allocated resources. */ @Override public void destroy() { mNameFinder = null; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-uima_src_main_java_opennlp_uima_namefind_TokenNameF0100644 0000000 0000000 00000000165 14523004075 032367 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/namefind/TokenNameFinderModelResource.java apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/namefind/TokenNameFinderModelResour0100644 0000000 0000000 00000001714 14523004075 034104 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.namefind; import opennlp.tools.namefind.TokenNameFinderModel; public interface TokenNameFinderModelResource { TokenNameFinderModel getModel(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-uima_src_main_java_opennlp_uima_namefind_TokenNameF0100644 0000000 0000000 00000000171 14523004075 032364 xustar000000000 0000000 121 path=apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/namefind/TokenNameFinderModelResourceImpl.java apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/namefind/TokenNameFinderModelResour0100644 0000000 0000000 00000002513 14523004075 034102 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.namefind; import java.io.IOException; import java.io.InputStream; import opennlp.tools.namefind.TokenNameFinderModel; import opennlp.uima.util.AbstractModelResource; public class TokenNameFinderModelResourceImpl extends AbstractModelResource implements TokenNameFinderModelResource { @Override public TokenNameFinderModel getModel() { return model; } @Override protected TokenNameFinderModel loadModel(InputStream in) throws IOException { return new TokenNameFinderModel(in); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/namefind/package.html0100644 0000000 0000000 00000001751 14523004075 031251 0ustar00rootroot0000000 0000000 Package related to finding proper names and numeric amounts. apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/normalizer/Normalizer.java0100644 0000000 0000000 00000017560 14523004075 032363 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.normalizer; import java.io.IOException; import java.io.InputStream; import java.text.ParseException; import java.util.Collections; import java.util.HashSet; import java.util.Set; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.CasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIndex; import org.apache.uima.cas.Feature; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; import opennlp.tools.util.StringList; import opennlp.uima.namefind.NameFinder; import opennlp.uima.util.AnnotatorUtil; import opennlp.uima.util.ExceptionMessages; import opennlp.uima.util.UimaUtil; /** * The Normalizer tries the structure annotations. The structured value * is than assigned to a field of the annotation. *

* The process depends on the *

* string Tokens must be (fuzzy) mapped to categories eg. a month, a day or a * year (use dictionary) integer, float tokens must be parsed eg. for percentage * or period boolean tokens must be parsed eg is there any ??? *

*

* Restricted set of outcomes throw an error if not matched or silently fail * unrestricted set of outcomes. */ public class Normalizer extends CasAnnotator_ImplBase { /** * This set contains all supported range types. */ private static final Set SUPPORTED_TYPES; static { Set supportedTypes = new HashSet<>(); supportedTypes.add(CAS.TYPE_NAME_STRING); supportedTypes.add(CAS.TYPE_NAME_BYTE); supportedTypes.add(CAS.TYPE_NAME_SHORT); supportedTypes.add(CAS.TYPE_NAME_INTEGER); supportedTypes.add(CAS.TYPE_NAME_LONG); supportedTypes.add(CAS.TYPE_NAME_FLOAT); supportedTypes.add(CAS.TYPE_NAME_DOUBLE); SUPPORTED_TYPES = Collections.unmodifiableSet(supportedTypes); } private UimaContext context; private Logger mLogger; /** * The annotation marks the text to structure. */ private Type mNameType; /** * The target type which the text should have. This type must be primitive. *

* It should not be possible to assign something to this feature with is not * structured. The feature should define allowed values. */ private Feature mStructureFeature; // private Type mSentenceType; private StringDictionary mLookupDictionary; /** * Initializes a new instance. *

* Note: Use {@link #initialize(UimaContext) } to initialize this instance. Not * use the constructor. */ public Normalizer() { // must not be implemented ! } /** * Initializes the current instance with the given context. *

* Note: Do all initialization in this method, do not use the constructor. * @param context context to initialize */ public void initialize(UimaContext context) throws ResourceInitializationException { super.initialize(context); this.context = context; mLogger = context.getLogger(); if (mLogger.isLoggable(Level.INFO)) { mLogger.log(Level.INFO, "Initializing the OpenNLP Normalizer annotator."); } try { String modelName = AnnotatorUtil.getOptionalStringParameter(context, UimaUtil.DICTIONARY_PARAMETER); if (modelName != null) { InputStream inModel = AnnotatorUtil.getResourceAsStream(context, modelName); mLookupDictionary = new StringDictionary(inModel); } } catch (IOException e) { throw new ResourceInitializationException( ExceptionMessages.MESSAGE_CATALOG, "io_error_model_reading", new Object[] {e.getMessage()}, e); } } /** * Initializes the type system. * @param typeSystem type system to initialize */ public void typeSystemInit(TypeSystem typeSystem) throws AnalysisEngineProcessException { // sentence type // String sentenceTypeName = // AnnotatorUtil.getRequiredStringParameter(mContext, // UimaUtil.SENTENCE_TYPE_PARAMETER); // mSentenceType = AnnotatorUtil.getType(typeSystem, sentenceTypeName); // name type mNameType = AnnotatorUtil.getRequiredTypeParameter(context, typeSystem, NameFinder.NAME_TYPE_PARAMETER); mStructureFeature = AnnotatorUtil.getRequiredFeatureParameter(context, mNameType, "opennlp.uima.normalizer.StructureFeature"); if (!SUPPORTED_TYPES.contains(mStructureFeature.getRange().getName())) { throw new AnalysisEngineProcessException( ExceptionMessages.MESSAGE_CATALOG, "range_type_unsupported", new Object[] {mStructureFeature.getRange().getName()}); } } public void process(CAS tcas) { FSIndex sentenceIndex = tcas.getAnnotationIndex(mNameType); for (AnnotationFS nameAnnotation : sentenceIndex) { // check if the document language is supported String language = tcas.getDocumentLanguage(); if (!NumberUtil.isLanguageSupported(language)) { if (mLogger.isLoggable(Level.INFO)) { mLogger.log(Level.INFO, "Unsupported language: " + language); } continue; } String text = nameAnnotation.getCoveredText(); // if possible replace text with normalization from dictionary if (mLookupDictionary != null) { StringList tokens = new StringList(text); String normalizedText = mLookupDictionary.get(tokens); if (normalizedText != null) { text = normalizedText; } } if (CAS.TYPE_NAME_STRING.equals(mStructureFeature.getRange().getName())) { nameAnnotation.setStringValue(mStructureFeature, text); } else { Number number; try { number = NumberUtil.parse(text, language); } catch (ParseException e) { if (mLogger.isLoggable(Level.INFO)) { mLogger.log(Level.INFO, "Invalid number format: " + text); } continue; } if (CAS.TYPE_NAME_BYTE.equals(mStructureFeature.getRange().getName())) { nameAnnotation.setByteValue(mStructureFeature, number.byteValue()); } else if (CAS.TYPE_NAME_SHORT.equals(mStructureFeature.getRange() .getName())) { nameAnnotation.setShortValue(mStructureFeature, number.shortValue()); } else if (CAS.TYPE_NAME_INTEGER.equals(mStructureFeature.getRange() .getName())) { nameAnnotation.setIntValue(mStructureFeature, number.intValue()); } else if (CAS.TYPE_NAME_LONG.equals(mStructureFeature.getRange() .getName())) { nameAnnotation.setLongValue(mStructureFeature, number.longValue()); } else if (CAS.TYPE_NAME_FLOAT.equals(mStructureFeature.getRange() .getName())) { nameAnnotation.setFloatValue(mStructureFeature, number.floatValue()); } else if (CAS.TYPE_NAME_DOUBLE.equals(mStructureFeature.getRange() .getName())) { nameAnnotation .setDoubleValue(mStructureFeature, number.doubleValue()); } } } } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/normalizer/NumberUtil.java0100644 0000000 0000000 00000005204 14523004075 032317 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.normalizer; import java.text.NumberFormat; import java.text.ParseException; import java.util.Locale; import java.util.regex.Pattern; /** * Provides methods to parse numbers which occur in natural language texts. */ public final class NumberUtil { private final static Pattern WHITESPACE_PATTERN = Pattern.compile("\\s"); /** * Checks if the language is supported. * * @param languageCode A ISO conform language code, e.g. "en", "pt" * @return true if the language is supported */ public static boolean isLanguageSupported(String languageCode) { Locale locale = new Locale(languageCode); Locale[] possibleLocales = NumberFormat.getAvailableLocales(); boolean isLocaleSupported = false; for (Locale possibleLocale : possibleLocales) { // search if locale is contained if (possibleLocale.equals(locale)) { isLocaleSupported = true; break; } } return isLocaleSupported; } /** * Parses a specified {@link String number} for a certain {@code languageCode}. * * @param number The suspected number to parse. * @param languageCode A ISO conform language code, e.g. "en", "pt" * * @return The parsed {@link Number}. * @throws ParseException Thrown if errors occurred during parsing. * @throws IllegalArgumentException Thrown if the {@code languageCode} is not supported. */ public static Number parse(String number, String languageCode) throws ParseException { if (!isLanguageSupported(languageCode)) { throw new IllegalArgumentException("Language " + languageCode + " is not supported!"); } Locale locale = new Locale(languageCode); NumberFormat numberFormat = NumberFormat.getInstance(locale); number = WHITESPACE_PATTERN.matcher(number).replaceAll(""); return numberFormat.parse(number); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/normalizer/StringDictionary.java0100644 0000000 0000000 00000006577 14523004075 033543 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.normalizer; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import opennlp.tools.dictionary.serializer.Attributes; import opennlp.tools.dictionary.serializer.DictionaryEntryPersistor; import opennlp.tools.dictionary.serializer.Entry; import opennlp.tools.util.StringList; public class StringDictionary { private final Map entries = new HashMap<>(); public StringDictionary() { } /** * Initializes {@link StringDictionary} via a specified {@link InputStream}. * * @param in A valid, open {@link InputStream} to initialize with. * @throws IOException Thrown if IO errors occurred. */ public StringDictionary(InputStream in) throws IOException { DictionaryEntryPersistor.create(in, entry -> { String valueString = entry.attributes().getValue("value"); put(entry.tokens(), valueString); }); } /** * Retrieves a value from a dictionary via its {@code key}. * * @param key The {@link StringList key} to get value with. * * @return Retrieves a corresponding String value or {@code null} if not found. */ public String get(StringList key) { return entries.get(key); } /** * Adds a new entry to the dictionary. * * @param key The {@link StringList key} under which to put the {@code value}. * @param value The value to put. */ public void put(StringList key, String value) { entries.put(key, value); } Iterator iterator() { return entries.keySet().iterator(); } /** * Writes the dictionary to the given {@link OutputStream}. * * @param out A valid, open {@link OutputStream} to serialize to. * * @throws IOException Thrown if IO errors occurred during serialization. */ public void serialize(OutputStream out) throws IOException { Iterator entryIterator = new Iterator<>() { private final Iterator mDictionaryIterator = StringDictionary.this.iterator(); @Override public boolean hasNext() { return mDictionaryIterator.hasNext(); } @Override public Entry next() { StringList tokens = mDictionaryIterator.next(); Attributes attributes = new Attributes(); attributes.setValue("value", get(tokens)); return new Entry(tokens, attributes); } @Override public void remove() { throw new UnsupportedOperationException(); } }; DictionaryEntryPersistor.serialize(out, entryIterator, true); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/parser/Parser.java0100644 0000000 0000000 00000025053 14523004075 030603 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.parser; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.CasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.ArrayFS; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIndex; import org.apache.uima.cas.Feature; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceAccessException; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; import opennlp.tools.parser.Parse; import opennlp.tools.parser.ParserFactory; import opennlp.tools.parser.ParserModel; import opennlp.tools.util.Span; import opennlp.uima.util.AnnotatorUtil; import opennlp.uima.util.ContainingConstraint; import opennlp.uima.util.UimaUtil; /** * Abstract base class for OpenNLP Parser annotators. *

* Mandatory parameters * * * * * * * * *
Type Name Description
String opennlp.uima.ModelName The name of the model file
String opennlp.uima.SentenceType The full name of the sentence type
String opennlp.uima.TokenType The full name of the token type
String opennlp.uima.ParseType The full name of the parse type
String opennlp.uima.TypeFeature The name of the type feature
*

* Optional parameters * * * * *
Type Name Description
Integer opennlp.uima.BeamSize
*/ public class Parser extends CasAnnotator_ImplBase { public static final String PARSE_TYPE_PARAMETER = "opennlp.uima.ParseType"; public static final String TYPE_FEATURE_PARAMETER = "opennlp.uima.TypeFeature"; public static final String CHILDREN_FEATURE_PARAMETER = "opennlp.uima.ChildrenFeature"; public static final String PROBABILITY_FEATURE_PARAMETER = "opennlp.uima.ProbabilityFeature"; protected UimaContext context; protected Logger mLogger; protected opennlp.tools.parser.Parser mParser; private Type mSentenceType; private Type mTokenType; private Type mParseType; private Feature mTypeFeature; private Feature childrenFeature; private Feature probabilityFeature; /** * Initializes the current instance with the given context. */ public void initialize(UimaContext context) throws ResourceInitializationException { super.initialize(context); this.context = context; mLogger = context.getLogger(); if (mLogger.isLoggable(Level.INFO)) { mLogger.log(Level.INFO, "Initializing the OpenNLP Parser."); } ParserModel model; try { ParserModelResource modelResource = (ParserModelResource) context .getResourceObject(UimaUtil.MODEL_PARAMETER); model = modelResource.getModel(); } catch (ResourceAccessException e) { throw new ResourceInitializationException(e); } mParser = ParserFactory.create(model); } /** * Initializes the type system. */ public void typeSystemInit(TypeSystem typeSystem) throws AnalysisEngineProcessException { mSentenceType = AnnotatorUtil.getRequiredTypeParameter(context, typeSystem, UimaUtil.SENTENCE_TYPE_PARAMETER); mTokenType = AnnotatorUtil.getRequiredTypeParameter(context, typeSystem, UimaUtil.TOKEN_TYPE_PARAMETER); mParseType = AnnotatorUtil.getRequiredTypeParameter(context, typeSystem, PARSE_TYPE_PARAMETER); mTypeFeature = AnnotatorUtil.getRequiredFeatureParameter(context, mParseType, TYPE_FEATURE_PARAMETER, CAS.TYPE_NAME_STRING); childrenFeature = AnnotatorUtil.getRequiredFeatureParameter(context, mParseType, CHILDREN_FEATURE_PARAMETER, CAS.TYPE_NAME_FS_ARRAY); probabilityFeature = AnnotatorUtil.getOptionalFeatureParameter(context, mParseType, PROBABILITY_FEATURE_PARAMETER, CAS.TYPE_NAME_DOUBLE); } /** * Performs parsing on the given {@link CAS} object. */ public void process(CAS cas) { FSIndex sentences = cas.getAnnotationIndex(mSentenceType); for (AnnotationFS sentence : sentences) { process(cas, sentence); } } protected void process(CAS cas, AnnotationFS sentenceAnnotation) { FSIndex allTokens = cas.getAnnotationIndex(mTokenType); ContainingConstraint containingConstraint = new ContainingConstraint(sentenceAnnotation); String sentence = sentenceAnnotation.getCoveredText(); Iterator containingTokens = cas.createFilteredIterator( allTokens.iterator(), containingConstraint); List tokenSpans = new LinkedList<>(); while (containingTokens.hasNext()) { AnnotationFS token = containingTokens.next(); tokenSpans.add(new Span(token.getBegin() - sentenceAnnotation.getBegin(), token.getEnd() - sentenceAnnotation.getBegin())); } ParseConverter converter = new ParseConverter(sentence, tokenSpans.toArray(new Span[0])); Parse unparsedTree = converter.getParseForTagger(); if (unparsedTree.getChildCount() > 0) { Parse parse = mParser.parse(unparsedTree); // TODO: We need a strategy to handle the case that a full // parse could not be found. What to do in this case? parse = converter.transformParseFromTagger(parse); if (mLogger.isLoggable(Level.INFO)) { StringBuffer parseString = new StringBuffer(); parse.show(parseString); mLogger.log(Level.INFO, parseString.toString()); } createAnnotation(cas, sentenceAnnotation.getBegin(), parse); } } protected AnnotationFS createAnnotation(CAS cas, int offset, Parse parse) { Parse[] parseChildren = parse.getChildren(); AnnotationFS[] parseChildAnnotations = new AnnotationFS[parseChildren.length]; // do this for all children for (int i = 0; i < parseChildren.length; i++) { parseChildAnnotations[i] = createAnnotation(cas, offset, parseChildren[i]); } AnnotationFS parseAnnotation = cas.createAnnotation(mParseType, offset + parse.getSpan().getStart(), offset + parse.getSpan().getEnd()); parseAnnotation.setStringValue(mTypeFeature, parse.getType()); if (probabilityFeature != null) { parseAnnotation.setDoubleValue(probabilityFeature, parse.getProb()); } ArrayFS childrenArray = cas.createArrayFS(parseChildAnnotations.length); childrenArray.copyFromArray(parseChildAnnotations, 0, 0, parseChildAnnotations.length); parseAnnotation.setFeatureValue(childrenFeature, childrenArray); cas.getIndexRepository().addFS(parseAnnotation); return parseAnnotation; } /** * Releases allocated resources. */ public void destroy() { mParser = null; } private static class ParseConverter { private final String mSentence; private final Map mIndexMap = new HashMap<>(); private final Parse mParseForTagger; /** * Initializes a new instance. * * @param sentence * @param tokens */ public ParseConverter(String sentence, Span[] tokens) { mSentence = sentence; StringBuilder sentenceStringBuilder = new StringBuilder(); String[] tokenList = new String[tokens.length]; for (int i = 0; i < tokens.length; i++) { String tokenString = tokens[i].getCoveredText(sentence).toString(); String escapedToken = escape(tokenString); tokenList[i] = escapedToken; int escapedStart = sentenceStringBuilder.length(); int start = tokens[i].getStart(); mIndexMap.put(escapedStart, start); int escapedEnd = escapedStart + escapedToken.length(); int end = tokens[i].getEnd(); mIndexMap.put(escapedEnd, end); sentenceStringBuilder.append(tokenList[i]); sentenceStringBuilder.append(' '); } // remove last space if (sentenceStringBuilder.length() > 0) { sentenceStringBuilder.setLength(sentenceStringBuilder.length() - 1); } String tokenizedSentence = sentenceStringBuilder.toString(); mParseForTagger = new Parse(tokenizedSentence, new Span(0, tokenizedSentence.length()), "INC", 1, null); int start = 0; for (String token : tokenList) { mParseForTagger.insert(new Parse(tokenizedSentence, new Span(start, start + token.length()), opennlp.tools.parser.chunking.Parser.TOK_NODE, 0f, 0)); start += token.length() + 1; } } private static String escape(String text) { return text; } /** * Creates the parse for the tagger. * * @return the parse which can be passed to the tagger */ Parse getParseForTagger() { return mParseForTagger; } /** * Converts the parse from the tagger back. * * @param parseFromTagger * @return the final parse */ Parse transformParseFromTagger(Parse parseFromTagger) { int start = parseFromTagger.getSpan().getStart(); int end = parseFromTagger.getSpan().getEnd(); Parse transformedParse = new Parse(mSentence, new Span( mIndexMap.get(start), mIndexMap.get(end)), parseFromTagger.getType(), parseFromTagger.getProb(), parseFromTagger.getHeadIndex()); Parse[] parseFromTaggerChildren = parseFromTagger.getChildren(); for (Parse child : parseFromTaggerChildren) { transformedParse.insert(transformParseFromTagger(child)); } return transformedParse; } } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/parser/ParserModelResource.java0100644 0000000 0000000 00000001655 14523004075 033276 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.parser; import opennlp.tools.parser.ParserModel; public interface ParserModelResource { ParserModel getModel(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-uima_src_main_java_opennlp_uima_parser_ParserModelR0100644 0000000 0000000 00000000156 14523004075 032452 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/parser/ParserModelResourceImpl.java apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/parser/ParserModelResourceImpl.java0100644 0000000 0000000 00000002373 14523004075 034116 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.parser; import java.io.IOException; import java.io.InputStream; import opennlp.tools.parser.ParserModel; import opennlp.uima.util.AbstractModelResource; public class ParserModelResourceImpl extends AbstractModelResource implements ParserModelResource { public ParserModel getModel() { return model; } @Override protected ParserModel loadModel(InputStream in) throws IOException { return new ParserModel(in); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/postag/POSModelResource.java0100644 0000000 0000000 00000001644 14523004075 032502 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.postag; import opennlp.tools.postag.POSModel; public interface POSModelResource { POSModel getModel(); } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/postag/POSModelResourceImpl.java0100644 0000000 0000000 00000002346 14523004075 033324 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.postag; import java.io.IOException; import java.io.InputStream; import opennlp.tools.postag.POSModel; import opennlp.uima.util.AbstractModelResource; public class POSModelResourceImpl extends AbstractModelResource implements POSModelResource { public POSModel getModel() { return model; } @Override protected POSModel loadModel(InputStream in) throws IOException { return new POSModel(in); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/postag/POSTagger.java0100644 0000000 0000000 00000017055 14523004075 031146 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.postag; import java.util.Arrays; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.CasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.Feature; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceAccessException; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; import opennlp.tools.postag.POSModel; import opennlp.tools.postag.POSTaggerME; import opennlp.uima.util.AnnotationComboIterator; import opennlp.uima.util.AnnotationIteratorPair; import opennlp.uima.util.AnnotatorUtil; import opennlp.uima.util.UimaUtil; /** * OpenNLP Part Of Speech annotator. *

* Mandatory parameters * * * * * * * *
Type Name Description
String opennlp.uima.ModelName The name of the model file
String opennlp.uima.SentenceType The full name of the sentence type
String opennlp.uima.TokenType The full name of the token type
String opennlp.uima.POSFeature The name of the token pos feature, * the feature must be of type String
*

* Optional parameters * * * * * * * *
Type Name Description
String opennlp.uima.ProbabilityFeatureThe name of the double probability feature (not set by default)
Integer opennlp.uima.BeamSize
String opennlp.uima.DictionaryName The name of the dictionary file
*/ public final class POSTagger extends CasAnnotator_ImplBase { private POSTaggerME posTagger; private Type sentenceType; private Type tokenType; private Feature posFeature; private Feature probabilityFeature; private UimaContext context; private Logger logger; /** * Initializes a new instance. *

* Note: Use {@link #initialize(UimaContext) } to initialize this instance. Not use the * constructor. */ public POSTagger() { // must not be implemented ! } /** * Initializes the current instance with the given context. *

* Note: Do all initialization in this method, do not use the constructor. */ @Override public void initialize(UimaContext context) throws ResourceInitializationException { super.initialize(context); this.context = context; this.logger = context.getLogger(); if (this.logger.isLoggable(Level.INFO)) { this.logger.log(Level.INFO, "Initializing the OpenNLP " + "Part of Speech annotator."); } POSModel model; try { POSModelResource modelResource = (POSModelResource) context .getResourceObject(UimaUtil.MODEL_PARAMETER); model = modelResource.getModel(); } catch (ResourceAccessException e) { throw new ResourceInitializationException(e); } Integer beamSize = AnnotatorUtil.getOptionalIntegerParameter(context, UimaUtil.BEAM_SIZE_PARAMETER); if (beamSize == null) { beamSize = POSTaggerME.DEFAULT_BEAM_SIZE; } this.posTagger = new POSTaggerME(model); } /** * Initializes the type system. */ @Override public void typeSystemInit(TypeSystem typeSystem) throws AnalysisEngineProcessException { // sentence type this.sentenceType = AnnotatorUtil.getRequiredTypeParameter(this.context, typeSystem, UimaUtil.SENTENCE_TYPE_PARAMETER); // token type this.tokenType = AnnotatorUtil.getRequiredTypeParameter(this.context, typeSystem, UimaUtil.TOKEN_TYPE_PARAMETER); // pos feature this.posFeature = AnnotatorUtil.getRequiredFeatureParameter(this.context, this.tokenType, UimaUtil.POS_FEATURE_PARAMETER, CAS.TYPE_NAME_STRING); this.probabilityFeature = AnnotatorUtil.getOptionalFeatureParameter(this.context, this.tokenType, UimaUtil.PROBABILITY_FEATURE_PARAMETER, CAS.TYPE_NAME_DOUBLE); } /** * Performs pos-tagging on the given tcas object. */ @Override public void process(CAS tcas) { final AnnotationComboIterator comboIterator = new AnnotationComboIterator(tcas, this.sentenceType, this.tokenType); for (AnnotationIteratorPair annotationIteratorPair : comboIterator) { final List sentenceTokenAnnotationList = new LinkedList<>(); final List sentenceTokenList = new LinkedList<>(); for (AnnotationFS tokenAnnotation : annotationIteratorPair.getSubIterator()) { sentenceTokenAnnotationList.add(tokenAnnotation); sentenceTokenList.add(tokenAnnotation.getCoveredText()); } final List posTags = Arrays.asList(this.posTagger.tag( sentenceTokenList.toArray(new String[0]))); double[] posProbabilities = null; if (this.probabilityFeature != null) { posProbabilities = this.posTagger.probs(); } final Iterator posTagIterator = posTags.iterator(); final Iterator sentenceTokenIterator = sentenceTokenAnnotationList.iterator(); int index = 0; while (posTagIterator.hasNext() && sentenceTokenIterator.hasNext()) { final String posTag = posTagIterator.next(); final AnnotationFS tokenAnnotation = sentenceTokenIterator.next(); tokenAnnotation.setStringValue(this.posFeature, posTag); if (posProbabilities != null) { tokenAnnotation.setDoubleValue(this.probabilityFeature, posProbabilities[index]); } index++; } // log tokens with pos if (this.logger.isLoggable(Level.FINER)) { final StringBuilder sentenceWithPos = new StringBuilder(); sentenceWithPos.append("\""); for (final AnnotationFS token : sentenceTokenAnnotationList) { sentenceWithPos.append(token.getCoveredText()); sentenceWithPos.append('\\'); sentenceWithPos.append(token.getStringValue(this.posFeature)); sentenceWithPos.append(' '); } // delete last whitespace if (sentenceWithPos.length() > 1) // not 0 because it contains already the " char { sentenceWithPos.setLength(sentenceWithPos.length() - 1); } sentenceWithPos.append("\""); this.logger.log(Level.FINER, sentenceWithPos.toString()); } } } /** * Releases allocated resources. */ @Override public void destroy() { this.posTagger = null; } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/postag/package.html0100644 0000000 0000000 00000001727 14523004075 030770 0ustar00rootroot0000000 0000000 Package related to part-of-speech tagging. ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-uima_src_main_java_opennlp_uima_sentdetect_Abstract0100644 0000000 0000000 00000000163 14523004075 032522 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/sentdetect/AbstractSentenceDetector.java apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/sentdetect/AbstractSentenceDetector0100644 0000000 0000000 00000007710 14523004075 034217 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.sentdetect; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.CasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIndex; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; import opennlp.tools.util.Span; import opennlp.uima.util.AnnotatorUtil; import opennlp.uima.util.UimaUtil; public abstract class AbstractSentenceDetector extends CasAnnotator_ImplBase { protected UimaContext context; protected Logger logger; protected Type containerType; /** * The type of the sentences to be created. */ protected Type sentenceType; private Boolean isRemoveExistingAnnotations; @Override public void initialize(UimaContext context) throws ResourceInitializationException { super.initialize(context); this.context = context; logger = context.getLogger(); if (logger.isLoggable(Level.INFO)) { logger.log(Level.INFO, "Initializing the OpenNLP Sentence annotator."); } isRemoveExistingAnnotations = AnnotatorUtil.getOptionalBooleanParameter( context, UimaUtil.IS_REMOVE_EXISTINGS_ANNOTAIONS); if (isRemoveExistingAnnotations == null) { isRemoveExistingAnnotations = false; } } @Override public void typeSystemInit(TypeSystem typeSystem) throws AnalysisEngineProcessException { super.typeSystemInit(typeSystem); containerType = AnnotatorUtil.getOptionalTypeParameter(context, typeSystem, "opennlp.uima.ContainerType"); if (containerType == null) { containerType = typeSystem.getType(CAS.TYPE_NAME_DOCUMENT_ANNOTATION); } sentenceType = AnnotatorUtil.getRequiredTypeParameter(context, typeSystem, UimaUtil.SENTENCE_TYPE_PARAMETER); } protected abstract Span[] detectSentences(String text); protected void postProcessAnnotations(AnnotationFS[] sentences) { } @Override public void process(CAS cas) throws AnalysisEngineProcessException { FSIndex containerAnnotations = cas .getAnnotationIndex(containerType); for (AnnotationFS containerAnnotation : containerAnnotations) { String text = containerAnnotation.getCoveredText(); if (isRemoveExistingAnnotations) { UimaUtil.removeAnnotations(cas, containerAnnotation, sentenceType); } Span[] sentPositions = detectSentences(text); AnnotationFS[] sentences = new AnnotationFS[sentPositions.length]; for (int i = 0; i < sentPositions.length; i++) { sentences[i] = cas.createAnnotation(sentenceType, sentPositions[i].getStart() + containerAnnotation.getBegin(), sentPositions[i].getEnd() + containerAnnotation.getBegin()); cas.getIndexRepository().addFS(sentences[i]); if (logger.isLoggable(Level.FINER)) { logger.log(Level.FINER, "\"" + sentences[i].getCoveredText() + "\""); } } postProcessAnnotations(sentences); } } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/sentdetect/SentenceDetector.java0100644 0000000 0000000 00000010302 14523004075 033442 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.sentdetect; import org.apache.uima.UimaContext; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.Feature; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceAccessException; import org.apache.uima.resource.ResourceInitializationException; import opennlp.tools.sentdetect.SentenceDetectorME; import opennlp.tools.sentdetect.SentenceModel; import opennlp.tools.util.Span; import opennlp.uima.util.AnnotatorUtil; import opennlp.uima.util.UimaUtil; /** * OpenNLP Sentence annotator. *

* Mandatory parameters * * * * * *
Type Name Description
String opennlp.uima.ModelName The name of the model file
String opennlp.uima.SentenceType The full name of the sentence type
*

* Optional parameters * * * * * *
Type Name Description
String opennlp.uima.ContainerType The name of the container type
String opennlp.uima.ProbabilityFeature The name of the double * probability feature (not set by default)
*/ public final class SentenceDetector extends AbstractSentenceDetector { /** * OpenNLP sentence detector. */ private SentenceDetectorME sentenceDetector; private Feature probabilityFeature; /** * Initializes a new instance. *

* Note: Use {@link #initialize(UimaContext) } to initialize * this instance. Not use the constructor. */ public SentenceDetector() { // must not be implemented ! } /** * Initializes the current instance with the given context. *

* Note: Do all initialization in this method, do not use the constructor. */ public void initialize(UimaContext context) throws ResourceInitializationException { super.initialize(context); SentenceModel model; try { SentenceModelResource modelResource = (SentenceModelResource) context .getResourceObject(UimaUtil.MODEL_PARAMETER); model = modelResource.getModel(); } catch (ResourceAccessException e) { throw new ResourceInitializationException(e); } sentenceDetector = new SentenceDetectorME(model); } /** * Initializes the type system. */ public void typeSystemInit(TypeSystem typeSystem) throws AnalysisEngineProcessException { super.typeSystemInit(typeSystem); probabilityFeature = AnnotatorUtil.getOptionalFeatureParameter(context, sentenceType, UimaUtil.PROBABILITY_FEATURE_PARAMETER, CAS.TYPE_NAME_DOUBLE); } @Override protected Span[] detectSentences(String text) { return sentenceDetector.sentPosDetect(text); } @Override protected void postProcessAnnotations(AnnotationFS[] sentences) { if (probabilityFeature != null) { double[] sentenceProbabilities = sentenceDetector.getSentenceProbabilities(); for (int i = 0; i < sentences.length; i++) { sentences[i].setDoubleValue(probabilityFeature, sentenceProbabilities[i]); } } } /** * Releases allocated resources. */ public void destroy() { // dereference model to allow garbage collection sentenceDetector = null; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-uima_src_main_java_opennlp_uima_sentdetect_Sentence0100644 0000000 0000000 00000000160 14523004075 032520 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/sentdetect/SentenceModelResource.java apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/sentdetect/SentenceModelResource.ja0100644 0000000 0000000 00000001674 14523004075 034126 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.sentdetect; import opennlp.tools.sentdetect.SentenceModel; public interface SentenceModelResource { SentenceModel getModel(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-uima_src_main_java_opennlp_uima_sentdetect_Sentence0100644 0000000 0000000 00000000164 14523004075 032524 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/sentdetect/SentenceModelResourceImpl.java apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/sentdetect/SentenceModelResourceImp0100644 0000000 0000000 00000002421 14523004075 034172 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.sentdetect; import java.io.IOException; import java.io.InputStream; import opennlp.tools.sentdetect.SentenceModel; import opennlp.uima.util.AbstractModelResource; public class SentenceModelResourceImpl extends AbstractModelResource implements SentenceModelResource { public SentenceModel getModel() { return model; } @Override protected SentenceModel loadModel(InputStream in) throws IOException { return new SentenceModel(in); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/sentdetect/package.html0100644 0000000 0000000 00000001740 14523004075 031630 0ustar00rootroot0000000 0000000 Package related to identifying sentence boundaries. apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/tokenize/AbstractTokenizer.java0100644 0000000 0000000 00000010577 14523004075 033346 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.tokenize; import org.apache.uima.UimaContext; import org.apache.uima.analysis_component.CasAnnotator_ImplBase; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIndex; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; import opennlp.tools.util.Span; import opennlp.uima.util.AnnotatorUtil; import opennlp.uima.util.UimaUtil; public abstract class AbstractTokenizer extends CasAnnotator_ImplBase { protected final String name; protected UimaContext context; protected Logger logger; /** * Type of the sentence containing the tokens. */ protected Type sentenceType; /** * Type of the tokens to be created. */ protected Type tokenType; private Boolean isRemoveExistingAnnotations; protected AbstractTokenizer(String name) { this.name = name; } @Override public void initialize(UimaContext context) throws ResourceInitializationException { super.initialize(context); this.context = context; logger = context.getLogger(); if (logger.isLoggable(Level.INFO)) { logger.log(Level.INFO, "Initializing the " + name + " annotator."); } isRemoveExistingAnnotations = AnnotatorUtil.getOptionalBooleanParameter( context, UimaUtil.IS_REMOVE_EXISTINGS_ANNOTAIONS); if (isRemoveExistingAnnotations == null) { isRemoveExistingAnnotations = false; } } @Override public void typeSystemInit(TypeSystem typeSystem) throws AnalysisEngineProcessException { super.typeSystemInit(typeSystem); sentenceType = AnnotatorUtil.getRequiredTypeParameter(context, typeSystem, UimaUtil.SENTENCE_TYPE_PARAMETER); tokenType = AnnotatorUtil.getRequiredTypeParameter(context, typeSystem, UimaUtil.TOKEN_TYPE_PARAMETER); } protected void postProcessAnnotations(Span[] tokens, AnnotationFS[] tokenAnnotations) { } protected abstract Span[] tokenize(CAS cas, AnnotationFS sentence); @Override public void process(CAS cas) throws AnalysisEngineProcessException { FSIndex sentences = cas.getAnnotationIndex(sentenceType); for (AnnotationFS sentence : sentences) { if (isRemoveExistingAnnotations) { UimaUtil.removeAnnotations(cas, sentence, tokenType); } Span[] tokenSpans = tokenize(cas, sentence); int sentenceOffset = sentence.getBegin(); StringBuilder tokeninzedSentenceLog = new StringBuilder(); AnnotationFS[] tokenAnnotations = new AnnotationFS[tokenSpans.length]; for (int i = 0; i < tokenSpans.length; i++) { tokenAnnotations[i] = cas .createAnnotation(tokenType, sentenceOffset + tokenSpans[i].getStart(), sentenceOffset + tokenSpans[i].getEnd()); cas.getIndexRepository().addFS(tokenAnnotations[i]); if (logger.isLoggable(Level.FINER)) { tokeninzedSentenceLog.append(tokenAnnotations[i].getCoveredText()); tokeninzedSentenceLog.append(' '); } } if (logger.isLoggable(Level.FINER)) { // remove last space tokeninzedSentenceLog.delete(tokeninzedSentenceLog.length() - 2, tokeninzedSentenceLog.length() - 1); logger.log(Level.FINER, "\"" + tokeninzedSentenceLog.toString() + "\""); } postProcessAnnotations(tokenSpans, tokenAnnotations); } } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/tokenize/SimpleTokenizer.java0100644 0000000 0000000 00000003761 14523004075 033031 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.tokenize; import org.apache.uima.UimaContext; import org.apache.uima.cas.CAS; import org.apache.uima.cas.text.AnnotationFS; import opennlp.tools.util.Span; /** * OpenNLP Simple Tokenizer annotator. *

* Mandatory parameters * * * * * *
Type Name Description
String opennlp.uima.SentenceType The full name of the sentence type
String opennlp.uima.TokenType The full name of the token type
*/ public final class SimpleTokenizer extends AbstractTokenizer { /** * The OpenNLP simple tokenizer. */ private final opennlp.tools.tokenize.SimpleTokenizer tokenizer = opennlp.tools.tokenize.SimpleTokenizer.INSTANCE; /** * Initializes the current instance. *

* Note: Use {@link #initialize(UimaContext) } to initialize * this instance. Not use the constructor. */ public SimpleTokenizer() { super("OpenNLP Simple Tokenizer"); // must not be implemented ! } @Override protected Span[] tokenize(CAS cas, AnnotationFS sentence) { return tokenizer.tokenizePos(sentence.getCoveredText()); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/tokenize/Tokenizer.java0100644 0000000 0000000 00000010450 14523004075 031650 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.tokenize; import org.apache.uima.UimaContext; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.Feature; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceAccessException; import org.apache.uima.resource.ResourceInitializationException; import opennlp.tools.tokenize.TokenizerME; import opennlp.tools.tokenize.TokenizerModel; import opennlp.tools.util.Span; import opennlp.uima.util.AnnotatorUtil; import opennlp.uima.util.UimaUtil; /** * OpenNLP Tokenizer annotator. *

* Mandatory parameters * * * * * * *
Type Name Description
String opennlp.uima.ModelName The name of the model file
String opennlp.uima.SentenceType The full name of the sentence type
String opennlp.uima.TokenType The full name of the token type
*

* Optional parameters * * * * *
Type Name Description
String opennlp.uima.ProbabilityFeature The name of the double * probability feature (not set by default)
* * @see TokenizerME */ public final class Tokenizer extends AbstractTokenizer { /** * The OpenNLP tokenizer. */ private TokenizerME tokenizer; private Feature probabilityFeature; /** * Initializes a new instance. *

* Note: Use {@link #initialize(UimaContext) } to initialize * this instance. Not use the constructor. */ public Tokenizer() { super("OpenNLP Tokenizer"); // must not be implemented ! } /** * Initializes the current instance with the given context. *

* Note: Do all initialization in this method, do not use the constructor. */ public void initialize(UimaContext context) throws ResourceInitializationException { super.initialize(context); TokenizerModel model; try { TokenizerModelResource modelResource = (TokenizerModelResource) context .getResourceObject(UimaUtil.MODEL_PARAMETER); model = modelResource.getModel(); } catch (ResourceAccessException e) { throw new ResourceInitializationException(e); } tokenizer = new TokenizerME(model); } /** * Initializes the type system. */ public void typeSystemInit(TypeSystem typeSystem) throws AnalysisEngineProcessException { super.typeSystemInit(typeSystem); probabilityFeature = AnnotatorUtil .getOptionalFeatureParameter(context, tokenType, UimaUtil.PROBABILITY_FEATURE_PARAMETER, CAS.TYPE_NAME_DOUBLE); } @Override protected Span[] tokenize(CAS cas, AnnotationFS sentence) { return tokenizer.tokenizePos(sentence.getCoveredText()); } @Override protected void postProcessAnnotations(Span[] tokens, AnnotationFS[] tokenAnnotations) { // if interest if (probabilityFeature != null) { double[] tokenProbabilities = tokenizer.getTokenProbabilities(); for (int i = 0; i < tokenAnnotations.length; i++) { tokenAnnotations[i].setDoubleValue(probabilityFeature, tokenProbabilities[i]); } } } /** * Releases allocated resources. */ public void destroy() { // dereference model to allow garbage collection tokenizer = null; } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-uima_src_main_java_opennlp_uima_tokenize_TokenizerM0100644 0000000 0000000 00000000157 14523004075 032537 xustar000000000 0000000 111 path=apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/tokenize/TokenizerModelResource.java apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/tokenize/TokenizerModelResource.jav0100644 0000000 0000000 00000002330 14523004075 034176 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.tokenize; import org.apache.uima.analysis_engine.AnalysisEngine; import opennlp.tools.tokenize.TokenizerModel; /** * A {@link TokenizerModel} which can be shared between {@link AnalysisEngine}s * and loaded via the UIMA resource model. */ public interface TokenizerModelResource { /** * Retrieves the shared model instance. * * @return the shared model instance */ TokenizerModel getModel(); } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-uima_src_main_java_opennlp_uima_tokenize_TokenizerM0100644 0000000 0000000 00000000163 14523004075 032534 xustar000000000 0000000 115 path=apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/tokenize/TokenizerModelResourceImpl.java apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/tokenize/TokenizerModelResourceImpl0100644 0000000 0000000 00000002425 14523004075 034246 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.tokenize; import java.io.IOException; import java.io.InputStream; import opennlp.tools.tokenize.TokenizerModel; import opennlp.uima.util.AbstractModelResource; public class TokenizerModelResourceImpl extends AbstractModelResource implements TokenizerModelResource { public TokenizerModel getModel() { return model; } @Override protected TokenizerModel loadModel(InputStream in) throws IOException { return new TokenizerModel(in); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/tokenize/WhitespaceTokenizer.java0100644 0000000 0000000 00000003612 14523004075 033667 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.tokenize; import org.apache.uima.UimaContext; import org.apache.uima.cas.CAS; import org.apache.uima.cas.text.AnnotationFS; import opennlp.tools.util.Span; /** * OpenNLP Whitespace Tokenizer annotator. *

* Mandatory parameters * * * * * *
Type Name Description
String opennlp.uima.SentenceType The full name of the sentence type
String opennlp.uima.TokenType The full name of the token type
*/ public final class WhitespaceTokenizer extends AbstractTokenizer { /** * Initializes the current instance. *

* Note: Use {@link #initialize(UimaContext) } to initialize * this instance. Not use the constructor. */ public WhitespaceTokenizer() { super("OpenNLP Whitespace Tokenizer"); // must not be implemented ! } @Override protected Span[] tokenize(CAS cas, AnnotationFS sentence) { return opennlp.tools.tokenize.WhitespaceTokenizer.INSTANCE. tokenizePos(sentence.getCoveredText()); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/tokenize/package.html0100644 0000000 0000000 00000001740 14523004075 031316 0ustar00rootroot0000000 0000000 Package related to finding tokens or word segments. apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/util/AbstractModelResource.java0100644 0000000 0000000 00000003431 14523004075 033260 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.util; import java.io.IOException; import java.io.InputStream; import org.apache.uima.resource.DataResource; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.resource.SharedResourceObject; /** * Base class provides access to a shared {@link T resource}, eg. a model or dictionary. * * @param The generic type to handle as a shared resource. * * @see SharedResourceObject */ public abstract class AbstractModelResource implements SharedResourceObject { protected T model; protected abstract T loadModel(InputStream in) throws IOException; @Override public void load(DataResource resource) throws ResourceInitializationException { try { model = loadModel(resource.getInputStream()); } catch (IOException e) { throw new ResourceInitializationException( ExceptionMessages.MESSAGE_CATALOG, ExceptionMessages.IO_ERROR_MODEL_READING, new Object[] { e.getMessage()}, e); } } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/util/AnnotationComboIterator.java0100644 0000000 0000000 00000015544 14523004075 033640 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.util; import java.util.Iterator; import java.util.NoSuchElementException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.Type; import org.apache.uima.cas.text.AnnotationFS; /** * UIMA Annotation iterator combination of super- and subiterator. * *

* This class supports a common idiom in UIMA annotation iteration, where you need to iterate over * two kinds of annotations in lock-step. For example, you often want to iterate over all sentences, * then do something on each sentence and all tokens in that sentence. Here's how to do this with * this class. * *

 * CAS cas = ...
 * Type sentenceType = ..., tokenType = ...
 * // Init with CAS, upper and lower type.
 * AnnotationComboIterator it = new AnnotationComboIterator(cas, sentenceType, tokenType);
 * // Iterate over sentences
 * for (AnnotationIteratorPair aiPair : it) {
 *   // Obtain sentence annotation
 *   AnnotationFS sentence = aiPair.getAnnotation();
 *   // Do something with sentence...
 *
 *   // Iterate over tokens
 *   for (AnnotationFS token : aiPair.getSubIterator()) {
 *     // Do something with tokens...
 *   }
 * }
 * 
* * The combo iterator returns in its next() method a pair of an annotation of the upper * type (e.g., sentence), and an iterator over annotations of the lower type (e.g., tokens). Note * that both the upper and lower iterator also implement the Iterable interface and can be use * directly in for-loops. * *

* Note that only this usage is safe. To keep the implementation efficient, the combo iterator keeps * two iterators internally that it increments in lock-step. Do not attempt, for example, to collect * more than one of the subiterators (token iterator in our example). Do not use this class if your * intended usage does not fall into this pattern. */ public class AnnotationComboIterator implements Iterable, Iterator { // Internal implementation of subiterator private class AnnotationIterator implements Iterable, Iterator { private AnnotationIterator() { super(); } @Override public AnnotationIterator iterator() { return this; } @Override public boolean hasNext() { if (AnnotationComboIterator.this.nextLowerChecked) { return AnnotationComboIterator.this.nextLowerAvailable; } AnnotationComboIterator.this.nextLowerChecked = true; AnnotationComboIterator.this.nextLowerAvailable = false; if (AnnotationComboIterator.this.lowerIt.isValid()) { AnnotationFS lowerFS = AnnotationComboIterator.this.lowerIt.get(); int lowerBegin = lowerFS.getBegin(); while (lowerBegin < AnnotationComboIterator.this.upperBegin) { AnnotationComboIterator.this.lowerIt.moveToNext(); if (AnnotationComboIterator.this.lowerIt.isValid()) { lowerFS = AnnotationComboIterator.this.lowerIt.get(); lowerBegin = lowerFS.getBegin(); } else { return false; } } if (AnnotationComboIterator.this.upperEnd >= lowerFS.getEnd()) { AnnotationComboIterator.this.nextLowerAvailable = true; } } return AnnotationComboIterator.this.nextLowerAvailable; } @Override public AnnotationFS next() { if (AnnotationComboIterator.this.nextLowerChecked) { if (!AnnotationComboIterator.this.nextLowerAvailable) { throw new NoSuchElementException(); } } else if (!hasNext()) { throw new NoSuchElementException(); } AnnotationComboIterator.this.nextLowerChecked = false; final AnnotationFS rv = AnnotationComboIterator.this.lowerIt.get(); AnnotationComboIterator.this.lowerIt.moveToNext(); return rv; } @Override public void remove() { throw new UnsupportedOperationException(); } } // The upper iterator (e.g., sentence iterator) private final FSIterator upperIt; // The lower iterator (e.g., token iterator) private final FSIterator lowerIt; // Start position of current upper (e.g., sentence) annotation. Together with the end position, // this determines the boundaries for the lower iterator. private int upperBegin; // End position of current upper annotation. private int upperEnd; // Have we already checked that a next lower annotation is available? Premature optimization... private boolean nextLowerChecked = false; // State variable that holds the status of the lower iterator only in case that nextLowerChecked // is true. private boolean nextLowerAvailable = false; /** * Create a new combo iterator. * * @param cas * The {@link CAS} we're operating on. * @param upper * The {@link Type} of the upper iterator, e.g., sentence. * @param lower * The {@link Type} of the lower iterator, e.g., token. */ public AnnotationComboIterator(CAS cas, Type upper, Type lower) { this.upperIt = cas.getAnnotationIndex(upper).iterator(); this.lowerIt = cas.getAnnotationIndex(lower).iterator(); this.upperIt.moveToFirst(); this.lowerIt.moveToFirst(); if (this.upperIt.isValid()) { final AnnotationFS upperFS = this.upperIt.get(); this.upperBegin = upperFS.getBegin(); this.upperEnd = upperFS.getEnd(); } else { this.nextLowerChecked = true; } } @Override public boolean hasNext() { return this.upperIt.hasNext(); } @Override public AnnotationIteratorPair next() { if (!this.upperIt.hasNext()) { throw new NoSuchElementException(); } final AnnotationFS upperFS = this.upperIt.next(); this.upperBegin = upperFS.getBegin(); this.upperEnd = upperFS.getEnd(); this.nextLowerChecked = false; return new AnnotationIteratorPair(upperFS, new AnnotationIterator()); } @Override public Iterator iterator() { return this; } /** * Not supported. */ @Override public void remove() { throw new UnsupportedOperationException(); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/util/AnnotationComparator.java0100644 0000000 0000000 00000002567 14523004075 033177 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.util; import java.util.Comparator; import org.apache.uima.cas.text.AnnotationFS; /** * Checks two {@link AnnotationFS annotations} for equality. */ public class AnnotationComparator implements Comparator { /** * Compares the start indexes of the annotations. * * @param a - first {@link AnnotationFS annotation}. * @param b - second {@link AnnotationFS annotation}. * * @return 0 if equals, < 0 if before and > 0 if after */ public int compare(AnnotationFS a, AnnotationFS b) { return a.getBegin() - b.getBegin(); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/util/AnnotationIteratorPair.java0100644 0000000 0000000 00000003012 14523004075 033457 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.util; import org.apache.uima.cas.text.AnnotationFS; /** * A pair of a {@link AnnotationFS UIMA annotation} and an * {@link Iterable annotation iterator}. */ public final class AnnotationIteratorPair { private final AnnotationFS annot; private final Iterable it; public AnnotationIteratorPair(AnnotationFS a, Iterable it) { super(); this.annot = a; this.it = it; } /** * @return Retrieves the {@link AnnotationFS}. */ public AnnotationFS getAnnotation() { return this.annot; } /** * @return Retrieves the {@link Iterable sub-iterator}. */ public Iterable getSubIterator() { return this.it; } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/util/AnnotatorUtil.java0100644 0000000 0000000 00000052300 14523004075 031626 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.util; import java.io.IOException; import java.io.InputStream; import org.apache.uima.UimaContext; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.Feature; import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.resource.ResourceAccessException; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.util.Level; import org.apache.uima.util.Logger; import opennlp.tools.dictionary.Dictionary; /** * This is a utility class for Annotators. */ public final class AnnotatorUtil { private AnnotatorUtil() { // util class not must not instantiated } /** * Retrieves a type of the given name from the given type system. * * @param typeSystem The {@link TypeSystem} to use. * @param name The name of the type to retrieve. * * @return The {@link Type} for the {@code name}. * @throws OpenNlpAnnotatorProcessException Thrown if no {@link Type} could be found. */ public static Type getType(TypeSystem typeSystem, String name) throws AnalysisEngineProcessException { Type type = typeSystem.getType(name); if (type == null) { throw new OpenNlpAnnotatorProcessException( ExceptionMessages.TYPE_NOT_FOUND, new Object[] {name}); } return type; } /** * Checks if a {@link Feature} has the expected type, otherwise * an exception is thrown. * * @param feature The {@link Feature} to check for. * @param expectedType The type that is expected. * * @throws OpenNlpAnnotatorProcessException Thrown if no {@link Type} did match. */ private static void checkFeatureType(Feature feature, String expectedType) throws AnalysisEngineProcessException { if (!feature.getRange().getName().equals(expectedType)) { throw new OpenNlpAnnotatorProcessException( ExceptionMessages.WRONG_FEATURE_TYPE, new Object[] {feature.getName(), expectedType }); } } /** * Retrieves a {@link Feature} for a specified type and {@code featureName}, * otherwise an exception is thrown. * * @param type The {@link Type} to use. * @param featureName The name of the feature to retrieve. * * @return The {@link Feature} if found. * @throws OpenNlpAnnotatorProcessException Thrown if no {@link Feature} did match. */ public static Feature getRequiredFeature(Type type, String featureName) throws AnalysisEngineProcessException { Feature feature = type.getFeatureByBaseName(featureName); if (feature == null) { throw new OpenNlpAnnotatorProcessException( ExceptionMessages.FEATURE_NOT_FOUND, new Object[] {type.getName(), featureName}); } return feature; } /** * Retrieves a {@link Feature} of the given type. * * @param type The {@link Type} to use. * @param featureName The name of the feature to retrieve. * @param rangeType The expected range type. * * @return The {@link Feature} if found. * @throws OpenNlpAnnotatorProcessException Thrown if no {@link Feature} did match. */ public static Feature getRequiredFeature(Type type, String featureName, String rangeType) throws AnalysisEngineProcessException { Feature feature = getRequiredFeature(type, featureName); checkFeatureType(feature, rangeType); return feature; } /** * Retrieves a {@link Feature feature parameter} of specified type. * * @param context The {@link UimaContext} to use. * @param type The {@link Type} of the {@link Feature} to get. * @param featureNameParameter The name of the feature parameter. * * @return The {@link Feature} if found. * @throws OpenNlpAnnotatorProcessException Thrown if no {@link Feature} did match. */ public static Feature getRequiredFeatureParameter(UimaContext context, Type type, String featureNameParameter) throws AnalysisEngineProcessException { String featureName; try { featureName = getRequiredStringParameter(context, featureNameParameter); } catch (ResourceInitializationException e) { throw new OpenNlpAnnotatorProcessException(e); } return getRequiredFeature(type, featureName); } /** * Retrieves a {@link Feature feature parameter} of specified type. * * @param context The {@link UimaContext} to use. * @param type The {@link Type} of the {@link Feature} to get. * @param featureNameParameter The name of the feature parameter. * @param rangeTypeName The name of expected range type. * * @return The {@link Feature} if found. * @throws OpenNlpAnnotatorProcessException Thrown if no {@link Feature} did match. */ public static Feature getRequiredFeatureParameter(UimaContext context, Type type, String featureNameParameter, String rangeTypeName) throws AnalysisEngineProcessException { String featureName; try { featureName = getRequiredStringParameter(context, featureNameParameter); } catch (ResourceInitializationException e) { throw new OpenNlpAnnotatorProcessException(e); } return getRequiredFeature(type, featureName, rangeTypeName); } /** * Retrieves a type of the given name from the given type system. * * @param context The {@link UimaContext} to use. * @param typeSystem The {@link TypeSystem} to use. * @param parameter The name of the type to retrieve. * * @return The {@link Type} for the {@code name}. * @throws OpenNlpAnnotatorProcessException Thrown if no {@link Type} could be found. */ public static Type getRequiredTypeParameter(UimaContext context, TypeSystem typeSystem, String parameter) throws AnalysisEngineProcessException { String typeName; try { typeName = getRequiredStringParameter(context, parameter); } catch (ResourceInitializationException e) { throw new OpenNlpAnnotatorProcessException(e); } return getType(typeSystem, typeName); } /** * Retrieves a required parameter from the given context. * * @param context The {@link UimaContext} to use. * @param parameter The name of the type to retrieve. * * @return The {@link String} value retrieved for a specified {@code parameter} * from the {@code context}. */ public static String getRequiredStringParameter(UimaContext context, String parameter) throws ResourceInitializationException { String value = getOptionalStringParameter(context, parameter); checkForNull(value, parameter); return value; } /** * Retrieves a required parameter from the given context. * * @param context The {@link UimaContext} to use. * @param parameter The name of the type to retrieve. * * @return The {@link Integer} value retrieved for a specified {@code parameter} * from the {@code context}. * @throws ResourceInitializationException Thrown if no value} could be found. */ public static Integer getRequiredIntegerParameter(UimaContext context, String parameter) throws ResourceInitializationException { Integer value = getOptionalIntegerParameter(context, parameter); checkForNull(value, parameter); return value; } /** * Retrieves a required parameter from the given context. * * @param context The {@link UimaContext} to use. * @param parameter The name of the type to retrieve. * * @return The {@link Float} value retrieved for a specified {@code parameter} * from the {@code context}. * @throws ResourceInitializationException Thrown if no value} could be found. */ public static Float getRequiredFloatParameter(UimaContext context, String parameter) throws ResourceInitializationException { Float value = getOptionalFloatParameter(context, parameter); checkForNull(value, parameter); return value; } /** * Retrieves a required parameter from the given context. * * @param context The {@link UimaContext} to use. * @param parameter The name of the type to retrieve. * * @return The {@link Boolean} value retrieved for a specified {@code parameter} * from the {@code context}. * @throws ResourceInitializationException Thrown if no value} could be found. */ public static Boolean getRequiredBooleanParameter(UimaContext context, String parameter) throws ResourceInitializationException { Boolean value = getOptionalBooleanParameter(context, parameter); checkForNull(value, parameter); return value; } private static void checkForNull(Object value, String parameterName) throws ResourceInitializationException { if (value == null) { throw new ResourceInitializationException( ExceptionMessages.MESSAGE_CATALOG, ExceptionMessages.PARAMETER_NOT_FOUND, new Object[] {parameterName}); } } /** * Retrieves an optional {@link Feature feature parameter} of specified type. * * @param context The {@link UimaContext} to use. * @param nameType The {@link Type} of the {@link Feature} to get. * @param featureNameParameter The name of the feature parameter. * @param rangeTypeName The name of expected range type. * * @return The {@link Feature} if found. * @throws OpenNlpAnnotatorProcessException Thrown if no {@link Feature} did match. */ public static Feature getOptionalFeatureParameter(UimaContext context, Type nameType, String featureNameParameter, String rangeTypeName) throws AnalysisEngineProcessException { String featureName; try { featureName = getOptionalStringParameter(context, featureNameParameter); } catch (ResourceInitializationException e) { throw new OpenNlpAnnotatorProcessException(e); } if (featureName != null) { return getOptionalFeature(nameType, featureName, rangeTypeName); } else { return null; } } /** * Retrieves an optional {@link Feature feature parameter} of specified type. * * @param type The {@link Type} of the {@link Feature} to get. * @param featureName The name of the feature parameter. * @param rangeType The expected range type. * * @return The {@link Feature} if found. * @throws OpenNlpAnnotatorProcessException Thrown if no {@link Feature} did match. */ public static Feature getOptionalFeature(Type type, String featureName, String rangeType) throws AnalysisEngineProcessException { Feature feature = type.getFeatureByBaseName(featureName); checkFeatureType(feature, rangeType); return feature; } /** * Retrieves an optional {@link Feature feature parameter} of specified type. * * @param context The {@link UimaContext} to use. * @param typeSystem The {@link TypeSystem} to use. * @param parameter The name of the type to retrieve. * * @return The {@link Type} for the {@code name}. * @throws OpenNlpAnnotatorProcessException Thrown if no {@link Type} could be found. */ public static Type getOptionalTypeParameter(UimaContext context, TypeSystem typeSystem, String parameter) throws AnalysisEngineProcessException { String typeName; try { typeName = getOptionalStringParameter(context, parameter); } catch (ResourceInitializationException e) { throw new OpenNlpAnnotatorProcessException(e); } if (typeName != null) { return getType(typeSystem, typeName); } else { return null; } } /** * Retrieves an optional parameter from the given {@link UimaContext}. * * @param context The {@link UimaContext} to use. * @param parameter The name of the parameter to retrieve. * * @return The {@link String parameter} or {@code null} if not set. * @throws ResourceInitializationException Thrown if the parameter type was not of the expected type. */ public static String getOptionalStringParameter(UimaContext context, String parameter) throws ResourceInitializationException { Object value = getOptionalParameter(context, parameter); if (value instanceof String) { return (String) value; } else if (value == null) { return null; } else { throw new ResourceInitializationException( ExceptionMessages.MESSAGE_CATALOG, ExceptionMessages.WRONG_PARAMETER_TYPE, new Object[] {parameter, "String"}); } } /** * Retrieves an optional parameter array from the given {@link UimaContext}. * * @param context The {@link UimaContext} to use. * @param parameter The name of the parameter to retrieve. * * @return The {@link String parameter array} or an empty array if not set. * @throws ResourceInitializationException Thrown if the parameter type was not of the expected type. */ public static String[] getOptionalStringArrayParameter(UimaContext context, String parameter) throws ResourceInitializationException { Object value = getOptionalParameter(context, parameter); if (value instanceof String[]) { return (String[]) value; } else if (value == null) { return new String[0]; } else { throw new ResourceInitializationException( ExceptionMessages.MESSAGE_CATALOG, ExceptionMessages.WRONG_PARAMETER_TYPE, new Object[] {parameter, "String array"}); } } /** * Retrieves an optional parameter from the given {@link UimaContext}. * * @param context The {@link UimaContext} to use. * @param parameter The name of the parameter to retrieve. * * @return The {@link Integer parameter} or {@code null} if not set. * @throws ResourceInitializationException Thrown if the parameter type was not of the expected type. */ public static Integer getOptionalIntegerParameter(UimaContext context, String parameter) throws ResourceInitializationException { Object value = getOptionalParameter(context, parameter); if (value instanceof Integer) { return (Integer) value; } else if (value == null) { return null; } else { throw new ResourceInitializationException( ExceptionMessages.MESSAGE_CATALOG, ExceptionMessages.WRONG_PARAMETER_TYPE, new Object[] {parameter, "Integer"}); } } /** * Retrieves an optional parameter from the given {@link UimaContext}. * * @param context The {@link UimaContext} to use. * @param parameter The name of the parameter to retrieve. * * @return The {@link Float parameter} or {@code null} if not set. * @throws ResourceInitializationException Thrown if the parameter type was not of the expected type. */ public static Float getOptionalFloatParameter(UimaContext context, String parameter) throws ResourceInitializationException { Object value = getOptionalParameter(context, parameter); if (value instanceof Float) { return (Float) value; } else if (value == null) { return null; } else { throw new ResourceInitializationException( ExceptionMessages.MESSAGE_CATALOG, ExceptionMessages.WRONG_PARAMETER_TYPE, new Object[] {parameter, "Float"}); } } /** * Retrieves an optional parameter from the given {@link UimaContext}. * * @param context The {@link UimaContext} to use. * @param parameter The name of the parameter to retrieve. * * @return The {@link Boolean parameter} or {@code null} if not set. * @throws ResourceInitializationException Thrown if the parameter type was not of the expected type. */ public static Boolean getOptionalBooleanParameter(UimaContext context, String parameter) throws ResourceInitializationException { Object value = getOptionalParameter(context, parameter); if (value instanceof Boolean) { return (Boolean) value; } else if (value == null) { return null; } else { throw new ResourceInitializationException( ExceptionMessages.MESSAGE_CATALOG, ExceptionMessages.WRONG_PARAMETER_TYPE, new Object[] {parameter, "Boolean"}); } } /** * Retrieves an optional parameter from the given {@link UimaContext}. * * @param context The {@link UimaContext} to use. * @param parameter The name of the parameter to retrieve. * * @return The {@link Object parameter} or {@code null} if not set. * @throws ResourceInitializationException Thrown if the parameter type was not of the expected type. */ private static Object getOptionalParameter(UimaContext context, String parameter) throws ResourceInitializationException { Object value = context.getConfigParameterValue(parameter); Logger logger = context.getLogger(); if (logger.isLoggable(Level.INFO)) { logger.log(Level.INFO, parameter + " = " + (value != null ? value.toString() : "not set")); } return value; } /** * Opens an {@link InputStream} for a resource via the given {@link UimaContext}. * * @param context The {@link UimaContext} to use. * @param name The name that identifies the resource. * @return A valid, open {@link InputStream}. * @throws ResourceInitializationException Thrown if the resource could not be found. */ public static InputStream getResourceAsStream(UimaContext context, String name) throws ResourceInitializationException { final InputStream inResource = getOptionalResourceAsStream(context, name); if (inResource == null) { throw new ResourceInitializationException( ExceptionMessages.MESSAGE_CATALOG, ExceptionMessages.IO_ERROR_MODEL_READING, new Object[] {name + " could not be found!"}); } return inResource; } /** * Opens an {@link InputStream} for an optional resource via the given {@link UimaContext}. * * @param context The {@link UimaContext} to use. * @param name The name that identifies the resource. * @return A valid, open {@link InputStream}. * @throws ResourceInitializationException Thrown if the resource could not be found. */ public static InputStream getOptionalResourceAsStream(UimaContext context, String name) throws ResourceInitializationException { final InputStream inResource; try { inResource = context.getResourceAsStream(name); } catch (ResourceAccessException e) { throw new ResourceInitializationException(e); } return inResource; } /** * Creates a {@link Dictionary} via the given {@link UimaContext}. * * @param context The {@link UimaContext} to use. * @param dictionaryParameter The name that identifies the dictionary. * * @return A valid {@link Dictionary} or {@code null} if IO errors occurred. * @throws ResourceInitializationException Thrown if the resource could not be found. */ public static Dictionary createOptionalDictionary(UimaContext context, String dictionaryParameter) throws ResourceInitializationException { String dictionaryName = AnnotatorUtil.getOptionalStringParameter(context, dictionaryParameter); Dictionary dictionary = null; if (dictionaryName != null) { Logger logger = context.getLogger(); try (InputStream dictIn = AnnotatorUtil.getOptionalResourceAsStream(context, dictionaryName)) { if (dictIn == null) { String message = "The dictionary file " + dictionaryName + " does not exist!"; if (logger.isLoggable(Level.WARNING)) { logger.log(Level.WARNING, message); } return null; } dictionary = new Dictionary(dictIn); } catch (IOException e) { // if this fails just print error message and continue String message = "IOException during dictionary reading, " + "running without dictionary: " + e.getMessage(); if (logger.isLoggable(Level.WARNING)) { logger.log(Level.WARNING, message); } } return dictionary; } else { return null; } } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/util/ContainingConstraint.java0100644 0000000 0000000 00000004464 14523004075 033171 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.util; import java.util.Collection; import java.util.LinkedList; import org.apache.uima.cas.FSMatchConstraint; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.text.AnnotationFS; /** * Checks if an {@link AnnotationFS} is contained by the given AnnotationFS. */ public final class ContainingConstraint implements FSMatchConstraint { private static final long serialVersionUID = 8393109549729168545L; private final Collection mContainingAnnotations = new LinkedList<>(); /** * Initializes a {@link ContainingConstraint}. */ public ContainingConstraint() { } /** * Initializes a {@link ContainingConstraint}. * * @param containingAnnotation The {@link AnnotationFS} to initialize with. */ public ContainingConstraint(AnnotationFS containingAnnotation) { mContainingAnnotations.add(containingAnnotation); } /** * Checks if the given {@link FeatureStructure} matches the constraint. */ @Override public boolean match(FeatureStructure featureStructure) { if (!(featureStructure instanceof AnnotationFS annotation)) { return false; } for (AnnotationFS containingAnnotation : mContainingAnnotations) { if (isContaining(annotation, containingAnnotation)) { return true; } } return false; } private boolean isContaining(AnnotationFS annotation, AnnotationFS containing) { return (containing.getBegin() <= annotation.getBegin()) && (containing.getEnd() >= annotation.getEnd()); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/util/ExceptionMessages.java0100644 0000000 0000000 00000003211 14523004075 032446 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.util; /** * This class contains constants for the exception messages in the exception * message catalog. */ public class ExceptionMessages { public static final String MESSAGE_CATALOG = "opennlp.uima.util.ExceptionMessages"; public static final String IO_ERROR_MODEL_READING = "io_error_model_reading"; public static final String IO_ERROR_DICTIONARY_READING = "io_error_dictionary_reading"; public static final String INVALID_DICTIONARY_FORMAT = "invalid_dictionary_format"; public static final String PARAMETER_NOT_FOUND = "parameter_not_found"; public static final String WRONG_PARAMETER_TYPE = "wrong_parameter_type"; public static final String TYPE_NOT_FOUND = "type_not_found"; public static final String FEATURE_NOT_FOUND = "feature_not_found"; public static final String WRONG_FEATURE_TYPE = "wrong_feature_type"; } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-uima_src_main_java_opennlp_uima_util_OpenNlpAnnotat0100644 0000000 0000000 00000000165 14523004075 032474 xustar000000000 0000000 117 path=apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/util/OpenNlpAnnotatorProcessException.java apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/util/OpenNlpAnnotatorProcessExcepti0100644 0000000 0000000 00000002662 14523004075 034233 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.util; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; public class OpenNlpAnnotatorProcessException extends AnalysisEngineProcessException { private static final long serialVersionUID = 0; public OpenNlpAnnotatorProcessException(String messageKey, Object[] arguments) { super(ExceptionMessages.MESSAGE_CATALOG, messageKey, arguments); } public OpenNlpAnnotatorProcessException(String messageKey, Object[] arguments, Throwable t) { super(ExceptionMessages.MESSAGE_CATALOG, messageKey, arguments, t); } public OpenNlpAnnotatorProcessException(Throwable t) { super(t); } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/util/OpennlpUtil.java0100644 0000000 0000000 00000010126 14523004075 031274 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.util; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.apache.uima.resource.ResourceInitializationException; import opennlp.tools.ml.TrainerFactory; import opennlp.tools.util.TrainingParameters; import opennlp.tools.util.model.BaseModel; /** * This class contains util methods for the maxent library. */ final public class OpennlpUtil { private OpennlpUtil() { // this is util class must not be instantiated } /** * Serializes a {@link BaseModel GIS model} and writes it to the given * {@link File}. * * @param model The {@link BaseModel} to serialize. * @param modelFile The {@link File} to serialize into. * @throws IOException Thrown if IO errors occurred. */ public static void serialize(BaseModel model, File modelFile) throws IOException { try (OutputStream fileOut = new FileOutputStream(modelFile); OutputStream modelOut = new BufferedOutputStream(fileOut)) { model.serialize(modelOut); } } /** * Loads data from a given {@link File}. * * @param inFile The {@link File} to read bytes from. * @return The bytes that have been read. * @throws IOException Thrown if IO errors occurred. */ public static byte[] loadBytes(File inFile) throws IOException { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); try (InputStream in = new FileInputStream(inFile)) { byte[] buffer = new byte[1024]; int len; while ((len = in.read(buffer)) > 0) { bytes.write(buffer, 0, len); } } return bytes.toByteArray(); } /** * Loads data from a given {@link File}. * * @param inFileValue The name of the {@link File} to read bytes from. * @param isSequenceTrainingAllowed Whether the {@link TrainerFactory.TrainerType#SEQUENCE_TRAINER} * method is allowed or not. * @return The {@link TrainingParameters} that have been read. * * @throws ResourceInitializationException Thrown if IO errors occurred or the {@code inFileValue} * does not reference a valid training parameters file. */ public static TrainingParameters loadTrainingParams(String inFileValue, boolean isSequenceTrainingAllowed) throws ResourceInitializationException { TrainingParameters params; if (inFileValue != null) { try (InputStream paramsIn = new FileInputStream(inFileValue)) { params = new opennlp.tools.util.TrainingParameters(paramsIn); } catch (IOException e) { throw new ResourceInitializationException(e); } if (!TrainerFactory.isValid(params)) { throw new ResourceInitializationException(new Exception("Training parameters file is invalid!")); } TrainerFactory.TrainerType trainerType = TrainerFactory.getTrainerType(params); if (!isSequenceTrainingAllowed && TrainerFactory.TrainerType.SEQUENCE_TRAINER.equals(trainerType)) { throw new ResourceInitializationException(new Exception("Sequence training is not supported!")); } } else { params = TrainingParameters.defaultParams(); } return params; } } apache-opennlp-2.3.3-src/opennlp-uima/src/main/java/opennlp/uima/util/UimaUtil.java0100644 0000000 0000000 00000007323 14523004075 030561 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.util; import java.util.Collection; import java.util.Iterator; import java.util.LinkedList; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIndex; import org.apache.uima.cas.Type; import org.apache.uima.cas.text.AnnotationFS; /** * This is a util class for uima operations. */ public final class UimaUtil { private UimaUtil() { // this is util class must not be instantiated } /** * The token type parameter. */ public static final String TOKEN_TYPE_PARAMETER = "opennlp.uima.TokenType"; /** * The pos feature parameter. */ public static final String POS_FEATURE_PARAMETER = "opennlp.uima.POSFeature"; /** * The model parameter. */ public static final String MODEL_PARAMETER = "opennlp.uima.ModelName"; /** * The sentence type parameter. */ public static final String SENTENCE_TYPE_PARAMETER = "opennlp.uima.SentenceType"; /** * The beam size parameter. */ public static final String BEAM_SIZE_PARAMETER = "opennlp.uima.BeamSize"; public static final String LANGUAGE_PARAMETER = "opennlp.uima.Language"; public static final String DICTIONARY_PARAMETER = "opennlp.uima.Dictionary"; public static final String TRAINING_PARAMS_FILE_PARAMETER = "opennlp.uima.TrainingParamsFile"; public static final String CUTOFF_PARAMETER = "opennlp.uima.Cutoff"; public static final String ITERATIONS_PARAMETER = "opennlp.uima.Iterations"; public static final String PROBABILITY_FEATURE_PARAMETER = "opennlp.uima.ProbabilityFeature"; public static final String IS_REMOVE_EXISTINGS_ANNOTAIONS = "opennlp.uima.IsRemoveExistingAnnotations"; public static final String ADDITIONAL_TRAINING_DATA_FILE = "opennlp.uima.AdditionalTrainingDataFile"; public static final String ADDITIONAL_TRAINING_DATA_ENCODING = "opennlp.uima.AdditionalTrainingDataEncoding"; /** * Removes all annotations of type removeAnnotationType which are contained * by annotations of type containerAnnotationType. * * @param cas The {@link CAS} to use. * @param containerAnnotation The {@link AnnotationFS} of the container. * @param removeAnnotationType The {@link Type type} to remove annotations for. */ public static void removeAnnotations(CAS cas, AnnotationFS containerAnnotation, Type removeAnnotationType) { FSIndex allRemoveAnnotations = cas .getAnnotationIndex(removeAnnotationType); ContainingConstraint containingConstraint = new ContainingConstraint( containerAnnotation); Iterator containingTokens = cas.createFilteredIterator( allRemoveAnnotations.iterator(), containingConstraint); Collection removeAnnotations = new LinkedList<>(); while (containingTokens.hasNext()) { removeAnnotations.add(containingTokens.next()); } for (AnnotationFS removeAnnotation : removeAnnotations) { cas.removeFsFromIndexes(removeAnnotation); } } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-uima_src_main_resources_opennlp_uima_util_Exception0100644 0000000 0000000 00000000164 14523004075 032622 xustar000000000 0000000 116 path=apache-opennlp-2.3.3-src/opennlp-uima/src/main/resources/opennlp/uima/util/ExceptionMessages_en.properties apache-opennlp-2.3.3-src/opennlp-uima/src/main/resources/opennlp/uima/util/ExceptionMessages_en.prop0100644 0000000 0000000 00000002546 14523004075 034272 0ustar00rootroot0000000 0000000 # # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # io_error_model_reading = I/O error occurred during model reading: {0} io_error_dictionary_reading = "I/O" error occurred during dictionary reading: {0}; invalid_dictionary_format = The format of the dictionary is invalid: {0} parameter_not_found = The required parameter {0} can not be found! wrong_parameter_type = The parameter {0} does not have the expected type {1}! type_not_found = "Could not find {0} type!" feature_not_found = The type {0} does not have the feature {1}! wrong_feature_type = The Feature {0} must be of type {1}! range_type_unsupported = Range type is unsupported: {0} apache-opennlp-2.3.3-src/opennlp-uima/src/test/java/opennlp/uima/AnnotatorsInitializationTest.java0100644 0000000 0000000 00000005155 14523004075 034007 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima; import java.io.File; import java.io.IOException; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.cas.CAS; import org.apache.uima.pear.util.FileUtil; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.resource.ResourceSpecifier; import org.apache.uima.util.InvalidXMLException; import org.apache.uima.util.XMLInputSource; import org.junit.jupiter.api.Assertions; /** * Test for initialization of the opennlp.uima Annotators */ public class AnnotatorsInitializationTest { private static final String PATHNAME = "src/test/resources/test-descriptors/"; // TODO: This test requires the SourceForge models, or other models to run, // but they are missing due to license issues since the project was migrated to Apache //@Test public void testInitializationExecutionAndReconfigure() { File f = new File(PATHNAME); for (String descName : f.list(new FileUtil.ExtFilenameFilter("xml"))) { if (!descName.equals("TypeSystem.xml")) { try { AnalysisEngine ae = produceAE(descName); CAS cas = ae.newCAS(); cas.setDocumentText("this is a dummy document text for initialization and reconfiguration"); ae.process(cas); ae.reconfigure(); } catch (Exception e) { Assertions.fail(e.getLocalizedMessage() + " for desc " + descName); } } } } private AnalysisEngine produceAE(String descName) throws IOException, InvalidXMLException, ResourceInitializationException { File descFile = new File(PATHNAME + descName); XMLInputSource in = new XMLInputSource(descFile); ResourceSpecifier specifier = UIMAFramework.getXMLParser().parseResourceSpecifier(in); return UIMAFramework.produceAnalysisEngine(specifier); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-uima_src_test_java_opennlp_uima_dictionary_Dictiona0100644 0000000 0000000 00000000161 14523004075 032545 xustar000000000 0000000 113 path=apache-opennlp-2.3.3-src/opennlp-uima/src/test/java/opennlp/uima/dictionary/DictionaryResourceTest.java apache-opennlp-2.3.3-src/opennlp-uima/src/test/java/opennlp/uima/dictionary/DictionaryResourceTest.j0100644 0000000 0000000 00000010264 14523004075 034236 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.dictionary; import java.io.File; import java.io.IOException; import java.util.Collections; import java.util.HashSet; import java.util.Set; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.Type; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.resource.ResourceSpecifier; import org.apache.uima.util.InvalidXMLException; import org.apache.uima.util.XMLInputSource; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import opennlp.tools.util.StringList; import opennlp.uima.util.CasUtil; public class DictionaryResourceTest { private static final String PATHNAME = "src/test/resources/test-descriptors/"; private static AnalysisEngine AE; @BeforeAll public static void beforeClass() throws Exception { AE = produceAE("DictionaryNameFinder.xml"); } @AfterAll public static void afterClass() { AE.destroy(); // is this necessary? } private static AnalysisEngine produceAE(String descName) throws IOException, InvalidXMLException, ResourceInitializationException { File descFile = new File(PATHNAME + descName); XMLInputSource in = new XMLInputSource(descFile); ResourceSpecifier specifier = UIMAFramework.getXMLParser() .parseResourceSpecifier(in); return UIMAFramework.produceAnalysisEngine(specifier); } @Test public void testDictionaryWasLoaded() { try { DictionaryResource dic = (DictionaryResource) AE.getResourceManager() .getResource("/opennlp.uima.Dictionary"); // simple check if ordering always is the same... Assertions.assertEquals( "[[Berlin], [Stockholm], [New,York], [London], [Copenhagen], [Paris]]", dic.getDictionary().toString()); // else we can do a simple test like this Assertions.assertEquals(6, dic.getDictionary().asStringSet().size(), "There should be six entries in the dictionary"); Assertions.assertTrue(dic.getDictionary().contains(new StringList("London")), "London should be in the dictionary"); } catch (Exception e) { Assertions.fail("Dictionary was not loaded."); } } @Test public void testDictionaryNameFinder() { Set expectedLocations = new HashSet<>(); Collections.addAll(expectedLocations, "London", "Stockholm", "Copenhagen", "New York"); try { CAS cas = AE.newCAS(); CasUtil.deserializeXmiCAS(cas, DictionaryResourceTest.class .getResourceAsStream("/cas/dictionary-test.xmi")); AE.process(cas); Type locationType = cas.getTypeSystem().getType("opennlp.uima.Location"); FSIterator locationIterator = cas .getAnnotationIndex(locationType).iterator(); while (locationIterator.isValid()) { AnnotationFS annotationFS = locationIterator.get(); Assertions.assertTrue(expectedLocations.contains(annotationFS.getCoveredText())); expectedLocations.remove(annotationFS.getCoveredText()); locationIterator.moveToNext(); } Assertions.assertEquals(0, expectedLocations.size()); } catch (Exception e) { Assertions.fail(e.getLocalizedMessage()); } } } apache-opennlp-2.3.3-src/opennlp-uima/src/test/java/opennlp/uima/normalizer/NumberUtilTest.java0100644 0000000 0000000 00000004536 14523004075 033221 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.normalizer; import java.text.ParseException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; /** * Tests for opennlp.uima.normalizer.NumberUtil */ class NumberUtilTest { private static final String VALID_LANGUAGE_CODE = "en"; private static final String INVALID_LANGUAGE_CODE = "INVALID"; @Test void isLanguageSupported_EN_Pass() { Assertions.assertTrue(NumberUtil.isLanguageSupported(VALID_LANGUAGE_CODE)); } @Test void isLanguageSupported_INVALID_FAIL() { Assertions.assertFalse(NumberUtil.isLanguageSupported(INVALID_LANGUAGE_CODE)); } @Test void parse_long() throws ParseException { String numberStr = " 1 2 3 4 5 6 7 8 9 1 0 "; Long longValue = 12345678910L; Number result = NumberUtil.parse(numberStr , VALID_LANGUAGE_CODE); Assertions.assertEquals(longValue , result); } @Test void parse_double() throws ParseException { String numberStr = " 12 3456.78 910 "; Double doubleValue = 123456.78910; Number result = NumberUtil.parse(numberStr , VALID_LANGUAGE_CODE); Assertions.assertEquals(doubleValue , result); } @Test void parse_double_with_exception() throws ParseException { String numberStr = " 12 3456.78 910 "; Double doubleValue = 123456.78910; IllegalArgumentException thrown = Assertions.assertThrows(IllegalArgumentException.class , () -> { Number result = NumberUtil.parse(numberStr , INVALID_LANGUAGE_CODE); } , "java.lang.IllegalArgumentException: Language INVALID is not supported!"); } } ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-uima_src_test_java_opennlp_uima_util_AnnotationComb0100644 0000000 0000000 00000000160 14523004075 032535 xustar000000000 0000000 112 path=apache-opennlp-2.3.3-src/opennlp-uima/src/test/java/opennlp/uima/util/AnnotationComboIteratorTest.java apache-opennlp-2.3.3-src/opennlp-uima/src/test/java/opennlp/uima/util/AnnotationComboIteratorTest.ja0100644 0000000 0000000 00000005533 14523004075 034201 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.util; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.apache.uima.cas.CAS; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.resource.metadata.TypeSystemDescription; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class AnnotationComboIteratorTest { /** * Tests ensures that the bug observed in OPENNLP 676 is fixed. The described * bug occurs if there are tokens which are out side of the sentence bounds. * In that case an uncommon code path in the iterator is used to skip the * out-of-sentence tokens until it again finds tokens which are inside a sentence. *

* The iterator was either crashing with a NoSuchElementException or it just left * out the first token in the next sentence. * * @throws IOException */ @Test public void OPENNLP_676() throws IOException { TypeSystemDescription ts = CasUtil .createTypeSystemDescription(AnnotationComboIteratorTest.class .getResourceAsStream("/test-descriptors/TypeSystem.xml")); CAS cas = CasUtil.createEmptyCAS(ts); CasUtil.deserializeXmiCAS(cas, AnnotationComboIteratorTest.class .getResourceAsStream("/cas/OPENNLP-676.xmi")); AnnotationComboIterator comboIterator = new AnnotationComboIterator(cas, cas.getTypeSystem().getType("opennlp.uima.Sentence"), cas .getTypeSystem().getType("opennlp.uima.Token")); List> tokensBySentence = new ArrayList<>(); for (AnnotationIteratorPair annotationIteratorPair : comboIterator) { final List tokens = new ArrayList<>(); for (AnnotationFS tokenAnnotation : annotationIteratorPair .getSubIterator()) { tokens.add(tokenAnnotation.getCoveredText()); } tokensBySentence.add(tokens); } Assertions.assertEquals(Collections.singletonList("A"), tokensBySentence.get(0)); Assertions.assertEquals(Arrays.asList("H", "I"), tokensBySentence.get(1)); } } apache-opennlp-2.3.3-src/opennlp-uima/src/test/java/opennlp/uima/util/CasUtil.java0100644 0000000 0000000 00000010170 14523004075 030421 0ustar00rootroot0000000 0000000 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package opennlp.uima.util; import java.io.File; import java.io.IOException; import java.io.InputStream; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.apache.uima.ResourceSpecifierFactory; import org.apache.uima.UIMAFramework; import org.apache.uima.cas.CAS; import org.apache.uima.cas.impl.XmiCasDeserializer; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.resource.metadata.FsIndexDescription; import org.apache.uima.resource.metadata.TypePriorities; import org.apache.uima.resource.metadata.TypeSystemDescription; import org.apache.uima.resource.metadata.impl.FsIndexDescription_impl; import org.apache.uima.util.CasCreationUtils; import org.apache.uima.util.InvalidXMLException; import org.apache.uima.util.XMLInputSource; import org.apache.uima.util.XMLParser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; public class CasUtil { private static final Logger logger = LoggerFactory.getLogger(CasUtil.class); public static TypeSystemDescription createTypeSystemDescription(InputStream in) { // Note: // Type System location is not set correctly, // resolving a referenced type system will fail XMLInputSource xmlTypeSystemSource = new XMLInputSource(in, new File("")); XMLParser xmlParser = UIMAFramework.getXMLParser(); TypeSystemDescription typeSystemDesciptor; try { typeSystemDesciptor = (TypeSystemDescription) xmlParser .parse(xmlTypeSystemSource); typeSystemDesciptor.resolveImports(); } catch (InvalidXMLException e) { logger.error(e.getLocalizedMessage(), e); typeSystemDesciptor = null; } return typeSystemDesciptor; } public static CAS createEmptyCAS(TypeSystemDescription typeSystem) { ResourceSpecifierFactory resourceSpecifierFactory = UIMAFramework .getResourceSpecifierFactory(); TypePriorities typePriorities = resourceSpecifierFactory .createTypePriorities(); FsIndexDescription indexDesciptor = new FsIndexDescription_impl(); indexDesciptor.setLabel("TOPIndex"); indexDesciptor.setTypeName("uima.cas.TOP"); indexDesciptor.setKind(FsIndexDescription.KIND_SORTED); CAS cas; try { cas = CasCreationUtils.createCas(typeSystem, typePriorities, new FsIndexDescription[] { indexDesciptor }); } catch (ResourceInitializationException e) { logger.error(e.getLocalizedMessage(), e); cas = null; } return cas; } public static void deserializeXmiCAS(CAS cas, InputStream xmiIn) throws IOException { SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); saxParserFactory.setValidating(false); SAXParser saxParser; try { saxParser = saxParserFactory.newSAXParser(); } catch (ParserConfigurationException e) { throw new IllegalStateException( "SAXParser should be configured correctly!", e); } catch (SAXException e) { throw new IllegalStateException("SAX error while creating parser!", e); } XmiCasDeserializer dezerializer = new XmiCasDeserializer( cas.getTypeSystem()); try { saxParser.parse(xmiIn, dezerializer.getXmiCasHandler(cas)); } catch (SAXException e) { throw new IOException("Invalid XMI input!", e); } } } apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/cas/OPENNLP-676.xmi0100644 0000000 0000000 00000003641 14523004075 026645 0ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/cas/dictionary-test.xmi0100644 0000000 0000000 00000006776 14523004075 030350 0ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/dictionary.dic0100644 0000000 0000000 00000003500 14523004075 026545 0ustar00rootroot0000000 0000000 en org.apache.uima.DictionaryEntry New York Copenhagen Berlin Stockholm Paris London apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/test-descriptors/Chunker.xml0100644 0000000 0000000 00000010776 14523004075 031373 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.chunker.Chunker Chunker 1.5.2-incubating Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.POSFeature String false true opennlp.uima.ChunkType String false true opennlp.uima.ChunkTagFeature String false true opennlp.uima.SentenceType opennlp.uima.Sentence opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.POSFeature pos opennlp.uima.ChunkType opennlp.uima.Chunk opennlp.uima.ChunkTagFeature chunkType en opennlp.uima.ModelName opennlp.uima.chunker.ChunkerModelResource ChunkerModel file:test-models/en-chunker.bin opennlp.uima.chunker.ChunkerModelResourceImpl opennlp.uima.ModelName ChunkerModel apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/test-descriptors/DateNameFinder.xml0100644 0000000 0000000 00000007453 14523004075 032600 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.namefind.NameFinder Date Name Finder 1.5.2-incubating Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.NameType String false true opennlp.uima.SentenceType uima.tcas.DocumentAnnotation opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.NameType opennlp.uima.Date en opennlp.uima.ModelName opennlp.uima.namefind.TokenNameFinderModelResource DateModel file:test-models/en-ner-date.bin opennlp.uima.namefind.TokenNameFinderModelResourceImpl opennlp.uima.ModelName DateModel apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/test-descriptors/DictionaryNameFinder.xml0100644 0000000 0000000 00000010624 14523004075 034022 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.namefind.DictionaryNameFinder Dictionary Name Finder 1.5.2-incubating Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.NameType String false true opennlp.uima.SentenceType uima.tcas.DocumentAnnotation opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.NameType opennlp.uima.Location en opennlp.uima.Dictionary opennlp.uima.dictionary.DictionaryResource NameFinderDictionary file:src/test/resources/dictionary.dic opennlp.uima.dictionary.DictionaryResourceImpl opennlp.uima.Dictionary NameFinderDictionary apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/test-descriptors/LocationNameFinder.xml0100644 0000000 0000000 00000007156 14523004075 033473 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.namefind.NameFinder Location Name Finder 1.5.2-incubating Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.NameType String false true opennlp.uima.SentenceType uima.tcas.DocumentAnnotation opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.NameType opennlp.uima.Location en opennlp.uima.ModelName opennlp.uima.namefind.TokenNameFinderModelResource LocationModel file:test-models/en-ner-location.bin opennlp.uima.namefind.TokenNameFinderModelResourceImpl opennlp.uima.ModelName LocationModel apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/test-descriptors/MoneyNameFinder.xml0100644 0000000 0000000 00000007140 14523004075 033003 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.namefind.NameFinder Money Name Finder 1.5.2-incubating Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.NameType String false true opennlp.uima.SentenceType uima.tcas.DocumentAnnotation opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.NameType opennlp.uima.Money en opennlp.uima.ModelName opennlp.uima.namefind.TokenNameFinderModelResource MoneyModel file:test-models/en-ner-money.bin opennlp.uima.namefind.TokenNameFinderModelResourceImpl opennlp.uima.ModelName MoneyModel ./PaxHeaders.X/apache-opennlp-2.3.3-src_opennlp-uima_src_test_resources_test-descriptors_Organizati0100644 0000000 0000000 00000000156 14523004075 032622 xustar000000000 0000000 110 path=apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/test-descriptors/OrganizationNameFinder.xml apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/test-descriptors/OrganizationNameFinder.xml0100644 0000000 0000000 00000007202 14523004075 034357 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.namefind.NameFinder Organization Name Finder 1.5.2-incubating Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.NameType String false true opennlp.uima.SentenceType uima.tcas.DocumentAnnotation opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.NameType opennlp.uima.Organization en opennlp.uima.ModelName opennlp.uima.namefind.TokenNameFinderModelResource OrganizationModel file:test-models/en-ner-organization.bin opennlp.uima.namefind.TokenNameFinderModelResourceImpl opennlp.uima.ModelName OrganizationModel apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/test-descriptors/PercentageNameFinder.xml0100644 0000000 0000000 00000007171 14523004075 033775 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.namefind.NameFinder Percentage Name Finder 1.5.2-incubating Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.NameType String false true opennlp.uima.SentenceType uima.tcas.DocumentAnnotation opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.NameType opennlp.uima.Percentage en opennlp.uima.ModelName opennlp.uima.namefind.TokenNameFinderModelResource PercentageModel file:test-models/en-ner-percentage.bin opennlp.uima.namefind.TokenNameFinderModelResourceImpl opennlp.uima.ModelName PercentageModel apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/test-descriptors/PersonNameFinder.xml0100644 0000000 0000000 00000007144 14523004075 033166 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.namefind.NameFinder Person Name Finder 1.5.2-incubating Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.NameType String false true opennlp.uima.SentenceType uima.tcas.DocumentAnnotation opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.NameType opennlp.uima.Person en opennlp.uima.ModelName opennlp.uima.namefind.TokenNameFinderModelResource PersonModel file:test-models/en-ner-person.bin opennlp.uima.namefind.TokenNameFinderModelResourceImpl opennlp.uima.ModelName PersonModel apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/test-descriptors/PosTagger.xml0100644 0000000 0000000 00000007046 14523004075 031663 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.postag.POSTagger POS Tagger 1.5.2-incubating Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.POSFeature String false true opennlp.uima.SentenceType opennlp.uima.Sentence opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.POSFeature pos en opennlp.uima.ModelName opennlp.uima.postag.POSModelResource PosModel file:test-models/en-pos-maxent.bin opennlp.uima.postag.POSModelResourceImpl opennlp.uima.ModelName PosModel apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/test-descriptors/SentenceDetector.xml0100644 0000000 0000000 00000006410 14523004075 033220 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.sentdetect.SentenceDetector Sentence Detector 1.5.2-incubating Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.ContainerType String false false opennlp.uima.SentenceType opennlp.uima.Sentence en opennlp.uima.ModelName opennlp.uima.sentdetect.SentenceModelResource SentenceModel file:test-models/en-sent.bin opennlp.uima.sentdetect.SentenceModelResourceImpl opennlp.uima.ModelName SentenceModel apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/test-descriptors/TimeNameFinder.xml0100644 0000000 0000000 00000007140 14523004075 032612 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.namefind.NameFinder Time Name Finder 1.5.2-incubating Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.NameType String false true opennlp.uima.SentenceType uima.tcas.DocumentAnnotation opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.NameType opennlp.uima.Person en opennlp.uima.ModelName opennlp.uima.namefind.TokenNameFinderModelResource TimeModel file:test-models/en-ner-time.bin opennlp.uima.namefind.TokenNameFinderModelResourceImpl opennlp.uima.ModelName TimeModel apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/test-descriptors/Tokenizer.xml0100644 0000000 0000000 00000007132 14523004075 031736 0ustar00rootroot0000000 0000000 org.apache.uima.java true opennlp.uima.tokenize.Tokenizer Tokenizer ${project.version} Apache Software Foundation opennlp.uima.SentenceType String false true opennlp.uima.TokenType String false true opennlp.uima.tokenizer.IsAlphaNumericOptimization String false false opennlp.uima.TokenType opennlp.uima.Token opennlp.uima.SentenceType uima.tcas.DocumentAnnotation en true true opennlp.uima.ModelName opennlp.uima.tokenize.TokenizerModelResource TokenModel file:test-models/en-token.bin opennlp.uima.tokenize.TokenizerModelResourceImpl opennlp.uima.ModelName TokenModel apache-opennlp-2.3.3-src/opennlp-uima/src/test/resources/test-descriptors/TypeSystem.xml0100644 0000000 0000000 00000006045 14523004075 032114 0ustar00rootroot0000000 0000000 OpenNLP TypeSystem This is the default OpenNLP type system. All the sample descriptors reference the types in this type system. To replace it against a custom type system change the mapping in the descriptors to the custom types and reference the custom type system. 1.5.2-incubating Apache Software Foundation opennlp.uima.Sentence uima.tcas.Annotation opennlp.uima.Token uima.tcas.Annotation pos Part of speech uima.cas.String opennlp.uima.Chunk uima.tcas.Annotation chunkType uima.cas.String opennlp.uima.Person uima.tcas.Annotation opennlp.uima.Organization uima.tcas.Annotation opennlp.uima.Location uima.tcas.Annotation opennlp.uima.Date uima.tcas.Annotation opennlp.uima.Time uima.tcas.Annotation opennlp.uima.Money uima.tcas.Annotation opennlp.uima.Percentage uima.tcas.Annotation apache-opennlp-2.3.3-src/opennlp.iml0100644 0000000 0000000 00000000302 14523004075 017706 0ustar00rootroot0000000 0000000 apache-opennlp-2.3.3-src/pom.xml0100644 0000000 0000000 00000037331 14523004075 017061 0ustar00rootroot0000000 0000000 4.0.0 org.apache apache 31 org.apache.opennlp opennlp 2.3.3 pom Apache OpenNLP Reactor scm:git:https://github.com/apache/opennlp.git scm:git:git@github.com:apache/opennlp.git https://github.com/apache/opennlp.git opennlp-2.3.3 apache.snapshots Apache Snapshot Repository https://repository.apache.org/snapshots true Apache OpenNLP Users users-subscribe@opennlp.apache.org users-unsubscribe@opennlp.apache.org users@opennlp.apache.org http://mail-archives.apache.org/mod_mbox/opennlp-users/ Apache OpenNLP Developers dev-subscribe@opennlp.apache.org dev-unsubscribe@opennlp.apache.org dev@opennlp.apache.org http://mail-archives.apache.org/mod_mbox/opennlp-dev/ Apache OpenNLP Commits commits-subscribe@opennlp.apache.org commits-unsubscribe@opennlp.apache.org http://mail-archives.apache.org/mod_mbox/opennlp-commits/ Apache OpenNLP Issues issues-subscribe@opennlp.apache.org issues-unsubscribe@opennlp.apache.org http://mail-archives.apache.org/mod_mbox/opennlp-issues/ jira https://issues.apache.org/jira/browse/OPENNLP org.slf4j slf4j-api ${slf4j.version} org.slf4j slf4j-simple ${slf4j.version} test org.junit.jupiter junit-jupiter-api ${junit.version} test org.junit.jupiter junit-jupiter-engine ${junit.version} test org.junit.jupiter junit-jupiter-params ${junit.version} test opennlp-tools ${project.groupId} ${project.version} opennlp-tools ${project.groupId} ${project.version} test-jar opennlp-uima ${project.groupId} ${project.version} opennlp-brat-annotator ${project.groupId} ${project.version} opennlp-morfologik-addon ${project.groupId} ${project.version} 17 3.3.9 3.3.0 2.17.0 2.39.1 5.10.1 3.5.0 2.1.9 3.2.0 1.17.1 1.7.36 2.23.1 1.37 1.0C 4.3.0 0.8.11 3.2.2 3.2.2 3.6 3.9.0 org.apache.maven.plugins maven-release-plugin false deploy -Papache-release forked-path org.apache.maven.plugins maven-assembly-plugin 3.2.0 org.apache.felix maven-bundle-plugin 5.1.4 org.apache.maven.plugins maven-checkstyle-plugin ${checkstyle.plugin.version} com.puppycrawl.tools checkstyle 10.6.0 validate validate checkstyle.xml true true ${project.basedir}/src/test/java error true check org.jacoco jacoco-maven-plugin ${jacoco.maven.plugin} **/stemmer/* **/stemmer/snowball/* jacoco-prepare-agent prepare-agent jacoco-prepare-agent-integration prepare-agent-integration jacoco-report verify report org.eluder.coveralls coveralls-maven-plugin ${coveralls.maven.plugin} org.apache.maven.plugins maven-surefire-plugin ${maven.surefire.plugin} -Xmx2048m -Dorg.slf4j.simpleLogger.defaultLogLevel=off ${opennlp.forkCount} false **/stemmer/* **/stemmer/snowball/* **/*IT.java org.apache.maven.plugins maven-failsafe-plugin ${maven.failsafe.plugin} integration-test integration-test verify **/*Test.java **/*IT.java de.thetaphi forbiddenapis ${forbiddenapis.plugin} false jdk-deprecated-${java.version} jdk-non-portable validate check testCheck org.apache.maven.plugins maven-compiler-plugin ${java.version} -Xlint org.apache.rat apache-rat-plugin default-cli check verify release.properties 1000000 maven-javadoc-plugin 3.5.0 none ${java.version} src/main/java create-javadoc-jar jar package public false false org.apache.maven.plugins maven-eclipse-plugin 2.10 ../ http://opennlp.apache.org/code-formatter/OpenNLP-Eclipse-Formatter.xml org.apache.maven.plugins maven-enforcer-plugin ${enforcer.plugin.version} enforce-java validate enforce Java 17 or higher is required to compile this module [${java.version},) Maven 3.3.9 or higher is required to compile this module [${maven.version},) org.apache.maven.plugins maven-surefire-plugin org.apache.maven.plugins maven-failsafe-plugin de.thetaphi forbiddenapis org.apache.maven.plugins maven-checkstyle-plugin apache-release org.apache.rat apache-rat-plugin rat-excludes default-cli jacoco 1 org.jacoco jacoco-maven-plugin eval-tests 0.5C org.apache.maven.plugins maven-surefire-plugin ${maven.surefire.plugin} -Xmx4g **/*Test.java **/*Eval.java opennlp.tools.HighMemoryUsage high-memory-tests 1 org.apache.maven.plugins maven-surefire-plugin ${maven.surefire.plugin} -Xmx20g **/*Test.java **/*Eval.java opennlp.tools.HighMemoryUsage opennlp-tools opennlp-uima opennlp-brat-annotator opennlp-morfologik-addon opennlp-docs opennlp-distr opennlp-dl opennlp-dl-gpu apache-opennlp-2.3.3-src/rat-excludes0100644 0000000 0000000 00000005112 14523004075 020057 0ustar00rootroot0000000 0000000 src/test/resources/opennlp/tools/*/*.txt src/test/resources/opennlp/tools/*/*.sample src/test/resources/opennlp/tools/*/*.txt src/test/resources/opennlp/tools/*/*.train src/test/resources/opennlp/tools/parser/en_head_rules src/test/resources/opennlp/tools/parser/en_head_rules src/test/resources/opennlp/tools/parser/parser.train src/test/resources/opennlp/tools/parser/test.parse src/test/resources/opennlp/tools/postag/AnnotatedSentences.txt src/test/resources/opennlp/tools/sentdetect/Sentences.txt src/test/resources/opennlp/tools/tokenize/token.train src/main/java/opennlp/tools/ml/maxent/AllEnglishAffixes.txt src/test/resources/data/opennlp/maxent/io/rvfes-bug-data-broken.txt src/test/resources/data/opennlp/maxent/io/rvfes-bug-data-ok.txt src/test/resources/data/opennlp/maxent/real-valued-weights-training-data.txt src/test/resources/data/opennlp/maxent/repeat-weighting-training-data.txt src/test/resources/data/ppa/bitstrings src/test/resources/data/ppa/devset src/test/resources/data/ppa/test src/test/resources/data/ppa/training src/test/resources/data/ppa/NOTICE src/test/resources/opennlp/tools/doccat/DoccatSample.txt src/test/resources/opennlp/tools/formats/brat/voa-with-entities.ann src/test/resources/opennlp/tools/formats/brat/voa-with-entities.txt src/test/resources/opennlp/tools/formats/brat/voa-with-relations.ann src/test/resources/opennlp/tools/formats/brat/voa-with-relations.txt src/test/resources/opennlp/tools/languagemodel/sentences.txt src/test/resources/opennlp/tools/lemmatizer/trial.old.tsv src/test/resources/opennlp/tools/lemmatizer/output.txt lang/en/parser/en-head_rules lang/es/parser/es-head-rules src/test/resources/*.txt src/test/resources/*.info src/main/java/opennlp/tools/stemmer/snowball/*.java